!!!{"files":{"app.css":{"size":316980,"offset":"0"},"app.js":{"size":2388581,"offset":"316980"},"enhance.js":{"size":13839,"offset":"2705561"},"help.html":{"size":580,"offset":"2719400"},"help.js":{"size":176248,"offset":"2719980"},"i18n":{"files":{"ar.json":{"size":101471,"offset":"2979761"},"be.json":{"size":97899,"offset":"3081232"},"bg.json":{"size":99317,"offset":"3179131"},"bn.json":{"size":97901,"offset":"3278448"},"ca.json":{"size":97901,"offset":"3376349"},"cs.json":{"size":102834,"offset":"3474250"},"da.json":{"size":103349,"offset":"3577084"},"de.json":{"size":109953,"offset":"3680433"},"el.json":{"size":97855,"offset":"3790386"},"en.json":{"size":97901,"offset":"3888241"},"es.json":{"size":102776,"offset":"3986142"},"eu.json":{"size":97899,"offset":"4088918"},"fa.json":{"size":120218,"offset":"4186817"},"fr.json":{"size":113103,"offset":"4307035"},"hi.json":{"size":102905,"offset":"4420138"},"id.json":{"size":103316,"offset":"4523043"},"it.json":{"size":106267,"offset":"4626359"},"ja.json":{"size":126594,"offset":"4732626"},"ko.json":{"size":112258,"offset":"4859220"},"ml.json":{"size":97906,"offset":"4971478"},"ms.json":{"size":70678,"offset":"5069384"},"nl.json":{"size":104141,"offset":"5140062"},"no.json":{"size":98602,"offset":"5244203"},"oc.json":{"size":97901,"offset":"5342805"},"pl.json":{"size":107571,"offset":"5440706"},"pt-BR.json":{"size":107100,"offset":"5548277"},"pt.json":{"size":106389,"offset":"5655377"},"ro.json":{"size":102920,"offset":"5761766"},"ru.json":{"size":147066,"offset":"5864686"},"se.json":{"size":98149,"offset":"6011752"},"sk.json":{"size":97938,"offset":"6109901"},"sq.json":{"size":108407,"offset":"6207839"},"sr.json":{"size":99152,"offset":"6316246"},"ta.json":{"size":97977,"offset":"6415398"},"th.json":{"size":147950,"offset":"6513375"},"tr.json":{"size":108214,"offset":"6661325"},"uk.json":{"size":144030,"offset":"6769539"},"ur.json":{"size":97938,"offset":"6913569"},"vi.json":{"size":103676,"offset":"7011507"},"zh-TW.json":{"size":97746,"offset":"7115183"},"zh.json":{"size":99129,"offset":"7212929"}}},"i18n.js":{"size":83533,"offset":"2896228"},"icon.png":{"size":14492,"offset":"7312058"},"index.html":{"size":1401,"offset":"7326550"},"lib":{"files":{"codemirror":{"files":{"cm-addons.js":{"size":60479,"offset":"7327951"},"codemirror.js":{"size":410008,"offset":"7388430"},"markdown.js":{"size":42232,"offset":"7798438"},"meta.min.js":{"size":12792,"offset":"7840670"},"modes.min.js":{"size":562891,"offset":"7853462"},"overlay.js":{"size":3189,"offset":"8416353"},"vim.js":{"size":244963,"offset":"8419542"}}},"i18next.min.js":{"size":41341,"offset":"8664505"},"mathjax":{"files":{"a11y":{"files":{"assistive-mml.js":{"size":6460,"offset":"8705846"},"complexity.js":{"size":18034,"offset":"8712306"},"explorer.js":{"size":36348,"offset":"8730340"},"semantic-enrich.js":{"size":8084,"offset":"8766688"},"sre.js":{"size":337064,"offset":"8774772"}}},"output":{"files":{"chtml":{"files":{"fonts":{"files":{"tex.js":{"size":104800,"offset":"9111836"},"woff-v2":{"files":{"MathJax_AMS-Regular.woff":{"size":40808,"offset":"9216636"},"MathJax_Calligraphic-Bold.woff":{"size":9908,"offset":"9257444"},"MathJax_Calligraphic-Regular.woff":{"size":9600,"offset":"9267352"},"MathJax_Fraktur-Bold.woff":{"size":22340,"offset":"9276952"},"MathJax_Fraktur-Regular.woff":{"size":21480,"offset":"9299292"},"MathJax_Main-Bold.woff":{"size":34464,"offset":"9320772"},"MathJax_Main-Italic.woff":{"size":20832,"offset":"9355236"},"MathJax_Main-Regular.woff":{"size":34160,"offset":"9376068"},"MathJax_Math-BoldItalic.woff":{"size":19776,"offset":"9410228"},"MathJax_Math-Italic.woff":{"size":19360,"offset":"9430004"},"MathJax_Math-Regular.woff":{"size":19288,"offset":"9449364"},"MathJax_SansSerif-Bold.woff":{"size":15944,"offset":"9468652"},"MathJax_SansSerif-Italic.woff":{"size":14628,"offset":"9484596"},"MathJax_SansSerif-Regular.woff":{"size":12660,"offset":"9499224"},"MathJax_Script-Regular.woff":{"size":11852,"offset":"9511884"},"MathJax_Size1-Regular.woff":{"size":5792,"offset":"9523736"},"MathJax_Size2-Regular.woff":{"size":5464,"offset":"9529528"},"MathJax_Size3-Regular.woff":{"size":3244,"offset":"9534992"},"MathJax_Size4-Regular.woff":{"size":5148,"offset":"9538236"},"MathJax_Typewriter-Regular.woff":{"size":17604,"offset":"9543384"},"MathJax_Vector-Bold.woff":{"size":1116,"offset":"9560988"},"MathJax_Vector-Regular.woff":{"size":1136,"offset":"9562104"},"MathJax_Zero.woff":{"size":1368,"offset":"9563240"}}}}}}}}},"tex-chtml-full.js":{"size":1327555,"offset":"9564608"}}},"mermaid.min.js":{"size":900212,"offset":"10892163"},"moment.min.js":{"size":369009,"offset":"11792375"},"nspell.min.js":{"size":8612,"offset":"12161384"},"pdf.min.js":{"size":238205,"offset":"12169996"},"pdf.worker.min.js":{"size":1041789,"offset":"12408201"},"pixi.min.js":{"size":702155,"offset":"13449990"},"prism.min.js":{"size":561283,"offset":"14152145"},"purify.min.js":{"size":20392,"offset":"14713428"},"reveal":{"files":{"black.css":{"size":7336,"offset":"14733820"},"reveal.css":{"size":46732,"offset":"14741156"},"reveal.js":{"size":89699,"offset":"14787888"},"white.css":{"size":7323,"offset":"14877587"}}},"scrypt.js":{"size":18366,"offset":"14884910"},"turndown.js":{"size":10607,"offset":"14903276"}}},"main.js":{"size":54186,"offset":"14913883"},"package-lock.json":{"size":77,"offset":"14968069"},"package.json":{"size":320,"offset":"14968146"},"public":{"files":{"fonts":{"files":{"05b618077343fbbd92b7.ttf":{"size":155288,"offset":"14968466"},"2d5198822ab091ce4305.woff2":{"size":104332,"offset":"15123754"},"454577c22304619db035.ttf":{"size":161376,"offset":"15228086"},"4bb6ac751d1c5478ff3a.woff2":{"size":7876,"offset":"15389462"},"52ac8f3034507f1d9e53.ttf":{"size":191568,"offset":"15397338"},"535a6cf662596b3bd6a6.woff2":{"size":111708,"offset":"15588906"},"70cc7ff27245e82ad414.ttf":{"size":192740,"offset":"15700614"},"72505e6a122c6acd5471.woff2":{"size":104232,"offset":"15893354"},"853ff76f08786ae44ca0.woff":{"size":8616,"offset":"15997586"},"94f2f163d4b698242fef.otf":{"size":66800,"offset":"16006202"},"b5f0f109bc88052d4000.woff2":{"size":105804,"offset":"16073002"},"c8ba52b05a9ef10f4758.woff2":{"size":98868,"offset":"16178806"},"cb10ffd7684cd9836a05.woff2":{"size":106876,"offset":"16277674"},"cbe0ae49c52c920fd563.woff2":{"size":106108,"offset":"16384550"}}},"images":{"files":{"7877465e5f8197b19e8e.gif":{"size":46,"offset":"16490658"},"874d8b8e340f75575caa.svg":{"size":317,"offset":"16490704"},"93db313be3615c54d0a9.gif":{"size":120741,"offset":"16491021"}}}}},"sandbox":{"files":{"Adventurer":{"files":{"From plain-text note-taking.md":{"size":545,"offset":"16611762"},"From standard note-taking.md":{"size":642,"offset":"16612307"},"No prior experience.md":{"size":711,"offset":"16612949"}}},"Formatting":{"files":{"Blockquote.md":{"size":458,"offset":"16613660"},"Callout.md":{"size":2486,"offset":"16614118"},"Code block.md":{"size":671,"offset":"16616604"},"Comment.md":{"size":438,"offset":"16617275"},"Diagram.md":{"size":1393,"offset":"16617713"},"Embeds.md":{"size":181,"offset":"16619106"},"Emphasis.md":{"size":324,"offset":"16619287"},"Footnote.md":{"size":775,"offset":"16619611"},"Format your notes.md":{"size":458,"offset":"16620386"},"Heading.md":{"size":320,"offset":"16620844"},"Highlighting.md":{"size":100,"offset":"16621164"},"Horizontal divider.md":{"size":115,"offset":"16621264"},"Images.md":{"size":329,"offset":"16621379"},"Inline code.md":{"size":141,"offset":"16621708"},"Internal link.md":{"size":70,"offset":"16621849"},"Links.md":{"size":1283,"offset":"16621919"},"Lists.md":{"size":234,"offset":"16623202"},"Math.md":{"size":389,"offset":"16623436"},"Strikethrough.md":{"size":162,"offset":"16623825"},"Table.md":{"size":1240,"offset":"16623987"},"Task.md":{"size":626,"offset":"16625227"}}},"Guides":{"files":{"Create a vault.md":{"size":826,"offset":"16625853"},"Create your first note.md":{"size":1206,"offset":"16626679"},"Get started with Obsidian.md":{"size":611,"offset":"16627885"},"Link notes.md":{"size":2687,"offset":"16628496"}}},"Plugins make Obsidian special for you.md":{"size":1137,"offset":"16631183"},"Start Here.md":{"size":989,"offset":"16632320"},"Vault is just a local folder.md":{"size":1663,"offset":"16633309"}}},"sim.js":{"size":17679,"offset":"16634972"},"spellcheck":{"files":{"en_US.aff":{"size":3295,"offset":"16652651"},"en_US.dic":{"size":600811,"offset":"16655946"}}},"starter.html":{"size":583,"offset":"17256757"},"starter.js":{"size":210998,"offset":"17257340"},"worker.js":{"size":224625,"offset":"17468338"}}}/* Obsidian theme variables */ /* ------------------------ */ body { /* Animations */ --anim-duration-none: 0; --anim-duration-superfast: 70ms; --anim-duration-fast: 140ms; --anim-duration-moderate: 300ms; --anim-duration-slow: 560ms; --anim-motion-smooth: cubic-bezier(0.45, 0.05, 0.55, 0.95); --anim-motion-delay: cubic-bezier(0.65, 0.05, 0.36, 1); --anim-motion-jumpy: cubic-bezier(0.68, -0.55, 0.27, 1.55); --anim-motion-swing: cubic-bezier(0, 0.55, 0.45, 1); /* Blockquotes */ --blockquote-border-thickness: 2px; --blockquote-border-color: var(--interactive-accent); --blockquote-font-style: normal; --blockquote-color: inherit; --blockquote-background-color: transparent; /* Bold */ --bold-weight: var(--font-semibold); --bold-color: inherit; /* Borders */ --border-width: 1px; /* Buttons */ --button-radius: var(--input-radius); /* Callouts */ --callout-border-width: 0px; --callout-border-opacity: 0.25; --callout-padding: var(--size-4-3) var(--size-4-3) var(--size-4-3) var(--size-4-6); --callout-radius: var(--radius-s); --callout-blend-mode: var(--highlight-mix-blend-mode); --callout-title-color: inherit; --callout-title-padding: 0; --callout-title-size: inherit; --callout-content-padding: 0; --callout-content-background: transparent; --callout-bug: var(--color-red-rgb); --callout-default: var(--color-blue-rgb); --callout-error: var(--color-red-rgb); --callout-example: var(--color-purple-rgb); --callout-fail: var(--color-red-rgb); --callout-important: var(--color-cyan-rgb); --callout-info: var(--color-blue-rgb); --callout-question: var(--color-yellow-rgb); --callout-success: var(--color-green-rgb); --callout-summary: var(--color-cyan-rgb); --callout-tip: var(--color-cyan-rgb); --callout-todo: var(--color-blue-rgb); --callout-warning: var(--color-orange-rgb); --callout-quote: 158, 158, 158; /* Canvas */ --canvas-background: var(--background-primary); --canvas-card-label-color: var(--text-faint); --canvas-color-1: var(--color-red-rgb); --canvas-color-2: var(--color-orange-rgb); --canvas-color-3: var(--color-yellow-rgb); --canvas-color-4: var(--color-green-rgb); --canvas-color-5: var(--color-cyan-rgb); --canvas-color-6: var(--color-purple-rgb); --canvas-dot-pattern: var(--color-base-30); /* Checkboxes */ --checkbox-radius: var(--radius-s); --checkbox-size: var(--font-text-size); --checkbox-marker-color: var(--background-primary); --checkbox-color: var(--interactive-accent); --checkbox-color-hover: var(--interactive-accent-hover); --checkbox-border-color: var(--text-faint); --checkbox-border-color-hover: var(--text-muted); --checklist-done-decoration: line-through; --checklist-done-color: var(--text-muted); /* Code */ --code-white-space: pre-wrap; --code-size: var(--font-smaller); --code-background: var(--background-primary-alt); --code-normal: var(--text-muted); --code-comment: var(--text-faint); --code-function: var(--color-yellow); --code-important: var(--color-orange); --code-keyword: var(--color-pink); --code-operator: var(--color-red); --code-property: var(--color-cyan); --code-punctuation: var(--text-muted); --code-string: var(--color-green); --code-tag: var(--color-red); --code-value: var(--color-purple); /* Collapse icons */ --collapse-icon-color: var(--text-faint); --collapse-icon-color-collapsed: var(--text-accent); /* Cursor */ --cursor: default; --cursor-link: pointer; /* Dialogs - e.g. small modals, confirmations */ --dialog-width: 560px; --dialog-max-width: 80vw; --dialog-max-height: 85vh; /* Dividers — between panes */ --divider-color: var(--background-modifier-border); --divider-color-hover: var(--interactive-accent); --divider-width: 1px; --divider-width-hover: 3px; --divider-vertical-height: calc(100% - var(--header-height)); /* Dragging */ --drag-ghost-background: rgba(0, 0, 0, 0.85); --drag-ghost-text-color: #fff; /* Embeds */ --embed-max-height: 4000px; --embed-canvas-max-height: 400px; --embed-background: inherit; --embed-border-left: 2px solid var(--interactive-accent); --embed-border-right: none; --embed-border-top: none; --embed-border-bottom: none; --embed-padding: 0 0 0 var(--size-4-6); --embed-font-style: inherit; /* Blocks */ --embed-block-shadow-hover: 0 0 0 1px var(--background-modifier-border), inset 0 0 0 1px var(--background-modifier-border); /* File layout */ --file-line-width: 700px; --file-folding-offset: 24px; --file-margins: var(--size-4-8); --file-header-font-size: var(--font-ui-small); --file-header-font-weight: 400; --file-header-border: var(--border-width) solid transparent; --file-header-justify: center; /* Relative font sizes */ --font-smallest: 0.8em; --font-smaller: 0.875em; --font-small: 0.933em; /* UI font sizes */ --font-ui-smaller: 12px; --font-ui-small: 13px; --font-ui-medium: 15px; --font-ui-large: 20px; /* Font weights */ --font-thin: 100; --font-extralight: 200; --font-light: 300; --font-normal: 400; --font-medium: 500; --font-semibold: 600; --font-bold: 700; --font-extrabold: 800; --font-black: 900; /* Footnotes */ --footnote-size: var(--font-smaller); /* Graphs */ --graph-controls-width: 240px; --graph-text: var(--text-normal); --graph-line: var(--color-base-35, var(--background-modifier-border-focus)); --graph-node: var(--text-muted); --graph-node-unresolved: var(--text-faint); --graph-node-focused: var(--text-accent); --graph-node-tag: var(--color-green); --graph-node-attachment: var(--color-yellow); /* Headings */ --heading-formatting: var(--text-faint); --h1-color: inherit; --h2-color: inherit; --h3-color: inherit; --h4-color: inherit; --h5-color: inherit; --h6-color: inherit; --h1-font: inherit; --h2-font: inherit; --h3-font: inherit; --h4-font: inherit; --h5-font: inherit; --h6-font: inherit; --h1-line-height: 1.2; --h2-line-height: 1.2; --h3-line-height: 1.3; --h4-line-height: 1.4; --h5-line-height: var(--line-height-normal); --h6-line-height: var(--line-height-normal); --h1-size: 2em; --h2-size: 1.6em; --h3-size: 1.37em; --h4-size: 1.25em; --h5-size: 1.12em; --h6-size: 1.12em; --h1-style: normal; --h2-style: normal; --h3-style: normal; --h4-style: normal; --h5-style: normal; --h6-style: normal; --h1-variant: normal; --h2-variant: normal; --h3-variant: normal; --h4-variant: normal; --h5-variant: normal; --h6-variant: normal; --h1-weight: 700; --h2-weight: 600; --h3-weight: 600; --h4-weight: 600; --h5-weight: 600; --h6-weight: 600; /* View header */ --header-height: 40px; /* Horizontal rules */ --hr-color: var(--background-modifier-border); --hr-thickness: 2px; /* Icons */ --icon-size: var(--icon-m); --icon-stroke: var(--icon-m-stroke-width); --icon-xs: 14px; --icon-s: 16px; --icon-m: 18px; --icon-l: 18px; --icon-xl: 32px; --icon-xs-stroke-width: 2px; --icon-s-stroke-width: 2px; --icon-m-stroke-width: 1.75px; --icon-l-stroke-width: 1.75px; --icon-xl-stroke-width: 1.25px; --icon-color: var(--text-muted); --icon-color-hover: var(--text-muted); --icon-color-active: var(--text-accent); --icon-color-focused: var(--text-normal); --icon-opacity: 0.85; --icon-opacity-hover: 1; --icon-opacity-active: 1; --clickable-icon-radius: var(--radius-s); /* Indentation guide */ --indentation-guide-width: 1px; --indentation-guide-color: rgba(var(--mono-rgb-100), 0.12); --indentation-guide-color-active: rgba(var(--mono-rgb-100), 0.3); /* Inline title */ --inline-title-color: var(--h1-color); --inline-title-font: var(--h1-font); --inline-title-line-height: var(--h1-line-height); --inline-title-size: var(--h1-size); --inline-title-style: var(--h1-style); --inline-title-variant: var(--h1-variant); --inline-title-weight: var(--h1-weight); /* Inputs */ --input-height: 30px; --input-radius: 5px; --input-font-weight: var(--font-normal); --input-border-width: 1px; /* Italic */ --italic-color: inherit; /* Z-index */ --layer-cover: 5; --layer-sidedock: 10; --layer-status-bar: 15; --layer-popover: 30; --layer-slides: 45; --layer-modal: 50; --layer-notice: 60; --layer-menu: 65; --layer-tooltip: 70; --layer-dragged-item: 80; /* Line heights */ --line-height-normal: 1.5; --line-height-tight: 1.3; /* Links */ --link-color: var(--text-accent); --link-color-hover: var(--text-accent-hover); --link-decoration: underline; --link-decoration-hover: underline; --link-decoration-thickness: auto; --link-external-color: var(--text-accent); --link-external-color-hover: var(--text-accent-hover); --link-external-decoration: underline; --link-external-decoration-hover: underline; --link-external-filter: none; --link-unresolved-color: var(--text-accent); --link-unresolved-opacity: 0.7; --link-unresolved-filter: none; --link-unresolved-decoration-style: solid; --link-unresolved-decoration-color: hsla(var(--interactive-accent-hsl), 0.3); /* Lists */ --list-indent: 2em; --list-spacing: 0.075em; --list-marker-color: var(--text-faint); --list-marker-color-hover: var(--text-muted); --list-marker-color-collapsed: var(--text-accent); --list-bullet-border: none; --list-bullet-radius: 50%; --list-bullet-size: 0.3em; --list-bullet-transform: none; --list-numbered-style: decimal; /* File navigator */ --nav-item-size: var(--font-ui-small); --nav-item-color: var(--text-muted); --nav-item-color-hover: var(--text-normal); --nav-item-color-active: var(--text-normal); --nav-item-color-selected: var(--text-normal); --nav-item-color-highlighted: var(--text-accent-hover); --nav-item-background-hover: var(--background-modifier-hover); --nav-item-background-active: var(--background-modifier-hover); --nav-item-background-selected: hsla(var(--color-accent-hsl), 0.15); --nav-item-padding: var(--size-4-1) var(--size-4-2); --nav-item-parent-padding: var(--nav-item-padding); --nav-item-children-padding-left: var(--size-4-2); --nav-item-children-margin-left: var(--size-4-3); --nav-item-weight: inherit; --nav-item-weight-hover: inherit; --nav-item-weight-active: inherit; --nav-item-white-space: nowrap; --nav-indentation-guide-width: var(--indentation-guide-width); --nav-indentation-guide-color: var(--indentation-guide-color); --nav-collapse-icon-color: var(--collapse-icon-color); --nav-collapse-icon-color-collapsed: var(--text-faint); /* Modals - e.g. settings, community themes, community plugins */ --modal-background: var(--background-primary); --modal-width: 90vw; --modal-height: 85vh; --modal-max-width: 1100px; --modal-max-height: 1000px; --modal-max-width-narrow: 800px; --modal-border-width: var(--border-width); --modal-border-color: var(--color-base-40, var(--background-modifier-border-focus)); --modal-radius: var(--radius-l); --modal-community-sidebar-width: 280px; /* Popovers - file previews */ --popover-width: 450px; --popover-height: 400px; --popover-max-height: 70vh; --popover-pdf-width: 600px; --popover-pdf-height: 800px; --popover-font-size: var(--font-text-size); /* Prompts - e.g. quick switcher, command palette */ --prompt-width: 700px; --prompt-max-width: 80vw; --prompt-max-height: 70vh; --prompt-border-width: var(--border-width); --prompt-border-color: var(--color-base-40, var(--background-modifier-border-focus)); /* Radiuses */ --radius-s: 4px; --radius-m: 8px; --radius-l: 10px; --radius-xl: 16px; /* Ribbon */ --ribbon-background: var(--background-secondary); --ribbon-background-collapsed: var(--background-primary); --ribbon-width: 44px; --ribbon-padding: var(--size-4-2) var(--size-4-1) var(--size-4-3); /* Scrollbars */ --scrollbar-active-thumb-bg: rgba(var(--mono-rgb-100), 0.2); --scrollbar-bg: rgba(var(--mono-rgb-100), 0.05); --scrollbar-thumb-bg: rgba(var(--mono-rgb-100), 0.1); /* Search */ --search-clear-button-color: var(--text-muted); --search-clear-button-size: 13px; --search-icon-color: var(--text-muted); --search-icon-size: 18px; --search-result-background: var(--background-primary); /* Layout sizing - for padding and margins */ --size-2-1: 2px; --size-2-2: 4px; --size-2-3: 6px; --size-4-1: 4px; --size-4-2: 8px; --size-4-3: 12px; --size-4-4: 16px; --size-4-5: 20px; --size-4-6: 24px; --size-4-8: 32px; --size-4-9: 36px; --size-4-12: 48px; --size-4-16: 64px; --size-4-18: 72px; /* Sidebar */ --sidebar-markdown-font-size: calc(var(--font-text-size) * 0.9); --sidebar-tab-text-display: none; /* Sliders */ --slider-thumb-border-width: 1px; --slider-thumb-border-color: var(--background-modifier-border-hover); --slider-thumb-height: 18px; --slider-thumb-width: 18px; --slider-thumb-y: -6px; --slider-thumb-radius: 50%; --slider-s-thumb-size: 15px; --slider-s-thumb-position: -5px; --slider-track-background: var(--background-modifier-border); --slider-track-height: 3px; /* Status bar */ --status-bar-background: var(--background-secondary); --status-bar-border-color: var(--divider-color); --status-bar-border-width: 1px 0 0 1px; --status-bar-font-size: var(--font-ui-smaller); --status-bar-text-color: var(--text-muted); --status-bar-position: fixed; --status-bar-radius: var(--radius-m) 0 0 0; --status-bar-scroll-padding: calc(var(--status-bar-font-size) + 18px); /* Swatch for color inputs */ --swatch-radius: 14px; --swatch-height: 24px; --swatch-width: 24px; --swatch-shadow: inset 0 0 0 1px rgba(var(--mono-rgb-100), 0.15); /* Tabs */ --tab-background-active: var(--background-primary); --tab-text-color: var(--text-faint); --tab-text-color-active: var(--text-muted); --tab-text-color-focused: var(--text-muted); --tab-text-color-focused-active: var(--text-muted); --tab-text-color-focused-highlighted: var(--text-accent); --tab-text-color-focused-active-current: var(--text-normal); --tab-font-size: var(--font-ui-small); --tab-font-weight: inherit; --tab-container-background: var(--background-secondary); --tab-divider-color: var(--background-modifier-border-hover); --tab-outline-color: var(--divider-color); --tab-outline-width: 1px; --tab-curve: 6px; --tab-radius: var(--radius-s); --tab-radius-active: 6px 6px 0 0; --tab-width: 200px; --tab-max-width: 320px; /* Stacked tabs */ --tab-stacked-pane-width: 700px; --tab-stacked-header-width: var(--header-height); --tab-stacked-font-size: var(--font-ui-small); --tab-stacked-font-weight: 400; --tab-stacked-text-align: left; --tab-stacked-text-transform: rotate(0deg); --tab-stacked-text-writing-mode: vertical-lr; --tab-stacked-shadow: -8px 0 8px 0 rgba(0, 0, 0, 0.05); /* Tables */ --table-background: transparent; --table-border-width: 1px; --table-border-color: var(--background-modifier-border); --table-white-space: normal; --table-header-background: var(--table-background); --table-header-background-hover: inherit; --table-header-border-width: var(--table-border-width); --table-header-border-color: var(--table-border-color); --table-header-font: inherit; --table-header-size: var(--font-text-size); --table-header-weight: var(--bold-weight); --table-header-color: var(--text-normal); --table-text-size: inherit; --table-text-color: inherit; --table-column-max-width: none; --table-column-alt-background: var(--table-background); --table-column-first-border-width: var(--table-border-width); --table-column-last-border-width: var(--table-border-width); --table-row-background-hover: var(--table-background); --table-row-alt-background: var(--table-background); --table-row-last-border-width: var(--table-border-width); /* Tags */ --tag-size: var(--font-smaller); --tag-color: var(--text-accent); --tag-color-hover: var(--text-accent); --tag-decoration: none; --tag-decoration-hover: none; --tag-background: hsla(var(--interactive-accent-hsl), 0.1); --tag-background-hover: hsla(var(--interactive-accent-hsl), 0.2); --tag-border-color: hsla(var(--interactive-accent-hsl), 0.15); --tag-border-color-hover: hsla(var(--interactive-accent-hsl), 0.15); --tag-border-width: 0px; --tag-padding-x: 0.65em; --tag-padding-y: 0.25em; --tag-radius: 2em; /* Window frame */ --titlebar-background: var(--background-secondary); --titlebar-background-focused: var(--background-secondary-alt); --titlebar-border-width: 0px; --titlebar-border-color: var(--background-modifier-border); --titlebar-text-color: var(--text-muted); --titlebar-text-color-focused: var(--text-normal); --titlebar-text-weight: var(--font-bold); /* Toggles */ --toggle-border-width: 2px; --toggle-width: 40px; --toggle-radius: 18px; --toggle-thumb-color: white; --toggle-thumb-radius: 18px; --toggle-thumb-height: 18px; --toggle-thumb-width: 18px; --toggle-s-border-width: 2px; --toggle-s-width: 34px; --toggle-s-thumb-height: 15px; --toggle-s-thumb-width: 15px; /* Vault name */ --vault-name-font-size: var(--font-ui-small); --vault-name-font-weight: var(--font-medium); --vault-name-color: var(--text-normal); /* Workspace */ --workspace-background-translucent: rgba(var(--mono-rgb-0), 0.6); /* Color mappings ------------------------ */ /* Accent HSL values */ --accent-h: 254; --accent-s: 80%; --accent-l: 68%; /* Backgrounds */ --background-primary: var(--color-base-00); --background-primary-alt: var(--color-base-10); --background-secondary: var(--color-base-20); --background-modifier-hover: rgba(var(--mono-rgb-100), 0.075); --background-modifier-active-hover: hsla(var(--interactive-accent-hsl), 0.15); --background-modifier-border: var(--color-base-30); --background-modifier-border-hover: var(--color-base-35); --background-modifier-border-focus: var(--color-base-40); --background-modifier-error-rgb: var(--color-red-rgb); --background-modifier-error: var(--color-red); --background-modifier-error-hover: var(--color-red); --background-modifier-success-rgb: var(--color-green-rgb); --background-modifier-success: var(--color-green); --background-modifier-message: rgba(0, 0, 0, 0.9); /* Inputs */ --background-modifier-form-field: var(--color-base-00); /* Text */ --text-normal: var(--color-base-100); --text-muted: var(--color-base-70); --text-faint: var(--color-base-50); --text-on-accent: white; --text-on-accent-inverted: black; --text-error: var(--color-red); --text-success: var(--color-green); --text-selection: hsla(var(--color-accent-hsl), 0.2); --text-accent: var(--color-accent); --text-accent-hover: var(--color-accent-2); --interactive-normal: var(--color-base-00); --interactive-hover: var(--color-base-10); --interactive-accent-hsl: var(--color-accent-hsl); --interactive-accent: var(--color-accent-1); --interactive-accent-hover: var(--color-accent-2); } .theme-light { color-scheme: light; --highlight-mix-blend-mode: darken; --mono-rgb-0: 255, 255, 255; --mono-rgb-100: 0, 0, 0; --color-red-rgb: 233, 49, 71; --color-red: #E93147; --color-green-rgb: 8, 185, 78; --color-green: #08B94E; --color-orange-rgb: 236, 117, 0; --color-orange: #ec7500; --color-yellow-rgb: 224, 172, 0; --color-yellow: #e0ac00; --color-cyan-rgb: 0, 191, 188; --color-cyan: #00bfbc; --color-blue-rgb: 8, 109, 221; --color-blue: #086DDD; --color-purple-rgb: 120, 82, 238; --color-purple: #7852EE; --color-pink-rgb: 213, 57, 132; --color-pink: #D53984; --color-base-00: #ffffff; --color-base-05: #fcfcfc; --color-base-10: #fafafa; --color-base-20: #f6f6f6; --color-base-25: #e3e3e3; --color-base-30: #e0e0e0; --color-base-35: #d4d4d4; --color-base-40: #bdbdbd; --color-base-50: #ababab; --color-base-60: #707070; --color-base-70: #5a5a5a; --color-base-100: #222222; --color-accent-hsl: var(--accent-h), var(--accent-s), var(--accent-l); --color-accent: hsl(var(--accent-h), var(--accent-s), var(--accent-l)); --color-accent-1: hsl(var(--accent-h), var(--accent-s), calc(var(--accent-l) + 2.5%)); --color-accent-2: hsl(var(--accent-h), var(--accent-s), calc(var(--accent-l) + 5%)); --background-secondary-alt: var(--color-base-05); --background-modifier-box-shadow: rgba(0, 0, 0, 0.1); --background-modifier-cover: rgba(220, 220, 220, 0.4); --text-highlight-bg: rgba(255, 208, 0, 0.4); --text-highlight-bg-active: rgba(255, 128, 0, 0.4); --input-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.12), 0 2px 3px 0 rgba(0,0,0,.05), 0 1px 1.5px 0 rgba(0,0,0,.03), 0 1px 2px 0 rgba(0,0,0,.04), 0 0 0 0 transparent; --input-shadow-hover: inset 0 0 0 1px rgba(0, 0, 0, 0.17), 0 2px 3px 0 rgba(0,0,0,.1), 0 1px 1.5px 0 rgba(0,0,0,.03), 0 1px 2px 0 rgba(0,0,0,.04), 0 0 0 0 transparent; --shadow-s: 0px 1px 2px rgba(0, 0, 0, 0.028), 0px 3.4px 6.7px rgba(0, 0, 0, .042), 0px 15px 30px rgba(0, 0, 0, .07); --shadow-l: 0px 1.8px 7.3px rgba(0, 0, 0, 0.071), 0px 6.3px 24.7px rgba(0, 0, 0, 0.112), 0px 30px 90px rgba(0, 0, 0, 0.2); } .theme-dark { color-scheme: dark; --highlight-mix-blend-mode: lighten; --mono-rgb-0: 0, 0, 0; --mono-rgb-100: 255, 255, 255; --color-red-rgb: 251, 70, 76; --color-red: #fb464c; --color-orange-rgb: 233, 151, 63; --color-orange: #E9973F; --color-yellow-rgb: 224, 222, 113; --color-yellow: #E0DE71; --color-green-rgb: 68, 207, 110; --color-green: #44CF6E; --color-cyan-rgb: 83, 223, 221; --color-cyan: #53DFDD; --color-blue-rgb: 2, 122, 255; --color-blue: #027aff; --color-purple-rgb: 168, 130, 255; --color-purple: #a882ff; --color-pink-rgb: 250, 153, 205; --color-pink: #FA99CD; --color-base-00: #1e1e1e; --color-base-10: #242424; --color-base-20: #262626; --color-base-25: #2a2a2a; --color-base-30: #363636; --color-base-35: #3F3F3F; --color-base-40: #555; --color-base-50: #666; --color-base-60: #999; --color-base-70: #bababa; --color-base-100: #dadada; --color-accent-hsl: var(--accent-h), var(--accent-s), var(--accent-l); --color-accent: hsl(var(--accent-h), var(--accent-s), var(--accent-l)); --color-accent-1: hsl(var(--accent-h), var(--accent-s), calc(var(--accent-l) - 3.8%)); --color-accent-2: hsl(var(--accent-h), var(--accent-s), calc(var(--accent-l) + 3.8%)); --background-modifier-form-field: var(--color-base-25); --background-secondary-alt: var(--color-base-30); --interactive-normal: var(--color-base-30); --interactive-hover: var(--color-base-35); --background-modifier-box-shadow: rgba(0, 0, 0, 0.3); --background-modifier-cover: rgba(10, 10, 10, 0.4); --text-highlight-bg: rgba(255, 208, 0, 0.4); --text-highlight-bg-active: rgba(255, 128, 0, 0.4); --text-selection: hsla(var(--interactive-accent-hsl), 0.25); --input-shadow: inset 0 0.5px 0.5px 0.5px rgba(255, 255, 255, 0.09), 0 2px 4px 0 rgba(0,0,0,.15), 0 1px 1.5px 0 rgba(0,0,0,.1), 0 1px 2px 0 rgba(0,0,0,.2), 0 0 0 0 transparent; --input-shadow-hover: inset 0 0.5px 1px 0.5px rgba(255, 255, 255, 0.16), 0 2px 3px 0 rgba(0,0,0,.3), 0 1px 1.5px 0 rgba(0,0,0,.2), 0 1px 2px 0 rgba(0,0,0,.4), 0 0 0 0 transparent; --shadow-s: 0px 1px 2px rgba(0, 0, 0, 0.121), 0px 3.4px 6.7px rgba(0, 0, 0, 0.179), 0px 15px 30px rgba(0, 0, 0, 0.3); --shadow-l: 0px 1.8px 7.3px rgba(0, 0, 0, 0.071), 0px 6.3px 24.7px rgba(0, 0, 0, 0.112), 0px 30px 90px rgba(0, 0, 0, 0.2); } iframe { color-scheme: normal; } @media print { .theme-dark { --highlight-mix-blend-mode: darken; } } @font-face { font-family: 'Avenir Next'; font-weight: normal; font-style: normal; font-display: swap; src: url(public/fonts/94f2f163d4b698242fef.otf); } @font-face { font-family: 'Inter'; font-style: normal; font-weight: 200; font-display: swap; src: url(public/fonts/72505e6a122c6acd5471.woff2) format('woff2'); } @font-face { font-family: 'Inter'; font-style: normal; font-weight: 300; font-display: swap; src: url(public/fonts/2d5198822ab091ce4305.woff2) format('woff2'); } @font-face { font-family: 'Inter'; font-weight: 400; font-style: normal; font-display: swap; src: url(public/fonts/c8ba52b05a9ef10f4758.woff2); } @font-face { font-family: 'Inter'; font-weight: 400; font-style: italic; font-display: swap; src: url(public/fonts/cb10ffd7684cd9836a05.woff2); } @font-face { font-family: 'Inter'; font-weight: 600; font-style: normal; font-display: swap; src: url(public/fonts/b5f0f109bc88052d4000.woff2); } @font-face { font-family: 'Inter'; font-weight: 800; font-style: normal; font-display: swap; src: url(public/fonts/cbe0ae49c52c920fd563.woff2); } @font-face { font-family: 'Inter'; font-weight: 800; font-style: italic; font-display: swap; src: url(public/fonts/535a6cf662596b3bd6a6.woff2); } @font-face { font-family: 'Source Code Pro'; font-weight: normal; font-style: normal; font-display: swap; src: url(public/fonts/70cc7ff27245e82ad414.ttf); } @font-face { font-family: 'Source Code Pro'; font-weight: normal; font-style: italic; font-display: swap; src: url(public/fonts/454577c22304619db035.ttf); } @font-face { font-family: 'Source Code Pro'; font-weight: bold; font-style: normal; font-display: swap; src: url(public/fonts/52ac8f3034507f1d9e53.ttf); } @font-face { font-family: 'Source Code Pro'; font-weight: bold; font-style: italic; font-display: swap; src: url(public/fonts/05b618077343fbbd92b7.ttf); } @font-face { font-family: 'Flow Circular'; font-display: swap; src: url(public/fonts/4bb6ac751d1c5478ff3a.woff2); } @font-face { font-family: '??'; unicode-range: U+0; } body { --font-default: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Inter", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Microsoft YaHei Light", sans-serif; --font-monospace-default: Menlo, SFMono-Regular, Consolas, "Roboto Mono", 'Source Code Pro', monospace; --font-interface-override: '??'; --font-interface-theme: '??'; --font-interface: var(--font-interface-override), var(--font-interface-theme), var(--default-font, '??'), var(--font-default); --font-text-override: '??'; --font-text-theme: '??'; --font-text: var(--font-text-override), var(--font-text-theme), var(--font-interface); --font-monospace-override: '??'; --font-monospace-theme: '??'; --font-monospace: var(--font-monospace-override), var(--font-monospace-theme), var(--font-monospace-default); --font-text-size: 16px; --font-mermaid: var(--font-text); } @media print { html, body { padding-top: 0 !important; overflow: auto !important; height: auto !important; } iframe, .titlebar, .app-container, .progress-bar, .popover, .markdown-embed-link { display: none !important; } body > :not(.print) { display: none !important; } .print .markdown-preview-view { -webkit-print-color-adjust: exact; color: initial; } .print .markdown-preview-view mark { color: initial; } .print .markdown-preview-view .frontmatter-container { display: none; } .print .markdown-preview-view .markdown-embed-content { max-height: none; overflow: visible; } .print .markdown-preview-view .callout-content { display: inherit !important; } .print .external-link { background: none; padding-right: 0; } * { text-shadow: none !important; } webview { display: none; } ::-webkit-scrollbar { display: none; } body { --font-text: 'Inter' !important; } } * { box-sizing: border-box; } html, body { margin: 0; padding: 0; height: 100%; width: 100%; overflow: hidden; } body { text-rendering: optimizeLegibility; font-family: var(--font-interface); line-height: var(--line-height-tight); font-size: var(--font-ui-medium); background-color: var(--background-primary); color: var(--text-normal); -webkit-tap-highlight-color: rgba(255, 255, 255, 0); } body.is-translucent { background-color: transparent; } body { user-select: none; -webkit-user-select: none; overflow: hidden; } body [contenteditable="true"], body [contenteditable=""] { user-select: text; -webkit-user-select: text; } body.is-grabbing, body.is-grabbing *:not(.workspace-leaf-resize-handle) { cursor: -moz-grabbing !important; cursor: -webkit-grabbing !important; cursor: grabbing !important; } body.is-grabbing iframe:not(.is-controlled), body.is-grabbing webview { pointer-events: none; } .app-container { display: flex; height: 100%; width: 100%; position: relative; flex-direction: column; } .app-container.no-transition * { transition: none !important; } .horizontal-main-container { width: 100%; display: flex; overflow: hidden; flex: 1 0 0; } :focus { outline: none; } .is-text-garbled * { font-family: 'Flow Circular', sans-serif !important; line-height: 1.45em !important; } /* START OF ORIGINAL FILE, DO NOT MODIFY */ /* BASICS */ .CodeMirror { /* Set height, width, borders, and global font properties here */ font-family: monospace; height: 300px; color: black; direction: ltr; } /* PADDING */ .CodeMirror-lines { padding: 4px 0; /* Vertical padding around content */ } .CodeMirror .CodeMirror-line, .CodeMirror .CodeMirror-line-like { padding: 0 4px; /* Horizontal padding of content */ } .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { background-color: white; /* The little square between H and V scrollbars */ } /* GUTTER */ .CodeMirror-gutters { border-right: 1px solid #ddd; background-color: #f7f7f7; white-space: nowrap; } .CodeMirror-linenumber { padding: 0 3px 0 5px; min-width: 20px; text-align: right; color: #999; white-space: nowrap; } .CodeMirror-guttermarker { color: black; } .CodeMirror-guttermarker-subtle { color: #999; } /* CURSOR */ .CodeMirror-cursor { border-left: 1px solid black; border-right: none; width: 0; } /* Shown when moving in bi-directional text */ .CodeMirror div.CodeMirror-secondarycursor { border-left: 1px solid silver; } .cm-fat-cursor .CodeMirror-cursor { width: auto; border: 0 !important; background: var(--interactive-accent); color: var(--text-on-accent); } .cm-fat-cursor div.CodeMirror-cursors { z-index: 1; } .cm-fat-cursor-mark { background-color: rgba(20, 255, 20, 0.5); -webkit-animation: blink 1.06s steps(1) infinite; -moz-animation: blink 1.06s steps(1) infinite; animation: blink 1.06s steps(1) infinite; } .cm-animate-fat-cursor { width: auto; border: 0; -webkit-animation: blink 1.06s steps(1) infinite; -moz-animation: blink 1.06s steps(1) infinite; animation: blink 1.06s steps(1) infinite; background: var(--interactive-accent); color: var(--text-on-accent); } @-moz-keyframes blink { 50% { background-color: transparent; } } @-webkit-keyframes blink { 50% { background-color: transparent; } } @keyframes blink { 50% { background-color: transparent; } } /* Can style cursor different in overwrite (non-insert) mode */ .cm-tab { display: inline-block; text-decoration: inherit; } .CodeMirror-rulers { position: absolute; left: 0; right: 0; top: -50px; bottom: 0; overflow: hidden; } .CodeMirror-ruler { border-left: 1px solid #ccc; top: 0; bottom: 0; position: absolute; } /* DEFAULT THEME */ .cm-negative { color: var(--text-error); } .cm-positive { color: var(--text-success); } .cm-strikethrough { text-decoration: line-through; } .cm-invalidchar { color: var(--text-error); } .CodeMirror-composing { border-bottom: 2px solid; } /* Default styles for common addons */ div.CodeMirror span.CodeMirror-matchingbracket { color: #0b0; } div.CodeMirror span.CodeMirror-nonmatchingbracket { color: #a22; } .CodeMirror-matchingtag { background: rgba(255, 150, 0, 0.3); } .CodeMirror-activeline-background { background: #e8f2ff; } /* STOP */ /* The rest of this file contains styles related to the mechanics of the editor. You probably shouldn't touch them. */ .CodeMirror { position: relative; overflow: hidden; background: white; } .CodeMirror-scroll { overflow: scroll !important; /* Things will break if this is overridden */ /* 50px is the magic margin used to hide the element's real scrollbars */ /* See overflow: hidden in .CodeMirror */ margin-bottom: -50px; margin-right: -50px; padding-bottom: 50px; height: 100%; outline: none; /* Prevent dragging from highlighting the element */ position: relative; } .CodeMirror-sizer { position: relative; border-right: 50px solid transparent; } /* The fake, visible scrollbars. Used to force redraw during scrolling before actual scrolling happens, thus preventing shaking and flickering artifacts. */ .CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { position: absolute; z-index: 6; display: none; outline: none; } .CodeMirror-vscrollbar { right: 0; top: 0; overflow-x: hidden; overflow-y: scroll; } .CodeMirror-hscrollbar { bottom: 0; left: 0; overflow-y: hidden; overflow-x: scroll; } .CodeMirror-scrollbar-filler { right: 0; bottom: 0; } .CodeMirror-gutter-filler { left: 0; bottom: 0; } .CodeMirror-gutters { position: absolute; left: 0; top: 0; min-height: 100%; z-index: 3; } .CodeMirror-gutter { white-space: normal; height: 100%; display: inline-block; vertical-align: top; margin-bottom: -50px; } .CodeMirror-gutter-wrapper { position: absolute; z-index: 4; background: none !important; border: none !important; } .CodeMirror-gutter-background { position: absolute; top: 0; bottom: 0; z-index: 4; } .CodeMirror-gutter-elt { position: absolute; cursor: default; z-index: 4; } .CodeMirror-gutter-wrapper ::selection { background-color: transparent; } .CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent; } .CodeMirror-lines { cursor: text; min-height: 1px; /* prevents collapsing before first draw */ } .CodeMirror .CodeMirror-line, .CodeMirror .CodeMirror-line-like { /* Reset some styles that the rest of the page might have set */ -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; border-width: 0; background: transparent; font-family: inherit; margin: 0; white-space: pre; word-wrap: normal; line-height: inherit; color: inherit; z-index: 2; position: relative; overflow: visible; -webkit-tap-highlight-color: transparent; -webkit-font-variant-ligatures: contextual; font-variant-ligatures: contextual; } .CodeMirror-wrap .CodeMirror-line, .CodeMirror-wrap .CodeMirror-line-like { word-wrap: break-word; white-space: pre-wrap; word-break: normal; } .CodeMirror-linebackground { position: absolute; left: 0; right: 0; top: 0; bottom: 0; z-index: 0; } .CodeMirror-linewidget { position: relative; z-index: 2; padding: 0.1px; /* Force widget margins to stay inside of the container */ } .CodeMirror-rtl pre { direction: rtl; } .CodeMirror-code { outline: none; } /* Force content-box sizing for the elements where we expect it */ .CodeMirror-scroll, .CodeMirror-sizer, .CodeMirror-gutter, .CodeMirror-gutters, .CodeMirror-linenumber { -moz-box-sizing: content-box; box-sizing: content-box; } .CodeMirror-measure { position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; } .CodeMirror-cursor { position: absolute; pointer-events: none; } .CodeMirror-measure pre { position: static; } div.CodeMirror-cursors { visibility: hidden; position: relative; z-index: 3; } div.CodeMirror-dragcursors { visibility: visible; } .CodeMirror-focused div.CodeMirror-cursors { visibility: visible; } .CodeMirror-selected { background: #d9d9d9; } .CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } .CodeMirror-crosshair { cursor: crosshair; } .CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; } .CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; } .cm-searching { background-color: #ffa; background-color: rgba(255, 255, 0, 0.4); } /* Used to force a border model for a node */ .cm-force-border { padding-right: 0.1px; } @media print { /* Hide the cursor when printing */ .CodeMirror div.CodeMirror-cursors { visibility: hidden; } } /* See issue #2901 */ .cm-tab-wrap-hack:after { content: ''; } /* Help users use markselection to safely style text background */ span.CodeMirror-selectedtext { background: none; } /* END OF ORIGINAL FILE, DO NOT MODIFY */ /* START OF CUSTOM DEFINED STYLES FOR OBSIDIAN */ .markdown-source-view { font-size: var(--font-text-size); font-family: var(--font-text); } .markdown-source-view.mod-cm5 { height: 100%; } .workspace-leaf-content.is-read-mode .markdown-source-view { z-index: 0; } .CodeMirror { height: 100%; font-family: unset; color: unset; } .markdown-source-view.is-readable-line-width .CodeMirror { max-width: var(--file-line-width); margin-left: auto; margin-right: auto; } .CodeMirror-lines { padding: 20px 0; } .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { background-color: transparent; } .CodeMirror-gutters { border-right: unset; background-color: unset; } .CodeMirror-guttermarker-subtle { color: var(--text-faint); } .CodeMirror-cursor { border-left: 1px solid var(--text-normal); } .CodeMirror-cursor, .cm-s-obsidian .cm-cursor, .cm-s-obsidian .cm-dropCursor { border-left-color: var(--text-normal); } .cm-tab { display: unset; } .CodeMirror-activeline-background { background: transparent; } .CodeMirror { background: unset; } .CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { z-index: unset; outline: unset; } .CodeMirror-vscrollbar { outline: 0; } .CodeMirror-hscrollbar { outline: 0; z-index: 3; } .CodeMirror-gutter { margin-bottom: -30px; } .CodeMirror-selected { background-color: var(--text-selection); } .CodeMirror-focused .CodeMirror-selected { background-color: var(--text-selection); } .CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background-color: var(--text-selection); } .CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background-color: var(--text-selection); } .CodeMirror-foldmarker { color: var(--text-accent); cursor: var(--cursor); display: inline-block; margin-left: 8px; } .CodeMirror-foldgutter { width: 0.7em; } .CodeMirror-foldgutter-open, .CodeMirror-foldgutter-folded { cursor: var(--cursor); font-size: 18px; } .CodeMirror-foldgutter-open:after { content: "\25BE"; } .CodeMirror-foldgutter-folded:after { content: "\25B8"; } .CodeMirror-dialog { position: absolute; left: 0; right: 0; background: inherit; z-index: 15; padding: 0.1em 0.8em; overflow: hidden; color: inherit; display: flex; align-items: center; background-color: var(--background-primary); } .CodeMirror-dialog span:first-child { flex-grow: 1; } .CodeMirror-dialog-top { border-bottom: 1px solid var(--background-modifier-border); top: 0; } .CodeMirror-dialog-bottom { border-top: 1px solid var(--background-modifier-border); bottom: 0; } .CodeMirror-dialog input { border: none; outline: none; background: transparent; width: 20em; color: inherit; font-family: var(--font-monospace); } .CodeMirror-dialog button { font-size: 70%; } .CodeMirror .cm-spell-error { background-image: url(public/images/7877465e5f8197b19e8e.gif); background-position: bottom; background-repeat: repeat-x; } .CodeMirror textarea { border: 0; border-radius: 0; font-family: inherit; font-size: inherit; line-height: inherit; } .CodeMirror-gutter.CodeMirror-linenumbers, .CodeMirror-gutter.CodeMirror-foldgutter { background-color: var(--background-primary); } .drag-ghost { position: fixed; font-size: var(--font-ui-small); color: var(--drag-ghost-text-color); padding: var(--size-2-3) var(--size-4-2); border-radius: var(--radius-s); background-color: var(--drag-ghost-background); box-shadow: 0 2px 8px var(--background-modifier-box-shadow); z-index: var(--layer-dragged-item); max-width: 300px; font-weight: var(--font-medium); pointer-events: none; } .drag-ghost.mod-leaf { display: flex; z-index: var(--layer-tooltip); } .drag-ghost-icon { margin-right: var(--size-2-3); position: relative; } .drag-reorder-ghost { position: fixed; border-radius: var(--radius-s); background-color: var(--background-primary); box-shadow: 0 2px 8px var(--background-modifier-box-shadow); z-index: var(--layer-dragged-item); pointer-events: none; } .drag-ghost-self { display: flex; } .drag-ghost-self > .svg-icon { --icon-size: var(--icon-xs); --icon-stroke: var(--icon-xs-stroke-width); opacity: 0.7; vertical-align: middle; align-self: center; margin-right: var(--size-2-2); flex-shrink: 0; } .drag-ghost-self span { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } .drag-ghost-action { padding: var(--size-2-1) 0 0 0; font-size: var(--font-ui-smaller); opacity: 0.7; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } .drag-ghost-hidden { visibility: hidden; position: relative; } .drag-ghost-hidden:before { content: ' '; position: absolute; top: 0; left: 0; right: 0; bottom: 0; visibility: visible; border-radius: 5px; background-color: hsla(var(--interactive-accent-hsl), 0.3); } .markdown-source-view.mod-cm6 { height: 100%; display: flex; flex-direction: column; } .markdown-source-view.mod-cm6 ::selection { background-color: var(--text-selection); } .markdown-source-view.mod-cm6 .cm-line .cm-selection, .markdown-source-view.mod-cm6 .cm-line .cm-inline-code .cm-selection { background-color: var(--text-selection); } .markdown-source-view.mod-cm6 .cm-selectionBackground { background-color: var(--text-selection); } .markdown-source-view.mod-cm6.is-readable-line-width .cm-sizer { max-width: var(--file-line-width); margin-left: auto; margin-right: auto; } .markdown-source-view.mod-cm6.is-readable-line-width .cm-content { max-width: var(--file-line-width); } .markdown-source-view.mod-cm6.is-readable-line-width .cm-line { max-width: var(--file-line-width); } .markdown-source-view.mod-cm6.is-readable-line-width .cm-line.HyperMD-table-row { max-width: 100%; } .markdown-source-view.mod-cm6 .cm-editor { flex: 1 1 0; min-height: 0; } .markdown-source-view.mod-cm6 .cm-editor.cm-focused { outline: none; } .markdown-source-view.mod-cm6 .cm-editor .cm-selectionBackground { background: var(--text-selection); } .markdown-source-view.mod-cm6 .cm-scroller { font-family: var(--font-text); line-height: var(--line-height-normal); scroll-padding-block-end: var(--status-bar-scroll-padding); } .markdown-source-view.mod-cm6 .cm-sizer { display: flex; flex-direction: column; align-items: stretch; width: 100%; min-height: 100%; } .markdown-source-view.mod-cm6 .cm-contentContainer { flex: 1 1 auto; display: flex; align-items: stretch; overflow-x: visible; } .markdown-source-view.mod-cm6 .cm-content { flex-basis: unset !important; width: 0; caret-color: var(--text-normal); min-height: unset; } .is-mobile.is-ios .markdown-source-view.mod-cm6 .cm-content { -webkit-user-modify: read-write; } .markdown-source-view.mod-cm6 .cm-content > * { margin: 0 !important; display: block; } .markdown-source-view.mod-cm6 .cm-content > [contenteditable=false] { contain: paint !important; } .markdown-source-view.mod-cm6 .cm-gutters { flex: 0 0 auto; background-color: transparent; color: var(--text-faint) !important; border-right: none !important; padding-inline-end: var(--file-folding-offset); font-size: var(--font-ui-smaller); z-index: 1; font-variant: tabular-nums; } .markdown-source-view.mod-cm6 .cm-line > * { text-indent: 0; } .markdown-source-view.mod-cm6 .cm-transparent { color: transparent; } .markdown-source-view.mod-cm6 .cm-html-embed, .markdown-source-view.mod-cm6 .cm-callout, .markdown-source-view.mod-cm6 .cm-table-widget { white-space: normal; overflow-wrap: normal; word-break: normal; } .markdown-source-view.mod-cm6 .cm-line { position: relative; padding: 0; } .markdown-source-view.mod-cm6 .edit-block-button { padding: var(--size-2-2) var(--size-2-3); position: absolute; top: var(--size-2-2); right: var(--size-2-2); display: flex; opacity: 0; color: var(--text-muted); border-radius: var(--radius-s); cursor: var(--cursor); } @media (hover: hover) { .markdown-source-view.mod-cm6 .edit-block-button:hover { background-color: var(--background-modifier-hover); } } .markdown-source-view.mod-cm6 .cm-panels { background-color: inherit; color: inherit; } .markdown-source-view.mod-cm6 img.cm-widgetBuffer { display: inline !important; width: 0 !important; border: 0 !important; margin: 0 !important; padding: 0 !important; } .view-content > .markdown-source-view.mod-cm6 > .cm-editor > .cm-scroller { padding: var(--file-margins); } .empty-state { position: absolute; height: 100%; width: 100%; top: 0; left: 0; display: flex; align-items: center; justify-content: center; flex-direction: column; } .empty-state-container { max-width: 480px; max-height: 280px; margin: 20px; text-align: center; } .empty-state-title { margin: 20px 0; font-weight: var(--h2-weight); font-size: var(--h2-size); line-height: var(--line-height-tight); position: relative; } .empty-state-action-list { font-size: var(--font-text-size); line-height: var(--line-height-tight); color: var(--text-muted); margin-top: 20px; } .empty-state-action { cursor: var(--cursor); line-height: 36px; color: var(--text-accent); } @media (hover: hover) { .empty-state-action:hover { color: var(--text-accent-hover); } } /* Can be removed since it is redundant with Close link */ .empty-state-close-button { display: none; } /* OS-dependent rules to make space for traffic lights buttons, window buttons and sidebar toggles. --- Scenarios to account for: Window frame styles - Hidden - Custom - Native - Full screen Sidebar states - Left sidebar open - Left sidebar closed - Right sidebar open - Right sidebar closed - Pop-out (no sidebars) */ body { --zoom-factor: 1; --titlebar-height: 30px; } .mod-macos { --frame-left-space: calc(80px - var(--ribbon-width)); --frame-right-space: 0px; } .mod-macos.is-popout-window { --frame-left-space: 80px; } .mod-windows, .mod-linux { --frame-left-space: 0px; --frame-right-space: 126px; } body.is-frameless:not(.is-hidden-frameless) { padding-top: calc(var(--titlebar-height) / var(--zoom-factor)); } body.is-frameless:not(.is-hidden-frameless) .titlebar { height: var(--titlebar-height); zoom: calc(1 / var(--zoom-factor)); } body.is-frameless:not(.is-hidden-frameless):not(.is-maximized) .titlebar { padding-top: 2px; } body.is-frameless.is-hidden-frameless .titlebar { height: calc(var(--header-height) - 1px); } body.is-frameless.is-hidden-frameless.starter .titlebar { height: var(--titlebar-height); } .is-fullscreen .titlebar { display: none; } .sidebar-toggle-button, .workspace-tabs.mod-top { --tab-container-background: var(--titlebar-background); } body.is-focused .titlebar, body.is-focused .workspace-ribbon.mod-left { --titlebar-background: var(--titlebar-background-focused); } body.is-focused .sidebar-toggle-button, body.is-focused .workspace-tabs.mod-top { --tab-container-background: var(--titlebar-background-focused); } .is-hidden-frameless { --divider-vertical-height: 100%; } .workspace-ribbon .sidebar-toggle-button { position: absolute; top: 0; left: 0; width: var(--ribbon-width); justify-content: center; } .titlebar-button.mod-logo { width: var(--ribbon-width); justify-content: center; } .is-hidden-frameless:not(.starter) .titlebar { -webkit-app-region: no-drag; } .is-hidden-frameless .titlebar-button.mod-logo { display: none; } .is-hidden-frameless:not(.is-fullscreen) .workspace-tab-header-container { transition: padding-left 275ms var(--anim-motion-swing), padding-right 275ms var(--anim-motion-swing); } .is-hidden-frameless:not(.is-fullscreen) .workspace-tabs.mod-top-left-space .workspace-tab-header-container { padding-left: var(--frame-left-space); } .is-hidden-frameless:not(.is-fullscreen) .workspace-tabs.mod-top-left-space .workspace-tab-header-container:before { -webkit-app-region: no-drag; content: ''; height: 100%; left: 0; top: 0; position: absolute; width: var(--frame-left-space); } .is-hidden-frameless:not(.is-fullscreen) .workspace-tabs.mod-top-right-space .workspace-tab-header-container { padding-right: var(--frame-right-space); } .is-hidden-frameless:not(.is-fullscreen) .workspace-tabs.mod-top-right-space .workspace-tab-header-container:after { -webkit-app-region: no-drag; content: ''; height: 100%; right: 0; top: 0; position: absolute; width: var(--frame-right-space); } .is-hidden-frameless:not(.is-fullscreen) .titlebar-button-container.mod-right { background-color: var(--titlebar-background); } .is-hidden-frameless:not(.is-fullscreen).is-focused .titlebar-button-container.mod-right { background-color: var(--titlebar-background-focused); } .titlebar-button.mod-logo:hover .logo-wireframe, .titlebar-button.mod-logo:not(:hover) .logo-full { display: none; } body.is-frameless:not(.mod-macos) > .app-container ~ * { -webkit-app-region: no-drag; } body.is-frameless:not(.mod-macos) .modal-container, body.is-frameless:not(.mod-macos) .suggestion-bg { -webkit-app-region: initial; } body.is-frameless:not(.mod-macos) .modal { -webkit-app-region: no-drag; } .loader-cube { width: 40px; height: 40px; margin: 100px auto; } .loader-cube .sk-cube { width: 33%; height: 33%; background-color: var(--interactive-accent); float: left; -webkit-animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out; animation: sk-cubeGridScaleDelay 1.3s infinite ease-in-out; } .loader-cube .sk-cube1 { -webkit-animation-delay: 0.2s; animation-delay: 0.2s; } .loader-cube .sk-cube2 { -webkit-animation-delay: 0.3s; animation-delay: 0.3s; } .loader-cube .sk-cube3 { -webkit-animation-delay: 0.4s; animation-delay: 0.4s; } .loader-cube .sk-cube4 { -webkit-animation-delay: 0.1s; animation-delay: 0.1s; } .loader-cube .sk-cube5 { -webkit-animation-delay: 0.2s; animation-delay: 0.2s; } .loader-cube .sk-cube6 { -webkit-animation-delay: 0.3s; animation-delay: 0.3s; } .loader-cube .sk-cube7 { -webkit-animation-delay: 0s; animation-delay: 0s; } .loader-cube .sk-cube8 { -webkit-animation-delay: 0.1s; animation-delay: 0.1s; } .loader-cube .sk-cube9 { -webkit-animation-delay: 0.2s; animation-delay: 0.2s; } @-webkit-keyframes sk-cubeGridScaleDelay { 0%, 70%, 100% { -webkit-transform: scale3D(1, 1, 1); transform: scale3D(1, 1, 1); } 35% { -webkit-transform: scale3D(0, 0, 1); transform: scale3D(0, 0, 1); } } @keyframes sk-cubeGridScaleDelay { 0%, 70%, 100% { -webkit-transform: scale3D(1, 1, 1); transform: scale3D(1, 1, 1); } 35% { -webkit-transform: scale3D(0, 0, 1); transform: scale3D(0, 0, 1); } } .is-loading { position: relative; } .is-loading:before { content: ' '; position: absolute; top: 0; width: 0; height: 3px; background-color: var(--interactive-accent); animation: 1000ms ease-in-out 300ms infinite progress-bar; } .pane-empty { color: var(--text-faint); font-size: var(--font-ui-small); margin: var(--size-4-2) auto; text-align: center; } .view-header { height: var(--header-height); display: none; border-bottom: var(--file-header-border); background-color: var(--background-primary); z-index: 1; position: relative; gap: var(--size-4-2); padding: 0 var(--size-4-3); } body.is-phone .view-header, .show-view-header .view-header { display: flex; } .is-focused .workspace-leaf.mod-active .view-header { background-color: var(--background-primary); } .workspace-split.mod-left-split .view-header, .workspace-split.mod-right-split .view-header, .workspace-fake-target-overlay.is-in-sidebar .view-header { display: none; } .view-header.is-highlighted:after { content: ' '; position: absolute; width: 100%; height: 100%; top: 0; left: 0; background-color: hsla(var(--interactive-accent-hsl), 0.5); } .view-header .view-header-icon { display: none; padding: var(--size-2-2); margin-right: var(--size-2-3); color: var(--text-muted); align-self: center; cursor: grab; } .view-header .view-header-icon:active { cursor: grabbing; } .view-header-title { font-size: var(--file-header-font-size); font-weight: var(--file-header-font-weight); flex: 1 1 0; max-width: max-content; overflow: auto; padding: 0 var(--size-4-1); white-space: pre; word-wrap: normal; color: var(--text-muted); scroll-padding-inline-end: 20px; } .is-focused .workspace-leaf.mod-active .view-header-title { color: var(--text-normal); } .view-header-title::-webkit-scrollbar { display: none; } .view-header-title-container { flex-grow: 1; overflow: hidden; position: relative; justify-content: var(--file-header-justify); display: flex; align-items: center; gap: 0; white-space: nowrap; } .view-header-title-container:not(.mod-at-start):before { content: ' '; position: absolute; top: 0; left: 0; width: 30px; height: 100%; background: linear-gradient(to right, var(--background-primary), transparent); } .view-header-title-container:not(.mod-at-end):after { content: ' '; position: absolute; top: 0; right: 0; width: 30px; height: 100%; background: linear-gradient(to right, transparent, var(--background-primary)); } .view-header-title-parent { font-size: var(--file-header-font-size); color: var(--text-muted); min-width: 0; display: flex; gap: 0; overflow: hidden; } .view-header-title-parent .view-header-breadcrumb { padding: 2px 4px; border-radius: var(--radius-s); } @media (hover: hover) { .view-header-title-parent .view-header-breadcrumb:hover { background-color: var(--background-modifier-hover); color: var(--text-normal); } } .view-header-title-parent .view-header-breadcrumb-separator { padding: 2px 1px; color: var(--text-faint); } .view-content { width: 100%; height: calc(100% - var(--header-height)); } .workspace-split.mod-root .view-content { background-color: var(--background-primary); } .workspace-split.mod-root .workspace-fake-target-overlay .view-content { background-color: transparent; } .workspace-split.mod-left-split .view-content, .workspace-split.mod-right-split .view-content { height: 100%; overflow: auto; } .inline-title { font-weight: var(--inline-title-weight); font-size: var(--inline-title-size); line-height: var(--inline-title-line-height); font-style: var(--inline-title-style); font-variant: var(--inline-title-variant); font-family: var(--inline-title-font); padding-bottom: 0.5em; letter-spacing: -0.015em; color: var(--inline-title-color); } .hover-popover .inline-title, .inline-embed .inline-title { display: none; } body:not(.show-inline-title) .inline-title:not([data-level]) { display: none; } ::selection { background-color: var(--text-selection); } .markdown-reading-view { display: flex; flex-direction: column; } .markdown-preview-view { font-size: var(--font-text-size); font-family: var(--font-text); line-height: var(--line-height-normal); width: 100%; height: 100%; padding: var(--file-margins); position: relative; overflow-y: auto; overflow-wrap: break-word; color: var(--text-normal); user-select: text; -webkit-user-select: text; } .workspace-leaf-content.is-read-mode .markdown-preview-view { width: 100%; left: 0; background-color: var(--background-primary); } .markdown-preview-view.is-readable-line-width .markdown-preview-sizer { max-width: var(--file-line-width); margin-left: auto; margin-right: auto; } .markdown-rendered.rtl { direction: rtl; } /* Ribbon */ /* Add background to top left corner space above ribbon */ .workspace-ribbon.mod-left { margin-top: var(--header-height); /* Add the tab background in the top left corner */ } .workspace-ribbon.mod-left:before { position: absolute; left: 0; top: 0; background-color: var(--titlebar-background); content: " "; border-bottom: var(--tab-outline-width) solid var(--tab-outline-color); height: calc(var(--header-height) - var(--tab-outline-width)); width: var(--ribbon-width); } .workspace-ribbon { width: var(--ribbon-width); flex: 0 0 var(--ribbon-width); display: flex; flex-direction: column; overflow: hidden; background-color: var(--ribbon-background); z-index: var(--layer-sidedock); color: var(--text-muted); padding: var(--ribbon-padding); gap: var(--size-4-1); border-right: var(--divider-width) solid var(--divider-color); } .workspace-ribbon.mod-left.is-collapsed { transition: background-color 250ms 95ms ease-in-out; background-color: var(--ribbon-background-collapsed); border-right-color: var(--divider-color); } .workspace-ribbon.mod-right { display: none; } .workspace-ribbon.is-hidden { display: none; } .workspace-ribbon.is-collapsed { background-color: var(--background-secondary); } .side-dock-settings, .side-dock-actions { flex-direction: column; } .side-dock-settings .side-dock-ribbon-action, .side-dock-actions .side-dock-ribbon-action { margin: 0 auto; } .side-dock-settings { margin-top: auto; } .release-notes-view { padding: var(--file-margins); } .release-notes-view .markdown-preview-view { overflow: visible; } .release-notes-view .is-readable-line-width { max-width: var(--file-line-width); margin-left: auto; margin-right: auto; } .setting { display: flex; align-items: center; } .setting-text { flex-grow: 1; } .setting-title { font-size: var(--font-ui-large); line-height: var(--line-height-normal); } .setting-explanation { color: var(--text-muted); } .modal.mod-new-editor { max-width: 600px; } .modal.mod-trust-folder { max-width: 700px; } .modal.mod-settings .vertical-tab-header { flex: 0 0 25%; min-width: 180px; max-width: 250px; overflow: auto; border-right: 1px solid var(--divider-color); } .modal.mod-settings .modal-content { margin-top: 0; overflow: hidden; } .modal.mod-plugin-options .modal-content { margin: var(--size-4-6) 0; } .setting-item { display: flex; align-items: center; padding: 0.75em 0; border-top: 1px solid var(--background-modifier-border); /* Add extra space for setting heading if it starts a new section */ } .setting-item + .setting-item-heading { margin-top: 0.75em; } .setting-item:first-child { padding-top: 0; border-top: none; } .setting-item > *:first-child { margin-right: var(--size-4-4); } .setting-item > *:last-child { margin-right: 0; } .setting-item.mod-cta { justify-content: center; } .setting-item-heading { font-weight: var(--font-semibold); border-top: none; } .setting-item-heading .setting-item-info { flex-grow: 0; margin-right: 0; } .setting-item-heading .setting-item-description { font-weight: var(--font-normal); } .setting-item-info { flex: 1 1 auto; } .setting-item-description { color: var(--text-muted); font-size: var(--font-ui-smaller); padding-top: var(--size-4-1); line-height: var(--line-height-tight); } .setting-item-description:empty { display: none; } .setting-item-description code { font-family: var(--font-monospace); font-size: var(--font-smaller); border-radius: var(--radius-s); padding: 0 3px 2px 3px; position: relative; bottom: 1px; } .setting-item-description ul { margin: var(--size-4-1) 0; padding-left: var(--size-4-6); } .setting-item-name { color: var(--text-normal); font-size: var(--font-ui-medium); line-height: var(--line-height-tight); } .setting-item-control { flex: 1 1 auto; text-align: right; display: flex; justify-content: flex-end; align-items: center; gap: var(--size-4-2); } .setting-item-control.mod-vertical { flex-direction: column; } .setting-item-control.mod-vertical > *:not(:last-child) { margin-bottom: 10px; margin-right: 0; } .setting-item-control.mod-hotkey { padding-top: 0; cursor: default; } .setting-item-control.mod-hotkey input { font-family: var(--font-monospace); font-size: var(--font-smaller); } .setting-item-control.mod-hotkey input:focus { background-color: var(--interactive-accent); color: var(--text-on-accent); } .setting-item-control select { width: inherit; max-width: 400px; } .setting-command-hotkeys { display: flex; flex-direction: column; } .setting-hotkey { font-family: -apple-system, BlinkMacSystemFont, var(--font-monospace); font-size: var(--font-ui-small); background-color: var(--background-modifier-hover); border-radius: 4px; padding: 2px 4px 2px 8px; align-self: flex-end; white-space: nowrap; display: flex; align-items: center; gap: 4px; } .theme-dark .setting-hotkey.has-conflict, .theme-light .setting-hotkey.has-conflict { background-color: var(--background-modifier-error); color: var(--text-on-accent); } .setting-hotkey.mod-active { background-color: var(--interactive-accent); color: var(--text-on-accent); } .setting-hotkey.mod-empty { padding-right: var(--size-4-2); } .setting-hotkey:not(:first-child) { margin-top: var(--size-4-2); } .setting-hotkey-icon { display: flex; align-items: center; cursor: var(--cursor); border-radius: 50%; line-height: 1; text-align: center; } .setting-hotkey-icon .svg-icon { width: 16px; height: 16px; stroke-width: 2px; opacity: 0.6; } @media (hover: hover) { .setting-hotkey-icon:hover .svg-icon { opacity: 1; } } @media (hover: hover) { .setting-delete-hotkey:hover { background-color: var(--background-modifier-error); color: var(--text-on-accent); } } .setting-add-hotkey-button, .setting-restore-hotkey-button { padding: var(--size-2-2); border-radius: var(--radius-s); color: var(--text-faint); cursor: var(--cursor); height: calc(var(--icon-l) + var(--size-2-2) + var(--size-2-2)); } .setting-add-hotkey-button.mod-active, .setting-restore-hotkey-button.mod-active { color: var(--text-accent); } @media (hover: hover) { .setting-add-hotkey-button:hover, .setting-restore-hotkey-button:hover { background-color: var(--background-modifier-hover); color: var(--text-normal); } } .setting-editor-extra-setting-button { line-height: 0; } .setting-message { font-size: var(--font-ui-small); } .setting-font-list { margin: 1.5em 0 0.75em 0; } .hotkey-settings-container { display: flex; flex-direction: column; } .hotkey-settings-container .setting-item-description { padding-top: 0; } .hotkey-settings-container hr { margin: 20px 0 10px 0; } .hotkey-list-container { overflow: auto; } .hotkey-search-container { padding-bottom: 20px; display: flex; flex-wrap: wrap; } .modal.mod-image-lightbox { max-width: 90vw; max-height: 90vh; padding: 0; } .modal.mod-image-lightbox .modal-content { padding: var(--size-4-12) var(--size-4-3) var(--size-4-2) var(--size-4-3); text-align: center; } .login-field { max-width: 500px; margin: 1em auto; } .spellchecker-dictionary-container { max-height: 60vh; overflow: auto; } .spellchecker-dictionary-item { display: flex; margin-bottom: 10px; } .spellchecker-dictionary-word { flex-grow: 1; } .spellchecker-dictionary-remove-button { cursor: var(--cursor); color: var(--text-muted); margin-right: 10px; } @media (hover: hover) { .spellchecker-dictionary-remove-button:hover { color: var(--text-normal); } } .modal.mod-new-editor .card, .modal.mod-restricted-mode .card { flex: 1 0 0; } .mod-macos .community-modal-controls { -webkit-app-region: drag; } .mod-community-modal .modal-sidebar .setting-item { max-width: var(--modal-community-sidebar-width); padding: 0 var(--size-4-3) var(--size-4-1); border: none; gap: var(--size-4-2); } .mod-community-modal .modal-sidebar .setting-item:first-child { max-width: 500px; gap: 0; margin-bottom: var(--size-4-2); } .mod-community-modal .modal-sidebar .setting-item-name { font-size: var(--font-ui-small); padding-left: var(--size-4-1); } .mod-community-modal .modal-sidebar .setting-item-info { margin: 0; flex-grow: 0; } .mod-community-modal .modal-sidebar .search-input-container { width: 100%; } .mod-community-modal .modal-sidebar button.clickable-icon { padding: 6px 10px; display: flex; align-items: center; color: var(--text-normal); } .community-modal-details-empty-state { padding: 0; text-align: center; } .community-modal-search-summary { font-size: var(--font-ui-small); padding: var(--size-4-1) var(--size-4-3) var(--size-4-3) var(--size-4-4); } .community-modal-search-results-wrapper { flex: 1 0 auto; overflow: auto; border-top: var(--border-width) solid var(--divider-color); scroll-padding: var(--size-4-3); /* This helps with performance of the app */ contain: strict; } .community-modal-search-results { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: var(--size-4-3); padding: var(--size-4-3); } .community-item { position: relative; background-color: var(--background-primary); padding: var(--size-4-3); cursor: var(--cursor); border-radius: var(--radius-m); border: 1px solid var(--background-modifier-border); display: flex; flex-direction: column; gap: var(--size-2-1); } .community-item:last-child { margin-bottom: 0; } .community-item .suggestion-highlight { background-color: var(--text-highlight-bg); } .community-item.is-selected, .community-item.is-selected:hover { border-color: var(--interactive-accent); background-color: var(--interactive-accent); color: var(--text-on-accent); } .community-item.is-selected .community-item-author, .community-item.is-selected:hover .community-item-author, .community-item.is-selected .community-item-repo, .community-item.is-selected:hover .community-item-repo, .community-item.is-selected .community-item-downloads, .community-item.is-selected:hover .community-item-downloads, .community-item.is-selected .community-item-updated, .community-item.is-selected:hover .community-item-updated { color: var(--text-on-accent); opacity: 0.8; } .community-item.is-selected .flair, .community-item.is-selected:hover .flair { color: var(--text-on-accent); background-color: transparent; } @media (hover: hover) { .community-item:hover { border-color: var(--background-modifier-border-hover); } } .is-mobile .community-item { max-width: 500px; } .community-item .flair { margin-left: var(--size-4-1); background-color: var(--tag-background); color: var(--tag-color); vertical-align: middle; top: -1px; } .community-item-name { font-size: var(--font-ui-medium); line-height: var(--line-height-tight); font-weight: var(--font-medium); } .community-item-author { font-size: var(--font-ui-smaller); line-height: var(--line-height-tight); color: var(--text-muted); } .community-item-downloads { font-size: var(--font-ui-smaller); color: var(--text-muted); --icon-color: var(--text-faint); --icon-size: var(--icon-xs); --icon-stroke: var(--icon-xs-stroke-width); } .community-item-downloads svg { vertical-align: text-bottom; } .community-item-updated { font-size: var(--font-ui-smaller); color: var(--text-muted); margin-bottom: var(--size-4-2); } .community-item-downloads-text { margin-left: var(--size-2-2); } .community-item-desc { font-size: var(--font-ui-small); line-height: var(--line-height-tight); margin-top: 4px; } .community-item-badge.mod-update { --icon-size: var(--icon-xs); --icon-stroke: var(--icon-xs-stroke-width); color: var(--interactive-accent); position: absolute; top: var(--size-4-3); right: var(--size-4-3); } .community-item-screenshot { max-width: 100%; margin-top: auto; object-fit: cover; border-radius: var(--radius-s); aspect-ratio: 16/9; image-rendering: -webkit-optimize-contrast; margin-top: var(--size-4-1); } .community-item-screenshot.mod-unavailable { text-align: center; color: var(--text-muted); } .community-item-screenshot .placeholder-icon { display: flex; align-items: center; justify-content: center; height: 100%; } .community-item-screenshot .placeholder-icon .svg-icon { color: var(--text-faint); width: var(--size-4-8); height: var(--size-4-8); } .community-modal-info-name { font-size: var(--h2-size); font-weight: var(--font-semibold); line-height: var(--line-height-tight); margin-bottom: var(--size-4-6); } .community-modal-info-author, .community-modal-info-repo, .community-modal-info-version { font-size: var(--font-ui-small); line-height: var(--line-height-tight); color: var(--text-muted); } .community-modal-info-desc { font-size: var(--font-ui-small); line-height: var(--line-height-tight); margin-top: 4px; } .community-modal-details { flex: 1 1 calc(var(--modal-max-width) - var(--modal-community-sidebar-width)); overflow: auto; display: flex; flex-direction: column; border-left: 1px solid var(--divider-color); } .community-modal-info { flex: 1 1 0; overflow-y: auto; padding: var(--size-4-8) var(--size-4-16); scroll-padding: var(--size-4-4); } .community-readme { overflow-y: visible; height: auto; padding: var(--size-4-4) 0; } .community-readme video, .community-readme img { max-width: 100%; } .community-modal-info-desc { font-size: var(--font-ui-medium); line-height: var(--line-height-tight); margin-top: var(--size-4-2); } .community-modal-button-container { display: flex; flex-wrap: wrap; gap: var(--size-4-2); margin: 1.5em 0; } .community-modal-info-downloads { color: var(--text-muted); margin-top: var(--size-4-1); display: inline-block; --icon-size: var(--icon-xs); --icon-stroke: var(--icon-xs-stroke-width); } .community-modal-info-downloads-text { margin-left: var(--size-4-1); position: relative; top: -1px; } .community-modal-readme { font-size: var(--font-text-size); font-family: var(--font-text); line-height: var(--line-height-normal); overflow-wrap: break-word; color: var(--text-normal); user-select: text; -webkit-user-select: text; } .installed-plugins-container { padding-top: var(--size-4-4); border-top: 1px solid var(--background-modifier-border); } .community-modal-grid-button-container { position: absolute; top: var(--size-4-4); right: var(--size-4-12); display: flex; gap: var(--size-4-2); } .status-bar { position: var(--status-bar-position); width: auto; bottom: 0; right: 0; border-radius: var(--status-bar-radius); border-style: solid; border-width: var(--status-bar-border-width); border-color: var(--status-bar-border-color); background-color: var(--status-bar-background); color: var(--status-bar-text-color); display: flex; font-size: var(--status-bar-font-size); justify-content: flex-end; min-height: 18px; padding: var(--size-4-1); gap: var(--size-2-1); user-select: none; z-index: var(--layer-status-bar); font-variant-numeric: tabular-nums; } .status-bar-item { border-radius: var(--radius-s); display: inline-flex; align-items: center; padding: 3px var(--size-2-2); line-height: 1; } .status-bar-item.mod-clickable { cursor: var(--cursor); } @media (hover: hover) { .status-bar-item.mod-clickable:hover { background-color: var(--background-modifier-hover); color: var(--text-normal); } } .status-bar-item.plugin-editor-status, .status-bar-item.plugin-sync { padding: 0 var(--size-2-2); } @media (hover: hover) { .status-bar-item.plugin-editor-status:hover, .status-bar-item.plugin-sync:hover { background-color: var(--background-modifier-hover); } } .status-bar-item-icon { vertical-align: middle; display: flex; align-items: center; } .status-bar-item-segment { margin-right: var(--size-4-2); } .status-bar-item-segment:last-child { margin-right: 0; } .is-screenshotting .status-bar { display: none; } .titlebar { -webkit-app-region: drag; position: fixed; top: 0; left: 0; right: 0; display: flex; background-color: var(--titlebar-background); border-bottom: var(--titlebar-border-width) solid var(--titlebar-border-color); } .titlebar-inner { color: var(--titlebar-text-color); font-weight: var(--titlebar-text-weight); width: 100%; display: flex; } .is-focused .titlebar-inner { color: var(--titlebar-text-color-focused); } .titlebar-text { opacity: 0.85; position: absolute; width: 100%; height: 100%; top: 0; left: 0; flex-grow: 1; font-size: var(--font-ui-small); text-align: center; display: flex; justify-content: center; align-items: center; padding: 0 125px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } .titlebar-button-container { display: flex; position: absolute; top: 0; } .mod-macos .titlebar-button-container { top: 8px; } .titlebar-button-container.mod-left { left: 0; } .mod-macos .titlebar-button-container.mod-left { left: calc(80px / var(--zoom-factor)); } .titlebar-button-container .mod-back, .titlebar-button-container .mod-forward { color: var(--icon-color); } .titlebar-button-container .mod-back .svg-icon, .titlebar-button-container .mod-forward .svg-icon { width: 14px; height: 14px; stroke-width: 2.25px; } @media (hover: hover) { .titlebar-button-container .mod-back:hover, .titlebar-button-container .mod-forward:hover { color: var(--icon-color-hover); } } .titlebar-button-container.mod-right { right: 0; } .titlebar-button { -webkit-app-region: no-drag; padding: var(--size-2-2) var(--size-2-3); cursor: var(--cursor); display: inline-flex; align-items: center; } @media (hover: hover) { .titlebar-button:hover { opacity: 1; background-color: var(--background-modifier-hover); } .titlebar-button.mod-close:hover { background-color: var(--background-modifier-error); } } .mod-macos .titlebar-button { border-radius: var(--radius-s); } /* Hidden titlebar interferes with mouse */ body.is-frameless.is-hidden-frameless { padding-top: 0 !important; } .is-hidden-frameless.mod-macos .titlebar { display: none; } .is-hidden-frameless.mod-windows .titlebar, .is-hidden-frameless.mod-linux .titlebar { background: transparent; border: none; z-index: var(--layer-popover); pointer-events: none; } .is-hidden-frameless.mod-windows .titlebar-button.mod-back, .is-hidden-frameless.mod-linux .titlebar-button.mod-back, .is-hidden-frameless.mod-windows .titlebar-button.mod-forward, .is-hidden-frameless.mod-linux .titlebar-button.mod-forward, .is-hidden-frameless.mod-windows .titlebar-text, .is-hidden-frameless.mod-linux .titlebar-text { display: none; } .is-hidden-frameless.mod-windows .titlebar-button-container, .is-hidden-frameless.mod-linux .titlebar-button-container { pointer-events: auto; } .mod-linux .titlebar-button-container, .mod-windows .titlebar-button-container { height: 100%; } .mod-linux .titlebar-button, .mod-windows .titlebar-button { padding: 0 16px; display: flex; align-items: center; } .mod-linux .titlebar-button.mod-logo, .mod-windows .titlebar-button.mod-logo { padding: 4px 8px; } @media (hover: hover) { .mod-linux .titlebar-button.mod-close:hover, .mod-windows .titlebar-button.mod-close:hover { background-color: var(--background-modifier-error); } .mod-linux .titlebar-button.mod-close:hover .svg-icon, .mod-windows .titlebar-button.mod-close:hover .svg-icon { fill: white; stroke: white; } } @media screen and (max-width: 300px) { .titlebar-text { display: none; } } .is-translucent:not(.is-fullscreen) { --nav-collapse-icon-color: rgba(var(--mono-rgb-100), 0.3); --nav-collapse-icon-color-collapsed: rgba(var(--mono-rgb-100), 0.3); --divider-color: rgba(0, 0, 0, 0.15); } .is-translucent:not(.is-fullscreen) .titlebar, .is-translucent:not(.is-fullscreen) .app-container { background-color: var(--workspace-background-translucent); } .is-translucent:not(.is-fullscreen) .workspace-ribbon.mod-left, .is-translucent:not(.is-fullscreen) .workspace-tabs, .is-translucent:not(.is-fullscreen) .workspace-split.mod-root, .is-translucent:not(.is-fullscreen) .sidebar-toggle-button, .is-translucent:not(.is-fullscreen) .mod-left-split .workspace-tab-header-container, .is-translucent:not(.is-fullscreen) .mod-right-split .workspace-tab-header-container, .is-translucent:not(.is-fullscreen) .mod-top .workspace-tab-header-container, .is-translucent:not(.is-fullscreen) .workspace-tabs .workspace-leaf, .is-translucent:not(.is-fullscreen) .workspace-ribbon.mod-left:before { background-color: transparent !important; } .workspace { background-color: var(--background-primary); display: flex; flex: 1 0 0; transition: padding-left 100ms ease-in; overflow: hidden; height: 100%; } .is-translucent .workspace { background-color: transparent; } .workspace-split { display: flex; position: relative; } .workspace-split.mod-vertical > .workspace-split:last-child { padding-right: 0; } .workspace-split:last-child:not(.mod-right-split) > .workspace-leaf-resize-handle { display: none; } .workspace-split.mod-vertical { flex-direction: row; } .workspace-split.mod-horizontal { flex-direction: column; } .workspace-split.mod-root { background-color: var(--background-primary); } .workspace-leaf { display: flex; flex-direction: column; position: relative; contain: strict !important; overflow: hidden; isolation: isolate; } .workspace-split.mod-root .workspace-leaf:last-child .workspace-leaf-resize-handle { display: none; } .workspace-leaf.is-highlighted:before { content: ' '; position: absolute; height: 100%; width: 100%; top: 0; left: 0; background-color: hsla(var(--interactive-accent-hsl), 0.25); z-index: var(--layer-popover); pointer-events: none; } .workspace > .workspace-leaf, .workspace > .workspace-split { height: 100%; width: 100%; } /* Resize handles */ .workspace-split.mod-root > .workspace-leaf-resize-handle { display: none; } .workspace-leaf-resize-handle { -webkit-app-region: no-drag; position: absolute; z-index: var(--layer-cover); background-color: transparent; transition: background-color 200ms ease-in-out, border-color 200ms ease-in-out, opacity 200ms ease-in-out; border-color: var(--divider-color); border-top: 0; border-width: var(--divider-width); margin: 0; } @media (hover: hover) { .workspace-leaf-resize-handle:hover { background-color: var(--divider-color-hover); border-color: var(--divider-color-hover); } .is-translucent .workspace-leaf-resize-handle:hover { background-color: var(--divider-color-hover); border-color: var(--divider-color-hover); } } .workspace-split.mod-horizontal > * > .workspace-leaf-resize-handle { bottom: 0; left: 0; border-bottom-style: solid; border-bottom-width: var(--divider-width); height: var(--divider-width-hover); width: 100%; cursor: row-resize; } .workspace-split.mod-vertical > * > .workspace-leaf-resize-handle, .workspace-split.mod-left-split > .workspace-leaf-resize-handle, .workspace-split.mod-right-split > .workspace-leaf-resize-handle { right: 0; bottom: 0; width: var(--divider-width-hover); height: var(--divider-vertical-height); cursor: col-resize; } .workspace-split.mod-right-split > .workspace-leaf-resize-handle { border-left-style: solid; border-left-width: var(--divider-width); } .workspace-split.mod-vertical > * > .workspace-leaf-resize-handle, .workspace-split.mod-left-split > .workspace-leaf-resize-handle { border-right-style: solid; border-right-width: var(--divider-width); } .workspace-split.mod-right-split > .workspace-leaf-resize-handle { right: unset; left: 0; } .workspace-split.mod-vertical > * { height: 100%; flex: 1 0 0; width: 0; } .workspace-split.mod-horizontal > * { width: 100%; flex: 1 0 0; height: 0; } .workspace-split.mod-left-split, .workspace-split.mod-right-split { flex: 0 0 auto; } .is-translucent .workspace-split.mod-left-split.is-sidedock-collapsed .workspace-tabs, .is-translucent .workspace-split.mod-right-split.is-sidedock-collapsed .workspace-tabs { visibility: hidden; } .workspace-split.mod-left-split > .workspace-leaf-resize-handle, .workspace-split.mod-right-split > .workspace-leaf-resize-handle { z-index: var(--layer-status-bar); height: var(--divider-vertical-height); top: unset; bottom: 0; } .view-header-nav-buttons { --icon-size: var(--icon-s); align-items: center; display: flex; margin-right: var(--size-4-1); } body.is-phone .view-header-nav-buttons { display: none; } .workspace-leaf-content { width: 100%; height: 100%; overflow: hidden; position: relative; display: flex; flex-direction: column; } .workspace-leaf-content .view-content { padding: var(--size-4-4); overflow: auto; } .workspace-leaf-content[data-type='markdown'] .view-content { padding: 0; overflow: hidden; } .workspace-leaf-content[data-type='backlink'] .view-content, .workspace-leaf-content[data-type='outgoing-link'] .view-content { padding: 0; overflow: hidden; display: flex; flex-direction: column; } .workspace-leaf-content .image-container, .workspace-leaf-content .audio-container, .workspace-leaf-content .video-container { text-align: center; } .workspace-leaf-content img:not([width]), .workspace-leaf-content audio, .workspace-leaf-content video { max-width: 100%; } .workspace-fake-target-overlay, .workspace-drop-overlay { will-change: transform, width, height; position: fixed; left: 0; top: 0; width: 0; height: 0; transform: translate(0, 0); transition: all 100ms ease-in-out; z-index: var(--layer-cover); pointer-events: none; } .workspace-drop-overlay:before { content: ' '; position: absolute; width: calc(100% - 6px); height: calc(100% - 6px); top: 0; left: 0; bottom: 0; right: 0; margin: auto; background-color: var(--interactive-accent); border-radius: var(--radius-m); opacity: 0.5; } .workspace-fake-target-container { visibility: hidden; position: absolute; pointer-events: none; top: 0; left: 0; } .workspace-fake-target-overlay { visibility: visible; overflow: hidden; background-color: var(--background-primary); /* &.is-in-sidebar { background-color: var(--background-secondary); .workspace-leaf { background-color: var(--background-secondary); } }*/ } .workspace-fake-target-overlay > * { width: 100%; height: 100%; } .workspace-tabs { overflow: hidden; display: flex; flex-direction: column; position: relative; } .workspace-tabs > * { flex: 1 0 0; } .workspace-tabs .workspace-leaf { height: 100%; } .workspace-split.mod-right-split .workspace-tabs { padding-right: 0; } .workspace-tabs:last-child .workspace-leaf-resize-handle { display: none; } .workspace-fake-target-overlay:not(.is-in-sidebar) .workspace-tabs .workspace-leaf, .mod-root .workspace-tabs .workspace-leaf { background-color: var(--background-primary); } .workspace-tabs .workspace-leaf { background-color: var(--background-secondary); } .workspace-tabs .workspace-leaf .view-content { height: 100%; } .workspace-tab-header-container { display: flex; background-color: var(--tab-container-background); height: var(--header-height); border-bottom: var(--tab-outline-width) solid var(--tab-outline-color); flex: 0 0 auto; padding-left: 0; padding-right: var(--size-4-2); position: relative; } .is-phone .workspace-tab-header-container { display: none; } .workspace-tab-header-container-inner { display: flex; flex: 0 1 auto; overflow: auto; margin: 6px -5px calc(var(--tab-outline-width) * -1); padding: 1px 15px 0; } .mod-root .workspace-tab-header-container-inner { padding: 1px 15px 0; } .workspace-tab-header-container-inner::-webkit-scrollbar, .workspace-tab-header-container-inner::-webkit-scrollbar-thumb { display: none; } .workspace-tab-header-inner-icon { flex: 0 0 auto; display: flex; } /* Hide tab icon if it's a note */ .mod-root .workspace-tab-header[data-type="markdown"] .workspace-tab-header-inner-icon, .mod-root .workspace-tab-header[data-type="empty"] .workspace-tab-header-inner-icon { display: none; } .is-focused .workspace-tab-header { color: var(--tab-text-color-focused); } .is-focused .workspace-tab-header.is-active { color: var(--tab-text-color-focused-active); } .is-focused .mod-active .workspace-tab-header.is-active .workspace-tab-header-inner-icon, .is-focused .mod-active .workspace-tab-header.is-active .workspace-tab-header-inner-title { color: var(--tab-text-color-focused-active-current); } .is-focused .mod-active .workspace-tab-header.is-active.is-highlighted .workspace-tab-header-inner-icon, .is-focused .mod-active .workspace-tab-header.is-active.is-highlighted .workspace-tab-header-inner-title { color: var(--tab-text-color-focused-highlighted); } .is-focused .workspace-tab-header.active.is-highlighted .workspace-tab-header-inner-icon, .is-focused .workspace-tab-header.is-highlighted .workspace-tab-header-inner-icon, .is-focused .workspace-tab-header.active.is-highlighted .workspace-tab-header-inner-title, .is-focused .workspace-tab-header.is-highlighted .workspace-tab-header-inner-title { color: var(--tab-text-color-focused-highlighted); } .workspace-tab-header { -webkit-app-region: no-drag; color: var(--tab-text-color); display: flex; position: relative; padding: 1px 4px 3.5px; scroll-margin-inline-start: var(--size-2-3); scroll-margin-inline-end: var(--size-4-1); text-align: center; border-radius: var(--tab-radius-active); /* Decorative curves */ } .workspace-tab-header:not(.is-active):hover .workspace-tab-header-inner { background-color: var(--background-modifier-hover); } .workspace-tab-header::before, .workspace-tab-header::after { position: absolute; bottom: 0; content: ''; width: calc(var(--tab-curve) * 2); height: calc(var(--tab-curve) * 2); border-radius: 100%; box-shadow: 0 0 0 calc(var(--tab-curve) * 3) transparent; } .workspace-tab-header::before { left: calc(var(--tab-curve) * -2); clip-path: inset(50% calc(var(--tab-curve) * -1) 0 50%); } .workspace-tab-header::after { right: calc(var(--tab-curve) * -2); clip-path: inset(50% 50% 0 calc(var(--tab-curve) * -1)); } .workspace-tab-header.is-active { box-shadow: 0 0 0 var(--tab-outline-width) var(--tab-outline-color); color: var(--tab-text-color-active); background-color: var(--tab-background-active); } .workspace-split.mod-root .workspace-tab-header.is-active::before, .workspace-split.mod-root .workspace-tab-header.is-active::after { box-shadow: inset 0 0 0 var(--tab-outline-width) var(--tab-outline-color), 0 0 0 calc(var(--tab-curve) * 4) var(--tab-background-active); } .workspace-tab-header.is-active .workspace-tab-header-inner::after { opacity: 0; } .workspace-tab-container { display: flex; overflow: hidden; } .workspace-tab-container > * { flex: 1 0 0; } .workspace-tab-header-inner { align-items: center; display: flex; gap: var(--size-2-1); height: 100%; border-radius: var(--tab-radius); overflow: hidden; padding: 0 8px; width: 100%; } .workspace-tab-header-inner .workspace-tab-header-inner-icon { color: var(--icon-color); opacity: var(--icon-opacity); } @media (hover: hover) { .workspace-tab-header-inner:hover .workspace-tab-header-inner-icon { color: var(--icon-color-hover); opacity: var(--icon-opacity-hover); } } .mod-root .workspace-tab-header-inner { padding: 0 3px 0 6px; } .workspace-tab-header-inner-title { flex: 1 1 auto; font-size: var(--tab-font-size); font-weight: var(--tab-font-weight); overflow: hidden; text-align: left; text-overflow: ellipsis; white-space: nowrap; width: 100%; } .workspace-tab-header-status-container { display: flex; flex-shrink: 0; gap: var(--size-2-1); justify-content: center; } .workspace-tab-header-status-container:empty { display: none; } .workspace-tab-header-status-icon, .workspace-tab-header-inner-close-button { cursor: var(--cursor); padding: var(--size-2-1); border-radius: var(--radius-s); display: flex; align-items: center; --icon-size: var(--icon-xs); --icon-stroke: var(--icon-xs-stroke-width); } @media (hover: hover) { .workspace-tab-header.is-active .workspace-tab-header-status-icon:hover, .workspace-tab-header.is-active .workspace-tab-header-inner-close-button:hover { background-color: var(--background-modifier-hover); } .mod-root .workspace-tab-header.is-active .workspace-tab-header-status-icon.mod-linked:hover, .mod-root .workspace-tab-header.is-active .workspace-tab-header-inner-close-button.mod-linked:hover, .mod-root .workspace-tab-header.is-active .workspace-tab-header-status-icon.mod-pinned:hover, .mod-root .workspace-tab-header.is-active .workspace-tab-header-inner-close-button.mod-pinned:hover { background-color: var(--background-modifier-active-hover); } } .workspace-tab-header.is-active .workspace-tab-header-status-icon::after, .workspace-tab-header.is-active .workspace-tab-header-inner-close-button::after { background-color: transparent; } @media (hover: hover) { .workspace-tab-header-inner-close-button:hover { color: var(--tab-text-color-focused-active-current); } } .workspace-tab-header:hover .workspace-tab-header-inner-close-button { color: var(--tab-text-color-focused); } @media (hover: hover) { .workspace-tab-header:hover .workspace-tab-header-inner-close-button:hover { color: var(--tab-text-color-focused-active-current); } } .workspace-tab-header.is-active .workspace-tab-header-inner-close-button { color: var(--tab-text-color-focused); } @media (hover: hover) { .workspace-tab-header.is-active .workspace-tab-header-inner-close-button:hover { color: var(--tab-text-color-focused-active-current); } } .workspace-sidedock-empty-state { font-size: var(--font-ui-small); padding: 20px 30px; } .workspace-tab-header.is-before-active .workspace-tab-header-inner { border-bottom-right-radius: 10px; } .workspace-tab-header-spacer { display: flex; flex-grow: 1; } body:not(.is-grabbing):not(.is-fullscreen) .workspace-tabs.mod-top .workspace-tab-header-spacer { -webkit-app-region: drag; } body:not(.is-grabbing):not(.is-fullscreen).is-hidden-frameless .mod-top .workspace-tab-header-container { -webkit-app-region: drag; } .workspace-tab-header-tab-list, .workspace-tab-header-new-tab { -webkit-app-region: no-drag; display: none; z-index: 1; align-items: center; } .titlebar .workspace-tab-header-tab-list, .titlebar .workspace-tab-header-new-tab, .mod-root .workspace-tab-header-tab-list, .mod-root .workspace-tab-header-new-tab { display: flex; } .workspace-tab-header-tab-list .clickable-icon, .workspace-tab-header-new-tab .clickable-icon { color: var(--icon-color); padding: var(--size-2-2); --icon-size: var(--icon-m); --icon-stroke: var(--icon-m-stroke-width); align-items: center; } .workspace-tab-header-new-tab { padding: var(--size-4-2) 0 var(--size-2-3); margin-right: var(--size-4-3); margin-left: -4px; } .workspace-tab-header-tab-list { margin-right: var(--size-4-1); padding: var(--size-4-2) 0 var(--size-2-3); } /* Remove tab titles in sidebar */ .workspace-fake-target-overlay.is-in-sidebar .workspace-tab-header-inner-title, .mod-left-split .workspace-tab-header-inner-title, .mod-right-split .workspace-tab-header-inner-title { display: var(--sidebar-tab-text-display); } .workspace-fake-target-overlay.is-in-sidebar .workspace-tab-header-inner-close-button, .mod-left-split .workspace-tab-header-inner-close-button, .mod-right-split .workspace-tab-header-inner-close-button { display: none; } body > .workspace-split { height: 100%; } .mod-root .workspace-tabs > .workspace-leaf .view-header-title { white-space: normal; } .mod-root .workspace-tab-header-status-icon { color: var(--text-accent); } .mod-root .workspace-tab-header-status-icon, .mod-root .workspace-tab-header-inner-icon { --icon-size: var(--icon-xs); --icon-stroke: var(--icon-xs-stroke-width); } .mod-root .mod-pinned, .mod-root .workspace-tab-header-inner-close-button { --icon-size: var(--icon-s); --icon-stroke: var(--icon-s-stroke-width); } .mod-right-split .markdown-preview-view, .mod-left-split .markdown-preview-view, .mod-right-split .markdown-source-view.mod-cm6 .cm-scroller, .mod-left-split .markdown-source-view.mod-cm6 .cm-scroller { --file-margins: var(--size-4-5); } .mod-right-split .markdown-preview-view, .mod-left-split .markdown-preview-view, .mod-right-split .markdown-source-view, .mod-left-split .markdown-source-view { font-size: var(--sidebar-markdown-font-size); } /* Sidebar tabs */ .mod-left-split .workspace-tab-header-container-inner, .mod-right-split .workspace-tab-header-container-inner { padding: 1px 8px 7px; margin: 6px 0 0 0; gap: 3px; } .mod-left-split .workspace-tab-header, .mod-right-split .workspace-tab-header { box-shadow: none; background-color: transparent; padding: 0; margin: 0; border-radius: var(--radius-s); } .mod-left-split .workspace-tab-header:before, .mod-right-split .workspace-tab-header:before, .mod-left-split .workspace-tab-header:after, .mod-right-split .workspace-tab-header:after { display: none; } .mod-left-split .workspace-tab-header:active .workspace-tab-header-inner-icon, .mod-right-split .workspace-tab-header:active .workspace-tab-header-inner-icon { color: var(--icon-color-focused); } .mod-left-split .workspace-tab-header.has-active-menu, .mod-right-split .workspace-tab-header.has-active-menu, .mod-left-split .workspace-tab-header.is-active, .mod-right-split .workspace-tab-header.is-active { background-color: var(--background-modifier-hover); } @media (hover: hover) { .mod-left-split .workspace-tab-header.has-active-menu:hover, .mod-right-split .workspace-tab-header.has-active-menu:hover, .mod-left-split .workspace-tab-header.is-active:hover, .mod-right-split .workspace-tab-header.is-active:hover { background-color: var(--background-modifier-hover); } } .mod-left-split .workspace-tab-header.has-active-menu .workspace-tab-header-inner-icon, .mod-right-split .workspace-tab-header.has-active-menu .workspace-tab-header-inner-icon, .mod-left-split .workspace-tab-header.is-active .workspace-tab-header-inner-icon, .mod-right-split .workspace-tab-header.is-active .workspace-tab-header-inner-icon { opacity: var(--icon-opacity-active); color: var(--icon-color-focused); } .workspace .mod-root .workspace-tab-header { -webkit-app-region: no-drag; flex: 1 1 0; width: var(--tab-width); min-width: 0; max-width: var(--tab-max-width); padding: 1px 3px 3.5px; } .workspace .mod-root .workspace-tab-header .workspace-tab-header-status-container { position: sticky; right: 0; } .workspace .mod-root .workspace-tab-header .workspace-tab-header-inner-close-button { position: sticky; right: 0; } .workspace .mod-root .workspace-tab-header.is-active:hover .workspace-tab-header-inner-close-button, .workspace .mod-root .workspace-tab-header.is-active .workspace-tab-header-inner-close-button { pointer-events: all; opacity: 1; } .workspace .mod-root .workspace-tab-header.is-active:hover .workspace-tab-header-inner-close-button svg, .workspace .mod-root .workspace-tab-header.is-active .workspace-tab-header-inner-close-button svg { opacity: 1; } .workspace .mod-root .workspace-tab-header.is-active .workspace-tab-header-inner-close-button::after { background-color: transparent; } .workspace .mod-root .workspace-tab-header-inner::after { position: absolute; right: -0.5px; width: 1px; background-color: var(--tab-divider-color); content: ''; height: 20px; } .workspace .mod-root .workspace-tab-header-inner-icon { display: flex; padding-right: 4px; } .workspace .mod-root .workspace-tab-header[data-type="markdown"] .workspace-tab-header-inner-icon, .workspace .mod-root .workspace-tab-header[data-type="empty"] .workspace-tab-header-inner-icon { display: none; } .workspace .mod-root .workspace-tab-header-inner-title { text-overflow: ellipsis; width: 100%; } .workspace .mod-root .workspace-tab-header-status-container.mod-linked { display: none; } .workspace .mod-root .workspace-tab-header-spacer { flex-shrink: 1; } /* Stacked tabs */ .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-header-container-inner { padding: 0 0 0 var(--size-4-3); margin: 0; } .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container { overflow-x: auto; overflow-y: hidden; position: relative; display: flex; flex-direction: row; } .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container > * { flex: 0 0 auto; position: sticky; } .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header { width: var(--tab-stacked-header-width); writing-mode: var(--tab-stacked-text-writing-mode); text-orientation: sideways; background-color: var(--background-primary); padding: 0; border-radius: 0; box-shadow: -1px 0 0 0 var(--tab-outline-color), var(--tab-stacked-shadow); --no-tooltip: true; } .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header:before, .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header:after { display: none; } .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header:hover .workspace-tab-header-inner { background-color: transparent; } .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner { padding: var(--size-4-2) var(--size-4-2) var(--size-4-4); border-radius: 0; } .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner:after { display: none; } .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-title { order: 3; width: auto; -webkit-mask-image: unset; padding: var(--size-4-1) 0; transform: var(--tab-stacked-text-transform); text-align: var(--tab-stacked-text-align); font-weight: var(--tab-stacked-font-weight); font-size: var(--tab-stacked-font-size); text-orientation: mixed; } .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-icon { order: 2; cursor: grab; display: flex; padding: var(--size-2-2); border-radius: var(--radius-s); } @media (hover: hover) { .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-icon:hover { background-color: var(--background-modifier-hover); } } .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-icon:active { cursor: grabbing; } .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-close-button { color: var(--tab-text-color-focused); } @media (hover: hover) { .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-tab-header-inner-close-button:hover { background-color: var(--background-modifier-hover); } } .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-leaf { width: var(--tab-stacked-pane-width); /* This is here for performance reasons - it helps the engine know what's out of view and avoid rendering them */ contain: strict; } .workspace .mod-root .workspace-tabs.mod-stacked .workspace-tab-container .workspace-leaf.is-hidden > * { display: none; } .sidebar-toggle-button { height: calc(var(--header-height) - 1px); display: flex; justify-content: center; padding: var(--size-4-2) 0 7px 0; -webkit-app-region: no-drag; --icon-size: var(--icon-l); --icon-stroke: var(--icon-l-stroke-width); } /* Smoother animation for right sidebar button positioning during close */ .mod-macos.is-hidden-frameless:not(.is-popout-window) .sidebar-toggle-button.mod-right { background-color: var(--tab-container-background); position: fixed; top: 0; right: 0; padding-right: var(--size-4-2); z-index: var(--layer-popover); } .mod-macos.is-hidden-frameless:not(.is-popout-window) .workspace .workspace-tabs.mod-top-right-space .workspace-tab-header-container { padding-right: 38px; } .button-container { margin-top: 20px; } button { -webkit-app-region: no-drag; display: inline-flex; align-items: center; justify-content: center; color: var(--text-normal); font-size: var(--font-ui-small); border-radius: var(--button-radius); border: 0; padding: var(--size-4-1) var(--size-4-3); height: var(--input-height); font-weight: var(--input-font-weight); cursor: var(--cursor); font-family: inherit; outline: none; user-select: none; white-space: nowrap; } button:not(.clickable-icon) { background-color: var(--interactive-normal); box-shadow: var(--input-shadow); } @media (hover: hover) { button:hover { background-color: var(--interactive-hover); box-shadow: var(--input-shadow-hover); } } button[aria-disabled='true'] { background-color: var(--interactive-normal); } button:focus-visible { box-shadow: 0 0 0 3px var(--background-modifier-border-focus); } button[disabled="true"] { cursor: not-allowed; } button.mod-cta { background-color: var(--interactive-accent); color: var(--text-on-accent); } @media (hover: hover) { button.mod-cta:hover { background-color: var(--interactive-accent-hover); } } button.mod-cta:focus-visible { box-shadow: 0 0 0 3px var(--background-modifier-border-focus); } button.mod-muted { background-color: var(--background-secondary); color: var(--text-muted); } @media (hover: hover) { button.mod-muted:hover { background-color: var(--background-secondary); } } button.mod-warning { background-color: var(--background-modifier-error); color: var(--text-on-accent); } @media (hover: hover) { button.mod-warning:hover { background-color: var(--background-modifier-error-hover); } } .icon-button-group { display: inline-block; } .icon-button { display: inline-block; color: var(--interactive-normal); } .rich-button { width: auto; padding-top: 5px; } .rich-button-icon { position: relative; top: 6px; } .horizontal-preference-group { display: flex; } .horizontal-preference-group button { border-radius: 0; margin: 0 -1px; } .horizontal-preference-group button:first-child { border-top-left-radius: var(--input-radius); border-bottom-left-radius: var(--input-radius); } .horizontal-preference-group button:last-child { border-top-right-radius: var(--input-radius); border-bottom-right-radius: var(--input-radius); } .horizontal-preference-group button.is-selected { background-color: var(--interactive-accent); color: var(--text-on-accent); } @media (hover: hover) { .horizontal-preference-group button.is-selected:hover { background-color: var(--interactive-accent-hover); } } .card-container { display: flex; } .card-container.mod-horizontal { flex-direction: column; } .card { background-color: var(--background-secondary-alt); border-radius: 4px; border: 1px solid var(--background-modifier-border); margin: 0 10px; padding: 15px 30px; display: flex; flex-direction: column; flex-grow: 1; } .card ul { padding: 0; } .card .button-container { margin: 10px 0; } .card-container.mod-horizontal .card { margin: 10px 0; } .card-container.mod-horizontal .card ul { padding-left: 24px; } .card li { margin: 5px 0; } .card.u-clickable { cursor: var(--cursor); } @media (hover: hover) { .card.u-clickable:hover { border: 1px solid var(--interactive-accent); background-color: hsla(var(--interactive-accent-hsl), 0.1); } } .card.is-selected { border: 1px solid var(--interactive-accent); background-color: hsla(var(--interactive-accent-hsl), 0.2); } .card-title { text-align: center; font-size: 20px; line-height: 30px; color: var(--text-muted); margin-bottom: 8px; } .card-description { color: var(--text-muted); font-size: var(--font-ui-small); line-height: 20px; flex-grow: 1; } /* Only used in Format Converter so far */ .changelog-item { margin: var(--size-4-2) 0; font-size: var(--font-ui-medium); line-height: var(--line-height); } .changelog-item:before { content: attr(data-label); width: 50px; border-radius: var(--radius-m); font-size: var(--font-ui-small); display: inline-block; text-align: center; margin-right: 14px; text-transform: uppercase; letter-spacing: 1px; line-height: 22px; } .changelog-item.mod-success:before { background-color: var(--background-modifier-success); } .changelog-item.mod-highlighted:before { background-color: var(--interactive-accent); } .page-container { width: 50vw; max-width: 1000px; margin: 0 auto; padding: 50px 0; background-color: var(--background-primary); } .page-title { font-weight: var(--font-extrabold); font-size: 46px; } [contenteditable] { outline: none; } .rich-link { color: var(--text-accent); position: relative; padding-left: 30px; } .rich-link-icon { position: absolute; left: 5px; top: 3px; } .horizontal-link-group { text-align: center; } .horizontal-link-group a, .horizontal-link-group span { margin: 0 10px; } .footer-link-group { list-style: none; display: inline-block; margin: 0 30px; padding: 0; } .footer-header { font-size: 22px; line-height: 30px; margin-bottom: 10px; } .footer-link { margin: 4px 0; } .components-container .menu { position: relative; display: inline-block; } .list-item { display: flex; padding: 0; margin: 8px 0; gap: var(--size-4-2); align-items: center; } .list-item-part.mod-extended { flex-grow: 1; overflow-wrap: anywhere; } .list-item-part.clickable-icon { display: flex; align-items: center; justify-content: center; padding: var(--size-2-2); cursor: var(--cursor); border-radius: var(--radius-s); color: var(--icon-color); } .list-item-part.clickable-icon:hover, .list-item-part.clickable-icon:active { color: var(--icon-color-hover); background-color: var(--background-modifier-hover); } .lightbox { display: none; position: fixed; z-index: 999; width: 100%; height: 100%; text-align: center; top: 0; left: 0; background: rgba(0, 0, 0, 0.8); } .lightbox img { max-width: 90vw; max-height: 90vh; margin-top: 5vh; } .lightbox:target { display: block; } .u-center-text { text-align: center; } .u-faded-text { color: var(--text-muted); } .u-pop { color: var(--text-accent); font-weight: var(--font-semibold); } .u-muted { color: var(--text-muted); } .u-small { font-size: 0.8em; } .u-clickable { cursor: var(--cursor); } .u-pop-bg { background-color: var(--interactive-accent); color: var(--text-on-accent); display: inline-block; padding: 3px 16px; border-radius: 20px; opacity: 0.6; cursor: default; } @media (hover: hover) { .u-pop-bg:hover { opacity: 1; } } .components-container h3 { font-weight: var(--font-semibold); font-size: 30px; margin: 60px 0 25px 0; } .components-container .vertical-tabs-container { height: 300px; } .components-container .checkbox-demo { margin: 10px 0; } .components-container .checkbox-demo label { display: inline-block; width: 300px; } .components-container .prompt { position: static; } @keyframes node-inserted { from { outline-color: #fff; } to { outline-color: #000; } } .node-insert-event { animation-duration: 0.01s; animation-name: node-inserted; } /* In file recovery */ .diff-view { height: 100%; overflow: auto; user-select: text; } .diff-line { padding: 0 var(--size-4-2); } .diff-line.mod-left { background-color: rgba(var(--background-modifier-error-rgb), 0.2); } .diff-line.mod-left .diff-changed { background-color: rgba(var(--background-modifier-error-rgb), 0.4); } .diff-line.mod-right { background-color: rgba(var(--background-modifier-success-rgb), 0.2); } .diff-line.mod-right .diff-changed { background-color: rgba(var(--background-modifier-success-rgb), 0.4); } .diff-collapsed { text-align: center; color: var(--text-muted); cursor: pointer; font-size: var(--font-ui-small); margin: var(--size-4-2) 0; } .diff-collapsed:hover { color: var(--text-accent); } /* Document search and replace */ /* Moves search to the top #todo move this into DOM */ .markdown-reading-view.is-searching, .markdown-source-view.is-replacing, .markdown-source-view.is-searching { flex-direction: column-reverse; } /* Container for dcoument search/replace UI */ .mod-active .document-search-container { background-color: var(--background-primary); } .document-search-container { display: flex; flex-direction: column; padding: var(--size-4-2) 0; margin: 0 var(--size-4-4); gap: var(--size-4-2); z-index: var(--layer-popover); } .document-search, .document-replace { width: 100%; max-width: var(--file-line-width); margin: 0 auto; display: flex; padding: 0 var(--size-4-2); gap: var(--size-4-2); } .document-replace { display: none; } .document-search-container.mod-replace-mode .document-replace { display: flex; } input.document-search-input, input.document-replace-input { flex-grow: 1; } input.document-search-input.mod-no-match, input.document-replace-input.mod-no-match { background-color: rgba(var(--background-modifier-error-rgb), 0.2); } @media (hover: hover) { input.document-search-input.mod-no-match:hover, input.document-replace-input.mod-no-match:hover { background-color: rgba(var(--background-modifier-error-rgb), 0.2); } } .document-replace-buttons, .document-search-buttons { display: flex; gap: var(--size-4-2); align-items: center; } .document-search-button { font-size: var(--font-ui-small); padding: 0 var(--size-4-2); color: var(--text-muted); } .document-search-close-button { cursor: var(--cursor); position: relative; top: 2px; font-size: 24px; line-height: 20px; height: 24px; width: 24px; padding: 0 var(--size-2-2); border-radius: var(--radius-s); color: var(--text-muted); } .document-search-close-button:before { font-family: Inter, sans-serif; content: "\d7"; font-weight: 300; } @media (hover: hover) { .document-search-close-button:hover { background-color: var(--background-modifier-hover); color: var(--text-normal); } } /* Read */ .markdown-rendered .search-highlight > div { position: absolute; pointer-events: none; box-shadow: 0 0 0px 2px var(--text-normal); opacity: 0.3; mix-blend-mode: var(--highlight-mix-blend-mode); border-radius: 2px; } .markdown-rendered .search-highlight > div.is-active { box-shadow: 0 0 0px 3px var(--text-accent); opacity: 1; } .cm-s-obsidian span.obsidian-search-match-highlight { box-shadow: 0 0 0px 3px var(--text-accent); mix-blend-mode: var(--highlight-mix-blend-mode); border-radius: 2px; } /* Edit */ .markdown-source-view.mod-cm5 { position: relative; padding-left: 20px; padding-right: 30px; } .workspace-leaf-content.is-read-mode .markdown-source-view.mod-cm5 { z-index: 0; } .markdown-source-view.mod-cm5 .document-search-container { position: absolute; top: 0; left: 0; width: 100%; z-index: 5; } .markdown-source-view.mod-cm6 .document-search-container { flex: 0 0 auto; } .cm-s-obsidian span.cm-highlight.obsidian-search-match-highlight { background-color: var(--text-selection); } .is-flashing { transition: all 0.25s ease; background-color: var(--text-highlight-bg); color: var(--text-normal); mix-blend-mode: var(--highlight-mix-blend-mode); border-radius: var(--radius-s); } /* Support for rtl text, explicit support for Arabic and Hebrew */ *[dir="rtl"] .dropdown, :root:lang(ar) .dropdown, :root:lang(iw) .dropdown { background-position: left 0.7em top 50%, 0 0; padding: 0.6em 0.8em 0.5em 1.4em; } /* class applies to select element itself, not a wrapper element */ select, .dropdown { -webkit-app-region: no-drag; height: var(--input-height); font-size: var(--font-ui-small); font-family: inherit; font-weight: var(--input-font-weight); color: var(--text-normal); line-height: var(--line-height-tight); padding: 0 1.9em 0 0.8em; max-width: 100%; /* useful when width is set to anything other than 100% */ box-sizing: border-box; margin: 0; border: 0; box-shadow: var(--input-shadow); border-radius: var(--input-radius); -webkit-appearance: none; appearance: none; background-color: var(--interactive-normal); background-repeat: no-repeat, repeat; /* arrow icon position (1em from the right, 50% vertical) , then gradient position*/ background-position: right 0.7em top 50%, 0 0; /* icon size, then gradient */ background-size: 0.65em auto, 100%; } @media (hover: hover) { select:hover, .dropdown:hover { box-shadow: var(--input-shadow-hover); background-color: var(--interactive-hover); } } select:focus, .dropdown:focus { box-shadow: 0 0 0px 3px var(--background-modifier-border-focus); outline: none; } .dropdown { background-image: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" width="292.4" height="292.4"%3E%3Cpath fill="%23000" opacity="0.4" d="M287 69.4a17.6 17.6 0 0 0-13-5.4H18.4c-5 0-9.3 1.8-12.9 5.4A17.6 17.6 0 0 0 0 82.2c0 5 1.8 9.3 5.4 12.9l128 127.9c3.6 3.6 7.8 5.4 12.8 5.4s9.2-1.8 12.8-5.4L287 95c3.5-3.5 5.4-7.8 5.4-12.8 0-5-1.9-9.2-5.5-12.8z"/%3E%3C/svg%3E'); } .theme-dark .dropdown { background-image: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" width="292.4" height="292.4"%3E%3Cpath fill="%23FFF" opacity="0.4" d="M287 69.4a17.6 17.6 0 0 0-13-5.4H18.4c-5 0-9.3 1.8-12.9 5.4A17.6 17.6 0 0 0 0 82.2c0 5 1.8 9.3 5.4 12.9l128 127.9c3.6 3.6 7.8 5.4 12.8 5.4s9.2-1.8 12.8-5.4L287 95c3.5-3.5 5.4-7.8 5.4-12.8 0-5-1.9-9.2-5.5-12.8z"/%3E%3C/svg%3E'); } /* Set options to normal weight */ .dropdown option { font-weight: normal; background-color: var(--background-primary); } .flair { background-color: var(--interactive-normal); border-radius: var(--radius-s); color: var(--text-normal); font-size: 10px; letter-spacing: 0.05em; margin-left: var(--size-4-2); padding: var(--size-2-1) var(--size-2-2); position: relative; text-transform: uppercase; white-space: nowrap; vertical-align: middle; } .flair.mod-flat { vertical-align: top; } .flair.mod-pop { background-color: var(--interactive-accent); color: var(--text-on-accent); } .markdown-preview-view:not(.allow-fold-lists) .list-collapse-indicator, .markdown-preview-view:not(.allow-fold-headings) .heading-collapse-indicator { display: none; } /* #todo Reduce specificity here */ .cm-fold-indicator .collapse-indicator, .cm-gutterElement .collapse-indicator, .collapse-indicator, .fold-gutter { opacity: 0; } /* .is-mobile & .cm-fold-indicator .collapse-indicator { opacity: 1; }*/ h1:hover .collapse-indicator, h2:hover .collapse-indicator, h3:hover .collapse-indicator, h4:hover .collapse-indicator, h5:hover .collapse-indicator, h6:hover .collapse-indicator, .collapse-indicator:hover, .is-collapsed .collapse-indicator, .cm-fold-indicator.is-collapsed .collapse-indicator, .cm-gutterElement:hover .collapse-indicator, .cm-gutterElement .is-collapsed .collapse-indicator, .cm-line:hover .cm-fold-indicator .collapse-indicator, .fold-gutter.is-collapsed, .fold-gutter:hover { opacity: 1; } .view-content .list-collapse-indicator svg.svg-icon, .view-content .collapse-indicator svg.svg-icon { color: var(--collapse-icon-color); } .view-content .is-collapsed .list-collapse-indicator svg.svg-icon, .view-content .is-collapsed .collapse-indicator svg.svg-icon { color: var(--collapse-icon-color-collapsed); } .collapse-icon { display: flex; align-items: center; } .collapse-icon:before { content: "\200B"; } .collapse-icon svg.svg-icon { color: var(--nav-collapse-icon-color); stroke-width: 4px; width: 10px; height: 10px; transition: transform 100ms ease-in-out; } .is-collapsed .collapse-icon svg.svg-icon { transform: rotate(-90deg); color: var(--nav-collapse-icon-color-collapsed); } .rtl .is-collapsed .collapse-icon svg.svg-icon { transform: rotate(90deg); } .markdown-preview-view .collapse-indicator { float: left; cursor: var(--cursor); } .markdown-preview-view .collapse-indicator .svg-icon { vertical-align: middle; } .markdown-preview-view .list-collapse-indicator { margin-left: -3em; padding: 0 8px; } .markdown-preview-view li.is-collapsed > ul, .markdown-preview-view li.is-collapsed > ol { display: none; } .markdown-preview-view .heading-collapse-indicator { margin-left: -22px; padding: 0 6px; } .markdown-source-view.mod-cm6 .cm-fold-indicator .collapse-indicator { opacity: 0; } .markdown-source-view.mod-cm6 .cm-line:hover .cm-fold-indicator .collapse-indicator, .markdown-source-view.mod-cm6 .cm-fold-indicator.is-collapsed .collapse-indicator { opacity: 1; } .markdown-source-view.mod-cm6 .cm-foldPlaceholder { color: var(--text-faint); background-color: transparent; border: none; margin-left: 8px; } .markdown-source-view.mod-cm6 .cm-fold-indicator { display: inline-block; position: relative; z-index: 1; } .markdown-source-view.mod-cm6 .cm-fold-indicator .collapse-indicator { position: absolute; top: 0; right: 0; height: 100%; cursor: var(--cursor); padding-right: 5px; } /* Consistency for hover states across all icon buttons */ svg.svg-icon { height: var(--icon-size); width: var(--icon-size); stroke-width: var(--icon-stroke); } /* Parent container of button rows */ .nav-buttons-container, .view-actions, .workspace-tab-header-inner, .side-dock-settings, .side-dock-actions { display: flex; justify-content: center; } .side-dock-settings, .side-dock-actions { gap: var(--size-2-3); } .view-actions { gap: 0; align-items: center; --icon-size: var(--icon-s); } .nav-buttons-container { flex-wrap: wrap; gap: var(--size-2-1); } .nav-file-icon .svg-icon, .suggestion-flair .svg-icon, .menu-item-icon .svg-icon, .status-bar-item .svg-icon { --icon-size: var(--icon-s); --icon-stroke: var(--icon-s-stroke-width); } .clickable-icon.side-dock-ribbon-action .svg-icon, .mod-left-split .workspace-tab-header-inner-icon .svg-icon, .mod-right-split .workspace-tab-header-inner-icon .svg-icon { --icon-size: var(--icon-l); --icon-stroke: var(--icon-l-stroke-width); } .clickable-icon.side-dock-ribbon-action:active, .mod-left-split .workspace-tab-header-inner-icon:active, .mod-right-split .workspace-tab-header-inner-icon:active { color: var(--icon-color-focused); } /* Parent button containers for SVG button icons */ .clickable-icon { -webkit-app-region: no-drag; background-color: transparent; display: flex; align-items: center; justify-content: center; padding: var(--size-2-2) var(--size-2-3); cursor: var(--cursor); border-radius: var(--clickable-icon-radius); color: var(--icon-color); opacity: var(--icon-opacity); transition: opacity 0.15s ease-in-out; height: auto; } @media (hover: hover) { .clickable-icon:hover { box-shadow: none; opacity: var(--icon-opacity-hover); color: var(--icon-color-hover); background-color: var(--background-modifier-hover); } .clickable-icon.has-active-menu, .clickable-icon:active { opacity: var(--icon-opacity-hover); color: var(--icon-color-focused); background-color: var(--background-modifier-hover); } } .clickable-icon.is-active { opacity: var(--icon-opacity-hover); color: var(--icon-color-active); background-color: var(--background-modifier-active-hover); } @media (hover: hover) { .clickable-icon.is-active:hover { background-color: var(--background-modifier-active-hover); } } .clickable-icon[aria-disabled='true'] { background-color: unset; color: var(--text-muted); opacity: 0.4; } @media (hover: hover) { .clickable-icon[aria-disabled='true']:hover { background-color: unset; } } .clickable-icon.mod-warning { color: var(--text-error); } .setting-item-control .clickable-icon { padding: var(--size-2-2); } .markdown-rendered.show-indentation-guide li > ul, .markdown-rendered.show-indentation-guide li > ol { position: relative; } .markdown-rendered.show-indentation-guide li > ul::before, .markdown-rendered.show-indentation-guide li > ol::before { content: "\200B"; position: absolute; display: block; left: -1em; top: 0; bottom: 0; border-right: var(--indentation-guide-width) solid var(--indentation-guide-color); } .markdown-source-view.mod-cm6 .cm-indent { display: inline-block; } .markdown-source-view.mod-cm6 .cm-indent::before { content: "\200B"; display: block; width: 1px; border-right: var(--indentation-guide-width) solid var(--indentation-guide-color); color: transparent; position: absolute; top: 0; bottom: 0; transform: translateX(0.15em); } .markdown-source-view.mod-cm6 .cm-active-indent::before { border-color: var(--indentation-guide-color-active); } .input-label { display: inline-block; width: 150px; text-align: right; margin-right: var(--size-4-2); } .input-button { padding: 6px 14px; margin-left: 14px; color: var(--text-muted); font-size: var(--font-ui-medium); position: relative; top: -1px; } @media (hover: hover) { .input-button:hover { color: var(--text-normal); } } textarea, input[type='text'], input[type='search'], input[type='email'], input[type='password'], input[type='number'] { -webkit-app-region: no-drag; background: var(--background-modifier-form-field); border: var(--input-border-width) solid var(--background-modifier-border); color: var(--text-normal); font-family: inherit; padding: var(--size-4-1) var(--size-4-2); font-size: var(--font-ui-small); border-radius: var(--input-radius); outline: none; } @media (hover: hover) { textarea:hover, input[type='text']:hover, input[type='search']:hover, input[type='email']:hover, input[type='password']:hover, input[type='number']:hover { border-color: var(--background-modifier-border-hover); transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out; } } textarea:active, input[type='text']:active, input[type='search']:active, input[type='email']:active, input[type='password']:active, input[type='number']:active, textarea:focus, input[type='text']:focus, input[type='search']:focus, input[type='email']:focus, input[type='password']:focus, input[type='number']:focus { border-color: var(--background-modifier-border-focus); transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out; } textarea:active, input[type='text']:active, input[type='search']:active, input[type='email']:active, input[type='password']:active, input[type='number']:active, textarea:focus, input[type='text']:focus, input[type='search']:focus, input[type='email']:focus, input[type='password']:focus, input[type='number']:focus, textarea:focus-visible, input[type='text']:focus-visible, input[type='search']:focus-visible, input[type='email']:focus-visible, input[type='password']:focus-visible, input[type='number']:focus-visible { box-shadow: 0 0 0 2px var(--background-modifier-border-focus); } textarea::placeholder, input[type='text']::placeholder, input[type='search']::placeholder, input[type='email']::placeholder, input[type='password']::placeholder, input[type='number']::placeholder { color: var(--text-faint); } input[type='text'], input[type='search'], input[type='email'], input[type='password'], input[type='number'] { height: var(--input-height); } /* Textarea */ textarea { line-height: var(--line-height-tight); } input[type="search"]::-webkit-search-decoration, input[type="search"]::-webkit-search-cancel-button { display: none; pointer-events: none; } input[type=number]::-webkit-inner-spin-button { -webkit-appearance: none; } /* Range slider */ input[type='range'] { width: 100px; -webkit-appearance: none; background-color: var(--slider-track-background); border-radius: var(--slider-track-height); height: var(--slider-track-height); padding: 0; } body:not(.is-mobile) input[type=range]:focus { box-shadow: none; } input[type='range']::-webkit-slider-runnable-track { height: 6px; -webkit-appearance: none; } input[type='range']::-webkit-slider-thumb { -webkit-appearance: none; height: var(--slider-thumb-height); width: var(--slider-thumb-width); border-radius: var(--slider-thumb-radius); cursor: default; background: #FFF; border: var(--slider-thumb-border-width) solid var(--slider-thumb-border-color); position: relative; top: var(--slider-thumb-y); transition: all 0.1s linear; box-shadow: 0 1px 1px 0px rgba(0, 0, 0, 0.05), 0 2px 2px 0px rgba(0, 0, 0, 0.1); } input[type=range]::-webkit-slider-thumb:hover, input[type=range]::-webkit-slider-thumb:active { background: white; border-color: var(--background-modifier-border-focus); box-shadow: 0 1px 2px 0px rgba(0, 0, 0, 0.1), 0 2px 3px 0px rgba(0, 0, 0, 0.2); transition: all 0.1s linear; } input[type='range'] { outline: none; } body:not(.is-mobile) input[type=range]:focus::-webkit-slider-thumb { box-shadow: 0 1px 2px 0px rgba(0, 0, 0, 0.05), 0 2px 3px 0px rgba(0, 0, 0, 0.2); } body:not(.is-mobile) input[type=range]:focus-visible::-webkit-slider-thumb { border-color: var(--background-modifier-border-focus); box-shadow: 0 1px 2px 0px rgba(0, 0, 0, 0.05), 0 2px 3px 0px rgba(0, 0, 0, 0.2), 0 0 0px 2px var(--background-modifier-border-focus); } /* Color inputs */ input[type="color"] { -webkit-appearance: none; width: calc(var(--swatch-width) + 4px); background-color: transparent; border: none; cursor: var(--cursor); padding: 0; } input[type="color"]::-webkit-color-swatch-wrapper { padding: 2px; } input[type="color"]::-webkit-color-swatch { border: 0px; box-shadow: var(--swatch-shadow); border-radius: var(--swatch-radius); height: var(--swatch-height); width: var(--swatch-width); align-self: center; } @media (hover: hover) { input[type="color"]::-webkit-color-swatch:hover { box-shadow: inset 0 0 0 1px rgba(var(--mono-rgb-100), 0.25), 0 0 0 3px var(--background-modifier-border-hover); } } input[type="color"]:focus-visible::-webkit-color-swatch, input[type="color"]:focus::-webkit-color-swatch { box-shadow: var(--swatch-shadow), 0 0 0 3px var(--background-modifier-border-focus); } select.mod-hidden { display: none; } .notice-container { z-index: var(--layer-notice); position: fixed; top: 22px; right: 0; padding: 10px; overflow: hidden; } .notice { background-color: var(--background-modifier-message); border-radius: var(--radius-m); box-shadow: 0 2px 8px var(--background-modifier-box-shadow); color: #FAFAFA; font-size: var(--font-ui-small); line-height: var(--line-height-tight); padding: 0.75em 1em 0.75em 1em; max-width: 300px; margin-bottom: 14px; white-space: pre-wrap; overflow-wrap: anywhere; word-break: break-word; cursor: var(--cursor); } .menu { padding: var(--size-2-3); border: 1px solid var(--background-modifier-border-hover); background-color: var(--background-secondary); border-radius: var(--radius-m); box-shadow: var(--shadow-s); position: fixed; z-index: var(--layer-menu); user-select: none; max-height: calc(100% - var(--header-height)); overflow: hidden; } .menu.mod-no-icon .menu-item-icon:first-child { display: none; } .menu-separator { height: 0; margin: var(--size-2-3) calc(var(--size-2-3) * -1); border-bottom: 1px solid var(--background-modifier-border); } .menu-separator:last-child, .menu-separator:first-child { display: none; } .menu-separator + .menu-separator { display: none; } .menu-item { display: flex; align-items: center; gap: var(--size-4-2); padding: var(--size-4-1) var(--size-4-2); cursor: var(--cursor); font-size: var(--font-ui-small); border-radius: var(--radius-s); white-space: nowrap; } .menu-item.is-disabled { cursor: default; color: var(--text-faint); } .menu-item.is-warning.selected { color: var(--text-error); } .menu-item.is-label { cursor: default; pointer-events: none; font-size: var(--font-ui-medium); color: var(--text-muted); white-space: pre-wrap; overflow-wrap: anywhere; word-break: break-word; } @media (hover: hover) { .menu-item.is-warning:hover { color: var(--text-error); } .menu-item:hover:not(.is-disabled):not(.is-label) { background-color: var(--background-modifier-hover); } } .menu-item.selected:not(.is-disabled):not(.is-label) { background-color: var(--background-modifier-hover); } .menu-item-icon { flex: 0 1 auto; display: flex; color: var(--text-muted); } .menu-item.is-warning.selected .menu-item-icon, .menu-item.is-warning:hover .menu-item-icon { color: var(--text-error); } .menu-item-icon .mod-submenu { color: var(--text-faint); } .menu-item-title { flex: 1 0 0; } .menu.mod-tab-list .menu-item-title { max-width: 300px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: bottom; } .debug-textarea { width: 100%; height: 50vh; max-height: 80vh; font-family: var(--font-monospace); tab-size: 4; resize: none; } .modal-container { display: flex; align-items: center; justify-content: center; position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: var(--layer-modal); } .modal-container.mod-dim .modal { box-shadow: var(--shadow-l); } .modal-bg { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: var(--background-modifier-cover); } .modal { --checkbox-size: var(--font-ui-medium); background-color: var(--modal-background); border-radius: var(--modal-radius); border: var(--modal-border-width) solid var(--modal-border-color); padding: var(--size-4-4); position: relative; min-height: 100px; width: var(--dialog-width); max-width: var(--dialog-max-width); max-height: var(--dialog-max-height); display: flex; flex-direction: column; overflow: auto; } .modal.mod-sidebar-layout { padding: 0; width: var(--modal-width); height: var(--modal-height); max-width: var(--modal-max-width); max-height: var(--modal-max-height); overflow: hidden; display: flex; flex-direction: column; } .modal.mod-sidebar-layout .modal-content { display: flex; } .modal-sidebar { background-color: var(--background-secondary); flex: 1 1 var(--modal-community-sidebar-width); min-width: var(--modal-community-sidebar-width); padding: var(--size-4-3) 0 0 0; display: flex; flex-direction: column; } body:not(.native-scrollbars) .modal-close-button { right: 12px; } .modal-close-button { cursor: var(--cursor); position: absolute; top: var(--size-2-3); right: var(--size-2-3); font-size: 24px; line-height: 20px; height: 24px; width: 24px; padding: 0 var(--size-2-2); border-radius: var(--radius-s); color: var(--text-muted); } @media (hover: hover) { .modal-close-button:hover { background-color: var(--background-modifier-hover); color: var(--text-normal); } } .modal-close-button:before { font-family: Inter, sans-serif; content: '\D7'; font-weight: 300; } .modal-title { font-size: 1.2em; margin-bottom: 0.75em; font-weight: var(--font-semibold); text-align: left; line-height: var(--line-height-tight); } .mod-sidebar-layout .modal-title { display: none; } .modal-title:empty { display: none; } .modal-content { flex: 1 1 auto; font-size: var(--font-ui-medium); } .modal-button-container { margin-top: 1.5em; display: flex; justify-content: flex-end; gap: var(--size-4-2); flex-wrap: wrap; font-size: var(--font-ui-medium); } .modal-button-container .mod-checkbox { flex-grow: 1; display: flex; align-items: center; gap: var(--size-4-1); } .modal-checkbox-label { cursor: var(--cursor); margin-left: 10px; user-select: none; } .message-container { margin: var(--size-4-4) 0; } .message { display: inline-block; padding: 6px 12px 6px 12px; border-radius: var(--radius-s); } .message.mod-success { background-color: var(--background-modifier-success); color: var(--text-on-accent); } .message.mod-success a { color: var(--text-normal); } .message.mod-info { background-color: var(--background-modifier-info); } .message.mod-error { background-color: var(--background-modifier-error); color: var(--text-on-accent); } .message.mod-error a { color: var(--text-normal); } .mod-warning { color: var(--text-error); } .mod-success { color: var(--text-success); } .mod-file-rename .rename-textarea { overflow: hidden; padding: var(--size-2-3) var(--size-4-2); resize: none; width: 100%; } .modal-setting-back-button { position: absolute; top: var(--safe-area-inset-top); left: 0; padding: var(--size-4-3) var(--size-4-3); height: var(--modal-header-height); color: var(--text-normal); font-weight: var(--font-semibold); } .modal-setting-back-button-icon { display: flex; align-items: center; margin-right: 6px; } .modal-setting-nav-bar { display: flex; flex: 0 1 auto; padding: var(--size-4-3); border-bottom: 1px solid var(--background-modifier-border); } .popover { background-color: var(--background-primary); border: 1px solid var(--background-modifier-border); box-shadow: var(--shadow-s); border-radius: var(--radius-m); padding: var(--size-4-5); position: relative; max-height: 95vh; } .popover-title { font-weight: var(--font-extrabold); } .popover-content { margin: var(--size-4-2) 0; } .components-container .popover { width: 300px; margin-top: var(--size-4-5); } .components-container .popover .popover-content { font-size: var(--font-ui-medium); } .popover.hover-popover { position: absolute; z-index: var(--layer-popover); max-width: 80vw; min-height: 100px; width: var(--popover-width); padding: 0; overflow: hidden; } .popover.hover-popover .markdown-preview-view { font-size: var(--popover-font-size); } .popover.hover-popover > .mod-empty { display: flex; justify-content: center; align-items: center; padding: 20px; font-size: var(--popover-font-size); color: var(--text-muted); } .popover.hover-popover > .media-embed { min-height: 0; line-height: 0; border: none; } .popover.hover-popover > .image-embed img { max-height: 100%; max-width: 100%; height: auto; } .popover.hover-popover > .pdf-embed { width: var(--popover-pdf-width); height: var(--popover-pdf-height); max-height: var(--popover-max-height); } .popover.hover-popover > .markdown-embed { height: var(--popover-height); max-height: var(--popover-max-height); border: 0; padding: 0; margin: 0; } .popover.hover-popover > .markdown-embed > .markdown-embed-content { height: 100%; overflow: auto; } .popover.hover-popover > .markdown-embed > .markdown-embed-content > .markdown-preview-view { padding: var(--file-margins); } .popover.hover-popover > .markdown-embed .mod-header + div > *:first-child { margin-top: 0; } .follow-link-popover { box-shadow: 0 2px 8px var(--background-modifier-box-shadow); background-color: rgba(0, 0, 0, 0.9); border-radius: var(--radius-m); color: #ccc; font-size: var(--font-ui-small); line-height: 20px; max-width: 300px; padding: 5px 12px; text-align: center; z-index: var(--layer-tooltip); white-space: pre-wrap; top: calc(100%); } .follow-link-popover.mod-bottom { top: 0; } @media (hover: hover) { .follow-link-popover:hover { background-color: #000000; } } .follow-link-popover .popover-arrow { position: absolute; top: calc(100%); left: 50%; width: 0; margin-left: -5px; border-right: 5px solid transparent; border-left: 5px solid transparent; content: " "; font-size: 0; line-height: 0; border-top: 5px solid rgba(0, 0, 0, 0.9); border-bottom: 5px solid transparent; } .follow-link-popover.mod-bottom .popover-arrow { border-bottom: 5px solid rgba(0, 0, 0, 0.9); border-top: none; top: -5px; } .markdown-preview-view progress, .markdown-rendered progress, .markdown-source-view.is-live-preview progress { -webkit-writing-mode: horizontal-tb; writing-mode: horizontal-tb; appearance: none; box-sizing: border-box; display: inline-block; height: 6px; margin-bottom: 4px; max-width: 100%; overflow: hidden; border-radius: 0px; border: 0; vertical-align: -0.2rem; } .markdown-preview-view progress[value]::-webkit-progress-bar, .markdown-rendered progress[value]::-webkit-progress-bar, .markdown-source-view.is-live-preview progress[value]::-webkit-progress-bar { background-color: var(--background-secondary); box-shadow: inset 0px 0px 0px 1px var(--background-modifier-border); border-radius: 6px; overflow: hidden; } .markdown-preview-view progress[value]::-webkit-progress-value, .markdown-rendered progress[value]::-webkit-progress-value, .markdown-source-view.is-live-preview progress[value]::-webkit-progress-value { background-color: var(--interactive-accent); overflow: hidden; } .progress-bar { position: absolute; height: 100vh; width: 100vw; top: 0; left: 0; background-color: var(--background-primary); z-index: 10000; display: flex; flex-direction: column; justify-content: center; align-items: center; } .progress-bar-message { margin-bottom: var(--size-4-8); opacity: 1; color: var(--text-muted); } .progress-bar-indicator { position: relative; height: 8px; margin: 0 10vw; width: 90vw; overflow-x: hidden; border-radius: 3px; } .progress-bar-line { position: absolute; opacity: 0.4; background-color: var(--interactive-accent); width: 150%; height: 8px; } .progress-bar-subline { position: absolute; background-color: var(--interactive-accent); height: 8px; } .progress-bar-subline.mod-increase { animation: increase 2s infinite; } .progress-bar-subline.mod-decrease { animation: decrease 2s 0.5s infinite; } .progress-bar .progress-bar-subline { transition: width 150ms ease-in-out; } @keyframes increase { from { left: -5%; width: 5%; } to { left: 130%; width: 100%; } } @keyframes decrease { from { left: -80%; width: 80%; } to { left: 110%; width: 10%; } } .prompt { display: flex; flex-direction: column; border-radius: var(--radius-l); background-color: var(--background-primary); box-shadow: var(--shadow-l); border: var(--prompt-border-width) solid var(--prompt-border-color); z-index: 1; position: absolute; top: 80px; width: var(--prompt-width); max-width: var(--prompt-max-width); max-height: var(--prompt-max-height); overflow: hidden; } .prompt-input-container { display: flex; } input.prompt-input { width: 100%; padding: var(--size-4-6); background-color: var(--background-primary); font-size: var(--font-ui-medium); border: none; height: 40px; border-radius: 0; border-bottom: 1px solid var(--background-secondary); } input.prompt-input:hover, input.prompt-input:focus, input.prompt-input:focus-visible { border-bottom: 1px solid var(--background-secondary); box-shadow: none; } .prompt-results { list-style: none; margin: 0; padding: var(--size-4-3); overflow-y: auto; } .prompt-instructions { border-top: 1px solid var(--background-secondary); user-select: none; font-size: var(--font-ui-smaller); color: var(--text-muted); padding: var(--size-4-2); text-align: center; display: flex; flex-wrap: wrap; justify-content: center; gap: var(--size-4-3); } .prompt-instruction { display: inline-block; } .prompt-instruction-command { font-weight: var(--bold-weight); margin-right: var(--size-2-2); } body:not(.native-scrollbars) ::-webkit-scrollbar { background-color: var(--scrollbar-bg); width: 12px; height: 12px; -webkit-border-radius: var(--radius-l); background-color: transparent; } body:not(.native-scrollbars) ::-webkit-scrollbar-track { background-color: transparent; } body:not(.native-scrollbars) ::-webkit-scrollbar-thumb { background-color: var(--scrollbar-thumb-bg); -webkit-border-radius: var(--radius-l); background-clip: padding-box; border: 2px solid transparent; border-width: 3px 3px 3px 2px; min-height: 45px; } body:not(.native-scrollbars) ::-webkit-scrollbar-thumb:active { -webkit-border-radius: var(--radius-l); } body:not(.native-scrollbars) ::-webkit-scrollbar-thumb:hover, body:not(.native-scrollbars) ::-webkit-scrollbar-thumb:active { background-color: var(--scrollbar-active-thumb-bg); } body:not(.native-scrollbars) ::-webkit-scrollbar-corner { background: transparent; } body:not(.native-scrollbars) * { scrollbar-width: thin; scrollbar-color: var(--scrollbar-thumb-bg) var(--scrollbar-bg); } /* Scroll indicator for sidebar containers body:not(.is-translucent):not(.is-mobile) .workspace-tabs { .item-list, .nav-files-container, .search-result-container, .tag-container, .outgoing-link-pane, .backlink-pane { background: linear-gradient( var(--background-secondary) 10%, rgba(0, 0, 0, 0) ) center top, linear-gradient( var(--background-modifier-border) 100%, rgba(0, 0, 0, 0) ) center top; background-repeat: no-repeat; background-size: 100% 40px, 91% 1px; background-attachment: local, scroll; } } */ .suggestion-container { position: absolute; background-color: var(--background-primary); max-width: 500px; border-radius: var(--radius-m); border: 1px solid var(--background-modifier-border); box-shadow: var(--shadow-s); z-index: var(--layer-notice); } .suggestion { max-height: 300px; overflow-y: auto; padding: var(--size-2-3); } .suggestion-item, .suggestion-empty { font-size: var(--font-ui-medium); margin-bottom: 1px; } .suggestion-empty { color: var(--text-muted); padding: var(--size-4-2); padding-top: var(--size-4-3); text-align: center; } .suggestion-item { cursor: var(--cursor); padding: var(--size-2-3) var(--size-4-3); padding-left: 12px; white-space: pre-wrap; border-radius: var(--radius-s); } .suggestion-item.is-selected { background-color: var(--background-modifier-hover); } .suggestion-item.mod-downranked { color: var(--text-muted); } .suggestion-item.mod-complex { align-items: baseline; display: flex; justify-content: space-between; } .suggestion-item.mod-complex .suggestion-title { overflow-wrap: break-word; } .suggestion-item.mod-complex .suggestion-content { display: flex; flex-direction: column; overflow: hidden; text-overflow: ellipsis; margin-right: auto; } .suggestion-item.mod-complex .suggestion-prefix:after { content: ': '; } .suggestion-item.mod-complex .suggestion-highlight { font-weight: bold; } .suggestion-item.mod-complex .suggestion-note { font-size: 0.8em; color: var(--text-muted); width: 100%; flex-basis: 100%; overflow-wrap: break-word; } .suggestion-item.mod-complex .suggestion-aux { display: flex; align-items: center; align-self: center; flex-shrink: 0; } .suggestion-item.mod-complex .suggestion-hotkey { font-size: var(--font-ui-smaller); font-family: var(--font-interface); padding: 2px 6px; } .suggestion-item.mod-complex .suggestion-hotkey:not(:last-child) { margin-left: 10px; } .suggestion-item.mod-complex .suggestion-flair { color: var(--text-muted); opacity: var(--icon-opacity); margin: 0 4px 0 12px; display: flex; align-items: center; } .suggestion-item.mod-complex .suggestion-flair:not(:last-child) { margin-left: 6px; } .suggestion-highlight { font-weight: bold; } .suggestion-bg { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: var(--background-modifier-cover); z-index: var(--layer-popover); } .horizontal-tab-header { display: flex; } .horizontal-tab-nav-item, .vertical-tab-nav-item { padding: var(--size-4-1) var(--size-4-2); user-select: none; cursor: var(--cursor); font-size: calc(var(--font-ui-small) + 1px); border-radius: var(--radius-s); } .horizontal-tab-nav-item.is-active, .vertical-tab-nav-item.is-active { background-color: var(--interactive-accent); color: var(--text-on-accent); } @media (hover: hover) { .horizontal-tab-nav-item.is-active:hover, .vertical-tab-nav-item.is-active:hover { background-color: var(--interactive-accent); } } @media (hover: hover) { .horizontal-tab-nav-item:hover, .vertical-tab-nav-item:hover { background-color: var(--background-modifier-hover); } } .vertical-tab-nav-item { margin-bottom: var(--size-2-1); } .vertical-tab-nav-item-chevron { display: none; } .horizontal-tab-content, .vertical-tab-content { background-color: var(--background-primary); padding-left: var(--size-4-12); padding-right: var(--size-4-12); } .vertical-tabs-container { display: flex; } .vertical-tab-header { padding: var(--size-4-3); background-color: var(--background-secondary); } .vertical-tab-header-group-items { display: flex; flex-direction: column; } .vertical-tab-header-group-title { font-size: var(--font-ui-smaller); color: var(--text-faint); font-weight: var(--font-semibold); padding: var(--size-4-2); user-select: none; } .vertical-tab-header-group { padding: var(--size-4-3) 0; } .vertical-tab-content-container { overflow: hidden; flex-grow: 1; } .vertical-tab-content { overflow-y: auto; height: 100%; padding-top: var(--size-4-8); padding-bottom: var(--size-4-16); } .vertical-tab-content h2 { font-size: var(--font-ui-medium); font-weight: var(--font-semibold); } .checkbox-container { -webkit-app-region: no-drag; cursor: var(--cursor); background-color: var(--background-modifier-border-hover); border-radius: var(--toggle-radius); display: inline-block; flex-shrink: 0; height: calc(var(--toggle-thumb-height) + var(--toggle-border-width) * 2); position: relative; user-select: none; width: var(--toggle-width); box-shadow: inset 0 4px 10px rgba(0, 0, 0, 0.07), inset 0 0 1px rgba(0, 0, 0, 0.21); transition: box-shadow 0.15s ease-in-out, outline 0.15s ease-in-out, border 0.15s ease-in-out, opacity 0.15s ease-in-out; outline: 0 solid var(--background-modifier-border-focus); } .checkbox-container input[type='checkbox'] { position: absolute; opacity: 0; left: 0; } .checkbox-container:focus-within { outline: var(--toggle-border-width) solid var(--background-modifier-border-focus); } @media (hover: hover) { .checkbox-container:hover { box-shadow: inset 0 6px 20px rgba(0, 0, 0, 0.14), inset 0 0 1px rgba(0, 0, 0, 0.28); } } .checkbox-container.is-enabled { background-color: var(--interactive-accent); } .checkbox-container.is-enabled:after { transform: translate3d(calc(var(--toggle-width) - var(--toggle-thumb-width) - var(--toggle-border-width)), 0, 0); } .checkbox-container.is-enabled:active:after { left: -4px; } .checkbox-container:before { content: ''; display: block; position: absolute; top: 0; left: 0; bottom: 0; right: 0; opacity: 0; } .checkbox-container:after { pointer-events: none; content: ''; display: block; position: absolute; background-color: var(--toggle-thumb-color); width: var(--toggle-thumb-width); height: var(--toggle-thumb-height); margin: var(--toggle-border-width) 0 0 0; border-radius: var(--toggle-thumb-radius); transition: transform 0.15s ease-in-out, width 0.1s ease-in-out, left 0.1s ease-in-out; left: 0; transform: translate3d(var(--toggle-border-width), 0, 0); box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15); } .checkbox-container:active:after { width: calc(var(--toggle-thumb-width) + var(--toggle-border-width)); } .checkbox-container.mod-small { width: var(--toggle-s-width); height: calc(var(--toggle-s-thumb-height) + var(--toggle-s-border-width) * 2); } .checkbox-container.mod-small:focus-within { outline: var(--toggle-s-border-width) solid var(--background-modifier-border-focus); } .checkbox-container.mod-small:after { width: var(--toggle-s-thumb-width); height: var(--toggle-s-thumb-height); margin: var(--toggle-s-border-width) 0 0 0; transform: translate3d(var(--toggle-s-border-width), 0, 0); } .checkbox-container.mod-small.is-enabled:after { transform: translate3d(calc(var(--toggle-s-width) - var(--toggle-s-thumb-width) - var(--toggle-s-border-width)), 0, 0); } .checkbox-container.mod-small:active:after { width: calc(var(--toggle-s-thumb-width) + var(--toggle-s-border-width)); } /* Add this attribute to the element that needs a tooltip */ .tooltip { animation: pop-down 200ms forwards ease-in-out; box-shadow: 0 2px 8px var(--background-modifier-box-shadow); background-color: var(--background-modifier-message); border-radius: var(--radius-s); color: #FAFAFA; font-size: var(--font-ui-smaller); font-weight: var(--font-medium); left: 50%; line-height: var(--line-height-tight); max-width: 300px; padding: 4px 8px; position: fixed; text-align: center; transform: translateX(-50%); z-index: var(--layer-tooltip); pointer-events: none; white-space: pre-wrap; word-break: normal; overflow-wrap: anywhere; } .tooltip.mod-right { animation: pop-right 200ms forwards ease-in-out; transform: translateY(-50%); } .tooltip.mod-left { animation: pop-right 200ms forwards ease-in-out; transform: translateY(-50%); } .tooltip.mod-error { width: 200px; background-color: var(--background-modifier-error); color: var(--text-on-accent); } .tooltip.mod-wide { max-width: 450px; width: 400px; } /* Triangle hack to make tooltip look like a speech bubble */ .tooltip .tooltip-arrow { position: absolute; top: -5px; left: 50%; width: 0; margin-left: -5px; border-bottom: 5px solid var(--background-modifier-message); border-right: 5px solid transparent; border-left: 5px solid transparent; content: " "; font-size: 0; line-height: 0; } .tooltip.mod-right .tooltip-arrow { top: calc(50% - 5px); left: -5px; border-right: 5px solid var(--background-modifier-message); border-top: 5px solid transparent; border-bottom: 5px solid transparent; } .tooltip.mod-left .tooltip-arrow { top: calc(50% - 5px); left: calc(100% + 5px); border-left: 5px solid var(--background-modifier-message); border-top: 5px solid transparent; border-bottom: 5px solid transparent; } .tooltip.mod-top .tooltip-arrow { top: calc(100%); border-top: 5px solid var(--background-modifier-message); border-bottom: 5px solid transparent; } .tooltip.mod-error .tooltip-arrow { border-bottom-color: var(--background-modifier-error); } .tooltip.mod-error.mod-right .tooltip-arrow { border-right-color: var(--background-modifier-error); border-bottom: 5px solid transparent; } .tooltip.mod-error.mod-left .tooltip-arrow { border-left-color: var(--background-modifier-error); border-bottom: 5px solid transparent; } [aria-label] .svg-icon { pointer-events: none; } @keyframes pop-down { 0% { opacity: 0; transform: translateX(-50%) scale(1); } 20% { opacity: 0.7; transform: translateX(-50%) scale(1.02); } 40% { opacity: 1; transform: translateX(-50%) scale(1.05); } 100% { opacity: 1; transform: translateX(-50%) scale(1); } } @keyframes pop-right { 0% { opacity: 0; transform: translateY(-50%) scale(1); } 20% { opacity: 0.7; transform: translateY(-50%) scale(1.02); } 40% { opacity: 1; transform: translateY(-50%) scale(1.05); } 100% { opacity: 1; transform: translateY(-50%) scale(1); } } .tree-item-self { padding: var(--nav-item-padding); margin-bottom: 1px; display: flex; align-items: baseline; border-radius: var(--radius-s); font-size: var(--nav-item-size); font-weight: var(--nav-item-weight); color: var(--nav-item-color); } .tree-item-self.mod-collapsible { padding: var(--nav-item-parent-padding); } .tree-item-self.is-clickable { cursor: var(--cursor); } @media (hover: hover) { .tree-item-self.is-clickable:hover { background-color: var(--nav-item-background-hover); color: var(--nav-item-color-hover); font-weight: var(--nav-item-weight-hover); } } .tree-item-self .tree-item-icon { display: flex; align-items: center; padding-inline-end: var(--size-2-3); opacity: var(--icon-opacity); color: var(--icon-color); flex: 0 0 auto; } .tree-item-self .tree-item-icon .svg-icon:not(.right-triangle) { --icon-size: var(--icon-s); --icon-stroke: var(--icon-s-stroke-width); } .tree-item-flair-outer { flex: 0 0 auto; margin-left: var(--size-4-1); display: flex; align-items: center; } .tree-item-flair { font-size: var(--font-ui-smaller); color: var(--text-faint); line-height: 1; border-radius: var(--radius-s); } .tree-item-self:hover .tree-item-flair { color: var(--text-muted); } .tree-item-inner { flex: 1 1 auto; line-height: var(--line-height-tight); } .tree-item-inner-subtext { color: var(--text-faint); font-size: 85%; } .tree-item-children { padding-left: var(--nav-item-children-padding-left); margin-left: var(--nav-item-children-margin-left); margin-bottom: 1px; border-left: var(--nav-indentation-guide-width) solid var(--nav-indentation-guide-color); } audio { outline: none; } .markdown-rendered audio { max-width: 100%; outline: none; } audio { width: 100%; height: 42px; } audio::-webkit-media-controls-enclosure { border-radius: calc(var(--radius-m) - 1px); border: 1px solid var(--background-modifier-border); background-color: var(--background-primary-alt); } audio::-webkit-media-controls-current-time-display, audio::-webkit-media-controls-time-remaining-display { font-family: var(--font-interface); } iframe { border: 0; } kbd { color: var(--code-normal); font-family: var(--font-monospace); background-color: var(--code-background); border-radius: var(--radius-s); font-size: var(--code-size); padding: 0.1em 0.25em; } .workspace-leaf-content[data-type=pdf] .view-content { padding: 0; overflow: hidden; } .pdf-container { height: 100%; padding: 0 10px; position: relative; } .pdf-scroll-container { overflow-y: auto; height: 100%; } .pdf-canvas { width: 100%; margin: 6px 0; } .pdf-controls { position: absolute; top: 30px; left: calc(50% - 50px); height: 30px; background-color: var(--background-secondary); opacity: 0; border-radius: 6px; box-shadow: inset 8px 0 8px -10px var(--background-modifier-box-shadow); transition: opacity 200ms ease-in-out; text-align: center; font-size: var(--font-ui-medium); line-height: 30px; padding: 0 30px; } .pdf-controls.mod-visible { opacity: 0.75; } @media (hover: hover) { .pdf-container:hover .pdf-controls { opacity: 0.75; } .pdf-container:hover .pdf-controls:hover { opacity: 0.9; } } .pdf-controls-pager { position: absolute; top: 3px; cursor: var(--cursor); } .pdf-controls-pager.mod-previous { left: 8px; } .pdf-controls-pager.mod-next { right: 8px; } .markdown-rendered video { max-width: 100%; outline: none; } .markdown-rendered blockquote { color: var(--blockquote-color); font-style: var(--blockquote-font-style); background-color: var(--blockquote-background-color); border-left: var(--blockquote-border-thickness) solid var(--blockquote-border-color); padding: 0 0 0 var(--size-4-6); margin-inline-start: 0; margin-inline-end: 0; } .markdown-rendered blockquote > :first-child { margin-top: 0; } .markdown-rendered blockquote > :last-child { margin-bottom: 0; } .cm-s-obsidian span.cm-quote { color: var(--blockquote-color); } .cm-s-obsidian span.cm-formatting-quote { color: var(--text-faint); } .cm-s-obsidian .hmd-inactive-line span.cm-formatting-quote { color: transparent; } .markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote:before, .markdown-source-view.mod-cm6 .cm-blockquote-border:before { content: "\200b"; display: block; width: 1px; border-left: var(--blockquote-border-thickness) solid var(--blockquote-border-color); color: transparent; position: absolute; top: 0; bottom: 0; } .markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote { font-style: var(--blockquote-style); background-color: var(--blockquote-background-color); } .markdown-source-view.mod-cm6.is-live-preview .HyperMD-quote:before { left: 0; } .markdown-source-view.mod-cm6 .cm-blockquote-border { display: inline-block; } .callout { --callout-color: var(--callout-default); --callout-icon: lucide-pencil; } .callout[data-callout="abstract"], .callout[data-callout="summary"], .callout[data-callout="tldr"] { --callout-color: var(--callout-summary); --callout-icon: lucide-clipboard-list; } .callout[data-callout="info"] { --callout-color: var(--callout-info); --callout-icon: lucide-info; } .callout[data-callout="todo"] { --callout-color: var(--callout-todo); --callout-icon: lucide-check-circle-2; } .callout[data-callout="important"] { --callout-color: var(--callout-important); --callout-icon: lucide-flame; } .callout[data-callout="tip"], .callout[data-callout="hint"] { --callout-color: var(--callout-tip); --callout-icon: lucide-flame; } .callout[data-callout="success"], .callout[data-callout="check"], .callout[data-callout="done"] { --callout-color: var(--callout-success); --callout-icon: lucide-check; } .callout[data-callout="question"], .callout[data-callout="help"], .callout[data-callout="faq"] { --callout-color: var(--callout-question); --callout-icon: help-circle; } .callout[data-callout="warning"], .callout[data-callout="caution"], .callout[data-callout="attention"] { --callout-color: var(--callout-warning); --callout-icon: lucide-alert-triangle; } .callout[data-callout="failure"], .callout[data-callout="fail"], .callout[data-callout="missing"] { --callout-color: var(--callout-fail); --callout-icon: lucide-x; } .callout[data-callout="danger"], .callout[data-callout="error"] { --callout-color: var(--callout-error); --callout-icon: lucide-zap; } .callout[data-callout="bug"] { --callout-color: var(--callout-bug); --callout-icon: lucide-bug; } .callout[data-callout="example"] { --callout-color: var(--callout-example); --callout-icon: lucide-list; } .callout[data-callout="quote"], .callout[data-callout="cite"] { --callout-color: var(--callout-quote); --callout-icon: quote-glyph; } .callout { overflow: hidden; border-style: solid; border-color: rgba(var(--callout-color), var(--callout-border-opacity)); border-width: var(--callout-border-width); border-radius: var(--callout-radius); margin: 1em 0; mix-blend-mode: var(--callout-blend-mode); background-color: rgba(var(--callout-color), 0.1); padding: var(--callout-padding); } .callout.is-collapsible .callout-title { cursor: var(--cursor); } .callout-title { padding: var(--callout-title-padding); display: flex; gap: var(--size-4-1); font-size: var(--callout-title-size); color: rgb(var(--callout-color)); line-height: var(--line-height-tight); } .callout-content { overflow-x: auto; padding: var(--callout-content-padding); background-color: var(--callout-content-background); } .callout-icon { flex: 0 0 auto; display: flex; margin-top: 0.15em; align-self: flex-start; } .callout-icon .svg-icon { color: rgb(var(--callout-color)); } .callout-title-inner { font-weight: var(--bold-weight); color: var(--callout-title-color); } .callout-fold { display: flex; margin-top: 0.15em; align-self: flex-start; padding-right: var(--size-4-2); } .callout-fold .svg-icon { transition: transform 100ms ease-in-out; } .callout.is-collapsed .callout-fold .svg-icon { transform: rotate(-90deg); } .markdown-source-view.mod-cm6 .callout { margin: 0; } .markdown-rendered code { color: var(--code-normal); font-family: var(--font-monospace); background-color: var(--code-background); border-radius: var(--radius-s); font-size: var(--code-size); padding: 0.1em 0.25em; } .cm-s-obsidian span.cm-inline-code { color: var(--code-normal); font-size: var(--code-size); background-color: var(--code-background); vertical-align: baseline; } .cm-s-obsidian span.cm-inline-code span.cm-inline-code.cm-hmd-indented-code { background-color: transparent; } .cm-s-obsidian span.cm-inline-code span.cm-inline-code:not(.cm-formatting):not(.cm-hmd-indented-code):not(.obsidian-search-match-highlight) { background-color: var(--code-background); vertical-align: baseline; } .cm-s-obsidian span.cm-inline-code span.cm-inline-code.hmd-hidden-token { font-size: 0; } .cm-s-obsidian span.cm-inline-code.CodeMirror div.HyperMD-hover > .HyperMD-hover-content code { display: inline-block; font-size: var(--code-size); border: 1px solid #999; border-radius: 2px; padding: 0px 4px; } .markdown-rendered pre { position: relative; padding: var(--size-4-2) var(--size-4-4); min-height: 38px; background-color: var(--code-background); border-radius: var(--radius-s); white-space: var(--code-white-space); overflow-x: auto; } .markdown-rendered pre code { border: none; padding: 0; background-color: transparent; } .markdown-rendered pre:not(:hover) > button.copy-code-button { display: none; } .markdown-rendered button.copy-code-button { margin: 6px; padding: 6px 8px; height: auto; background-color: transparent; box-shadow: none; color: var(--text-muted); font-size: var(--font-ui-smaller); font-family: var(--font-interface); position: absolute; top: 0; right: 0; } @media (hover: hover) { .markdown-rendered button.copy-code-button:hover { background-color: var(--background-modifier-hover); } } .markdown-source-view.mod-cm6 .cm-preview-code-block pre { margin: 0; } .markdown-source-view.mod-cm6 .code-block-flair { position: absolute; right: 6px; top: 6px; z-index: 1; display: inline-block; padding: var(--size-4-1) var(--size-4-2); border-radius: var(--radius-s); font-family: var(--font-interface); font-size: var(--font-ui-smaller); color: var(--text-muted); cursor: var(--cursor); } @media (hover: hover) { .markdown-source-view.mod-cm6 .code-block-flair:hover { background-color: var(--background-modifier-hover); } } .markdown-source-view.mod-cm6 .cm-line.HyperMD-codeblock { padding-left: var(--size-4-4); color: var(--code-normal); } .cm-s-obsidian .HyperMD-codeblock { font-family: var(--font-monospace); font-size: var(--code-size); } .cm-s-obsidian .HyperMD-codeblock-begin, .cm-s-obsidian .HyperMD-codeblock-end { color: var(--code-normal); } .cm-s-obsidian .HyperMD-codeblock span.cm-inline-code { background-color: inherit; border: inherit; padding: inherit; font-size: inherit; } .cm-s-obsidian div.HyperMD-codeblock-bg { left: 0; right: 0; background-color: var(--code-background); } .cm-s-obsidian div.HyperMD-codeblock-begin-bg { border-top-left-radius: 4px; border-top-right-radius: 4px; } .cm-s-obsidian div.HyperMD-codeblock-end-bg { border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; } .cm-s-obsidian div.HyperMD-codeblock-begin-bg, .cm-s-obsidian div.HyperMD-codeblock-end-bg { background-color: var(--code-background); } code[class*="language-"], pre[class*="language-"] { color: var(--code-normal); background: none; word-wrap: break-word; white-space: pre-wrap; word-break: normal; font-family: var(--font-monospace); text-align: left; word-spacing: normal; line-height: var(--line-height-normal); -webkit-hyphens: none; -moz-hyphens: none; -ms-hyphens: none; hyphens: none; } @media print { code[class*="language-"], pre[class*="language-"] { text-shadow: none; } } :not(pre) > code[class*="language-"], pre[class*="language-"] { background: var(--code-background); } /* Code blocks */ pre[class*="language-"] { overflow: hidden; } code[class*="language-"] { display: block; padding: 1em; overflow: auto; } /* Inline code */ :not(pre) > code[class*="language-"] { padding: 0.1em; border-radius: 0.3em; white-space: normal; } .token.important, .token.bold { font-weight: bold; } .token.italic { font-style: italic; } .token.entity { cursor: help; } /* Syntax highlighting */ .token.comment, .token.prolog, .token.doctype, .token.cdata { color: var(--code-comment); } .token.namespace { opacity: 0.7; } .token.tag, .token.constant, .token.symbol, .token.deleted { color: var(--code-tag); } .token.punctuation { color: var(--code-punctuation); } .token.boolean, .token.number { color: var(--code-value); } .token.selector, .token.attr-name, .token.string, .token.char, .token.inserted { color: var(--code-string); } .token.operator { color: var(--code-operator); } .token.entity, .token.parameter, .token.property, .token.url, .language-css .token.string, .style .token.string, .token.variable { color: var(--code-property); } .token.atrule, .token.attr-value, .token.builtin, .token.function, .token.class-name, .token.property-access { color: var(--code-function); } .token.keyword { color: var(--code-keyword); } .token.regex, .token.important { color: var(--code-important); } .cm-inline-code, .cm-math { color: var(--code-normal); } .cm-comment, .cm-meta { color: var(--code-comment); } .cm-tag { color: var(--code-tag); } .cm-punctuation, .cm-bracket, .cm-hr { color: var(--code-punctuation); } .cm-number { color: var(--code-value); } .cm-qualifier, .cm-string, .cm-string-2 { color: var(--code-string); } .cm-operator { color: var(--code-operator); } .cm-link, .cm-variable, .cm-variable-2, .cm-variable-3 { color: var(--code-property); } .cm-builtin, .cm-property, .cm-attribute, .cm-type { color: var(--code-function); } .cm-keyword { color: var(--code-keyword); } .markdown-preview-view .markdown-embed .markdown-preview-view { --file-folding-offset: 0px; height: 100%; padding: 0; } .markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h1, .markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h2, .markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h3, .markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h4, .markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h5, .markdown-preview-view .markdown-embed .markdown-preview-view .markdown-preview-pusher h6 { margin-top: 0; } .pdf-embed, .markdown-source-view .pdf-embed { width: 100%; height: 800px; } .markdown-embed, .file-embed { position: relative; } .markdown-embed-link, .file-embed-link { position: absolute; top: 4px; right: 4px; color: var(--icon-color); opacity: var(--icon-opacity); cursor: var(--cursor-link); padding: var(--size-2-2); border-radius: var(--radius-s); display: flex; align-items: center; --icon-size: var(--icon-s); --icon-stroke: var(--icon-s-stroke-width); } @media (hover: hover) { .markdown-embed-link:hover, .file-embed-link:hover { color: var(--icon-color-hover); opacity: var(--icon-opacity-hover); background: var(--background-modifier-hover); } } .file-embed-title { display: flex; align-items: center; justify-content: center; gap: var(--size-4-2); } .file-embed-icon { color: var(--text-muted); display: flex; } .file-embed { display: flex; justify-content: center; border-radius: var(--radius-m); background-color: var(--background-primary-alt); } .file-embed.mod-generic, .file-embed.mod-empty { cursor: var(--cursor-link); padding: var(--size-4-2); color: var(--text-muted); text-align: center; font-size: var(--font-smaller); } @media (hover: hover) { .file-embed.mod-generic:hover, .file-embed.mod-empty:hover { color: var(--text-normal); background-color: var(--background-secondary); } } .markdown-embed-content { height: 100%; } .embed-title { align-items: center; display: flex; gap: var(--size-4-1); font-size: var(--font-text-size); font-weight: var(--bold-weight); text-align: left; text-overflow: ellipsis; white-space: nowrap; padding: 0 0 var(--size-4-2) 0; } .markdown-embed { font-style: var(--embed-font-style); background-color: var(--embed-background); border-top: var(--embed-border-top); border-right: var(--embed-border-right); border-bottom: var(--embed-border-bottom); border-left: var(--embed-border-left); margin: 0; padding: var(--embed-padding); } .markdown-embed .markdown-preview-view { padding: 0; } .internal-embed:not(.image-embed) { display: block; } .internal-embed img:not([width]), .internal-embed audio, .internal-embed video { max-width: 100%; } .inline-embed .markdown-embed-content { height: fit-content; max-height: var(--embed-max-height); overflow: auto; } .inline-embed .markdown-embed-content p:first-child { margin-top: 0; } .inline-embed .markdown-source-view.mod-cm6 .cm-editor { min-height: unset; } .embed-iframe { width: 100%; height: 100%; } .markdown-source-view.mod-cm6 .internal-embed { white-space: normal; } .markdown-source-view.mod-cm6 .cm-embed-block { position: relative; white-space: normal; overflow-wrap: normal; word-break: normal; } @media (hover: hover) { .markdown-source-view.mod-cm6 .cm-embed-block:hover { box-shadow: var(--embed-block-shadow-hover); border-radius: var(--radius-s); overflow: hidden; cursor: text; } .markdown-source-view.mod-cm6 .cm-embed-block:hover .edit-block-button { opacity: 1; } .markdown-source-view.mod-cm6 .cm-embed-block:hover .edit-block-button:hover { background-color: var(--background-modifier-hover); } } .markdown-source-view.mod-cm6 .cm-embed-block pre { margin: 0; } .markdown-source-view.mod-inside-iframe > .cm-editor > .cm-scroller { flex-direction: column; padding: 0 var(--size-4-4); } .markdown-source-view.mod-inside-iframe > .cm-editor > .cm-scroller::before, .markdown-source-view.mod-inside-iframe > .cm-editor > .cm-scroller::after { content: " "; display: block; min-height: min(calc(10vh - 3px), var(--size-4-4)); max-height: var(--size-4-4); flex: 1 1 0; } .markdown-source-view.mod-inside-iframe > .cm-editor > .cm-scroller > .cm-sizer { min-height: unset; flex: 1 0 0; } .footnote-link { text-decoration: none; } .footnotes { font-size: var(--footnote-size); } .footnote-ref { vertical-align: top; } .footnote-backref { color: var(--text-faint); text-decoration: none; } @media (hover: hover) { .footnote-backref:hover { color: var(--text-accent); text-decoration: none; } } .cm-s-obsidian .cm-line.HyperMD-footnote { font-size: var(--footnote-size); padding-left: 8px; } .cm-s-obsidian .cm-line.HyperMD-footnote span.cm-hmd-footnote { color: var(--text-faint); cursor: text; } .cm-s-obsidian .cm-line.HyperMD-footnote span.cm-hmd-footnote .cm-underline { text-decoration: none; } @media (hover: hover) { .cm-s-obsidian .cm-line.HyperMD-footnote span.cm-hmd-footnote:hover { color: var(--text-accent); } } .markdown-preview-view:not(.show-frontmatter) .frontmatter-container { display: none; } .markdown-rendered .frontmatter.mod-failed { position: relative; } .markdown-rendered .frontmatter.mod-failed .mod-error { color: var(--text-error); font-size: var(--font-smaller); } .markdown-rendered .frontmatter.mod-failed:after { content: ''; position: absolute; top: 0; right: 0; width: 100%; height: 100%; background-color: var(--background-modifier-error); opacity: 0.3; mix-blend-mode: var(--highlight-mix-blend-mode); } .frontmatter-container { padding: var(--size-4-2) 0 var(--size-4-4); color: var(--text-muted); position: relative; /*.tag, .frontmatter-alias { text-decoration: none; background-color: var(--background-secondary); border-radius: 30px; color: var(--text-muted); padding: var(--size-2-2) var(--size-4-2); line-height: 1; white-space: nowrap; } */ } .markdown-embed-content .frontmatter-container { display: none; } .frontmatter-container.is-collapsed .frontmatter-section { display: none; } .frontmatter-container .frontmatter-collapse-indicator { margin-right: 6px; align-self: center; display: none; } .frontmatter-container .frontmatter-container-header { color: var(--text-normal); font-size: var(--font-smaller); user-select: none; -webkit-user-select: none; cursor: var(--cursor); font-weight: var(--font-medium); display: flex; content: 'Metadata'; border-bottom: 1px solid var(--background-modifier-border); padding-bottom: var(--size-4-2); margin-bottom: var(--size-4-2); } .frontmatter-container.is-collapsed .frontmatter-container-header { color: var(--text-faint); } @media (hover: hover) { .frontmatter-container.is-collapsed .frontmatter-container-header:hover { color: var(--text-muted); } } .frontmatter-container .frontmatter-section-label { padding-right: 0.5em; flex-basis: 4em; flex-shrink: 0; font-size: var(--font-smaller); text-transform: capitalize; } .frontmatter-container .frontmatter-alias { font-size: var(--font-smaller); color: var(--text-normal); cursor: default; display: inline-flex; align-items: center; line-height: 1; white-space: nowrap; padding-right: 4px; } .frontmatter-container .frontmatter-alias-icon { margin-right: var(--size-2-1); color: var(--text-accent); display: flex; align-items: center; } .frontmatter-container .frontmatter-alias-icon .svg-icon { width: 12px; height: 12px; stroke-width: 2.5px; } .frontmatter-container .frontmatter-section { display: flex; align-items: center; margin-bottom: var(--size-2-3); } .frontmatter-container .frontmatter-section:last-child { margin-bottom: 0; } .frontmatter-container .frontmatter-section-data { display: inline-flex; flex-wrap: wrap; align-items: center; gap: var(--size-2-2); } /* Edit mode */ .cm-hmd-frontmatter { font-size: var(--font-smaller); color: var(--text-muted); } .cm-hmd-frontmatter.cm-hmd-frontmatter.cm-def { color: var(--text-muted); } .markdown-rendered h1, .markdown-rendered h2, .markdown-rendered h3, .markdown-rendered h4, .markdown-rendered h5, .markdown-rendered h6 { margin: 15px 0; } .markdown-rendered li h1, .markdown-rendered li h2, .markdown-rendered li h3, .markdown-rendered li h4, .markdown-rendered li h5 { margin-top: 0; margin-bottom: 0; } h1, .markdown-rendered h1 { font-variant: var(--h1-variant); letter-spacing: -0.015em; line-height: var(--h1-line-height); font-size: var(--h1-size); color: var(--h1-color); font-weight: var(--h1-weight); font-style: var(--h1-style); font-family: var(--h1-font); } h1 a, .markdown-rendered h1 a { font-weight: inherit; } h2, .markdown-rendered h2 { font-variant: var(--h2-variant); letter-spacing: -0.015em; line-height: var(--h2-line-height); font-size: var(--h2-size); color: var(--h2-color); font-weight: var(--h2-weight); font-style: var(--h2-style); font-family: var(--h2-font); } h2 a, .markdown-rendered h2 a { font-weight: inherit; } h3, .markdown-rendered h3 { font-variant: var(--h3-variant); letter-spacing: -0.015em; line-height: var(--h3-line-height); font-size: var(--h3-size); color: var(--h3-color); font-weight: var(--h3-weight); font-style: var(--h3-style); font-family: var(--h3-font); } h3 a, .markdown-rendered h3 a { font-weight: inherit; } h4, .markdown-rendered h4 { font-variant: var(--h4-variant); letter-spacing: 0.01em; line-height: var(--h4-line-height); font-size: var(--h4-size); color: var(--h4-color); font-weight: var(--h4-weight); font-style: var(--h4-style); font-family: var(--h4-font); } h4 a, .markdown-rendered h4 a { font-weight: inherit; } h5, .markdown-rendered h5 { font-variant: var(--h5-variant); letter-spacing: 0.015em; font-size: var(--h5-size); line-height: var(--h5-line-height); color: var(--h5-color); font-weight: var(--h5-weight); font-style: var(--h5-style); font-family: var(--h5-font); } h5 a, .markdown-rendered h5 a { font-weight: inherit; } h6, .markdown-rendered h6 { font-variant: var(--h6-variant); letter-spacing: 0.015em; font-size: var(--h6-size); line-height: var(--h6-line-height); color: var(--h6-color); font-weight: var(--h6-weight); font-style: var(--h6-style); font-family: var(--h6-font); } h6 a, .markdown-rendered h6 a { font-weight: inherit; } .cm-formatting-header { color: var(--text-faint); } .cm-s-obsidian .HyperMD-header { padding-bottom: 0.25em; } .HyperMD-header-1, .inline-title[data-level='1'], .HyperMD-list-line .cm-header-1 { font-variant: var(--h1-variant); letter-spacing: -0.015em; line-height: var(--h1-line-height); font-size: var(--h1-size); color: var(--h1-color); font-weight: var(--h1-weight); font-style: var(--h1-style); font-family: var(--h1-font); } .HyperMD-header-1 a, .inline-title[data-level='1'] a, .HyperMD-list-line .cm-header-1 a { font-weight: inherit; } .HyperMD-header-2, .inline-title[data-level='2'], .HyperMD-list-line .cm-header-2 { font-variant: var(--h2-variant); letter-spacing: -0.015em; line-height: var(--h2-line-height); font-size: var(--h2-size); color: var(--h2-color); font-weight: var(--h2-weight); font-style: var(--h2-style); font-family: var(--h2-font); } .HyperMD-header-2 a, .inline-title[data-level='2'] a, .HyperMD-list-line .cm-header-2 a { font-weight: inherit; } .HyperMD-header-3, .inline-title[data-level='3'], .HyperMD-list-line .cm-header-3 { font-variant: var(--h3-variant); letter-spacing: -0.015em; line-height: var(--h3-line-height); font-size: var(--h3-size); color: var(--h3-color); font-weight: var(--h3-weight); font-style: var(--h3-style); font-family: var(--h3-font); } .HyperMD-header-3 a, .inline-title[data-level='3'] a, .HyperMD-list-line .cm-header-3 a { font-weight: inherit; } .HyperMD-header-4, .inline-title[data-level='4'], .HyperMD-list-line .cm-header-4 { font-variant: var(--h4-variant); letter-spacing: 0.015em; line-height: var(--h4-line-height); font-size: var(--h4-size); color: var(--h4-color); font-weight: var(--h4-weight); font-style: var(--h4-style); font-family: var(--h4-font); } .HyperMD-header-4 a, .inline-title[data-level='4'] a, .HyperMD-list-line .cm-header-4 a { font-weight: inherit; } .HyperMD-header-5, .inline-title[data-level='5'], .HyperMD-list-line .cm-header-5 { font-variant: var(--h5-variant); letter-spacing: 0.015em; font-size: var(--h5-size); line-height: var(--h5-line-height); color: var(--h5-color); font-weight: var(--h5-weight); font-style: var(--h5-style); font-family: var(--h5-font); } .HyperMD-header-5 a, .inline-title[data-level='5'] a, .HyperMD-list-line .cm-header-5 a { font-weight: inherit; } .HyperMD-header-6, .inline-title[data-level='6'], .HyperMD-list-line .cm-header-6 { font-variant: var(--h6-variant); letter-spacing: 0.015em; font-size: var(--h6-size); line-height: var(--h6-line-height); color: var(--h6-color); font-weight: var(--h6-weight); font-style: var(--h6-style); font-family: var(--h6-font); } .HyperMD-header-6 a, .inline-title[data-level='6'] a, .HyperMD-list-line .cm-header-6 a { font-weight: inherit; } .HyperMD-header .cm-header-1, .HyperMD-header .cm-header-2, .HyperMD-header .cm-header-3, .HyperMD-header .cm-header-4, .HyperMD-header .cm-header-5, .HyperMD-header .cm-header-6 { font-size: inherit !important; } hr { border: none; border-top: var(--hr-thickness) solid; border-color: var(--hr-color); margin: 1.5em 0; } .markdown-rendered hr { border: none; border-top: var(--hr-thickness) solid; border-color: var(--hr-color); } .cm-s-obsidian .hmd-inactive-line.HyperMD-hr { color: transparent; background-color: transparent; } .markdown-source-view.mod-cm6 .hr { display: flex; align-items: center; } .markdown-source-view.mod-cm6 hr { margin: 0; flex: 1 0 0; } .cm-s-obsidian .hmd-fold-html-stub, .cm-s-obsidian .hmd-fold-code-stub { display: inline-block; font-size: 67%; color: #999; vertical-align: middle; border: 1px solid #999; padding: 0 0.2em; border-radius: 5px; margin: 0 0.5em; background-color: var(--background-primary-alt); cursor: var(--cursor); } .cm-s-obsidian .hmd-fold-html-stub.omittable, .cm-s-obsidian .omittable.hmd-fold-code-stub { display: none; } .cm-s-obsidian .hmd-fold-html-stub:hover, .cm-s-obsidian .hmd-fold-code-stub:hover, .cm-s-obsidian .hmd-fold-html-stub.highlight, .cm-s-obsidian .highlight.hmd-fold-code-stub { color: #FFF; border-color: #C30; background: #F40; } .cm-s-obsidian .hmd-fold-html { position: relative; border: 1px solid #FFF; } @media (hover: hover) { .cm-s-obsidian .hmd-fold-html:hover { border: 1px dashed #999; } } .cm-s-obsidian .hmd-fold-html:hover .hmd-fold-html-stub.omittable, .cm-s-obsidian .hmd-fold-html:hover .omittable.hmd-fold-code-stub { display: block; right: 0; bottom: 100%; margin: 0; position: absolute; z-index: 100; } .markdown-preview-view img, .markdown-rendered img { -webkit-touch-callout: default; image-rendering: -webkit-optimize-contrast; } .markdown-preview-view img:not([width]), .markdown-rendered img:not([width]) { max-width: 100%; outline: none; } .cm-s-obsidian .CodeMirror-linewidget a > img, .cm-s-obsidian .hmd-fold-html a > img { border: 0; } .cm-s-obsidian img.hmd-image { vertical-align: middle; width: auto; max-width: 100%; height: auto; } .cm-s-obsidian img.hmd-image.hmd-image-loading, .cm-s-obsidian img.hmd-image.hmd-image-error { min-width: 24px; min-height: 24px; } .markdown-source-view.mod-cm6 .cm-line .internal-embed.image-embed { display: inline; } .internal-query { margin: 0; border-top: 1px solid var(--background-modifier-border); } .internal-query .search-result-container { padding: var(--size-4-2); max-height: 800px; overflow: auto; border: 1px solid var(--background-modifier-border); background-color: var(--background-secondary); border-radius: var(--radius-m); } .internal-query .internal-query-header { text-align: center; padding: var(--size-4-3) 0 var(--size-4-3) var(--size-4-1); color: var(--text-normal); display: flex; justify-content: flex-start; align-items: center; } .internal-query .internal-query-header-icon { color: var(--text-faint); margin-right: var(--size-4-1); display: flex; } .internal-query .internal-query-header-title { font-weight: var(--font-medium); } .internal-query .internal-query-header-title:before, .internal-query .internal-query-header-title:after { content: '"'; } /* Default markers */ ul ul, ol ul, ol ol ul, ol ul ul, ul ol ul, ul ul ul { list-style-type: disc; } ol { list-style-type: var(--list-numbered-style); } ol > li::marker, ul > li::marker { color: var(--list-marker-color); } ol > li.is-collapsed::marker, ul > li.is-collapsed::marker { color: var(--list-marker-color-collapsed); } /* Indent depth Consistency in horizontal positioning of lists */ .markdown-rendered ul, .markdown-rendered ol { padding-inline-start: var(--list-indent); } /* Space between list items */ .markdown-rendered ol > li, .markdown-rendered ul > li { padding-top: var(--list-spacing); padding-bottom: var(--list-spacing); } .cm-formatting-list-ol { font-variant-numeric: tabular-nums; } .cm-s-obsidian .cm-formatting-list { color: var(--list-marker-color); } .cm-s-obsidian .is-collapsed ~ .cm-formatting-list { color: var(--list-marker-color-collapsed); } /* Indent depth Consistency in horizontal positioning of lists */ .cm-line.HyperMD-list-line { tab-size: var(--list-indent); } .markdown-source-view.mod-cm6 .cm-content > .cm-line.HyperMD-list-line { margin-left: 0.5em; } /* Space between list items */ .markdown-source-view ol > li, .markdown-source-view ul > li, .markdown-preview-view ol > li, .markdown-preview-view ul > li, .mod-cm6 .HyperMD-list-line.cm-line { padding-top: var(--list-spacing); padding-bottom: var(--list-spacing); } /* Allow clicking on the bullet to collapse */ /* #todo move this into folding.less */ .markdown-rendered .list-collapse-indicator { margin-left: -3em; padding-right: 2em; } .markdown-rendered .list-bullet { float: left; margin-left: -1em; } .markdown-rendered .task-list-item > .list-bullet { display: none; } /* Remove default bullets so we can replace them */ .markdown-rendered ul.has-list-bullet { list-style-type: '\200B'; } .markdown-rendered ul.has-list-bullet > li::marker { color: transparent; } .markdown-rendered ul.has-list-bullet li p:first-of-type { margin-block-start: 0; } .markdown-rendered ul.has-list-bullet li p:last-of-type { margin-block-end: 0; } .list-bullet { /* hide bullet when editing the marker */ color: transparent; position: relative; display: inline-flex; justify-content: center; align-items: center; } .list-bullet:before { content: '\200B'; } .list-bullet:after { position: absolute; content: '\200B'; pointer-events: none; color: var(--list-marker-color); border-radius: var(--list-bullet-radius); width: var(--list-bullet-size); height: var(--list-bullet-size); border: var(--list-bullet-border); transform: var(--list-bullet-transform); background-color: var(--list-marker-color); transition: transform 0.15s, box-shadow 0.15s; } @media (hover: hover) { .list-collapse-indicator:hover ~ .list-bullet:after, .cm-fold-indicator:hover ~ .list-bullet:after, .list-collapse-indicator:hover ~ .cm-formatting-list .list-bullet:after, .cm-fold-indicator:hover ~ .cm-formatting-list .list-bullet:after { background-color: var(--list-marker-color-hover); box-shadow: 0 0 0 4px var(--background-modifier-hover); } li.is-collapsed .list-collapse-indicator:hover ~ .list-bullet:after, li.is-collapsed .cm-fold-indicator:hover ~ .list-bullet:after, .list-collapse-indicator:hover.is-collapsed ~ .list-bullet:after, .cm-fold-indicator:hover.is-collapsed ~ .list-bullet:after, li.is-collapsed .list-collapse-indicator:hover ~ .cm-formatting-list .list-bullet:after, li.is-collapsed .cm-fold-indicator:hover ~ .cm-formatting-list .list-bullet:after, .list-collapse-indicator:hover.is-collapsed ~ .cm-formatting-list .list-bullet:after, .cm-fold-indicator:hover.is-collapsed ~ .cm-formatting-list .list-bullet:after { background-color: var(--list-marker-color-collapsed); box-shadow: 0 0 0 4px var(--background-modifier-active-hover); } } li.is-collapsed .list-bullet:after, .is-collapsed ~ .cm-formatting-list .list-bullet:after { background-color: var(--list-marker-color-collapsed); box-shadow: 0 0 0 4px var(--background-modifier-active-hover); } /* Allow clicking on the bullet to collapse */ /* #todo move this into folding.less */ .markdown-source-view.mod-cm6 { /* only allow this if line is not active, so that it's still editable */ } .markdown-source-view.mod-cm6 .cm-fold-indicator .collapse-indicator { padding-right: 0.5rem; } .markdown-source-view.mod-cm6 .cm-line:not(.cm-active):not(.HyperMD-header):not(.HyperMD-task-line) .cm-fold-indicator .collapse-indicator { padding-right: 1em; right: -0.5em; } @media (hover: hover) { .list-collapse-indicator:hover ~ .list-bullet:after, .cm-fold-indicator:hover ~ .list-bullet:after, .list-collapse-indicator:hover ~ .cm-formatting-list .list-bullet:after, .cm-fold-indicator:hover ~ .cm-formatting-list .list-bullet:after { background-color: var(--list-marker-color-hover); box-shadow: 0 0 0 4px var(--background-modifier-hover); } li.is-collapsed .list-collapse-indicator:hover ~ .list-bullet:after, li.is-collapsed .cm-fold-indicator:hover ~ .list-bullet:after, .list-collapse-indicator:hover.is-collapsed ~ .list-bullet:after, .cm-fold-indicator:hover.is-collapsed ~ .list-bullet:after, li.is-collapsed .list-collapse-indicator:hover ~ .cm-formatting-list .list-bullet:after, li.is-collapsed .cm-fold-indicator:hover ~ .cm-formatting-list .list-bullet:after, .list-collapse-indicator:hover.is-collapsed ~ .cm-formatting-list .list-bullet:after, .cm-fold-indicator:hover.is-collapsed ~ .cm-formatting-list .list-bullet:after { background-color: var(--list-marker-color-collapsed); box-shadow: 0 0 0 4px var(--background-modifier-active-hover); } } .cm-s-obsidian .HyperMD-list-line.HyperMD-list-line-nobullet { padding-top: initial; } .markdown-source-view.mod-cm6 .cm-hmd-list-indent { display: inline-block; } .markdown-source-view.mod-cm6 .cm-formatting-list-ul, .markdown-source-view.mod-cm6 .cm-formatting-list-ol { white-space: pre; } a { color: var(--link-color); outline: none; text-decoration-line: var(--link-decoration); text-decoration-thickness: var(--link-decoration-thickness); cursor: var(--cursor-link); } @media (hover: hover) { a:hover { color: var(--link-color-hover); text-decoration-line: var(--link-decoration-hover); } } .external-link { color: var(--link-external-color); text-decoration-line: var(--link-external-decoration); background-position: center right; background-repeat: no-repeat; background-image: linear-gradient(transparent, transparent), url(public/images/874d8b8e340f75575caa.svg); background-size: 13px; padding-right: 16px; background-position-y: 4px; cursor: var(--cursor-link); filter: var(--link-external-filter); } @media (hover: hover) { .external-link:hover { color: var(--link-external-color-hover); text-decoration-line: var(--link-external-decoration-hover); } } .markdown-rendered .internal-link { cursor: var(--cursor-link); text-decoration-line: var(--link-decoration); } @media (hover: hover) { .markdown-rendered .internal-link:hover { text-decoration-line: var(--link-decoration-hover); } } .markdown-rendered .internal-link.is-unresolved { color: var(--link-unresolved-color); opacity: var(--link-unresolved-opacity); filter: var(--link-unresolved-filter); text-decoration-style: var(--link-unresolved-decoration-style); text-decoration-color: var(--link-unresolved-decoration-color); } @media (hover: hover) { .markdown-rendered .internal-link.is-unresolved:hover { opacity: 1; color: var(--link-color-hover); text-decoration-color: var(--link-color-hover); text-decoration-line: var(--link-decoration-hover); } } .cm-s-obsidian span.cm-hmd-internal-link { color: var(--link-color); } .cm-s-obsidian span.cm-hmd-internal-link:hover { text-decoration-line: var(--link-decoration-hover); color: var(--link-color-hover); } .cm-s-obsidian span.cm-link { color: var(--link-external-color); word-break: break-word; } @media (hover: hover) { .cm-s-obsidian span.cm-link:hover { color: var(--link-external-color-hover); text-decoration-line: var(--link-external-decoration-hover); } } .cm-s-obsidian span.cm-formatting-link.cm-url, .cm-s-obsidian span.cm-url { color: var(--link-external-color); text-decoration-line: var(--link-external-decoration); filter: var(--link-external-filter); word-break: break-all; } @media (hover: hover) { .cm-s-obsidian span.cm-formatting-link.cm-url:hover, .cm-s-obsidian span.cm-url:hover { color: var(--link-external-color-hover); text-decoration-line: var(--link-external-decoration-hover); } } .cm-s-obsidian span.cm-formatting-link { color: var(--text-faint); } .cm-s-obsidian span.hmd-link-icon { width: 20px; height: 16px; display: inline-block; vertical-align: middle; opacity: 0.4; } @media (hover: hover) { .cm-s-obsidian span.hmd-link-icon:hover { opacity: 1; } } .cm-s-obsidian span.hmd-link-icon:after { content: ""; } .markdown-source-view.mod-cm6 .is-unresolved { color: var(--link-unresolved-color); opacity: var(--link-unresolved-opacity); filter: var(--link-unresolved-filter); } @media (hover: hover) { .markdown-source-view.mod-cm6 .is-unresolved:hover { opacity: 1; color: var(--link-color-hover); text-decoration-color: var(--link-color-hover); } } .markdown-source-view.mod-cm6 .is-unresolved .cm-underline { text-decoration-line: var(--link-decoration); text-decoration-style: var(--link-unresolved-decoration-style); text-decoration-color: var(--link-unresolved-decoration-color); } .markdown-source-view.mod-cm6 .cm-underline { text-decoration-line: var(--link-decoration); text-decoration-thickness: var(--link-decoration-thickness); } body.is-mobile .markdown-source-view.mod-cm6 .cm-underline { -webkit-user-select: text; } .markdown-source-view.mod-cm6.is-live-preview .cm-hashtag.cm-meta, .markdown-source-view.mod-cm6 .cm-hmd-internal-link .cm-underline, .markdown-source-view.mod-cm6 .cm-link .cm-underline, .markdown-source-view.mod-cm6 .cm-url .cm-underline { cursor: var(--cursor-link); } @media (hover: hover) { .markdown-source-view.mod-cm6 .cm-hmd-internal-link .cm-underline:hover { text-decoration-line: var(--link-decoration-hover); } } .markdown-source-view.mod-cm6 .cm-link .cm-underline, .markdown-source-view.mod-cm6 .cm-url .cm-underline { text-decoration-line: var(--link-external-decoration); } @media (hover: hover) { .markdown-source-view.mod-cm6 .cm-link .cm-underline:hover, .markdown-source-view.mod-cm6 .cm-url .cm-underline:hover { color: var(--link-external-color-hover); text-decoration-line: var(--link-external-decoration-hover); } } .cm-s-obsidian.HyperMD-with-alt span.cm-url, .cm-s-obsidian.HyperMD-with-alt span.cm-link, .cm-s-obsidian.HyperMD-with-alt .cm-link + .CodeMirror-widget, .cm-s-obsidian.HyperMD-with-alt span.cm-hashtag, .cm-s-obsidian.HyperMD-with-ctrl span.cm-url, .cm-s-obsidian.HyperMD-with-ctrl span.cm-link, .cm-s-obsidian.HyperMD-with-ctrl .cm-link + .CodeMirror-widget, .cm-s-obsidian.HyperMD-with-ctrl span.cm-hashtag { cursor: var(--cursor-link); } .inline-block { display: inline-block; vertical-align: middle; } .hidden-token { display: inline; font-size: 1px !important; letter-spacing: -1ch; font-family: monospace; color: transparent; } .cm-s-obsidian { /* tooltip for addon/hover */ /* gutter for addon/click */ /* addon/fold */ /* addon/fold-emoji */ } .cm-s-obsidian span.hmd-hidden-token.cm-formatting-em, .cm-s-obsidian span.hmd-hidden-token.cm-formatting-strong, .cm-s-obsidian span.hmd-hidden-token.cm-formatting-strikethrough, .cm-s-obsidian span.hmd-hidden-token.cm-formatting-code, .cm-s-obsidian span.hmd-hidden-token.cm-formatting-link { display: inline; font-size: 1px !important; letter-spacing: -1ch; font-family: monospace; color: transparent; } .cm-s-obsidian div.HyperMD-hover > .HyperMD-hover-content { background-color: #fff; color: #000; border: 1px solid #000; padding: 0.5em; } .cm-s-obsidian div.HyperMD-hover > .HyperMD-hover-content p { margin: 0.2em 0; } .cm-s-obsidian .HyperMD-goback { width: 1px; } .cm-s-obsidian div.HyperMD-goback-button { background-color: #ddd; color: #333; text-align: center; cursor: var(--cursor); } .cm-s-obsidian .hmd-link-icon:after { content: "🔗»"; color: #009; text-shadow: 0 0 2px #69F; } .cm-s-obsidian img.hmd-emoji { height: 1.2em; vertical-align: middle; } .mod-cm5 .cm-s-obsidian .HyperMD-table-row > :last-child { padding-right: 52px !important; } .cm-s-obsidian { line-height: var(--line-height-normal); } .cm-s-obsidian .hmd-fold-html-stub, .cm-s-obsidian .hmd-fold-code-stub, .cm-s-obsidian.CodeMirror .HyperMD-hover > .HyperMD-hover-content code, .cm-s-obsidian .cm-inline-code, .cm-s-obsidian .HyperMD-codeblock, .cm-s-obsidian .HyperMD-hr, .cm-s-obsidian .cm-hmd-frontmatter, .cm-s-obsidian .cm-hmd-orgmode-markup, .cm-s-obsidian .cm-formatting-code, .cm-s-obsidian .cm-math, .cm-s-obsidian span.hmd-fold-math-placeholder, .cm-s-obsidian .CodeMirror-linewidget kbd, .cm-s-obsidian .hmd-fold-html kbd { font-family: var(--font-monospace); } .cm-s-obsidian .CodeMirror-matchingbracket { outline: 1px solid grey; color: black !important; } .cm-s-obsidian .CodeMirror-linenumber { color: var(--text-faint); } .cm-s-obsidian .CodeMirror-gutters { padding-right: 5px; } .cm-s-obsidian .CodeMirror-line { padding: 0 5px; } .cm-s-obsidian .CodeMirror-line * { text-indent: 0; } .cm-s-obsidian .CodeMirror-code { padding-right: 10px; } .cm-s-obsidian span.cm-hmd-toc { font-size: 24pt; color: #999; } .cm-s-obsidian .HyperMD-header-line { color: var(--text-muted); } .cm-s-obsidian span.cm-hmd-escape-backslash { color: #CAA; } .cm-s-obsidian span.cm-hmd-escape-char { color: #666; } .cm-s-obsidian span.cm-footref, .cm-s-obsidian span.cm-blockid { display: inline-block; font-size: var(--font-smallest); vertical-align: text-top; color: var(--text-muted); margin-top: -0.2em; } .cm-s-obsidian .hmd-file-uploading { outline: 2px dashed #CCC; outline-offset: -2px; animation: hmd-file-uploading-ani 1.5s linear infinite; } .cm-s-obsidian .hmd-file-uploaded { outline: 2px solid #6C3; outline-offset: -2px; } .cm-s-obsidian .HyperMD-goback { width: 1px; } .cm-s-obsidian div.HyperMD-goback-button { padding-right: 15px; border-radius: 0 10px 10px 0; display: inline-block; text-align: center; background-color: #8daed9; color: #f7f7f7; cursor: var(--cursor); } .cm-s-obsidian .hmd-fold-code-image { text-align: center; } .cm-s-obsidian .HyperMD-header, .cm-s-obsidian .HyperMD-footnote, .cm-s-obsidian .HyperMD-codeblock, .cm-s-obsidian .HyperMD-hr { clear: left; } .cm-s-obsidian .cm-s-obsidian span.hmd-hidden-token.cm-formatting-task { color: transparent !important; } .cm-s-obsidian .hmd-inactive-line span.cm-hmd-escape-backslash, .cm-s-obsidian .hmd-inactive-line span.cm-formatting-header { font-size: 0 !important; display: inline; } .cm-s-obsidian .hmd-inactive-line span.cm-hmd-list-indent { border-right: 0; } .cm-s-obsidian.CodeMirror div.HyperMD-hover > .HyperMD-hover-content { background-color: #000; background-color: rgba(0, 0, 0, 0.7); border: 0; color: #fff; border-radius: 5px; padding: 5px 10px; font-size: 95%; min-width: 200px; } .cm-s-obsidian.CodeMirror div.HyperMD-hover > .HyperMD-hover-content a { color: inherit; } .cm-s-obsidian.CodeMirror div.HyperMD-hover > .HyperMD-hover-content p { margin: 0.2em 0; } .cm-s-obsidian.CodeMirror div.HyperMD-hover > .HyperMD-hover-indicator { content: " "; display: block; width: 0px; margin-bottom: -5px; border: 5px solid transparent; border-top-color: #000; border-top-color: rgba(0, 0, 0, 0.7); } @keyframes hmd-file-uploading-ani { 0%, 100% { opacity: 0.4; } 50% { opacity: 0.7; } } @media (hover: hover) { .cm-s-obsidian div.HyperMD-goback-button:hover { color: transparent; text-align: left; } .cm-s-obsidian div.HyperMD-goback-button:hover:before { position: absolute; padding-left: 5px; content: "Back"; color: #f7f7f7; } } mjx-container { outline: none; } .cm-s-obsidian { /* addon/fold-math */ } .cm-s-obsidian .hmd-fold-math { display: inline-block; vertical-align: middle; } .cm-s-obsidian .hmd-fold-math.hmd-fold-math.math-2 { width: 100%; } .cm-s-obsidian span.cm-math, .cm-s-obsidian span.hmd-fold-math-placeholder { font-style: italic; } .cm-s-obsidian span.cm-formatting-math { color: var(--text-accent); font-weight: inherit; } .cm-s-obsidian span.cm-math-2 { font-size: 13.2pt; } .markdown-source-view.mod-cm6 .math-block > mjx-container { margin: 0; padding: 1em 0; overflow-x: auto; } /* Tables */ .markdown-rendered table { border-collapse: collapse; margin-block-start: 1em; margin-block-end: 1em; } .markdown-rendered td, .markdown-rendered th { padding: var(--size-2-2) var(--size-4-2); border: var(--table-border-width) solid var(--table-border-color); max-width: var(--table-column-max-width); } .markdown-rendered td { font-size: var(--table-text-size); color: var(--table-text-color); } .markdown-rendered th { font-size: var(--table-header-size); font-weight: var(--table-header-weight); color: var(--table-header-color); font-family: var(--table-header-font); text-align: left; line-height: var(--line-height-tight); } .markdown-rendered th[align="center"] { text-align: center; } .markdown-rendered th[align="right"] { text-align: right; } .markdown-rendered thead > tr > th, .markdown-rendered tbody > tr > td { white-space: var(--table-white-space); text-overflow: ellipsis; overflow: hidden; } .markdown-rendered tbody tr { background-color: var(--table-background); } @media (hover: hover) { .markdown-rendered tbody tr:hover { background-color: var(--table-row-background-hover); } } .markdown-rendered tbody tr:nth-child(odd) { background-color: var(--table-row-alt-background); } @media (hover: hover) { .markdown-rendered tbody tr:nth-child(odd):hover { background-color: var(--table-row-background-hover); } } .markdown-rendered tbody tr > td:nth-child(2n+2) { background-color: var(--table-column-alt-background); } .markdown-rendered tbody tr:last-child > td { border-bottom-width: var(--table-row-last-border-width); } .markdown-rendered tbody tr > td:first-child { border-left-width: var(--table-column-first-border-width); } .markdown-rendered tbody tr > td:last-child { border-right-width: var(--table-column-last-border-width); } .markdown-rendered thead tr { background-color: var(--table-header-background); } @media (hover: hover) { .markdown-rendered thead tr:hover { background-color: var(--table-header-background-hover); } } .markdown-rendered thead tr > th { border-width: var(--table-header-border-width); border-color: var(--table-header-border-color); } .markdown-rendered thead tr > th:nth-child(2n+2) { background-color: var(--table-column-alt-background); } .markdown-rendered thead tr > th:first-child { border-left-width: var(--table-column-first-border-width); } .markdown-rendered thead tr > th:last-child { border-right-width: var(--table-column-last-border-width); } .cm-s-obsidian { /* addon/table-align */ } .cm-s-obsidian .HyperMD-table-row { white-space: pre; word-break: normal; overflow-wrap: normal; font-size: 0.95em; font-family: var(--font-monospace); } .cm-s-obsidian .hmd-table-column, .cm-s-obsidian .hmd-table-column-content { display: inline-block; } .cm-s-obsidian .hmd-table-column-left { text-align: left; } .cm-s-obsidian .hmd-table-column-center { text-align: center; } .cm-s-obsidian .hmd-table-column-right { text-align: right; } .cm-s-obsidian .HyperMD-table-row span.cm-hmd-table-sep, .cm-s-obsidian .HyperMD-table-row-1 { color: var(--text-faint); } .cm-s-obsidian .HyperMD-table-row-0 { color: var(--table-header-color); } .cm-s-obsidian .CodeMirror-linewidget table, .cm-s-obsidian .hmd-fold-html table { border-collapse: collapse; } .cm-s-obsidian .CodeMirror-linewidget table td, .cm-s-obsidian .cm-s-obsidian .CodeMirror-linewidget table th, .cm-s-obsidian .hmd-fold-html table td, .cm-s-obsidian .hmd-fold-html table th { padding: 10px; border: 1px solid #ccc; } .cm-s-obsidian .hmd-inactive-line.HyperMD-table-row-1 { color: transparent; text-shadow: none; } .cm-s-obsidian .hmd-inactive-line.HyperMD-table-row-1 > span { background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAQAAAAziH6sAAAADklEQVR42mOc+Z9x5n8ACTkDM4ikM1IAAAAASUVORK5CYII=) repeat-x 0px center; } .cm-s-obsidian .hmd-inactive-line.HyperMD-table-row span.cm-hmd-table-sep { color: transparent; } .markdown-source-view.mod-cm6 .cm-line.HyperMD-table-row { min-width: max-content; } .markdown-source-view.mod-cm6 .cm-table-widget table { margin-bottom: 0; } a.tag { background-color: var(--tag-background); border: var(--tag-border-width) solid var(--tag-border-color); border-radius: var(--tag-radius); color: var(--tag-color); font-size: var(--tag-size); text-decoration: var(--tag-decoration); padding: var(--tag-padding-y) var(--tag-padding-x); line-height: 1; } @media (hover: hover) { a.tag:hover { background-color: var(--tag-background-hover); border: var(--tag-border-width) solid var(--tag-border-color-hover); color: var(--tag-color-hover); text-decoration: var(--tag-decoration-hover); } } a.tag { background-color: var(--tag-background); border: var(--tag-border-width) solid var(--tag-border-color); border-radius: var(--tag-radius); color: var(--tag-color); font-size: var(--tag-size); text-decoration: var(--tag-decoration); padding: var(--tag-padding-y) var(--tag-padding-x); line-height: 1; } @media (hover: hover) { a.tag:hover { background-color: var(--tag-background-hover); border: var(--tag-border-width) solid var(--tag-border-color-hover); color: var(--tag-color-hover); text-decoration: var(--tag-decoration-hover); } } .cm-hashtag { color: var(--tag-color); background-color: var(--tag-background); border: var(--tag-border-width) solid var(--tag-border-color); font-size: var(--tag-size); vertical-align: baseline; border-left: none; border-right: none; padding-top: var(--tag-padding-y); padding-bottom: var(--tag-padding-y); } .cm-hashtag.cm-hashtag-begin { border-top-left-radius: var(--tag-radius); border-bottom-left-radius: var(--tag-radius); border-right: none; border-left: var(--tag-border-width) solid var(--tag-border-color); padding-left: var(--tag-padding-x); } .cm-hashtag.cm-hashtag-end { border-top-right-radius: var(--tag-radius); border-bottom-right-radius: var(--tag-radius); border-left: none; border-right: var(--tag-border-width) solid var(--tag-border-color); padding-right: var(--tag-padding-x); } .cm-s-obsidian span.cm-hashtag.cm-hmd-escape-backslash { color: #FCC; } input[type=checkbox] { -webkit-appearance: none; appearance: none; border-radius: var(--checkbox-radius); border: 1px solid var(--checkbox-border-color); flex-shrink: 0; padding: 0; margin: 0 6px 0 0; width: var(--checkbox-size); height: var(--checkbox-size); position: relative; transition: box-shadow 0.15s ease-in-out; } input[type=checkbox]:hover, input[type=checkbox]:active, input[type=checkbox]:focus { outline: 0; border-color: var(--checkbox-border-color-hover); } input[type=checkbox]:focus-visible { box-shadow: 0 0 0 2px var(--background-modifier-border-focus); } input[type=checkbox]:checked:after { content: ""; top: -1px; left: -1px; position: absolute; width: var(--checkbox-size); height: var(--checkbox-size); display: block; background-color: var(--checkbox-marker-color); -webkit-mask-position: 52% 52%; -webkit-mask-size: 65%; -webkit-mask-repeat: no-repeat; -webkit-mask-image: url('data:image/svg+xml; utf8, '); } input[type=checkbox]:checked { background-color: var(--checkbox-color); border-color: var(--checkbox-color); } @media (hover: hover) { input[type=checkbox]:checked:hover { background-color: var(--checkbox-color-hover); border-color: var(--checkbox-color-hover); } } .task-list-item-checkbox { width: var(--checkbox-size); height: var(--checkbox-size); } .markdown-preview-view .task-list-item-checkbox { position: relative; top: 0.2em; margin-right: 0.6em; } ul > li.task-list-item { list-style: none; } ul > li.task-list-item .task-list-item-checkbox { margin-inline-start: calc(var(--checkbox-size) * -1.5); } ul > li.task-list-item[data-task="x"], ul > li.task-list-item[data-task="X"] { text-decoration: var(--checklist-done-decoration); color: var(--checklist-done-color); } .cm-s-obsidian span.cm-formatting-task { white-space: pre; height: 1em; line-height: 1em; min-width: 1em; text-align: center; color: var(--text-muted); background-size: 1em; font-family: var(--font-monospace); } .cm-s-obsidian span.hmd-hidden-token.cm-formatting-task { color: transparent !important; } .markdown-source-view.mod-cm6 .task-list-label { padding: 0; margin-left: -0.25em; } .markdown-source-view.mod-cm6 .task-list-item-checkbox { top: -0.1em; vertical-align: middle; margin-left: 2px; } .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="x"], .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="X"] { text-decoration: var(--checklist-done-decoration); color: var(--checklist-done-color); } b, strong { font-weight: var(--bold-weight); color: var(--bold-color); } i, em { font-style: italic; color: var(--italic-color); } /* Highlights */ .markdown-rendered mark { background-color: var(--text-highlight-bg); color: var(--text-normal); } .markdown-rendered mark .internal-link { color: var(--text-normal); } .cm-s-obsidian span.cm-formatting-highlight, .cm-s-obsidian span.cm-highlight { background-color: var(--text-highlight-bg); color: var(--text-normal); } .cm-strong { font-weight: var(--bold-weight); color: var(--bold-color); } .cm-em { font-style: italic; color: var(--italic-color); } .cm-s-obsidian span.cm-error { color: #f00; } /* Backlinks in Preview */ .embedded-backlinks { border-top: 1px solid var(--background-modifier-border); } .markdown-preview-view .embedded-backlinks { margin-top: 3em; } .embedded-backlinks .backlink-pane { padding: var(--size-4-3) 0 0 0; } .embedded-backlinks .backlink-pane .search-empty-state, .embedded-backlinks .backlink-pane .tree-item-self { /* Use quotes because Less overrides CSS math */ font-size: max(var(--font-ui-small),var(--font-smaller)); align-items: center; } .embedded-backlinks .backlink-pane > .tree-item-self { font-size: max(var(--font-ui-small),1em); gap: var(--size-2-3); width: fit-content; } .embedded-backlinks .backlink-pane .tree-item-flair { font-size: max(var(--font-ui-small),var(--font-smallest)); } .embedded-backlinks .nav-header { padding: 0; position: relative; } .embedded-backlinks .nav-header ~ .search-input-container { width: calc(100% - 150px); margin: var(--size-4-3) 0 0 0; } .embedded-backlinks .nav-buttons-container { position: absolute; right: 0; top: 14px; z-index: 1; } .nav-header { padding: var(--size-4-2); } .nav-buttons-container.has-separator { border-bottom: 1px solid var(--background-modifier-border); padding-bottom: var(--size-2-3); margin-bottom: var(--size-4-2); } .nav-files-container { flex-grow: 1; overflow-y: auto; overflow-x: hidden; padding: 0 var(--size-4-3) var(--size-4-6) var(--size-4-3); scroll-padding-block: var(--size-4-2); } /* Vault name */ .nav-folder.mod-root > .nav-folder-title { font-size: var(--vault-name-font-size); color: var(--vault-name-color); font-weight: var(--vault-name-font-weight); cursor: default; } @media (hover: hover) { .nav-folder.mod-root > .nav-folder-title:hover { background-color: inherit; font-weight: var(--vault-name-font-weight); } } .nav-folder.mod-root > .nav-folder-title.is-being-dragged-over { background-color: hsla(var(--interactive-accent-hsl), 0.2); } .nav-folder.mod-root > .nav-folder-title .nav-folder-collapse-indicator { display: none; } /* Style children The first level of folders and files needs slightly different styling */ .nav-folder.mod-root .nav-folder > .nav-folder-children { padding-left: var(--nav-item-children-padding-left); margin: 0 0 0 var(--nav-item-children-margin-left); border-left: var(--nav-indentation-guide-width) solid var(--nav-indentation-guide-color); } .nav-file { border-radius: var(--radius-s); } /* Folders and files */ .nav-folder-title { padding: var(--nav-item-parent-padding); } .nav-file-title { padding: var(--nav-item-padding); } .nav-file-title, .nav-folder-title { margin-bottom: var(--size-2-1); display: flex; border-radius: var(--radius-s); cursor: var(--cursor); color: var(--nav-item-color); font-size: var(--nav-item-size); font-weight: var(--nav-item-weight); line-height: var(--line-height-tight); } @media (hover: hover) { body:not(.is-grabbing) .nav-file-title:hover, body:not(.is-grabbing) .nav-folder-title:hover { background-color: var(--nav-item-background-hover); color: var(--nav-item-color-hover); font-weight: var(--nav-item-weight-hover); } } body:not(.is-grabbing) .nav-file-title.is-active:hover, body:not(.is-grabbing) .nav-folder-title.is-active:hover, .nav-file-title.is-active, .nav-folder-title.is-active { color: var(--nav-item-color-active); background-color: var(--nav-item-background-active); font-weight: var(--nav-item-weight-active); } body:not(.is-grabbing) .nav-file-title.is-selected:hover, body:not(.is-grabbing) .nav-folder-title.is-selected:hover, .nav-file-title.is-selected, .nav-folder-title.is-selected { color: var(--nav-item-color-selected); background-color: var(--nav-item-background-selected); } body:not(.is-grabbing) .nav-file-title.is-being-dragged, body:not(.is-grabbing) .nav-folder-title.is-being-dragged, .nav-file-title.is-being-dragged, .nav-folder-title.is-being-dragged { background-color: var(--interactive-accent); color: var(--text-on-accent); } body:not(.is-grabbing) .nav-file-title.is-being-dragged .nav-folder-collapse-indicator, body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-folder-collapse-indicator, .nav-file-title.is-being-dragged .nav-folder-collapse-indicator, .nav-folder-title.is-being-dragged .nav-folder-collapse-indicator { color: var(--text-on-accent); } body:not(.is-grabbing) .nav-file-title.is-being-dragged .nav-file-tag, body:not(.is-grabbing) .nav-folder-title.is-being-dragged .nav-file-tag, .nav-file-title.is-being-dragged .nav-file-tag, .nav-folder-title.is-being-dragged .nav-file-tag { color: var(--text-normal); } .workspace-leaf.mod-active .nav-folder.has-focus > .nav-folder-title, .workspace-leaf.mod-active .nav-file.has-focus > .nav-file-title { border-radius: var(--radius-s); box-shadow: 0 0 0 2px var(--background-modifier-border-focus); } .workspace-leaf.mod-active .nav-folder.has-focus > .nav-folder-title:focus-within, .workspace-leaf.mod-active .nav-file.has-focus > .nav-file-title:focus-within { box-shadow: 0 0 0 2px var(--interactive-accent); } .nav-folder-collapse-indicator { width: 16px; flex-shrink: 0; } .nav-file-tag { background-color: var(--background-modifier-hover); border-radius: var(--radius-s); font-size: 9px; font-weight: var(--font-semibold); letter-spacing: 0.05em; line-height: var(--line-height-normal); margin-left: var(--size-2-3); padding: 0 var(--size-4-1); text-transform: uppercase; align-self: center; } .nav-file-icon { display: inline-flex; align-items: center; margin-right: var(--size-2-3); position: relative; color: var(--icon-color); opacity: var(--icon-opacity); } .nav-files-container:not(.show-unsupported) .is-unsupported { display: none; } .nav-file-title-content, .nav-folder-title-content { display: inline-block; overflow-wrap: anywhere; overflow: hidden; white-space: var(--nav-item-white-space); text-overflow: ellipsis; } .nav-file-title-content.is-being-renamed, .nav-folder-title-content.is-being-renamed { flex-grow: 1; white-space: normal; cursor: text; } .nav-folder-title.is-being-dragged-over { border-radius: var(--radius-s); color: var(--nav-item-color-highlighted); background: hsla(var(--interactive-accent-hsl), 0.1); } .nav-folder-title.is-being-dragged-over .collapse-icon { color: var(--nav-item-color-highlighted); } .item-list { flex-grow: 1; padding: 0 var(--size-4-3) var(--size-4-6) var(--size-4-3); overflow-y: auto; } .drop-indicator { position: absolute; left: 0; width: 100%; height: 0; border: 2px solid var(--interactive-accent); pointer-events: none; } .drop-indicator:not(.is-active) { display: none; } /* 2022-07 Only used for Publish AFAIK */ .file-tree-item-checkbox, .file-tree-item-icon { flex-shrink: 0; } .file-tree-item-title { flex-grow: 1; word-break: break-word; } .file-tree-item-icon { --icon-size: var(--icon-s); --icon-stroke: var(--icon-s-stroke-width); margin-right: var(--size-4-1); color: var(--icon-color); position: relative; top: var(--size-2-1); } .file-tree .tree-item-inner { display: flex; align-items: center; position: relative; } .file-tree .tree-item-flair { line-height: 1; padding: var(--size-2-1) var(--size-2-3); color: var(--text-on-accent); } .file-tree .is-selected { color: var(--text-normal); } .file-tree .mod-changed.is-selected { background-color: hsla(var(--interactive-accent-hsl), 0.2); } .file-tree .mod-changed .tree-item-flair { color: var(--text-accent-hover); } .file-tree .mod-new.is-selected { background-color: rgba(var(--background-modifier-success-rgb), 0.2); } .file-tree .mod-new .tree-item-flair { color: var(--text-success); } .file-tree .mod-deleted.is-selected, .file-tree .mod-to-delete.is-selected { background-color: rgba(var(--background-modifier-error-rgb), 0.2); } .file-tree .mod-deleted .tree-item-flair, .file-tree .mod-to-delete .tree-item-flair { color: var(--text-error); } .file-tree .mod-to-delete .tree-item-flair { display: none; } .file-tree .mod-to-delete.is-selected .tree-item-flair { display: block; } .file-tree .clickable-icon { display: flex; --icon-size: var(--icon-s); --icon-stroke: var(--icon-s-stroke-width); } .graph-view.color-fill { color: var(--graph-node); } .graph-view.color-fill-focused { color: var(--graph-node-focused); } .graph-view.color-fill-tag { color: var(--graph-node-tag); } .graph-view.color-fill-attachment { color: var(--graph-node-attachment); } .graph-view.color-fill-unresolved { color: var(--graph-node-unresolved); opacity: 0.5; } .graph-view.color-fill-1 { color: var(--text-muted); } .graph-view.color-fill-2 { color: var(--text-muted); } .graph-view.color-fill-3 { color: var(--text-muted); } .graph-view.color-fill-4 { color: var(--text-muted); } .graph-view.color-fill-5 { color: var(--text-muted); } .graph-view.color-fill-6 { color: var(--text-muted); } .graph-view.color-arrow { color: var(--text-normal); opacity: 0.5; } .graph-view.color-circle { color: var(--graph-node-focused); } .graph-view.color-line { color: var(--graph-line); } .graph-view.color-text { color: var(--graph-text); } .graph-view.color-fill-highlight { color: var(--interactive-accent); } .graph-view.color-line-highlight { color: var(--interactive-accent); } .graph-controls { border-radius: var(--radius-m); position: absolute; right: var(--size-4-3); top: var(--size-4-3); padding: 0; background-color: var(--background-primary); width: var(--graph-controls-width); overflow: auto; } .graph-controls:not(.is-close) { max-height: calc(100% - var(--size-4-4)); border: 1px solid var(--background-modifier-border); box-shadow: var(--shadow-s); } .graph-controls.is-close { min-width: inherit; width: auto; background-color: var(--background-primary); border: 1px solid transparent; padding: var(--size-2-3); } .graph-controls.is-close > .graph-control-section { display: none; } .workspace-split:not(.mod-root) .graph-controls.is-close { background-color: var(--background-secondary); } .graph-controls input[type='text'], .graph-controls input[type='range'] { width: 100%; font-size: var(--font-ui-small); } .graph-controls .mod-cta { margin-top: var(--size-2-3); width: 100%; } .graph-controls .setting-item { padding: var(--size-2-3) 0; border: none; } .graph-controls .setting-item .setting-item-info { display: flex; align-items: center; } .graph-controls .setting-item:first-of-type { border-top: none; } .graph-controls .setting-item.mod-slider { flex-direction: column; } .graph-controls .setting-item.mod-slider > * { width: 100%; } .graph-controls .setting-item.mod-slider .setting-item-info { margin-right: 0; } .graph-controls .setting-item.mod-slider .setting-item-control { padding-top: var(--size-4-3); } .graph-controls .setting-item.mod-toggle .setting-item-control { padding-top: 0; } .graph-controls .setting-item.mod-search-setting .setting-item-info { margin-right: 0; } .graph-controls .setting-item-name { font-size: var(--font-ui-small); } .graph-controls::-webkit-scrollbar, .graph-controls::-webkit-scrollbar-thumb { display: none; } .graph-color-group { --swatch-height: 18px; --swatch-width: 18px; position: relative; display: flex; align-items: center; padding: 0 0 6px 0; transition: top 200ms ease-in-out; } .graph-color-group input[type="color"] { margin: 0 2px 0 6px; } .graph-color-group .clickable-icon { padding: var(--size-2-2); } .graph-color-button-container { text-align: center; margin-bottom: 10px; } .graph-color-button-container button { margin: 0; width: 100%; } .graph-color-group.drag-ghost { position: fixed; display: flex; max-width: unset; border: none; box-shadow: none; background-color: var(--background-primary-alt); padding: 0; transition: none; pointer-events: none; } .graph-color-group.drag-ghost input[type='text'] { width: 100%; } .graph-color-group.drag-ghost input[type='color'] { margin-left: 6px; } .graph-control-section.mod-color-groups .tree-item-children.is-grabbing .graph-color-groups-container { padding-bottom: 40px; } .graph-controls-button { display: none; z-index: 1; } .graph-controls-button.mod-close, .graph-controls-button.mod-reset { position: absolute; top: var(--size-4-2); right: var(--size-4-2); padding: var(--size-2-2); } .graph-controls:not(.is-close) .graph-controls-button.mod-close, .graph-controls:not(.is-close) .graph-controls-button.mod-reset { display: flex; } .graph-controls-button.mod-reset { right: 36px; } .graph-controls.is-close .graph-controls-button.mod-open { display: flex; } .graph-controls-button.mod-animate { margin-top: var(--size-4-2); } .graph-controls.is-close .graph-controls-button.mod-animate { display: flex; } .setting-item.mod-search-setting .setting-item-info { display: none; } .setting-item.mod-search-setting .setting-item-control .search-input-container { position: relative; flex-grow: 1; margin: 0; } .setting-item.mod-search-setting.is-loading .setting-item-control:before { background-color: var(--interactive-accent); animation: 1000ms ease-in-out 300ms infinite progress-bar; } .graph-control-section-header { font-weight: var(--font-semibold); font-size: var(--font-ui-small); color: var(--text-normal); } .graph-control-section { padding: var(--size-2-3) var(--size-4-3); border-bottom: 1px solid var(--background-modifier-border); } .graph-control-section:last-child { border-bottom: none; } .graph-control-section:last-child .tree-item-children { padding-bottom: var(--size-4-4); } .graph-control-section > .tree-item-self { padding-left: var(--size-4-1); } .graph-control-section .tree-item-children { margin: 0; padding: var(--size-4-1) 0; border-left: none; } .graph-control-section.mod-display .setting-item:not(.mod-slider):last-child .setting-item-info { display: none; } .workspace-leaf-content[data-type='outline'] .view-content { padding: 0; } .outline { padding: var(--size-4-3) var(--size-4-3) var(--size-4-8); } .modal.mod-publish { height: var(--modal-height); width: var(--modal-width); max-width: var(--modal-max-width-narrow); padding: var(--size-4-4) 0 0 0; position: relative; overflow: hidden; } .modal.mod-publish .modal-title { padding: 0 var(--size-4-4); } .modal.mod-publish .modal-content { overflow: auto; padding: 0 var(--size-4-4) var(--size-4-4); margin-bottom: calc(var(--input-height) + var(--size-4-8)); border-top: var(--border-width) solid var(--background-modifier-border); } .modal.mod-publish .modal-button-container { margin: 0 0 0 calc(var(--size-4-4) * -1); padding: var(--size-4-4); gap: var(--size-4-2); position: absolute; bottom: 0; background-color: var(--background-primary); border-top: var(--border-width) solid var(--background-modifier-border); width: 100%; } .publish-section { margin-bottom: var(--size-4-1); } .publish-change-list { padding: var(--size-4-2) 0 var(--size-4-2) 0; } .site-list-site-id-setting { margin-top: var(--size-4-4); } .publish-section-header-text, .publish-section-header-toggle-collapsed-button, .publish-section-header-action { cursor: var(--cursor); } @media (hover: hover) { .publish-section-header-text:hover, .publish-section-header-toggle-collapsed-button:hover, .publish-section-header-action:hover { color: var(--text-accent-hover); } } .publish-section-header { border-bottom: 1px solid var(--background-modifier-border); font-size: var(--font-ui-small); line-height: 1.1; color: var(--text-muted); display: flex; padding: var(--size-4-2) 0; align-items: center; } .publish-section-header-text { flex-grow: 1; font-size: var(--font-ui-medium); color: var(--text-normal); line-height: var(--line-height-tight); font-weight: var(--font-medium); } .publish-changes-switch-site { margin-left: var(--size-4-2); display: flex; flex-direction: row; flex-grow: 1; font-size: var(--font-ui-small); position: relative; gap: var(--size-2-1); top: 2px; } .publish-changes-switch-site .clickable-icon { --icon-size: var(--icon-s); --icon-stroke: var(--icon-s-stroke-width); padding: var(--size-2-2); } .upload-progress-container { max-height: 60vh; overflow: auto; } .upload-progress-container.is-finished { max-height: calc(60vh - 200px); } .publish-changes-current-site-name { margin-left: var(--size-2-3); text-decoration: underline; } .publish-changes-info { display: flex; align-items: center; margin-bottom: 20px; } .publish-changes-info button { margin-right: 0; margin-left: var(--size-4-2); } .publish-changes-info .search-input-container { margin: 0; width: 0; flex: 1 0 auto; } .publish-section-header-toggle-collapsed-button { margin-right: var(--size-4-1); color: var(--text-faint); width: 9px; height: 9px; } .publish-section-header-action { color: var(--text-faint); margin-left: var(--size-4-3); } .publish-upload-item-title { word-break: break-word; font-size: var(--nav-item-size); line-height: var(--line-height-tight); } .publish-changes-buttons { text-align: right; padding-bottom: var(--size-4-4); } .publish-upload-item { position: relative; padding: var(--size-4-1) var(--size-4-2); } .publish-upload-item .flair { background-color: transparent; text-transform: unset; letter-spacing: normal; font-size: var(--font-ui-smaller); } .publish-upload-item .list-item-part { --icon-size: var(--icon-s); --icon-stroke: var(--icon-s-stroke-width); display: flex; align-items: center; } .publish-upload-item:before { content: ' '; position: absolute; top: 0; left: 0; width: 0; height: 100%; transition: width 150ms ease-in-out; background-color: rgba(var(--background-modifier-success-rgb), 0.2); z-index: 0; border-radius: var(--radius-s); } .publish-upload-item.mod-failed { color: var(--text-error); } .publish-upload-item.mod-failed:before { background-color: rgba(var(--background-modifier-error-rgb), 0.2); } .publish-upload-item.mod-completed { color: var(--text-success); } .publish-upload-item.mod-completed > * { position: relative; } .publish-upload-item.mod-completed:before { width: 100%; } .site-list-container { border-top: 1px solid var(--background-modifier-border); margin-bottom: var(--size-4-4); } .site-list-container .list-item:last-child { padding-top: var(--size-4-4); } .site-list-item-name { flex-grow: 1; } .slug-input { text-transform: lowercase; } .passwords-container { margin-bottom: var(--size-4-4); } .password-item { border-radius: var(--radius-s); padding: var(--size-4-2) var(--size-4-4); margin: var(--size-4-1) 0; } @media (hover: hover) { .password-item:hover { background-color: var(--background-primary); } } .nav-header ~ .search-input-container { padding: 0; width: calc(100% - var(--size-4-8)); margin: 4px auto; } .search-input-container { margin: 0; position: relative; } .search-input-container:before { top: calc((var(--input-height) - var(--search-icon-size))/2); left: 8px; position: absolute; content: ''; height: var(--search-icon-size); width: var(--search-icon-size); display: block; background-color: var(--search-icon-color); -webkit-mask-image: url("data:image/svg+xml,"); -webkit-mask-repeat: no-repeat; } .search-input-container input { display: block; width: 100%; padding-right: 28px; padding-left: 36px; } .search-input-clear-button { position: absolute; background: transparent; border-radius: 50%; color: var(--search-clear-button-color); cursor: var(--cursor); top: 0px; right: 2px; bottom: 0px; line-height: 0; height: var(--input-height); width: 28px; margin: auto; padding: 0 0; text-align: center; display: flex; justify-content: center; align-items: center; transition: color 0.15s ease-in-out; } .search-input-clear-button:after { content: ''; height: var(--search-clear-button-size); width: var(--search-clear-button-size); display: block; background-color: currentColor; -webkit-mask-image: url("data:image/svg+xml,"); -webkit-mask-repeat: no-repeat; } .search-input-clear-button:hover, .search-input-clear-button:active { color: var(--text-normal); transition: color 0.15s ease-in-out; } .search-input-suggest-button { position: absolute; left: 0; top: 0; color: var(--text-faint); cursor: var(--cursor); padding: var(--size-4-1) var(--size-4-2); opacity: 0; z-index: 10; } @media (hover: hover) { .search-input-suggest-button:hover { color: var(--text-muted); } } .backlink-pane, .outgoing-link-pane { overflow-y: auto; padding: var(--size-4-3) var(--size-4-3) var(--size-4-8); flex: 1 0 0; /* #todo This should be removed and make the DOM changes instead Section headers for linked/unlinked mentions */ } .backlink-pane .search-result-container, .outgoing-link-pane .search-result-container { padding: var(--size-4-1) 1px var(--size-4-4); } .backlink-pane > .tree-item-self, .outgoing-link-pane > .tree-item-self { color: var(--text-normal); } .backlink-pane > .tree-item-self .tree-item-inner, .outgoing-link-pane > .tree-item-self .tree-item-inner { font-weight: var(--font-medium); } .backlink-pane > .tree-item-self.is-collapsed, .outgoing-link-pane > .tree-item-self.is-collapsed { color: var(--text-faint); } @media (hover: hover) { .backlink-pane > .tree-item-self.is-collapsed:hover, .outgoing-link-pane > .tree-item-self.is-collapsed:hover { color: var(--text-muted); } } .backlink-pane > .tree-item-self .collapse-icon, .outgoing-link-pane > .tree-item-self .collapse-icon { display: none; } .search-result-container { padding: var(--size-4-3) var(--size-4-3) var(--size-4-4); position: relative; flex: 1 0 0; } .search-result-container.mod-global-search { overflow-y: auto; } .search-result-container:before { content: ' '; position: absolute; top: 0; width: 0; height: 3px; } .search-result-container.is-loading:before { background-color: var(--interactive-accent); animation: 1000ms ease-in-out 300ms infinite progress-bar; } .search-suggest-info-text { color: var(--text-muted); margin-left: 4px; } .search-suggest-icon { padding: 4px; border-radius: var(--radius-s); } @media (hover: hover) { .search-suggest-icon:hover { background-color: var(--background-modifier-hover); } } .suggestion-container.mod-search-suggestion { max-width: unset; background-color: var(--background-secondary); border-color: var(--prompt-border-color); } .suggestion-container.mod-search-suggestion .suggestion { max-height: 600px; padding: var(--size-2-3); background-color: var(--background-secondary); border-radius: var(--radius-m); } .search-suggest-icon { align-items: center; display: flex; } .search-suggest-item { padding: var(--size-4-1) var(--size-4-2); border-radius: var(--radius-s); } .search-suggest-item.suggestion-item { font-size: var(--font-ui-small); } .search-suggest-item.mod-group { align-items: center; margin: 0; color: var(--text-muted); padding: 0 0 0 var(--size-4-2); cursor: default; font-weight: var(--font-semibold); font-size: var(--font-ui-smaller); border-radius: 0; } .search-suggest-item.mod-group:not(:first-child) { border-top: 1px solid var(--background-modifier-border); margin-top: 6px; padding: 6px 6px 0px 14px; margin-left: -6px; margin-right: -6px; } .search-suggest-item.mod-group:hover, .search-suggest-item.mod-group.is-selected { background-color: initial; } @keyframes progress-bar { 0% { width: 0; left: 0; } 5% { width: 0; left: 0; } 50% { width: 100%; right: 0; } 95% { width: 0; right: 0; } 100% { width: 0; right: 0; } } .search-empty-state { color: var(--text-faint); font-size: var(--font-ui-small); margin: 0 0 var(--size-4-3); padding-left: var(--size-4-2); } .search-result { word-break: break-word; } .search-result:not(.is-collapsed) .search-result-file-title { color: var(--nav-item-color-active); } .search-result-file-matches { font-size: var(--font-ui-smaller); line-height: var(--line-height-tight); background-color: var(--search-result-background); border-radius: var(--radius-s); overflow: hidden; margin: var(--size-4-1) 0 var(--size-4-2); color: var(--text-muted); box-shadow: 0 0 0 1px var(--background-modifier-border); } .search-info-more-matches { color: var(--text-faint); } .search-result-file-match { cursor: var(--cursor); position: relative; padding: var(--size-4-2) var(--size-4-5) var(--size-4-2) var(--size-4-3); white-space: pre-wrap; width: 100%; border-bottom: 1px solid var(--background-modifier-border); } .search-result-file-match:last-child { border-bottom: none; } @media (hover: hover) { .search-result-file-match:hover { color: var(--text-normal); background-color: var(--text-selection); } } .search-result-file-match:hover .search-result-file-match-replace-button { display: block; } .search-result-file-match-replace-button { display: none; position: absolute; height: auto; bottom: 5px; right: 24px; padding: var(--size-4-1) var(--size-4-2); color: var(--text-muted); font-size: var(--font-ui-smaller); } @media (hover: hover) { .search-result-file-match-replace-button:hover { color: var(--text-normal); } } .search-result-hover-button { position: absolute; display: flex; right: 2px; border-radius: var(--radius-s); color: var(--text-faint); padding: 1px 3px; } @media (hover: hover) { .search-result-hover-button:hover { opacity: 1; background-color: var(--background-modifier-hover); } } .search-result-hover-button.mod-top { top: 2px; } .search-result-hover-button.mod-bottom { bottom: 2px; } .search-result-file-matched-text { color: var(--text-normal); background-color: var(--text-highlight-bg); } .search-info-container { color: var(--text-muted); padding: var(--size-4-1) var(--size-4-4) var(--size-4-1); font-size: var(--font-ui-smaller); } .search-info-children { padding-left: 20px; border-left: 1px solid var(--background-modifier-border); margin: 1px 0; } .copy-search-result-container { display: flex; flex-direction: column; } .copy-search-result-textarea { height: 300px; max-height: 20vh; resize: none; } .copy-search-result-textarea + .setting-item { border-top: none; } .search-result-file-match-destination-file-container { margin-top: var(--size-2-3); } .search-result-file-match-destination-file { display: inline-flex; background-color: var(--interactive-normal); border-radius: var(--radius-s); box-shadow: var(--input-shadow); color: var(--text-muted); padding: var(--size-2-2) var(--size-2-3); margin-bottom: var(--size-2-1); } @media (hover: hover) { .search-result-file-match:hover .search-result-file-match-destination-file { background-color: var(--background-secondary); } .search-result-file-match:hover .search-result-file-match-destination-file:hover { background-color: var(--interactive-hover); box-shadow: var(--input-shadow-hover); color: var(--text-normal); } } .search-result-file-match-destination-file-icon { --icon-size: var(--icon-xs); --icon-stroke: var(--icon-xs-stroke-width); margin-right: var(--size-4-1); display: flex; color: var(--text-faint); } .search-result-file-match-destination-file-icon .svg-icon { align-self: center; } .search-result-file-match-destination-file-name { white-space: pre-wrap; word-break: break-all; } .workspace-leaf.mod-active .search-result.has-focus .tree-item-self, .workspace-leaf.mod-active .search-result-file-match.has-focus { border-radius: var(--radius-s); box-shadow: inset 0 0 0 2px var(--background-modifier-border-focus); } .slides-container { position: fixed; top: 0; left: 0; height: 100vh; width: 100vw; transition: -webkit-transform 0.8s ease 0s; background-color: #191919; z-index: var(--layer-slides); border: none; } .slides-container li .collapse-indicator { display: none; } .slides-close-btn { display: inline-block; position: absolute; top: var(--size-4-2); right: var(--size-4-2); color: var(--text-faint); cursor: var(--cursor); z-index: 1; } @media (hover: hover) { .slides-close-btn:hover { color: var(--text-muted); } } .reveal input[type='checkbox'] { width: 24px; height: 24px; } .reveal .task-list-item, .reveal .footnote-item { list-style: none; } .reveal .task-list-item { margin-left: -1.5em; } .vault-list-item { margin: 6px 0; display: flex; } .vault-list-item.is-connected .vault-list-item-title { color: var(--text-normal); } .vault-list-item-icon { color: var(--text-muted); position: relative; top: 1px; } .vault-list-item-title { color: var(--text-muted); user-select: none; } .vault-list-item-creation-time { color: var(--text-faint); font-size: var(--font-ui-small); } .sync-status-icon { display: flex; align-items: center; cursor: var(--cursor); } .sync-status-icon.mod-success { color: var(--text-success); } .sync-status-icon.mod-working { color: var(--interactive-accent); } .sync-status-icon.mod-error { color: var(--text-error); } .sync-history-list-container { display: flex; flex-direction: column; flex-basis: 250px; flex-shrink: 0; border-right: 1px solid var(--background-modifier-border); } .sync-history-list { overflow: auto; padding: var(--size-4-3); flex-grow: 1; display: flex; flex-direction: column; } .sync-history-list .search-input-container { width: 100%; } .sync-history-list-item-container { overflow: auto; flex: 1 1 0; } .sync-history-list-item { padding: var(--size-4-2) var(--size-4-3); margin-bottom: var(--size-4-2); cursor: var(--cursor); font-size: var(--font-ui-small); border-radius: var(--radius-s); transition: background-color 200ms ease-in-out, color 200ms ease-in-out; } .sync-history-list-item:last-child { margin-bottom: 0; } .sync-history-list-item.is-active, .sync-history-list-item.is-active:hover { background-color: var(--interactive-accent); color: var(--text-on-accent); } .sync-history-list-item.is-active .u-muted, .sync-history-list-item.is-active:hover .u-muted { color: var(--text-on-accent); opacity: 0.8; } @media (hover: hover) { .sync-history-list-item:hover { background-color: var(--background-modifier-hover); } } .sync-history-content-container { background-color: var(--background-primary); padding: 0; height: auto; display: flex; flex-direction: column; width: 0; flex: 1 1 auto; } .sync-history-content-container .modal-button-container { border-top: 1px solid var(--background-modifier-border); margin: 0; padding: 12px; justify-content: center; } .sync-history-content-container textarea { resize: none; border: none; box-shadow: none; } .sync-history-content-container textarea:hover, .sync-history-content-container textarea:active, .sync-history-content-container textarea:focus { border: none; box-shadow: none; } .sync-history-content-empty { display: none; } .sync-history-content-container.mod-empty .sync-history-content-empty { display: block; text-align: center; padding: 24px; } .sync-history-content { display: flex; flex-direction: column; flex-grow: 1; overflow: hidden; padding: 0; } .sync-history-content .setting-item:first-child { padding: var(--size-4-4) var(--size-4-6) var(--size-4-4); border-bottom: 1px solid var(--background-modifier-border); } .sync-history-content .setting-item-info { flex-grow: 0; font-weight: var(--bold-weight); } .sync-history-content .setting-item-control { justify-content: flex-start; } .sync-history-text, .sync-history-diff { flex: 1 0 auto; padding: var(--size-4-6); } .sync-history-content-other { flex-grow: 1; padding: var(--size-4-6); text-align: center; } .sync-history-content-other img { max-width: 100%; } .sync-history-content-container.mod-empty .sync-history-content, .sync-history-content-container.mod-empty .sync-history-content-buttons { display: none; } .sync-history-content-buttons { border-top: 1px solid var(--background-modifier-border); margin: 0; padding: var(--size-4-3); } .mod-selectable { cursor: var(--cursor); padding: var(--size-4-2) var(--size-4-4); border-radius: var(--radius-m); } @media (hover: hover) { .mod-selectable:hover { background-color: var(--background-modifier-hover); } } .sync-history-load-more-button { height: 38px; text-align: center; line-height: 38px; cursor: var(--cursor); color: var(--text-muted); } @media (hover: hover) { .sync-history-load-more-button:hover { color: var(--text-normal); } } /* Sync log */ .modal.mod-sync-log { height: var(--modal-height); width: var(--modal-width); max-width: var(--modal-max-width-narrow); padding: var(--size-4-4) 0 0 0; } .modal.mod-sync-log .modal-title { padding: 0 var(--size-4-4); } .modal.mod-sync-log .modal-content { display: flex; flex-direction: column; overflow: hidden; } .modal.mod-sync-log .modal-button-container { margin: 0; padding: var(--size-4-4); } .modal.mod-sync-log .setting-item.mod-toggle { padding: 0 var(--size-4-4) var(--size-4-4); } .modal.mod-sync-log .sync-log-container { overflow: auto; flex-grow: 1; font-family: var(--font-monospace); font-size: var(--font-ui-smaller); color: var(--text-muted); border-top: 1px solid var(--background-modifier-border); border-bottom: 1px solid var(--background-modifier-border); padding: var(--size-4-4); background-color: var(--background-secondary); } .modal.mod-sync-log .sync-log-container .list-item { line-height: var(--line-height-normal); margin: 0; } .modal.mod-sync-log .sync-log-container .list-item.mod-error { color: var(--text-error); } .sync-file-tree-container { max-height: calc(90vh - 250px); overflow: auto; } .sync-exclude-folder { display: flex; margin: var(--size-4-3) 0; } .sync-exclude-folder > * { align-self: center; display: flex; } .sync-exclude-folder-name { flex-grow: 1; } .sync-exclude-folder-remove { visibility: hidden; margin-right: 6px; } .sync-exclude-folder:hover .sync-exclude-folder-remove { visibility: visible; } .tag-pane-tag.is-active { background-color: var(--interactive-accent); color: var(--text-on-accent); } .tag-pane-tag.is-active .tag-pane-tag-count { background-color: var(--background-modifier-hover); color: var(--text-normal); } @media (hover: hover) { .tag-pane-tag.is-active:hover { background-color: var(--interactive-accent); color: var(--text-on-accent); } } .tag-pane-tag-text, .tag-pane-tag-count { display: inline-block; } .tag-pane-tag-text { word-break: break-word; flex-grow: 1; } .tag-container { font-size: var(--font-ui-small); padding: var(--size-4-3) var(--size-4-3) var(--size-4-8); overflow: auto; } .tree-item-children .tag-pane-tag .tag-pane-tag-parent { display: none; } .workspace-leaf.mod-active .tree-item.has-focus > .tag-pane-tag { border-radius: var(--radius-s); box-shadow: 0 0 0 2px var(--background-modifier-border-focus); } .mod-canvas-color-1 { --canvas-color: var(--canvas-color-1); } .mod-canvas-color-2 { --canvas-color: var(--canvas-color-2); } .mod-canvas-color-3 { --canvas-color: var(--canvas-color-3); } .mod-canvas-color-4 { --canvas-color: var(--canvas-color-4); } .mod-canvas-color-5 { --canvas-color: var(--canvas-color-5); } .mod-canvas-color-6 { --canvas-color: var(--canvas-color-6); } .workspace-leaf-content[data-type='canvas'] .view-content { padding: 0; position: relative; } body { --canvas-color: 192, 192, 192; } body.theme-dark { --canvas-color: 126, 126, 126; } .canvas-wrapper { position: absolute; width: 100%; height: 100%; left: 0; top: 0; --resizer-size: 20px; --shadow-stationary: 0px 0.5px 1px 0.5px rgba(0, 0, 0, 0.1); --shadow-drag: 0px 2px 10px rgba(0, 0, 0, 0.1); --shadow-border-accent: 0 0 0 2px var(--color-accent); --zoom-multiplier: 1; background-color: var(--canvas-background); overflow: hidden; contain: strict; touch-action: none; user-select: none; } .canvas-wrapper.is-dragging { cursor: grabbing; } .canvas-wrapper.is-dragging iframe:not(.is-controlled), .canvas-wrapper.is-dragging webview { pointer-events: none; } .canvas-wrapper.is-screenshotting { z-index: 999999; } .canvas-wrapper.is-screenshotting .canvas-card-menu, .canvas-wrapper.is-screenshotting .canvas-controls { display: none !important; } .canvas-wrapper.is-screenshotting * { pointer-events: none !important; } .canvas-mover { position: absolute; width: 100%; height: 100%; left: 0; top: 0; cursor: grab; } .canvas-mover:active { cursor: grabbing; } .canvas-background { position: absolute; width: 100%; height: 100%; left: 0; top: 0; pointer-events: none; } .canvas-background circle { fill: var(--canvas-dot-pattern); } .canvas { position: absolute; width: 100%; height: 100%; left: 0; top: 0; transform-origin: 0 0; pointer-events: none; } .canvas > * { pointer-events: initial; } .canvas-selection { pointer-events: none; position: absolute; background-color: hsla(var(--color-accent-hsl), 0.1); border: 2px solid var(--color-accent); z-index: -1; } .canvas-selection.mod-group-selection { border-width: 3px; border-radius: 3px; background-color: hsla(var(--color-accent-hsl), 0.03); border-color: hsla(var(--color-accent-hsl), 0.3); pointer-events: initial; } .canvas-wrapper:not(.mod-readonly) .canvas-selection.mod-group-selection { cursor: grab; } .canvas-wrapper:not(.mod-readonly) .canvas-selection.mod-group-selection:active { cursor: grabbing; } .canvas-selection.mod-node-highlight { border-radius: var(--radius-m); } .canvas-controls, .canvas-card-menu { display: flex; position: absolute; z-index: var(--layer-cover); font-size: var(--font-ui-medium); } .canvas-card-menu { background-color: var(--background-primary); border-radius: var(--radius-s); box-shadow: var(--input-shadow); bottom: var(--size-4-4); left: 50%; transform: translatex(-50%); align-items: stretch; } .is-phone .canvas-card-menu, .mod-toolbar-open .canvas-card-menu { display: none; } .theme-dark .canvas-card-menu { background-color: var(--background-secondary); } .canvas-card-menu .canvas-card-menu-divider { width: 1px; background-color: var(--background-modifier-border); } .canvas-card-menu .canvas-card-menu-button { color: var(--text-muted); height: auto; display: flex; line-height: 1; align-items: center; justify-content: center; padding: var(--size-4-2); --icon-size: var(--icon-xl); --icon-stroke: var(--icon-xl-stroke-width); } @media (hover: hover) { .canvas-card-menu .canvas-card-menu-button:hover { color: var(--color-accent); } } .canvas-card-menu .canvas-card-menu-button svg { fill: var(--background-primary); } .theme-dark .canvas-card-menu .canvas-card-menu-button svg { fill: var(--background-secondary); } .canvas-card-menu .canvas-card-menu-button.mod-draggable { cursor: grab; } .canvas-card-menu .canvas-card-menu-button.mod-draggable:active { cursor: grabbing; } .canvas-card-menu .canvas-card-menu-button.mod-draggable svg { transition: 90ms transform ease-out; } @media (hover: hover) { .canvas-card-menu .canvas-card-menu-button.mod-draggable:hover svg { transform: translateY(-6px); filter: drop-shadow(0px 6px 2px rgba(0, 0, 0, 0.1)); } } .canvas-controls { right: var(--size-4-2); top: var(--size-4-2); gap: var(--size-4-2); display: flex; flex-direction: column; } .canvas-control-group { border-radius: var(--radius-s); background-color: var(--background-primary); border: 1px solid var(--background-modifier-border); box-shadow: var(--input-shadow); display: flex; flex-direction: column; overflow: hidden; } .canvas-control-item { border-radius: 0; box-shadow: none; height: auto; display: flex; line-height: 1; font-size: inherit; align-items: center; justify-content: center; cursor: var(--cursor); padding: var(--size-4-2); border-bottom: 1px solid var(--background-modifier-border); color: var(--text-muted); background-color: var(--interactive-normal); --icon-size: var(--icon-s); --icon-stroke: var(--icon-s-stroke-width); } .canvas-control-item:last-child { border-bottom: none; } @media (hover: hover) { .canvas-control-item:hover { color: var(--text-normal); background-color: var(--interactive-hover); } } .canvas-control-item.is-active { color: var(--color-accent); } .canvas-control-item.is-disabled svg { color: var(--text-faint); } .canvas-control-item svg { pointer-events: none; } .canvas-node-container { background-color: var(--background-primary); border-radius: var(--radius-m); border: 2px solid rgb(var(--canvas-color)); contain: strict; display: flex; flex-direction: column; overflow: hidden; position: absolute; left: 0; top: 0; width: 100%; height: 100%; box-shadow: var(--shadow-stationary); } .canvas-wrapper:not(.mod-readonly) .canvas-node:not(.is-editing) .canvas-node-container { cursor: grab; } .canvas-wrapper:not(.mod-readonly) .canvas-node:not(.is-editing) .canvas-node-container:active { cursor: grabbing; } .canvas-node-label { position: absolute; left: 0; top: calc(-1 * var(--size-4-1) * var(--zoom-multiplier)); transform: translate(0, -100%) scale(var(--zoom-multiplier)); transform-origin: bottom left; max-width: calc(100% / var(--zoom-multiplier)); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--canvas-card-label-color); --icon-size: 1em; } body:not(.is-ios) .canvas-wrapper.mod-animating .canvas-node-label { transition: transform 500ms cubic-bezier(0.16, 1, 0.3, 1); } .canvas-node-label svg { position: relative; top: 2px; margin-right: var(--size-4-1); } .canvas-node-label.mod-hover-label { opacity: 0; } @media (hover: hover) { .canvas-node-label:hover { color: var(--text-muted); } .canvas-node:hover .canvas-node-label.mod-hover-label { opacity: 1; } } @media (hover: none) { .canvas-node.is-focused .canvas-node-label.mod-hover-label { opacity: 1; } } .canvas-wrapper.mod-zoomed-out .canvas-node-label { display: none; } .canvas-node-placeholder { display: flex; align-items: center; justify-content: center; text-align: center; width: 100%; height: 100%; overflow: hidden; overflow-wrap: anywhere; padding: var(--size-4-6); font-size: 32px; font-weight: var(--font-semibold); } .canvas-node-placeholder::after { border-radius: var(--radius-s); content: ' '; display: block; position: absolute; top: var(--size-4-4); right: var(--size-4-4); bottom: var(--size-4-4); left: var(--size-4-4); background-color: rgba(var(--canvas-color), 0.1); } .canvas-icon-placeholder { display: flex; width: 40%; height: 40%; } .canvas-icon-placeholder svg { opacity: 0.3; color: rgb(var(--canvas-color)); width: 100%; height: 100%; } .canvas-node-interaction-layer { position: absolute; width: 0; height: 0; pointer-events: none; } .canvas-node-interaction-layer > * { pointer-events: initial; } .canvas-node { --shadow-border-themed-inset: inset 0 0 0 1px rgb(var(--canvas-color)); --shadow-border-themed: 0 0 0 2px rgb(var(--canvas-color)); position: absolute; width: 0; height: 0; } .canvas-node.is-dragging { pointer-events: none; } .canvas-node.is-dragging .canvas-node-container { box-shadow: var(--shadow-drag); } .canvas-node.is-selected, .canvas-node.is-focused { touch-action: initial; } .canvas-node.is-selected .canvas-node-label, .canvas-node.is-focused .canvas-node-label { color: var(--text-muted); } .canvas-node.is-selected .canvas-node-container, .canvas-node.is-focused .canvas-node-container { border-color: var(--color-accent); box-shadow: var(--shadow-stationary), var(--shadow-border-accent); } .canvas-node.is-selected.is-dragging .canvas-node-container, .canvas-node.is-focused.is-dragging .canvas-node-container { box-shadow: var(--shadow-drag), var(--shadow-border-accent); } .canvas-node.is-themed .canvas-node-container { border-color: rgba(var(--canvas-color), 0.7); box-shadow: inset 0 0 0 1px rgba(var(--canvas-color), 0.7), var(--shadow-stationary); } .canvas-node.is-selected.is-themed .canvas-node-container, .canvas-node.is-focused.is-themed .canvas-node-container { border-color: rgb(var(--canvas-color)); box-shadow: var(--shadow-border-themed-inset), var(--shadow-border-themed); } .canvas-node.is-selected.is-themed.is-dragging .canvas-node-container, .canvas-node.is-focused.is-themed.is-dragging .canvas-node-container { box-shadow: var(--shadow-border-themed-inset), var(--shadow-border-themed); } .canvas-node.is-dummy { cursor: grabbing; } .canvas-node.is-dummy .canvas-node-container { border: 4px solid var(--color-accent); box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.15); background-color: hsla(var(--color-accent-hsl), 0.2); } .canvas-node.is-focused:not(.is-dragging) .canvas-node-content-blocker { display: none; } .canvas-node-content-blocker { position: absolute; width: 100%; height: 100%; left: 0; top: 0; } .canvas-node-group:not(.is-focused):not(.is-selected) { pointer-events: none; } .canvas-node-group .canvas-node-resizer { pointer-events: initial; } .canvas-node-group .canvas-node-container { background-color: transparent; } .canvas-node-group .canvas-node-content { background-color: rgba(var(--canvas-color), 0.07); } .canvas-group-label { position: absolute; left: 0; top: calc(-1 * var(--size-4-1) * var(--zoom-multiplier)); transform: translate(0, -100%) scale(var(--zoom-multiplier)); transform-origin: bottom left; max-width: calc(100% / var(--zoom-multiplier)); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; pointer-events: initial; font-size: 1.5em; padding: var(--size-4-1) var(--size-4-2); border-radius: var(--radius-s); color: var(--text-muted); background-color: rgba(var(--canvas-color), 0.1); line-height: 1; } body:not(.is-ios) .canvas-wrapper.mod-animating .canvas-group-label { transition: transform 500ms cubic-bezier(0.16, 1, 0.3, 1); } .canvas-wrapper:not(.mod-readonly) .canvas-group-label { cursor: grab; } .canvas-wrapper:not(.mod-readonly) .canvas-group-label:active { cursor: grabbing; } .canvas-group-label[contenteditable="true"] { cursor: text; background-color: var(--background-primary); box-shadow: 0 0 0 2px rgb(var(--canvas-color)); color: var(--text-normal); text-overflow: initial; } .canvas-node-group.is-themed .canvas-group-label:not([contenteditable="true"]) { background-color: rgb(var(--canvas-color)); } .canvas-node-group.is-themed .canvas-group-label:not([contenteditable="true"]).mod-foreground-light { color: var(--text-on-accent); } .canvas-node-group.is-themed .canvas-group-label:not([contenteditable="true"]).mod-foreground-dark { color: var(--text-on-accent-inverted); } .canvas-node-content { backface-visibility: hidden; width: 100%; height: 100%; overflow: hidden; position: relative; } .canvas-node-content.markdown-embed { border: none; padding: 0; } .canvas-node-content.markdown-embed .inline-title { cursor: text; } .canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view { padding: 0 var(--size-4-6); display: flex; flex-direction: column; } .canvas-wrapper:not(.mod-readonly) .canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view { user-select: none; -webkit-user-select: none; } .canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view::before, .canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view::after { content: " "; display: block; min-height: min(calc(var(--canvas-node-height) * 0.1 - 3px), var(--size-4-6)); max-height: var(--size-4-4); flex: 1 1 0; } .canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view > .markdown-preview-sizer { flex: 1 0 0; } .canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view .callout { mix-blend-mode: normal; } .canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view .markdown-preview-pusher + div > *:first-child { margin-top: 0; } .canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view .mod-header + div > *:first-child { margin-top: 0; } .canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view .markdown-preview-sizer > div:last-child > *:last-child { margin-bottom: 0; } .is-focused .canvas-node-content.markdown-embed > .markdown-embed-content > .markdown-preview-view { transform: translateZ(0); } .canvas-node.is-themed .canvas-node-content { background-color: rgba(var(--canvas-color), 0.07); } .canvas-node-content.media-embed { justify-content: center; align-items: center; display: flex; } .canvas-node-content.media-embed img, .canvas-node-content.media-embed video, .canvas-node-content.media-embed audio { flex-shrink: 0; flex-grow: 1; } .canvas-node-content.media-embed img:not([width]), .canvas-node-content.media-embed video, .canvas-node-content.media-embed audio { max-width: 100%; } .canvas-node-resizer { position: absolute; height: calc(var(--resizer-size) * var(--zoom-multiplier)); width: calc(var(--resizer-size) * var(--zoom-multiplier)); } .is-selected .canvas-node-resizer { pointer-events: none; } body.is-mobile .canvas-node-resizer { --zoom-multiplier: 1; } .canvas-wrapper.mod-readonly .canvas-node-resizer { display: none; } .canvas-node-resizer[data-resize='top'] { left: 0; right: 0; width: auto; top: calc(var(--resizer-size) * var(--zoom-multiplier) * -0.5); cursor: ns-resize; } .canvas-node-resizer[data-resize='bottom'] { left: 0; right: 0; width: auto; bottom: calc(var(--resizer-size) * var(--zoom-multiplier) * -0.5); cursor: ns-resize; } .canvas-node-resizer[data-resize='left'] { top: 0; bottom: 0; height: auto; left: calc(var(--resizer-size) * var(--zoom-multiplier) * -0.5); cursor: ew-resize; } .canvas-node-resizer[data-resize='right'] { top: 0; bottom: 0; height: auto; right: calc(var(--resizer-size) * var(--zoom-multiplier) * -0.5); cursor: ew-resize; } .canvas-node-resizer[data-resize='topright'] { right: calc(var(--resizer-size) * var(--zoom-multiplier) * -0.5); top: calc(var(--resizer-size) * var(--zoom-multiplier) * -0.5); cursor: nesw-resize; } .canvas-node-resizer[data-resize='bottomright'] { right: calc(var(--resizer-size) * var(--zoom-multiplier) * -0.5); bottom: calc(var(--resizer-size) * var(--zoom-multiplier) * -0.5); cursor: nwse-resize; } .canvas-node-resizer[data-resize='topleft'] { left: calc(var(--resizer-size) * var(--zoom-multiplier) * -0.5); top: calc(var(--resizer-size) * var(--zoom-multiplier) * -0.5); cursor: nwse-resize; } .canvas-node-resizer[data-resize='bottomleft'] { left: calc(var(--resizer-size) * var(--zoom-multiplier) * -0.5); bottom: calc(var(--resizer-size) * var(--zoom-multiplier) * -0.5); cursor: nesw-resize; } .is-mobile .canvas-node-resizer { pointer-events: none; } .is-mobile .canvas-wrapper:not(.mod-readonly) .canvas-node-interaction-layer .canvas-node-resizer[data-resize='topright'], .is-mobile .canvas-wrapper:not(.mod-readonly) .canvas-node-interaction-layer .canvas-node-resizer[data-resize='bottomright'], .is-mobile .canvas-wrapper:not(.mod-readonly) .canvas-node-interaction-layer .canvas-node-resizer[data-resize='topleft'], .is-mobile .canvas-wrapper:not(.mod-readonly) .canvas-node-interaction-layer .canvas-node-resizer[data-resize='bottomleft'] { pointer-events: all; width: 20px; height: 20px; display: block; background-color: var(--background-primary); border: 2px solid var(--color-accent); border-radius: 3px; } .canvas-node-connection-point { width: calc(var(--resizer-size) * var(--zoom-multiplier)); height: calc(var(--resizer-size) * var(--zoom-multiplier)); position: absolute; pointer-events: all; cursor: pointer; } .canvas-node-connection-point[data-side='top'] { top: 1px; left: calc(50% - var(--resizer-size) * var(--zoom-multiplier) / 2); } .canvas-node-connection-point[data-side='right'] { right: 1px; top: calc(50% - var(--resizer-size) * var(--zoom-multiplier) / 2); } .canvas-node-connection-point[data-side='bottom'] { bottom: 1px; left: calc(50% - var(--resizer-size) * var(--zoom-multiplier) / 2); } .canvas-node-connection-point[data-side='left'] { left: 1px; top: calc(50% - var(--resizer-size) * var(--zoom-multiplier) / 2); } .canvas-node-connection-point::after { content: ' '; background-color: var(--color-accent); border-radius: 50%; border: 3px solid var(--background-modifier-border); box-sizing: border-box; display: block; height: calc(var(--resizer-size) * var(--zoom-multiplier)); opacity: 0; position: relative; width: calc(var(--resizer-size) * var(--zoom-multiplier)); left: 0; top: 0; } .is-mobile .canvas-node-interaction-layer .canvas-node-connection-point::after, .canvas-node-resizer:hover .canvas-node-connection-point::after { opacity: 1; } .canvas-snaps { position: absolute; width: 100%; height: 100%; left: 0; top: 0; overflow: visible; pointer-events: none; opacity: 0.6; } .canvas-snaps line { stroke-width: 1px; stroke: var(--color-accent); } .canvas-snaps circle { fill: var(--color-accent); } .canvas-edges { position: absolute; width: 100%; height: 100%; left: 0; top: 0; overflow: visible; pointer-events: none; } .canvas-edges > * { pointer-events: initial; } .canvas-edges path.canvas-display-path { pointer-events: none; stroke-width: calc(3px * var(--zoom-multiplier)); stroke: rgb(var(--canvas-color)); fill: none; transition: stroke-width 100ms ease-out; } .canvas-edges path.canvas-interaction-path { pointer-events: stroke; stroke-width: calc(24px * var(--zoom-multiplier)); stroke-linecap: round; stroke: transparent; fill: none; transition: stroke 100ms ease-out; } .canvas-wrapper:not(.mod-readonly) .canvas-edges path.canvas-interaction-path { cursor: grab; } .canvas-wrapper:not(.mod-readonly) .canvas-edges path.canvas-interaction-path:active { cursor: grabbing; } .canvas-edges polygon.canvas-path-end { pointer-events: none; stroke: rgb(var(--canvas-color)); fill: rgb(var(--canvas-color)); stroke-linecap: round; stroke-linejoin: round; stroke-width: 1px; transform-box: fill-box; transform: scale(var(--zoom-multiplier)); transform-origin: center top; } .canvas-edges g.is-focused path.canvas-display-path, .canvas:not(.is-connecting) .canvas-edges g:hover path.canvas-display-path { stroke-width: calc(5.5px * var(--zoom-multiplier)); } .canvas-edges g.is-focused path.canvas-interaction-path, .canvas:not(.is-connecting) .canvas-edges g:hover path.canvas-interaction-path { stroke: rgba(var(--canvas-color), 0.1); } .canvas-path-label-wrapper { position: absolute; width: fit-content; height: fit-content; } .canvas-path-label { font-size: calc(var(--font-ui-large) * var(--zoom-multiplier)); background-color: var(--background-primary); border-radius: var(--radius-s); padding: calc(var(--size-2-3) * var(--zoom-multiplier)); line-height: var(--line-height-tight); white-space: pre-wrap; transform: translate(-50%, -50%); text-align: center; max-width: calc(17em * var(--zoom-multiplier)); } .canvas-path-label.is-editing { border-color: rgb(var(--canvas-color)); box-shadow: var(--shadow-stationary), 0 0 0 calc(3px * var(--zoom-multiplier)) rgb(var(--canvas-color)); } .canvas-menu-container { position: absolute; width: 0; height: 0; top: 0; left: 0; } .canvas-menu { position: relative; width: fit-content; height: fit-content; line-height: 1; background-color: var(--background-primary); border: 1px solid var(--background-modifier-border); border-radius: var(--radius-s); box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.07); display: flex; padding: var(--size-2-1); gap: 1px; } .canvas-menu .clickable-icon { padding: var(--size-2-3) var(--size-4-2); } .canvas-submenu { display: flex; position: absolute; top: calc(100% + 5px); left: 50%; transform: translateX(-50%); padding: var(--size-4-2); border: 1px solid var(--background-modifier-border); background-color: var(--background-primary); border-radius: var(--radius-s); box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.07); overflow: hidden; gap: 1px; } .canvas-submenu .clickable-icon { padding: var(--size-2-2) var(--size-2-3); } .canvas-color-picker-item { cursor: var(--cursor); width: 24px; height: 24px; margin: 2px; border-radius: 12px; border: 2px solid var(--background-primary); background-color: rgb(var(--canvas-color)); } .canvas-color-picker-item.is-active { box-shadow: 0 0 0 2px rgb(var(--canvas-color)); } @media (hover: hover) { .canvas-color-picker-item:hover { box-shadow: 0 0 0 2px rgb(var(--canvas-color)); } } .canvas-color-picker-item input[type="color"] { margin: -4px 0 0 -2px; --swatch-width: 20px; --swatch-height: 20px; opacity: 0; } .canvas-color-picker-item.canvas-color-picker-custom:not(.is-active) { background: conic-gradient(var(--color-red), var(--color-yellow), var(--color-green), var(--color-blue), var(--color-purple), var(--color-red)); } @media (hover: hover) { .canvas-color-picker-item.canvas-color-picker-custom:not(.is-active):hover { box-shadow: 0 0 0 2px var(--background-modifier-border-hover); } } .canvas-empty-embed-container { align-items: center; display: flex; flex-direction: column; gap: var(--size-4-6); justify-content: center; height: 100%; padding: var(--size-4-3); text-align: center; } .canvas-empty-embed-action-list { display: flex; flex-direction: column; gap: var(--size-4-3); } .canvas-empty-embed-action-list button { font-size: var(--font-text-size); padding: var(--size-4-5) var(--size-4-9); } .canvas-help { display: flex; flex-direction: column; gap: var(--size-4-3); } .canvas-instruction { display: flex; justify-content: space-between; } .canvas-instruction-desc { display: flex; gap: var(--size-4-1); } .canvas-instruction-desc .setting-hotkey { display: inline; align-self: unset; padding: var(--size-4-1); margin: 0; line-height: 1; } .canvas-placeholder-message { max-width: 70vw; background: hsla(var(--color-accent-hsl), 0.1); border-radius: var(--radius-m); color: var(--color-accent); font-size: var(--font-ui-large); line-height: var(--line-height-normal); padding: var(--size-4-4) var(--size-4-6); pointer-events: none; position: absolute; text-align: center; transform: translate(-50%, -50%); } .canvas-minimap { width: 100%; height: 100%; padding: var(--size-4-1); } .inline-embed > .canvas-minimap { max-height: var(--embed-canvas-max-height); } .canvas-minimap rect { stroke-width: 5px; stroke: var(--background-modifier-border); fill: var(--background-modifier-border); fill-opacity: 0.65; } .canvas-minimap rect.is-themed { stroke: rgb(var(--canvas-color)); fill: rgb(var(--canvas-color)); fill-opacity: 0.5; } .canvas-minimap path { stroke: #c0c0c0; fill: none; } .canvas-minimap path.is-themed { stroke: rgb(var(--canvas-color)); } .canvas-cursor { position: absolute; width: 1px; height: 1px; border: 5px solid var(--color-accent); border-radius: 5px; pointer-events: none; } .canvas-watermark * { font-family: var(--font-default) !important; } .mod-macos.starter { -webkit-app-region: drag; } .starter { -webkit-user-select: none; padding-top: 0! important; } .starter .titlebar { background-color: transparent; border: none; } .starter .titlebar-inner .titlebar-text { display: none; } .starter-screen { display: flex; flex-direction: column; background-color: var(--background-primary); width: 100%; height: 100%; } .starter-screen-inner { flex-grow: 1; display: flex; height: calc(100% - 24px); } .splash { align-items: center; background-color: var(--background-primary); display: flex; flex-direction: column; justify-content: center; flex: 1 1 auto; text-align: center; padding: 36px 0 0; } .splash-brand { flex: 0 0 content; padding: 20px; } .splash-brand-name { margin-top: 20px; flex-grow: 1; font-size: 30px; text-transform: uppercase; font-family: 'Avenir Next', sans-serif; letter-spacing: 2px; line-height: 26px; } .splash-brand-version { color: var(--text-muted); margin-top: 6px; font-size: var(--font-ui-small); } .help-options-container { flex: 1 0 0; overflow: auto; width: 100%; max-width: 82%; text-align: left; padding: var(--size-4-6) 0; } .help-options-container::-webkit-scrollbar { display: none; } .help-options-container .setting-item-description { max-width: 30em; padding-right: 12px; } .help-options-container .setting-icon .svg-icon { stroke-width: 1px; --icon-size: 48px; color: var(--text-faint); } .open-vault-options-container { flex: 1 0 0; overflow: auto; width: 100%; position: relative; } .open-vault-options-container::-webkit-scrollbar { display: none; } .open-vault-options { position: absolute; top: 0; left: 0; width: 100%; height: 100%; padding: 12px 36px; text-align: left; overflow-y: auto; display: flex; flex-direction: column; } .open-vault-options input[type='text'] { width: 150px; } .open-vault-options .setting-item-control button { width: 100px; } .open-vault-options .back-button { display: flex; align-items: center; -webkit-app-region: no-drag; color: var(--text-muted); user-select: none; cursor: var(--cursor); } @media (hover: hover) { .open-vault-options .back-button:hover { color: var(--text-normal); } } .open-vault-options .setting-item-description { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; } .open-vault-options.mod-login { justify-content: flex-start; } .open-vault-options.mod-login input[type='text'] { width: 250px; } .quick-start-container { margin-bottom: 10px; } .quick-start-container button { font-size: var(--font-ui-medium); padding: 8px 60px; } .quick-start-container + .setting-item { border-top: none; } .open-folder-input[type='text'] { font-size: var(--font-ui-small); width: 200px; height: 28px; } .browse-folder-button { margin-left: 10px; } .open-folder-button { margin-top: 14px; padding: 6px 36px; } .starter .notice { top: 38px; } .setting-item.mod-change-language { -webkit-app-region: no-drag; } .setting-item.mod-change-language .setting-item-info { flex-grow: 0; } .setting-item.mod-change-language .setting-item-control { flex-grow: 1; justify-content: flex-start; } .setting-item.mod-change-language select { width: 100%; max-width: 100%; } .setting-item.mod-change-language .setting-item-name { color: var(--text-faint); position: relative; top: 3px; cursor: var(--cursor); } @media (hover: hover) { .setting-item.mod-change-language .setting-item-name:hover { color: var(--text-muted); } } .setting-icon { display: flex; color: var(--text-muted); margin-right: 24px; } .choose-vault-clickable-area { text-align: center; padding: 40px 60px; border: 5px dashed var(--interactive-accent); border-radius: 10px; cursor: var(--cursor); } @media (hover: hover) { .choose-vault-clickable-area:hover { background-color: hsla(var(--interactive-accent-hsl), 0.4); border: 5px solid hsla(var(--interactive-accent-hsl), 0.4); } } .choose-vault-label-welcome { line-height: 46px; color: var(--text-muted); } .choose-vault-label-choose { font-weight: var(--font-extrabold); font-size: 32px; } .recent-vaults { background-color: var(--background-secondary); border-right: 1px solid var(--background-modifier-border); padding: var(--size-4-8) var(--size-4-3) var(--size-4-2) var(--size-4-3); flex-shrink: 0; width: 280px; overflow-y: hidden; height: 100%; } .recent-vaults-header { height: 30px; line-height: 30px; font-size: 18px; color: var(--text-muted); } .recent-vaults-list { overflow-y: auto; height: 100%; } .recent-vaults-list-item { -webkit-app-region: no-drag; border-radius: var(--radius-s); margin-bottom: var(--size-4-1); padding: var(--size-4-2) var(--size-4-6) var(--size-4-2) var(--size-4-3); cursor: var(--cursor); position: relative; } @media (hover: hover) { .recent-vaults-list-item:hover { background-color: var(--background-modifier-hover); color: var(--text-on-accent); } } .recent-vaults-list-item-name, .recent-vaults-list-item-path { word-break: break-all; } .recent-vaults-list-item-name { border-radius: 2px; border: 1px solid transparent; } .recent-vaults-list-item-name[contenteditable] { cursor: text; border-color: var(--interactive-accent); background-color: var(--background-modifier-hover); font-size: 0.9em; padding: 0 var(--size-4-1); } .recent-vaults-list-item-path { font-size: var(--font-ui-smaller); color: var(--text-muted); line-height: 16px; } .recent-vaults-list-item-option-button { position: absolute; top: var(--size-4-3); right: var(--size-4-1); color: var(--text-faint); width: 30px; height: 30px; line-height: 36px; text-align: center; transition: background-color 200ms ease-in-out; } .recent-vaults-list-item-option-button:hover { color: var(--text-normal); } :root { --safe-area-inset-top: env(safe-area-inset-top); --safe-area-inset-bottom: env(safe-area-inset-bottom); --safe-area-inset-left: env(safe-area-inset-left); --safe-area-inset-right: env(safe-area-inset-right); } .is-mobile { --ribbon-width: 58px; --view-header-height: 50px; --mobile-toolbar-height: 40px; --caret-color: var(--text-accent); --font-ui-smaller: calc(var(--font-text-size) * 0.8); --font-ui-small: calc(var(--font-text-size) * 0.937); --font-ui-medium: var(--font-text-size); --font-ui-large: calc(var(--font-text-size) * 1.2); --icon-s: 18px; --icon-m: 20px; --icon-l: 24px; --icon-l-stroke-width: 1.8px; --icon-opacity: 1; --input-height: 40px; --input-shadow: none; --input-shadow-hover: none; --input-font-weight: var(--font-medium); --input-border-width: 0px; --interactive-normal: var(--background-secondary); --mobile-sidebar-width: 340px; --mobile-sidebar-max-width: 500px; --nav-item-padding: var(--size-2-3) var(--size-4-2); --nav-item-color: var(--text-normal); --search-clear-button-size: 16px; --search-icon-size: 20px; --settings-home-background: var(--background-secondary); --slider-thumb-border-width: 0px; --slider-thumb-height: 24px; --slider-thumb-width: 24px; --slider-thumb-y: -9px; --slider-track-height: 6px; --swatch-shadow: none; --swatch-height: 40px; --swatch-width: 40px; --swatch-radius: 40px; --toggle-width: 48px; --toggle-radius: 26px; --toggle-thumb-radius: 26px; --toggle-thumb-height: 26px; --toggle-thumb-width: 26px; --file-margins: var(--size-4-2) var(--size-4-5); --background-modifier-cover: rgba(0, 0, 0, 0.25); --background-modifier-form-field: var(--background-secondary); --keyboard-background: var(--background-primary); --checkbox-size: 17px; } .is-mobile.theme-dark { --color-base-00: #000; --color-base-10: #111; --color-base-20: #1e1e1e; --tag-background: hsla(var(--interactive-accent-hsl), 0.2); --modal-background: var(--background-secondary); --search-result-background: var(--background-secondary); --background-modifier-form-field: var(--background-modifier-border); --background-modifier-cover: rgba(0, 0, 0, 0.5); --background-modifier-hover: rgba(var(--mono-rgb-100), 0.15); --settings-home-background: var(--background-primary); } .is-tablet { --nav-item-padding: var(--size-2-3) var(--size-4-3); --tab-font-size: var(--font-ui-smaller); } .is-tablet.theme-dark { --titlebar-background: var(--background-primary); --titlebar-background-focused: var(--background-primary); --interactive-normal: var(--background-modifier-border); } .is-phone { --border-width: 0.5pt; --divider-width: 0.5pt; --tab-outline-width: 0.5pt; --modal-header-height: 44px; --modal-community-sidebar-width: 100%; --nav-item-size: var(--font-ui-medium); } body.is-mobile { height: 100vh; width: 100vw; caret-color: var(--caret-color); padding-bottom: 50px; } .is-mobile .markdown-source-view.mod-cm6 .cm-content, .is-mobile .mod-cm6 .cm-line { caret-color: var(--caret-color); } .is-mobile .markdown-source-view.mod-cm6 .cm-gutters { margin-left: -18px; } .is-mobile .workspace > .mod-root { padding-left: var(--safe-area-inset-left); } body.is-mobile { padding: var(--safe-area-inset-top) 0 0 0; -webkit-text-size-adjust: 100%; } .is-mobile .workspace-split.mod-left-split, .is-mobile .workspace-split.mod-right-split { display: none; } .is-mobile .tree-item .tree-item-self { padding-right: var(--size-4-2); } .is-mobile .input-label { display: block; text-align: left; color: var(--text-muted); margin-bottom: 8px; } .is-mobile input[type='text'] { display: block; width: 100%; padding: 8px 12px; height: auto; } .is-mobile .markdown-rendered pre:not(:hover) > button.copy-code-button { display: block; } .is-mobile .markdown-rendered button.copy-code-button { width: auto; } .is-mobile .empty-state-action-list { margin-top: 40px; } .is-mobile .empty-state-action { background-color: var(--background-primary-alt); margin: 12px 0; padding: 6px 30px; border-radius: var(--button-radius); text-align: center; } .is-mobile .login-field { width: 100%; margin: 0.5em 0 0.5em 0; } .is-mobile .login-field input { width: 100%; } .is-mobile .markdown-rendered .frontmatter-container { margin-top: 20px; } .is-mobile .markdown-rendered .heading-collapse-indicator { margin-left: -20px; } .is-mobile .markdown-rendered ul, .is-mobile .markdown-rendered ol { padding-inline-start: 25px; } .is-mobile .message-container { text-align: center; margin: 8px 0; } .is-mobile .search-result-file-match-replace-button { display: block; position: relative; padding: 6px 10px; right: 0; margin-top: 6px; background-color: var(--background-secondary-alt); } .is-mobile .suggestion-flair { position: relative; margin-right: 6px; left: 0; top: 0; } .is-mobile .document-search-container { height: auto; margin-left: 0; margin-right: 0; padding: 0 var(--size-4-4) var(--size-4-2); border-bottom: var(--border-width) solid var(--background-modifier-border); } .is-mobile .document-search-container.mod-replace-mode { height: auto; } .is-mobile .document-search, .is-mobile .document-replace { height: auto; padding: 0; } .is-mobile .document-search .document-search-button, .is-mobile .document-replace .document-search-button { height: auto; padding: 6px 0; background-color: transparent; color: var(--text-accent); } .is-mobile .document-search input, .is-mobile .document-replace input, .is-mobile .document-search button, .is-mobile .document-replace button { width: auto; flex-grow: 1; } .is-mobile .document-search .document-search-buttons, .is-mobile .document-replace .document-search-buttons, .is-mobile .document-search .document-replace-buttons, .is-mobile .document-replace .document-replace-buttons { display: flex; flex-grow: 1; } .is-mobile .document-search .document-search-close-button, .is-mobile .document-replace .document-search-close-button { height: 34px; line-height: 34px; top: 0; } .is-tablet .mod-left-split-toggle { display: none; } .is-tablet button:not(.clickable-icon) { padding: var(--size-4-1) var(--size-4-5); } .is-phone button { width: 100%; } .is-phone .vault-list-item-creation-time { display: none; } .is-phone .vault-list-item { padding: 5px 0; } .is-phone .vault-list-item .flair { display: none; } .is-phone .vault-list-item-title { flex: 1 0 auto; } .is-phone .vault-list-item-button { margin-right: 0; } .suggestion-bg { display: none; } body.is-phone .suggestion-bg { display: block; } @keyframes fadeIn { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes fadeOut { 0% { opacity: 1; } 100% { opacity: 0; } } .mobile-image-viewer { position: absolute; height: 100%; width: 100%; top: 0; left: 0; background-color: var(--background-modifier-cover); display: flex; justify-content: center; overflow: hidden; z-index: var(--layer-modal); } .mobile-image-viewer img { align-self: center; max-height: 100%; max-width: 100%; } .mod-tappable { transition: opacity 0.15s ease-in-out; } .mod-tappable.mod-tap { opacity: 0.5; } .is-mobile .document-search-container { height: auto; margin-left: 0; margin-right: 0; padding: 0 var(--size-4-4) var(--size-4-2); border-bottom: var(--border-width) solid var(--background-modifier-border); } .is-mobile .document-search-container.mod-replace-mode { height: auto; } .is-mobile .document-search, .is-mobile .document-replace { height: auto; padding: 0; } .is-mobile .document-search .document-search-button, .is-mobile .document-replace .document-search-button { height: auto; padding: 6px 0; background-color: transparent; color: var(--text-accent); } .is-mobile .document-search input, .is-mobile .document-replace input, .is-mobile .document-search button, .is-mobile .document-replace button { width: auto; flex-grow: 1; } .is-mobile .document-search .document-search-buttons, .is-mobile .document-replace .document-search-buttons, .is-mobile .document-search .document-replace-buttons, .is-mobile .document-replace .document-replace-buttons { display: flex; flex-grow: 1; } .is-mobile .document-search .document-search-close-button, .is-mobile .document-replace .document-search-close-button { height: 34px; line-height: 34px; top: 0; } .is-mobile .view-header { border-top: none; height: var(--view-header-height); } .is-mobile .workspace-split.mod-root > .workspace-leaf:first-of-type .workspace-leaf-content, .is-mobile .workspace-split.mod-root > .workspace-leaf:last-of-type .workspace-leaf-content { border-radius: 0; } .is-mobile .view-header-title { padding-right: 0px; } .is-mobile .view-header-title-container { padding-left: 24px; } .is-mobile .view-header-title-container:after { display: none; } .is-mobile .view-header-icon { padding: 10px; } .is-mobile .inline-title { padding-top: 0.25em; } .is-mobile .horizontal-main-container { position: relative; } .is-mobile .view-header-title-container { height: 50px; } .is-mobile .view-actions { padding: var(--size-4-2) 0; gap: var(--size-2-1); } .is-mobile .view-header-nav-buttons, .is-mobile .view-header .view-action { --icon-color: var(--interactive-accent); --icon-color-hover: var(--interactive-accent); --icon-color-active: var(--interactive-accent-hover); --icon-color-focus: var(--interactive-accent-hover); --icon-size: var(--icon-l); --icon-stroke: var(--icon-l-stroke-width); } .is-mobile .view-action { margin: auto 0; width: auto; } .is-phone .view-header-title-parent, .is-phone .view-header-title { display: block; text-overflow: ellipsis; opacity: 0.7; } .is-phone .view-header-title-parent:focus-within, .is-phone .view-header-title:focus-within { text-overflow: unset; opacity: 1; } .is-mobile .hotkey-list-container .setting-item { flex-direction: column; align-items: stretch; } .is-mobile .hotkey-list-container .setting-item-control { margin-top: 10px; align-items: flex-start; } .is-mobile .hotkey-list-container .setting-command-hotkeys { flex: 1 0 auto; } .is-mobile .hotkey-list-container .setting-hotkey { align-self: flex-start; } .is-tablet .horizontal-tab-nav-item, .is-tablet .vertical-tab-nav-item { padding: var(--size-4-2) var(--size-4-3); } .is-tablet .modal.mod-settings .vertical-tab-header { max-width: none; } .is-tablet.theme-dark .community-item, .is-tablet.theme-dark .vertical-tab-content { background-color: var(--background-secondary); } .is-phone.theme-dark .modal.mod-settings { background-color: var(--background-primary); } .is-phone.theme-dark .modal.mod-settings .vertical-tab-header { background-color: var(--background-primary); } .is-phone.theme-dark .modal.mod-settings .vertical-tab-nav-item { background-color: var(--background-secondary); } .is-phone.theme-dark .modal.mod-settings .vertical-tab-header-title { background-color: var(--background-primary); } .is-phone .setting-item-heading { margin-top: 1.5em; } .is-phone .vertical-tab-header-group { margin: 0 auto; width: calc(100% - var(--size-4-8)); } .is-phone .vertical-tab-header-group-title { padding-bottom: 1em; } .is-phone .vertical-tab-header-group-title, .is-phone .setting-item-heading .setting-item-name { color: var(--text-normal); font-weight: var(--font-bold); font-size: var(--font-ui-large); } .is-phone .setting-item { padding: 1em 0; border-width: var(--border-width) 0 0 0; gap: var(--size-4-1); } .is-phone .setting-item-name { font-weight: var(--font-medium); } .is-phone .setting-item-info { min-width: 0; } .is-phone .setting-item:not(.mod-toggle):not(.setting-item-heading) { flex-direction: column; align-items: flex-start; } .is-phone .setting-item:not(.mod-toggle):not(.setting-item-heading) .setting-item-control { margin-top: 12px; width: 100%; } .is-phone .setting-icon { margin-right: 10px; display: inline-flex; vertical-align: middle; } .is-phone .setting-item-control select, .is-phone .setting-item-control input, .is-phone .setting-item-control button { width: 100%; margin: 0; } .is-phone .setting-item-control button { padding: 10px; } .is-phone .setting-item-control select { max-width: 100%; } .is-phone .modal.mod-settings { background-color: var(--background-secondary); } .is-phone .modal.mod-settings .modal-title { border-bottom: var(--border-width) solid var(--background-modifier-border); } .is-phone .modal.mod-settings .vertical-tabs-container { display: block; overflow-y: auto; } .is-phone .modal.mod-settings .vertical-tab-header { background-color: var(--background-secondary); border-right: none; flex-grow: 1; height: 100%; min-width: 100%; padding: var(--size-4-4); width: 100%; } .is-phone .modal.mod-settings .vertical-tab-content { background-color: var(--background-primary); padding: var(--size-4-5) max(var(--size-4-5), var(--safe-area-inset-right)) 100px max(var(--size-4-5), var(--safe-area-inset-left)); } .is-phone .modal.mod-settings .vertical-tab-header-group-items { border-radius: var(--radius-m); overflow: hidden; } .is-phone .modal.mod-settings .vertical-tab-nav-item { display: flex; align-items: center; height: 44px; background-color: var(--background-primary); padding: 0 var(--size-4-2) 0 var(--size-4-3); margin: 0; border-radius: 0; border-bottom: var(--border-width) solid var(--background-modifier-border); transition: background-color 200ms ease-in-out, color 200ms ease-in-out; } .is-phone .modal.mod-settings .vertical-tab-nav-item.is-active { background-color: var(--interactive-accent); } .is-phone .modal.mod-settings .vertical-tab-nav-item:last-child { border-bottom: none; } .is-phone .modal.mod-settings .vertical-tab-nav-item-chevron { display: flex; margin-left: auto; color: var(--text-faint); } .is-phone .vertical-tab-header-title { font-weight: var(--font-semibold); } .is-phone .community-modal { width: 100%; margin-bottom: 10px; } .is-phone .modal.mod-community-theme { min-height: unset; } .is-phone .community-modal-sidebar { background-color: var(--background-primary); } .is-phone .community-modal-controls { background-color: transparent; } .is-phone .community-modal-controls .setting-item { flex: 0 0 auto; padding: 0.25em 0; } .is-phone .community-modal-controls .setting-item-control { flex-direction: column; align-items: flex-end; } .is-phone .community-modal-controls .search-input-container { width: 100%; } .is-phone .community-modal-search-results { gap: 0; padding: 0; } .is-phone .community-modal-info { padding: var(--size-4-4); } .is-phone .community-item { border-width: 0 0 var(--border-width) 0; border-radius: 0; padding: var(--size-4-4); } .is-phone .community-item-info { padding: 20px; } .is-phone .community-modal-details { background-color: var(--background-primary); border: none; } .is-phone .community-modal-readme { padding: 20px 0; } .is-phone .community-modal-controls { padding: 0 var(--size-4-4); } .is-phone .community-modal-search-summary { padding: var(--size-4-1) var(--size-4-1) var(--size-4-4); } .is-phone .mod-community-theme .community-item { display: grid; grid-template-columns: 1fr 160px; grid-auto-flow: column dense; } .is-phone .mod-community-theme .community-item .community-item-name { grid-column: 1 / 2; } .is-phone .mod-community-theme .community-item .community-item-author { grid-column: 1 / 2; } .is-phone .mod-community-theme .community-item .community-item-badge.mod-update { position: static; grid-row: 4; } .is-phone .mod-community-theme .community-item .community-item-downloads { grid-column: 1 / 2; } .is-phone .mod-community-theme .community-item .community-item-screenshot { grid-row: 1 / span 4; height: 90px; } .is-phone .mod-community-plugin .community-item { display: grid; grid-template-columns: 3fr 1fr; grid-auto-flow: column dense; } .is-phone .mod-community-plugin .community-item .community-item-name { grid-column: 1 / 2; } .is-phone .mod-community-plugin .community-item .community-item-author { grid-column: 1 / 2; } .is-phone .mod-community-plugin .community-item .community-item-badge.mod-update { position: static; grid-row: 4; } .is-phone .mod-community-plugin .community-item .community-item-downloads { grid-column: 2 / 2; text-align: right; color: var(--text-faint); } .is-phone .mod-community-plugin .community-item .community-item-desc { grid-column: 1 / span 2; } .is-phone .community-modal-button-container { flex-direction: column; } .mobile-option-setting-item { font-size: var(--font-ui-medium); display: flex; align-items: center; margin: 8px 0; gap: var(--size-4-1); transition: transform 1000ms ease-in-out; color: var(--text-muted); } .mobile-option-setting-item:first-of-type:last-of-type .mobile-option-setting-drag-icon { display: none; } .mobile-option-setting-item-name { flex: 1 0 0; color: var(--text-normal); } .mobile-option-setting-item-option-icon { display: flex; align-items: center; justify-content: center; padding: 4px 4px; cursor: var(--cursor); border-radius: var(--radius-s); } :not(.is-mobile) .mobile-option-setting-item-option-icon:hover, :not(.is-mobile) .mobile-option-setting-item-option-icon:active { background-color: var(--background-modifier-hover); } .mobile-option-setting-item-option-icon.mobile-option-setting-drag-icon { cursor: grab; } .mobile-option-setting-item-option-icon.mobile-option-setting-drag-icon:active { cursor: grabbing; } .mobile-option-setting-item-remove-icon { color: var(--text-error); display: flex; } .mobile-option-setting-item-add-icon { color: var(--text-success); display: flex; } .is-mobile .status-bar { display: none; } .workspace-drawer { position: fixed; top: 0; bottom: 0; display: flex; overflow: hidden; font-size: var(--font-ui-small); min-width: var(--mobile-sidebar-width); max-width: var(--mobile-sidebar-max-width); width: 85vw; z-index: var(--layer-popover); margin: 0; border-radius: 0; padding-top: var(--safe-area-inset-top); background-color: var(--background-primary); } .workspace-drawer .nav-folder.mod-root > .nav-folder-title { display: none; } .workspace-drawer .nav-header { margin-top: auto; padding-bottom: max(var(--size-4-2), var(--safe-area-inset-bottom)); order: 10; } .workspace-drawer .nav-header ~ .search-input-container { width: calc(100% - var(--size-4-9)); } .workspace-drawer .workspace-leaf { background-color: transparent; } .theme-dark .workspace-drawer { background-color: var(--background-secondary); } .workspace-drawer.is-pinned { height: 100%; position: relative; max-width: var(--mobile-sidebar-width); z-index: var(--layer-cover); border-radius: 0; margin: 0; box-shadow: none; } .workspace-drawer.mod-left { left: 0; padding-left: var(--safe-area-inset-left); border-top-right-radius: var(--radius-xl); border-bottom-right-radius: var(--radius-xl); } .workspace-drawer.mod-left.is-pinned { border-right: var(--divider-width) solid var(--divider-color); border-radius: 0; } body.is-tablet .workspace-drawer.mod-left .workspace-drawer-inner { padding-left: var(--ribbon-width); } .workspace-drawer.mod-right { right: 0; padding-right: var(--safe-area-inset-right); border-top-left-radius: var(--radius-xl); border-bottom-left-radius: var(--radius-xl); } .workspace-drawer.mod-right.is-pinned { border-left: var(--divider-width) solid var(--divider-color); border-radius: 0; } .workspace-drawer.is-collapsed { overflow: hidden; } .workspace-drawer .nav-buttons-container { padding-left: var(--size-4-3); padding-right: var(--size-4-3); --icon-size: var(--icon-l); --icon-stroke: var(--icon-l-stroke-width); --icon-color: var(--interactive-accent); --icon-color-hover: var(--interactive-accent); --icon-color-active: var(--interactive-accent); --icon-color-focus: var(--interactive-accent-hover); } .workspace-drawer .nav-buttons-container .nav-action-button { flex-grow: 1; } .workspace-drawer .workspace-drawer-actions, .workspace-drawer .nav-buttons-container { overflow: auto; flex-wrap: nowrap; } .workspace-drawer .workspace-drawer-actions::-webkit-scrollbar, .workspace-drawer .nav-buttons-container::-webkit-scrollbar, .workspace-drawer .workspace-drawer-actions::-webkit-scrollbar-thumb, .workspace-drawer .nav-buttons-container::-webkit-scrollbar-thumb { visibility: hidden; } .workspace-drawer .side-dock-settings { margin-bottom: 0; } .workspace-drawer-inner { flex: 1 1 auto; overflow: hidden; display: flex; flex-direction: column; background-color: var(--background-primary); position: relative; transition: width ease-out 150ms; } .theme-dark .workspace-drawer-inner { background-color: var(--background-secondary); } .workspace-drawer.is-collapsed .workspace-drawer-inner { padding: 0; width: 0; } .workspace-drawer-backdrop { display: block; position: fixed; z-index: var(--layer-cover); width: 100%; height: 100%; background-color: var(--background-modifier-cover); top: 0; left: 0; opacity: 1; transition: opacity ease-out 150ms; } .workspace-drawer.is-collapsed .workspace-drawer-backdrop { display: none; opacity: 0; } .workspace-drawer-ribbon { position: absolute; left: 0; top: 0; height: 100%; overflow: auto; width: var(--ribbon-width); padding: var(--size-4-1) 0 var(--safe-area-inset-bottom); } .workspace-drawer-ribbon::-webkit-scrollbar, .workspace-drawer-ribbon::-webkit-scrollbar-thumb { visibility: hidden; width: 0; } .workspace-drawer-ribbon .side-dock-actions { padding: var(--size-4-2) 0; } .workspace-drawer-ribbon .side-dock-actions, .workspace-drawer-ribbon .side-dock-settings { gap: var(--size-4-2); } .workspace-drawer-ribbon .side-dock-ribbon-action { padding: var(--size-4-2); } .workspace-drawer-header { padding: var(--size-4-2) var(--size-4-5) 0 var(--size-4-5); display: flex; align-items: flex-start; } .workspace-drawer.is-pinned .workspace-drawer-header { padding-top: 0; } .workspace-drawer-header-left { display: flex; flex-direction: column; flex: 1 1 auto; overflow: hidden; } .workspace-drawer-header-name { display: flex; } .workspace-drawer-header-switcher { display: flex; flex: 0 1 auto; position: relative; } .workspace-drawer-header-switcher select { opacity: 0; position: absolute; } .workspace-drawer-header-name-text { text-overflow: ellipsis; overflow: hidden; font-size: var(--font-ui-large); font-weight: var(--font-semibold); } .workspace-drawer-header-name-chevron { --icon-size: var(--icon-m); --icon-stroke: 2.25px; color: var(--text-faint); display: flex; align-items: center; margin-left: var(--size-2-1); } .workspace-drawer-header-name-action-icon { color: var(--text-muted); margin-left: var(--size-4-2); display: flex; align-items: center; } .workspace-drawer-header-info { color: var(--text-muted); margin: var(--size-4-1) 0 var(--size-4-4) 0; font-size: var(--font-ui-small); } .workspace-drawer-header-icon { --icon-size: var(--icon-l); --icon-stroke: var(--icon-l-stroke-width); padding-top: var(--size-2-2); color: var(--interactive-accent); margin-left: var(--size-4-3); } .workspace-drawer-actions { margin: var(--size-4-4) 0 var(--size-4-3) 0; display: flex; color: var(--text-muted); } .workspace-drawer-action-item { flex: 0 0 70px; display: flex; flex-direction: column; align-items: center; overflow: hidden; } .workspace-drawer-action-icon { color: var(--text-faint); } .workspace-drawer-action-short-name { font-size: var(--font-ui-small); overflow: hidden; white-space: nowrap; text-overflow: ellipsis; max-width: 80px; } .workspace-drawer-separator { margin: 0 0 12px 0; } .workspace-drawer-tab-option-item { display: flex; align-items: center; margin: var(--size-4-5); gap: var(--size-4-2); } .workspace-drawer-active-tab-icon, .workspace-drawer-tab-option-item-icon { --icon-size: var(--icon-l); --icon-stroke: var(--icon-l-stroke-width); color: var(--text-normal); display: flex; } .workspace-drawer-active-tab-icon:last-child { color: var(--interactive-accent); order: 2; } .workspace-drawer-active-tab-back-icon { --icon-size: var(--icon-l); --icon-stroke: var(--icon-l-stroke-width); display: flex; color: var(--interactive-accent); order: 1; margin-right: var(--size-4-1); } .workspace-drawer-tab-option-item-title, .workspace-drawer-active-tab-title { color: var(--text-normal); font-weight: var(--font-medium); font-size: var(--font-ui-medium); flex: 1 0 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } .workspace-drawer-active-tab-header { display: flex; align-items: center; padding: var(--size-4-3) var(--size-4-5) var(--size-4-4); margin: 0; gap: var(--size-4-2); } .workspace-drawer-tab-container { overflow: hidden; position: relative; flex: 1 0 0; } .workspace-drawer-tab-container > * { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .workspace-drawer-active-tab-icon.mod-exit-fullscreen { display: none; } .workspace-drawer-active-tab-container { display: flex; flex-direction: column; } .theme-dark .workspace-drawer-active-tab-container.is-fullscreen { background-color: var(--background-secondary); } .workspace-drawer-active-tab-container .workspace-drawer-active-tab-content .nav-files-container { padding-top: var(--size-4-3); } .workspace-drawer-active-tab-container.is-fullscreen { position: fixed; width: 100%; top: 0; left: 0; background-color: var(--background-primary); margin: 0 env(safe-area-inset-right, 20px) 0 env(safe-area-inset-left, 20px); padding: env(safe-area-inset-top, 20px) 0 0; } .workspace-drawer-active-tab-container.is-fullscreen .workspace-drawer-active-tab-back-icon { display: none; } .workspace-drawer-active-tab-container.is-fullscreen .workspace-leaf { width: 100%; } .workspace-drawer-active-tab-container.is-fullscreen .workspace-drawer-active-tab-header { margin: 0 env(safe-area-inset-right, 20px) 0 env(safe-area-inset-left, 20px); padding: var(--size-4-4) var(--size-4-6); } .workspace-drawer-active-tab-content { flex: 1 0 0; overflow: auto; display: flex; } .workspace-drawer-active-tab-content > * { flex: 1 0 0; width: 100%; height: 100%; } .workspace-drawer-active-tab-content .view-header { display: none !important; } .workspace-drawer-active-tab-content .view-content { padding-top: 4px; height: 100%; } .workspace-drawer-active-tab-content .graph-controls { display: none; } .workspace-drawer-active-tab-content .outline { font-size: var(--font-ui-medium); } .is-phone .side-dock-ribbon { display: none; } .is-phone .workspace-drawer .workspace-drawer-header-icon.mod-pin { display: none; } .is-phone .mod-root .workspace-split:not(.mod-visible), .is-phone .mod-root .workspace-tabs:not(.mod-visible) { display: none; } .is-tablet .workspace-drawer .workspace-drawer-header-icon.mod-settings { display: none; } body.is-tablet .sidebar-toggle-button { padding-left: var(--size-4-2); --icon-color: var(--interactive-accent); --icon-color-hover: var(--interactive-accent); --icon-color-active: var(--interactive-accent-hover); --icon-color-focus: var(--interactive-accent-hover); --icon-size: var(--icon-l); --icon-stroke: var(--icon-l-stroke-width); } .is-mobile .menu { border: none; max-width: 100%; } .is-phone .menu { background-color: var(--background-secondary); max-height: 60vh; width: calc(100% - var(--safe-area-inset-left) - var(--safe-area-inset-right)); min-width: unset; position: absolute; padding-bottom: var(--safe-area-inset-bottom); margin-left: var(--safe-area-inset-left); margin-right: var(--safe-area-inset-right); border-radius: var(--radius-l) var(--radius-l) 0 0; bottom: 0; left: 0; right: 0; margin: 0 auto; top: unset !important; overflow-y: auto; } .is-phone .menu-item { padding: var(--size-4-3) var(--size-4-3); height: unset; line-height: unset; } .is-mobile .modal { border: none; } .is-mobile .modal-button-container { display: flex; flex-direction: column; } .is-mobile .community-modal { width: 100%; margin-bottom: 10px; } .is-mobile .modal.mod-community-theme { min-height: unset; } .is-mobile .mod-confirmation .modal-close-button { display: none; } .is-phone .modal, .is-phone .prompt, .is-phone .suggestion-container { border-radius: 0; border: none; max-height: 100vh; width: 100vw; max-width: 100vw; min-width: unset; position: absolute; bottom: unset; padding: 0; left: 0; right: 0; } .is-phone .modal { transition: max-height 0.2s ease, height 0.2s ease; border-radius: var(--radius-m); bottom: 0; height: 100%; max-height: 66vh; margin: 0; padding: 0 var(--safe-area-inset-right) 0 var(--safe-area-inset-left); width: 100vw; } .is-phone .modal .modal-close-button { top: var(--size-4-3); } .is-phone .modal:focus-within { max-height: calc(100vh - var(--safe-area-inset-top)); } .is-phone .modal .modal-title { display: block; font-size: var(--font-ui-medium); margin-bottom: 0; padding-top: var(--size-4-3); text-align: center; } .is-phone .modal-sidebar { background-color: var(--background-primary); } .is-phone .modal-content { display: flex; position: relative; flex-direction: column; margin-top: 0; overflow: auto; padding: var(--size-4-3); } .is-phone .modal-button-container { width: 100%; padding: var(--size-4-3); margin-top: 0; margin-bottom: var(--safe-area-inset-bottom); } .is-phone .modal.mod-lg { max-height: 100%; } .is-phone .modal.mod-lg .modal-title { padding-top: calc(env(safe-area-inset-top) + var(--size-4-3)); padding-bottom: var(--size-4-3); } .is-phone .modal.mod-lg .modal-close-button, .is-phone .modal.mod-sidebar-layout .modal-close-button { top: calc(var(--safe-area-inset-top) + 10px); right: var(--size-4-5); } .is-phone .modal.mod-sidebar-layout { bottom: 0; top: 0; border-radius: 0; height: 100%; max-height: 100%; margin: 0; padding: 0 var(--safe-area-inset-right) 0 var(--safe-area-inset-left); width: 100vw; } .is-phone .modal.mod-sidebar-layout .search-input-container { flex-grow: 1; } .is-phone .modal.mod-sidebar-layout .modal-title { display: block; padding-top: calc(env(safe-area-inset-top) + var(--size-4-3)); padding-bottom: var(--size-4-3); margin-bottom: 0; } .is-phone .modal.mod-sidebar-layout .modal-content > * { width: 100%; height: 100%; position: absolute; top: 0; left: 0; right: 0; padding: 0 var(--safe-area-inset-right) 0 var(--safe-area-inset-left); } .mobile-navbar { background-color: var(--background-primary); padding: 0 max(var(--safe-area-inset-right), var(--size-4-4)) 0 max(var(--safe-area-inset-left), var(--size-4-4)); position: absolute; left: 0; right: 0; bottom: 0; } body.is-tablet .mobile-navbar { display: none; } .mobile-navbar-text { font-size: var(--font-ui-small); padding: var(--size-4-1) 0; white-space: nowrap; text-overflow: clip; width: 100%; -webkit-mask-image: linear-gradient(to left, rgba(0, 0, 0, 0) var(--size-4-4), #000000 var(--size-4-8)); } .mobile-navbar-actions { --icon-size: var(--icon-l); --icon-stroke: var(--icon-l-stroke-width); --icon-color: var(--interactive-accent); --icon-color-hover: var(--interactive-accent); --icon-color-active: var(--interactive-accent-hover); --icon-color-focus: var(--interactive-accent-hover); display: flex; align-items: center; justify-content: space-between; padding: var(--size-4-2) 0 max(var(--size-4-2), var(--safe-area-inset-bottom)) 0; } .mobile-navbar-tabs-action { align-items: center; border-radius: var(--clickable-icon-radius); border: 2px solid var(--icon-color); display: flex; font-size: calc(var(--icon-size) * 0.6); font-weight: var(--bold-weight); justify-content: center; height: 20px; width: var(--icon-size); } .mobile-navbar-action.has-longpress-menu { position: relative; } .mobile-navbar-action.has-longpress-menu .navbar-action-flair { --icon-size: 12px; --icon-stroke: 3px; color: var(--interactive-accent); position: absolute; left: -6px; top: 0; height: 100%; align-items: center; display: flex; } .is-phone .notice-container { padding: 0; top: max(var(--size-4-1), var(--safe-area-inset-top)); left: 0; right: 0; max-width: 96%; margin: 0 auto; } .is-phone .notice { background-color: var(--interactive-accent); color: var(--text-on-accent); margin: 0 auto var(--size-4-1); text-align: center; border-radius: 30px; max-width: none; box-shadow: none; } .is-mobile .prompt { border: none; } .theme-dark.is-mobile .prompt { background-color: var(--background-secondary); } .theme-dark.is-mobile .prompt input.prompt-input { background-color: var(--background-secondary); } .is-mobile .prompt-input[type=text] { padding: var(--size-4-4); } .is-phone .prompt { position: relative; margin: 0 auto; width: calc(100% - var(--safe-area-inset-left) - var(--safe-area-inset-right)); } .is-phone .prompt .suggestion-hotkey { display: none; } .is-phone .prompt { --mobile-height: 100vh; --prompt-bottom: 0px; --prompt-top: calc(var(--safe-area-inset-top) + var(--header-height) + var(--size-4-2)); border-radius: var(--radius-l) var(--radius-l) 0 0; min-width: unset; margin-bottom: var(--prompt-bottom); margin-top: var(--prompt-top); box-shadow: none; top: 0; height: calc(var(--mobile-height) - var(--prompt-top) - var(--prompt-bottom)); } .is-phone .prompt-input-container { border-bottom: var(--border-width) solid var(--background-modifier-border); } .is-phone .prompt-input[type=text] { border: none; } .is-phone .prompt-input-cta { --icon-color: var(--interactive-accent); display: flex; align-items: center; padding: 0 var(--size-4-3); flex: 0 1 auto; } .is-phone .prompt-instructions { display: none; } .pull-action { position: absolute; background-color: var(--background-secondary); z-index: var(--layer-popover); color: var(--text-muted); font-size: 90%; transition: background-color ease-in-out 150ms; } .pull-action.mod-activated { background-color: var(--interactive-accent); color: var(--text-on-accent); } .pull-down-action { top: 0; left: 0; right: 0; width: 96%; max-width: 500px; margin: var(--safe-area-inset-top) auto 0 auto; padding: var(--size-4-3) var(--size-4-4); text-align: center; border-radius: 40px; } .pull-out-action { top: 50%; padding: var(--size-4-3) var(--size-4-4); border-radius: 40px; margin: 0 var(--size-4-4); } .mobile-toolbar { -webkit-app-region: drag; flex: 0 0 auto; width: 100%; overflow-y: hidden; background-color: var(--background-primary); bottom: 0; z-index: var(--layer-menu); } .mobile-toolbar-options-container { height: var(--mobile-toolbar-height); display: flex; overflow-x: auto; overflow-y: hidden; width: 100%; padding: 0 10px; scrollbar-width: none !important; /* Firefox */ -ms-overflow-style: none !important; /* Internet Explorer 10+ */ } .mobile-toolbar-options-container::-webkit-scrollbar { width: 0 !important; height: 0 !important; } .mobile-toolbar-option { display: flex; font-size: var(--font-ui-medium); color: var(--text-muted); font-family: var(--font-monospace); justify-content: center; align-items: center; min-width: 50px; position: relative; left: 0; transition: left 200ms ease-in-out; } .mobile-toolbar-option.mod-ghost { position: absolute; transition: left 250ms ease-in-out; } .mobile-toolbar-option.mod-ghost:before { content: ' '; position: absolute; width: 100%; height: 100%; top: 0; left: 0; border-radius: 6px; background-color: var(--interactive-accent); } .mobile-toolbar-done-button { position: fixed; margin-top: var(--size-4-2); margin-right: var(--size-4-3); top: env(safe-area-inset-top, 20px); right: env(safe-area-inset-right, 20px); z-index: var(--layer-status-bar); } .is-mobile .suggestion-item { padding: var(--size-4-2) var(--size-4-3); } .is-tablet.theme-dark .suggestion-container { background-color: var(--background-secondary); } .is-phone .suggestion-container { margin: 0 auto; padding-bottom: calc(var(--safe-area-inset-bottom) + var(--mobile-toolbar-height)); width: calc(100% - var(--safe-area-inset-left) - var(--safe-area-inset-right)); border-top: 1px solid var(--background-modifier-border); background-color: var(--background-primary); box-shadow: none; border-radius: 0; bottom: 0; overflow: auto; max-height: 35vh; } .is-phone .suggestion { position: relative; } .is-phone .suggestion-item.mod-group { border-radius: 0; } .is-mobile .modal.mod-publish { background-color: var(--modal-background); border-radius: 0; height: 100%; margin: 0; padding-top: var(--safe-area-inset-top); width: 100vw; } .is-mobile .publish-changes-info-publishing-to { display: none; } .is-mobile .publish-changes-add-linked-btn { width: auto; } .is-phone .modal.mod-publish .modal-button-container { background-color: var(--modal-background); position: fixed; } .is-phone .modal.mod-publish .modal-content { display: unset; } .is-mobile .sync-history-list { padding: 0; } .is-mobile .sync-history-list-item { padding: 12px 16px; } .is-mobile .sync-history-content-container { display: flex; flex-direction: column; max-width: unset; } .is-mobile .sync-history-content { flex: 1 1 auto; padding: 10px; border-radius: 0; border: none; } .is-phone .sync-log-container { flex: 1 1 auto; } .is-phone .modal.mod-sync-history .search-input-container { width: 100%; margin-bottom: 0; } .mobile-vault-chooser { width: 100%; height: 100%; background-color: var(--background-secondary); position: relative; } .mobile-vault-chooser hr { margin: 12px 0; } .mobile-vault-chooser-screen { display: flex; flex-direction: column; position: absolute; left: 0; top: 0; width: 100%; height: 100%; } .mobile-vault-chooser-header { display: flex; background-color: var(--background-secondary-alt); border-bottom: 1px solid var(--background-primary); color: var(--text-muted); flex: 0 0 50px; font-size: 18px; align-items: center; } .mobile-vault-chooser-header-icon { display: flex; margin: 0 6px 0 10px; } .mobile-vault-chooser-content { flex: 1 0 0; padding: 20px; height: 100%; overflow-y: auto; } .mobile-vault-chooser-logo-container { margin: 40px 0; text-align: center; color: var(--text-muted); } .mobile-vault-chooser-logo { font-size: 32px; text-transform: uppercase; font-family: 'Avenir Next', sans-serif; letter-spacing: 2px; margin-bottom: 10px; } .mobile-vault-chooser-version { font-size: var(--font-ui-small); } .mobile-vault-chooser-empty-state { margin: 20px 0; font-size: 17px; color: var(--text-muted); } .mobile-vault-chooser-action-icon { color: var(--text-muted); display: flex; padding: 10px; margin: -10px 0; } .mobile-vault-chooser-action { display: flex; padding: 14px 0; align-items: center; font-size: 20px; } .mobile-vault-chooser-action-name { flex: 1 0 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .mobile-vault-chooser-action-description { color: var(--text-muted); font-size: 17px; overflow: hidden; text-overflow: ellipsis; max-width: calc(100vw - 110px); white-space: nowrap; } .mobile-vault-chooser-field-name { color: var(--text-muted); margin: 20px 0 10px 0; font-size: 18px; } input.mobile-vault-chooser-field-input { width: 100%; font-size: var(--font-ui-medium); padding: 8px 12px; height: auto; } .mobile-vault-chooser-button-container { margin: 20px 0; } .mobile-vault-chooser-button-container button { padding: 10px 20px; font-size: var(--font-ui-medium); width: 100%; } (()=>{var e={9742:(e,t)=>{"use strict";t.byteLength=function(e){var t=l(e),n=t[0],i=t[1];return 3*(n+i)/4-i},t.toByteArray=function(e){var t,n,o=l(e),a=o[0],s=o[1],c=new r(function(e,t,n){return 3*(t+n)/4-n}(0,a,s)),u=0,h=s>0?a-4:a;for(n=0;n>16&255,c[u++]=t>>8&255,c[u++]=255&t;2===s&&(t=i[e.charCodeAt(n)]<<2|i[e.charCodeAt(n+1)]>>4,c[u++]=255&t);1===s&&(t=i[e.charCodeAt(n)]<<10|i[e.charCodeAt(n+1)]<<4|i[e.charCodeAt(n+2)]>>2,c[u++]=t>>8&255,c[u++]=255&t);return c},t.fromByteArray=function(e){for(var t,i=e.length,r=i%3,o=[],a=16383,s=0,l=i-r;sl?l:s+a));1===r?(t=e[i-1],o.push(n[t>>2]+n[t<<4&63]+"==")):2===r&&(t=(e[i-2]<<8)+e[i-1],o.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+"="));return o.join("")};for(var n=[],i=[],r="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,s=o.length;a0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function c(e,t,i){for(var r,o,a=[],s=t;s>18&63]+n[o>>12&63]+n[o>>6&63]+n[63&o]);return a.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},932:e=>{"use strict";e.exports=function(e,t){var n,i=String(e),r=0;if("string"!=typeof t||1!==t.length)throw new Error("Expected character");n=i.indexOf(t);for(;-1!==n;)r++,n=i.indexOf(t,n+1);return r}},5848:e=>{"use strict";e.exports=JSON.parse('{"nbsp":" ","iexcl":"¡","cent":"¢","pound":"£","curren":"¤","yen":"¥","brvbar":"¦","sect":"§","uml":"¨","copy":"©","ordf":"ª","laquo":"«","not":"¬","shy":"­","reg":"®","macr":"¯","deg":"°","plusmn":"±","sup2":"²","sup3":"³","acute":"´","micro":"µ","para":"¶","middot":"·","cedil":"¸","sup1":"¹","ordm":"º","raquo":"»","frac14":"¼","frac12":"½","frac34":"¾","iquest":"¿","Agrave":"À","Aacute":"Á","Acirc":"Â","Atilde":"Ã","Auml":"Ä","Aring":"Å","AElig":"Æ","Ccedil":"Ç","Egrave":"È","Eacute":"É","Ecirc":"Ê","Euml":"Ë","Igrave":"Ì","Iacute":"Í","Icirc":"Î","Iuml":"Ï","ETH":"Ð","Ntilde":"Ñ","Ograve":"Ò","Oacute":"Ó","Ocirc":"Ô","Otilde":"Õ","Ouml":"Ö","times":"×","Oslash":"Ø","Ugrave":"Ù","Uacute":"Ú","Ucirc":"Û","Uuml":"Ü","Yacute":"Ý","THORN":"Þ","szlig":"ß","agrave":"à","aacute":"á","acirc":"â","atilde":"ã","auml":"ä","aring":"å","aelig":"æ","ccedil":"ç","egrave":"è","eacute":"é","ecirc":"ê","euml":"ë","igrave":"ì","iacute":"í","icirc":"î","iuml":"ï","eth":"ð","ntilde":"ñ","ograve":"ò","oacute":"ó","ocirc":"ô","otilde":"õ","ouml":"ö","divide":"÷","oslash":"ø","ugrave":"ù","uacute":"ú","ucirc":"û","uuml":"ü","yacute":"ý","thorn":"þ","yuml":"ÿ","fnof":"ƒ","Alpha":"Α","Beta":"Β","Gamma":"Γ","Delta":"Δ","Epsilon":"Ε","Zeta":"Ζ","Eta":"Η","Theta":"Θ","Iota":"Ι","Kappa":"Κ","Lambda":"Λ","Mu":"Μ","Nu":"Ν","Xi":"Ξ","Omicron":"Ο","Pi":"Π","Rho":"Ρ","Sigma":"Σ","Tau":"Τ","Upsilon":"Υ","Phi":"Φ","Chi":"Χ","Psi":"Ψ","Omega":"Ω","alpha":"α","beta":"β","gamma":"γ","delta":"δ","epsilon":"ε","zeta":"ζ","eta":"η","theta":"θ","iota":"ι","kappa":"κ","lambda":"λ","mu":"μ","nu":"ν","xi":"ξ","omicron":"ο","pi":"π","rho":"ρ","sigmaf":"ς","sigma":"σ","tau":"τ","upsilon":"υ","phi":"φ","chi":"χ","psi":"ψ","omega":"ω","thetasym":"ϑ","upsih":"ϒ","piv":"ϖ","bull":"•","hellip":"…","prime":"′","Prime":"″","oline":"‾","frasl":"⁄","weierp":"℘","image":"ℑ","real":"ℜ","trade":"™","alefsym":"ℵ","larr":"←","uarr":"↑","rarr":"→","darr":"↓","harr":"↔","crarr":"↵","lArr":"⇐","uArr":"⇑","rArr":"⇒","dArr":"⇓","hArr":"⇔","forall":"∀","part":"∂","exist":"∃","empty":"∅","nabla":"∇","isin":"∈","notin":"∉","ni":"∋","prod":"∏","sum":"∑","minus":"−","lowast":"∗","radic":"√","prop":"∝","infin":"∞","ang":"∠","and":"∧","or":"∨","cap":"∩","cup":"∪","int":"∫","there4":"∴","sim":"∼","cong":"≅","asymp":"≈","ne":"≠","equiv":"≡","le":"≤","ge":"≥","sub":"⊂","sup":"⊃","nsub":"⊄","sube":"⊆","supe":"⊇","oplus":"⊕","otimes":"⊗","perp":"⊥","sdot":"⋅","lceil":"⌈","rceil":"⌉","lfloor":"⌊","rfloor":"⌋","lang":"〈","rang":"〉","loz":"◊","spades":"♠","clubs":"♣","hearts":"♥","diams":"♦","quot":"\\"","amp":"&","lt":"<","gt":">","OElig":"Œ","oelig":"œ","Scaron":"Š","scaron":"š","Yuml":"Ÿ","circ":"ˆ","tilde":"˜","ensp":" ","emsp":" ","thinsp":" ","zwnj":"‌","zwj":"‍","lrm":"‎","rlm":"‏","ndash":"–","mdash":"—","lsquo":"‘","rsquo":"’","sbquo":"‚","ldquo":"“","rdquo":"”","bdquo":"„","dagger":"†","Dagger":"‡","permil":"‰","lsaquo":"‹","rsaquo":"›","euro":"€"}')},6588:e=>{"use strict";e.exports=JSON.parse('{"AElig":"Æ","AMP":"&","Aacute":"Á","Acirc":"Â","Agrave":"À","Aring":"Å","Atilde":"Ã","Auml":"Ä","COPY":"©","Ccedil":"Ç","ETH":"Ð","Eacute":"É","Ecirc":"Ê","Egrave":"È","Euml":"Ë","GT":">","Iacute":"Í","Icirc":"Î","Igrave":"Ì","Iuml":"Ï","LT":"<","Ntilde":"Ñ","Oacute":"Ó","Ocirc":"Ô","Ograve":"Ò","Oslash":"Ø","Otilde":"Õ","Ouml":"Ö","QUOT":"\\"","REG":"®","THORN":"Þ","Uacute":"Ú","Ucirc":"Û","Ugrave":"Ù","Uuml":"Ü","Yacute":"Ý","aacute":"á","acirc":"â","acute":"´","aelig":"æ","agrave":"à","amp":"&","aring":"å","atilde":"ã","auml":"ä","brvbar":"¦","ccedil":"ç","cedil":"¸","cent":"¢","copy":"©","curren":"¤","deg":"°","divide":"÷","eacute":"é","ecirc":"ê","egrave":"è","eth":"ð","euml":"ë","frac12":"½","frac14":"¼","frac34":"¾","gt":">","iacute":"í","icirc":"î","iexcl":"¡","igrave":"ì","iquest":"¿","iuml":"ï","laquo":"«","lt":"<","macr":"¯","micro":"µ","middot":"·","nbsp":" ","not":"¬","ntilde":"ñ","oacute":"ó","ocirc":"ô","ograve":"ò","ordf":"ª","ordm":"º","oslash":"ø","otilde":"õ","ouml":"ö","para":"¶","plusmn":"±","pound":"£","quot":"\\"","raquo":"»","reg":"®","sect":"§","shy":"­","sup1":"¹","sup2":"²","sup3":"³","szlig":"ß","thorn":"þ","times":"×","uacute":"ú","ucirc":"û","ugrave":"ù","uml":"¨","uuml":"ü","yacute":"ý","yen":"¥","yuml":"ÿ"}')},3407:e=>{"use strict";e.exports=JSON.parse('{"AEli":"Æ","AElig":"Æ","AM":"&","AMP":"&","Aacut":"Á","Aacute":"Á","Abreve":"Ă","Acir":"Â","Acirc":"Â","Acy":"А","Afr":"𝔄","Agrav":"À","Agrave":"À","Alpha":"Α","Amacr":"Ā","And":"⩓","Aogon":"Ą","Aopf":"𝔸","ApplyFunction":"⁡","Arin":"Å","Aring":"Å","Ascr":"𝒜","Assign":"≔","Atild":"Ã","Atilde":"Ã","Aum":"Ä","Auml":"Ä","Backslash":"∖","Barv":"⫧","Barwed":"⌆","Bcy":"Б","Because":"∵","Bernoullis":"ℬ","Beta":"Β","Bfr":"𝔅","Bopf":"𝔹","Breve":"˘","Bscr":"ℬ","Bumpeq":"≎","CHcy":"Ч","COP":"©","COPY":"©","Cacute":"Ć","Cap":"⋒","CapitalDifferentialD":"ⅅ","Cayleys":"ℭ","Ccaron":"Č","Ccedi":"Ç","Ccedil":"Ç","Ccirc":"Ĉ","Cconint":"∰","Cdot":"Ċ","Cedilla":"¸","CenterDot":"·","Cfr":"ℭ","Chi":"Χ","CircleDot":"⊙","CircleMinus":"⊖","CirclePlus":"⊕","CircleTimes":"⊗","ClockwiseContourIntegral":"∲","CloseCurlyDoubleQuote":"”","CloseCurlyQuote":"’","Colon":"∷","Colone":"⩴","Congruent":"≡","Conint":"∯","ContourIntegral":"∮","Copf":"ℂ","Coproduct":"∐","CounterClockwiseContourIntegral":"∳","Cross":"⨯","Cscr":"𝒞","Cup":"⋓","CupCap":"≍","DD":"ⅅ","DDotrahd":"⤑","DJcy":"Ђ","DScy":"Ѕ","DZcy":"Џ","Dagger":"‡","Darr":"↡","Dashv":"⫤","Dcaron":"Ď","Dcy":"Д","Del":"∇","Delta":"Δ","Dfr":"𝔇","DiacriticalAcute":"´","DiacriticalDot":"˙","DiacriticalDoubleAcute":"˝","DiacriticalGrave":"`","DiacriticalTilde":"˜","Diamond":"⋄","DifferentialD":"ⅆ","Dopf":"𝔻","Dot":"¨","DotDot":"⃜","DotEqual":"≐","DoubleContourIntegral":"∯","DoubleDot":"¨","DoubleDownArrow":"⇓","DoubleLeftArrow":"⇐","DoubleLeftRightArrow":"⇔","DoubleLeftTee":"⫤","DoubleLongLeftArrow":"⟸","DoubleLongLeftRightArrow":"⟺","DoubleLongRightArrow":"⟹","DoubleRightArrow":"⇒","DoubleRightTee":"⊨","DoubleUpArrow":"⇑","DoubleUpDownArrow":"⇕","DoubleVerticalBar":"∥","DownArrow":"↓","DownArrowBar":"⤓","DownArrowUpArrow":"⇵","DownBreve":"̑","DownLeftRightVector":"⥐","DownLeftTeeVector":"⥞","DownLeftVector":"↽","DownLeftVectorBar":"⥖","DownRightTeeVector":"⥟","DownRightVector":"⇁","DownRightVectorBar":"⥗","DownTee":"⊤","DownTeeArrow":"↧","Downarrow":"⇓","Dscr":"𝒟","Dstrok":"Đ","ENG":"Ŋ","ET":"Ð","ETH":"Ð","Eacut":"É","Eacute":"É","Ecaron":"Ě","Ecir":"Ê","Ecirc":"Ê","Ecy":"Э","Edot":"Ė","Efr":"𝔈","Egrav":"È","Egrave":"È","Element":"∈","Emacr":"Ē","EmptySmallSquare":"◻","EmptyVerySmallSquare":"▫","Eogon":"Ę","Eopf":"𝔼","Epsilon":"Ε","Equal":"⩵","EqualTilde":"≂","Equilibrium":"⇌","Escr":"ℰ","Esim":"⩳","Eta":"Η","Eum":"Ë","Euml":"Ë","Exists":"∃","ExponentialE":"ⅇ","Fcy":"Ф","Ffr":"𝔉","FilledSmallSquare":"◼","FilledVerySmallSquare":"▪","Fopf":"𝔽","ForAll":"∀","Fouriertrf":"ℱ","Fscr":"ℱ","GJcy":"Ѓ","G":">","GT":">","Gamma":"Γ","Gammad":"Ϝ","Gbreve":"Ğ","Gcedil":"Ģ","Gcirc":"Ĝ","Gcy":"Г","Gdot":"Ġ","Gfr":"𝔊","Gg":"⋙","Gopf":"𝔾","GreaterEqual":"≥","GreaterEqualLess":"⋛","GreaterFullEqual":"≧","GreaterGreater":"⪢","GreaterLess":"≷","GreaterSlantEqual":"⩾","GreaterTilde":"≳","Gscr":"𝒢","Gt":"≫","HARDcy":"Ъ","Hacek":"ˇ","Hat":"^","Hcirc":"Ĥ","Hfr":"ℌ","HilbertSpace":"ℋ","Hopf":"ℍ","HorizontalLine":"─","Hscr":"ℋ","Hstrok":"Ħ","HumpDownHump":"≎","HumpEqual":"≏","IEcy":"Е","IJlig":"IJ","IOcy":"Ё","Iacut":"Í","Iacute":"Í","Icir":"Î","Icirc":"Î","Icy":"И","Idot":"İ","Ifr":"ℑ","Igrav":"Ì","Igrave":"Ì","Im":"ℑ","Imacr":"Ī","ImaginaryI":"ⅈ","Implies":"⇒","Int":"∬","Integral":"∫","Intersection":"⋂","InvisibleComma":"⁣","InvisibleTimes":"⁢","Iogon":"Į","Iopf":"𝕀","Iota":"Ι","Iscr":"ℐ","Itilde":"Ĩ","Iukcy":"І","Ium":"Ï","Iuml":"Ï","Jcirc":"Ĵ","Jcy":"Й","Jfr":"𝔍","Jopf":"𝕁","Jscr":"𝒥","Jsercy":"Ј","Jukcy":"Є","KHcy":"Х","KJcy":"Ќ","Kappa":"Κ","Kcedil":"Ķ","Kcy":"К","Kfr":"𝔎","Kopf":"𝕂","Kscr":"𝒦","LJcy":"Љ","L":"<","LT":"<","Lacute":"Ĺ","Lambda":"Λ","Lang":"⟪","Laplacetrf":"ℒ","Larr":"↞","Lcaron":"Ľ","Lcedil":"Ļ","Lcy":"Л","LeftAngleBracket":"⟨","LeftArrow":"←","LeftArrowBar":"⇤","LeftArrowRightArrow":"⇆","LeftCeiling":"⌈","LeftDoubleBracket":"⟦","LeftDownTeeVector":"⥡","LeftDownVector":"⇃","LeftDownVectorBar":"⥙","LeftFloor":"⌊","LeftRightArrow":"↔","LeftRightVector":"⥎","LeftTee":"⊣","LeftTeeArrow":"↤","LeftTeeVector":"⥚","LeftTriangle":"⊲","LeftTriangleBar":"⧏","LeftTriangleEqual":"⊴","LeftUpDownVector":"⥑","LeftUpTeeVector":"⥠","LeftUpVector":"↿","LeftUpVectorBar":"⥘","LeftVector":"↼","LeftVectorBar":"⥒","Leftarrow":"⇐","Leftrightarrow":"⇔","LessEqualGreater":"⋚","LessFullEqual":"≦","LessGreater":"≶","LessLess":"⪡","LessSlantEqual":"⩽","LessTilde":"≲","Lfr":"𝔏","Ll":"⋘","Lleftarrow":"⇚","Lmidot":"Ŀ","LongLeftArrow":"⟵","LongLeftRightArrow":"⟷","LongRightArrow":"⟶","Longleftarrow":"⟸","Longleftrightarrow":"⟺","Longrightarrow":"⟹","Lopf":"𝕃","LowerLeftArrow":"↙","LowerRightArrow":"↘","Lscr":"ℒ","Lsh":"↰","Lstrok":"Ł","Lt":"≪","Map":"⤅","Mcy":"М","MediumSpace":" ","Mellintrf":"ℳ","Mfr":"𝔐","MinusPlus":"∓","Mopf":"𝕄","Mscr":"ℳ","Mu":"Μ","NJcy":"Њ","Nacute":"Ń","Ncaron":"Ň","Ncedil":"Ņ","Ncy":"Н","NegativeMediumSpace":"​","NegativeThickSpace":"​","NegativeThinSpace":"​","NegativeVeryThinSpace":"​","NestedGreaterGreater":"≫","NestedLessLess":"≪","NewLine":"\\n","Nfr":"𝔑","NoBreak":"⁠","NonBreakingSpace":" ","Nopf":"ℕ","Not":"⫬","NotCongruent":"≢","NotCupCap":"≭","NotDoubleVerticalBar":"∦","NotElement":"∉","NotEqual":"≠","NotEqualTilde":"≂̸","NotExists":"∄","NotGreater":"≯","NotGreaterEqual":"≱","NotGreaterFullEqual":"≧̸","NotGreaterGreater":"≫̸","NotGreaterLess":"≹","NotGreaterSlantEqual":"⩾̸","NotGreaterTilde":"≵","NotHumpDownHump":"≎̸","NotHumpEqual":"≏̸","NotLeftTriangle":"⋪","NotLeftTriangleBar":"⧏̸","NotLeftTriangleEqual":"⋬","NotLess":"≮","NotLessEqual":"≰","NotLessGreater":"≸","NotLessLess":"≪̸","NotLessSlantEqual":"⩽̸","NotLessTilde":"≴","NotNestedGreaterGreater":"⪢̸","NotNestedLessLess":"⪡̸","NotPrecedes":"⊀","NotPrecedesEqual":"⪯̸","NotPrecedesSlantEqual":"⋠","NotReverseElement":"∌","NotRightTriangle":"⋫","NotRightTriangleBar":"⧐̸","NotRightTriangleEqual":"⋭","NotSquareSubset":"⊏̸","NotSquareSubsetEqual":"⋢","NotSquareSuperset":"⊐̸","NotSquareSupersetEqual":"⋣","NotSubset":"⊂⃒","NotSubsetEqual":"⊈","NotSucceeds":"⊁","NotSucceedsEqual":"⪰̸","NotSucceedsSlantEqual":"⋡","NotSucceedsTilde":"≿̸","NotSuperset":"⊃⃒","NotSupersetEqual":"⊉","NotTilde":"≁","NotTildeEqual":"≄","NotTildeFullEqual":"≇","NotTildeTilde":"≉","NotVerticalBar":"∤","Nscr":"𝒩","Ntild":"Ñ","Ntilde":"Ñ","Nu":"Ν","OElig":"Œ","Oacut":"Ó","Oacute":"Ó","Ocir":"Ô","Ocirc":"Ô","Ocy":"О","Odblac":"Ő","Ofr":"𝔒","Ograv":"Ò","Ograve":"Ò","Omacr":"Ō","Omega":"Ω","Omicron":"Ο","Oopf":"𝕆","OpenCurlyDoubleQuote":"“","OpenCurlyQuote":"‘","Or":"⩔","Oscr":"𝒪","Oslas":"Ø","Oslash":"Ø","Otild":"Õ","Otilde":"Õ","Otimes":"⨷","Oum":"Ö","Ouml":"Ö","OverBar":"‾","OverBrace":"⏞","OverBracket":"⎴","OverParenthesis":"⏜","PartialD":"∂","Pcy":"П","Pfr":"𝔓","Phi":"Φ","Pi":"Π","PlusMinus":"±","Poincareplane":"ℌ","Popf":"ℙ","Pr":"⪻","Precedes":"≺","PrecedesEqual":"⪯","PrecedesSlantEqual":"≼","PrecedesTilde":"≾","Prime":"″","Product":"∏","Proportion":"∷","Proportional":"∝","Pscr":"𝒫","Psi":"Ψ","QUO":"\\"","QUOT":"\\"","Qfr":"𝔔","Qopf":"ℚ","Qscr":"𝒬","RBarr":"⤐","RE":"®","REG":"®","Racute":"Ŕ","Rang":"⟫","Rarr":"↠","Rarrtl":"⤖","Rcaron":"Ř","Rcedil":"Ŗ","Rcy":"Р","Re":"ℜ","ReverseElement":"∋","ReverseEquilibrium":"⇋","ReverseUpEquilibrium":"⥯","Rfr":"ℜ","Rho":"Ρ","RightAngleBracket":"⟩","RightArrow":"→","RightArrowBar":"⇥","RightArrowLeftArrow":"⇄","RightCeiling":"⌉","RightDoubleBracket":"⟧","RightDownTeeVector":"⥝","RightDownVector":"⇂","RightDownVectorBar":"⥕","RightFloor":"⌋","RightTee":"⊢","RightTeeArrow":"↦","RightTeeVector":"⥛","RightTriangle":"⊳","RightTriangleBar":"⧐","RightTriangleEqual":"⊵","RightUpDownVector":"⥏","RightUpTeeVector":"⥜","RightUpVector":"↾","RightUpVectorBar":"⥔","RightVector":"⇀","RightVectorBar":"⥓","Rightarrow":"⇒","Ropf":"ℝ","RoundImplies":"⥰","Rrightarrow":"⇛","Rscr":"ℛ","Rsh":"↱","RuleDelayed":"⧴","SHCHcy":"Щ","SHcy":"Ш","SOFTcy":"Ь","Sacute":"Ś","Sc":"⪼","Scaron":"Š","Scedil":"Ş","Scirc":"Ŝ","Scy":"С","Sfr":"𝔖","ShortDownArrow":"↓","ShortLeftArrow":"←","ShortRightArrow":"→","ShortUpArrow":"↑","Sigma":"Σ","SmallCircle":"∘","Sopf":"𝕊","Sqrt":"√","Square":"□","SquareIntersection":"⊓","SquareSubset":"⊏","SquareSubsetEqual":"⊑","SquareSuperset":"⊐","SquareSupersetEqual":"⊒","SquareUnion":"⊔","Sscr":"𝒮","Star":"⋆","Sub":"⋐","Subset":"⋐","SubsetEqual":"⊆","Succeeds":"≻","SucceedsEqual":"⪰","SucceedsSlantEqual":"≽","SucceedsTilde":"≿","SuchThat":"∋","Sum":"∑","Sup":"⋑","Superset":"⊃","SupersetEqual":"⊇","Supset":"⋑","THOR":"Þ","THORN":"Þ","TRADE":"™","TSHcy":"Ћ","TScy":"Ц","Tab":"\\t","Tau":"Τ","Tcaron":"Ť","Tcedil":"Ţ","Tcy":"Т","Tfr":"𝔗","Therefore":"∴","Theta":"Θ","ThickSpace":"  ","ThinSpace":" ","Tilde":"∼","TildeEqual":"≃","TildeFullEqual":"≅","TildeTilde":"≈","Topf":"𝕋","TripleDot":"⃛","Tscr":"𝒯","Tstrok":"Ŧ","Uacut":"Ú","Uacute":"Ú","Uarr":"↟","Uarrocir":"⥉","Ubrcy":"Ў","Ubreve":"Ŭ","Ucir":"Û","Ucirc":"Û","Ucy":"У","Udblac":"Ű","Ufr":"𝔘","Ugrav":"Ù","Ugrave":"Ù","Umacr":"Ū","UnderBar":"_","UnderBrace":"⏟","UnderBracket":"⎵","UnderParenthesis":"⏝","Union":"⋃","UnionPlus":"⊎","Uogon":"Ų","Uopf":"𝕌","UpArrow":"↑","UpArrowBar":"⤒","UpArrowDownArrow":"⇅","UpDownArrow":"↕","UpEquilibrium":"⥮","UpTee":"⊥","UpTeeArrow":"↥","Uparrow":"⇑","Updownarrow":"⇕","UpperLeftArrow":"↖","UpperRightArrow":"↗","Upsi":"ϒ","Upsilon":"Υ","Uring":"Ů","Uscr":"𝒰","Utilde":"Ũ","Uum":"Ü","Uuml":"Ü","VDash":"⊫","Vbar":"⫫","Vcy":"В","Vdash":"⊩","Vdashl":"⫦","Vee":"⋁","Verbar":"‖","Vert":"‖","VerticalBar":"∣","VerticalLine":"|","VerticalSeparator":"❘","VerticalTilde":"≀","VeryThinSpace":" ","Vfr":"𝔙","Vopf":"𝕍","Vscr":"𝒱","Vvdash":"⊪","Wcirc":"Ŵ","Wedge":"⋀","Wfr":"𝔚","Wopf":"𝕎","Wscr":"𝒲","Xfr":"𝔛","Xi":"Ξ","Xopf":"𝕏","Xscr":"𝒳","YAcy":"Я","YIcy":"Ї","YUcy":"Ю","Yacut":"Ý","Yacute":"Ý","Ycirc":"Ŷ","Ycy":"Ы","Yfr":"𝔜","Yopf":"𝕐","Yscr":"𝒴","Yuml":"Ÿ","ZHcy":"Ж","Zacute":"Ź","Zcaron":"Ž","Zcy":"З","Zdot":"Ż","ZeroWidthSpace":"​","Zeta":"Ζ","Zfr":"ℨ","Zopf":"ℤ","Zscr":"𝒵","aacut":"á","aacute":"á","abreve":"ă","ac":"∾","acE":"∾̳","acd":"∿","acir":"â","acirc":"â","acut":"´","acute":"´","acy":"а","aeli":"æ","aelig":"æ","af":"⁡","afr":"𝔞","agrav":"à","agrave":"à","alefsym":"ℵ","aleph":"ℵ","alpha":"α","amacr":"ā","amalg":"⨿","am":"&","amp":"&","and":"∧","andand":"⩕","andd":"⩜","andslope":"⩘","andv":"⩚","ang":"∠","ange":"⦤","angle":"∠","angmsd":"∡","angmsdaa":"⦨","angmsdab":"⦩","angmsdac":"⦪","angmsdad":"⦫","angmsdae":"⦬","angmsdaf":"⦭","angmsdag":"⦮","angmsdah":"⦯","angrt":"∟","angrtvb":"⊾","angrtvbd":"⦝","angsph":"∢","angst":"Å","angzarr":"⍼","aogon":"ą","aopf":"𝕒","ap":"≈","apE":"⩰","apacir":"⩯","ape":"≊","apid":"≋","apos":"\'","approx":"≈","approxeq":"≊","arin":"å","aring":"å","ascr":"𝒶","ast":"*","asymp":"≈","asympeq":"≍","atild":"ã","atilde":"ã","aum":"ä","auml":"ä","awconint":"∳","awint":"⨑","bNot":"⫭","backcong":"≌","backepsilon":"϶","backprime":"‵","backsim":"∽","backsimeq":"⋍","barvee":"⊽","barwed":"⌅","barwedge":"⌅","bbrk":"⎵","bbrktbrk":"⎶","bcong":"≌","bcy":"б","bdquo":"„","becaus":"∵","because":"∵","bemptyv":"⦰","bepsi":"϶","bernou":"ℬ","beta":"β","beth":"ℶ","between":"≬","bfr":"𝔟","bigcap":"⋂","bigcirc":"◯","bigcup":"⋃","bigodot":"⨀","bigoplus":"⨁","bigotimes":"⨂","bigsqcup":"⨆","bigstar":"★","bigtriangledown":"▽","bigtriangleup":"△","biguplus":"⨄","bigvee":"⋁","bigwedge":"⋀","bkarow":"⤍","blacklozenge":"⧫","blacksquare":"▪","blacktriangle":"▴","blacktriangledown":"▾","blacktriangleleft":"◂","blacktriangleright":"▸","blank":"␣","blk12":"▒","blk14":"░","blk34":"▓","block":"█","bne":"=⃥","bnequiv":"≡⃥","bnot":"⌐","bopf":"𝕓","bot":"⊥","bottom":"⊥","bowtie":"⋈","boxDL":"╗","boxDR":"╔","boxDl":"╖","boxDr":"╓","boxH":"═","boxHD":"╦","boxHU":"╩","boxHd":"╤","boxHu":"╧","boxUL":"╝","boxUR":"╚","boxUl":"╜","boxUr":"╙","boxV":"║","boxVH":"╬","boxVL":"╣","boxVR":"╠","boxVh":"╫","boxVl":"╢","boxVr":"╟","boxbox":"⧉","boxdL":"╕","boxdR":"╒","boxdl":"┐","boxdr":"┌","boxh":"─","boxhD":"╥","boxhU":"╨","boxhd":"┬","boxhu":"┴","boxminus":"⊟","boxplus":"⊞","boxtimes":"⊠","boxuL":"╛","boxuR":"╘","boxul":"┘","boxur":"└","boxv":"│","boxvH":"╪","boxvL":"╡","boxvR":"╞","boxvh":"┼","boxvl":"┤","boxvr":"├","bprime":"‵","breve":"˘","brvba":"¦","brvbar":"¦","bscr":"𝒷","bsemi":"⁏","bsim":"∽","bsime":"⋍","bsol":"\\\\","bsolb":"⧅","bsolhsub":"⟈","bull":"•","bullet":"•","bump":"≎","bumpE":"⪮","bumpe":"≏","bumpeq":"≏","cacute":"ć","cap":"∩","capand":"⩄","capbrcup":"⩉","capcap":"⩋","capcup":"⩇","capdot":"⩀","caps":"∩︀","caret":"⁁","caron":"ˇ","ccaps":"⩍","ccaron":"č","ccedi":"ç","ccedil":"ç","ccirc":"ĉ","ccups":"⩌","ccupssm":"⩐","cdot":"ċ","cedi":"¸","cedil":"¸","cemptyv":"⦲","cen":"¢","cent":"¢","centerdot":"·","cfr":"𝔠","chcy":"ч","check":"✓","checkmark":"✓","chi":"χ","cir":"○","cirE":"⧃","circ":"ˆ","circeq":"≗","circlearrowleft":"↺","circlearrowright":"↻","circledR":"®","circledS":"Ⓢ","circledast":"⊛","circledcirc":"⊚","circleddash":"⊝","cire":"≗","cirfnint":"⨐","cirmid":"⫯","cirscir":"⧂","clubs":"♣","clubsuit":"♣","colon":":","colone":"≔","coloneq":"≔","comma":",","commat":"@","comp":"∁","compfn":"∘","complement":"∁","complexes":"ℂ","cong":"≅","congdot":"⩭","conint":"∮","copf":"𝕔","coprod":"∐","cop":"©","copy":"©","copysr":"℗","crarr":"↵","cross":"✗","cscr":"𝒸","csub":"⫏","csube":"⫑","csup":"⫐","csupe":"⫒","ctdot":"⋯","cudarrl":"⤸","cudarrr":"⤵","cuepr":"⋞","cuesc":"⋟","cularr":"↶","cularrp":"⤽","cup":"∪","cupbrcap":"⩈","cupcap":"⩆","cupcup":"⩊","cupdot":"⊍","cupor":"⩅","cups":"∪︀","curarr":"↷","curarrm":"⤼","curlyeqprec":"⋞","curlyeqsucc":"⋟","curlyvee":"⋎","curlywedge":"⋏","curre":"¤","curren":"¤","curvearrowleft":"↶","curvearrowright":"↷","cuvee":"⋎","cuwed":"⋏","cwconint":"∲","cwint":"∱","cylcty":"⌭","dArr":"⇓","dHar":"⥥","dagger":"†","daleth":"ℸ","darr":"↓","dash":"‐","dashv":"⊣","dbkarow":"⤏","dblac":"˝","dcaron":"ď","dcy":"д","dd":"ⅆ","ddagger":"‡","ddarr":"⇊","ddotseq":"⩷","de":"°","deg":"°","delta":"δ","demptyv":"⦱","dfisht":"⥿","dfr":"𝔡","dharl":"⇃","dharr":"⇂","diam":"⋄","diamond":"⋄","diamondsuit":"♦","diams":"♦","die":"¨","digamma":"ϝ","disin":"⋲","div":"÷","divid":"÷","divide":"÷","divideontimes":"⋇","divonx":"⋇","djcy":"ђ","dlcorn":"⌞","dlcrop":"⌍","dollar":"$","dopf":"𝕕","dot":"˙","doteq":"≐","doteqdot":"≑","dotminus":"∸","dotplus":"∔","dotsquare":"⊡","doublebarwedge":"⌆","downarrow":"↓","downdownarrows":"⇊","downharpoonleft":"⇃","downharpoonright":"⇂","drbkarow":"⤐","drcorn":"⌟","drcrop":"⌌","dscr":"𝒹","dscy":"ѕ","dsol":"⧶","dstrok":"đ","dtdot":"⋱","dtri":"▿","dtrif":"▾","duarr":"⇵","duhar":"⥯","dwangle":"⦦","dzcy":"џ","dzigrarr":"⟿","eDDot":"⩷","eDot":"≑","eacut":"é","eacute":"é","easter":"⩮","ecaron":"ě","ecir":"ê","ecirc":"ê","ecolon":"≕","ecy":"э","edot":"ė","ee":"ⅇ","efDot":"≒","efr":"𝔢","eg":"⪚","egrav":"è","egrave":"è","egs":"⪖","egsdot":"⪘","el":"⪙","elinters":"⏧","ell":"ℓ","els":"⪕","elsdot":"⪗","emacr":"ē","empty":"∅","emptyset":"∅","emptyv":"∅","emsp13":" ","emsp14":" ","emsp":" ","eng":"ŋ","ensp":" ","eogon":"ę","eopf":"𝕖","epar":"⋕","eparsl":"⧣","eplus":"⩱","epsi":"ε","epsilon":"ε","epsiv":"ϵ","eqcirc":"≖","eqcolon":"≕","eqsim":"≂","eqslantgtr":"⪖","eqslantless":"⪕","equals":"=","equest":"≟","equiv":"≡","equivDD":"⩸","eqvparsl":"⧥","erDot":"≓","erarr":"⥱","escr":"ℯ","esdot":"≐","esim":"≂","eta":"η","et":"ð","eth":"ð","eum":"ë","euml":"ë","euro":"€","excl":"!","exist":"∃","expectation":"ℰ","exponentiale":"ⅇ","fallingdotseq":"≒","fcy":"ф","female":"♀","ffilig":"ffi","fflig":"ff","ffllig":"ffl","ffr":"𝔣","filig":"fi","fjlig":"fj","flat":"♭","fllig":"fl","fltns":"▱","fnof":"ƒ","fopf":"𝕗","forall":"∀","fork":"⋔","forkv":"⫙","fpartint":"⨍","frac1":"¼","frac12":"½","frac13":"⅓","frac14":"¼","frac15":"⅕","frac16":"⅙","frac18":"⅛","frac23":"⅔","frac25":"⅖","frac3":"¾","frac34":"¾","frac35":"⅗","frac38":"⅜","frac45":"⅘","frac56":"⅚","frac58":"⅝","frac78":"⅞","frasl":"⁄","frown":"⌢","fscr":"𝒻","gE":"≧","gEl":"⪌","gacute":"ǵ","gamma":"γ","gammad":"ϝ","gap":"⪆","gbreve":"ğ","gcirc":"ĝ","gcy":"г","gdot":"ġ","ge":"≥","gel":"⋛","geq":"≥","geqq":"≧","geqslant":"⩾","ges":"⩾","gescc":"⪩","gesdot":"⪀","gesdoto":"⪂","gesdotol":"⪄","gesl":"⋛︀","gesles":"⪔","gfr":"𝔤","gg":"≫","ggg":"⋙","gimel":"ℷ","gjcy":"ѓ","gl":"≷","glE":"⪒","gla":"⪥","glj":"⪤","gnE":"≩","gnap":"⪊","gnapprox":"⪊","gne":"⪈","gneq":"⪈","gneqq":"≩","gnsim":"⋧","gopf":"𝕘","grave":"`","gscr":"ℊ","gsim":"≳","gsime":"⪎","gsiml":"⪐","g":">","gt":">","gtcc":"⪧","gtcir":"⩺","gtdot":"⋗","gtlPar":"⦕","gtquest":"⩼","gtrapprox":"⪆","gtrarr":"⥸","gtrdot":"⋗","gtreqless":"⋛","gtreqqless":"⪌","gtrless":"≷","gtrsim":"≳","gvertneqq":"≩︀","gvnE":"≩︀","hArr":"⇔","hairsp":" ","half":"½","hamilt":"ℋ","hardcy":"ъ","harr":"↔","harrcir":"⥈","harrw":"↭","hbar":"ℏ","hcirc":"ĥ","hearts":"♥","heartsuit":"♥","hellip":"…","hercon":"⊹","hfr":"𝔥","hksearow":"⤥","hkswarow":"⤦","hoarr":"⇿","homtht":"∻","hookleftarrow":"↩","hookrightarrow":"↪","hopf":"𝕙","horbar":"―","hscr":"𝒽","hslash":"ℏ","hstrok":"ħ","hybull":"⁃","hyphen":"‐","iacut":"í","iacute":"í","ic":"⁣","icir":"î","icirc":"î","icy":"и","iecy":"е","iexc":"¡","iexcl":"¡","iff":"⇔","ifr":"𝔦","igrav":"ì","igrave":"ì","ii":"ⅈ","iiiint":"⨌","iiint":"∭","iinfin":"⧜","iiota":"℩","ijlig":"ij","imacr":"ī","image":"ℑ","imagline":"ℐ","imagpart":"ℑ","imath":"ı","imof":"⊷","imped":"Ƶ","in":"∈","incare":"℅","infin":"∞","infintie":"⧝","inodot":"ı","int":"∫","intcal":"⊺","integers":"ℤ","intercal":"⊺","intlarhk":"⨗","intprod":"⨼","iocy":"ё","iogon":"į","iopf":"𝕚","iota":"ι","iprod":"⨼","iques":"¿","iquest":"¿","iscr":"𝒾","isin":"∈","isinE":"⋹","isindot":"⋵","isins":"⋴","isinsv":"⋳","isinv":"∈","it":"⁢","itilde":"ĩ","iukcy":"і","ium":"ï","iuml":"ï","jcirc":"ĵ","jcy":"й","jfr":"𝔧","jmath":"ȷ","jopf":"𝕛","jscr":"𝒿","jsercy":"ј","jukcy":"є","kappa":"κ","kappav":"ϰ","kcedil":"ķ","kcy":"к","kfr":"𝔨","kgreen":"ĸ","khcy":"х","kjcy":"ќ","kopf":"𝕜","kscr":"𝓀","lAarr":"⇚","lArr":"⇐","lAtail":"⤛","lBarr":"⤎","lE":"≦","lEg":"⪋","lHar":"⥢","lacute":"ĺ","laemptyv":"⦴","lagran":"ℒ","lambda":"λ","lang":"⟨","langd":"⦑","langle":"⟨","lap":"⪅","laqu":"«","laquo":"«","larr":"←","larrb":"⇤","larrbfs":"⤟","larrfs":"⤝","larrhk":"↩","larrlp":"↫","larrpl":"⤹","larrsim":"⥳","larrtl":"↢","lat":"⪫","latail":"⤙","late":"⪭","lates":"⪭︀","lbarr":"⤌","lbbrk":"❲","lbrace":"{","lbrack":"[","lbrke":"⦋","lbrksld":"⦏","lbrkslu":"⦍","lcaron":"ľ","lcedil":"ļ","lceil":"⌈","lcub":"{","lcy":"л","ldca":"⤶","ldquo":"“","ldquor":"„","ldrdhar":"⥧","ldrushar":"⥋","ldsh":"↲","le":"≤","leftarrow":"←","leftarrowtail":"↢","leftharpoondown":"↽","leftharpoonup":"↼","leftleftarrows":"⇇","leftrightarrow":"↔","leftrightarrows":"⇆","leftrightharpoons":"⇋","leftrightsquigarrow":"↭","leftthreetimes":"⋋","leg":"⋚","leq":"≤","leqq":"≦","leqslant":"⩽","les":"⩽","lescc":"⪨","lesdot":"⩿","lesdoto":"⪁","lesdotor":"⪃","lesg":"⋚︀","lesges":"⪓","lessapprox":"⪅","lessdot":"⋖","lesseqgtr":"⋚","lesseqqgtr":"⪋","lessgtr":"≶","lesssim":"≲","lfisht":"⥼","lfloor":"⌊","lfr":"𝔩","lg":"≶","lgE":"⪑","lhard":"↽","lharu":"↼","lharul":"⥪","lhblk":"▄","ljcy":"љ","ll":"≪","llarr":"⇇","llcorner":"⌞","llhard":"⥫","lltri":"◺","lmidot":"ŀ","lmoust":"⎰","lmoustache":"⎰","lnE":"≨","lnap":"⪉","lnapprox":"⪉","lne":"⪇","lneq":"⪇","lneqq":"≨","lnsim":"⋦","loang":"⟬","loarr":"⇽","lobrk":"⟦","longleftarrow":"⟵","longleftrightarrow":"⟷","longmapsto":"⟼","longrightarrow":"⟶","looparrowleft":"↫","looparrowright":"↬","lopar":"⦅","lopf":"𝕝","loplus":"⨭","lotimes":"⨴","lowast":"∗","lowbar":"_","loz":"◊","lozenge":"◊","lozf":"⧫","lpar":"(","lparlt":"⦓","lrarr":"⇆","lrcorner":"⌟","lrhar":"⇋","lrhard":"⥭","lrm":"‎","lrtri":"⊿","lsaquo":"‹","lscr":"𝓁","lsh":"↰","lsim":"≲","lsime":"⪍","lsimg":"⪏","lsqb":"[","lsquo":"‘","lsquor":"‚","lstrok":"ł","l":"<","lt":"<","ltcc":"⪦","ltcir":"⩹","ltdot":"⋖","lthree":"⋋","ltimes":"⋉","ltlarr":"⥶","ltquest":"⩻","ltrPar":"⦖","ltri":"◃","ltrie":"⊴","ltrif":"◂","lurdshar":"⥊","luruhar":"⥦","lvertneqq":"≨︀","lvnE":"≨︀","mDDot":"∺","mac":"¯","macr":"¯","male":"♂","malt":"✠","maltese":"✠","map":"↦","mapsto":"↦","mapstodown":"↧","mapstoleft":"↤","mapstoup":"↥","marker":"▮","mcomma":"⨩","mcy":"м","mdash":"—","measuredangle":"∡","mfr":"𝔪","mho":"℧","micr":"µ","micro":"µ","mid":"∣","midast":"*","midcir":"⫰","middo":"·","middot":"·","minus":"−","minusb":"⊟","minusd":"∸","minusdu":"⨪","mlcp":"⫛","mldr":"…","mnplus":"∓","models":"⊧","mopf":"𝕞","mp":"∓","mscr":"𝓂","mstpos":"∾","mu":"μ","multimap":"⊸","mumap":"⊸","nGg":"⋙̸","nGt":"≫⃒","nGtv":"≫̸","nLeftarrow":"⇍","nLeftrightarrow":"⇎","nLl":"⋘̸","nLt":"≪⃒","nLtv":"≪̸","nRightarrow":"⇏","nVDash":"⊯","nVdash":"⊮","nabla":"∇","nacute":"ń","nang":"∠⃒","nap":"≉","napE":"⩰̸","napid":"≋̸","napos":"ʼn","napprox":"≉","natur":"♮","natural":"♮","naturals":"ℕ","nbs":" ","nbsp":" ","nbump":"≎̸","nbumpe":"≏̸","ncap":"⩃","ncaron":"ň","ncedil":"ņ","ncong":"≇","ncongdot":"⩭̸","ncup":"⩂","ncy":"н","ndash":"–","ne":"≠","neArr":"⇗","nearhk":"⤤","nearr":"↗","nearrow":"↗","nedot":"≐̸","nequiv":"≢","nesear":"⤨","nesim":"≂̸","nexist":"∄","nexists":"∄","nfr":"𝔫","ngE":"≧̸","nge":"≱","ngeq":"≱","ngeqq":"≧̸","ngeqslant":"⩾̸","nges":"⩾̸","ngsim":"≵","ngt":"≯","ngtr":"≯","nhArr":"⇎","nharr":"↮","nhpar":"⫲","ni":"∋","nis":"⋼","nisd":"⋺","niv":"∋","njcy":"њ","nlArr":"⇍","nlE":"≦̸","nlarr":"↚","nldr":"‥","nle":"≰","nleftarrow":"↚","nleftrightarrow":"↮","nleq":"≰","nleqq":"≦̸","nleqslant":"⩽̸","nles":"⩽̸","nless":"≮","nlsim":"≴","nlt":"≮","nltri":"⋪","nltrie":"⋬","nmid":"∤","nopf":"𝕟","no":"¬","not":"¬","notin":"∉","notinE":"⋹̸","notindot":"⋵̸","notinva":"∉","notinvb":"⋷","notinvc":"⋶","notni":"∌","notniva":"∌","notnivb":"⋾","notnivc":"⋽","npar":"∦","nparallel":"∦","nparsl":"⫽⃥","npart":"∂̸","npolint":"⨔","npr":"⊀","nprcue":"⋠","npre":"⪯̸","nprec":"⊀","npreceq":"⪯̸","nrArr":"⇏","nrarr":"↛","nrarrc":"⤳̸","nrarrw":"↝̸","nrightarrow":"↛","nrtri":"⋫","nrtrie":"⋭","nsc":"⊁","nsccue":"⋡","nsce":"⪰̸","nscr":"𝓃","nshortmid":"∤","nshortparallel":"∦","nsim":"≁","nsime":"≄","nsimeq":"≄","nsmid":"∤","nspar":"∦","nsqsube":"⋢","nsqsupe":"⋣","nsub":"⊄","nsubE":"⫅̸","nsube":"⊈","nsubset":"⊂⃒","nsubseteq":"⊈","nsubseteqq":"⫅̸","nsucc":"⊁","nsucceq":"⪰̸","nsup":"⊅","nsupE":"⫆̸","nsupe":"⊉","nsupset":"⊃⃒","nsupseteq":"⊉","nsupseteqq":"⫆̸","ntgl":"≹","ntild":"ñ","ntilde":"ñ","ntlg":"≸","ntriangleleft":"⋪","ntrianglelefteq":"⋬","ntriangleright":"⋫","ntrianglerighteq":"⋭","nu":"ν","num":"#","numero":"№","numsp":" ","nvDash":"⊭","nvHarr":"⤄","nvap":"≍⃒","nvdash":"⊬","nvge":"≥⃒","nvgt":">⃒","nvinfin":"⧞","nvlArr":"⤂","nvle":"≤⃒","nvlt":"<⃒","nvltrie":"⊴⃒","nvrArr":"⤃","nvrtrie":"⊵⃒","nvsim":"∼⃒","nwArr":"⇖","nwarhk":"⤣","nwarr":"↖","nwarrow":"↖","nwnear":"⤧","oS":"Ⓢ","oacut":"ó","oacute":"ó","oast":"⊛","ocir":"ô","ocirc":"ô","ocy":"о","odash":"⊝","odblac":"ő","odiv":"⨸","odot":"⊙","odsold":"⦼","oelig":"œ","ofcir":"⦿","ofr":"𝔬","ogon":"˛","ograv":"ò","ograve":"ò","ogt":"⧁","ohbar":"⦵","ohm":"Ω","oint":"∮","olarr":"↺","olcir":"⦾","olcross":"⦻","oline":"‾","olt":"⧀","omacr":"ō","omega":"ω","omicron":"ο","omid":"⦶","ominus":"⊖","oopf":"𝕠","opar":"⦷","operp":"⦹","oplus":"⊕","or":"∨","orarr":"↻","ord":"º","order":"ℴ","orderof":"ℴ","ordf":"ª","ordm":"º","origof":"⊶","oror":"⩖","orslope":"⩗","orv":"⩛","oscr":"ℴ","oslas":"ø","oslash":"ø","osol":"⊘","otild":"õ","otilde":"õ","otimes":"⊗","otimesas":"⨶","oum":"ö","ouml":"ö","ovbar":"⌽","par":"¶","para":"¶","parallel":"∥","parsim":"⫳","parsl":"⫽","part":"∂","pcy":"п","percnt":"%","period":".","permil":"‰","perp":"⊥","pertenk":"‱","pfr":"𝔭","phi":"φ","phiv":"ϕ","phmmat":"ℳ","phone":"☎","pi":"π","pitchfork":"⋔","piv":"ϖ","planck":"ℏ","planckh":"ℎ","plankv":"ℏ","plus":"+","plusacir":"⨣","plusb":"⊞","pluscir":"⨢","plusdo":"∔","plusdu":"⨥","pluse":"⩲","plusm":"±","plusmn":"±","plussim":"⨦","plustwo":"⨧","pm":"±","pointint":"⨕","popf":"𝕡","poun":"£","pound":"£","pr":"≺","prE":"⪳","prap":"⪷","prcue":"≼","pre":"⪯","prec":"≺","precapprox":"⪷","preccurlyeq":"≼","preceq":"⪯","precnapprox":"⪹","precneqq":"⪵","precnsim":"⋨","precsim":"≾","prime":"′","primes":"ℙ","prnE":"⪵","prnap":"⪹","prnsim":"⋨","prod":"∏","profalar":"⌮","profline":"⌒","profsurf":"⌓","prop":"∝","propto":"∝","prsim":"≾","prurel":"⊰","pscr":"𝓅","psi":"ψ","puncsp":" ","qfr":"𝔮","qint":"⨌","qopf":"𝕢","qprime":"⁗","qscr":"𝓆","quaternions":"ℍ","quatint":"⨖","quest":"?","questeq":"≟","quo":"\\"","quot":"\\"","rAarr":"⇛","rArr":"⇒","rAtail":"⤜","rBarr":"⤏","rHar":"⥤","race":"∽̱","racute":"ŕ","radic":"√","raemptyv":"⦳","rang":"⟩","rangd":"⦒","range":"⦥","rangle":"⟩","raqu":"»","raquo":"»","rarr":"→","rarrap":"⥵","rarrb":"⇥","rarrbfs":"⤠","rarrc":"⤳","rarrfs":"⤞","rarrhk":"↪","rarrlp":"↬","rarrpl":"⥅","rarrsim":"⥴","rarrtl":"↣","rarrw":"↝","ratail":"⤚","ratio":"∶","rationals":"ℚ","rbarr":"⤍","rbbrk":"❳","rbrace":"}","rbrack":"]","rbrke":"⦌","rbrksld":"⦎","rbrkslu":"⦐","rcaron":"ř","rcedil":"ŗ","rceil":"⌉","rcub":"}","rcy":"р","rdca":"⤷","rdldhar":"⥩","rdquo":"”","rdquor":"”","rdsh":"↳","real":"ℜ","realine":"ℛ","realpart":"ℜ","reals":"ℝ","rect":"▭","re":"®","reg":"®","rfisht":"⥽","rfloor":"⌋","rfr":"𝔯","rhard":"⇁","rharu":"⇀","rharul":"⥬","rho":"ρ","rhov":"ϱ","rightarrow":"→","rightarrowtail":"↣","rightharpoondown":"⇁","rightharpoonup":"⇀","rightleftarrows":"⇄","rightleftharpoons":"⇌","rightrightarrows":"⇉","rightsquigarrow":"↝","rightthreetimes":"⋌","ring":"˚","risingdotseq":"≓","rlarr":"⇄","rlhar":"⇌","rlm":"‏","rmoust":"⎱","rmoustache":"⎱","rnmid":"⫮","roang":"⟭","roarr":"⇾","robrk":"⟧","ropar":"⦆","ropf":"𝕣","roplus":"⨮","rotimes":"⨵","rpar":")","rpargt":"⦔","rppolint":"⨒","rrarr":"⇉","rsaquo":"›","rscr":"𝓇","rsh":"↱","rsqb":"]","rsquo":"’","rsquor":"’","rthree":"⋌","rtimes":"⋊","rtri":"▹","rtrie":"⊵","rtrif":"▸","rtriltri":"⧎","ruluhar":"⥨","rx":"℞","sacute":"ś","sbquo":"‚","sc":"≻","scE":"⪴","scap":"⪸","scaron":"š","sccue":"≽","sce":"⪰","scedil":"ş","scirc":"ŝ","scnE":"⪶","scnap":"⪺","scnsim":"⋩","scpolint":"⨓","scsim":"≿","scy":"с","sdot":"⋅","sdotb":"⊡","sdote":"⩦","seArr":"⇘","searhk":"⤥","searr":"↘","searrow":"↘","sec":"§","sect":"§","semi":";","seswar":"⤩","setminus":"∖","setmn":"∖","sext":"✶","sfr":"𝔰","sfrown":"⌢","sharp":"♯","shchcy":"щ","shcy":"ш","shortmid":"∣","shortparallel":"∥","sh":"­","shy":"­","sigma":"σ","sigmaf":"ς","sigmav":"ς","sim":"∼","simdot":"⩪","sime":"≃","simeq":"≃","simg":"⪞","simgE":"⪠","siml":"⪝","simlE":"⪟","simne":"≆","simplus":"⨤","simrarr":"⥲","slarr":"←","smallsetminus":"∖","smashp":"⨳","smeparsl":"⧤","smid":"∣","smile":"⌣","smt":"⪪","smte":"⪬","smtes":"⪬︀","softcy":"ь","sol":"/","solb":"⧄","solbar":"⌿","sopf":"𝕤","spades":"♠","spadesuit":"♠","spar":"∥","sqcap":"⊓","sqcaps":"⊓︀","sqcup":"⊔","sqcups":"⊔︀","sqsub":"⊏","sqsube":"⊑","sqsubset":"⊏","sqsubseteq":"⊑","sqsup":"⊐","sqsupe":"⊒","sqsupset":"⊐","sqsupseteq":"⊒","squ":"□","square":"□","squarf":"▪","squf":"▪","srarr":"→","sscr":"𝓈","ssetmn":"∖","ssmile":"⌣","sstarf":"⋆","star":"☆","starf":"★","straightepsilon":"ϵ","straightphi":"ϕ","strns":"¯","sub":"⊂","subE":"⫅","subdot":"⪽","sube":"⊆","subedot":"⫃","submult":"⫁","subnE":"⫋","subne":"⊊","subplus":"⪿","subrarr":"⥹","subset":"⊂","subseteq":"⊆","subseteqq":"⫅","subsetneq":"⊊","subsetneqq":"⫋","subsim":"⫇","subsub":"⫕","subsup":"⫓","succ":"≻","succapprox":"⪸","succcurlyeq":"≽","succeq":"⪰","succnapprox":"⪺","succneqq":"⪶","succnsim":"⋩","succsim":"≿","sum":"∑","sung":"♪","sup":"⊃","sup1":"¹","sup2":"²","sup3":"³","supE":"⫆","supdot":"⪾","supdsub":"⫘","supe":"⊇","supedot":"⫄","suphsol":"⟉","suphsub":"⫗","suplarr":"⥻","supmult":"⫂","supnE":"⫌","supne":"⊋","supplus":"⫀","supset":"⊃","supseteq":"⊇","supseteqq":"⫆","supsetneq":"⊋","supsetneqq":"⫌","supsim":"⫈","supsub":"⫔","supsup":"⫖","swArr":"⇙","swarhk":"⤦","swarr":"↙","swarrow":"↙","swnwar":"⤪","szli":"ß","szlig":"ß","target":"⌖","tau":"τ","tbrk":"⎴","tcaron":"ť","tcedil":"ţ","tcy":"т","tdot":"⃛","telrec":"⌕","tfr":"𝔱","there4":"∴","therefore":"∴","theta":"θ","thetasym":"ϑ","thetav":"ϑ","thickapprox":"≈","thicksim":"∼","thinsp":" ","thkap":"≈","thksim":"∼","thor":"þ","thorn":"þ","tilde":"˜","time":"×","times":"×","timesb":"⊠","timesbar":"⨱","timesd":"⨰","tint":"∭","toea":"⤨","top":"⊤","topbot":"⌶","topcir":"⫱","topf":"𝕥","topfork":"⫚","tosa":"⤩","tprime":"‴","trade":"™","triangle":"▵","triangledown":"▿","triangleleft":"◃","trianglelefteq":"⊴","triangleq":"≜","triangleright":"▹","trianglerighteq":"⊵","tridot":"◬","trie":"≜","triminus":"⨺","triplus":"⨹","trisb":"⧍","tritime":"⨻","trpezium":"⏢","tscr":"𝓉","tscy":"ц","tshcy":"ћ","tstrok":"ŧ","twixt":"≬","twoheadleftarrow":"↞","twoheadrightarrow":"↠","uArr":"⇑","uHar":"⥣","uacut":"ú","uacute":"ú","uarr":"↑","ubrcy":"ў","ubreve":"ŭ","ucir":"û","ucirc":"û","ucy":"у","udarr":"⇅","udblac":"ű","udhar":"⥮","ufisht":"⥾","ufr":"𝔲","ugrav":"ù","ugrave":"ù","uharl":"↿","uharr":"↾","uhblk":"▀","ulcorn":"⌜","ulcorner":"⌜","ulcrop":"⌏","ultri":"◸","umacr":"ū","um":"¨","uml":"¨","uogon":"ų","uopf":"𝕦","uparrow":"↑","updownarrow":"↕","upharpoonleft":"↿","upharpoonright":"↾","uplus":"⊎","upsi":"υ","upsih":"ϒ","upsilon":"υ","upuparrows":"⇈","urcorn":"⌝","urcorner":"⌝","urcrop":"⌎","uring":"ů","urtri":"◹","uscr":"𝓊","utdot":"⋰","utilde":"ũ","utri":"▵","utrif":"▴","uuarr":"⇈","uum":"ü","uuml":"ü","uwangle":"⦧","vArr":"⇕","vBar":"⫨","vBarv":"⫩","vDash":"⊨","vangrt":"⦜","varepsilon":"ϵ","varkappa":"ϰ","varnothing":"∅","varphi":"ϕ","varpi":"ϖ","varpropto":"∝","varr":"↕","varrho":"ϱ","varsigma":"ς","varsubsetneq":"⊊︀","varsubsetneqq":"⫋︀","varsupsetneq":"⊋︀","varsupsetneqq":"⫌︀","vartheta":"ϑ","vartriangleleft":"⊲","vartriangleright":"⊳","vcy":"в","vdash":"⊢","vee":"∨","veebar":"⊻","veeeq":"≚","vellip":"⋮","verbar":"|","vert":"|","vfr":"𝔳","vltri":"⊲","vnsub":"⊂⃒","vnsup":"⊃⃒","vopf":"𝕧","vprop":"∝","vrtri":"⊳","vscr":"𝓋","vsubnE":"⫋︀","vsubne":"⊊︀","vsupnE":"⫌︀","vsupne":"⊋︀","vzigzag":"⦚","wcirc":"ŵ","wedbar":"⩟","wedge":"∧","wedgeq":"≙","weierp":"℘","wfr":"𝔴","wopf":"𝕨","wp":"℘","wr":"≀","wreath":"≀","wscr":"𝓌","xcap":"⋂","xcirc":"◯","xcup":"⋃","xdtri":"▽","xfr":"𝔵","xhArr":"⟺","xharr":"⟷","xi":"ξ","xlArr":"⟸","xlarr":"⟵","xmap":"⟼","xnis":"⋻","xodot":"⨀","xopf":"𝕩","xoplus":"⨁","xotime":"⨂","xrArr":"⟹","xrarr":"⟶","xscr":"𝓍","xsqcup":"⨆","xuplus":"⨄","xutri":"△","xvee":"⋁","xwedge":"⋀","yacut":"ý","yacute":"ý","yacy":"я","ycirc":"ŷ","ycy":"ы","ye":"¥","yen":"¥","yfr":"𝔶","yicy":"ї","yopf":"𝕪","yscr":"𝓎","yucy":"ю","yum":"ÿ","yuml":"ÿ","zacute":"ź","zcaron":"ž","zcy":"з","zdot":"ż","zeetrf":"ℨ","zeta":"ζ","zfr":"𝔷","zhcy":"ж","zigrarr":"⇝","zopf":"𝕫","zscr":"𝓏","zwj":"‍","zwnj":"‌"}')},6852:e=>{"use strict";e.exports=JSON.parse('{"0":"�","128":"€","130":"‚","131":"ƒ","132":"„","133":"…","134":"†","135":"‡","136":"ˆ","137":"‰","138":"Š","139":"‹","140":"Œ","142":"Ž","145":"‘","146":"’","147":"“","148":"”","149":"•","150":"–","151":"—","152":"˜","153":"™","154":"š","155":"›","156":"œ","158":"ž","159":"Ÿ"}')},9357:e=>{"use strict";e.exports=function(e){return String(e).replace(/\s+/g," ")}},6851:(e,t)=>{"use strict";t.P=function(e,t){var n=t||{},i=!1===n.padLeft?"":" ",r=n.padRight?" ":"";""===e[e.length-1]&&(e=e.concat(""));return e.join(r+","+i).trim()}},1586:(e,t,n)=>{var i=n(1721);e.exports=function(e){var t={},n=new i(e);t.trackNumber=n.nextUIntV(),t.timecode=n.nextInt16BE();var r=n.nextUInt8();t.invisible=!!(8&r),t.keyframe=!!(128&r),t.discardable=!!(1&r);var o=(6&r)>>1;return t.frames=function(e,t){if(!t)return[e.nextBuffer()];var n,i,r=[],o=e.nextUInt8()+1;if(2===t){if(e.length%o!=0)throw new Error("Fixed-Size Lacing Error");for(i=e.length/o,n=0;n{var i=n(8826);function r(e){this.buffer=e,this.offset=0}r.prototype.nextInt16BE=function(){var e=this.buffer.readInt16BE(this.offset);return this.offset+=2,e},r.prototype.nextUInt8=function(){var e=this.buffer.readUInt8(this.offset);return this.offset+=1,e},r.prototype.nextUIntV=function(){var e=i(this.buffer,this.offset);return this.offset+=e.length,e.value},r.prototype.nextIntV=function(){var e=i(this.buffer,this.offset,!0);return this.offset+=e.length,e.value},r.prototype.nextBuffer=function(e){var t=e?this.buffer.slice(this.offset,this.offset+e):this.buffer.slice(this.offset);return this.offset+=e||this.length,t},Object.defineProperty(r.prototype,"length",{get:function(){return this.buffer.length-this.offset}}),e.exports=r},8826:e=>{e.exports=function(e,t,n){t=t||0;for(var i=1;i<=8&&!(e[t]>=Math.pow(2,8-i));i++);if(i>8)throw new Error("Unrepresentable length: "+i+" "+e.toString("hex",t,t+i));if(t+i>e.length)return null;var r,o=e[t]&(1<<8-i)-1;for(r=1;r=Math.pow(2,45)&&e[t+7]>0)return{length:i,value:-1};o*=Math.pow(2,8),o+=e[t+r]}return n&&(o-=Math.pow(2,7*i-1)-1),{length:i,value:o}}},7187:e=>{"use strict";var t,n="object"==typeof Reflect?Reflect:null,i=n&&"function"==typeof n.apply?n.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};t=n&&"function"==typeof n.ownKeys?n.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var r=Number.isNaN||function(e){return e!=e};function o(){o.init.call(this)}e.exports=o,e.exports.once=function(e,t){return new Promise((function(n,i){function r(n){e.removeListener(t,o),i(n)}function o(){"function"==typeof e.removeListener&&e.removeListener("error",r),n([].slice.call(arguments))}m(e,t,o,{once:!0}),"error"!==t&&function(e,t,n){"function"==typeof e.on&&m(e,"error",t,n)}(e,r,{once:!0})}))},o.EventEmitter=o,o.prototype._events=void 0,o.prototype._eventsCount=0,o.prototype._maxListeners=void 0;var a=10;function s(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function l(e){return void 0===e._maxListeners?o.defaultMaxListeners:e._maxListeners}function c(e,t,n,i){var r,o,a,c;if(s(n),void 0===(o=e._events)?(o=e._events=Object.create(null),e._eventsCount=0):(void 0!==o.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),o=e._events),a=o[t]),void 0===a)a=o[t]=n,++e._eventsCount;else if("function"==typeof a?a=o[t]=i?[n,a]:[a,n]:i?a.unshift(n):a.push(n),(r=l(e))>0&&a.length>r&&!a.warned){a.warned=!0;var u=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");u.name="MaxListenersExceededWarning",u.emitter=e,u.type=t,u.count=a.length,c=u,console&&console.warn&&console.warn(c)}return e}function u(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function h(e,t,n){var i={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},r=u.bind(i);return r.listener=n,i.wrapFn=r,r}function p(e,t,n){var i=e._events;if(void 0===i)return[];var r=i[t];return void 0===r?[]:"function"==typeof r?n?[r.listener||r]:[r]:n?function(e){for(var t=new Array(e.length),n=0;n0&&(a=t[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var l=o[e];if(void 0===l)return!1;if("function"==typeof l)i(l,this,t);else{var c=l.length,u=f(l,c);for(n=0;n=0;o--)if(n[o]===t||n[o].listener===t){a=n[o].listener,r=o;break}if(r<0)return this;0===r?n.shift():function(e,t){for(;t+1=0;i--)this.removeListener(e,t[i]);return this},o.prototype.listeners=function(e){return p(this,e,!0)},o.prototype.rawListeners=function(e){return p(this,e,!1)},o.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):d.call(e,t)},o.prototype.listenerCount=d,o.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},8909:e=>{"use strict";e.exports=function(e,t){var n;if(null!=t&&"string"!=typeof t&&("object"!=typeof t||0===t.length))throw new Error("Expected `string` or `Array.` for `tagNames`, not `"+t+"`");if(!e||"object"!=typeof e||"element"!==e.type||"string"!=typeof e.tagName)return!1;if(null==t)return!0;if(n=e.tagName,"string"==typeof t)return n===t;return-1!==t.indexOf(n)}},773:(e,t,n)=>{"use strict";e.exports=n(5204)},5802:(e,t,n)=>{"use strict";var i=n(1878);e.exports=function(e,t){var n=t&&t.children,r=n&&n.length,o=-1,a=[];for(;++o{"use strict";var i=n(7529),r=n(4860);e.exports=function(e,t){var n=t.value;if(e.bogusComments)return"";return"\x3c!--"+n.replace(o,(function(t){return r(t,i(e.entities,{subset:a}))}))+"--\x3e"};var o=/^>|^->||--!>|"],s=[">"]},5966:e=>{"use strict";var t="\0",n="&",i="`",r='"',o="'",a=[" ","\t","\n","\r","\f"],s=a.concat(n,"/",">","="),l=a.concat(n,">"),c=l.concat(t,r,o,"<","=",i),u=[n,o],h=[n,r];e.exports={name:[[s,s.concat(r,o,i)],[s.concat(t,r,o,"<"),s.concat(t,r,o,"<",i)]],unquoted:[[l,c],[c,c]],single:[[u,u.concat(r,i)],[u.concat(t),u.concat(t,r,i)]],double:[[h,h.concat(o,i)],[h.concat(t),h.concat(t,o,i)]]}},5842:(e,t,n)=>{"use strict";var i=n(7529),r=n(932),o=n(4860);e.exports=function(e,t){var n=e.upperDoctype?s:a,i=e.tightDoctype?"":" ",r=t.name,o=t.public,c=t.system,u=[""};var a="doctype",s=a.toUpperCase();function l(e,t){var n=e.quote,a=e.alternative,s=String(t),l=r(s,n)>r(s,a)?a:n;return l+o(s,i(e.entities,{subset:["<","&",l]}))+l}},4307:(e,t,n)=>{"use strict";var i=n(7529),r=n(1218),o=n(9560),a=n(6582).P,s=n(6851).P,l=n(4860),c=n(932),u=n(5802),h=n(5966);e.exports=function(e,t,n,i){var o,a,s,l,c,h,p=e.schema,f=t.tagName,m="",g=t;"html"===p.space&&"svg"===f&&(e.schema=r);c=function(e,t){var n,i,r,o,a,s,l=[];for(n in t)null!=(i=t[n])&&(r=d(e,n,i))&&l.push(r);o=l.length,a=-1;for(;++a");return e.schema=p,m};var p="'";function d(e,t,n){var r=e.schema,u=o(r,t),d=u.attribute;return!u.overloadedBoolean||n!==d&&""!==n?(u.boolean||u.overloadedBoolean&&"string"!=typeof n)&&(n=Boolean(n)):n=!0,null==n||!1===n||"number"==typeof n&&isNaN(n)?"":(d=function(e,t){var n="html"===e.schema.space?e.valid:1,r=h.name[n][e.safe];return l(t,i(e.entities,{subset:r}))}(e,d),!0===n?d:d+function(e,t,n,r){var o,u,d=e.entities,f=e.quote,m=e.alternative,g=e.smart;"object"==typeof n&&"length"in n&&(n=(r.commaSeparated?s:a)(n,{padLeft:!e.tightLists}));!(n=String(n))&&e.collapseEmpty||(o=n,e.unquoted&&(u=h.unquoted[e.valid][e.safe],o=l(n,i(d,{subset:u,attribute:!0}))),e.unquoted&&o===n||(g&&c(n,f)>c(n,m)&&(f=m),u=(u=f===p?h.single:h.double)["html"===e.schema.space?e.valid:1][e.safe],n=f+(n=l(n,i(d,{subset:u,attribute:!0})))+f),n=n?"="+n:n);return n}(e,0,n,u))}},5204:(e,t,n)=>{"use strict";var i=n(7247),r=n(1218),o=n(4318),a=n(1600),s=n(1878);e.exports=function(e,t){var n=t||{},u=n.quote||l,h=u===l?"'":l,p=n.quoteSmart,d=e&&"object"==typeof e&&"length"in e?{type:"root",children:e}:e;if(u!==l&&"'"!==u)throw new Error("Invalid quote `"+u+"`, expected `'` or `"+'"`');void 0!==n.allowDangerousHTML&&(c||(c=!0,console.warn("Deprecation warning: `allowDangerousHTML` is a nonstandard option, use `allowDangerousHtml` instead")));return s({valid:n.allowParseErrors?0:1,safe:n.allowDangerousCharacters?0:1,schema:"svg"===n.space?r:i,omit:n.omitOptionalTags&&a,quote:u,alternative:h,smart:p,unquoted:Boolean(n.preferUnquoted),tight:n.tightAttributes,upperDoctype:Boolean(n.upperDoctype),tightDoctype:Boolean(n.tightDoctype),bogusComments:Boolean(n.bogusComments),tightLists:n.tightCommaSeparatedLists,tightClose:n.tightSelfClosing,collapseEmpty:n.collapseEmptyAttributes,dangerous:n.allowDangerousHtml||n.allowDangerousHTML,voids:n.voids||o.concat(),entities:n.entities||{},close:n.closeSelfClosing,closeEmpty:n.closeEmptyElements},d)};var l='"',c=!1},8639:(e,t,n)=>{"use strict";var i=n(8145),r=n(8909),o=n(8115),a=n(3370).e,s=n(5254),l=i("comment"),c="optgroup",u=["option"].concat(c),h=["dt","dd"],p=["menuitem","hr","menu"],d=["rp","rt"],f=["tbody","tfoot"],m=["td","th"],g=["a","audio","del","ins","map","noscript","video"],v=["address","article","aside","blockquote","details","div","dl","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","main","menu","nav","ol","p","pre","section","table","ul"];function y(e,t,n){var i=a(n,t,!0);return!i||!l(i)&&!o(i)}function b(e,t,n){var i=a(n,t);return!i||r(i,d)}function w(e,t,n){var i=a(n,t);return!i||r(i,m)}e.exports=s({html:function(e,t,n){var i=a(n,t);return!i||!l(i)},head:y,body:function(e,t,n){var i=a(n,t);return!i||!l(i)},p:function(e,t,n){var i=a(n,t);return i?r(i,v):!n||!r(n,g)},li:function(e,t,n){var i=a(n,t);return!i||r(i,"li")},dt:function(e,t,n){var i=a(n,t);return i&&r(i,h)},dd:function(e,t,n){var i=a(n,t);return!i||r(i,h)},rt:b,rp:b,optgroup:function(e,t,n){var i=a(n,t);return!i||r(i,c)},option:function(e,t,n){var i=a(n,t);return!i||r(i,u)},menuitem:function(e,t,n){var i=a(n,t);return!i||r(i,p)},colgroup:y,caption:y,thead:function(e,t,n){var i=a(n,t);return i&&r(i,f)},tbody:function(e,t,n){var i=a(n,t);return!i||r(i,f)},tfoot:function(e,t,n){return!a(n,t)},tr:function(e,t,n){var i=a(n,t);return!i||r(i,"tr")},td:w,th:w})},1600:(e,t,n)=>{"use strict";t.opening=n(6014),t.closing=n(8639)},5254:e=>{"use strict";e.exports=function(e){return function(n,i,r){var o=n.tagName;return!!t.call(e,o)&&e[o](n,i,r)}};var t={}.hasOwnProperty},6014:(e,t,n)=>{"use strict";var i=n(8145),r=n(8909),o=n(3370).b,a=n(4414),s=n(4997),l=n(8115),c=n(8639),u=n(5254),h=i("comment"),p=["title","base"],d=["meta","link","script","style","template"],f=["thead","tbody"];e.exports=u({html:function(e){var t=a(e);return!t||!h(t)},head:function(e){var t,n,i=e.children,o=i.length,a=[],s=-1;for(;++s{"use strict";var i=n(3370).e;e.exports=function(e,t){return i(e,-1,t)}},4997:e=>{"use strict";e.exports=function(e,t){return e&&e.children&&e.children.indexOf(t)}},3370:(e,t,n)=>{"use strict";var i=n(3560);function r(e){return function(t,n,r){var o=t&&t.children,a=n+e,s=o&&o[a];if(!r)for(;s&&i(s);)s=o[a+=e];return s}}t.b=r(-1),t.e=r(1)},8115:(e,t,n)=>{"use strict";var i=n(8145),r=n(3560);e.exports=function(e){return o(e)&&r(e.value.charAt(0))};var o=i("text")},1878:(e,t,n)=>{"use strict";e.exports=function(e,t,n,o){var a=t&&t.type;if(!a)throw new Error("Expected node, not `"+t+"`");if(!i.call(r,a))throw new Error("Cannot compile unknown node `"+a+"`");return r[a](e,t,n,o)};var i={}.hasOwnProperty,r={};r.root=n(5802),r.text=n(9514),r.element=n(4307),r.doctype=n(5842),r.comment=n(1928),r.raw=n(9044)},9044:(e,t,n)=>{"use strict";var i=n(9514);e.exports=function(e,t){return e.dangerous?t.value:i(e,t)}},9514:(e,t,n)=>{"use strict";var i=n(7529),r=n(4860);e.exports=function(e,t,n,o){var a=t.value;return function(e){return e&&("script"===e.tagName||"style"===e.tagName)}(o)?a:r(a,i(e.entities,{subset:["<","&"]}))}},3560:e=>{"use strict";e.exports=function(e){var n;if(e&&"object"==typeof e&&"text"===e.type)n=e.value||"";else{if("string"!=typeof e)return!1;n=e}return""===n.replace(t,"")};var t=/[ \t\n\f\r]/g},4318:e=>{"use strict";e.exports=JSON.parse('["area","base","basefont","bgsound","br","col","command","embed","frame","hr","image","img","input","isindex","keygen","link","menuitem","meta","nextid","param","source","track","wbr"]')},645:(e,t)=>{t.read=function(e,t,n,i,r){var o,a,s=8*r-i-1,l=(1<>1,u=-7,h=n?r-1:0,p=n?-1:1,d=e[t+h];for(h+=p,o=d&(1<<-u)-1,d>>=-u,u+=s;u>0;o=256*o+e[t+h],h+=p,u-=8);for(a=o&(1<<-u)-1,o>>=-u,u+=i;u>0;a=256*a+e[t+h],h+=p,u-=8);if(0===o)o=1-c;else{if(o===l)return a?NaN:1/0*(d?-1:1);a+=Math.pow(2,i),o-=c}return(d?-1:1)*a*Math.pow(2,o-i)},t.write=function(e,t,n,i,r,o){var a,s,l,c=8*o-r-1,u=(1<>1,p=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,d=i?0:o-1,f=i?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=u):(a=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-a))<1&&(a--,l*=2),(t+=a+h>=1?p/l:p*Math.pow(2,1-h))*l>=2&&(a++,l/=2),a+h>=u?(s=0,a=u):a+h>=1?(s=(t*l-1)*Math.pow(2,r),a+=h):(s=t*Math.pow(2,h-1)*Math.pow(2,r),a=0));r>=8;e[n+d]=255&s,d+=f,s/=256,r-=8);for(a=a<0;e[n+d]=255&a,d+=f,a/=256,c-=8);e[n+d-f]|=128*m}},5717:e=>{"function"==typeof Object.create?e.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports=function(e,t){if(t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}}},1166:function(e,t){!function(e){var t,n="undefined",i=n!==typeof Buffer&&Buffer,r=n!==typeof Uint8Array&&Uint8Array,o=n!==typeof ArrayBuffer&&ArrayBuffer,a=[0,0,0,0,0,0,0,0],s=Array.isArray||function(e){return!!e&&"[object Array]"==Object.prototype.toString.call(e)},l=4294967296;function c(s,c,w){var k=c?0:4,C=c?4:0,x=c?0:3,E=c?1:2,S=c?2:1,M=c?3:0,T=c?g:y,D=c?v:b,A=I.prototype,L="is"+s,P="_"+L;return A.buffer=void 0,A.offset=0,A[P]=!0,A.toNumber=F,A.toString=function(e){var t=this.buffer,n=this.offset,i=B(t,n+k),r=B(t,n+C),o="",a=!w&&2147483648&i;a&&(i=~i,r=l-r);e=e||10;for(;;){var s=i%e*l+r;if(i=Math.floor(i/e),r=Math.floor(s/e),o=(s%e).toString(e)+o,!i&&!r)break}a&&(o="-"+o);return o},A.toJSON=F,A.toArray=u,i&&(A.toBuffer=h),r&&(A.toArrayBuffer=p),I[L]=function(e){return!(!e||!e[P])},e[s]=I,I;function I(e,s,c,u){return this instanceof I?function(e,s,c,u,h){r&&o&&(s instanceof o&&(s=new r(s)),u instanceof o&&(u=new r(u)));if(!(s||c||u||t))return void(e.buffer=m(a,0));if(!d(s,c)){var p=t||Array;h=c,u=s,c=0,s=t===i?i.alloc(8):new p(8)}if(e.buffer=s,e.offset=c|=0,n===typeof u)return;"string"==typeof u?function(e,t,n,i){var r=0,o=n.length,a=0,s=0;"-"===n[0]&&r++;var c=r;for(;r=0))break;s=s*i+u,a=a*i+Math.floor(s/l),s%=l}c&&(a=~a,s?s=l-s:a++);O(e,t+k,a),O(e,t+C,s)}(s,c,u,h||10):d(u,h)?f(s,c,u,h):"number"==typeof h?(O(s,c+k,u),O(s,c+C,h)):u>0?T(s,c,u):u<0?D(s,c,u):f(s,c,a,0)}(this,e,s,c,u):new I(e,s,c,u)}function F(){var e=this.buffer,t=this.offset,n=B(e,t+k),i=B(e,t+C);return w||(n|=0),n?n*l+i:i}function O(e,t,n){e[t+M]=255&n,n>>=8,e[t+S]=255&n,n>>=8,e[t+E]=255&n,n>>=8,e[t+x]=255&n}function B(e,t){return 16777216*e[t+x]+(e[t+E]<<16)+(e[t+S]<<8)+e[t+M]}}function u(e){var n=this.buffer,i=this.offset;return t=null,!1!==e&&s(n)?8===n.length?n:n.slice(i,i+8):m(n,i)}function h(e){var n=this.buffer,r=this.offset;return t=i,!1!==e&&i.isBuffer(n)?8===n.length?n:n.slice(r,r+8):i.from(p.call(this,e))}function p(e){var n=this.buffer,i=this.offset,a=n.buffer;if(t=r,!1!==e&&!n.offset&&a instanceof o)return 8===a.byteLength?a:a.slice(i,i+8);var s=new r(8);return f(s,0,n,i),s.buffer}function d(e,t){var n=e&&e.length;return t|=0,n&&t+8<=n&&"string"!=typeof e[t]}function f(e,t,n,i){t|=0,i|=0;for(var r=0;r<8;r++)e[t++]=255&n[i++]}function m(e,t){return Array.prototype.slice.call(e,t,t+8)}function g(e,t,n){for(var i=t+8;i>t;)e[--i]=255&n,n/=256}function v(e,t,n){var i=t+8;for(n++;i>t;)e[--i]=255&-n^255,n/=256}function y(e,t,n){for(var i=t+8;t{"use strict";e.exports=function(e){var t="string"==typeof e?e.charCodeAt(0):e;return t>=97&&t<=122||t>=65&&t<=90}},7961:(e,t,n)=>{"use strict";var i=n(6260),r=n(6195);e.exports=function(e){return i(e)||r(e)}},8738:e=>{e.exports=function(e){return null!=e&&null!=e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}},6195:e=>{"use strict";e.exports=function(e){var t="string"==typeof e?e.charCodeAt(0):e;return t>=48&&t<=57}},9480:e=>{"use strict";e.exports=function(e){var t="string"==typeof e?e.charCodeAt(0):e;return t>=97&&t<=102||t>=65&&t<=70||t>=48&&t<=57}},2139:e=>{"use strict";e.exports=function(e){return n.test("number"==typeof e?t(e):e.charAt(0))};var t=String.fromCharCode,n=/\s/},3017:e=>{"use strict";e.exports=function(e){return n.test("number"==typeof e?t(e):e.charAt(0))};var t=String.fromCharCode,n=/\w/},2123:e=>{"use strict";e.exports=r;var t=["\\","`","*","{","}","[","]","(",")","#","+","-",".","!","_",">"],n=t.concat(["~","|"]),i=n.concat(["\n",'"',"$","%","&","'",",","/",":",";","<","=","?","@","^"]);function r(e){var r=e||{};return r.commonmark?i:r.gfm?n:t}r.default=t,r.gfm=n,r.commonmark=i},6630:(e,t,n)=>{"use strict";var i=n(2854);e.exports=function(e,t){return function(e){return t;function t(t){var n=t&&o(t);return n&&r.call(e,n)?e[n]:null}}(function(e){var t={};if(!e||!e.type)throw new Error("mdast-util-definitions expected node");return i(e,"definition",n),t;function n(e){var n=o(e.identifier);r.call(t,n)||(t[n]=e)}}(e))};var r={}.hasOwnProperty;function o(e){return e.toUpperCase()}},5426:(e,t,n)=>{"use strict";e.exports=function(e,t){var n,r,o=t.children||[],a=o.length,s=[],l=-1;for(;++l{"use strict";e.exports=function(e){var t,n,a,s,l=e.footnoteById,c=e.footnoteOrder,u=c.length,h=-1,p=[];for(;++h{"use strict";e.exports=function(e,t){return e(t,"blockquote",i(r(e,t),!0))};var i=n(6115),r=n(5426)},3562:(e,t,n)=>{"use strict";e.exports=function(e,t){return[e(t,"br"),i("text","\n")]};var i=n(914)},7891:(e,t,n)=>{"use strict";e.exports=function(e,t){var n,r=t.value?t.value+"\n":"",o=t.lang&&t.lang.match(/^[^ \t]+(?=[ \t]|$)/),a={};o&&(a.className=["language-"+o]);n=e(t,"code",a,[i("text",r)]),t.meta&&(n.data={meta:t.meta});return e(t.position,"pre",[n])};var i=n(914)},9381:(e,t,n)=>{"use strict";e.exports=function(e,t){return e(t,"del",i(e,t))};var i=n(5426)},790:(e,t,n)=>{"use strict";e.exports=function(e,t){return e(t,"em",i(e,t))};var i=n(5426)},8235:(e,t,n)=>{"use strict";e.exports=function(e,t){var n=e.footnoteOrder,r=String(t.identifier);-1===n.indexOf(r)&&n.push(r);return e(t.position,"sup",{id:"fnref-"+r},[e(t,"a",{href:"#fn-"+r,className:["footnote-ref"]},[i("text",t.label||r)])])};var i=n(914)},5758:(e,t,n)=>{"use strict";e.exports=function(e,t){var n=e.footnoteById,r=e.footnoteOrder,o=1;for(;o in n;)o++;return o=String(o),r.push(o),n[o]={type:"footnoteDefinition",identifier:o,children:[{type:"paragraph",children:t.children}],position:t.position},i(e,{type:"footnoteReference",identifier:o,position:t.position})};var i=n(8235)},4890:(e,t,n)=>{"use strict";e.exports=function(e,t){return e(t,"h"+t.depth,i(e,t))};var i=n(5426)},2202:(e,t,n)=>{"use strict";e.exports=function(e,t){return e.dangerous?e.augment(t,i("raw",t.value)):null};var i=n(914)},1454:(e,t,n)=>{"use strict";e.exports=function(e,t){var n,o=e.definition(t.identifier);if(!o)return r(e,t);n={src:i(o.url||""),alt:t.alt},null!==o.title&&void 0!==o.title&&(n.title=o.title);return e(t,"img",n)};var i=n(729),r=n(713)},5037:(e,t,n)=>{"use strict";var i=n(729);e.exports=function(e,t){var n={src:i(t.url),alt:t.alt};null!==t.title&&void 0!==t.title&&(n.title=t.title);return e(t,"img",n)}},4617:(e,t,n)=>{"use strict";function i(){return null}e.exports={blockquote:n(4590),break:n(3562),code:n(7891),delete:n(9381),emphasis:n(790),footnoteReference:n(8235),footnote:n(5758),heading:n(4890),html:n(2202),imageReference:n(1454),image:n(5037),inlineCode:n(8409),linkReference:n(9266),link:n(404),listItem:n(4463),list:n(7888),paragraph:n(8346),root:n(8100),strong:n(4970),table:n(2605),text:n(989),thematicBreak:n(7552),toml:i,yaml:i,definition:i,footnoteDefinition:i}},8409:(e,t,n)=>{"use strict";e.exports=function(e,t){var n=t.value.replace(/\r?\n|\r/g," ");return e(t,"code",[i("text",n)])};var i=n(914)},9266:(e,t,n)=>{"use strict";e.exports=function(e,t){var n,a=e.definition(t.identifier);if(!a)return r(e,t);n={href:i(a.url||"")},null!==a.title&&void 0!==a.title&&(n.title=a.title);return e(t,"a",n,o(e,t))};var i=n(729),r=n(713),o=n(5426)},404:(e,t,n)=>{"use strict";var i=n(729),r=n(5426);e.exports=function(e,t){var n={href:i(t.url)};null!==t.title&&void 0!==t.title&&(n.title=t.title);return e(t,"a",n,r(e,t))}},4463:(e,t,n)=>{"use strict";e.exports=function(e,t,n){var a,s,l,c=r(e,t),u=c[0],h=n?function(e){var t=e.spread,n=e.children,i=n.length,r=-1;for(;!t&&++r0&&u.children.unshift(i("text"," ")),u.children.unshift(e(null,"input",{type:"checkbox",checked:t.checked,disabled:!0})),p.className=["task-list-item"]);a=c.length,s=-1;for(;++s1:t}},7888:(e,t,n)=>{"use strict";e.exports=function(e,t){var n,o,a={},s=t.ordered?"ol":"ul",l=-1;"number"==typeof t.start&&1!==t.start&&(a.start=t.start);n=r(e,t),o=n.length;for(;++l{"use strict";e.exports=function(e,t){return e(t,"p",i(e,t))};var i=n(5426)},8100:(e,t,n)=>{"use strict";e.exports=function(e,t){return e.augment(t,i("root",r(o(e,t))))};var i=n(914),r=n(6115),o=n(5426)},4970:(e,t,n)=>{"use strict";e.exports=function(e,t){return e(t,"strong",i(e,t))};var i=n(5426)},2605:(e,t,n)=>{"use strict";e.exports=function(e,t){var n,a,s,l,c,u=t.children,h=u.length,p=t.align||[],d=p.length,f=[];for(;h--;){for(a=u[h].children,l=0===h?"th":"td",n=d||a.length,s=[];n--;)c=a[n],s[n]=e(c,l,{align:p[n]},c?o(e,c):[]);f[h]=e(u[h],"tr",r(s,!0))}return e(t,"table",r([e(f[0].position,"thead",r([f[0]],!0))].concat(f[1]?e({start:i.start(f[1]),end:i.end(f[f.length-1])},"tbody",r(f.slice(1),!0)):[]),!0))};var i=n(7361),r=n(6115),o=n(5426)},989:(e,t,n)=>{"use strict";e.exports=function(e,t){return e.augment(t,i("text",String(t.value).replace(/[ \t]*(\r?\n|\r)[ \t]*/g,"$1")))};var i=n(914)},7552:e=>{"use strict";e.exports=function(e,t){return e(t,"hr")}},719:(e,t,n)=>{"use strict";e.exports=function(e,t,n){var i,r=t&&t.type;if(!r)throw new Error("Expected node, got `"+t+"`");i=o.call(e.handlers,r)?e.handlers[r]:e.passThrough&&e.passThrough.indexOf(r)>-1?s:e.unknownHandler;return("function"==typeof i?i:a)(e,t,n)};var i=n(914),r=n(5426),o={}.hasOwnProperty;function a(e,t){return function(e){var t=e.data||{};if(o.call(t,"hName")||o.call(t,"hProperties")||o.call(t,"hChildren"))return!1;return"value"in e}(t)?e.augment(t,i("text",t.value)):e(t,"div",r(e,t))}function s(e,t){var n;return t.children?((n=Object.assign({},t)).children=r(e,t),n):t}},713:(e,t,n)=>{"use strict";e.exports=function(e,t){var n,o,a,s=t.referenceType,l="]";"collapsed"===s?l+="[]":"full"===s&&(l+="["+(t.label||t.identifier)+"]");if("imageReference"===t.type)return i("text","!["+t.alt+l);n=r(e,t),(o=n[0])&&"text"===o.type?o.value="["+o.value:n.unshift(i("text","["));(a=n[n.length-1])&&"text"===a.type?a.value+=l:n.push(i("text",l));return n};var i=n(914),r=n(5426)},6115:(e,t,n)=>{"use strict";e.exports=function(e,t){var n=[],r=-1,o=e.length;t&&n.push(i("text","\n"));for(;++r0&&n.push(i("text","\n"));return n};var i=n(914)},729:e=>{"use strict";var t={};function n(e,i,r){var o,a,s,l,c,u="";for("string"!=typeof i&&(r=i,i=n.defaultChars),void 0===r&&(r=!0),c=function(e){var n,i,r=t[e];if(r)return r;for(r=t[e]=[],n=0;n<128;n++)i=String.fromCharCode(n),/^[0-9a-z]$/i.test(i)?r.push(i):r.push("%"+("0"+n.toString(16).toUpperCase()).slice(-2));for(n=0;n=55296&&s<=57343){if(s>=55296&&s<=56319&&o+1=56320&&l<=57343){u+=encodeURIComponent(e[o]+e[o+1]),o++;continue}u+="%EF%BF%BD"}else u+=encodeURIComponent(e[o]);return u}n.defaultChars=";/?:@&=+$,-_.!~*'()#",n.componentChars="-_.!~*'()",e.exports=n},7621:(e,t,n)=>{"use strict";var i=n(3407);e.exports=function(e){return!!r.call(i,e)&&i[e]};var r={}.hasOwnProperty},7574:(e,t,n)=>{"use strict";var i=n(6588),r=n(6852),o=n(6195),a=n(9480),s=n(7961),l=n(7621);e.exports=function(e,t){var n,o,a={};t||(t={});for(o in p)n=t[o],a[o]=null==n?p[o]:n;(a.position.indent||a.position.start)&&(a.indent=a.position.indent||[],a.position=a.position.start);return function(e,t){var n,o,a,p,k,C,x,E,S,M,T,D,A,L,P,I,F,O,B,N=t.additional,R=t.nonTerminated,H=t.text,V=t.reference,z=t.warning,q=t.textContext,U=t.referenceContext,_=t.warningContext,j=t.position,W=t.indent||[],G=e.length,K=0,Y=-1,X=j.column||1,$=j.line||1,Z="",Q=[];"string"==typeof N&&(N=N.charCodeAt(0));I=J(),E=z?ee:h,K--,G++;for(;++K65535&&(M+=u((C-=65536)>>>10|55296),C=56320|1023&C),C=M+u(C))):L!==d&&E(4,O)),C?(te(),I=J(),K=B-1,X+=B-A+1,Q.push(C),(F=J()).offset++,V&&V.call(U,C,{start:I,end:F},e.slice(A-1,B)),I=F):(p=e.slice(A-1,B),Z+=p,X+=p.length,K=B-1)}else 10===k&&($++,Y++,X=0),k==k?(Z+=u(k),X++):te();return Q.join("");function J(){return{line:$,column:X,offset:K+(j.offset||0)}}function ee(e,t){var n=J();n.column+=t,n.offset+=t,z.call(_,y[e],n,e)}function te(){Z&&(Q.push(Z),H&&H.call(q,Z,{start:I,end:J()}),Z="")}}(e,a)};var c={}.hasOwnProperty,u=String.fromCharCode,h=Function.prototype,p={warning:null,reference:null,text:null,warningContext:null,referenceContext:null,textContext:null,position:{},additional:null,attribute:!1,nonTerminated:!0},d="named",f="hexadecimal",m="decimal",g={hexadecimal:16,decimal:10},v={};v.named=s,v[m]=o,v[f]=a;var y={};function b(e){return e>=55296&&e<=57343||e>1114111}function w(e){return e>=1&&e<=8||11===e||e>=13&&e<=31||e>=127&&e<=159||e>=64976&&e<=65007||65535==(65535&e)||65534==(65535&e)}y[1]="Named character references must be terminated by a semicolon",y[2]="Numeric character references must be terminated by a semicolon",y[3]="Named character references cannot be empty",y[4]="Numeric character references cannot be empty",y[5]="Named character references must be known",y[6]="Numeric character references cannot be disallowed",y[7]="Numeric character references cannot be outside the permissible Unicode range"},9560:(e,t,n)=>{"use strict";var i=n(6632),r=n(8805),o=n(7643),a="data";e.exports=function(e,t){var n=i(t),p=t,d=o;if(n in e.normal)return e.property[e.normal[n]];n.length>4&&n.slice(0,4)===a&&s.test(t)&&("-"===t.charAt(4)?p=function(e){var t=e.slice(5).replace(l,h);return a+t.charAt(0).toUpperCase()+t.slice(1)}(t):t=function(e){var t=e.slice(4);if(l.test(t))return e;"-"!==(t=t.replace(c,u)).charAt(0)&&(t="-"+t);return a+t}(t),d=r);return new d(p,t)};var s=/^data[-\w.:]+$/i,l=/-[a-z]/g,c=/[A-Z]/g;function u(e){return"-"+e.toLowerCase()}function h(e){return e.charAt(1).toUpperCase()}},7247:(e,t,n)=>{"use strict";var i=n(9940),r=n(8289),o=n(5812),a=n(4397),s=n(7716),l=n(1805);e.exports=i([o,r,a,s,l])},7716:(e,t,n)=>{"use strict";var i=n(7e3),r=n(7596),o=i.booleanish,a=i.number,s=i.spaceSeparated;e.exports=r({transform:function(e,t){return"role"===t?t:"aria-"+t.slice(4).toLowerCase()},properties:{ariaActiveDescendant:null,ariaAtomic:o,ariaAutoComplete:null,ariaBusy:o,ariaChecked:o,ariaColCount:a,ariaColIndex:a,ariaColSpan:a,ariaControls:s,ariaCurrent:null,ariaDescribedBy:s,ariaDetails:null,ariaDisabled:o,ariaDropEffect:s,ariaErrorMessage:null,ariaExpanded:o,ariaFlowTo:s,ariaGrabbed:o,ariaHasPopup:null,ariaHidden:o,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:s,ariaLevel:a,ariaLive:null,ariaModal:o,ariaMultiLine:o,ariaMultiSelectable:o,ariaOrientation:null,ariaOwns:s,ariaPlaceholder:null,ariaPosInSet:a,ariaPressed:o,ariaReadOnly:o,ariaRelevant:null,ariaRequired:o,ariaRoleDescription:s,ariaRowCount:a,ariaRowIndex:a,ariaRowSpan:a,ariaSelected:o,ariaSetSize:a,ariaSort:null,ariaValueMax:a,ariaValueMin:a,ariaValueNow:a,ariaValueText:null,role:null}})},1805:(e,t,n)=>{"use strict";var i=n(7e3),r=n(7596),o=n(855),a=i.boolean,s=i.overloadedBoolean,l=i.booleanish,c=i.number,u=i.spaceSeparated,h=i.commaSeparated;e.exports=r({space:"html",attributes:{acceptcharset:"accept-charset",classname:"class",htmlfor:"for",httpequiv:"http-equiv"},transform:o,mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null,accept:h,acceptCharset:u,accessKey:u,action:null,allow:null,allowFullScreen:a,allowPaymentRequest:a,allowUserMedia:a,alt:null,as:null,async:a,autoCapitalize:null,autoComplete:u,autoFocus:a,autoPlay:a,capture:a,charSet:null,checked:a,cite:null,className:u,cols:c,colSpan:null,content:null,contentEditable:l,controls:a,controlsList:u,coords:c|h,crossOrigin:null,data:null,dateTime:null,decoding:null,default:a,defer:a,dir:null,dirName:null,disabled:a,download:s,draggable:l,encType:null,enterKeyHint:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:a,formTarget:null,headers:u,height:c,hidden:a,high:c,href:null,hrefLang:null,htmlFor:u,httpEquiv:u,id:null,imageSizes:null,imageSrcSet:h,inputMode:null,integrity:null,is:null,isMap:a,itemId:null,itemProp:u,itemRef:u,itemScope:a,itemType:u,kind:null,label:null,lang:null,language:null,list:null,loop:a,low:c,manifest:null,max:null,maxLength:c,media:null,method:null,min:null,minLength:c,multiple:a,muted:a,name:null,nonce:null,noModule:a,noValidate:a,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforePrint:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextMenu:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:a,optimum:c,pattern:null,ping:u,placeholder:null,playsInline:a,poster:null,preload:null,readOnly:a,referrerPolicy:null,rel:u,required:a,reversed:a,rows:c,rowSpan:c,sandbox:u,scope:null,scoped:a,seamless:a,selected:a,shape:null,size:c,sizes:null,slot:null,span:c,spellCheck:l,src:null,srcDoc:null,srcLang:null,srcSet:h,start:c,step:null,style:null,tabIndex:c,target:null,title:null,translate:null,type:null,typeMustMatch:a,useMap:null,value:l,width:c,wrap:null,align:null,aLink:null,archive:u,axis:null,background:null,bgColor:null,border:c,borderColor:null,bottomMargin:c,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:a,declare:a,event:null,face:null,frame:null,frameBorder:null,hSpace:c,leftMargin:c,link:null,longDesc:null,lowSrc:null,marginHeight:c,marginWidth:c,noResize:a,noHref:a,noShade:a,noWrap:a,object:null,profile:null,prompt:null,rev:null,rightMargin:c,rules:null,scheme:null,scrolling:l,standby:null,summary:null,text:null,topMargin:c,valueType:null,version:null,vAlign:null,vLink:null,vSpace:c,allowTransparency:null,autoCorrect:null,autoSave:null,disablePictureInPicture:a,disableRemotePlayback:a,prefix:null,property:null,results:c,security:null,unselectable:null}})},5789:(e,t,n)=>{"use strict";var i=n(7e3),r=n(7596),o=n(8740),a=i.boolean,s=i.number,l=i.spaceSeparated,c=i.commaSeparated,u=i.commaOrSpaceSeparated;e.exports=r({space:"svg",attributes:{accentHeight:"accent-height",alignmentBaseline:"alignment-baseline",arabicForm:"arabic-form",baselineShift:"baseline-shift",capHeight:"cap-height",className:"class",clipPath:"clip-path",clipRule:"clip-rule",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",crossOrigin:"crossorigin",dataType:"datatype",dominantBaseline:"dominant-baseline",enableBackground:"enable-background",fillOpacity:"fill-opacity",fillRule:"fill-rule",floodColor:"flood-color",floodOpacity:"flood-opacity",fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",hrefLang:"hreflang",horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",horizOriginY:"horiz-origin-y",imageRendering:"image-rendering",letterSpacing:"letter-spacing",lightingColor:"lighting-color",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",navDown:"nav-down",navDownLeft:"nav-down-left",navDownRight:"nav-down-right",navLeft:"nav-left",navNext:"nav-next",navPrev:"nav-prev",navRight:"nav-right",navUp:"nav-up",navUpLeft:"nav-up-left",navUpRight:"nav-up-right",onAbort:"onabort",onActivate:"onactivate",onAfterPrint:"onafterprint",onBeforePrint:"onbeforeprint",onBegin:"onbegin",onCancel:"oncancel",onCanPlay:"oncanplay",onCanPlayThrough:"oncanplaythrough",onChange:"onchange",onClick:"onclick",onClose:"onclose",onCopy:"oncopy",onCueChange:"oncuechange",onCut:"oncut",onDblClick:"ondblclick",onDrag:"ondrag",onDragEnd:"ondragend",onDragEnter:"ondragenter",onDragExit:"ondragexit",onDragLeave:"ondragleave",onDragOver:"ondragover",onDragStart:"ondragstart",onDrop:"ondrop",onDurationChange:"ondurationchange",onEmptied:"onemptied",onEnd:"onend",onEnded:"onended",onError:"onerror",onFocus:"onfocus",onFocusIn:"onfocusin",onFocusOut:"onfocusout",onHashChange:"onhashchange",onInput:"oninput",onInvalid:"oninvalid",onKeyDown:"onkeydown",onKeyPress:"onkeypress",onKeyUp:"onkeyup",onLoad:"onload",onLoadedData:"onloadeddata",onLoadedMetadata:"onloadedmetadata",onLoadStart:"onloadstart",onMessage:"onmessage",onMouseDown:"onmousedown",onMouseEnter:"onmouseenter",onMouseLeave:"onmouseleave",onMouseMove:"onmousemove",onMouseOut:"onmouseout",onMouseOver:"onmouseover",onMouseUp:"onmouseup",onMouseWheel:"onmousewheel",onOffline:"onoffline",onOnline:"ononline",onPageHide:"onpagehide",onPageShow:"onpageshow",onPaste:"onpaste",onPause:"onpause",onPlay:"onplay",onPlaying:"onplaying",onPopState:"onpopstate",onProgress:"onprogress",onRateChange:"onratechange",onRepeat:"onrepeat",onReset:"onreset",onResize:"onresize",onScroll:"onscroll",onSeeked:"onseeked",onSeeking:"onseeking",onSelect:"onselect",onShow:"onshow",onStalled:"onstalled",onStorage:"onstorage",onSubmit:"onsubmit",onSuspend:"onsuspend",onTimeUpdate:"ontimeupdate",onToggle:"ontoggle",onUnload:"onunload",onVolumeChange:"onvolumechange",onWaiting:"onwaiting",onZoom:"onzoom",overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pointerEvents:"pointer-events",referrerPolicy:"referrerpolicy",renderingIntent:"rendering-intent",shapeRendering:"shape-rendering",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",strokeDashArray:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeLineCap:"stroke-linecap",strokeLineJoin:"stroke-linejoin",strokeMiterLimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",tabIndex:"tabindex",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",typeOf:"typeof",underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",vectorEffect:"vector-effect",vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",wordSpacing:"word-spacing",writingMode:"writing-mode",xHeight:"x-height",playbackOrder:"playbackorder",timelineBegin:"timelinebegin"},transform:o,properties:{about:u,accentHeight:s,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:s,amplitude:s,arabicForm:null,ascent:s,attributeName:null,attributeType:null,azimuth:s,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:s,by:null,calcMode:null,capHeight:s,className:l,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:s,diffuseConstant:s,direction:null,display:null,dur:null,divisor:s,dominantBaseline:null,download:a,dx:null,dy:null,edgeMode:null,editable:null,elevation:s,enableBackground:null,end:null,event:null,exponent:s,externalResourcesRequired:null,fill:null,fillOpacity:s,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:c,g2:c,glyphName:c,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:s,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:s,horizOriginX:s,horizOriginY:s,id:null,ideographic:s,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:s,k:s,k1:s,k2:s,k3:s,k4:s,kernelMatrix:u,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:s,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:s,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:s,overlineThickness:s,paintOrder:null,panose1:null,path:null,pathLength:s,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:l,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:s,pointsAtY:s,pointsAtZ:s,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:u,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:u,rev:u,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:u,requiredFeatures:u,requiredFonts:u,requiredFormats:u,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:s,specularExponent:s,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:s,strikethroughThickness:s,string:null,stroke:null,strokeDashArray:u,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:s,strokeOpacity:s,strokeWidth:null,style:null,surfaceScale:s,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:u,tabIndex:s,tableValues:null,target:null,targetX:s,targetY:s,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:u,to:null,transform:null,u1:null,u2:null,underlinePosition:s,underlineThickness:s,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:s,values:null,vAlphabetic:s,vMathematical:s,vectorEffect:null,vHanging:s,vIdeographic:s,version:null,vertAdvY:s,vertOriginX:s,vertOriginY:s,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:s,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null}})},855:(e,t,n)=>{"use strict";var i=n(8740);e.exports=function(e,t){return i(e,t.toLowerCase())}},8740:e=>{"use strict";e.exports=function(e,t){return t in e?e[t]:t}},7596:(e,t,n)=>{"use strict";var i=n(6632),r=n(9607),o=n(8805);e.exports=function(e){var t,n,a=e.space,s=e.mustUseProperty||[],l=e.attributes||{},c=e.properties,u=e.transform,h={},p={};for(t in c)n=new o(t,u(l,t),c[t],a),-1!==s.indexOf(t)&&(n.mustUseProperty=!0),h[t]=n,p[i(t)]=t,p[i(n.attribute)]=t;return new r(h,p,a)}},8805:(e,t,n)=>{"use strict";var i=n(7643),r=n(7e3);e.exports=s,s.prototype=new i,s.prototype.defined=!0;var o=["boolean","booleanish","overloadedBoolean","number","commaSeparated","spaceSeparated","commaOrSpaceSeparated"],a=o.length;function s(e,t,n,s){var c,u=-1;for(l(this,"space",s),i.call(this,e,t);++u{"use strict";e.exports=n;var t=n.prototype;function n(e,t){this.property=e,this.attribute=t}t.space=null,t.attribute=null,t.property=null,t.boolean=!1,t.booleanish=!1,t.overloadedBoolean=!1,t.number=!1,t.commaSeparated=!1,t.spaceSeparated=!1,t.commaOrSpaceSeparated=!1,t.mustUseProperty=!1,t.defined=!1},9940:(e,t,n)=>{"use strict";var i=n(7529),r=n(9607);e.exports=function(e){var t,n,o=e.length,a=[],s=[],l=-1;for(;++l{"use strict";e.exports=n;var t=n.prototype;function n(e,t,n){this.property=e,this.normal=t,n&&(this.space=n)}t.space=null,t.normal={},t.property={}},7e3:(e,t)=>{"use strict";var n=0;function i(){return Math.pow(2,++n)}t.boolean=i(),t.booleanish=i(),t.overloadedBoolean=i(),t.number=i(),t.spaceSeparated=i(),t.commaSeparated=i(),t.commaOrSpaceSeparated=i()},8289:(e,t,n)=>{"use strict";var i=n(7596);e.exports=i({space:"xlink",transform:function(e,t){return"xlink:"+t.slice(5).toLowerCase()},properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null}})},5812:(e,t,n)=>{"use strict";var i=n(7596);e.exports=i({space:"xml",transform:function(e,t){return"xml:"+t.slice(3).toLowerCase()},properties:{xmlLang:null,xmlBase:null,xmlSpace:null}})},4397:(e,t,n)=>{"use strict";var i=n(7596),r=n(855);e.exports=i({space:"xmlns",attributes:{xmlnsxlink:"xmlns:xlink"},transform:r,properties:{xmlns:null,xmlnsXLink:null}})},6632:e=>{"use strict";e.exports=function(e){return e.toLowerCase()}},1218:(e,t,n)=>{"use strict";var i=n(9940),r=n(8289),o=n(5812),a=n(4397),s=n(7716),l=n(5789);e.exports=i([o,r,a,s,l])},6464:e=>{"use strict";var t,n="";e.exports=function(e,i){if("string"!=typeof e)throw new TypeError("expected a string");if(1===i)return e;if(2===i)return e+e;var r=e.length*i;if(t!==e||void 0===t)t=e,n="";else if(n.length>=r)return n.substr(0,r);for(;r>n.length&&i>1;)1&i&&(n+=e),i>>=1,e+=e;return n=(n+=e).substr(0,r)}},6582:(e,t)=>{"use strict";t.P=function(e){return e.join(" ").trim()};var n=/[ \t\n\r\f]+/g},78:e=>{"use strict";e.exports=function(e,t,n){return function(){var i=n||this,r=i[e];return i[e]=!t,o;function o(){i[e]=r}}}},832:e=>{"use strict";e.exports=JSON.parse('["cent","copy","divide","gt","lt","not","para","times"]')},4860:(e,t,n)=>{"use strict";var i=n(5848),r=n(6588),o=n(9480),a=n(6195),s=n(7961),l=n(832);e.exports=f,f.escape=function(e){return f(e,{escapeOnly:!0,useNamedReferences:!0})};var c={}.hasOwnProperty,u=function(){var e,t={};for(e in i)t[i[e]]=e;return t}(),h=v(['"',"'","<",">","&","`"]),p=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,d=/[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g;function f(e,t){var n=t||{},i=n.subset,o=i?v(i):h,a=n.escapeOnly,f=n.omitOptionalSemicolons;return e=e.replace(o,y),i||a?e:e.replace(p,(function(e,t,n){return m(1024*(e.charCodeAt(0)-55296)+e.charCodeAt(1)-56320+65536,n.charCodeAt(t+2),f)})).replace(d,y);function y(e,t,i){return function(e,t,n){var i,o,a,h,p=n.useShortestReferences,d=n.omitOptionalSemicolons;(p||n.useNamedReferences)&&c.call(u,e)&&(i=function(e,t,n,i){var o="&"+e;if(n&&c.call(r,e)&&-1===l.indexOf(e)&&(!i||t&&61!==t&&!s(t)))return o;return o+";"}(u[e],t,d,n.attribute));!p&&i||(a=m(o=e.charCodeAt(0),t,d),p&&(h=g(o,t,d)).length{"use strict";e.exports=function(e){var t=String(e),n=t.length;for(;"\n"===t.charAt(--n););return t.slice(0,n+1)}},2745:(e,t)=>{(t=e.exports=function(e){return e.replace(/^\s*|\s*$/g,"")}).left=function(e){return e.replace(/^\s*/,"")},t.right=function(e){return e.replace(/\s*$/,"")}},3278:(e,t,n)=>{"use strict";var i=n(7529),r=n(5717);e.exports=function(e){var t,n,o;for(n in r(s,e),r(a,s),t=s.prototype)(o=t[n])&&"object"==typeof o&&(t[n]="concat"in o?o.concat():i(o));return s;function a(t){return e.apply(this,t)}function s(){return this instanceof s?e.apply(this,arguments):new a(arguments)}}},914:e=>{"use strict";e.exports=function(e,t,n){var i;null!=n||"object"==typeof t&&!Array.isArray(t)||(n=t,t={});i=Object.assign({type:String(e)},t),Array.isArray(n)?i.children=n:null!=n&&(i.value=String(n));return i}},1744:e=>{"use strict";function t(e){return e&&"object"==typeof e?e:{}}e.exports=function(e){var n=t(t(e).position),i=t(n.start),r=t(n.end);return!(i.line&&i.column&&r.line&&r.column)}},8145:e=>{"use strict";function t(e){if("string"==typeof e)return function(e){return t;function t(t){return Boolean(t&&t.type===e)}}(e);if(null==e)return r;if("object"==typeof e)return("length"in e?i:n)(e);if("function"==typeof e)return e;throw new Error("Expected function, string, or object as test")}function n(e){return function(t){var n;for(n in e)if(t[n]!==e[n])return!1;return!0}}function i(e){var n=function(e){for(var n=[],i=e.length,r=-1;++r{"use strict";var t=r("start"),n=r("end");function i(e){return{start:t(e),end:n(e)}}function r(e){return t.displayName=e,t;function t(t){var n=t&&t.position&&t.position[e]||{};return{line:n.line||null,column:n.column||null,offset:isNaN(n.offset)?null:n.offset}}}e.exports=i,i.start=t,i.end=n},3183:(e,t,n)=>{"use strict";var i=n(2854);function r(e){delete e.position}function o(e){e.position=void 0}e.exports=function(e,t){return i(e,t?r:o),e}},5432:e=>{"use strict";var t={}.hasOwnProperty;function n(e){return e&&"object"==typeof e||(e={}),r(e.line)+":"+r(e.column)}function i(e){return e&&"object"==typeof e||(e={}),n(e.start)+"-"+n(e.end)}function r(e){return e&&"number"==typeof e?e:1}e.exports=function(e){if(!e||"object"!=typeof e)return"";if(t.call(e,"position")||t.call(e,"type"))return i(e.position);if(t.call(e,"start")||t.call(e,"end"))return i(e);if(t.call(e,"line")||t.call(e,"column"))return n(e);return""}},6750:e=>{e.exports=function(e){return e}},9294:(e,t,n)=>{"use strict";e.exports=s;var i=n(8145),r=n(6750),o="skip",a=!1;function s(e,t,n,s){var p;function d(e,i,c){var f,m=h(e)?e:{};return u(m.type)&&(f=u(m.tagName)?m.tagName:u(m.name)?m.name:void 0,g.displayName="node ("+r(m.type+(f?"<"+f+">":""))+")"),g;function g(){var r,u=[];return(t&&!p(e,i,c[c.length-1]||null)||(u=l(n(e,c)))[0]!==a)&&e.children&&u[0]!==o&&(r=l(function(e,t){var n,i=-1,r=s?-1:1,o=(s?e.length:i)+r;for(;o>i&&o{"use strict";e.exports=s;var i=n(9294),r=i.CONTINUE,o=i.SKIP,a=i.EXIT;function s(e,t,n,r){"function"==typeof t&&"function"!=typeof n&&(r=n,n=t,t=null),i(e,t,(function(e,t){var i=t[t.length-1],r=i?i.children.indexOf(e):null;return n(e,r,i)}),r)}s.CONTINUE=r,s.SKIP=o,s.EXIT=a},4787:e=>{"use strict";e.exports=function(e){var t=String(e),n=[],i=/\r?\n|\r/g;for(;i.exec(t);)n.push(i.lastIndex);return n.push(t.length+1),{toPoint:r,toPosition:r,toOffset:function(e){var t,i=e&&e.line,r=e&&e.column;isNaN(i)||isNaN(r)||!(i-1 in n)||(t=(n[i-2]||0)+r-1||0);return t>-1&&t-1&&ee)return{line:t+1,column:e-(n[t-1]||0)+1,offset:e};return{}}}},734:(e,t,n)=>{"use strict";var i=n(5432);function r(){}e.exports=a,r.prototype=Error.prototype,a.prototype=new r;var o=a.prototype;function a(e,t,n){var r,o,a;"string"==typeof t&&(n=t,t=null),r=function(e){var t,n=[null,null];"string"==typeof e&&(-1===(t=e.indexOf(":"))?n[1]=e:(n[0]=e.slice(0,t),n[1]=e.slice(t+1)));return n}(n),o=i(t)||"1:1",a={start:{line:null,column:null},end:{line:null,column:null}},t&&t.position&&(t=t.position),t&&(t.start?(a=t,t=t.start):a.start=t),e.stack&&(this.stack=e.stack,e=e.message),this.message=e,this.name=o,this.reason=e,this.line=t?t.line:null,this.column=t?t.column:null,this.location=a,this.source=r[0],this.ruleId=r[1]}o.file="",o.name="",o.reason="",o.message="",o.stack="",o.fatal=null,o.column=null,o.line=null},939:(e,t,n)=>{"use strict";e.exports=n(5905)},5442:(e,t,n)=>{"use strict";var i=n(8064),r=n(4228),o=n(8738);e.exports=l;var a={}.hasOwnProperty,s=["history","path","basename","stem","extname","dirname"];function l(e){var t,n;if(e){if("string"==typeof e||o(e))e={contents:e};else if("message"in e&&"messages"in e)return e}else e={};if(!(this instanceof l))return new l(e);for(this.data={},this.messages=[],this.history=[],this.cwd=r.cwd(),n=-1;++n-1)throw new Error("`"+t+"` cannot be a path: did not expect `"+i.sep+"`")}function u(e,t){if(!e)throw new Error("`"+t+"` cannot be empty")}function h(e,t){if(!e)throw new Error("Setting `"+t+"` requires `path` to be set too")}l.prototype.toString=function(e){return(this.contents||"").toString(e)},Object.defineProperty(l.prototype,"path",{get:function(){return this.history[this.history.length-1]},set:function(e){u(e,"path"),this.path!==e&&this.history.push(e)}}),Object.defineProperty(l.prototype,"dirname",{get:function(){return"string"==typeof this.path?i.dirname(this.path):void 0},set:function(e){h(this.path,"dirname"),this.path=i.join(e||"",this.basename)}}),Object.defineProperty(l.prototype,"basename",{get:function(){return"string"==typeof this.path?i.basename(this.path):void 0},set:function(e){u(e,"basename"),c(e,"basename"),this.path=i.join(this.dirname||"",e)}}),Object.defineProperty(l.prototype,"extname",{get:function(){return"string"==typeof this.path?i.extname(this.path):void 0},set:function(e){if(c(e,"extname"),h(this.path,"extname"),e){if(46!==e.charCodeAt(0))throw new Error("`extname` must start with `.`");if(e.indexOf(".",1)>-1)throw new Error("`extname` cannot contain multiple dots")}this.path=i.join(this.dirname,this.stem+(e||""))}}),Object.defineProperty(l.prototype,"stem",{get:function(){return"string"==typeof this.path?i.basename(this.path,this.extname):void 0},set:function(e){u(e,"stem"),c(e,"stem"),this.path=i.join(this.dirname||"",e+(this.extname||""))}})},5905:(e,t,n)=>{"use strict";var i=n(734),r=n(5442);e.exports=r,r.prototype.message=function(e,t,n){var r=new i(e,t,n);this.path&&(r.name=this.path+":"+r.name,r.file=this.path);return r.fatal=!1,this.messages.push(r),r},r.prototype.info=function(){var e=this.message.apply(this,arguments);return e.fatal=null,e},r.prototype.fail=function(){var e=this.message.apply(this,arguments);throw e.fatal=!0,e}},8064:(e,t)=>{"use strict";function n(e){var t,n;return i(e),t=47===e.charCodeAt(0),(n=function(e,t){var n,i,r="",o=0,a=-1,s=0,l=-1;for(;++l<=e.length;){if(l2){if((i=r.lastIndexOf("/"))!==r.length-1){i<0?(r="",o=0):o=(r=r.slice(0,i)).length-1-r.lastIndexOf("/"),a=l,s=0;continue}}else if(r.length){r="",o=0,a=l,s=0;continue}t&&(r=r.length?r+"/..":"..",o=2)}else r.length?r+="/"+e.slice(a+1,l):r=e.slice(a+1,l),o=l-a-1;a=l,s=0}else 46===n&&s>-1?s++:s=-1}return r}(e,!t)).length||t||(n="."),n.length&&47===e.charCodeAt(e.length-1)&&(n+="/"),t?"/"+n:n}function i(e){if("string"!=typeof e)throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}t.basename=function(e,t){var n,r,o,a,s=0,l=-1;if(void 0!==t&&"string"!=typeof t)throw new TypeError('"ext" argument must be a string');if(i(e),n=e.length,void 0===t||!t.length||t.length>e.length){for(;n--;)if(47===e.charCodeAt(n)){if(o){s=n+1;break}}else l<0&&(o=!0,l=n+1);return l<0?"":e.slice(s,l)}if(t===e)return"";r=-1,a=t.length-1;for(;n--;)if(47===e.charCodeAt(n)){if(o){s=n+1;break}}else r<0&&(o=!0,r=n+1),a>-1&&(e.charCodeAt(n)===t.charCodeAt(a--)?a<0&&(l=n):(a=-1,l=r));s===l?l=r:l<0&&(l=e.length);return e.slice(s,l)},t.dirname=function(e){var t,n,r;if(i(e),!e.length)return".";t=-1,r=e.length;for(;--r;)if(47===e.charCodeAt(r)){if(n){t=r;break}}else n||(n=!0);return t<0?47===e.charCodeAt(0)?"/":".":1===t&&47===e.charCodeAt(0)?"//":e.slice(0,t)},t.extname=function(e){var t,n,r,o=-1,a=0,s=-1,l=0;i(e),r=e.length;for(;r--;)if(47!==(n=e.charCodeAt(r)))s<0&&(t=!0,s=r+1),46===n?o<0?o=r:1!==l&&(l=1):o>-1&&(l=-1);else if(t){a=r+1;break}if(o<0||s<0||0===l||1===l&&o===s-1&&o===a+1)return"";return e.slice(o,s)},t.join=function(){var e,t=-1;for(;++t{"use strict";t.cwd=function(){return"/"}},4990:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},2800:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i,r=n(1166),o=n(3210),a=n(3210),s=n(4370);!function(e){e[e.STATE_TAG=1]="STATE_TAG",e[e.STATE_SIZE=2]="STATE_SIZE",e[e.STATE_CONTENT=3]="STATE_CONTENT"}(i||(i={}));var l=function(){function e(){this._buffer=new o.Buffer(0),this._tag_stack=[],this._state=i.STATE_TAG,this._cursor=0,this._total=0,this._schema=s.byEbmlID,this._result=[]}return e.prototype.decode=function(e){this.readChunk(e);var t=this._result;return this._result=[],t},e.prototype.readChunk=function(e){for(this._buffer=a.concat([this._buffer,new o.Buffer(e)]);this._cursor=this._buffer.length)return!1;var e=(0,o.readVint)(this._buffer,this._cursor);if(null==e)return!1;var t=this._buffer.slice(this._cursor,this._cursor+e.length).reduce((function(e,t,n,i){return e+t*Math.pow(16,2*(i.length-1-n))}),0),n=this.getSchemaInfo(t),r={EBML_ID:t.toString(16),schema:n,type:n.type,name:n.name,level:n.level,tagStart:this._total,tagEnd:this._total+e.length,sizeStart:this._total+e.length,sizeEnd:null,dataStart:null,dataEnd:null,dataSize:null,data:null};return this._tag_stack.push(r),this._cursor+=e.length,this._total+=e.length,this._state=i.STATE_SIZE,!0},e.prototype.readSize=function(){if(this._cursor>=this._buffer.length)return!1;var e=(0,o.readVint)(this._buffer,this._cursor);if(null==e)return!1;var t=this._tag_stack[this._tag_stack.length-1];return t.sizeEnd=t.sizeStart+e.length,t.dataStart=t.sizeEnd,t.dataSize=e.value,-1===e.value?(t.dataEnd=-1,"m"===t.type&&(t.unknownSize=!0)):t.dataEnd=t.sizeEnd+e.value,this._cursor+=e.length,this._total+=e.length,this._state=i.STATE_CONTENT,!0},e.prototype.readContent=function(){var e=this._tag_stack[this._tag_stack.length-1];if("m"===e.type){if(e.isEnd=!1,this._result.push(e),this._state=i.STATE_TAG,0===e.dataSize){var t=Object.assign({},e,{isEnd:!0});this._result.push(t),this._tag_stack.pop()}return!0}if(this._buffer.length0;){var a=this._tag_stack[this._tag_stack.length-1];if(a.dataEnd<0)return this._tag_stack.pop(),!0;if(this._total{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=n(3210),r=n(3210),o=n(4370),a=function(){function e(){this._schema=o.byEbmlID,this._buffers=[],this._stack=[]}return e.prototype.encode=function(e){var t=this;return i.concat(e.reduce((function(e,n){return e.concat(t.encodeChunk(n))}),[])).buffer},e.prototype.encodeChunk=function(e){return"m"===e.type?e.isEnd?this.endTag(e):this.startTag(e):(e.data=r.Buffer.from(e.data),this.writeTag(e)),this.flush()},e.prototype.flush=function(){var e=this._buffers;return this._buffers=[],e},e.prototype.getSchemaInfo=function(e){for(var t=Object.keys(this._schema).map(Number),n=0;n0?this._stack[this._stack.length-1].children.push({tagId:n,elm:e,children:[],data:o}):this._buffers=this._buffers.concat(o)},e.prototype.startTag=function(e){var t=e.name,n=this.getSchemaInfo(t);if(null==n)throw new Error("No schema entry found for "+t);if(e.unknownSize){var o=i.encodeTag(n,new r.Buffer(0),e.unknownSize);this._buffers=this._buffers.concat(o)}else{var a={tagId:n,elm:e,children:[],data:null};this._stack.length>0&&this._stack[this._stack.length-1].children.push(a),this._stack.push(a)}},e.prototype.endTag=function(e){e.name;var t=this._stack.pop();if(null==t)throw new Error("EBML structure is broken");if(t.elm.name!==e.name)throw new Error("EBML structure is broken");var n=t.children.reduce((function(e,t){if(null===t.data)throw new Error("EBML structure is broken");return e.concat(t.data)}),[]),r=i.concat(n);"m"===t.elm.type?t.data=i.encodeTag(t.tagId,r,t.elm.unknownSize):t.data=i.encodeTag(t.tagId,r),this._stack.length<1&&(this._buffers=this._buffers.concat(t.data))},e}();t.default=a},1381:function(e,t,n){"use strict";var i,r=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var o=n(7187),a=n(3210),s=function(e){function t(){var t=e.call(this)||this;return t.logGroup="",t.hasLoggingStarted=!1,t.metadataloaded=!1,t.chunks=[],t.stack=[],t.segmentOffset=0,t.last2SimpleBlockVideoTrackTimecode=[0,0],t.last2SimpleBlockAudioTrackTimecode=[0,0],t.lastClusterTimecode=0,t.lastClusterPosition=0,t.timecodeScale=1e6,t.metadataSize=0,t.metadatas=[],t.cues=[],t.firstVideoBlockRead=!1,t.firstAudioBlockRead=!1,t.currentTrack={TrackNumber:-1,TrackType:-1,DefaultDuration:null,CodecDelay:null},t.trackTypes=[],t.trackDefaultDuration=[],t.trackCodecDelay=[],t.trackInfo={type:"nothing"},t.ended=!1,t.logging=!1,t.use_duration_every_simpleblock=!1,t.use_webp=!1,t.use_segment_info=!0,t.drop_default_duration=!0,t}return r(t,e),t.prototype.stop=function(){for(this.ended=!0,this.emit_segment_info();this.stack.length;)this.stack.pop(),this.logging&&console.groupEnd();this.logging&&this.hasLoggingStarted&&this.logGroup&&console.groupEnd()},t.prototype.emit_segment_info=function(){var e=this.chunks;if(this.chunks=[],this.metadataloaded){if(!this.use_segment_info)return;var t=this.lastClusterTimecode,n=this.duration,i=this.timecodeScale;this.emit("cluster",{timecode:t,data:e}),this.emit("duration",{timecodeScale:i,duration:n})}else{this.metadataloaded=!0,this.metadatas=e;var r=this.trackTypes.indexOf(1),o=this.trackTypes.indexOf(2);if(this.trackInfo=r>=0&&o>=0?{type:"both",trackNumber:r}:r>=0?{type:"video",trackNumber:r}:o>=0?{type:"audio",trackNumber:o}:{type:"nothing"},!this.use_segment_info)return;this.emit("metadata",{data:e,metadataSize:this.metadataSize})}},t.prototype.read=function(e){var t=this,n=!1;if(!this.ended){if("m"===e.type)if(e.isEnd)this.stack.pop();else{var i=this.stack[this.stack.length-1];if(null!=i&&i.level>=e.level){this.stack.pop(),this.logging&&console.groupEnd(),i.dataEnd=e.dataEnd,i.dataSize=e.dataEnd-i.dataStart,i.unknownSize=!1;var r=Object.assign({},i,{name:i.name,type:i.type,isEnd:!0});this.chunks.push(r)}this.stack.push(e)}if("m"===e.type&&"Segment"==e.name)0!=this.segmentOffset&&console.warn("Multiple segments detected!"),this.segmentOffset=e.dataStart,this.emit("segment_offset",this.segmentOffset);else if("b"===e.type&&"SimpleBlock"===e.name){var o=a.ebmlBlock(e.data),s=o.timecode,l=o.trackNumber,c=o.frames;if(1===this.trackTypes[l]){if(!this.firstVideoBlockRead&&(this.firstVideoBlockRead=!0,"both"===this.trackInfo.type||"video"===this.trackInfo.type)){var u=this.lastClusterTimecode+s;this.cues.push({CueTrack:l,CueClusterPosition:this.lastClusterPosition,CueTime:u}),this.emit("cue_info",{CueTrack:l,CueClusterPosition:this.lastClusterPosition,CueTime:this.lastClusterTimecode}),this.emit("cue",{CueTrack:l,CueClusterPosition:this.lastClusterPosition,CueTime:u})}this.last2SimpleBlockVideoTrackTimecode=[this.last2SimpleBlockVideoTrackTimecode[1],s]}else if(2===this.trackTypes[l]){if(!this.firstAudioBlockRead&&(this.firstAudioBlockRead=!0,"audio"===this.trackInfo.type)){u=this.lastClusterTimecode+s;this.cues.push({CueTrack:l,CueClusterPosition:this.lastClusterPosition,CueTime:u}),this.emit("cue_info",{CueTrack:l,CueClusterPosition:this.lastClusterPosition,CueTime:this.lastClusterTimecode}),this.emit("cue",{CueTrack:l,CueClusterPosition:this.lastClusterPosition,CueTime:u})}this.last2SimpleBlockAudioTrackTimecode=[this.last2SimpleBlockAudioTrackTimecode[1],s]}this.use_duration_every_simpleblock&&this.emit("duration",{timecodeScale:this.timecodeScale,duration:this.duration}),this.use_webp&&c.forEach((function(e){if("9d012a"===e.slice(3,6).toString("hex")){var n=a.VP8BitStreamToRiffWebPBuffer(e),i=new Blob([n],{type:"image/webp"}),r=t.duration;t.emit("webp",{currentTime:r,webp:i})}}))}else"m"===e.type&&"Cluster"===e.name&&!1===e.isEnd?(this.firstVideoBlockRead=!1,this.firstAudioBlockRead=!1,this.emit_segment_info(),this.emit("cluster_ptr",e.tagStart),this.lastClusterPosition=e.tagStart):"u"===e.type&&"Timecode"===e.name?this.lastClusterTimecode=e.value:"u"===e.type&&"TimecodeScale"===e.name?this.timecodeScale=e.value:"m"===e.type&&"TrackEntry"===e.name?e.isEnd?(this.trackTypes[this.currentTrack.TrackNumber]=this.currentTrack.TrackType,this.trackDefaultDuration[this.currentTrack.TrackNumber]=this.currentTrack.DefaultDuration,this.trackCodecDelay[this.currentTrack.TrackNumber]=this.currentTrack.CodecDelay):this.currentTrack={TrackNumber:-1,TrackType:-1,DefaultDuration:null,CodecDelay:null}:"u"===e.type&&"TrackType"===e.name?this.currentTrack.TrackType=e.value:"u"===e.type&&"TrackNumber"===e.name?this.currentTrack.TrackNumber=e.value:"u"===e.type&&"CodecDelay"===e.name?this.currentTrack.CodecDelay=e.value:"u"===e.type&&"DefaultDuration"===e.name?this.drop_default_duration?(console.warn("DefaultDuration detected!, remove it"),n=!0):this.currentTrack.DefaultDuration=e.value:"unknown"===e.name&&console.warn(e);!this.metadataloaded&&e.dataEnd>0&&(this.metadataSize=e.dataEnd),n||this.chunks.push(e),this.logging&&this.put(e)}},Object.defineProperty(t.prototype,"duration",{get:function(){if("nothing"===this.trackInfo.type)return console.warn("no video, no audio track"),0;var e=0,t=0,n=0,i=this.trackDefaultDuration[this.trackInfo.trackNumber];if("number"==typeof i)e=i;else if("both"===this.trackInfo.type)this.last2SimpleBlockAudioTrackTimecode[1]>this.last2SimpleBlockVideoTrackTimecode[1]?(e=(this.last2SimpleBlockAudioTrackTimecode[1]-this.last2SimpleBlockAudioTrackTimecode[0])*this.timecodeScale,"number"==typeof(r=this.trackCodecDelay[this.trackTypes.indexOf(2)])&&(t=r),n=this.last2SimpleBlockAudioTrackTimecode[1]):(e=(this.last2SimpleBlockVideoTrackTimecode[1]-this.last2SimpleBlockVideoTrackTimecode[0])*this.timecodeScale,"number"==typeof(r=this.trackCodecDelay[this.trackTypes.indexOf(1)])&&(t=r),n=this.last2SimpleBlockVideoTrackTimecode[1]);else if("video"===this.trackInfo.type){e=(this.last2SimpleBlockVideoTrackTimecode[1]-this.last2SimpleBlockVideoTrackTimecode[0])*this.timecodeScale,"number"==typeof(r=this.trackCodecDelay[this.trackInfo.trackNumber])&&(t=r),n=this.last2SimpleBlockVideoTrackTimecode[1]}else if("audio"===this.trackInfo.type){var r;e=(this.last2SimpleBlockAudioTrackTimecode[1]-this.last2SimpleBlockAudioTrackTimecode[0])*this.timecodeScale,"number"==typeof(r=this.trackCodecDelay[this.trackInfo.trackNumber])&&(t=r),n=this.last2SimpleBlockAudioTrackTimecode[1]}var o=((this.lastClusterTimecode+n)*this.timecodeScale+e-t)/this.timecodeScale;return Math.floor(o)},enumerable:!1,configurable:!0}),t.prototype.addListener=function(t,n){return e.prototype.addListener.call(this,t,n)},t.prototype.put=function(e){this.hasLoggingStarted||(this.hasLoggingStarted=!0,this.logging&&this.logGroup&&console.groupCollapsed(this.logGroup)),"m"===e.type?e.isEnd?console.groupEnd():console.group(e.name+":"+e.tagStart):"b"===e.type?console.log(e.name,e.type):console.log(e.name,e.tagStart,e.type,e.value)},t}(o.EventEmitter);t.default=s},4370:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.byEbmlID=void 0,t.byEbmlID={128:{name:"ChapterDisplay",level:4,type:"m",multiple:!0,minver:1,webm:!0,description:"Contains all possible strings to use for the chapter display."},131:{name:"TrackType",level:3,type:"u",mandatory:!0,minver:1,range:"1-254",description:"A set of track types coded on 8 bits (1: video, 2: audio, 3: complex, 0x10: logo, 0x11: subtitle, 0x12: buttons, 0x20: control)."},133:{name:"ChapString",cppname:"ChapterString",level:5,type:"8",mandatory:!0,minver:1,webm:!0,description:"Contains the string to use as the chapter atom."},134:{name:"CodecID",level:3,type:"s",mandatory:!0,minver:1,description:"An ID corresponding to the codec, see the codec page for more info."},136:{name:"FlagDefault",cppname:"TrackFlagDefault",level:3,type:"u",mandatory:!0,minver:1,default:1,range:"0-1",description:"Set if that track (audio, video or subs) SHOULD be active if no language found matches the user preference. (1 bit)"},137:{name:"ChapterTrackNumber",level:5,type:"u",mandatory:!0,multiple:!0,minver:1,webm:!1,range:"not 0",description:"UID of the Track to apply this chapter too. In the absense of a control track, choosing this chapter will select the listed Tracks and deselect unlisted tracks. Absense of this element indicates that the Chapter should be applied to any currently used Tracks."},145:{name:"ChapterTimeStart",level:4,type:"u",mandatory:!0,minver:1,webm:!0,description:"Timestamp of the start of Chapter (not scaled)."},146:{name:"ChapterTimeEnd",level:4,type:"u",minver:1,webm:!1,description:"Timestamp of the end of Chapter (timestamp excluded, not scaled)."},150:{name:"CueRefTime",level:5,type:"u",mandatory:!0,minver:2,webm:!1,description:"Timestamp of the referenced Block."},151:{name:"CueRefCluster",level:5,type:"u",mandatory:!0,webm:!1,description:"The Position of the Cluster containing the referenced Block."},152:{name:"ChapterFlagHidden",level:4,type:"u",mandatory:!0,minver:1,webm:!1,default:0,range:"0-1",description:"If a chapter is hidden (1), it should not be available to the user interface (but still to Control Tracks; see flag notes). (1 bit)"},16980:{name:"ContentCompAlgo",level:6,type:"u",mandatory:!0,minver:1,webm:!1,default:0,description:"The compression algorithm used. Algorithms that have been specified so far are: 0 - zlib, 3 - Header Stripping"},16981:{name:"ContentCompSettings",level:6,type:"b",minver:1,webm:!1,description:"Settings that might be needed by the decompressor. For Header Stripping (ContentCompAlgo=3), the bytes that were removed from the beggining of each frames of the track."},17026:{name:"DocType",level:1,type:"s",mandatory:!0,default:"matroska",minver:1,description:"A string that describes the type of document that follows this EBML header. 'matroska' in our case or 'webm' for webm files."},17029:{name:"DocTypeReadVersion",level:1,type:"u",mandatory:!0,default:1,minver:1,description:"The minimum DocType version an interpreter has to support to read this file."},17030:{name:"EBMLVersion",level:1,type:"u",mandatory:!0,default:1,minver:1,description:"The version of EBML parser used to create the file."},17031:{name:"DocTypeVersion",level:1,type:"u",mandatory:!0,default:1,minver:1,description:"The version of DocType interpreter used to create the file."},17476:{name:"SegmentFamily",level:2,type:"b",multiple:!0,minver:1,webm:!1,bytesize:16,description:"A randomly generated unique ID that all segments related to each other must use (128 bits)."},17505:{name:"DateUTC",level:2,type:"d",minver:1,description:"Date of the origin of timestamp (value 0), i.e. production date."},17540:{name:"TagDefault",level:4,type:"u",mandatory:!0,minver:1,webm:!1,default:1,range:"0-1",description:"Indication to know if this is the default/original language to use for the given tag. (1 bit)"},17541:{name:"TagBinary",level:4,type:"b",minver:1,webm:!1,description:"The values of the Tag if it is binary. Note that this cannot be used in the same SimpleTag as TagString."},17543:{name:"TagString",level:4,type:"8",minver:1,webm:!1,description:"The value of the Element."},17545:{name:"Duration",level:2,type:"f",minver:1,range:"> 0",description:"Duration of the segment (based on TimecodeScale)."},17816:{name:"ChapterFlagEnabled",level:4,type:"u",mandatory:!0,minver:1,webm:!1,default:1,range:"0-1",description:"Specify wether the chapter is enabled. It can be enabled/disabled by a Control Track. When disabled, the movie should skip all the content between the TimeStart and TimeEnd of this chapter (see flag notes). (1 bit)"},18016:{name:"FileMimeType",level:3,type:"s",mandatory:!0,minver:1,webm:!1,description:"MIME type of the file."},18017:{name:"FileUsedStartTime",level:3,type:"u",divx:!0,description:"DivX font extension"},18018:{name:"FileUsedEndTime",level:3,type:"u",divx:!0,description:"DivX font extension"},18037:{name:"FileReferral",level:3,type:"b",webm:!1,description:"A binary value that a track/codec can refer to when the attachment is needed."},20529:{name:"ContentEncodingOrder",level:5,type:"u",mandatory:!0,minver:1,webm:!1,default:0,description:"Tells when this modification was used during encoding/muxing starting with 0 and counting upwards. The decoder/demuxer has to start with the highest order number it finds and work its way down. This value has to be unique over all ContentEncodingOrder elements in the segment."},20530:{name:"ContentEncodingScope",level:5,type:"u",mandatory:!0,minver:1,webm:!1,default:1,range:"not 0",description:"A bit field that describes which elements have been modified in this way. Values (big endian) can be OR'ed. Possible values: 1 - all frame contents, 2 - the track's private data, 4 - the next ContentEncoding (next ContentEncodingOrder. Either the data inside ContentCompression and/or ContentEncryption)"},20531:{name:"ContentEncodingType",level:5,type:"u",mandatory:!0,minver:1,webm:!1,default:0,description:"A value describing what kind of transformation has been done. Possible values: 0 - compression, 1 - encryption"},20532:{name:"ContentCompression",level:5,type:"m",minver:1,webm:!1,description:"Settings describing the compression used. Must be present if the value of ContentEncodingType is 0 and absent otherwise. Each block must be decompressable even if no previous block is available in order not to prevent seeking."},20533:{name:"ContentEncryption",level:5,type:"m",minver:1,webm:!1,description:"Settings describing the encryption used. Must be present if the value of ContentEncodingType is 1 and absent otherwise."},21368:{name:"CueBlockNumber",level:4,type:"u",minver:1,default:1,range:"not 0",description:"Number of the Block in the specified Cluster."},22100:{name:"ChapterStringUID",level:4,type:"8",mandatory:!1,minver:3,webm:!0,description:"A unique string ID to identify the Chapter. Use for WebVTT cue identifier storage."},22337:{name:"WritingApp",level:2,type:"8",mandatory:!0,minver:1,description:'Writing application ("mkvmerge-0.3.3").'},22612:{name:"SilentTracks",cppname:"ClusterSilentTracks",level:2,type:"m",minver:1,webm:!1,description:"The list of tracks that are not used in that part of the stream. It is useful when using overlay tracks on seeking. Then you should decide what track to use."},25152:{name:"ContentEncoding",level:4,type:"m",mandatory:!0,multiple:!0,minver:1,webm:!1,description:"Settings for one content encoding like compression or encryption."},25188:{name:"BitDepth",cppname:"AudioBitDepth",level:4,type:"u",minver:1,range:"not 0",description:"Bits per sample, mostly used for PCM."},25906:{name:"SignedElement",level:3,type:"b",multiple:!0,webm:!1,description:"An element ID whose data will be used to compute the signature."},26148:{name:"TrackTranslate",level:3,type:"m",multiple:!0,minver:1,webm:!1,description:"The track identification for the given Chapter Codec."},26897:{name:"ChapProcessCommand",cppname:"ChapterProcessCommand",level:5,type:"m",multiple:!0,minver:1,webm:!1,description:"Contains all the commands associated to the Atom."},26914:{name:"ChapProcessTime",cppname:"ChapterProcessTime",level:6,type:"u",mandatory:!0,minver:1,webm:!1,description:"Defines when the process command should be handled (0: during the whole chapter, 1: before starting playback, 2: after playback of the chapter)."},26916:{name:"ChapterTranslate",level:2,type:"m",multiple:!0,minver:1,webm:!1,description:"A tuple of corresponding ID used by chapter codecs to represent this segment."},26931:{name:"ChapProcessData",cppname:"ChapterProcessData",level:6,type:"b",mandatory:!0,minver:1,webm:!1,description:"Contains the command information. The data should be interpreted depending on the ChapProcessCodecID value. For ChapProcessCodecID = 1, the data correspond to the binary DVD cell pre/post commands."},26948:{name:"ChapProcess",cppname:"ChapterProcess",level:4,type:"m",multiple:!0,minver:1,webm:!1,description:"Contains all the commands associated to the Atom."},26965:{name:"ChapProcessCodecID",cppname:"ChapterProcessCodecID",level:5,type:"u",mandatory:!0,minver:1,webm:!1,default:0,description:"Contains the type of the codec used for the processing. A value of 0 means native Matroska processing (to be defined), a value of 1 means the DVD command set is used. More codec IDs can be added later."},29555:{name:"Tag",level:2,type:"m",mandatory:!0,multiple:!0,minver:1,webm:!1,description:"Element containing elements specific to Tracks/Chapters."},29572:{name:"SegmentFilename",level:2,type:"8",minver:1,webm:!1,description:"A filename corresponding to this segment."},29766:{name:"AttachmentLink",cppname:"TrackAttachmentLink",level:3,type:"u",minver:1,webm:!1,range:"not 0",description:"The UID of an attachment that is used by this codec."},2459272:{name:"CodecName",level:3,type:"8",minver:1,description:"A human-readable string specifying the codec."},408125543:{name:"Segment",level:"0",type:"m",mandatory:!0,multiple:!0,minver:1,description:"This element contains all other top-level (level 1) elements. Typically a Matroska file is composed of 1 segment."},17530:{name:"TagLanguage",level:4,type:"s",mandatory:!0,minver:1,webm:!1,default:"und",description:"Specifies the language of the tag specified, in the Matroska languages form."},17827:{name:"TagName",level:4,type:"8",mandatory:!0,minver:1,webm:!1,description:"The name of the Tag that is going to be stored."},26568:{name:"SimpleTag",cppname:"TagSimple",level:3,recursive:"1",type:"m",mandatory:!0,multiple:!0,minver:1,webm:!1,description:"Contains general information about the target."},25542:{name:"TagAttachmentUID",level:4,type:"u",multiple:!0,minver:1,webm:!1,default:0,description:"A unique ID to identify the Attachment(s) the tags belong to. If the value is 0 at this level, the tags apply to all the attachments in the Segment."},25540:{name:"TagChapterUID",level:4,type:"u",multiple:!0,minver:1,webm:!1,default:0,description:"A unique ID to identify the Chapter(s) the tags belong to. If the value is 0 at this level, the tags apply to all chapters in the Segment."},25545:{name:"TagEditionUID",level:4,type:"u",multiple:!0,minver:1,webm:!1,default:0,description:"A unique ID to identify the EditionEntry(s) the tags belong to. If the value is 0 at this level, the tags apply to all editions in the Segment."},25541:{name:"TagTrackUID",level:4,type:"u",multiple:!0,minver:1,webm:!1,default:0,description:"A unique ID to identify the Track(s) the tags belong to. If the value is 0 at this level, the tags apply to all tracks in the Segment."},25546:{name:"TargetType",cppname:"TagTargetType",level:4,type:"s",minver:1,webm:!1,strong:"informational",description:'An string that can be used to display the logical level of the target like "ALBUM", "TRACK", "MOVIE", "CHAPTER", etc (see TargetType).'},26826:{name:"TargetTypeValue",cppname:"TagTargetTypeValue",level:4,type:"u",minver:1,webm:!1,default:50,description:"A number to indicate the logical level of the target (see TargetType)."},25536:{name:"Targets",cppname:"TagTargets",level:3,type:"m",mandatory:!0,minver:1,webm:!1,description:"Contain all UIDs where the specified meta data apply. It is empty to describe everything in the segment."},307544935:{name:"Tags",level:1,type:"m",multiple:!0,minver:1,webm:!1,description:"Element containing elements specific to Tracks/Chapters. A list of valid tags can be found here."},17677:{name:"ChapProcessPrivate",cppname:"ChapterProcessPrivate",level:5,type:"b",minver:1,webm:!1,description:'Some optional data attached to the ChapProcessCodecID information. For ChapProcessCodecID = 1, it is the "DVD level" equivalent.'},17278:{name:"ChapCountry",cppname:"ChapterCountry",level:5,type:"s",multiple:!0,minver:1,webm:!1,description:"The countries corresponding to the string, same 2 octets as in Internet domains."},17276:{name:"ChapLanguage",cppname:"ChapterLanguage",level:5,type:"s",mandatory:!0,multiple:!0,minver:1,webm:!0,default:"eng",description:"The languages corresponding to the string, in the bibliographic ISO-639-2 form."},143:{name:"ChapterTrack",level:4,type:"m",minver:1,webm:!1,description:"List of tracks on which the chapter applies. If this element is not present, all tracks apply"},25539:{name:"ChapterPhysicalEquiv",level:4,type:"u",minver:1,webm:!1,description:'Specify the physical equivalent of this ChapterAtom like "DVD" (60) or "SIDE" (50), see complete list of values.'},28348:{name:"ChapterSegmentEditionUID",level:4,type:"u",minver:1,webm:!1,range:"not 0",description:"The EditionUID to play from the segment linked in ChapterSegmentUID."},28263:{name:"ChapterSegmentUID",level:4,type:"b",minver:1,webm:!1,range:">0",bytesize:16,description:"A segment to play in place of this chapter. Edition ChapterSegmentEditionUID should be used for this segment, otherwise no edition is used."},29636:{name:"ChapterUID",level:4,type:"u",mandatory:!0,minver:1,webm:!0,range:"not 0",description:"A unique ID to identify the Chapter."},182:{name:"ChapterAtom",level:3,recursive:"1",type:"m",mandatory:!0,multiple:!0,minver:1,webm:!0,description:"Contains the atom information to use as the chapter atom (apply to all tracks)."},17885:{name:"EditionFlagOrdered",level:3,type:"u",minver:1,webm:!1,default:0,range:"0-1",description:"Specify if the chapters can be defined multiple times and the order to play them is enforced. (1 bit)"},17883:{name:"EditionFlagDefault",level:3,type:"u",mandatory:!0,minver:1,webm:!1,default:0,range:"0-1",description:"If a flag is set (1) the edition should be used as the default one. (1 bit)"},17853:{name:"EditionFlagHidden",level:3,type:"u",mandatory:!0,minver:1,webm:!1,default:0,range:"0-1",description:"If an edition is hidden (1), it should not be available to the user interface (but still to Control Tracks; see flag notes). (1 bit)"},17852:{name:"EditionUID",level:3,type:"u",minver:1,webm:!1,range:"not 0",description:"A unique ID to identify the edition. It's useful for tagging an edition."},17849:{name:"EditionEntry",level:2,type:"m",mandatory:!0,multiple:!0,minver:1,webm:!0,description:"Contains all information about a segment edition."},272869232:{name:"Chapters",level:1,type:"m",minver:1,webm:!0,description:"A system to define basic menus and partition data. For more detailed information, look at the Chapters Explanation."},18094:{name:"FileUID",level:3,type:"u",mandatory:!0,minver:1,webm:!1,range:"not 0",description:"Unique ID representing the file, as random as possible."},18012:{name:"FileData",level:3,type:"b",mandatory:!0,minver:1,webm:!1,description:"The data of the file."},18030:{name:"FileName",level:3,type:"8",mandatory:!0,minver:1,webm:!1,description:"Filename of the attached file."},18046:{name:"FileDescription",level:3,type:"8",minver:1,webm:!1,description:"A human-friendly name for the attached file."},24999:{name:"AttachedFile",level:2,type:"m",mandatory:!0,multiple:!0,minver:1,webm:!1,description:"An attached file."},423732329:{name:"Attachments",level:1,type:"m",minver:1,webm:!1,description:"Contain attached files."},235:{name:"CueRefCodecState",level:5,type:"u",webm:!1,default:0,description:"The position of the Codec State corresponding to this referenced element. 0 means that the data is taken from the initial Track Entry."},21343:{name:"CueRefNumber",level:5,type:"u",webm:!1,default:1,range:"not 0",description:"Number of the referenced Block of Track X in the specified Cluster."},219:{name:"CueReference",level:4,type:"m",multiple:!0,minver:2,webm:!1,description:"The Clusters containing the required referenced Blocks."},234:{name:"CueCodecState",level:4,type:"u",minver:2,webm:!1,default:0,description:"The position of the Codec State corresponding to this Cue element. 0 means that the data is taken from the initial Track Entry."},178:{name:"CueDuration",level:4,type:"u",mandatory:!1,minver:4,webm:!1,description:"The duration of the block according to the segment time base. If missing the track's DefaultDuration does not apply and no duration information is available in terms of the cues."},240:{name:"CueRelativePosition",level:4,type:"u",mandatory:!1,minver:4,webm:!1,description:"The relative position of the referenced block inside the cluster with 0 being the first possible position for an element inside that cluster.",position:"clusterRelative"},241:{name:"CueClusterPosition",level:4,type:"u",mandatory:!0,minver:1,description:"The position of the Cluster containing the required Block.",position:"segment"},247:{name:"CueTrack",level:4,type:"u",mandatory:!0,minver:1,range:"not 0",description:"The track for which a position is given."},183:{name:"CueTrackPositions",level:3,type:"m",mandatory:!0,multiple:!0,minver:1,description:"Contain positions for different tracks corresponding to the timestamp."},179:{name:"CueTime",level:3,type:"u",mandatory:!0,minver:1,description:"Absolute timestamp according to the segment time base."},187:{name:"CuePoint",level:2,type:"m",mandatory:!0,multiple:!0,minver:1,description:"Contains all information relative to a seek point in the segment."},475249515:{name:"Cues",level:1,type:"m",minver:1,description:'A top-level element to speed seeking access. All entries are local to the segment. Should be mandatory for non "live" streams.'},18406:{name:"ContentSigHashAlgo",level:6,type:"u",minver:1,webm:!1,default:0,description:"The hash algorithm used for the signature. A value of '0' means that the contents have not been signed but only encrypted. Predefined values: 1 - SHA1-160 2 - MD5"},18405:{name:"ContentSigAlgo",level:6,type:"u",minver:1,webm:!1,default:0,description:"The algorithm used for the signature. A value of '0' means that the contents have not been signed but only encrypted. Predefined values: 1 - RSA"},18404:{name:"ContentSigKeyID",level:6,type:"b",minver:1,webm:!1,description:"This is the ID of the private key the data was signed with."},18403:{name:"ContentSignature",level:6,type:"b",minver:1,webm:!1,description:"A cryptographic signature of the contents."},18402:{name:"ContentEncKeyID",level:6,type:"b",minver:1,webm:!1,description:"For public key algorithms this is the ID of the public key the the data was encrypted with."},18401:{name:"ContentEncAlgo",level:6,type:"u",minver:1,webm:!1,default:0,description:"The encryption algorithm used. The value '0' means that the contents have not been encrypted but only signed. Predefined values: 1 - DES, 2 - 3DES, 3 - Twofish, 4 - Blowfish, 5 - AES"},28032:{name:"ContentEncodings",level:3,type:"m",minver:1,webm:!1,description:"Settings for several content encoding mechanisms like compression or encryption."},196:{name:"TrickMasterTrackSegmentUID",level:3,type:"b",divx:!0,bytesize:16,description:"DivX trick track extenstions"},199:{name:"TrickMasterTrackUID",level:3,type:"u",divx:!0,description:"DivX trick track extenstions"},198:{name:"TrickTrackFlag",level:3,type:"u",divx:!0,default:0,description:"DivX trick track extenstions"},193:{name:"TrickTrackSegmentUID",level:3,type:"b",divx:!0,bytesize:16,description:"DivX trick track extenstions"},192:{name:"TrickTrackUID",level:3,type:"u",divx:!0,description:"DivX trick track extenstions"},237:{name:"TrackJoinUID",level:5,type:"u",mandatory:!0,multiple:!0,minver:3,webm:!1,range:"not 0",description:"The trackUID number of a track whose blocks are used to create this virtual track."},233:{name:"TrackJoinBlocks",level:4,type:"m",minver:3,webm:!1,description:"Contains the list of all tracks whose Blocks need to be combined to create this virtual track"},230:{name:"TrackPlaneType",level:6,type:"u",mandatory:!0,minver:3,webm:!1,description:"The kind of plane this track corresponds to (0: left eye, 1: right eye, 2: background)."},229:{name:"TrackPlaneUID",level:6,type:"u",mandatory:!0,minver:3,webm:!1,range:"not 0",description:"The trackUID number of the track representing the plane."},228:{name:"TrackPlane",level:5,type:"m",mandatory:!0,multiple:!0,minver:3,webm:!1,description:"Contains a video plane track that need to be combined to create this 3D track"},227:{name:"TrackCombinePlanes",level:4,type:"m",minver:3,webm:!1,description:"Contains the list of all video plane tracks that need to be combined to create this 3D track"},226:{name:"TrackOperation",level:3,type:"m",minver:3,webm:!1,description:"Operation that needs to be applied on tracks to create this virtual track. For more details look at the Specification Notes on the subject."},32123:{name:"ChannelPositions",cppname:"AudioPosition",level:4,type:"b",webm:!1,description:"Table of horizontal angles for each successive channel, see appendix."},159:{name:"Channels",cppname:"AudioChannels",level:4,type:"u",mandatory:!0,minver:1,default:1,range:"not 0",description:"Numbers of channels in the track."},30901:{name:"OutputSamplingFrequency",cppname:"AudioOutputSamplingFreq",level:4,type:"f",minver:1,default:"Sampling Frequency",range:"> 0",description:"Real output sampling frequency in Hz (used for SBR techniques)."},181:{name:"SamplingFrequency",cppname:"AudioSamplingFreq",level:4,type:"f",mandatory:!0,minver:1,default:8e3,range:"> 0",description:"Sampling frequency in Hz."},225:{name:"Audio",cppname:"TrackAudio",level:3,type:"m",minver:1,description:"Audio settings."},2327523:{name:"FrameRate",cppname:"VideoFrameRate",level:4,type:"f",range:"> 0",strong:"Informational",description:"Number of frames per second. only."},3126563:{name:"GammaValue",cppname:"VideoGamma",level:4,type:"f",webm:!1,range:"> 0",description:"Gamma Value."},3061028:{name:"ColourSpace",cppname:"VideoColourSpace",level:4,type:"b",minver:1,webm:!1,bytesize:4,description:"Same value as in AVI (32 bits)."},21683:{name:"AspectRatioType",cppname:"VideoAspectRatio",level:4,type:"u",minver:1,default:0,description:"Specify the possible modifications to the aspect ratio (0: free resizing, 1: keep aspect ratio, 2: fixed)."},21682:{name:"DisplayUnit",cppname:"VideoDisplayUnit",level:4,type:"u",minver:1,default:0,description:"How DisplayWidth & DisplayHeight should be interpreted (0: pixels, 1: centimeters, 2: inches, 3: Display Aspect Ratio)."},21690:{name:"DisplayHeight",cppname:"VideoDisplayHeight",level:4,type:"u",minver:1,default:"PixelHeight",range:"not 0",description:"Height of the video frames to display. The default value is only valid when DisplayUnit is 0."},21680:{name:"DisplayWidth",cppname:"VideoDisplayWidth",level:4,type:"u",minver:1,default:"PixelWidth",range:"not 0",description:"Width of the video frames to display. The default value is only valid when DisplayUnit is 0."},21725:{name:"PixelCropRight",cppname:"VideoPixelCropRight",level:4,type:"u",minver:1,default:0,description:"The number of video pixels to remove on the right of the image."},21708:{name:"PixelCropLeft",cppname:"VideoPixelCropLeft",level:4,type:"u",minver:1,default:0,description:"The number of video pixels to remove on the left of the image."},21691:{name:"PixelCropTop",cppname:"VideoPixelCropTop",level:4,type:"u",minver:1,default:0,description:"The number of video pixels to remove at the top of the image."},21674:{name:"PixelCropBottom",cppname:"VideoPixelCropBottom",level:4,type:"u",minver:1,default:0,description:"The number of video pixels to remove at the bottom of the image (for HDTV content)."},186:{name:"PixelHeight",cppname:"VideoPixelHeight",level:4,type:"u",mandatory:!0,minver:1,range:"not 0",description:"Height of the encoded video frames in pixels."},176:{name:"PixelWidth",cppname:"VideoPixelWidth",level:4,type:"u",mandatory:!0,minver:1,range:"not 0",description:"Width of the encoded video frames in pixels."},21433:{name:"OldStereoMode",level:4,type:"u",maxver:"0",webm:!1,divx:!1,description:"DEPRECATED, DO NOT USE. Bogus StereoMode value used in old versions of libmatroska. (0: mono, 1: right eye, 2: left eye, 3: both eyes)."},21440:{name:"AlphaMode",cppname:"VideoAlphaMode",level:4,type:"u",minver:3,webm:!0,default:0,description:"Alpha Video Mode. Presence of this element indicates that the BlockAdditional element could contain Alpha data."},21432:{name:"StereoMode",cppname:"VideoStereoMode",level:4,type:"u",minver:3,webm:!0,default:0,description:"Stereo-3D video mode (0: mono, 1: side by side (left eye is first), 2: top-bottom (right eye is first), 3: top-bottom (left eye is first), 4: checkboard (right is first), 5: checkboard (left is first), 6: row interleaved (right is first), 7: row interleaved (left is first), 8: column interleaved (right is first), 9: column interleaved (left is first), 10: anaglyph (cyan/red), 11: side by side (right eye is first), 12: anaglyph (green/magenta), 13 both eyes laced in one Block (left eye is first), 14 both eyes laced in one Block (right eye is first)) . There are some more details on 3D support in the Specification Notes."},154:{name:"FlagInterlaced",cppname:"VideoFlagInterlaced",level:4,type:"u",mandatory:!0,minver:2,webm:!0,default:0,range:"0-1",description:"Set if the video is interlaced. (1 bit)"},224:{name:"Video",cppname:"TrackVideo",level:3,type:"m",minver:1,description:"Video settings."},26277:{name:"TrackTranslateTrackID",level:4,type:"b",mandatory:!0,minver:1,webm:!1,description:"The binary value used to represent this track in the chapter codec data. The format depends on the ChapProcessCodecID used."},26303:{name:"TrackTranslateCodec",level:4,type:"u",mandatory:!0,minver:1,webm:!1,description:"The chapter codec using this ID (0: Matroska Script, 1: DVD-menu)."},26364:{name:"TrackTranslateEditionUID",level:4,type:"u",multiple:!0,minver:1,webm:!1,description:"Specify an edition UID on which this translation applies. When not specified, it means for all editions found in the segment."},22203:{name:"SeekPreRoll",level:3,type:"u",mandatory:!0,multiple:!1,default:0,minver:4,webm:!0,description:"After a discontinuity, SeekPreRoll is the duration in nanoseconds of the data the decoder must decode before the decoded data is valid."},22186:{name:"CodecDelay",level:3,type:"u",multiple:!1,default:0,minver:4,webm:!0,description:"CodecDelay is The codec-built-in delay in nanoseconds. This value must be subtracted from each block timestamp in order to get the actual timestamp. The value should be small so the muxing of tracks with the same actual timestamp are in the same Cluster."},28587:{name:"TrackOverlay",level:3,type:"u",multiple:!0,minver:1,webm:!1,description:"Specify that this track is an overlay track for the Track specified (in the u-integer). That means when this track has a gap (see SilentTracks) the overlay track should be used instead. The order of multiple TrackOverlay matters, the first one is the one that should be used. If not found it should be the second, etc."},170:{name:"CodecDecodeAll",level:3,type:"u",mandatory:!0,minver:2,webm:!1,default:1,range:"0-1",description:"The codec can decode potentially damaged data (1 bit)."},2536e3:{name:"CodecDownloadURL",level:3,type:"s",multiple:!0,webm:!1,description:"A URL to download about the codec used."},3883072:{name:"CodecInfoURL",level:3,type:"s",multiple:!0,webm:!1,description:"A URL to find information about the codec used."},3839639:{name:"CodecSettings",level:3,type:"8",webm:!1,description:"A string describing the encoding setting used."},25506:{name:"CodecPrivate",level:3,type:"b",minver:1,description:"Private data only known to the codec."},2274716:{name:"Language",cppname:"TrackLanguage",level:3,type:"s",minver:1,default:"eng",description:"Specifies the language of the track in the Matroska languages form."},21358:{name:"Name",cppname:"TrackName",level:3,type:"8",minver:1,description:"A human-readable track name."},21998:{name:"MaxBlockAdditionID",level:3,type:"u",mandatory:!0,minver:1,webm:!1,default:0,description:"The maximum value of BlockAdditions for this track."},21375:{name:"TrackOffset",level:3,type:"i",webm:!1,default:0,description:"A value to add to the Block's Timestamp. This can be used to adjust the playback offset of a track."},2306383:{name:"TrackTimecodeScale",level:3,type:"f",mandatory:!0,minver:1,maxver:"3",webm:!1,default:1,range:"> 0",description:"DEPRECATED, DO NOT USE. The scale to apply on this track to work at normal speed in relation with other tracks (mostly used to adjust video speed when the audio length differs)."},2313850:{name:"DefaultDecodedFieldDuration",cppname:"TrackDefaultDecodedFieldDuration",level:3,type:"u",minver:4,range:"not 0",description:"The period in nanoseconds (not scaled by TimcodeScale)\nbetween two successive fields at the output of the decoding process (see the notes)"},2352003:{name:"DefaultDuration",cppname:"TrackDefaultDuration",level:3,type:"u",minver:1,range:"not 0",description:"Number of nanoseconds (not scaled via TimecodeScale) per frame ('frame' in the Matroska sense -- one element put into a (Simple)Block)."},28152:{name:"MaxCache",cppname:"TrackMaxCache",level:3,type:"u",minver:1,webm:!1,description:"The maximum cache size required to store referenced frames in and the current frame. 0 means no cache is needed."},28135:{name:"MinCache",cppname:"TrackMinCache",level:3,type:"u",mandatory:!0,minver:1,webm:!1,default:0,description:"The minimum number of frames a player should be able to cache during playback. If set to 0, the reference pseudo-cache system is not used."},156:{name:"FlagLacing",cppname:"TrackFlagLacing",level:3,type:"u",mandatory:!0,minver:1,default:1,range:"0-1",description:"Set if the track may contain blocks using lacing. (1 bit)"},21930:{name:"FlagForced",cppname:"TrackFlagForced",level:3,type:"u",mandatory:!0,minver:1,default:0,range:"0-1",description:"Set if that track MUST be active during playback. There can be many forced track for a kind (audio, video or subs), the player should select the one which language matches the user preference or the default + forced track. Overlay MAY happen between a forced and non-forced track of the same kind. (1 bit)"},185:{name:"FlagEnabled",cppname:"TrackFlagEnabled",level:3,type:"u",mandatory:!0,minver:2,webm:!0,default:1,range:"0-1",description:"Set if the track is usable. (1 bit)"},29637:{name:"TrackUID",level:3,type:"u",mandatory:!0,minver:1,range:"not 0",description:"A unique ID to identify the Track. This should be kept the same when making a direct stream copy of the Track to another file."},215:{name:"TrackNumber",level:3,type:"u",mandatory:!0,minver:1,range:"not 0",description:"The track number as used in the Block Header (using more than 127 tracks is not encouraged, though the design allows an unlimited number)."},174:{name:"TrackEntry",level:2,type:"m",mandatory:!0,multiple:!0,minver:1,description:"Describes a track with all elements."},374648427:{name:"Tracks",level:1,type:"m",multiple:!0,minver:1,description:"A top-level block of information with many tracks described."},175:{name:"EncryptedBlock",level:2,type:"b",multiple:!0,webm:!1,description:"Similar to EncryptedBlock Structure)"},202:{name:"ReferenceTimeCode",level:4,type:"u",multiple:!1,mandatory:!0,minver:0,webm:!1,divx:!0,description:"DivX trick track extenstions"},201:{name:"ReferenceOffset",level:4,type:"u",multiple:!1,mandatory:!0,minver:0,webm:!1,divx:!0,description:"DivX trick track extenstions"},200:{name:"ReferenceFrame",level:3,type:"m",multiple:!1,minver:0,webm:!1,divx:!0,description:"DivX trick track extenstions"},207:{name:"SliceDuration",level:5,type:"u",default:0,description:"The (scaled) duration to apply to the element."},206:{name:"Delay",cppname:"SliceDelay",level:5,type:"u",default:0,description:"The (scaled) delay to apply to the element."},203:{name:"BlockAdditionID",cppname:"SliceBlockAddID",level:5,type:"u",default:0,description:"The ID of the BlockAdditional element (0 is the main Block)."},205:{name:"FrameNumber",cppname:"SliceFrameNumber",level:5,type:"u",default:0,description:"The number of the frame to generate from this lace with this delay (allow you to generate many frames from the same Block/Frame)."},204:{name:"LaceNumber",cppname:"SliceLaceNumber",level:5,type:"u",minver:1,default:0,divx:!1,description:"The reverse number of the frame in the lace (0 is the last frame, 1 is the next to last, etc). While there are a few files in the wild with this element, it is no longer in use and has been deprecated. Being able to interpret this element is not required for playback."},232:{name:"TimeSlice",level:4,type:"m",multiple:!0,minver:1,divx:!1,description:"Contains extra time information about the data contained in the Block. While there are a few files in the wild with this element, it is no longer in use and has been deprecated. Being able to interpret this element is not required for playback."},142:{name:"Slices",level:3,type:"m",minver:1,divx:!1,description:"Contains slices description."},30114:{name:"DiscardPadding",level:3,type:"i",minver:4,webm:!0,description:"Duration in nanoseconds of the silent data added to the Block (padding at the end of the Block for positive value, at the beginning of the Block for negative value). The duration of DiscardPadding is not calculated in the duration of the TrackEntry and should be discarded during playback."},164:{name:"CodecState",level:3,type:"b",minver:2,webm:!1,description:"The new codec state to use. Data interpretation is private to the codec. This information should always be referenced by a seek entry."},253:{name:"ReferenceVirtual",level:3,type:"i",webm:!1,description:"Relative position of the data that should be in position of the virtual block."},251:{name:"ReferenceBlock",level:3,type:"i",multiple:!0,minver:1,description:"Timestamp of another frame used as a reference (ie: B or P frame). The timestamp is relative to the block it's attached to."},250:{name:"ReferencePriority",cppname:"FlagReferenced",level:3,type:"u",mandatory:!0,minver:1,webm:!1,default:0,description:"This frame is referenced and has the specified cache priority. In cache only a frame of the same or higher priority can replace this frame. A value of 0 means the frame is not referenced."},155:{name:"BlockDuration",level:3,type:"u",minver:1,default:"TrackDuration",description:'The duration of the Block (based on TimecodeScale). This element is mandatory when DefaultDuration is set for the track (but can be omitted as other default values). When not written and with no DefaultDuration, the value is assumed to be the difference between the timestamp of this Block and the timestamp of the next Block in "display" order (not coding order). This element can be useful at the end of a Track (as there is not other Block available), or when there is a break in a track like for subtitle tracks. When set to 0 that means the frame is not a keyframe.'},165:{name:"BlockAdditional",level:5,type:"b",mandatory:!0,minver:1,webm:!1,description:"Interpreted by the codec as it wishes (using the BlockAddID)."},238:{name:"BlockAddID",level:5,type:"u",mandatory:!0,minver:1,webm:!1,default:1,range:"not 0",description:"An ID to identify the BlockAdditional level."},166:{name:"BlockMore",level:4,type:"m",mandatory:!0,multiple:!0,minver:1,webm:!1,description:"Contain the BlockAdditional and some parameters."},30113:{name:"BlockAdditions",level:3,type:"m",minver:1,webm:!1,description:"Contain additional blocks to complete the main one. An EBML parser that has no knowledge of the Block structure could still see and use/skip these data."},162:{name:"BlockVirtual",level:3,type:"b",webm:!1,description:"A Block with no data. It must be stored in the stream at the place the real Block should be in display order. (see Block Virtual)"},161:{name:"Block",level:3,type:"b",mandatory:!0,minver:1,description:"Block containing the actual data to be rendered and a timestamp relative to the Cluster Timecode. (see Block Structure)"},160:{name:"BlockGroup",level:2,type:"m",multiple:!0,minver:1,description:"Basic container of information containing a single Block or BlockVirtual, and information specific to that Block/VirtualBlock."},163:{name:"SimpleBlock",level:2,type:"b",multiple:!0,minver:2,webm:!0,divx:!0,description:"Similar to SimpleBlock Structure"},171:{name:"PrevSize",cppname:"ClusterPrevSize",level:2,type:"u",minver:1,description:"Size of the previous Cluster, in octets. Can be useful for backward playing.",position:"prevCluster"},167:{name:"Position",cppname:"ClusterPosition",level:2,type:"u",minver:1,webm:!1,description:"The Position of the Cluster in the segment (0 in live broadcast streams). It might help to resynchronise offset on damaged streams.",position:"segment"},22743:{name:"SilentTrackNumber",cppname:"ClusterSilentTrackNumber",level:3,type:"u",multiple:!0,minver:1,webm:!1,description:"One of the track number that are not used from now on in the stream. It could change later if not specified as silent in a further Cluster."},231:{name:"Timecode",cppname:"ClusterTimecode",level:2,type:"u",mandatory:!0,minver:1,description:"Absolute timestamp of the cluster (based on TimecodeScale)."},524531317:{name:"Cluster",level:1,type:"m",multiple:!0,minver:1,description:"The lower level element containing the (monolithic) Block structure."},19840:{name:"MuxingApp",level:2,type:"8",mandatory:!0,minver:1,description:'Muxing application or library ("libmatroska-0.4.3").'},31657:{name:"Title",level:2,type:"8",minver:1,webm:!1,description:"General name of the segment."},2807730:{name:"TimecodeScaleDenominator",level:2,type:"u",mandatory:!0,minver:4,default:"1000000000",description:"Timestamp scale numerator, see TimecodeScale."},2807729:{name:"TimecodeScale",level:2,type:"u",mandatory:!0,minver:1,default:"1000000",description:"Timestamp scale in nanoseconds (1.000.000 means all timestamps in the segment are expressed in milliseconds)."},27045:{name:"ChapterTranslateID",level:3,type:"b",mandatory:!0,minver:1,webm:!1,description:"The binary value used to represent this segment in the chapter codec data. The format depends on the ChapProcessCodecID used."},27071:{name:"ChapterTranslateCodec",level:3,type:"u",mandatory:!0,minver:1,webm:!1,description:"The chapter codec using this ID (0: Matroska Script, 1: DVD-menu)."},27132:{name:"ChapterTranslateEditionUID",level:3,type:"u",multiple:!0,minver:1,webm:!1,description:"Specify an edition UID on which this correspondance applies. When not specified, it means for all editions found in the segment."},4096955:{name:"NextFilename",level:2,type:"8",minver:1,webm:!1,description:"An escaped filename corresponding to the next segment."},4110627:{name:"NextUID",level:2,type:"b",minver:1,webm:!1,bytesize:16,description:"A unique ID to identify the next chained segment (128 bits)."},3965867:{name:"PrevFilename",level:2,type:"8",minver:1,webm:!1,description:"An escaped filename corresponding to the previous segment."},3979555:{name:"PrevUID",level:2,type:"b",minver:1,webm:!1,bytesize:16,description:"A unique ID to identify the previous chained segment (128 bits)."},29604:{name:"SegmentUID",level:2,type:"b",minver:1,webm:!1,range:"not 0",bytesize:16,description:"A randomly generated unique ID to identify the current segment between many others (128 bits)."},357149030:{name:"Info",level:1,type:"m",mandatory:!0,multiple:!0,minver:1,description:"Contains miscellaneous general information and statistics on the file."},21420:{name:"SeekPosition",level:3,type:"u",mandatory:!0,minver:1,description:"The position of the element in the segment in octets (0 = first level 1 element).",position:"segment"},21419:{name:"SeekID",level:3,type:"b",mandatory:!0,minver:1,description:"The binary ID corresponding to the element name.",type2:"ebmlID"},19899:{name:"Seek",cppname:"SeekPoint",level:2,type:"m",mandatory:!0,multiple:!0,minver:1,description:"Contains a single seek entry to an EBML element."},290298740:{name:"SeekHead",cppname:"SeekHeader",level:1,type:"m",multiple:!0,minver:1,description:"Contains the position of other level 1 elements."},32379:{name:"SignatureElementList",level:2,type:"m",multiple:!0,webm:!1,i:"Cluster|Block|BlockAdditional",description:"A list consists of a number of consecutive elements that represent one case where data is used in signature. Ex: means that the BlockAdditional of all Blocks in all Clusters is used for encryption."},32347:{name:"SignatureElements",level:1,type:"m",webm:!1,description:"Contains elements that will be used to compute the signature."},32437:{name:"Signature",level:1,type:"b",webm:!1,description:"The signature of the data (until a new."},32421:{name:"SignaturePublicKey",level:1,type:"b",webm:!1,description:"The public key to use with the algorithm (in the case of a PKI-based signature)."},32410:{name:"SignatureHash",level:1,type:"u",webm:!1,description:"Hash algorithm used (1=SHA1-160, 2=MD5)."},32394:{name:"SignatureAlgo",level:1,type:"u",webm:!1,description:"Signature algorithm used (1=RSA, 2=elliptic)."},458458727:{name:"SignatureSlot",level:-1,type:"m",multiple:!0,webm:!1,description:"Contain signature of some (coming) elements in the stream."},191:{name:"CRC-32",level:-1,type:"b",minver:1,webm:!1,description:"The CRC is computed on all the data of the Master element it's in. The CRC element should be the first in it's parent master for easier reading. All level 1 elements should include a CRC-32. The CRC in use is the IEEE CRC32 Little Endian",crc:!0},236:{name:"Void",level:-1,type:"b",minver:1,description:"Used to void damaged data, to avoid unexpected behaviors when using damaged data. The content is discarded. Also used to reserve space in a sub-element for later use."},17139:{name:"EBMLMaxSizeLength",level:1,type:"u",mandatory:!0,default:8,minver:1,description:"The maximum length of the sizes you'll find in this file (8 or less in Matroska). This does not override the element size indicated at the beginning of an element. Elements that have an indicated size which is larger than what is allowed by EBMLMaxSizeLength shall be considered invalid."},17138:{name:"EBMLMaxIDLength",level:1,type:"u",mandatory:!0,default:4,minver:1,description:"The maximum length of the IDs you'll find in this file (4 or less in Matroska)."},17143:{name:"EBMLReadVersion",level:1,type:"u",mandatory:!0,default:1,minver:1,description:"The minimum EBML version a parser has to support to read this file."},440786851:{name:"EBML",level:"0",type:"m",mandatory:!0,multiple:!0,minver:1,description:"Set the EBML characteristics of the data to follow. Each EBML document has to start with this."}}},1384:function(e,t,n){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,n,i){void 0===i&&(i=n),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,i){void 0===i&&(i=n),e[i]=t[n]}),r=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||i(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),t.tools=t.Reader=t.Encoder=t.Decoder=void 0,r(n(4990),t);var o=n(2800);t.Decoder=o.default;var a=n(8031);t.Encoder=a.default;var s=n(1381);t.Reader=s.default;var l=n(3210);t.tools=l},190:function(e,t,n){"use strict";var i=this&&this.__assign||function(){return(i=Object.assign||function(e){for(var t,n=1,i=arguments.length;n8){var r=e.readHexString(t,n,n+i);throw new Error("Unrepresentable length: ".concat(i," ").concat(r))}if(n+i>t.length)return null;for(var o=t[n]&(1<<8-i)-1,a=1;a=Math.pow(2,8)&&t[n+7]>0)return{length:i,value:-1};o*=Math.pow(2,8),o+=t[n+a]}return{length:i,value:o}},e.writeVint=function(e){if(e<0||e>Math.pow(2,53))throw new Error("Unrepresentable value: ".concat(e));var t=1;for(t=1;t<=8&&!(e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.convertEBMLDateToJSDate=t.createFloatBuffer=t.createIntBuffer=t.createUIntBuffer=t.encodeValueToBuffer=t.concat=t.putRefinedMetaData=t.extractElement=t.removeElement=t.makeMetadataSeekable=t.createRIFFChunk=t.VP8BitStreamToRiffWebPBuffer=t.WebPBlockFilter=t.encodeTag=t.readBlock=t.ebmlBlock=t.writeVint=t.readVint=t.Buffer=void 0;var i=n(1166),r=n(8031),o=n(8166),a=n(190),s=n(1586);function l(e,n){var i=new t.Buffer(4);return i.writeUInt32LE(n.byteLength,0),f([new t.Buffer(e.substr(0,4),"ascii"),i,n,new t.Buffer(n.byteLength%2==0?0:1)])}function c(e,t){for(var n=-1,i=0;i=0?Array.prototype.splice.apply(e,[r+1,0].concat(n)):i?[].concat([{name:t,type:"m",isEnd:!1}],n,[{name:t,type:"m",isEnd:!0}]).reverse().forEach((function(t){e.unshift(t)})):(e.push({name:t,type:"m",isEnd:!1}),n.forEach((function(t){e.push(t)})),e.push({name:t,type:"m",isEnd:!0}))}function f(e){return t.Buffer.concat(e)}function m(e){for(var n=1;e>=Math.pow(2,8*n);n++);if(n>=7)return console.warn("7bit or more bigger uint not supported."),new i.Uint64BE(e).toBuffer();var r=new t.Buffer(n);return r.writeUIntBE(e,0,n),r}function g(e){for(var n=1;e>=Math.pow(2,8*n);n++);if(n>=7)return console.warn("7bit or more bigger uint not supported."),new i.Int64BE(e).toBuffer();var r=new t.Buffer(n);return r.writeIntBE(e,0,n),r}function v(e,n){var i;if(void 0===n&&(n=8),8===n)return(i=new t.Buffer(8)).writeDoubleBE(e,0),i;if(4===n)return(i=new t.Buffer(4)).writeFloatBE(e,0),i;throw new Error("float type bits must 4bytes or 8bytes")}t.Buffer=o.Buffer,t.readVint=a.default.readVint,t.writeVint=a.default.writeVint,t.ebmlBlock=s,t.readBlock=function(e){return(0,t.ebmlBlock)(new t.Buffer(e))},t.encodeTag=function(e,n,i){return void 0===i&&(i=!1),f([e,i?new t.Buffer("01ffffffffffffff","hex"):(0,t.writeVint)(n.length),n])},t.WebPBlockFilter=function(e){return e.reduce((function(e,n){return"b"!==n.type||"SimpleBlock"!==n.name?e:(0,t.ebmlBlock)(n.data).frames.some((function(e){return"9d012a"===e.slice(3,6).toString("hex")}))?e.concat(n):e}),[])},t.VP8BitStreamToRiffWebPBuffer=function(e){var n=l("VP8 ",e);return l("RIFF",f([new t.Buffer("WEBP","ascii"),n]))},t.createRIFFChunk=l,t.makeMetadataSeekable=function(e,n,i){var o=u("EBML",e),a=h(o)+12,s=e[e.length-1].dataEnd-a,l=u("Info",e);c("Duration",l),l.splice(1,0,{name:"Duration",type:"f",data:v(n,8)});for(var p=h(l),d=u("Tracks",e),f=h(d),g=47,y=[],b=5+15*i.length,w=[],k=-1,C=function(e){var n=g,r=n+p,o=r+f,l=o+b-s;if((y=[]).push({name:"SeekHead",type:"m",isEnd:!1}),y.push({name:"Seek",type:"m",isEnd:!1}),y.push({name:"SeekID",type:"b",data:new t.Buffer([21,73,169,102])}),y.push({name:"SeekPosition",type:"u",data:m(n)}),y.push({name:"Seek",type:"m",isEnd:!0}),y.push({name:"Seek",type:"m",isEnd:!1}),y.push({name:"SeekID",type:"b",data:new t.Buffer([22,84,174,107])}),y.push({name:"SeekPosition",type:"u",data:m(r)}),y.push({name:"Seek",type:"m",isEnd:!0}),y.push({name:"Seek",type:"m",isEnd:!1}),y.push({name:"SeekID",type:"b",data:new t.Buffer([28,83,187,107])}),y.push({name:"SeekPosition",type:"u",data:m(o)}),y.push({name:"Seek",type:"m",isEnd:!0}),y.push({name:"SeekHead",type:"m",isEnd:!0}),g=h(y),(w=[]).push({name:"Cues",type:"m",isEnd:!1}),i.forEach((function(e){var t=e.CueTrack,n=e.CueClusterPosition,i=e.CueTime;w.push({name:"CuePoint",type:"m",isEnd:!1}),w.push({name:"CueTime",type:"u",data:m(i)}),w.push({name:"CueTrackPositions",type:"m",isEnd:!1}),w.push({name:"CueTrack",type:"u",data:m(t)}),n-=a,n+=l,w.push({name:"CueClusterPosition",type:"u",data:m(n)}),w.push({name:"CueTrackPositions",type:"m",isEnd:!0}),w.push({name:"CuePoint",type:"m",isEnd:!0})})),w.push({name:"Cues",type:"m",isEnd:!0}),b=h(w),k===l)return"break";if(k=l,9===e)throw new Error("Failed to converge to a stable metadata size")},x=0;x<10;x++){if("break"===C(x))break}var E=[].concat.apply([],[o,{name:"Segment",type:"m",isEnd:!1,unknownSize:!0},y,l,d,w]);return(new r.default).encode(E)},t.removeElement=c,t.extractElement=u,t.putRefinedMetaData=function(e,n){Array.isArray(n.cueInfos)&&!Array.isArray(n.cues)&&(console.warn("putRefinedMetaData: info.cueInfos property is deprecated. please use info.cues"),n.cues=n.cueInfos);for(var i=[],o=[],a=0;a0))throw new Error("metadata dataEnd has wrong number");var l,c=o[o.length-1].dataEnd,u=i[i.length-1].dataEnd,h=(new r.default).encode(i).byteLength-u,d=c-o[0].tagStart,f=(o[0].tagStart,o[0].tagStart,new t.Buffer([24,83,128,103])),m=new t.Buffer("01ffffffffffffff","hex"),g=f.byteLength+m.byteLength,v=d;for(l=1;l<20;l++){var y=p(o,h+(u+g+v-c),n),b=(new r.default).encode(y).byteLength;if(b===v)return(new r.default).encode([].concat(i,[{type:"m",name:"Segment",isEnd:!1,unknownSize:!0}],y));v=b}throw new Error("unable to refine metadata, stable size could not be found in "+l+" iterations!")},t.concat=f,t.encodeValueToBuffer=function(e){var n=new t.Buffer(0);if("m"===e.type)return e;switch(e.type){case"u":n=m(e.value);break;case"i":n=g(e.value);break;case"f":n=v(e.value);break;case"s":n=new t.Buffer(e.value,"ascii");break;case"8":n=new t.Buffer(e.value,"utf8");break;case"b":n=e.value;break;case"d":n=new i.Int64BE(e.value.getTime().toString()).toBuffer()}return Object.assign({},e,{data:n})},t.createUIntBuffer=m,t.createIntBuffer=g,t.createFloatBuffer=v,t.convertEBMLDateToJSDate=function(e){return e instanceof Date?e:new Date(new Date("2001-01-01T00:00:00.000Z").getTime()+Number(e)/1e3/1e3)}},8246:function(e,t,n){"use strict";var i=this&&this.__awaiter||function(e,t,n,i){return new(n||(n=Promise))((function(r,o){function a(e){try{l(i.next(e))}catch(e){o(e)}}function s(e){try{l(i.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}l((i=i.apply(e,t||[])).next())}))},r=this&&this.__generator||function(e,t){var n,i,r,o,a={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(o){return function(s){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,i&&(r=2&o[0]?i.return:o[0]?i.throw||((r=i.return)&&r.call(i),0):i.next)&&!(r=r.call(i,o[1])).done)return r;switch(i=0,r&&(o=[2&o[0],r.value]),o[0]){case 0:case 1:r=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,i=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(r=a.trys,(r=r.length>0&&r[r.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!r||o[1]>r[0]&&o[1]{"use strict";const i=n(9742),r=n(645),o="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;t.Buffer=l,t.SlowBuffer=function(e){+e!=e&&(e=0);return l.alloc(+e)},t.INSPECT_MAX_BYTES=50;const a=2147483647;function s(e){if(e>a)throw new RangeError('The value "'+e+'" is invalid for option "size"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,l.prototype),t}function l(e,t,n){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return h(e)}return c(e,t,n)}function c(e,t,n){if("string"==typeof e)return function(e,t){"string"==typeof t&&""!==t||(t="utf8");if(!l.isEncoding(t))throw new TypeError("Unknown encoding: "+t);const n=0|m(e,t);let i=s(n);const r=i.write(e,t);r!==n&&(i=i.slice(0,r));return i}(e,t);if(ArrayBuffer.isView(e))return function(e){if(X(e,Uint8Array)){const t=new Uint8Array(e);return d(t.buffer,t.byteOffset,t.byteLength)}return p(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(X(e,ArrayBuffer)||e&&X(e.buffer,ArrayBuffer))return d(e,t,n);if("undefined"!=typeof SharedArrayBuffer&&(X(e,SharedArrayBuffer)||e&&X(e.buffer,SharedArrayBuffer)))return d(e,t,n);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');const i=e.valueOf&&e.valueOf();if(null!=i&&i!==e)return l.from(i,t,n);const r=function(e){if(l.isBuffer(e)){const t=0|f(e.length),n=s(t);return 0===n.length||e.copy(n,0,0,t),n}if(void 0!==e.length)return"number"!=typeof e.length||$(e.length)?s(0):p(e);if("Buffer"===e.type&&Array.isArray(e.data))return p(e.data)}(e);if(r)return r;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return l.from(e[Symbol.toPrimitive]("string"),t,n);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function u(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function h(e){return u(e),s(e<0?0:0|f(e))}function p(e){const t=e.length<0?0:0|f(e.length),n=s(t);for(let i=0;i=a)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a.toString(16)+" bytes");return 0|e}function m(e,t){if(l.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||X(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const n=e.length,i=arguments.length>2&&!0===arguments[2];if(!i&&0===n)return 0;let r=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return G(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return K(e).length;default:if(r)return i?-1:G(e).length;t=(""+t).toLowerCase(),r=!0}}function g(e,t,n){let i=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return L(this,t,n);case"utf8":case"utf-8":return M(this,t,n);case"ascii":return D(this,t,n);case"latin1":case"binary":return A(this,t,n);case"base64":return S(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,t,n);default:if(i)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),i=!0}}function v(e,t,n){const i=e[t];e[t]=e[n],e[n]=i}function y(e,t,n,i,r){if(0===e.length)return-1;if("string"==typeof n?(i=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),$(n=+n)&&(n=r?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(r)return-1;n=e.length-1}else if(n<0){if(!r)return-1;n=0}if("string"==typeof t&&(t=l.from(t,i)),l.isBuffer(t))return 0===t.length?-1:b(e,t,n,i,r);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?r?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,i,r);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,i,r){let o,a=1,s=e.length,l=t.length;if(void 0!==i&&("ucs2"===(i=String(i).toLowerCase())||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(e.length<2||t.length<2)return-1;a=2,s/=2,l/=2,n/=2}function c(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(r){let i=-1;for(o=n;os&&(n=s-l),o=n;o>=0;o--){let n=!0;for(let i=0;ir&&(i=r):i=r;const o=t.length;let a;for(i>o/2&&(i=o/2),a=0;a>8,r=n%256,o.push(r),o.push(i);return o}(t,e.length-n),e,n,i)}function S(e,t,n){return 0===t&&n===e.length?i.fromByteArray(e):i.fromByteArray(e.slice(t,n))}function M(e,t,n){n=Math.min(e.length,n);const i=[];let r=t;for(;r239?4:t>223?3:t>191?2:1;if(r+a<=n){let n,i,s,l;switch(a){case 1:t<128&&(o=t);break;case 2:n=e[r+1],128==(192&n)&&(l=(31&t)<<6|63&n,l>127&&(o=l));break;case 3:n=e[r+1],i=e[r+2],128==(192&n)&&128==(192&i)&&(l=(15&t)<<12|(63&n)<<6|63&i,l>2047&&(l<55296||l>57343)&&(o=l));break;case 4:n=e[r+1],i=e[r+2],s=e[r+3],128==(192&n)&&128==(192&i)&&128==(192&s)&&(l=(15&t)<<18|(63&n)<<12|(63&i)<<6|63&s,l>65535&&l<1114112&&(o=l))}}null===o?(o=65533,a=1):o>65535&&(o-=65536,i.push(o>>>10&1023|55296),o=56320|1023&o),i.push(o),r+=a}return function(e){const t=e.length;if(t<=T)return String.fromCharCode.apply(String,e);let n="",i=0;for(;ii.length?(l.isBuffer(t)||(t=l.from(t)),t.copy(i,r)):Uint8Array.prototype.set.call(i,t,r);else{if(!l.isBuffer(t))throw new TypeError('"list" argument must be an Array of Buffers');t.copy(i,r)}r+=t.length}return i},l.byteLength=m,l.prototype._isBuffer=!0,l.prototype.swap16=function(){const e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;tn&&(e+=" ... "),""},o&&(l.prototype[o]=l.prototype.inspect),l.prototype.compare=function(e,t,n,i,r){if(X(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),!l.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===i&&(i=0),void 0===r&&(r=this.length),t<0||n>e.length||i<0||r>this.length)throw new RangeError("out of range index");if(i>=r&&t>=n)return 0;if(i>=r)return-1;if(t>=n)return 1;if(this===e)return 0;let o=(r>>>=0)-(i>>>=0),a=(n>>>=0)-(t>>>=0);const s=Math.min(o,a),c=this.slice(i,r),u=e.slice(t,n);for(let e=0;e>>=0,isFinite(n)?(n>>>=0,void 0===i&&(i="utf8")):(i=n,n=void 0)}const r=this.length-t;if((void 0===n||n>r)&&(n=r),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");let o=!1;for(;;)switch(i){case"hex":return w(this,e,t,n);case"utf8":case"utf-8":return k(this,e,t,n);case"ascii":case"latin1":case"binary":return C(this,e,t,n);case"base64":return x(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,e,t,n);default:if(o)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),o=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const T=4096;function D(e,t,n){let i="";n=Math.min(e.length,n);for(let r=t;ri)&&(n=i);let r="";for(let i=t;in)throw new RangeError("Trying to access beyond buffer length")}function F(e,t,n,i,r,o){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>r||te.length)throw new RangeError("Index out of range")}function O(e,t,n,i,r){U(t,i,r,e,n,7);let o=Number(t&BigInt(4294967295));e[n++]=o,o>>=8,e[n++]=o,o>>=8,e[n++]=o,o>>=8,e[n++]=o;let a=Number(t>>BigInt(32)&BigInt(4294967295));return e[n++]=a,a>>=8,e[n++]=a,a>>=8,e[n++]=a,a>>=8,e[n++]=a,n}function B(e,t,n,i,r){U(t,i,r,e,n,7);let o=Number(t&BigInt(4294967295));e[n+7]=o,o>>=8,e[n+6]=o,o>>=8,e[n+5]=o,o>>=8,e[n+4]=o;let a=Number(t>>BigInt(32)&BigInt(4294967295));return e[n+3]=a,a>>=8,e[n+2]=a,a>>=8,e[n+1]=a,a>>=8,e[n]=a,n+8}function N(e,t,n,i,r,o){if(n+i>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function R(e,t,n,i,o){return t=+t,n>>>=0,o||N(e,0,n,4),r.write(e,t,n,i,23,4),n+4}function H(e,t,n,i,o){return t=+t,n>>>=0,o||N(e,0,n,8),r.write(e,t,n,i,52,8),n+8}l.prototype.slice=function(e,t){const n=this.length;(e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t>>=0,t>>>=0,n||I(e,t,this.length);let i=this[e],r=1,o=0;for(;++o>>=0,t>>>=0,n||I(e,t,this.length);let i=this[e+--t],r=1;for(;t>0&&(r*=256);)i+=this[e+--t]*r;return i},l.prototype.readUint8=l.prototype.readUInt8=function(e,t){return e>>>=0,t||I(e,1,this.length),this[e]},l.prototype.readUint16LE=l.prototype.readUInt16LE=function(e,t){return e>>>=0,t||I(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUint16BE=l.prototype.readUInt16BE=function(e,t){return e>>>=0,t||I(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUint32LE=l.prototype.readUInt32LE=function(e,t){return e>>>=0,t||I(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUint32BE=l.prototype.readUInt32BE=function(e,t){return e>>>=0,t||I(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readBigUInt64LE=Q((function(e){_(e>>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||j(e,this.length-8);const i=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,r=this[++e]+256*this[++e]+65536*this[++e]+n*2**24;return BigInt(i)+(BigInt(r)<>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||j(e,this.length-8);const i=t*2**24+65536*this[++e]+256*this[++e]+this[++e],r=this[++e]*2**24+65536*this[++e]+256*this[++e]+n;return(BigInt(i)<>>=0,t>>>=0,n||I(e,t,this.length);let i=this[e],r=1,o=0;for(;++o=r&&(i-=Math.pow(2,8*t)),i},l.prototype.readIntBE=function(e,t,n){e>>>=0,t>>>=0,n||I(e,t,this.length);let i=t,r=1,o=this[e+--i];for(;i>0&&(r*=256);)o+=this[e+--i]*r;return r*=128,o>=r&&(o-=Math.pow(2,8*t)),o},l.prototype.readInt8=function(e,t){return e>>>=0,t||I(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){e>>>=0,t||I(e,2,this.length);const n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt16BE=function(e,t){e>>>=0,t||I(e,2,this.length);const n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt32LE=function(e,t){return e>>>=0,t||I(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return e>>>=0,t||I(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readBigInt64LE=Q((function(e){_(e>>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||j(e,this.length-8);const i=this[e+4]+256*this[e+5]+65536*this[e+6]+(n<<24);return(BigInt(i)<>>=0,"offset");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||j(e,this.length-8);const i=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(i)<>>=0,t||I(e,4,this.length),r.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return e>>>=0,t||I(e,4,this.length),r.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return e>>>=0,t||I(e,8,this.length),r.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return e>>>=0,t||I(e,8,this.length),r.read(this,e,!1,52,8)},l.prototype.writeUintLE=l.prototype.writeUIntLE=function(e,t,n,i){if(e=+e,t>>>=0,n>>>=0,!i){F(this,e,t,n,Math.pow(2,8*n)-1,0)}let r=1,o=0;for(this[t]=255&e;++o>>=0,n>>>=0,!i){F(this,e,t,n,Math.pow(2,8*n)-1,0)}let r=n-1,o=1;for(this[t+r]=255&e;--r>=0&&(o*=256);)this[t+r]=e/o&255;return t+n},l.prototype.writeUint8=l.prototype.writeUInt8=function(e,t,n){return e=+e,t>>>=0,n||F(this,e,t,1,255,0),this[t]=255&e,t+1},l.prototype.writeUint16LE=l.prototype.writeUInt16LE=function(e,t,n){return e=+e,t>>>=0,n||F(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeUint16BE=l.prototype.writeUInt16BE=function(e,t,n){return e=+e,t>>>=0,n||F(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeUint32LE=l.prototype.writeUInt32LE=function(e,t,n){return e=+e,t>>>=0,n||F(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},l.prototype.writeUint32BE=l.prototype.writeUInt32BE=function(e,t,n){return e=+e,t>>>=0,n||F(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigUInt64LE=Q((function(e,t=0){return O(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeBigUInt64BE=Q((function(e,t=0){return B(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),l.prototype.writeIntLE=function(e,t,n,i){if(e=+e,t>>>=0,!i){const i=Math.pow(2,8*n-1);F(this,e,t,n,i-1,-i)}let r=0,o=1,a=0;for(this[t]=255&e;++r>0)-a&255;return t+n},l.prototype.writeIntBE=function(e,t,n,i){if(e=+e,t>>>=0,!i){const i=Math.pow(2,8*n-1);F(this,e,t,n,i-1,-i)}let r=n-1,o=1,a=0;for(this[t+r]=255&e;--r>=0&&(o*=256);)e<0&&0===a&&0!==this[t+r+1]&&(a=1),this[t+r]=(e/o>>0)-a&255;return t+n},l.prototype.writeInt8=function(e,t,n){return e=+e,t>>>=0,n||F(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,n){return e=+e,t>>>=0,n||F(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeInt16BE=function(e,t,n){return e=+e,t>>>=0,n||F(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeInt32LE=function(e,t,n){return e=+e,t>>>=0,n||F(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},l.prototype.writeInt32BE=function(e,t,n){return e=+e,t>>>=0,n||F(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigInt64LE=Q((function(e,t=0){return O(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeBigInt64BE=Q((function(e,t=0){return B(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),l.prototype.writeFloatLE=function(e,t,n){return R(this,e,t,!0,n)},l.prototype.writeFloatBE=function(e,t,n){return R(this,e,t,!1,n)},l.prototype.writeDoubleLE=function(e,t,n){return H(this,e,t,!0,n)},l.prototype.writeDoubleBE=function(e,t,n){return H(this,e,t,!1,n)},l.prototype.copy=function(e,t,n,i){if(!l.isBuffer(e))throw new TypeError("argument should be a Buffer");if(n||(n=0),i||0===i||(i=this.length),t>=e.length&&(t=e.length),t||(t=0),i>0&&i=this.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-t>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(r=t;r=i+4;n-=3)t=`_${e.slice(n-3,n)}${t}`;return`${e.slice(0,n)}${t}`}function U(e,t,n,i,r,o){if(e>n||e3?0===t||t===BigInt(0)?`>= 0${i} and < 2${i} ** ${8*(o+1)}${i}`:`>= -(2${i} ** ${8*(o+1)-1}${i}) and < 2 ** ${8*(o+1)-1}${i}`:`>= ${t}${i} and <= ${n}${i}`,new V.ERR_OUT_OF_RANGE("value",r,e)}!function(e,t,n){_(t,"offset"),void 0!==e[t]&&void 0!==e[t+n]||j(t,e.length-(n+1))}(i,r,o)}function _(e,t){if("number"!=typeof e)throw new V.ERR_INVALID_ARG_TYPE(t,"number",e)}function j(e,t,n){if(Math.floor(e)!==e)throw _(e,n),new V.ERR_OUT_OF_RANGE(n||"offset","an integer",e);if(t<0)throw new V.ERR_BUFFER_OUT_OF_BOUNDS;throw new V.ERR_OUT_OF_RANGE(n||"offset",`>= ${n?1:0} and <= ${t}`,e)}z("ERR_BUFFER_OUT_OF_BOUNDS",(function(e){return e?`${e} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),z("ERR_INVALID_ARG_TYPE",(function(e,t){return`The "${e}" argument must be of type number. Received type ${typeof t}`}),TypeError),z("ERR_OUT_OF_RANGE",(function(e,t,n){let i=`The value of "${e}" is out of range.`,r=n;return Number.isInteger(n)&&Math.abs(n)>2**32?r=q(String(n)):"bigint"==typeof n&&(r=String(n),(n>BigInt(2)**BigInt(32)||n<-(BigInt(2)**BigInt(32)))&&(r=q(r)),r+="n"),i+=` It must be ${t}. Received ${r}`,i}),RangeError);const W=/[^+/0-9A-Za-z-_]/g;function G(e,t){let n;t=t||1/0;const i=e.length;let r=null;const o=[];for(let a=0;a55295&&n<57344){if(!r){if(n>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(a+1===i){(t-=3)>-1&&o.push(239,191,189);continue}r=n;continue}if(n<56320){(t-=3)>-1&&o.push(239,191,189),r=n;continue}n=65536+(r-55296<<10|n-56320)}else r&&(t-=3)>-1&&o.push(239,191,189);if(r=null,n<128){if((t-=1)<0)break;o.push(n)}else if(n<2048){if((t-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function K(e){return i.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(W,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function Y(e,t,n,i){let r;for(r=0;r=t.length||r>=e.length);++r)t[r+n]=e[r];return r}function X(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function $(e){return e!=e}const Z=function(){const e="0123456789abcdef",t=new Array(256);for(let n=0;n<16;++n){const i=16*n;for(let r=0;r<16;++r)t[i+r]=e[n]+e[r]}return t}();function Q(e){return"undefined"==typeof BigInt?J:e}function J(){throw new Error("BigInt not supported")}},7529:e=>{e.exports=function(){for(var e={},n=0;n{"use strict";var i=n(3278),r=n(7529),o=n(4186);function a(e){var t=this.data("settings"),n=i(o);n.prototype.options=r(n.prototype.options,t,e),this.Parser=n}e.exports=a,a.Parser=o},8204:e=>{"use strict";e.exports=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","iframe","legend","li","link","main","menu","menuitem","meta","nav","noframes","ol","optgroup","option","p","param","pre","section","source","title","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"]},1819:(e,t,n)=>{"use strict";var i=n(7529),r=n(7574);e.exports=function(e){return n.raw=function(e,n,a){return r(e,i(a,{position:t(n),warning:o}))},n;function t(t){for(var n=e.offset,i=t.line,r=[];++i&&i in n;)r.push((n[i]||0)+1);return{start:t,indent:r}}function n(n,i,a){r(n,{position:t(i),warning:o,text:a,reference:a,textContext:e,referenceContext:e})}function o(t,n,i){3!==i&&e.file.message(t,n)}}},3114:(e,t,n)=>{"use strict";e.exports={position:!0,gfm:!0,commonmark:!1,pedantic:!1,blocks:n(8204)}},563:e=>{"use strict";e.exports=function(e,t){var n=e.indexOf("\n",t);for(;n>t&&" "===e.charAt(n-1);)n--;return n}},6497:e=>{"use strict";e.exports=function(e,t){return e.indexOf("`",t)}},3723:e=>{"use strict";e.exports=function(e,t){return e.indexOf("~~",t)}},973:(e,t,n)=>{"use strict";var i=n(6195),r=n(6260);function o(e){return i(e)||r(e)||43===e||45===e||46===e||95===e}e.exports=function e(t,n){var i,r;if(!this.options.gfm)return-1;if(-1===(i=t.indexOf("@",n)))return-1;if((r=i)===n||!o(t.charCodeAt(r-1)))return e.call(this,t,i+1);for(;r>n&&o(t.charCodeAt(r-1));)r--;return r}},2411:e=>{"use strict";e.exports=function(e,t){var n=e.indexOf("*",t),i=e.indexOf("_",t);if(-1===i)return n;if(-1===n)return i;return i{"use strict";e.exports=function(e,t){return e.indexOf("\\",t)}},633:e=>{"use strict";e.exports=function(e,t){var n=e.indexOf("[",t),i=e.indexOf("![",t);if(-1===i)return n;return n{"use strict";e.exports=function(e,t){var n=e.indexOf("**",t),i=e.indexOf("__",t);if(-1===i)return n;if(-1===n)return i;return i{"use strict";e.exports=function(e,t){return e.indexOf("<",t)}},8637:e=>{"use strict";e.exports=function(e,n){var i,r,o,a=-1;if(!this.options.gfm)return a;r=t.length,i=-1;for(;++i{"use strict";var i=n(7529),r=n(3183);e.exports=function(){var e,t=this,n=String(t.file),a={line:1,column:1,offset:0},s=i(a);65279===(n=n.replace(o,"\n")).charCodeAt(0)&&(n=n.slice(1),s.column++,s.offset++);e={type:"root",children:t.tokenizeBlock(n,s),position:{start:a,end:t.eof||i(a)}},t.options.position||r(e,!0);return e};var o=/\r\n|\r/g},4186:(e,t,n)=>{"use strict";var i=n(7529),r=n(78),o=n(4787),a=n(7678),s=n(1819),l=n(831);function c(e,t){this.file=t,this.offset={},this.options=i(this.options),this.setOptions({}),this.inList=!1,this.inBlock=!1,this.inLink=!1,this.atStart=!0,this.toOffset=o(t).toOffset,this.unescape=a(this,"escape"),this.decode=s(this)}e.exports=c;var u=c.prototype;function h(e){var t,n=[];for(t in e)n.push(t);return n}u.setOptions=n(5248),u.parse=n(4767),u.options=n(3114),u.exitStart=r("atStart",!0),u.enterList=r("inList",!1),u.enterLink=r("inLink",!1),u.enterBlock=r("inBlock",!1),u.interruptParagraph=[["thematicBreak"],["list"],["atxHeading"],["fencedCode"],["blockquote"],["html"],["setextHeading",{commonmark:!1}],["definition",{commonmark:!1}]],u.interruptList=[["atxHeading",{pedantic:!1}],["fencedCode",{pedantic:!1}],["thematicBreak",{pedantic:!1}],["definition",{commonmark:!1}]],u.interruptBlockquote=[["indentedCode",{commonmark:!0}],["fencedCode",{commonmark:!0}],["atxHeading",{commonmark:!0}],["setextHeading",{commonmark:!0}],["thematicBreak",{commonmark:!0}],["html",{commonmark:!0}],["list",{commonmark:!0}],["definition",{commonmark:!1}]],u.blockTokenizers={blankLine:n(9269),indentedCode:n(6167),fencedCode:n(1484),blockquote:n(8502),atxHeading:n(684),thematicBreak:n(8352),list:n(2866),setextHeading:n(1578),html:n(6494),definition:n(7742),table:n(308),paragraph:n(7006)},u.inlineTokenizers={escape:n(1796),autoLink:n(2768),url:n(26),email:n(4937),html:n(5810),link:n(7786),reference:n(977),strong:n(1248),emphasis:n(3391),deletion:n(5702),code:n(1243),break:n(4245),text:n(8825)},u.blockMethods=h(u.blockTokenizers),u.inlineMethods=h(u.inlineTokenizers),u.tokenizeBlock=l("block"),u.tokenizeInline=l("inline"),u.tokenizeFactory=l},5248:(e,t,n)=>{"use strict";var i=n(7529),r=n(2123),o=n(3114);e.exports=function(e){var t,n,a=this,s=a.options;if(null==e)e={};else{if("object"!=typeof e)throw new Error("Invalid value `"+e+"` for setting `options`");e=i(e)}for(t in o){if(null==(n=e[t])&&(n=s[t]),"blocks"!==t&&"boolean"!=typeof n||"blocks"===t&&"object"!=typeof n)throw new Error("Invalid value `"+n+"` for setting `options."+t+"`");e[t]=n}return a.options=e,a.escape=r(e),a}},2768:(e,t,n)=>{"use strict";var i=n(2139),r=n(7574),o=n(46);e.exports=l,l.locator=o,l.notInLink=!0;var a="mailto:",s=a.length;function l(e,t,n){var o,l,c,u,h,p=this,d="",f=t.length,m=0,g="",v=!1,y="";if("<"===t.charAt(0)){for(m++,d="<";m"===o||"@"===o||":"===o&&"/"===t.charAt(m+1)));)g+=o,m++;if(g){if(y+=g,g="",y+=o=t.charAt(m),m++,"@"===o)v=!0;else{if(":"!==o||"/"!==t.charAt(m+1))return;y+="/",m++}for(;m"!==o);)g+=o,m++;if(o=t.charAt(m),g&&">"===o)return!!n||(c=y+=g,d+=y+o,(l=e.now()).column++,l.offset++,v&&(y.slice(0,s).toLowerCase()===a?(c=c.slice(s),l.column+=s,l.offset+=s):y=a+y),u=p.inlineTokenizers,p.inlineTokenizers={text:u.text},h=p.enterLink(),c=p.tokenizeInline(c,l),p.inlineTokenizers=u,h(),e(d)({type:"link",title:null,url:r(y,{nonTerminated:!1}),children:c}))}}}},9269:e=>{"use strict";var t=/^[ \t]*(\n|$)/;e.exports=function(e,n,i){var r,o="",a=0,s=n.length;for(;a{"use strict";var i=n(2745),r=n(7901);e.exports=function(e,t,n){var o,a,s,l,c,u,h,p,d,f=this,m=f.offset,g=f.blockTokenizers,v=f.interruptBlockquote,y=e.now(),b=y.line,w=t.length,k=[],C=[],x=[],E=0;for(;E"!==t.charAt(E))return;if(n)return!0;E=0;var S=null,M=!1;for(;E"===t.charAt(E)?(E++,p=!0," "===t.charAt(E)&&E++):E=h,c=t.slice(E,l),!p&&!i(c)){E=h;break}if(!p&&(s=t.slice(E),r(v,g,f,[e,s,!0])))break;if(0===h){var T=c.match(/^\[!([^\]]+)\]([+\-]?)(?:\s|$)/);if(T){let e=T[1],t=e,n="",i=e.indexOf("|");-1!==i&&(t=e.substr(0,i),n=e.substr(i+1)),S={type:t.trim().toLowerCase().replace(/\s+/g,"-"),fold:T[2],data:n};var D=T[0].length;E+=D,(c=c.substr(D)).trim()&&(M=!0)}}u=h===E?c:t.slice(h,l),x.push(E-h),k.push(u),C.push(c),E=l+1}E=-1,w=x.length,o=e(k.join("\n"));for(;++E{"use strict";var i=n(563);e.exports=r,r.locator=i;function r(e,t,n){for(var i,r=t.length,o=-1,a="";++o{"use strict";e.exports=function(e,r,o){var a,s,l,c,u,h,p,d,f,m,g,v,y,b=this,w=b.options.gfm,k=r.length+1,C=0,x="";if(!w)return;for(;C=4)){for(p="";C{"use strict";var i=n(6464),r=n(7257);e.exports=function(e,t,n){var i,a,s,l=-1,c=t.length,u="",h="",p="",d="";for(;++l{"use strict";var i=n(6497);e.exports=r,r.locator=i;function r(e,t,n){for(var i,r,o,a,s,l,c=t.length,u=0;u2&&(32===a||10===a)&&(32===s||10===s)){for(u++,c--;u{"use strict";var i=n(2139),r=n(6749);e.exports=function(e,t,n){var i,h,p,d,f,m,g,v,y=this,b=y.options.commonmark,w=0,k=t.length,C="";for(;w"!==e&&"["!==e&&e!==l}function u(e){return"["!==e&&e!==l&&!i(e)}c.delimiter=">"},5702:(e,t,n)=>{"use strict";var i=n(2139),r=n(3723);e.exports=a,a.locator=r;var o="~";function a(e,t,n){var r,a,s,l="",c="",u="",h="";if(this.options.gfm&&t.charAt(0)===o&&t.charAt(1)===o&&!i(t.charAt(2)))for(r=1,a=t.length,(s=e.now()).column+=2,s.offset+=2;++r{"use strict";var i=n(7574),r=n(6195),o=n(6260),a=n(973);e.exports=s,s.locator=a,s.notInLink=!0;function s(e,t,n){var a,s,l,c,u=this,h=u.options.gfm,p=u.inlineTokenizers,d=0,f=t.length,m=-1;if(h){for(a=t.charCodeAt(d);r(a)||o(a)||43===a||45===a||46===a||95===a;)a=t.charCodeAt(++d);if(0!==d&&64===a){for(d++;d{"use strict";var i=n(2745),r=n(3017),o=n(2139),a=n(2411);e.exports=s,s.locator=a;function s(e,t,n){var a,s,l,c,u,h,p,d=0,f=t.charAt(d);if(!("*"!==f&&"_"!==f||(s=this.options.pedantic,u=f,l=f,h=t.length,d++,c="",f="",s&&o(t.charAt(d)))))for(;d{"use strict";var i=n(4681);e.exports=r,r.locator=i;function r(e,t,n){var i,r;if("\\"===t.charAt(0)&&(i=t.charAt(1),-1!==this.escape.indexOf(i)))return!!n||(r="\n"===i?{type:"break"}:{type:"text",value:i},e("\\"+i)(r))}},684:e=>{"use strict";e.exports=function(e,r,o){var a,s,l,c=this.options.pedantic,u=r.length+1,h=-1,p=e.now(),d="",f="";for(;++h6)return;if(!l||!c&&r.charAt(h+1)===i)return;u=r.length+1,s="";for(;++h{"use strict";e.exports=function(e,t,n){var i,r,o,a,s,l=e.now(),c=t.length,u=-1,h="";for(;++u=3){u--;break}h+=o}i="",r="";for(;++u{"use strict";var i=n(1537).g;e.exports=function(e,t,n){var i,g,v,y,b,w,k,C=this.options.blocks.join("|"),x=new RegExp("^|$))","i"),E=t.length,S=0,M=[[r,o,!0],[a,s,!0],[l,c,!0],[u,h,!0],[p,d,!0],[x,f,!0],[m,f,!1]];for(;S|$))/i,o=/<\/(script|pre|style)>/i,a=/^/,l=/^<\?/,c=/\?>/,u=/^/,p=/^/,f=/^$/,m=new RegExp(i.source+"\\s*$")},5810:(e,t,n)=>{"use strict";var i=n(6260),r=n(46),o=n(1537)._;e.exports=l,l.locator=r;var a=/^/i;function l(e,t,n){var r,l,c=this,u=t.length;if(!("<"!==t.charAt(0)||u<3)&&(r=t.charAt(1),(i(r)||"?"===r||"!"===r||"/"===r)&&(l=t.match(o))))return!!n||(l=l[0],!c.inLink&&a.test(l)?c.inLink=!0:c.inLink&&s.test(l)&&(c.inLink=!1),e(l)({type:"html",value:l}))}},7786:(e,t,n)=>{"use strict";var i=n(2139),r=n(633);e.exports=l,l.locator=r;var o="(",a=")",s="\\";function l(e,t,n){var r,l,c,u,h,p,d,f,m,g,v,y,b,w,k,C,x,E,S=this,M="",T=0,D=t.charAt(0),A=S.options.pedantic,L=S.options.commonmark,P=S.options.gfm;if("!"===D&&(f=!0,M=D,D=t.charAt(++T)),"["===D&&(f||!S.inLink)){for(M+=D,w="",T++,v=t.length,b=0,(C=e.now()).column+=T,C.offset+=T;T=c&&(c=0):c=l}else if(D===s)T++,p+=t.charAt(T);else if(c&&!P||"["!==D){if((!c||P)&&"]"===D){if(!b){if(t.charAt(T+1)!==o)return;p+=o,r=!0,T++;break}b--}}else b++;w+=p,p="",T++}if(r){for(m=w,M+=w+p,T++;T"!==(D=t.charAt(T));){if(L&&"\n"===D)return;w+=D,T++}if(">"!==t.charAt(T))return;M+="<"+w+">",k=w,T++}else{for(D=null,p="";T{"use strict";var i=n(2745),r=n(6464),o=n(6195),a=n(8930),s=n(9460),l=n(7901);e.exports=function(e,t,n){var r,a,s,p,d,f,m,g,y,b,w,k,C,x,E,S,M,T,D,A,L,P,I,F=this,O=F.options.commonmark,B=F.options.pedantic,N=F.blockTokenizers,R=F.interruptList,H=0,V=t.length,z=null,q=!1;for(;H=M.indent&&(I=!0),p=t.charAt(H),y=null,!I){if("*"===p||"+"===p||"-"===p)y=p,H++,r++;else{for(a="";H=M.indent||r>4):I=!0,g=!1,H=m;if(w=t.slice(m,f),b=m===H?w:t.slice(H,f),("*"===y||"_"===y||"-"===y)&&N.thematicBreak.call(F,e,w,!0))break;if(k=C,C=!g&&!i(b).length,I&&M)M.value=M.value.concat(S,w),E=E.concat(S,w),S=[];else if(g)0!==S.length&&(q=!0,M.value.push(""),M.trail=S.concat()),M={value:[w],indent:r,trail:[]},x.push(M),E=E.concat(S,w),S=[];else if(C){if(k&&!O)break;S.push(w)}else{if(k)break;if(l(R,N,F,[e,w,!0]))break;M.value=M.value.concat(S,w),E=E.concat(S,w),S=[]}H=f+1}A=e(E.join(u)).reset({type:"list",ordered:s,start:z,spread:q,children:[]}),T=F.enterList(),D=F.enterBlock(),H=-1,V=x.length;for(;++H{"use strict";var i=n(2745),r=n(7257),o=n(7901);e.exports=function(e,t,n){var s,l,c,u,h,p=this,d=p.options.commonmark,f=p.blockTokenizers,m=p.interruptParagraph,g=t.indexOf(a),v=t.length;for(;g=4&&c!==a){g=t.indexOf(a,g+1);continue}}if(l=t.slice(g+1),o(m,f,p,[e,l,!0]))break;if(s=g,-1!==(g=t.indexOf(a,g+1))&&""===i(t.slice(s,g))){g=s;break}}if(l=t.slice(0,g),n)return!0;return h=e.now(),l=r(l),e(l)({type:"paragraph",children:p.tokenizeInline(l,h)})};var a="\n"},977:(e,t,n)=>{"use strict";var i=n(2139),r=n(633),o=n(6749);e.exports=h,h.locator=r;var a="link",s="full",l="[",c="\\",u="]";function h(e,t,n){var r,h,p,d,f,m,g,v,y=this,b=y.options.commonmark,w=t.charAt(0),k=0,C=t.length,x="",E="",S=a,M="shortcut";if("!"===w&&(S="image",E=w,w=t.charAt(++k)),w===l){for(k++,E+=w,m="",v=0;k{"use strict";var i=n(2745),r=n(2139),o=n(1016);e.exports=a,a.locator=o;function a(e,t,n){var o,a,s,l,c,u,h,p=0,d=t.charAt(p);if(!("*"!==d&&"_"!==d||t.charAt(++p)!==d||(a=this.options.pedantic,c=(s=d)+s,u=t.length,p++,l="",d="",a&&r(t.charAt(p)))))for(;p{"use strict";var i=n(2139);e.exports=function(e,t,n){var a,s,l,c,u,h,p,d,f,m,g,v,y,b,w,k,C,x,E,S,M,T;if(!this.options.gfm)return;a=0,k=0,h=t.length+1,p=[];for(;aS){if(k<2)return;break}p.push(t.slice(a,S)),k++,a=S+1}c=p.join(r),s=p.splice(1,1)[0]||[],a=0,h=s.length,k--,l=!1,g=[];for(;a1&&(f?(c+=d.slice(0,-1),d=d.charAt(d.length-1)):(c+=d,d="")),b=e.now(),e(c)({type:"tableCell",children:this.tokenizeInline(v,b)},u)),e(d+f),d="",v=""):(d&&(v+=d,d=""),v+=f,"\\"===f&&a!==h-2&&(v+=C.charAt(a+1),a++)),y=!1,a++):(v?d+=f:e(f),a++);w||e(r+s)}return E};var r="\n",o="left"},8825:e=>{"use strict";e.exports=function(e,t,n){var i,r,o,a,s,l,c,u,h,p,d=this;if(n)return!0;i=d.inlineMethods,a=i.length,r=d.inlineTokenizers,o=-1,h=t.length;for(;++o{"use strict";e.exports=function(e,t,n){var i,r,o,a,s=-1,l=t.length+1,c="";for(;++s=3&&(!i||"\n"===i)?(c+=a,!!n||e(c)({type:"thematicBreak"})):void 0;a+=i}}},26:(e,t,n)=>{"use strict";var i=n(932),r=n(7574),o=n(6195),a=n(6260),s=n(2139),l=n(8637);e.exports=c,c.locator=l,c.notInLink=!0;function c(e,t,n){var l,c,u,h,p,d,f,m,g,v,y,b,w,k,C=this,x=C.options.gfm,E=C.inlineTokenizers,S=t.length,M=-1,T=!1;if(x){if("www."===t.slice(0,4))T=!0,h=4;else if("http://"===t.slice(0,7).toLowerCase())h=7;else{if("https://"!==t.slice(0,8).toLowerCase())return;h=8}for(M=h-1,u=h,l=[];hg;)h=p+d.lastIndexOf(")"),d=t.slice(p,h),v--;if(59===t.charCodeAt(h-1)&&(h--,a(t.charCodeAt(h-1)))){for(m=h-2;a(t.charCodeAt(m));)m--;38===t.charCodeAt(m)&&(h=m)}return y=t.slice(0,h),w=r(y,{nonTerminated:!1}),T&&(w="http://"+w),k=C.enterLink(),C.inlineTokenizers={text:E.text},b=C.tokenizeInline(y,e.now()),C.inlineTokenizers=E,k(),e(y)({type:"link",title:null,url:w,children:b})}}}},831:e=>{"use strict";function t(e){var t,n;return"text"!==e.type||!e.position||(t=e.position.start,n=e.position.end,t.line!==n.line||n.column-t.column===e.value.length)}function n(e,t){return e.value+=t.value,e}function i(e,t){return this.options.commonmark||this.options.gfm?t:(e.children=e.children.concat(t.children),e)}e.exports=function(e){return function(r,o){var a,s,l,c,u,h=this,p=h.offset,d=[],f=h[e+"Methods"],m=h[e+"Tokenizers"],g=o.line,v=o.column;if(!r)return d;S.now=w,S.file=h.file,y("");for(;r;){for(a=-1,s=f.length,c=!1;++a{"use strict";e.exports=function(e,n){return function(i){var r,o=0,a=i.indexOf(t),s=e[n],l=[];for(;-1!==a;)l.push(i.slice(o,a)),o=a+1,(r=i.charAt(o))&&-1!==s.indexOf(r)||l.push(t),a=i.indexOf(t,o+1);return l.push(i.slice(o)),l.join("")}};var t="\\"},8930:e=>{"use strict";e.exports=function(e){var t,n=0,i=0,r=e.charAt(n),o={},a=0;for(;"\t"===r||" "===r;){for(i+=t="\t"===r?4:1,t>1&&(i=Math.floor(i/t)*t);a{"use strict";var n="<[A-Za-z][A-Za-z0-9\\-]*(?:\\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\\s*=\\s*(?:[^\"'=<>`\\u0000-\\u0020]+|'[^']*'|\"[^\"]*\"))?)*\\s*\\/?>",i="<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>";t.g=new RegExp("^(?:"+n+"|"+i+")"),t._=new RegExp("^(?:"+n+"|"+i+"|\x3c!----\x3e|\x3c!--(?:-?[^>-])(?:-?[^-])*--\x3e|<[?].*?[?]>|]*>|)")},7901:e=>{"use strict";e.exports=function(e,t,n,i){var r,o,a=e.length,s=-1;for(;++s{"use strict";var i=n(9357);e.exports=function(e){return i(e).toLowerCase()}},9460:(e,t,n)=>{"use strict";var i=n(2745),r=n(6464),o=n(8930);e.exports=function(e,t){var n,a,s,l=e.split("\n"),c=l.length+1,u=1/0,h=[];l.unshift(r(" ",t)+"!");for(;c--;)if(a=o(l[c]),h[c]=a.stops,0!==i(l[c]).length){if(!a.indent){u=1/0;break}a.indent>0&&a.indent{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var i in t)n.o(t,i)&&!n.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{"use strict";var e={};n.r(e),n.d(e,{Annotation:()=>Yn,AnnotationType:()=>Xn,ChangeDesc:()=>un,ChangeSet:()=>hn,CharCategory:()=>ai,Compartment:()=>Nn,EditorSelection:()=>bn,EditorState:()=>ci,Facet:()=>Cn,Line:()=>Yt,MapMode:()=>cn,Prec:()=>On,Range:()=>pi,RangeSet:()=>mi,RangeSetBuilder:()=>gi,RangeValue:()=>hi,SelectionRange:()=>yn,StateEffect:()=>Zn,StateEffectType:()=>$n,StateField:()=>Dn,Text:()=>zt,Transaction:()=>Qn,codePointAt:()=>on,codePointSize:()=>sn,combineConfig:()=>ui,countColumn:()=>Ti,findClusterBreak:()=>Jt,findColumn:()=>Di,fromCodePoint:()=>an});var t={};n.r(t),n.d(t,{BidiSpan:()=>Uo,BlockInfo:()=>ja,BlockType:()=>_r,Decoration:()=>jr,Direction:()=>To,EditorView:()=>Ts,GutterMarker:()=>sc,MatchDecorator:()=>cl,RectangleMarker:()=>qs,ViewPlugin:()=>vo,ViewUpdate:()=>Mo,WidgetType:()=>Ur,__test:()=>Rc,closeHoverTooltips:()=>Ql,crosshairCursor:()=>Il,drawSelection:()=>Zs,dropCursor:()=>sl,getPanel:()=>nc,getTooltip:()=>Xl,gutter:()=>hc,gutterLineClass:()=>lc,gutters:()=>dc,hasHoverTooltips:()=>$l,highlightActiveLine:()=>kl,highlightActiveLineGutter:()=>Lc,highlightSpecialChars:()=>ml,highlightTrailingWhitespace:()=>Nc,highlightWhitespace:()=>Oc,hoverTooltip:()=>Yl,keymap:()=>Bs,layer:()=>Ys,lineNumberMarkers:()=>kc,lineNumbers:()=>Mc,logException:()=>po,panels:()=>tc,placeholder:()=>Sl,rectangularSelection:()=>Al,repositionTooltips:()=>Jl,runScopeHandlers:()=>Hs,scrollPastEnd:()=>wl,showPanel:()=>ac,showTooltip:()=>Ul,tooltips:()=>Bl});var i={};n.r(i),n.d(i,{DefaultBufferLength:()=>Hc,IterMode:()=>Wc,MountedTree:()=>Uc,NodeProp:()=>qc,NodeSet:()=>Gc,NodeType:()=>jc,NodeWeakMap:()=>pu,Parser:()=>fu,Tree:()=>Xc,TreeBuffer:()=>Zc,TreeCursor:()=>au,TreeFragment:()=>du,parseMixed:()=>gu});var r={};n.r(r),n.d(r,{Tag:()=>Au,classHighlighter:()=>ih,highlightTree:()=>Hu,styleTags:()=>Fu,tagHighlighter:()=>Nu,tags:()=>nh});var o={};n.r(o),n.d(o,{HighlightStyle:()=>mp,IndentContext:()=>Ph,LRLanguage:()=>lh,Language:()=>ah,LanguageDescription:()=>Eh,LanguageSupport:()=>xh,ParseContext:()=>gh,StreamLanguage:()=>Hp,StringStream:()=>Np,TreeIndentContext:()=>Nh,bracketMatching:()=>Pp,codeFolding:()=>cp,continuedIndent:()=>qh,defaultHighlightStyle:()=>xp,defineLanguageFacet:()=>oh,delimitedIndent:()=>Hh,ensureSyntaxTree:()=>uh,flatIndent:()=>zh,foldAll:()=>rp,foldCode:()=>tp,foldEffect:()=>Yh,foldGutter:()=>dp,foldInside:()=>Wh,foldKeymap:()=>ap,foldNodeProp:()=>jh,foldService:()=>_h,foldState:()=>Zh,foldable:()=>Gh,foldedRanges:()=>Qh,forceParsing:()=>ph,getIndentUnit:()=>Th,getIndentation:()=>Ah,highlightingFor:()=>wp,ignoreSpellcheckToken:()=>Zp,indentNodeProp:()=>Ih,indentOnInput:()=>Uh,indentRange:()=>Lh,indentService:()=>Sh,indentString:()=>Dh,indentUnit:()=>Mh,language:()=>Ch,languageDataProp:()=>rh,lineClassNodeProp:()=>Yp,lineHighlighter:()=>$p,matchBrackets:()=>Fp,syntaxHighlighting:()=>bp,syntaxParserRunning:()=>dh,syntaxTree:()=>ch,syntaxTreeAvailable:()=>hh,tokenClassNodeProp:()=>Kp,unfoldAll:()=>op,unfoldCode:()=>np,unfoldEffect:()=>Xh});var a={};n.r(a),n.d(a,{CompletionContext:()=>Qp,acceptCompletion:()=>Ld,autocompletion:()=>Af,clearSnippet:()=>Yd,closeBrackets:()=>df,closeBracketsKeymap:()=>wf,closeCompletion:()=>Id,completeAnyWord:()=>sf,completeFromList:()=>ed,completionKeymap:()=>Lf,completionStatus:()=>If,currentCompletions:()=>Of,deleteBracketPair:()=>bf,ifIn:()=>td,ifNotIn:()=>nd,insertBracket:()=>kf,insertCompletionText:()=>sd,moveCompletionSelection:()=>Ad,nextSnippetField:()=>Xd,pickedCompletion:()=>ad,prevSnippetField:()=>$d,selectedCompletion:()=>Bf,selectedCompletionIndex:()=>Nf,setSelectedCompletion:()=>Rf,snippet:()=>Gd,snippetCompletion:()=>ef,snippetKeymap:()=>Qd,startCompletion:()=>Pd});var s={};n.r(s),n.d(s,{collab:()=>_f,getClientID:()=>Kf,getSyncedVersion:()=>Gf,receiveUpdates:()=>jf,sendableUpdates:()=>Wf});var l={};n.r(l),n.d(l,{blockComment:()=>em,blockUncomment:()=>tm,copyLineDown:()=>bv,copyLineUp:()=>yv,cursorCharBackward:()=>qm,cursorCharForward:()=>zm,cursorCharLeft:()=>Hm,cursorCharRight:()=>Vm,cursorDocEnd:()=>Kg,cursorDocStart:()=>Gg,cursorGroupBackward:()=>Gm,cursorGroupForward:()=>Wm,cursorGroupLeft:()=>_m,cursorGroupRight:()=>jm,cursorLineBoundaryBackward:()=>ug,cursorLineBoundaryForward:()=>cg,cursorLineBoundaryLeft:()=>hg,cursorLineBoundaryRight:()=>pg,cursorLineDown:()=>ig,cursorLineEnd:()=>fg,cursorLineStart:()=>dg,cursorLineUp:()=>ng,cursorMatchingBracket:()=>gg,cursorPageDown:()=>sg,cursorPageUp:()=>ag,cursorSubwordBackward:()=>$m,cursorSubwordForward:()=>Xm,cursorSyntaxLeft:()=>Jm,cursorSyntaxRight:()=>eg,defaultKeymap:()=>Iv,deleteCharBackward:()=>iv,deleteCharForward:()=>rv,deleteGroupBackward:()=>av,deleteGroupForward:()=>sv,deleteLine:()=>wv,deleteToLineEnd:()=>lv,deleteToLineStart:()=>cv,deleteTrailingWhitespace:()=>uv,emacsStyleKeymap:()=>Lv,history:()=>hm,historyField:()=>pm,historyKeymap:()=>Pm,indentLess:()=>Dv,indentMore:()=>Tv,indentSelection:()=>Mv,indentWithTab:()=>Fv,insertBlankLine:()=>xv,insertNewline:()=>kv,insertNewlineAndIndent:()=>Cv,insertTab:()=>Av,invertedEffects:()=>lm,isolateHistory:()=>sm,lineComment:()=>Zf,lineUncomment:()=>Qf,moveLineDown:()=>gv,moveLineUp:()=>mv,redo:()=>mm,redoDepth:()=>wm,redoSelection:()=>vm,selectAll:()=>$g,selectCharBackward:()=>xg,selectCharForward:()=>Cg,selectCharLeft:()=>wg,selectCharRight:()=>kg,selectDocEnd:()=>Xg,selectDocStart:()=>Yg,selectGroupBackward:()=>Dg,selectGroupForward:()=>Tg,selectGroupLeft:()=>Sg,selectGroupRight:()=>Mg,selectLine:()=>Zg,selectLineBoundaryBackward:()=>qg,selectLineBoundaryForward:()=>zg,selectLineBoundaryLeft:()=>Ug,selectLineBoundaryRight:()=>_g,selectLineDown:()=>Ng,selectLineEnd:()=>Wg,selectLineStart:()=>jg,selectLineUp:()=>Bg,selectMatchingBracket:()=>vg,selectPageDown:()=>Vg,selectPageUp:()=>Hg,selectParentSyntax:()=>Qg,selectSubwordBackward:()=>Pg,selectSubwordForward:()=>Lg,selectSyntaxLeft:()=>Ig,selectSyntaxRight:()=>Fg,simplifySelection:()=>Jg,splitLine:()=>hv,standardKeymap:()=>Pv,toggleBlockComment:()=>Jf,toggleBlockCommentByLine:()=>nm,toggleComment:()=>Yf,toggleLineComment:()=>$f,transposeChars:()=>pv,undo:()=>fm,undoDepth:()=>bm,undoSelection:()=>gm});var c={};n.r(c),n.d(c,{closeLintPanel:()=>Zv,diagnosticCount:()=>Gv,forEachDiagnostic:()=>ky,forceLinting:()=>iy,lintGutter:()=>wy,lintKeymap:()=>Jv,linter:()=>ny,nextDiagnostic:()=>Qv,openLintPanel:()=>$v,setDiagnostics:()=>qv,setDiagnosticsEffect:()=>Uv});var u={};n.r(u),n.d(u,{RegExpCursor:()=>My,SearchCursor:()=>xy,SearchQuery:()=>Ky,closeSearchPanel:()=>wb,findNext:()=>hb,findPrevious:()=>pb,getSearchQuery:()=>rb,gotoLine:()=>Oy,highlightSelectionMatches:()=>Hy,openSearchPanel:()=>bb,replaceAll:()=>gb,replaceNext:()=>mb,search:()=>Gy,searchKeymap:()=>kb,searchPanelOpen:()=>ob,selectMatches:()=>db,selectNextOccurrence:()=>jy,selectSelectionMatches:()=>fb,setSearchQuery:()=>tb});var h={};n.r(h),n.d(h,{ContextTracker:()=>Qb,ExternalTokenizer:()=>Rb,InputStream:()=>Bb,LRParser:()=>Jb,Stack:()=>Ab});var p={};n.r(p),n.d(p,{AbstractTextComponent:()=>pL,App:()=>JW,BaseComponent:()=>sL,ButtonComponent:()=>cL,ColorComponent:()=>bL,Component:()=>GM,DropdownComponent:()=>vL,EditableFileView:()=>iB,Editor:()=>zL,EditorSuggest:()=>TH,Events:()=>vD,ExtraButtonComponent:()=>uL,FileManager:()=>JH,FileSystemAdapter:()=>fA,FileView:()=>tB,FuzzySuggestModal:()=>cV,HoverPopover:()=>oR,ItemView:()=>eB,Keymap:()=>pD,MarkdownPreviewRenderer:()=>CT,MarkdownPreviewSection:()=>yT,MarkdownPreviewView:()=>uO,MarkdownRenderChild:()=>vT,MarkdownRenderer:()=>sO,MarkdownSourceView:()=>jN,MarkdownView:()=>KN,Menu:()=>KL,MenuItem:()=>WL,MenuSeparator:()=>GL,MetadataCache:()=>jA,Modal:()=>dD,MomentFormatComponent:()=>gL,Notice:()=>gD,Platform:()=>$w,Plugin:()=>TD,PluginSettingTab:()=>DD,PopoverState:()=>UN,PopoverSuggest:()=>DR,Scope:()=>uD,Setting:()=>aL,SettingTab:()=>NT,SliderComponent:()=>yL,SuggestModal:()=>lV,TAbstractFile:()=>yA,TFile:()=>wA,TFolder:()=>kA,TextAreaComponent:()=>mL,TextComponent:()=>dL,TextFileView:()=>WN,ToggleComponent:()=>hL,ValueComponent:()=>lL,Vault:()=>CA,View:()=>wL,ViewRegistry:()=>cR,Workspace:()=>AV,WorkspaceContainer:()=>yH,WorkspaceFloating:()=>EV,WorkspaceItem:()=>fH,WorkspaceLeaf:()=>CH,WorkspaceParent:()=>mH,WorkspaceRibbon:()=>CV,WorkspaceRoot:()=>xV,WorkspaceSidedock:()=>vH,WorkspaceSplit:()=>gH,WorkspaceTabs:()=>wH,WorkspaceWindow:()=>SV,addIcon:()=>aT,apiVersion:()=>KW,arrayBufferToBase64:()=>q,arrayBufferToHex:()=>G,base64ToArrayBuffer:()=>z,debounce:()=>Aw,editorEditorField:()=>SO,editorInfoField:()=>TO,editorLivePreviewField:()=>DO,editorViewField:()=>MO,finishRenderMath:()=>QC,fuzzySearch:()=>wk,getAllTags:()=>tA,getBlobArrayBuffer:()=>Iw,getIcon:()=>rT,getIconIds:()=>lT,getLinkpath:()=>ZD,hexToArrayBuffer:()=>W,htmlToMarkdown:()=>jL,iterateCacheRefs:()=>JD,iterateRefs:()=>eA,livePreviewState:()=>KB,loadMathJax:()=>GC,loadMermaid:()=>UC,loadPdfJs:()=>VC,loadPrism:()=>jC,moment:()=>WB,normalizePath:()=>tt,parseFrontMatterAliases:()=>HM,parseFrontMatterEntry:()=>NM,parseFrontMatterStringArray:()=>RM,parseFrontMatterTags:()=>VM,parseLinktext:()=>QD,parseYaml:()=>_B,prepareFuzzySearch:()=>vk,prepareQuery:()=>gk,prepareSimpleSearch:()=>Ek,removeIcon:()=>sT,renderMatches:()=>Mk,renderMath:()=>KC,renderResults:()=>Sk,request:()=>ik,requestUrl:()=>nk,requireApiVersion:()=>XW,resolveSubpath:()=>aA,sanitizeHTMLToDom:()=>WM,setIcon:()=>oT,sortSearchResults:()=>kk,stringifyYaml:()=>jB,stripHeading:()=>rA,stripHeadingForLink:()=>oA});var d=function(e,t){return(d=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)};function f(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}d(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var m=function(){return(m=Object.assign||function(e){for(var t,n=1,i=arguments.length;n0&&r[r.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!r||o[1]>r[0]&&o[1]=e.length&&(e=void 0),{value:e&&e[i++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function w(e,t,n){if(n||2===arguments.length)for(var i,r=0,o=t.length;r1||s(e,t)}))})}function s(e,t){try{!function(e){e.value instanceof k?Promise.resolve(e.value.v).then(l,c):u(o[0][2],e)}(r[e](t))}catch(e){u(o[0][3],e)}}function l(e){s("next",e)}function c(e){s("throw",e)}function u(e,t){e(t),o.shift(),o.length&&s(o[0][0],o[0][1])}}function x(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=b(e),t={},i("next"),i("throw"),i("return"),t[Symbol.asyncIterator]=function(){return this},t);function i(n){t[n]=e[n]&&function(t){return new Promise((function(i,r){(function(e,t,n,i){Promise.resolve(i).then((function(t){e({value:t,done:n})}),t)})(i,r,(t=e[n](t)).done,t.value)}))}}}Object.create;const E=(e=>e.CapacitorPlatforms=(e=>{const t=new Map;t.set("web",{name:"web"});const n=e.CapacitorPlatforms||{currentPlatform:{name:"web"},platforms:t};return n.addPlatform=(e,t)=>{n.platforms.set(e,t)},n.setPlatform=e=>{n.platforms.has(e)&&(n.currentPlatform=n.platforms.get(e))},n})(e))("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==n.g?n.g:{});E.addPlatform,E.setPlatform;var S;!function(e){e.Unimplemented="UNIMPLEMENTED",e.Unavailable="UNAVAILABLE"}(S||(S={}));class M extends Error{constructor(e,t){super(e),this.message=e,this.code=t}}const T=e=>{var t,n;return(null==e?void 0:e.androidBridge)?"android":(null===(n=null===(t=null==e?void 0:e.webkit)||void 0===t?void 0:t.messageHandlers)||void 0===n?void 0:n.bridge)?"ios":"web"},D=e=>{var t,n,i,r,o;const a=e.Capacitor||{},s=a.Plugins=a.Plugins||{},l=e.CapacitorPlatforms,c=(null===(t=null==l?void 0:l.currentPlatform)||void 0===t?void 0:t.getPlatform)||(()=>T(e)),u=(null===(n=null==l?void 0:l.currentPlatform)||void 0===n?void 0:n.isNativePlatform)||(()=>"web"!==T(e)),h=(null===(i=null==l?void 0:l.currentPlatform)||void 0===i?void 0:i.isPluginAvailable)||(e=>{const t=d.get(e);return!!(null==t?void 0:t.platforms.has(c()))||!!p(e)}),p=(null===(r=null==l?void 0:l.currentPlatform)||void 0===r?void 0:r.getPluginHeader)||(e=>{var t;return null===(t=a.PluginHeaders)||void 0===t?void 0:t.find((t=>t.name===e))}),d=new Map,f=(null===(o=null==l?void 0:l.currentPlatform)||void 0===o?void 0:o.registerPlugin)||((e,t={})=>{const n=d.get(e);if(n)return console.warn(`Capacitor plugin "${e}" already registered. Cannot register plugins twice.`),n.proxy;const i=c(),r=p(e);let o;const l=n=>{let s;const l=(...l)=>{const c=(async()=>(!o&&i in t&&(o=o="function"==typeof t[i]?await t[i]():t[i]),o))().then((t=>{const o=((t,n)=>{var o,s;if(!r){if(t)return null===(s=t[n])||void 0===s?void 0:s.bind(t);throw new M(`"${e}" plugin is not implemented on ${i}`,S.Unimplemented)}{const i=null==r?void 0:r.methods.find((e=>n===e.name));if(i)return"promise"===i.rtype?t=>a.nativePromise(e,n.toString(),t):(t,i)=>a.nativeCallback(e,n.toString(),t,i);if(t)return null===(o=t[n])||void 0===o?void 0:o.bind(t)}})(t,n);if(o){const e=o(...l);return s=null==e?void 0:e.remove,e}throw new M(`"${e}.${n}()" is not implemented on ${i}`,S.Unimplemented)}));return"addListener"===n&&(c.remove=async()=>s()),c};return l.toString=()=>`${n.toString()}() { [capacitor code] }`,Object.defineProperty(l,"name",{value:n,writable:!1,configurable:!1}),l},u=l("addListener"),h=l("removeListener"),f=(e,t)=>{const n=u({eventName:e},t),i=async()=>{const i=await n;h({eventName:e,callbackId:i},t)},r=new Promise((e=>n.then((()=>e({remove:i})))));return r.remove=async()=>{console.warn("Using addListener() without 'await' is deprecated."),await i()},r},m=new Proxy({},{get(e,t){switch(t){case"$$typeof":return;case"addListener":return r?f:u;case"removeListener":return h;default:return l(t)}}});return s[e]=m,d.set(e,{name:e,proxy:m,platforms:new Set([...Object.keys(t),...r?[i]:[]])}),m});return a.convertFileSrc||(a.convertFileSrc=e=>e),a.getPlatform=c,a.handleError=t=>e.console.error(t),a.isNativePlatform=u,a.isPluginAvailable=h,a.pluginMethodNoop=(e,t,n)=>Promise.reject(`${n} does not have an implementation of "${t}".`),a.registerPlugin=f,a.Exception=M,a.DEBUG=!!a.DEBUG,a.isLoggingEnabled=!!a.isLoggingEnabled,a.platform=a.getPlatform(),a.isNative=a.isNativePlatform(),a},A=(e=>e.Capacitor=D(e))("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==n.g?n.g:{}),L=A.registerPlugin;A.Plugins;var P,I;!function(e){e.Dark="DARK",e.Light="LIGHT",e.Default="DEFAULT"}(P||(P={})),function(e){e.Body="body",e.Ionic="ionic",e.Native="native",e.None="none"}(I||(I={}));L("Keyboard");var F,O;!function(e){e.Dark="DARK",e.Light="LIGHT",e.Default="DEFAULT"}(F||(F={})),function(e){e.None="NONE",e.Slide="SLIDE",e.Fade="FADE"}(O||(O={}));function B(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}function N(e){return Buffer.from(e)}function R(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}function H(e){return R((new TextEncoder).encode(e))}function V(e){return(new TextDecoder).decode(new Uint8Array(e))}function z(e){for(var t=window.atob(e),n=t.length,i=new Uint8Array(n),r=0;r>>4).toString(16)),n.push((15&r).toString(16))}return n.join("")}var K="AES-GCM";function Y(e){return crypto.subtle.importKey("raw",e,K,!1,["encrypt","decrypt"])}function X(e,t,n){return v(this,void 0,Promise,(function(){var i,r,o;return y(this,(function(a){switch(a.label){case 0:return n||(n=crypto.getRandomValues(new Uint8Array(12))),[4,crypto.subtle.encrypt({name:K,iv:n},t,e)];case 1:return i=a.sent(),r=new ArrayBuffer(n.byteLength+i.byteLength),(o=new Uint8Array(r)).set(new Uint8Array(n),0),o.set(new Uint8Array(i),n.byteLength),[2,r]}}))}))}function $(e,t){return v(this,void 0,Promise,(function(){var n,i;return y(this,(function(r){switch(r.label){case 0:if(e.byteLength<12)throw new Error("Encrypted data is bad");return 12===e.byteLength?[2,new ArrayBuffer(0)]:(n=new Uint8Array(e,0,12),i=new Uint8Array(e,12),[4,crypto.subtle.decrypt({name:K,iv:n},t,i)]);case 1:return[2,r.sent()]}}))}))}var Z=32768,Q={N:Z,r:8,p:1,maxmem:67108864};function J(e,t){return v(this,void 0,Promise,(function(){var n;return y(this,(function(i){switch(i.label){case 0:return e=e.normalize("NFKC"),t=t.normalize("NFKC"),(n=window.require&&window.require("crypto"))?[4,new Promise((function(i,r){n.scrypt(Buffer.from(e,"utf8"),Buffer.from(t,"utf8"),32,Q,(function(e,t){e?r(e):i(t)}))}))]:[3,2];case 1:return[2,B(i.sent())];case 2:return[4,window.scrypt.scrypt(new Uint8Array(H(e)),new Uint8Array(H(t)),Z,8,1,32)];case 3:return[2,R(i.sent())]}}))}))}function ee(e){if(e<=0)return"0 B";for(var t=["B","KB","MB","GB","TB","PB"],n=t.length-1,i=0;i3?o.length%3:0;return r+(a?o.substr(0,a)+i:"")+o.substr(a).replace(/(\d{3})(?=\d)/g,"$1"+i)+(t?n+Math.abs(e-Math.floor(e)).toFixed(t).slice(2):"")}(r,0===n?0:2)," ").concat(t[n])}var te="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*?()";var ne,ie=-1!==(ne=navigator.appVersion).indexOf("Win")?"Windows":-1!==ne.indexOf("Mac")?"MacOS":-1!==ne.indexOf("X11")||-1!==ne.indexOf("Linux")?"Linux":"Unknown OS",re=navigator.userAgent.toLowerCase(),oe="MacOS"===ie,ae="Windows"===ie,se="Linux"===ie,le=re.indexOf("firefox")>-1,ce=/^((?!chrome|android).)*safari/i.test(re);function ue(e){return oe&&0===e.button&&e.ctrlKey}var he=Object.prototype.hasOwnProperty;function pe(e,t){return he.call(e,t)}var de=/&(amp|lt|gt|quot);/g,fe={"&":"&","<":"<",">":">",""":'"'};function me(e){return fe[e]}function ge(e){return e.replace(de,me)}var ve=/[.?*+^$[\]\\(){}|-]/g;function ye(e){return e.replace(ve,"\\$&")}function be(e){return Array.from(new Set(e))}var we=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4E\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/;var ke=function(){function e(){this.data={}}return e.prototype.add=function(e,t){var n=this.data,i=n[e];i||(i=[],n[e]=i),i.contains(t)||i.push(t)},e.prototype.remove=function(e,t){var n=this.data,i=n[e];i&&(i.remove(t),0===i.length&&delete n[e])},e.prototype.removeKey=function(e){delete this.data[e]},e.prototype.get=function(e){return this.data.hasOwnProperty(e)?this.data[e]:null},e.prototype.keys=function(){return Object.keys(this.data)},e.prototype.clear=function(e){delete this.data[e]},e.prototype.clearAll=function(){this.data={}},e.prototype.contains=function(e,t){var n=this.data[e];return n&&n.contains(t)},e.prototype.count=function(){var e=this.data,t=0;for(var n in e)e.hasOwnProperty(n)&&(t+=e[n].length);return t},e}();function Ce(e){for(var t=[],n=0;n=t);)i++,n++;return n}!function(){function e(){this.data=new Map}e.prototype.add=function(e,t){var n=this.data;n.has(e)?n.get(e).push(t):n.set(e,[t])},e.prototype.delete=function(e,t){var n=this.data;if(n.has(e)){var i=n.get(e);i.remove(t),0===i.length&&n.delete(e)}},e.prototype.get=function(e){return this.data.get(e)}}();var Ee=function(){function e(){this.data=new Map}return e.prototype.add=function(e,t){var n=this.data;n.has(e)?n.get(e).add(t):n.set(e,new Set([t]))},e.prototype.delete=function(e,t){var n=this.data;if(n.has(e)){var i=n.get(e);i.delete(t),0===i.size&&n.delete(e)}},e.prototype.get=function(e){return this.data.get(e)},e.prototype.getArray=function(e){var t=this.data;return t.has(e)?Array.from(t.get(e)):[]},e}();function Se(e){return"object"!=typeof e}function Me(e,t){if(void 0===t&&(t="\t"),void 0!==e)return Te(e,t).join("\n")}function Te(e,t){if(void 0===e)return["null"];if(Se(e)||!e||"[object Date]"===Object.prototype.toString.call(e))return[JSON.stringify(e)];if(Array.isArray(e)){if(e.every(Se))return[JSON.stringify(e)];for(var n=["["],i=e.length-1,r=0;r<=i;r++)for(var o=(p=Te(e[r],t)).length-1,a=0;a<=o;a++){var s="\t"+p[a];a===o&&r!==i&&(s+=","),n.push(s)}return n.push("]"),n}if("object"==typeof e){var l=!0;for(var c in e)if(e.hasOwnProperty(c)&&!Se(e[c])){l=!1;break}if(l)return[JSON.stringify(e)];n=["{"];var u=Object.keys(e);for(i=u.length-1,r=0;r<=i;r++){var h=e[c=u[r]];if(void 0!==h){var p;(p=Te(h,t))[0]=JSON.stringify(c)+":"+p[0];for(o=p.length-1,a=0;a<=o;a++){s="\t"+p[a];a===o&&r!==i&&(s+=","),n.push(s)}}}return n.push("}"),n}return[""]}var De="#^[]|",Ae=ae?'*"\\/<>:|?':"\\/:",Le=Ae.split("").join(" "),Pe=De.split("").join(" "),Ie=new RegExp("["+ye(Ae)+"]"),Fe=new RegExp("["+ye(De)+"]"),Oe=/^(CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])$/i;function Be(e){try{return Ne(e),!0}catch(e){return!1}}function Ne(e){if(ae){var t=e.charAt(e.length-1);if("."===t||" "===t)throw new Error("File names cannot end with a dot or a space.");var n=Xe(e);if(Oe.test(n))throw new Error("File name is forbidden: "+n)}if(e.split("/").some((function(e){return Ie.test(e)})))throw new Error("File name cannot contain any of the following characters: "+Le)}var Re=/\u00A0/g;var He=["bmp","png","jpg","jpeg","gif","svg","webp"],Ve=["mp3","wav","m4a","3gp","flac","ogg","oga","opus"],ze=["mp4","webm","ogv","mov","mkv"],qe=["pdf"],Ue=["md"],_e=["canvas"],je=["json","css","js"],We=[].concat(He,Ve,ze,qe,Ue,_e);function Ge(e){var t=e.lastIndexOf("/");return-1===t?e:e.slice(t+1)}function Ke(e){var t=e.lastIndexOf("/");return-1===t?"":e.slice(0,t)}function Ye(e){for(;e;){if(Ge(e).startsWith("."))return!0;e=Ke(e)}return!1}function Xe(e){var t=Ge(e),n=t.lastIndexOf(".");return-1===n||n===t.length-1||0===n?t:t.substr(0,n)}function $e(e){var t=e.lastIndexOf(".");return-1===t||t===e.length-1||0===t?e:e.substr(0,t)}function Ze(e){var t=e.lastIndexOf(".");return-1===t||t===e.length-1||0===t?"":e.substr(t+1).toLowerCase()}function Qe(e,t){return t?e+"."+t:e}function Je(e,t){return Ze(e)===t}function et(e){return We.contains(e)}function tt(e){return(t=nt(e),t.replace(Re," ")).normalize("NFC");var t}function nt(e){return""===(e=e.replace(/([\\/])+/g,"/").replace(/(^\/+|\/+$)/g,""))&&(e="/"),e}function it(e){var t=Ge(e);return"md"===Ze(t)?Xe(t):t}function rt(e){return"md"===Ze(Ge(e))?$e(e):e}var ot=window.require;function at(e){return ot&&ot(e)}function st(e){var t=at("electron");t&&e(t)}function lt(e){return v(this,void 0,Promise,(function(){var t;return y(this,(function(n){return(t=at("fs"))&&t.existsSync(e)?[2,t.promises.readFile(e)]:[2,null]}))}))}function ct(e){return v(this,void 0,Promise,(function(){var t,n;return y(this,(function(i){if(!(t=at("electron")))throw new Error("Not electron");return n=t.ipcRenderer,[2,new Promise((function(t,i){var r=Ce(16);n.once(r,(function(e,n){n.body?t(n):i(n.error)})),n.send("request-url",r,e)}))]}))}))}var ut=!1,ht=0;st((function(e){ut=e.ipcRenderer.sendSync("is-dev"),ht=parseInt(process.versions.electron.split(".")[0])}));var pt=ut,dt=ht;function ft(){return"win32"===process.platform||"darwin"===process.platform}function mt(e,t){if("win32"===process.platform){var n=window.require("vibrancy-win");if(t)e.setBackgroundColor("#00000000"),n.setAcrylic(e,343932960)||n.setBlurBehind(e,0);else n.disable(e)}else"darwin"===process.platform&&(e.setBackgroundColor("#00000000"),t?e.setVibrancy("fullscreen-ui"):e.setVibrancy(null))}function gt(e){return"WebViewElement"===e.constructor.name}pt||st((function(e){try{e.deprecate.setHandler((function(){}))}catch(e){}}));var vt="https://api.obsidian.md";pt&&(vt="http://127.0.0.1:3000");var yt=vt+"/user/info",bt=vt+"/subscription/business",wt=vt+"/user/signin",kt=vt+"/user/signout",Ct=vt+"/vault/list",xt=vt+"/vault/access",Et=vt+"/vault/create",St=vt+"/vault/delete",Mt=vt+"/vault/share/list",Tt=vt+"/vault/share/invite",Dt=vt+"/vault/share/remove",At=vt+"/publish/share/list",Lt=vt+"/publish/share/invite",Pt=vt+"/publish/share/remove",It=vt+"/publish/share/accept",Ft=vt+"/publish/list",Ot=vt+"/publish/create",Bt=vt+"/publish/delete",Nt=vt+"/publish/limit",Rt=vt+"/subscription/list",Ht="obsidian-account",Vt=function(){function e(){this.keyValidation="",this.company="",this.expiry=0,this.seats=0;try{var e=JSON.parse(localStorage.getItem(Ht));this.email=e.email,this.name=e.name,this.token=e.token,this.license=e.license,this.key=e.key}catch(e){}}return e.prototype.save=function(){var e={email:this.email,name:this.name,token:this.token,license:this.license,key:this.key};localStorage.setItem(Ht,JSON.stringify(e))},e.prototype.login=function(e,t,n){var i=this;ajax({url:wt,method:"POST",withCredentials:!1,data:{email:e,password:t},success:function(e){var t=JSON.parse(e);t.token&&(i.token=t.token,i.email=t.email,i.name=t.name,i.license=t.license,i.save()),n&&n(t)}})},e.prototype.logout=function(e){var t=this;ajax({url:kt,method:"POST",withCredentials:!1,data:{token:this.token},success:function(n){t.token="",t.email="",t.name="",t.license="",e&&e(n)}})},e.prototype.getUserInfo=function(){return v(this,void 0,Promise,(function(){var e,t;return y(this,(function(n){switch(n.label){case 0:return this.token?[4,ajaxPromise({url:yt,method:"POST",withCredentials:!1,data:{token:this.token}})]:[2];case 1:return e=n.sent(),"Not logged in"===(t=JSON.parse(e)).error?(this.email=null,this.name=null,this.token=null,this.license=null,this.save(),[2]):(this.email=t.email,this.name=t.name,this.license=t.license,this.save(),[2,t])}}))}))},e.prototype.checkKey=function(e){var t=this;this.key?ajax({url:bt,method:"POST",withCredentials:!1,data:{key:this.key},success:function(n){var i=JSON.parse(n);if(i.error)return t.keyValidation=i.error,void(e&&e());t.keyValidation="valid",t.company=i.company,t.expiry=i.expiry,t.seats=i.seats,t.save(),e&&e()},error:e}):e()},e.prototype.getVaults=function(e){ajax({url:Ct,method:"POST",withCredentials:!1,data:{token:this.token},success:function(t){var n=JSON.parse(t);e&&e(n)}})},e.prototype.createVault=function(e,t,n,i){ajax({url:Et,method:"POST",withCredentials:!1,data:{name:e,token:this.token,keyhash:t,salt:n},success:function(e){var t=JSON.parse(e);i&&i(t)}})},e.prototype.deleteVault=function(e,t){ajax({url:St,method:"POST",withCredentials:!1,data:{vault_uid:e,token:this.token},success:function(e){var n=JSON.parse(e);t&&t(n)}})},e.prototype.getSiteShareList=function(e,t){ajax({url:At,method:"POST",withCredentials:!1,data:{site_uid:e,token:this.token},success:function(e){var n=JSON.parse(e);t&&t(n.shares)}})},e.prototype.inviteToSite=function(e,t,n){ajax({url:Lt,method:"POST",withCredentials:!1,data:{site_uid:e,email:t,token:this.token},success:function(e){var t=JSON.parse(e);n&&n(t)}})},e.prototype.removeUserFromSite=function(e,t,n){ajax({url:Pt,method:"POST",withCredentials:!1,data:{site_uid:e,share_uid:t,token:this.token},success:function(e){var t=JSON.parse(e);n&&n(t)}})},e.prototype.acceptSiteInvite=function(e,t){ajax({url:It,method:"POST",withCredentials:!1,data:{code:e,token:this.token},success:function(e){JSON.parse(e);t&&t()}})},e.prototype.getVaultShareList=function(e,t){ajax({url:Mt,method:"POST",withCredentials:!1,data:{vault_uid:e,token:this.token},success:function(e){var n=JSON.parse(e);t&&t(n.shares)}})},e.prototype.inviteToVault=function(e,t,n){ajax({url:Tt,method:"POST",withCredentials:!1,data:{vault_uid:e,email:t,token:this.token},success:function(e){var t=JSON.parse(e);n&&n(t)}})},e.prototype.removeUserFromVault=function(e,t,n){ajax({url:Dt,method:"POST",withCredentials:!1,data:{vault_uid:e,share_uid:t,token:this.token},success:function(e){var t=JSON.parse(e);n&&n(t)}})},e.prototype.verifyVaultKey=function(e,t,n){return v(this,void 0,void 0,(function(){return y(this,(function(i){return[2,ajaxPromise({url:xt,method:"POST",withCredentials:!1,data:{token:this.token,vault_uid:e,keyhash:t,host:n}})]}))}))},e.prototype.getSites=function(){return v(this,void 0,Promise,(function(){var e,t;return y(this,(function(n){switch(n.label){case 0:return t=(e=JSON).parse,[4,ajaxPromise({url:Ft,method:"POST",withCredentials:!1,data:{token:this.token}})];case 1:return[2,t.apply(e,[n.sent()])]}}))}))},e.prototype.createSite=function(e){ajax({url:Ot,method:"POST",withCredentials:!1,data:{token:this.token},success:function(t){var n=JSON.parse(t);e&&e(n)},error:function(t){e&&e(t)}})},e.prototype.deleteSite=function(e,t){ajax({url:Bt,method:"POST",withCredentials:!1,data:{token:this.token,site_uid:e},success:function(e){var n=JSON.parse(e);t&&t(n)},error:function(e){t&&t(e)}})},e.prototype.getSiteLimit=function(){return v(this,void 0,Promise,(function(){var e,t;return y(this,(function(n){switch(n.label){case 0:return t=(e=JSON).parse,[4,ajaxPromise({url:Nt,method:"POST",withCredentials:!1,data:{token:this.token}})];case 1:return[2,t.apply(e,[n.sent()])]}}))}))},e.prototype.getSubscriptions=function(){return v(this,void 0,Promise,(function(){var e,t;return y(this,(function(n){switch(n.label){case 0:return t=(e=JSON).parse,[4,ajaxPromise({url:Rt,method:"POST",data:{token:this.token}})];case 1:return[2,t.apply(e,[n.sent()])]}}))}))},e.prototype.setKey=function(e){this.key=e,this.save()},e}(),zt=function(){function e(){}return e.prototype.lineAt=function(e){if(e<0||e>this.length)throw new RangeError("Invalid position ".concat(e," in document of length ").concat(this.length));return this.lineInner(e,!1,1,0)},e.prototype.line=function(e){if(e<1||e>this.lines)throw new RangeError("Invalid line number ".concat(e," in ").concat(this.lines,"-line document"));return this.lineInner(e,!0,1,0)},e.prototype.replace=function(e,t,n){var i=[];return this.decompose(0,e,i,2),n.length&&n.decompose(0,n.length,i,3),this.decompose(t,this.length,i,1),Ut.from(i,this.length-(t-e)+n.length)},e.prototype.append=function(e){return this.replace(this.length,this.length,e)},e.prototype.slice=function(e,t){void 0===t&&(t=this.length);var n=[];return this.decompose(e,t,n,0),Ut.from(n,t-e)},e.prototype.eq=function(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;for(var t=this.scanIdentical(e,1),n=this.length-this.scanIdentical(e,-1),i=new Wt(this),r=new Wt(e),o=t,a=t;;){if(i.next(o),r.next(o),o=0,i.lineBreak!=r.lineBreak||i.done!=r.done||i.value!=r.value)return!1;if(a+=i.value.length,i.done||a>=n)return!0}},e.prototype.iter=function(e){return void 0===e&&(e=1),new Wt(this,e)},e.prototype.iterRange=function(e,t){return void 0===t&&(t=this.length),new Gt(this,e,t)},e.prototype.iterLines=function(e,t){var n;if(null==e)n=this.iter();else{null==t&&(t=this.lines+1);var i=this.line(e).from;n=this.iterRange(i,Math.max(i,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new Kt(n)},e.prototype.toString=function(){return this.sliceString(0)},e.prototype.toJSON=function(){var e=[];return this.flatten(e),e},e.of=function(t){if(0==t.length)throw new RangeError("A document must have at least one line");return 1!=t.length||t[0]?t.length<=32?new qt(t):Ut.from(qt.split(t,[])):e.empty},e}(),qt=function(e){function t(t,n){void 0===n&&(n=function(e){for(var t=-1,n=0,i=e;n=e)return new Yt(i,a,n,o);i=a+1,n++}},t.prototype.decompose=function(e,n,i,r){var o=e<=0&&n>=this.length?this:new t(jt(this.text,e,n),Math.min(n,this.length)-Math.max(0,e));if(1&r){var a=i.pop(),s=_t(o.text,a.text.slice(),0,o.length);if(s.length<=32)i.push(new t(s,a.length+o.length));else{var l=s.length>>1;i.push(new t(s.slice(0,l)),new t(s.slice(l)))}}else i.push(o)},t.prototype.replace=function(n,i,r){if(!(r instanceof t))return e.prototype.replace.call(this,n,i,r);var o=_t(this.text,_t(r.text,jt(this.text,0,n)),i),a=this.length+r.length-(i-n);return o.length<=32?new t(o,a):Ut.from(t.split(o,[]),a)},t.prototype.sliceString=function(e,t,n){void 0===t&&(t=this.length),void 0===n&&(n="\n");for(var i="",r=0,o=0;r<=t&&oe&&o&&(i+=n),er&&(i+=a.slice(Math.max(0,e-r),t-r)),r=s+1}return i},t.prototype.flatten=function(e){for(var t=0,n=this.text;t-1&&n.push(new t(i,r)),n},t}(zt),Ut=function(e){function t(t,n){var i=e.call(this)||this;i.children=t,i.length=n,i.lines=0;for(var r=0,o=t;r=e)return o.lineInner(e,t,n,i);i=a+1,n=s+1}},t.prototype.decompose=function(e,t,n,i){for(var r=0,o=0;o<=t&&r=o){var l=i&((o<=e?1:0)|(s>=t?2:0));o>=e&&s<=t&&!l?n.push(a):a.decompose(e-o,t-o,n,l)}o=s+1}},t.prototype.replace=function(n,i,r){if(r.lines=a&&i<=l){var c=s.replace(n-a,i-a,r),u=this.lines-s.lines+c.lines;if(c.lines>4&&c.lines>u>>6){var h=this.children.slice();return h[o]=c,new t(h,this.length-(i-n)+r.length)}return e.prototype.replace.call(this,a,l,c)}a=l+1}return e.prototype.replace.call(this,n,i,r)},t.prototype.sliceString=function(e,t,n){void 0===t&&(t=this.length),void 0===n&&(n="\n");for(var i="",r=0,o=0;re&&r&&(i+=n),eo&&(i+=a.sliceString(e-o,t-o,n)),o=s+1}return i},t.prototype.flatten=function(e){for(var t=0,n=this.children;t0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1],o=r[0],a=r[1],s=r[2],l=r[3];;o+=n,a+=n){if(o==s||a==l)return i;var c=this.children[o],u=e.children[a];if(c!=u)return i+c.scanIdentical(u,n);i+=c.length+1}},t.from=function(e,n){void 0===n&&(n=e.reduce((function(e,t){return e+t.length+1}),-1));for(var i=0,r=0,o=e;r>5),u=c<<1,h=c>>1,p=[],d=0,f=-1,m=[];function g(e){var n;if(e.lines>u&&e instanceof t)for(var i=0,r=e.children;ih&&(d>h||!d)?(v(),p.push(e)):e instanceof qt&&d&&(n=m[m.length-1])instanceof qt&&e.lines+n.lines<=32?(d+=e.lines,f+=e.length+1,m[m.length-1]=new qt(n.text.concat(e.text),n.length+1+e.length)):(d+e.lines>c&&v(),d+=e.lines,f+=e.length+1,m.push(e))}function v(){0!=d&&(p.push(1==m.length?m[0]:t.from(m,f)),f=-1,d=m.length=0)}for(var y=0,b=e;y=n&&(l>i&&(s=s.slice(0,i-r)),r0?1:(e instanceof qt?e.text.length:e.children.length)<<1]}return e.prototype.nextInner=function(e,t){for(this.done=this.lineBreak=!1;;){var n=this.nodes.length-1,i=this.nodes[n],r=this.offsets[n],o=r>>1,a=i instanceof qt?i.text.length:i.children.length;if(o==(t>0?a:0)){if(0==n)return this.done=!0,this.value="",this;t>0&&this.offsets[n-1]++,this.nodes.pop(),this.offsets.pop()}else if((1&r)==(t>0?0:1)){if(this.offsets[n]+=t,0==e)return this.lineBreak=!0,this.value="\n",this;e--}else if(i instanceof qt){var s=i.text[o+(t<0?-1:0)];if(this.offsets[n]+=t,s.length>Math.max(0,e))return this.value=0==e?s:t>0?s.slice(e):s.slice(0,s.length-e),this;e-=s.length}else{e>(s=i.children[o+(t<0?-1:0)]).length?(e-=s.length,this.offsets[n]+=t):(t<0&&this.offsets[n]--,this.nodes.push(s),this.offsets.push(t>0?1:(s instanceof qt?s.text.length:s.children.length)<<1))}}},e.prototype.next=function(e){return void 0===e&&(e=0),e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)},e}(),Gt=function(){function e(e,t,n){this.value="",this.done=!1,this.cursor=new Wt(e,t>n?-1:1),this.pos=t>n?e.length:0,this.from=Math.min(t,n),this.to=Math.max(t,n)}return e.prototype.nextInner=function(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);var n=t<0?this.pos-this.from:this.to-this.pos;e>n&&(e=n),n-=e;var i=this.cursor.next(e).value;return this.pos+=(i.length+e)*t,this.value=i.length<=n?i:t<0?i.slice(i.length-n):i.slice(0,n),this.done=!this.value,this},e.prototype.next=function(e){return void 0===e&&(e=0),e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)},Object.defineProperty(e.prototype,"lineBreak",{get:function(){return this.cursor.lineBreak&&""!=this.value},enumerable:!1,configurable:!0}),e}(),Kt=function(){function e(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}return e.prototype.next=function(e){void 0===e&&(e=0);var t=this.inner.next(e),n=t.done,i=t.lineBreak,r=t.value;return n?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=r,this.afterBreak=!1),this},Object.defineProperty(e.prototype,"lineBreak",{get:function(){return!1},enumerable:!1,configurable:!0}),e}();"undefined"!=typeof Symbol&&(zt.prototype[Symbol.iterator]=function(){return this.iter()},Wt.prototype[Symbol.iterator]=Gt.prototype[Symbol.iterator]=Kt.prototype[Symbol.iterator]=function(){return this});for(var Yt=function(){function e(e,t,n,i){this.from=e,this.to=t,this.number=n,this.text=i}return Object.defineProperty(e.prototype,"length",{get:function(){return this.to-this.from},enumerable:!1,configurable:!0}),e}(),Xt="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map((function(e){return e?parseInt(e,36):1})),$t=1;$te)return Xt[t-1]<=e;return!1}function Qt(e){return e>=127462&&e<=127487}function Jt(e,t,n,i){return void 0===n&&(n=!0),void 0===i&&(i=!0),(n?en:tn)(e,t,i)}function en(e,t,n){if(t==e.length)return t;t&&nn(e.charCodeAt(t))&&rn(e.charCodeAt(t-1))&&t--;var i=on(e,t);for(t+=sn(i);t=0&&Qt(on(e,a));)o++,a-=2;if(o%2==0)break;t+=2}}return t}function tn(e,t,n){for(;t>0;){var i=en(e,t-2,n);if(i=56320&&e<57344}function rn(e){return e>=55296&&e<56320}function on(e,t){var n=e.charCodeAt(t);if(!rn(n)||t+1==e.length)return n;var i=e.charCodeAt(t+1);return nn(i)?i-56320+(n-55296<<10)+65536:n}function an(e){return e<=65535?String.fromCharCode(e):(e-=65536,String.fromCharCode(55296+(e>>10),56320+(1023&e)))}function sn(e){return e<65536?1:2}var ln=/\r\n?|\n/,cn=function(e){return e[e.Simple=0]="Simple",e[e.TrackDel=1]="TrackDel",e[e.TrackBefore=2]="TrackBefore",e[e.TrackAfter=3]="TrackAfter",e}(cn||(cn={})),un=function(){function e(e){this.sections=e}return Object.defineProperty(e.prototype,"length",{get:function(){for(var e=0,t=0;te)return r+(e-i);r+=a}else{if(n!=cn.Simple&&l>=e&&(n==cn.TrackDel&&ie||n==cn.TrackBefore&&ie))return null;if(l>e||l==e&&t<0&&!a)return e==i||t<0?r:r+s;r+=s}i=l}if(e>i)throw new RangeError("Position ".concat(e," is out of range for changeset of length ").concat(i));return r},e.prototype.touchesRange=function(e,t){void 0===t&&(t=e);for(var n=0,i=0;n=0&&i<=t&&r>=e)return!(it)||"cover";i=r}return!1},e.prototype.toString=function(){for(var e="",t=0;t=0?":"+i:"")}return e},e.prototype.toJSON=function(){return this.sections},e.fromJSON=function(t){if(!Array.isArray(t)||t.length%2||t.some((function(e){return"number"!=typeof e})))throw new RangeError("Invalid JSON representation of ChangeDesc");return new e(t)},e.create=function(t){return new e(t)},e}(),hn=function(e){function t(t,n){var i=e.call(this,t)||this;return i.inserted=n,i}return f(t,e),t.prototype.apply=function(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return fn(this,(function(t,n,i,r,o){return e=e.replace(i,i+(n-t),o)}),!1),e},t.prototype.mapDesc=function(e,t){return void 0===t&&(t=!1),mn(this,e,t,!0)},t.prototype.invert=function(e){for(var n=this.sections.slice(),i=[],r=0,o=0;r=0){n[r]=s,n[r+1]=a;for(var l=r>>1;i.length0&&dn(i,n,o.text),o.forward(h),s+=h}for(var u=e[a++];s>1].toJSON()))}return e},t.of=function(e,n,i){var r=[],o=[],a=0,s=null;function l(e){if(void 0===e&&(e=!1),e||r.length){af||p<0||f>n)throw new RangeError("Invalid change range ".concat(p," to ").concat(f," (in doc of length ").concat(n,")"));var g=m?"string"==typeof m?zt.of(m.split(i||ln)):m:zt.empty,v=g.length;if(p==f&&0==v)return;pa&&pn(r,p-a,-1),pn(r,f-p,v),dn(o,r,g),a=f}}(e),l(!s),s},t.empty=function(e){return new t(e?[e,-1]:[],[])},t.fromJSON=function(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");for(var n=[],i=[],r=0;r=0&&n<=0&&n==e[r+1]?e[r]+=t:0==t&&0==e[r]?e[r+1]+=n:i?(e[r]+=t,e[r+1]+=n):e.push(t,n)}}function dn(e,t,n){if(0!=n.length){var i=t.length-2>>1;if(i>1])),!(n||a==e.sections.length||e.sections[a+1]<0);)s=e.sections[a++],l=e.sections[a++];t(r,c,o,u,h),r=c,o=u}}}function mn(e,t,n,i){void 0===i&&(i=!1);for(var r=[],o=i?[]:null,a=new vn(e),s=new vn(t),l=-1;;){if(-1==a.ins&&-1==s.ins)pn(r,c=Math.min(a.len,s.len),-1),a.forward(c),s.forward(c);else if(s.ins>=0&&(a.ins<0||l==a.i||0==a.off&&(s.len=0&&l=0)){if(a.done&&s.done)return o?hn.createSet(r,o):un.create(r);throw new Error("Mismatched change set lengths")}c=0;for(var h=a.len;h;)if(-1==s.ins){c+=u=Math.min(h,s.len),h-=u,s.forward(u)}else{if(!(0==s.ins&&s.lenl||a.ins>=0&&a.len>l)&&(s||i.length>c),o.forward2(l),a.forward(l)}else pn(i,0,a.ins,s),r&&dn(r,i,a.text),a.next()}}var vn=function(){function e(e){this.set=e,this.i=0,this.next()}return e.prototype.next=function(){var e=this.set.sections;this.i>1;return t>=e.length?zt.empty:e[t]},enumerable:!1,configurable:!0}),e.prototype.textBit=function(e){var t=this.set.inserted,n=this.i-2>>1;return n>=t.length&&!e?zt.empty:t[n].slice(this.off,null==e?void 0:this.off+e)},e.prototype.forward=function(e){e==this.len?this.next():(this.len-=e,this.off+=e)},e.prototype.forward2=function(e){-1==this.ins?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)},e}(),yn=function(){function e(e,t,n){this.from=e,this.to=t,this.flags=n}return Object.defineProperty(e.prototype,"anchor",{get:function(){return 16&this.flags?this.to:this.from},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"head",{get:function(){return 16&this.flags?this.from:this.to},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"empty",{get:function(){return this.from==this.to},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"assoc",{get:function(){return 4&this.flags?-1:8&this.flags?1:0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"bidiLevel",{get:function(){var e=3&this.flags;return 3==e?null:e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"goalColumn",{get:function(){var e=this.flags>>5;return 33554431==e?void 0:e},enumerable:!1,configurable:!0}),e.prototype.map=function(t,n){var i,r;return void 0===n&&(n=-1),this.empty?i=r=t.mapPos(this.from,n):(i=t.mapPos(this.from,1),r=t.mapPos(this.to,-1)),i==this.from&&r==this.to?this:new e(i,r,this.flags)},e.prototype.extend=function(e,t){if(void 0===t&&(t=e),e<=this.anchor&&t>=this.anchor)return bn.range(e,t);var n=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return bn.range(this.anchor,n)},e.prototype.eq=function(e){return this.anchor==e.anchor&&this.head==e.head},e.prototype.toJSON=function(){return{anchor:this.anchor,head:this.head}},e.fromJSON=function(e){if(!e||"number"!=typeof e.anchor||"number"!=typeof e.head)throw new RangeError("Invalid JSON representation for SelectionRange");return bn.range(e.anchor,e.head)},e.create=function(t,n,i){return new e(t,n,i)},e}(),bn=function(){function e(e,t){this.ranges=e,this.mainIndex=t}return e.prototype.map=function(t,n){return void 0===n&&(n=-1),t.empty?this:e.create(this.ranges.map((function(e){return e.map(t,n)})),this.mainIndex)},e.prototype.eq=function(e){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(var t=0;t=t.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new e(t.ranges.map((function(e){return yn.fromJSON(e)})),t.main)},e.single=function(t,n){return void 0===n&&(n=t),new e([e.range(t,n)],0)},e.create=function(t,n){if(void 0===n&&(n=0),0==t.length)throw new RangeError("A selection needs at least one range");for(var i=0,r=0;re?4:0))},e.normalized=function(t,n){void 0===n&&(n=0);var i=t[n];t.sort((function(e,t){return e.from-t.from})),n=t.indexOf(i);for(var r=1;ro.head?e.range(l,s):e.range(s,l))}}return new e(t,n)},e}();function wn(e,t){for(var n=0,i=e.ranges;nt)throw new RangeError("Selection points outside of document")}}var kn=0,Cn=function(){function e(e,t,n,i,r){this.combine=e,this.compareInput=t,this.compare=n,this.isStatic=i,this.id=kn++,this.default=e([]),this.extensions="function"==typeof r?r(this):r}return e.define=function(t){return void 0===t&&(t={}),new e(t.combine||function(e){return e},t.compareInput||function(e,t){return e===t},t.compare||(t.combine?function(e,t){return e===t}:xn),!!t.static,t.enables)},e.prototype.of=function(e){return new En([],this,0,e)},e.prototype.compute=function(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new En(e,this,1,t)},e.prototype.computeN=function(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new En(e,this,2,t)},e.prototype.from=function(e,t){return t||(t=function(e){return e}),this.compute([e],(function(n){return t(n.field(e))}))},e}();function xn(e,t){return e==t||e.length==t.length&&e.every((function(e,n){return e===t[n]}))}var En=function(){function e(e,t,n,i){this.dependencies=e,this.facet=t,this.type=n,this.value=i,this.id=kn++}return e.prototype.dynamicSlot=function(e){for(var t,n=this,i=this.value,r=this.facet.compareInput,o=this.id,a=e[o]>>1,s=2==this.type,l=!1,c=!1,u=[],h=0,p=this.dependencies;h>1;return{create:function(e){return e.values[n]=t.create(e),1},update:function(e,i){var r=e.values[n],o=t.updateF(r,i);return t.compareF(r,o)?0:(e.values[n]=o,1)},reconfigure:function(e,i){return null!=i.config.address[t.id]?(e.values[n]=i.field(t),0):(e.values[n]=t.create(e),1)}}},e.prototype.init=function(e){return[this,Tn.of({field:this,create:e})]},Object.defineProperty(e.prototype,"extension",{get:function(){return this},enumerable:!1,configurable:!0}),e}(),An=4,Ln=3,Pn=2,In=1;function Fn(e){return function(t){return new Bn(t,e)}}var On={highest:Fn(0),high:Fn(In),default:Fn(Pn),low:Fn(Ln),lowest:Fn(An)},Bn=function(e,t){this.inner=e,this.prec=t},Nn=function(){function e(){}return e.prototype.of=function(e){return new Rn(this,e)},e.prototype.reconfigure=function(t){return e.reconfigure.of({compartment:this,extension:t})},e.prototype.get=function(e){return e.config.compartments.get(this)},e}(),Rn=function(e,t){this.compartment=e,this.inner=t},Hn=function(){function e(e,t,n,i,r,o){for(this.base=e,this.compartments=t,this.dynamicSlots=n,this.address=i,this.staticValues=r,this.facets=o,this.statusTemplate=[];this.statusTemplate.length>1]},e.resolve=function(t,n,i){for(var r=[],o=Object.create(null),a=new Map,s=0,l=function(e,t,n){var i=[[],[],[],[],[]],r=new Map;function o(e,a){var s=r.get(e);if(null!=s){if(s<=a)return;var l=i[s].indexOf(e);l>-1&&i[s].splice(l,1),e instanceof Rn&&n.delete(e.compartment)}if(r.set(e,a),Array.isArray(e))for(var c=0,u=e;c>1;function s(e){for(var n=[],o=0;o>1,i=e.status[n];if(4==i)throw new Error("Cyclic dependency between fields and/or facets");if(2&i)return i;e.status[n]=4;var r=e.computeSlot(e,e.config.dynamicSlots[n]);return e.status[n]=2|r}function zn(e,t){return 1&t?e.config.staticValues[t>>1]:e.values[t>>1]}var qn=Cn.define(),Un=Cn.define({combine:function(e){return e.some((function(e){return e}))},static:!0}),_n=Cn.define({combine:function(e){return e.length?e[0]:void 0},static:!0}),jn=Cn.define(),Wn=Cn.define(),Gn=Cn.define(),Kn=Cn.define({combine:function(e){return!!e.length&&e[0]}}),Yn=function(){function e(e,t){this.type=e,this.value=t}return e.define=function(){return new Xn},e}(),Xn=function(){function e(){}return e.prototype.of=function(e){return new Yn(this,e)},e}(),$n=function(){function e(e){this.map=e}return e.prototype.of=function(e){return new Zn(this,e)},e}(),Zn=function(){function e(e,t){this.type=e,this.value=t}return e.prototype.map=function(t){var n=this.type.map(this.value,t);return void 0===n?void 0:n==this.value?this:new e(this.type,n)},e.prototype.is=function(e){return this.type==e},e.define=function(e){return void 0===e&&(e={}),new $n(e.map||function(e){return e})},e.mapEffects=function(e,t){if(!e.length)return e;for(var n=[],i=0,r=e;it.length&&n.slice(0,t.length)==t&&"."==n[t.length]))},e}();function Jn(e,t){for(var n=[],i=0,r=0;;){var o=void 0,a=void 0;if(i=e[i]))o=e[i++],a=e[i++];else{if(!(r=0;r--){var o=n[r](e);o&&Object.keys(o).length&&(i=ei(i,ti(t,o,e.changes.newLength),!0))}return i==e?e:Qn.create(t,e.changes,e.selection,i.effects,i.annotations,i.scrollIntoView)}(n?function(e){for(var t=e.startState,n=!0,i=0,r=t.facet(jn);i=0;c--){var u;e=(u=l[c](e))instanceof Qn?u:Array.isArray(u)&&1==u.length&&u[0]instanceof Qn?u[0]:ni(t,ri(u),!1)}return e}(a):a)}Qn.time=Yn.define(),Qn.userEvent=Yn.define(),Qn.addToHistory=Yn.define(),Qn.remote=Yn.define();var ii=[];function ri(e){return null==e?ii:Array.isArray(e)?e:[e]}var oi,ai=function(e){return e[e.Word=0]="Word",e[e.Space=1]="Space",e[e.Other=2]="Other",e}(ai||(ai={})),si=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;try{oi=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch(e){}function li(e){return function(t){if(!/\S/.test(t))return ai.Space;if(function(e){if(oi)return oi.test(e);for(var t=0;t"€"&&(n.toUpperCase()!=n.toLowerCase()||si.test(n)))return!0}return!1}(t))return ai.Word;for(var n=0;n-1)return ai.Word;return ai.Other}}var ci=function(){function e(e,t,n,i,r,o){this.config=e,this.doc=t,this.selection=n,this.values=i,this.status=e.statusTemplate.slice(),this.computeSlot=r,o&&(o._state=this);for(var a=0;an.length?e:n[i-1]}))),t},e.prototype.languageDataAt=function(e,t,n){void 0===n&&(n=-1);for(var i=[],r=0,o=this.facet(qn);r0;){var l=Jt(n,a,!1);if(o(n.slice(l,a))!=ai.Word)break;a=l}for(;s>1,l=r[s]-e||(n?this.value[s].endSide:this.value[s].startSide)-t;if(s==o)return l>=0?o:a;l>=0?a=s:o=s+1}},e.prototype.between=function(e,t,n,i){for(var r=this.findIndex(t,-1e9,!0),o=this.findIndex(n,1e9,!1,r);r(d=n.mapPos(h,c.endSide))||p==d&&c.startSide>0&&c.endSide<=0)continue;(d-p||c.endSide-c.startSide)<0||(a<0&&(a=p),c.point&&(s=Math.max(s,d-p)),i.push(c),r.push(p-a),o.push(d-a))}return{mapped:i.length?new e(r,o,i,s):null,pos:a}},e}(),mi=function(){function e(e,t,n,i){this.chunkPos=e,this.chunk=t,this.nextLayer=n,this.maxPoint=i}return e.create=function(t,n,i,r){return new e(t,n,i,r)},Object.defineProperty(e.prototype,"length",{get:function(){var e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"size",{get:function(){if(this.isEmpty)return 0;for(var e=this.nextLayer.size,t=0,n=this.chunk;t=0){var m=i[p++];f.addInner(m.from,m.to,m.value)||d.push(m)}else 1==h.rangeIndex&&h.chunkIndexthis.chunkEnd(h.chunkIndex)||ch.to||c=r&&e<=r+o.length&&!1===o.between(r,e-r,t-r,n))return}this.nextLayer.between(e,t,n)}},e.prototype.iter=function(e){return void 0===e&&(e=0),bi.from([this]).goto(e)},Object.defineProperty(e.prototype,"isEmpty",{get:function(){return this.nextLayer==this},enumerable:!1,configurable:!0}),e.iter=function(e,t){return void 0===t&&(t=0),bi.from(e).goto(t)},e.compare=function(e,t,n,i,r){void 0===r&&(r=-1);var o=e.filter((function(e){return e.maxPoint>0||!e.isEmpty&&e.maxPoint>=r})),a=t.filter((function(e){return e.maxPoint>0||!e.isEmpty&&e.maxPoint>=r})),s=vi(o,a,n),l=new ki(o,s,r),c=new ki(a,s,r);n.iterGaps((function(e,t,n){return Ci(l,e,c,t,n,i)})),n.empty&&0==n.length&&Ci(l,0,c,0,0,i)},e.eq=function(e,t,n,i){void 0===n&&(n=0),null==i&&(i=999999999);var r=e.filter((function(e){return!e.isEmpty&&t.indexOf(e)<0})),o=t.filter((function(t){return!t.isEmpty&&e.indexOf(t)<0}));if(r.length!=o.length)return!1;if(!r.length)return!0;for(var a=vi(r,o),s=new ki(r,a,0).goto(n),l=new ki(o,a,0).goto(n);;){if(s.to!=l.to||!xi(s.active,l.active)||s.point&&(!l.point||!s.point.eq(l.point)))return!1;if(s.to>i)return!0;s.next(),l.next()}},e.spans=function(e,t,n,i,r){void 0===r&&(r=-1);for(var o=new ki(e,null,r).goto(t),a=t,s=o.openStart;;){var l=Math.min(o.to,n);if(o.point){var c=o.activeForPoint(o.to),u=o.pointFroma&&(i.span(a,l,o.active,s),s=o.openEnd(l));if(o.to>n)return s+(o.point&&o.to>n?1:0);a=o.to,o.next()}},e.of=function(e,t){void 0===t&&(t=!1);for(var n=new gi,i=0,r=e instanceof pi?[e]:t?function(e){if(e.length>1)for(var t=e[0],n=1;n0)return e.slice().sort(di);t=i}return e}(e):e;i=this.minPoint)break}},e.prototype.setRangeIndex=function(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=i&&r.push(new yi(a,n,i,o));return 1==r.length?r[0]:new e(r)},Object.defineProperty(e.prototype,"startSide",{get:function(){return this.value?this.value.startSide:0},enumerable:!1,configurable:!0}),e.prototype.goto=function(e,t){void 0===t&&(t=-1e9);for(var n=0,i=this.heap;n>1;r>=0;r--)wi(this.heap,r);return this.next(),this},e.prototype.forward=function(e,t){for(var n=0,i=this.heap;n>1;r>=0;r--)wi(this.heap,r);(this.to-e||this.value.endSide-t)<0&&this.next()},e.prototype.next=function(){if(0==this.heap.length)this.from=this.to=1e9,this.value=null,this.rank=-1;else{var e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),wi(this.heap,0)}},e}();function wi(e,t){for(var n=e[t];;){var i=1+(t<<1);if(i>=e.length)break;var r=e[i];if(i+1=0&&(r=e[i+1],i++),n.compare(r)<0)break;e[i]=n,e[t]=r,t=i}}var ki=function(){function e(e,t,n){this.minPoint=n,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=bi.from(e,t,n)}return e.prototype.goto=function(e,t){return void 0===t&&(t=-1e9),this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this},e.prototype.forward=function(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)},e.prototype.removeActive=function(e){Ei(this.active,e),Ei(this.activeTo,e),Ei(this.activeRank,e),this.minActive=Mi(this.active,this.activeTo)},e.prototype.addActive=function(e){for(var t=0,n=this.cursor,i=n.value,r=n.to,o=n.rank;t-1&&(this.activeTo[i]-this.cursor.from||this.active[i].endSide-this.cursor.startSide)<0){if(this.activeTo[i]>e){this.to=this.activeTo[i],this.endSide=this.active[i].endSide;break}this.removeActive(i),n&&Ei(n,i)}else{if(!this.cursor.value){this.to=this.endSide=1e9;break}if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}var r=this.cursor.value;if(r.point){if(!(t&&this.cursor.to==this.to&&this.cursor.from=0&&n[o]=0&&!(this.activeRank[n]e||this.activeTo[n]==e&&this.active[n].endSide>=this.point.endSide)&&t.push(this.active[n]);return t.reverse()},e.prototype.openEnd=function(e){for(var t=0,n=this.activeTo.length-1;n>=0&&this.activeTo[n]>e;n--)t++;return t},e}();function Ci(e,t,n,i,r,o){e.goto(t),n.goto(i);for(var a=i+r,s=i,l=i-t;;){var c=e.to+l-n.to||e.endSide-n.endSide,u=c<0?e.to+l:n.to,h=Math.min(u,a);if(e.point||n.point?e.point&&n.point&&(e.point==n.point||e.point.eq(n.point))&&xi(e.activeForPoint(e.to+l),n.activeForPoint(n.to))||o.comparePoint(s,h,e.point,n.point):h>s&&!xi(e.active,n.active)&&o.compareRange(s,h,e.active,n.active),u>a)break;s=u,c<=0&&e.next(),c>=0&&n.next()}}function xi(e,t){if(e.length!=t.length)return!1;for(var n=0;n=t;i--)e[i+1]=e[i];e[t]=n}function Mi(e,t){for(var n=-1,i=1e9,r=0;r=t)return r;if(r==e.length)break;o+=9==e.charCodeAt(r)?n-o%n:1,r=Jt(e,r)}return!0===i?-1:e.length}const Ai="undefined"==typeof Symbol?"__ͼ":Symbol.for("ͼ"),Li="undefined"==typeof Symbol?"__styleSet"+Math.floor(1e8*Math.random()):Symbol("styleSet"),Pi="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:{};class Ii{constructor(e,t){this.rules=[];let{finish:n}=t||{};function i(e){return/^@/.test(e)?[e]:e.split(/,\s*/)}function r(e,t,o,a){let s=[],l=/^@(\w+)\b/.exec(e[0]),c=l&&"keyframes"==l[1];if(l&&null==t)return o.push(e[0]+";");for(let n in t){let a=t[n];if(/&/.test(n))r(n.split(/,\s*/).map((t=>e.map((e=>t.replace(/&/,e))))).reduce(((e,t)=>e.concat(t))),a,o);else if(a&&"object"==typeof a){if(!l)throw new RangeError("The value of a property ("+n+") should be a primitive value.");r(i(n),a,s,c)}else null!=a&&s.push(n.replace(/_.*/,"").replace(/[A-Z]/g,(e=>"-"+e.toLowerCase()))+": "+a+";")}(s.length||c)&&o.push((!n||l||a?e:e.map(n)).join(", ")+" {"+s.join(" ")+"}")}for(let t in e)r(i(t),e[t],this.rules)}getRules(){return this.rules.join("\n")}static newName(){let e=Pi[Ai]||1;return Pi[Ai]=e+1,"ͼ"+e.toString(36)}static mount(e,t){(e[Li]||new Oi(e)).mount(Array.isArray(t)?t:[t])}}let Fi=null;class Oi{constructor(e){if(!e.head&&e.adoptedStyleSheets&&"undefined"!=typeof CSSStyleSheet){if(Fi)return e.adoptedStyleSheets=[Fi.sheet].concat(e.adoptedStyleSheets),e[Li]=Fi;this.sheet=new CSSStyleSheet,e.adoptedStyleSheets=[this.sheet].concat(e.adoptedStyleSheets),Fi=this}else{this.styleTag=(e.ownerDocument||e).createElement("style");let t=e.head||e;t.insertBefore(this.styleTag,t.firstChild)}this.modules=[],e[Li]=this}mount(e){let t=this.sheet,n=0,i=0;for(let r=0;r-1&&(this.modules.splice(a,1),i--,a=-1),-1==a){if(this.modules.splice(i++,0,o),t)for(let e=0;e",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"',229:"Q"},Ri="undefined"!=typeof navigator&&/Chrome\/(\d+)/.exec(navigator.userAgent),Hi="undefined"!=typeof navigator&&/Apple Computer/.test(navigator.vendor),Vi="undefined"!=typeof navigator&&/Gecko\/\d+/.test(navigator.userAgent),zi="undefined"!=typeof navigator&&/Mac/.test(navigator.platform),qi="undefined"!=typeof navigator&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent),Ui=Ri&&(zi||+Ri[1]<57)||Vi&&zi,_i=0;_i<10;_i++)Bi[48+_i]=Bi[96+_i]=String(_i);for(_i=1;_i<=24;_i++)Bi[_i+111]="F"+_i;for(_i=65;_i<=90;_i++)Bi[_i]=String.fromCharCode(_i+32),Ni[_i]=String.fromCharCode(_i);for(var ji in Bi)Ni.hasOwnProperty(ji)||(Ni[ji]=Bi[ji]);function Wi(e){return(11==e.nodeType?e.getSelection?e:e.ownerDocument:e).getSelection()}function Gi(e,t){return!!t&&(e==t||e.contains(1!=t.nodeType?t.parentNode:t))}function Ki(e,t){if(!t||!t.anchorNode)return!1;try{return Gi(e,t.anchorNode)}catch(e){return!1}}function Yi(e){return 3==e.nodeType?ar(e,0,e.nodeValue.length).getClientRects():1==e.nodeType?e.getClientRects():[]}function Xi(e,t,n,i){return!!n&&(Zi(e,t,n,i,-1)||Zi(e,t,n,i,1))}function $i(e){for(var t=0;;t++)if(!(e=e.previousSibling))return t}function Zi(e,t,n,i,r){for(;;){if(e==n&&t==i)return!0;if(t==(r<0?0:Qi(e))){if("DIV"==e.nodeName)return!1;var o=e.parentNode;if(!o||1!=o.nodeType)return!1;t=$i(e)+(r<0?0:1),e=o}else{if(1!=e.nodeType)return!1;if(1==(e=e.childNodes[t+(r<0?-1:0)]).nodeType&&"false"==e.contentEditable)return!1;t=r<0?Qi(e):0}}}function Qi(e){return 3==e.nodeType?e.nodeValue.length:e.childNodes.length}var Ji={left:0,right:0,top:0,bottom:0};function er(e,t){var n=t?e.left:e.right;return{left:n,right:n,top:e.top,bottom:e.bottom}}function tr(e){return{left:0,right:e.innerWidth,top:0,bottom:e.innerHeight}}var nr,ir=function(){function e(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}return e.prototype.eq=function(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset},e.prototype.setRange=function(e){this.set(e.anchorNode,e.anchorOffset,e.focusNode,e.focusOffset)},e.prototype.set=function(e,t,n,i){this.anchorNode=e,this.anchorOffset=t,this.focusNode=n,this.focusOffset=i},e}(),rr=null;function or(e){if(e.setActive)return e.setActive();if(rr)return e.focus(rr);for(var t=[],n=e;n&&(t.push(n,n.scrollTop,n.scrollLeft),n!=n.ownerDocument);n=n.parentNode);if(e.focus(null==rr?{get preventScroll(){return rr={preventScroll:!0},!0}}:void 0),!rr){rr=!1;for(var i=0;it)return u.domBoundsAround(e,t,l);if(h>=e&&-1==i&&(i=s,r=l),l>t&&u.dom.parentNode==this.dom){o=s,a=c;break}c=h,l=h+u.breakAfter}return{from:r,to:a<0?n+this.length:a,startDOM:(i?this.children[i-1].dom.nextSibling:null)||this.dom.firstChild,endDOM:o=0?this.children[o].dom:null}},e.prototype.markDirty=function(e){void 0===e&&(e=!1),this.dirty|=2,this.markParentsDirty(e)},e.prototype.markParentsDirty=function(e){for(var t=this.parent;t;t=t.parent){if(e&&(t.dirty|=2),1&t.dirty)return;t.dirty|=1,e=!1}},e.prototype.setParent=function(e){this.parent!=e&&(this.parent=e,this.dirty&&this.markParentsDirty(!0))},e.prototype.setDOM=function(e){this.dom&&(this.dom.cmView=null),this.dom=e,e.cmView=this},Object.defineProperty(e.prototype,"rootView",{get:function(){for(var e=this;;){var t=e.parent;if(!t)return e;e=t}},enumerable:!1,configurable:!0}),e.prototype.replaceChildren=function(e,t,n){var i;void 0===n&&(n=ur),this.markDirty();for(var r=e;rthis.pos||e==this.pos&&(t>0||0==this.i||this.children[this.i-1].breakAfter))return this.off=e-this.pos,this;var n=this.children[--this.i];this.pos-=n.length+n.breakAfter}},e}();function fr(e,t,n,i,r,o,a,s,l){var c=e.children,u=c.length?c[t]:null,h=o.length?o[o.length-1]:null,p=h?h.breakAfter:a;if(!(t==i&&u&&!a&&!p&&o.length<2&&u.merge(n,r,o.length?h:null,0==n,s,l))){if(i0&&(!a&&o.length&&u.merge(n,u.length,o[0],!1,s,0)?u.breakAfter=o.shift().breakAfter:(n2),Tr={mac:Mr||/Mac/.test(gr.platform),windows:/Win/.test(gr.platform),linux:/Linux|X11/.test(gr.platform),ie:kr,ie_version:br?vr.documentMode||6:wr?+wr[1]:yr?+yr[1]:0,gecko:Cr,gecko_version:Cr?+(/Firefox\/(\d+)/.exec(gr.userAgent)||[0,0])[1]:0,chrome:!!xr,chrome_version:xr?+xr[1]:0,ios:Mr,android:/Android\b/.test(gr.userAgent),webkit:Er,safari:Sr,webkit_version:Er?+(/\bAppleWebKit\/(\d+)/.exec(navigator.userAgent)||[0,0])[1]:0,tabSize:null!=vr.documentElement.style.tabSize?"tab-size":"-moz-tab-size"},Dr=function(e){function t(t){var n=e.call(this)||this;return n.text=t,n}return f(t,e),Object.defineProperty(t.prototype,"length",{get:function(){return this.text.length},enumerable:!1,configurable:!0}),t.prototype.createDOM=function(e){this.setDOM(e||document.createTextNode(this.text))},t.prototype.sync=function(e,t){this.dom||this.createDOM(),this.dom.nodeValue!=this.text&&(t&&t.node==this.dom&&(t.written=!0),this.dom.nodeValue=this.text)},t.prototype.reuseDOM=function(e){3==e.nodeType&&this.createDOM(e)},t.prototype.merge=function(e,n,i){return(!i||i instanceof t&&!(this.length-(n-e)+i.length>256))&&(this.text=this.text.slice(0,e)+(i?i.text:"")+this.text.slice(n),this.markDirty(),!0)},t.prototype.split=function(e){var n=new t(this.text.slice(e));return this.text=this.text.slice(0,e),this.markDirty(),n},t.prototype.localPosFromDOM=function(e,t){return e==this.dom?t:t?this.text.length:0},t.prototype.domAtPos=function(e){return new cr(this.dom,e)},t.prototype.domBoundsAround=function(e,t,n){return{from:n,to:n+this.length,startDOM:this.dom,endDOM:this.dom.nextSibling}},t.prototype.coordsAt=function(e,t){return Lr(this.dom,e,t)},t}(hr),Ar=function(e){function t(t,n,i){void 0===n&&(n=[]),void 0===i&&(i=0);var r=e.call(this)||this;r.mark=t,r.children=n,r.length=i;for(var o=0,a=n;oe&&n.push(i=e&&(r=o),i=c,o++}var u=this.length-e;return this.length=e,r>-1&&(this.children.length=r,this.markDirty()),new t(this.mark,n,u)},t.prototype.domAtPos=function(e){return Nr(this,e)},t.prototype.coordsAt=function(e,t){return Hr(this,e,t)},t}(hr);function Lr(e,t,n){var i=e.nodeValue.length;t>i&&(t=i);var r=t,o=t,a=0;0==t&&n<0||t==i&&n>=0?Tr.chrome||Tr.gecko||(t?(r--,a=1):o=0)?0:s.length-1];return Tr.safari&&!a&&0==l.width&&(l=Array.prototype.find.call(s,(function(e){return e.width}))||l),a?er(l,a<0):l||null}var Pr=function(e){function t(t,n,i){var r=e.call(this)||this;return r.widget=t,r.length=n,r.side=i,r.prevWidget=null,r}return f(t,e),t.create=function(e,n,i){return new(e.customView||t)(e,n,i)},t.prototype.split=function(e){var n=t.create(this.widget,this.length-e,this.side);return this.length-=e,n},t.prototype.sync=function(e){this.dom&&this.widget.updateDOM(this.dom,e)||(this.dom&&this.prevWidget&&this.prevWidget.destroy(this.dom),this.prevWidget=null,this.setDOM(this.widget.toDOM(e)),this.dom.contentEditable="false")},t.prototype.getSide=function(){return this.side},t.prototype.merge=function(e,n,i,r,o,a){return!(i&&(!(i instanceof t&&this.widget.compare(i.widget))||e>0&&o<=0||n0?n.length-1:0;i=n[r],!(e>0?0==r:r==n.length-1||i.top0?-1:1);return this.length?i:er(i,this.side>0)},Object.defineProperty(t.prototype,"isEditable",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"isWidget",{get:function(){return!0},enumerable:!1,configurable:!0}),t.prototype.destroy=function(){e.prototype.destroy.call(this),this.dom&&this.widget.destroy(this.dom)},t}(hr),Ir=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return f(t,e),t.prototype.domAtPos=function(e){var t=this.widget,n=t.topView,i=t.text;return n?Fr(e,0,n,i,(function(e,t){return e.domAtPos(t)}),(function(e){return new cr(i,Math.min(e,i.nodeValue.length))})):new cr(i,Math.min(e,i.nodeValue.length))},t.prototype.sync=function(){this.setDOM(this.widget.toDOM())},t.prototype.localPosFromDOM=function(e,t){var n=this.widget,i=n.topView,r=n.text;return i?Or(e,t,i,r):Math.min(t,this.length)},t.prototype.ignoreMutation=function(){return!1},Object.defineProperty(t.prototype,"overrideDOMText",{get:function(){return null},enumerable:!1,configurable:!0}),t.prototype.coordsAt=function(e,t){var n=this.widget,i=n.topView,r=n.text;return i?Fr(e,t,i,r,(function(e,t,n){return e.coordsAt(t,n)}),(function(e,t){return Lr(r,e,t)})):Lr(r,e,t)},t.prototype.destroy=function(){var t;e.prototype.destroy.call(this),null===(t=this.widget.topView)||void 0===t||t.destroy()},Object.defineProperty(t.prototype,"isEditable",{get:function(){return!0},enumerable:!1,configurable:!0}),t.prototype.canReuseDOM=function(){return!0},t}(Pr);function Fr(e,t,n,i,r,o){if(n instanceof Ar){for(var a=n.dom.firstChild;a;a=a.nextSibling){var s=hr.get(a);if(!s)return o(e,t);var l=Gi(a,i),c=s.length+(l?i.nodeValue.length:0);if(e=0;)if(t<0?i>0:i0?-1:1);return n&&n.topt.top?{left:t.left,right:t.right,top:n.top,bottom:n.bottom}:t},Object.defineProperty(t.prototype,"overrideDOMText",{get:function(){return zt.empty},enumerable:!1,configurable:!0}),t}(hr);function Nr(e,t){for(var n=e.dom,i=e.children,r=0,o=0;ro&&t0;l--){var c=i[l-1];if(c.dom.parentNode==n)return c.domAtPos(c.length)}for(l=r;l0&&t instanceof Ar&&r.length&&(i=r[r.length-1])instanceof Ar&&i.mark.eq(t.mark)?Rr(i,t.children[0],n-1):(r.push(t),t.setParent(e)),e.length+=t.length}function Hr(e,t,n){var i=null,r=-1,o=null,a=-1;!function e(t,n){for(var s=0,l=0;s=n&&(c.children.length?e(c,n-l):!o&&(u>n||l==u&&c.getSide()>0)?(o=c,a=n-l):(l0?3e8:-4e8:t>0?1e8:-1e8,t,n,e.widget||null,!1)},t.replace=function(e){var t,n,i=!!e.block;if(e.isBlockGap)t=-5e8,n=4e8;else{var r=Yr(e,i);t=(r.start?i?-3e8:-1:5e8)-1,n=1+(r.end?i?2e8:1:-6e8)}return new Kr(e,t,n,i,e.widget||null,!0)},t.line=function(e){return new Gr(e)},t.set=function(e,t){return void 0===t&&(t=!1),mi.of(e,t)},t.prototype.hasHeight=function(){return!!this.widget&&this.widget.estimatedHeight>-1},t}(hi);jr.none=mi.empty;var Wr=function(e){function t(t){var n=this,i=Yr(t),r=i.start,o=i.end;return(n=e.call(this,r?-1:5e8,o?1:-6e8,null,t)||this).tagName=t.tagName||"span",n.class=t.class||"",n.attrs=t.attributes||null,n}return f(t,e),t.prototype.eq=function(e){return this==e||e instanceof t&&this.tagName==e.tagName&&this.class==e.class&&zr(this.attrs,e.attrs)},t.prototype.range=function(t,n){if(void 0===n&&(n=t),t>=n)throw new RangeError("Mark decorations may not be empty");return e.prototype.range.call(this,t,n)},t}(jr);Wr.prototype.point=!1;var Gr=function(e){function t(t){return e.call(this,-2e8,-2e8,null,t)||this}return f(t,e),t.prototype.eq=function(e){return e instanceof t&&this.spec.class==e.spec.class&&zr(this.spec.attributes,e.spec.attributes)},t.prototype.range=function(t,n){if(void 0===n&&(n=t),n!=t)throw new RangeError("Line decoration ranges must be zero-length");return e.prototype.range.call(this,t,n)},t}(jr);Gr.prototype.mapMode=cn.TrackBefore,Gr.prototype.point=!0;var Kr=function(e){function t(t,n,i,r,o,a){var s=e.call(this,n,i,o,t)||this;return s.block=r,s.isReplace=a,s.mapMode=r?n<=0?cn.TrackBefore:cn.TrackAfter:cn.TrackDel,s}return f(t,e),Object.defineProperty(t.prototype,"type",{get:function(){return this.startSide=5},enumerable:!1,configurable:!0}),t.prototype.eq=function(e){return e instanceof t&&(n=this.widget,i=e.widget,n==i||!!(n&&i&&n.compare(i)))&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide;var n,i},t.prototype.range=function(t,n){if(void 0===n&&(n=t),this.isReplace&&(t>n||t==n&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&n!=t)throw new RangeError("Widget decorations can only have zero-length ranges");return e.prototype.range.call(this,t,n)},t}(jr);function Yr(e,t){void 0===t&&(t=!1);var n=e.inclusiveStart,i=e.inclusiveEnd;return null==n&&(n=e.inclusive),null==i&&(i=e.inclusive),{start:null!=n?n:t,end:null!=i?i:t}}function Xr(e,t,n,i){void 0===i&&(i=0);var r=n.length-1;r>=0&&n[r]+i>=e?n[r]=Math.max(n[r],t):n.push(e,t)}Kr.prototype.point=!0;var $r=function(e){function t(){var t=e.apply(this,arguments)||this;return t.children=[],t.length=0,t.prevAttrs=void 0,t.attrs=null,t.breakAfter=0,t}return f(t,e),t.prototype.merge=function(e,n,i,r,o,a){if(i){if(!(i instanceof t))return!1;this.dom||i.transferDOM(this)}return r&&this.setDeco(i?i.attrs:null),mr(this,e,n,i?i.children:[],o,a),!0},t.prototype.split=function(e){var n=new t;if(n.breakAfter=this.breakAfter,0==this.length)return n;var i=this.childPos(e),r=i.i,o=i.off;o&&(n.append(this.children[r].split(o),0),this.children[r].merge(o,this.children[r].length,null,!1,0,0),r++);for(var a=r;a0&&0==this.children[r-1].length;)this.children[--r].destroy();return this.children.length=r,this.markDirty(),this.length=e,n},t.prototype.transferDOM=function(e){this.dom&&(this.markDirty(),e.setDOM(this.dom),e.prevAttrs=void 0===this.prevAttrs?this.attrs:this.prevAttrs,this.prevAttrs=void 0,this.dom=null)},t.prototype.setDeco=function(e){zr(this.attrs,e)||(this.dom&&(this.prevAttrs=this.attrs,this.markDirty()),this.attrs=e)},t.prototype.append=function(e,t){Rr(this,e,t)},t.prototype.addLineDeco=function(e){var t=e.spec.attributes,n=e.spec.class;t&&(this.attrs=Vr(t,this.attrs||{})),n&&(this.attrs=Vr({class:n},this.attrs||{}))},t.prototype.domAtPos=function(e){return Nr(this,e)},t.prototype.reuseDOM=function(e){"DIV"==e.nodeName&&(this.setDOM(e),this.dirty|=6)},t.prototype.sync=function(t,n){var i;this.dom?4&this.dirty&&(lr(this.dom),this.dom.className="cm-line",this.prevAttrs=this.attrs?null:void 0):(this.setDOM(document.createElement("div")),this.dom.className="cm-line",this.prevAttrs=this.attrs?null:void 0),void 0!==this.prevAttrs&&(qr(this.dom,this.prevAttrs,this.attrs),this.dom.classList.add("cm-line"),this.prevAttrs=void 0),e.prototype.sync.call(this,t,n);for(var r=this.dom.lastChild;r&&hr.get(r)instanceof Ar;)r=r.lastChild;if(!(r&&this.length&&("BR"==r.nodeName||0!=(null===(i=hr.get(r))||void 0===i?void 0:i.isEditable)||Tr.ios&&this.children.some((function(e){return e instanceof Dr}))))){var o=document.createElement("BR");o.cmIgnore=!0,this.dom.appendChild(o)}},t.prototype.measureTextSize=function(){if(0==this.children.length||this.length>20)return null;for(var e=0,t=0,n=this.children;t=n){if(o instanceof t)return o;if(a>n)break}r=a+o.breakAfter}return null},t}(hr),Zr=function(e){function t(t,n,i){var r=e.call(this)||this;return r.widget=t,r.length=n,r.type=i,r.breakAfter=0,r.prevWidget=null,r}return f(t,e),t.prototype.merge=function(e,n,i,r,o,a){return!(i&&(!(i instanceof t&&this.widget.compare(i.widget))||e>0&&o<=0||n0;){if(this.textOff==this.text.length){var i=this.cursor.next(this.skip),r=i.value,o=i.lineBreak,a=i.done;if(this.skip=0,a)throw new Error("Ran out of text content when drawing inline views");if(o){this.posCovered()||this.getLine(),this.content.length?this.content[this.content.length-1].breakAfter=1:this.breakAtStart=1,this.flushBuffer(),this.curLine=null,this.atCursorPos=!0,e--;continue}this.text=r,this.textOff=0}var s=Math.min(this.text.length-this.textOff,e,512);this.flushBuffer(t.slice(t.length-n)),this.getLine().append(Jr(new Dr(this.text.slice(this.textOff,this.textOff+s)),t),n),this.atCursorPos=!0,this.textOff+=s,e-=s,n=0}},e.prototype.span=function(e,t,n,i){this.buildText(t-e,n,i),this.pos=t,this.openStart<0&&(this.openStart=i)},e.prototype.point=function(e,t,n,i,r,o){if(this.disallowBlockEffectsFor[o]&&n instanceof Kr){if(n.block)throw new RangeError("Block decorations may not be specified via plugins");if(t>this.doc.lineAt(this.pos).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}var a=t-e;if(n instanceof Kr)if(n.block){var s=n.type;s!=_r.WidgetAfter||this.posCovered()||this.getLine(),this.addBlockWidget(new Zr(n.widget||new eo("div"),a,s))}else{var l=Pr.create(n.widget||new eo("span"),a,a?0:n.startSide),c=this.atCursorPos&&!l.isEditable&&r<=i.length&&(e0),u=!l.isEditable&&(ei.length||n.startSide<=0),h=this.getLine();2!=this.pendingBuffer||c||(this.pendingBuffer=0),this.flushBuffer(i),c&&(h.append(Jr(new Br(1),i),r),r=i.length+Math.max(0,r-i.length)),h.append(Jr(l,i),r),this.atCursorPos=u,this.pendingBuffer=u?ei.length?1:2:0,this.pendingBuffer&&(this.bufferMarks=i.slice())}else this.doc.lineAt(this.pos).from==this.pos&&this.getLine().addLineDeco(n);a&&(this.textOff+a<=this.text.length?this.textOff+=a:(this.skip+=a-(this.text.length-this.textOff),this.text="",this.textOff=0),this.pos=t),this.openStart<0&&(this.openStart=r)},e.build=function(t,n,i,r,o){var a=new e(t,n,i,o);return a.openEnd=mi.spans(r,n,i,a),a.openStart<0&&(a.openStart=a.openEnd),a.finish(a.openEnd),a},e}();function Jr(e,t){for(var n=0,i=t;n0;t--){var i=e[t-1];if(!(i.fromA>n.toA)){if(i.toAu)break;o+=2}if(!l)return i;new e(l.fromA,l.toA,l.fromB,l.toB).addToSet(i),a=l.toA,s=l.toB}},e}(),Mo=function(){function e(e,t,n){this.view=e,this.state=t,this.transactions=n,this.flags=0,this.startState=e.state,this.changes=hn.empty(this.startState.doc.length);for(var i=0,r=n;i0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"heightChanged",{get:function(){return(2&this.flags)>0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"geometryChanged",{get:function(){return this.docChanged||(10&this.flags)>0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"focusChanged",{get:function(){return(1&this.flags)>0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"docChanged",{get:function(){return!this.changes.empty},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"selectionSet",{get:function(){return this.transactions.some((function(e){return e.selection}))},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"empty",{get:function(){return 0==this.flags&&0==this.transactions.length},enumerable:!1,configurable:!0}),e}(),To=function(e){return e[e.LTR=0]="LTR",e[e.RTL=1]="RTL",e}(To||(To={})),Do=To.LTR,Ao=To.RTL;function Lo(e){for(var t=[],n=0;n=t){if(a.level==n)return o;(r<0||(0!=i?i<0?a.fromt:e[r].level>a.level))&&(r=o)}}if(r<0)throw new RangeError("Index out of range");return r},e}(),_o=[];function jo(e,t){var n=e.length,i=t==Do?1:2,r=t==Do?2:1;if(!e||1==i&&!qo.test(e))return Wo(n);for(var o=0,a=i,s=i;o=0;g-=3)if(Oo[g+1]==-f){var v=Oo[g+2],y=2&v?i:4&v?1&v?r:i:0;y&&(_o[o]=_o[Oo[g]]=y),h=g;break}}else{if(189==Oo.length)break;Oo[h++]=o,Oo[h++]=d,Oo[h++]=p}else if(2==(m=_o[o])||1==m){var b=m==i;p=b?0:1;for(g=h-3;g>=0;g-=3){var w=Oo[g+2];if(2&w)break;if(b)Oo[g+2]|=2;else{if(4&w)break;Oo[g+2]|=4}}}for(o=0;ox;){l=u;for(var S=2!=_o[--u];u>x&&S==(2!=_o[u-1]);)u--;C.push(new Uo(u,l,S?2:1))}else C.push(new Uo(x,o,0))}else for(o=0;o1)for(var c=0,u=this.points;cthis.text.length&&(h.pos-=s-1)}r=a+s}},e.prototype.readNode=function(e){if(!e.cmIgnore){var t=hr.get(e),n=t&&t.overrideDOMText;if(null!=n){this.findPointInside(e,n.length);for(var i=n.iter();!i.next().done;)i.lineBreak?this.lineBreak():this.append(i.value)}else 3==e.nodeType?this.readTextNode(e):"BR"==e.nodeName?e.nextSibling&&this.lineBreak():1==e.nodeType&&this.readRange(e.firstChild,null)}},e.prototype.findPointBefore=function(e,t){for(var n=0,i=this.points;n0&&n.length&&(n.every((function(e){var n=e.fromA;return e.toAt.minWidthTo}))?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.view.inputState.composing<0?this.compositionDeco=jr.none:(e.transactions.length||this.dirty)&&(this.compositionDeco=function(e,t){var n=ea(e);if(!n)return jr.none;var i=n.from,r=n.to,o=n.node,a=n.text,s=t.mapPos(i,1),l=Math.max(s,t.mapPos(r,-1)),c=e.state,u=3==o.nodeType?o.nodeValue:new Xo([],c).readRange(o.firstChild,null).text;if(l-s=0?e[i]:null;if(!r)break;var o=r.fromA,a=r.toA,s=r.fromB,l=r.toB,c=Qr.build(this.view.state.doc,s,l,this.decorations,this.dynamicDecorationMap),u=c.content,h=c.breakAtStart,p=c.openStart,d=c.openEnd,f=n.findPos(a,1),m=f.i,g=f.off,v=n.findPos(o,-1);fr(this,v.i,v.off,m,g,u,h,p,d)}},t.prototype.updateSelection=function(e,t){var n=this;if(void 0===e&&(e=!1),void 0===t&&(t=!1),!e&&this.view.observer.selectionRange.focusNode||this.view.observer.readSelectionRange(),t||this.mayControlSelection()){var i=this.forceSelection;this.forceSelection=!1;var r=this.view.state.selection.main,o=this.domAtPos(r.anchor),a=r.empty?o:this.domAtPos(r.head);if(Tr.gecko&&r.empty&&function(e){return 1==e.node.nodeType&&e.node.firstChild&&(0==e.offset||"false"==e.node.childNodes[e.offset-1].contentEditable)&&(e.offset==e.node.childNodes.length||"false"==e.node.childNodes[e.offset].contentEditable)}(o)){var s=document.createTextNode("");this.view.observer.ignore((function(){return o.node.insertBefore(s,o.node.childNodes[o.offset]||null)})),o=a=new cr(s,0),i=!0}var l=this.view.observer.selectionRange;!i&&l.focusNode&&Xi(o.node,o.offset,l.anchorNode,l.anchorOffset)&&Xi(a.node,a.offset,l.focusNode,l.focusOffset)||(this.view.observer.ignore((function(){var e;Tr.android&&Tr.chrome&&n.dom.contains(l.focusNode)&&function(e,t){for(var n=e;n&&n!=t;n=n.assignedSlot||n.parentNode)if(1==n.nodeType&&"false"==n.contentEditable)return!0;return!1}(l.focusNode,n.dom)&&(n.dom.blur(),n.dom.focus({preventScroll:!0}));var t,i,s=Wi(n.view.root);if(s)if(r.empty){if(Tr.gecko){var c=(t=o.node,i=o.offset,1!=t.nodeType?0:(i&&"false"==t.childNodes[i-1].contentEditable?1:0)|(ir.head&&(o=(e=[a,o])[0],a=e[1]),h.setEnd(a.node,a.offset),h.setStart(o.node,o.offset),s.removeAllRanges(),s.addRange(h)}else;})),this.view.observer.setSelectionRange(o,a)),this.impreciseAnchor=o.precise?null:new cr(l.anchorNode,l.anchorOffset),this.impreciseHead=a.precise?null:new cr(l.focusNode,l.focusOffset)}},t.prototype.enforceCursorAssoc=function(){if(!this.compositionDeco.size){var e=this.view,t=e.state.selection.main,n=Wi(e.root),i=e.observer.selectionRange,r=i.anchorNode,o=i.anchorOffset;if(n&&t.empty&&t.assoc&&n.modify){var a=$r.find(this,t.head);if(a){var s=a.posAtStart;if(t.head!=s&&t.head!=s+a.length){var l=this.coordsAt(t.head,-1),c=this.coordsAt(t.head,1);if(l&&c&&!(l.bottom>c.top)){var u=this.domAtPos(t.head+t.assoc);n.collapse(u.node,u.offset),n.modify("move",t.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();var h=e.observer.selectionRange;e.docView.posFromDOM(h.anchorNode,h.anchorOffset)!=t.from&&n.collapse(r,o)}}}}}},t.prototype.mayControlSelection=function(){var e=this.view.root.activeElement;return e==this.dom||Ki(this.dom,this.view.observer.selectionRange)&&!(e&&this.dom.contains(e))},t.prototype.nearest=function(e){for(var t=e;t;){var n=hr.get(t);if(n&&n.rootView==this)return n;t=t.parentNode}return null},t.prototype.posFromDOM=function(e,t){var n=this.nearest(e);if(!n)throw new RangeError("Trying to find position for a DOM position outside of the document");return n.localPosFromDOM(e,t)+n.posAtStart},t.prototype.domAtPos=function(e){for(var t=this.childCursor().findPos(e,-1),n=t.i,i=t.off;no||e==o&&r.type!=_r.WidgetBefore&&r.type!=_r.WidgetAfter&&(!i||2==t||this.children[i-1].breakAfter||this.children[i-1].type==_r.WidgetBefore&&t>-2))return r.coordsAt(e-o,t);n=o}},t.prototype.measureVisibleLineHeights=function(e){for(var t=[],n=e.from,i=e.to,r=this.view.contentDOM.clientWidth,o=r>Math.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,a=-1,s=this.view.textDirection==To.LTR,l=0,c=0;ci)break;if(l>=n){var p=u.dom.getBoundingClientRect();if(t.push(p.height),o){var d=u.dom.lastChild,f=d?Yi(d):[];if(f.length){var m=f[f.length-1],g=s?m.right-p.left:p.right-m.left;g>a&&(a=g,this.minWidth=r,this.minWidthFrom=l,this.minWidthTo=h)}}}l=h+u.breakAfter}return t},t.prototype.textDirectionAt=function(e){var t=this.childPos(e,1).i;return"rtl"==getComputedStyle(this.children[t].dom).direction?To.RTL:To.LTR},t.prototype.measureTextSize=function(){for(var e=this,t=0,n=this.children;tn){var a=t.lineBlockAt(o).bottom-t.lineBlockAt(n).top;e.push(jr.replace({widget:new Jo(a),block:!0,inclusive:!0,isBlockGap:!0}).range(n,o))}if(!r)break;n=r.to+1}return jr.set(e)},t.prototype.updateDeco=function(){for(var e=this,t=this.view.state.facet(ko).map((function(t,n){return(e.dynamicDecorationMap[n]="function"==typeof t)?t(e.view):t})),n=t.length;ni.anchor?-1:1);if(r){!i.empty&&(n=this.coordsAt(i.anchor,i.anchor>i.head?-1:1))&&(r={left:Math.min(r.left,n.left),top:Math.min(r.top,n.top),right:Math.max(r.right,n.right),bottom:Math.max(r.bottom,n.bottom)});for(var o=0,a=0,s=0,l=0,c=0,u=this.view.state.facet(xo).map((function(e){return e(t.view)}));c0&&t.bottom>h.bottom+m&&(m=t.bottom-h.bottom+m+a)):t.bottom>h.bottom&&(m=t.bottom-h.bottom+a,n<0&&t.top-m0&&t.right>h.right+f&&(f=t.right-h.right+f+o)):t.right>h.right&&(f=t.right-h.right+o,n<0&&t.left0&&n<=0)t=Qi(e=e.childNodes[t-1]);else{if(!(1==e.nodeType&&t=0))return null;e=e.childNodes[t],t=0}}}var ia=function(){function e(){this.changes=[]}return e.prototype.compareRange=function(e,t){Xr(e,t,this.changes)},e.prototype.comparePoint=function(e,t){Xr(e,t,this.changes)},e}();function ra(e,t){return t.left>e?t.left-e:Math.max(0,e-t.right)}function oa(e,t){return t.top>e?t.top-e:Math.max(0,e-t.bottom)}function aa(e,t){return e.topt.top+1}function sa(e,t){return te.bottom?{top:e.top,left:e.left,right:e.right,bottom:t}:e}function ca(e,t,n){for(var i,r,o,a,s,l,c,u,h=!1,p=e.firstChild;p;p=p.nextSibling)for(var d=Yi(p),f=0;fv||a==v&&o>g){i=p,r=m,o=g,a=v;var y=v?n0?f0)}0==g?n>m.bottom&&(!c||c.bottomm.top)&&(l=p,u=m):c&&aa(c,m)?c=la(c,m.bottom):u&&aa(u,m)&&(u=sa(u,m.top))}if(c&&c.bottom>=n?(i=s,r=c):u&&u.top<=n&&(i=l,r=u),!i)return{node:e,offset:0};var b=Math.max(r.left,Math.min(r.right,t));return 3==i.nodeType?ua(i,b,n):h&&"false"!=i.contentEditable?ca(i,b,n):{node:e,offset:Array.prototype.indexOf.call(e.childNodes,i)+(t>=(r.left+r.right)/2?1:0)}}function ua(e,t,n){for(var i=e.nodeValue.length,r=-1,o=1e9,a=0,s=0;sn?u.top-n:n-u.bottom)-1;if(u.left-1<=t&&u.right+1>=t&&h=(u.left+u.right)/2,d=p;if(Tr.chrome||Tr.gecko)ar(e,s).getBoundingClientRect().left==u.right&&(d=!p);if(h<=0)return{node:e,offset:s+(d?1:0)};r=s+(d?1:0),o=h}}}return{node:e,offset:r>-1?r:a>0?e.nodeValue.length:0}}function ha(e,t,n,i){var r,o;void 0===i&&(i=-1);var a,s=e.contentDOM.getBoundingClientRect(),l=s.top+e.viewState.paddingTop,c=e.viewState.docHeight,u=t.x,h=t.y,p=h-l;if(p<0)return 0;if(p>c)return e.state.doc.length;for(var d=e.defaultLineHeight/2,f=!1;(a=e.elementAtHeight(p)).type!=_r.Text;)for(;!((p=i>0?a.bottom+d:a.top-d)>=0&&p<=c);){if(f)return n?null:0;f=!0,i=-i}h=l+p;var m=a.from;if(me.viewport.to)return e.viewport.to==e.state.doc.length?e.state.doc.length:n?null:pa(e,s,a,u,h);var g=e.dom.ownerDocument,v=e.root.elementFromPoint?e.root:g,y=v.elementFromPoint(u,h);y&&!e.contentDOM.contains(y)&&(y=null),y||(u=Math.max(s.left+1,Math.min(s.right-1,u)),(y=v.elementFromPoint(u,h))&&!e.contentDOM.contains(y)&&(y=null));var b,w=-1;if(y&&0!=(null===(o=e.docView.nearest(y))||void 0===o?void 0:o.isEditable))if(g.caretPositionFromPoint){var k=g.caretPositionFromPoint(u,h);k&&(b=k.offsetNode,w=k.offset)}else if(g.caretRangeFromPoint){var C=g.caretRangeFromPoint(u,h);C&&(b=C.startContainer,w=C.startOffset,(!e.contentDOM.contains(b)||Tr.safari&&function(e,t,n){var i;if(3!=e.nodeType||t!=(i=e.nodeValue.length))return!1;for(var r=e.nextSibling;r;r=r.nextSibling)if(1!=r.nodeType||"BR"!=r.nodeName)return!1;return ar(e,i-1,i).getBoundingClientRect().left>n}(b,w,u)||Tr.chrome&&function(e,t,n){if(0!=t)return!1;for(var i=e;;){var r=i.parentNode;if(!r||1!=r.nodeType||r.firstChild!=i)return!1;if(r.classList.contains("cm-line"))break;i=r}var o=1==e.nodeType?e.getBoundingClientRect():ar(e,0,Math.max(e.nodeValue.length,1)).getBoundingClientRect();return n-o.left>5}(b,w,u))&&(b=void 0))}if(!b||!e.docView.dom.contains(b)){var x=$r.find(e.docView,m);if(!x)return p>a.top+a.height/2?a.to:a.from;b=(r=ca(x.dom,u,h)).node,w=r.offset}var E=e.docView.nearest(b);if(!E)return null;if(E.isWidget){var S=E.dom.getBoundingClientRect();return t.y1.5*e.defaultLineHeight&&(o+=Math.floor((r-n.top)/e.defaultLineHeight)*e.viewState.heightOracle.lineLength);var a=e.state.sliceDoc(n.from,n.to);return n.from+Di(a,o,e.state.tabSize)}function da(e,t,n,i){for(var r=e.state.doc.lineAt(t.head),o=e.bidiSpans(r),a=e.textDirectionAt(r.from),s=t,l=null;;){var c=Ko(r,o,a,s,n),u=Go;if(!c){if(r.number==(n?e.state.doc.lines:1))return s;u="\n",r=e.state.doc.line(r.number+(n?1:-1)),o=e.bidiSpans(r),c=bn.cursor(n?r.from:r.to)}if(l){if(!l(u))return s}else{if(!i)return c;l=i(u)}s=c}}function fa(e,t,n){for(var i=e.state.facet(Co).map((function(t){return t(e)})),r=function(){for(var e=!1,r=0,o=i;ri&&n.fromn.from?bn.cursor(i,1):bn.cursor(r,-1),e=!0)}))}if(!e)return{value:n}};;){var o=r();if("object"==typeof o)return o.value}}var ma=function(){function e(e){var t=this;this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.chromeScrollHack=-1,this.pendingIOSKey=void 0,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastEscPress=0,this.lastContextMenu=0,this.scrollHandlers=[],this.registeredEvents=[],this.customHandlers=[],this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.mouseSelection=null;var n=function(n,i){t.ignoreDuringComposition(i)||"keydown"==i.type&&t.keydown(e,i)||(t.mustFlushObserver(i)&&e.observer.forceFlush(),t.runCustomHandlers(i.type,e,i)?i.preventDefault():n(e,i))},i=function(t){var i=Ca[t];e.contentDOM.addEventListener(t,(function(t){ka(e,t)&&n(i,t)}),xa[t]),r.registeredEvents.push(t)},r=this;for(var o in Ca)i(o);e.scrollDOM.addEventListener("mousedown",(function(t){t.target==e.scrollDOM&&t.clientY>e.contentDOM.getBoundingClientRect().bottom&&n(Ca.mousedown,t)})),Tr.chrome&&102==Tr.chrome_version&&e.scrollDOM.addEventListener("wheel",(function(){t.chromeScrollHack<0?e.contentDOM.style.pointerEvents="none":window.clearTimeout(t.chromeScrollHack),t.chromeScrollHack=setTimeout((function(){t.chromeScrollHack=-1,e.contentDOM.style.pointerEvents=""}),100)}),{passive:!0}),this.notifiedFocused=e.hasFocus,Tr.safari&&e.contentDOM.addEventListener("input",(function(){return null}))}return e.prototype.setSelectionOrigin=function(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()},e.prototype.ensureHandlers=function(e,t){var n,i,r=this;this.customHandlers=[];for(var o=0,a=t;o-1&&t.ctrlKey&&!t.shiftKey))&&(this.pendingIOSKey=n||t,setTimeout((function(){return i.flushIOSKey(e)}),250),!0):(e.observer.delayAndroidKey(t.key,t.keyCode),!0))},e.prototype.flushIOSKey=function(e){var t=this.pendingIOSKey;return!!t&&(this.pendingIOSKey=void 0,sr(e.contentDOM,t.key,t.keyCode))},e.prototype.ignoreDuringComposition=function(e){return!!/^key/.test(e.type)&&(this.composing>0||!!(Tr.safari&&!Tr.ios&&Date.now()-this.compositionEndedAt<100)&&(this.compositionEndedAt=0,!0))},e.prototype.mustFlushObserver=function(e){return"keydown"==e.type&&229!=e.keyCode||"compositionend"==e.type&&!Tr.ios},e.prototype.startMouseSelection=function(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e},e.prototype.update=function(e){this.mouseSelection&&this.mouseSelection.update(e),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)},e.prototype.destroy=function(){this.mouseSelection&&this.mouseSelection.destroy()},e}(),ga=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],va="dthko",ya=[16,17,18,20,91,92,224,225];function ba(e){return.7*e+8}var wa=function(){function e(e,t,n,i){this.view=e,this.style=n,this.mustSelect=i,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParent=function(e){for(var t=e.ownerDocument,n=e.parentNode;n&&n!=t.body;)if(1==n.nodeType){if(n.scrollHeight>n.clientHeight||n.scrollWidth>n.clientWidth)return n;n=n.assignedSlot||n.parentNode}else{if(11!=n.nodeType)break;n=n.host}return null}(e.contentDOM);var r=e.contentDOM.ownerDocument;r.addEventListener("mousemove",this.move=this.move.bind(this)),r.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(ci.allowMultipleSelections)&&function(e,t){var n=e.state.facet(to);return n.length?n[0](t):Tr.mac?t.metaKey:t.ctrlKey}(e,t),this.dragMove=function(e,t){var n=e.state.facet(no);return n.length?n[0](t):Tr.mac?!t.altKey:!t.ctrlKey}(e,t),this.dragging=!(!function(e,t){if(e.state.selection.main.empty)return!1;var n=Wi(e.root);if(!n||0==n.rangeCount)return!0;for(var i=n.getRangeAt(0).getClientRects(),r=0;r=t.clientX&&o.top<=t.clientY&&o.bottom>=t.clientY)return!0}return!1}(e,t)||1!=Ba(t))&&null}return e.prototype.start=function(e){!1===this.dragging&&(e.preventDefault(),this.select(e))},e.prototype.move=function(e){var t;if(0==e.buttons)return this.destroy();if(!1===this.dragging){this.select(this.lastEvent=e);var n=0,i=0,r=(null===(t=this.scrollParent)||void 0===t?void 0:t.getBoundingClientRect())||{left:0,top:0,right:this.view.win.innerWidth,bottom:this.view.win.innerHeight};e.clientX<=r.left?n=-ba(r.left-e.clientX):e.clientX>=r.right&&(n=ba(e.clientX-r.right)),e.clientY<=r.top?i=-ba(r.top-e.clientY):e.clientY>=r.bottom&&(i=ba(e.clientY-r.bottom)),this.setScrollSpeed(n,i)}},e.prototype.up=function(e){null==this.dragging&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()},e.prototype.destroy=function(){this.setScrollSpeed(0,0);var e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=null},e.prototype.setScrollSpeed=function(e,t){var n=this;this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval((function(){return n.scroll()}),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)},e.prototype.scroll=function(){this.scrollParent?(this.scrollParent.scrollLeft+=this.scrollSpeed.x,this.scrollParent.scrollTop+=this.scrollSpeed.y):this.view.win.scrollBy(this.scrollSpeed.x,this.scrollSpeed.y),!1===this.dragging&&this.select(this.lastEvent)},e.prototype.select=function(e){var t=this.style.get(e,this.extend,this.multiple);!this.mustSelect&&t.eq(this.view.state.selection)&&t.main.assoc==this.view.state.selection.main.assoc||this.view.dispatch({selection:t,userEvent:"select.pointer"}),this.mustSelect=!1},e.prototype.update=function(e){var t=this;e.docChanged&&this.dragging&&(this.dragging=this.dragging.map(e.changes)),this.style.update(e)&&setTimeout((function(){return t.select(t.lastEvent)}),20)},e}();function ka(e,t){if(!t.bubbles)return!0;if(t.defaultPrevented)return!1;for(var n=t.target,i=void 0;n!=e.contentDOM;n=n.parentNode)if(!n||11==n.nodeType||(i=hr.get(n))&&i.ignoreEvent(t))return!1;return!0}var Ca=Object.create(null),xa=Object.create(null),Ea=Tr.ie&&Tr.ie_version<15||Tr.ios&&Tr.webkit_version<604;function Sa(e,t){var n,i=e.state,r=1,o=i.toText(t),a=o.lines==i.selection.ranges.length;if(null!=Ra&&i.selection.ranges.every((function(e){return e.empty}))&&Ra==o.toString()){var s=-1;n=i.changeByRange((function(e){var n=i.doc.lineAt(e.from);if(n.from==s)return{range:e};s=n.from;var l=i.toText((a?o.line(r++).text:t)+i.lineBreak);return{changes:{from:n.from,insert:l},range:bn.cursor(e.from+l.length)}}))}else n=a?i.changeByRange((function(e){var t=o.line(r++);return{changes:{from:e.from,to:e.to,insert:t.text},range:bn.cursor(e.from+t.length)}})):i.replaceSelection(o);e.dispatch(n,{userEvent:"input.paste",scrollIntoView:!0})}function Ma(e,t,n,i){if(1==i)return bn.cursor(t,n);if(2==i)return function(e,t,n){void 0===n&&(n=1);var i=e.charCategorizer(t),r=e.doc.lineAt(t),o=t-r.from;if(0==r.length)return bn.cursor(t);0==o?n=1:o==r.length&&(n=-1);var a=o,s=o;n<0?a=Jt(r.text,o,!1):s=Jt(r.text,o);for(var l=i(r.text.slice(a,s));a>0;){var c=Jt(r.text,a,!1);if(i(r.text.slice(c,a))!=l)break;a=c}for(;sDate.now()-2e3)){for(var n=null,i=0,r=e.state.facet(io);i1&&r.ranges.some((function(e){return e.eq(l)}))?function(e,t){for(var n=0;;n++)if(e.ranges[n].eq(t))return bn.create(e.ranges.slice(0,n).concat(e.ranges.slice(n+1)),e.mainIndex==n?0:e.mainIndex-(e.mainIndex>n?1:0))}(r,l):a?r.addRange(l):bn.create([l])}}}(e,t)),n){var o=e.root.activeElement!=e.contentDOM;e.inputState.startMouseSelection(new wa(e,t,n,o)),o&&e.observer.ignore((function(){return or(e.contentDOM)})),e.inputState.mouseSelection&&e.inputState.mouseSelection.start(t)}}};var Ta=function(e,t){return e>=t.top&&e<=t.bottom},Da=function(e,t,n){return Ta(t,n)&&e>=n.left&&e<=n.right};function Aa(e,t,n,i){var r=$r.find(e.docView,t);if(!r)return 1;var o=t-r.posAtStart;if(0==o)return 1;if(o==r.length)return-1;var a=r.coordsAt(o,-1);if(a&&Da(n,i,a))return-1;var s=r.coordsAt(o,1);return s&&Da(n,i,s)?1:a&&Ta(i,a)?-1:1}function La(e,t){var n=e.posAtCoords({x:t.clientX,y:t.clientY},!1);return{pos:n,bias:Aa(e,n,t.clientX,t.clientY)}}var Pa=Tr.ie&&Tr.ie_version<=11,Ia=null,Fa=0,Oa=0;function Ba(e){if(!Pa)return e.detail;var t=Ia,n=Oa;return Ia=e,Oa=Date.now(),Fa=!t||n>Date.now()-400&&Math.abs(t.clientX-e.clientX)<2&&Math.abs(t.clientY-e.clientY)<2?(Fa+1)%3:1}function Na(e,t,n,i){if(n){var r=e.posAtCoords({x:t.clientX,y:t.clientY},!1);t.preventDefault();var o=e.inputState.mouseSelection,a=i&&o&&o.dragging&&o.dragMove?{from:o.dragging.from,to:o.dragging.to}:null,s={from:r,insert:n},l=e.state.changes(a?[a,s]:s);e.focus(),e.dispatch({changes:l,selection:{anchor:l.mapPos(r,-1),head:l.mapPos(r,1)},userEvent:a?"move.drop":"input.drop"})}}Ca.dragstart=function(e,t){var n=e.state.selection.main,i=e.inputState.mouseSelection;i&&(i.dragging=n),t.dataTransfer&&(t.dataTransfer.setData("Text",e.state.sliceDoc(n.from,n.to)),t.dataTransfer.effectAllowed="copyMove")},Ca.drop=function(e,t){if(t.dataTransfer){if(e.state.readOnly)return t.preventDefault();var n=t.dataTransfer.files;if(n&&n.length){t.preventDefault();for(var i=Array(n.length),r=0,o=function(){++r==n.length&&Na(e,t,i.filter((function(e){return null!=e})).join(e.state.lineBreak),!1)},a=function(e){var t=new FileReader;t.onerror=o,t.onload=function(){/[\x00-\x08\x0e-\x1f]{2}/.test(t.result)||(i[e]=t.result),o()},t.readAsText(n[e])},s=0;ss&&(t.push(h.text),n.push({from:h.from,to:Math.min(e.doc.length,h.to+1)})),s=h.number}i=!0}return{text:t.join(e.lineBreak),ranges:n,linewise:i}}(e.state),i=n.text,r=n.ranges,o=n.linewise;if(i||o){Ra=o?i:null;var a=Ea?null:t.clipboardData;a?(t.preventDefault(),a.clearData(),a.setData("text/plain",i)):function(e,t){var n=e.dom.parentNode;if(n){var i=n.appendChild(document.createElement("textarea"));i.style.cssText="position: fixed; left: -10000px; top: 10px",i.value=t,i.focus(),i.selectionEnd=t.length,i.selectionStart=0,setTimeout((function(){i.remove(),e.focus()}),50)}}(e,i),"cut"!=t.type||e.state.readOnly||e.dispatch({changes:r,scrollIntoView:!0,userEvent:"delete.cut"})}};var Ha=Yn.define();function Va(e,t){for(var n=[],i=0,r=e.facet(so);ir+10&&e.hasFocus&&(e.contentDOM.blur(),e.focus())}),100)}};var qa=["pre-wrap","normal","pre-line","break-spaces"],Ua=function(){function e(e){this.lineWrapping=e,this.doc=zt.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.lineLength=30,this.heightChanged=!1}return e.prototype.heightForGap=function(e,t){var n=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(n+=Math.max(0,Math.ceil((t-e-n*this.lineLength*.5)/this.lineLength))),this.lineHeight*n},e.prototype.heightForLine=function(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/(this.lineLength-5))))*this.lineHeight:this.lineHeight},e.prototype.setDoc=function(e){return this.doc=e,this},e.prototype.mustRefreshForWrapping=function(e){return qa.indexOf(e)>-1!=this.lineWrapping},e.prototype.mustRefreshForHeights=function(e){for(var t=!1,n=0;n-1,a=Math.round(t)!=Math.round(this.lineHeight)||this.lineWrapping!=o;if(this.lineWrapping=o,this.lineHeight=t,this.charWidth=n,this.lineLength=i,a){this.heightSamples={};for(var s=0;s0},set:function(e){this.flags=(e?2:0)|-3&this.flags},enumerable:!1,configurable:!0}),e.prototype.setHeight=function(e,t){this.height!=t&&(Math.abs(this.height-t)>Ga&&(e.heightChanged=!0),this.height=t)},e.prototype.replace=function(t,n,i){return e.of(i)},e.prototype.decomposeLeft=function(e,t){t.push(this)},e.prototype.decomposeRight=function(e,t){t.push(this)},e.prototype.applyChanges=function(e,t,n,i){for(var r=this,o=n.doc,a=i.length-1;a>=0;a--){var s=i[a],l=s.fromA,c=s.toA,u=s.fromB,h=s.toB,p=r.lineAt(l,Wa.ByPosNoHeight,n.setDoc(t),0,0),d=p.to>=c?p:r.lineAt(c,Wa.ByPosNoHeight,n,0,0);for(h+=d.to-c,c=d.to;a>0&&p.from<=i[a-1].toA;)l=i[a-1].fromA,u=i[a-1].fromB,a--,l2*o){(a=t[n-1]).break?t.splice(--n,1,a.left,null,a.right):t.splice(--n,1,a.left,a.right),i+=1+a.break,r-=a.size}else{if(!(o>2*r))break;var a;(a=t[i]).break?t.splice(i,1,a.left,null,a.right):t.splice(i,1,a.left,a.right),i+=2+a.break,o-=a.size}else if(r=r&&o(this.blockAt(0,n,i,r))},t.prototype.updateHeight=function(e,t,n,i){return void 0===t&&(t=0),void 0===n&&(n=!1),i&&i.from<=t&&i.more&&this.setHeight(e,i.heights[i.index++]),this.outdated=!1,this},t.prototype.toString=function(){return"block(".concat(this.length,")")},t}(Ka),Xa=function(e){function t(t,n){var i=e.call(this,t,n,_r.Text)||this;return i.collapsed=0,i.widgetHeight=0,i}return f(t,e),t.prototype.replace=function(e,n,i){var r=i[0];return 1==i.length&&(r instanceof t||r instanceof $a&&4&r.flags)&&Math.abs(this.length-r.length)<10?(r instanceof $a?r=new t(r.length,this.height):r.height=this.height,this.outdated||(r.outdated=!1),r):Ka.of(i)},t.prototype.updateHeight=function(e,t,n,i){return void 0===t&&(t=0),void 0===n&&(n=!1),i&&i.from<=t&&i.more?this.setHeight(e,i.heights[i.index++]):(n||this.outdated)&&this.setHeight(e,Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))),this.outdated=!1,this},t.prototype.toString=function(){return"line(".concat(this.length).concat(this.collapsed?-this.collapsed:"").concat(this.widgetHeight?":"+this.widgetHeight:"",")")},t}(Ya),$a=function(e){function t(t){return e.call(this,t,0)||this}return f(t,e),t.prototype.heightMetrics=function(e,t){var n,i=e.doc.lineAt(t).number,r=e.doc.lineAt(t+this.length).number,o=r-i+1,a=0;if(e.lineWrapping){var s=Math.min(this.height,e.lineHeight*o);n=s/o,a=(this.height-s)/(this.length-o-1)}else n=this.height/o;return{firstLine:i,lastLine:r,perLine:n,perChar:a}},t.prototype.blockAt=function(e,t,n,i){var r=this.heightMetrics(t,i),o=r.firstLine,a=r.lastLine,s=r.perLine,l=r.perChar;if(t.lineWrapping){var c=i+Math.round(Math.max(0,Math.min(1,(e-n)/this.height))*this.length),u=s+(p=t.doc.lineAt(c)).length*l,h=Math.max(n,e-u/2);return new ja(p.from,p.length,h,u,_r.Text)}var p=Math.max(0,Math.min(a-o,Math.floor((e-n)/s))),d=t.doc.line(o+p),f=d.from,m=d.length;return new ja(f,m,n+s*p,s,_r.Text)},t.prototype.lineAt=function(e,t,n,i,r){if(t==Wa.ByHeight)return this.blockAt(e,n,i,r);if(t==Wa.ByPosNoHeight){var o=n.doc.lineAt(e),a=o.from,s=o.to;return new ja(a,s-a,0,0,_r.Text)}var l=this.heightMetrics(n,r),c=l.firstLine,u=l.perLine,h=l.perChar,p=n.doc.lineAt(e),d=u+p.length*h,f=p.number-c,m=i+u*f+h*(p.from-r-f);return new ja(p.from,p.length,Math.max(i,Math.min(m,i+this.height-d)),d,_r.Text)},t.prototype.forEachLine=function(e,t,n,i,r,o){e=Math.max(e,r),t=Math.min(t,r+this.length);for(var a=this.heightMetrics(n,r),s=a.firstLine,l=a.perLine,c=a.perChar,u=e,h=i;u<=t;){var p=n.doc.lineAt(u);if(u==e){var d=p.number-s;h+=l*d+c*(e-r-d)}var f=l+c*p.length;o(new ja(p.from,p.length,h,f,_r.Text)),h+=f,u=p.to+1}},t.prototype.replace=function(e,n,i){var r=this.length-n;if(r>0){var o=i[i.length-1];o instanceof t?i[i.length-1]=new t(o.length+r):i.push(null,new t(r-1))}if(e>0){var a=i[0];a instanceof t?i[0]=new t(e+a.length):i.unshift(new t(e-1),null)}return Ka.of(i)},t.prototype.decomposeLeft=function(e,n){n.push(new t(e-1),null)},t.prototype.decomposeRight=function(e,n){n.push(null,new t(this.length-e-1))},t.prototype.updateHeight=function(e,n,i,r){void 0===n&&(n=0),void 0===i&&(i=!1);var o=n+this.length;if(r&&r.from<=n+this.length&&r.more){var a=[],s=Math.max(n,r.from),l=-1;for(r.from>n&&a.push(new t(r.from-n-1).updateHeight(e,n));s<=o&&r.more;){var c=e.doc.lineAt(s).length;a.length&&a.push(null);var u=r.heights[r.index++];-1==l?l=u:Math.abs(u-l)>=Ga&&(l=-2);var h=new Xa(c,u);h.outdated=!1,a.push(h),s+=c+1}s<=o&&a.push(null,new t(o-s).updateHeight(e,s));var p=Ka.of(a);return(l<0||Math.abs(p.height-this.height)>=Ga||Math.abs(l-this.heightMetrics(e,n).perLine)>=Ga)&&(e.heightChanged=!0),p}return(i||this.outdated)&&(this.setHeight(e,e.heightForGap(n,n+this.length)),this.outdated=!1),this},t.prototype.toString=function(){return"gap(".concat(this.length,")")},t}(Ka),Za=function(e){function t(t,n,i){var r=e.call(this,t.length+n+i.length,t.height+i.height,n|(t.outdated||i.outdated?2:0))||this;return r.left=t,r.right=i,r.size=t.size+i.size,r}return f(t,e),Object.defineProperty(t.prototype,"break",{get:function(){return 1&this.flags},enumerable:!1,configurable:!0}),t.prototype.blockAt=function(e,t,n,i){var r=n+this.left.height;return ea))return l;var c=t==Wa.ByPosNoHeight?Wa.ByPosNoHeight:Wa.ByPos;return s?l.join(this.right.lineAt(a,c,n,o,a)):this.left.lineAt(a,c,n,i,r).join(l)},t.prototype.forEachLine=function(e,t,n,i,r,o){var a=i+this.left.height,s=r+this.left.length+this.break;if(this.break)e=s&&this.right.forEachLine(e,t,n,a,s,o);else{var l=this.lineAt(s,Wa.ByPos,n,i,r);e=e&&l.from<=t&&o(l),t>l.to&&this.right.forEachLine(l.to+1,t,n,a,s,o)}},t.prototype.replace=function(e,t,n){var i=this.left.length+this.break;if(tthis.left.length)return this.balanced(this.left,this.right.replace(e-i,t-i,n));var r=[];e>0&&this.decomposeLeft(e,r);for(var o=r.length,a=0,s=n;a0&&Qa(r,o-1),t=++n&&t.push(null),e>n&&this.right.decomposeLeft(e-n,t)},t.prototype.decomposeRight=function(e,t){var n=this.left.length,i=n+this.break;if(e>=i)return this.right.decomposeRight(e-i,t);e2*t.size||t.size>2*e.size?Ka.of(this.break?[e,null,t]:[e,t]):(this.left=e,this.right=t,this.height=e.height+t.height,this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)},t.prototype.updateHeight=function(e,t,n,i){void 0===t&&(t=0),void 0===n&&(n=!1);var r=this.left,o=this.right,a=t+r.length+this.break,s=null;return i&&i.from<=t+r.length&&i.more?s=r=r.updateHeight(e,t,n,i):r.updateHeight(e,t,n),i&&i.from<=a+o.length&&i.more?s=o=o.updateHeight(e,a,n,i):o.updateHeight(e,a,n),s?this.balanced(r,o):(this.height=this.left.height+this.right.height,this.outdated=!1,this)},t.prototype.toString=function(){return this.left+(this.break?" ":"-")+this.right},t}(Ka);function Qa(e,t){var n,i;null==e[t]&&(n=e[t-1])instanceof $a&&(i=e[t+1])instanceof $a&&e.splice(t-1,3,new $a(n.length+1+i.length))}var Ja=function(){function e(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}return Object.defineProperty(e.prototype,"isCovered",{get:function(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering},enumerable:!1,configurable:!0}),e.prototype.span=function(e,t){if(this.lineStart>-1){var n=Math.min(t,this.lineEnd),i=this.nodes[this.nodes.length-1];i instanceof Xa?i.length+=n-this.pos:(n>this.pos||!this.isCovered)&&this.nodes.push(new Xa(n-this.pos,-1)),this.writtenTo=n,t>n&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t},e.prototype.point=function(e,t,n){if(e=5)&&this.addLineDeco(i,r)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd-1)){var e=this.oracle.doc.lineAt(this.pos),t=e.from,n=e.to;this.lineStart=t,this.lineEnd=n,this.writtenTot&&this.nodes.push(new Xa(this.pos-t,-1)),this.writtenTo=this.pos}},e.prototype.blankContent=function(e,t){var n=new $a(t-e);return this.oracle.doc.lineAt(e).to==t&&(n.flags|=4),n},e.prototype.ensureLine=function(){this.enterLine();var e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof Xa)return e;var t=new Xa(0,-1);return this.nodes.push(t),t},e.prototype.addBlock=function(e){this.enterLine(),e.type!=_r.WidgetAfter||this.isCovered||this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,e.type!=_r.WidgetBefore&&(this.covering=e)},e.prototype.addLineDeco=function(e,t){var n=this.ensureLine();n.length+=t,n.collapsed+=t,n.widgetHeight=Math.max(n.widgetHeight,e),this.writtenTo=this.pos=this.pos+t},e.prototype.finish=function(e){var t=0==this.nodes.length?null:this.nodes[this.nodes.length-1];!(this.lineStart>-1)||t instanceof Xa||this.isCovered?(this.writtenTou.clientHeight||u.scrollWidth>u.clientWidth)&&"visible"!=h.overflow){var p=u.getBoundingClientRect();o=Math.max(o,p.left),a=Math.min(a,p.right),s=Math.max(s,p.top),l=c==e.parentNode?p.bottom:Math.min(l,p.bottom)}c="absolute"==h.position||"fixed"==h.position?u.offsetParent:u.parentNode}else{if(11!=c.nodeType)break;c=c.host}return{left:o-n.left,right:Math.max(o,a)-n.left,top:s-(n.top+t),bottom:Math.max(s,l)-(n.top+t)}}function ns(e,t){var n=e.getBoundingClientRect();return{left:0,right:n.right-n.left,top:t,bottom:n.bottom-(n.top+t)}}var is=function(){function e(e,t,n){this.from=e,this.to=t,this.size=n}return e.same=function(e,t){if(e.length!=t.length)return!1;for(var n=0;n=t&&r<=n}))){var o=i.lineBlockAt(r),a=o.from,s=o.to;e.push(new as(a,s))}},i=this,r=0;r<=1;r++)n(r);this.viewports=e.sort((function(e,t){return e.from-t.from})),this.scaler=this.heightMap.height<=7e6?us:new hs(this.heightOracle,this.heightMap,this.viewports)},e.prototype.updateViewportLines=function(){var e=this;this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,(function(t){e.viewportLines.push(1==e.scaler.scale?t:ps(t,e.scaler))}))},e.prototype.update=function(e,t){void 0===t&&(t=null),this.state=e.state;var n=this.stateDeco;this.stateDeco=this.state.facet(ko).filter((function(e){return"function"!=typeof e}));var i,r,o,a,s=e.changedRanges,l=So.extendWithRanges(s,(i=n,r=this.stateDeco,o=e?e.changes:hn.empty(this.state.doc.length),a=new es,mi.compare(i,r,o,a,0),a.changes)),c=this.heightMap.height;this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),l),this.heightMap.height!=c&&(e.flags|=2);var u=l.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.headu.to)||!this.viewportIsAppropriate(u))&&(u=this.getViewport(0,t));var h=!e.changes.empty||2&e.flags||u.from!=this.viewport.from||u.to!=this.viewport.to;this.viewport=u,this.updateForViewport(),h&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&e.selectionSet&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(co)&&(this.mustEnforceCursorAssoc=!0)},e.prototype.measure=function(e){var t=e.contentDOM,n=window.getComputedStyle(t),i=this.heightOracle,r=n.whiteSpace;this.defaultTextDirection="rtl"==n.direction?To.RTL:To.LTR;var o=this.heightOracle.mustRefreshForWrapping(r),a=t.getBoundingClientRect(),s=o||this.mustMeasureContent||this.contentDOMHeight!=a.height;this.contentDOMHeight=a.height,this.mustMeasureContent=!1;var l=0,c=0,u=parseInt(n.paddingTop)||0,h=parseInt(n.paddingBottom)||0;this.paddingTop==u&&this.paddingBottom==h||(this.paddingTop=u,this.paddingBottom=h,l|=10),this.editorWidth!=e.scrollDOM.clientWidth&&(i.lineWrapping&&(s=!0),this.editorWidth=e.scrollDOM.clientWidth,l|=8);var p=(this.printing?ns:ts)(t,this.paddingTop),d=p.top-this.pixelViewport.top,f=p.bottom-this.pixelViewport.bottom;this.pixelViewport=p;var m=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(m!=this.inView&&(this.inView=m,m&&(s=!0)),!this.inView)return 0;var g=a.width;if(this.contentDOMWidth==g&&this.editorHeight==e.scrollDOM.clientHeight||(this.contentDOMWidth=a.width,this.editorHeight=e.scrollDOM.clientHeight,l|=8),s){var v=e.docView.measureVisibleLineHeights(this.viewport);if(i.mustRefreshForHeights(v)&&(o=!0),o||i.lineWrapping&&Math.abs(g-this.contentDOMWidth)>i.charWidth){var y=e.docView.measureTextSize(),b=y.lineHeight,w=y.charWidth;(o=b>0&&i.refresh(r,b,w,g/w,v))&&(e.docView.minWidth=0,l|=8)}d>0&&f>0?c=Math.max(d,f):d<0&&f<0&&(c=Math.min(d,f)),i.heightChanged=!1;for(var k=0,C=this.viewports;kthis.viewport.to);return S&&(this.viewport=this.getViewport(c,this.scrollTarget)),this.updateForViewport(),(2&l||S)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(o?[]:this.lineGaps,e)),l|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),l},Object.defineProperty(e.prototype,"visibleTop",{get:function(){return this.scaler.fromDOM(this.pixelViewport.top)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"visibleBottom",{get:function(){return this.scaler.fromDOM(this.pixelViewport.bottom)},enumerable:!1,configurable:!0}),e.prototype.getViewport=function(e,t){var n=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),i=this.heightMap,r=this.heightOracle,o=this.visibleTop,a=this.visibleBottom,s=new as(i.lineAt(o-1e3*n,Wa.ByHeight,r,0,0).from,i.lineAt(a+1e3*(1-n),Wa.ByHeight,r,0,0).to);if(t){var l=t.range.head;if(ls.to){var c=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),u=i.lineAt(l,Wa.ByPos,r,0,0),h=void 0;h="center"==t.y?(u.top+u.bottom)/2-c/2:"start"==t.y||"nearest"==t.y&&l=s+Math.max(10,Math.min(t,250)))&&r>a-2e3&&o>1,a=r<<1;if(this.defaultTextDirection!=To.LTR&&!i)return[];for(var s=[],l=function(r,a,c,u){if(!(a-rr&&m=c.from&&e.to<=c.to&&Math.abs(e.from-r)t}))}));if(!g){if(a=a}))){var v=t.moveToLineBoundary(bn.cursor(a),!1,!0).head;v>r&&(a=v)}g=new is(r,a,n.gapSize(c,r,a,u))}s.push(g)}},c=0,u=this.viewportLines;ch.from&&l(h.from,f,h,p),m=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find((function(t){return t.from<=e&&t.to>=e}))||ps(this.heightMap.lineAt(e,Wa.ByPos,this.heightOracle,0,0),this.scaler)},e.prototype.lineBlockAtHeight=function(e){return ps(this.heightMap.lineAt(this.scaler.fromDOM(e),Wa.ByHeight,this.heightOracle,0,0),this.scaler)},e.prototype.elementAtHeight=function(e){return ps(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)},Object.defineProperty(e.prototype,"docHeight",{get:function(){return this.scaler.toDOM(this.heightMap.height)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"contentHeight",{get:function(){return this.docHeight+this.paddingTop+this.paddingBottom},enumerable:!1,configurable:!0}),e}(),as=function(e,t){this.from=e,this.to=t};function ss(e,t,n){var i=[],r=e,o=0;return mi.spans(n,e,t,{span:function(){},point:function(e,t){e>r&&(i.push({from:r,to:e}),o+=e-r),r=t}},20),r=1)return i[i.length-1].to;for(var r=Math.floor(n*t),o=0;;o++){var a=i[o],s=a.from,l=a.to-s;if(r<=l)return s+r;r-=l}}function cs(e,t){for(var n=0,i=0,r=e.ranges;i-1}}),ms=Ii.newName(),gs=Ii.newName(),vs=Ii.newName(),ys={"&light":"."+gs,"&dark":"."+vs};function bs(e,t,n){return new Ii(t,{finish:function(t){return/&/.test(t)?t.replace(/&\w*/,(function(t){if("&"==t)return e;if(!n||!n[t])throw new RangeError("Unsupported selector: ".concat(t));return n[t]})):e+" "+t}})}var ws=bs("."+ms,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#444"},".cm-dropCursor":{position:"absolute"},"&.cm-focused .cm-cursor":{display:"block"},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",left:0,zIndex:200},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",borderRight:"1px solid #ddd"},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top"},".cm-highlightSpace:before":{content:"attr(data-display)",position:"absolute",pointerEvents:"none",color:"#888"},".cm-highlightTab":{backgroundImage:'url(\'data:image/svg+xml,\')',backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},ys),ks=function(e,t,n,i){this.typeOver=i,this.bounds=null,this.text="";var r=e.docView,o=r.impreciseHead,a=r.impreciseAnchor;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=e.docView.domBoundsAround(t,n,0))){var s=o||a?[]:function(e){var t=[];if(e.root.activeElement!=e.contentDOM)return t;var n=e.observer.selectionRange,i=n.anchorNode,r=n.anchorOffset,o=n.focusNode,a=n.focusOffset;return i&&(t.push(new Zo(i,r)),o==i&&a==r||t.push(new Zo(o,a))),t}(e),l=new Xo(s,e.state);l.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=l.text,this.newSel=function(e,t){if(0==e.length)return null;var n=e[0].pos,i=2==e.length?e[1].pos:n;return n>-1&&i>-1?bn.single(n+t,i+t):null}(s,this.bounds.from)}else{var c=e.observer.selectionRange,u=o&&o.node==c.focusNode&&o.offset==c.focusOffset||!Gi(e.contentDOM,c.focusNode)?e.state.selection.main.head:e.docView.posFromDOM(c.focusNode,c.focusOffset),h=a&&a.node==c.anchorNode&&a.offset==c.anchorOffset||!Gi(e.contentDOM,c.anchorNode)?e.state.selection.main.anchor:e.docView.posFromDOM(c.anchorNode,c.anchorOffset);this.newSel=bn.single(h,u)}};function Cs(e,t){var n,i=t.newSel,r=e.state.selection.main;if(t.bounds){var o=t.bounds,a=o.from,s=o.to,l=r.from,c=null;(8===e.inputState.lastKeyCode&&e.inputState.lastKeyTime>Date.now()-100||Tr.android&&t.text.length0&&s>0&&e.charCodeAt(a-1)==t.charCodeAt(s-1);)a--,s--;if("end"==i){n-=a+Math.max(0,o-Math.min(a,s))-o}if(a=a?o-n:0)+(s-a),a=o}else if(s=s?o-n:0)+(a-s),s=o}return{from:o,toA:a,toB:s}}(e.state.doc.sliceString(a,s,Yo),t.text,l-a,c);u&&(Tr.chrome&&13==e.inputState.lastKeyCode&&u.toB==u.from+2&&"￿￿"==t.text.slice(u.from,u.toB)&&u.toB--,n={from:a+u.from,to:a+u.toA,insert:zt.of(t.text.slice(u.from,u.toB).split(Yo))})}else i&&(!e.hasFocus&&e.state.facet(fo)||i.main.eq(r))&&(i=null);if(!n&&!i)return!1;if(!n&&t.typeOver&&!r.empty&&i&&i.main.empty?n={from:r.from,to:r.to,insert:e.state.doc.slice(r.from,r.to)}:n&&n.from>=r.from&&n.to<=r.to&&(n.from!=r.from||n.to!=r.to)&&r.to-r.from-(n.to-n.from)<=4?n={from:r.from,to:r.to,insert:e.state.doc.slice(r.from,n.from).append(n.insert).append(e.state.doc.slice(n.to,r.to))}:Tr.chrome&&n&&n.from==n.to&&n.from==r.head&&"\n "==n.insert.toString()&&e.lineWrapping&&(i&&(i=bn.single(i.main.anchor-1,i.main.head-1)),n={from:r.from,to:r.to,insert:zt.of([" "])}),n){var h=e.state;if(Tr.ios&&e.inputState.flushIOSKey(e))return!0;if(Tr.android&&(n.from==r.from&&n.to==r.to&&1==n.insert.length&&2==n.insert.lines&&sr(e.contentDOM,"Enter",13)||n.from==r.from-1&&n.to==r.to&&0==n.insert.length&&sr(e.contentDOM,"Backspace",8)||n.from==r.from&&n.to==r.to+1&&0==n.insert.length&&sr(e.contentDOM,"Delete",46)))return!0;var p=n.insert.toString();if(e.state.facet(ao).some((function(t){return t(e,n.from,n.to,p)})))return!0;e.inputState.composing>=0&&e.inputState.composing++;var d=void 0;if(n.from>=r.from&&n.to<=r.to&&n.to-n.from>=(r.to-r.from)/3&&(!i||i.main.empty&&i.main.from==n.from+n.insert.length)&&e.inputState.composing<0){var f=r.fromn.to?h.sliceDoc(n.to,r.to):"";d=h.replaceSelection(e.state.toText(f+n.insert.sliceString(0,void 0,e.state.lineBreak)+m))}else{var g=h.changes(n),v=i&&!h.selection.main.eq(i.main)&&i.main.to<=g.newLength?i.main:void 0;if(h.selection.ranges.length>1&&e.inputState.composing>=0&&n.to<=r.to&&n.to>=r.to-10){var y=e.state.sliceDoc(n.from,n.to),b=ea(e)||e.state.doc.lineAt(r.head),w=r.to-n.to,k=r.to-r.from;d=h.changeByRange((function(t){if(t.from==r.from&&t.to==r.to)return{changes:g,range:v||t.map(g)};var i=t.to-w,o=i-y.length;if(t.to-t.from!=k||e.state.sliceDoc(o,i)!=y||b&&t.to>=b.from&&t.from<=b.to)return{range:t};var a=h.changes({from:o,to:i,insert:n.insert}),s=t.to-r.to;return{changes:a,range:v?bn.range(Math.max(0,v.anchor+s),Math.max(0,v.head+s)):t.map(a)}}))}else d={changes:g,selection:v&&h.selection.replaceRange(v)}}var C="input.type";return e.composing&&(C+=".compose",e.inputState.compositionFirstChange&&(C+=".start",e.inputState.compositionFirstChange=!1)),e.dispatch(d,{scrollIntoView:!0,userEvent:C}),!0}if(i&&!i.main.eq(r)){var x=!1;C="select";return e.inputState.lastSelectionTime>Date.now()-50&&("select"==e.inputState.lastSelectionOrigin&&(x=!0),C=e.inputState.lastSelectionOrigin),e.dispatch({selection:i,scrollIntoView:x,userEvent:C}),!0}return!1}var xs={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},Es=Tr.ie&&Tr.ie_version<=11,Ss=function(){function e(e){var t=this;this.view=e,this.active=!1,this.selectionRange=new ir,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.resizeContent=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver((function(n){for(var i=0,r=n;i0&&e[e.length-1].intersectionRatio>0!=t.intersecting&&(t.intersecting=!t.intersecting,t.intersecting!=t.view.inView&&t.onScrollChanged(document.createEvent("Event")))}),{}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver((function(e){e.length>0&&e[e.length-1].intersectionRatio>0&&t.onScrollChanged(document.createEvent("Event"))}),{})),this.listenForScroll(),this.readSelectionRange()}return e.prototype.onScrollChanged=function(e){this.view.inputState.runScrollHandlers(this.view,e),this.intersecting&&this.view.measure()},e.prototype.onScroll=function(e){this.intersecting&&this.flush(!1),this.onScrollChanged(e)},e.prototype.onResize=function(){var e=this;this.resizeTimeout<0&&(this.resizeTimeout=setTimeout((function(){e.resizeTimeout=-1,e.view.requestMeasure()}),50))},e.prototype.onPrint=function(){var e=this;this.view.viewState.printing=!0,this.view.measure(),setTimeout((function(){e.view.viewState.printing=!1,e.view.requestMeasure()}),500)},e.prototype.updateGaps=function(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((function(t,n){return t!=e[n]})))){this.gapIntersection.disconnect();for(var t=0,n=e;tDate.now()-200&&e.inputState.lastTouchTime=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()},e.prototype.processRecords=function(){for(var e=this.queue,t=0,n=this.observer.takeRecords();t-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1,new ks(this.view,t,n,i))},e.prototype.flush=function(e){if(void 0===e&&(e=!0),this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();var t=this.readChange();if(!t)return!1;var n=this.view.state,i=Cs(this.view,t);return this.view.state==n&&this.view.update([]),i},e.prototype.readMutation=function(e){var t=this.view.docView.nearest(e.target);if(!t||t.ignoreMutation(e))return null;if(t.markDirty("attributes"==e.type),"attributes"==e.type&&(t.dirty|=4),"childList"==e.type){var n=Ms(t,e.previousSibling||e.target.previousSibling,-1),i=Ms(t,e.nextSibling||e.target.nextSibling,1);return{from:n?t.posAfter(n):t.posAtStart,to:i?t.posBefore(i):t.posAtEnd,typeOver:!1}}return"characterData"==e.type?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null},e.prototype.setWindow=function(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))},e.prototype.addWindowListeners=function(e){e.addEventListener("resize",this.onResize),e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)},e.prototype.removeWindowListeners=function(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)},e.prototype.destroy=function(){var e,t,n,i;this.stop(),null===(e=this.intersection)||void 0===e||e.disconnect(),null===(t=this.gapIntersection)||void 0===t||t.disconnect(),null===(n=this.resizeScroll)||void 0===n||n.disconnect(),null===(i=this.resizeContent)||void 0===i||i.disconnect();for(var r=0,o=this.scrollTargets;r0?t.nextSibling:t.previousSibling}return null}var Ts=function(){function e(e){void 0===e&&(e={});var t,n=this;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.style.cssText="position: fixed; top: -10000px",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),e.parent&&e.parent.appendChild(this.dom),this._dispatch=e.dispatch||function(e){return n.update([e])},this.dispatch=this.dispatch.bind(this),this._root=e.root||function(e){for(;e;){if(e&&(9==e.nodeType||11==e.nodeType&&e.host))return e;e=e.assignedSlot||e.parentNode}return null}(e.parent)||(null===(t=e.parent)||void 0===t?void 0:t.ownerDocument)||document,this.viewState=new os(e.state||ci.create(e)),this.plugins=this.state.facet(go).map((function(e){return new yo(e)}));for(var i=0,r=this.plugins;i0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"compositionStarted",{get:function(){return this.inputState.composing>=0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"root",{get:function(){return this._root},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"win",{get:function(){return this.dom.ownerDocument.defaultView||window},enumerable:!1,configurable:!0}),e.prototype.dispatch=function(){for(var e,t=[],n=0;nv.anchor?-1:1))}for(var y=0,b=g.effects;y-1&&cancelAnimationFrame(this.measureScheduled),this.measureScheduled=0,e&&this.observer.forceFlush();var i=null,r=this.scrollDOM,o=r.scrollHeight,a=r.scrollTop,s=a>o-r.clientHeight-4?o:a;try{for(var l=0;;l++){this.updateState=1;var c=this.viewport,u=this.viewState.lineBlockAtHeight(s),h=this.viewState.measure(this);if(!h&&!this.measureRequests.length&&null==this.viewState.scrollTarget)break;if(l>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}var p=[];4&h||(t=[p,this.measureRequests],this.measureRequests=t[0],p=t[1]);var d=p.map((function(e){try{return e.read(n)}catch(e){return po(n.state,e),As}})),f=Mo.create(this,this.state,[]),m=!1,g=!1;f.flags|=h,i?i.flags|=h:i=f,this.updateState=2,f.empty||(this.updatePlugins(f),this.inputState.update(f),this.updateAttrs(),m=this.docView.update(f));for(var v=0;v1||b<-1)&&(this.scrollDOM.scrollTop+=b,g=!0)}if(m&&this.docView.updateSelection(!0),this.viewport.from==c.from&&this.viewport.to==c.to&&!g&&0==this.measureRequests.length)break}}finally{this.updateState=0,this.measureScheduled=-1}if(i&&!i.empty)for(var w=0,k=this.state.facet(oo);w-1&&this.measure(!1)},e.prototype.requestMeasure=function(e){var t=this;if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame((function(){return t.measure()}))),e){if(this.measureRequests.indexOf(e)>-1)return;if(null!=e.key)for(var n=0;nr.from?t.head-1:t.head):null;if(o){var a=e.dom.getBoundingClientRect(),s=e.textDirectionAt(r.from),l=e.posAtCoords({x:n==(s==To.LTR)?a.right-1:a.left+1,y:(o.top+o.bottom)/2});if(null!=l)return bn.cursor(l,n?-1:1)}var c=$r.find(e.docView,t.head),u=c?n?c.posAtEnd:c.posAtStart:n?r.to:r.from;return bn.cursor(u,n?-1:1)}(this,e,t,n)},e.prototype.moveVertically=function(e,t,n){return fa(this,e,function(e,t,n,i){var r=t.head,o=n?1:-1;if(r==(n?e.state.doc.length:0))return bn.cursor(r,t.assoc);var a,s=t.goalColumn,l=e.contentDOM.getBoundingClientRect(),c=e.coordsAtPos(r),u=e.documentTop;if(c)null==s&&(s=c.left-l.left),a=o<0?c.top:c.bottom;else{var h=e.viewState.lineBlockAt(r);null==s&&(s=Math.min(l.right-l.left,e.defaultCharacterWidth*(r-h.from))),a=(o<0?h.top:h.bottom)+u}for(var p=l.left+s,d=null!=i?i:e.defaultLineHeight>>1,f=0;;f+=10){var m=a+(d+f)*o,g=ha(e,{x:p,y:m},!1,o);if(ml.bottom||(o<0?gr))return bn.cursor(g,t.assoc,void 0,s)}}(this,e,t,n))},e.prototype.domAtPos=function(e){return this.docView.domAtPos(e)},e.prototype.posAtDOM=function(e,t){return void 0===t&&(t=0),this.docView.posFromDOM(e,t)},e.prototype.posAtCoords=function(e,t){return void 0===t&&(t=!0),this.readMeasured(),ha(this,e,t)},e.prototype.coordsAtPos=function(e,t){void 0===t&&(t=1),this.readMeasured();var n=this.docView.coordsAt(e,t);if(!n||n.left==n.right)return n;var i=this.state.doc.lineAt(e),r=this.bidiSpans(i);return er(n,r[Uo.find(r,e-i.from,-1,t)].dir==To.LTR==t>0)},Object.defineProperty(e.prototype,"defaultCharacterWidth",{get:function(){return this.viewState.heightOracle.charWidth},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"defaultLineHeight",{get:function(){return this.viewState.heightOracle.lineHeight},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"textDirection",{get:function(){return this.viewState.defaultTextDirection},enumerable:!1,configurable:!0}),e.prototype.textDirectionAt=function(e){return!this.state.facet(lo)||ethis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))},Object.defineProperty(e.prototype,"lineWrapping",{get:function(){return this.viewState.heightOracle.lineWrapping},enumerable:!1,configurable:!0}),e.prototype.bidiSpans=function(e){if(e.length>Ds)return Wo(e.length);for(var t=this.textDirectionAt(e.from),n=0,i=this.bidiCache;nDate.now()-3e4)&&this.root.activeElement==this.contentDOM},enumerable:!1,configurable:!0}),e.prototype.focus=function(){var e=this;this.observer.ignore((function(){or(e.contentDOM),e.docView.updateSelection()}))},e.prototype.setRoot=function(e){this._root!=e&&(this._root=e,this.observer.setWindow((9==e.nodeType?e:e.ownerDocument).defaultView||window),this.mountStyles())},e.prototype.destroy=function(){for(var e=0,t=this.plugins;e-1&&cancelAnimationFrame(this.measureScheduled),this.destroyed=!0},e.scrollIntoView=function(e,t){return void 0===t&&(t={}),ho.of(new uo("number"==typeof e?bn.cursor(e):e,t.y,t.x,t.yMargin,t.xMargin))},e.domEventHandlers=function(e){return vo.define((function(){return{}}),{eventHandlers:e})},e.theme=function(e,t){var n=Ii.newName(),i=[ds.of(n),Eo.of(bs(".".concat(n),e))];return t&&t.dark&&i.push(fs.of(!0)),i},e.baseTheme=function(e){return On.lowest(Eo.of(bs("."+ms,e,ys)))},e.findFromDOM=function(e){var t,n=e.querySelector(".cm-content"),i=n&&hr.get(n)||hr.get(e);return(null===(t=null==i?void 0:i.rootView)||void 0===t?void 0:t.view)||null},e}();Ts.styleModule=Eo,Ts.inputHandler=ao,Ts.focusChangeEffect=so,Ts.perLineTextDirection=lo,Ts.exceptionSink=ro,Ts.updateListener=oo,Ts.editable=fo,Ts.mouseSelectionStyle=io,Ts.dragMovesSelection=no,Ts.clickAddsSelectionRange=to,Ts.decorations=ko,Ts.atomicRanges=Co,Ts.scrollMargins=xo,Ts.darkTheme=fs,Ts.contentAttributes=wo,Ts.editorAttributes=bo,Ts.lineWrapping=Ts.contentAttributes.of({class:"cm-lineWrapping"}),Ts.announce=Zn.define();var Ds=4096,As={},Ls=function(){function e(e,t,n,i){this.from=e,this.to=t,this.dir=n,this.order=i}return e.update=function(t,n){if(n.empty)return t;for(var i=[],r=t.length?t[t.length-1].dir:To.LTR,o=Math.max(0,t.length-10);o=0;r--){var o=i[r],a="function"==typeof o?o(e):o;a&&Vr(a,n)}return n}var Is=Tr.mac?"mac":Tr.windows?"win":Tr.linux?"linux":"key";function Fs(e,t,n){return t.altKey&&(e="Alt-"+e),t.ctrlKey&&(e="Ctrl-"+e),t.metaKey&&(e="Meta-"+e),!1!==n&&t.shiftKey&&(e="Shift-"+e),e}var Os=On.default(Ts.domEventHandlers({keydown:function(e,t){return zs(Rs(t.state),e,t,"editor")}})),Bs=Cn.define({enables:Os}),Ns=new WeakMap;function Rs(e){var t=e.facet(Bs),n=Ns.get(t);return n||Ns.set(t,n=function(e,t){void 0===t&&(t=Is);for(var n=Object.create(null),i=Object.create(null),r=function(e,t){var n=i[e];if(null==n)i[e]=t;else if(n!=t)throw new Error("Key binding "+e+" is used both as a regular binding and as a multi-stroke prefix")},o=function(e,i,o,a){for(var s,l,c=n[e]||(n[e]=Object.create(null)),u=i.split(/ (?!$)/).map((function(e){return function(e,t){var n,i,r,o,a=e.split(/-(?!$)/),s=a[a.length-1];"Space"==s&&(s=" ");for(var l=0;lt||o.to==t&&(o.to==n.to||o.type==_r.Text))return o}return n}function Ws(e,t,n){if(n.to<=e.viewport.from||n.from>=e.viewport.to)return[];var i=Math.max(n.from,e.viewport.from),r=Math.min(n.to,e.viewport.to),o=e.textDirection==To.LTR,a=e.contentDOM,s=a.getBoundingClientRect(),l=Us(e),c=window.getComputedStyle(a.firstChild),u=s.left+parseInt(c.paddingLeft)+Math.min(0,parseInt(c.textIndent)),h=s.right-parseInt(c.paddingRight),p=js(e,i),d=js(e,r),f=p.type==_r.Text?p:null,m=d.type==_r.Text?d:null;if(e.lineWrapping&&(f&&(f=_s(e,i,f)),m&&(m=_s(e,r,m))),f&&m&&f.from==m.from)return w(k(n.from,n.to,f));var g=f?k(n.from,null,f):C(p,!1),v=m?k(null,n.to,m):C(d,!0),y=[];return(f||p).to<(m||d).from-1?y.push(b(u,g.bottom,h,v.top)):g.bottomc&&m.from=v)break;x>g&&l(Math.max(C,g),null==t&&C<=c,Math.min(x,v),null==n&&x>=p,k.dir)}if((g=y.to+1)>=v)break}}return 0==s.length&&l(c,null==t,p,null==n,e.textDirection),{top:r,bottom:a,horizontal:s}}function C(e,t){var n=s.top+(t?e.top:e.bottom);return{top:n,bottom:n,horizontal:[]}}}var Gs=function(){function e(e,t){this.view=e,this.layer=t,this.drawn=[],this.measureReq={read:this.measure.bind(this),write:this.draw.bind(this)},this.dom=e.scrollDOM.appendChild(document.createElement("div")),this.dom.classList.add("cm-layer"),t.above&&this.dom.classList.add("cm-layer-above"),t.class&&this.dom.classList.add(t.class),this.dom.setAttribute("aria-hidden","true"),this.setOrder(e.state),e.requestMeasure(this.measureReq),t.mount&&t.mount(this.dom,e)}return e.prototype.update=function(e){e.startState.facet(Ks)!=e.state.facet(Ks)&&this.setOrder(e.state),(this.layer.update(e,this.dom)||e.geometryChanged)&&e.view.requestMeasure(this.measureReq)},e.prototype.setOrder=function(e){for(var t=0,n=e.facet(Ks);ta.anchor?-1:1),u=0,h=qs.forRange(e,l,c);u=s?i[i.length-1].to=l:i.push({from:s,to:l})}return i}(e,this.maxLength);re.view.viewport.from&&o1e3?this.createDeco(e.view):i>-1?this.updateRange(e.view,t.map(e.changes),n,i):t},e.prototype.updateRange=function(e,t,n,i){for(var r=this,o=function(o){var s=Math.max(o.from,n),l=Math.min(o.to,i);if(l>s){var c=e.state.doc.lineAt(s),u=c.toc.from;s--)if(a.boundary.test(c.text[s-1-c.from])){h=s;break}for(;lp},add:d})}},a=this,s=0,l=e.visibleRanges;s=32?"•":10==e?"␤":String.fromCharCode(9216+e)}(this.code),n=e.state.phrase("Control character")+" "+(pl[this.code]||"0x"+this.code.toString(16)),i=this.options.render&&this.options.render(this.code,n,t);if(i)return i;var r=document.createElement("span");return r.textContent=t,r.title=n,r.setAttribute("aria-label",n),r.className="cm-specialChar",r},t.prototype.ignoreEvent=function(){return!1},t}(Ur),yl=function(e){function t(t){var n=e.call(this)||this;return n.width=t,n}return f(t,e),t.prototype.eq=function(e){return e.width==this.width},t.prototype.toDOM=function(){var e=document.createElement("span");return e.textContent="\t",e.className="cm-tab",e.style.width=this.width+"px",e},t.prototype.ignoreEvent=function(){return!1},t}(Ur),bl=vo.fromClass(function(){function e(){this.height=1e3,this.attrs={style:"padding-bottom: 1000px"}}return e.prototype.update=function(e){var t=e.view,n=t.viewState.editorHeight-t.defaultLineHeight-t.documentPadding.top-.5;n!=this.height&&(this.height=n,this.attrs={style:"padding-bottom: ".concat(n,"px")})},e}());function wl(){return[bl,wo.of((function(e){var t;return(null===(t=e.plugin(bl))||void 0===t?void 0:t.attrs)||null}))]}function kl(){return xl}var Cl=jr.line({class:"cm-activeLine"}),xl=vo.fromClass(function(){function e(e){this.decorations=this.getDeco(e)}return e.prototype.update=function(e){(e.docChanged||e.selectionSet)&&(this.decorations=this.getDeco(e.view))},e.prototype.getDeco=function(e){for(var t=-1,n=[],i=0,r=e.state.selection.ranges;it&&(n.push(Cl.range(a.from)),t=a.from)}return jr.set(n)},e}(),{decorations:function(e){return e.decorations}}),El=function(e){function t(t){var n=e.call(this)||this;return n.content=t,n}return f(t,e),t.prototype.toDOM=function(){var e=document.createElement("span");return e.className="cm-placeholder",e.style.pointerEvents="none",e.appendChild("string"==typeof this.content?document.createTextNode(this.content):this.content),"string"==typeof this.content?e.setAttribute("aria-label","placeholder "+this.content):e.setAttribute("aria-hidden","true"),e},t.prototype.ignoreEvent=function(){return!1},t}(Ur);function Sl(e){return vo.fromClass(function(){function t(t){this.view=t,this.placeholder=jr.set([jr.widget({widget:new El(e),side:1}).range(0)])}return Object.defineProperty(t.prototype,"decorations",{get:function(){return this.view.state.doc.length?jr.none:this.placeholder},enumerable:!1,configurable:!0}),t}(),{decorations:function(e){return e.decorations}})}var Ml=2e3;function Tl(e,t){var n=e.posAtCoords({x:t.clientX,y:t.clientY},!1),i=e.state.doc.lineAt(n),r=n-i.from,o=r>Ml?-1:r==i.length?function(e,t){var n=e.coordsAtPos(e.viewport.from);return n?Math.round(Math.abs((n.left-t)/e.defaultCharacterWidth)):-1}(e,t.clientX):Ti(i.text,e.state.tabSize,n-i.from);return{line:i.number,col:o,off:r}}function Dl(e,t){var n=Tl(e,t),i=e.state.selection;return n?{update:function(e){if(e.docChanged){var t=e.changes.mapPos(e.startState.doc.line(n.line).from),r=e.state.doc.lineAt(t);n={line:r.number,col:n.col,off:Math.min(n.off,r.length)},i=i.map(e.changes)}},get:function(t,r,o){var a=Tl(e,t);if(!a)return i;var s=function(e,t,n){var i=Math.min(t.line,n.line),r=Math.max(t.line,n.line),o=[];if(t.off>Ml||n.off>Ml||t.col<0||n.col<0)for(var a=Math.min(t.off,n.off),s=Math.max(t.off,n.off),l=i;l<=r;l++)(h=e.doc.line(l)).length<=s&&o.push(bn.range(h.from+a,h.to+s));else{var c=Math.min(t.col,n.col),u=Math.max(t.col,n.col);for(l=i;l<=r;l++){var h,p=Di((h=e.doc.line(l)).text,c,e.tabSize,!0);if(p<0)o.push(bn.cursor(h.to));else{var d=Di(h.text,u,e.tabSize);o.push(bn.range(h.from+p,h.from+d))}}}return o}(e.state,n,a);return s.length?o?bn.create(s.concat(i.ranges)):bn.create(s):i}}:null}function Al(e){var t=(null==e?void 0:e.eventFilter)||function(e){return e.altKey&&0==e.button};return Ts.mouseSelectionStyle.of((function(e,n){return t(n)?Dl(e,n):null}))}var Ll={Alt:[18,function(e){return e.altKey}],Control:[17,function(e){return e.ctrlKey}],Shift:[16,function(e){return e.shiftKey}],Meta:[91,function(e){return e.metaKey}]},Pl={style:"cursor: crosshair"};function Il(e){void 0===e&&(e={});var t=Ll[e.key||"Alt"],n=t[0],i=t[1],r=vo.fromClass(function(){function e(e){this.view=e,this.isDown=!1}return e.prototype.set=function(e){this.isDown!=e&&(this.isDown=e,this.view.update([]))},e}(),{eventHandlers:{keydown:function(e){this.set(e.keyCode==n||i(e))},keyup:function(e){e.keyCode!=n&&i(e)||this.set(!1)},mousemove:function(e){this.set(i(e))}}});return[r,Ts.contentAttributes.of((function(e){var t;return(null===(t=e.plugin(r))||void 0===t?void 0:t.isDown)?Pl:null}))]}var Fl="-10000px",Ol=function(){function e(e,t,n){this.facet=t,this.createTooltipView=n,this.input=e.state.facet(t),this.tooltips=this.input.filter((function(e){return e})),this.tooltipViews=this.tooltips.map(n)}return e.prototype.update=function(e){var t,n=e.state.facet(this.facet),i=n.filter((function(e){return e}));if(n===this.input){for(var r=0,o=this.tooltipViews;rt.lastTransaction-50&&e.length>0&&e[e.length-1].intersectionRatio<1&&t.measureSoon()}),{threshold:[1]}):null,this.observeIntersection(),e.win.addEventListener("resize",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}return e.prototype.createContainer=function(){this.parent?(this.container=document.createElement("div"),this.container.style.position="relative",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom},e.prototype.observeIntersection=function(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(var e=0,t=this.manager.tooltipViews;e .cm-tooltip-arrow")){var n=document.createElement("div");n.className="cm-tooltip-arrow",t.dom.appendChild(n)}return t.dom.style.position=this.position,t.dom.style.top=Fl,this.container.appendChild(t.dom),t.mount&&t.mount(this.view),t},e.prototype.destroy=function(){var e,t;this.view.win.removeEventListener("resize",this.measureSoon);for(var n=0,i=this.manager.tooltipViews;n=Math.min(n.bottom,i.bottom)||c.rightMath.min(n.right,i.right)+.1)l.style.top=Fl;else{var h=a.arrow?s.dom.querySelector(".cm-tooltip-arrow"):null,p=h?7:0,d=u.right-u.left,f=null!==(t=Hl.get(s))&&void 0!==t?t:u.bottom-u.top,m=s.offset||ql,g=this.view.textDirection==To.LTR,v=u.width>i.right-i.left?g?i.left:i.right-u.width:g?Math.min(c.left-(h?14:0)+m.x,i.right-d):Math.max(i.left,c.left-d+(h?14:0)-m.x),y=!!a.above;!a.strictSide&&(y?c.top-(u.bottom-u.top)-m.yi.bottom)&&y==i.bottom-c.bottom>c.top-i.top&&(y=!y);var b=(y?c.top-i.top:i.bottom-c.bottom)-p;if(bv&&E.topw&&(w=y?E.top-f-2-p:E.bottom+p+2)}"absolute"==this.position?(l.style.top=w-e.parent.top+"px",l.style.left=v-e.parent.left+"px"):(l.style.top=w+"px",l.style.left=v+"px"),h&&(h.style.left="".concat(c.left+(g?m.x:-m.x)-(v+14-7),"px")),!0!==s.overlap&&r.push({left:v,top:w,right:k,bottom:w+f}),l.classList.toggle("cm-tooltip-above",y),l.classList.toggle("cm-tooltip-below",!y),s.positioned&&s.positioned(e.space)}}},e.prototype.maybeMeasure=function(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(var e=0,t=this.manager.tooltipViews;ei.bottom||t.xi.right+this.view.defaultCharacterWidth)){var r=this.view.bidiSpans(this.view.state.doc.lineAt(n)).find((function(e){return e.from<=n&&e.to>=n})),o=r&&r.dir==To.RTL?-1:1,a=this.source(this.view,n,t.x-1?n.panels[i]:null}var ic=vo.fromClass(function(){function e(e){this.input=e.state.facet(ac),this.specs=this.input.filter((function(e){return e})),this.panels=this.specs.map((function(t){return t(e)}));var t=e.state.facet(ec);this.top=new rc(e,!0,t.topContainer),this.bottom=new rc(e,!1,t.bottomContainer),this.top.sync(this.panels.filter((function(e){return e.top}))),this.bottom.sync(this.panels.filter((function(e){return!e.top})));for(var n=0,i=this.panels;nthis.i;){var t=e.elements.pop();e.dom.removeChild(t.dom),t.destroy()}},e}(),bc=function(){function e(e,t){var n=this;this.view=e,this.config=t,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");var i=function(i){r.dom.addEventListener(i,(function(r){var o,a=r.target;if(a!=n.dom&&n.dom.contains(a)){for(;a.parentNode!=n.dom;)a=a.parentNode;var s=a.getBoundingClientRect();o=(s.top+s.bottom)/2}else o=r.clientY;var l=e.lineBlockAtHeight(o-e.documentTop);t.domEventHandlers[i](e,l,r)&&r.preventDefault()}))},r=this;for(var o in t.domEventHandlers)i(o);this.markers=mc(t.markers(e)),t.initialSpacer&&(this.spacer=new wc(e,0,0,[t.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}return e.prototype.update=function(e){var t=this.markers;if(this.markers=mc(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){var n=this.config.updateSpacer(this.spacer.markers[0],e);n!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[n])}var i=e.view.viewport;return!mi.eq(this.markers,t,i.from,i.to)||!!this.config.lineMarkerChange&&this.config.lineMarkerChange(e)},e.prototype.destroy=function(){for(var e=0,t=this.elements;en&&(n=a,t.push(Dc.range(a)))}return mi.of(t)}));function Lc(){return Ac}var Pc=new Map;function Ic(e){return vo.define((function(t){return{decorations:e.createDeco(t),update:function(t){this.decorations=e.updateDeco(t,this.decorations)}}}),{decorations:function(e){return e.decorations}})}var Fc=Ic(new cl({regexp:/\t| +/g,decoration:function(e){return function(e){var t=Pc.get(e);return t||Pc.set(e,t=jr.mark({attributes:"\t"===e?{class:"cm-highlightTab"}:{class:"cm-highlightSpace","data-display":e.replace(/ /g,"·")}})),t}(e[0])},boundary:/\S/}));function Oc(){return Fc}var Bc=Ic(new cl({regexp:/\s+$/g,decoration:jr.mark({class:"cm-trailingSpace"}),boundary:/\S/}));function Nc(){return Bc}var Rc={HeightMap:Ka,HeightOracle:Ua,MeasuredHeights:_a,QueryType:Wa,ChangedRange:So,computeOrder:jo,moveVisually:Ko},Hc=1024,Vc=0,zc=function(e,t){this.from=e,this.to=t},qc=function(){function e(e){void 0===e&&(e={}),this.id=Vc++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||function(){throw new Error("This node type doesn't define a deserialize function")}}return e.prototype.add=function(e){var t=this;if(this.perNode)throw new RangeError("Can't add per-node props to node types");return"function"!=typeof e&&(e=jc.match(e)),function(n){var i=e(n);return void 0===i?null:[t,i]}},e}();qc.closedBy=new qc({deserialize:function(e){return e.split(" ")}}),qc.openedBy=new qc({deserialize:function(e){return e.split(" ")}}),qc.group=new qc({deserialize:function(e){return e.split(" ")}}),qc.contextHash=new qc({perNode:!0}),qc.lookAhead=new qc({perNode:!0}),qc.mounted=new qc({perNode:!0});var Uc=function(e,t,n){this.tree=e,this.overlay=t,this.parser=n},_c=Object.create(null),jc=function(){function e(e,t,n,i){void 0===i&&(i=0),this.name=e,this.props=t,this.id=n,this.flags=i}return e.define=function(t){var n=t.props&&t.props.length?Object.create(null):_c,i=(t.top?1:0)|(t.skipped?2:0)|(t.error?4:0)|(null==t.name?8:0),r=new e(t.name||"",n,t.id,i);if(t.props)for(var o=0,a=t.props;o0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isSkipped",{get:function(){return(2&this.flags)>0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isError",{get:function(){return(4&this.flags)>0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isAnonymous",{get:function(){return(8&this.flags)>0},enumerable:!1,configurable:!0}),e.prototype.is=function(e){if("string"==typeof e){if(this.name==e)return!0;var t=this.prop(qc.group);return!!t&&t.indexOf(e)>-1}return this.id==e},e.match=function(e){var t=Object.create(null);for(var n in e)for(var i=0,r=n.split(" ");i=r&&(s.type.isAnonymous||!1!==t(s))){if(s.firstChild())continue;l=!0}for(;l&&n&&!s.type.isAnonymous&&n(s),!s.nextSibling();){if(!s.parent())return;l=!0}}},e.prototype.prop=function(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)},Object.defineProperty(e.prototype,"propValues",{get:function(){var e=[];if(this.props)for(var t in this.props)e.push([+t,this.props[t]]);return e},enumerable:!1,configurable:!0}),e.prototype.balance=function(t){var n=this;return void 0===t&&(t={}),this.children.length<=8?this:hu(jc.none,this.children,this.positions,0,this.children.length,0,this.length,(function(t,i,r){return new e(n.type,t,i,r,n.propValues)}),t.makeTree||function(t,n,i){return new e(jc.none,t,n,i)})},e.build=function(e){return lu(e)},e}();Xc.empty=new Xc(jc.none,[],[],0);var $c=function(){function e(e,t){this.buffer=e,this.index=t}return Object.defineProperty(e.prototype,"id",{get:function(){return this.buffer[this.index-4]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"start",{get:function(){return this.buffer[this.index-3]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"end",{get:function(){return this.buffer[this.index-2]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"size",{get:function(){return this.buffer[this.index-1]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"pos",{get:function(){return this.index},enumerable:!1,configurable:!0}),e.prototype.next=function(){this.index-=4},e.prototype.fork=function(){return new e(this.buffer,this.index)},e}(),Zc=function(){function e(e,t,n){this.buffer=e,this.length=t,this.set=n}return Object.defineProperty(e.prototype,"type",{get:function(){return jc.none},enumerable:!1,configurable:!0}),e.prototype.toString=function(){for(var e=[],t=0;t0));s=o[s+3]);return a},e.prototype.slice=function(t,n,i,r){for(var o=this.buffer,a=new Uint16Array(n-t),s=t,l=0;s=t&&nt;case 1:return n<=t&&i>t;case 2:return i>t;case 4:return!0}}function Jc(e,t){for(var n=e.childBefore(t);n;){var i=n.lastChild;if(!i||i.to!=n.to)break;i.type.isError&&i.from==i.to?(e=n,n=i.prevSibling):n=i}return e}function eu(e,t,n,i){for(var r;e.from==e.to||(n<1?e.from>=t:e.from>t)||(n>-1?e.to<=t:e.to0?l.length:-1;t!=u;t+=n){var h=l[t],p=c[t]+a.from;if(Qc(r,i,p,p+h.length))if(h instanceof Zc){if(o&Wc.ExcludeBuffers)continue;var d=h.findChild(0,h.buffer.length,n,i-p,r);if(d>-1)return new ou(new ru(a,h,t,p),null,d)}else if(o&Wc.IncludeAnonymous||!h.type.isAnonymous||su(h)){var f=void 0;if(!(o&Wc.IgnoreMounts)&&h.props&&(f=h.prop(qc.mounted))&&!f.overlay)return new e(f.tree,p,t,a);var m=new e(h,p,t,a);return o&Wc.IncludeAnonymous||!m.type.isAnonymous?m:m.nextChild(n<0?h.children.length-1:0,n,i,r)}}if(o&Wc.IncludeAnonymous||!a.type.isAnonymous)return null;if(t=a.index>=0?a.index+n:n<0?-1:a._parent._tree.children.length,!(a=a._parent))return null}},Object.defineProperty(e.prototype,"firstChild",{get:function(){return this.nextChild(0,1,0,4)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"lastChild",{get:function(){return this.nextChild(this._tree.children.length-1,-1,0,4)},enumerable:!1,configurable:!0}),e.prototype.childAfter=function(e){return this.nextChild(0,1,e,2)},e.prototype.childBefore=function(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)},e.prototype.enter=function(t,n,i){var r;if(void 0===i&&(i=0),!(i&Wc.IgnoreOverlays)&&(r=this._tree.prop(qc.mounted))&&r.overlay)for(var o=t-this.from,a=0,s=r.overlay;a0?c<=o:c=o:u>o))return new e(r.tree,r.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,t,n,i)},e.prototype.nextSignificantParent=function(){for(var e=this;e.type.isAnonymous&&e._parent;)e=e._parent;return e},Object.defineProperty(e.prototype,"parent",{get:function(){return this._parent?this._parent.nextSignificantParent():null},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"nextSibling",{get:function(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"prevSibling",{get:function(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null},enumerable:!1,configurable:!0}),e.prototype.cursor=function(e){return void 0===e&&(e=0),new au(this,e)},Object.defineProperty(e.prototype,"tree",{get:function(){return this._tree},enumerable:!1,configurable:!0}),e.prototype.toTree=function(){return this._tree},e.prototype.resolve=function(e,t){return void 0===t&&(t=0),eu(this,e,t,!1)},e.prototype.resolveInner=function(e,t){return void 0===t&&(t=0),eu(this,e,t,!0)},e.prototype.enterUnfinishedNodesBefore=function(e){return Jc(this,e)},e.prototype.getChild=function(e,t,n){void 0===t&&(t=null),void 0===n&&(n=null);var i=nu(this,e,t,n);return i.length?i[0]:null},e.prototype.getChildren=function(e,t,n){return void 0===t&&(t=null),void 0===n&&(n=null),nu(this,e,t,n)},e.prototype.toString=function(){return this._tree.toString()},Object.defineProperty(e.prototype,"node",{get:function(){return this},enumerable:!1,configurable:!0}),e.prototype.matchContext=function(e){return iu(this,e)},e}();function nu(e,t,n,i){var r=e.cursor(),o=[];if(!r.firstChild())return o;if(null!=n)for(;!r.type.is(n);)if(!r.nextSibling())return o;for(;;){if(null!=i&&r.type.is(i))return o;if(r.type.is(t)&&o.push(r.node),!r.nextSibling())return null==i?o:[]}}function iu(e,t,n){void 0===n&&(n=t.length-1);for(var i=e.parent;n>=0;i=i.parent){if(!i)return!1;if(!i.type.isAnonymous){if(t[n]&&t[n]!=i.name)return!1;n--}}return!0}var ru=function(e,t,n,i){this.parent=e,this.buffer=t,this.index=n,this.start=i},ou=function(){function e(e,t,n){this.context=e,this._parent=t,this.index=n,this.type=e.buffer.set.types[e.buffer.buffer[n]]}return Object.defineProperty(e.prototype,"name",{get:function(){return this.type.name},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"from",{get:function(){return this.context.start+this.context.buffer.buffer[this.index+1]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"to",{get:function(){return this.context.start+this.context.buffer.buffer[this.index+2]},enumerable:!1,configurable:!0}),e.prototype.child=function(t,n,i){var r=this.context.buffer,o=r.findChild(this.index+4,r.buffer[this.index+3],t,n-this.context.start,i);return o<0?null:new e(this.context,this,o)},Object.defineProperty(e.prototype,"firstChild",{get:function(){return this.child(1,0,4)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"lastChild",{get:function(){return this.child(-1,0,4)},enumerable:!1,configurable:!0}),e.prototype.childAfter=function(e){return this.child(1,e,2)},e.prototype.childBefore=function(e){return this.child(-1,e,-2)},e.prototype.enter=function(t,n,i){if(void 0===i&&(i=0),i&Wc.ExcludeBuffers)return null;var r=this.context.buffer,o=r.findChild(this.index+4,r.buffer[this.index+3],n>0?1:-1,t-this.context.start,n);return o<0?null:new e(this.context,this,o)},Object.defineProperty(e.prototype,"parent",{get:function(){return this._parent||this.context.parent.nextSignificantParent()},enumerable:!1,configurable:!0}),e.prototype.externalSibling=function(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)},Object.defineProperty(e.prototype,"nextSibling",{get:function(){var t=this.context.buffer,n=t.buffer[this.index+3];return n<(this._parent?t.buffer[this._parent.index+3]:t.buffer.length)?new e(this.context,this._parent,n):this.externalSibling(1)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"prevSibling",{get:function(){var t=this.context.buffer,n=this._parent?this._parent.index+4:0;return this.index==n?this.externalSibling(-1):new e(this.context,this._parent,t.findChild(n,this.index,-1,0,4))},enumerable:!1,configurable:!0}),e.prototype.cursor=function(e){return void 0===e&&(e=0),new au(this,e)},Object.defineProperty(e.prototype,"tree",{get:function(){return null},enumerable:!1,configurable:!0}),e.prototype.toTree=function(){var e=[],t=[],n=this.context.buffer,i=this.index+4,r=n.buffer[this.index+3];if(r>i){var o=n.buffer[this.index+1],a=n.buffer[this.index+2];e.push(n.slice(i,r,o,a)),t.push(0)}return new Xc(this.type,e,t,this.to-this.from)},e.prototype.resolve=function(e,t){return void 0===t&&(t=0),eu(this,e,t,!1)},e.prototype.resolveInner=function(e,t){return void 0===t&&(t=0),eu(this,e,t,!0)},e.prototype.enterUnfinishedNodesBefore=function(e){return Jc(this,e)},e.prototype.toString=function(){return this.context.buffer.childString(this.index)},e.prototype.getChild=function(e,t,n){void 0===t&&(t=null),void 0===n&&(n=null);var i=nu(this,e,t,n);return i.length?i[0]:null},e.prototype.getChildren=function(e,t,n){return void 0===t&&(t=null),void 0===n&&(n=null),nu(this,e,t,n)},Object.defineProperty(e.prototype,"node",{get:function(){return this},enumerable:!1,configurable:!0}),e.prototype.matchContext=function(e){return iu(this,e)},e}(),au=function(){function e(e,t){if(void 0===t&&(t=0),this.mode=t,this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,e instanceof tu)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(var n=e._parent;n;n=n._parent)this.stack.unshift(n.index);this.bufferNode=e,this.yieldBuf(e.index)}}return Object.defineProperty(e.prototype,"name",{get:function(){return this.type.name},enumerable:!1,configurable:!0}),e.prototype.yieldNode=function(e){return!!e&&(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0)},e.prototype.yieldBuf=function(e,t){this.index=e;var n=this.buffer,i=n.start,r=n.buffer;return this.type=t||r.set.types[r.buffer[e]],this.from=i+r.buffer[e+1],this.to=i+r.buffer[e+2],!0},e.prototype.yield=function(e){return!!e&&(e instanceof tu?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)))},e.prototype.toString=function(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()},e.prototype.enterChild=function(e,t,n){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,n,this.mode));var i=this.buffer.buffer,r=i.findChild(this.index+4,i.buffer[this.index+3],e,t-this.buffer.start,n);return!(r<0)&&(this.stack.push(this.index),this.yieldBuf(r))},e.prototype.firstChild=function(){return this.enterChild(1,0,4)},e.prototype.lastChild=function(){return this.enterChild(-1,0,4)},e.prototype.childAfter=function(e){return this.enterChild(1,e,2)},e.prototype.childBefore=function(e){return this.enterChild(-1,e,-2)},e.prototype.enter=function(e,t,n){return void 0===n&&(n=this.mode),this.buffer?!(n&Wc.ExcludeBuffers)&&this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,n))},e.prototype.parent=function(){if(!this.buffer)return this.yieldNode(this.mode&Wc.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());var e=this.mode&Wc.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)},e.prototype.sibling=function(e){if(!this.buffer)return!!this._tree._parent&&this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode));var t=this.buffer.buffer,n=this.stack.length-1;if(e<0){var i=n<0?0:this.stack[n]+4;if(this.index!=i)return this.yieldBuf(t.findChild(i,this.index,-1,0,4))}else{var r=t.buffer[this.index+3];if(r<(n<0?t.buffer.length:t.buffer[this.stack[n]+3]))return this.yieldBuf(r)}return n<0&&this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode))},e.prototype.nextSibling=function(){return this.sibling(1)},e.prototype.prevSibling=function(){return this.sibling(-1)},e.prototype.atLastNode=function(e){var t,n,i,r,o=this.buffer;if(o){if(e>0){if(this.index-1){a=i+e;for(var s=e<0?-1:r._tree.children.length;a!=s;a+=e){var l=r._tree.children[a];if(this.mode&Wc.IncludeAnonymous||l instanceof Zc||!l.type.isAnonymous||su(l))return!1}}return!0},e.prototype.move=function(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}},e.prototype.next=function(e){return void 0===e&&(e=!0),this.move(1,e)},e.prototype.prev=function(e){return void 0===e&&(e=!0),this.move(-1,e)},e.prototype.moveTo=function(e,t){for(void 0===t&&(t=0);(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to=0;){for(var o=e;o;o=o._parent)if(o.index==i){if(i==this.index)return o;t=o,n=r+1;break e}i=this.stack[--r]}for(var a=n;a=0;r--){if(r<0)return iu(this.node,e,i);var o=n[t.buffer[this.stack[r]]];if(!o.isAnonymous){if(e[i]&&e[i]!=o.name)return!1;i--}}return!0},e}();function su(e){return e.children.some((function(e){return e instanceof Zc||!e.type.isAnonymous||su(e)}))}function lu(e){var t,n=e.buffer,i=e.nodeSet,r=e.maxBufferLength,o=void 0===r?Hc:r,a=e.reused,s=void 0===a?[]:a,l=e.minRepeatType,c=void 0===l?i.types.length:l,u=Array.isArray(n)?new $c(n,n.length):n,h=i.types,p=0,d=0;function f(e,t,n,r,a){for(var l=u.id,y=u.start,b=u.end,w=u.size,k=d;w<0;){if(u.next(),-1==w){var C=s[l];return n.push(C),void r.push(y-e)}if(-3==w)return void(p=l);if(-4==w)return void(d=l);throw new RangeError("Unrecognized record size: ".concat(w))}var x,E,S=h[l],M=y-e;if(b-y<=o&&(E=function(e,t){var n=u.fork(),i=0,r=0,a=0,s=n.end-o,l={size:0,start:0,skip:0};e:for(var h=n.pos-e;n.pos>h;){var p=n.size;if(n.id==t&&p>=0)l.size=i,l.start=r,l.skip=a,a+=4,i+=4,n.next();else{var d=n.pos-p;if(p<0||d=c?4:0,m=n.start;for(n.next();n.pos>d;){if(n.size<0){if(-3!=n.size)break e;f+=4}else n.id>=c&&(f+=4);n.next()}r=m,i+=p,a+=f}}(t<0||i==e)&&(l.size=i,l.start=r,l.skip=a);return l.size>4?l:void 0}(u.pos-t,a))){for(var T=new Uint16Array(E.size-E.skip),D=u.pos-E.size,A=T.length;u.pos>D;)A=v(E.start,T,A);x=new Zc(T,b-E.start,i),M=E.start-e}else{D=u.pos-w;u.next();for(var L=[],P=[],I=l>=c?l:-1,F=0,O=b;u.pos>D;)I>=0&&u.id==I&&u.size>=0?(u.end<=O-o&&(m(L,P,y,F,u.end,O,I,k),F=L.length,O=u.end),u.next()):f(y,D,L,P,I);if(I>=0&&F>0&&F-1&&F>0){var B=function(e){return function(t,n,i){var r,o,a=0,s=t.length-1;if(s>=0&&(r=t[s])instanceof Xc){if(!s&&r.type==e&&r.length==i)return r;(o=r.prop(qc.lookAhead))&&(a=n[s]+r.length+o)}return g(e,t,n,i,a)}}(S);x=hu(S,L,P,0,L.length,0,b-y,B,B)}else x=g(S,L,P,b-y,k-b)}n.push(x),r.push(M)}function m(e,t,n,r,o,a,s,l){for(var c=[],u=[];e.length>r;)c.push(e.pop()),u.push(t.pop()+n-o);e.push(g(i.types[s],c,u,a-o,l-a)),t.push(o-n)}function g(e,t,n,i,r,o){if(void 0===r&&(r=0),p){var a=[qc.contextHash,p];o=o?[a].concat(o):[a]}if(r>25){a=[qc.lookAhead,r];o=o?[a].concat(o):[a]}return new Xc(e,t,n,i,o)}function v(e,t,n){var i=u.id,r=u.start,o=u.end,a=u.size;if(u.next(),a>=0&&i4)for(var l=u.pos-(a-4);u.pos>l;)n=v(e,t,n);t[--n]=s,t[--n]=o-e,t[--n]=r-e,t[--n]=i}else-3==a?p=i:-4==a&&(d=i);return n}for(var y=[],b=[];u.pos>0;)f(e.start||0,e.bufferStart||0,y,b,-1);var w=null!==(t=e.length)&&void 0!==t?t:y.length?b[0]+y[0].length:0;return new Xc(h[e.topID],y.reverse(),b.reverse(),w)}var cu=new WeakMap;function uu(e,t){if(!e.isAnonymous||t instanceof Zc||t.type!=e)return 1;var n=cu.get(t);if(null==n){n=1;for(var i=0,r=t.children;i=h)break;m+=g}if(c==u+1){if(m>h){var v=n[u];t(v.children,v.positions,0,v.children.length,i[u]+s);continue}p.push(n[u])}else{var y=i[c-1]+n[c-1].length-f;p.push(hu(e,n,i,u,c,f,y,null,l))}d.push(f+s-o)}}(t,n,i,r,0),(s||l)(p,d,a)}var pu=function(){function e(){this.map=new WeakMap}return e.prototype.setBuffer=function(e,t,n){var i=this.map.get(e);i||this.map.set(e,i=new Map),i.set(t,n)},e.prototype.getBuffer=function(e,t){var n=this.map.get(e);return n&&n.get(t)},e.prototype.set=function(e,t){e instanceof ou?this.setBuffer(e.context.buffer,e.index,t):e instanceof tu&&this.map.set(e.tree,t)},e.prototype.get=function(e){return e instanceof ou?this.getBuffer(e.context.buffer,e.index):e instanceof tu?this.map.get(e.tree):void 0},e.prototype.cursorSet=function(e,t){e.buffer?this.setBuffer(e.buffer.buffer,e.index,t):this.map.set(e.tree,t)},e.prototype.cursorGet=function(e){return e.buffer?this.getBuffer(e.buffer.buffer,e.index):this.map.get(e.tree)},e}(),du=function(){function e(e,t,n,i,r,o){void 0===r&&(r=!1),void 0===o&&(o=!1),this.from=e,this.to=t,this.tree=n,this.offset=i,this.open=(r?1:0)|(o?2:0)}return Object.defineProperty(e.prototype,"openStart",{get:function(){return(1&this.open)>0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"openEnd",{get:function(){return(2&this.open)>0},enumerable:!1,configurable:!0}),e.addTree=function(t,n,i){void 0===n&&(n=[]),void 0===i&&(i=!1);for(var r=[new e(0,t.length,t,0,!1,i)],o=0,a=n;ot.length&&r.push(s)}return r},e.applyChanges=function(t,n,i){if(void 0===i&&(i=128),!n.length)return t;for(var r=[],o=1,a=t.length?t[0]:null,s=0,l=0,c=0;;s++){var u=s=i)for(;a&&a.from=p.from||h<=p.to||c){var d=Math.max(p.from,l)-c,f=Math.min(p.to,h)-c;p=d>=f?null:new e(d,f,p.tree,p.offset+c,s>0,!!u)}if(p&&r.push(p),a.to>h)break;a=o=i.to&&e.mount.overlay}));if(l)for(var c=function(e){var n=e.from+l.pos,r=e.to+l.pos;n>=i.from&&r<=i.to&&!t.ranges.some((function(e){return e.fromn}))&&t.ranges.push({from:n,to:r})},u=0,h=l.mount.overlay;u=n)break;if(o.to>t)return o.from<=t&&o.to>=n?2:1}return 0}function Cu(e,t,n,i,r,o){if(t=t.to);i++);var a=r.children[i],s=a.buffer;r.children[i]=function e(n,i,r,l,c){for(var u=n;s[u+2]+o<=t.from;)u=s[u+3];var h=[],p=[];Cu(a,n,u,h,p,l);var d=s[u+1],f=s[u+2],m=d+o==t.from&&f+o==t.to&&s[u]==t.type.id;return h.push(m?t.toTree():e(u+4,s[u+3],a.set.types[s[u]],d,f-d)),p.push(d-l),Cu(a,s[u+3],i,h,p,l),new Xc(r,h,p,c)}(0,s.length,jc.none,0,a.length);for(var l=0;l<=n;l++)e.childAfter(t.from)}var Eu=function(){function e(e,t){this.offset=t,this.done=!1,this.cursor=e.cursor(Wc.IncludeAnonymous|Wc.IgnoreMounts)}return e.prototype.moveTo=function(e){for(var t=this.cursor,n=e-this.offset;!this.done&&t.from=e&&t.enter(n,1,Wc.IgnoreOverlays|Wc.ExcludeBuffers)||t.next(!1)||(this.done=!0)},e.prototype.hasNode=function(e){if(this.moveTo(e.from),!this.done&&this.cursor.from+this.offset==e.from&&this.cursor.tree)for(var t=this.cursor.tree;;){if(t==e.tree)return!0;if(!(t.children.length&&0==t.positions[0]&&t.children[0]instanceof Xc))break;t=t.children[0]}return!1},e}(),Su=function(){function e(e){var t;if(this.fragments=e,this.curTo=0,this.fragI=0,e.length){var n=this.curFrag=e[0];this.curTo=null!==(t=n.tree.prop(bu))&&void 0!==t?t:n.to,this.inner=new Eu(n.tree,-n.offset)}else this.curFrag=this.inner=null}return e.prototype.hasNode=function(e){for(;this.curFrag&&e.from>=this.curTo;)this.nextFrag();return this.curFrag&&this.curFrag.from<=e.from&&this.curTo>=e.to&&this.inner.hasNode(e)},e.prototype.nextFrag=function(){var e;if(this.fragI++,this.fragI==this.fragments.length)this.curFrag=this.inner=null;else{var t=this.curFrag=this.fragments[this.fragI];this.curTo=null!==(e=t.tree.prop(bu))&&void 0!==e?e:t.to,this.inner=new Eu(t.tree,-t.offset)}},e.prototype.findMounts=function(e,t){var n,i=[];if(this.inner){this.inner.cursor.moveTo(e,1);for(var r=this.inner.cursor.node;r;r=r.parent){var o=null===(n=r.tree)||void 0===n?void 0:n.prop(qc.mounted);if(o&&o.parser==t)for(var a=this.fragI;a=r.to)break;s.tree==this.curFrag.tree&&i.push({frag:s,pos:r.from-s.offset,mount:o})}}}return i},e}();function Mu(e,t){for(var n=null,i=t,r=1,o=0;r=s)break;l.to<=a||(n||(i=n=t.slice()),l.froms&&n.splice(o+1,0,new zc(s,l.to))):l.to>s?n[o--]=new zc(s,l.to):n.splice(o--,1))}return i}function Tu(e,t){for(var n=[],i=function(e,i,r){var o=e+(i.overlay?i.overlay[0].from:0),a=o+i.tree.length,s=Math.max(r.from,o),l=Math.min(r.to,a);if(i.overlay)for(var c=i.overlay.map((function(t){return new zc(t.from+e,t.to+e)})),u=function(e,t,n,i){for(var r=0,o=0,a=!1,s=!1,l=-1e9,c=[];;){var u=r==e.length?1e9:a?e[r].to:e[r].from,h=o==t.length?1e9:s?t[o].to:t[o].from;if(a!=s){var p=Math.max(l,n),d=Math.min(u,h,i);pp&&n.push(new du(p,f,i.tree,-o,r.from>=p,r.to<=f)),d)break;p=u[h].to}else n.push(new du(s,l,i.tree,-o,r.from>=o,r.to<=a))},r=0,o=e;r-1?t:Pu.get(t.base||t,t.modified.concat(e).sort((function(e,t){return e.id-t.id})))}},e}(),Lu=0,Pu=function(){function e(){this.instances=[],this.id=Lu++}return e.get=function(t,n){if(!n.length)return t;var i=n[0].instances.find((function(e){return e.base==t&&(i=n,r=e.modified,i.length==r.length&&i.every((function(e,t){return e==r[t]})));var i,r}));if(i)return i;for(var r=[],o=new Au(r,t,n),a=0,s=n;a0&&u+3==a.length){l=1;break}var h=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(c);if(!h)throw new RangeError("Invalid path: "+a);if(s.push("*"==h[0]?"":'"'==h[0][0]?JSON.parse(h[0]):h[0]),(u+=h[0].length)==a.length)break;var p=a[u++];if(u==a.length&&"!"==p){l=0;break}if("/"!=p)throw new RangeError("Invalid path: "+a);c=a.slice(u)}var d=s.length-1,f=s[d];if(!f)throw new RangeError("Invalid path: "+a);var m=new Bu(i,l,d>0?s.slice(0,d):null);t[f]=m.sort(t[f])}}}return Ou.add(t)}var Ou=new qc,Bu=function(){function e(e,t,n,i){this.tags=e,this.mode=t,this.context=n,this.next=i}return e.prototype.sort=function(e){return!e||e.depththis.at&&(this.at=e),this.class=t)},e.prototype.flush=function(e){e>this.at&&this.class&&this.span(this.at,e,this.class)},e.prototype.highlightRange=function(e,t,n,i,r){var o=e.type,a=e.from,s=e.to;if(!(a>=n||s<=t)){o.isTop&&(r=this.highlighters.filter((function(e){return!e.scope||e.scope(o)})));for(var l=i,c=o.prop(Ou),u=!1;c;){if(!c.context||e.matchContext(c.context)){var h=Ru(r,c.tags);h&&(l&&(l+=" "),l+=h,1==c.mode?i+=(i?" ":"")+h:0==c.mode&&(u=!0));break}c=c.next}if(this.startSpan(e.from,l),!u){var p=e.tree&&e.tree.prop(qc.mounted);if(p&&p.overlay){for(var d=e.node.enter(p.overlay[0].from+a,1),f=this.highlighters.filter((function(e){return!e.scope||e.scope(p.tree.type)})),m=e.firstChild(),g=0,v=a;;g++){var y=g=b)&&e.nextSibling()););if(!y||b>n)break;(v=y.to+a)>t&&(this.highlightRange(d.cursor(),Math.max(t,y.from+a),Math.min(n,v),i,f),this.startSpan(v,l))}m&&e.parent()}else if(e.firstChild()){do{if(!(e.to<=t)){if(e.from>=n)break;this.highlightRange(e,t,n,i,r),this.startSpan(Math.min(n,e.to),l)}}while(e.nextSibling());e.parent()}}}},e}(),qu=Au.define,Uu=qu(),_u=qu(),ju=qu(_u),Wu=qu(_u),Gu=qu(),Ku=qu(Gu),Yu=qu(Gu),Xu=qu(),$u=qu(Xu),Zu=qu(),Qu=qu(),Ju=qu(),eh=qu(Ju),th=qu(),nh={comment:Uu,lineComment:qu(Uu),blockComment:qu(Uu),docComment:qu(Uu),name:_u,variableName:qu(_u),typeName:ju,tagName:qu(ju),propertyName:Wu,attributeName:qu(Wu),className:qu(_u),labelName:qu(_u),namespace:qu(_u),macroName:qu(_u),literal:Gu,string:Ku,docString:qu(Ku),character:qu(Ku),attributeValue:qu(Ku),number:Yu,integer:qu(Yu),float:qu(Yu),bool:qu(Gu),regexp:qu(Gu),escape:qu(Gu),color:qu(Gu),url:qu(Gu),keyword:Zu,self:qu(Zu),null:qu(Zu),atom:qu(Zu),unit:qu(Zu),modifier:qu(Zu),operatorKeyword:qu(Zu),controlKeyword:qu(Zu),definitionKeyword:qu(Zu),moduleKeyword:qu(Zu),operator:Qu,derefOperator:qu(Qu),arithmeticOperator:qu(Qu),logicOperator:qu(Qu),bitwiseOperator:qu(Qu),compareOperator:qu(Qu),updateOperator:qu(Qu),definitionOperator:qu(Qu),typeOperator:qu(Qu),controlOperator:qu(Qu),punctuation:Ju,separator:qu(Ju),bracket:eh,angleBracket:qu(eh),squareBracket:qu(eh),paren:qu(eh),brace:qu(eh),content:Xu,heading:$u,heading1:qu($u),heading2:qu($u),heading3:qu($u),heading4:qu($u),heading5:qu($u),heading6:qu($u),contentSeparator:qu(Xu),list:qu(Xu),quote:qu(Xu),emphasis:qu(Xu),strong:qu(Xu),link:qu(Xu),monospace:qu(Xu),strikethrough:qu(Xu),inserted:qu(),deleted:qu(),changed:qu(),invalid:qu(),meta:th,documentMeta:qu(th),annotation:qu(th),processingInstruction:qu(th),definition:Au.defineModifier(),constant:Au.defineModifier(),function:Au.defineModifier(),standard:Au.defineModifier(),local:Au.defineModifier(),special:Au.defineModifier()},ih=Nu([{tag:nh.link,class:"tok-link"},{tag:nh.heading,class:"tok-heading"},{tag:nh.emphasis,class:"tok-emphasis"},{tag:nh.strong,class:"tok-strong"},{tag:nh.keyword,class:"tok-keyword"},{tag:nh.atom,class:"tok-atom"},{tag:nh.bool,class:"tok-bool"},{tag:nh.url,class:"tok-url"},{tag:nh.labelName,class:"tok-labelName"},{tag:nh.inserted,class:"tok-inserted"},{tag:nh.deleted,class:"tok-deleted"},{tag:nh.literal,class:"tok-literal"},{tag:nh.string,class:"tok-string"},{tag:nh.number,class:"tok-number"},{tag:[nh.regexp,nh.escape,nh.special(nh.string)],class:"tok-string2"},{tag:nh.variableName,class:"tok-variableName"},{tag:nh.local(nh.variableName),class:"tok-variableName tok-local"},{tag:nh.definition(nh.variableName),class:"tok-variableName tok-definition"},{tag:nh.special(nh.variableName),class:"tok-variableName2"},{tag:nh.definition(nh.propertyName),class:"tok-propertyName tok-definition"},{tag:nh.typeName,class:"tok-typeName"},{tag:nh.namespace,class:"tok-namespace"},{tag:nh.className,class:"tok-className"},{tag:nh.macroName,class:"tok-macroName"},{tag:nh.propertyName,class:"tok-propertyName"},{tag:nh.operator,class:"tok-operator"},{tag:nh.comment,class:"tok-comment"},{tag:nh.meta,class:"tok-meta"},{tag:nh.invalid,class:"tok-invalid"},{tag:nh.punctuation,class:"tok-punctuation"}]),rh=new qc;function oh(e){return Cn.define({combine:e?function(t){return t.concat(e)}:void 0})}var ah=function(){function e(e,t,n,i){void 0===n&&(n=[]),void 0===i&&(i=""),this.data=e,this.name=i,ci.prototype.hasOwnProperty("tree")||Object.defineProperty(ci.prototype,"tree",{get:function(){return ch(this)}}),this.parser=t,this.extension=[Ch.of(this),ci.languageData.of((function(e,t,n){return e.facet(sh(e,t,n))}))].concat(n)}return e.prototype.isActiveAt=function(e,t,n){return void 0===n&&(n=-1),sh(e,t,n)==this.data},e.prototype.findRegions=function(e){var t=this,n=e.facet(Ch);if((null==n?void 0:n.data)==this.data)return[{from:0,to:e.doc.length}];if(!n||!n.allowsNesting)return[];var i=[],r=function(e,n){if(e.prop(rh)!=t.data){var o=e.prop(qc.mounted);if(o){if(o.tree.prop(rh)==t.data){if(o.overlay)for(var a=0,s=o.overlay;ac)return}}for(var u=0;u=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-n,t-n)},e}(),mh=null,gh=function(){function e(e,t,n,i,r,o,a,s){void 0===n&&(n=[]),this.parser=e,this.state=t,this.fragments=n,this.tree=i,this.treeLen=r,this.viewport=o,this.skipped=a,this.scheduleOn=s,this.parse=null,this.tempSkipped=[]}return e.create=function(t,n,i){return new e(t,n,[],Xc.empty,0,i,[],null)},e.prototype.startParse=function(){return this.parser.startParse(new fh(this.state.doc),this.fragments)},e.prototype.work=function(e,t){var n=this;return null!=t&&t>=this.state.doc.length&&(t=void 0),this.tree!=Xc.empty&&this.isDone(null!=t?t:this.state.doc.length)?(this.takeTree(),!0):this.withContext((function(){var i;if("number"==typeof e){var r=Date.now()+e;e=function(){return Date.now()>r}}for(n.parse||(n.parse=n.startParse()),null!=t&&(null==n.parse.stoppedAt||n.parse.stoppedAt>t)&&t=this.treeLen&&((null==this.parse.stoppedAt||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext((function(){for(;!(t=n.parse.advance()););})),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(du.addTree(this.tree,this.fragments,!0)),this.parse=null)},e.prototype.withContext=function(e){var t=mh;mh=this;try{return e()}finally{mh=t}},e.prototype.withoutTempSkipped=function(e){for(var t=void 0;t=this.tempSkipped.pop();)e=vh(e,t.from,t.to);return e},e.prototype.changes=function(t,n){var i=this,r=i.fragments,o=i.tree,a=i.treeLen,s=i.viewport,l=i.skipped;if(this.takeTree(),!t.empty){var c=[];if(t.iterChangedRanges((function(e,t,n,i){return c.push({fromA:e,toA:t,fromB:n,toB:i})})),r=du.applyChanges(r,c),o=Xc.empty,a=0,s={from:t.mapPos(s.from,-1),to:t.mapPos(s.to,1)},this.skipped.length){l=[];for(var u=0,h=this.skipped;ue.from&&(this.fragments=vh(this.fragments,r,o),this.skipped.splice(n--,1))}return!(this.skipped.length>=t)&&(this.reset(),!0)},e.prototype.reset=function(){this.parse&&(this.takeTree(),this.parse=null)},e.prototype.skipUntilInView=function(e,t){this.skipped.push({from:e,to:t})},e.getSkippingParser=function(e){return new(function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return f(n,t),n.prototype.createParse=function(t,n,i){var r=i[0].from,o=i[i.length-1].to;return{parsedPos:r,advance:function(){var t=mh;if(t){for(var n=0,a=i;n=e&&t.length&&0==t[0].from&&t[0].to>=e},e.get=function(){return mh},e}();function vh(e,t,n){return du.applyChanges(e,[{fromA:t,toA:n,fromB:t,toB:n}])}var yh=function(){function e(e){this.context=e,this.tree=e.tree}return e.prototype.apply=function(t){if(!t.docChanged&&this.tree==this.context.tree)return this;var n=this.context.changes(t.changes,t.state),i=this.context.treeLen==t.startState.doc.length?void 0:Math.max(t.changes.mapPos(this.context.treeLen),n.viewport.to);return n.work(20,i)||n.takeTree(),new e(n)},e.init=function(t){var n=Math.min(3e3,t.doc.length),i=gh.create(t.facet(Ch).parser,t,{from:0,to:n});return i.work(20,n)||i.takeTree(),new e(i)},e}();ah.state=Dn.define({create:yh.init,update:function(e,t){for(var n=0,i=t.effects;nt.treeLen)&&this.scheduleWork(),e.docChanged&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)},e.prototype.scheduleWork=function(){if(!this.working){var e=this.view.state,t=e.field(ah.state);t.tree==t.context.tree&&t.context.isDone(e.doc.length)||(this.working=bh(this.work))}},e.prototype.work=function(e){this.working=null;var t=Date.now();if(this.chunkEndr+1e3,l=o.context.work((function(){return wh&&wh()||Date.now()>a}),r+(s?0:1e5));this.chunkBudget-=Date.now()-t,(l||this.chunkBudget<=0)&&(o.context.takeTree(),this.view.dispatch({effects:ah.setState.of(new yh(o.context))})),this.chunkBudget>0&&(!l||s)&&this.scheduleWork(),this.checkAsyncSchedule(o.context)}}},e.prototype.checkAsyncSchedule=function(e){var t=this;e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then((function(){return t.scheduleWork()})).catch((function(e){return po(t.view.state,e)})).then((function(){return t.workScheduled--})),e.scheduleOn=null)},e.prototype.destroy=function(){this.working&&this.working()},e.prototype.isWorking=function(){return!!(this.working||this.workScheduled>0)},e}(),{eventHandlers:{focus:function(){this.scheduleWork()}}}),Ch=Cn.define({combine:function(e){return e.length?e[0]:null},enables:function(e){return[ah.state,kh,Ts.contentAttributes.compute([e],(function(t){var n=t.facet(e);return n&&n.name?{"data-language":n.name}:{}}))]}}),xh=function(e,t){void 0===t&&(t=[]),this.language=e,this.support=t,this.extension=[e,t]},Eh=function(){function e(e,t,n,i,r,o){void 0===o&&(o=void 0),this.name=e,this.alias=t,this.extensions=n,this.filename=i,this.loadFunc=r,this.support=o,this.loading=null}return e.prototype.load=function(){var e=this;return this.loading||(this.loading=this.loadFunc().then((function(t){return e.support=t}),(function(t){throw e.loading=null,t})))},e.of=function(t){var n=t.load,i=t.support;if(!n){if(!i)throw new RangeError("Must pass either 'load' or 'support' to LanguageDescription.of");n=function(){return Promise.resolve(i)}}return new e(t.name,(t.alias||[]).concat(t.name).map((function(e){return e.toLowerCase()})),t.extensions||[],t.filename,n,i)},e.matchFilename=function(e,t){for(var n=0,i=e;n-1)return s}return null},e.matchLanguageName=function(e,t,n){void 0===n&&(n=!0),t=t.toLowerCase();for(var i=0,r=e;i-1&&(u.length>2||!/\w/.test(t[h-1])&&!/\w/.test(t[h+u.length])))return s}return null},e}(),Sh=Cn.define(),Mh=Cn.define({combine:function(e){if(!e.length)return" ";if(!/^(?: +|\t+)$/.test(e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(e[0]));return e[0]}});function Th(e){var t=e.facet(Mh);return 9==t.charCodeAt(0)?e.tabSize*t.length:t.length}function Dh(e,t){var n="",i=e.tabSize;if(9==e.facet(Mh).charCodeAt(0))for(;t>=i;)n+="\t",t-=i;for(var r=0;r=n.from&&r<=n.to?o&&r==e?{text:"",from:e}:(t<0?r-1&&(o+=a-this.countColumn(i,i.search(/\S|$/))),o},e.prototype.countColumn=function(e,t){return void 0===t&&(t=e.length),Ti(e,this.state.tabSize,t)},e.prototype.lineIndent=function(e,t){void 0===t&&(t=1);var n=this.lineAt(e,t),i=n.text,r=n.from,o=this.options.overrideIndentation;if(o){var a=o(r);if(a>-1)return a}return this.countColumn(i,i.search(/\S|$/))},Object.defineProperty(e.prototype,"simulatedBreak",{get:function(){return this.options.simulateBreak||null},enumerable:!1,configurable:!0}),e}(),Ih=new qc;function Fh(e){var t=e.type.prop(Ih);if(t)return t;var n,i=e.firstChild;if(i&&(n=i.type.prop(qc.closedBy))){var r=e.lastChild,o=r&&n.indexOf(r.name)>-1;return function(e){return Vh(e,!0,1,void 0,o&&!function(e){return e.pos==e.options.simulateBreak&&e.options.simulateDoubleBreak}(e)?r.from:void 0)}}return null==e.parent?Bh:null}function Oh(e,t,n){for(;e;e=e.parent){var i=Fh(e);if(i)return i(Nh.create(n,t,e))}return null}function Bh(){return 0}var Nh=function(e){function t(t,n,i){var r=e.call(this,t.state,t.options)||this;return r.base=t,r.pos=n,r.node=i,r}return f(t,e),t.create=function(e,n,i){return new t(e,n,i)},Object.defineProperty(t.prototype,"textAfter",{get:function(){return this.textAfterPos(this.pos)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"baseIndent",{get:function(){for(var e=this.state.doc.lineAt(this.node.from);;){for(var t=this.node.resolve(e.from);t.parent&&t.parent.from==t.from;)t=t.parent;if(Rh(t,this.node))break;e=this.state.doc.lineAt(t.from)}return this.lineIndent(e.from)},enumerable:!1,configurable:!0}),t.prototype.continue=function(){var e=this.node.parent;return e?Oh(e,this.pos,this.base):0},t}(Ph);function Rh(e,t){for(var n=t;n;n=n.parent)if(e==n)return!0;return!1}function Hh(e){var t=e.closing,n=e.align,i=void 0===n||n,r=e.units,o=void 0===r?1:r;return function(e){return Vh(e,i,o,t)}}function Vh(e,t,n,i,r){var o=e.textAfter,a=o.match(/^\s*/)[0].length,s=i&&o.slice(a,a+i.length)==i||r==e.pos+a,l=t?function(e){var t=e.node,n=t.childAfter(t.from),i=t.lastChild;if(!n)return null;for(var r=e.options.simulateBreak,o=e.state.doc.lineAt(n.from),a=null==r||r<=o.from?o.to:Math.min(o.to,r),s=n.to;;){var l=t.childAfter(s);if(!l||l==i)return null;if(!l.type.isSkipped)return l.fromr.from+200)return e;var o=n.sliceString(r.from,i);if(!t.some((function(e){return e.test(o)})))return e;for(var a=e.state,s=-1,l=[],c=0,u=a.selection.ranges;cn)){if(a&&s.from=t&&c.to>n&&(a=c)}}return a}(e,t,n)}function Kh(e,t){var n=t.mapPos(e.from,1),i=t.mapPos(e.to,-1);return n>=i?void 0:{from:n,to:i}}var Yh=Zn.define({map:Kh}),Xh=Zn.define({map:Kh});function $h(e){for(var t=[],n=function(n){if(t.some((function(e){return e.from<=n&&e.to>=n})))return"continue";t.push(e.lineBlockAt(n))},i=0,r=e.state.selection.ranges;ia&&(o=!0)})),o&&(e=e.update({filterFrom:a,filterTo:a,filter:function(e,t){return t<=a||e>=a}}))}return e},provide:function(e){return Ts.decorations.from(e)},toJSON:function(e,t){var n=[];return e.between(0,t.doc.length,(function(e,t){n.push(e,t)})),n},fromJSON:function(e){if(!Array.isArray(e)||e.length%2)throw new RangeError("Invalid JSON for fold state");for(var t=[],n=0;ne)&&(r={from:e,to:t})})),r}function ep(e,t){return e.field(Zh,!1)?t:t.concat(Zn.appendConfig.of(cp()))}var tp=function(e){for(var t=0,n=$h(e);t0};function ip(e,t,n){void 0===n&&(n=!0);var i=e.state.doc.lineAt(t.from).number,r=e.state.doc.lineAt(t.to).number;return Ts.announce.of("".concat(e.state.phrase(n?"Folded lines":"Unfolded lines")," ").concat(i," ").concat(e.state.phrase("to")," ").concat(r,"."))}var rp=function(e){for(var t=e.state,n=[],i=0;i0&&Fp(t.state,a.head-1,1,i)||i.afterCursor&&(Fp(t.state,a.head,1,i)||a.head-1&&r%2==(t<0?1:0))return[n[r+t]]}return null}function Fp(e,t,n,i){void 0===i&&(i={});for(var r=i.maxScanDistance||1e4,o=i.brackets||Sp,a=ch(e),s=a.resolveInner(t,n),l=s;l;l=l.parent){var c=Ip(l.type,n,o);if(c&&l.from0)return null;for(var c={from:n<0?t-1:t,to:n>0?t+1:t},u=e.doc.iterRange(t,n>0?e.doc.length:0),h=0,p=0;!u.next().done&&p<=o;){var d=u.value;n<0&&(p+=d.length);for(var f=t+p*n,m=n>0?0:d.length-1,g=n>0?d.length:-1;m!=g;m+=n){var v=a.indexOf(d[m]);if(!(v<0||i.resolveInner(f+m,1).type!=r))if(v%2==0==n>0)h++;else{if(1==h)return{start:c,end:{from:f+m,to:f+m+1},matched:v>>1==l>>1};h--}}n>0&&(p+=d.length)}return u.done?{start:c,matched:!1}:null}(e,t,n,a,s.type,r,o)}function Op(e,t,n,i,r,o){var a=i.parent,s={from:i.from,to:i.to},l=0,c=null==a?void 0:a.cursor();if(c&&(n<0?c.childBefore(i.from):c.childAfter(i.to)))do{if(n<0?c.to<=i.from:c.from>=i.to){if(0==l&&r.indexOf(c.type.name)>-1&&c.from=this.string.length},e.prototype.sol=function(){return 0==this.pos},e.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},e.prototype.next=function(){if(this.post},e.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},e.prototype.skipToEnd=function(){this.pos=this.string.length},e.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},e.prototype.backUp=function(e){this.pos-=e},e.prototype.column=function(){return this.lastColumnPos0?null:(r&&!1!==t&&(this.pos+=r[0].length),r)},e.prototype.current=function(){return this.string.slice(this.start,this.pos)},e}();function Rp(e){if("object"!=typeof e)return e;var t={};for(var n in e){var i=e[n];t[n]=i instanceof Array?i.slice():i}return t}var Hp=function(e){function t(t){var n,i,r=this,o=oh(t.languageData),a={name:(i=t).name||"",token:i.token,blankLine:i.blankLine||function(){return null},startState:i.startState||function(){return!0},copyState:i.copyState||Rp,indent:i.indent||function(){return null},languageData:i.languageData||{}},s=new(function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return f(t,e),t.prototype.createParse=function(e,t,i){return new qp(n,e,t,i)},t}(fu));return(r=e.call(this,o,s,[Sh.of((function(e,t){return r.getIndent(e,t)}))],t.name)||this).topNode=function(e){var t=jc.define({id:jp.length,name:"Document",props:[rh.add((function(){return e}))]});return jp.push(t),t}(o),n=r,r.streamParser=a,r.stateAfter=new qc({perNode:!0}),r}return f(t,e),t.define=function(e){return new t(e)},t.prototype.getIndent=function(e,t){for(var n=ch(e.state),i=n.resolve(t);i&&i.type!=this.topNode;)i=i.parent;if(!i)return null;var r,o,a=Vp(this,n,0,i.from,t);if(a?(o=a.state,r=a.pos+1):(o=this.streamParser.startState(e.unit),r=0),t-r>1e4)return null;for(var s=function(){var n=e.state.doc.lineAt(r),i=Math.min(t,n.to);if(n.length)for(var a=new Np(n.text,e.state.tabSize,e.unit,(function(t){return t+n.number>e.state.doc.lines?"":e.state.doc.line(t+n.number).text}));a.pos=i&&n+t.length<=r&&t.prop(e.stateAfter);if(o)return{state:e.streamParser.copyState(o),pos:n+t.length};for(var a=t.children.length-1;a>=0;a--){var s=t.children[a],l=n+t.positions[a],c=s instanceof Xc&&l=t.length)return t;r||t.type!=e.topNode||(r=!0);for(var o=t.children.length-1;o>=0;o--){var a=t.positions[o],s=t.children[o],l=void 0;if(an&&Vp(e,a.tree,0-a.offset,n,l),u=void 0;if(c&&(u=zp(e,a.tree,n+a.offset,c.pos+a.offset,!1)))return{state:c.state,tree:u}}return{state:e.streamParser.startState(i?Th(i):4),tree:Xc.empty}}(e,n,o,null==r?void 0:r.state),s=a.state,l=a.tree;this.state=s,this.parsedPos=this.chunkStart=o+l.length;for(var c=0;c=t?this.finish():e&&this.parsedPos>=i?(e.skipUntilInView(this.parsedPos-5e3,t),this.finish()):null},e.prototype.stopAt=function(e){this.stoppedAt=e},e.prototype.lineAfter=function(e){var t=this.input.chunk(e);if(this.input.lineChunks)"\n"==t&&(t="");else{var n=t.indexOf("\n");n>-1&&(t=t.slice(0,n))}return e+t.length<=this.to?t:t.slice(0,this.to-e)},e.prototype.nextLine=function(){for(var e=this.parsedPos,t=this.lineAfter(e),n=e+t.length,i=this.rangeIndex;;){var r=this.ranges[i].to;if(r>=n)break;if(t=t.slice(0,r-(n-t.length)),++i==this.ranges.length)break;var o=this.ranges[i].from,a=this.lineAfter(o);t+=a,n=o+a.length}return{line:t,end:n}},e.prototype.skipGapsTo=function(e,t,n){for(;;){var i=this.ranges[this.rangeIndex].to,r=e+t;if(n>0?i>r:i>=r)break;t+=this.ranges[++this.rangeIndex].from-i}return t},e.prototype.moveRangeIndex=function(){for(;this.ranges[this.rangeIndex].to1){t+=r=this.skipGapsTo(t,r,1);var o=this.chunk.length;n+=r=this.skipGapsTo(n,r,-1),i+=this.chunk.length-o}return this.chunk.push(e,t,n,i),r},e.prototype.parseLine=function(e){var t=this,n=this.nextLine(),i=n.line,r=n.end,o=0,a=this.lang.streamParser,s=this.tokenCache,l=new Np(i,e?e.state.tabSize:4,e?Th(e.state):2,(function(e){for(var n=t.parsedPos,i=0;i0)for(var o=0,h=n;o0&&(o=this.emitToken(Gp(Array.from(u).sort().join(" "),!0),this.parsedPos,this.parsedPos+i.length,4*(c.length+1),o)),this.parsedPos=r,this.moveRangeIndex(),this.parsedPost.start)return r}throw new Error("Stream parser failed to advance stream.")}var _p=Object.create(null),jp=[jc.none],Wp=new Gc(jp);function Gp(e,t){return e?_p[e]||(_p[e]=function(e,t){var n,i,r=e.replace(/ /g,"_"),o=jc.define({id:jp.length,name:r,props:[t?Yp.add((n={},n[r]=e,n)):Kp.add((i={},i[r]=e,i))]});return jp.push(o),o.id}(e,t)):0}var Kp=new qc,Yp=new qc,Xp=function(){function e(e){this.lineCache=Object.create(null),this.tokenCache=Object.create(null),this.tree=ch(e.state),this.decorations=this.buildDeco(e)}return e.prototype.update=function(e){var t=ch(e.state);t.length0,l=new gi,c=0,u=0,h=e.visibleRanges;up)return;l.add(p,p,h),c=p}var d=i.prop(Kp);if(d){if(c>r)return;if(!(h=t.tokenCache[d])){var f=d.split(" "),m={class:f.map((function(e){return"cm-"+e})).join(" ")};s&&f.some((function(e){return a.has(e)}))&&(m.attributes={spellcheck:"false"}),h=t.tokenCache[d]=jr.mark(m)}l.add(r,o,h),c=o}}})}return l.finish()},e}(),$p=On.lowest(vo.define((function(e){return new Xp(e)}),{decorations:function(e){return e.decorations}})),Zp=Cn.define({}),Qp=function(){function e(e,t,n){this.state=e,this.pos=t,this.explicit=n,this.abortListeners=[]}return e.prototype.tokenBefore=function(e){for(var t=ch(this.state).resolveInner(this.pos,-1);t&&e.indexOf(t.name)<0;)t=t.parent;return t?{from:t.from,to:this.pos,text:this.state.sliceDoc(t.from,this.pos),type:t.type}:null},e.prototype.matchBefore=function(e){var t=this.state.doc.lineAt(this.pos),n=Math.max(t.from,this.pos-250),i=t.text.slice(n-t.from,this.pos-t.from),r=i.search(od(e,!1));return r<0?null:{from:n+r,to:this.pos,text:i.slice(r)}},Object.defineProperty(e.prototype,"aborted",{get:function(){return null==this.abortListeners},enumerable:!1,configurable:!0}),e.prototype.addEventListener=function(e,t){"abort"==e&&this.abortListeners&&this.abortListeners.push(t)},e}();function Jp(e){var t=Object.keys(e).join(""),n=/\w/.test(t);return n&&(t=t.replace(/\w/g,"")),"[".concat(n?"\\w":"").concat(t.replace(/[^\w\s]/g,"\\$&"),"]")}function ed(e){var t=e.map((function(e){return"string"==typeof e?{label:e}:e})),n=t.every((function(e){return/^\w+$/.test(e.label)}))?[/\w*$/,/\w+$/]:function(e){for(var t=Object.create(null),n=Object.create(null),i=0,r=e;i-1)return t(n);return null}}function nd(e,t){return function(n){for(var i=ch(n.state).resolveInner(n.pos,-1);i;i=i.parent)if(e.indexOf(i.name)>-1)return null;return t(n)}}var id=function(e,t,n){this.completion=e,this.source=t,this.match=n};function rd(e){return e.selection.main.head}function od(e,t){var n,i=e.source,r=t&&"^"!=i[0],o="$"!=i[i.length-1];return r||o?new RegExp("".concat(r?"^":"","(?:").concat(i,")").concat(o?"$":""),null!==(n=e.flags)&&void 0!==n?n:e.ignoreCase?"i":""):e}var ad=Yn.define();function sd(e,t,n,i){return Object.assign(Object.assign({},e.changeByRange((function(r){if(r==e.selection.main)return{changes:{from:n,to:i,insert:t},range:bn.cursor(n+t.length)};var o=i-n;return!r.empty||o&&e.sliceDoc(r.from-o,r.from)!=e.sliceDoc(n,i)?{range:r}:{changes:{from:r.from-o,to:r.from,insert:t},range:bn.cursor(r.from-o+t.length)}}))),{userEvent:"input.complete"})}function ld(e,t){var n=t.completion.apply||t.completion.label,i=t.source;"string"==typeof n?e.dispatch(Object.assign(Object.assign({},sd(e.state,n,i.from,i.to)),{annotations:ad.of(t.completion)})):n(e,t.completion,i.from,i.to)}var cd=new WeakMap;function ud(e){if(!Array.isArray(e))return e;var t=cd.get(e);return t||cd.set(e,t=ed(e)),t}var hd=function(){function e(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[];for(var t=0;t=48&&C<=57||C>=97&&C<=122?2:C>=65&&C<=90?1:0:(x=an(C))!=x.toLowerCase()?1:x!=x.toUpperCase()?2:0;(!h||1==E&&b||0==k&&0!=E)&&(n[f]==C||i[f]==C&&(m=!0)?a[f++]=h:a.length&&(w=!1)),k=E,h+=sn(C)}return f==c&&0==a[0]&&w?this.result((m?-200:0)-100,a,e):g==c&&0==v?[-200-e.length,0,y]:l>-1?[-700-e.length,l,l+this.pattern.length]:g==c?[-900-e.length,v,y]:f==c?this.result((m?-200:0)-100-700+(w?0:-1100),a,e):2==n.length?null:this.result((r[0]?-700:0)-200-1100,r,e)},e.prototype.result=function(e,t,n){for(var i=[e-n.length],r=1,o=0,a=t;o1&&i[r-1]==s?i[r-1]=l:(i[r++]=s,i[r++]=l)}return i},e}(),pd=Cn.define({combine:function(e){return ui(e,{activateOnTyping:!0,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,optionClass:function(){return""},aboveCursor:!1,icons:!0,addToOptions:[],compareCompletions:function(e,t){return e.label.localeCompare(t.label)},interactionDelay:75},{defaultKeymap:function(e,t){return e&&t},closeOnBlur:function(e,t){return e&&t},icons:function(e,t){return e&&t},optionClass:function(e,t){return function(n){return function(e,t){return e?t?e+" "+t:e:t}(e(n),t(n))}},addToOptions:function(e,t){return e.concat(t)}})}});function dd(e,t,n){if(e<=n)return{from:0,to:e};if(t<0&&(t=0),t<=e>>1){var i=Math.floor(t/n);return{from:i*n,to:(i+1)*n}}var r=Math.floor((e-t)/n);return{from:e-(r+1)*n,to:e-r*n}}var fd=function(){function e(e,t){var n=this;this.view=e,this.stateField=t,this.info=null,this.placeInfo={read:function(){return n.measureInfo()},write:function(e){return n.positionInfo(e)},key:this},this.space=null;var i=e.state.field(t),r=i.open,o=r.options,a=r.selected,s=e.state.facet(pd);this.optionContent=function(e){var t=e.addToOptions.slice();return e.icons&&t.push({render:function(e){var t,n=document.createElement("div");return n.classList.add("cm-completionIcon"),e.type&&(t=n.classList).add.apply(t,e.type.split(/\s+/g).map((function(e){return"cm-completionIcon-"+e}))),n.setAttribute("aria-hidden","true"),n},position:20}),t.push({render:function(e,t,n){var i=document.createElement("span");i.className="cm-completionLabel";for(var r=e.label,o=0,a=1;ao&&i.appendChild(document.createTextNode(r.slice(o,s)));var c=i.appendChild(document.createElement("span"));c.appendChild(document.createTextNode(r.slice(s,l))),c.className="cm-completionMatchedText",o=l}return o-1&&n.selected=this.range.to)&&(this.range=dd(n.options.length,n.selected,this.view.state.facet(pd).maxRenderedOptions),this.list.remove(),this.list=this.dom.appendChild(this.createListBox(n.options,t.id,this.range)),this.list.addEventListener("scroll",(function(){e.info&&e.view.requestMeasure(e.placeInfo)}))),this.updateSelectedOption(n.selected)){this.info&&(this.info.remove(),this.info=null);var i=n.options[n.selected].completion,r=i.info;if(!r)return;var o="string"==typeof r?document.createTextNode(r):r(i);if(!o)return;"then"in o?o.then((function(n){n&&e.view.state.field(e.stateField,!1)==t&&e.addInfoPane(n)})).catch((function(t){return po(e.view.state,t,"completion info")})):this.addInfoPane(o)}},e.prototype.addInfoPane=function(e){var t=this.info=document.createElement("div");t.className="cm-tooltip cm-completionInfo",t.appendChild(e),this.dom.appendChild(t),this.view.requestMeasure(this.placeInfo)},e.prototype.updateSelectedOption=function(e){for(var t=null,n=this.list.firstChild,i=this.range.from;n;n=n.nextSibling,i++)i==e?n.hasAttribute("aria-selected")||(n.setAttribute("aria-selected","true"),t=n):n.hasAttribute("aria-selected")&&n.removeAttribute("aria-selected");return t&&function(e,t){var n=e.getBoundingClientRect(),i=t.getBoundingClientRect();i.topn.bottom&&(e.scrollTop+=i.bottom-n.bottom)}(this.list,t),t},e.prototype.measureInfo=function(){var e=this.dom.querySelector("[aria-selected]");if(!e||!this.info)return null;var t=this.dom.getBoundingClientRect(),n=this.info.getBoundingClientRect(),i=e.getBoundingClientRect(),r=this.space;if(!r){var o=this.dom.ownerDocument.defaultView||window;r={left:0,top:0,right:o.innerWidth,bottom:o.innerHeight}}if(i.top>Math.min(r.bottom,t.bottom)-10||i.bottom=n.height||f>t.top?u=i.bottom-t.top+"px":h=t.bottom-i.top+"px"}return{top:u,bottom:h,maxWidth:a,class:c?s?"left-narrow":"right-narrow":l?"left":"right"}},e.prototype.positionInfo=function(e){this.info&&(e?(this.info.style.top=e.top,this.info.style.bottom=e.bottom,this.info.style.maxWidth=e.maxWidth,this.info.className="cm-tooltip cm-completionInfo cm-completionInfo-"+e.class):this.info.style.top="-1e6px")},e.prototype.createListBox=function(e,t,n){var i=document.createElement("ul");i.id=t,i.setAttribute("role","listbox"),i.setAttribute("aria-expanded","true"),i.setAttribute("aria-label",this.view.state.phrase("Completions"));for(var r=n.from;r=this.options.length?this:new e(this.options,bd(n,t),this.tooltip,this.timestamp,t,this.disabled)},e.build=function(t,n,i,r,o){var a=function(e,t){for(var n=[],i=0,r=0,o=e;rmd(b)&&(y[y.length-1]=x),b=x.completion}return y}(t,n);if(!a.length)return r&&t.some((function(e){return 1==e.state}))?new e(r.options,r.attrs,r.tooltip,r.timestamp,r.selected,!0):null;var s,l=n.facet(pd).selectOnOpen?0:-1;if(r&&r.selected!=l&&-1!=r.selected)for(var c=r.options[r.selected].completion,u=0;u-1&&(n["aria-activedescendant"]=e+"-"+t),n}var wd=[];function kd(e){return e.isUserEvent("input.type")?"input":e.isUserEvent("delete.backward")?"delete":null}var Cd=function(){function e(e,t,n){void 0===n&&(n=-1),this.source=e,this.state=t,this.explicitPos=n}return e.prototype.hasResult=function(){return!1},e.prototype.update=function(t,n){var i=kd(t),r=this;i?r=r.handleUserEvent(t,i,n):t.docChanged?r=r.handleChange(t):t.selection&&0!=r.state&&(r=new e(r.source,0));for(var o=0,a=t.effects;oa||"delete"==n&&rd(e.startState)==this.from)return new Cd(this.source,"input"==n&&i.activateOnTyping?1:0);var l,c=this.explicitPos<0?-1:e.changes.mapPos(this.explicitPos);return function(e,t,n,i){if(!e)return!1;var r=t.sliceDoc(n,i);return"function"==typeof e?e(r,n,i,t):od(e,!0).test(r)}(this.result.validFor,e.state,o,a)?new t(this.source,c,this.result,o,a):this.result.update&&(l=this.result.update(this.result,o,a,new Qp(e.state,s,c>=0)))?new t(this.source,c,l,l.from,null!==(r=l.to)&&void 0!==r?r:rd(e.state)):new Cd(this.source,1,c)},t.prototype.handleChange=function(e){return e.changes.touchesRange(this.from,this.to)?new Cd(this.source,0):this.map(e.changes)},t.prototype.map=function(e){return e.empty?this:new t(this.source,this.explicitPos<0?-1:e.mapPos(this.explicitPos),this.result,e.mapPos(this.from),e.mapPos(this.to,1))},t}(Cd);var Ed=Zn.define(),Sd=Zn.define(),Md=Zn.define({map:function(e,t){return e.map((function(e){return e.map(t)}))}}),Td=Zn.define(),Dd=Dn.define({create:function(){return vd.start()},update:function(e,t){return e.update(t)},provide:function(e){return[Ul.from(e,(function(e){return e.tooltip})),Ts.contentAttributes.from(e,(function(e){return e.attrs}))]}});function Ad(e,t){return void 0===t&&(t="option"),function(n){var i=n.state.field(Dd,!1);if(!i||!i.open||i.open.disabled||Date.now()-i.open.timestamp-1?i.open.selected+o*(e?1:-1):e?0:a-1;return s<0?s="page"==t?0:a-1:s>=a&&(s="page"==t?a-1:0),n.dispatch({effects:Td.of(s)}),!0}}var Ld=function(e){var t=e.state.field(Dd,!1);return!(e.state.readOnly||!t||!t.open||t.open.selected<0||Date.now()-t.open.timestamp50&&Date.now()-a.time>1e3){for(var s=0,l=a.context.abortListeners;s-1&&clearTimeout(this.debounceUpdate),this.debounceUpdate=i.active.some((function(e){return 1==e.state&&!n.running.some((function(t){return t.active.source==e.source}))}))?setTimeout((function(){return n.startUpdate()}),50):-1,0!=this.composing)for(var u=0,h=e.transactions;u-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;for(var t,n=[],i=this.view.state.facet(pd),r=function(r){var a=o.running[r];if(void 0===a.done)return t=r,"continue";if(o.running.splice(r--,1),a.done){for(var s=new xd(a.active.source,a.active.explicitPos,a.done,a.done.from,null!==(e=a.done.to)&&void 0!==e?e:rd(a.updates.length?a.updates[0].startState:o.view.state)),l=0,c=a.updates;l ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer",padding:"1px 3px",lineHeight:1.2}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"···"',opacity:.5,display:"block",textAlign:"center"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"".concat(400,"px"),boxSizing:"border-box"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"".concat(30,"px")},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"".concat(30,"px")},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'ƒ'"}},".cm-completionIcon-class":{"&:after":{content:"'○'"}},".cm-completionIcon-interface":{"&:after":{content:"'◌'"}},".cm-completionIcon-variable":{"&:after":{content:"'𝑥'"}},".cm-completionIcon-constant":{"&:after":{content:"'𝐶'"}},".cm-completionIcon-type":{"&:after":{content:"'𝑡'"}},".cm-completionIcon-enum":{"&:after":{content:"'∪'"}},".cm-completionIcon-property":{"&:after":{content:"'□'"}},".cm-completionIcon-keyword":{"&:after":{content:"'🔑︎'"}},".cm-completionIcon-namespace":{"&:after":{content:"'▢'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}}),Nd=function(e,t,n,i){this.field=e,this.line=t,this.from=n,this.to=i},Rd=function(){function e(e,t,n){this.field=e,this.from=t,this.to=n}return e.prototype.map=function(t){var n=t.mapPos(this.from,-1,cn.TrackDel),i=t.mapPos(this.to,1,cn.TrackDel);return null==n||null==i?null:new e(this.field,n,i)},e}(),Hd=function(){function e(e,t){this.lines=e,this.fieldPositions=t}return e.prototype.instantiate=function(e,t){for(var n=[],i=[t],r=e.doc.lineAt(t),o=/^\s*/.exec(r.text)[0],a=0,s=this.lines;a=h&&y.field++}}o.push(new Nd(h,r.length,n.index,n.index+u.length)),l=l.slice(0,n.index)+u+l.slice(n.index+n[0].length)}for(var m=void 0;m=/\\([{}])/.exec(l);){l=l.slice(0,m.index)+m[1]+l.slice(m.index+m[0].length);for(var g=0,v=o;gm.index&&(y.from--,y.to--)}}r.push(l)}return new e(r,o)},e}(),Vd=jr.widget({widget:new(function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return f(t,e),t.prototype.toDOM=function(){var e=document.createElement("span");return e.className="cm-snippetFieldPosition",e},t.prototype.ignoreEvent=function(){return!1},t}(Ur))}),zd=jr.mark({class:"cm-snippetField"}),qd=function(){function e(e,t){this.ranges=e,this.active=t,this.deco=jr.set(e.map((function(e){return(e.from==e.to?Vd:zd).range(e.from,e.to)})))}return e.prototype.map=function(t){for(var n=[],i=0,r=this.ranges;i=e.to}))}))},e}(),Ud=Zn.define({map:function(e,t){return e&&e.map(t)}}),_d=Zn.define(),jd=Dn.define({create:function(){return null},update:function(e,t){for(var n=0,i=t.effects;n1){var c=new qd(s,0),u=l.effects=[Ud.of(c)];void 0===e.state.field(jd,!1)&&u.push(Zn.appendConfig.of([jd,Jd,tf,Bd]))}e.dispatch(e.state.update(l))}}function Kd(e){return function(t){var n=t.state,i=t.dispatch,r=n.field(jd,!1);if(!r||e<0&&0==r.active)return!1;var o=r.active+e,a=e>0&&!r.ranges.some((function(t){return t.field==o+e}));return i(n.update({selection:Wd(r.ranges,o),effects:Ud.of(a?null:new qd(r.ranges,o))})),!0}}var Yd=function(e){var t=e.state,n=e.dispatch;return!!t.field(jd,!1)&&(n(t.update({effects:Ud.of(null)})),!0)},Xd=Kd(1),$d=Kd(-1),Zd=[{key:"Tab",run:Xd,shift:$d},{key:"Escape",run:Yd}],Qd=Cn.define({combine:function(e){return e.length?e[0]:Zd}}),Jd=On.highest(Bs.compute([Qd],(function(e){return e.facet(Qd)})));function ef(e,t){return Object.assign(Object.assign({},t),{apply:Gd(e)})}var tf=Ts.domEventHandlers({mousedown:function(e,t){var n,i=t.state.field(jd,!1);if(!i||null==(n=t.posAtCoords({x:e.clientX,y:e.clientY})))return!1;var r=i.ranges.find((function(e){return e.from<=n&&e.to>=n}));return!(!r||r.field==i.active)&&(t.dispatch({selection:Wd(i.ranges,r.field),effects:Ud.of(i.ranges.some((function(e){return e.field>r.field}))?new qd(i.ranges,r.field):null)}),!0)}});function nf(e,t){return new RegExp(t(e.source),e.unicode?"u":"")}var rf=Object.create(null);function of(e,t,n,i,r){for(var o=e.iterLines(),a=0;!o.next().done;){var s=o.value,l=void 0;for(t.lastIndex=0;l=t.exec(s);)if(!i[l[0]]&&a+l.index!=r&&(n.push({type:"text",label:l[0]}),i[l[0]]=!0,n.length>=2e3))return;a+=s.length+1}}function af(e,t,n,i,r){var o=e.length>=1e3,a=o&&t.get(e);if(a)return a;var s=[],l=Object.create(null);if(e.children)for(var c=0,u=0,h=e.children;u=1e3)for(var d=0,f=af(p,t,n,i-c,r-c);d",stringPrefixes:[]},cf=Zn.define({map:function(e,t){var n=t.mapPos(e,-1,cn.TrackAfter);return null==n?void 0:n}}),uf=Zn.define({map:function(e,t){return t.mapPos(e)}}),hf=new(function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return f(t,e),t}(hi));hf.startSide=1,hf.endSide=-1;var pf=Dn.define({create:function(){return mi.empty},update:function(e,t){if(t.selection){var n=t.state.doc.lineAt(t.selection.main.head).from,i=t.startState.doc.lineAt(t.startState.selection.main.head).from;n!=t.changes.mapPos(i,-1)&&(e=mi.empty)}e=e.map(t.changes);for(var r=function(t){t.is(cf)?e=e.update({add:[hf.range(t.value,t.value+1)]}):t.is(uf)&&(e=e.update({filter:function(e){return e!=t.value}}))},o=0,a=t.effects;o2||2==i.length&&1==sn(on(i,0))||t!=r.from||n!=r.to)return!1;var o=kf(e.state,i);return!!o&&(e.dispatch(o),!0)})),bf=function(e){var t=e.state,n=e.dispatch;if(t.readOnly)return!1;var i=gf(t,t.selection.main.head).brackets||lf.brackets,r=null,o=t.changeByRange((function(e){if(e.empty)for(var n=function(e,t){var n=e.sliceString(t-2,t);return sn(on(n,0))==n.length?n:n.slice(1)}(t.doc,e.head),o=0,a=i;o-1,n):Ef(e,a,s,n.before||lf.before);if(t==s&&Cf(e,e.selection.main.from))return Sf(e,a,s)}return null}function Cf(e,t){var n=!1;return e.field(pf).between(0,e.doc.length,(function(e){e==t&&(n=!0)})),n}function xf(e,t){var n=e.sliceString(t,t+2);return n.slice(0,sn(on(n,0)))}function Ef(e,t,n,i){var r=null,o=e.changeByRange((function(o){if(!o.empty)return{changes:[{insert:t,from:o.from},{insert:n,from:o.to}],effects:cf.of(o.to+t.length),range:bn.range(o.anchor+t.length,o.head+t.length)};var a=xf(e.doc,o.head);return!a||/\s/.test(a)||i.indexOf(a)>-1?{changes:{insert:t+n,from:o.head},effects:cf.of(o.head+t.length),range:bn.cursor(o.head+t.length)}:{range:r=o}}));return r?null:e.update(o,{scrollIntoView:!0,userEvent:"input.type"})}function Sf(e,t,n){var i=null,r=e.selection.ranges.map((function(t){return t.empty&&xf(e.doc,t.head)==n?bn.cursor(t.head+n.length):i=t}));return i?null:e.update({selection:bn.create(r,e.selection.mainIndex),scrollIntoView:!0,effects:e.selection.ranges.map((function(e){var t=e.from;return uf.of(t)}))})}function Mf(e,t,n,i){var r=i.stringPrefixes||lf.stringPrefixes,o=null,a=e.changeByRange((function(i){if(!i.empty)return{changes:[{insert:t,from:i.from},{insert:t,from:i.to}],effects:cf.of(i.to+t.length),range:bn.range(i.anchor+t.length,i.head+t.length)};var a,s=i.head,l=xf(e.doc,s);if(l==t){if(Tf(e,s))return{changes:{insert:t+t,from:s},effects:cf.of(s+t.length),range:bn.cursor(s+t.length)};if(Cf(e,s)){var c=n&&e.sliceDoc(s,s+3*t.length)==t+t+t;return{range:bn.cursor(s+t.length*(c?3:1)),effects:uf.of(s)}}}else{if(n&&e.sliceDoc(s-2*t.length,s)==t+t&&(a=Df(e,s-2*t.length,r))>-1&&Tf(e,a))return{changes:{insert:t+t+t+t,from:s},effects:cf.of(s+t.length),range:bn.cursor(s+t.length)};if(e.charCategorizer(s)(l)!=ai.Word&&Df(e,s,r)>-1&&!function(e,t,n,i){for(var r=ch(e).resolveInner(t,-1),o=i.reduce((function(e,t){return Math.max(e,t.length)}),0),a=0;a<5;a++){var s=e.sliceDoc(r.from,Math.min(r.to,r.from+n.length+o)),l=s.indexOf(n);if(!l||l>-1&&i.indexOf(s.slice(0,l))>-1){for(var c=r.firstChild;c&&c.from==r.from&&c.to-c.from>n.length+l;){if(e.sliceDoc(c.to-n.length,c.to)==n)return!1;c=c.firstChild}return!0}var u=r.to==t&&r.parent;if(!u)break;r=u}return!1}(e,s,t,r))return{changes:{insert:t+t,from:s},effects:cf.of(s+t.length),range:bn.cursor(s+t.length)}}return{range:o=i}}));return o?null:e.update(a,{scrollIntoView:!0,userEvent:"input.type"})}function Tf(e,t){var n=ch(e).resolveInner(t+1);return n.parent&&n.from==t}function Df(e,t,n){var i=e.charCategorizer(t);if(i(e.sliceDoc(t-1,t))!=ai.Word)return t;for(var r=0,o=n;r=0?n.options[n.selected].completion:null}function Nf(e){var t,n=null===(t=e.field(Dd,!1))||void 0===t?void 0:t.open;return n&&!n.disabled&&n.selected>=0?n.selected:null}function Rf(e){return Td.of(e)}var Hf=function(e,t,n,i){this.origin=e,this.changes=t,this.effects=n,this.clientID=i},Vf=function(e,t){this.version=e,this.unconfirmed=t},zf=Cn.define({combine:function(e){var t=ui(e,{startVersion:0,clientID:null,sharedEffects:function(){return[]}});return null==t.clientID&&(t.clientID=e.length&&e[0].generatedID||""),t}}),qf=Yn.define(),Uf=Dn.define({create:function(e){return new Vf(e.facet(zf).startVersion,[])},update:function(e,t){var n=t.annotation(qf);if(n)return n;var i=t.startState.facet(zf),r=i.sharedEffects,o=i.clientID,a=r(t);return a.length||!t.changes.empty?new Vf(e.version,e.unconfirmed.concat(new Hf(t,t.changes,a,o))):e}});function _f(e){return void 0===e&&(e={}),[Uf,zf.of(Object.assign({generatedID:Math.floor(1e9*Math.random()).toString(36)},e))]}function jf(e,t){var n=e.field(Uf),i=n.version,r=n.unconfirmed,o=e.facet(zf).clientID;i+=t.length;for(var a=0;a=0&&t[s].to>o.from?t[s].to=a.to:t.push({from:o.from,to:a.to})}return t}(t))}),0);function im(e,t){void 0===t&&(t=e.selection.main.head);var n=e.languageDataAt("commentTokens",t);return n.length?n[0]:{}}function rm(e,t,n){void 0===n&&(n=t.selection.ranges);var i=n.map((function(e){return im(t,e.from).block}));if(!i.every((function(e){return e})))return null;var r=n.map((function(e,n){return function(e,t,n,i){var r,o,a=t.open,s=t.close,l=e.sliceDoc(n-50,n),c=e.sliceDoc(i,i+50),u=/\s*$/.exec(l)[0].length,h=/^\s*/.exec(c)[0].length,p=l.length-u;if(l.slice(p-a.length,p)==a&&c.slice(h,h+s.length)==s)return{open:{pos:n-u,margin:u&&1},close:{pos:i+h,margin:h&&1}};i-n<=100?r=o=e.sliceDoc(n,i):(r=e.sliceDoc(n,n+50),o=e.sliceDoc(i-50,i));var d=/^\s*/.exec(r)[0].length,f=/\s*$/.exec(o)[0].length,m=o.length-f-s.length;return r.slice(d,d+a.length)==a&&o.slice(m,m+s.length)==s?{open:{pos:n+d+a.length,margin:/\s/.test(r.charAt(d+a.length))?1:0},close:{pos:i-f-s.length,margin:/\s/.test(o.charAt(m-1))?1:0}}:null}(t,i[n],e.from,e.to)}));if(2!=e&&!r.every((function(e){return e})))return{changes:t.changes(n.map((function(e,t){return r[t]?[]:[{from:e.from,insert:i[t].open+" "},{from:e.to,insert:" "+i[t].close}]})))};if(1!=e&&r.some((function(e){return e}))){for(var o=[],a=0,s=void 0;ar&&(l==c||c>w.from)){if(r=w.from,!(k=im(t,p).line))continue;var d=(C=/^\s*/.exec(w.text)[0].length)==w.length,f=w.text.slice(C,C+k.length)==k?C:-1;C=0}))){g=[];for(var E=0,S=i;E=0){c=(l=w.from+f)+k.length;" "==w.text[c-w.from]&&c++,g.push({from:l,to:c})}}return{changes:g}}return null}var am=Yn.define(),sm=Yn.define(),lm=Cn.define(),cm=Cn.define({combine:function(e){return ui(e,{minDepth:100,newGroupDelay:500},{minDepth:Math.max,newGroupDelay:Math.min})}});var um=Dn.define({create:function(){return Lm.empty},update:function(e,t){var n,i,r=t.state.facet(cm),o=t.annotation(am);if(o){var a=t.docChanged?bn.single((n=t.changes,i=0,n.iterChangedRanges((function(e,t){return i=t})),i)):void 0,s=km.fromTransaction(t,a),l=o.side,c=0==l?e.undone:e.done;return c=s?Cm(c,c.length,r.minDepth,s):Sm(c,t.startState.selection),new Lm(0==l?o.rest:c,0==l?c:o.rest)}var u=t.annotation(sm);if("full"!=u&&"before"!=u||(e=e.isolate()),!1===t.annotation(Qn.addToHistory))return t.changes.empty?e:e.addMapping(t.changes.desc);var h=km.fromTransaction(t),p=t.annotation(Qn.time),d=t.annotation(Qn.userEvent);return h?e=e.addChanges(h,p,d,r.newGroupDelay,r.minDepth):t.selection&&(e=e.addSelection(t.startState.selection,p,d,r.newGroupDelay)),"full"!=u&&"after"!=u||(e=e.isolate()),e},toJSON:function(e){return{done:e.done.map((function(e){return e.toJSON()})),undone:e.undone.map((function(e){return e.toJSON()}))}},fromJSON:function(e){return new Lm(e.done.map(km.fromJSON),e.undone.map(km.fromJSON))}});function hm(e){return void 0===e&&(e={}),[um,cm.of(e),Ts.domEventHandlers({beforeinput:function(e,t){var n="historyUndo"==e.inputType?fm:"historyRedo"==e.inputType?mm:null;return!!n&&(e.preventDefault(),n(t))}})]}var pm=um;function dm(e,t){return function(n){var i=n.state,r=n.dispatch;if(!t&&i.readOnly)return!1;var o=i.field(um,!1);if(!o)return!1;var a=o.pop(e,i,t);return!!a&&(r(a),!0)}}var fm=dm(0,!1),mm=dm(1,!1),gm=dm(0,!0),vm=dm(1,!0);function ym(e){return function(t){var n=t.field(um,!1);if(!n)return 0;var i=0==e?n.done:n.undone;return i.length-(i.length&&!i[0].changes?1:0)}}var bm=ym(0),wm=ym(1),km=function(){function e(e,t,n,i,r){this.changes=e,this.effects=t,this.mapped=n,this.startSelection=i,this.selectionsAfter=r}return e.prototype.setSelAfter=function(t){return new e(this.changes,this.effects,this.mapped,this.startSelection,t)},e.prototype.toJSON=function(){var e,t,n;return{changes:null===(e=this.changes)||void 0===e?void 0:e.toJSON(),mapped:null===(t=this.mapped)||void 0===t?void 0:t.toJSON(),startSelection:null===(n=this.startSelection)||void 0===n?void 0:n.toJSON(),selectionsAfter:this.selectionsAfter.map((function(e){return e.toJSON()}))}},e.fromJSON=function(t){return new e(t.changes&&hn.fromJSON(t.changes),[],t.mapped&&un.fromJSON(t.mapped),t.startSelection&&bn.fromJSON(t.startSelection),t.selectionsAfter.map(bn.fromJSON))},e.fromTransaction=function(t,n){for(var i=Em,r=0,o=t.startState.facet(lm);rn+20?t-n-1:0,o=e.slice(r,t);return o.push(i),o}function xm(e,t){return e.length?t.length?e.concat(t):e:t}var Em=[];function Sm(e,t){if(e.length){var n=e[e.length-1],i=n.selectionsAfter.slice(Math.max(0,n.selectionsAfter.length-200));return i.length&&i[i.length-1].eq(t)?e:(i.push(t),Cm(e,e.length-1,1e9,n.setSelAfter(i)))}return[km.selection([t])]}function Mm(e){var t=e[e.length-1],n=e.slice();return n[e.length-1]=t.setSelAfter(t.selectionsAfter.slice(0,t.selectionsAfter.length-1)),n}function Tm(e,t){if(!e.length)return e;for(var n=e.length,i=Em;n;){var r=Dm(e[n-1],t,i);if(r.changes&&!r.changes.empty||r.effects.length){var o=e.slice(0,n);return o[n-1]=r,o}t=r.mapped,n--,i=r.selectionsAfter}return i.length?[km.selection(i)]:Em}function Dm(e,t,n){var i=xm(e.selectionsAfter.length?e.selectionsAfter.map((function(e){return e.map(t)})):Em,n);if(!e.changes)return km.selection(i);var r=e.changes.map(t),o=t.mapDesc(e.changes,!0),a=e.mapped?e.mapped.composeDesc(o):o;return new km(r,Zn.mapEffects(e.effects,t),a,e.startSelection.map(o),i)}var Am=/^(input\.type|delete)($|\.)/,Lm=function(){function e(e,t,n,i){void 0===n&&(n=0),void 0===i&&(i=void 0),this.done=e,this.undone=t,this.prevTime=n,this.prevUserEvent=i}return e.prototype.isolate=function(){return this.prevTime?new e(this.done,this.undone):this},e.prototype.addChanges=function(t,n,i,r,o){var a=this.done,s=a[a.length-1];return new e(a=s&&s.changes&&!s.changes.empty&&t.changes&&(!i||Am.test(i))&&(!s.selectionsAfter.length&&n-this.prevTime=s&&r<=l&&(i=!0)}})),i}(s.changes,t.changes)||"input.type.compose"==i)?Cm(a,a.length-1,o,new km(t.changes.compose(s.changes),xm(t.effects,s.effects),s.mapped,s.startSelection,Em)):Cm(a,a.length,o,t),Em,n,i)},e.prototype.addSelection=function(t,n,i,r){var o,a,s=this.done.length?this.done[this.done.length-1].selectionsAfter:Em;return s.length>0&&n-this.prevTime2||/[^\s,.;:]/.test(e.sliceDoc(t.from,t.to)))||t.firstChild}function Qm(e,t,n){for(var i=ch(e).resolveInner(t.head),r=n?qc.closedBy:qc.openedBy,o=t.head;;){var a=n?i.childAfter(o):i.childBefore(o);if(!a)break;Zm(e,a,r)?i=a:o=n?a.to:a.from}var s,l;return l=i.type.prop(r)&&(s=n?Fp(e,i.from,1):Fp(e,i.to,-1))&&s.matched?n?s.end.to:s.end.from:n?i.to:i.from,bn.cursor(l,n?-1:1)}var Jm=function(e){return Om(e,(function(t){return Qm(e.state,t,!Rm(e))}))},eg=function(e){return Om(e,(function(t){return Qm(e.state,t,Rm(e))}))};function tg(e,t){return Om(e,(function(n){if(!n.empty)return Bm(n,t);var i=e.moveVertically(n,t);return i.head!=n.head?i:e.moveToLineBoundary(n,t)}))}var ng=function(e){return tg(e,!1)},ig=function(e){return tg(e,!0)};function rg(e){return Math.max(e.defaultLineHeight,Math.min(e.dom.clientHeight,innerHeight)-5)}function og(e,t){var n=e.state,i=Im(n.selection,(function(n){return n.empty?e.moveVertically(n,t,rg(e)):Bm(n,t)}));if(i.eq(n.selection))return!1;var r,o=e.coordsAtPos(n.selection.main.head),a=e.scrollDOM.getBoundingClientRect();return o&&o.top>a.top&&o.bottom0&&Fp(e,t.head-1,1)||t.head=e.to||i.to>e.to&&i.from<=e.from)&&(null===(n=i.parent)||void 0===n?void 0:n.parent);)i=i.parent;return bn.range(i.to,i.from)}));return n(Fm(t,i)),!0},Jg=function(e){var t=e.state,n=e.dispatch,i=t.selection,r=null;return i.ranges.length>1?r=bn.create([i.main]):i.main.empty||(r=bn.create([bn.cursor(i.main.head)])),!!r&&(n(Fm(t,r)),!0)};function ev(e,t){if(e.state.readOnly)return!1;var n="delete.selection",i=e.state,r=i.changeByRange((function(i){var r=i.from,o=i.to;if(r==o){var a=t(r);ar&&(n="delete.forward",a=tv(e,a,!0)),r=Math.min(r,a),o=Math.max(o,a)}else r=tv(e,r,!1),o=tv(e,o,!0);return r==o?{range:i}:{changes:{from:r,to:o},range:bn.cursor(r)}}));return!r.changes.empty&&(e.dispatch(i.update(r,{scrollIntoView:!0,userEvent:n,effects:"delete.selection"==n?Ts.announce.of(i.phrase("Selection deleted")):void 0})),!0)}function tv(e,t,n){if(e instanceof Ts)for(var i=0,r=e.state.facet(Ts.atomicRanges).map((function(t){return t(e)}));it&&(t=n?i:e)}))}return t}var nv=function(e,t){return ev(e,(function(n){var i,r,o=e.state,a=o.doc.lineAt(n);if(!t&&n>a.from&&nn?n:Math.max(0,t-1)}))},uv=function(e){var t=e.state,n=e.dispatch;if(t.readOnly)return!1;for(var i=[],r=0,o="",a=t.doc.iter();;){if(a.next(),a.lineBreak||a.done){var s=o.search(/\s+$/);if(s>-1&&i.push({from:r-(o.length-s),to:r}),a.done)break;o=""}else o=a.value;r+=a.value.length}return!!i.length&&(n(t.update({changes:i,userEvent:"delete"})),!0)},hv=function(e){var t=e.state,n=e.dispatch;if(t.readOnly)return!1;var i=t.changeByRange((function(e){return{changes:{from:e.from,to:e.to,insert:zt.of(["",""])},range:bn.cursor(e.from)}}));return n(t.update(i,{scrollIntoView:!0,userEvent:"input"})),!0},pv=function(e){var t=e.state,n=e.dispatch;if(t.readOnly)return!1;var i=t.changeByRange((function(e){if(!e.empty||0==e.from||e.from==t.doc.length)return{range:e};var n=e.from,i=t.doc.lineAt(n),r=n==i.from?n-1:Jt(i.text,n-i.from,!1)+i.from,o=n==i.to?n+1:Jt(i.text,n-i.from,!0)+i.from;return{changes:{from:r,to:o,insert:t.doc.slice(n,o).append(t.doc.slice(r,n))},range:bn.cursor(o)}}));return!i.changes.empty&&(n(t.update(i,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function dv(e){for(var t=[],n=-1,i=0,r=e.selection.ranges;i=a.number){var l=t[t.length-1];l.to=s.to,l.ranges.push(o)}else t.push({from:a.from,to:s.to,ranges:[o]});n=s.number+1}return t}function fv(e,t,n){if(e.readOnly)return!1;for(var i=[],r=[],o=0,a=dv(e);o0?n--:i=t&&(n=r.type.prop(qc.closedBy))&&n.indexOf(o.name)>-1&&e.doc.lineAt(r.to).from==e.doc.lineAt(o.from).from?{from:r.to,to:o.from}:null}(n,i);e&&(i=r=(r<=o.to?o:n.doc.lineAt(r)).to);var s=new Ph(n,{simulateBreak:i,simulateDoubleBreak:!!a}),l=Ah(s,i);for(null==l&&(l=/^\s*/.exec(n.doc.lineAt(i).text)[0].length);ro.from&&in&&(i.empty||i.to>a.from)&&(t(a,r,i),n=a.number),o=a.to+1}var s=e.changes(r);return{changes:r,range:bn.range(s.mapPos(i.anchor,1),s.mapPos(i.head,1))}}))}var Mv=function(e){var t=e.state,n=e.dispatch;if(t.readOnly)return!1;var i=Object.create(null),r=new Ph(t,{overrideIndentation:function(e){var t=i[e];return null==t?-1:t}}),o=Sv(t,(function(e,n,o){var a=Ah(r,e.from);if(null!=a){/\S/.test(e.text)||(a=0);var s=/^\s*/.exec(e.text)[0],l=Dh(t,a);(s!=l||o.from0?1:0),(function(e,i,s){var l=s.spec;t>=e&&t<=i&&(e==i||(t>e||n>0)&&(t=65&&n.keyCode<=90&&t.selectedIndex>=0))return;for(var i=t.items[t.selectedIndex].diagnostic,r=ry(i.actions),o=0;or&&(e.items.splice(r,u-r),o=!0)),i&&l.diagnostic==i.diagnostic?l.dom.hasAttribute("aria-selected")||(l.dom.setAttribute("aria-selected","true"),a=l):l.dom.hasAttribute("aria-selected")&&l.dom.removeAttribute("aria-selected"),r++}));ri.bottom&&(e.list.scrollTop+=n.bottom-i.bottom)}})):this.selectedIndex<0&&this.list.removeAttribute("aria-activedescendant"),o&&this.sync()},e.prototype.sync=function(){var e=this.list.firstChild;function t(){var t=e;e=t.nextSibling,t.remove()}for(var n=0,i=this.items;n").concat(encodeURIComponent(e),"')")}function uy(e){return cy(''),'width="6" height="3"')}var hy=Ts.baseTheme({".cm-diagnostic":{padding:"3px 6px 3px 8px",marginLeft:"-1px",display:"block",whiteSpace:"pre-wrap"},".cm-diagnostic-error":{borderLeft:"5px solid #d11"},".cm-diagnostic-warning":{borderLeft:"5px solid orange"},".cm-diagnostic-info":{borderLeft:"5px solid #999"},".cm-diagnosticAction":{font:"inherit",border:"none",padding:"2px 4px",backgroundColor:"#444",color:"white",borderRadius:"3px",marginLeft:"8px"},".cm-diagnosticSource":{fontSize:"70%",opacity:.7},".cm-lintRange":{backgroundPosition:"left bottom",backgroundRepeat:"repeat-x",paddingBottom:"0.7px"},".cm-lintRange-error":{backgroundImage:uy("#d11")},".cm-lintRange-warning":{backgroundImage:uy("orange")},".cm-lintRange-info":{backgroundImage:uy("#999")},".cm-lintRange-active":{backgroundColor:"#ffdd9980"},".cm-tooltip-lint":{padding:0,margin:0},".cm-lintPoint":{position:"relative","&:after":{content:'""',position:"absolute",bottom:0,left:"-2px",borderLeft:"3px solid transparent",borderRight:"3px solid transparent",borderBottom:"4px solid #d11"}},".cm-lintPoint-warning":{"&:after":{borderBottomColor:"orange"}},".cm-lintPoint-info":{"&:after":{borderBottomColor:"#999"}},".cm-panel.cm-panel-lint":{position:"relative","& ul":{maxHeight:"100px",overflowY:"auto","& [aria-selected]":{backgroundColor:"#ddd","& u":{textDecoration:"underline"}},"&:focus [aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"},"& u":{textDecoration:"none"},padding:0,margin:0},"& [name=close]":{position:"absolute",top:"0",right:"2px",background:"inherit",border:"none",font:"inherit",padding:0,margin:0}}}),py=function(e){function t(t){var n=e.call(this)||this;return n.diagnostics=t,n.severity=t.reduce((function(e,t){var n=t.severity;return"error"==n||"warning"==n&&"info"==e?n:e}),"info"),n}return f(t,e),t.prototype.toDOM=function(e){var t=document.createElement("div");t.className="cm-lint-marker cm-lint-marker-"+this.severity;var n=this.diagnostics,i=e.state.facet(by).tooltipFilter;return i&&(n=i(n)),n.length&&(t.onmouseover=function(){return function(e,t,n){function i(){var i=e.elementAtHeight(t.getBoundingClientRect().top+5-e.documentTop);e.coordsAtPos(i.from)&&e.dispatch({effects:gy.of({pos:i.from,above:!1,create:function(){return{dom:Xv(e,n),getCoords:function(){return t.getBoundingClientRect()}}}})}),t.onmouseout=t.onmousemove=null,function(e,t){var n=function(i){var r=t.getBoundingClientRect();if(!(i.clientX>r.left-10&&i.clientXr.top-10&&i.clientY')},".cm-lint-marker-warning":{content:cy('')},".cm-lint-marker-error":{content:cy('')}}),by=Cn.define({combine:function(e){return ui(e,{hoverTime:300,markerFilter:null,tooltipFilter:null})}});function wy(e){return void 0===e&&(e={}),[by.of(e),my,fy,yy,vy]}function ky(e,t){var n=e.field(Wv,!1);if(n&&n.diagnostics.size)for(var i=mi.iter([n.diagnostics]);i.value;i.next())t(i.value.spec.diagnostic,i.from,i.to)}var Cy="function"==typeof String.prototype.normalize?function(e){return e.normalize("NFKD")}:function(e){return e},xy=function(){function e(e,t,n,i,r,o){void 0===n&&(n=0),void 0===i&&(i=e.length),this.test=o,this.value={from:0,to:0},this.done=!1,this.matches=[],this.buffer="",this.bufferPos=0,this.iter=e.iterRange(n,i),this.bufferStart=n,this.normalize=r?function(e){return r(Cy(e))}:Cy,this.query=this.normalize(t)}return e.prototype.peek=function(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return on(this.buffer,this.bufferPos)},e.prototype.next=function(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()},e.prototype.nextOverlapping=function(){for(;;){var e=this.peek();if(e<0)return this.done=!0,this;var t=an(e),n=this.bufferStart+this.bufferPos;this.bufferPos+=sn(e);for(var i=this.normalize(t),r=0,o=n;;r++){var a=i.charCodeAt(r),s=this.match(a,o);if(s)return this.value=s,this;if(r==i.length-1)break;o==n&&rthis.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())},e.prototype.nextLine=function(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine="":this.getLine(0)},e.prototype.next=function(){for(var e=this.matchPos-this.curLineStart;;){this.re.lastIndex=e;var t=this.matchPos<=this.to&&this.re.exec(this.curLine);if(t){var n=this.curLineStart+t.index,i=n+t[0].length;if(this.matchPos=Ly(this.text,i+(n==i?1:0)),n==this.curLineStart+this.curLine.length&&this.nextLine(),(nthis.value.to)&&(!this.test||this.test(n,i,t)))return this.value={from:n,to:i,match:t},this;e=this.matchPos-this.curLineStart}else{if(!(this.curLineStart+this.curLine.length=i||r.to<=n){var o=new e(n,t.sliceString(n,i));return Ty.set(t,o),o}if(r.from==n&&r.to==i)return r;var a=r.text,s=r.from;return s>n&&(a=t.sliceString(n,s)+a,s=n),r.to=this.to?this.to:this.text.lineAt(e).to},e.prototype.next=function(){for(;;){var e=this.re.lastIndex=this.matchPos-this.flat.from,t=this.re.exec(this.flat.text);if(t&&!t[0]&&t.index==e&&(this.re.lastIndex=e+1,t=this.re.exec(this.flat.text)),t){var n=this.flat.from+t.index,i=n+t[0].length;if((this.flat.to>=this.to||t.index+t[0].length<=this.flat.text.length-10)&&(!this.test||this.test(n,i,t)))return this.value={from:n,to:i,match:t},this.matchPos=Ly(this.text,i+(n==i?1:0)),this}if(this.flat.to==this.to)return this.done=!0,this;this.flat=Dy.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+2*this.flat.text.length))}},e}();function Ly(e,t){if(t>=e.length)return t;for(var n,i=e.lineAt(t);t=56320&&n<57344;)t++;return t}function Py(e){var t=Ov("input",{class:"cm-textfield",name:"line"});function n(){var n=/^([+-])?(\d+)?(:\d+)?(%)?$/.exec(t.value);if(n){var i=e.state,r=i.doc.lineAt(i.selection.main.head),o=n[1],a=n[2],s=n[3],l=n[4],c=s?+s.slice(1):0,u=a?+a:r.number;if(a&&l){var h=u/100;o&&(h=h*("-"==o?-1:1)+r.number/i.doc.lines),u=Math.round(i.doc.lines*h)}else a&&o&&(u=u*("-"==o?-1:1)+r.number);var p=i.doc.line(Math.max(1,Math.min(i.doc.lines,u)));e.dispatch({effects:Iy.of(!1),selection:bn.cursor(p.from+Math.max(0,Math.min(c,p.length))),scrollIntoView:!0}),e.focus()}}return{dom:Ov("form",{class:"cm-gotoLine",onkeydown:function(t){27==t.keyCode?(t.preventDefault(),e.dispatch({effects:Iy.of(!1)}),e.focus()):13==t.keyCode&&(t.preventDefault(),n())},onsubmit:function(e){e.preventDefault(),n()}},Ov("label",e.state.phrase("Go to line"),": ",t)," ",Ov("button",{class:"cm-button",type:"submit"},e.state.phrase("go")))}}"undefined"!=typeof Symbol&&(My.prototype[Symbol.iterator]=Ay.prototype[Symbol.iterator]=function(){return this});var Iy=Zn.define(),Fy=Dn.define({create:function(){return!0},update:function(e,t){for(var n=0,i=t.effects;n1)return jr.none;var r,o=i.main,a=null;if(o.empty){if(!t.highlightWordAroundCursor)return jr.none;var s=n.wordAt(o.head);if(!s)return jr.none;a=n.charCategorizer(o.head),r=n.sliceDoc(s.from,s.to)}else{var l=o.to-o.from;if(l200)return jr.none;if(t.wholeWords){if(r=n.sliceDoc(o.from,o.to),!qy(a=n.charCategorizer(o.head),n,o.from,o.to)||!function(e,t,n,i){return e(t.sliceDoc(n,n+1))==ai.Word&&e(t.sliceDoc(i-1,i))==ai.Word}(a,n,o.from,o.to))return jr.none}else if(!(r=n.sliceDoc(o.from,o.to).trim()))return jr.none}for(var c=[],u=0,h=e.visibleRanges;u=o.to?c.push(zy.range(m,g)):(m>=o.to||g<=o.from)&&c.push(Vy.range(m,g)),c.length>t.maxMatches))return jr.none}return jr.set(c)},e}(),{decorations:function(e){return e.decorations}}),_y=Ts.baseTheme({".cm-selectionMatch":{backgroundColor:"#99ff7780"},".cm-searchMatch .cm-selectionMatch":{backgroundColor:"transparent"}});var jy=function(e){var t=e.state,n=e.dispatch,i=t.selection.ranges;if(i.some((function(e){return e.from===e.to})))return function(e){var t=e.state,n=e.dispatch,i=t.selection,r=bn.create(i.ranges.map((function(e){return t.wordAt(e.head)||bn.cursor(e.head)})),i.mainIndex);return!r.eq(i)&&(n(t.update({selection:r})),!0)}({state:t,dispatch:n});var r=t.sliceDoc(i[0].from,i[0].to);if(t.selection.ranges.some((function(e){return t.sliceDoc(e.from,e.to)!=r})))return!1;var o=function(e,t){for(var n,i,r=e.selection,o=r.main,a=r.ranges,s=e.wordAt(o.head),l=s&&s.from==o.from&&s.to==o.to,c=function(r,o){if(o.next(),!o.done){if(r&&a.some((function(e){return e.from==o.value.from})))return n=r,i=o,"continue";if(l){var s=e.wordAt(o.value.from);if(!s||s.from!=o.value.from||s.to!=o.value.to)return n=r,i=o,"continue"}return{value:o.value}}if(r)return{value:null};o=new xy(e.doc,t,0,Math.max(0,a[a.length-1].from-1)),n=r=!0,i=o},u=!1,h=new xy(e.doc,t,a[a.length-1].to);;){var p=c(u,h);if(u=n,h=i,"object"==typeof p)return p.value}}(t,r);return!!o&&(n(t.update({selection:t.selection.addRange(bn.range(o.from,o.to),!1),effects:Ts.scrollIntoView(o.to)})),!0)},Wy=Cn.define({combine:function(e){return ui(e,{top:!1,caseSensitive:!1,literal:!1,wholeWord:!1,createPanel:function(e){return new Cb(e)}})}});function Gy(e){return e?[Wy.of(e),Db]:Db}var Ky=function(){function e(e){this.search=e.search,this.caseSensitive=!!e.caseSensitive,this.literal=!!e.literal,this.regexp=!!e.regexp,this.replace=e.replace||"",this.valid=!!this.search&&(!this.regexp||function(e){try{return new RegExp(e,Sy),!0}catch(e){return!1}}(this.search)),this.unquoted=this.unquote(this.search),this.wholeWord=!!e.wholeWord}return e.prototype.unquote=function(e){return this.literal?e:e.replace(/\\([nrt\\])/g,(function(e,t){return"n"==t?"\n":"r"==t?"\r":"t"==t?"\t":"\\"}))},e.prototype.eq=function(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord},e.prototype.create=function(){return this.regexp?new eb(this):new $y(this)},e.prototype.getCursor=function(e,t,n){void 0===t&&(t=0);var i=e.doc?e:ci.create({doc:e});return null==n&&(n=i.doc.length),this.regexp?Zy(this,i,t,n):Xy(this,i,t,n)},e}(),Yy=function(e){this.spec=e};function Xy(e,t,n,i){return new xy(t.doc,e.unquoted,n,i,e.caseSensitive?void 0:function(e){return e.toLowerCase()},e.wholeWord?function(e,t){return function(n,i,r,o){return(o>n||o+r.length=t)return null;i.push(n.value)}return i},t.prototype.highlight=function(e,t,n,i){for(var r=Xy(this.spec,e,Math.max(0,t-this.spec.unquoted.length),Math.min(n+this.spec.unquoted.length,e.doc.length));!r.next().done;)i(r.value.from,r.value.to)},t}(Yy);function Zy(e,t,n,i){return new My(t.doc,e.search,{ignoreCase:!e.caseSensitive,test:e.wholeWord?(r=t.charCategorizer(t.selection.main.head),function(e,t,n){return!n[0].length||(r(Qy(n.input,n.index))!=ai.Word||r(Jy(n.input,n.index))!=ai.Word)&&(r(Jy(n.input,n.index+n[0].length))!=ai.Word||r(Qy(n.input,n.index+n[0].length))!=ai.Word)}):void 0},n,i);var r}function Qy(e,t){return e.slice(Jt(e,t,!1),t)}function Jy(e,t){return e.slice(t,Jt(e,t))}var eb=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return f(t,e),t.prototype.nextMatch=function(e,t,n){var i=Zy(this.spec,e,n,e.doc.length).next();return i.done&&(i=Zy(this.spec,e,0,t).next()),i.done?null:i.value},t.prototype.prevMatchInRange=function(e,t,n){for(var i=1;;i++){for(var r=Math.max(t,n-1e4*i),o=Zy(this.spec,e,r,n),a=null;!o.next().done;)a=o.value;if(a&&(r==t||a.from>r+10))return a;if(r==t)return null}},t.prototype.prevMatch=function(e,t,n){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,n,e.doc.length)},t.prototype.getReplacement=function(e){return this.spec.unquote(this.spec.replace.replace(/\$([$&\d+])/g,(function(t,n){return"$"==n?"$":"&"==n?e.match[0]:"0"!=n&&+n=t)return null;i.push(n.value)}return i},t.prototype.highlight=function(e,t,n,i){for(var r=Zy(this.spec,e,Math.max(0,t-250),Math.min(n+250,e.doc.length));!r.next().done;)i(r.value.from,r.value.to)},t}(Yy),tb=Zn.define(),nb=Zn.define(),ib=Dn.define({create:function(e){return new ab(yb(e).create(),null)},update:function(e,t){for(var n=0,i=t.effects;no[r+1].from-500;)c=o[++r].to;t.highlight(n.state,l,c,(function(e,t){var r=n.state.selection.ranges.some((function(n){return n.from==e&&n.to==t}));i.add(e,t,r?lb:sb)}))}return i.finish()},e}(),{decorations:function(e){return e.decorations}});function ub(e){return function(t){var n=t.state.field(ib,!1);return n&&n.query.spec.valid?e(t,n):bb(t)}}var hb=ub((function(e,t){var n=t.query,i=e.state.selection.main.to,r=n.nextMatch(e.state,i,i);return!!r&&(e.dispatch({selection:{anchor:r.from,head:r.to},scrollIntoView:!0,effects:Sb(e,r),userEvent:"select.search"}),!0)})),pb=ub((function(e,t){var n=t.query,i=e.state,r=i.selection.main.from,o=n.prevMatch(i,r,r);return!!o&&(e.dispatch({selection:{anchor:o.from,head:o.to},scrollIntoView:!0,effects:Sb(e,o),userEvent:"select.search"}),!0)})),db=ub((function(e,t){var n=t.query.matchAll(e.state,1e3);return!(!n||!n.length)&&(e.dispatch({selection:bn.create(n.map((function(e){return bn.range(e.from,e.to)}))),userEvent:"select.search.matches"}),!0)})),fb=function(e){var t=e.state,n=e.dispatch,i=t.selection;if(i.ranges.length>1||i.main.empty)return!1;for(var r=i.main,o=r.from,a=r.to,s=[],l=0,c=new xy(t.doc,t.sliceDoc(o,a));!c.next().done;){if(s.length>1e3)return!1;c.value.from==o&&(l=s.length),s.push(bn.range(c.value.from,c.value.to))}return n(t.update({selection:bn.create(s,l),userEvent:"select.search.matches"})),!0},mb=ub((function(e,t){var n=t.query,i=e.state,r=i.selection.main,o=r.from,a=r.to;if(i.readOnly)return!1;var s=n.nextMatch(i,o,o);if(!s)return!1;var l,c,u=[],h=[];if(s.from==o&&s.to==a&&(c=i.toText(n.getReplacement(s)),u.push({from:s.from,to:s.to,insert:c}),s=n.nextMatch(i,s.from,s.to),h.push(Ts.announce.of(i.phrase("replaced match on line $",i.doc.lineAt(o).number)+"."))),s){var p=0==u.length||u[0].from>=s.to?0:s.to-s.from-c.length;l={anchor:s.from-p,head:s.to-p},h.push(Sb(e,s))}return e.dispatch({changes:u,selection:l,scrollIntoView:!!l,effects:h,userEvent:"input.replace"}),!0})),gb=ub((function(e,t){var n=t.query;if(e.state.readOnly)return!1;var i=n.matchAll(e.state,1e9).map((function(e){return{from:e.from,to:e.to,insert:n.getReplacement(e)}}));if(!i.length)return!1;var r=e.state.phrase("replaced $ matches",i.length)+".";return e.dispatch({changes:i,effects:Ts.announce.of(r),userEvent:"input.replace.all"}),!0}));function vb(e){return e.state.facet(Wy).createPanel(e)}function yb(e,t){var n,i,r,o,a=e.selection.main,s=a.empty||a.to>a.from+100?"":e.sliceDoc(a.from,a.to);if(t&&!s)return t;var l=e.facet(Wy);return new Ky({search:(null!==(n=null==t?void 0:t.literal)&&void 0!==n?n:l.literal)?s:s.replace(/\n/g,"\\n"),caseSensitive:null!==(i=null==t?void 0:t.caseSensitive)&&void 0!==i?i:l.caseSensitive,literal:null!==(r=null==t?void 0:t.literal)&&void 0!==r?r:l.literal,wholeWord:null!==(o=null==t?void 0:t.wholeWord)&&void 0!==o?o:l.wholeWord})}var bb=function(e){var t=e.state.field(ib,!1);if(t&&t.panel){var n=nc(e,vb);if(!n)return!1;var i=n.dom.querySelector("[main-field]");if(i&&i!=e.root.activeElement){var r=yb(e.state,t.query.spec);r.valid&&e.dispatch({effects:tb.of(r)}),i.focus(),i.select()}}else e.dispatch({effects:[nb.of(!0),t?tb.of(yb(e.state,t.query.spec)):Zn.appendConfig.of(Db)]});return!0},wb=function(e){var t=e.state.field(ib,!1);if(!t||!t.panel)return!1;var n=nc(e,vb);return n&&n.dom.contains(e.root.activeElement)&&e.focus(),e.dispatch({effects:nb.of(!1)}),!0},kb=[{key:"Mod-f",run:bb,scope:"editor search-panel"},{key:"F3",run:hb,shift:pb,scope:"editor search-panel",preventDefault:!0},{key:"Mod-g",run:hb,shift:pb,scope:"editor search-panel",preventDefault:!0},{key:"Escape",run:wb,scope:"editor search-panel"},{key:"Mod-Shift-l",run:fb},{key:"Alt-g",run:Oy},{key:"Mod-d",run:jy,preventDefault:!0}],Cb=function(){function e(e){var t=this;this.view=e;var n=this.query=e.state.field(ib).query.spec;function i(e,t,n){return Ov("button",{class:"cm-button",name:e,onclick:t,type:"button"},n)}this.commit=this.commit.bind(this),this.searchField=Ov("input",{value:n.search,placeholder:xb(e,"Find"),"aria-label":xb(e,"Find"),class:"cm-textfield",name:"search",form:"","main-field":"true",onchange:this.commit,onkeyup:this.commit}),this.replaceField=Ov("input",{value:n.replace,placeholder:xb(e,"Replace"),"aria-label":xb(e,"Replace"),class:"cm-textfield",name:"replace",form:"",onchange:this.commit,onkeyup:this.commit}),this.caseField=Ov("input",{type:"checkbox",name:"case",form:"",checked:n.caseSensitive,onchange:this.commit}),this.reField=Ov("input",{type:"checkbox",name:"re",form:"",checked:n.regexp,onchange:this.commit}),this.wordField=Ov("input",{type:"checkbox",name:"word",form:"",checked:n.wholeWord,onchange:this.commit}),this.dom=Ov("div",{onkeydown:function(e){return t.keydown(e)},class:"cm-search"},w(w([this.searchField,i("next",(function(){return hb(e)}),[xb(e,"next")]),i("prev",(function(){return pb(e)}),[xb(e,"previous")]),i("select",(function(){return db(e)}),[xb(e,"all")]),Ov("label",null,[this.caseField,xb(e,"match case")]),Ov("label",null,[this.reField,xb(e,"regexp")]),Ov("label",null,[this.wordField,xb(e,"by word")])],e.state.readOnly?[]:[Ov("br"),this.replaceField,i("replace",(function(){return mb(e)}),[xb(e,"replace")]),i("replaceAll",(function(){return gb(e)}),[xb(e,"replace all")])],!0),[Ov("button",{name:"close",onclick:function(){return wb(e)},"aria-label":xb(e,"close"),type:"button"},["×"])],!1))}return e.prototype.commit=function(){var e=new Ky({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:tb.of(e)}))},e.prototype.keydown=function(e){Hs(this.view,e,"search-panel")?e.preventDefault():13==e.keyCode&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?pb:hb)(this.view)):13==e.keyCode&&e.target==this.replaceField&&(e.preventDefault(),mb(this.view))},e.prototype.update=function(e){for(var t=0,n=e.transactions;tl.length-30;c--)if(!Eb.test(l[c-1])&&Eb.test(l[c])){l=l.slice(0,c);break}return Ts.announce.of("".concat(e.state.phrase("current match"),". ").concat(l," ").concat(e.state.phrase("on line")," ").concat(r.number,"."))}var Mb,Tb=Ts.baseTheme({".cm-panel.cm-search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button, & label":{margin:".2em .6em .2em 0"},"& input[type=checkbox]":{marginRight:".2em"},"& label":{fontSize:"80%",whiteSpace:"pre"}},"&light .cm-searchMatch":{backgroundColor:"#ffff0054"},"&dark .cm-searchMatch":{backgroundColor:"#00ffff8a"},"&light .cm-searchMatch-selected":{backgroundColor:"#ff6a0054"},"&dark .cm-searchMatch-selected":{backgroundColor:"#ff00ff8a"}}),Db=[ib,On.lowest(cb),Tb],Ab=function(){function e(e,t,n,i,r,o,a,s,l,c,u){void 0===c&&(c=0),this.p=e,this.stack=t,this.state=n,this.reducePos=i,this.pos=r,this.score=o,this.buffer=a,this.bufferBase=s,this.curContext=l,this.lookAhead=c,this.parent=u}return e.prototype.toString=function(){return"[".concat(this.stack.filter((function(e,t){return t%3==0})).concat(this.state),"]@").concat(this.pos).concat(this.score?"!"+this.score:"")},e.start=function(t,n,i){void 0===i&&(i=0);var r=t.parser.context;return new e(t,[],n,i,i,0,[],0,r?new Lb(r,r.start):null,0,null)},Object.defineProperty(e.prototype,"context",{get:function(){return this.curContext?this.curContext.context:null},enumerable:!1,configurable:!0}),e.prototype.pushState=function(e,t){this.stack.push(this.state,t,this.bufferBase+this.buffer.length),this.state=e},e.prototype.reduce=function(e){var t=e>>19,n=65535&e,i=this.p.parser,r=i.dynamicPrecedence(n);if(r&&(this.score+=r),0==t)return this.pushState(i.getGoto(this.state,n,!0),this.reducePos),no;)this.stack.pop();this.reduceContext(n,a)},e.prototype.storeNode=function(e,t,n,i,r){if(void 0===i&&(i=4),void 0===r&&(r=!1),0==e&&(!this.stack.length||this.stack[this.stack.length-1]0&&0==o.buffer[a-4]&&o.buffer[a-1]>-1){if(t==n)return;if(o.buffer[a-2]>=t)return void(o.buffer[a-2]=n)}}if(r&&this.pos!=n){var s=this.buffer.length;if(s>0&&0!=this.buffer[s-4])for(;s>0&&this.buffer[s-2]>n;)this.buffer[s]=this.buffer[s-4],this.buffer[s+1]=this.buffer[s-3],this.buffer[s+2]=this.buffer[s-2],this.buffer[s+3]=this.buffer[s-1],s-=4,i>4&&(i-=4);this.buffer[s]=e,this.buffer[s+1]=t,this.buffer[s+2]=n,this.buffer[s+3]=i}else this.buffer.push(e,t,n,i)},e.prototype.shift=function(e,t,n){var i=this.pos;if(131072&e)this.pushState(65535&e,this.pos);else if(0==(262144&e)){var r=e,o=this.p.parser;(n>this.pos||t<=o.maxNode)&&(this.pos=n,o.stateFlag(r,1)||(this.reducePos=n)),this.pushState(r,i),this.shiftContext(t,i),t<=o.maxNode&&this.buffer.push(t,i,n,4)}else this.pos=n,this.shiftContext(t,i),t<=this.p.parser.maxNode&&this.buffer.push(t,i,n,4)},e.prototype.apply=function(e,t,n){65536&e?this.reduce(e):this.shift(e,t,n)},e.prototype.useNode=function(e,t){var n=this.p.reused.length-1;(n<0||this.p.reused[n]!=e)&&(this.p.reused.push(e),n++);var i=this.pos;this.reducePos=this.pos=i+e.length,this.pushState(t,i),this.buffer.push(n,i,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))},e.prototype.split=function(){for(var t=this,n=t.buffer.length;n>0&&t.buffer[n-2]>t.reducePos;)n-=4;for(var i=t.buffer.slice(n),r=t.bufferBase+n;t&&r==t.bufferBase;)t=t.parent;return new e(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,i,r,this.curContext,this.lookAhead,t)},e.prototype.recoverByDelete=function(e,t){var n=e<=this.p.parser.maxNode;n&&this.storeNode(e,this.pos,t,4),this.storeNode(0,this.pos,t,n?8:4),this.pos=this.reducePos=t,this.score-=190},e.prototype.canShift=function(e){for(var t=new Pb(this);;){var n=this.p.parser.stateSlot(t.state,4)||this.p.parser.hasAction(t.state,e);if(0==(65536&n))return!0;if(0==n)return!1;t.reduce(n)}},e.prototype.recoverByInsert=function(e){if(this.stack.length>=300)return[];var t=this.p.parser.nextStates(this.state);if(t.length>8||this.stack.length>=120){for(var n=[],i=0,r=void 0;i>19,i=65535&e,r=this.stack.length-3*n;if(r<0||t.getGoto(this.stack[r],i,!1)<0)return!1;this.storeNode(0,this.reducePos,this.reducePos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(e),!0},e.prototype.forceAll=function(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this},Object.defineProperty(e.prototype,"deadEnd",{get:function(){if(3!=this.stack.length)return!1;var e=this.p.parser;return 65535==e.data[e.stateSlot(this.state,1)]&&!e.stateSlot(this.state,4)},enumerable:!1,configurable:!0}),e.prototype.restart=function(){this.state=this.stack[0],this.stack.length=0},e.prototype.sameState=function(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(var t=0;tthis.lookAhead&&(this.emitLookAhead(),this.lookAhead=e)},e.prototype.close=function(){this.curContext&&this.curContext.tracker.strict&&this.emitContext(),this.lookAhead>0&&this.emitLookAhead()},e}(),Lb=function(e,t){this.tracker=e,this.context=t,this.hash=e.strict?e.hash(t):0};!function(e){e[e.Insert=200]="Insert",e[e.Delete=190]="Delete",e[e.Reduce=100]="Reduce",e[e.MaxNext=4]="MaxNext",e[e.MaxInsertStackDepth=300]="MaxInsertStackDepth",e[e.DampenInsertStackDepth=120]="DampenInsertStackDepth"}(Mb||(Mb={}));var Pb=function(){function e(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}return e.prototype.reduce=function(e){var t=65535&e,n=e>>19;0==n?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=3*(n-1);var i=this.start.p.parser.getGoto(this.stack[this.base-3],t,!0);this.state=i},e}(),Ib=function(){function e(e,t,n){this.stack=e,this.pos=t,this.index=n,this.buffer=e.buffer,0==this.index&&this.maybeNext()}return e.create=function(t,n){return void 0===n&&(n=t.bufferBase+t.buffer.length),new e(t,n,n-t.bufferBase)},e.prototype.maybeNext=function(){var e=this.stack.parent;null!=e&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)},Object.defineProperty(e.prototype,"id",{get:function(){return this.buffer[this.index-4]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"start",{get:function(){return this.buffer[this.index-3]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"end",{get:function(){return this.buffer[this.index-2]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"size",{get:function(){return this.buffer[this.index-1]},enumerable:!1,configurable:!0}),e.prototype.next=function(){this.index-=4,this.pos-=4,0==this.index&&this.maybeNext()},e.prototype.fork=function(){return new e(this.stack,this.pos,this.index)},e}(),Fb=function(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0},Ob=new Fb,Bb=function(){function e(e,t){this.input=e,this.ranges=t,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=Ob,this.rangeIndex=0,this.pos=this.chunkPos=t[0].from,this.range=t[0],this.end=t[t.length-1].to,this.readNext()}return e.prototype.resolveOffset=function(e,t){for(var n=this.range,i=this.rangeIndex,r=this.pos+e;rn.to:r>=n.to;){if(i==this.ranges.length-1)return null;r+=(o=this.ranges[++i]).from-n.to,n=o}return r},e.prototype.peek=function(e){var t,n,i=this.chunkOff+e;if(i>=0&&i=this.chunk2Pos&&ta.to&&(this.chunk2=this.chunk2.slice(0,a.to-t)),n=this.chunk2.charCodeAt(0)}}return t>=this.token.lookAhead&&(this.token.lookAhead=t+1),n},e.prototype.acceptToken=function(e,t){void 0===t&&(t=0);var n=t?this.resolveOffset(t,-1):this.pos;if(null==n||n=this.chunk2Pos&&this.posthis.range.to?n.slice(0,this.range.to-this.pos):n,this.chunkPos=this.pos,this.chunkOff=0}},e.prototype.readNext=function(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)},e.prototype.advance=function(e){for(void 0===e&&(e=1),this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()},e.prototype.setDone=function(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1},e.prototype.reset=function(e,t){if(t?(this.token=t,t.start=e,t.lookAhead=e+1,t.value=t.extended=-1):this.token=Ob,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&t<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,t-this.chunkPos);if(e>=this.chunk2Pos&&t<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,t-this.chunk2Pos);if(e>=this.range.from&&t<=this.range.to)return this.input.read(e,t);for(var n="",i=0,r=this.ranges;i=t)break;o.to>e&&(n+=this.input.read(Math.max(o.from,e),Math.min(o.to,t)))}return n},e}(),Nb=function(){function e(e,t){this.data=e,this.id=t}return e.prototype.token=function(e,t){!function(e,t,n,i){var r=0,o=1<0){var u=e[c];if(s.allows(u)&&(-1==t.token.value||t.token.value==u||a.overrides(u,t.token.value))){t.acceptToken(u);break}}var h=t.next,p=0,d=e[r+2];if(!(t.next<0&&d>p&&65535==e[l+3*d-3])){for(;p>1,m=l+f+(f<<1),g=e[m],v=e[m+1];if(h=v)){r=e[m+2],t.advance();continue e}p=f+1}}break}r=e[l+3*d-1]}}(this.data,e,t,this.id)},e}();Nb.prototype.contextual=Nb.prototype.fallback=Nb.prototype.extend=!1;var Rb=function(e,t){void 0===t&&(t={}),this.token=e,this.contextual=!!t.contextual,this.fallback=!!t.fallback,this.extend=!!t.extend};function Hb(e,t){if(void 0===t&&(t=Uint16Array),"string"!=typeof e)return e;for(var n=null,i=0,r=0;i=92&&a--,a>=34&&a--;var l=a-32;if(l>=46&&(l-=46,s=!0),o+=l,s)break;o*=46}n?n[r++]=o:n=new t(o)}return n}var Vb,zb="undefined"!=typeof process&&process.env&&/\bparse\b/.test(process.env.LOG),qb=null;function Ub(e,t,n){var i=e.cursor(Wc.IncludeAnonymous);for(i.moveTo(t);;)if(!(n<0?i.childBefore(t):i.childAfter(t)))for(;;){if((n<0?i.tot)&&!i.type.isError)return n<0?Math.max(0,Math.min(i.to-1,t-25)):Math.min(e.length,Math.max(i.from+1,t+25));if(n<0?i.prevSibling():i.nextSibling())break;if(!i.parent())return n<0?0:e.length}}!function(e){e[e.Margin=25]="Margin"}(Vb||(Vb={}));var _b,jb=function(){function e(e,t){this.fragments=e,this.nodeSet=t,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}return e.prototype.nextFragment=function(){var e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?Ub(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?Ub(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9},e.prototype.nodeAt=function(e){if(ee)return this.nextStart=o,null;if(r instanceof Xc){if(o==e){if(o=Math.max(this.safeFrom,e)&&(this.trees.push(r),this.start.push(o),this.index.push(0))}else this.index[t]++,this.nextStart=o+r.length}else this.trees.pop(),this.start.pop(),this.index.pop()}},e}(),Wb=function(){function e(e,t){this.stream=t,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map((function(e){return new Fb}))}return e.prototype.getActions=function(e){for(var t=0,n=null,i=e.p.parser,r=i.tokenizers,o=i.stateSlot(e.state,3),a=e.curContext?e.curContext.hash:0,s=0,l=0;lu.end+25&&(s=Math.max(u.lookAhead,s)),0!=u.value)){var h=t;if(u.extended>-1&&(t=this.addActions(e,u.extended,u.end,t)),t=this.addActions(e,u.value,u.end,t),!c.extend&&(n=u,t>h))break}}for(;this.actions.length>t;)this.actions.pop();return s&&e.setLookAhead(s),n||e.pos!=this.stream.end||((n=new Fb).value=e.p.parser.eofTerm,n.start=n.end=e.pos,t=this.addActions(e,n.value,n.end,t)),this.mainToken=n,this.actions},e.prototype.getMainToken=function(e){if(this.mainToken)return this.mainToken;var t=new Fb,n=e.pos,i=e.p;return t.start=n,t.end=Math.min(n+1,i.stream.end),t.value=n==i.stream.end?i.parser.eofTerm:0,t},e.prototype.updateCachedToken=function(e,t,n){if(t.token(this.stream.reset(n.pos,e),n),e.value>-1){for(var i=n.p.parser,r=0;r=0&&n.p.parser.dialect.allows(o>>1)){0==(1&o)?e.value=o>>1:e.extended=o>>1;break}}}else e.value=0,e.end=Math.min(n.p.stream.end,n.pos+1)},e.prototype.putAction=function(e,t,n,i){for(var r=0;r4*e.bufferLength?new jb(n,e.nodeSet):null}return Object.defineProperty(e.prototype,"parsedPos",{get:function(){return this.minStackPos},enumerable:!1,configurable:!0}),e.prototype.advance=function(){for(var e,t,n=this.stacks,i=this.minStackPos,r=this.stacks=[],o=0;oi)r.push(a);else{if(this.advanceStack(a,r,n))continue;e||(e=[],t=[]),e.push(a);var s=this.tokens.getMainToken(a);t.push(s.value,s.end)}break}if(!r.length){var l;if(l=e&&function(e){for(var t=null,n=0,i=e;no)&&r.p.parser.stateFlag(r.state,2)&&(!t||t.scorethis.stoppedAt?e[0]:this.runRecovery(e,t,r)))return this.stackToTree(l.forceAll());if(this.recovering){var c=1==this.recovering?1:3*this.recovering;if(r.length>c)for(r.sort((function(e,t){return t.score-e.score}));r.length>c;)r.pop();r.some((function(e){return e.reducePos>i}))&&this.recovering--}else if(r.length>1)e:for(o=0;o500&&h.buffer.length>500){if(!((a.score-h.score||a.buffer.length-h.buffer.length)>0)){r.splice(o--,1);continue e}r.splice(u--,1)}}}this.minStackPos=r[0].pos;for(o=1;o ":"";if(null!=this.stoppedAt&&i>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments)for(var a=e.curContext&&e.curContext.tracker.strict,s=a?e.curContext.hash:0,l=this.fragments.nodeAt(i);l;){var c=this.parser.nodeSet.types[l.type.id]==l.type?r.getGoto(e.state,l.type.id):-1;if(c>-1&&l.length&&(!a||(l.prop(qc.contextHash)||0)==s))return e.useNode(l,c),zb&&console.log(o+this.stackID(e)+" (via reuse of ".concat(r.getName(l.type.id),")")),!0;if(!(l instanceof Xc)||0==l.children.length||l.positions[0]>0)break;var u=l.children[0];if(!(u instanceof Xc&&0==l.positions[0]))break;l=u}var h=r.stateSlot(e.state,4);if(h>0)return e.reduce(h),zb&&console.log(o+this.stackID(e)+" (via always-reduce ".concat(r.getName(65535&h),")")),!0;if(e.stack.length>=15e3)for(;e.stack.length>9e3&&e.forceReduce(););for(var p=this.tokens.getActions(e),d=0;di?t.push(y):n.push(y)}return!1},e.prototype.advanceFully=function(e,t){for(var n=e.pos;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>n)return Kb(e,t),!0}},e.prototype.runRecovery=function(e,t,n){for(var i=null,r=!1,o=0;o ":"";if(a.deadEnd){if(r)continue;if(r=!0,a.restart(),zb&&console.log(c+this.stackID(a)+" (restarted)"),this.advanceFully(a,n))continue}for(var u=a.split(),h=c,p=0;u.forceReduce()&&p<10;p++){if(zb&&console.log(h+this.stackID(u)+" (via force-reduce)"),this.advanceFully(u,n))break;zb&&(h=this.stackID(u)+" -> ")}for(var d=0,f=a.recoverByInsert(s);da.pos?(l==a.pos&&(l++,s=0),a.recoverByDelete(s,l),zb&&console.log(c+this.stackID(a)+" (via recover-delete ".concat(this.parser.getName(s),")")),Kb(a,n)):(!i||i.score=0)l(d,p,h[o++]);else{for(var f=h[o+-d],m=-d;m>0;m--)l(h[o++],p,f);o++}}}i.nodeSet=new Gc(r.map((function(e,n){return jc.define({name:n>=i.minRepeatTerm?void 0:e,id:n,props:s[n],top:a.indexOf(n)>-1,error:0==n,skipped:t.skippedNodes&&t.skippedNodes.indexOf(n)>-1})}))),t.propSources&&(i.nodeSet=(n=i.nodeSet).extend.apply(n,t.propSources)),i.strict=!1,i.bufferLength=Hc;var g=Hb(t.tokenData);if(i.context=t.context,i.specialized=new Uint16Array(t.specialized?t.specialized.length:0),i.specializers=[],t.specialized)for(o=0;o=i[0])return-1;for(var r=i[t+1];;){var o=i[r++],a=1&o,s=i[r++];if(a&&n)return s;for(var l=r+(o>>1);r0},t.prototype.validAction=function(e,t){if(t==this.stateSlot(e,4))return!0;for(var n=this.stateSlot(e,1);;n+=3){if(65535==this.data[n]){if(1!=this.data[n+1])return!1;n=ew(this.data,n+2)}if(t==ew(this.data,n+1))return!0}},t.prototype.nextStates=function(e){for(var t,n=[],i=function(e){if(65535==r.data[e]){if(1!=r.data[e+1])return t=e,"break";e=ew(r.data,e+2)}if(0==(1&r.data[e+2])){var i=r.data[e+1];n.some((function(e,t){return 1&t&&e==i}))||n.push(r.data[e],i)}t=e},r=this,o=this.stateSlot(e,1);;o+=3){var a=i(o);if(o=t,"break"===a)break}return n},t.prototype.overrides=function(e,t){var n=tw(this.data,this.tokenPrecTable,t);return n<0||tw(this.data,this.tokenPrecTable,e)0},t.prototype.getName=function(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)},Object.defineProperty(t.prototype,"eofTerm",{get:function(){return this.maxNode+1},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"topNode",{get:function(){return this.nodeSet.types[this.top[1]]},enumerable:!1,configurable:!0}),t.prototype.dynamicPrecedence=function(e){var t=this.dynamicPrecedences;return null==t?0:t[e]||0},t.prototype.parseDialect=function(e){var t=Object.keys(this.dialects),n=t.map((function(){return!1}));if(e)for(var i=0,r=e.split(" ");i=0&&(n[a]=!0)}for(var s=null,l=0;l0&&n.requestIdleCallback){var i=n.requestIdleCallback(e,{timeout:t});return{high:!1,cancel:function(){return n.cancelIdleCallback(i)}}}var r=n.requestAnimationFrame(e);return{high:!0,cancel:function(){return n.cancelAnimationFrame(r)}}}function Hw(e,t){var n=e.relatedTarget;return!n||!t.contains(n)}function Vw(e){e.addEventListener("mousedown",(function(e){1===e.button&&e.preventDefault()}))}var zw;/bot|crawl|spider/i.test(navigator.userAgent);function qw(){zw&&zw()}var Uw={sx:0,sy:0,ex:0,ey:0,t:0};function _w(e,t){var n=0,i=0,r=0,o=0,a=function(e){if(1===e.touches.length){var t=e.touches[0];n=t.identifier,i=t.clientX,r=t.clientY,o=Date.now(),window.addEventListener("touchend",s),window.addEventListener("touchcancel",s)}},s=function(e){var a=Ww(e,n);if((0===e.touches.length||a)&&(window.removeEventListener("touchend",s),window.removeEventListener("touchcancel",s),"touchend"===e.type&&a&&Date.now()-o<600&&Math.abs(i-a.clientX)<5&&Math.abs(r-a.clientY)<5)){var l=new MouseEvent("click",{clientX:a.clientX,clientY:a.clientY,button:0,buttons:0,ctrlKey:e.ctrlKey,altKey:e.altKey,shiftKey:e.shiftKey,metaKey:e.metaKey,bubbles:!0,cancelable:!0});Object.defineProperty(l,"target",{writable:!1,value:e.target}),t(l,e.target),l.defaultPrevented&&e.preventDefault()}};return e.addEventListener("touchstart",a),function(){return e.removeEventListener("touchstart",a)}}function jw(e){return Uw&&Date.now()-Uw.t<1e3&&Math.abs(e.clientX-Uw.sx)<5&&Math.abs(e.clientY-Uw.sy)<5||Math.abs(e.clientX-Uw.ex)<5&&Math.abs(e.clientY-Uw.ey)<5}function Ww(e,t){for(var n=e.changedTouches,i=0;i=i)||!p)return!0;var y=t.offsetWidth,b=t.offsetHeight;g=createDiv("drag-reorder-ghost");var w=t.cloneNode(!0);w.setAttribute("aria-label",null),g.appendChild(w),w.style.width=y+"px",w.style.height=b+"px",document.body.appendChild(g),document.body.addClass("is-grabbing"),t.addClass("drag-ghost-hidden"),r();var k=g.getBoundingClientRect(),C=w.getBoundingClientRect();f+=C.x-k.x,m+=C.y-k.y}e.cancelable&&e.preventDefault();var x=s(o);g&&(g.style.left=a-f+"px",g.style.top=l-m+"px"),t.detach();var E=n.childNodes[x];return n.insertBefore(t,E),!0},end:function(e,i){if(g){e.preventDefault();var r=s(i);g.detach(),document.body.removeClass("is-grabbing"),t.removeClass("drag-ghost-hidden"),t.detach();var a=n.childNodes[r];n.insertBefore(t,a),o(r)}}}}},(l=e).addEventListener("mousedown",(function(e){if(0===e.button&&!jw(e)){var t=c(e,e);if(t){var n=function(e){t.move(e,e)||o()},i=function(e){o(),t.end(e,e)},r=e.win,o=function(){r.removeEventListener("mousemove",n),r.removeEventListener("mouseup",i)};r.addEventListener("mousemove",n),r.addEventListener("mouseup",i)}}})),l.addEventListener("touchstart",(function(e){if(!(e.touches.length>1)){var t=e.touches[0],n=c(e,t);if(n){var i=t.identifier,r=function(e){var t=Ww(e,i);t&&(l(),n.end(e,t))},o=function(e){var t=Ww(e,i);t&&(l(),n.end(e,t))},a=function(e){var t=Ww(e,i);t&&(n.move(e,t)||l())},s=e.win,l=function(){s.removeEventListener("touchcancel",o),s.removeEventListener("touchend",r),s.removeEventListener("touchmove",a)};s.addEventListener("touchcancel",o),s.addEventListener("touchend",r),s.addEventListener("touchmove",a,{passive:!1})}}}))}function Kw(e){for(var t=0,n=e.findAll("audio, video");t=1&&r[0]){var o=decodeURIComponent(r[0]);2===r.length?t[o]=decodeURIComponent(r[1]):t[o]=""}}return t},e.decodeUrl=function(t){t||(t="");var n=t.split("#"),i=n.length>1?n[1]:"",r=n[0].split("?"),o=r.length>1?r[1]:"";return{path:r[0],query:e.decodeUrlQuery(o),hash:e.decodeUrlQuery(i)}},e.addQuery=function(t,n){return t+(t.contains("?")?"&":"?")+e.encodeUrlQuery(n)},e}(),Qw=function(e){function t(n,i,r){var o=e.call(this,n)||this;return o.status=i,o.headers=r,Object.setPrototypeOf(o,t.prototype),o}return f(t,e),t}(Error);function Jw(e,t,n,i){var r;if((null===(r=e.throw)||void 0===r||r)&&t>=400)throw new Qw("Request failed, status "+t,t,n);return{status:t,headers:n,arrayBuffer:i,get json(){return JSON.parse((new TextDecoder).decode(i))},get text(){return(new TextDecoder).decode(i)}}}function ek(e){return v(this,void 0,Promise,(function(){var t,n,i,r,o,a,s,l,c,u,h,p;return y(this,(function(d){switch(d.label){case 0:return String.isString(e)&&(e={url:e}),nw?(n=!1,e.body instanceof ArrayBuffer?(t=q(e.body),n=!0):t=e.body,[4,ow.requestUrl({url:e.url,method:e.method,contentType:e.contentType,headers:e.headers,body:t,binary:n})]):[3,2];case 1:return i=d.sent(),[2,Jw(e,i.status,i.headers,z(i.body))];case 2:return at("electron")?[4,ct(e)]:[3,4];case 3:return r=d.sent(),[2,Jw(e,r.status,r.headers,r.body)];case 4:return o=e.url,a=e.method,s=e.contentType,l=e.body,c=null,s&&(c={"Content-Type":s}),[4,fetch(o,{method:a,headers:c,body:l})];case 5:return[4,(u=d.sent()).arrayBuffer()];case 6:return h=d.sent(),p={},u.headers.forEach((function(e,t){return p[t]=e})),[2,Jw(e,u.status,p,h)]}}))}))}function tk(e){var t=this,n=e;return Object.defineProperty(n,"arrayBuffer",{get:function(){return v(t,void 0,void 0,(function(){return y(this,(function(t){switch(t.label){case 0:return[4,e];case 1:return[2,t.sent().arrayBuffer]}}))}))}}),Object.defineProperty(n,"json",{get:function(){return v(t,void 0,void 0,(function(){return y(this,(function(t){switch(t.label){case 0:return[4,e];case 1:return[2,t.sent().json]}}))}))}}),Object.defineProperty(n,"text",{get:function(){return v(t,void 0,void 0,(function(){return y(this,(function(t){switch(t.label){case 0:return[4,e];case 1:return[2,t.sent().text]}}))}))}}),n}function nk(e){return tk(ek(e))}function ik(e){return v(this,void 0,Promise,(function(){return y(this,(function(t){switch(t.label){case 0:return[4,ek(e)];case 1:return[2,t.sent().text]}}))}))}function rk(e){return tk(function(e){return v(this,void 0,Promise,(function(){return y(this,(function(t){switch(t.label){case 0:return String.isString(e)&&(e={url:e}),[4,ek(e)];case 1:return[2,t.sent()]}}))}))}(e))}function ok(){var e="https://obsidian.md/download";if($w.isDesktopApp){var t=window.process.platform,n="win32"===t?"win":"darwin"===t?"mac":"linux",i=window.process.arch;return Zw.addQuery(e,{os:n,arch:i})}if($w.isMobileApp){n=rw?"android":"ios";return Zw.addQuery(e,{os:n})}return e}function ak(e,t){return e.length<=t?e:e.slice(0,t-1).trim()+"…"}window.request=ik,window.requestUrl=nk;var sk=/\u00A0/g;function lk(e){return e.replace(sk," ")}function ck(e){if(!e||"string"!=typeof e)return null;var t=!0,n=e.split(".").map((function(e){var n=parseInt(e);return isNaN(n)&&(t=!1),n}));return t?n:null}function uk(e,t){var n=ck(e),i=ck(t);return!!i&&(!n||function(e,t){for(var n=Math.min(e.length,t.length),i=0;it[i])return!1}return e.length?@\[\]^_`{|}~]/,fk=/\s/,mk=/[\u0F00-\u0FFF\u3040-\u30ff\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff\uff66-\uff9f]/;function gk(e){for(var t=e.toLowerCase(),n=[],i=0,r=0;r0&&!dk.test(h)&&!mk.test(h)){var p=n.charAt(u-1);if(h.toLowerCase()!==h&&p.toLowerCase()!==p||h.toUpperCase()!==h&&!dk.test(p)&&!fk.test(p)&&!mk.test(p))if(i){if(u!==a){a+=c.length,l--;continue}}else o+=1}if(0===s.length)s.push([u,u+c.length]);else{var d=s[s.length-1];d[1]=e.length)break;s<0&&(s=0),s!==r&&i.appendText(e.substring(r,s)),i.createSpan({cls:"suggestion-highlight",text:e.substring(s,l)}),r=l}}r1?(n[t[0]]||i[t[0]]||t[0])+" ("+(r[t[1]]||t[1])+")"+t.slice(2).map((function(e){return"(".concat(e,")")})).join(""):t.length>0?n[t[0]]||i[t[0]]||r[t[0]]||t[0]:""}function Yk(e,t){e.focus();var n=e.win,i=n.document.createRange();i.selectNodeContents(e),isBoolean(t)&&i.collapse(t);var r=n.getSelection();r&&(r.removeAllRanges(),r.addRange(i),$w.isMobile&&Tw((function(){e.scrollIntoView({block:"nearest"})})))}function Xk(){var e=activeDocument.activeElement;e&&e.instanceOf(HTMLElement)&&e.blur();var t=activeWindow.getSelection();t&&t.removeAllRanges()}function $k(e,t){for(var n=e.document.body;t.win.frameElement;)t=t.win.frameElement;return n.contains(t)}var Zk=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){Zk={passive:!1}}}))}catch(e){}function Qk(e,t,n){n=n||{},t.show();var i=n.gap||0,r=n.preference||"bottom",o=n.offsetParent||t.offsetParent||t.doc.documentElement,a=n.horizontalAlignment||"left",s=o.scrollTop+10,l=o.scrollTop+o.clientHeight-10,c=Math.min(e.top,l),u=Math.max(e.bottom,s),h=t.offsetHeight,p=e.top-s>=h+i,d=l-e.bottom>=h+i,f=0,m="";!p||"top"!==r&&d?!d||"bottom"!==r&&p?o.clientHeightv-y&&(b=v-y),t.style.top="".concat(f,"px"),t.style.left="".concat(b,"px"),{top:f,left:b,vresult:m}}function Jk(e,t){var n=e.clientX,i=e.clientY,r=t.getBoundingClientRect();return n>=r.x&&n<=r.x+r.width&&i>=r.y&&i<=r.y+r.height}function eC(e,t){for(var n=0,i=0,r=t?t.offsetParent:null;e&&e!==t&&e!==r;){n+=e.offsetTop,i+=e.offsetLeft;for(var o=e.offsetParent,a=e.parentElement;a&&a!==o;)n-=a.scrollTop,i-=a.scrollLeft,a=a.parentElement;o&&o!==t&&o!==r&&(n-=o.scrollTop,i-=o.scrollLeft),e=o}return{top:n,left:i}}function tC(e,t){var n=eC(e,t);return{left:n.left,right:n.left+e.offsetWidth,top:n.top,bottom:n.top+e.offsetHeight}}function nC(e,t){var n=!1,i=null;return{get loaded(){return n},get promise(){if(n)return Promise.resolve();if(!i){t&&t.before&&t.before();var r=function(e){return new Promise((function(t,n){var i=document.createElement("script");i.type="text/javascript",i.src=e,i.addEventListener("load",(function(){return t(i)})),i.addEventListener("error",(function(e){return n(e)})),document.body.appendChild(i)}))}(e);r.catch((function(e){e.detach(),i=null})),i=r.then((function(){n=!0,i=null,t&&t.after&&t.after()}))}return i},then:function(e){return n?e():this.promise.then(e)}}}function iC(e,t){if(3!==e.nodeType)for(var n=e.firstChild;n;)iC(n,t),n=n.nextSibling;else t.push(e)}function rC(e,t,n,i){for(var r=0,o=null,a=-1,s=null,l=-1,c=0;cn){var r=(t.clientY-e.getBoundingClientRect().y-30)/(n-60);e.scrollTop=(i-n)*Math.clamp(r,0,1)}}))}for(var sC=new Map,lC=0,cC="a abbr acronym b bdi bdo big br button canvas cite code data del dfn em embed i iframe img input ins kbd label map mark meter noscript object outputpicture progress q ruby s samp select small span strong sub sup svg textarea time u tt var video wbr".split(" ");lC0?gC.set(e,e.scrollTop):gC.delete(e),!1)}function bC(e){vC(e,yC)}function wC(e){var t=gC.get(e);return t&&(e.scrollTop=t),!1}function kC(e){vC(e,wC)}function CC(e,t,n){for(var i=e.targetNode;i&&i!==t;){if(i.instanceOf(Element)&&(i.scrollHeight>i.clientHeight||n&&i.scrollWidth>i.clientWidth)){var r=getComputedStyle(i),o=r.overflowY;if("auto"===o||"scroll"===o)return!0;if(n){var a=r.overflowX;if("auto"===a||"scroll"===a)return!0}}i=i.parentNode}return!1}function xC(e){$w.isMobile&&(e.addClass("mod-tappable"),e.addEventListener("touchstart",(function(t){if(1===t.touches.length){var n=t.timeStamp,i=t.touches[0].clientX,r=t.touches[0].clientY,o=!1,a=t.touches[0].identifier;e.addClass("mod-tap");var s=function(t){if(Ww(t,a)&&!o){c(),o=!0;var i=Math.max(0,300-(t.timeStamp-n));setTimeout((function(){return e.removeClass("mod-tap")}),i)}},l=function(e){var t=Ww(e,a);if(t){var n=t.clientX,o=t.clientY,l=n-i,c=o-r;l*l+c*c>25&&s(e)}},c=function(){e.removeEventListener("touchmove",l),e.removeEventListener("touchcancel",s),e.removeEventListener("touchend",s)};e.addEventListener("touchmove",l),e.addEventListener("touchcancel",s),e.addEventListener("touchend",s)}})))}function EC(e){var t=e.frameElement;if(!t)return null;for(var n={x:0,y:0,scale:1,win:e};null!==t;){var i=t.getBoundingClientRect(),r=i.width/t.clientWidth;n.scale*=r,n.x=n.x*r+i.x,n.y=n.y*r+i.y,n.win=t.win,t=t.win.frameElement}return n}function SC(e,t){var n=0,i=e.win;e.addEventListener("mousedown",(function(e){e.detail>1&&i.clearTimeout(n)})),e.addEventListener("click",(function(r){if(!(r.defaultPrevented||r.detail>1||r.shiftKey)){var o=i.getSelection();if(o.rangeCount>0)for(var a=0;a=this.offset;n--)t[n]===e&&t.splice(n,1)},e.prototype.dequeue=function(){var e=this.queue,t=this.offset;if(0!=e.length){var n=e[t];return e[t]=void 0,2*(t+=1)>=e.length&&(this.queue=e.slice(t),t=0),this.offset=t,n}},e.prototype.peek=function(){return this.queue.length>0?this.queue[this.offset]:void 0},e}(),AC=function(){function e(){this.promise=Promise.resolve()}return e.prototype.queue=function(e){var t=this.promise.then(e,e);return this.promise=t,t},e}();function LC(){var e={promise:null,resolve:null,reject:null};return e.promise=new Promise((function(t,n){e.resolve=t,e.reject=n})),e}function PC(e,t,n){var i=this;void 0===n&&(n=t);var r=null,o=0,a=null;return function(){return v(i,void 0,Promise,(function(){var i=this;return y(this,(function(s){return a?[2,a]:r&&o>Date.now()?[2,r]:[2,a=v(i,void 0,void 0,(function(){return y(this,(function(i){switch(i.label){case 0:o=Date.now()+n,i.label=1;case 1:return i.trys.push([1,3,,4]),[4,e()];case 2:return r=i.sent(),[3,4];case 3:return i.sent(),a=null,[2,null];case 4:return o=Date.now()+t,a=null,setTimeout((function(){o>Date.now()&&(r=null)}),t),[2,r]}}))}))]}))}))}}var IC=function(){function e(e){this.running=!1,this.cancelled=!1;var t=e||{},n=t.onStart,i=t.onStop,r=t.onCancel;this.onStart=n||null,this.onStop=i||null,this.onCancel=r||null}return e.prototype.start=function(){this.running||(this.running=!0,this.onStart&&this.onStart())},e.prototype.stop=function(){this.running&&(this.running=!1,this.onStop&&this.onStop())},e.prototype.cancel=function(){this.stop(),this.cancelled||(this.cancelled=!0,this.onCancel&&this.onCancel())},e.prototype.isRunning=function(){return this.running},e.prototype.isCancelled=function(){return this.cancelled},e}(),FC=function(){function e(e){this.items=new DC,this.promise=null,this.runnable=new IC(e)}return e.prototype.addList=function(e){this.items.enqueueArray(e),this.notify()},e.prototype.add=function(e){this.items.enqueue(e),this.notify()},e.prototype.remove=function(e){this.items.remove(e)},e.prototype.notify=function(){var e=this.promise;e&&(this.promise=null,setTimeout((function(){e&&e.resolve()}),0))},e.prototype.cancel=function(){this.runnable.cancel()},e.prototype.generator=function(){return C(this,arguments,(function(){var e,t;return y(this,(function(n){switch(n.label){case 0:e=this.runnable,n.label=1;case 1:return e.isCancelled()?[4,k(void 0)]:[3,3];case 2:return[2,n.sent()];case 3:return 0!==(t=this.items).length?[3,5]:(e.stop(),[4,k((this.promise=LC()).promise)]);case 4:return n.sent(),[3,8];case 5:return e.start(),[4,k(t.dequeue())];case 6:return[4,n.sent()];case 7:n.sent(),n.label=8;case 8:return[3,1];case 9:return[2]}}))}))},e}();function OC(e){return C(this,arguments,(function(){var t,n;return y(this,(function(i){switch(i.label){case 0:t=0,n=e,i.label=1;case 1:return ta?(c&&c(f),[4,k(new Promise((function(e){return Rw(e,l)})))]):[3,7];case 6:y.sent(),h=performance.now(),y.label=7;case 7:return[3,2];case 8:return[3,15];case 9:return m=y.sent(),g={error:m},[3,15];case 10:return y.trys.push([10,,13,14]),d&&!d.done&&(v=p.return)?[4,k(v.call(p))]:[3,12];case 11:y.sent(),y.label=12;case 12:return[3,14];case 13:if(g)throw g.error;return[7];case 14:return[7];case 15:return[2]}}))}))}var NC=function(){function e(){this.promises=[]}return e.prototype.add=function(e){this.promises.push(e())},e.prototype.addPromise=function(e){this.promises.push(e)},e.prototype.isEmpty=function(){return 0===this.promises.length},e.prototype.promise=function(){return Promise.all(this.promises)},e}();function RC(e){return new Promise((function(t){return e.then(t,t)}))}var HC=nC("/lib/pdf.min.js",{after:function(){window.pdfjsLib.GlobalWorkerOptions.workerSrc="/lib/pdf.worker.min.js"}});function VC(){return v(this,void 0,Promise,(function(){return y(this,(function(e){switch(e.label){case 0:return[4,HC.promise];case 1:return e.sent(),[2,window.pdfjsLib]}}))}))}var zC=nC("/lib/codemirror/modes.min.js"),qC=nC("/lib/mermaid.min.js",{after:function(){mermaid.initialize({startOnLoad:!1,theme:"base",themeCSS:"foreignObject{overflow: visible}#arrowhead,#sequencenumber,.cluster text,.label text,text,text.actor{fill:var(--text-normal)}line{stroke:var(--text-normal)}g>g>circle,g>g>path{stroke:var(--background-accent);color:var(--text-normal)}.label rect{display:none}.cluster rect{stroke-width:1px}.node circle,.node ellipse,.node path,.node polygon,.node rect{fill:var(--background-secondary-alt);stroke:var(--background-modifier-border);stroke-width:1px}.node .label{text-align:center}.node.clickable{cursor:pointer}.arrowheadPath{fill:var(--text-muted)}.edgePath .path{stroke:var(--text-muted);stroke-width:1.5px}.edgeLabel{background-color:var(--background-primary);text-align:center}.cluster rect{fill:var(--background-primary-alt);stroke:var(--background-modifier-border)}div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-size:12px;background:var(--background-secondary);border:1px solid var(--interactive-accent);border-radius:2px;pointer-events:none;z-index:100}.actor{stroke:var(--background-modifier-border);fill:var(--background-secondary-alt);font-family:inherit!important}text.actor{stroke:none}.actor-line{stroke:var(--text-muted)}.messageLine0,.messageLine1{stroke-width:1.5;stroke-dasharray:'2 2';stroke:var(--text-normal)}.sequenceNumber{fill:#fff}#crosshead path{fill:var(--text-normal)!important;stroke:var(--text-normal)!important}.messageText{fill:var(--text-normal);stroke:none;font-family:inherit!important}.labelBox{stroke:var(--background-modifier-border);fill:var(--background-secondary-alt)}.labelText,.loopText{fill:var(--text-normal);stroke:none}.loopLine{stroke-width:2;stroke-dasharray:'2 2';stroke:var(--background-modifier-border)}.activation0,.activation1,.activation2{fill:var(--background-secondary) stroke: var(--text-muted)}.section{stroke:none;opacity:.2}.section0,.section2{fill:var(--text-accent)}.section1,.section3{fill:#fff;opacity:.2}.sectionTitle0,.sectionTitle1,.sectionTitle2,.sectionTitle3{fill:var(--text-normal)}.sectionTitle{text-anchor:start;font-size:11px;text-height:14px}.grid .tick{stroke:var(--background-primary-alt);opacity:.8;shape-rendering:crispEdges}.grid path{stroke-width:0}.today{fill:none;stroke:#d42;stroke-width:2px}.task{stroke-width:2}.taskText{text-anchor:middle}.taskText:not([font-size]){font-size:11px}.taskTextOutsideRight{fill:var(--text-normal);text-anchor:start;font-size:11px}.taskTextOutsideLeft{fill:var(--text-normal);text-anchor:end;font-size:11px}.task.clickable,g.clickable{cursor:pointer}.taskText.clickable,.taskTextOutsideLeft.clickable,.taskTextOutsideRight.clickable{cursor:pointer;fill:#003163!important;font-weight:700}.taskText0,.taskText1,.taskText2,.taskText3{fill:#fff}.task0,.task1,.task2,.task3{fill:var(--interactive-accent);stroke:var(--interactive-accent)}.taskTextOutside0,.taskTextOutside1,.taskTextOutside2,.taskTextOutside3{fill:var(--text-normal)}.active0,.active1,.active2,.active3,g.classGroup rect,g.stateGroup rect{fill:var(--background-primary-alt); stroke: var(--background-modifier-border)}g.classGroup rect,g.stateGroup rect{stroke:var(--background-modifier-border)}.activeText0,.activeText1,.activeText2,.activeText3{fill:var(--text-normal)!important}.done0,.done1,.done2,.done3{stroke:var(--text-muted);fill:#bbb;stroke-width:2}.doneText0,.doneText1,.doneText2,.doneText3{fill:var(--text-normal)!important}.crit0,.crit1,.crit2,.crit3{stroke:#b1361b;fill:#d42;stroke-width:2}.activeCrit0,.activeCrit1,.activeCrit2,.activeCrit3,.classLabel .box{stroke:#b1361b;fill:var(--background-secondary-alt);stroke-width:2}.classLabel .box{stroke:none;stroke-width:0;opacity:.5}.doneCrit0,.doneCrit1,.doneCrit2,.doneCrit3{stroke:#b1361b;fill:#bbb;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}.milestone{transform:rotate(45deg) scale(.8,.8)}.milestoneText{font-style:italic}.activeCritText0,.activeCritText1,.activeCritText2,.activeCritText3,.doneCritText0,.doneCritText1,.doneCritText2,.doneCritText3{fill:var(--text-normal)!important}.titleText{text-anchor:middle;font-size:18px;fill:var(--text-normal)}g.classGroup text{fill:var(--text-normal);stroke:none;font-size:11px}g.classGroup text .title{font-weight:bolder}#aggregationEnd,#aggregationStart,#compositionEnd,#compositionStart,.relation,g.classGroup line,g.stateGroup line{stroke:var(--background-modifier-border);stroke-width:1}.classLabel .label{font-size:11px}.relation{fill:none}.dashed-line{stroke-dasharray:3}#compositionEnd,#compositionStart{fill:var(--background-modifier-border)}#aggregationEnd,#aggregationStart{fill:var(--background-secondary-alt)}#dependencyEnd,#dependencyStart,#extensionEnd,#extensionStart{fill:var(--background-modifier-border);stroke:var(--background-modifier-border);stroke-width:1}.branch-label,.commit-id,.commit-msg{fill:#d3d3d3;color:#d3d3d3}.pieTitleText{text-anchor:middle;font-size:25px;fill:var(--text-normal)}.state-note text,g.stateGroup text{stroke:none;font-size:10px}g.stateGroup .state-title{font-weight:bolder;fill:var(--text-normal)}.transition{stroke:var(--background-modifier-border);stroke-width:1;fill:none}.stateGroup .composit{fill:#fff;border-bottom:1px}.stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}.state-note{stroke:#645c10;fill:#f3edb3}.state-note text{fill:#000}.stateLabel .box{stroke:none;stroke-width:0;fill:var(--background-secondary-alt);opacity:.5}.stateLabel text{fill:var(--text-normal);font-size:10px;font-weight:700}.node circle.state-start{fill:var(--text-normal);stroke:var(--text-normal)}.node circle.state-end{stroke:var(--background-primary);stroke-width:2}#statediagram-barbEnd,g.stateGroup text{fill:var(--background-modifier-border)}.statediagram-cluster rect{stroke-width:1px}.statediagram-cluster rect,.statediagram-state .divider{stroke:var(--background-modifier-border)}.statediagram-cluster rect,.statediagram-cluster.statediagram-cluster .inner{fill:var(--background-secondary-alt)}.statediagram-cluster.statediagram-cluster-alt .inner{fill:var(--background-secondary)}.cluster-label text,.node circle.state-end{fill:var(--text-normal)}.statediagram-state rect.divider{stroke-dasharray:10,10;fill:var(--background-secondary)}.note-edge{stroke-dasharray:5}.statediagram-note rect{fill:#f3edb3;stroke:#645c10;stroke-width:1px}.error-icon{fill:var(--background-modifier-error)}.error-text{fill:var(--text-error);stroke:var(--text-error)}",flowchart:{useMaxWidth:!1},sequence:{useMaxWidth:!1},gantt:{useMaxWidth:!0,axisFormatter:[["%Y-%m-%d",function(e){return 1===e.getDay()}]]},journey:{useMaxWidth:!1},class:{useMaxWidth:!0},git:{useMaxWidth:!1},state:{useMaxWidth:!0},er:{useMaxWidth:!1},pie:{useMaxWidth:!0}}),mermaid.mermaidAPI.updateSiteConfig({themeVariables:{primaryColor:"var(--background-primary-alt)",fontFamily:"var(--font-mermaid)",secondaryColor:"var(--background-secondary)",tertiaryColor:"var(--background-secondary-alt)",primaryBorderColor:"var(--background-modifier-border)",primaryTextColor:"var(--text-normal)",secondaryBorderColor:"var(--background-modifier-border)",secondaryTextColor:"var(--text-normal)",tertiaryBorderColor:"var(--background-modifier-border)",tertiaryTextColor:"var(--text-normal)",noteBkgColor:"var(--background-primary-alt)",noteTextColor:"var(--text-normal)",noteBorderColor:"var(--background-modifier-border)",lineColor:"var(--text-normal)",textColor:"var(--text-normal)",mainBkg:"var(--background-primary)",errorBkgColor:"var(--background-primary)",errorTextColor:"var(--text-error)",taskTextDarkColor:"var(--text)",nodeBorder:"var(--text-muted)",actorTextColor:"var(--text-normal)",taskTextColor:"var(--text-normal)",requirementTextColor:"var(--text-normal)",tagLabelColor:"var(--text-normal)",transitionLabelColor:"var(--text-normal)",pieSectionTextColor:"var(--text-normal)",classText:"var(--text-normal)",stateLabelColor:"var(--text-normal)",nodeTextColor:"var(--text-normal)",signalTextColor:"var(--text-normal)",titleColor:"var(--text-normal)",edgeLabelBackground:"var(--background-secondary)",activationBorderColor:"var(--background-modifier-border)",sequenceNumberColor:"var(--text-muted)",activeTaskBkgColor:"var(--background-primary-alt)",fillType2:"var(--background-primary-alt)",fillType3:"var(--background-primary-alt)",fillType4:"var(--background-primary-alt)",fillType5:"var(--background-primary-alt)",fillType6:"var(--background-primary-alt)",fillType7:"var(--background-primary-alt)",pie1:"#8dd3c7",pie2:"#ffffb3",pie3:"#bebada",pie4:"#fb8072",pie5:"#80b1d3",pie6:"#fdb462",pie7:"#b3de69",pie8:"#fccde5",pie9:"#d9d9d9",pie10:"#bc80bd",pie11:"#ccebc5",pie12:"#ffed6f",git0:"var(--color-red)",git1:"var(--color-orange)",git2:"var(--color-yellow)",git3:"var(--color-green)",git4:"var(--color-cyan)",git5:"var(--color-blue)",git6:"var(--color-purple)",git7:"var(--color-pink)"}})}});function UC(){return v(this,void 0,Promise,(function(){return y(this,(function(e){switch(e.label){case 0:return[4,qC.promise];case 1:return e.sent(),[2,mermaid]}}))}))}var _C=nC("/lib/prism.min.js");function jC(){return v(this,void 0,Promise,(function(){return y(this,(function(e){switch(e.label){case 0:return[4,_C.promise];case 1:return e.sent(),[2,Prism]}}))}))}var WC=nC("/lib/mathjax/tex-chtml-full.js",{before:function(){window.MathJax={tex:{inlineMath:[],displayMath:[],processEscapes:!1,processEnvironments:!1,processRefs:!1},startup:{typeset:!1},options:{enableMenu:!1,menuOptions:{settings:{renderer:"CHTML"}}}},localStorage.removeItem("MathJax-Menu-Settings")}});function GC(){return v(this,void 0,Promise,(function(){return y(this,(function(e){switch(e.label){case 0:return[4,WC.promise];case 1:return e.sent(),[2]}}))}))}function KC(e,t){return MathJax.tex2chtml(e,{display:t})}var YC=null,XC=0,$C=null,ZC=function(){var e=MathJax.chtmlStylesheet();$C&&e===$C||($C&&$C.detach(),$C=e,document.head.appendChild(e)),$C.dataset.change="1"===$C.dataset.change?"2":"1",YC.resolve(),YC=null};function QC(){return YC||(YC=LC()),clearTimeout(XC),XC=window.setTimeout(ZC,100),YC.promise}var JC=n(773),ex=n.n(JC),tx=n(6630),nx=n.n(tx),ix=n(939),rx=n.n(ix);const ox=Symbol.for("yaml.alias"),ax=Symbol.for("yaml.document"),sx=Symbol.for("yaml.map"),lx=Symbol.for("yaml.pair"),cx=Symbol.for("yaml.scalar"),ux=Symbol.for("yaml.seq"),hx=Symbol.for("yaml.node.type"),px=e=>!!e&&"object"==typeof e&&e[hx]===ox,dx=e=>!!e&&"object"==typeof e&&e[hx]===ax,fx=e=>!!e&&"object"==typeof e&&e[hx]===sx,mx=e=>!!e&&"object"==typeof e&&e[hx]===lx,gx=e=>!!e&&"object"==typeof e&&e[hx]===cx,vx=e=>!!e&&"object"==typeof e&&e[hx]===ux;function yx(e){if(e&&"object"==typeof e)switch(e[hx]){case sx:case ux:return!0}return!1}function bx(e){if(e&&"object"==typeof e)switch(e[hx]){case ox:case sx:case cx:case ux:return!0}return!1}class wx{constructor(e){Object.defineProperty(this,hx,{value:e})}}const kx=Symbol("break visit"),Cx=Symbol("skip children"),xx=Symbol("remove node");function Ex(e,t){if(dx(e)){Sx(null,e.contents,t,Object.freeze([e]))===xx&&(e.contents=null)}else Sx(null,e,t,Object.freeze([]))}function Sx(e,t,n,i){let r;if("function"==typeof n?r=n(e,t,i):fx(t)?n.Map&&(r=n.Map(e,t,i)):vx(t)?n.Seq&&(r=n.Seq(e,t,i)):mx(t)?n.Pair&&(r=n.Pair(e,t,i)):gx(t)?n.Scalar&&(r=n.Scalar(e,t,i)):px(t)&&n.Alias&&(r=n.Alias(e,t,i)),bx(r)||mx(r)){const t=i[i.length-1];if(yx(t))t.items[e]=r;else if(mx(t))"key"===e?t.key=r:t.value=r;else{if(!dx(t)){const e=px(t)?"alias":"scalar";throw new Error(`Cannot replace node with ${e} parent`)}t.contents=r}return Sx(e,r,n,i)}if("symbol"!=typeof r)if(yx(t)){i=Object.freeze(i.concat(t));for(let e=0;e"!==e[e.length-1]&&t("Verbatim tags must end with a >"),n)}const[,n,i]=e.match(/^(.*!)([^!]*)$/);i||t(`The ${e} tag has no suffix`);const r=this.tags[n];return r?r+decodeURIComponent(i):"!"===n?e:(t(`Could not resolve tag: ${e}`),null)}tagString(e){for(const[t,n]of Object.entries(this.tags))if(e.startsWith(n))return t+e.substring(n.length).replace(/[!,[\]{}]/g,(e=>Mx[e]));return"!"===e[0]?e:`!<${e}>`}toString(e){const t=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],n=Object.entries(this.tags);let i;if(e&&n.length>0&&bx(e.contents)){const t={};Ex(e.contents,((e,n)=>{bx(n)&&n.tag&&(t[n.tag]=!0)})),i=Object.keys(t)}else i=[];for(const[r,o]of n)"!!"===r&&"tag:yaml.org,2002:"===o||e&&!i.some((e=>e.startsWith(o)))||t.push(`%TAG ${r} ${o}`);return t.join("\n")}}function Dx(e,t,n){if(Array.isArray(e))return e.map(((e,t)=>Dx(e,String(t),n)));if(e&&"function"==typeof e.toJSON){if(!n)return e.toJSON(t);const i=n.anchors&&n.anchors.get(e);i&&(n.onCreate=e=>{i.res=e,delete n.onCreate});const r=e.toJSON(t,n);return i&&n.onCreate&&n.onCreate(r),r}return n&&n.keep||"bigint"!=typeof e?e:Number(e)}Tx.defaultYaml={explicit:!1,version:"1.2"},Tx.defaultTags={"!!":"tag:yaml.org,2002:"};class Ax extends wx{constructor(e){super(ox),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}toJSON(e,t){if(!t)return Dx(this.source,"string"==typeof e?e:null,t);const{anchors:n,maxAliasCount:i}=t,r=n&&n.get(this.source);if(!r||void 0===r.res){throw new ReferenceError("This should not happen: Alias anchor was not resolved?")}if(i>=0&&(r.count+=1,0===r.aliasCount&&(r.aliasCount=Lx(this.source,n)),r.count*r.aliasCount>i)){throw new ReferenceError("Excessive alias count indicates a resource exhaustion attack")}return r.res}toString({anchors:e,doc:t,implicitKey:n,inStringifyKey:i},r,o){let a=Object.keys(e).find((t=>e[t]===this.source));if(!a&&i&&(a=t.anchors.getName(this.source)||t.anchors.newName()),a)return`*${a}${n?" ":""}`;const s=t.anchors.getName(this.source)?"Alias node must be after source node":"Source node not found for alias node";throw new Error(`${s} [${this.range}]`)}}function Lx(e,t){if(px(e)){const n=t&&t.get(e.source);return n?n.count*n.aliasCount:0}if(yx(e)){let n=0;for(const i of e.items){const e=Lx(i,t);e>n&&(n=e)}return n}if(mx(e)){const n=Lx(e.key,t),i=Lx(e.value,t);return Math.max(n,i)}return 1}const Px=e=>!e||"function"!=typeof e&&"object"!=typeof e;class Ix extends wx{constructor(e){super(cx),this.value=e}toJSON(e,t){return t&&t.keep?this.value:Dx(this.value,e,t)}toString(){return String(this.value)}}Ix.BLOCK_FOLDED="BLOCK_FOLDED",Ix.BLOCK_LITERAL="BLOCK_LITERAL",Ix.PLAIN="PLAIN",Ix.QUOTE_DOUBLE="QUOTE_DOUBLE",Ix.QUOTE_SINGLE="QUOTE_SINGLE";function Fx(e,t,n){var i,r;if(bx(e))return e;if(mx(e)){const t=null===(r=(i=n.schema.map).createNode)||void 0===r?void 0:r.call(i,n.schema,null,n);return t.items.push(e),t}(e instanceof String||e instanceof Number||e instanceof Boolean||"function"==typeof BigInt&&e instanceof BigInt)&&(e=e.valueOf());const{onAlias:o,onTagObj:a,prevObjects:s}=n,{map:l,seq:c,tags:u}=n.schema;t&&t.startsWith("!!")&&(t="tag:yaml.org,2002:"+t.slice(2));let h=function(e,t,n){if(t){const e=n.filter((e=>e.tag===t)),i=e.find((e=>!e.format))||e[0];if(!i)throw new Error(`Tag ${t} not found`);return i}return n.find((t=>t.identify&&t.identify(e)&&!t.format))}(e,t,u);if(!h){if(e&&"function"==typeof e.toJSON&&(e=e.toJSON()),!e||"object"!=typeof e)return new Ix(e);h=e instanceof Map?l:Symbol.iterator in Object(e)?c:l}a&&(a(h),delete n.onTagObj);const p={value:void 0,node:void 0};if(e&&"object"==typeof e){const t=s.get(e);if(t)return o(t);p.value=e,s.set(e,p)}const d=(null==h?void 0:h.createNode)?h.createNode(n.schema,e,n):new Ix(e);return t&&(d.tag=t),p.node=d,d}function Ox(e,t,n){return n?n.includes("\n")?`${e}\n`+n.replace(/^/gm,`${t||""}#`):e.endsWith(" ")?`${e}#${n}`:`${e} #${n}`:e}const Bx="flow",Nx="block",Rx="quoted";function Hx(e,t,n="flow",{indentAtStart:i,lineWidth:r=80,minContentWidth:o=20,onFold:a,onOverflow:s}={}){if(!r||r<0)return e;const l=Math.max(1+o,1+r-t.length);if(e.length<=l)return e;const c=[],u={};let h,p,d=r-t.length;"number"==typeof i&&(i>r-Math.max(2,o)?c.push(0):d=r-i);let f,m=!1,g=-1,v=-1,y=-1;for(n===Nx&&(g=Vx(e,g),-1!==g&&(d=g+l));f=e[g+=1];){if(n===Rx&&"\\"===f){switch(v=g,e[g+1]){case"x":g+=3;break;case"u":g+=5;break;case"U":g+=9;break;default:g+=1}y=g}if("\n"===f)n===Nx&&(g=Vx(e,g)),d=g+l,h=void 0;else{if(" "===f&&p&&" "!==p&&"\n"!==p&&"\t"!==p){const t=e[g+1];t&&" "!==t&&"\n"!==t&&"\t"!==t&&(h=g)}if(g>=d)if(h)c.push(h),d=h+l,h=void 0;else if(n===Rx){for(;" "===p||"\t"===p;)p=f,f=e[g+=1],m=!0;const t=g>y+1?g-2:v-1;if(u[t])return e;c.push(t),u[t]=!0,d=t+l,h=void 0}else m=!0}p=f}if(m&&s&&s(),0===c.length)return e;a&&a();let b=e.slice(0,c[0]);for(let i=0;i({indentAtStart:e.indentAtStart,lineWidth:e.options.lineWidth,minContentWidth:e.options.minContentWidth}),qx=e=>/^(%|---|\.\.\.)/m.test(e);function Ux(e,t){const n=JSON.stringify(e);if(t.options.doubleQuotedAsJSON)return n;const{implicitKey:i}=t,r=t.options.doubleQuotedMinMultiLineLength,o=t.indent||(qx(e)?" ":"");let a="",s=0;for(let e=0,t=n[e];t;t=n[++e])if(" "===t&&"\\"===n[e+1]&&"n"===n[e+2]&&(a+=n.slice(s,e)+"\\ ",e+=1,s=e,t="\\"),"\\"===t)switch(n[e+1]){case"u":{a+=n.slice(s,e);const t=n.substr(e+2,4);switch(t){case"0000":a+="\\0";break;case"0007":a+="\\a";break;case"000b":a+="\\v";break;case"001b":a+="\\e";break;case"0085":a+="\\N";break;case"00a0":a+="\\_";break;case"2028":a+="\\L";break;case"2029":a+="\\P";break;default:"00"===t.substr(0,2)?a+="\\x"+t.substr(2):a+=n.substr(e,6)}e+=5,s=e+1}break;case"n":if(i||'"'===n[e+2]||n.lengthi)return!0;if(n=t+1,r-n<=i)return!1}return!0}(n,i.options.lineWidth,a.length));let c=l?"|":">";if(!n)return c+"\n";let u="",h="";if(n=n.replace(/[\n\t ]*$/,(e=>{const t=e.indexOf("\n");return-1===t?c+="-":n!==e&&t===e.length-1||(c+="+",o&&o()),h=e.replace(/\n$/,""),""})).replace(/^[\n ]*/,(e=>{-1!==e.indexOf(" ")&&(c+=s);const t=e.match(/ +$/);return t?(u=e.slice(0,-t[0].length),t[0]):(u=e,"")})),h&&(h=h.replace(/\n+(?!\n|$)/g,`$&${a}`)),u&&(u=u.replace(/\n+/g,`$&${a}`)),e&&(c+=" #"+e.replace(/ ?[\r\n]+/g," "),r&&r()),!n)return`${c}${s}\n${a}${h}`;if(l)return n=n.replace(/\n+/g,`$&${a}`),`${c}\n${a}${u}${n}${h}`;n=n.replace(/\n+/g,"\n$&").replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${a}`);const p=Hx(`${u}${n}${h}`,a,Nx,zx(i));return`${c}\n${a}${p}`}function Wx(e,t,n,i){const{implicitKey:r,inFlow:o}=t,a="string"==typeof e.value?e:Object.assign({},e,{value:String(e.value)});let{type:s}=e;s!==Ix.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(a.value)&&(s=Ix.QUOTE_DOUBLE);const l=e=>{switch(e){case Ix.BLOCK_FOLDED:case Ix.BLOCK_LITERAL:return r||o?Ux(a.value,t):jx(a,t,n,i);case Ix.QUOTE_DOUBLE:return Ux(a.value,t);case Ix.QUOTE_SINGLE:return _x(a.value,t);case Ix.PLAIN:return function(e,t,n,i){var r;const{comment:o,type:a,value:s}=e,{actualString:l,implicitKey:c,indent:u,inFlow:h}=t;if(c&&/[\n[\]{},]/.test(s)||h&&/[[\]{},]/.test(s))return Ux(s,t);if(!s||/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(s)){const r=-1!==s.indexOf('"'),o=-1!==s.indexOf("'");let a;return a=r&&!o?_x:o&&!r?Ux:t.options.singleQuote?_x:Ux,c||h||-1===s.indexOf("\n")?a(s,t):jx(e,t,n,i)}if(!c&&!h&&a!==Ix.PLAIN&&-1!==s.indexOf("\n"))return jx(e,t,n,i);if(""===u&&qx(s))return t.forceBlockIndent=!0,jx(e,t,n,i);const p=s.replace(/\n+/g,`$&\n${u}`);if(l)for(const e of t.doc.schema.tags)if(e.default&&"tag:yaml.org,2002:str"!==e.tag&&(null===(r=e.test)||void 0===r?void 0:r.test(p)))return Ux(s,t);const d=c?p:Hx(p,u,Bx,zx(t));return!o||h||-1===d.indexOf("\n")&&-1===o.indexOf("\n")?d:(n&&n(),function(e,t,n){return n?`#${n.replace(/[\s\S]^/gm,`$&${t}#`)}\n${t}${e}`:e}(d,u,o))}(a,t,n,i);default:return null}};let c=l(s);if(null===c){const{defaultKeyType:e,defaultStringType:n}=t.options,i=r&&e||n;if(c=l(i),null===c)throw new Error(`Unsupported default string type ${i}`)}return c}const Gx=(e,t)=>({anchors:Object.create(null),doc:e,indent:"",indentStep:"number"==typeof t.indent?" ".repeat(t.indent):" ",options:Object.assign({defaultKeyType:null,defaultStringType:"PLAIN",directives:null,doubleQuotedAsJSON:!1,doubleQuotedMinMultiLineLength:40,falseStr:"false",indentSeq:!0,lineWidth:80,minContentWidth:20,nullStr:"null",simpleKeys:!1,singleQuote:!1,trueStr:"true"},t)});function Kx(e,t,n,i){if(mx(e))return e.toString(t,n,i);if(px(e))return e.toString(t);let r;const o=bx(e)?e:t.doc.createNode(e,{onTagObj:e=>r=e});r||(r=function(e,t){if(t.tag){const n=e.filter((e=>e.tag===t.tag));if(n.length>0)return n.find((e=>e.format===t.format))||n[0]}let n,i;if(gx(t)){i=t.value;const r=e.filter((e=>e.identify&&e.identify(i)));n=r.find((e=>e.format===t.format))||r.find((e=>!e.format))}else i=t,n=e.find((e=>e.nodeClass&&i instanceof e.nodeClass));if(!n){const e=i&&i.constructor?i.constructor.name:typeof i;throw new Error(`Tag not resolved for ${e} value`)}return n}(t.doc.schema.tags,o));const a=function(e,t,{anchors:n,doc:i}){const r=[],o=i.anchors.getName(e);return o&&(n[o]=e,r.push(`&${o}`)),e.tag?r.push(i.directives.tagString(e.tag)):t.default||r.push(i.directives.tagString(t.tag)),r.join(" ")}(o,r,t);a.length>0&&(t.indentAtStart=(t.indentAtStart||0)+a.length+1);const s="function"==typeof r.stringify?r.stringify(o,t,n,i):gx(o)?Wx(o,t,n,i):o.toString(t,n,i);return a?gx(o)||"{"===s[0]||"["===s[0]?`${a} ${s}`:`${a}\n${t.indent}${s}`:s}function Yx(e,t,n){let i=n;for(let e=t.length-1;e>=0;--e){const n=t[e];if("number"==typeof n&&Number.isInteger(n)&&n>=0){const e=[];e[n]=i,i=e}else{const e={};Object.defineProperty(e,"symbol"==typeof n?n:String(n),{value:i,writable:!0,enumerable:!0,configurable:!0}),i=e}}return Fx(i,void 0,{onAlias(){throw new Error("Repeated objects are not supported here")},prevObjects:new Map,schema:e})}const Xx=e=>null==e||"object"==typeof e&&!!e[Symbol.iterator]().next().done;class $x extends wx{constructor(e,t){super(e),Object.defineProperty(this,"schema",{value:t,configurable:!0,enumerable:!1,writable:!0})}addIn(e,t){if(Xx(e))this.add(t);else{const[n,...i]=e,r=this.get(n,!0);if(yx(r))r.addIn(i,t);else{if(void 0!==r||!this.schema)throw new Error(`Expected YAML collection at ${n}. Remaining path: ${i}`);this.set(n,Yx(this.schema,i,t))}}}deleteIn([e,...t]){if(0===t.length)return this.delete(e);const n=this.get(e,!0);if(yx(n))return n.deleteIn(t);throw new Error(`Expected YAML collection at ${e}. Remaining path: ${t}`)}getIn([e,...t],n){const i=this.get(e,!0);return 0===t.length?!n&&gx(i)?i.value:i:yx(i)?i.getIn(t,n):void 0}hasAllNullValues(e){return this.items.every((t=>{if(!t||bx(t))return!1;const n=t.value;return null==n||e&&gx(n)&&null==n.value&&!n.commentBefore&&!n.comment&&!n.tag}))}hasIn([e,...t]){if(0===t.length)return this.has(e);const n=this.get(e,!0);return!!yx(n)&&n.hasIn(t)}setIn([e,...t],n){if(0===t.length)this.set(e,n);else{const i=this.get(e,!0);if(yx(i))i.setIn(t,n);else{if(void 0!==i||!this.schema)throw new Error(`Expected YAML collection at ${e}. Remaining path: ${t}`);this.set(e,Yx(this.schema,t,n))}}}_toString(e,{blockItem:t,flowChars:n,itemIndent:i},r,o){const{indent:a,indentStep:s}=e,l=this.flow||e.inFlow;l&&(i+=s),e=Object.assign({},e,{indent:i,inFlow:l,type:null});let c=!1,u=!1;const h=this.items.reduce(((t,n,r)=>{let o=null;if(bx(n)||mx(n)){if(!c&&n.spaceBefore&&t.push({type:"comment",str:""}),n.commentBefore)for(const e of n.commentBefore.match(/^.*$/gm))t.push({type:"comment",str:`#${e}`});n.comment&&(o=n.comment);const e=n;l&&(!c&&n.spaceBefore||n.commentBefore||n.comment||e.key&&(e.key.commentBefore||e.key.comment)||e.value&&(e.value.commentBefore||e.value.comment))&&(u=!0)}c=!1;let a=Kx(n,e,(()=>o=null),(()=>c=!0));return l&&!u&&a.includes("\n")&&(u=!0),l&&re.str));if(u||i.reduce(((e,t)=>e+t.length+2),2)>$x.maxFlowStringSingleLineLength){p=e;for(const e of i)p+=e?`\n${s}${a}${e}`:"\n";p+=`\n${a}${t}`}else p=`${e} ${i.join(" ")} ${t}`}else{const e=h.map(t);p=e.shift()||"";for(const t of e)p+=t?`\n${a}${t}`:"\n"}return this.comment?(p+="\n"+this.comment.replace(/^/gm,`${a}#`),r&&r()):c&&o&&o(),p}}function Zx(e,t){"debug"!==e&&"warn"!==e||("undefined"!=typeof process&&process.emitWarning?process.emitWarning(t):console.warn(t))}function Qx(e,t,n){const i=Fx(e,void 0,n),r=Fx(t,void 0,n);return new eE(i,r)}$x.maxFlowStringSingleLineLength=60;function Jx(e,t,n){if(!px(n)||!fx(n.source))throw new Error("Merge sources must be map aliases");const i=n.source.toJSON(null,e,Map);for(const[e,n]of i)t instanceof Map?t.has(e)||t.set(e,n):t instanceof Set?t.add(e):Object.prototype.hasOwnProperty.call(t,e)||Object.defineProperty(t,e,{value:n,writable:!0,enumerable:!0,configurable:!0});return t}class eE extends wx{constructor(e,t=null){super(lx),this.key=e,this.value=t}get commentBefore(){return bx(this.key)?this.key.commentBefore:void 0}set commentBefore(e){if(null==this.key&&(this.key=new Ix(null)),!bx(this.key)){throw new Error("Pair.commentBefore is an alias for Pair.key.commentBefore. To set it, the key must be a Node.")}this.key.commentBefore=e}get spaceBefore(){return bx(this.key)?this.key.spaceBefore:void 0}set spaceBefore(e){if(null==this.key&&(this.key=new Ix(null)),!bx(this.key)){throw new Error("Pair.spaceBefore is an alias for Pair.key.spaceBefore. To set it, the key must be a Node.")}this.key.spaceBefore=e}addToJSMap(e,t){if(e&&e.doc.schema.merge&&(e=>e===eE.MERGE_KEY||gx(e)&&e.value===eE.MERGE_KEY&&(!e.type||e.type===Ix.PLAIN))(this.key))if(vx(this.value))for(const n of this.value.items)Jx(e,t,n);else if(Array.isArray(this.value))for(const n of this.value)Jx(e,t,n);else Jx(e,t,this.value);else{const n=Dx(this.key,"",e);if(t instanceof Map){const i=Dx(this.value,n,e);t.set(n,i)}else if(t instanceof Set)t.add(n);else{const i=function(e,t,n){if(null===t)return"";if("object"!=typeof t)return String(t);if(bx(e)&&n&&n.doc){const t=Gx(n.doc,{});t.inFlow=!0,t.inStringifyKey=!0;const i=e.toString(t);if(!n.mapKeyWarned){let e=JSON.stringify(i);e.length>40&&(e=e.substring(0,36)+'..."'),Zx(n.doc.options.logLevel,`Keys with collection values will be stringified due to JS Object restrictions: ${e}. Set mapAsMap: true to use object keys.`),n.mapKeyWarned=!0}return i}return JSON.stringify(t)}(this.key,n,e),r=Dx(this.value,i,e);i in t?Object.defineProperty(t,i,{value:r,writable:!0,enumerable:!0,configurable:!0}):t[i]=r}}return t}toJSON(e,t){const n=t&&t.mapAsMap?new Map:{};return this.addToJSMap(t,n)}toString(e,t,n){if(!e||!e.doc)return JSON.stringify(this);const{allNullValues:i,doc:r,indent:o,indentStep:a,options:{indentSeq:s,simpleKeys:l}}=e;let{key:c,value:u}=this,h=bx(c)&&c.comment||null;if(l){if(h)throw new Error("With simple keys, key nodes cannot have comments");if(yx(c)){throw new Error("With simple keys, collection cannot be used as a key value")}}let p=!l&&(!c||h&&null==u||yx(c)||(gx(c)?c.type===Ix.BLOCK_FOLDED||c.type===Ix.BLOCK_LITERAL:"object"==typeof c));e=Object.assign({},e,{allNullValues:!1,implicitKey:!p&&(l||!i),indent:o+a});let d=!1,f=Kx(c,e,(()=>h=null),(()=>d=!0));if(!p&&!e.inFlow&&f.length>1024){if(l)throw new Error("With simple keys, single line scalar must not span more than 1024 characters");p=!0}if(i&&(!l||e.inFlow)||null==u&&(p||e.inFlow))return f=Ox(f,e.indent,h),this.comment?(h&&!this.comment.includes("\n")?f+=`\n${e.indent||""}#${this.comment}`:f=Ox(f,e.indent,this.comment),t&&t()):d&&!h&&n&&n(),e.inFlow&&!p?f:`? ${f}`;f=p?`? ${Ox(f,e.indent,h)}\n${o}:`:Ox(`${f}:`,e.indent,h),this.comment&&(!h||p||this.comment.includes("\n")?f=Ox(f,e.indent,this.comment):f+=`\n${e.indent||""}#${this.comment}`,t&&t());let m="",g=null;if(bx(u)){if(u.spaceBefore&&(m="\n"),u.commentBefore){m+=`\n${u.commentBefore.replace(/^/gm,`${e.indent}#`)}`}g=u.comment}else u&&"object"==typeof u&&(u=r.createNode(u));e.implicitKey=!1,p||h||this.comment||!gx(u)||(e.indentAtStart=f.length+1),d=!1,s||!(a.length>=2)||e.inFlow||p||!vx(u)||u.flow||u.tag||r.anchors.getName(u)||(e.indent=e.indent.substr(2));const v=Kx(u,e,(()=>g=null),(()=>d=!0));let y=" ";if(m||h||this.comment)y=`${m}\n${e.indent}`;else if(!p&&yx(u)){("["===v[0]||"{"===v[0])&&!v.includes("\n")||(y=`\n${e.indent}`)}else"\n"===v[0]&&(y="");return d&&!g&&n&&n(),Ox(f+y+v,e.indent,g)}}eE.MERGE_KEY="<<";const tE={anchorPrefix:"a",intAsBigInt:!1,keepUndefined:!1,logLevel:"warn",prettyErrors:!0,strict:!0,version:"1.2"};class nE extends $x{constructor(e){super(ux,e),this.items=[]}static get tagName(){return"tag:yaml.org,2002:seq"}add(e){this.items.push(e)}delete(e){const t=iE(e);if("number"!=typeof t)return!1;return this.items.splice(t,1).length>0}get(e,t){const n=iE(e);if("number"!=typeof n)return;const i=this.items[n];return!t&&gx(i)?i.value:i}has(e){const t=iE(e);return"number"==typeof t&&t"comment"===e.type?e.str:`- ${e.str}`,flowChars:{start:"[",end:"]"},itemIndent:(e.indent||"")+" "},t,n):JSON.stringify(this)}}function iE(e){let t=gx(e)?e.value:e;return t&&"string"==typeof t&&(t=Number(t)),"number"==typeof t&&Number.isInteger(t)&&t>=0?t:null}class rE{constructor(e){this.map=Object.create(null),this.prefix=e}createAlias(e,t){return this.setAnchor(e,t),new Ax(e)}createMergePair(...e){const t=new Ix(eE.MERGE_KEY),n=e.map((e=>{if(px(e)){if(fx(e.source))return e}else if(fx(e))return this.createAlias(e);throw new Error("Merge sources must be Map nodes or their Aliases")}));if(1===n.length)return new eE(t,n[0]);const i=new nE;return i.items=n,new eE(t,i)}getName(e){return Object.keys(this.map).find((t=>this.map[t]===e))}getNames(){return Object.keys(this.map)}getNode(e){return this.map[e]}newName(e){e||(e=this.prefix);const t=Object.keys(this.map);for(let n=1;;++n){const i=`${e}${n}`;if(!t.includes(i))return i}}setAnchor(e,t){const{map:n}=this;if(!e)return t?(delete n[t],t):null;if(!gx(e)&&!yx(e))throw new Error("Anchors may only be set for Scalar, Seq and Map nodes");if(t){if(/[\x00-\x19\s,[\]{}]/.test(t))throw new Error("Anchor names must not contain whitespace or control characters");const i=n[t];i&&i!==e&&(n[this.newName(t)]=i)}const i=Object.keys(n).find((t=>n[t]===e));if(i){if(!t||i===t)return i;delete n[i]}else t||(t=this.newName());return n[t]=e,t}}function oE({format:e,minFractionDigits:t,tag:n,value:i}){if("bigint"==typeof i)return String(i);const r="number"==typeof i?i:Number(i);if(!isFinite(r))return isNaN(r)?".nan":r<0?"-.inf":".inf";let o=JSON.stringify(i);if(!e&&t&&(!n||"tag:yaml.org,2002:float"===n)&&/^\d/.test(o)){let e=o.indexOf(".");e<0&&(e=o.length,o+=".");let n=t-(o.length-e-1);for(;n-- >0;)o+="0"}return o}function aE(e,t){const n=gx(t)?t.value:t;for(const i of e)if(mx(i)){if(i.key===t||i.key===n)return i;if(gx(i.key)&&i.key.value===n)return i}}class sE extends $x{constructor(e){super(sx,e),this.items=[]}static get tagName(){return"tag:yaml.org,2002:map"}add(e,t){let n;n=mx(e)?e:new eE(e&&"object"==typeof e&&"key"in e?e.key:e,e.value);const i=aE(this.items,n.key),r=this.schema&&this.schema.sortMapEntries;if(i){if(!t)throw new Error(`Key ${n.key} already set`);gx(i.value)&&Px(n.value)?i.value.value=n.value:i.value=n.value}else if(r){const e=this.items.findIndex((e=>r(n,e)<0));-1===e?this.items.push(n):this.items.splice(e,0,n)}else this.items.push(n)}delete(e){const t=aE(this.items,e);if(!t)return!1;return this.items.splice(this.items.indexOf(t),1).length>0}get(e,t){const n=aE(this.items,e),i=n&&n.value;return!t&&gx(i)?i.value:i}has(e){return!!aE(this.items,e)}set(e,t){this.add(new eE(e,t),!0)}toJSON(e,t,n){const i=n?new n:t&&t.mapAsMap?new Map:{};t&&t.onCreate&&t.onCreate(i);for(const e of this.items)e.addToJSMap(t,i);return i}toString(e,t,n){if(!e)return JSON.stringify(this);for(const e of this.items)if(!mx(e))throw new Error(`Map items must all be pairs; found ${JSON.stringify(e)} instead`);return!e.allNullValues&&this.hasAllNullValues(!1)&&(e=Object.assign({},e,{allNullValues:!0})),super._toString(e,{blockItem:e=>e.str,flowChars:{start:"{",end:"}"},itemIndent:e.indent||""},t,n)}}const lE={collection:"map",createNode:function(e,t,n){const{keepUndefined:i,replacer:r}=n,o=new sE(e),a=(e,a)=>{if("function"==typeof r)a=r.call(t,e,a);else if(Array.isArray(r)&&!r.includes(e))return;(void 0!==a||i)&&o.items.push(Qx(e,a,n))};if(t instanceof Map)for(const[e,n]of t)a(e,n);else if(t&&"object"==typeof t)for(const e of Object.keys(t))a(e,t[e]);return"function"==typeof e.sortMapEntries&&o.items.sort(e.sortMapEntries),o},default:!0,nodeClass:sE,tag:"tag:yaml.org,2002:map",resolve:(e,t)=>(fx(e)||t("Expected a mapping for this tag"),e)};const cE={collection:"seq",createNode:function(e,t,n){const{replacer:i}=n,r=new nE(e);if(t&&Symbol.iterator in Object(t)){let e=0;for(let o of t){if("function"==typeof i){const n=t instanceof Set?o:String(e++);o=i.call(t,n,o)}r.items.push(Fx(o,void 0,n))}}return r},default:!0,nodeClass:nE,tag:"tag:yaml.org,2002:seq",resolve:(e,t)=>(vx(e)||t("Expected a sequence for this tag"),e)},uE=[lE,cE,{identify:e=>"string"==typeof e,default:!0,tag:"tag:yaml.org,2002:str",resolve:e=>e,stringify:(e,t,n,i)=>Wx(e,t=Object.assign({actualString:!0},t),n,i)}],hE=e=>"bigint"==typeof e||Number.isInteger(e),pE=(e,t,n,{intAsBigInt:i})=>i?BigInt(e):parseInt(e.substring(t),n);function dE(e,t,n){const{value:i}=e;return hE(i)&&i>=0?n+i.toString(t):oE(e)}const fE={identify:e=>null==e,createNode:()=>new Ix(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new Ix(null),stringify:({source:e},t)=>e&&fE.test.test(e)?e:t.options.nullStr},mE={identify:e=>"boolean"==typeof e,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:e=>new Ix("t"===e[0]||"T"===e[0]),stringify({source:e,value:t},n){if(e&&mE.test.test(e)){if(t===("t"===e[0]||"T"===e[0]))return e}return t?n.options.trueStr:n.options.falseStr}},gE={identify:e=>hE(e)&&e>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(e,t,n)=>pE(e,2,8,n),stringify:e=>dE(e,8,"0o")},vE={identify:hE,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(e,t,n)=>pE(e,0,10,n),stringify:oE},yE={identify:e=>hE(e)&&e>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(e,t,n)=>pE(e,2,16,n),stringify:e=>dE(e,16,"0x")},bE={identify:e=>"number"==typeof e,default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF|nan|NaN|NAN))$/,resolve:e=>"nan"===e.slice(-3).toLowerCase()?NaN:"-"===e[0]?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:oE},wE={identify:e=>"number"==typeof e,default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:e=>parseFloat(e),stringify:({value:e})=>Number(e).toExponential()},kE={identify:e=>"number"==typeof e,default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,resolve(e){const t=new Ix(parseFloat(e)),n=e.indexOf(".");return-1!==n&&"0"===e[e.length-1]&&(t.minFractionDigits=e.length-n-1),t},stringify:oE},CE=uE.concat([fE,mE,gE,vE,yE,bE,wE,kE]);function xE(e){return"bigint"==typeof e||Number.isInteger(e)}const EE=({value:e})=>JSON.stringify(e),SE=[lE,cE].concat([{identify:e=>"string"==typeof e,default:!0,tag:"tag:yaml.org,2002:str",resolve:e=>e,stringify:EE},{identify:e=>null==e,createNode:()=>new Ix(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:EE},{identify:e=>"boolean"==typeof e,default:!0,tag:"tag:yaml.org,2002:bool",test:/^true|false$/,resolve:e=>"true"===e,stringify:EE},{identify:xE,default:!0,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:(e,t,{intAsBigInt:n})=>n?BigInt(e):parseInt(e,10),stringify:({value:e})=>xE(e)?e.toString():JSON.stringify(e)},{identify:e=>"number"==typeof e,default:!0,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:e=>parseFloat(e),stringify:EE}],{default:!0,tag:"",test:/^/,resolve:(e,t)=>(t(`Unresolved plain scalar ${JSON.stringify(e)}`),e)}),ME={identify:e=>e instanceof Uint8Array,default:!1,tag:"tag:yaml.org,2002:binary",resolve(e,t){if("function"==typeof Buffer)return Buffer.from(e,"base64");if("function"==typeof atob){const t=atob(e.replace(/[\n\r]/g,"")),n=new Uint8Array(t.length);for(let e=0;e1&&t("Each pair must have its own sequence indicator");const e=i.items[0]||new eE(null);i.commentBefore&&(e.commentBefore=e.commentBefore?`${i.commentBefore}\n${e.commentBefore}`:i.commentBefore),i.comment&&(e.comment=e.comment?`${i.comment}\n${e.comment}`:i.comment),i=e}e.items[n]=mx(i)?i:new eE(i)}}else t("Expected a sequence for this tag");return e}function DE(e,t,n){const{replacer:i}=n,r=new nE(e);r.tag="tag:yaml.org,2002:pairs";let o=0;if(t&&Symbol.iterator in Object(t))for(let e of t){let a,s;if("function"==typeof i&&(e=i.call(t,String(o++),e)),Array.isArray(e)){if(2!==e.length)throw new TypeError(`Expected [key, value] tuple: ${e}`);a=e[0],s=e[1]}else if(e&&e instanceof Object){const t=Object.keys(e);if(1!==t.length)throw new TypeError(`Expected { key: value } tuple: ${e}`);a=t[0],s=e[a]}else a=e;r.items.push(Qx(a,s,n))}return r}const AE={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:TE,createNode:DE};class LE extends nE{constructor(){super(),this.add=sE.prototype.add.bind(this),this.delete=sE.prototype.delete.bind(this),this.get=sE.prototype.get.bind(this),this.has=sE.prototype.has.bind(this),this.set=sE.prototype.set.bind(this),this.tag=LE.tag}toJSON(e,t){if(!t)return super.toJSON(e);const n=new Map;t&&t.onCreate&&t.onCreate(n);for(const e of this.items){let i,r;if(mx(e)?(i=Dx(e.key,"",t),r=Dx(e.value,i,t)):i=Dx(e,"",t),n.has(i))throw new Error("Ordered maps must not include duplicate keys");n.set(i,r)}return n}}LE.tag="tag:yaml.org,2002:omap";const PE={collection:"seq",identify:e=>e instanceof Map,nodeClass:LE,default:!1,tag:"tag:yaml.org,2002:omap",resolve(e,t){const n=TE(e,t),i=[];for(const{key:e}of n.items)gx(e)&&(i.includes(e.value)?t(`Ordered maps must not include duplicate keys: ${e.value}`):i.push(e.value));return Object.assign(new LE,n)},createNode(e,t,n){const i=DE(e,t,n),r=new LE;return r.items=i.items,r}};class IE extends sE{constructor(e){super(e),this.tag=IE.tag}add(e){let t;t=mx(e)?e:"object"==typeof e&&"key"in e&&"value"in e&&null===e.value?new eE(e.key,null):new eE(e,null);aE(this.items,t.key)||this.items.push(t)}get(e,t){const n=aE(this.items,e);return!t&&mx(n)?gx(n.key)?n.key.value:n.key:n}set(e,t){if("boolean"!=typeof t)throw new Error("Expected boolean value for set(key, value) in a YAML set, not "+typeof t);const n=aE(this.items,e);n&&!t?this.items.splice(this.items.indexOf(n),1):!n&&t&&this.items.push(new eE(e))}toJSON(e,t){return super.toJSON(e,t,Set)}toString(e,t,n){if(!e)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},e,{allNullValues:!0}),t,n);throw new Error("Set items must all have null values")}}IE.tag="tag:yaml.org,2002:set";const FE={collection:"map",identify:e=>e instanceof Set,nodeClass:IE,default:!1,tag:"tag:yaml.org,2002:set",resolve(e,t){if(fx(e)){if(e.hasAllNullValues(!0))return Object.assign(new IE,e);t("Set items must all have null values")}else t("Expected a mapping for this tag");return e},createNode(e,t,n){const{replacer:i}=n,r=new IE(e);if(t&&Symbol.iterator in Object(t))for(let e of t)"function"==typeof i&&(e=i.call(t,e,e)),r.items.push(Qx(e,null,n));return r}};function OE(e,t){const n=e[0],i="-"===n||"+"===n?e.substring(1):e,r=e=>t?BigInt(e):Number(e),o=i.replace(/_/g,"").split(":").reduce(((e,t)=>e*r(60)+r(t)),r(0));return"-"===n?r(-1)*o:o}function BE(e){let{value:t}=e,n=e=>e;if("bigint"==typeof t)n=e=>BigInt(e);else if(isNaN(t)||!isFinite(t))return oE(e);let i="";t<0&&(i="-",t*=n(-1));const r=n(60),o=[t%r];return t<60?o.unshift(0):(t=(t-o[0])/r,o.unshift(t%r),t>=60&&(t=(t-o[0])/r,o.unshift(t))),i+o.map((e=>e<10?"0"+String(e):String(e))).join(":").replace(/000000\d*$/,"")}const NE={identify:e=>"bigint"==typeof e||Number.isInteger(e),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:(e,t,{intAsBigInt:n})=>OE(e,n),stringify:BE},RE={identify:e=>"number"==typeof e,default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:e=>OE(e,!1),stringify:BE},HE={identify:e=>e instanceof Date,default:!0,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve(e){const t=e.match(HE.test);if(!t)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");const[,n,i,r,o,a,s]=t.map(Number),l=t[7]?Number((t[7]+"00").substr(1,3)):0;let c=Date.UTC(n,i-1,r,o||0,a||0,s||0,l);const u=t[8];if(u&&"Z"!==u){let e=OE(u,!1);Math.abs(e)<30&&(e*=60),c-=6e4*e}return new Date(c)},stringify:({value:e})=>e.toISOString().replace(/((T00:00)?:00)?\.000Z$/,"")},VE={identify:e=>null==e,createNode:()=>new Ix(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new Ix(null),stringify:({source:e},t)=>e&&VE.test.test(e)?e:t.options.nullStr};function zE({value:e,source:t},n){return t&&(e?qE:UE).test.test(t)?t:e?n.options.trueStr:n.options.falseStr}const qE={identify:e=>!0===e,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:()=>new Ix(!0),stringify:zE},UE={identify:e=>!1===e,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/i,resolve:()=>new Ix(!1),stringify:zE},_E=e=>"bigint"==typeof e||Number.isInteger(e);function jE(e,t,n,{intAsBigInt:i}){const r=e[0];if("-"!==r&&"+"!==r||(t+=1),e=e.substring(t).replace(/_/g,""),i){switch(n){case 2:e=`0b${e}`;break;case 8:e=`0o${e}`;break;case 16:e=`0x${e}`}const t=BigInt(e);return"-"===r?BigInt(-1)*t:t}const o=parseInt(e,n);return"-"===r?-1*o:o}function WE(e,t,n){const{value:i}=e;if(_E(i)){const e=i.toString(t);return i<0?"-"+n+e.substr(1):n+e}return oE(e)}const GE=uE.concat([VE,qE,UE,{identify:_E,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(e,t,n)=>jE(e,2,2,n),stringify:e=>WE(e,2,"0b")},{identify:_E,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(e,t,n)=>jE(e,1,8,n),stringify:e=>WE(e,8,"0")},{identify:_E,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(e,t,n)=>jE(e,0,10,n),stringify:oE},{identify:_E,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(e,t,n)=>jE(e,2,16,n),stringify:e=>WE(e,16,"0x")},{identify:e=>"number"==typeof e,default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?\.(?:inf|Inf|INF|nan|NaN|NAN)$/,resolve:e=>"nan"===e.slice(-3).toLowerCase()?NaN:"-"===e[0]?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:oE},{identify:e=>"number"==typeof e,default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:e=>parseFloat(e.replace(/_/g,"")),stringify:({value:e})=>Number(e).toExponential()},{identify:e=>"number"==typeof e,default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve(e){const t=new Ix(parseFloat(e.replace(/_/g,""))),n=e.indexOf(".");if(-1!==n){const i=e.substring(n+1).replace(/_/g,"");"0"===i[i.length-1]&&(t.minFractionDigits=i.length)}return t},stringify:oE}],ME,PE,AE,FE,NE,RE,HE),KE={core:CE,failsafe:uE,json:SE,yaml11:GE},YE={binary:ME,bool:mE,float:kE,floatExp:wE,floatNaN:bE,floatTime:RE,int:vE,intHex:yE,intOct:gE,intTime:NE,map:lE,null:fE,omap:PE,pairs:AE,seq:cE,set:FE,timestamp:HE};const XE=(e,t)=>e.keyt.key?1:0,$E={"tag:yaml.org,2002:binary":YE.binary,"tag:yaml.org,2002:omap":YE.omap,"tag:yaml.org,2002:pairs":YE.pairs,"tag:yaml.org,2002:set":YE.set,"tag:yaml.org,2002:timestamp":YE.timestamp};class ZE{constructor({customTags:e,merge:t,resolveKnownTags:n,schema:i,sortMapEntries:r}){this.map=YE.map,this.seq=YE.seq,this.merge=!!t,this.name=i||"core",this.knownTags=n?$E:{},this.tags=function(e,t,n,i){let r=e[i.replace(/\W/g,"")];if(!r){const t=Object.keys(e).map((e=>JSON.stringify(e))).join(", ");throw new Error(`Unknown schema "${i}"; use one of ${t}`)}if(Array.isArray(n))for(const e of n)r=r.concat(e);else"function"==typeof n&&(r=n(r.slice()));return r.map((e=>{if("string"!=typeof e)return e;const n=t[e];if(n)return n;const i=Object.keys(t).map((e=>JSON.stringify(e))).join(", ");throw new Error(`Unknown custom tag "${e}"; use one of ${i}`)}))}(KE,YE,e,this.name),this.sortMapEntries=!0===r?XE:r||null}}function QE(e,t,n,i){if(i&&"object"==typeof i)if(Array.isArray(i))for(let t=0,n=i.length;t"number"==typeof e||e instanceof String||e instanceof Number,t=r.filter(e).map(String);t.length>0&&(r=r.concat(t))}"boolean"!=typeof n&&(n=!!this.options.keepUndefined);const a=[],s=Fx(e,o,{keepUndefined:n,onAlias(e){const t=new Ax(e);return a.push(t),t},onTagObj:i,prevObjects:new Map,replacer:r,schema:this.schema});for(const e of a){e.source=e.source.node;let t=this.anchors.getName(e.source);t||(t=this.anchors.newName(),this.anchors.map[t]=e.source)}return t&&yx(s)&&(s.flow=!0),s}createPair(e,t,n={}){const i=this.createNode(e,n),r=this.createNode(t,n);return new eE(i,r)}delete(e){return!!eS(this.contents)&&this.contents.delete(e)}deleteIn(e){return Xx(e)?null!=this.contents&&(this.contents=null,!0):!!eS(this.contents)&&this.contents.deleteIn(e)}get(e,t){return yx(this.contents)?this.contents.get(e,t):void 0}getIn(e,t){return Xx(e)?!t&&gx(this.contents)?this.contents.value:this.contents:yx(this.contents)?this.contents.getIn(e,t):void 0}has(e){return!!yx(this.contents)&&this.contents.has(e)}hasIn(e){return Xx(e)?void 0!==this.contents:!!yx(this.contents)&&this.contents.hasIn(e)}set(e,t){null==this.contents?this.contents=Yx(this.schema,[e],t):eS(this.contents)&&this.contents.set(e,t)}setIn(e,t){Xx(e)?this.contents=t:null==this.contents?this.contents=Yx(this.schema,Array.from(e),t):eS(this.contents)&&this.contents.setIn(e,t)}setSchema(e,t){let n;switch(String(e)){case"1.1":this.directives.yaml.version="1.1",n=Object.assign({merge:!0,resolveKnownTags:!1,schema:"yaml-1.1"},t);break;case"1.2":this.directives.yaml.version="1.2",n=Object.assign({merge:!1,resolveKnownTags:!0,schema:"core"},t);break;default:{const t=JSON.stringify(e);throw new Error(`Expected '1.1' or '1.2' as version, but found: ${t}`)}}this.schema=new ZE(n)}toJS({json:e,jsonArg:t,mapAsMap:n,maxAliasCount:i,onAnchor:r,reviver:o}={}){const a=Object.values(this.anchors.map).map((e=>[e,{alias:[],aliasCount:0,count:1}])),s=a.length>0?new Map(a):null,l={anchors:s,doc:this,keep:!e,mapAsMap:!0===n,mapKeyWarned:!1,maxAliasCount:"number"==typeof i?i:100,stringify:Kx},c=Dx(this.contents,t||"",l);if("function"==typeof r&&s)for(const{count:e,res:t}of s.values())r(t,e);return"function"==typeof o?QE(o,{"":c},"",c):c}toJSON(e,t){return this.toJS({json:!0,jsonArg:e,mapAsMap:!1,onAnchor:t})}toString(e={}){if(this.errors.length>0)throw new Error("Document with errors cannot be stringified");if("indent"in e&&(!Number.isInteger(e.indent)||Number(e.indent)<=0)){const t=JSON.stringify(e.indent);throw new Error(`"indent" option must be a positive integer, not ${t}`)}const t=[];let n=!0===e.directives;if(!1!==e.directives){const e=this.directives.toString(this);e?(t.push(e),n=!0):this.directives.marker&&(n=!0)}n&&t.push("---"),this.commentBefore&&(1!==t.length&&t.unshift(""),t.unshift(this.commentBefore.replace(/^/gm,"#")));const i=Gx(this,e);let r=!1,o=null;if(this.contents){bx(this.contents)&&(this.contents.spaceBefore&&n&&t.push(""),this.contents.commentBefore&&t.push(this.contents.commentBefore.replace(/^/gm,"#")),i.forceBlockIndent=!!this.comment,o=this.contents.comment);const e=o?void 0:()=>r=!0;let a=Kx(this.contents,i,(()=>o=null),e);o&&(a=Ox(a,"",o)),"|"!==a[0]&&">"!==a[0]||"---"!==t[t.length-1]?t.push(a):t[t.length-1]=`--- ${a}`}else t.push(Kx(this.contents,i));return this.comment&&(r&&!o||""===t[t.length-1]||t.push(""),t.push(this.comment.replace(/^/gm,"#"))),t.join("\n")+"\n"}}function eS(e){if(yx(e))return!0;throw new Error("Expected a YAML collection as document contents")}class tS extends Error{constructor(e,t,n){if(!n)throw new Error(`Invalid arguments for new ${e}`);super(),this.name=e,this.message=n,this.offset=t}}class nS extends tS{constructor(e,t){super("YAMLParseError",e,t)}}class iS extends tS{constructor(e,t){super("YAMLWarning",e,t)}}const rS=(e,t)=>n=>{if(-1===n.offset)return;n.linePos=t.linePos(n.offset);const{line:i,col:r}=n.linePos;n.message+=` at line ${i}, column ${r}`;let o=r-1,a=e.substring(t.lineStarts[i-1],t.lineStarts[i]).replace(/[\n\r]+$/,"");if(o>=60&&a.length>80){const e=Math.min(o-39,a.length-79);a="…"+a.substring(e),o-=e-1}if(a.length>80&&(a=a.substring(0,79)+"…"),i>1&&/^ *$/.test(a.substring(0,o))){let n=e.substring(t.lineStarts[i-2],t.lineStarts[i-1]);n.length>80&&(n=n.substring(0,79)+"…\n"),a=n+a}if(/[^ ]/.test(a)){const e=" ".repeat(o)+"^";n.message+=`:\n\n${a}\n${e}\n`}};function oS(e,t,n,i,r,o){let a=0,s=!1,l=n,c=n,u="",h=!1,p=!1,d="",f="",m="",g=null,v=null;for(const n of t){switch(n.type){case"space":l&&"doc-start"!==i&&"\t"===n.source[0]&&o(r+a,"Tabs are not allowed as indentation"),c=!0;break;case"comment":{e.options.strict&&!c&&o(r+a,"Comments must be separated from other tokens by white space characters");const t=n.source.substring(1);h?u+=d+t:u=t,h=!0,d="";break}case"newline":l&&!h&&(s=!0),l=!0,p=!0,c=!0,d+=n.source;break;case"anchor":f&&o(r+a,"A node can have at most one anchor"),f=n.source.substring(1),null===v&&(v=r+a),l=!1,c=!1;break;case"tag":{m&&o(r+a,"A node can have at most one tag");const t=e.directives.tagName(n.source,(e=>o(r,e)));t&&(m=t),null===v&&(v=r+a),l=!1,c=!1;break}case i:g={indent:n.indent,offset:r+a},l=!1,c=!1;break;default:o(r+a,`Unexpected ${n.type} token`),l=!1,c=!1}n.source&&(a+=n.source.length)}return{found:g,spaceBefore:s,comment:u,hasNewline:p,anchor:f,tagName:m,length:a,start:null!=v?v:r+a}}function aS(e){if(!e)return null;switch(e.type){case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":return e.source.includes("\n");case"flow-collection":for(const t of e.items)switch(t.type){case"newline":return!0;case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":case"flow-collection":if(aS(t))return!0}return!1;default:return!0}}const sS="All mapping items must start at the same column";function lS(e,t,n,i){let r="";if(e){let o=!1,a=!1,s="";for(const{source:l,type:c}of e){switch(c){case"space":o=!0;break;case"comment":{n&&!o&&i(t,"Comments must be separated from other tokens by white space characters");const e=l.substring(1);a?r+=s+e:r=e,a=!0,s="";break}case"newline":a&&(s+=l),o=!0;break;default:i(t,`Unexpected ${c} at node end`)}t+=l.length}}return{comment:r,offset:t}}function cS(e,t,n,i,r,o){let a;switch(n.type){case"block-map":a=function({composeNode:e,composeEmptyNode:t},n,{indent:i,items:r,offset:o},a,s){var l;const c=o,u=new sE(n.schema);a&&n.anchors.setAnchor(u,a);for(const{start:a,key:c,sep:h,value:p}of r){const r=oS(n,a,!0,"explicit-key-ind",o,s),d=!r.found;if(d){if(c&&("block-seq"===c.type?s(o,"A block sequence may not be used as an implicit map key"):"indent"in c&&c.indent!==i&&s(o,sS)),!r.anchor&&!r.tagName&&!h){r.comment&&(u.comment?u.comment+="\n"+r.comment:u.comment=r.comment);continue}}else(null===(l=r.found)||void 0===l?void 0:l.indent)!==i&&s(o,sS);o+=r.length,d&&aS(c)&&s(o,"Implicit keys need to be on a single line");const f=o,m=c?e(n,c,r,s):t(n,o,a,null,r,s);o=m.range[1];const g=oS(n,h||[],!c||"block-scalar"===c.type,"map-value-ind",o,s);if(o+=g.length,g.found){d&&("block-map"!==(null==p?void 0:p.type)||g.hasNewline||s(o,"Nested mappings are not allowed in compact mappings"),n.options.strict&&r.starto(v,e)));e&&(g=e),y=!1,w=!1,p=!1;break}case"explicit-key-ind":(m||g)&&o(v,"Anchors and tags must be after the ? indicator"),b=!0,y=!1,w=!1,p=!1;break;case"map-value-ind":if(l){if(c){o(v,"Missing {} around pair used as mapping key");const e=new sE(n.schema);e.flow=!0,e.items.push(new eE(l,c)),e.range=[l.range[0],c.range[1]],l=e,c=null}}else if(c){if(n.options.strict){const e="Implicit keys of flow sequence pairs need to be on a single line";if(k)o(v,e);else if(C){aS(C)&&o(v,e);const t="offset"in C&&C.offset;"number"==typeof t&&t0){const e=lS(T,v,n.options.strict,o);e.comment&&(s.comment=h),v=e.offset}return s.range=[i.offset,v],s}(e,t,n,i,o)}if(!r)return a;const s=a.constructor;if("!"===r||r===s.tagName)return a.tag=s.tagName,a;const l=fx(a)?"map":"seq";let c=t.schema.tags.find((e=>e.collection===l&&e.tag===r));if(!c){const e=t.schema.knownTags[r];if(!e||e.collection!==l)return o(a.range[0],`Unresolved tag: ${r}`,!0),a.tag=r,a;t.schema.tags.push(Object.assign({},e,{default:!1})),c=e}const u=c.resolve(a,(e=>o(a.range[0],e)),t.options),h=bx(u)?u:new Ix(u);return h.range=a.range,h.tag=r,(null==c?void 0:c.format)&&(h.format=c.format),h}function uS(e,t,n){const i=function({offset:e,props:t},n,i){if("block-scalar-header"!==t[0].type)return i(e,"Block scalar header not found"),null;const{source:r}=t[0],o=r[0];let a=0,s="",l=-1;for(let t=1;t=0;--e){const t=o[e][1];if(""!==t&&"\r"!==t)break;a=e}if(!e.source||0===a){const t="+"===i.chomp?o.map((e=>e[0])).join("\n"):"";let n=i.length;return e.source&&(n+=e.source.length),{value:t,type:r,comment:i.comment,length:n}}let s=e.indent+i.indent,l=e.offset+i.length,c=0;for(let e=0;es&&(s=t.length),l+=t.length+r.length+1}let u="",h="",p=!1;for(let e=0;es||"\t"===a[0]?(" "===h?h="\n":p||"\n"!==h||(h="\n\n"),u+=h+t.slice(s)+a,h="\n",p=!0):""===a?"\n"===h?u+="\n":h="\n":(u+=h+a,h=" ",p=!1)}switch(i.chomp){case"-":break;case"+":for(let e=a;eo(e+t,n);switch(t){case"scalar":a=Ix.PLAIN,s=function(e,t){switch(e[0]){case"\t":t(0,"Plain value cannot start with a tab character");break;case"|":case">":t(0,`Plain value cannot start with block scalar indicator ${e[0]}`);break;case"@":case"`":t(0,`Plain value cannot start with reserved character ${e[0]}`);break}return pS(e.trim())}(n,l);break;case"single-quoted-scalar":a=Ix.QUOTE_SINGLE,s=function(e,t){"'"===e[e.length-1]&&1!==e.length||t(e.length,"Missing closing 'quote");return pS(e.slice(1,-1)).replace(/''/g,"'")}(n,l);break;case"double-quoted-scalar":a=Ix.QUOTE_DOUBLE,s=function(e,t){let n="";for(let i=1;it?e.slice(t,i+1):r)}else n+=r}'"'===e[e.length-1]&&1!==e.length||t(e.length,'Missing closing "quote');return n}(n,l);break;default:return o(e,`Expected a flow scalar value, but found: ${t}`),{value:"",type:null,comment:"",length:n.length}}const c=lS(i,0,r,l);return{value:s,type:a,comment:c.comment,length:n.length+c.offset}}function pS(e){const t=e.split(/[ \t]*\r?\n[ \t]*/);let n=t[0],i=" ";for(let e=1;e1&&(n+=i+t[t.length-1]),n}function dS(e,t){let n="",i=e[t+1];for(;!(" "!==i&&"\t"!==i&&"\n"!==i&&"\r"!==i||"\r"===i&&"\n"!==e[t+2]);)"\n"===i&&(n+="\n"),i=e[(t+=1)+1];return n||(n=" "),{fold:n,offset:t}}const fS={0:"\0",a:"",b:"\b",e:"",f:"\f",n:"\n",r:"\r",t:"\t",v:"\v",N:"…",_:" ",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\","\t":"\t"};function mS(e,t,n,i){const r=e.substr(t,n),o=r.length===n&&/^[0-9a-fA-F]+$/.test(r)?parseInt(r,16):NaN;if(isNaN(o)){const r=e.substr(t-2,n+2);return i(t-2,`Invalid escape sequence ${r}`),r}return String.fromCodePoint(o)}function gS(e,t,n,i,r){const{offset:o}=t,{value:a,type:s,comment:l,length:c}="block-scalar"===t.type?uS(t,e.options.strict,r):hS(t,e.options.strict,r),u=i?function(e,t,n,i){var r;if("!"===n)return vS(e);const o=[];for(const t of e.tags)if(!t.collection&&t.tag===n){if(!t.default||!t.test)return t;o.push(t)}for(const e of o)if(null===(r=e.test)||void 0===r?void 0:r.test(t))return e;const a=e.knownTags[n];if(a&&!a.collection)return e.tags.push(Object.assign({},a,{default:!1,test:void 0})),a;return i(0,`Unresolved tag: ${n}`,"tag:yaml.org,2002:str"!==n),vS(e)}(e.schema,a,i,r):function(e,t,n){var i;if(n)for(const n of e.tags)if(n.default&&(null===(i=n.test)||void 0===i?void 0:i.test(t)))return n;return vS(e)}(e.schema,a,"scalar"===t.type);let h;try{const t=u?u.resolve(a,(e=>r(o,e)),e.options):a;h=gx(t)?t:new Ix(t)}catch(e){r(o,e.message),h=new Ix(a)}return h.range=[o,o+c],h.source=a,s&&(h.type=s),i&&(h.tag=i),(null==u?void 0:u.format)&&(h.format=u.format),l&&(h.comment=l),n&&e.anchors.setAnchor(h,n),h}const vS=e=>e.tags.find((e=>!e.collection&&"tag:yaml.org,2002:str"===e.tag));function yS(e,t,n){if(t){null===n&&(n=t.length);for(let i=n-1;i>=0;--i){let n=t[i];switch(n.type){case"space":case"comment":case"newline":e-=n.source.length;continue}for(n=t[++i];"space"===(null==n?void 0:n.type);)e+=n.source.length,n=t[++i];break}}return e}const bS={composeNode:wS,composeEmptyNode:kS};function wS(e,t,n,i){const{spaceBefore:r,comment:o,anchor:a,tagName:s}=n;let l;switch(t.type){case"alias":l=function(e,{offset:t,source:n,end:i},r){const o=n.substring(1),a=e.anchors.getNode(o);a||r(t,`Aliased anchor not found: ${o}`);const s=new Ax(a),l=lS(i,t+n.length,e.options.strict,r);s.range=[t,l.offset],l.comment&&(s.comment=l.comment);return s}(e,t,i),(a||s)&&i(t.offset,"An alias node must not specify any properties");break;case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"block-scalar":l=gS(e,t,a,s,i);break;case"block-map":case"block-seq":case"flow-collection":l=cS(bS,e,t,a,s,i);break;default:throw console.log(t),new Error(`Unsupporten token type: ${t.type}`)}return r&&(l.spaceBefore=!0),o&&("scalar"===t.type&&""===t.source?l.comment=o:l.commentBefore=o),l}function kS(e,t,n,i,{spaceBefore:r,comment:o,anchor:a,tagName:s},l){const c=gS(e,{type:"scalar",offset:yS(t,n,i),indent:-1,source:""},a,s,l);return r&&(c.spaceBefore=!0),o&&(c.comment=o),c}function CS(e){let t="",n=!1,i=!1;for(let r=0;r{n?this.warnings.push(new iS(e,t)):this.errors.push(new nS(e,t))},this.next=e=>{switch(e.type){case"directive":this.directives.add(e.source,this.onError),this.prelude.push(e.source),this.atDirectives=!0;break;case"document":{const t=function(e,t,{offset:n,start:i,value:r,end:o},a){const s=Object.assign({directives:t},e),l=new JE(void 0,s),c=oS(l,i,!0,"doc-start",n,a);c.found&&(l.directives.marker=!0),l.contents=r?wS(l,r,c,a):kS(l,n+c.length,i,null,c,a);const u=lS(o,l.contents.range[1],!1,a);return u.comment&&(l.comment=u.comment),l.range=[n,u.offset],l}(this.options,this.directives,e,this.onError);this.decorate(t,!1),this.doc&&this.onDocument(this.doc),this.doc=t,this.atDirectives=!1;break}case"byte-order-mark":case"space":break;case"comment":case"newline":this.prelude.push(e.source);break;case"error":{const t=e.source?`${e.message}: ${JSON.stringify(e.source)}`:e.message,n=new nS(-1,t);this.atDirectives||!this.doc?this.errors.push(n):this.doc.errors.push(n);break}case"doc-end":{if(!this.doc){const t="Unexpected doc-end without preceding document";this.errors.push(new nS(e.offset,t));break}const t=lS(e.end,e.offset+e.source.length,this.doc.options.strict,this.onError);if(this.decorate(this.doc,!0),t.comment){const e=this.doc.comment;this.doc.comment=e?`${e}\n${t.comment}`:t.comment}this.doc.range[1]=t.offset;break}default:this.errors.push(new nS(-1,`Unsupported token ${e.type}`))}},this.directives=new Tx({version:(null==t?void 0:t.version)||tE.version}),this.onDocument=e,this.options=t}decorate(e,t){const{comment:n,afterEmptyLine:i}=CS(this.prelude);if(n){const r=e.contents;if(t)e.comment=e.comment?`${e.comment}\n${n}`:n;else if(i||e.directives.marker||!r)e.commentBefore=n;else if(yx(r)&&!r.flow&&r.items.length>0){const e=r.items[0],t=e.commentBefore;e.commentBefore=t?`${n}\n${t}`:n}else{const e=r.commentBefore;r.commentBefore=e?`${n}\n${e}`:n}}t?(Array.prototype.push.apply(e.errors,this.errors),Array.prototype.push.apply(e.warnings,this.warnings)):(e.errors=this.errors,e.warnings=this.warnings),this.prelude=[],this.errors=[],this.warnings=[]}streamInfo(){return{comment:CS(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}end(e=!1,t=-1){if(this.doc)this.decorate(this.doc,!0),this.onDocument(this.doc),this.doc=null;else if(e){const e=Object.assign({directives:this.directives},this.options),n=new JE(void 0,e);this.atDirectives&&this.onError(t,"Missing directives-end indicator line"),n.range=[0,t],this.decorate(n,!1),this.onDocument(n)}}}class ES{constructor(){this.lineStarts=[],this.addNewLine=e=>this.lineStarts.push(e),this.linePos=e=>{let t=0,n=this.lineStarts.length;for(;t>1;this.lineStarts[i]!e||DS.includes(e);class LS{constructor(e){this.atEnd=!1,this.blockScalarIndent=-1,this.blockScalarKeep=!1,this.buffer="",this.flowKey=!1,this.flowLevel=0,this.indentNext=0,this.indentValue=0,this.next=null,this.pos=0,this.push=e}lex(e,t){e&&(this.buffer=this.buffer?this.buffer+e:e),this.atEnd=!t;let n=this.next||"stream";for(;n&&(t||this.hasChars(1));)n=this.parseNext(n)}atLineEnd(){let e=this.pos,t=this.buffer[e];for(;" "===t||"\t"===t;)t=this.buffer[++e];return!t||"#"===t||"\n"===t||"\r"===t&&"\n"===this.buffer[e+1]}charAt(e){return this.buffer[this.pos+e]}continueScalar(e){let t=this.buffer[e];if(this.indentNext>0){let n=0;for(;" "===t;)t=this.buffer[++n+e];if("\r"===t){const t=this.buffer[n+e+1];if("\n"===t||!t&&!this.atEnd)return e+n+1}return"\n"===t||n>=this.indentNext||!t&&!this.atEnd?e+n:-1}if("-"===t||"."===t){const t=this.buffer.substr(e,3);if(("---"===t||"..."===t)&&MS(this.buffer[e+3]))return-1}return e}getLine(){let e=this.buffer.indexOf("\n",this.pos);return-1===e?this.atEnd?this.buffer.substring(this.pos):null:("\r"===this.buffer[e-1]&&(e-=1),this.buffer.substring(this.pos,e))}hasChars(e){return this.pos+e<=this.buffer.length}setNext(e){return this.buffer=this.buffer.substring(this.pos),this.pos=0,this.next=e,null}peek(e){return this.buffer.substr(this.pos,e)}parseNext(e){switch(e){case"stream":return this.parseStream();case"line-start":return this.parseLineStart();case"block-start":return this.parseBlockStart();case"doc":return this.parseDocument();case"flow":return this.parseFlowCollection();case"quoted-scalar":return this.parseQuotedScalar();case"block-scalar":return this.parseBlockScalar();case"plain-scalar":return this.parsePlainScalar()}}parseStream(){let e=this.getLine();if(null===e)return this.setNext("stream");if("\ufeff"===e[0]&&(this.pushCount(1),e=e.substring(1)),"%"===e[0]){let t=e.length;const n=e.indexOf("#");if(-1!==n){const i=e[n-1];" "!==i&&"\t"!==i||(t=n-1)}for(;;){const n=e[t-1];if(" "!==n&&"\t"!==n)break;t-=1}const i=this.pushCount(t)+this.pushSpaces(!0);return this.pushCount(e.length-i),this.pushNewline(),"stream"}if(this.atLineEnd()){const t=this.pushSpaces(!0);return this.pushCount(e.length-t),this.pushNewline(),"stream"}return this.push(""),this.parseLineStart()}parseLineStart(){const e=this.charAt(0);if(!e&&!this.atEnd)return this.setNext("line-start");if("-"===e||"."===e){if(!this.atEnd&&!this.hasChars(4))return this.setNext("line-start");const e=this.peek(3);if("---"===e&&MS(this.charAt(3)))return this.pushCount(3),this.indentValue=0,this.indentNext=0,"doc";if("..."===e&&MS(this.charAt(3)))return this.pushCount(3),"stream"}return this.indentValue=this.pushSpaces(!1),this.indentNext>this.indentValue&&!MS(this.charAt(1))&&(this.indentNext=this.indentValue),this.parseBlockStart()}parseBlockStart(){const[e,t]=this.peek(2);if(!t&&!this.atEnd)return this.setNext("block-start");if(("-"===e||"?"===e||":"===e)&&MS(t)){const e=this.pushCount(1)+this.pushSpaces(!0);return this.indentNext=this.indentValue+1,this.indentValue+=e,this.parseBlockStart()}return"doc"}parseDocument(){this.pushSpaces(!0);const e=this.getLine();if(null===e)return this.setNext("doc");let t=this.pushIndicators();switch(e[t]){case"#":this.pushCount(e.length-t);case void 0:return this.pushNewline(),this.parseLineStart();case"{":case"[":return this.pushCount(1),this.flowKey=!1,this.flowLevel=1,"flow";case"}":case"]":return this.pushCount(1),"doc";case"*":return this.pushUntil(AS),"doc";case'"':case"'":return this.parseQuotedScalar();case"|":case">":return t+=this.parseBlockScalarHeader(),t+=this.pushSpaces(!0),this.pushCount(e.length-t),this.pushNewline(),this.parseBlockScalar();default:return this.parsePlainScalar()}}parseFlowCollection(){let e,t,n=-1;do{e=this.pushNewline(),t=this.pushSpaces(!0),e>0&&(this.indentValue=n=t)}while(e+t>0);const i=this.getLine();if(null===i)return this.setNext("flow");if(-1!==n&&n"0"&&t<="9")this.blockScalarIndent=Number(t)-1;else if("-"!==t)break}return this.pushUntil((e=>MS(e)||"#"===e))}parseBlockScalar(){let e,t=this.pos-1,n=0;e:for(let i=this.pos;e=this.buffer[i];++i)switch(e){case" ":n+=1;break;case"\n":t=i,n=0;break;case"\r":{const e=this.buffer[i+1];if(!e&&!this.atEnd)return this.setNext("block-scalar");if("\n"===e)break}default:break e}if(!e&&!this.atEnd)return this.setNext("block-scalar");if(n>=this.indentNext){-1===this.blockScalarIndent?this.indentNext=n:this.indentNext+=this.blockScalarIndent;do{const e=this.continueScalar(t+1);if(-1===e)break;t=this.buffer.indexOf("\n",e)}while(-1!==t);if(-1===t){if(!this.atEnd)return this.setNext("block-scalar");t=this.buffer.length}}if(!this.blockScalarKeep)for(;;){let e=t-1,n=this.buffer[e];for("\r"===n&&(n=this.buffer[--e]);" "===n||"\t"===n;)n=this.buffer[--e];if(!("\n"===n&&e>=this.pos))break;t=e}return this.push(SS),this.pushToIndex(t+1,!0),this.parseLineStart()}parsePlainScalar(){const e=this.flowLevel>0;let t,n=this.pos-1,i=this.pos-1;for(;t=this.buffer[++i];)if(":"===t){const t=this.buffer[i+1];if(MS(t)||e&&","===t)break;n=i}else if(MS(t)){const r=this.buffer[i+1];if("#"===r||e&&TS.includes(r))break;if("\r"===t&&("\n"===r?(i+=1,t="\n"):n=i),"\n"===t){const e=this.continueScalar(i+1);if(-1===e)break;i=Math.max(i,e-2)}}else{if(e&&TS.includes(t))break;n=i}return t||this.atEnd?(this.push(SS),this.pushToIndex(n+1,!0),e?"flow":"doc"):this.setNext("plain-scalar")}pushCount(e){return e>0?(this.push(this.buffer.substr(this.pos,e)),this.pos+=e,e):0}pushToIndex(e,t){const n=this.buffer.slice(this.pos,e);return n?(this.push(n),this.pos+=n.length,n.length):(t&&this.push(""),0)}pushIndicators(){switch(this.charAt(0)){case"!":if("<"===this.charAt(1))return this.pushVerbatimTag()+this.pushSpaces(!0)+this.pushIndicators();case"&":return this.pushUntil(AS)+this.pushSpaces(!0)+this.pushIndicators();case":":case"?":case"-":if(MS(this.charAt(1)))return 0===this.flowLevel&&(this.indentNext=this.indentValue+1),this.pushCount(1)+this.pushSpaces(!0)+this.pushIndicators()}return 0}pushVerbatimTag(){let e=this.pos+2,t=this.buffer[e];for(;!MS(t)&&">"!==t;)t=this.buffer[++e];return this.pushToIndex(">"===t?e+1:e,!1)}pushNewline(){const e=this.buffer[this.pos];return"\n"===e?this.pushCount(1):"\r"===e&&"\n"===this.charAt(1)?this.pushCount(2):0}pushSpaces(e){let t,n=this.pos-1;do{t=this.buffer[++n]}while(" "===t||e&&"\t"===t);const i=n-this.pos;return i>0&&(this.push(this.buffer.substr(this.pos,i)),this.pos=n),i}pushUntil(e){let t=this.pos,n=this.buffer[t];for(;!e(n);)n=this.buffer[++t];return this.pushToIndex(t,!1)}}function PS(e,t){for(let n=0;n=0;--t)switch(e[t].type){case"space":break;case"newline":return!0;default:return!1}return!1}function OS(e){switch(e.type){case"document":return e.start;case"block-map":{const t=e.items[e.items.length-1];return t.sep||t.start}case"block-seq":return e.items[e.items.length-1].start;default:return[]}}function BS(e){var t;if(0===e.length)return[];let n=e.length;e:for(;--n>=0;)switch(e[n].type){case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break e}for(;"space"===(null===(t=e[++n])||void 0===t?void 0:t.type););return e.splice(n,e.length)}class NS{constructor(e,t){this.atNewLine=!0,this.atScalar=!1,this.indent=0,this.offset=0,this.onKeyLine=!1,this.stack=[],this.source="",this.type="",this.next=e=>{if(this.source=e,this.atScalar)return this.atScalar=!1,this.step(),void(this.offset+=e.length);const t=function(e){switch(e){case"\ufeff":return"byte-order-mark";case"":return"doc-mode";case"":return"flow-error-end";case SS:return"scalar";case"---":return"doc-start";case"...":return"doc-end";case"":case"\n":case"\r\n":return"newline";case"-":return"seq-item-ind";case"?":return"explicit-key-ind";case":":return"map-value-ind";case"{":return"flow-map-start";case"}":return"flow-map-end";case"[":return"flow-seq-start";case"]":return"flow-seq-end";case",":return"comma"}switch(e[0]){case" ":case"\t":return"space";case"#":return"comment";case"%":return"directive-line";case"*":return"alias";case"&":return"anchor";case"!":return"tag";case"'":return"single-quoted-scalar";case'"':return"double-quoted-scalar";case"|":case">":return"block-scalar-header"}return null}(e);if(t)if("scalar"===t)this.atNewLine=!1,this.atScalar=!0,this.type="scalar";else{switch(this.type=t,this.step(),t){case"newline":this.atNewLine=!0,this.indent=0,this.onNewLine&&this.onNewLine(this.offset+e.length);break;case"space":this.atNewLine&&" "===e[0]&&(this.indent+=e.length);break;case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":this.atNewLine&&(this.indent+=e.length);break;case"doc-mode":return;default:this.atNewLine=!1}this.offset+=e.length}else{const t=`Not a YAML token: ${e}`;this.pop({type:"error",offset:this.offset,message:t,source:e}),this.offset+=e.length}},this.lexer=new LS(this.next),this.push=e,this.onNewLine=t}parse(e,t=!1){this.onNewLine&&0===this.offset&&this.onNewLine(0),this.lexer.lex(e,t),t||this.end()}end(){for(;this.stack.length>0;)this.pop()}get sourceToken(){return{type:this.type,indent:this.indent,source:this.source}}step(){const e=this.peek(1);if("doc-end"!==this.type||e&&"doc-end"===e.type){if(!e)return this.stream();switch(e.type){case"document":return this.document(e);case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.scalar(e);case"block-scalar":return this.blockScalar(e);case"block-map":return this.blockMap(e);case"block-seq":return this.blockSequence(e);case"flow-collection":return this.flowCollection(e);case"doc-end":return this.documentEnd(e)}this.pop()}else{for(;this.stack.length>0;)this.pop();this.stack.push({type:"doc-end",offset:this.offset,source:this.source})}}peek(e){return this.stack[this.stack.length-e]}pop(e){const t=e||this.stack.pop();if(t)if(0===this.stack.length)this.push(t);else{const e=this.peek(1);switch("block-scalar"!==t.type&&"flow-collection"!==t.type||(t.indent="indent"in e?e.indent:-1),e.type){case"document":e.value=t;break;case"block-scalar":e.props.push(t);break;case"block-map":{const n=e.items[e.items.length-1];if(n.value)return e.items.push({start:[],key:t,sep:[]}),void(this.onKeyLine=!0);if(!n.sep)return Object.assign(n,{key:t,sep:[]}),void(this.onKeyLine=!PS(n.start,"explicit-key-ind"));n.value=t;break}case"block-seq":{const n=e.items[e.items.length-1];n.value?e.items.push({start:[],value:t}):n.value=t;break}case"flow-collection":e.items.push(t);break;default:this.pop(),this.pop(t)}if(!("document"!==e.type&&"block-map"!==e.type&&"block-seq"!==e.type||"block-map"!==t.type&&"block-seq"!==t.type)){const n=t.items[t.items.length-1];n&&!n.sep&&!n.value&&n.start.length>0&&!IS(n.start)&&(0===t.indent||n.start.every((e=>"comment"!==e.type||e.indent=e.indent){const t=!this.onKeyLine&&this.indent===e.indent&&(n.sep||IS(n.start));switch(this.type){case"anchor":case"tag":return void(t||n.value?(e.items.push({start:[this.sourceToken]}),this.onKeyLine=!0):n.sep?n.sep.push(this.sourceToken):n.start.push(this.sourceToken));case"explicit-key-ind":return n.sep||PS(n.start,"explicit-key-ind")?t||n.value?e.items.push({start:[this.sourceToken]}):this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]}):n.start.push(this.sourceToken),void(this.onKeyLine=!0);case"map-value-ind":if(n.sep)if(n.value||t&&!PS(n.start,"explicit-key-ind"))e.items.push({start:[],key:null,sep:[this.sourceToken]});else if(PS(n.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]});else if(PS(n.start,"explicit-key-ind")&&function(e){switch(null==e?void 0:e.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"flow-collection":return!0;default:return!1}}(n.key)&&!PS(n.sep,"newline")){const e=BS(n.start),t=n.key,i=n.sep;i.push(this.sourceToken),delete n.key,delete n.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:e,key:t,sep:i}]})}else n.sep.push(this.sourceToken);else Object.assign(n,{key:null,sep:[this.sourceToken]});return void(this.onKeyLine=!0);case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{const i=this.flowScalar(this.type);return void(t||n.value?(e.items.push({start:[],key:i,sep:[]}),this.onKeyLine=!0):n.sep?this.stack.push(i):(Object.assign(n,{key:i,sep:[]}),this.onKeyLine=!0))}default:{const i=this.startBlockValue(e);if(i)return t&&"block-seq"!==i.type&&PS(n.start,"explicit-key-ind")&&e.items.push({start:[]}),void this.stack.push(i)}}}this.pop(),this.step()}blockSequence(e){var t;const n=e.items[e.items.length-1];switch(this.type){case"newline":if(!n.value&&FS(n.start)){const i=e.items[e.items.length-2],r=null===(t=null==i?void 0:i.value)||void 0===t?void 0:t.end;if(Array.isArray(r))return Array.prototype.push.apply(r,n.start),void(n.start=[this.sourceToken])}case"space":case"comment":return void(n.value?e.items.push({start:[this.sourceToken]}):n.start.push(this.sourceToken));case"anchor":case"tag":if(n.value||this.indent<=e.indent)break;return void n.start.push(this.sourceToken);case"seq-item-ind":if(this.indent!==e.indent)break;return void(n.value||PS(n.start,"seq-item-ind")?e.items.push({start:[this.sourceToken]}):n.start.push(this.sourceToken))}if(this.indent>e.indent){const t=this.startBlockValue(e);if(t)return this.stack.push(t)}this.pop(),this.step()}flowCollection(e){if("flow-error-end"===this.type){let e;do{this.pop(),e=this.peek(1)}while(e&&"flow-collection"===e.type)}else if(0===e.end.length){switch(this.type){case"space":case"comment":case"newline":case"comma":case"explicit-key-ind":case"map-value-ind":case"anchor":case"tag":return void e.items.push(this.sourceToken);case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return void e.items.push(this.flowScalar(this.type));case"flow-map-end":case"flow-seq-end":return void e.end.push(this.sourceToken)}const t=this.startBlockValue(e);if(t)return this.stack.push(t);this.pop(),this.step()}else{const t=this.peek(2);if("block-map"!==t.type||"map-value-ind"!==this.type&&("newline"!==this.type||t.items[t.items.length-1].sep))if("map-value-ind"===this.type&&"flow-collection"!==t.type){const n=BS(OS(t)),i=e.end.splice(1,e.end.length);i.push(this.sourceToken);const r={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:n,key:e,sep:i}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=r}else this.lineEnd(e);else this.pop(),this.step()}}flowScalar(e){if(this.onNewLine){let e=this.source.indexOf("\n")+1;for(;0!==e;)this.onNewLine(this.offset+e),e=this.source.indexOf("\n",e)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken]};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":return this.onKeyLine=!0,{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"map-value-ind":{this.onKeyLine=!0;const t=BS(OS(e));return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:t,key:null,sep:[this.sourceToken]}]}}}return null}documentEnd(e){"doc-mode"!==this.type&&(e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],"newline"===this.type&&this.pop())}lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":this.pop(),this.step();break;case"newline":this.onKeyLine=!1;case"space":case"comment":default:e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],"newline"===this.type&&this.pop()}}}function RS(e){const t=!e||!1!==e.prettyErrors;return{lineCounter:e&&e.lineCounter||t&&new ES||null,prettyErrors:t}}function HS(e,t,n){let i;"function"==typeof t?i=t:void 0===n&&t&&"object"==typeof t&&(n=t);const r=function(e,t){const{lineCounter:n,prettyErrors:i}=RS(t);let r=null;const o=new xS((e=>{if(r){if("silent"!==r.options.logLevel){const t="Source contains multiple documents; please use YAML.parseAllDocuments()";r.errors.push(new nS(e.range[0],t))}}else r=e}),t);return new NS(o.next,null==n?void 0:n.addNewLine).parse(e),o.end(!0,e.length),i&&n&&(r.errors.forEach(rS(e,n)),r.warnings.forEach(rS(e,n))),r}(e,n);if(!r)return null;if(r.warnings.forEach((e=>Zx(r.options.logLevel,e))),r.errors.length>0){if("silent"!==r.options.logLevel)throw r.errors[0];r.errors=[]}return r.toJS(Object.assign({reviver:i},n))}var VS=n(914),zS=n.n(VS),qS=n(2854),US=n.n(qS),_S=n(5572),jS=zS(),WS=_S.Parser,GS=function(){function e(){this.transformers=[]}return e.prototype.addTransformer=function(e){this.transformers.push(e)},e.prototype.removeTransformer=function(e){for(var t=this.transformers,n=0;n0&&(n=r[0].position.start,i=r[r.length-1].position.end),e.substring(n.offset,i.offset).trim()}var QS=n(914),JS=n(2854),eM=n(7361),tM=n(1744),nM=n(6630),iM=n(719),rM=n(5426),oM=n(6115),aM=n(1696),sM=n(4617),lM={}.hasOwnProperty,cM=!1;function uM(e,t){var n=function(e,t){var n=t||{};void 0===n.allowDangerousHTML||cM||(cM=!0,console.warn("mdast-util-to-hast: deprecation: `allowDangerousHTML` is nonstandard, use `allowDangerousHtml` instead"));var i=n.allowDangerousHtml||n.allowDangerousHTML,r={};return a.dangerous=i,a.definition=n.definitions||nM(e),a.footnoteById=r,a.footnoteOrder=[],a.augment=o,a.handlers=Object.assign({},sM,n.handlers),a.unknownHandler=n.unknownHandler,a.passThrough=n.passThrough,JS(e,"footnoteDefinition",(function(e){var t=String(e.identifier).toUpperCase();lM.call(r,t)||(r[t]=e)})),a;function o(e,t){var n,i;return e&&e.data&&((n=e.data).hName&&("element"!==t.type&&(t={type:"element",tagName:"",properties:{},children:[]}),t.tagName=n.hName),"element"===t.type&&n.hProperties&&(t.properties=Object.assign({},t.properties,n.hProperties)),t.children&&n.hChildren&&(t.children=n.hChildren)),i=e&&e.position?e:{position:e},tM(i)||(t.position={start:eM.start(i),end:eM.end(i)}),t}function a(e,t,n,i){return null==i&&"object"==typeof n&&"length"in n&&(i=n,n={}),o(e,{type:"element",tagName:t,properties:n||{},children:i||[]})}}(e,t),i=iM(n,e),r=aM(n);return r&&(i.children=i.children.concat(QS("text","\n"),r)),i}var hM=32,pM=91;function dM(e,t,n,i){for(var r=e.length,o=-1;++o");if(-1!==t)return e.substring(1,t)}var n=/\s/.exec(e);return n?e.substring(0,n.index):e}var yM=/\u00A0/g;function bM(e){return e.replace(yM," ")}function wM(e){return e.replace(/[\\\x00\x08\x0B\x0C\x0E-\x1F ]/g,(function(e){return encodeURIComponent(e)}))}function kM(e){var t=e.match(/^#{1,6} (.*)/m);return null!==t?t[1]:null}function CM(e){return e.split("#").filter((function(e){return!!e})).join(" > ").trim()}function xM(e){var t="",n=e.indexOf("|"),i=n>0;return i?(t=e.substr(n+1).trim(),e=e.substr(0,n).trim()):t=CM(e=e.trim()),e.endsWith("\\")&&(e=e.substr(0,e.length-1)),{href:e=bM(e).trim(),title:t,isAlias:i}}function EM(e){var t=e.match(/^\s*([0-9]+)\s*(?:x\s*([0-9]+)\s*)?$/);return t?{x:parseInt(t[1]),y:t[2]?parseInt(t[2]):0}:null}function SM(e,t){var n=EM(e);if(!n)return!1;var i=n.x,r=n.y,o=t.data=t.data||{},a=o.hProperties=o.hProperties||{};return a.width=String(i),0!==r&&(a.height=String(r)),!0}var MM=WS;MM.globalOptions={breaks:!0,commonmark:!0};var TM=new GS,DM=new GS,AM={};function LM(e){var t=rx()(e),n=new MM(String(t),t);n.setOptions(MM.globalOptions);for(var i=n.parse(),r=0,o=TM.transformers;r?@^`{|}~\[\]\\\s]+/,n=/^#\d+$/,i=/\s/;KS(e,"tag","image",(function(e,i,r){var o=t.exec(i);if(o){var a=o[0];return!n.test(a)&&(!!r||e(a)({type:"tag",tag:a,data:{hName:"a",hProperties:{className:"tag",href:a},hChildren:[{type:"text",value:a}]}}))}}),(function(e,t){for(var n=t;-1!==(n=e.indexOf("#",n));){if(n<=0)return n;var r=e.charAt(n-1);if(i.test(r))return n;n++}}))}(MM),function(e){function t(e){if("boolean"==typeof e.checked){var t=e,n=t.data=t.data||{},i=n.hProperties=n.hProperties||{};i.className="task-list-item",e.checked&&(i.className+=" is-checked"),e.checklist&&(i.dataTask=e.checklist);var r=t.children[0];r&&"paragraph"===r.type&&(t=r),t.children.unshift({type:"checklist",data:{hName:"input",hProperties:{className:"task-list-item-checkbox",type:"checkbox",checked:e.checked}},position:e.position}),delete e.checked}}e.addTransformer((function(e){$S(e,"listItem",t)}))}(TM),function(e){KS(e,"math","text",(function(e,t,n){var i,r,o,a,s,l,c,u=t.length,h=!1,p=!1,d=0;if(92===t.charCodeAt(d)&&(p=!0,d++),36===t.charCodeAt(d)){if(d++,p)return!!n||e(t.slice(0,d))({type:"text",value:"$"});if(36===t.charCodeAt(d)&&(h=!0,d++),o=t.charCodeAt(d),h||32!==o&&9!==o){for(a=d;d57))||h&&36===o){if(s=d-1,d++,h)for(var f=++d;fp&&32===t.charCodeAt(a-1);)a--;for(;a>p&&36===t.charCodeAt(a-1);)h++,a--;for(l<=h&&t.indexOf("$",p)===a&&(u=!0,d=a);p<=d&&p-mp&&32===t.charCodeAt(d-1);)d--;if(u&&p===d||r.push(t.slice(p,d)),u)break;m=o+1,o=-1===(o=t.indexOf("\n",m+1))?f:o}return r=r.join("\n"),e(t.slice(0,o))({type:"math",value:r,data:{hName:"div",hProperties:{className:"math math-block"},hChildren:[{type:"text",value:r}]}})}}}));var t=e.prototype;XS(t.interruptParagraph,"fencedCode","math"),XS(t.interruptList,"fencedCode","math"),XS(t.interruptBlockquote,"fencedCode","math")}(MM),function(e){for(var t=e.prototype,n=t.blockMethods,i=[],r=0;r4&&(d=void 0,f=k);else{if(d<4&&g&&(g.contentStart===g.contentEnd||dM(y,a,v,[e,t.slice(k,1024),!0])))break;d=void 0,f=k}k++}for(k=-1,w=m.length;w>0&&(g=m[w-1]).contentStart===g.contentEnd;)w--;for(c=e(t.slice(0,g.contentEnd));++k0&&(r+="-"+n),e.type="fnRef",e.data={hName:"sup",hProperties:{className:"footnote-ref","data-footnote-id":"fnref-"+r}},e.children=[{type:"element",data:{hName:"a",hProperties:{className:"footnote-link",href:"#fn-"+i},hChildren:[{type:"text",value:"["+r+"]"}]}}]}$S(e,"footnoteDefinition",(function(e){var t=String(e.identifier);i[":"+t]=-1,n[":"+t]={children:e.children,position:e.position}})),$S(e,["footnote","footnoteReference"],(function(e){if("footnote"===e.type){var o=t.length,a=String(o);t.push({count:1,identifier:a}),n[a]={children:e.children,position:e.position},r(e,o,0)}else{a=String(e.identifier);if(!i.hasOwnProperty(":"+a))return e.type="text",void(e.value=a);-1===(o=i[":"+a])&&(o=t.length,i[":"+a]=o,t.push({count:0,identifier:":"+a}));var s=t[o],l=s.count;s.count++,r(e,o,l)}}));for(var o=[],a=0;a0&&(d+="-"+p),c.push({type:"element",data:{hName:"a",hProperties:{className:"footnote-backref footnote-link",href:"#fnref-"+d},hChildren:[{type:"text",value:"↩︎"}]}})}o.push({type:"listItem",synthetic:!0,data:{hProperties:{"data-footnote-id":"fn-"+h}},children:l.children,position:l.position})}}if(0!==o.length){var f,m=e.children[e.children.length-1],g={start:f=m?m.position.end:{line:1,column:1,offset:0},end:f};e.children=e.children.concat({type:"text",value:"\n",position:g},{type:"element",position:g,data:{hName:"section",hProperties:{className:"footnotes"}},children:[{type:"thematicBreak",position:g},{type:"list",position:g,ordered:!0,start:1,spread:!1,children:o}]})}}))}(TM),function(e){e.addTransformer((function(e){$S(e,"image",(function(e){var t=e.alt;if(t){var n=t.lastIndexOf("|");if(-1!==n)SM(t.substr(n+1),e)&&(e.alt=t.substr(0,n))}}))}))}(TM),function(e){e.addTransformer((function(e){$S(e,"iembed",(function(e){var t=e.title;if(t){var n=t.lastIndexOf("|");if(-1!==n)SM(t.substr(n+1),e)&&(t=t.substr(0,n));else SM(t,e)&&(t="");e.data.hProperties.alt=t}}))}))}(TM),function(e,t){t.blockid=function(){return null},e.addTransformer((function(e){for(var t,n=e.children,i=function(e){var i=n[e];if("blockid"===i.type){if(e>0)n[e-1].id=i.id;return n.splice(e,1),e--,t=e,"continue"}if("list"===i.type)return $S(i,"listItem",(function(e){var t=null;$S(e,["list","blockid"],(function(e){return"list"===e.type?"skip":(t=e.id,!1)})),t&&(e.id=t)})),t=e,"continue";var r=null;$S(i,"blockid",(function(e){r=e.id})),r&&(i.id=r),t=e},r=0;r0&&n.push({type:"callout-content",position:{start:l[0].position.start,end:l[l.length-1].position.end},children:l})}else{n.push({type:"callout-title",position:r.position,children:[r]});var c=i[1];if(c){var u=c.position.start,h=i[i.length-1].position.end;n.push({type:"callout-content",position:{start:u,end:h},children:i.slice(1)})}}else{var p={start:e.position.start,end:e.position.start},d=t.type.trim().replace(/\-/g," ").toLowerCase();d=d.charAt(0).toUpperCase()+d.substr(1),n.push({type:"callout-title",position:p,children:[{type:"text",value:d,position:p}]}),r&&n.push({type:"callout-content",position:e.position,children:i})}e.children=n}}))}))}(TM,AM),function(e){function t(e){var t=e.properties;if(t&&!t.className){t.className="external-link",t.target="_blank",t.rel="noopener";var n="",i=e.children;i&&i.length>0&&(n=i[0].value),t.href!==n&&(t["aria-label"]=t.href,t["aria-label-position"]="top")}}e.addTransformer((function(e){$S(e,{type:"element",tagName:"a"},t)}))}(DM),function(e,t){t.yaml=function(e,t){var n=t.value||"";return e(t.position,"pre",{className:"frontmatter"},[e(t,"code",{className:"language-yaml"},[jS("text",n)])])}}(0,AM),function(e,t){var n=/^%%(.+?)%%/;KS(e,"comment","text",(function(e,t,i){var r=n.exec(t);if(r){if(i)return!0;var o=e.now();return o.column+=2,o.offset+=2,e(r[0])({type:"comment",children:this.tokenizeInline(r[1],o)})}}),(function(e,t){return e.indexOf("%%",t)})),t.comment=function(){return null},YS(e,"comment","fencedCode",(function(e,t,n){for(var i=t.length,r=0;r0;){e.pop().unload()}for(;t.length>0;){t.pop()()}this.onunload()}},e.prototype.onunload=function(){},e.prototype.addChild=function(e){return this._children.push(e),this._loaded&&e.load(),e},e.prototype.removeChild=function(e){var t=this._children,n=t.indexOf(e);return-1!==n&&(t.splice(n,1),e.unload()),e},e.prototype.register=function(e){this._events.push(e)},e.prototype.registerEvent=function(e){this.register((function(){return e.e.offref(e)}))},e.prototype.registerDomEvent=function(e,t,n,i){e.addEventListener(t,n,i),this.register((function(){return e.removeEventListener(t,n,i)}))},e.prototype.registerScopeEvent=function(e){this.register((function(){return e.scope.unregister(e)}))},e.prototype.registerInterval=function(e){return this.register((function(){return clearInterval(e)})),e},e}();const KM={accessibility:[[1,16,4,1],[6,"m18 19 1-7-5.87.94"],[6,"m5 8 3-3 5.5 3-2.21 3.1"],[6,"M4.24 14.48c-.19.58-.27 1.2-.23 1.84a5 5 0 0 0 5.31 4.67c.65-.04 1.25-.2 1.8-.46"],[6,"M13.76 17.52c.19-.58.27-1.2.23-1.84a5 5 0 0 0-5.31-4.67c-.65.04-1.25.2-1.8.46"]],activity:[[2,"22 12 18 12 15 21 9 3 6 12 2 12"]],"air-vent":[[6,"M6 12H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"],[6,"M6 8h12"],[6,"M18.3 17.7a2.5 2.5 0 0 1-3.16 3.83 2.53 2.53 0 0 1-1.14-2V12"],[6,"M6.6 15.6A2 2 0 1 0 10 17v-5"]],airplay:[[6,"M5 17H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-1"],[3,"12 15 17 21 7 21 12 15"]],"alarm-check":[[6,"M12 21a8 8 0 1 0 0-16 8 8 0 0 0 0 16z"],[6,"M5 3 2 6"],[6,"m22 6-3-3"],[6,"m6 19-2 2"],[6,"m18 19 2 2"],[6,"m9 13 2 2 4-4"]],"alarm-clock-off":[[6,"M6.87 6.87a8 8 0 1 0 11.26 11.26"],[6,"M19.9 14.25A7.44 7.44 0 0 0 20 13a8 8 0 0 0-8-8 7.44 7.44 0 0 0-1.25.1"],[6,"m22 6-3-3"],[6,"m6 19-2 2"],[6,"m2 2 20 20"],[6,"M4 4 2 6"]],"alarm-clock":[[1,12,13,8],[6,"M12 9v4l2 2"],[6,"M5 3 2 6"],[6,"m22 6-3-3"],[6,"m6 19-2 2"],[6,"m18 19 2 2"]],"alarm-minus":[[6,"M12 21a8 8 0 1 0 0-16 8 8 0 0 0 0 16z"],[6,"M5 3 2 6"],[6,"m22 6-3-3"],[6,"m6 19-2 2"],[6,"m18 19 2 2"],[6,"M9 13h6"]],"alarm-plus":[[6,"M12 21a8 8 0 1 0 0-16 8 8 0 0 0 0 16z"],[6,"M5 3 2 6"],[6,"m22 6-3-3"],[6,"m6 19-2 2"],[6,"m18 19 2 2"],[6,"M12 10v6"],[6,"M9 13h6"]],album:[[5,3,3,18,18,2,2],[2,"11 3 11 11 14 8 17 11 17 3"]],"alert-circle":[[1,12,12,10],[0,12,8,12,12],[0,12,16,12.01,16]],"alert-octagon":[[3,"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2"],[0,12,8,12,12],[0,12,16,12.01,16]],"alert-triangle":[[6,"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"],[0,12,9,12,13],[0,12,17,12.01,17]],"align-center-horizontal":[[6,"M2 12h20"],[6,"M10 16v4a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-4"],[6,"M10 8V4a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v4"],[6,"M20 16v1a2 2 0 0 1-2 2h-2a2 2 0 0 1-2-2v-1"],[6,"M14 8V7c0-1.1.9-2 2-2h2a2 2 0 0 1 2 2v1"]],"align-center-vertical":[[6,"M12 2v20"],[6,"M8 10H4a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h4"],[6,"M16 10h4a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2h-4"],[6,"M8 20H7a2 2 0 0 1-2-2v-2c0-1.1.9-2 2-2h1"],[6,"M16 14h1a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2h-1"]],"align-center":[[0,21,6,3,6],[0,17,12,7,12],[0,19,18,5,18]],"align-end-horizontal":[[5,4,2,6,16,2],[5,14,9,6,9,2],[6,"M22 22H2"]],"align-end-vertical":[[5,2,4,16,6,2],[5,9,14,9,6,2],[6,"M22 22V2"]],"align-horizontal-distribute-center":[[5,4,5,6,14,2],[5,14,7,6,10,2],[6,"M17 22v-5"],[6,"M17 7V2"],[6,"M7 22v-3"],[6,"M7 5V2"]],"align-horizontal-distribute-end":[[5,4,5,6,14,2],[5,14,7,6,10,2],[6,"M10 2v20"],[6,"M20 2v20"]],"align-horizontal-distribute-start":[[5,4,5,6,14,2],[5,14,7,6,10,2],[6,"M4 2v20"],[6,"M14 2v20"]],"align-horizontal-justify-center":[[5,2,5,6,14,2],[5,16,7,6,10,2],[6,"M12 2v20"]],"align-horizontal-justify-end":[[5,2,5,6,14,2],[5,12,7,6,10,2],[6,"M22 2v20"]],"align-horizontal-justify-start":[[5,6,5,6,14,2],[5,16,7,6,10,2],[6,"M2 2v20"]],"align-horizontal-space-around":[[5,9,7,6,10,2],[6,"M4 22V2"],[6,"M20 22V2"]],"align-horizontal-space-between":[[5,3,5,6,14,2],[5,15,7,6,10,2],[6,"M3 2v20"],[6,"M21 2v20"]],"align-justify":[[0,3,6,21,6],[0,3,12,21,12],[0,3,18,21,18]],"align-left":[[0,21,6,3,6],[0,15,12,3,12],[0,17,18,3,18]],"align-right":[[0,21,6,3,6],[0,21,12,9,12],[0,21,18,7,18]],"align-start-horizontal":[[5,4,6,6,16,2],[5,14,6,6,9,2],[6,"M22 2H2"]],"align-start-vertical":[[5,6,14,9,6,2],[5,6,4,16,6,2],[6,"M2 2v20"]],"align-vertical-distribute-center":[[5,5,14,14,6,2],[5,7,4,10,6,2],[6,"M22 7h-5"],[6,"M7 7H1"],[6,"M22 17h-3"],[6,"M5 17H2"]],"align-vertical-distribute-end":[[5,5,14,14,6,2],[5,7,4,10,6,2],[6,"M2 20h20"],[6,"M2 10h20"]],"align-vertical-distribute-start":[[5,5,14,14,6,2],[5,7,4,10,6,2],[6,"M2 14h20"],[6,"M2 4h20"]],"align-vertical-justify-center":[[5,5,16,14,6,2],[5,7,2,10,6,2],[6,"M2 12h20"]],"align-vertical-justify-end":[[5,5,12,14,6,2],[5,7,2,10,6,2],[6,"M2 22h20"]],"align-vertical-justify-start":[[5,5,16,14,6,2],[5,7,6,10,6,2],[6,"M2 2h20"]],"align-vertical-space-around":[[5,7,9,10,6,2],[6,"M22 20H2"],[6,"M22 4H2"]],"align-vertical-space-between":[[5,5,15,14,6,2],[5,7,3,10,6,2],[6,"M2 21h20"],[6,"M2 3h20"]],anchor:[[1,12,5,3],[0,12,22,12,8],[6,"M5 12H2a10 10 0 0 0 20 0h-3"]],angry:[[1,12,12,10],[6,"M16 16s-1.5-2-4-2-4 2-4 2"],[6,"M7.5 8 10 9"],[6,"m14 9 2.5-1"],[6,"M9 10h0"],[6,"M15 10h0"]],annoyed:[[1,12,12,10],[6,"M8 15h8"],[6,"M8 9h2"],[6,"M14 9h2"]],aperture:[[1,12,12,10],[0,14.31,8,20.05,17.94],[0,9.69,8,21.17,8],[0,7.38,12,13.12,2.06],[0,9.69,16,3.95,6.06],[0,14.31,16,2.83,16],[0,16.62,12,10.88,21.94]],apple:[[6,"M12 20.94c1.5 0 2.75 1.06 4 1.06 3 0 6-8 6-12.22A4.91 4.91 0 0 0 17 5c-2.22 0-4 1.44-5 2-1-.56-2.78-2-5-2a4.9 4.9 0 0 0-5 4.78C2 14 5 22 8 22c1.25 0 2.5-1.06 4-1.06Z"],[6,"M10 2c1 .5 2 2 2 5"]],"archive-restore":[[5,2,4,20,5,2],[6,"M12 13v7"],[6,"m9 16 3-3 3 3"],[6,"M4 9v9a2 2 0 0 0 2 2h2"],[6,"M20 9v9a2 2 0 0 1-2 2h-2"]],archive:[[5,2,4,20,5,2],[6,"M4 9v9a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9"],[6,"M10 13h4"]],armchair:[[6,"M19 9V6a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v3"],[6,"M3 11v5a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-5a2 2 0 0 0-4 0v2H7v-2a2 2 0 0 0-4 0Z"],[6,"M5 18v2"],[6,"M19 18v2"]],"arrow-big-down":[[6,"M9 3h6v11h4l-7 7-7-7h4z"]],"arrow-big-left":[[6,"m3 12 7-7v4h11v6H10v4z"]],"arrow-big-right":[[6,"m21 12-7-7v4H3v6h11v4z"]],"arrow-big-up":[[6,"M9 21V10H5l7-7 7 7h-4v11z"]],"arrow-down-circle":[[1,12,12,10],[2,"8 12 12 16 16 12"],[0,12,8,12,16]],"arrow-down-left":[[0,17,7,7,17],[2,"17 17 7 17 7 7"]],"arrow-down-right":[[0,7,7,17,17],[2,"17 7 17 17 7 17"]],"arrow-down":[[0,12,5,12,19],[2,"19 12 12 19 5 12"]],"arrow-left-circle":[[1,12,12,10],[2,"12 8 8 12 12 16"],[0,16,12,8,12]],"arrow-left-right":[[2,"17 11 21 7 17 3"],[0,21,7,9,7],[2,"7 21 3 17 7 13"],[0,15,17,3,17]],"arrow-left":[[0,19,12,5,12],[2,"12 19 5 12 12 5"]],"arrow-right-circle":[[1,12,12,10],[2,"12 16 16 12 12 8"],[0,8,12,16,12]],"arrow-right":[[0,5,12,19,12],[2,"12 5 19 12 12 19"]],"arrow-up-circle":[[1,12,12,10],[2,"16 12 12 8 8 12"],[0,12,16,12,8]],"arrow-up-down":[[2,"11 17 7 21 3 17"],[0,7,21,7,9],[2,"21 7 17 3 13 7"],[0,17,15,17,3]],"arrow-up-left":[[0,17,17,7,7],[2,"7 17 7 7 17 7"]],"arrow-up-right":[[0,7,17,17,7],[2,"7 7 17 7 17 17"]],"arrow-up":[[0,12,19,12,5],[2,"5 12 12 5 19 12"]],asterisk:[[6,"M12 6v12"],[6,"M17.196 9 6.804 15"],[6,"m6.804 9 10.392 6"]],"at-sign":[[1,12,12,4],[6,"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-3.92 7.94"]],award:[[1,12,8,6],[6,"M15.477 12.89 17 22l-5-3-5 3 1.523-9.11"]],axe:[[6,"m14 12-8.501 8.501a2.12 2.12 0 0 1-2.998 0h-.002a2.12 2.12 0 0 1 0-2.998L11 9.002"],[6,"m9 7 4-4 6 6h3l-.13.648a7.648 7.648 0 0 1-5.081 5.756L15 16v-3z"]],"axis-3d":[[6,"M4 4v16h16"],[6,"m4 20 7-7"]],baby:[[6,"M9 12h0.01"],[6,"M15 12h0.01"],[6,"M10 16c.5.3 1.2.5 2 .5s1.5-.2 2-.5"],[6,"M19 6.3a9 9 0 0 1 1.8 3.9 2 2 0 0 1 0 3.6 9 9 0 0 1-17.6 0 2 2 0 0 1 0-3.6A9 9 0 0 1 12 3c2 0 3.5 1.1 3.5 2.5s-.9 2.5-2 2.5c-.8 0-1.5-.4-1.5-1"]],backpack:[[6,"M4 20V10a4 4 0 0 1 4-4h8a4 4 0 0 1 4 4v10a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2Z"],[6,"M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2"],[6,"M8 21v-5a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v5"],[6,"M8 10h8"],[6,"M8 18h8"]],"baggage-claim":[[6,"M22 18H6a2 2 0 0 1-2-2V7a2 2 0 0 0-2-2"],[6,"M17 14V4a2 2 0 0 0-2-2h-1a2 2 0 0 0-2 2v10"],[5,8,6,13,8,1],[1,18,20,2],[1,9,20,2]],banana:[[6,"M4 13c3.5-2 8-2 10 2a5.5 5.5 0 0 1 8 5"],[6,"M5.15 17.89c5.52-1.52 8.65-6.89 7-12C11.55 4 11.5 2 13 2c3.22 0 5 5.5 5 8 0 6.5-4.2 12-10.49 12C5.11 22 2 22 2 20c0-1.5 1.14-1.55 3.15-2.11Z"]],banknote:[[5,2,6,20,12,2],[1,12,12,2],[6,"M6 12h.01M18 12h.01"]],"bar-chart-2":[[0,18,20,18,10],[0,12,20,12,4],[0,6,20,6,14]],"bar-chart-3":[[6,"M3 3v18h18"],[6,"M18 17V9"],[6,"M13 17V5"],[6,"M8 17v-3"]],"bar-chart-4":[[6,"M3 3v18h18"],[6,"M13 17V9"],[6,"M18 17V5"],[6,"M8 17v-3"]],"bar-chart-horizontal":[[6,"M3 3v18h18"],[6,"M7 16h8"],[6,"M7 11h12"],[6,"M7 6h3"]],"bar-chart":[[0,12,20,12,10],[0,18,20,18,4],[0,6,20,6,16]],baseline:[[6,"M4 20h16"],[6,"m6 16 6-12 6 12"],[6,"M8 12h8"]],bath:[[6,"M9 6 6.5 3.5a1.5 1.5 0 0 0-1-.5C4.683 3 4 3.683 4 4.5V17a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-5"],[0,10,5,8,7],[0,2,12,22,12],[0,7,19,7,21],[0,17,19,17,21]],"battery-charging":[[6,"M15 7h1a2 2 0 0 1 2 2v6a2 2 0 0 1-2 2h-2"],[6,"M6 7H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h1"],[6,"m11 7-3 5h4l-3 5"],[0,22,11,22,13]],"battery-full":[[5,2,7,16,10,2,2],[0,22,11,22,13],[0,6,11,6,13],[0,10,11,10,13],[0,14,11,14,13]],"battery-low":[[5,2,7,16,10,2,2],[0,22,11,22,13],[0,6,11,6,13]],"battery-medium":[[5,2,7,16,10,2,2],[0,22,11,22,13],[0,6,11,6,13],[0,10,11,10,13]],"battery-warning":[[6,"M14 7h2a2 2 0 0 1 2 2v6c0 1 -1 2 -2 2h-2"],[6,"M6 7h-2a2 2 0 0 0-2 2v6c0 1 1 2 2 2h2"],[0,22,11,22,13],[0,10,7,10,13],[0,10,17,10,17.01]],battery:[[5,2,7,16,10,2,2],[0,22,11,22,13]],beaker:[[6,"M4.5 3h15"],[6,"M6 3v16a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V3"],[6,"M6 14h12"]],"bean-off":[[6,"M9 9c-.64.64-1.521.954-2.402 1.165A6 6 0 0 0 8 22a13.96 13.96 0 0 0 9.9-4.1"],[6,"M10.75 5.093A6 6 0 0 1 22 8c0 2.411-.61 4.68-1.683 6.66"],[6,"M5.341 10.62a4 4 0 0 0 6.487 1.208M10.62 5.341a4.015 4.015 0 0 1 2.039 2.04"],[0,2,2,22,22]],bean:[[6,"M10.165 6.598C9.954 7.478 9.64 8.36 9 9c-.64.64-1.521.954-2.402 1.165A6 6 0 0 0 8 22c7.732 0 14-6.268 14-14a6 6 0 0 0-11.835-1.402Z"],[6,"M5.341 10.62a4 4 0 1 0 5.279-5.28"]],"bed-double":[[6,"M2 20v-8a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v8"],[6,"M4 10V6a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v4"],[6,"M12 4v6"],[6,"M2 18h20"]],"bed-single":[[6,"M3 20v-8a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v8"],[6,"M5 10V6a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v4"],[6,"M3 18h18"]],bed:[[6,"M2 4v16"],[6,"M2 8h18a2 2 0 0 1 2 2v10"],[6,"M2 17h20"],[6,"M6 8v9"]],beef:[[1,12.5,8.5,2.5],[6,"M12.5 2a6.5 6.5 0 0 0-6.22 4.6c-1.1 3.13-.78 3.9-3.18 6.08A3 3 0 0 0 5 18c4 0 8.4-1.8 11.4-4.3A6.5 6.5 0 0 0 12.5 2Z"],[6,"m18.5 6 2.19 4.5a6.48 6.48 0 0 1 .31 2 6.49 6.49 0 0 1-2.6 5.2C15.4 20.2 11 22 7 22a3 3 0 0 1-2.68-1.66L2.4 16.5"]],beer:[[6,"M17 11h1a3 3 0 0 1 0 6h-1"],[6,"M9 12v6"],[6,"M13 12v6"],[6,"M14 7.5c-1 0-1.44.5-3 .5s-2-.5-3-.5-1.72.5-2.5.5a2.5 2.5 0 0 1 0-5c.78 0 1.57.5 2.5.5S9.44 2 11 2s2 1.5 3 1.5 1.72-.5 2.5-.5a2.5 2.5 0 0 1 0 5c-.78 0-1.5-.5-2.5-.5Z"],[6,"M5 8v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8"]],"bell-minus":[[6,"M13.73 21a2 2 0 0 1-3.46 0"],[6,"M21 5h-6"],[6,"M18.021 9C18.29 15.193 21 17 21 17H3s3-2 3-9a6 6 0 0 1 7-5.916"]],"bell-off":[[6,"M13.73 21a2 2 0 0 1-3.46 0"],[6,"M18.63 13A17.888 17.888 0 0 1 18 8"],[6,"M6.26 6.26A5.86 5.86 0 0 0 6 8c0 7-3 9-3 9h14"],[6,"M18 8a6 6 0 0 0-9.33-5"],[6,"m2 2 20 20"]],"bell-plus":[[6,"M18.387 12C19.198 15.799 21 17 21 17H3s3-2 3-9a6 6 0 0 1 7-5.916"],[6,"M13.73 21a2 2 0 0 1-3.46 0"],[6,"M18 2v6"],[6,"M21 5h-6"]],"bell-ring":[[6,"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"],[6,"M13.73 21a2 2 0 0 1-3.46 0"],[6,"M2 8c0-2.2.7-4.3 2-6"],[6,"M22 8a10 10 0 0 0-2-6"]],bell:[[6,"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"],[6,"M13.73 21a2 2 0 0 1-3.46 0"]],bike:[[1,5.5,17.5,3.5],[1,18.5,17.5,3.5],[6,"M15 6a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm-3 11.5V14l-3-3 4-3 2 3h2"]],binary:[[6,"M6 20h4"],[6,"M14 10h4"],[6,"M6 14h2v6"],[6,"M14 4h2v6"],[5,6,4,4,6],[5,14,14,4,6]],bitcoin:[[6,"M11.767 19.089c4.924.868 6.14-6.025 1.216-6.894m-1.216 6.894L5.86 18.047m5.908 1.042-.347 1.97m1.563-8.864c4.924.869 6.14-6.025 1.215-6.893m-1.215 6.893-3.94-.694m5.155-6.2L8.29 4.26m5.908 1.042.348-1.97M7.48 20.364l3.126-17.727"]],"bluetooth-connected":[[6,"m7 7 10 10-5 5V2l5 5L7 17"],[0,18,12,21,12],[0,3,12,6,12]],"bluetooth-off":[[6,"m17 17-5 5V12l-5 5"],[6,"m2 2 20 20"],[6,"M14.5 9.5 17 7l-5-5v4.5"]],"bluetooth-searching":[[6,"m7 7 10 10-5 5V2l5 5L7 17"],[6,"M20.83 14.83a4 4 0 0 0 0-5.66"],[6,"M18 12h.01"]],bluetooth:[[6,"m7 7 10 10-5 5V2l5 5L7 17"]],bold:[[6,"M6 4h8a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z"],[6,"M6 12h9a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z"]],bomb:[[1,11,13,9],[6,"m19.5 9.5 1.8-1.8a2.4 2.4 0 0 0 0-3.4l-1.6-1.6a2.41 2.41 0 0 0-3.4 0l-1.8 1.8"],[6,"m22 2-1.5 1.5"]],bone:[[6,"M18.6 9.82c-.52-.21-1.15-.25-1.54.15l-7.07 7.06c-.39.39-.36 1.03-.15 1.54.12.3.16.6.16.93a2.5 2.5 0 0 1-5 0c0-.26-.24-.5-.5-.5a2.5 2.5 0 1 1 .96-4.82c.5.21 1.14.25 1.53-.15l7.07-7.06c.39-.39.36-1.03.15-1.54-.12-.3-.21-.6-.21-.93a2.5 2.5 0 0 1 5 0c.01.26.24.49.5.5a2.5 2.5 0 1 1-.9 4.82Z"]],"book-open-check":[[6,"M8 3H2v15h7c1.7 0 3 1.3 3 3V7c0-2.2-1.8-4-4-4Z"],[6,"m16 12 2 2 4-4"],[6,"M22 6V3h-6c-2.2 0-4 1.8-4 4v14c0-1.7 1.3-3 3-3h7v-2.3"]],"book-open":[[6,"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"],[6,"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"]],book:[[6,"M4 19.5A2.5 2.5 0 0 1 6.5 17H20"],[6,"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"]],"bookmark-minus":[[6,"m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z"],[0,15,10,9,10]],"bookmark-plus":[[6,"m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z"],[0,12,7,12,13],[0,15,10,9,10]],bookmark:[[6,"m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z"]],bot:[[5,3,11,18,10,2],[1,12,5,2],[6,"M12 7v4"],[0,8,16,8,16],[0,16,16,16,16]],"box-select":[[6,"M5 3a2 2 0 0 0-2 2"],[6,"M19 3a2 2 0 0 1 2 2"],[6,"M21 19a2 2 0 0 1-2 2"],[6,"M5 21a2 2 0 0 1-2-2"],[6,"M9 3h1"],[6,"M9 21h1"],[6,"M14 3h1"],[6,"M14 21h1"],[6,"M3 9v1"],[6,"M21 9v1"],[6,"M3 14v1"],[6,"M21 14v1"]],box:[[6,"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"],[2,"3.29 7 12 12 20.71 7"],[0,12,22,12,12]],boxes:[[6,"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z"],[6,"m7 16.5-4.74-2.85"],[6,"m7 16.5 5-3"],[6,"M7 16.5v5.17"],[6,"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z"],[6,"m17 16.5-5-3"],[6,"m17 16.5 4.74-2.85"],[6,"M17 16.5v5.17"],[6,"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z"],[6,"M12 8 7.26 5.15"],[6,"m12 8 4.74-2.85"],[6,"M12 13.5V8"]],briefcase:[[5,2,7,20,14,2,2],[6,"M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"]],brush:[[6,"m9.06 11.9 8.07-8.06a2.85 2.85 0 1 1 4.03 4.03l-8.06 8.08"],[6,"M7.07 14.94c-1.66 0-3 1.35-3 3.02 0 1.33-2.5 1.52-2 2.02 1.08 1.1 2.49 2.02 4 2.02 2.2 0 4-1.8 4-4.04a3.01 3.01 0 0 0-3-3.02z"]],bug:[[5,8,6,8,14,4],[6,"m19 7-3 2"],[6,"m5 7 3 2"],[6,"m19 19-3-2"],[6,"m5 19 3-2"],[6,"M20 13h-4"],[6,"M4 13h4"],[6,"m10 4 1 2"],[6,"m14 4-1 2"]],"building-2":[[6,"M6 22V4c0-.27 0-.55.07-.82a1.477 1.477 0 0 1 1.1-1.11C7.46 2 8.73 2 9 2h7c.27 0 .55 0 .82.07a1.477 1.477 0 0 1 1.11 1.1c.07.28.07.56.07.83v18H6Z"],[6,"M2 14v6c0 1.1.9 2 2 2h2V12H4c-.27 0-.55 0-.82.07-.27.07-.52.2-.72.4-.19.19-.32.44-.39.71A3.4 3.4 0 0 0 2 14Z"],[6,"M20.82 9.07A3.4 3.4 0 0 0 20 9h-2v13h2a2 2 0 0 0 2-2v-9c0-.28 0-.55-.07-.82-.07-.27-.2-.52-.4-.72-.19-.19-.44-.32-.71-.39Z"],[6,"M10 6h4"],[6,"M10 10h4"],[6,"M10 14h4"],[6,"M10 18h4"]],building:[[5,4,2,16,20,2,2],[6,"M9 22v-4h6v4"],[6,"M8 6h.01"],[6,"M16 6h.01"],[6,"M12 6h.01"],[6,"M12 10h.01"],[6,"M12 14h.01"],[6,"M16 10h.01"],[6,"M16 14h.01"],[6,"M8 10h.01"],[6,"M8 14h.01"]],bus:[[6,"M19 17h2l.64-2.54c.24-.959.24-1.962 0-2.92l-1.07-4.27A3 3 0 0 0 17.66 5H4a2 2 0 0 0-2 2v10h2"],[6,"M14 17H9"],[1,6.5,17.5,2.5],[1,16.5,17.5,2.5]],cake:[[6,"M20 21v-8a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v8"],[6,"M4 16s.5-1 2-1 2.5 2 4 2 2.5-2 4-2 2.5 2 4 2 2-1 2-1"],[6,"M2 21h20"],[6,"M7 8v2"],[6,"M12 8v2"],[6,"M17 8v2"],[6,"M7 4h.01"],[6,"M12 4h.01"],[6,"M17 4h.01"]],calculator:[[5,4,2,16,20,2],[0,8,6,16,6],[0,16,14,16,18],[6,"M16 10h.01"],[6,"M12 10h.01"],[6,"M8 10h.01"],[6,"M12 14h.01"],[6,"M8 14h.01"],[6,"M12 18h.01"],[6,"M8 18h.01"]],"calendar-check-2":[[6,"M21 14V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8"],[0,16,2,16,6],[0,8,2,8,6],[0,3,10,21,10],[6,"m16 20 2 2 4-4"]],"calendar-check":[[5,3,4,18,18,2,2],[0,16,2,16,6],[0,8,2,8,6],[0,3,10,21,10],[6,"m9 16 2 2 4-4"]],"calendar-clock":[[6,"M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5"],[6,"M16 2v4"],[6,"M8 2v4"],[6,"M3 10h5"],[6,"M17.5 17.5 16 16.25V14"],[6,"M22 16a6 6 0 1 1-12 0 6 6 0 0 1 12 0Z"]],"calendar-days":[[5,3,4,18,18,2,2],[0,16,2,16,6],[0,8,2,8,6],[0,3,10,21,10],[6,"M8 14h.01"],[6,"M12 14h.01"],[6,"M16 14h.01"],[6,"M8 18h.01"],[6,"M12 18h.01"],[6,"M16 18h.01"]],"calendar-heart":[[6,"M21 10V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h7"],[6,"M16 2v4"],[6,"M8 2v4"],[6,"M3 10h18"],[6,"M21.29 14.7a2.43 2.43 0 0 0-2.65-.52c-.3.12-.57.3-.8.53l-.34.34-.35-.34a2.43 2.43 0 0 0-2.65-.53c-.3.12-.56.3-.79.53-.95.94-1 2.53.2 3.74L17.5 22l3.6-3.55c1.2-1.21 1.14-2.8.19-3.74Z"]],"calendar-minus":[[6,"M21 13V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8"],[0,16,2,16,6],[0,8,2,8,6],[0,3,10,21,10],[0,16,19,22,19]],"calendar-off":[[6,"M4.18 4.18A2 2 0 0 0 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 1.82-1.18"],[6,"M21 15.5V6a2 2 0 0 0-2-2H9.5"],[6,"M16 2v4"],[6,"M3 10h7"],[6,"M21 10h-5.5"],[0,2,2,22,22]],"calendar-plus":[[6,"M21 13V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8"],[0,16,2,16,6],[0,8,2,8,6],[0,3,10,21,10],[0,19,16,19,22],[0,16,19,22,19]],"calendar-range":[[5,3,4,18,18,2,2],[0,16,2,16,6],[0,8,2,8,6],[0,3,10,21,10],[6,"M17 14h-6"],[6,"M13 18H7"],[6,"M7 14h.01"],[6,"M17 18h.01"]],"calendar-search":[[6,"M21 12V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h7.5"],[6,"M16 2v4"],[6,"M8 2v4"],[6,"M3 10h18"],[6,"M18 21a3 3 0 1 0 0-6 3 3 0 0 0 0 6v0Z"],[6,"m22 22-1.5-1.5"]],"calendar-x2":[[6,"M21 13V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8"],[0,16,2,16,6],[0,8,2,8,6],[0,3,10,21,10],[0,17,17,22,22],[0,17,22,22,17]],"calendar-x":[[5,3,4,18,18,2,2],[0,16,2,16,6],[0,8,2,8,6],[0,3,10,21,10],[0,10,14,14,18],[0,14,14,10,18]],calendar:[[5,3,4,18,18,2,2],[0,16,2,16,6],[0,8,2,8,6],[0,3,10,21,10]],"camera-off":[[0,2,2,22,22],[6,"M7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16"],[6,"M9.5 4h5L17 7h3a2 2 0 0 1 2 2v7.5"],[6,"M14.121 15.121A3 3 0 1 1 9.88 10.88"]],camera:[[6,"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"],[1,12,13,3]],"candy-off":[[6,"m8.5 8.5-1 1a4.95 4.95 0 0 0 7 7l1-1"],[6,"M11.843 6.187A4.947 4.947 0 0 1 16.5 7.5a4.947 4.947 0 0 1 1.313 4.657"],[6,"M14 16.5V14"],[6,"M14 6.5v1.843"],[6,"M10 10v7.5"],[6,"m16 7 1-5 1.367.683A3 3 0 0 0 19.708 3H21v1.292a3 3 0 0 0 .317 1.341L22 7l-5 1"],[6,"m8 17-1 5-1.367-.683A3 3 0 0 0 4.292 21H3v-1.292a3 3 0 0 0-.317-1.341L2 17l5-1"],[0,2,2,22,22]],candy:[[6,"m9.5 7.5-2 2a4.95 4.95 0 1 0 7 7l2-2a4.95 4.95 0 1 0-7-7Z"],[6,"M14 6.5v10"],[6,"M10 7.5v10"],[6,"m16 7 1-5 1.37.68A3 3 0 0 0 19.7 3H21v1.3c0 .46.1.92.32 1.33L22 7l-5 1"],[6,"m8 17-1 5-1.37-.68A3 3 0 0 0 4.3 21H3v-1.3a3 3 0 0 0-.32-1.33L2 17l5-1"]],car:[[6,"M14 16H9m10 0h3v-3.15a1 1 0 0 0-.84-.99L16 11l-2.7-3.6a1 1 0 0 0-.8-.4H5.24a2 2 0 0 0-1.8 1.1l-.8 1.63A6 6 0 0 0 2 12.42V16h2"],[1,6.5,16.5,2.5],[1,16.5,16.5,2.5]],carrot:[[6,"M2.27 21.7s9.87-3.5 12.73-6.36a4.5 4.5 0 0 0-6.36-6.37C5.77 11.84 2.27 21.7 2.27 21.7zM8.64 14l-2.05-2.04M15.34 15l-2.46-2.46"],[6,"M22 9s-1.33-2-3.5-2C16.86 7 15 9 15 9s1.33 2 3.5 2S22 9 22 9z"],[6,"M15 2s-2 1.33-2 3.5S15 9 15 9s2-1.84 2-3.5C17 3.33 15 2 15 2z"]],cast:[[6,"M2 8V6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6"],[6,"M2 12a9 9 0 0 1 8 8"],[6,"M2 16a5 5 0 0 1 4 4"],[0,2,20,2.01,20]],cat:[[6,"M12 5c.67 0 1.35.09 2 .26 1.78-2 5.03-2.84 6.42-2.26 1.4.58-.42 7-.42 7 .57 1.07 1 2.24 1 3.44C21 17.9 16.97 21 12 21s-9-3-9-7.56c0-1.25.5-2.4 1-3.44 0 0-1.89-6.42-.5-7 1.39-.58 4.72.23 6.5 2.23A9.04 9.04 0 0 1 12 5Z"],[6,"M8 14v.5"],[6,"M16 14v.5"],[6,"M11.25 16.25h1.5L12 17l-.75-.75Z"]],"check-check":[[6,"M18 6 7 17l-5-5"],[6,"m22 10-7.5 7.5L13 16"]],"check-circle-2":[[6,"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z"],[6,"m9 12 2 2 4-4"]],"check-circle":[[6,"M22 11.08V12a10 10 0 1 1-5.93-9.14"],[2,"22 4 12 14.01 9 11.01"]],"check-square":[[2,"9 11 12 14 22 4"],[6,"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"]],check:[[2,"20 6 9 17 4 12"]],"chef-hat":[[6,"M6 13.87A4 4 0 0 1 7.41 6a5.11 5.11 0 0 1 1.05-1.54 5 5 0 0 1 7.08 0A5.11 5.11 0 0 1 16.59 6 4 4 0 0 1 18 13.87V21H6Z"],[0,6,17,18,17]],cherry:[[6,"M2 17a5 5 0 0 0 10 0c0-2.76-2.5-5-5-3-2.5-2-5 .24-5 3Z"],[6,"M12 17a5 5 0 0 0 10 0c0-2.76-2.5-5-5-3-2.5-2-5 .24-5 3Z"],[6,"M7 14c3.22-2.91 4.29-8.75 5-12 1.66 2.38 4.94 9 5 12"],[6,"M22 9c-4.29 0-7.14-2.33-10-7 5.71 0 10 4.67 10 7Z"]],"chevron-down":[[2,"6 9 12 15 18 9"]],"chevron-first":[[2,"17 18 11 12 17 6"],[6,"M7 6v12"]],"chevron-last":[[2,"7 18 13 12 7 6"],[6,"M17 6v12"]],"chevron-left":[[2,"15 18 9 12 15 6"]],"chevron-right":[[2,"9 18 15 12 9 6"]],"chevron-up":[[2,"18 15 12 9 6 15"]],"chevrons-down-up":[[6,"m7 20 5-5 5 5"],[6,"m7 4 5 5 5-5"]],"chevrons-down":[[2,"7 13 12 18 17 13"],[2,"7 6 12 11 17 6"]],"chevrons-left-right":[[6,"m9 7-5 5 5 5"],[6,"m15 7 5 5-5 5"]],"chevrons-left":[[2,"11 17 6 12 11 7"],[2,"18 17 13 12 18 7"]],"chevrons-right-left":[[6,"m20 17-5-5 5-5"],[6,"m4 17 5-5-5-5"]],"chevrons-right":[[2,"13 17 18 12 13 7"],[2,"6 17 11 12 6 7"]],"chevrons-up-down":[[6,"m7 15 5 5 5-5"],[6,"m7 9 5-5 5 5"]],"chevrons-up":[[2,"17 11 12 6 7 11"],[2,"17 18 12 13 7 18"]],chrome:[[1,12,12,10],[1,12,12,4],[0,21.17,8,12,8],[0,3.95,6.06,8.54,14],[0,10.88,21.94,15.46,14]],"cigarette-off":[[0,2,2,22,22],[6,"M12 12H2v4h14"],[6,"M22 12v4"],[6,"M18 12h-.5"],[6,"M7 12v4"],[6,"M18 8c0-2.5-2-2.5-2-5"],[6,"M22 8c0-2.5-2-2.5-2-5"]],cigarette:[[6,"M18 12H2v4h16"],[6,"M22 12v4"],[6,"M7 12v4"],[6,"M18 8c0-2.5-2-2.5-2-5"],[6,"M22 8c0-2.5-2-2.5-2-5"]],"circle-dot":[[1,12,12,10],[1,12,12,1]],"circle-ellipsis":[[1,12,12,10],[6,"M17 12h.01"],[6,"M12 12h.01"],[6,"M7 12h.01"]],"circle-slashed":[[1,12,12,10],[6,"M22 2 2 22"]],circle:[[1,12,12,10]],citrus:[[6,"M5.51 18.49a12 12 0 0 0 16.12.78c.49-.41.49-1.15.03-1.6L6.34 2.33a1.08 1.08 0 0 0-1.6.03A12 12 0 0 0 5.5 18.5Z"],[6,"M8.34 15.66a8 8 0 0 0 10.4.78c.54-.4.54-1.16.06-1.64L9.2 5.2c-.48-.48-1.25-.48-1.64.06a8 8 0 0 0 .78 10.4Z"],[6,"m14 10-5.5 5.5"],[6,"M14 10v8"],[6,"M14 10H6"]],clapperboard:[[6,"M4 11v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8H4Z"],[6,"m4 11-.88-2.87a2 2 0 0 1 1.33-2.5l11.48-3.5a2 2 0 0 1 2.5 1.32l.87 2.87L4 11.01Z"],[6,"m6.6 4.99 3.38 4.2"],[6,"m11.86 3.38 3.38 4.2"]],"clipboard-check":[[5,8,2,8,4,1,1],[6,"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"],[6,"m9 14 2 2 4-4"]],"clipboard-copy":[[5,8,2,8,4,1,1],[6,"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2"],[6,"M16 4h2a2 2 0 0 1 2 2v4"],[6,"M21 14H11"],[6,"m15 10-4 4 4 4"]],"clipboard-edit":[[5,8,2,8,4,1,1],[6,"M10.42 12.61a2.1 2.1 0 1 1 2.97 2.97L7.95 21 4 22l.99-3.95 5.43-5.44Z"],[6,"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-5.5"],[6,"M4 13.5V6a2 2 0 0 1 2-2h2"]],"clipboard-list":[[5,8,2,8,4,1,1],[6,"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"],[6,"M12 11h4"],[6,"M12 16h4"],[6,"M8 11h.01"],[6,"M8 16h.01"]],"clipboard-signature":[[5,8,2,8,4,1,1],[6,"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-.5"],[6,"M16 4h2a2 2 0 0 1 1.73 1"],[6,"M18.42 9.61a2.1 2.1 0 1 1 2.97 2.97L16.95 17 13 18l.99-3.95 4.43-4.44Z"],[6,"M8 18h1"]],"clipboard-type":[[5,8,2,8,4,1,1],[6,"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"],[6,"M9 12v-1h6v1"],[6,"M11 17h2"],[6,"M12 11v6"]],"clipboard-x":[[5,8,2,8,4,1,1],[6,"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"],[6,"m15 11-6 6"],[6,"m9 11 6 6"]],clipboard:[[5,8,2,8,4,1,1],[6,"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"]],"clock-1":[[1,12,12,10],[2,"12 6 12 12 14.5 8"]],"clock-10":[[1,12,12,10],[2,"12 6 12 12 8 10"]],"clock-11":[[1,12,12,10],[2,"12 6 12 12 9.5 8"]],"clock-12":[[1,12,12,10],[2,"12 6 12 12"]],"clock-2":[[1,12,12,10],[2,"12 6 12 12 16 10"]],"clock-3":[[1,12,12,10],[2,"12 6 12 12 16.5 12"]],"clock-4":[[1,12,12,10],[2,"12 6 12 12 16 14"]],"clock-5":[[1,12,12,10],[2,"12 6 12 12 14.5 16"]],"clock-6":[[1,12,12,10],[2,"12 6 12 12 12 16.5"]],"clock-7":[[1,12,12,10],[2,"12 6 12 12 9.5 16"]],"clock-8":[[1,12,12,10],[2,"12 6 12 12 8 14"]],"clock-9":[[1,12,12,10],[2,"12 6 12 12 7.5 12"]],clock:[[1,12,12,10],[2,"12 6 12 12 16 14"]],"cloud-cog":[[6,"M20 16.2A4.5 4.5 0 0 0 17.5 8h-1.8A7 7 0 1 0 4 14.9"],[1,12,17,3],[6,"M12 13v1"],[6,"M12 20v1"],[6,"M16 17h-1"],[6,"M9 17H8"],[6,"m15 14-.88.88"],[6,"M9.88 19.12 9 20"],[6,"m15 20-.88-.88"],[6,"M9.88 14.88 9 14"]],"cloud-drizzle":[[6,"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"],[6,"M8 19v1"],[6,"M8 14v1"],[6,"M16 19v1"],[6,"M16 14v1"],[6,"M12 21v1"],[6,"M12 16v1"]],"cloud-fog":[[6,"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"],[6,"M16 17H7"],[6,"M17 21H9"]],"cloud-hail":[[6,"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"],[6,"M16 14v2"],[6,"M8 14v2"],[6,"M16 20h.01"],[6,"M8 20h.01"],[6,"M12 16v2"],[6,"M12 22h.01"]],"cloud-lightning":[[6,"M6 16.326A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 .5 8.973"],[6,"m13 12-3 5h4l-3 5"]],"cloud-moon-rain":[[6,"M10.083 9A6.002 6.002 0 0 1 16 4a4.243 4.243 0 0 0 6 6c0 2.22-1.206 4.16-3 5.197"],[6,"M3 20a5 5 0 1 1 8.9-4H13a3 3 0 0 1 2 5.24"],[6,"M11 20v2"],[6,"M7 19v2"]],"cloud-moon":[[6,"M13 22H7a5 5 0 1 1 4.9-6H13a3 3 0 0 1 0 6Z"],[6,"M10.083 9A6.002 6.002 0 0 1 16 4a4.243 4.243 0 0 0 6 6c0 2.22-1.206 4.16-3 5.197"]],"cloud-off":[[6,"m2 2 20 20"],[6,"M5.782 5.782A7 7 0 0 0 9 19h8.5a4.5 4.5 0 0 0 1.307-.193"],[6,"M21.532 16.5A4.5 4.5 0 0 0 17.5 10h-1.79A7.008 7.008 0 0 0 10 5.07"]],"cloud-rain-wind":[[6,"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"],[6,"m9.2 22 3-7"],[6,"m9 13-3 7"],[6,"m17 13-3 7"]],"cloud-rain":[[6,"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"],[6,"M16 14v6"],[6,"M8 14v6"],[6,"M12 16v6"]],"cloud-snow":[[6,"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"],[6,"M8 15h.01"],[6,"M8 19h.01"],[6,"M12 17h.01"],[6,"M12 21h.01"],[6,"M16 15h.01"],[6,"M16 19h.01"]],"cloud-sun-rain":[[6,"M12 2v2"],[6,"m4.93 4.93 1.41 1.41"],[6,"M20 12h2"],[6,"m19.07 4.93-1.41 1.41"],[6,"M15.947 12.65a4 4 0 0 0-5.925-4.128"],[6,"M3 20a5 5 0 1 1 8.9-4H13a3 3 0 0 1 2 5.24"],[6,"M11 20v2"],[6,"M7 19v2"]],"cloud-sun":[[6,"M12 2v2"],[6,"m4.93 4.93 1.41 1.41"],[6,"M20 12h2"],[6,"m19.07 4.93-1.41 1.41"],[6,"M15.947 12.65a4 4 0 0 0-5.925-4.128"],[6,"M13 22H7a5 5 0 1 1 4.9-6H13a3 3 0 0 1 0 6Z"]],cloud:[[6,"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z"]],cloudy:[[6,"M17.5 21H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z"],[6,"M22 10a3 3 0 0 0-3-3h-2.207a5.502 5.502 0 0 0-10.702.5"]],clover:[[6,"M16.2 3.8a2.7 2.7 0 0 0-3.81 0l-.4.38-.4-.4a2.7 2.7 0 0 0-3.82 0C6.73 4.85 6.67 6.64 8 8l4 4 4-4c1.33-1.36 1.27-3.15.2-4.2z"],[6,"M8 8c-1.36-1.33-3.15-1.27-4.2-.2a2.7 2.7 0 0 0 0 3.81l.38.4-.4.4a2.7 2.7 0 0 0 0 3.82C4.85 17.27 6.64 17.33 8 16"],[6,"M16 16c1.36 1.33 3.15 1.27 4.2.2a2.7 2.7 0 0 0 0-3.81l-.38-.4.4-.4a2.7 2.7 0 0 0 0-3.82C19.15 6.73 17.36 6.67 16 8"],[6,"M7.8 20.2a2.7 2.7 0 0 0 3.81 0l.4-.38.4.4a2.7 2.7 0 0 0 3.82 0c1.06-1.06 1.12-2.85-.21-4.21l-4-4-4 4c-1.33 1.36-1.27 3.15-.2 4.2z"],[6,"m7 17-5 5"]],"code-2":[[6,"m18 16 4-4-4-4"],[6,"m6 8-4 4 4 4"],[6,"m14.5 4-5 16"]],code:[[2,"16 18 22 12 16 6"],[2,"8 6 2 12 8 18"]],codepen:[[3,"12 2 22 8.5 22 15.5 12 22 2 15.5 2 8.5 12 2"],[0,12,22,12,15.5],[2,"22 8.5 12 15.5 2 8.5"],[2,"2 15.5 12 8.5 22 15.5"],[0,12,2,12,8.5]],codesandbox:[[6,"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"],[2,"7.5 4.21 12 6.81 16.5 4.21"],[2,"7.5 19.79 7.5 14.6 3 12"],[2,"21 12 16.5 14.6 16.5 19.79"],[2,"3.27 6.96 12 12.01 20.73 6.96"],[0,12,22.08,12,12]],coffee:[[6,"M17 8h1a4 4 0 1 1 0 8h-1"],[6,"M3 8h14v9a4 4 0 0 1-4 4H7a4 4 0 0 1-4-4Z"],[0,6,2,6,4],[0,10,2,10,4],[0,14,2,14,4]],cog:[[6,"M12 20a8 8 0 1 0 0-16 8 8 0 0 0 0 16Z"],[6,"M12 14a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z"],[6,"M12 2v2"],[6,"M12 22v-2"],[6,"m17 20.66-1-1.73"],[6,"M11 10.27 7 3.34"],[6,"m20.66 17-1.73-1"],[6,"m3.34 7 1.73 1"],[6,"M14 12h8"],[6,"M2 12h2"],[6,"m20.66 7-1.73 1"],[6,"m3.34 17 1.73-1"],[6,"m17 3.34-1 1.73"],[6,"m11 13.73-4 6.93"]],coins:[[1,8,8,6],[6,"M18.09 10.37A6 6 0 1 1 10.34 18"],[6,"M7 6h1v4"],[6,"m16.71 13.88.7.71-2.82 2.82"]],columns:[[5,3,3,18,18,2,2],[0,12,3,12,21]],command:[[6,"M18 3a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3H6a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3V6a3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3h12a3 3 0 0 0 3-3 3 3 0 0 0-3-3z"]],compass:[[1,12,12,10],[3,"16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76"]],component:[[6,"M5.5 8.5 9 12l-3.5 3.5L2 12l3.5-3.5Z"],[6,"m12 2 3.5 3.5L12 9 8.5 5.5 12 2Z"],[6,"M18.5 8.5 22 12l-3.5 3.5L15 12l3.5-3.5Z"],[6,"m12 15 3.5 3.5L12 22l-3.5-3.5L12 15Z"]],"concierge-bell":[[6,"M2 18a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v2H2v-2Z"],[6,"M20 16a8 8 0 1 0-16 0"],[6,"M12 4v4"],[6,"M10 4h4"]],contact:[[6,"M17 18a2 2 0 0 0-2-2H9a2 2 0 0 0-2 2"],[5,3,4,18,18,2],[1,12,10,2],[0,8,2,8,4],[0,16,2,16,4]],contrast:[[1,12,12,10],[6,"M12 18a6 6 0 0 0 0-12v12z"]],cookie:[[6,"M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5"],[6,"M8.5 8.5v.01"],[6,"M16 15.5v.01"],[6,"M12 12v.01"],[6,"M11 17v.01"],[6,"M7 14v.01"]],copy:[[5,9,9,13,13,2,2],[6,"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"]],copyleft:[[1,12,12,10],[6,"M9 9.35a4 4 0 1 1 0 5.3"]],copyright:[[1,12,12,10],[6,"M15 9.354a4 4 0 1 0 0 5.292"]],"corner-down-left":[[2,"9 10 4 15 9 20"],[6,"M20 4v7a4 4 0 0 1-4 4H4"]],"corner-down-right":[[2,"15 10 20 15 15 20"],[6,"M4 4v7a4 4 0 0 0 4 4h12"]],"corner-left-down":[[2,"14 15 9 20 4 15"],[6,"M20 4h-7a4 4 0 0 0-4 4v12"]],"corner-left-up":[[2,"14 9 9 4 4 9"],[6,"M20 20h-7a4 4 0 0 1-4-4V4"]],"corner-right-down":[[2,"10 15 15 20 20 15"],[6,"M4 4h7a4 4 0 0 1 4 4v12"]],"corner-right-up":[[2,"10 9 15 4 20 9"],[6,"M4 20h7a4 4 0 0 0 4-4V4"]],"corner-up-left":[[2,"9 14 4 9 9 4"],[6,"M20 20v-7a4 4 0 0 0-4-4H4"]],"corner-up-right":[[2,"15 14 20 9 15 4"],[6,"M4 20v-7a4 4 0 0 1 4-4h12"]],cpu:[[5,4,4,16,16,2,2],[5,9,9,6,6],[0,9,2,9,4],[0,15,2,15,4],[0,9,21,9,22],[0,15,20,15,22],[0,20,9,22,9],[0,20,14,22,14],[0,2,9,4,9],[0,2,14,4,14]],"credit-card":[[5,2,5,20,14,2],[0,2,10,22,10]],croissant:[[6,"m4.6 13.11 5.79-3.21c1.89-1.05 4.79 1.78 3.71 3.71l-3.22 5.81C8.8 23.16.79 15.23 4.6 13.11Z"],[6,"m10.5 9.5-1-2.29C9.2 6.48 8.8 6 8 6H4.5C2.79 6 2 6.5 2 8.5a7.71 7.71 0 0 0 2 4.83"],[6,"M8 6c0-1.55.24-4-2-4-2 0-2.5 2.17-2.5 4"],[6,"m14.5 13.5 2.29 1c.73.3 1.21.7 1.21 1.5v3.5c0 1.71-.5 2.5-2.5 2.5a7.71 7.71 0 0 1-4.83-2"],[6,"M18 16c1.55 0 4-.24 4 2 0 2-2.17 2.5-4 2.5"]],crop:[[6,"M6 2v14a2 2 0 0 0 2 2h14"],[6,"M18 22V8a2 2 0 0 0-2-2H2"]],cross:[[6,"M11 2a2 2 0 0 0-2 2v5H4a2 2 0 0 0-2 2v2c0 1.1.9 2 2 2h5v5c0 1.1.9 2 2 2h2a2 2 0 0 0 2-2v-5h5a2 2 0 0 0 2-2v-2a2 2 0 0 0-2-2h-5V4a2 2 0 0 0-2-2h-2z"]],crosshair:[[1,12,12,10],[0,22,12,18,12],[0,6,12,2,12],[0,12,6,12,2],[0,12,22,12,18]],crown:[[6,"m2 4 3 12h14l3-12-6 7-4-7-4 7-6-7zm3 16h14"]],"cup-soda":[[6,"m6 8 1.75 12.28a2 2 0 0 0 2 1.72h4.54a2 2 0 0 0 2-1.72L18 8"],[6,"M5 8h14"],[6,"M7 15a6.47 6.47 0 0 1 5 0 6.47 6.47 0 0 0 5 0"],[6,"m12 8 1-6h2"]],"curly-braces":[[6,"M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1"],[6,"M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1"]],currency:[[1,12,12,8],[0,3,3,6,6],[0,21,3,18,6],[0,3,21,6,18],[0,21,21,18,18]],"database-backup":[[4,12,5,9,3],[6,"M3 12c0 1.18 2.03 2.2 5 2.7"],[6,"M21 5v4.5"],[6,"m12 16 1.27-1.35a4.75 4.75 0 1 1 .41 5.74"],[6,"M12 12v4h4"],[6,"M3 5v14c0 1.43 2.97 2.63 7 2.93"]],database:[[4,12,5,9,3],[6,"M21 12c0 1.66-4 3-9 3s-9-1.34-9-3"],[6,"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5"]],delete:[[6,"M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2Z"],[0,18,9,12,15],[0,12,9,18,15]],diamond:[[5,12,1,15.56,15.56,2.41,0,"rotate(45 12 1)"]],"dice-1":[[5,3,3,18,18,2,2],[6,"M12 12h.01"]],"dice-2":[[5,3,3,18,18,2,2],[6,"M15 9h.01"],[6,"M9 15h.01"]],"dice-3":[[5,3,3,18,18,2,2],[6,"M16 8h.01"],[6,"M12 12h.01"],[6,"M8 16h.01"]],"dice-4":[[5,3,3,18,18,2,2],[6,"M16 8h.01"],[6,"M8 8h.01"],[6,"M8 16h.01"],[6,"M16 16h.01"]],"dice-5":[[5,3,3,18,18,2,2],[6,"M16 8h.01"],[6,"M8 8h.01"],[6,"M8 16h.01"],[6,"M16 16h.01"],[6,"M12 12h.01"]],"dice-6":[[5,3,3,18,18,2,2],[6,"M16 8h.01"],[6,"M16 12h.01"],[6,"M16 16h.01"],[6,"M8 8h.01"],[6,"M8 12h.01"],[6,"M8 16h.01"]],dices:[[5,2,10,12,12,2,2],[6,"m17.92 14 3.5-3.5a2.24 2.24 0 0 0 0-3l-5-4.92a2.24 2.24 0 0 0-3 0L10 6"],[6,"M6 18h.01"],[6,"M10 14h.01"],[6,"M15 6h.01"],[6,"M18 9h.01"]],diff:[[6,"M12 3v14"],[6,"M5 10h14"],[6,"M5 21h14"]],disc:[[1,12,12,10],[1,12,12,3]],"divide-circle":[[0,8,12,16,12],[0,12,16,12,16],[0,12,8,12,8],[1,12,12,10]],"divide-square":[[5,3,3,18,18,2,2],[0,8,12,16,12],[0,12,16,12,16],[0,12,8,12,8]],divide:[[1,12,6,1],[0,5,12,19,12],[1,12,18,1]],"dna-off":[[6,"M15 2c-1.35 1.5-2.092 3-2.5 4.5M9 22c1.35-1.5 2.092-3 2.5-4.5"],[6,"M2 15c3.333-3 6.667-3 10-3m10-3c-1.5 1.35-3 2.092-4.5 2.5"],[6,"m17 6-2.5-2.5"],[6,"m14 8-1.5-1.5"],[6,"m7 18 2.5 2.5"],[6,"m3.5 14.5.5.5"],[6,"m20 9 .5.5"],[6,"m6.5 12.5 1 1"],[6,"m16.5 10.5 1 1"],[6,"m10 16 1.5 1.5"],[0,2,2,22,22]],dna:[[6,"M2 15c6.667-6 13.333 0 20-6"],[6,"M9 22c1.798-1.998 2.518-3.995 2.807-5.993"],[6,"M15 2c-1.798 1.998-2.518 3.995-2.807 5.993"],[6,"m17 6-2.5-2.5"],[6,"m14 8-1-1"],[6,"m7 18 2.5 2.5"],[6,"m3.5 14.5.5.5"],[6,"m20 9 .5.5"],[6,"m6.5 12.5 1 1"],[6,"m16.5 10.5 1 1"],[6,"m10 16 1.5 1.5"]],dog:[[6,"M10 5.172C10 3.782 8.423 2.679 6.5 3c-2.823.47-4.113 6.006-4 7 .08.703 1.725 1.722 3.656 1 1.261-.472 1.96-1.45 2.344-2.5"],[6,"M14.267 5.172c0-1.39 1.577-2.493 3.5-2.172 2.823.47 4.113 6.006 4 7-.08.703-1.725 1.722-3.656 1-1.261-.472-1.855-1.45-2.239-2.5"],[6,"M8 14v.5"],[6,"M16 14v.5"],[6,"M11.25 16.25h1.5L12 17l-.75-.75Z"],[6,"M4.42 11.247A13.152 13.152 0 0 0 4 14.556C4 18.728 7.582 21 12 21s8-2.272 8-6.444c0-1.061-.162-2.2-.493-3.309m-9.243-6.082A8.801 8.801 0 0 1 12 5c.78 0 1.5.108 2.161.306"]],"dollar-sign":[[0,12,2,12,22],[6,"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"]],"download-cloud":[[6,"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"],[6,"M12 12v9"],[6,"m8 17 4 4 4-4"]],download:[[6,"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"],[2,"7 10 12 15 17 10"],[0,12,15,12,3]],dribbble:[[1,12,12,10],[6,"M19.13 5.09C15.22 9.14 10 10.44 2.25 10.94"],[6,"M21.75 12.84c-6.62-1.41-12.14 1-16.38 6.32"],[6,"M8.56 2.75c4.37 6 6 9.42 8 17.72"]],droplet:[[6,"M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5C6 11.1 5 13 5 15a7 7 0 0 0 7 7z"]],droplets:[[6,"M7 16.3c2.2 0 4-1.83 4-4.05 0-1.16-.57-2.26-1.71-3.19S7.29 6.75 7 5.3c-.29 1.45-1.14 2.84-2.29 3.76S3 11.1 3 12.25c0 2.22 1.8 4.05 4 4.05z"],[6,"M12.56 6.6A10.97 10.97 0 0 0 14 3.02c.5 2.5 2 4.9 4 6.5s3 3.5 3 5.5a6.98 6.98 0 0 1-11.91 4.97"]],drumstick:[[6,"M15.45 15.4c-2.13.65-4.3.32-5.7-1.1-2.29-2.27-1.76-6.5 1.17-9.42 2.93-2.93 7.15-3.46 9.43-1.18 1.41 1.41 1.74 3.57 1.1 5.71-1.4-.51-3.26-.02-4.64 1.36-1.38 1.38-1.87 3.23-1.36 4.63z"],[6,"m11.25 15.6-2.16 2.16a2.5 2.5 0 1 1-4.56 1.73 2.49 2.49 0 0 1-1.41-4.24 2.5 2.5 0 0 1 3.14-.32l2.16-2.16"]],dumbbell:[[6,"m6.5 6.5 11 11"],[6,"m21 21-1-1"],[6,"m3 3 1 1"],[6,"m18 22 4-4"],[6,"m2 6 4-4"],[6,"m3 10 7-7"],[6,"m14 21 7-7"]],"ear-off":[[6,"M6 18.5a3.5 3.5 0 1 0 7 0c0-1.57.92-2.52 2.04-3.46"],[6,"M6 8.5c0-.75.13-1.47.36-2.14"],[6,"M8.8 3.15A6.5 6.5 0 0 1 19 8.5c0 1.63-.44 2.81-1.09 3.76"],[6,"M12.5 6A2.5 2.5 0 0 1 15 8.5M10 13a2 2 0 0 0 1.82-1.18"],[0,2,2,22,22]],ear:[[6,"M6 8.5a6.5 6.5 0 1 1 13 0c0 6-6 6-6 10a3.5 3.5 0 1 1-7 0"],[6,"M15 8.5a2.5 2.5 0 0 0-5 0v1a2 2 0 1 1 0 4"]],"edit-2":[[6,"M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"]],"edit-3":[[6,"M12 20h9"],[6,"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z"]],edit:[[6,"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"],[6,"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"]],"egg-fried":[[1,11.5,12.5,3.5],[6,"M3 8c0-3.5 2.5-6 6.5-6 5 0 4.83 3 7.5 5s5 2 5 6c0 4.5-2.5 6.5-7 6.5-2.5 0-2.5 2.5-6 2.5s-7-2-7-5.5c0-3 1.5-3 1.5-5C3.5 10 3 9 3 8Z"]],"egg-off":[[6,"M6.399 6.399C5.362 8.157 4.65 10.189 4.5 12c-.37 4.43 1.27 9.95 7.5 10 3.256-.026 5.259-1.547 6.375-3.625"],[6,"M19.532 13.875A14.07 14.07 0 0 0 19.5 12c-.36-4.34-3.95-9.96-7.5-10-1.04.012-2.082.502-3.046 1.297"],[0,2,2,22,22]],egg:[[6,"M12 22c6.23-.05 7.87-5.57 7.5-10-.36-4.34-3.95-9.96-7.5-10-3.55.04-7.14 5.66-7.5 10-.37 4.43 1.27 9.95 7.5 10z"]],"equal-not":[[0,5,9,19,9],[0,5,15,19,15],[0,19,5,5,19]],equal:[[0,5,9,19,9],[0,5,15,19,15]],eraser:[[6,"m7 21-4.3-4.3c-1-1-1-2.5 0-3.4l9.6-9.6c1-1 2.5-1 3.4 0l5.6 5.6c1 1 1 2.5 0 3.4L13 21"],[6,"M22 21H7"],[6,"m5 11 9 9"]],euro:[[6,"M4 10h12"],[6,"M4 14h9"],[6,"M19 6a7.7 7.7 0 0 0-5.2-2A7.9 7.9 0 0 0 6 12c0 4.4 3.5 8 7.8 8 2 0 3.8-.8 5.2-2"]],expand:[[6,"m21 21-6-6m6 6v-4.8m0 4.8h-4.8"],[6,"M3 16.2V21m0 0h4.8M3 21l6-6"],[6,"M21 7.8V3m0 0h-4.8M21 3l-6 6"],[6,"M3 7.8V3m0 0h4.8M3 3l6 6"]],"external-link":[[6,"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"],[2,"15 3 21 3 21 9"],[0,10,14,21,3]],"eye-off":[[6,"M9.88 9.88a3 3 0 1 0 4.24 4.24"],[6,"M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68"],[6,"M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61"],[0,2,2,22,22]],eye:[[6,"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"],[1,12,12,3]],facebook:[[6,"M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"]],factory:[[6,"M2 20a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V8l-7 5V8l-7 5V4a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z"],[6,"M17 18h1"],[6,"M12 18h1"],[6,"M7 18h1"]],fan:[[6,"M10.827 16.379a6.082 6.082 0 0 1-8.618-7.002l5.412 1.45a6.082 6.082 0 0 1 7.002-8.618l-1.45 5.412a6.082 6.082 0 0 1 8.618 7.002l-5.412-1.45a6.082 6.082 0 0 1-7.002 8.618l1.45-5.412Z"],[6,"M12 12v.01"]],"fast-forward":[[3,"13 19 22 12 13 5 13 19"],[3,"2 19 11 12 2 5 2 19"]],feather:[[6,"M20.24 12.24a6 6 0 0 0-8.49-8.49L5 10.5V19h8.5z"],[0,16,8,2,22],[0,17.5,15,9,15]],figma:[[6,"M5 5.5A3.5 3.5 0 0 1 8.5 2H12v7H8.5A3.5 3.5 0 0 1 5 5.5z"],[6,"M12 2h3.5a3.5 3.5 0 1 1 0 7H12V2z"],[6,"M12 12.5a3.5 3.5 0 1 1 7 0 3.5 3.5 0 1 1-7 0z"],[6,"M5 19.5A3.5 3.5 0 0 1 8.5 16H12v3.5a3.5 3.5 0 1 1-7 0z"],[6,"M5 12.5A3.5 3.5 0 0 1 8.5 9H12v7H8.5A3.5 3.5 0 0 1 5 12.5z"]],"file-archive":[[6,"M4 22V4c0-.5.2-1 .6-1.4C5 2.2 5.5 2 6 2h8.5L20 7.5V20c0 .5-.2 1-.6 1.4-.4.4-.9.6-1.4.6h-2"],[2,"14 2 14 8 20 8"],[1,10,20,2],[6,"M10 7V6"],[6,"M10 12v-1"],[6,"M10 18v-2"]],"file-audio-2":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v2"],[2,"14 2 14 8 20 8"],[6,"M2 17v-3a4 4 0 0 1 8 0v3"],[1,9,17,1],[1,3,17,1]],"file-audio":[[6,"M17.5 22h.5c.5 0 1-.2 1.4-.6.4-.4.6-.9.6-1.4V7.5L14.5 2H6c-.5 0-1 .2-1.4.6C4.2 3 4 3.5 4 4v3"],[2,"14 2 14 8 20 8"],[6,"M10 20v-1a2 2 0 1 1 4 0v1a2 2 0 1 1-4 0Z"],[6,"M6 20v-1a2 2 0 1 0-4 0v1a2 2 0 1 0 4 0Z"],[6,"M2 19v-3a6 6 0 0 1 12 0v3"]],"file-axis-3d":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"M8 10v8h8"],[6,"m8 18 4-4"]],"file-badge-2":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[6,"M12 13a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z"],[6,"m14 12.5 1 5.5-3-1-3 1 1-5.5"]],"file-badge":[[6,"M4 7V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2h-6"],[2,"14 2 14 8 20 8"],[6,"M5 17a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z"],[6,"M7 16.5 8 22l-3-1-3 1 1-5.5"]],"file-bar-chart-2":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"M12 18v-6"],[6,"M8 18v-1"],[6,"M16 18v-3"]],"file-bar-chart":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"M12 18v-4"],[6,"M8 18v-2"],[6,"M16 18v-6"]],"file-box":[[6,"M14.5 22H18a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"],[2,"14 2 14 8 20 8"],[6,"M2.97 13.12c-.6.36-.97 1.02-.97 1.74v3.28c0 .72.37 1.38.97 1.74l3 1.83c.63.39 1.43.39 2.06 0l3-1.83c.6-.36.97-1.02.97-1.74v-3.28c0-.72-.37-1.38-.97-1.74l-3-1.83a1.97 1.97 0 0 0-2.06 0l-3 1.83Z"],[6,"m7 17-4.74-2.85"],[6,"m7 17 4.74-2.85"],[6,"M7 17v5"]],"file-check-2":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"],[2,"14 2 14 8 20 8"],[6,"m3 15 2 2 4-4"]],"file-check":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"m9 15 2 2 4-4"]],"file-clock":[[6,"M16 22h2c.5 0 1-.2 1.4-.6.4-.4.6-.9.6-1.4V7.5L14.5 2H6c-.5 0-1 .2-1.4.6C4.2 3 4 3.5 4 4v3"],[2,"14 2 14 8 20 8"],[1,8,16,6],[6,"M9.5 17.5 8 16.25V14"]],"file-code":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"],[2,"14 2 14 8 20 8"],[6,"m9 18 3-3-3-3"],[6,"m5 12-3 3 3 3"]],"file-cog-2":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[1,12,15,2],[6,"M12 12v1"],[6,"M12 17v1"],[6,"m14.6 13.5-.87.5"],[6,"m10.27 16-.87.5"],[6,"m14.6 16.5-.87-.5"],[6,"m10.27 14-.87-.5"]],"file-cog":[[6,"M4 6V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H4"],[2,"14 2 14 8 20 8"],[1,6,14,3],[6,"M6 10v1"],[6,"M6 17v1"],[6,"M10 14H9"],[6,"M3 14H2"],[6,"m9 11-.88.88"],[6,"M3.88 16.12 3 17"],[6,"m9 17-.88-.88"],[6,"M3.88 11.88 3 11"]],"file-diff":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[6,"M12 13V7"],[6,"M9 10h6"],[6,"M9 17h6"]],"file-digit":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"],[2,"14 2 14 8 20 8"],[6,"M10 12h2v6"],[5,2,12,4,6],[6,"M10 18h4"]],"file-down":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"M12 18v-6"],[6,"m9 15 3 3 3-3"]],"file-edit":[[6,"M4 13.5V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2h-5.5"],[2,"14 2 14 8 20 8"],[6,"M10.42 12.61a2.1 2.1 0 1 1 2.97 2.97L7.95 21 4 22l.99-3.95 5.43-5.44Z"]],"file-heart":[[6,"M4 6V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H4"],[2,"14 2 14 8 20 8"],[6,"M10.29 10.7a2.43 2.43 0 0 0-2.66-.52c-.29.12-.56.3-.78.53l-.35.34-.35-.34a2.43 2.43 0 0 0-2.65-.53c-.3.12-.56.3-.79.53-.95.94-1 2.53.2 3.74L6.5 18l3.6-3.55c1.2-1.21 1.14-2.8.19-3.74Z"]],"file-image":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[1,10,13,2],[6,"m20 17-1.09-1.09a2 2 0 0 0-2.82 0L10 22"]],"file-input":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"],[2,"14 2 14 8 20 8"],[6,"M2 15h10"],[6,"m9 18 3-3-3-3"]],"file-json-2":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"],[2,"14 2 14 8 20 8"],[6,"M4 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1"],[6,"M8 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1"]],"file-json":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1"],[6,"M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1"]],"file-key-2":[[6,"M4 10V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H4"],[2,"14 2 14 8 20 8"],[1,4,16,2],[6,"m10 10-4.5 4.5"],[6,"m9 11 1 1"]],"file-key":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[1,10,16,2],[6,"m16 10-4.5 4.5"],[6,"m15 11 1 1"]],"file-line-chart":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"m16 13-3.5 3.5-2-2L8 17"]],"file-lock-2":[[6,"M4 5V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H4"],[2,"14 2 14 8 20 8"],[5,2,13,8,5,1],[6,"M8 13v-2a2 2 0 1 0-4 0v2"]],"file-lock":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[5,8,12,8,6,1],[6,"M15 12v-2a3 3 0 1 0-6 0v2"]],"file-minus-2":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"],[2,"14 2 14 8 20 8"],[6,"M3 15h6"]],"file-minus":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[0,9,15,15,15]],"file-output":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"],[2,"14 2 14 8 20 8"],[6,"M2 15h10"],[6,"m5 12-3 3 3 3"]],"file-pie-chart":[[6,"M16 22h2a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v3"],[2,"14 2 14 8 20 8"],[6,"M4.04 11.71a5.84 5.84 0 1 0 8.2 8.29"],[6,"M13.83 16A5.83 5.83 0 0 0 8 10.17V16h5.83Z"]],"file-plus-2":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"],[2,"14 2 14 8 20 8"],[6,"M3 15h6"],[6,"M6 12v6"]],"file-plus":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[0,12,18,12,12],[0,9,15,15,15]],"file-question":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[6,"M10 10.3c.2-.4.5-.8.9-1a2.1 2.1 0 0 1 2.6.4c.3.4.5.8.5 1.3 0 1.3-2 2-2 2"],[6,"M12 17h.01"]],"file-scan":[[6,"M20 10V7.5L14.5 2H6a2 2 0 0 0-2 2v16c0 1.1.9 2 2 2h4.5"],[2,"14 2 14 8 20 8"],[6,"M16 22a2 2 0 0 1-2-2"],[6,"M20 22a2 2 0 0 0 2-2"],[6,"M20 14a2 2 0 0 1 2 2"],[6,"M16 14a2 2 0 0 0-2 2"]],"file-search-2":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[1,11.5,14.5,2.5],[6,"M13.25 16.25 15 18"]],"file-search":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v3"],[2,"14 2 14 8 20 8"],[6,"M5 17a3 3 0 1 0 0-6 3 3 0 0 0 0 6z"],[6,"m9 18-1.5-1.5"]],"file-signature":[[6,"M20 19.5v.5a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8.5L18 5.5"],[6,"M8 18h1"],[6,"M18.42 9.61a2.1 2.1 0 1 1 2.97 2.97L16.95 17 13 18l.99-3.95 4.43-4.44Z"]],"file-spreadsheet":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"M8 13h2"],[6,"M8 17h2"],[6,"M14 13h2"],[6,"M14 17h2"]],"file-symlink":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v7"],[2,"14 2 14 8 20 8"],[6,"m10 18 3-3-3-3"],[6,"M4 18v-1a2 2 0 0 1 2-2h6"]],"file-terminal":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"m8 16 2-2-2-2"],[6,"M12 18h4"]],"file-text":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[0,16,13,8,13],[0,16,17,8,17],[0,10,9,8,9]],"file-type-2":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"],[2,"14 2 14 8 20 8"],[6,"M2 13v-1h6v1"],[6,"M4 18h2"],[6,"M5 12v6"]],"file-type":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"M9 13v-1h6v1"],[6,"M11 18h2"],[6,"M12 12v6"]],"file-up":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"M12 12v6"],[6,"m15 15-3-3-3 3"]],"file-video-2":[[6,"M4 8V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H4"],[2,"14 2 14 8 20 8"],[6,"m10 15.5 4 2.5v-6l-4 2.5"],[5,2,12,8,6,1]],"file-video":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"m10 11 5 3-5 3v-6Z"]],"file-volume-2":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"M11.5 13.5c.32.4.5.94.5 1.5s-.18 1.1-.5 1.5"],[6,"M15 12c.64.8 1 1.87 1 3s-.36 2.2-1 3"],[6,"M8 15h.01"]],"file-volume":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v3"],[2,"14 2 14 8 20 8"],[6,"m7 10-3 2H2v4h2l3 2v-8Z"],[6,"M11 11c.64.8 1 1.87 1 3s-.36 2.2-1 3"]],"file-warning":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[6,"M12 9v4"],[6,"M12 17h.01"]],"file-x2":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"],[6,"M14 2v6h6"],[6,"m3 12.5 5 5"],[6,"m8 12.5-5 5"]],"file-x":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[0,9.5,12.5,14.5,17.5],[0,14.5,12.5,9.5,17.5]],file:[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"]],files:[[6,"M15.5 2H8.6c-.4 0-.8.2-1.1.5-.3.3-.5.7-.5 1.1v12.8c0 .4.2.8.5 1.1.3.3.7.5 1.1.5h9.8c.4 0 .8-.2 1.1-.5.3-.3.5-.7.5-1.1V6.5L15.5 2z"],[6,"M3 7.6v12.8c0 .4.2.8.5 1.1.3.3.7.5 1.1.5h9.8"],[6,"M15 2v5h5"]],film:[[5,2,2,20,20,2.18,2.18],[0,7,2,7,22],[0,17,2,17,22],[0,2,12,22,12],[0,2,7,7,7],[0,2,17,7,17],[0,17,17,22,17],[0,17,7,22,7]],filter:[[3,"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3"]],fingerprint:[[6,"M2 12C2 6.5 6.5 2 12 2a10 10 0 0 1 8 4"],[6,"M5 19.5C5.5 18 6 15 6 12c0-.7.12-1.37.34-2"],[6,"M17.29 21.02c.12-.6.43-2.3.5-3.02"],[6,"M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4"],[6,"M8.65 22c.21-.66.45-1.32.57-2"],[6,"M14 13.12c0 2.38 0 6.38-1 8.88"],[6,"M2 16h.01"],[6,"M21.8 16c.2-2 .131-5.354 0-6"],[6,"M9 6.8a6 6 0 0 1 9 5.2c0 .47 0 1.17-.02 2"]],"fish-off":[[6,"M18 12.47v.03M18 12v.47M17.525 17.526A6.744 6.744 0 0 1 15 18c-3.56 0-7.56-2.53-8.5-6 .348-1.28 1.114-2.433 2.121-3.38M12.065 6.532A8.802 8.802 0 0 1 15 6c3.56 0 6.06 2.54 7 6-.309 1.14-.786 2.177-1.413 3.058"],[6,"M7 10.67C7 8 5.58 5.97 2.73 5.5c-1 1.5-1 5 .23 6.5-1.24 1.5-1.24 5-.23 6.5C5.58 18.03 7 16 7 13.33M14.48 8.958A9.77 9.77 0 0 1 16 6.07M16 17.93a9.77 9.77 0 0 1-1.728-3.618"],[6,"m16.01 17.93-.23 1.4A2 2 0 0 1 13.8 21H9.5a5.96 5.96 0 0 0 1.49-3.98M8.53 3h5.27a2 2 0 0 1 1.98 1.67l.23 1.4M2 2l20 20"]],fish:[[6,"M6.5 12c.94-3.46 4.94-6 8.5-6 3.56 0 6.06 2.54 7 6-.94 3.47-3.44 6-7 6s-7.56-2.53-8.5-6Z"],[6,"M18 12v.5"],[6,"M16 17.93a9.77 9.77 0 0 1 0-11.86"],[6,"M7 10.67C7 8 5.58 5.97 2.73 5.5c-1 1.5-1 5 .23 6.5-1.24 1.5-1.24 5-.23 6.5C5.58 18.03 7 16 7 13.33"],[6,"M10.46 7.26C10.2 5.88 9.17 4.24 8 3h5.8a2 2 0 0 1 1.98 1.67l.23 1.4"],[6,"m16.01 17.93-.23 1.4A2 2 0 0 1 13.8 21H9.5a5.96 5.96 0 0 0 1.49-3.98"]],"flag-off":[[6,"M8 2c3 0 5 2 8 2s4-1 4-1v11"],[6,"M4 22V4"],[6,"M4 15s1-1 4-1 5 2 8 2"],[0,2,2,22,22]],"flag-triangle-left":[[6,"M17 22V2L7 7l10 5"]],"flag-triangle-right":[[6,"M7 22V2l10 5-10 5"]],flag:[[6,"M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z"],[0,4,22,4,15]],flame:[[6,"M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z"]],"flashlight-off":[[6,"M16 16v4a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2V10c0-2-2-2-2-4"],[6,"M7 2h11v4c0 2-2 2-2 4v1"],[0,11,6,18,6],[0,2,2,22,22]],flashlight:[[6,"M18 6c0 2-2 2-2 4v10a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2V10c0-2-2-2-2-4V2h12z"],[0,6,6,18,6],[0,12,12,12,12]],"flask-conical-off":[[6,"M10 10 4.72 20.55a1 1 0 0 0 .9 1.45h12.76a1 1 0 0 0 .9-1.45l-1.272-2.542"],[6,"M10 2v2.343"],[6,"M14 2v6.343"],[6,"M8.5 2h7"],[6,"M7 16h9"],[0,2,2,22,22]],"flask-conical":[[6,"M10 2v7.527a2 2 0 0 1-.211.896L4.72 20.55a1 1 0 0 0 .9 1.45h12.76a1 1 0 0 0 .9-1.45l-5.069-10.127A2 2 0 0 1 14 9.527V2"],[6,"M8.5 2h7"],[6,"M7 16h10"]],"flask-round":[[6,"M10 2v7.31"],[6,"M14 9.3V1.99"],[6,"M8.5 2h7"],[6,"M14 9.3a6.5 6.5 0 1 1-4 0"],[6,"M5.58 16.5h12.85"]],"flip-horizontal-2":[[6,"m3 7 5 5-5 5V7"],[6,"m21 7-5 5 5 5V7"],[6,"M12 20v2"],[6,"M12 14v2"],[6,"M12 8v2"],[6,"M12 2v2"]],"flip-horizontal":[[6,"M8 3H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h3"],[6,"M16 3h3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-3"],[6,"M12 20v2"],[6,"M12 14v2"],[6,"M12 8v2"],[6,"M12 2v2"]],"flip-vertical-2":[[6,"m17 3-5 5-5-5h10"],[6,"m17 21-5-5-5 5h10"],[6,"M4 12H2"],[6,"M10 12H8"],[6,"M16 12h-2"],[6,"M22 12h-2"]],"flip-vertical":[[6,"M21 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v3"],[6,"M21 16v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-3"],[6,"M4 12H2"],[6,"M10 12H8"],[6,"M16 12h-2"],[6,"M22 12h-2"]],"flower-2":[[6,"M12 5a3 3 0 1 1 3 3m-3-3a3 3 0 1 0-3 3m3-3v1M9 8a3 3 0 1 0 3 3M9 8h1m5 0a3 3 0 1 1-3 3m3-3h-1m-2 3v-1"],[1,12,8,2],[6,"M12 10v12"],[6,"M12 22c4.2 0 7-1.667 7-5-4.2 0-7 1.667-7 5Z"],[6,"M12 22c-4.2 0-7-1.667-7-5 4.2 0 7 1.667 7 5Z"]],flower:[[6,"M12 7.5a4.5 4.5 0 1 1 4.5 4.5M12 7.5A4.5 4.5 0 1 0 7.5 12M12 7.5V9m-4.5 3a4.5 4.5 0 1 0 4.5 4.5M7.5 12H9m7.5 0a4.5 4.5 0 1 1-4.5 4.5m4.5-4.5H15m-3 4.5V15"],[1,12,12,3],[6,"m8 16 1.5-1.5"],[6,"M14.5 9.5 16 8"],[6,"m8 8 1.5 1.5"],[6,"M14.5 14.5 16 16"]],focus:[[1,12,12,3],[6,"M3 7V5a2 2 0 0 1 2-2h2"],[6,"M17 3h2a2 2 0 0 1 2 2v2"],[6,"M21 17v2a2 2 0 0 1-2 2h-2"],[6,"M7 21H5a2 2 0 0 1-2-2v-2"]],"folder-archive":[[6,"M22 20V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2h6"],[1,16,19,2],[6,"M16 11v-1"],[6,"M16 17v-2"]],"folder-check":[[6,"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"],[6,"m9 13 2 2 4-4"]],"folder-clock":[[6,"M7 20H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2"],[1,16,16,6],[6,"M16 14v2l1 1"]],"folder-closed":[[6,"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"],[6,"M2 10h20"]],"folder-cog-2":[[6,"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"],[1,12,13,2],[6,"M12 10v1"],[6,"M12 15v1"],[6,"m14.6 11.5-.87.5"],[6,"m10.27 14-.87.5"],[6,"m14.6 14.5-.87-.5"],[6,"m10.27 12-.87-.5"]],"folder-cog":[[6,"M10.5 20H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v3"],[1,18,18,3],[6,"M18 14v1"],[6,"M18 21v1"],[6,"M22 18h-1"],[6,"M15 18h-1"],[6,"m21 15-.88.88"],[6,"M15.88 20.12 15 21"],[6,"m21 21-.88-.88"],[6,"M15.88 15.88 15 15"]],"folder-down":[[6,"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"],[6,"M12 10v6"],[6,"m15 13-3 3-3-3"]],"folder-edit":[[6,"M8.42 10.61a2.1 2.1 0 1 1 2.97 2.97L5.95 19 2 20l.99-3.95 5.43-5.44Z"],[6,"M2 11.5V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-9.5"]],"folder-heart":[[6,"M11 20H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v1.5"],[6,"M21.29 13.7a2.43 2.43 0 0 0-2.65-.52c-.3.12-.57.3-.8.53l-.34.34-.35-.34a2.43 2.43 0 0 0-2.65-.53c-.3.12-.56.3-.79.53-.95.94-1 2.53.2 3.74L17.5 21l3.6-3.55c1.2-1.21 1.14-2.8.19-3.74Z"]],"folder-input":[[6,"M2 9V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-1"],[6,"M2 13h10"],[6,"m9 16 3-3-3-3"]],"folder-key":[[6,"M10 20H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v2"],[1,16,20,2],[6,"m22 14-4.5 4.5"],[6,"m21 15 1 1"]],"folder-lock":[[6,"M10 20H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v2.5"],[5,14,17,8,5,1],[6,"M20 17v-2a2 2 0 1 0-4 0v2"]],"folder-minus":[[6,"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"],[0,9,13,15,13]],"folder-open":[[6,"m6 14 1.45-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.55 6a2 2 0 0 1-1.94 1.5H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H18a2 2 0 0 1 2 2v2"]],"folder-output":[[6,"M2 7.5V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H2"],[6,"M2 13h10"],[6,"m5 10-3 3 3 3"]],"folder-plus":[[6,"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"],[0,12,10,12,16],[0,9,13,15,13]],"folder-search-2":[[6,"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"],[1,11.5,12.5,2.5],[6,"M13.27 14.27 15 16"]],"folder-search":[[6,"M11 20H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v4"],[1,17,17,3],[6,"m21 21-1.5-1.5"]],"folder-symlink":[[6,"M2 9V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H2"],[6,"m8 16 3-3-3-3"],[6,"M2 16v-1a2 2 0 0 1 2-2h6"]],"folder-tree":[[6,"M13 10h7a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-2.5a1 1 0 0 1-.8-.4l-.9-1.2A1 1 0 0 0 15 3h-2a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z"],[6,"M13 21h7a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1h-2.88a1 1 0 0 1-.9-.55l-.44-.9a1 1 0 0 0-.9-.55H13a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z"],[6,"M3 3v2c0 1.1.9 2 2 2h3"],[6,"M3 3v13c0 1.1.9 2 2 2h3"]],"folder-up":[[6,"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"],[6,"M12 10v6"],[6,"m9 13 3-3 3 3"]],"folder-x":[[6,"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"],[6,"m9.5 10.5 5 5"],[6,"m14.5 10.5-5 5"]],folder:[[6,"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"]],folders:[[6,"M8 17h12a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3.93a2 2 0 0 1-1.66-.9l-.82-1.2a2 2 0 0 0-1.66-.9H8a2 2 0 0 0-2 2v9c0 1.1.9 2 2 2Z"],[6,"M2 8v11c0 1.1.9 2 2 2h14"]],"form-input":[[5,2,6,20,12,2],[6,"M12 12h.01"],[6,"M17 12h.01"],[6,"M7 12h.01"]],forward:[[2,"15 17 20 12 15 7"],[6,"M4 18v-2a4 4 0 0 1 4-4h12"]],frame:[[0,22,6,2,6],[0,22,18,2,18],[0,6,2,6,22],[0,18,2,18,22]],framer:[[6,"M5 16V9h14V2H5l14 14h-7m-7 0 7 7v-7m-7 0h7"]],frown:[[1,12,12,10],[6,"M16 16s-1.5-2-4-2-4 2-4 2"],[0,9,9,9.01,9],[0,15,9,15.01,9]],fuel:[[0,3,22,15,22],[0,4,9,14,9],[6,"M14 22V4a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v18"],[6,"M14 13h2a2 2 0 0 1 2 2v2a2 2 0 0 0 2 2h0a2 2 0 0 0 2-2V9.83a2 2 0 0 0-.59-1.42L18 5"]],"function-square":[[5,3,3,18,18,2,2],[6,"M9 17c2 0 2.8-1 2.8-2.8V10c0-2 1-3.3 3.2-3"],[6,"M9 11.2h5.7"]],"gamepad-2":[[0,6,11,10,11],[0,8,9,8,13],[0,15,12,15.01,12],[0,18,10,18.01,10],[6,"M17.32 5H6.68a4 4 0 0 0-3.978 3.59c-.006.052-.01.101-.017.152C2.604 9.416 2 14.456 2 16a3 3 0 0 0 3 3c1 0 1.5-.5 2-1l1.414-1.414A2 2 0 0 1 9.828 16h4.344a2 2 0 0 1 1.414.586L17 18c.5.5 1 1 2 1a3 3 0 0 0 3-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4 4 0 0 0 17.32 5z"]],gamepad:[[0,6,12,10,12],[0,8,10,8,14],[0,15,13,15.01,13],[0,18,11,18.01,11],[5,2,6,20,12,2]],gauge:[[6,"m12 15 3.5-3.5"],[6,"M20.3 18c.4-1 .7-2.2.7-3.4C21 9.8 17 6 12 6s-9 3.8-9 8.6c0 1.2.3 2.4.7 3.4"]],gavel:[[6,"m14 13-7.5 7.5c-.83.83-2.17.83-3 0 0 0 0 0 0 0a2.12 2.12 0 0 1 0-3L11 10"],[6,"m16 16 6-6"],[6,"m8 8 6-6"],[6,"m9 7 8 8"],[6,"m21 11-8-8"]],gem:[[3,"6 3 18 3 22 9 12 22 2 9"],[6,"m12 22 4-13-3-6"],[6,"M12 22 8 9l3-6"],[6,"M2 9h20"]],ghost:[[6,"M9 10h.01"],[6,"M15 10h.01"],[6,"M12 2a8 8 0 0 0-8 8v12l3-3 2.5 2.5L12 19l2.5 2.5L17 19l3 3V10a8 8 0 0 0-8-8z"]],gift:[[2,"20 12 20 22 4 22 4 12"],[5,2,7,20,5],[0,12,22,12,7],[6,"M12 7H7.5a2.5 2.5 0 0 1 0-5C11 2 12 7 12 7z"],[6,"M12 7h4.5a2.5 2.5 0 0 0 0-5C13 2 12 7 12 7z"]],"git-branch-plus":[[6,"M6 3v12"],[6,"M18 9a3 3 0 1 0 0-6 3 3 0 0 0 0 6z"],[6,"M6 21a3 3 0 1 0 0-6 3 3 0 0 0 0 6z"],[6,"M15 6a9 9 0 0 0-9 9"],[6,"M18 15v6"],[6,"M21 18h-6"]],"git-branch":[[0,6,3,6,15],[1,18,6,3],[1,6,18,3],[6,"M18 9a9 9 0 0 1-9 9"]],"git-commit":[[1,12,12,3],[0,3,12,9,12],[0,15,12,21,12]],"git-compare":[[1,18,18,3],[1,6,6,3],[6,"M13 6h3a2 2 0 0 1 2 2v7"],[6,"M11 18H8a2 2 0 0 1-2-2V9"]],"git-fork":[[1,12,18,3],[1,6,6,3],[1,18,6,3],[6,"M18 9v1a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V9"],[6,"M12 12v3"]],"git-merge":[[1,18,18,3],[1,6,6,3],[6,"M6 21V9a9 9 0 0 0 9 9"]],"git-pull-request-closed":[[1,18,18,3],[1,6,6,3],[6,"M18 11.5V15"],[6,"m21 3-6 6"],[6,"m21 9-6-6"],[0,6,9,6,21]],"git-pull-request-draft":[[1,18,18,3],[1,6,6,3],[6,"M18 6V5"],[6,"M18 11v-1"],[0,6,9,6,21]],"git-pull-request":[[1,18,18,3],[1,6,6,3],[6,"M13 6h3a2 2 0 0 1 2 2v7"],[0,6,9,6,21]],github:[[6,"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"],[6,"M9 18c-4.51 2-5-2-7-2"]],gitlab:[[6,"m22 13.29-3.33-10a.42.42 0 0 0-.14-.18.38.38 0 0 0-.22-.11.39.39 0 0 0-.23.07.42.42 0 0 0-.14.18l-2.26 6.67H8.32L6.1 3.26a.42.42 0 0 0-.1-.18.38.38 0 0 0-.26-.08.39.39 0 0 0-.23.07.42.42 0 0 0-.14.18L2 13.29a.74.74 0 0 0 .27.83L12 21l9.69-6.88a.71.71 0 0 0 .31-.83Z"]],"glass-water":[[6,"M15.2 22H8.8a2 2 0 0 1-2-1.79L5 3h14l-1.81 17.21A2 2 0 0 1 15.2 22Z"],[6,"M6 12a5 5 0 0 1 6 0 5 5 0 0 0 6 0"]],glasses:[[1,6,15,4],[1,18,15,4],[6,"M14 15a2 2 0 0 0-2-2 2 2 0 0 0-2 2"],[6,"M2.5 13 5 7c.7-1.3 1.4-2 3-2"],[6,"M21.5 13 19 7c-.7-1.3-1.5-2-3-2"]],"globe-2":[[6,"M21.54 15H17a2 2 0 0 0-2 2v4.54"],[6,"M7 3.34V5a3 3 0 0 0 3 3v0a2 2 0 0 1 2 2v0c0 1.1.9 2 2 2v0a2 2 0 0 0 2-2v0c0-1.1.9-2 2-2h3.17"],[6,"M11 21.95V18a2 2 0 0 0-2-2v0a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05"],[1,12,12,10]],globe:[[1,12,12,10],[0,2,12,22,12],[6,"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"]],grab:[[6,"M18 11.5V9a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v1.4"],[6,"M14 10V8a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v2"],[6,"M10 9.9V9a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v5"],[6,"M6 14v0a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v0"],[6,"M18 11v0a2 2 0 1 1 4 0v3a8 8 0 0 1-8 8h-4a8 8 0 0 1-8-8 2 2 0 1 1 4 0"]],"graduation-cap":[[6,"M22 10v6M2 10l10-5 10 5-10 5z"],[6,"M6 12v5c3 3 9 3 12 0v-5"]],grape:[[6,"M22 5V2l-5.89 5.89"],[1,16.6,15.89,3],[1,8.11,7.4,3],[1,12.35,11.65,3],[1,13.91,5.85,3],[1,18.15,10.09,3],[1,6.56,13.2,3],[1,10.8,17.44,3],[1,5,19,3]],grid:[[5,3,3,18,18,2,2],[0,3,9,21,9],[0,3,15,21,15],[0,9,3,9,21],[0,15,3,15,21]],"grip-horizontal":[[1,12,9,1],[1,19,9,1],[1,5,9,1],[1,12,15,1],[1,19,15,1],[1,5,15,1]],"grip-vertical":[[1,9,12,1],[1,9,5,1],[1,9,19,1],[1,15,12,1],[1,15,5,1],[1,15,19,1]],grip:[[1,12,5,1],[1,19,5,1],[1,5,5,1],[1,12,12,1],[1,19,12,1],[1,5,12,1],[1,12,19,1],[1,19,19,1],[1,5,19,1]],hammer:[[6,"m15 12-8.5 8.5c-.83.83-2.17.83-3 0 0 0 0 0 0 0a2.12 2.12 0 0 1 0-3L12 9"],[6,"M17.64 15 22 10.64"],[6,"m20.91 11.7-1.25-1.25c-.6-.6-.93-1.4-.93-2.25v-.86L16.01 4.6a5.56 5.56 0 0 0-3.94-1.64H9l.92.82A6.18 6.18 0 0 1 12 8.4v1.56l2 2h2.47l2.26 1.91"]],"hand-metal":[[6,"M18 12.5V10a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v1.4"],[6,"M14 11V9a2 2 0 1 0-4 0v2"],[6,"M10 10.5V5a2 2 0 1 0-4 0v9"],[6,"m7 15-1.76-1.76a2 2 0 0 0-2.83 2.82l3.6 3.6C7.5 21.14 9.2 22 12 22h2a8 8 0 0 0 8-8V7a2 2 0 1 0-4 0v5"]],hand:[[6,"M18 11V6a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v0"],[6,"M14 10V4a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v2"],[6,"M10 10.5V6a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v8"],[6,"M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15"]],"hard-drive":[[0,22,12,2,12],[6,"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"],[0,6,16,6.01,16],[0,10,16,10.01,16]],"hard-hat":[[6,"M2 18a1 1 0 0 0 1 1h18a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v2z"],[6,"M10 10V5a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v5"],[6,"M4 15v-3a6 6 0 0 1 6-6h0"],[6,"M14 6h0a6 6 0 0 1 6 6v3"]],hash:[[0,4,9,20,9],[0,4,15,20,15],[0,10,3,8,21],[0,16,3,14,21]],haze:[[6,"m5.2 6.2 1.4 1.4"],[6,"M2 13h2"],[6,"M20 13h2"],[6,"m17.4 7.6 1.4-1.4"],[6,"M22 17H2"],[6,"M22 21H2"],[6,"M16 13a4 4 0 0 0-8 0"],[6,"M12 5V2.5"]],"heading-1":[[6,"M4 12h8"],[6,"M4 18V6"],[6,"M12 18V6"],[6,"m17 12 3-2v8"]],"heading-2":[[6,"M4 12h8"],[6,"M4 18V6"],[6,"M12 18V6"],[6,"M21 18h-4c0-4 4-3 4-6 0-1.5-2-2.5-4-1"]],"heading-3":[[6,"M4 12h8"],[6,"M4 18V6"],[6,"M12 18V6"],[6,"M17.5 10.5c1.7-1 3.5 0 3.5 1.5a2 2 0 0 1-2 2"],[6,"M17 17.5c2 1.5 4 .3 4-1.5a2 2 0 0 0-2-2"]],"heading-4":[[6,"M4 12h8"],[6,"M4 18V6"],[6,"M12 18V6"],[6,"M17 10v4h4"],[6,"M21 10v8"]],"heading-5":[[6,"M4 12h8"],[6,"M4 18V6"],[6,"M12 18V6"],[6,"M17 13v-3h4"],[6,"M17 17.7c.4.2.8.3 1.3.3 1.5 0 2.7-1.1 2.7-2.5S19.8 13 18.3 13H17"]],"heading-6":[[6,"M4 12h8"],[6,"M4 18V6"],[6,"M12 18V6"],[1,19,16,2],[6,"M20 10c-2 2-3 3.5-3 6"]],heading:[[6,"M6 12h12"],[6,"M6 20V4"],[6,"M18 20V4"]],headphones:[[6,"M3 18v-6a9 9 0 0 1 18 0v6"],[6,"M21 19a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3zM3 19a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2H3z"]],"heart-crack":[[6,"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"],[6,"m12 13-1-1 2-2-3-2.5 2.77-2.92"]],"heart-handshake":[[6,"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"],[6,"M12 5.36 8.87 8.5a2.13 2.13 0 0 0 0 3h0a2.13 2.13 0 0 0 3 0l2.26-2.21a3 3 0 0 1 4.22 0l2.4 2.4"],[6,"m18 15-2-2"],[6,"m15 18-2-2"]],"heart-off":[[6,"M4.12 4.107a5.4 5.4 0 0 0-.538.473C1.46 6.7 1.33 10.28 4 13l8 8 4.5-4.5"],[6,"M19.328 13.672 20 13c2.67-2.72 2.54-6.3.42-8.42a5.4 5.4 0 0 0-7.65 0l-.77.78-.77-.78a5.4 5.4 0 0 0-2.386-1.393"],[0,2,2,22,22]],"heart-pulse":[[6,"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"],[6,"M3.5 12h6l.5-1 2 4.5 2-7 1.5 3.5h5"]],heart:[[6,"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"]],"help-circle":[[1,12,12,10],[6,"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"],[0,12,17,12.01,17]],hexagon:[[6,"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"]],highlighter:[[6,"m9 11-6 6v3h9l3-3"],[6,"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"]],history:[[6,"M3 3v5h5"],[6,"M3.05 13A9 9 0 1 0 6 5.3L3 8"],[6,"M12 7v5l4 2"]],home:[[6,"m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"],[2,"9 22 9 12 15 12 15 22"]],"hop-off":[[6,"M17.5 5.5C19 7 20.5 9 21 11c-1.323.265-2.646.39-4.118.226"],[6,"M5.5 17.5C7 19 9 20.5 11 21c.5-2.5.5-5-1-8.5"],[6,"M17.5 17.5c-2.5 0-4 0-6-1"],[6,"M20 11.5c1 1.5 2 3.5 2 4.5"],[6,"M11.5 20c1.5 1 3.5 2 4.5 2 .5-1.5 0-3-.5-4.5"],[6,"M22 22c-2 0-3.5-.5-5.5-1.5"],[6,"M4.783 4.782C1.073 8.492 1 14.5 5 18c1-1 2-4.5 1.5-6.5 1.5 1 4 1 5.5.5M8.227 2.57C11.578 1.335 15.453 2.089 18 5c-.88.88-3.7 1.761-5.726 1.618"],[0,2,2,22,22]],hop:[[6,"M17.5 5.5C19 7 20.5 9 21 11c-2.5.5-5 .5-8.5-1"],[6,"M5.5 17.5C7 19 9 20.5 11 21c.5-2.5.5-5-1-8.5"],[6,"M16.5 11.5c1 2 1 3.5 1 6-2.5 0-4 0-6-1"],[6,"M20 11.5c1 1.5 2 3.5 2 4.5-1.5.5-3 0-4.5-.5"],[6,"M11.5 20c1.5 1 3.5 2 4.5 2 .5-1.5 0-3-.5-4.5"],[6,"M20.5 16.5c1 2 1.5 3.5 1.5 5.5-2 0-3.5-.5-5.5-1.5"],[6,"M4.783 4.782C8.493 1.072 14.5 1 18 5c-1 1-4.5 2-6.5 1.5 1 1.5 1 4 .5 5.5-1.5.5-4 .5-5.5-.5C7 13.5 6 17 5 18c-4-3.5-3.927-9.508-.217-13.218Z"],[6,"M4.5 4.5 3 3c-.184-.185-.184-.816 0-1"]],hourglass:[[6,"M5 22h14"],[6,"M5 2h14"],[6,"M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22"],[6,"M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2"]],"ice-cream-2":[[6,"M12 17c5 0 8-2.69 8-6H4c0 3.31 3 6 8 6Zm-4 4h8m-4-3v3M5.14 11a3.5 3.5 0 1 1 6.71 0"],[6,"M12.14 11a3.5 3.5 0 1 1 6.71 0"],[6,"M15.5 6.5a3.5 3.5 0 1 0-7 0"]],"ice-cream":[[6,"m7 11 4.08 10.35a1 1 0 0 0 1.84 0L17 11"],[6,"M17 7A5 5 0 0 0 7 7"],[6,"M17 7a2 2 0 0 1 0 4H7a2 2 0 0 1 0-4"]],"image-minus":[[6,"M21 9v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7"],[0,16,5,22,5],[1,9,9,2],[6,"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"]],"image-off":[[0,2,2,22,22],[6,"M10.41 10.41a2 2 0 1 1-2.83-2.83"],[0,13.5,13.5,6,21],[0,18,12,21,15],[6,"M3.59 3.59A1.99 1.99 0 0 0 3 5v14a2 2 0 0 0 2 2h14c.55 0 1.052-.22 1.41-.59"],[6,"M21 15V5a2 2 0 0 0-2-2H9"]],"image-plus":[[6,"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7"],[0,16,5,22,5],[0,19,2,19,8],[1,9,9,2],[6,"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"]],image:[[5,3,3,18,18,2,2],[1,9,9,2],[6,"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"]],import:[[6,"M12 3v12"],[6,"m8 11 4 4 4-4"],[6,"M8 5H4a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-4"]],inbox:[[2,"22 12 16 12 14 15 10 15 8 12 2 12"],[6,"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"]],indent:[[2,"3 8 7 12 3 16"],[0,21,12,11,12],[0,21,6,11,6],[0,21,18,11,18]],"indian-rupee":[[6,"M6 3h12"],[6,"M6 8h12"],[6,"m6 13 8.5 8"],[6,"M6 13h3"],[6,"M9 13c6.667 0 6.667-10 0-10"]],infinity:[[6,"M18.178 8c5.096 0 5.096 8 0 8-5.095 0-7.133-8-12.739-8-4.585 0-4.585 8 0 8 5.606 0 7.644-8 12.74-8z"]],info:[[1,12,12,10],[0,12,16,12,12],[0,12,8,12.01,8]],inspect:[[6,"M21 11V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h6"],[6,"m12 12 4 10 1.7-4.3L22 16Z"]],instagram:[[5,2,2,20,20,5,5],[6,"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"],[0,17.5,6.5,17.51,6.5]],italic:[[0,19,4,10,4],[0,14,20,5,20],[0,15,4,9,20]],"japanese-yen":[[6,"M12 9.5V21m0-11.5L6 3m6 6.5L18 3"],[6,"M6 15h12"],[6,"M6 11h12"]],joystick:[[6,"M21 17a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-2Z"],[6,"M6 15v-2"],[6,"M12 15V9"],[1,12,6,3]],key:[[6,"m21 2-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0 3 3L22 7l-3-3m-3.5 3.5L19 4"]],keyboard:[[5,2,4,20,16,2,2],[6,"M6 8h.001"],[6,"M10 8h.001"],[6,"M14 8h.001"],[6,"M18 8h.001"],[6,"M8 12h.001"],[6,"M12 12h.001"],[6,"M16 12h.001"],[6,"M7 16h10"]],"lamp-ceiling":[[6,"M12 2v5"],[6,"M6 7h12l4 9H2l4-9Z"],[6,"M9.17 16a3 3 0 1 0 5.66 0"]],"lamp-desk":[[6,"m14 5-3 3 2 7 8-8-7-2Z"],[6,"m14 5-3 3-3-3 3-3 3 3Z"],[6,"M9.5 6.5 4 12l3 6"],[6,"M3 22v-2c0-1.1.9-2 2-2h4a2 2 0 0 1 2 2v2H3Z"]],"lamp-floor":[[6,"M9 2h6l3 7H6l3-7Z"],[6,"M12 9v13"],[6,"M9 22h6"]],"lamp-wall-down":[[6,"M11 13h6l3 7H8l3-7Z"],[6,"M14 13V8a2 2 0 0 0-2-2H8"],[6,"M4 9h2a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2H4v6Z"]],"lamp-wall-up":[[6,"M11 4h6l3 7H8l3-7Z"],[6,"M14 11v5a2 2 0 0 1-2 2H8"],[6,"M4 15h2a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H4v-6Z"]],lamp:[[6,"M8 2h8l4 10H4L8 2Z"],[6,"M12 12v6"],[6,"M8 22v-2c0-1.1.9-2 2-2h4a2 2 0 0 1 2 2v2H8Z"]],landmark:[[0,3,22,21,22],[0,6,18,6,11],[0,10,18,10,11],[0,14,18,14,11],[0,18,18,18,11],[3,"12 2 20 7 4 7"]],languages:[[6,"m5 8 6 6"],[6,"m4 14 6-6 2-3"],[6,"M2 5h12"],[6,"M7 2h1"],[6,"m22 22-5-10-5 10"],[6,"M14 18h6"]],"laptop-2":[[5,3,4,18,12,2,2],[0,2,20,22,20]],laptop:[[6,"M20 16V7a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v9m16 0H4m16 0 1.28 2.55a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45L4 16"]],"lasso-select":[[6,"M7 22a5 5 0 0 1-2-4"],[6,"M7 16.93c.96.43 1.96.74 2.99.91"],[6,"M3.34 14A6.8 6.8 0 0 1 2 10c0-4.42 4.48-8 10-8s10 3.58 10 8a7.19 7.19 0 0 1-.33 2"],[6,"M5 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"],[6,"M14.33 22h-.09a.35.35 0 0 1-.24-.32v-10a.34.34 0 0 1 .33-.34c.08 0 .15.03.21.08l7.34 6a.33.33 0 0 1-.21.59h-4.49l-2.57 3.85a.35.35 0 0 1-.28.14v0z"]],lasso:[[6,"M7 22a5 5 0 0 1-2-4"],[6,"M3.3 14A6.8 6.8 0 0 1 2 10c0-4.4 4.5-8 10-8s10 3.6 10 8-4.5 8-10 8a12 12 0 0 1-5-1"],[6,"M5 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"]],laugh:[[1,12,12,10],[6,"M18 13a6 6 0 0 1-6 5 6 6 0 0 1-6-5h12Z"],[0,9,9,9.01,9],[0,15,9,15.01,9]],layers:[[3,"12 2 2 7 12 12 22 7 12 2"],[2,"2 17 12 22 22 17"],[2,"2 12 12 17 22 12"]],"layout-dashboard":[[5,3,3,7,9],[5,14,3,7,5],[5,14,12,7,9],[5,3,16,7,5]],"layout-grid":[[5,3,3,7,7],[5,14,3,7,7],[5,14,14,7,7],[5,3,14,7,7]],"layout-list":[[5,3,14,7,7],[5,3,3,7,7],[0,14,4,21,4],[0,14,9,21,9],[0,14,15,21,15],[0,14,20,21,20]],"layout-template":[[6,"M21 3H3v7h18V3z"],[6,"M21 14h-5v7h5v-7z"],[6,"M12 14H3v7h9v-7z"]],layout:[[5,3,3,18,18,2,2],[0,3,9,21,9],[0,9,21,9,9]],leaf:[[6,"M11 20A7 7 0 0 1 9.8 6.1C15.5 5 17 4.48 19 2c1 2 2 4.18 2 8 0 5.5-4.78 10-10 10Z"],[6,"M2 21c0-3 1.85-5.36 5.08-6C9.5 14.52 12 13 13 12"]],library:[[6,"m16 6 4 14"],[6,"M12 6v14"],[6,"M8 8v12"],[6,"M4 4v16"]],"life-buoy":[[1,12,12,10],[1,12,12,4],[0,4.93,4.93,9.17,9.17],[0,14.83,14.83,19.07,19.07],[0,14.83,9.17,19.07,4.93],[0,14.83,9.17,18.36,5.64],[0,4.93,19.07,9.17,14.83]],"lightbulb-off":[[6,"M9 18h6"],[6,"M10 22h4"],[6,"m2 2 20 20"],[6,"M9 2.804A6 6 0 0 1 18 8a4.65 4.65 0 0 1-1.03 3"],[6,"M8.91 14a4.61 4.61 0 0 0-1.41-2.5C6.23 10.23 6 9 6 8a6 6 0 0 1 .084-1"]],lightbulb:[[0,9,18,15,18],[0,10,22,14,22],[6,"M15.09 14c.18-.98.65-1.74 1.41-2.5A4.65 4.65 0 0 0 18 8 6 6 0 0 0 6 8c0 1 .23 2.23 1.5 3.5A4.61 4.61 0 0 1 8.91 14"]],"line-chart":[[6,"M3 3v18h18"],[6,"m19 9-5 5-4-4-3 3"]],"link-2off":[[6,"M9 17H7A5 5 0 0 1 7 7"],[6,"M15 7h2a5 5 0 0 1 4 8"],[0,8,12,12,12],[0,2,2,22,22]],"link-2":[[6,"M9 17H7A5 5 0 0 1 7 7h2"],[6,"M15 7h2a5 5 0 1 1 0 10h-2"],[0,8,12,16,12]],link:[[6,"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"],[6,"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"]],linkedin:[[6,"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"],[5,2,9,4,12],[1,4,4,2]],"list-checks":[[0,10,6,21,6],[0,10,12,21,12],[0,10,18,21,18],[2,"3 6 4 7 6 5"],[2,"3 12 4 13 6 11"],[2,"3 18 4 19 6 17"]],"list-end":[[6,"M16 12H3"],[6,"M16 6H3"],[6,"M10 18H3"],[6,"M21 6v10a2 2 0 0 1-2 2h-4"],[6,"m16 16-2 2 2 2"]],"list-minus":[[6,"M11 12H3"],[6,"M16 6H3"],[6,"M16 18H3"],[6,"M21 12h-6"]],"list-music":[[6,"M21 15V6"],[6,"M18.5 18a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Z"],[6,"M12 12H3"],[6,"M16 6H3"],[6,"M12 18H3"]],"list-ordered":[[0,10,6,21,6],[0,10,12,21,12],[0,10,18,21,18],[6,"M4 6h1v4"],[6,"M4 10h2"],[6,"M6 18H4c0-1 2-2 2-3s-1-1.5-2-1"]],"list-plus":[[6,"M11 12H3"],[6,"M16 6H3"],[6,"M16 18H3"],[6,"M18 9v6"],[6,"M21 12h-6"]],"list-start":[[6,"M16 12H3"],[6,"M16 18H3"],[6,"M10 6H3"],[6,"M21 18V8a2 2 0 0 0-2-2h-5"],[6,"m16 8-2-2 2-2"]],"list-video":[[6,"M12 12H3"],[6,"M16 6H3"],[6,"M12 18H3"],[6,"m16 12 5 3-5 3v-6Z"]],"list-x":[[6,"M11 12H3"],[6,"M16 6H3"],[6,"M16 18H3"],[6,"m19 10-4 4"],[6,"m15 10 4 4"]],list:[[0,8,6,21,6],[0,8,12,21,12],[0,8,18,21,18],[0,3,6,3.01,6],[0,3,12,3.01,12],[0,3,18,3.01,18]],"loader-2":[[6,"M21 12a9 9 0 1 1-6.219-8.56"]],loader:[[0,12,2,12,6],[0,12,18,12,22],[0,4.93,4.93,7.76,7.76],[0,16.24,16.24,19.07,19.07],[0,2,12,6,12],[0,18,12,22,12],[0,4.93,19.07,7.76,16.24],[0,16.24,7.76,19.07,4.93]],"locate-fixed":[[0,2,12,5,12],[0,19,12,22,12],[0,12,2,12,5],[0,12,19,12,22],[1,12,12,7],[1,12,12,3]],"locate-off":[[0,2,12,5,12],[0,19,12,22,12],[0,12,2,12,5],[0,12,19,12,22],[6,"M7.11 7.11C5.83 8.39 5 10.1 5 12c0 3.87 3.13 7 7 7 1.9 0 3.61-.83 4.89-2.11"],[6,"M18.71 13.96c.19-.63.29-1.29.29-1.96 0-3.87-3.13-7-7-7-.67 0-1.33.1-1.96.29"],[0,2,2,22,22]],locate:[[0,2,12,5,12],[0,19,12,22,12],[0,12,2,12,5],[0,12,19,12,22],[1,12,12,7]],lock:[[5,3,11,18,11,2,2],[6,"M7 11V7a5 5 0 0 1 10 0v4"]],"log-in":[[6,"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4"],[2,"10 17 15 12 10 7"],[0,15,12,3,12]],"log-out":[[6,"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"],[2,"16 17 21 12 16 7"],[0,21,12,9,12]],luggage:[[6,"M6 20h0a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h0"],[6,"M8 18V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v14"],[6,"M10 20h4"],[1,16,20,2],[1,8,20,2]],magnet:[[6,"m6 15-4-4 6.75-6.77a7.79 7.79 0 0 1 11 11L13 22l-4-4 6.39-6.36a2.14 2.14 0 0 0-3-3L6 15"],[6,"m5 8 4 4"],[6,"m12 15 4 4"]],"mail-check":[[6,"M22 13V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h8"],[6,"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"],[6,"m16 19 2 2 4-4"]],"mail-minus":[[6,"M22 15V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h8"],[6,"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"],[6,"M16 19h6"]],"mail-open":[[6,"M21.2 8.4c.5.38.8.97.8 1.6v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V10a2 2 0 0 1 .8-1.6l8-6a2 2 0 0 1 2.4 0l8 6Z"],[6,"m22 10-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 10"]],"mail-plus":[[6,"M22 13V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h8"],[6,"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"],[6,"M19 16v6"],[6,"M16 19h6"]],"mail-question":[[6,"M22 10.5V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h12.5"],[6,"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"],[6,"M18 15.28c.2-.4.5-.8.9-1a2.1 2.1 0 0 1 2.6.4c.3.4.5.8.5 1.3 0 1.3-2 2-2 2"],[6,"M20 22v.01"]],"mail-search":[[6,"M22 12.5V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h7.5"],[6,"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"],[6,"M18 21a3 3 0 1 0 0-6 3 3 0 0 0 0 6v0Z"],[1,18,18,3],[6,"m22 22-1.5-1.5"]],"mail-warning":[[6,"M22 10.5V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h12.5"],[6,"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"],[6,"M20 14v4"],[6,"M20 22v.01"]],"mail-x":[[6,"M22 13V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h9"],[6,"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"],[6,"m17 17 4 4"],[6,"m21 17-4 4"]],mail:[[5,2,4,20,16,2],[6,"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"]],mails:[[5,6,4,16,13,2],[6,"m22 7-7.1 3.78c-.57.3-1.23.3-1.8 0L6 7"],[6,"M2 8v11c0 1.1.9 2 2 2h14"]],"map-pin-off":[[6,"M5.43 5.43A8.06 8.06 0 0 0 4 10c0 6 8 12 8 12a29.94 29.94 0 0 0 5-5"],[6,"M19.18 13.52A8.66 8.66 0 0 0 20 10a8 8 0 0 0-8-8 7.88 7.88 0 0 0-3.52.82"],[6,"M9.13 9.13A2.78 2.78 0 0 0 9 10a3 3 0 0 0 3 3 2.78 2.78 0 0 0 .87-.13"],[6,"M14.9 9.25a3 3 0 0 0-2.15-2.16"],[0,2,2,22,22]],"map-pin":[[6,"M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z"],[1,12,10,3]],map:[[3,"3 6 9 3 15 6 21 3 21 18 15 21 9 18 3 21"],[0,9,3,9,18],[0,15,6,15,21]],martini:[[6,"M8 22h8"],[6,"M12 11v11"],[6,"m19 3-7 8-7-8Z"]],"maximize-2":[[2,"15 3 21 3 21 9"],[2,"9 21 3 21 3 15"],[0,21,3,14,10],[0,3,21,10,14]],maximize:[[6,"M8 3H5a2 2 0 0 0-2 2v3"],[6,"M21 8V5a2 2 0 0 0-2-2h-3"],[6,"M3 16v3a2 2 0 0 0 2 2h3"],[6,"M16 21h3a2 2 0 0 0 2-2v-3"]],medal:[[6,"M7.21 15 2.66 7.14a2 2 0 0 1 .13-2.2L4.4 2.8A2 2 0 0 1 6 2h12a2 2 0 0 1 1.6.8l1.6 2.14a2 2 0 0 1 .14 2.2L16.79 15"],[6,"M11 12 5.12 2.2"],[6,"m13 12 5.88-9.8"],[6,"M8 7h8"],[1,12,17,5],[6,"M12 18v-2h-.5"]],"megaphone-off":[[6,"M9.26 9.26 3 11v3l14.14 3.14"],[6,"M21 15.34V6l-7.31 2.03"],[6,"M11.6 16.8a3 3 0 1 1-5.8-1.6"],[0,2,2,22,22]],megaphone:[[6,"m3 11 18-5v12L3 14v-3z"],[6,"M11.6 16.8a3 3 0 1 1-5.8-1.6"]],meh:[[1,12,12,10],[0,8,15,16,15],[0,9,9,9.01,9],[0,15,9,15.01,9]],menu:[[0,4,12,20,12],[0,4,6,20,6],[0,4,18,20,18]],"message-circle":[[6,"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"]],"message-square":[[6,"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"]],"mic-2":[[6,"m12 8-9.04 9.06a2.82 2.82 0 1 0 3.98 3.98L16 12"],[1,17,7,5]],"mic-off":[[0,2,2,22,22],[6,"M18.89 13.23A7.12 7.12 0 0 0 19 12v-2"],[6,"M5 10v2a7 7 0 0 0 12 5"],[6,"M15 9.34V5a3 3 0 0 0-5.68-1.33"],[6,"M9 9v3a3 3 0 0 0 5.12 2.12"],[0,12,19,12,22]],mic:[[6,"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z"],[6,"M19 10v2a7 7 0 0 1-14 0v-2"],[0,12,19,12,22]],microscope:[[6,"M6 18h8"],[6,"M3 22h18"],[6,"M14 22a7 7 0 1 0 0-14h-1"],[6,"M9 14h2"],[6,"M8 6h4"],[6,"M13 10V6.5a.5.5 0 0 0-.5-.5.5.5 0 0 1-.5-.5V3a1 1 0 0 0-1-1H9a1 1 0 0 0-1 1v2.5a.5.5 0 0 1-.5.5.5.5 0 0 0-.5.5V10c0 1.1.9 2 2 2h2a2 2 0 0 0 2-2Z"]],microwave:[[5,2,4,20,15,2],[5,6,8,8,7,1],[6,"M18 8v7"],[6,"M6 19v2"],[6,"M18 19v2"]],milestone:[[6,"M18 6H5a2 2 0 0 0-2 2v3a2 2 0 0 0 2 2h13l4-3.5L18 6Z"],[6,"M12 13v9"],[6,"M12 2v4"]],"milk-off":[[6,"M8 2h8"],[6,"M9 2v1.343M15 2v2.789a4 4 0 0 0 .672 2.219l.656.984a4 4 0 0 1 .672 2.22v1.131M7.8 7.8l-.128.192A4 4 0 0 0 7 10.212V20a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-3"],[6,"M7 15a6.47 6.47 0 0 1 5 0 6.472 6.472 0 0 0 3.435.435"],[0,2,2,22,22]],milk:[[6,"M8 2h8"],[6,"M9 2v2.789a4 4 0 0 1-.672 2.219l-.656.984A4 4 0 0 0 7 10.212V20a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-9.789a4 4 0 0 0-.672-2.219l-.656-.984A4 4 0 0 1 15 4.788V2"],[6,"M7 15a6.472 6.472 0 0 1 5 0 6.47 6.47 0 0 0 5 0"]],"minimize-2":[[2,"4 14 10 14 10 20"],[2,"20 10 14 10 14 4"],[0,14,10,21,3],[0,3,21,10,14]],minimize:[[6,"M8 3v3a2 2 0 0 1-2 2H3"],[6,"M21 8h-3a2 2 0 0 1-2-2V3"],[6,"M3 16h3a2 2 0 0 1 2 2v3"],[6,"M16 21v-3a2 2 0 0 1 2-2h3"]],"minus-circle":[[1,12,12,10],[0,8,12,16,12]],"minus-square":[[5,3,3,18,18,2,2],[0,8,12,16,12]],minus:[[0,5,12,19,12]],"monitor-off":[[6,"M17 17H4a2 2 0 0 1-2-2V5c0-1.5 1-2 1-2"],[6,"M22 15V5a2 2 0 0 0-2-2H9"],[6,"M8 21h8"],[6,"M12 17v4"],[6,"m2 2 20 20"]],"monitor-smartphone":[[6,"M18 8V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h8"],[6,"M10 19v-3.96 3.15"],[6,"M7 19h5"],[5,16,12,6,10,2]],"monitor-speaker":[[6,"M5.5 20H8"],[6,"M17 9h.01"],[5,12,4,10,16,2],[6,"M8 6H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h4"],[1,17,15,1]],monitor:[[5,2,3,20,14,2,2],[0,8,21,16,21],[0,12,17,12,21]],moon:[[6,"M12 3a6.364 6.364 0 0 0 9 9 9 9 0 1 1-9-9Z"]],"more-horizontal":[[1,12,12,1],[1,19,12,1],[1,5,12,1]],"more-vertical":[[1,12,12,1],[1,12,5,1],[1,12,19,1]],"mountain-snow":[[6,"m8 3 4 8 5-5 5 15H2L8 3z"],[6,"M4.14 15.08c2.62-1.57 5.24-1.43 7.86.42 2.74 1.94 5.49 2 8.23.19"]],mountain:[[6,"m8 3 4 8 5-5 5 15H2L8 3z"]],"mouse-pointer-2":[[6,"m4 4 7.07 17 2.51-7.39L21 11.07z"]],"mouse-pointer-click":[[6,"m9 9 5 12 1.774-5.226L21 14 9 9z"],[6,"m16.071 16.071 4.243 4.243"],[6,"m7.188 2.239.777 2.897M5.136 7.965l-2.898-.777M13.95 4.05l-2.122 2.122m-5.657 5.656-2.12 2.122"]],"mouse-pointer":[[6,"m3 3 7.07 16.97 2.51-7.39 7.39-2.51L3 3z"],[6,"m13 13 6 6"]],mouse:[[5,6,3,12,18,6],[6,"M12 7v4"]],"move-3d":[[6,"M5 3v16h16"],[6,"m5 19 6-6"],[6,"m2 6 3-3 3 3"],[6,"m18 16 3 3-3 3"]],"move-diagonal-2":[[2,"5 11 5 5 11 5"],[2,"19 13 19 19 13 19"],[0,5,5,19,19]],"move-diagonal":[[2,"13 5 19 5 19 11"],[2,"11 19 5 19 5 13"],[0,19,5,5,19]],"move-horizontal":[[2,"18 8 22 12 18 16"],[2,"6 8 2 12 6 16"],[0,2,12,22,12]],"move-vertical":[[2,"8 18 12 22 16 18"],[2,"8 6 12 2 16 6"],[0,12,2,12,22]],move:[[2,"5 9 2 12 5 15"],[2,"9 5 12 2 15 5"],[2,"15 19 12 22 9 19"],[2,"19 9 22 12 19 15"],[0,2,12,22,12],[0,12,2,12,22]],"music-2":[[1,8,18,4],[6,"M12 18V2l7 4"]],"music-3":[[1,12,18,4],[6,"M16 18V2"]],"music-4":[[6,"M9 18V5l12-2v13"],[6,"m9 9 12-2"],[1,6,18,3],[1,18,16,3]],music:[[6,"M9 18V5l12-2v13"],[1,6,18,3],[1,18,16,3]],"navigation-2off":[[6,"M9.31 9.31 5 21l7-4 7 4-1.17-3.17"],[6,"M14.53 8.88 12 2l-1.17 3.17"],[0,2,2,22,22]],"navigation-2":[[3,"12 2 19 21 12 17 5 21 12 2"]],"navigation-off":[[6,"M8.43 8.43 3 11l8 2 2 8 2.57-5.43"],[6,"M17.39 11.73 22 2l-9.73 4.61"],[0,2,2,22,22]],navigation:[[3,"3 11 22 2 13 21 11 13 3 11"]],network:[[5,9,2,6,6],[5,16,16,6,6],[5,2,16,6,6],[6,"M5 16v-4h14v4"],[6,"M12 12V8"]],newspaper:[[6,"M4 22h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-2 2Zm0 0a2 2 0 0 1-2-2v-9c0-1.1.9-2 2-2h2"],[6,"M18 14h-8"],[6,"M15 18h-5"],[6,"M10 6h8v4h-8V6Z"]],"nut-off":[[6,"M12 4V2"],[6,"M5 10v4a7.004 7.004 0 0 0 5.277 6.787c.412.104.802.292 1.102.592L12 22l.621-.621c.3-.3.69-.488 1.102-.592a7.01 7.01 0 0 0 4.125-2.939"],[6,"M19 10v3.343"],[6,"M12 12c-1.349-.573-1.905-1.005-2.5-2-.546.902-1.048 1.353-2.5 2-1.018-.644-1.46-1.08-2-2-1.028.71-1.69.918-3 1 1.081-1.048 1.757-2.03 2-3 .194-.776.84-1.551 1.79-2.21m11.654 5.997c.887-.457 1.28-.891 1.556-1.787 1.032.916 1.683 1.157 3 1-1.297-1.036-1.758-2.03-2-3-.5-2-4-4-8-4-.74 0-1.461.068-2.15.192"],[0,2,2,22,22]],nut:[[6,"M12 4V2"],[6,"M5 10v4a7.004 7.004 0 0 0 5.277 6.787c.412.104.802.292 1.102.592L12 22l.621-.621c.3-.3.69-.488 1.102-.592A7.003 7.003 0 0 0 19 14v-4"],[6,"M12 4C8 4 4.5 6 4 8c-.243.97-.919 1.952-2 3 1.31-.082 1.972-.29 3-1 .54.92.982 1.356 2 2 1.452-.647 1.954-1.098 2.5-2 .595.995 1.151 1.427 2.5 2 1.31-.621 1.862-1.058 2.5-2 .629.977 1.162 1.423 2.5 2 1.209-.548 1.68-.967 2-2 1.032.916 1.683 1.157 3 1-1.297-1.036-1.758-2.03-2-3-.5-2-4-4-8-4Z"]],octagon:[[3,"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2"]],option:[[6,"M3 3h6l6 18h6"],[6,"M14 3h7"]],outdent:[[2,"7 8 3 12 7 16"],[0,21,12,11,12],[0,21,6,11,6],[0,21,18,11,18]],"package-2":[[6,"M3 9h18v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V9Z"],[6,"m3 9 2.45-4.9A2 2 0 0 1 7.24 3h9.52a2 2 0 0 1 1.8 1.1L21 9"],[6,"M12 3v6"]],"package-check":[[6,"m16 16 2 2 4-4"],[6,"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14"],[6,"M16.5 9.4 7.55 4.24"],[2,"3.29 7 12 12 20.71 7"],[0,12,22,12,12]],"package-minus":[[6,"M16 16h6"],[6,"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14"],[6,"M16.5 9.4 7.55 4.24"],[2,"3.29 7 12 12 20.71 7"],[0,12,22,12,12]],"package-open":[[6,"M20.91 8.84 8.56 2.23a1.93 1.93 0 0 0-1.81 0L3.1 4.13a2.12 2.12 0 0 0-.05 3.69l12.22 6.93a2 2 0 0 0 1.94 0L21 12.51a2.12 2.12 0 0 0-.09-3.67Z"],[6,"m3.09 8.84 12.35-6.61a1.93 1.93 0 0 1 1.81 0l3.65 1.9a2.12 2.12 0 0 1 .1 3.69L8.73 14.75a2 2 0 0 1-1.94 0L3 12.51a2.12 2.12 0 0 1 .09-3.67Z"],[0,12,22,12,13],[6,"M20 13.5v3.37a2.06 2.06 0 0 1-1.11 1.83l-6 3.08a1.93 1.93 0 0 1-1.78 0l-6-3.08A2.06 2.06 0 0 1 4 16.87V13.5"]],"package-plus":[[6,"M16 16h6"],[6,"M19 13v6"],[6,"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14"],[6,"M16.5 9.4 7.55 4.24"],[2,"3.29 7 12 12 20.71 7"],[0,12,22,12,12]],"package-search":[[6,"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14"],[6,"M16.5 9.4 7.55 4.24"],[2,"3.29 7 12 12 20.71 7"],[0,12,22,12,12],[1,18.5,15.5,2.5],[6,"M20.27 17.27 22 19"]],"package-x":[[6,"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14"],[6,"M16.5 9.4 7.55 4.24"],[2,"3.29 7 12 12 20.71 7"],[0,12,22,12,12],[6,"m17 13 5 5m-5 0 5-5"]],package:[[0,16.5,9.4,7.5,4.21],[6,"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"],[2,"3.29 7 12 12 20.71 7"],[0,12,22,12,12]],"paint-bucket":[[6,"m19 11-8-8-8.6 8.6a2 2 0 0 0 0 2.8l5.2 5.2c.8.8 2 .8 2.8 0L19 11Z"],[6,"m5 2 5 5"],[6,"M2 13h15"],[6,"M22 20a2 2 0 1 1-4 0c0-1.6 1.7-2.4 2-4 .3 1.6 2 2.4 2 4Z"]],"paintbrush-2":[[6,"M14 19.9V16h3a2 2 0 0 0 2-2v-2H5v2c0 1.1.9 2 2 2h3v3.9a2 2 0 1 0 4 0Z"],[6,"M6 12V2h12v10"],[6,"M14 2v4"],[6,"M10 2v2"]],paintbrush:[[6,"M18.37 2.63 14 7l-1.59-1.59a2 2 0 0 0-2.82 0L8 7l9 9 1.59-1.59a2 2 0 0 0 0-2.82L17 10l4.37-4.37a2.12 2.12 0 1 0-3-3Z"],[6,"M9 8c-2 3-4 3.5-7 4l8 10c2-1 6-5 6-7"],[6,"M14.5 17.5 4.5 15"]],palette:[[1,13.5,6.5,.5],[1,17.5,10.5,.5],[1,8.5,7.5,.5],[1,6.5,12.5,.5],[6,"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z"]],palmtree:[[6,"M13 8c0-2.76-2.46-5-5.5-5S2 5.24 2 8h2l1-1 1 1h4"],[6,"M13 7.14A5.82 5.82 0 0 1 16.5 6c3.04 0 5.5 2.24 5.5 5h-3l-1-1-1 1h-3"],[6,"M5.89 9.71c-2.15 2.15-2.3 5.47-.35 7.43l4.24-4.25.7-.7.71-.71 2.12-2.12c-1.95-1.96-5.27-1.8-7.42.35z"],[6,"M11 15.5c.5 2.5-.17 4.5-1 6.5h4c2-5.5-.5-12-1-14"]],paperclip:[[6,"m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48"]],"party-popper":[[6,"M5.8 11.3 2 22l10.7-3.79"],[6,"M4 3h.01"],[6,"M22 8h.01"],[6,"M15 2h.01"],[6,"M22 20h.01"],[6,"m22 2-2.24.75a2.9 2.9 0 0 0-1.96 3.12v0c.1.86-.57 1.63-1.45 1.63h-.38c-.86 0-1.6.6-1.76 1.44L14 10"],[6,"m22 13-.82-.33c-.86-.34-1.82.2-1.98 1.11v0c-.11.7-.72 1.22-1.43 1.22H17"],[6,"m11 2 .33.82c.34.86-.2 1.82-1.11 1.98v0C9.52 4.9 9 5.52 9 6.23V7"],[6,"M11 13c1.93 1.93 2.83 4.17 2 5-.83.83-3.07-.07-5-2-1.93-1.93-2.83-4.17-2-5 .83-.83 3.07.07 5 2Z"]],"pause-circle":[[1,12,12,10],[0,10,15,10,9],[0,14,15,14,9]],"pause-octagon":[[6,"M10 15V9"],[6,"M14 15V9"],[6,"M7.714 2h8.572L22 7.714v8.572L16.286 22H7.714L2 16.286V7.714L7.714 2z"]],pause:[[5,6,4,4,16],[5,14,4,4,16]],"pen-tool":[[6,"m12 19 7-7 3 3-7 7-3-3z"],[6,"m18 13-1.5-7.5L2 2l3.5 14.5L13 18l5-5z"],[6,"m2 2 7.586 7.586"],[1,11,11,2]],pencil:[[0,18,2,22,6],[6,"M7.5 20.5 19 9l-4-4L3.5 16.5 2 22z"]],percent:[[0,19,5,5,19],[1,6.5,6.5,2.5],[1,17.5,17.5,2.5]],"person-standing":[[1,12,5,1],[6,"m9 20 3-6 3 6"],[6,"m6 8 6 2 6-2"],[6,"M12 10v4"]],"phone-call":[[6,"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"],[6,"M14.05 2a9 9 0 0 1 8 7.94"],[6,"M14.05 6A5 5 0 0 1 18 10"]],"phone-forwarded":[[2,"18 2 22 6 18 10"],[0,14,6,22,6],[6,"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"]],"phone-incoming":[[2,"16 2 16 8 22 8"],[0,22,2,16,8],[6,"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"]],"phone-missed":[[0,22,2,16,8],[0,16,2,22,8],[6,"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"]],"phone-off":[[6,"M10.68 13.31a16 16 0 0 0 3.41 2.6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7 2 2 0 0 1 1.72 2v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.42 19.42 0 0 1-3.33-2.67m-2.67-3.34a19.79 19.79 0 0 1-3.07-8.63A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91"],[0,22,2,2,22]],"phone-outgoing":[[2,"22 8 22 2 16 2"],[0,16,8,22,2],[6,"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"]],phone:[[6,"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"]],"picture-in-picture-2":[[6,"M21 9V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v10c0 1.1.9 2 2 2h4"],[5,12,13,10,7,2]],"picture-in-picture":[[6,"M8 4.5v5H3m-1-6 6 6m13 0v-3c0-1.16-.84-2-2-2h-7m-9 9v2c0 1.05.95 2 2 2h3"],[5,12,13.5,10,7,0,2]],"pie-chart":[[6,"M21.21 15.89A10 10 0 1 1 8 2.83"],[6,"M22 12A10 10 0 0 0 12 2v10z"]],"piggy-bank":[[6,"M19 5c-1.5 0-2.8 1.4-3 2-3.5-1.5-11-.3-11 5 0 1.8 0 3 2 4.5V20h4v-2h3v2h4v-4c1-.5 1.7-1 2-2h2v-4h-2c0-1-.5-1.5-1-2h0V5z"],[6,"M2 9v1c0 1.1.9 2 2 2h1"],[6,"M16 11h0"]],pilcrow:[[6,"M13 4v16"],[6,"M17 4v16"],[6,"M19 4H9.5a4.5 4.5 0 0 0 0 9H13"]],"pin-off":[[0,2,2,22,22],[0,12,17,12,22],[6,"M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V17h12"],[6,"M15 9.34V6h1a2 2 0 0 0 0-4H7.89"]],pin:[[0,12,17,12,22],[6,"M5 17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V6h1a2 2 0 0 0 0-4H8a2 2 0 0 0 0 4h1v4.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24Z"]],pipette:[[6,"m2 22 1-1h3l9-9"],[6,"M3 21v-3l9-9"],[6,"m15 6 3.4-3.4a2.1 2.1 0 1 1 3 3L18 9l.4.4a2.1 2.1 0 1 1-3 3l-3.8-3.8a2.1 2.1 0 1 1 3-3l.4.4Z"]],pizza:[[6,"M15 11h.01"],[6,"M11 15h.01"],[6,"M16 16h.01"],[6,"m2 16 20 6-6-20c-3.36.9-6.42 2.67-8.88 5.12A19.876 19.876 0 0 0 2 16Z"],[6,"M17 6c-6.29 1.47-9.43 5.13-11 11"]],plane:[[6,"M17.8 19.2 16 11l3.5-3.5C21 6 21.5 4 21 3c-1-.5-3 0-4.5 1.5L13 8 4.8 6.2c-.5-.1-.9.1-1.1.5l-.3.5c-.2.5-.1 1 .3 1.3L9 12l-2 3H4l-1 1 3 2 2 3 1-1v-3l3-2 3.5 5.3c.3.4.8.5 1.3.3l.5-.2c.4-.3.6-.7.5-1.2z"]],"play-circle":[[1,12,12,10],[3,"10 8 16 12 10 16 10 8"]],play:[[3,"5 3 19 12 5 21 5 3"]],"plug-2":[[6,"M9 2v6"],[6,"M15 2v6"],[6,"M12 17v5"],[6,"M5 8h14"],[6,"M6 11V8h12v3a6 6 0 1 1-12 0v0Z"]],"plug-zap":[[6,"m13 2-2 2.5h3L12 7"],[6,"M12 22v-3"],[6,"M10 13v-2.5"],[6,"M10 12.5v-2"],[6,"M14 12.5v-2"],[6,"M16 15a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h4a2 2 0 0 0 2-2v-2z"]],plug:[[6,"M12 22v-5"],[6,"M9 7V2"],[6,"M15 7V2"],[6,"M6 13V8h12v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4Z"]],"plus-circle":[[1,12,12,10],[0,12,8,12,16],[0,8,12,16,12]],"plus-square":[[5,3,3,18,18,2,2],[0,12,8,12,16],[0,8,12,16,12]],plus:[[0,12,5,12,19],[0,5,12,19,12]],pocket:[[6,"M4 3h16a2 2 0 0 1 2 2v6a10 10 0 0 1-10 10A10 10 0 0 1 2 11V5a2 2 0 0 1 2-2z"],[2,"8 10 12 14 16 10"]],podcast:[[1,12,11,1],[6,"M11 17a1 1 0 0 1 2 0c0 .5-.34 3-.5 4.5a.5.5 0 0 1-1 0c-.16-1.5-.5-4-.5-4.5Z"],[6,"M8 14a5 5 0 1 1 8 0"],[6,"M17 18.5a9 9 0 1 0-10 0"]],pointer:[[6,"M22 14a8 8 0 0 1-8 8"],[6,"M18 11v-1a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v0"],[6,"M14 10V9a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v1"],[6,"M10 9.5V4a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v10"],[6,"M18 11a2 2 0 1 1 4 0v3a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15"]],"pound-sterling":[[6,"M18 7c0-5.333-8-5.333-8 0"],[6,"M10 7v14"],[6,"M6 21h12"],[6,"M6 13h10"]],"power-off":[[6,"M18.36 6.64A9 9 0 0 1 20.77 15"],[6,"M6.16 6.16a9 9 0 1 0 12.68 12.68"],[6,"M12 2v4"],[6,"m2 2 20 20"]],power:[[6,"M18.36 6.64a9 9 0 1 1-12.73 0"],[0,12,2,12,12]],printer:[[2,"6 9 6 2 18 2 18 9"],[6,"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"],[5,6,14,12,8]],puzzle:[[6,"M19.439 7.85c-.049.322.059.648.289.878l1.568 1.568c.47.47.706 1.087.706 1.704s-.235 1.233-.706 1.704l-1.611 1.611a.98.98 0 0 1-.837.276c-.47-.07-.802-.48-.968-.925a2.501 2.501 0 1 0-3.214 3.214c.446.166.855.497.925.968a.979.979 0 0 1-.276.837l-1.61 1.61a2.404 2.404 0 0 1-1.705.707 2.402 2.402 0 0 1-1.704-.706l-1.568-1.568a1.026 1.026 0 0 0-.877-.29c-.493.074-.84.504-1.02.968a2.5 2.5 0 1 1-3.237-3.237c.464-.18.894-.527.967-1.02a1.026 1.026 0 0 0-.289-.877l-1.568-1.568A2.402 2.402 0 0 1 1.998 12c0-.617.236-1.234.706-1.704L4.23 8.77c.24-.24.581-.353.917-.303.515.077.877.528 1.073 1.01a2.5 2.5 0 1 0 3.259-3.259c-.482-.196-.933-.558-1.01-1.073-.05-.336.062-.676.303-.917l1.525-1.525A2.402 2.402 0 0 1 12 1.998c.617 0 1.234.236 1.704.706l1.568 1.568c.23.23.556.338.877.29.493-.074.84-.504 1.02-.968a2.5 2.5 0 1 1 3.237 3.237c-.464.18-.894.527-.967 1.02Z"]],"qr-code":[[5,3,3,5,5,1],[5,16,3,5,5,1],[5,3,16,5,5,1],[6,"M21 16h-3a2 2 0 0 0-2 2v3"],[6,"M21 21v.01"],[6,"M12 7v3a2 2 0 0 1-2 2H7"],[6,"M3 12h.01"],[6,"M12 3h.01"],[6,"M12 16v.01"],[6,"M16 12h1"],[6,"M21 12v.01"],[6,"M12 21v-1"]],quote:[[6,"M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z"],[6,"M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z"]],"radio-receiver":[[6,"M5 16v2"],[6,"M19 16v2"],[5,2,8,20,8,2],[6,"M18 12h0"]],radio:[[1,12,12,2],[6,"M4.93 19.07a10 10 0 0 1 0-14.14"],[6,"M7.76 16.24a6 6 0 0 1-1.3-1.95 6 6 0 0 1 0-4.59 6 6 0 0 1 1.3-1.95"],[6,"M16.24 7.76a6 6 0 0 1 1.3 2 6 6 0 0 1 0 4.59 6 6 0 0 1-1.3 1.95"],[6,"M19.07 4.93a10 10 0 0 1 0 14.14"]],"rectangle-horizontal":[[5,2,6,20,12,2]],"rectangle-vertical":[[5,6,2,12,20,2]],recycle:[[6,"M7 19H4.815a1.83 1.83 0 0 1-1.57-.881 1.785 1.785 0 0 1-.004-1.784L7.196 9.5"],[6,"M11 19h8.203a1.83 1.83 0 0 0 1.556-.89 1.784 1.784 0 0 0 0-1.775l-1.226-2.12"],[6,"m14 16-3 3 3 3"],[6,"M8.293 13.596 7.196 9.5 3.1 10.598"],[6,"m9.344 5.811 1.093-1.892A1.83 1.83 0 0 1 11.985 3a1.784 1.784 0 0 1 1.546.888l3.943 6.843"],[6,"m13.378 9.633 4.096 1.098 1.097-4.096"]],"redo-2":[[6,"m15 14 5-5-5-5"],[6,"M20 9H9.5A5.5 5.5 0 0 0 4 14.5v0A5.5 5.5 0 0 0 9.5 20H13"]],redo:[[6,"M21 7v6h-6"],[6,"M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3l3 2.7"]],"refresh-ccw":[[6,"M3 2v6h6"],[6,"M21 12A9 9 0 0 0 6 5.3L3 8"],[6,"M21 22v-6h-6"],[6,"M3 12a9 9 0 0 0 15 6.7l3-2.7"]],"refresh-cw":[[6,"M21 2v6h-6"],[6,"M3 12a9 9 0 0 1 15-6.7L21 8"],[6,"M3 22v-6h6"],[6,"M21 12a9 9 0 0 1-15 6.7L3 16"]],refrigerator:[[6,"M5 6a4 4 0 0 1 4-4h6a4 4 0 0 1 4 4v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6Z"],[6,"M5 10h14"],[6,"M15 7v6"]],regex:[[6,"M17 3v10"],[6,"m12.67 5.5 8.66 5"],[6,"m12.67 10.5 8.66-5"],[6,"M9 17a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2v-2z"]],"repeat-1":[[6,"m17 2 4 4-4 4"],[6,"M3 11v-1a4 4 0 0 1 4-4h14"],[6,"m7 22-4-4 4-4"],[6,"M21 13v1a4 4 0 0 1-4 4H3"],[6,"M11 10h1v4"]],repeat:[[6,"m17 2 4 4-4 4"],[6,"M3 11v-1a4 4 0 0 1 4-4h14"],[6,"m7 22-4-4 4-4"],[6,"M21 13v1a4 4 0 0 1-4 4H3"]],"reply-all":[[2,"7 17 2 12 7 7"],[2,"12 17 7 12 12 7"],[6,"M22 18v-2a4 4 0 0 0-4-4H7"]],reply:[[2,"9 17 4 12 9 7"],[6,"M20 18v-2a4 4 0 0 0-4-4H4"]],rewind:[[3,"11 19 2 12 11 5 11 19"],[3,"22 19 13 12 22 5 22 19"]],rocket:[[6,"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z"],[6,"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z"],[6,"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0"],[6,"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5"]],"rocking-chair":[[2,"3.5 2 6.5 12.5 18 12.5"],[0,9.5,12.5,5.5,20],[0,15,12.5,18.5,20],[6,"M2.75 18a13 13 0 0 0 18.5 0"]],"rotate-3d":[[6,"M16.466 7.5C15.643 4.237 13.952 2 12 2 9.239 2 7 6.477 7 12s2.239 10 5 10c.342 0 .677-.069 1-.2"],[6,"m15.194 13.707 3.814 1.86-1.86 3.814"],[6,"M19 15.57c-1.804.885-4.274 1.43-7 1.43-5.523 0-10-2.239-10-5s4.477-5 10-5c4.838 0 8.873 1.718 9.8 4"]],"rotate-ccw":[[6,"M3 2v6h6"],[6,"M3 13a9 9 0 1 0 3-7.7L3 8"]],"rotate-cw":[[6,"M21 2v6h-6"],[6,"M21 13a9 9 0 1 1-3-7.7L21 8"]],rss:[[6,"M4 11a9 9 0 0 1 9 9"],[6,"M4 4a16 16 0 0 1 16 16"],[1,5,19,1]],ruler:[[6,"M21.3 8.7 8.7 21.3c-1 1-2.5 1-3.4 0l-2.6-2.6c-1-1-1-2.5 0-3.4L15.3 2.7c1-1 2.5-1 3.4 0l2.6 2.6c1 1 1 2.5 0 3.4Z"],[6,"m7.5 10.5 2 2"],[6,"m10.5 7.5 2 2"],[6,"m13.5 4.5 2 2"],[6,"m4.5 13.5 2 2"]],"russian-ruble":[[6,"M14 11c5.333 0 5.333-8 0-8"],[6,"M6 11h8"],[6,"M6 15h8"],[6,"M9 21V3"],[6,"M9 3h5"]],sailboat:[[6,"M22 18H2a4 4 0 0 0 4 4h12a4 4 0 0 0 4-4Z"],[6,"M21 14 10 2 3 14h18Z"],[6,"M10 2v16"]],salad:[[6,"M7 21h10"],[6,"M12 21a9 9 0 0 0 9-9H3a9 9 0 0 0 9 9Z"],[6,"M11.38 12a2.4 2.4 0 0 1-.4-4.77 2.4 2.4 0 0 1 3.2-2.77 2.4 2.4 0 0 1 3.47-.63 2.4 2.4 0 0 1 3.37 3.37 2.4 2.4 0 0 1-1.1 3.7 2.51 2.51 0 0 1 .03 1.1"],[6,"m13 12 4-4"],[6,"M10.9 7.25A3.99 3.99 0 0 0 4 10c0 .73.2 1.41.54 2"]],sandwich:[[6,"M3 11v3a1 1 0 0 0 1 1h16a1 1 0 0 0 1-1v-3"],[6,"M12 19H4a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h16a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-3.83"],[6,"m3 11 7.77-6.04a2 2 0 0 1 2.46 0L21 11H3Z"],[6,"M12.97 19.77 7 15h12.5l-3.75 4.5a2 2 0 0 1-2.78.27Z"]],save:[[6,"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"],[2,"17 21 17 13 7 13 7 21"],[2,"7 3 7 8 15 8"]],"scale-3d":[[6,"M5 7v12h12"],[6,"m5 19 6-6"],[5,3,3,4,4,1],[5,17,17,4,4,1]],scale:[[6,"m16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z"],[6,"m2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z"],[6,"M7 21h10"],[6,"M12 3v18"],[6,"M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2"]],scaling:[[6,"M21 3 9 15"],[6,"M12 3H3v18h18v-9"],[6,"M16 3h5v5"],[6,"M14 15H9v-5"]],"scan-face":[[6,"M3 7V5a2 2 0 0 1 2-2h2"],[6,"M17 3h2a2 2 0 0 1 2 2v2"],[6,"M21 17v2a2 2 0 0 1-2 2h-2"],[6,"M7 21H5a2 2 0 0 1-2-2v-2"],[6,"M8 14s1.5 2 4 2 4-2 4-2"],[6,"M9 9h.01"],[6,"M15 9h.01"]],"scan-line":[[6,"M3 7V5a2 2 0 0 1 2-2h2"],[6,"M17 3h2a2 2 0 0 1 2 2v2"],[6,"M21 17v2a2 2 0 0 1-2 2h-2"],[6,"M7 21H5a2 2 0 0 1-2-2v-2"],[0,7,12,17,12]],scan:[[6,"M3 7V5a2 2 0 0 1 2-2h2"],[6,"M17 3h2a2 2 0 0 1 2 2v2"],[6,"M21 17v2a2 2 0 0 1-2 2h-2"],[6,"M7 21H5a2 2 0 0 1-2-2v-2"]],scissors:[[1,6,6,3],[1,6,18,3],[0,20,4,8.12,15.88],[0,14.47,14.48,20,20],[0,8.12,8.12,12,12]],"screen-share-off":[[6,"M13 3H4a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-3"],[6,"M8 21h8"],[6,"M12 17v4"],[6,"m22 3-5 5"],[6,"m17 3 5 5"]],"screen-share":[[6,"M13 3H4a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-3"],[6,"M8 21h8"],[6,"M12 17v4"],[6,"m17 8 5-5"],[6,"M17 3h5v5"]],scroll:[[6,"M10 17v2a2 2 0 0 1-2 2v0a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v3h3"],[6,"M22 17v2a2 2 0 0 1-2 2H8"],[6,"M19 17V5a2 2 0 0 0-2-2H4"],[6,"M22 17H10"]],search:[[1,11,11,8],[0,21,21,16.65,16.65]],send:[[0,22,2,11,13],[3,"22 2 15 22 11 13 2 9 22 2"]],"separator-horizontal":[[0,3,12,21,12],[2,"8 8 12 4 16 8"],[2,"16 16 12 20 8 16"]],"separator-vertical":[[0,12,3,12,21],[2,"8 8 4 12 8 16"],[2,"16 16 20 12 16 8"]],"server-cog":[[6,"M5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-1"],[6,"M5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-1"],[6,"M6 6h.01"],[6,"M6 18h.01"],[1,12,12,3],[6,"M12 8v1"],[6,"M12 15v1"],[6,"M16 12h-1"],[6,"M9 12H8"],[6,"m15 9-.88.88"],[6,"M9.88 14.12 9 15"],[6,"m15 15-.88-.88"],[6,"M9.88 9.88 9 9"]],"server-crash":[[6,"M6 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-2"],[6,"M6 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-2"],[6,"M6 6h.01"],[6,"M6 18h.01"],[6,"m13 6-4 6h6l-4 6"]],"server-off":[[6,"M7 2h13a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-5"],[6,"M10 10 2.5 2.5C2 2 2 2.5 2 5v3a2 2 0 0 0 2 2h6z"],[6,"M22 17v-1a2 2 0 0 0-2-2h-1"],[6,"M4 14a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16.5l1-.5.5.5-8-8H4z"],[6,"M6 18h.01"],[6,"m2 2 20 20"]],server:[[5,2,2,20,8,2,2],[5,2,14,20,8,2,2],[0,6,6,6.01,6],[0,6,18,6.01,18]],"settings-2":[[6,"M20 7h-9"],[6,"M14 17H5"],[1,17,17,3],[1,7,7,3]],settings:[[6,"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"],[1,12,12,3]],"share-2":[[1,18,5,3],[1,6,12,3],[1,18,19,3],[0,8.59,13.51,15.42,17.49],[0,15.41,6.51,8.59,10.49]],share:[[6,"M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8"],[2,"16 6 12 2 8 6"],[0,12,2,12,15]],sheet:[[5,3,3,18,18,2,2],[0,3,9,21,9],[0,3,15,21,15],[0,9,9,9,21],[0,15,9,15,21]],"shield-alert":[[6,"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"],[6,"M12 8v4"],[6,"M12 16h.01"]],"shield-check":[[6,"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"],[6,"m9 12 2 2 4-4"]],"shield-close":[[6,"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"],[0,9.5,9,14.5,14],[0,14.5,9,9.5,14]],"shield-off":[[6,"M19.69 14a6.9 6.9 0 0 0 .31-2V5l-8-3-3.16 1.18"],[6,"M4.73 4.73 4 5v7c0 6 8 10 8 10a20.29 20.29 0 0 0 5.62-4.38"],[0,2,2,22,22]],shield:[[6,"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"]],shirt:[[6,"M20.38 3.46 16 2a4 4 0 0 1-8 0L3.62 3.46a2 2 0 0 0-1.34 2.23l.58 3.47a1 1 0 0 0 .99.84H6v10c0 1.1.9 2 2 2h8a2 2 0 0 0 2-2V10h2.15a1 1 0 0 0 .99-.84l.58-3.47a2 2 0 0 0-1.34-2.23z"]],"shopping-bag":[[6,"M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"],[0,3,6,21,6],[6,"M16 10a4 4 0 0 1-8 0"]],"shopping-cart":[[1,8,21,1],[1,19,21,1],[6,"M2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12"]],shovel:[[6,"M2 22v-5l5-5 5 5-5 5z"],[6,"M9.5 14.5 16 8"],[6,"m17 2 5 5-.5.5a3.53 3.53 0 0 1-5 0s0 0 0 0a3.53 3.53 0 0 1 0-5L17 2"]],"shower-head":[[6,"m4 4 2.5 2.5"],[6,"M13.5 6.5a4.95 4.95 0 0 0-7 7"],[6,"M15 5 5 15"],[6,"M14 17v.01"],[6,"M10 16v.01"],[6,"M13 13v.01"],[6,"M16 10v.01"],[6,"M11 20v.01"],[6,"M17 14v.01"],[6,"M20 11v.01"]],shrink:[[6,"m15 15 6 6m-6-6v4.8m0-4.8h4.8"],[6,"M9 19.8V15m0 0H4.2M9 15l-6 6"],[6,"M15 4.2V9m0 0h4.8M15 9l6-6"],[6,"M9 4.2V9m0 0H4.2M9 9 3 3"]],shrub:[[6,"M12 22v-7l-2-2"],[6,"M17 8v.8A6 6 0 0 1 13.8 20v0H10v0A6.5 6.5 0 0 1 7 8h0a5 5 0 0 1 10 0Z"],[6,"m14 14-2 2"]],shuffle:[[2,"16 3 21 3 21 8"],[0,4,20,21,3],[2,"21 16 21 21 16 21"],[0,15,15,21,21],[0,4,4,9,9]],"sidebar-close":[[5,3,3,18,18,2,2],[6,"M9 3v18"],[6,"m16 15-3-3 3-3"]],"sidebar-open":[[5,3,3,18,18,2,2],[6,"M9 3v18"],[6,"m14 9 3 3-3 3"]],sidebar:[[5,3,3,18,18,2,2],[0,9,3,9,21]],sigma:[[6,"M18 7V4H6l6 8-6 8h12v-3"]],"signal-high":[[6,"M2 20h.01"],[6,"M7 20v-4"],[6,"M12 20v-8"],[6,"M17 20V8"]],"signal-low":[[6,"M2 20h.01"],[6,"M7 20v-4"]],"signal-medium":[[6,"M2 20h.01"],[6,"M7 20v-4"],[6,"M12 20v-8"]],"signal-zero":[[6,"M2 20h.01"]],signal:[[6,"M2 20h.01"],[6,"M7 20v-4"],[6,"M12 20v-8"],[6,"M17 20V8"],[6,"M22 4v16"]],siren:[[6,"M7 12a5 5 0 0 1 5-5v0a5 5 0 0 1 5 5v6H7v-6Z"],[6,"M5 20a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v2H5v-2Z"],[6,"M21 12h1"],[6,"M18.5 4.5 18 5"],[6,"M2 12h1"],[6,"M12 2v1"],[6,"m4.929 4.929.707.707"],[6,"M12 12v6"]],"skip-back":[[3,"19 20 9 12 19 4 19 20"],[0,5,19,5,5]],"skip-forward":[[3,"5 4 15 12 5 20 5 4"],[0,19,5,19,19]],skull:[[1,9,12,1],[1,15,12,1],[6,"M8 20v2h8v-2"],[6,"m12.5 17-.5-1-.5 1h1z"],[6,"M16 20a2 2 0 0 0 1.56-3.25 8 8 0 1 0-11.12 0A2 2 0 0 0 8 20"]],slack:[[5,13,2,3,8,1.5],[6,"M19 8.5V10h1.5A1.5 1.5 0 1 0 19 8.5"],[5,8,14,3,8,1.5],[6,"M5 15.5V14H3.5A1.5 1.5 0 1 0 5 15.5"],[5,14,13,8,3,1.5],[6,"M15.5 19H14v1.5a1.5 1.5 0 1 0 1.5-1.5"],[5,2,8,8,3,1.5],[6,"M8.5 5H10V3.5A1.5 1.5 0 1 0 8.5 5"]],slash:[[1,12,12,10],[0,4.93,4.93,19.07,19.07]],slice:[[6,"m8 14-6 6h9v-3"],[6,"M18.37 3.63 8 14l3 3L21.37 6.63a2.12 2.12 0 1 0-3-3Z"]],"sliders-horizontal":[[0,21,4,14,4],[0,10,4,3,4],[0,21,12,12,12],[0,8,12,3,12],[0,21,20,16,20],[0,12,20,3,20],[0,14,2,14,6],[0,8,10,8,14],[0,16,18,16,22]],sliders:[[0,4,21,4,14],[0,4,10,4,3],[0,12,21,12,12],[0,12,8,12,3],[0,20,21,20,16],[0,20,12,20,3],[0,2,14,6,14],[0,10,8,14,8],[0,18,16,22,16]],"smartphone-charging":[[5,5,2,14,20,2,2],[6,"M12.667 8 10 12h4l-2.667 4"]],smartphone:[[5,5,2,14,20,2,2],[6,"M12 18h.01"]],"smile-plus":[[6,"M22 11v1a10 10 0 1 1-9-10"],[6,"M8 14s1.5 2 4 2 4-2 4-2"],[0,9,9,9.01,9],[0,15,9,15.01,9],[6,"M16 5h6"],[6,"M19 2v6"]],smile:[[1,12,12,10],[6,"M8 14s1.5 2 4 2 4-2 4-2"],[0,9,9,9.01,9],[0,15,9,15.01,9]],snowflake:[[0,2,12,22,12],[0,12,2,12,22],[6,"m20 16-4-4 4-4"],[6,"m4 8 4 4-4 4"],[6,"m16 4-4 4-4-4"],[6,"m8 20 4-4 4 4"]],sofa:[[6,"M20 9V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v3"],[6,"M2 11v5a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-5a2 2 0 0 0-4 0v2H6v-2a2 2 0 0 0-4 0Z"],[6,"M4 18v2"],[6,"M20 18v2"],[6,"M12 4v9"]],"sort-asc":[[6,"M11 11h4"],[6,"M11 15h7"],[6,"M11 19h10"],[6,"M9 7 6 4 3 7"],[6,"M6 6v14"]],"sort-desc":[[6,"M11 5h10"],[6,"M11 9h7"],[6,"M11 13h4"],[6,"m3 17 3 3 3-3"],[6,"M6 18V4"]],soup:[[6,"M12 21a9 9 0 0 0 9-9H3a9 9 0 0 0 9 9Z"],[6,"M7 21h10"],[6,"M19.5 12 22 6"],[6,"M16.25 3c.27.1.8.53.75 1.36-.06.83-.93 1.2-1 2.02-.05.78.34 1.24.73 1.62"],[6,"M11.25 3c.27.1.8.53.74 1.36-.05.83-.93 1.2-.98 2.02-.06.78.33 1.24.72 1.62"],[6,"M6.25 3c.27.1.8.53.75 1.36-.06.83-.93 1.2-1 2.02-.05.78.34 1.24.74 1.62"]],speaker:[[5,4,2,16,20,2,2],[1,12,14,4],[0,12,6,12.01,6]],spline:[[6,"M21 6V4c0-.6-.4-1-1-1h-2a1 1 0 0 0-1 1v2c0 .6.4 1 1 1h2c.6 0 1-.4 1-1Z"],[6,"M7 20v-2c0-.6-.4-1-1-1H4a1 1 0 0 0-1 1v2c0 .6.4 1 1 1h2c.6 0 1-.4 1-1Z"],[6,"M5 17A12 12 0 0 1 17 5"]],sprout:[[6,"M7 20h10"],[6,"M10 20c5.5-2.5.8-6.4 3-10"],[6,"M9.5 9.4c1.1.8 1.8 2.2 2.3 3.7-2 .4-3.5.4-4.8-.3-1.2-.6-2.3-1.9-3-4.2 2.8-.5 4.4 0 5.5.8z"],[6,"M14.1 6a7 7 0 0 0-1.1 4c1.9-.1 3.3-.6 4.3-1.4 1-1 1.6-2.3 1.7-4.6-2.7.1-4 1-4.9 2z"]],square:[[5,3,3,18,18,2,2]],"star-half":[[6,"M12 17.8 5.8 21 7 14.1 2 9.3l7-1L12 2"]],"star-off":[[6,"M8.34 8.34 2 9.27l5 4.87L5.82 21 12 17.77 18.18 21l-.59-3.43"],[6,"M18.42 12.76 22 9.27l-6.91-1L12 2l-1.44 2.91"],[0,2,2,22,22]],star:[[3,"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"]],stethoscope:[[6,"M4.8 2.3A.3.3 0 1 0 5 2H4a2 2 0 0 0-2 2v5a6 6 0 0 0 6 6v0a6 6 0 0 0 6-6V4a2 2 0 0 0-2-2h-1a.2.2 0 1 0 .3.3"],[6,"M8 15v1a6 6 0 0 0 6 6v0a6 6 0 0 0 6-6v-4"],[1,20,10,2]],sticker:[[6,"M15.5 3H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h14a2 2 0 0 0 2-2V8.5L15.5 3Z"],[6,"M15 3v6h6"],[6,"M10 16s.8 1 2 1c1.3 0 2-1 2-1"],[6,"M8 13h0"],[6,"M16 13h0"]],"sticky-note":[[6,"M15.5 3H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h14a2 2 0 0 0 2-2V8.5L15.5 3Z"],[6,"M15 3v6h6"]],"stop-circle":[[1,12,12,10],[5,9,9,6,6]],"stretch-horizontal":[[5,2,4,20,6,2],[5,2,14,20,6,2]],"stretch-vertical":[[5,4,2,6,20,2],[5,14,2,6,20,2]],strikethrough:[[6,"M16 4H9a3 3 0 0 0-2.83 4"],[6,"M14 12a4 4 0 0 1 0 8H6"],[0,4,12,20,12]],subscript:[[6,"m4 5 8 8"],[6,"m12 5-8 8"],[6,"M20 19h-4c0-1.5.44-2 1.5-2.5S20 15.33 20 14c0-.47-.17-.93-.48-1.29a2.11 2.11 0 0 0-2.62-.44c-.42.24-.74.62-.9 1.07"]],subtitles:[[6,"M7 13h4"],[6,"M15 13h2"],[6,"M7 9h2"],[6,"M13 9h4"],[6,"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10Z"]],"sun-dim":[[6,"M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8z"],[6,"M12 4h.01"],[6,"M20 12h.01"],[6,"M12 20h.01"],[6,"M4 12h.01"],[6,"M17.657 6.343h.01"],[6,"M17.657 17.657h.01"],[6,"M6.343 17.657h.01"],[6,"M6.343 6.343h.01"]],"sun-medium":[[6,"M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8z"],[6,"M12 3v1"],[6,"M12 20v1"],[6,"M3 12h1"],[6,"M20 12h1"],[6,"m18.364 5.636-.707.707"],[6,"m6.343 17.657-.707.707"],[6,"m5.636 5.636.707.707"],[6,"m17.657 17.657.707.707"]],"sun-moon":[[6,"M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8z"],[6,"M12 8a2.828 2.828 0 1 0 4 4"],[6,"M12 2v2"],[6,"M12 20v2"],[6,"m4.93 4.93 1.41 1.41"],[6,"m17.66 17.66 1.41 1.41"],[6,"M2 12h2"],[6,"M20 12h2"],[6,"m6.34 17.66-1.41 1.41"],[6,"m19.07 4.93-1.41 1.41"]],"sun-snow":[[6,"M10 9a3 3 0 1 0 0 6"],[6,"M2 12h1"],[6,"M14 21V3"],[6,"M10 4V3"],[6,"M10 21v-1"],[6,"m3.64 18.36.7-.7"],[6,"m4.34 6.34-.7-.7"],[6,"M14 12h8"],[6,"m17 4-3 3"],[6,"m14 17 3 3"],[6,"m21 15-3-3 3-3"]],sun:[[1,12,12,4],[6,"M12 2v2"],[6,"M12 20v2"],[6,"m4.93 4.93 1.41 1.41"],[6,"m17.66 17.66 1.41 1.41"],[6,"M2 12h2"],[6,"M20 12h2"],[6,"m6.34 17.66-1.41 1.41"],[6,"m19.07 4.93-1.41 1.41"]],sunrise:[[6,"M12 2v8"],[6,"m4.93 10.93 1.41 1.41"],[6,"M2 18h2"],[6,"M20 18h2"],[6,"m19.07 10.93-1.41 1.41"],[6,"M22 22H2"],[6,"m8 6 4-4 4 4"],[6,"M16 18a4 4 0 0 0-8 0"]],sunset:[[6,"M12 10V2"],[6,"m4.93 10.93 1.41 1.41"],[6,"M2 18h2"],[6,"M20 18h2"],[6,"m19.07 10.93-1.41 1.41"],[6,"M22 22H2"],[6,"m16 6-4 4-4-4"],[6,"M16 18a4 4 0 0 0-8 0"]],superscript:[[6,"m4 19 8-8"],[6,"m12 19-8-8"],[6,"M20 12h-4c0-1.5.442-2 1.5-2.5S20 8.334 20 7.002c0-.472-.17-.93-.484-1.29a2.105 2.105 0 0 0-2.617-.436c-.42.239-.738.614-.899 1.06"]],"swiss-franc":[[6,"M10 21V3h8"],[6,"M6 16h9"],[6,"M10 9.5h7"]],"switch-camera":[[6,"M11 19H4a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h5"],[6,"M13 5h7a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-5"],[1,12,12,3],[6,"m18 22-3-3 3-3"],[6,"m6 2 3 3-3 3"]],sword:[[2,"14.5 17.5 3 6 3 3 6 3 17.5 14.5"],[0,13,19,19,13],[0,16,16,20,20],[0,19,21,21,19]],swords:[[2,"14.5 17.5 3 6 3 3 6 3 17.5 14.5"],[0,13,19,19,13],[0,16,16,20,20],[0,19,21,21,19],[2,"14.5 6.5 18 3 21 3 21 6 17.5 9.5"],[0,5,14,9,18],[0,7,17,4,20],[0,3,19,5,21]],syringe:[[6,"m18 2 4 4"],[6,"m17 7 3-3"],[6,"M19 9 8.7 19.3c-1 1-2.5 1-3.4 0l-.6-.6c-1-1-1-2.5 0-3.4L15 5"],[6,"m9 11 4 4"],[6,"m5 19-3 3"],[6,"m14 4 6 6"]],"table-2":[[6,"M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18"]],table:[[5,3,3,18,18,2,2],[0,3,9,21,9],[0,3,15,21,15],[0,12,3,12,21]],tablet:[[5,4,2,16,20,2,2],[0,12,18,12.01,18]],tag:[[6,"M12 2H2v10l9.29 9.29c.94.94 2.48.94 3.42 0l6.58-6.58c.94-.94.94-2.48 0-3.42L12 2Z"],[6,"M7 7h.01"]],tags:[[6,"M9 5H2v7l6.29 6.29c.94.94 2.48.94 3.42 0l3.58-3.58c.94-.94.94-2.48 0-3.42L9 5Z"],[6,"M6 9.01V9"],[6,"m15 5 6.3 6.3a2.4 2.4 0 0 1 0 3.4L17 19"]],target:[[1,12,12,10],[1,12,12,6],[1,12,12,2]],tent:[[6,"M19 20 10 4"],[6,"m5 20 9-16"],[6,"M3 20h18"],[6,"m12 15-3 5"],[6,"m12 15 3 5"]],"terminal-square":[[6,"m7 11 2-2-2-2"],[6,"M11 13h4"],[5,3,3,18,18,2,2]],terminal:[[2,"4 17 10 11 4 5"],[0,12,19,20,19]],"text-cursor-input":[[6,"M13 20h-1a3 3 0 0 1-3-3V7a3 3 0 0 1 3-3h1"],[6,"M5 4h1a3 3 0 0 1 3 3v10a3 3 0 0 1-3 3H5"],[6,"M13.1 7.9h6.8A2.18 2.18 0 0 1 22 10v4a2.11 2.11 0 0 1-2.1 2.1h-6.8"],[6,"M4.8 16.1h-.7A2.18 2.18 0 0 1 2 14v-4a2.18 2.18 0 0 1 2.1-2.1h.7"]],"text-cursor":[[6,"M17 22h-1a4 4 0 0 1-4-4V6a4 4 0 0 1 4-4h1"],[6,"M7 22h1a4 4 0 0 0 4-4v-1"],[6,"M7 2h1a4 4 0 0 1 4 4v1"]],"thermometer-snowflake":[[6,"M2 12h10"],[6,"M9 4v16"],[6,"m3 9 3 3-3 3"],[6,"M12 6 9 9 6 6"],[6,"m6 18 3-3 1.5 1.5"],[6,"M20 4v10.54a4 4 0 1 1-4 0V4a2 2 0 0 1 4 0Z"]],"thermometer-sun":[[6,"M12 9a4 4 0 0 0-2 7.5"],[6,"M12 3v2"],[6,"m6.6 18.4-1.4 1.4"],[6,"M20 4v10.54a4 4 0 1 1-4 0V4a2 2 0 0 1 4 0Z"],[6,"M4 13H2"],[6,"M6.34 7.34 4.93 5.93"]],thermometer:[[6,"M14 4v10.54a4 4 0 1 1-4 0V4a2 2 0 0 1 4 0Z"]],"thumbs-down":[[6,"M17 14V2"],[6,"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22h0a3.13 3.13 0 0 1-3-3.88Z"]],"thumbs-up":[[6,"M7 10v12"],[6,"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2h0a3.13 3.13 0 0 1 3 3.88Z"]],ticket:[[6,"M3 7v2a3 3 0 1 1 0 6v2c0 1.1.9 2 2 2h14a2 2 0 0 0 2-2v-2a3 3 0 1 1 0-6V7a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2Z"],[6,"M13 5v2"],[6,"M13 17v2"],[6,"M13 11v2"]],"timer-off":[[6,"M10 2h4"],[6,"M4.6 11a8 8 0 0 0 1.7 8.7 8 8 0 0 0 8.7 1.7"],[6,"M7.4 7.4a8 8 0 0 1 10.3 1 8 8 0 0 1 .9 10.2"],[6,"m2 2 20 20"],[6,"M12 12v-2"]],"timer-reset":[[6,"M10 2h4"],[6,"M12 14v-4"],[6,"M4 13a8 8 0 0 1 8-7 8 8 0 1 1-5.3 14L4 17.6"],[6,"M9 17H4v5"]],timer:[[0,10,2,14,2],[0,12,14,15,11],[1,12,14,8]],"toggle-left":[[5,2,6,20,12,6,6],[1,8,12,2]],"toggle-right":[[5,2,6,20,12,6,6],[1,16,12,2]],tornado:[[6,"M21 4H3"],[6,"M18 8H6"],[6,"M19 12H9"],[6,"M16 16h-6"],[6,"M11 20H9"]],"toy-brick":[[5,3,8,18,12,1],[6,"M10 8V5c0-.6-.4-1-1-1H6a1 1 0 0 0-1 1v3"],[6,"M19 8V5c0-.6-.4-1-1-1h-3a1 1 0 0 0-1 1v3"]],train:[[5,4,3,16,16,2],[6,"M4 11h16"],[6,"M12 3v8"],[6,"m8 19-2 3"],[6,"m18 22-2-3"],[6,"M8 15h0"],[6,"M16 15h0"]],"trash-2":[[6,"M3 6h18"],[6,"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"],[6,"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"],[0,10,11,10,17],[0,14,11,14,17]],trash:[[6,"M3 6h18"],[6,"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"],[6,"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"]],"tree-deciduous":[[6,"M8 19h8a4 4 0 0 0 3.8-2.8 4 4 0 0 0-1.6-4.5c1-1.1 1-2.7.4-4-.7-1.2-2.2-2-3.6-1.7a3 3 0 0 0-3-3 3 3 0 0 0-3 3c-1.4-.2-2.9.5-3.6 1.7-.7 1.3-.5 2.9.4 4a4 4 0 0 0-1.6 4.5A4 4 0 0 0 8 19Z"],[6,"M12 19v3"]],"tree-pine":[[6,"m17 14 3 3.3a1 1 0 0 1-.7 1.7H4.7a1 1 0 0 1-.7-1.7L7 14h-.3a1 1 0 0 1-.7-1.7L9 9h-.2A1 1 0 0 1 8 7.3L12 3l4 4.3a1 1 0 0 1-.8 1.7H15l3 3.3a1 1 0 0 1-.7 1.7H17Z"],[6,"M12 22v-3"]],trees:[[6,"M10 10v.2A3 3 0 0 1 8.9 16v0H5v0h0a3 3 0 0 1-1-5.8V10a3 3 0 0 1 6 0Z"],[6,"M7 16v6"],[6,"M13 19v3"],[6,"M12 19h8.3a1 1 0 0 0 .7-1.7L18 14h.3a1 1 0 0 0 .7-1.7L16 9h.2a1 1 0 0 0 .8-1.7L13 3l-1.4 1.5"]],trello:[[5,3,3,18,18,2,2],[5,7,7,3,9],[5,14,7,3,5]],"trending-down":[[2,"22 17 13.5 8.5 8.5 13.5 2 7"],[2,"16 17 22 17 22 11"]],"trending-up":[[2,"22 7 13.5 15.5 8.5 10.5 2 17"],[2,"16 7 22 7 22 13"]],triangle:[[6,"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"]],trophy:[[6,"M6 9H4.5a2.5 2.5 0 0 1 0-5H6"],[6,"M18 9h1.5a2.5 2.5 0 0 0 0-5H18"],[6,"M4 22h16"],[6,"M10 14.66V17c0 .55-.47.98-.97 1.21C7.85 18.75 7 20.24 7 22"],[6,"M14 14.66V17c0 .55.47.98.97 1.21C16.15 18.75 17 20.24 17 22"],[6,"M18 2H6v7a6 6 0 0 0 12 0V2Z"]],truck:[[6,"M10 17h4V5H2v12h3"],[6,"M20 17h2v-3.34a4 4 0 0 0-1.17-2.83L19 9h-5"],[6,"M14 17h1"],[1,7.5,17.5,2.5],[1,17.5,17.5,2.5]],"tv-2":[[6,"M7 21h10"],[5,2,3,20,14,2]],tv:[[5,2,7,20,15,2,2],[2,"17 2 12 7 7 2"]],twitch:[[6,"M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7"]],twitter:[[6,"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"]],type:[[2,"4 7 4 4 20 4 20 7"],[0,9,20,15,20],[0,12,4,12,20]],umbrella:[[6,"M22 12a9.92 9.92 0 0 0-3.24-6.41 10.12 10.12 0 0 0-13.52 0A9.92 9.92 0 0 0 2 12Z"],[6,"M12 12v8a2 2 0 0 0 4 0"],[0,12,2,12,3]],underline:[[6,"M6 4v6a6 6 0 0 0 12 0V4"],[0,4,20,20,20]],"undo-2":[[6,"M9 14 4 9l5-5"],[6,"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5v0a5.5 5.5 0 0 1-5.5 5.5H11"]],undo:[[6,"M3 7v6h6"],[6,"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13"]],"unlink-2":[[6,"M15 7h2a5 5 0 0 1 0 10h-2m-6 0H7A5 5 0 0 1 7 7h2"]],unlink:[[6,"m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71"],[6,"m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71"],[0,8,2,8,5],[0,2,8,5,8],[0,16,19,16,22],[0,19,16,22,16]],unlock:[[5,3,11,18,11,2,2],[6,"M7 11V7a5 5 0 0 1 9.9-1"]],"upload-cloud":[[6,"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"],[6,"M12 12v9"],[6,"m16 16-4-4-4 4"]],upload:[[6,"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"],[2,"17 8 12 3 7 8"],[0,12,3,12,15]],usb:[[1,4,20,1],[1,10,7,1],[6,"M4 20 19 5"],[6,"m21 3-3 1 2 2 1-3Z"],[6,"m10 7-5 5 2 5"],[6,"m10 14 5 2 4-4"],[6,"m18 12 1-1 1 1-1 1-1-1Z"]],"user-check":[[6,"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"],[1,9,7,4],[2,"16 11 18 13 22 9"]],"user-cog":[[6,"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"],[1,9,7,4],[1,19,11,2],[6,"M19 8v1"],[6,"M19 13v1"],[6,"m21.6 9.5-.87.5"],[6,"m17.27 12-.87.5"],[6,"m21.6 12.5-.87-.5"],[6,"m17.27 10-.87-.5"]],"user-minus":[[6,"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"],[1,9,7,4],[0,22,11,16,11]],"user-plus":[[6,"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"],[1,9,7,4],[0,19,8,19,14],[0,22,11,16,11]],"user-x":[[6,"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"],[1,9,7,4],[0,17,8,22,13],[0,22,8,17,13]],user:[[6,"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"],[1,12,7,4]],users:[[6,"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"],[1,9,7,4],[6,"M22 21v-2a4 4 0 0 0-3-3.87"],[6,"M16 3.13a4 4 0 0 1 0 7.75"]],"utensils-crossed":[[6,"m16 2-2.3 2.3a3 3 0 0 0 0 4.2l1.8 1.8a3 3 0 0 0 4.2 0L22 8"],[6,"M15 15 3.3 3.3a4.2 4.2 0 0 0 0 6l7.3 7.3c.7.7 2 .7 2.8 0L15 15Zm0 0 7 7"],[6,"m2.1 21.8 6.4-6.3"],[6,"m19 5-7 7"]],utensils:[[6,"M3 2v7c0 1.1.9 2 2 2h4a2 2 0 0 0 2-2V2"],[6,"M7 2v20"],[6,"M21 15V2v0a5 5 0 0 0-5 5v6c0 1.1.9 2 2 2h3Zm0 0v7"]],vegan:[[6,"M2 2c4.056 3.007 9.232 9.337 10 20 .897-6.818 1.5-9.5 4-14"],[6,"M20.375 6.533A9.953 9.953 0 0 1 22 12c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2c2.003 0 3.869.589 5.433 1.603"],[6,"M17.104 4c-1.002 1.274-1.146 2.586-1.1 4 1.9-.1 3.003-.201 4.3-1.4 1.406-1.3 1.6-2.3 1.7-4.6-2.7.1-3.623.375-4.9 2Z"]],"venetian-mask":[[6,"M2 12a5 5 0 0 0 5 5 8 8 0 0 1 5 2 8 8 0 0 1 5-2 5 5 0 0 0 5-5V7h-5a8 8 0 0 0-5 2 8 8 0 0 0-5-2H2Z"],[6,"M6 11c1.5 0 3 .5 3 2-2 0-3 0-3-2Z"],[6,"M18 11c-1.5 0-3 .5-3 2 2 0 3 0 3-2Z"]],verified:[[6,"M12 3c-1.2 0-2.4.6-3 1.7A3.6 3.6 0 0 0 4.6 9c-1 .6-1.7 1.8-1.7 3s.7 2.4 1.7 3c-.3 1.2 0 2.5 1 3.4.8.8 2.1 1.2 3.3 1 .6 1 1.8 1.6 3 1.6s2.4-.6 3-1.7c1.2.3 2.5 0 3.4-1 .8-.8 1.2-2 1-3.3 1-.6 1.6-1.8 1.6-3s-.6-2.4-1.7-3c.3-1.2 0-2.5-1-3.4a3.7 3.7 0 0 0-3.3-1c-.6-1-1.8-1.6-3-1.6Z"],[6,"m9 12 2 2 4-4"]],"vibrate-off":[[6,"m2 8 2 2-2 2 2 2-2 2"],[6,"m22 8-2 2 2 2-2 2 2 2"],[6,"M8 8v10c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-2"],[6,"M16 10.34V6c0-.55-.45-1-1-1h-4.34"],[0,2,2,22,22]],vibrate:[[6,"m2 8 2 2-2 2 2 2-2 2"],[6,"m22 8-2 2 2 2-2 2 2 2"],[5,8,5,8,14,1]],"video-off":[[6,"M10.66 6H14a2 2 0 0 1 2 2v2.34l1 1L22 8v8"],[6,"M16 16a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h2l10 10Z"],[0,2,2,22,22]],video:[[6,"m22 8-6 4 6 4V8Z"],[5,2,6,14,12,2,2]],view:[[6,"M5 12s2.545-5 7-5c4.454 0 7 5 7 5s-2.546 5-7 5c-4.455 0-7-5-7-5z"],[6,"M12 13a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"],[6,"M21 17v2a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-2"],[6,"M21 7V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2"]],voicemail:[[1,6,12,4],[1,18,12,4],[0,6,16,18,16]],"volume-1":[[3,"11 5 6 9 2 9 2 15 6 15 11 19 11 5"],[6,"M15.54 8.46a5 5 0 0 1 0 7.07"]],"volume-2":[[3,"11 5 6 9 2 9 2 15 6 15 11 19 11 5"],[6,"M15.54 8.46a5 5 0 0 1 0 7.07"],[6,"M19.07 4.93a10 10 0 0 1 0 14.14"]],"volume-x":[[3,"11 5 6 9 2 9 2 15 6 15 11 19 11 5"],[0,22,9,16,15],[0,16,9,22,15]],volume:[[3,"11 5 6 9 2 9 2 15 6 15 11 19 11 5"]],vote:[[6,"m9 12 2 2 4-4"],[6,"M5 7c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v12H5V7Z"],[6,"M22 19H2"]],wallet:[[6,"M20 12V8H6a2 2 0 0 1-2-2c0-1.1.9-2 2-2h12v4"],[6,"M4 6v12c0 1.1.9 2 2 2h14v-4"],[6,"M18 12a2 2 0 0 0-2 2c0 1.1.9 2 2 2h4v-4h-4z"]],"wand-2":[[6,"m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72Z"],[6,"m14 7 3 3"],[6,"M5 6v4"],[6,"M19 14v4"],[6,"M10 2v2"],[6,"M7 8H3"],[6,"M21 16h-4"],[6,"M11 3H9"]],wand:[[6,"M15 4V2"],[6,"M15 16v-2"],[6,"M8 9h2"],[6,"M20 9h2"],[6,"M17.8 11.8 19 13"],[6,"M15 9h0"],[6,"M17.8 6.2 19 5"],[6,"m3 21 9-9"],[6,"M12.2 6.2 11 5"]],watch:[[1,12,12,6],[2,"12 10 12 12 13 13"],[6,"m16.13 7.66-.81-4.05a2 2 0 0 0-2-1.61h-2.68a2 2 0 0 0-2 1.61l-.78 4.05"],[6,"m7.88 16.36.8 4a2 2 0 0 0 2 1.61h2.72a2 2 0 0 0 2-1.61l.81-4.05"]],waves:[[6,"M2 6c.6.5 1.2 1 2.5 1C7 7 7 5 9.5 5c2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1"],[6,"M2 12c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1"],[6,"M2 18c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1"]],webcam:[[1,12,10,8],[1,12,10,3],[6,"M7 22h10"],[6,"M12 22v-4"]],webhook:[[6,"M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2"],[6,"m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06"],[6,"m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8"]],"wheat-off":[[6,"m2 22 10-10"],[6,"m16 8-1.17 1.17"],[6,"M3.47 12.53 5 11l1.53 1.53a3.5 3.5 0 0 1 0 4.94L5 19l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z"],[6,"m8 8-.53.53a3.5 3.5 0 0 0 0 4.94L9 15l1.53-1.53c.55-.55.88-1.25.98-1.97"],[6,"M10.91 5.26c.15-.26.34-.51.56-.73L13 3l1.53 1.53a3.5 3.5 0 0 1 .28 4.62"],[6,"M20 2h2v2a4 4 0 0 1-4 4h-2V6a4 4 0 0 1 4-4Z"],[6,"M11.47 17.47 13 19l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L5 19l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z"],[6,"m16 16-.53.53a3.5 3.5 0 0 1-4.94 0L9 15l1.53-1.53a3.49 3.49 0 0 1 1.97-.98"],[6,"M18.74 13.09c.26-.15.51-.34.73-.56L21 11l-1.53-1.53a3.5 3.5 0 0 0-4.62-.28"],[0,2,2,22,22]],wheat:[[6,"M2 22 16 8"],[6,"M3.47 12.53 5 11l1.53 1.53a3.5 3.5 0 0 1 0 4.94L5 19l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z"],[6,"M7.47 8.53 9 7l1.53 1.53a3.5 3.5 0 0 1 0 4.94L9 15l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z"],[6,"M11.47 4.53 13 3l1.53 1.53a3.5 3.5 0 0 1 0 4.94L13 11l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z"],[6,"M20 2h2v2a4 4 0 0 1-4 4h-2V6a4 4 0 0 1 4-4Z"],[6,"M11.47 17.47 13 19l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L5 19l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z"],[6,"M15.47 13.47 17 15l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L9 15l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z"],[6,"M19.47 9.47 21 11l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L13 11l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z"]],"wifi-off":[[0,2,2,22,22],[6,"M8.5 16.5a5 5 0 0 1 7 0"],[6,"M2 8.82a15 15 0 0 1 4.17-2.65"],[6,"M10.66 5c4.01-.36 8.14.9 11.34 3.76"],[6,"M16.85 11.25a10 10 0 0 1 2.22 1.68"],[6,"M5 13a10 10 0 0 1 5.24-2.76"],[0,12,20,12.01,20]],wifi:[[6,"M5 13a10 10 0 0 1 14 0"],[6,"M8.5 16.5a5 5 0 0 1 7 0"],[6,"M2 8.82a15 15 0 0 1 20 0"],[0,12,20,12.01,20]],wind:[[6,"M17.7 7.7a2.5 2.5 0 1 1 1.8 4.3H2"],[6,"M9.6 4.6A2 2 0 1 1 11 8H2"],[6,"M12.6 19.4A2 2 0 1 0 14 16H2"]],"wine-off":[[6,"M8 22h8"],[6,"M7 10h3m7 0h-1.343"],[6,"M12 15v7"],[6,"M7.307 7.307A12.33 12.33 0 0 0 7 10a5 5 0 0 0 7.391 4.391M8.638 2.981C8.75 2.668 8.872 2.34 9 2h6c1.5 4 2 6 2 8 0 .407-.05.809-.145 1.198"],[0,2,2,22,22]],wine:[[6,"M8 22h8"],[6,"M7 10h10"],[6,"M12 15v7"],[6,"M12 15a5 5 0 0 0 5-5c0-2-.5-4-2-8H9c-1.5 4-2 6-2 8a5 5 0 0 0 5 5Z"]],"wrap-text":[[0,3,6,21,6],[6,"M3 12h15a3 3 0 1 1 0 6h-4"],[2,"16 16 14 18 16 20"],[0,3,18,10,18]],wrench:[[6,"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"]],"x-circle":[[1,12,12,10],[0,15,9,9,15],[0,9,9,15,15]],"x-octagon":[[3,"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2"],[0,15,9,9,15],[0,9,9,15,15]],"x-square":[[5,3,3,18,18,2,2],[0,9,9,15,15],[0,15,9,9,15]],x:[[0,18,6,6,18],[0,6,6,18,18]],youtube:[[6,"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"],[3,"10 15 15 12 10 9"]],"zap-off":[[2,"12.41 6.75 13 2 10.57 4.92"],[2,"18.57 12.91 21 10 15.66 10"],[2,"8 8 3 14 12 14 11 22 16 16"],[0,2,2,22,22]],zap:[[3,"13 2 3 14 12 14 11 22 21 10 12 10 13 2"]],"zoom-in":[[1,11,11,8],[0,21,21,16.65,16.65],[0,11,8,11,14],[0,8,11,14,11]],"zoom-out":[[1,11,11,8],[0,21,21,16.65,16.65],[0,8,11,14,11]]};var YM={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};function XM(e,t){var n=document.createElementNS("http://www.w3.org/2000/svg",e);return Object.keys(t).forEach((function(e){n.setAttribute(e,t[e])})),n}function $M(e){var t=e[0];if(0===t)return XM("line",{x1:e[1],y1:e[2],x2:e[3],y2:e[4]});if(1===t)return XM("circle",{cx:e[1],cy:e[2],r:e[3]});if(2===t)return XM("polyline",{points:e[1]});if(3===t)return XM("polygon",{points:e[1]});if(4===t)return XM("ellipse",{cx:e[1],cy:e[2],rx:e[3],ry:e[4]});if(5===t){var n={x:e[1],y:e[2],width:e[3],height:e[4]};return e[5]&&(n.rx=e[5]),e[6]&&(n.ry=e[6]),e[7]&&(n.transform=e[7]),XM("rect",n)}return 6===t?XM("path",{d:e[1]}):void 0}function ZM(e){for(var t=XM("svg",YM),n=0,i=e;n',"box-glyph":'',"check-small":'',"dice-glyph":'',dice:'',discord:'',"right-triangle":'',"heading-glyph":'',help:'',"keyboard-toggle":'',"broken-link":'',experiment:'',"left-arrow":'',link:'',"link-glyph":'',"links-coming-in":'',"links-going-out":'',"open-vault":'',paused:'',"question-mark-glyph":'',"right-arrow":'',"sidebar-left":'',"sidebar-right":'',"sheets-in-box":'',"star-list":'',"sync-small":'',tabs:'',"uppercase-lowercase-a":'',vault:'',"stack-horizontal":'',"stack-vertical":'',"stretch-horizontal":'',"stretch-vertical":'',"distribute-space-horizontal":'',"distribute-space-vertical":'',"zoom-to-selection":'',"create-group":'',"snap-to-object":'',"line-horizontal":'',"aspect-ratio":''},eT={},tT={viewBox:"0 0 100 100"},nT={};function iT(e,t){if(!nT.hasOwnProperty(e)){var n=t();if(!n)return null;n.classList.add("svg-icon",e),nT[e]=n}return nT[e].cloneNode(!0)}function rT(e){return e.startsWith("lucide-")?iT(e,(function(){var t=e.substring("lucide-".length);return KM.hasOwnProperty(t)?ZM(KM[t]):null})):eT.hasOwnProperty(e)?iT(e,(function(){var t=XM("svg",tT);return t.innerHTML=eT[e],t})):JM.hasOwnProperty(e)?iT(e,(function(){var t=XM("svg",YM);return t.innerHTML=JM[e],t})):(QM.hasOwnProperty(e)&&(e=QM[e]),KM.hasOwnProperty(e)?iT("lucide-"+e,(function(){return ZM(KM[e])})):null)}function oT(e,t){var n=e.firstChild;if(!(n&&n.instanceOf(SVGSVGElement)&&n.classList.contains(t))){n&&e.removeChild(n);var i=rT(t);i&&e.appendChild(i)}}function aT(e,t){delete nT[e],eT[e]=t}function sT(e){delete nT[e],delete eT[e]}function lT(){return[].concat(Object.keys(KM).map((function(e){return"lucide-"+e}))).concat(Object.keys(eT)).concat(Object.keys(JM))}function cT(e){var t=createDiv("frontmatter-container"),n=t.createDiv({cls:"frontmatter-container-header",text:"Metadata"});if(null===e)return n.appendText(" (Invalid YAML)"),t;if(!e||"object"!=typeof e)return t;oT(n.createDiv({cls:"frontmatter-collapse-indicator collapse-indicator collapse-icon",prepend:!0}),"right-triangle"),n.addEventListener("click",(function(){t.toggleClass("is-collapsed",!t.hasClass("is-collapsed"))}));var i=HM(e);if(i&&i.length>0){var r=t.createDiv({cls:"frontmatter-section mod-aliases"});r.createSpan({cls:"frontmatter-section-label",text:"Aliases"});for(var o=r.createDiv("frontmatter-section-data frontmatter-section-aliases"),a=0,s=i;a0){var u=t.createDiv("frontmatter-section mod-tags");u.createSpan({cls:"frontmatter-section-label",text:"Tags"});for(var h=u.createDiv("frontmatter-section-data frontmatter-section-tags"),p=0,d=c;p0&&t(r)}}var kT=null,CT=function(){function e(t,n,i,r,o){void 0===o&&(o=!0);var a=this;this.previewEl=null,this.sizerEl=null,this.pusherEl=null,this.header=null,this.footer=null,this.cssClasses=null,this.sections=[],this.asyncSections=[],this.recycledSections=[],this.lastText=null,this.text="",this.frontmatter=null,this.queued=null,this.rendered=null,this.lastRender=0,this.lastScroll=0,this.viewportHeight=0,this.renderedWidth=0,this.showAll=!1,this.renderExtra=1,this.renderExtraMinPx=500,this.addBottomPadding=!1,this.topSpace=0,this.parsing=!1,this.scrolling=!1,this.owner=t,this.workerPath=r;var s=this.previewEl=i.createDiv("markdown-preview-view markdown-rendered"),l=this.sizerEl=s.createDiv("markdown-preview-sizer markdown-preview-section"),c=this.pusherEl=createDiv("markdown-preview-pusher");c.style.width="1px",c.style.height="0.1px",e.registerDomEvents(l,n,this.handleDetached.bind(this)),l.on("click","a.footnote-link",this.onFootnoteLinkClick.bind(this)),l.on("click",".task-list-item-checkbox",this.onCheckboxClick.bind(this)),l.on("click",".heading-collapse-indicator",this.onHeadingCollapseClick.bind(this)),l.on("click","li > .list-collapse-indicator",this.onListCollapseClick.bind(this)),s.addEventListener("scroll",this.onScroll.bind(this),Zk),o&&s.onNodeInserted((function(){return a.queueRender()})),this.onResize()}return e.prototype.set=function(e){this.text=e,this.queueRender()},e.prototype.rerender=function(e){if(this.lastText=null,e)for(var t=0,n=this.sections;t0)for(var w=0,k=b;w0&&(this.cssClasses=F,I.addClasses(F)),l&&m.unshift(l),c&&m.push(c),this.sections=m;var O=this.asyncSections;this.asyncSections=[];for(var B=0,N=O;B li");a0&&(p.asyncSections.push(n),Promise.all(d).then((function(){t.asyncSections.remove(n),n.resetCompute(),t.queueRender()}))),l%10==0)&&performance.now()-c>5)return u=!0,"break"},p=this,d=0,f=o;d100){u=!0;break}}a.setChildrenInPlace(v);for(var x=0,E=m;x0)return;if(this.rendered)for(var M=0,T=this.rendered;Me?i.shown=!1:(i.shown=!0,e=7,i.headingCollapsed&&(e=i.level))}},e.prototype.updateVirtualDisplay=function(e){var t=this,n=t.showAll,i=t.previewEl,r=t.sizerEl,o=t.pusherEl,a=t.sections,s=i.scrollTop;if("number"==typeof e&&(s=e),n){var l=[];l.push(o);for(var c=0,u=a;c0&&(y+=O,b++)}var k=0;b>0&&(k=y/b);var C=0,x=this.topSpace,E=[];E.push(o);var S=-1,M=-1,T=-1,D=-1,A=null,L=null,P=window.getSelection();if(P.rangeCount>0){var I=P.getRangeAt(0);!I.collapsed&&i.contains(I.startContainer)&&i.contains(I.endContainer)&&(A=I.startContainer,L=I.endContainer,(A===o||A===r&&I.startOffset<=1)&&(T=0),L===r&&I.endOffset>1&&(D=a.length-1))}for(w=0;w=g&&x<=v&&(-1===S&&(S=w),M=w),x=R;else x+=O,0===O&&(x+=k)}}var B=S,N=M;-1!==T&&-1!==D&&(B=Math.min(B,T),N=Math.max(N,D)),B<0&&(B=0),++N>a.length-1&&(N=a.length-1),x=this.topSpace;for(w=0;w0&&(C-=this.topSpace)<0&&(C=0),x-=this.topSpace,x=Math.max(0,x),o.style.marginBottom=C+"px",r.style.minHeight=x-1+"px",r.setChildrenInPlace(E),N!==a.length-1&&N--;for(w=B;w<=N;w++){(h=a[w]).shown&&this.measureSection(h)}i.scrollTop!==s&&(i.scrollTop=s),this.renderHighlights(S,M)},e.prototype.renderHighlights=function(e,t){var n=this.sections,i=this.sizerEl,r=i.offsetParent;if(r){var o=r.getBoundingClientRect(),a=1;r instanceof HTMLElement&&(a=r.offsetWidth/Math.round(o.width));for(var s=[],l=e;l<=t;l++)if(!(l<0||l>=n.length)){var c=n[l];if(c.shown){var u=c.highlightRanges;if(u&&0!==u.length){var h=[];iC(c.el,h);for(var p=h.map((function(e){return e.textContent})),d=0,f=u;d0){var S=createDiv("search-highlight");S.setChildrenInPlace(s),i.appendChild(S)}}},e.prototype.measureSection=function(e){if(e.rendered){var t=e.el,n=t.nextSibling,i=t.offsetTop,r=n?n.offsetTop:t.offsetTop+t.offsetHeight;e.height=r-i,e.computed=!0}},e.prototype.onRendered=function(e){this.rendered?this.rendered.push(e):e()},e.prototype.onResize=function(){this.updateEndPadding();var e=this.sections,t=this.previewEl;this.viewportHeight=t.clientHeight;var n=t.offsetWidth;if(n!==this.renderedWidth){this.renderedWidth=n;for(var i=0,r=e;i0?{folds:e,lines:this.text.match(/^/gm).length}:null},e.prototype.applyFoldInfo=function(e){var t=this;e&&e.lines!==this.text.match(/^/gm).length||this.onRendered((function(){var n=new Set;if(e)for(var i=0,r=e.folds;iMath.max(i*this.renderExtra,this.renderExtraMinPx)/2&&this.updateVirtualDisplay(r),this.scrolling?this.scrolling=!1:this.owner.onScroll()},e.prototype.getScroll=function(){var e=this.previewEl,t=this.sections;if(0===t.length)return null;for(var n=e.scrollTop,i=0,r=this.topSpace,o=0;or+a.height||0===i&&0===a.lines)){var s=a.height;0===i&&(s+=r,r=0);var l=0;if(a.lines>0){var c=s/a.lines,u=n-r,h=Math.floor(u/c);i+=h,l=u/c-h}return i+l}i+=a.lines,a.shown&&(r+=a.height)}return i},e.prototype.applyScroll=function(e,t){var n=this;if(!Number.isNumber(e)||isNaN(e))return!1;if(this.text!==this.lastText)return!1;var i=Math.floor(e),r=e-i;this.scrolling=!0;for(var o=this.sections,a=t||{},s=a.highlight,l=a.center,c=0,u=this.topSpace,h=0;h0){var M=y?b(y):p.el.offsetTop;f=(b(x)-M)/S}break}w=E,y=x,f=0}}}if(y){0===f&&(f=(p.el.offsetTop+p.height-b(y))/(p.lines-w));var T=b(y)-p.el.offsetTop;v=Math.max(0,u+T+f*(m-w+r)+g),this.previewEl.scrollTop=v}return s&&this.highlightEl(y||p.el),!0}c+=p.lines,p.shown&&(u+=p.height)}return!0},e.prototype.getSectionTop=function(e){for(var t=this.sections,n=0,i=0;i0&&(o=n/i),r.shown||(o=0),n+=o}return-1},e.prototype.showSection=function(e){if(!e.shown){var t=this.sections,n=t.indexOf(e);if(-1!==n){for(var i=e.level;n>=0;){var r=t[n];r.headingCollapsed&&r.levelu)&&l.scrollIntoView({behavior:"auto",block:"center",inline:"nearest"})}this.updateVirtualDisplay()}},e.prototype.addHeader=function(){this.header||(this.header=new yT(null),this.header.el.addClass("mod-header"),this.sections.unshift(this.header),this.queueRender())},e.prototype.removeHeader=function(){this.header&&(this.sections.remove(this.header),this.header=null,this.queueRender())},e.prototype.addFooter=function(){this.footer||(this.footer=new yT(null),this.footer.el.addClass("mod-footer"),this.sections.push(this.footer),this.queueRender())},e.prototype.removeFooter=function(){this.footer&&(this.sections.remove(this.footer),this.footer=null,this.queueRender())},e.prototype.updateHeader=function(){var e=this.header;e&&(e.resetCompute(),this.queueRender())},e.prototype.updateFooter=function(){var e=this.footer;e&&(e.resetCompute(),this.queueRender())},e.prototype.cleanupParentComponents=function(){for(var e=[],t=0,n=this.owner._children;t.01&&(f=e,m=requestAnimationFrame(g))};t.addEventListener("load",(function(){i=t.width,r=t.height,o=t.naturalWidth,a=t.naturalHeight,(s=2*Math.max(o/i,a/r))<1&&(s=1),h()}));var v=null,y=null,b=function(e){cancelAnimationFrame(m);for(var t=Date.now(),n=t-f,i=Array.prototype.slice.call(e.touches),r=null,o=null,a=0,s=i;a0&&(r=i.first(),i.splice(0,1)),o?i.remove(o):i.length>0&&(o=i.first(),i.splice(0,1)),v&&r&&v.identifier===r.identifier){var w=window.innerWidth/2,k=window.innerHeight/2;if(y&&o&&y.identifier===o.identifier){var C=-l+((v.clientX+y.clientX)/2-w)/u,x=-c+((v.clientY+y.clientY)/2-k)/u,E=(r.clientX+o.clientX)/2,S=(r.clientY+o.clientY)/2,M=v.clientX-y.clientX,T=v.clientY-y.clientY,D=r.clientX-o.clientX,A=r.clientY-o.clientY,L=M*M+T*T,P=D*D+A*A;if(0!==L&&0!==P){var I=Math.sqrt(P/L),F=u*I;l=(E-w)/F-C,c=(S-k)/F-x,u=F,h()}}else{var O=(r.clientX-v.clientX)/u,B=(r.clientY-v.clientY)/u;l+=O,c+=B,p=Math.sqrt(O*O+B*B)/n,d=Math.atan2(B,O),h()}}y=o,(v=r)||y||(m=requestAnimationFrame(g)),f=t};n.addEventListener("touchstart",b),n.addEventListener("touchend",b),n.addEventListener("touchmove",b),n.addEventListener("touchcancel",b),n.addEventListener("click",(function(e){n.remove(),e.preventDefault(),cancelAnimationFrame(m)}))}(t)}t.on("click","a.internal-link",o),t.on("auxclick","a.internal-link",o),t.on("dragstart","a.internal-link",(function(e,t){var i=r(t);i&&n.onInternalLinkDrag(e,t,i)})),t.on("contextmenu","a.internal-link",(function(e,t){var i=r(t);i&&n.onInternalLinkRightClick(e,t,i)})),t.on("mouseover","a.internal-link",(function(e,t){var i=r(t);i&&n.onInternalLinkMouseover(e,t,i)})),t.on("click","a.external-link",(function(r,o){if(0===r.button||1===r.button){var a=o.getAttr("href");a&&e.belongsToMe(o,t,i)&&n.onExternalLinkClick(r,o,a)}})),t.on("click","a.tag",(function(r,o){if(0===r.button&&e.belongsToMe(o,t,i)){r.preventDefault();var a=o.getText();n.onTagClick(r,o,a)}})),t.on("click","img",a),t.on("contextmenu","img",a)},e.belongsToMe=function(e,t,n){for(;e;){if(e===t)return!0;if(e.classList.contains("markdown-preview-view"))return!1;var i=e.parentElement;if(!i)return!!n&&n(e);e=i}return!1},e.postProcessors=[],e.codeBlockPostProcessors={},e.recyclers=[],e}();CT.registerPostProcessor((function(e,t){var n=e.find(".frontmatter");if(n){var i=t.frontmatter;null===i?(n.addClass("mod-failed"),n.createDiv({cls:"mod-error",prepend:!0,text:"Invalid YAML"})):n.hide();var r=cT(i);n.parentNode.insertBefore(r,n.nextSibling)}})),CT.registerPostProcessor((function(e,t){for(var n=0,i=e.findAll("[data-footnote-id]");nforeignObject{transform:scale(".concat(o,");}"),t(),a.detach()}};function ET(e,t){return qC.then((function(){return xT(e,(function(){for(var n=function(t){var n=TT(t),i=function(){var i=t.parentElement,r=i.clientWidth;0===r&&(r=e.clientWidth),0===r&&(r=e.win.innerWidth);var o=document.body.createDiv("mermaid"),a="m"+Ce(16);try{o.style.width=r+"px";var s=null;if(mermaid.render(a,n,(function(e,t){s=o.firstChild.firstChild,t&&t(o)}),o),o.appendChild(s),o.style.width="",i.replaceWith(o),MT.set(o,n),s.instanceOf(Element)){for(var l=s.findAll('[*|class*="internal-link"] > g.label foreignObject > div').slice(),c=0,u=l;c0;){var f=d.pop();d.push.apply(d,Array.from(f.childNodes)),f.instanceOf(SVGAElement)&&f.href&&!f.href.baseVal&&(f.href.baseVal=f.getAttr("href"))}}}catch(e){var m=document.getElementById("d"+a);m&&m.detach(),o.detach(),console.error(e),t.empty(),t.appendText("Error parsing Mermaid diagram!\n\n".concat(e.str||e.message))}};t.isShown()||e.isShown()?i():t.onNodeInserted((function(){return xT(e,i)}),!0)},i=0,r=t;i1)){var r=i.touches[0];if("stylus"!==r.touchType){var o=r.clientX,a=r.clientY,s=document.elementFromPoint(o,a);if(!(s instanceof HTMLCanvasElement)&&e.contains(s)){var l=r.identifier,c=Date.now(),u=!1,h="x",p=r.clientX,d=r.clientY,f=c,m=0,g=0;if(n.length>0)for(var v=0,y=n;v200)return void x();var v=Math.abs(r-o),y=Math.abs(l-a),w=Math.max(v,y);if(w<10)return;u=!0;for(var k=s,C="x"===(h=v===w?"x":"y")?r-o:l-a;k;){var E="x"===h?k.scrollWidth-k.clientWidth:k.scrollHeight-k.clientHeight;if(E>0){var S=getComputedStyle(k),M="x"===h?S.overflowX:S.overflowY;if("auto"===M||"scroll"===M){var T="x"===h?k.scrollLeft:k.scrollTop;if(C>0&&T>0||C<0&&T0&&(qT||i>ZT+100))return WT(),n.delay=0,void(jT=window.setTimeout((function(){return QT(e,t,n)}),p));if(t){var d=e.doc,f=e.getBoundingClientRect(),m=f.top,g=f.left,v=f.width,y=f.height;if(u){var b=u.getBoundingClientRect();g=b.left,v=b.width}qT&&UT===e?qT.setText(t):(JT(),qT=createDiv({cls:"tooltip",text:t}));var w=qT.createDiv("tooltip-arrow"),k=0,C=0;"bottom"===o?(k=m+y+c,C=g+v/2):"right"===o?(k=m+y/2,C=g+v+c,s.push("mod-right")):"left"===o?(k=m+y/2,C=g-c,s.push("mod-left")):"top"===o&&(k=m-c-5,C=g+v/2,s.push("mod-top")),qT.addClasses(s),qT.style.top="0px",qT.style.left="0px",qT.style.width="",qT.style.height="",qT.parentNode||d.body.appendChild(qT);var x=qT.getBoundingClientRect(),E=["bottom","top"].contains(o)?x.width/2:x.width,S="right"===o||"left"===o?x.height/2:x.height;"left"===o?C-=E:"top"===o&&(k-=S);var M=d.body.clientHeight,T=d.body.clientWidth;if(k+S>M&&(k=M-S-c),k=Math.max(k,c),"top"===o||"bottom"===o){if(C+E>T)C-=D=C+E+c-T,w.style.left="initial",w.style.right=E-D-c/2+"px";else if(C-c-E<0){var D;C+=D=-(C-c-E),w.style.right="initial",w.style.left=E-D-c/2+"px"}C=Math.max(C,c)}qT.style.top=k+"px",qT.style.left=C+"px",qT.style.width=x.width+"px",qT.style.height=x.height+"px",UT=e}}function JT(){WT(),qT&&(ZT=Date.now(),qT.detach(),qT=null,UT=null)}function eD(e,t){var n=t||{},i=n.placement,r=n.classes,o=n.delay;i&&"bottom"!==i&&e.setAttribute("aria-label-position",i),r&&e.setAttribute("aria-label-classes",r.join(" ")),o&&e.setAttribute("aria-label-delay",String(o))}function tD(e,t,n){e.setAttribute("aria-label",t),eD(e,n),UT===e&&QT(e,t,n)}function nD(e,t,n){e.setAttribute("aria-label",""),XT.set(e,t),eD(e,n),UT===e&&QT(e,t(e),n)}for(var iD={3:"Cancel",6:"Help",8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",28:"Convert",29:"NonConvert",30:"Accept",31:"ModeChange",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",41:"Select",42:"Print",43:"Execute",44:"PrintScreen",45:"Insert",46:"Delete",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",91:"OS",93:"ContextMenu",95:"Sleep",106:"*",107:"+",109:"-",110:".",111:"/",144:"NumLock",145:"ScrollLock",181:"VolumeMute",182:"VolumeDown",183:"VolumeUp",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",224:"Meta",225:"AltGraph",246:"Attn",247:"CrSel",248:"ExSel",249:"EraseEof",250:"Play",251:"ZoomOut"},rD=1;rD<25;rD++)iD[111+rD]="F"+rD;for(rD=65;rD<91;rD++){var oD=String.fromCharCode(rD);iD[rD]=oD.toUpperCase()}for(rD=96;rD<106;rD++)iD[rD]="Numpad"+String.fromCharCode(rD-48);var aD={ArrowLeft:"←",ArrowRight:"→",ArrowUp:"↑",ArrowDown:"↓"};function sD(e){var t=e.key;if(!t){var n=e.which||e.keyCode;t=iD[n]}return t}var lD=oe?{Mod:"⌘",Ctrl:"⌃",Meta:"⌘",Alt:"⌥",Shift:"⇧"}:{Mod:"Ctrl",Ctrl:"Ctrl",Meta:"Win",Alt:"Alt",Shift:"Shift"},cD=["Mod","Ctrl","Meta","Alt","Shift"];var uD=function(){function e(e){this.tabFocusContainerEl=null,this.keys=[],this.parent=e}return e.prototype.registerKey=function(e,t,n){return this.register(e,t,n)},e.prototype.register=function(e,t,n){var i={scope:this,modifiers:e?pD.compileModifiers(e):null,key:t,func:n};return this.keys.push(i),i},e.prototype.unregister=function(e){this.keys.remove(e)},e.prototype.setTabFocusContainerEl=function(e){this.tabFocusContainerEl=e},e.prototype.handleKey=function(e,t){for(var n=0,i=this.keys;n0){var o=t.getRangeAt(0),a=o.commonAncestorContainer;(n===a||n.contains(a))&&(r=o)}return{win:e,range:r,focusEl:n}}(e):this.selection=null;var t=e.document.activeElement;t&&t.instanceOf(HTMLElement)&&t.blur(),e.getSelection().removeAllRanges(),this.app.keymap.pushScope(this.scope),e.document.body.appendChild(this.containerEl),this.onOpen();var n=this,i=n.modalEl,r=n.bgEl,o=n.dimBackground;this.containerEl.toggleClass("mod-dim",o),$w.isPhone?function(e,t){var n=e.offsetHeight-1,i=.3*n;ww(e,new mw({duration:i,fn:"ease-out"}).addProp("transform","translateY(".concat(n,"px)"),"")),t&&ww(t,new mw({duration:i,fn:"ease-in"}).addProp("opacity","0","0.85"))}(i,r):r.style.opacity=o?"0.85":"0",VT(this),$w.isMobile||mC(this.modalEl)},e.prototype.close=function(){var e=this;this.app.keymap.popScope(this.scope),this.onClose();var t=this.modalEl,n=this.bgEl;$w.isPhone?function(e,t){return new Promise((function(n){var i=e.offsetHeight-1,r=.3*i;ww(e,new mw({duration:r,fn:"ease-in"}).addProp("transform","","translateY(".concat(i,"px)"),""),(function(){n(null)})),ww(t,new mw({duration:r,fn:"ease-in"}).addProp("opacity",null,"0",""))}))}(t,n).then((function(){e.containerEl.detach()})):this.containerEl.detach(),zT(this),this.shouldRestoreSelection&&function(e){if(e&&(e.focusEl||e.range)){var t=e.win,n=e.focusEl,i=e.range;t.focus();var r=n&&n.instanceOf(HTMLElement)&&n.hasClass("cm-content");if(i&&!r&&$k(t,i.startContainer)&&$k(t,i.endContainer)){var o=t.getSelection();o&&(o.removeAllRanges(),o.addRange(i))}n&&(n.instanceOf(HTMLElement)||n.instanceOf(SVGElement))&&$k(t,n)&&n.focus({preventScroll:!0})}}(this.selection)},e.prototype.onOpen=function(){},e.prototype.onClose=function(){},e.prototype.onEscapeKey=function(){this.close()},e.prototype.setTitle=function(e){return this.titleEl.setText(e),this},e.prototype.setContent=function(e){return String.isString(e)?this.contentEl.setText(e):this.contentEl.appendChild(e),this},e.prototype.setDimBackground=function(e){return this.dimBackground=e,this},e}(),fD=function(e){function t(t){var n=e.call(this,t)||this;return n.buttonContainerEl=null,n.containerEl.addClass("mod-confirmation"),n.buttonContainerEl=n.modalEl.createDiv("modal-button-container"),n}return f(t,e),t.prototype.addCheckbox=function(e,t){return this.buttonContainerEl.createEl("label",{cls:"mod-checkbox"},(function(n){n.createEl("input",{attr:{tabindex:-1},type:"checkbox"}).addEventListener("click",t),n.appendText(e)})),this},t.prototype.addButton=function(e,t,n){var i=this;return this.buttonContainerEl.createEl("button",{cls:e,text:t}).addEventListener("click",(function(e){return v(i,void 0,void 0,(function(){return y(this,(function(t){switch(t.label){case 0:return[4,n(e)];case 1:return t.sent()||this.close(),[2]}}))}))})),this},t.prototype.addCancelButton=function(e){var t=this;return this.addButton("",Gk.dialogue.buttonCancel(),(function(){t.close(),e&&e()}))},t.prototype.onClose=function(){JT()},t}(dD),mD=createDiv("notice-container"),gD=function(){function e(e,t){void 0===t&&(t=4e3);var n=this;activeDocument.body.appendChild(mD);var i=this.noticeEl=mD.createDiv({cls:"notice",text:e});$w.isMobile?ww(i,(new mw).addProp("marginBottom",-i.offsetHeight+"px","0","")):ww(i,(new mw).addProp("transform","translateX(350px)","","")),t&&setTimeout((function(){return n.hide()}),t),i.addEventListener("click",(function(){return n.hide()}))}return e.prototype.setMessage=function(e){return this.noticeEl.setText(e),this},e.prototype.hide=function(){var e=this;setTimeout((function(){var t=e.noticeEl;if($w.isMobile)ww(t,(new mw).addProp("opacity",null,"0",""),(function(){t.detach(),0===mD.childElementCount&&mD.detach()}));else{var n=getComputedStyle(t),i=-(t.offsetHeight+parseInt(n.marginBottom))+"px";ww(t,(new mw).addProp("marginTop","0",i,""),(function(){t.detach(),0===mD.childElementCount&&mD.detach()}))}}))},e}();window.Notice=gD;var vD=function(){function e(){this._={}}return e.prototype.on=function(e,t,n){var i=this._,r=i[e];r||(i[e]=r=[]);var o={e:this,name:e,fn:t,ctx:n};return r.push(o),o},e.prototype.off=function(e,t){var n=this._,i=n[e],r=[];if(i&&t)for(var o=0;o0?n[e]=r:delete n[e]},e.prototype.offref=function(e){if(e){var t=e.name,n=this._,i=n[t],r=[];if(i&&e)for(var o=0;o1&&(e.enter=xD(e.enter)),e.leave&&e.leave.length>1&&(e.leave=xD(e.leave)),CD.call(this,e)};var ED={from:function(){}};t.PluginField={define:ED,decorations:ED,atomicRanges:ED,scrollMargins:ED};var SD={obsidian:p,"@codemirror/autocomplete":a,"@codemirror/collab":s,"@codemirror/commands":l,"@codemirror/language":o,"@codemirror/lint":c,"@codemirror/search":u,"@codemirror/state":e,"@codemirror/text":e,"@codemirror/view":t,"@lezer/common":i,"@lezer/lr":h,"@lezer/highlight":r},MD={"@codemirror/closebrackets":a,"@codemirror/comment":l,"@codemirror/fold":o,"@codemirror/gutter":t,"@codemirror/highlight":o,"@codemirror/history":l,"@codemirror/matchbrackets":o,"@codemirror/panel":t,"@codemirror/rangeset":e,"@codemirror/rectangular-selection":t,"@codemirror/stream-parser":o,"@codemirror/tooltip":t},TD=function(e){function t(t,n){var i=e.call(this)||this;return i.app=t,i.manifest=n,i}return f(t,e),t.prototype.addRibbonIcon=function(e,t,n){var i=this.app,r=this.manifest.id+":"+t,o=i.workspace.leftRibbon.addRibbonItemButton(r,e,t,n);return this.register((function(){i.workspace.leftRibbon.removeRibbonAction(t),o.detach()})),o},t.prototype.addStatusBarItem=function(){var e=this.app.statusBar.registerStatusBarItem();return e.addClass("plugin-"+this.manifest.id.toLowerCase().replace(/[^_a-zA-Z0-9-]/,"-")),this.register((function(){return e.detach()})),e},t.prototype.addCommand=function(e){var t=this;return e.id=this.manifest.id+":"+e.id,e.name=this.manifest.name+": "+e.name,this.app.commands.addCommand(e),this.register((function(){return t.app.commands.removeCommand(e.id)})),e},t.prototype.addSettingTab=function(e){var t=this;this.app.setting.addSettingTab(e),this.register((function(){return t.app.setting.removeSettingTab(e)}))},t.prototype.registerView=function(e,t){var n=this;this.app.viewRegistry.registerView(e,t),this.register((function(){return n.app.viewRegistry.unregisterView(e)}))},t.prototype.registerHoverLinkSource=function(e,t){var n=this;this.app.workspace.registerHoverLinkSource(e,t),this.register((function(){return n.app.workspace.unregisterHoverLinkSource(e)}))},t.prototype.registerExtensions=function(e,t){var n=this;this.app.viewRegistry.registerExtensions(e,t),this.register((function(){return n.app.viewRegistry.unregisterExtensions(e)}))},t.prototype.registerMarkdownPostProcessor=function(e,t){return CT.registerPostProcessor(e,t),this.register((function(){return CT.unregisterPostProcessor(e)})),e},t.prototype.registerMarkdownCodeBlockProcessor=function(e,t,n){var i=CT.createCodeBlockPostProcessor(e,t);return CT.registerPostProcessor(i,n),CT.registerCodeBlockPostProcessor(e,t),this.register((function(){CT.unregisterCodeBlockPostProcessor(e),CT.unregisterPostProcessor(i)})),i},t.prototype.registerCodeMirror=function(e){this.app.workspace.iterateCodeMirrors(e),this.registerEvent(this.app.workspace.on("codemirror",e))},t.prototype.registerEditorExtension=function(e){var t=this;this.app.workspace.registerEditorExtension(e),this.register((function(){return t.app.workspace.unregisterEditorExtension(e)}))},t.prototype.registerObsidianProtocolHandler=function(e,t){var n=this;this.app.workspace.registerObsidianProtocolHandler(e,t),this.register((function(){return n.app.workspace.unregisterObsidianProtocolHandler(e,t)}))},t.prototype.registerEditorSuggest=function(e){var t=this;this.app.workspace.editorSuggest.addSuggest(e),this.register((function(){return t.app.workspace.editorSuggest.removeSuggest(e)}))},t.prototype.loadData=function(){return v(this,void 0,Promise,(function(){return y(this,(function(e){switch(e.label){case 0:return[4,this.app.vault.readPluginData(this.manifest.dir)];case 1:return[2,e.sent()]}}))}))},t.prototype.saveData=function(e){return v(this,void 0,Promise,(function(){return y(this,(function(t){switch(t.label){case 0:return[4,this.app.vault.writePluginData(this.manifest.dir,e)];case 1:return[2,t.sent()]}}))}))},t.prototype.loadCSS=function(){return v(this,void 0,Promise,(function(){var e,t,n,i,r,o,a;return y(this,(function(s){switch(s.label){case 0:return t=(e=this).app,n=e.manifest,i=n.dir+"/"+wD,[4,t.vault.exists(i)];case 1:return s.sent()?[4,t.vault.readRaw(i)]:[3,3];case 2:r=s.sent(),(o=createEl("style",{type:"text/css"})).textContent=r,a=this.app.customCss.styleEl,document.head.insertBefore(o,a),this.register((function(){return o.detach()})),s.label=3;case 3:return[2]}}))}))},t}(GM),DD=function(e){function t(t,n){var i=e.call(this,t,t.setting)||this;return i.plugin=n,i.name=n.manifest.name,i.id=n.manifest.id,i}return f(t,e),t}(NT),AD=function(e){function t(t,n){var i=e.call(this,t,t.setting)||this;return i.plugin=null,i.plugin=n,i.name=n.instance.name,i.id=n.instance.id,i}return f(t,e),t}(NT),LD=/^\/\/[@#] sourceMappingURL=data:application\/json(?:;charset[:=][^;]+)?;base64,.*$/gm,PD=function(){function e(e){this.manifests={},this.plugins={},this.enabledPlugins=new Set,this.updates={},this.requestSaveConfig=Aw(this.saveConfig,1e3),this.app=e}return e.prototype.loadManifests=function(){return v(this,void 0,void 0,(function(){var e,t,n,i,r,o,a,s,l,c,u,h;return y(this,(function(p){switch(p.label){case 0:return e=this.app.vault.adapter,t=this.manifests={},n=this.getPluginFolder(),[4,e.exists(n)];case 1:return p.sent()?[4,e.list(n)]:[3,10];case 2:i=p.sent(),r=0,o=i.folders,p.label=3;case 3:if(!(r11&&(c=c.slice(0,11)).push("More in developer console"),new gD(c.join("\n"),0)}return this.requestSaveConfig(),this.checkForDeprecations(),setInterval((function(){return m.checkForDeprecations()}),432e5),[2]}}))}))},e.prototype.getPluginFolder=function(){return"".concat(this.app.vault.configDir,"/plugins")},e.prototype.enablePlugin=function(e){return v(this,void 0,Promise,(function(){var t,n;return y(this,(function(i){switch(i.label){case 0:if(!(t=this.manifests[e]))return[2,!1];if(this.isDeprecated(t))return new gD("Unable to load plugin ".concat(t.name," v").concat(t.version,". This version has been reported to cause issues. Please check for a newer version of the plugin.")),[2,!1];if("sliding-panes-obsidian"===t.id)return new gD(createFragment((function(e){e.createEl("p",{text:"As of Obsidian v1.0, Sliding Panes is a built-in feature called Stacked Tabs. We recommend uninstalling Sliding Panes plugin."}),e.createEl("p").createEl("a",{cls:"mod-cta",text:"Learn more",href:"https://help.obsidian.md/User+interface/Stacked+tabs",attr:{target:"_blank"}})})),6e3),[2,!1];if(!$w.isDesktopApp&&t.isDesktopOnly)return[2,!1];i.label=1;case 1:return i.trys.push([1,3,,4]),this.loadingPluginId=e,[4,this.loadPlugin(e)];case 2:return i.sent(),this.loadingPluginId=null,[3,4];case 3:return n=i.sent(),this.loadingPluginId=null,new gD("Failed to load plugin ".concat(e)),console.error("Plugin failure: "+e,n),[2,!1];case 4:return[2,!0]}}))}))},e.prototype.disablePlugin=function(e){return v(this,void 0,void 0,(function(){var t;return y(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,this.unloadPlugin(e)];case 1:return n.sent(),[3,3];case 2:return t=n.sent(),new gD("Failed to unload plugin ".concat(e)),console.error("Plugin failure: "+e,t),[3,3];case 3:return[2]}}))}))},e.prototype.enablePluginAndSave=function(e){return v(this,void 0,Promise,(function(){return y(this,(function(t){switch(t.label){case 0:return[4,this.enablePlugin(e)];case 1:return t.sent()?(this.enabledPlugins.add(e),this.requestSaveConfig(),[2,!0]):[2,!1]}}))}))},e.prototype.disablePluginAndSave=function(e){return v(this,void 0,Promise,(function(){return y(this,(function(t){switch(t.label){case 0:return this.enabledPlugins.delete(e),this.requestSaveConfig(),[4,this.disablePlugin(e)];case 1:return t.sent(),[2]}}))}))},e.prototype.uninstallPlugin=function(e){return v(this,void 0,void 0,(function(){var t,n;return y(this,(function(i){switch(i.label){case 0:return[4,this.disablePluginAndSave(e)];case 1:return i.sent(),(t=this.manifests[e])?(n=t.dir)?[4,this.app.vault.exists(n)]:[2]:[2];case 2:return i.sent()?[4,this.app.vault.adapter.rmdir(n,!0)]:[2];case 3:return i.sent(),delete this.manifests[e],delete this.updates[e],[2]}}))}))},e.prototype.getPlugin=function(e){return this.plugins.hasOwnProperty(e)?this.plugins[e]:null},e.prototype.saveConfig=function(){return v(this,void 0,void 0,(function(){return y(this,(function(e){switch(e.label){case 0:return[4,this.app.vault.writeConfigJson("community-plugins",Array.from(this.enabledPlugins))];case 1:return e.sent(),[2]}}))}))},e.prototype.isEnabled=function(){return"true"===localStorage.getItem("enable-plugin-"+this.app.appId)},e.prototype.setEnable=function(e){return v(this,void 0,Promise,(function(){var t,n,i,r,o,a;return y(this,(function(s){switch(s.label){case 0:if(localStorage.setItem("enable-plugin-"+this.app.appId,e?"true":"false"),e)return[3,5];t=Object.keys(this.plugins),n=0,i=t,s.label=1;case 1:return n1)for(var f=d.length-1;f>=0;f--){var m=d[f];if("list"!==m.type){p.end=jD(m.position.end);break}m.listParentPosition=i.position}var g=0;"list"===o.type&&(o.listParentPosition?g=o.listParentPosition.start.line-1:0===(g=-(o.position.start.line-1))&&(g=-1));var v={position:p,parent:g},y=i.checklist;"string"==typeof y&&(v.task=y);var b=i.id;b&&"string"==typeof b&&(v.id=b,n.blocks[b.toLowerCase()]={position:p,id:b}),n.listItems.push(v)}})),0===n.links.length&&delete n.links,0===n.embeds.length&&delete n.embeds,0===n.tags.length&&delete n.tags,0===n.headings.length&&delete n.headings,(0===n.sections.length||t)&&delete n.sections,0===n.listItems.length&&delete n.listItems,0===Object.keys(n.blocks).length&&delete n.blocks,n}function KD(e,t){if(!e)return e;if(e.links)for(var n=0,i=e.links;ne.position.end.offset?-1:0}),n)}function ZD(e){return(e=bM(e).normalize("NFC")).split("#")[0]}function QD(e){var t=(e=bM(e).normalize("NFC")).split("#")[0];return{path:t,subpath:e.substr(t.length)}}function JD(e,t){return!!e&&(!0===eA(e.links,t)||!0===eA(e.embeds,t))}function eA(e,t){if(!e)return!1;for(var n=0,i=e;n?@^`{|}~\/\[\]\\\r\n]/g,iA=/([#|^\\\r\n]|%%|\[\[|]])/g;function rA(e){return e.replace(nA," ").replace(/\s+/g," ").trim()}function oA(e){return e.replace(iA," ").replace(/\s+/g," ").trim()}function aA(e,t){if(!e||!t)return null;var n=t.split("#").filter((function(e){return!!e}));if(!n||0===n.length)return null;if(1===n.length){var i=n[0];if(i.startsWith("^")){var r=i.substr(1).toLowerCase(),o=e.blocks;if(o&&o.hasOwnProperty(r))for(var a in o)if(a.toLowerCase()===r&&o.hasOwnProperty(a)){var s=o[a],l=null;if(e.listItems)for(var c=0,u=e.listItems;cf&&rA(b.heading).toLowerCase()===rA(n[d]).toLowerCase()&&(d++,f=b.level,d===n.length&&(m=b))}return m?{type:"heading",current:m,next:g,start:m.position.start,end:g?g.position.start:null}:null}function sA(e,t,n,i){void 0===i&&(i=!1);var r="",o="",a="",s="";if("block"===n.type&&n.list){var l=function(e,t){var n=e.listItems;if(!n)return t;var i=n.indexOf(t);if(-1===i)return t;var r=new Set;r.add(t.position.start.line);for(var o=t,a=i+1;a0)for(var r=0;re&&bA.delete(this)},t}(yA),kA=function(e){function t(t,n){var i=e.call(this,t,n)||this;return i.children=[],i}return f(t,e),t.prototype.isRoot=function(){return"/"===this.path},t.prototype.getParentPrefix=function(){return this.isRoot()?"":this.path+"/"},t.prototype.getFileCount=function(){for(var e=0,n=0,i=this.children;nthis.configTs&&(n=!0),[3,4];case 3:return c.sent(),n=!0,[3,4];case 4:return c.trys.push([4,6,,7]),[4,this.adapter.stat(t)];case 5:return c.sent().mtime>this.configTs&&(n=!0),[3,7];case 6:return c.sent(),n=!0,[3,7];case 7:return n?(this.configTs=Date.now(),[4,this.readConfigJson("app")]):[2];case 8:return i=c.sent(),[4,this.readConfigJson("appearance")];case 9:for(l in r=c.sent(),o=Object.assign({},r,i),a=this.config,s=!1,o)o.hasOwnProperty(l)&&(a.hasOwnProperty(l)&&JSON.stringify(a[l])===JSON.stringify(o[l])||(a[l]=o[l],s=!0));for(l in a)a.hasOwnProperty(l)&&!o.hasOwnProperty(l)&&(delete a[l],s=!0);return s&&this.trigger("config-changed"),[2]}}))}))}),500,!0),n.adapter=t,n.root=new kA(n,""),n.onChange("folder-created","/"),n.root=n.fileMap["/"],n}return f(t,e),t.prototype.getName=function(){return this.adapter.getName()},t.prototype.setFileCacheLimit=function(e){this.cacheLimit=e;var t=this.fileMap;for(var n in t)if(t.hasOwnProperty(n)){var i=t[n];i instanceof wA&&i.updateCacheLimit()}},t.validateConfigDir=function(e){return"."!==e&&e.startsWith(".")&&!Ie.test(e)},t.prototype.setConfigDir=function(e){t.validateConfigDir(e)||(e=vA),this.configDir=e},t.prototype.setupConfig=function(){return v(this,void 0,void 0,(function(){var e,t,n,i,r,o,a,s,l,c,u;return y(this,(function(h){switch(h.label){case 0:return t=(e=this).adapter,n=e.configDir,[4,t.exists(n)];case 1:return h.sent()?[3,3]:[4,t.mkdir(n)];case 2:h.sent(),h.label=3;case 3:return this.configTs=Date.now(),i=null,[4,this.readConfigJson("app")];case 4:return r=h.sent(),[4,this.readConfigJson("appearance")];case 5:return o=h.sent(),r?[3,7]:[4,this.readJson(n+"/config")];case 6:i=h.sent(),h.label=7;case 7:for(l in a=this.config=Object.assign({},i,o,r),s={editorFontFamily:"textFontFamily"})s.hasOwnProperty(l)&&a.hasOwnProperty(l)&&(c=s[l],u=a[l],delete a[l],!a.hasOwnProperty(c)&&u&&(a[c]=u));return i?[4,this.saveConfig()]:[3,12];case 8:h.sent(),h.label=9;case 9:return h.trys.push([9,11,,12]),[4,this.adapter.remove(n+"/config")];case 10:return h.sent(),[3,12];case 11:return h.sent(),[3,12];case 12:return this.requestSaveConfig(),[2]}}))}))},t.prototype.saveConfig=function(){return v(this,void 0,void 0,(function(){var e,t,n,i,r,o,a,s;return y(this,(function(l){switch(l.label){case 0:return t=(e=this).adapter,n=e.configDir,[4,t.exists(n)];case 1:return l.sent()?[3,3]:[4,t.mkdir(n)];case 2:l.sent(),l.label=3;case 3:for(a in i=this.config,r={},o={},i)s=a,i.hasOwnProperty(s)&&(mA.contains(s)?o[s]=i[s]:r[s]=i[s]);return[4,this.writeConfigJson("app",r)];case 4:return l.sent(),[4,this.writeConfigJson("appearance",o)];case 5:return l.sent(),this.configTs=Date.now(),[2]}}))}))},t.prototype.getConfig=function(e){var t=this.config[e];return void 0===t?gA[e]:t},t.prototype.setConfig=function(e,t){void 0!==t?this.config[e]=t:delete this.config[e],this.requestSaveConfig(),this.trigger("config-changed")},t.prototype.readPluginData=function(e){var t=tt(e+"/data.json");return this.readJson(t)},t.prototype.writePluginData=function(e,t){var n=tt(e+"/data.json");return this.writeJson(n,t,!0)},t.prototype.getConfigFile=function(e){return this.configDir+"/"+e+".json"},t.prototype.readConfigJson=function(e){return this.readJson(this.getConfigFile(e))},t.prototype.writeConfigJson=function(e,t){return this.writeJson(this.getConfigFile(e),t,!0)},t.prototype.deleteConfigJson=function(e){var t=tt(this.configDir+"/"+e+".json");return this.adapter.remove(t)},t.prototype.readJson=function(e){return v(this,void 0,Promise,(function(){var t,n,i,r;return y(this,(function(o){switch(o.label){case 0:t=tt(e),o.label=1;case 1:return o.trys.push([1,3,,4]),i=(n=JSON).parse,[4,this.adapter.read(t)];case 2:return[2,i.apply(n,[o.sent()])];case 3:return"ENOENT"===(r=o.sent()).code||console.error(r),[3,4];case 4:return[2,null]}}))}))},t.prototype.writeJson=function(e,t,n){return v(this,void 0,Promise,(function(){var i;return y(this,(function(r){switch(r.label){case 0:i=tt(e),r.label=1;case 1:return r.trys.push([1,3,,4]),[4,this.adapter.write(i,JSON.stringify(t,void 0,n?2:void 0))];case 2:return r.sent(),[3,4];case 3:return r.sent(),[3,4];case 4:return[2]}}))}))},t.prototype.load=function(){return v(this,void 0,Promise,(function(){return y(this,(function(e){switch(e.label){case 0:return[4,this.adapter.watch(this.onChange.bind(this))];case 1:return e.sent(),this.adapter instanceof fA?[4,this.adapter.watchHiddenRecursive(this.configDir)]:[3,3];case 2:e.sent(),e.label=3;case 3:return[2]}}))}))},t.prototype.getAbstractFileByPath=function(e){return this.fileMap.hasOwnProperty(e)?this.fileMap[e]:null},t.prototype.getAbstractFileByPathInsensitive=function(e){var t=this.fileMap;if(t.hasOwnProperty(e))return t[e];var n=e.toLowerCase();for(var i in t)if(t.hasOwnProperty(i)&&i.toLowerCase()===n)return t[i];return null},t.prototype.isEmpty=function(){return 1===Object.keys(this.fileMap).length},t.prototype.getRoot=function(){return this.root},t.prototype.checkForDuplicate=function(e,t){var n=e.getNewPathAfterRename(t),i=this.fileMap[n];return i&&i!==e},t.prototype.checkPath=function(e){Ne(e)},t.prototype.onChange=function(e,t,n,i){if("folder-created"===e){var r=new kA(this,t);this.fileMap[t]=r,this.addChild(r),this.trigger("create",this.fileMap[t])}else if("file-created"===e){var o=new wA(this,t);o.stat=i,this.fileMap[t]=o,this.addChild(o),this.trigger("create",this.fileMap[t])}else if("modified"===e){if(!this.fileMap.hasOwnProperty(t))return;(a=this.fileMap[t])instanceof wA&&(a.stat=i,a.saving||a.cache(null)),this.trigger("modify",a)}else if("file-removed"===e||"folder-removed"===e){if(this.fileMap.hasOwnProperty(t)){var a=this.fileMap[t];this.removeChild(a),delete this.fileMap[t],a.deleted=!0,this.trigger("delete",a)}}else if("renamed"===e){if(this.fileMap.hasOwnProperty(n)){var s=this.fileMap[n];this.removeChild(s),s.setPath(t),this.addChild(s),this.fileMap[t]=s,delete this.fileMap[n],this.trigger("rename",s,n)}}else"closed"===e?this.trigger("closed"):"raw"===e&&(this.trigger("raw",t),t.startsWith(this.configDir+"/")&&this.adapter instanceof fA&&this.adapter.watchHiddenRecursive(t),t!==this.getConfigFile("app")&&t!==this.getConfigFile("appearance")||this.reloadConfig())},t.prototype.getDirectParent=function(e){var t=e.path,n=t.lastIndexOf("/");if(-1===n)return this.fileMap["/"];var i=t.slice(0,n),r=this.fileMap[i];return r&&r instanceof kA?r:null},t.prototype.addChild=function(e){var t=e.parent,n=this.getDirectParent(e);n&&n!==t&&(t&&t.children.remove(e),n.children.push(e),e.parent=n)},t.prototype.removeChild=function(e){var t=e.parent;t&&(t.children.remove(e),e.parent=null)},t.prototype.exists=function(e,t){return v(this,void 0,Promise,(function(){var n;return y(this,(function(i){switch(i.label){case 0:return n=tt(e),[4,this.adapter.exists(n,t)];case 1:return[2,i.sent()]}}))}))},t.prototype.create=function(e,t,n){return v(this,void 0,Promise,(function(){var i,r;return y(this,(function(o){switch(o.label){case 0:return i=tt(e),this.checkPath(i),[4,this.adapter.exists(i)];case 1:if(o.sent())throw new Error("File already exists.");return[4,this.adapter.write(i,t,n)];case 2:return o.sent(),(r=this.getAbstractFileByPath(i))instanceof wA?[2,r]:[2,null]}}))}))},t.prototype.createBinary=function(e,t,n){return v(this,void 0,Promise,(function(){var i,r;return y(this,(function(o){switch(o.label){case 0:return i=tt(e),this.checkPath(i),[4,this.adapter.exists(i)];case 1:if(o.sent())throw new Error("File already exists.");return[4,this.adapter.writeBinary(i,t,n)];case 2:return o.sent(),(r=this.getAbstractFileByPath(i))instanceof wA?[2,r]:[2,null]}}))}))},t.prototype.createFolder=function(e){return v(this,void 0,Promise,(function(){var t;return y(this,(function(n){switch(n.label){case 0:return t=tt(e),this.checkPath(t),[4,this.adapter.exists(t)];case 1:if(n.sent())throw new Error("Folder already exists.");return[2,this.adapter.mkdir(t)]}}))}))},t.prototype.read=function(e){return v(this,void 0,Promise,(function(){var t;return y(this,(function(n){switch(n.label){case 0:return[4,this.adapter.read(e.path)];case 1:return 65279===(t=n.sent()).charCodeAt(0)&&(t=t.substring(1)),e.cache(t),[2,t]}}))}))},t.prototype.cachedRead=function(e){return v(this,void 0,Promise,(function(){return y(this,(function(t){return bA.has(e)?[2,bA.get(e)]:[2,this.read(e)]}))}))},t.prototype.readBinary=function(e){return v(this,void 0,Promise,(function(){var t;return y(this,(function(n){switch(n.label){case 0:return[4,this.adapter.readBinary(e.path)];case 1:t=n.sent();try{"md"===e.extension&&t.byteLength<=this.cacheLimit&&e.cache((new TextDecoder).decode(t))}catch(e){}return[2,t]}}))}))},t.prototype.readRaw=function(e){return v(this,void 0,Promise,(function(){var t;return y(this,(function(n){return t=tt(e),[2,this.adapter.read(t)]}))}))},t.prototype.getResourcePath=function(e){return this.adapter.getResourcePath(e.path)},t.prototype.delete=function(e,t){return void 0===t&&(t=!1),v(this,void 0,Promise,(function(){return y(this,(function(n){switch(n.label){case 0:return e?e===this.root?[2]:e instanceof wA?[4,this.adapter.remove(e.path)]:[3,2]:[3,4];case 1:return n.sent(),[3,4];case 2:return e instanceof kA?[4,this.adapter.rmdir(e.path,t)]:[3,4];case 3:n.sent(),n.label=4;case 4:return[2]}}))}))},t.prototype.trash=function(e,t){return v(this,void 0,void 0,(function(){return y(this,(function(n){switch(n.label){case 0:return e?t?[4,this.adapter.trashSystem(e.path)]:[3,2]:[2];case 1:if(n.sent())return[2];n.label=2;case 2:return[4,this.adapter.trashLocal(e.path)];case 3:return n.sent(),[2]}}))}))},t.prototype.rename=function(e,t){return v(this,void 0,Promise,(function(){var n;return y(this,(function(i){switch(i.label){case 0:return n=tt(t),e.path===n?[2]:(this.checkPath(n),[4,this.adapter.rename(e.path,n)]);case 1:return i.sent(),[2]}}))}))},t.prototype.modify=function(e,t,n){return v(this,void 0,Promise,(function(){var i,r;return y(this,(function(o){switch(o.label){case 0:i=e.saving,e.saving=!0,o.label=1;case 1:return o.trys.push([1,3,4,5]),(n=n||{}).immediate=function(){return e.cache(t)},[4,this.adapter.write(e.path,t,n)];case 2:return o.sent(),[3,5];case 3:throw r=o.sent(),e.cache(null),r;case 4:return e.saving=i,[7];case 5:return[2]}}))}))},t.prototype.modifyBinary=function(e,t,n){return v(this,void 0,Promise,(function(){var i;return y(this,(function(r){switch(r.label){case 0:i=e.saving,e.saving=!0,r.label=1;case 1:return r.trys.push([1,,3,4]),(n=n||{}).immediate=function(){return e.cache(null)},[4,this.adapter.writeBinary(e.path,t,n)];case 2:return r.sent(),[3,4];case 3:return e.saving=i,[7];case 4:return[2]}}))}))},t.prototype.append=function(e,t,n){return v(this,void 0,Promise,(function(){var i;return y(this,(function(r){switch(r.label){case 0:i=e.saving,e.saving=!0,r.label=1;case 1:return r.trys.push([1,,3,4]),(n=n||{}).immediate=function(){return e.cache(null)},[4,this.adapter.append(e.path,t,n)];case 2:return r.sent(),[3,4];case 3:return e.saving=i,[7];case 4:return[2]}}))}))},t.prototype.process=function(e,t,n){return v(this,void 0,Promise,(function(){var i,r;return y(this,(function(o){switch(o.label){case 0:i=e.saving,e.saving=!0,o.label=1;case 1:return o.trys.push([1,,3,4]),(n=n||{}).immediate=function(){return e.cache(null)},[4,this.adapter.process(e.path,t,n)];case 2:return r=o.sent(),e.cache(r),[2,r];case 3:return e.saving=i,[7];case 4:return[2]}}))}))},t.prototype.copy=function(e,t){return v(this,void 0,Promise,(function(){var n,i;return y(this,(function(r){switch(r.label){case 0:return n=(n=tt(t)).normalize("NFC"),this.checkPath(n),[4,this.adapter.copy(e.path,n)];case 1:return r.sent(),(i=this.getAbstractFileByPath(n))instanceof wA?[2,i]:[2,null]}}))}))},t.prototype.getAllLoadedFiles=function(){var e=[];for(var t in this.fileMap)if(this.fileMap.hasOwnProperty(t)){var n=this.fileMap[t];e.push(n)}return e},t.prototype.getAvailablePath=function(e,t){for(var n=1,i=Qe(e,t);this.getAbstractFileByPathInsensitive(i);)i=Qe(e+" "+n,t),n++;return i},t.prototype.getAvailablePathForAttachments=function(e,t,n){return v(this,void 0,Promise,(function(){var i,r,o,a;return y(this,(function(s){switch(s.label){case 0:return i=this.getConfig("attachmentFolderPath"),r="."===i||"./"===i,o=null,i.startsWith("./")&&(o=i.slice(2)),r?i=n?n.parent.path:"":o&&(i=(n?n.parent.getParentPrefix():"")+o),i=tt(i),(a=this.getAbstractFileByPathInsensitive(i))||!o?[3,2]:[4,this.createFolder(i)];case 1:s.sent(),a=this.getAbstractFileByPathInsensitive(i),s.label=2;case 2:return a instanceof kA?[2,this.getAvailablePath(a.getParentPrefix()+e,t)]:[2,this.getAvailablePath(e,t)]}}))}))},t.prototype.resolveFileUrl=function(e){if($w.isDesktopApp){e.startsWith("app://local/")&&(e="file:///"+e.substring("app://local/".length).split("?")[0]);var t=at("url");if(t&&e.startsWith("file://")){var n=t.fileURLToPath(e);return this.resolveFilePath(n)}}return null},t.prototype.resolveFilePath=function(e){var t=this.adapter;if($w.isDesktopApp&&t instanceof fA){var n=t.getBasePath();if(e.startsWith(n)){var i=tt(e.substring(n.length)),r=this.getAbstractFileByPath(i);if(r instanceof wA)return r}}return null},t.recurseChildren=function(e,t){for(var n=[e];n.length>0;){var i=n.pop();if(i&&(t(i),i instanceof kA)){var r=i.children;n=n.concat(r)}}},t.prototype.getMarkdownFiles=function(){var e=[],n=this.getRoot();return t.recurseChildren(n,(function(t){t instanceof wA&&"md"===t.extension&&e.push(t)})),e},t.prototype.getFiles=function(){var e=[],n=this.getRoot();return t.recurseChildren(n,(function(t){t instanceof wA&&e.push(t)})),e},t.prototype.iterateFiles=function(e,t){return C(this,arguments,(function(){var n,i,r,o;return y(this,(function(a){switch(a.label){case 0:n=0,a.label=1;case 1:return n(e[t]=n,!0),has:(e,t)=>e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e};function PA(e){return e!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(EA||(EA=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(e)?function(...t){return e.apply(OA(this),t),FA(SA.get(this))}:function(...t){return FA(e.apply(OA(this),t))}:function(t,...n){const i=e.call(OA(this),t,...n);return TA.set(i,t.sort?t.sort():[t]),FA(i)}}function IA(e){return"function"==typeof e?PA(e):(e instanceof IDBTransaction&&function(e){if(MA.has(e))return;const t=new Promise(((t,n)=>{const i=()=>{e.removeEventListener("complete",r),e.removeEventListener("error",o),e.removeEventListener("abort",o)},r=()=>{t(),i()},o=()=>{n(e.error||new DOMException("AbortError","AbortError")),i()};e.addEventListener("complete",r),e.addEventListener("error",o),e.addEventListener("abort",o)}));MA.set(e,t)}(e),t=e,(xA||(xA=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])).some((e=>t instanceof e))?new Proxy(e,LA):e);var t}function FA(e){if(e instanceof IDBRequest)return function(e){const t=new Promise(((t,n)=>{const i=()=>{e.removeEventListener("success",r),e.removeEventListener("error",o)},r=()=>{t(FA(e.result)),i()},o=()=>{n(e.error),i()};e.addEventListener("success",r),e.addEventListener("error",o)}));return t.then((t=>{t instanceof IDBCursor&&SA.set(t,e)})).catch((()=>{})),AA.set(t,e),t}(e);if(DA.has(e))return DA.get(e);const t=IA(e);return t!==e&&(DA.set(e,t),AA.set(t,e)),t}const OA=e=>AA.get(e);function BA(e,t,{blocked:n,upgrade:i,blocking:r,terminated:o}={}){const a=indexedDB.open(e,t),s=FA(a);return i&&a.addEventListener("upgradeneeded",(e=>{i(FA(a.result),e.oldVersion,e.newVersion,FA(a.transaction),e)})),n&&a.addEventListener("blocked",(e=>n(e.oldVersion,e.newVersion,e))),s.then((e=>{o&&e.addEventListener("close",(()=>o())),r&&e.addEventListener("versionchange",(e=>r(e.oldVersion,e.newVersion,e)))})).catch((()=>{})),s}function NA(e,{blocked:t}={}){const n=indexedDB.deleteDatabase(e);return t&&n.addEventListener("blocked",(e=>t(e.oldVersion,e))),FA(n).then((()=>{}))}const RA=["get","getKey","getAll","getAllKeys","count"],HA=["put","add","delete","clear"],VA=new Map;function zA(e,t){if(!(e instanceof IDBDatabase)||t in e||"string"!=typeof t)return;if(VA.get(t))return VA.get(t);const n=t.replace(/FromIndex$/,""),i=t!==n,r=HA.includes(n);if(!(n in(i?IDBIndex:IDBObjectStore).prototype)||!r&&!RA.includes(n))return;const o=async function(e,...t){const o=this.transaction(e,r?"readwrite":"readonly");let a=o.store;return i&&(a=a.index(t.shift())),(await Promise.all([a[n](...t),r&&o.done]))[0]};return VA.set(t,o),o}function qA(e){return"md"===Ze(Ge(e))&&(e=e.substring(0,e.length-3)),e}LA=(e=>({...e,get:(t,n,i)=>zA(t,n)||e.get(t,n,i),has:(t,n)=>!!zA(t,n)||e.has(t,n)}))(LA);var UA=function(e,t){for(var n in t)if(t.hasOwnProperty(n)&&Ge(n).toLowerCase().contains(e))return!0;return!1},_A=function(){function e(e){this.cache={},this.app=e}return e.prototype.clear=function(){this.cache={}},e.prototype.getForFile=function(e,t){var n,i;return v(this,void 0,Promise,(function(){var r,o,a,s,l,c,u,h,p,d,f,m;return y(this,(function(g){switch(g.label){case 0:return"md"!==t.extension?[2,null]:(r=t.stat.mtime,(o=this.cache).hasOwnProperty(t.path)&&(a=o[t.path]).file===t&&a.mtime===r?[2,a]:[4,this.app.vault.cachedRead(t)]);case 1:if(s=g.sent(),e.isCancelled())return[2,null];l=LM(s),c=[],g.label=2;case 2:g.trys.push([2,7,8,13]),u=x(BC(OC(l.children),{maxDelay:0})),g.label=3;case 3:return[4,u.next()];case 4:if((h=g.sent()).done)return[3,6];if(p=h.value,e.isCancelled())return[3,6];if("yaml"===p.type)return[3,5];if("list"===p.type)return $S(p,"listItem",(function(e){var t=_M(e).trim();t&&c.push({display:t,node:e})})),[3,5];if(""===(d=_M(p).trim()))return[3,5];"heading"===p.type&&(d=Array(p.depth||1).fill("#").join("")+" "+d),c.push({display:d,node:p}),g.label=5;case 5:return[3,3];case 6:return[3,13];case 7:return f=g.sent(),n={error:f},[3,13];case 8:return g.trys.push([8,,11,12]),h&&!h.done&&(i=u.return)?[4,i.call(u)]:[3,10];case 9:g.sent(),g.label=10;case 10:return[3,12];case 11:if(n)throw n.error;return[7];case 12:return[7];case 13:return m={file:t,content:s,mtime:r,blocks:c},o[t.path]=m,[2,m]}}))}))},e.prototype.getAll=function(e){return C(this,arguments,(function(){var t,n,i,r,o;return y(this,(function(a){switch(a.label){case 0:t=this.app.vault,n=t.getMarkdownFiles(),i=0,r=n,a.label=1;case 1:return i500&&(g=g.substring(0,500)),t[g]||(t[g]=!0,e.push({file:null,path:g})))}return e},t.prototype.getTags=function(){var e=this.fileCache,t=this.metadataCache,n={},i=function(e){if(e){var t=e.split("/").last();n[e]=(n[e]||0)+1,t!==e&&i(e.substr(0,e.length-t.length-1))}};for(var r in e)if(e.hasOwnProperty(r)){var o=t[e[r].hash];if(o){var a=tA(o);if(a)for(var s=0,l=a;sd.max&&(d.max=p,d.tag=c)}else u[h]={tag:c,count:p,max:p}}for(var c in n={},u)if(u.hasOwnProperty(c)){var f=u[c];n[f.tag]=f.count}return n},t.prototype.getLinkpathDest=function(e,t){if(""===e&&t){var n=this.vault.getAbstractFileByPath(t);if(n instanceof wA)return[n]}var i=this._getLinkpathDest(e,t);return 0===i.length&&(i=this._getLinkpathDest(e+".md",t)),i},t.prototype.getFirstLinkpathDest=function(e,t){var n=this.getLinkpathDest(e,t);return n.length>0?n[0]:null},t.prototype._getLinkpathDest=function(e,t){var n=e.toLowerCase(),i=Ge(n),r=this.uniqueFileLookup.get(i);if(!r)return[];var o=Ke(t).toLowerCase();if(n.startsWith("./")||n.startsWith("../")){if(n.startsWith("./../")&&(n=n.substr(2)),n.startsWith("./"))""!==o&&(o+="/"),n=o+n.substring(2);else{for(;n.startsWith("../");)n=n.substr(3),o=Ke(o);""!==o&&(o+="/"),n=o+n}for(var a=0,s=r;a0&&this.isCacheClean();){var e=this.onCleanCacheCallbacks.shift();try{e()}catch(e){console.error(e)}}},t.prototype.isCacheClean=function(){return 0===this.inProgressTaskCount&&0===this.linkResolverQueue.items.length&&!this.linkResolverQueue.runnable.isRunning()},t.prototype.updateRelatedLinks=function(e){"md"===Ze(e)&&(e=Xe(e)),e=e.toLowerCase();for(var t=this.resolvedLinks,n=this.unresolvedLinks,i=0,r=this.getCachedFiles();i2&&o.startsWith("/")&&o.endsWith("/")?n.push(new RegExp(o.substring(1,o.length-1),"i")):n.push(new RegExp("^"+ye(o),"i"))}catch(e){console.error("Bad regex for user ignore filter",e)}}}else this.userIgnoreFilters=null},t.prototype.isUserIgnored=function(e){var t=this.userIgnoreFilters,n=this.userIgnoreFilterCache;if(!t)return!1;if(n.hasOwnProperty(e))return n[e];for(var i=!1,r=0,o=t;r1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function ZA(e){var t,n,i,r=e.h,o=e.s,a=e.l;if(r/=360,a/=100,0==(o/=100))t=n=i=a;else{var s=a<.5?a*(1+o):a+o-a*o,l=2*a-s;t=$A(l,s,r+1/3),n=$A(l,s,r),i=$A(l,s,r-1/3)}return{r:Math.round(255*t),g:Math.round(255*n),b:Math.round(255*i)}}function QA(e){var t=e.r,n=e.g,i=e.b;t/=255,n/=255,i/=255;var r,o,a=Math.max(t,n,i),s=Math.min(t,n,i),l=(a+s)/2;if(a==s)r=o=0;else{var c=a-s;switch(o=l>.5?c/(2-a-s):c/(a+s),a){case t:r=(n-i)/c+(n=150}var aL=function(){function e(e){this.components=[];var t=this.settingEl=e.createDiv("setting-item"),n=this.infoEl=t.createDiv("setting-item-info");this.nameEl=n.createDiv("setting-item-name"),this.descEl=n.createDiv("setting-item-description"),this.controlEl=t.createDiv("setting-item-control")}return e.prototype.setName=function(e){return this.nameEl.setText(e),this},e.prototype.setDesc=function(e){return this.descEl.setText(e),this},e.prototype.setClass=function(e){return this.settingEl.addClass(e),this},e.prototype.setTooltip=function(e,t){return tD(this.nameEl,e,t),this},e.prototype.setHeading=function(){return this.settingEl.addClass("setting-item-heading"),this},e.prototype.setDisabled=function(e){this.settingEl.toggleClass("is-disabled",e);for(var t=0,n=this.components;t0&&(e.addItem((function(e){return e.setSection("close").setTitle(Gk.interface.menu.closeOthers()).setIcon("lucide-x").onClick((function(){for(var e=0,t=r.children.slice();ee.lines)return e.length;var i=e.line(n);return isFinite(t.ch)?t.ch<0?i.from+Math.max(0,i.length+t.ch):i.from+t.ch:i.to}function ML(e,t){t=Math.clamp(t,0,e.length);var n=e.lineAt(t);return{line:n.number-1,ch:t-n.from}}function TL(e,t,n){return e.from<=n&&e.to>=t}function DL(e,t,n){for(var i=0,r=e;i\s]*)(([*+-] |(\d+)([.)] ))(?:\[(.)\] )?)?/,HL=/^([>\s]*)(#{1,6} )?(.*)/,VL=[{regex:/(!)?【【$/,replace:function(e){return e[1]?"![[":"[["}},{regex:/】】$/,replace:function(){return"]]"}},{regex:/【【$/,replace:function(){return"[["}}],zL=function(){function e(){}return e.prototype.getDoc=function(){return this},e.prototype.setLine=function(e,t){this.replaceRange(t,IL(e,0),IL(e,this.getLine(e).length))},e.prototype.somethingSelected=function(){return!!this.getSelection()},e.prototype.setCursor=function(e,t){return Number.isNumber(e)?this.setSelection({line:e,ch:t}):this.setSelection(e)},e.prototype.posAtMouse=function(e){return this.posAtCoords(e.clientX,e.clientY)},e.prototype.getSpellcheckStatus=function(e,t){return null},e.prototype.toggleSurroundingMarkdown=function(e){var t=this,n=this.getSelection(),i=this.getCursor("from"),r=this.getCursor("to"),o=i.line===r.line&&i.ch===r.ch,a=function(e){var n=e.length,o=t.getRange(FL(i,-n),i),a=t.getRange(r,FL(r,n));return o===e&&a===e},s=function(e){return n.length>=2*e.length&&n.startsWith(e)&&n.endsWith(e)},l=function(e){var n=e.length;return t.getRange(r,FL(r,n))===e},c=function(e){t.transaction({selection:{from:FL(i,e)}})},u=function(e,o){return a(e)?(function(e,o){var a=o.length,s=o+n+o;t.transaction({changes:[{from:FL(i,-e),to:FL(r,e),text:s}],selection:{from:FL(i,a-e),to:FL(r,r.line===i.line?a-e:0)}})}(e.length,o),!0):!!s(e)&&(function(e,o){var a=o+n.substring(e,n.length-e)+o;t.transaction({changes:[{from:i,to:r,text:a}],selection:{from:i,to:IL(r.line,r.line===i.line?i.ch+a.length:r.ch)}})}(e.length,o),!0)};if("*"===e||"_"===e){if(u("***","**"))return;if(u("___","__"))return;if(!(a("**")||a("__")||s("**")||s("__"))){if(u("*",""))return;if(u("_",""))return}if(o&&(l("*")||l("_")))return void c(1)}else if("**"===e||"__"===e){if(u("**",""))return;if(u("__",""))return;if(o&&(l("**")||l("__")))return void c(2)}else if(2===e.length&&e.charAt(0)===e.charAt(1)){if(u(e,""))return;if(o&&l(e))return void c(2)}var h=n.match(/^(\s*)([\s\S]*?)(\s*)$/);if(h){n=h[2];for(var p=h[1],d=0;d=0;d--){"\n"===f.charAt(d)?(r.line--,r.ch=this.getLine(r.line).length):r.ch--}}var m=r;r.line===i.line&&(m=FL(r,e.length)),this.transaction({changes:[{from:i,to:r,text:"".concat(e).concat(n).concat(e)}],selection:{from:FL(i,e.length),to:m}})},e.prototype.insertMarkdownLink=function(){var e=this.getSelection(),t=this.getCursor("from"),n=this.getCursor("to");e?this.transaction({replaceSelection:"[".concat(e,"]()"),selection:{from:FL(t,e.length+3)}}):t.line===n.line&&t.ch===n.ch&&this.transaction({replaceSelection:"[]()",selection:{from:FL(t,1)}})},e.prototype.triggerWikilink=function(e){var t=this.getSelection(),n=this.getCursor("from"),i=this.getCursor("to");t?(this.replaceSelection(e?"![[".concat(t,"]]"):"[[".concat(t,"]]")),this.setSelection(FL(n,t.length+2))):n.line===i.line&&n.ch===i.ch&&(this.replaceSelection(e?"![[]]":"[[]]"),this.setSelection(FL(n,e?3:2)))},e.prototype.insertText=function(e){var t=this.getSelection(),n=this.getCursor("from"),i=this.getCursor("to");t?(this.replaceSelection("".concat(e).concat(t)),this.setSelection(FL(n,t.length+e.length))):n.line===i.line&&n.ch===i.ch&&(this.replaceSelection(e),this.setSelection(FL(n,e.length)))},e.prototype.processLines=function(e,t,n){void 0===n&&(n=!0);for(var i=this.listSelections(),r=function(e){for(var t=[],n=0,i=e;n1&&!c.trim())o.push(null);else{var u=e(l,c);o.push(u)}}for(var h=[],p=0;p(\s*)/,t=!1;this.processLines((function(n,i){var r=i.match(e);return r||(t=!0),r}),(function(e,n,i){var r=i;if(t&&!r)return{from:IL(e,0),text:"> "};if(!t&&r){var o=r[0].length;if(r[1].startsWith(" ")){for(var a=r[1];a.startsWith(" ");)a=a.substring(4);o-=r[1].length,a.startsWith(" ")&&o++}return{from:IL(e,0),to:IL(e,o),text:""}}}),!1)},e.prototype.toggleBulletList=function(){var e=!1;this.processLines((function(t,n){var i=n.match(RL);return i[3]&&!i[4]||(e=!0),i}),(function(t,n,i){return i?{from:IL(t,0),to:IL(t,i[0].length),text:i[1]+(e?"- ":"")}:null}))},e.prototype.toggleNumberList=function(){var e=!1;this.processLines((function(t,n){var i=n.match(RL);return i[4]||(e=!0),i}),(function(t,n,i){return i?{from:IL(t,0),to:IL(t,i[0].length),text:i[1]+(e?"1. ":"")}:null})),e&&this.afterIndent()},e.prototype.toggleCheckList=function(e){var t=3;this.processLines((function(n,i){var r=i.match(RL);return t>2&&" "===r[6]&&(t=2),t>1&&!r[6]&&(t=1),e&&t>0&&!r[3]&&(t=0),r}),(function(n,i,r){if(!r)return null;var o=r[0],a=r[1],s=r[3],l={from:IL(n,0),to:IL(n,o.length),text:i.substr(0,o.length)},c=a+(s||"- ");return l.text=c,1===t?r[6]||(l.text=c+"[ ] "):2===t?l.text=c+"[x] ":3===t&&(l.text=e?c:c+"[ ] "),l}))},e.prototype.insertCallout=function(){var e=this.getCursor("from"),t=this.getCursor("to");if(!OL(e,t)||this.getLine(e.line).substring(0,e.ch).trim()){var n=[],i="> [!NOTE]\n> ",r={from:IL(e.line,4),to:IL(e.line,8)};e.line>0&&this.getLine(e.line-1)&&(i="\n"+i,r.from.line+=1,r.to.line+=1),n.push({from:IL(e.line,0),text:i});for(var o=e.line+1;o<=t.line;o++)n.push({from:IL(o,0),text:"> "});t.line [!NOTE] Title\n> Contents\n"}],selection:{from:IL(e.line+1,4),to:IL(e.line+1,8)}})},e.prototype.indentList=function(){this.exec("indentMore"),this.afterIndent()},e.prototype.unindentList=function(){this.exec("indentLess"),this.afterIndent()},e.prototype.afterIndent=function(){for(var e=this,t=this.listSelections(),n=[],i=[],r=0,o=t;r=0;){var h=e.getLine(l),p=RL.exec(h);if(!p||!p[4])break;var d=p[1];if(d===o){p[4]?c=parseInt(p[4],10):u=p;break}if(d.lengths&&l(h)}this.transaction({changes:n})},e.prototype.newlineAndIndentContinueMarkdownList=function(){for(var e=this,t=this.listSelections(),n=[],i=function(t){var i=t.head;if(t.head.line!==t.anchor.line||t.head.ch!==t.anchor.ch)return!1;var r=e.getLine(i.line),o=RL.exec(r);if(!o)return!1;var a=o[0],s=o[1],l=o[2],c=o[3],u=o[4],h=o[5],p=o[6];if(i.ch")||s.endsWith("> ")){if(l)return n.push({text:"",from:IL(i.line,s.length),to:i}),!0;var d=s.endsWith(">")?1:2;if(i.line>0)if(e.getLine(i.line-1)===s)return n.push({text:"",from:IL(i.line-1,s.length-d),to:IL(i.line-1,s.length)},{text:"",from:IL(i.line,s.length-d),to:IL(i.line,s.length)}),!0;var f=s.substr(0,s.length-d);return n.push({text:"\n"+f,from:IL(i.line,s.length-d),to:IL(i.line,s.length)}),!0}if(s.endsWith("\t"))return n.push({text:"",from:IL(i.line,s.length-1),to:IL(i.line,s.length)}),!0;for(var m=0;m<4&&" "===s.charAt(s.length-m-1);m++);return m>0?(n.push({text:"",from:IL(i.line,s.length-m),to:IL(i.line,s.length)}),!0):(n.push({text:"",from:IL(i.line),to:IL(i.line,s.length)}),!0)}if(!l)return n.push({text:r.charAt(i.ch-1)+"\n"+s,from:IL(i.line,i.ch-1),to:i}),!0;var g=c;u&&(g=parseInt(u,10)+1+h),p&&(g+="[ ] ");var v=RL.exec(r.substring(i.ch));if(v&&v[3]&&(g=""),n.push({text:r.charAt(i.ch-1)+"\n"+s+g,from:IL(i.line,i.ch-1),to:i}),v&&v[1]&&n.push({text:"",from:i,to:IL(i.line,i.ch+v[1].length)}),u)for(var y=parseInt(u,10)+2,b=i.line+1,w=e.lineCount();bs.length))break}return!0},r=0,o=t;r0||o(e))})),RT(r,(function(e){1===e.points&&"y"===e.direction&&o(e)}))}return r.onClickEvent((function(){return n.hide()})),n.scope.register([],"ArrowUp",n.onArrowUp.bind(n)),n.scope.register([],"ArrowDown",n.onArrowDown.bind(n)),n.scope.register([],"ArrowLeft",n.onArrowLeft.bind(n)),n.scope.register([],"ArrowRight",n.onArrowRight.bind(n)),n.scope.register([],"Enter",n.onEnter.bind(n)),n.scope.register([],"Escape",n.hide.bind(n)),$w.isDesktop&&i.addEventListener("mouseover",n.onMouseOver),n}return f(t,e),t.prototype.onload=function(){var e=this;this.registerDomEvent(window,"click",this.onMenuClick.bind(this)),this.registerDomEvent(window,"mousedown",(function(t){var n=t.targetNode;n&&!e.isInside(n)&&e.hide()})),this.registerDomEvent(window,"contextmenu",this.hide.bind(this)),pD.global.pushScope(this.scope)},t.prototype.onunload=function(){pD.global.popScope(this.scope)},t.prototype.onMenuClick=function(e){var t=e.targetNode;t&&t.instanceOf(Element)&&t.matchParent(".menu-item.has-submenu")||this.hide()},t.prototype.isInside=function(e){var t;if(this.dom.contains(e)||(null===(t=this.parentEl)||void 0===t?void 0:t.contains(e)))return!0;for(var n=this.parentMenu;n;){if(n.dom.contains(e))return!0;n=n.parentMenu}for(var i=this.currentSubmenu;i;){if(i.dom.contains(e))return!0;i=i.currentSubmenu}return!1},t.prototype.sort=function(){for(var e=this,t=e.items,n=e.sections,i=e.submenuConfigs,r={"":[]},o=0,a=t;o1&&!$w.isPhone){var g="";for(var v in i)if(i.hasOwnProperty(v)&&(s===v||s.substring(v.length+1)===v+".")){g=v;break}if(g){if(u&&g===h)u.items.push(new GL(this));else{var y=i[g],b=WL.create(this);t.push(b),b.setTitle(y.title),y.icon&&b.setIcon(y.icon),u=b.setSubmenu(),h=g}for(var w=0,k=r[s];w=0;!(g+h<=d)||e.left&&b?y.left=Math.max(0,v-h)+"px":y.left=g+"px",y.top=o+p>f?Math.max(m,o-p+2)+"px":o+2+"px",aC(l),c.style.opacity="0.85"}return this}var w=t.win,k=function(e){for(var t=[],n=function(e){if(e instanceof WL){var n={label:e.titleEl.getText(),enabled:!e.disabled,checked:e.checked,type:isBoolean(e.checked)?"checkbox":void 0,click:function(t,n,i){return e.handleEvent(new MouseEvent("click",i))}};e.submenu&&(n.submenu=k(e.submenu.items)),t.push(n)}else e instanceof GL&&t.push({type:"separator"})},i=0,r=e;i=t.length&&(n=0),i++}return!1},t.prototype.onArrowLeft=function(e){return e.preventDefault(),this.parentMenu&&this.hide(),!1},t.prototype.onArrowRight=function(e){e.preventDefault();var t=this.items[this.selected];return t instanceof WL&&t.submenu&&(this.openSubmenu(t),this.currentSubmenu&&this.currentSubmenu.select(0)),!1},t.prototype.onEnter=function(e){var t=this.items[this.selected];return t&&t instanceof WL&&(t.handleEvent(e),this.hide()),!1},t.prototype.unselect=function(){var e=this.items[this.selected];e&&e.dom.removeClass("selected"),this.selected=null,this.closeSubmenu()},t.prototype.select=function(e){var t=this.items,n=this.selected;if(0!==t.length){e<0&&(e=t.length-1),e>=t.length&&(e=0);var i=t[n];i&&i.dom.removeClass("selected"),this.selected=e;var r=t[e];r.dom.addClass("selected"),r.dom.scrollIntoView({block:"nearest"})}},t.prototype.openSubmenu=function(e){this.openSubmenuSoon.cancel();var t=e.submenu,n=e.dom,i=this.currentSubmenu;if(i!==t&&!e.disabled&&(i&&this.closeSubmenu(),t)){t.parentMenu=this,this.currentSubmenu=t;var r=getComputedStyle(this.dom),o=parseFloat(r.paddingTop)+parseFloat(r.borderTopWidth),a=parseFloat(r.paddingLeft)+parseFloat(r.borderLeftWidth)+2,s=parseFloat(r.paddingRight)+parseFloat(r.borderRightWidth)+2,l=n.getBoundingClientRect();t.showAtPosition({x:l.x-a,y:l.y-o,width:l.width+a+s},n.doc)}},t.prototype.closeSubmenu=function(){this.openSubmenuSoon.cancel();var e=this.currentSubmenu;e&&(e.hide(),e.parentMenu=null,this.currentSubmenu=null)},t.useNativeMenu=!1,t}(GM);function YL(e,t){e.setData("text/plain",t)}function XL(e,t){e.setData("text/plain",t),e.setData("text/uri-list",t)}function $L(e){for(var t=0;t0)||t.getRangeAt(0).collapsed){var n=e.target;if("IMG"===n.nodeName){var i=n.src,r=this.app.vault.resolveFileUrl(i);r&&this.onDragStart(e,this.dragFile(e,r))}}}},e.prototype.onDragOverFirst=function(){var e=this;this.setAction(null),this.updateHover(null,""),this.shouldHideOverlay=!0,setTimeout((function(){e.shouldHideOverlay&&e.hideOverlay()}))},e.prototype.onDragOver=function(e){$w.isMobile&&(e.preventDefault(),"none"===e.dataTransfer.dropEffect&&(e.dataTransfer.dropEffect="move"));var t=e.clientX,n=e.clientY;if(0!==t||0!==n){var i=this.ghostEl,r=this.dragStart;if(i){$w.isMobile?(t-=i.offsetWidth/2,n-=i.offsetHeight+20):(t+=5,n+=5),i.style.left=t+"px",i.style.top=n+"px";var o=e.doc;i.parentNode!==o.body&&o.body.appendChild(i),i.show()}r&&!r.moved&&(Math.abs(r.evt.clientX-e.clientX)>5||Math.abs(r.evt.clientY-e.clientY)>5)&&(r.moved=!0)}},e.prototype.onDragEnd=function(){var e=this.ghostEl,t=this.dragStart;if(e&&(e.detach(),this.ghostEl=null),t&&!t.moved){var n=t.evt;n.target.dispatchEvent(new MouseEvent("contextmenu",{button:0,buttons:0,ctrlKey:n.ctrlKey,altKey:n.altKey,metaKey:n.metaKey,shiftKey:n.shiftKey,screenX:n.screenX,screenY:n.screenY,bubbles:!0,cancelable:!0,clientX:n.clientX,clientY:n.clientY}))}this.dragStart=null,this.draggable=null,this.updateSource(null,""),this.updateHover(null,""),document.body.removeClass("is-grabbing"),this.dragStart=null,window.removeEventListener("touchend",this.onTouchEnd),this.removeOverlay()},e.prototype.onDragStart=function(e,t){this.draggable=t,$w.isMobile&&(this.dragStart={evt:e,moved:!1},window.addEventListener("touchend",this.onTouchEnd)),document.body.addClass("is-grabbing"),e.dataTransfer.effectAllowed="all";var n=this.ghostEl;n&&n.detach();var i=this.ghostEl=e.doc.body.createDiv("drag-ghost"),r=i.createDiv("drag-ghost-self");t.icon&&oT(r,t.icon),t.title&&r.createSpan({text:t.title}),this.actionEl=i.createDiv("drag-ghost-action"),tP(e),0===e.dataTransfer.items.length&&e.dataTransfer.setData("text/plain","")},e.prototype.handleDrag=function(e,t){var n=this;e.draggable=!0,e.addEventListener("dragstart",(function(e){var i=t(e);i&&n.onDragStart(e,i)}))},e.prototype.dragFile=function(e,t,n){return XL(e.dataTransfer,this.app.getObsidianUrl(t)),{source:n,type:"file",icon:"lucide-file",title:it(t.path),file:t}},e.prototype.dragFolder=function(e,t,n){return{source:n,type:"folder",icon:"lucide-folder-open",title:t.name,file:t}},e.prototype.dragFiles=function(e,t,n){if(0===t.length)return null;for(var i,r=0,o=0,a=[],s=0,l=t;s0&&r>0?i="".concat(r," files and ").concat(o," folders"):o>0?i="".concat(o," folders"):r>0&&(i="".concat(r," files")),XL(e.dataTransfer,a.join("\n")),{source:n,type:"files",icon:"lucide-files",title:i,files:t}},e.prototype.dragLink=function(e,t,n,i){var r=this.app.metadataCache.getFirstLinkpathDest(ZD(t),n),o=t,a=t;return r&&(o=this.app.getObsidianUrl(r),a=it(r.path)),XL(e.dataTransfer,o),{source:i,type:"link",icon:"lucide-link",title:a,linktext:t,sourcePath:n,file:r}},e.prototype.handleDrop=function(e,t,n){var i=this,r=function(e){if((n||i.draggable)&&!e.defaultPrevented){var r=t(e,i.draggable,!0);if(r){e.preventDefault();var o=r.action,a=r.dropEffect,s=r.hoverEl,l=r.hoverClass;o&&i.setAction(o),a&&(e.dataTransfer.dropEffect=a),s&&l&&i.updateHover(s,l)}}};e.addEventListener("dragover",r),e.addEventListener("dragenter",r),e.addEventListener("drop",(function(e){(n||i.draggable)&&(e.defaultPrevented||t(e,i.draggable,!1)&&e.preventDefault())}))},e.prototype.setAction=function(e){var t=this.actionEl;t&&(e?(t.setText(e),t.show()):t.hide())},e.prototype.updateSource=function(e,t){if(this.sourceEls)for(var n=0,i=this.sourceEls;n0&&(e.preventDefault(),this.insertFiles(n)),!1},e.prototype.handleDragOver=function(e){var t=this.app.dragManager.draggable;if(t){if(oe?e.shiftKey:e.altKey)return;"file"===t.type?(JL(e,"link"),this.app.dragManager.setAction(Gk.interface.dragAndDrop.insertLinkHere())):"files"===t.type?(JL(e,"link"),this.app.dragManager.setAction(Gk.interface.dragAndDrop.insertLinksHere())):("link"===t.type||"heading"===t.type)&&(JL(e,"link"),this.app.dragManager.setAction(Gk.interface.dragAndDrop.insertLinkHere()))}else e.ctrlKey?JL(e,"link"):JL(e,"copy")},e.prototype.handleDrop=function(e){var t=this.app,n=this.info,i=null,r=t.dragManager.draggable;if(r){if(n instanceof KN&&(oe?e.shiftKey:e.altKey))return e.preventDefault(),n.handleDrop(e,r,!1),!0;if("file"===r.type)i=t.fileManager.generateMarkdownLink(r.file,this.getPath());else if("files"===r.type){for(var o=[],a=0,s=r.files;a0&&e.preventDefault(),this.insertFiles(h),null},e.prototype.handleDataTransfer=function(e){var t=this,n=e.getData("text/html");if(n){if(!this.app.vault.getConfig("autoConvertHtml"))return null;var i=WM(n),r=createEl("div");if(r.appendChild(i),e.files.length>0&&/^]+>$/.test(r.innerHTML.trim()))return null;for(var o=[],a=0,s=i.findAll("img, audio, video");a1e3&&(o.push(l.src),l.detach())}}return v(t,void 0,void 0,(function(){var e,t,n,i,r,a,s,l,c,u;return y(this,(function(h){switch(h.label){case 0:for(t in e=[],o)e.push(t);n=0,h.label=1;case 1:if(!(n6&&(E=E.slice(0,6)),S=function(e){x.addItem((function(t){return t.setSection("correction").setTitle(e).setIcon("lucide-repeat").onClick((function(){x.hide(),null==m||m(e)}))}))},M=0,T=E;Mt&&(n.push(iP.range(a.from)),t=a.from)}return jr.set(n)},e}(),{decorations:function(e){return e.decorations}}),oP=new(function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.elementClass="cm-active",t}return f(t,e),t}(sc)),aP=lc.compute(["selection"],(function(e){for(var t=[],n=-1,i=0,r=e.selection.ranges;in&&(n=a,t.push(oP.range(a)))}return mi.of(t)})),sP={brackets:["(","[","{","'",'"'],before:")]}'\":;>"},lP=Zn.define({map:function(e,t){var n=t.mapPos(e,-1,cn.TrackAfter);return null==n?void 0:n}}),cP=Zn.define({map:function(e,t){return t.mapPos(e)}}),uP=new(function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return f(t,e),t}(hi));uP.startSide=1,uP.endSide=-1;var hP=Dn.define({create:function(){return mi.empty},update:function(e,t){if(t.selection){var n=t.state.doc.lineAt(t.selection.main.head).from,i=t.startState.doc.lineAt(t.startState.selection.main.head).from;n!=t.changes.mapPos(i,-1)&&(e=mi.empty)}e=e.map(t.changes);for(var r=function(t){t.is(lP)?e=e.update({add:[uP.range(t.value,t.value+1)]}):t.is(cP)&&(e=e.update({filter:function(e){return e!=t.value}}))},o=0,a=t.effects;o2||2==i.length&&1==sn(on(i,0))||t!=r.from||n!=r.to)return!1;var o=function(e,t){for(var n=fP(e,e.selection.main.head),i=n.brackets||sP.brackets,r=0,o=i;r-1):wP(e,a,s,n.before||sP.before);if(t==s&&yP(e,e.selection.main.from))return kP(e,a,s)}return null}(e.state,i);return!!o&&(e.dispatch(o),!0)})),vP=[{key:"Backspace",run:function(e){var t=e.state,n=e.dispatch;if(t.readOnly)return!1;var i=fP(t,t.selection.main.head).brackets||sP.brackets,r=null,o=t.changeByRange((function(e){if(e.empty)for(var n=function(e,t){var n=e.sliceString(t-2,t);return sn(on(n,0))==n.length?n:n.slice(1)}(t.doc,e.head),o=0,a=i;o-1?{changes:{insert:t+n,from:o.head},effects:lP.of(o.head+t.length),range:bn.cursor(o.head+t.length)}:{range:r=o}}));return r?null:e.update(o,{scrollIntoView:!0,userEvent:"input.type"})}function kP(e,t,n){var i=null,r=e.selection.ranges.map((function(t){return t.empty&&bP(e.doc,t.head)==n?bn.cursor(t.head+n.length):i=t}));return i?null:e.update({selection:bn.create(r,e.selection.mainIndex),scrollIntoView:!0,effects:e.selection.ranges.map((function(e){var t=e.from;return cP.of(t)}))})}function CP(e,t,n){var i=null,r=e.changeByRange((function(r){if(!r.empty){var o=t,a=t;return n&&r.from>=2&&e.doc.sliceString(r.from-2,r.from)===t+t&&("\n"!==e.doc.sliceString(r.from,r.from+1)&&(o=t+"\n"),"\n"!==e.doc.sliceString(r.to-1,r.to)&&(a="\n"+t)),{changes:[{insert:o,from:r.from},{insert:a,from:r.to}],effects:lP.of(r.to+o.length),range:bn.range(r.anchor+o.length,r.head+o.length)}}var s=r.head,l=bP(e.doc,s);if(l==t){if(xP(e,s))return{changes:{insert:t+t,from:s},effects:lP.of(s+t.length),range:bn.cursor(s+t.length)};if(yP(e,s)){var c=n&&e.sliceDoc(s,s+3*t.length)==t+t+t;return{range:bn.cursor(s+t.length*(c?3:1)),effects:cP.of(s)}}}else{if(n&&e.sliceDoc(s-2*t.length,s)==t+t&&xP(e,s-2*t.length))return{changes:{insert:t+"\n"+t+t+t,from:s},effects:lP.of(s+t.length),range:bn.cursor(s+t.length)};if(e.charCategorizer(s)(l)!=ai.Word){var u=e.sliceDoc(s-1,s);if(u!=t&&e.charCategorizer(s)(u)!=ai.Word&&!function(e,t,n){for(var i=ch(e).resolveInner(t,-1),r=0;r<5;r++){if(e.sliceDoc(i.from,i.from+n.length)==n)return!0;var o=i.to==t&&i.parent;if(!o)break;i=o}return!1}(e,s,t))return{changes:{insert:t+t,from:s},effects:lP.of(s+t.length),range:bn.cursor(s+t.length)}}}return{range:i=r}}));return i?null:e.update(r,{scrollIntoView:!0,userEvent:"input.type"})}function xP(e,t){var n=ch(e).resolveInner(t+1);return n.parent&&n.from==t}var EP=Cn.define({combine:function(e){return ui(e,{cursorBlinkRate:1200,drawRangeCursor:!0},{cursorBlinkRate:function(e,t){return Math.min(e,t)},drawRangeCursor:function(e,t){return e||t}})}});function SP(e){return e.startState.facet(EP)!=e.startState.facet(EP)}var MP=Ys({above:!0,markers:function(e){for(var t=e.state,n=t.facet(EP),i=[],r=0,o=t.selection.ranges;ra.anchor?-1:1),u=0,h=qs.forRange(e,l,c);ue)&&(i={from:e,to:t})})),i}var LP=function(e){function t(t){var n=e.call(this)||this;return n.folded=t,n}return f(t,e),t.prototype.eq=function(e){return e.folded==this.folded},t.prototype.toDOM=function(e){var t=createDiv(this.folded?"cm-fold-indicator is-collapsed":"cm-fold-indicator");return t.appendText("​"),oT(t.createDiv("collapse-indicator collapse-icon"),"right-triangle"),t.addEventListener("mousedown",(function(e){e.preventDefault()})),t.addEventListener("click",(function(n){var i=e.posAtDOM(t),r=e.state.doc.lineAt(i),o=AP(Qh(e.state),r.from,r.to);if(o)e.dispatch({effects:Xh.of(o)});else{var a=Gh(e.state,r.from,r.to);a&&e.dispatch({effects:Yh.of(a)})}})),t},t}(Ur),PP=jr.widget({widget:new LP(!0)}),IP=jr.widget({widget:new LP(!1)}),FP=function(){function e(e){this.decorations=jr.none,this.wasComposing=!1,this.buildDeco(e)}return e.prototype.update=function(e){if(e.view.composing)return this.decorations=this.decorations.map(e.changes),void(this.wasComposing=!0);(e.docChanged||e.viewportChanged||e.startState.facet(Ch)!==e.state.facet(Ch)||Qh(e.startState)!==Qh(e.state)||this.wasComposing)&&(this.wasComposing=!1,this.buildDeco(e.view))},e.prototype.buildDeco=function(e){for(var t=new gi,n=Qh(e.state),i=0,r=e.viewportLineBlocks;i]+/,r=n.lineAt(e.state.selection.main.from),o="",a="",s=r.text.match(RL);if(s)if(o=s[1],s[2])a=" ".repeat(s[2].length);else for(var l=r.number-1;l>0;){var c=n.line(l),u=c.text.match(RL);if(!u)break;if(u[2]||u[1]!==o){var h=u[1]||"";u[2]&&o.startsWith(h)&&u[0].length<=o.length&&(r=c,o=u[1],a=" ".repeat(u[2].length));break}l--}for(var p=r.number+1;p<=n.lines;){var d=n.line(p).text;if(!d.startsWith(o))break;if(d=d.substr(o.length),a){if(d.startsWith(a)){p++;continue}a=""}if(!/^(\t| {4})/.test(d))break;p++}for(var f=0,m=e.viewportLineBlocks;f"===k)b++," "===y.charAt(b)&&b++;else if("\t"===k)x=!0,b++;else{for(var S=!0,M=b+4,T=b;T0){var m=o.get(d);m||(m=jr.line({attributes:{style:"text-indent:".concat(-d,"px;padding-inline-start:").concat(e.basePadding+d,"px")}}),o.set(d,m)),r.add(u.from,u.from,m)}}else n.delete(h)}this.decorations=r.finish(),this.requestUpdateDom()},e.prototype.updateDom=function(){var t=this.view,n=this.indentCache,i=t.contentDOM;if(i.offsetParent){for(var r=this.tree,o=[],a=0,s=Array.from(i.childNodes);ay/2){if(!(v=t.coordsAtPos(l+m.length,-1)))continue;S=Math.floor(Math.abs(b===To.LTR?v.right-g.left:v.left-g.right))}if(S&&!(Math.abs(v.top-g.top)>1)){var w,k=!1;(w=n.get(c))&&w.size===S?(w.text=m,w.dirty=!1):(n.set(c,{text:m,size:S,dirty:!1}),k=!0),k&&u.push({lineEl:f,size:S})}}}for(var C=0,x=u;Ce.lines)return e.length;var r=e.line(i);return Math.min(r.from+Math.max(0,n),r.to)}function jP(e,t){if(t<0||t>e.length)return null;var n=e.lineAt(t);return{line:n.number-1,ch:t-n.from}}var WP=function(e,t){this.line=e,this.ch=t};function GP(e,t,n){if(e.addEventListener)e.addEventListener(t,n,!1);else{var i=e._handlers||(e._handlers={});i[t]=(i[t]||[]).concat(n)}}function KP(e,t,n){if(e.removeEventListener)e.removeEventListener(t,n,!1);else{var i=e._handlers,r=i&&i[t];if(r){var o=r.indexOf(n);o>-1&&(i[t]=r.slice(0,o).concat(r.slice(o+1)))}}}function YP(e,t){for(var n,i=[],r=2;r=t.lines?"":this.cm6.state.doc.line(e+1).text},e.prototype.getLineHandle=function(e){return this.$lineHandleChanges||(this.$lineHandleChanges=[]),{row:e,index:this.indexFromPos(new WP(e,0))}},e.prototype.getLineNumber=function(e){var t=this.$lineHandleChanges;if(!t)return null;for(var n=e.index,i=0;it.lines&&(i=t.lines,n=Number.MAX_VALUE);var r=t.line(i);return n=Math.min(Math.max(0,n),r.to-r.from),new WP(i-1,n)},e.prototype.getValue=function(){return this.cm6.state.doc.toString()},e.prototype.setValue=function(e){var t=this.cm6;return t.dispatch({changes:{from:0,to:t.state.doc.length,insert:e},selection:bn.range(0,0)})},e.prototype.focus=function(){return this.cm6.focus()},e.prototype.blur=function(){return this.cm6.contentDOM.blur()},e.prototype.defaultTextHeight=function(){return this.cm6.defaultLineHeight},e.prototype.findMatchingBracket=function(e){var t=this.cm6.state,n=_P(t.doc,e),i=Fp(t,n+1,-1);return i&&i.end||(i=Fp(t,n,1))&&i.end?{to:jP(t.doc,i.end.from)}:{to:void 0}},e.prototype.scanForBracket=function(e,t,n,i){return function(e,t,n,i,r){for(var o=r&&r.maxScanLineLength||1e4,a=r&&r.maxScanLines||1e3,s=[],l=function(e){return e&&e.bracketRegex||/[(){}[\]]/}(r),c=n>0?Math.min(t.line+a,e.lastLine()+1):Math.max(e.firstLine()-1,t.line-a),u=t.line;u!=c;u+=n){var h=e.getLine(u);if(h){var p=n>0?0:h.length-1,d=n>0?h.length:-1;if(!(h.length>o))for(u==t.line&&(p=t.ch-(n<0?1:0));p!=d;p+=n){var f=h.charAt(p);if(l.test(f)){var m=sI[f];if(m&&">"==m.charAt(1)==n>0)s.push(f);else{if(!s.length)return{pos:new WP(u,p),ch:f};s.pop()}}}}}return u-n!=(n>0?e.lastLine():e.firstLine())&&null}(this,e,t,0,i)},e.prototype.indentLine=function(e,t){t?this.indentMore():this.indentLess()},e.prototype.indentMore=function(){Tv(this.cm6)},e.prototype.indentLess=function(){Dv(this.cm6)},e.prototype.execCommand=function(t){"indentAuto"==t?e.commands.indentAuto(this):"goLineLeft"==t?ug(this.cm6):"goLineRight"==t?(cg(this.cm6),qm(this.cm6)):console.log(t+" is not implemented")},e.prototype.setBookmark=function(e,t){var n=(null==t?void 0:t.insertLeft)?1:-1,i=this.indexFromPos(e);return new hI(this,i,n)},e.prototype.addOverlay=function(e){var t=e.query,n=new Ky({regexp:!0,search:t.source,caseSensitive:!/i/.test(t.flags)});if(n.valid){n.forVim=!0,this.cm6Query=n;var i=tb.of(n);return this.cm6.dispatch({effects:i}),n}},e.prototype.removeOverlay=function(e){if(this.cm6Query){this.cm6Query.forVim=!1;var t=tb.of(this.cm6Query);this.cm6.dispatch({effects:t})}},e.prototype.getSearchCursor=function(e,t){var n=this,i=null,r=null;null==t.ch&&(t.ch=Number.MAX_VALUE);var o=_P(n.cm6.state.doc,t),a=e.source.replace(/(\\.|{(?:\d+(?:,\d*)?|,\d+)})|[{}]/g,(function(e,t){return t||"\\"+e}));function s(t,n,i){return void 0===n&&(n=0),void 0===i&&(i=t.length),new My(t,a,{ignoreCase:e.ignoreCase},n,i)}return{findNext:function(){return this.find(!1)},findPrevious:function(){return this.find(!0)},find:function(e){var t=n.cm6.state.doc;if(e){var a=i?i.from==i.to?i.to-1:i.from:o;i=function(e,t){for(var i=n.cm6.state.doc,r=1;;r++){for(var o=Math.max(e,t-1e4*r),a=s(i,o,t),l=null;!a.next().done;)l=a.value;if(l&&(o==e||l.from>o+10))return l;if(o==e)return null}}(0,a)}else{var l=i?i.from==i.to?i.to+1:i.to:o;i=function(e){var t=n.cm6.state.doc;if(e>t.length)return null;var i=s(t,e).next();return i.done?null:i.value}(l)}return r=i&&{from:jP(t,i.from),to:jP(t,i.to),match:i.match},i&&i.match},from:function(){return null==r?void 0:r.from},to:function(){return null==r?void 0:r.to},replace:function(e){i&&(JP(n,{changes:{from:i.from,to:i.to,insert:e}}),i.to=i.from+e.length,r&&(r.to=jP(n.cm6.state.doc,i.to)))}}},e.prototype.findPosV=function(e,t,n,i){for(var r=this.cm6,o=r.state.doc,a="page"==n?r.dom.clientHeight:0,s=_P(o,e),l=bn.range(s,s,i),c=Math.round(Math.abs(t)),u=t>0,h=0;hMath.abs(f.head-l.head)&&(p=f)}l=p}var m=jP(o,l.head);return(t<0&&0==l.head&&0!=i&&0==e.line&&0!=e.ch||t>0&&l.head==o.length&&m.ch!=i&&e.line==m.line)&&(m.hitSide=!0),m},e.prototype.charCoords=function(e,t){var n,i,r=this.cm6,o=_P(r.state.doc,e),a=r.coordsAtPos(o)||{left:0,top:0,bottom:0},s=a.left,l=a.top,c=a.bottom,u=0,h=0;return"div"===t?(u=(n=r.contentDOM.getBoundingClientRect()).left,h=n.top):(u=(i=r.scrollDOM.getBoundingClientRect()).left,h=i.top,u-=r.scrollDOM.scrollLeft,h-=r.scrollDOM.scrollTop),{left:s-u,top:l-h,bottom:c-h}},e.prototype.coordsChar=function(e,t){var n,i,r=this.cm6,o=0,a=0;"div"===t?(o=(n=r.contentDOM.getBoundingClientRect()).left,a=n.top):(o=(i=r.scrollDOM.getBoundingClientRect()).left,a=i.top,o-=r.scrollDOM.scrollLeft,a-=r.scrollDOM.scrollTop);var s={x:e.left+o,y:e.top+a},l=this.cm6.posAtCoords(s)||0;return jP(this.cm6.state.doc,l)},e.prototype.getScrollInfo=function(){var e=this.cm6.scrollDOM;return{left:e.scrollLeft,top:e.scrollTop,height:e.scrollHeight,width:e.scrollWidth,clientHeight:e.clientHeight,clientWidth:e.clientWidth}},e.prototype.scrollTo=function(e,t){null!=e&&(this.cm6.scrollDOM.scrollLeft=e),null!=t&&(this.cm6.scrollDOM.scrollTop=t)},e.prototype.scrollInfo=function(){return 0},e.prototype.scrollIntoView=function(e,t){e?this.cm6.dispatch({effects:Ts.scrollIntoView(this.indexFromPos(e),{yMargin:t})}):this.cm6.dispatch({scrollIntoView:!0,userEvent:"scroll"})},e.prototype.getWrapperElement=function(){return this.cm6.dom},e.prototype.getMode=function(){return{name:this.getOption("mode")}},e.prototype.setSize=function(e,t){this.cm6.dom.style.width=e+4+"px",this.cm6.dom.style.height=t+"px",this.refresh()},e.prototype.refresh=function(){this.cm6.measure()},e.prototype.destroy=function(){this.removeOverlay()},e.prototype.onChange=function(e){var t=this;for(var n in this.$lineHandleChanges&&this.$lineHandleChanges.push(e),this.marks){this.marks[n].update(e.changes)}this.virtualSelection&&(this.virtualSelection=bn.create(this.virtualSelection.ranges.map((function(t){return t.map(e.changes)})),this.virtualSelection.mainIndex));var i=this.curOp=this.curOp||{};e.changes.iterChanges((function(e,n,r,o,a){(null==i.$changeStart||i.$changeStart>r)&&(i.$changeStart=r),t.$lastChangeEndOffset=o;var s={text:a.toJSON()};i.lastChange?i.lastChange.next=i.lastChange=s:i.lastChange=i.change=s}),!0),i.changeHandlers||(i.changeHandlers=this._handlers.change&&this._handlers.change.slice())},e.prototype.onSelectionChange=function(){var e=this.curOp=this.curOp||{};e.cursorActivityHandlers||(e.cursorActivityHandlers=this._handlers.cursorActivity&&this._handlers.cursorActivity.slice()),this.curOp.cursorActivity=!0},e.prototype.operation=function(e){this.curOp||(this.curOp={$d:0}),this.curOp.$d++;try{var t=e()}finally{this.curOp&&(this.curOp.$d--,this.curOp.$d||this.onBeforeEndOperation())}return t},e.prototype.onBeforeEndOperation=function(){var e=this.curOp,t=!1;e&&(e.change&&XP(e.changeHandlers,this,e.change),e&&e.cursorActivity&&(XP(e.cursorActivityHandlers,this,null),e.isVimOp&&(t=!0)),this.curOp=null),t&&this.scrollIntoView()},e.prototype.moveH=function(e,t){if("char"==t){var n=this.getCursor();this.setCursor(n.line,n.ch+e)}},e.prototype.setOption=function(e,t){switch(e){case"keyMap":this.state.keyMap=t}},e.prototype.getOption=function(e){switch(e){case"firstLineNumber":return 1;case"tabSize":return this.cm6.state.tabSize||4;case"readonly":return this.cm6.state.readOnly;case"indentWithTabs":return"\t"==this.cm6.state.facet(Mh);case"indentUnit":return this.cm6.state.facet(Mh).length||2;case"keyMap":return this.state.keyMap||"vim"}},e.prototype.toggleOverwrite=function(e){this.state.overwrite=e},e.prototype.getTokenTypeAt=function(e){var t,n=this.indexFromPos(e),i=uh(this.cm6.state,n),r=null==i?void 0:i.resolve(n),o=(null===(t=null==r?void 0:r.type)||void 0===t?void 0:t.name)||"";return/comment/i.test(o)?"comment":/string/i.test(o)?"string":""},e.prototype.overWriteSelection=function(e){var t=this.cm6.state.doc,n=this.cm6.state.selection,i=n.ranges.map((function(e){if(e.empty){var n=e.to1},e.prototype.virtualSelectionMode=function(){return!!this.virtualSelection},e.prototype.forEachSelection=function(e){var t=this.cm6.state.selection;this.virtualSelection=bn.create(t.ranges,t.mainIndex);for(var n=0;n1&&(t=t.replace(/Numpad|Arrow/,"")),1==t.length&&(t=t.toUpperCase());var n="";return e.ctrlKey&&(n+="Ctrl-"),e.altKey&&(n+="Alt-"),(n||t.length>1)&&e.shiftKey&&(n+="Shift-"),n+=t}},e.vimKey=function(e){var t=e.key;if(!QP[t]){t.length>1&&"n"==t[0]&&(t=t.replace("Numpad","")),t=ZP[t]||t;var n="";return e.ctrlKey&&(n+="C-"),e.altKey&&(n+="A-"),e.metaKey&&(n+="M-"),UP&&e.altKey&&!e.metaKey&&!e.ctrlKey&&(n=n.slice(2)),(n||t.length>1)&&e.shiftKey&&(n+="S-"),(n+=t).length>1&&(n="<"+n+">"),n}},e.lookupKey=function(t,n,i){var r=e.keys[t];r&&i(r)},e.on=GP,e.off=KP,e.signal=YP,e.findMatchingTag=lI,e.findEnclosingTag=uI,e}();function nI(e,t,n){var i=document.createElement("div");return i.appendChild(t),i}function iI(e,t){e.state.currentNotificationClose&&e.state.currentNotificationClose(),e.state.currentNotificationClose=t}function rI(e,t){var n=e.state.dialog;e.state.dialog=t,t&&n!==t&&(n&&n.contains(document.activeElement)&&e.focus(),n&&n.parentElement?n.parentElement.replaceChild(t,n):n&&n.remove(),tI.signal(e,"dialog"))}function oI(e,t){e.state.dialog==t&&(e.state.dialog=null,tI.signal(e,"dialog"))}function aI(e,t,n,i){i||(i={}),iI(e,void 0);var r=nI(0,t,i.bottom),o=!1;function a(t){if("string"==typeof t)s.value=t;else{if(o)return;o=!0,oI(e,r),e.state.dialog||e.focus(),i.onClose&&i.onClose(r)}}rI(e,r);var s=r.getElementsByTagName("input")[0];return s&&(i.value&&(s.value=i.value,!1!==i.selectValueOnOpen&&s.select()),i.onInput&&tI.on(s,"input",(function(e){i.onInput(e,s.value,a)})),i.onKeyUp&&tI.on(s,"keyup",(function(e){i.onKeyUp(e,s.value,a)})),tI.on(s,"keydown",(function(e){i&&i.onKeyDown&&i.onKeyDown(e,s.value,a)||(13==e.keyCode&&n(s.value),(27==e.keyCode||!1!==i.closeOnEnter&&13==e.keyCode)&&(s.blur(),tI.e_stop(e),a()))})),!1!==i.closeOnBlur&&tI.on(s,"blur",(function(){setTimeout((function(){document.activeElement!==s&&a()}))})),s.focus()),a}var sI={"(":")>",")":"(<","[":"]>","]":"[<","{":"}>","}":"{<","<":">>",">":"<<"};function lI(e,t){var n=e.cm6.state,i=e.indexFromPos(t),r=Fp(n,i+1,-1,{brackets:"\n\n"});if(r){if(!r.end||!r.start)return;return{open:cI(n.doc,r.end),close:cI(n.doc,r.start)}}if(r=Fp(n,i,1,{brackets:"\n\n"})){if(!r.end||!r.start)return;return{open:cI(n.doc,r.start),close:cI(n.doc,r.end)}}}function cI(e,t){return{from:jP(e,t.from),to:jP(e,t.to)}}function uI(e,t){for(var n=e.cm6.state,i=e.indexFromPos(t),r=n.sliceDoc(0,i),o=i;o>0;){var a=Fp(n,o,1,{brackets:"\n\n"});if(a&&a.start&&a.end)return{open:cI(n.doc,a.start),close:cI(n.doc,a.end)};o=r.lastIndexOf(">",o-1)}}var hI=function(){function e(e,t,n){this.cm=e,this.id=e.$mid++,this.offset=t,this.assoc=n,e.marks[this.id]=this}return e.prototype.clear=function(){delete this.cm.marks[this.id]},e.prototype.find=function(){return null==this.offset?null:this.cm.posFromIndex(this.offset)},e.prototype.update=function(e){null!=this.offset&&(this.offset=e.mapPos(this.offset,this.assoc,cn.TrackDel))},e}(),pI=function(){function e(e,t,n,i,r,o,a,s,l,c){this.left=e,this.top=t,this.height=n,this.fontFamily=i,this.fontSize=r,this.fontWeight=o,this.tabSize=a,this.color=s,this.className=l,this.letter=c}return e.prototype.draw=function(){var e=document.createElement("div");return e.className=this.className,this.adjust(e),e},e.prototype.adjust=function(e){e.style.left=this.left+"px",e.style.top=this.top+"px",e.style.height=this.height+"px",e.style.lineHeight=this.height+"px",e.style.fontFamily=this.fontFamily,e.style.fontSize=this.fontSize,e.style.fontWeight=this.fontWeight,e.style.tabSize=this.tabSize,e.className=this.className,e.textContent=this.letter},e.prototype.eq=function(e){return this.left==e.left&&this.top==e.top&&this.height==e.height&&this.className==e.className&&this.letter==e.letter},e}(),dI=function(){function e(e,t){this.view=e,this.rangePieces=[],this.cursors=[],this.cm=t,this.measureReq={read:this.readPos.bind(this),write:this.drawSel.bind(this)},this.cursorLayer=e.scrollDOM.appendChild(document.createElement("div")),this.cursorLayer.className="cm-cursorLayer cm-vimCursorLayer",this.cursorLayer.setAttribute("aria-hidden","true"),e.requestMeasure(this.measureReq),this.setBlinkRate()}return e.prototype.setBlinkRate=function(){this.cursorLayer.style.animationDuration="1200ms"},e.prototype.update=function(e){(e.selectionSet||e.geometryChanged||e.viewportChanged||PL(e.transactions,GB))&&(this.scheduleRedraw(),this.cursorLayer.style.animationName="cm-blink"==this.cursorLayer.style.animationName?"cm-blink2":"cm-blink")},e.prototype.scheduleRedraw=function(){this.view.requestMeasure(this.measureReq)},e.prototype.readPos=function(){for(var e=this.view.state,t=[],n=0,i=e.selection.ranges;n1&&(o--,f=t.state.sliceDoc(o,o+1)),f&&"\n"!=f&&"\r"!=f?/[\uD800-\uDBFF]/.test(f)&&or[i+1].from-500;)l=r[++i].to;e.highlight(t.state,s,l,(function(e,t){n.add(e,t,bI)}))}return this.decorations=n.finish()},e.prototype.handleKey=function(e,t){var n=tI.vimKey(e),i=this.cm;if(n){var r=i.state.vim;if(r){if(""==n&&!r.insertMode&&!r.visualMode&&this.query){var o=r.searchState_;o&&(i.removeOverlay(o.getOverlay()),o.setOverlay(null))}var a;r.status=(r.status||"")+n;try{a=gI.multiSelectHandleKey(i,n,"user")}catch(e){console.error(e),i.state.vim.insertMode||(a=!0)}return r=i.state.vim,!a&&r.insertMode&&i.state.overwrite&&(e.key&&1==e.key.length&&e.key&&!/\n/.test(e.key)?(a=!0,i.overWriteSelection(e.key)):"Backspace"==e.key&&(a=!0,tI.commands.cursorCharLeft(i))),a&&(tI.signal(this.cm,"vim-keypress",n),e.preventDefault(),e.stopPropagation(),this.blockCursor.scheduleRedraw()),this.updateStatus(),!!a}}},e}(),{eventHandlers:{keypress:function(e,t){"Dead"==this.lastKeydown&&this.handleKey(e,t)},keydown:function(e,t){this.lastKeydown=e.key,this.handleKey(e,t)}},decorations:function(e){return e.decorations}}),bI=jr.mark({class:"obsidian-search-match-highlight"}),wI=Zn.define(),kI=Dn.define({create:function(){return!1},update:function(e,t){for(var n=0,i=t.effects;n2||2==i.length&&1==sn(on(i,0))||t!=r.from||n!=r.to)return!1;for(var o=e.state,a=function(t){if(i!==t)return"continue";var n=null,r=o.changeByRange((function(e){return e.empty?{range:n=e}:{changes:[{insert:i,from:e.from},{insert:i,from:e.to}],range:bn.range(e.anchor+i.length,e.head+i.length)}}));return n?{value:!1}:(e.dispatch(o.update(r,{scrollIntoView:!0,userEvent:"input.type"})),{value:!0})},s=0,l=xI;s0?TI(t[0]):n&&n.length>0?TI(n[0]):""},e.prototype.bake=function(){if(!this.baked){this.baked=!0;var e=this.defaultKeys,t=this.customKeys,n=[],i=[],r=function(e,t){for(var r=0,o=t;r]|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`*!()\[\]{};:'".,<>?«»“”‘’]))/i,HI=/^(([^<>()[\]\\.,;:\s@\"`]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))\b/,VI=/^\.{0,2}\/[^\>\s]+/,zI=/^(?:[^\u2000-\u206F\u2E00-\u2E7F'!"#$%&()*+,.:;<=>?@^`{|}~\[\]\\\s])+/;!function(e){e[e.NONE=0]="NONE",e[e.NORMAL=1]="NORMAL",e[e.WITH_SPACE=2]="WITH_SPACE"}(AI||(AI={})),function(e){e[e.NONE=0]="NONE",e[e.SIMPLE=1]="SIMPLE",e[e.NORMAL=2]="NORMAL"}(LI||(LI={}));var qI,UI,_I=/^\s*[^\|].*?\|.*[^|]\s*$/,jI=/^\s*[^\|].*\|/,WI=/^\s*\|[^\|]+\|.+\|\s*$/,GI=/^\s*\|/,KI=/^\s*-+\s*:\s*$/,YI=/^\s*:\s*-+\s*$/,XI=/^\s*:\s*-+\s*:\s*$/,$I=/^\s*-+\s*$/;!function(e){e[e.NONE=0]="NONE",e[e.FRONT_MATTER=1]="FRONT_MATTER",e[e.FRONT_MATTER_END=2]="FRONT_MATTER_END"}(qI||(qI={})),function(e){e[e.NONE=0]="NONE",e[e.BARELINK=1]="BARELINK",e[e.FOOTREF=2]="FOOTREF",e[e.NORMAL=3]="NORMAL",e[e.FOOTNOTE=4]="FOOTNOTE",e[e.MAYBE_FOOTNOTE_URL=5]="MAYBE_FOOTNOTE_URL",e[e.BARELINK2=6]="BARELINK2",e[e.FOOTREF2=7]="FOOTREF2",e[e.INTERNAL_LINK=8]="INTERNAL_LINK",e[e.EMBED=9]="EMBED"}(UI||(UI={}));var ZI=((DI={})[UI.BARELINK]="hmd-barelink",DI[UI.BARELINK2]="hmd-barelink2",DI[UI.FOOTREF]="hmd-barelink footref",DI[UI.FOOTNOTE]="hmd-footnote line-HyperMD-footnote",DI[UI.FOOTREF2]="hmd-footref2",DI[UI.INTERNAL_LINK]="hmd-internal-link",DI[UI.EMBED]="hmd-internal-link hmd-embed",DI);function QI(e){e.hmdTable=LI.NONE,e.hmdTableColumns=[],e.hmdTableID=null,e.hmdTableCol=e.hmdTableRow=0}var JI={hr:"line-HyperMD-hr line-background-HyperMD-hr-bg hr",list1:"list-1",list2:"list-2",list3:"list-3",code:"inline-code",hashtag:"hashtag meta"};window.CodeMirror.defineMode("hypermd",(function(e,t){var n={front_matter:!0,math:!0,table:!0,toc:!0,orgModeMarkup:!0,hashtag:!0,fencedCodeBlockHighlighting:!0,name:"markdown",highlightFormatting:!0,taskLists:!0,strikethrough:!0,emoji:!1,highlight:!0,tokenTypeOverrides:JI};Object.assign(n,t),n.tokenTypeOverrides!==JI&&(n.tokenTypeOverrides=Object.assign({},JI,n.tokenTypeOverrides)),n.name="markdown";var i={htmlBlock:null},r=OI.getMode(e,n),o=m({},r);function a(e,t){var n=t.hmdInnerExitChecker(e,t),i=t.hmdInnerStyle,r=(!n||!n.skipInnerMode)&&t.hmdInnerMode.token(e,t.hmdInnerState)||"";return i&&(r+=" "+i),n?(n.style&&(r+=" "+n.style),n.endPos&&(e.pos=n.endPos),t.hmdInnerExitChecker=null,t.hmdInnerMode=null,t.hmdInnerState=null,t.hmdOverride=null):e.start===e.pos&&e.skipToEnd(),r.trim()||null}function s(e){return{token:function(t){var n=t.string.indexOf(e,t.start);return-1===n?t.skipToEnd():0===n?t.pos+=e.length:(t.pos=n,"\\"===t.string.charAt(n-1)&&t.pos++),null}}}function l(e,t){return t||(t={}),function(n,i){return n.string.substr(n.start,e.length)===e?(t.endPos=n.start+e.length,t):null}}function c(t,n,i,r){if("string"==typeof i&&(i=OI.getMode(e,i)),!(i&&"null"!==i.name||(i="endTag"in r?s(r.endTag):"function"==typeof r.fallbackMode&&r.fallbackMode())))throw new Error("no mode");n.hmdInnerExitChecker="endTag"in r?l(r.endTag):r.exitChecker,n.hmdInnerStyle=r.style,n.hmdInnerMode=i,n.hmdOverride=a,n.hmdInnerState=OI.startState(i);var o=r.style||"";return r.skipFirstToken||(o+=" "+i.token(t,n.hmdInnerState)),o.trim()}return o.startState=function(){var e=r.startState();return QI(e),e.hmdOverride=null,e.hmdInnerExitChecker=null,e.hmdInnerMode=null,e.hmdLinkType=UI.NONE,e.hmdNextMaybe=n.front_matter?qI.FRONT_MATTER:qI.NONE,e.hmdNextState=null,e.hmdNextStyle=null,e.hmdNextPos=null,e.hmdHashtag=!1,e},o.copyState=function(e){for(var t=r.copyState(e),n=0,i=["hmdLinkType","hmdNextMaybe","hmdTable","hmdTableID","hmdTableCol","hmdTableRow","hmdOverride","hmdInnerMode","hmdInnerStyle","hmdInnerExitChecker","hmdNextPos","hmdNextState","hmdNextStyle","hmdHashtag","comment","internalLink","internalEmbed","inlineFootnote","hasAlias","isAlias","mathed"];n=1)return F+n.indexOf("|")}var i=t.string.slice(F,e).indexOf("%%");return i>0?F+i:e},o.comment?t.match(/^%%/,!1)&&(y+=" comment comment-end",o.comment=!1,w=t.pos+2):t.match(/^%%/,!1)&&(y+=" comment comment-start",o.comment=!0,w=t.pos+2)}o.comment&&(y+=" comment"),v&&(o.hmdLinkType||o.image||o.linkText||!t.match(RI)&&!t.match(HI)||(y+="url",w=t.pos))}if(o.hmdNextState)t.pos=o.hmdNextPos,y+=" "+(o.hmdNextStyle||""),Object.assign(o,o.hmdNextState),o.hmdNextState=null,o.hmdNextStyle=null,o.hmdNextPos=null;else if(b){var O=r.copyState(o),B=t.pos;y+=" "+(r.token(t,O)||""),t.pos=B}else y+=" "+(r.token(t,o)||"");y.contains("formatting-task")&&(y+=" line-HyperMD-task-line"),-1!==w&&(t.pos=w),k&&(t.pos=k(t.pos)),o.hmdHashtag&&(y+=" "+n.tokenTypeOverrides.hashtag),!i.htmlBlock&&o.htmlState&&(i.htmlBlock=o.f);var N=o.f===i.htmlBlock,R=-1===o.code;g=g&&!(N||R),(v=v&&g&&!(o.code||o.indentedCode||o.linkHref))&&(d=t.current().match(BI))&&(t.pos=t.start+d.index+1);var H=t.current();if(N!==a&&(N?(y+=" hmd-html-begin",i.htmlBlock=o.f):y+=" hmd-html-end"),(u||R)&&(o.localMode&&u||(y=y.replace("inline-code","")),y+=" line-HyperMD-codeblock line-background-HyperMD-codeblock-bg hmd-codeblock",R!==u&&(R?u||(y+=" line-HyperMD-codeblock-begin line-background-HyperMD-codeblock-begin-bg"):y+=" line-HyperMD-codeblock-end line-background-HyperMD-codeblock-end-bg")),g){var V=o.hmdTable;if(p&&V)(V==LI.SIMPLE?jI:GI).test(t.string)?(o.hmdTableCol=0,o.hmdTableRow++):QI(o);if(p&&o.header&&(/^(?:---+|===+)\s*$/.test(t.string)&&o.prevLine&&o.prevLine.header?y+=" line-HyperMD-header-line line-HyperMD-header-line-"+o.header:y+=" line-HyperMD-header line-HyperMD-header-"+o.header),o.indentedCode&&(y+=" hmd-indented-code"),o.quote){if(t.match(/^\s*>/,!1)&&!t.eol()||(y+=" line-HyperMD-quote line-HyperMD-quote-"+o.quote,/^ {0,3}\>/.test(t.string)||(y+=" line-HyperMD-quote-lazy")),p&&(d=H.match(/^\s+/)))return t.pos=d[0].length,(y+=" hmd-indent-in-quote").trim();if(o.quote>h)(I=t.match(/^\[!([^\]]+)\]([+\-]?)(?:\s|$)/))&&(y+=" line-HyperMD-callout hmd-callout line-HyperMD-quote line-HyperMD-quote-"+o.quote)}var z=(o.listStack[o.listStack.length-1]||0)+3,q=p&&/^\s+$/.test(H)&&(!1!==o.list||t.indentation()<=z),U=o.list&&/formatting-list/.test(y);if(U||q&&(!1!==o.list||t.match(NI,!1))){var _=o.listStack&&o.listStack.length||0;if(q){if(t.match(NI,!1))!1===o.list&&_++;else{for(;_>0&&t.pos1){var j=H.length-1,W=y.replace("formatting-escape","escape")+" hmd-escape-char";return o.hmdOverride=function(e,t){return e.pos+=j,t.hmdOverride=null,W.trim()},y+=" hmd-escape-backslash",t.pos-=j,y}if(!y.trim()&&n.table){var G=!1;if("|"===H.charAt(0)&&(t.pos=t.start+1,H="|",G=!0),G){if(!V){_I.test(t.string)?V=LI.SIMPLE:WI.test(t.string)&&(V=LI.NORMAL);var K=void 0;if(V){var Y=t.lookAhead(1);if(V===LI.NORMAL?WI.test(Y)?Y=Y.replace(/^\s*\|/,"").replace(/\|\s*$/,""):V=LI.NONE:V===LI.SIMPLE&&(_I.test(Y)||(V=LI.NONE)),V){K=Y.split("|");for(var X=0;X":t.match("?")?J="?>":t.match("![CDATA[")&&(J="]]>"),null!=J)return c(t,o,null,{endTag:J,style:(y+" comment hmd-cdata-html").trim()})}if(n.hashtag&&v)if(o.hmdHashtag){y=y.replace(/((formatting )?formatting-em|em) /g,"");var ee=!1;if(!/formatting/.test(y)&&!/^\s*$/.test(H)){d=H.match(zI);var te=H.length-(d?d[0].length:0);te>0&&(t.backUp(te),ee=!0)}if(ee||(ee=t.eol()),ee||(ee=!zI.test(t.peek())),ee)y+=" hashtag-end "+(re="tag-"+(re=t.current()).replace(/[^_a-zA-Z0-9\-]/g,"")),o.hmdHashtag=!1}else if("#"===H&&!o.linkText&&!o.image&&(p||/^\s*$/.test(t.string.charAt(t.start-1)))){var ne=t.string.slice(t.pos).replace(/\\./g,""),ie=zI.exec(ne);if(ie&&/[^0-9]/.test(ie[0])){var re="tag-"+ie[0].replace(/[^_a-zA-Z0-9\-]/g,"");o.hmdHashtag=!0,y+=" formatting formatting-hashtag hashtag-begin "+n.tokenTypeOverrides.hashtag+" "+re}}}return y.trim()||null},o}),"hypermd"),OI.defineMIME("text/x-hypermd","hypermd");var eF=new Intl.Collator(void 0,{usage:"sort",sensitivity:"base",numeric:!0}).compare,tF=[["alphabetical","alphabeticalReverse"],["byModifiedTime","byModifiedTimeReverse"],["byCreatedTime","byCreatedTimeReverse"]],nF={alphabetical:Gk.plugins.fileExplorer.labelSortAToZ,alphabeticalReverse:Gk.plugins.fileExplorer.labelSortZToA,byModifiedTime:Gk.plugins.fileExplorer.labelSortNewToOld,byModifiedTimeReverse:Gk.plugins.fileExplorer.labelSortOldToNew,byCreatedTime:Gk.plugins.fileExplorer.labelSortCreatedNewToOld,byCreatedTimeReverse:Gk.plugins.fileExplorer.labelSortCreatedOldToNew},iF={alphabetical:function(e,t){return eF(e.basename,t.basename)},alphabeticalReverse:function(e,t){return-iF.alphabetical(e,t)},byModifiedTime:function(e,t){return t.stat.mtime-e.stat.mtime},byModifiedTimeReverse:function(e,t){return-iF.byModifiedTime(e,t)},byCreatedTime:function(e,t){return t.stat.ctime-e.stat.ctime},byCreatedTimeReverse:function(e,t){return-iF.byCreatedTime(e,t)}};function rF(e){return iF.hasOwnProperty(e)||(e="alphabetical"),iF[e]}var oF=function(){function e(e){this._children=[],this.owner=e}return e.prototype.addChild=function(e){this._children.push(e),e.parent=this.owner},e.prototype.setChildren=function(e){this.clear();for(var t=0,n=e;t0},e.prototype.first=function(){return this._children.first()},e.prototype.last=function(){return this._children.last()},e.prototype.sort=function(e){return this._children.sort(e)},Object.defineProperty(e.prototype,"children",{get:function(){return this._children},enumerable:!1,configurable:!0}),e.prototype.clear=function(){for(var e=0,t=this._children;eMath.max(i,300)/2&&this.updateVirtualDisplay(r)},e.prototype.onResize=function(){var e=this.scrollEl;if(null!==e.offsetParent){this.height=e.clientHeight;var t=e.clientWidth;t!==this.width?(this.width=t,this.invalidateAll()):this.updateVirtualDisplay()}},e.prototype.queueCompute=function(){this.queued||(this.queued=Rw(this.compute.bind(this),50))},e.prototype.computeSync=function(){for(var e=0;e<10&&!this.rootEl.info.computed;e++)this.compute()},e.prototype.compute=function(){this.queued&&(this.queued.cancel(),this.queued=null);var e=this.scrollEl,t=this.rootEl;if(t){var n=e.scrollTop;if(null!==e.offsetParent){var i={num:0,finished:!0};this._precompute(t),this._layout(t,i),this._measure(t);var r=i.finished;if(r&&aF(t))for(var o=0,a=t.vChildren.children;o=this.renderBlockSize)return t.finished=!1,!1;var i=!0,r=!1;if(aF(e)){var o=e.vChildren,a=e.childrenEl,s=e.pusherEl;if(a.parentNode){s.style.marginBottom="0";for(var l=[s],c=0,u=!0,h=0,p=o.children;h0&&(u+=t,h++)})),u/=h,this.update(n,this.getRootTop(),l,c,u),t.scrollTop!==i&&(t.scrollTop=i)},e.prototype.update=function(e,t,n,i,r){if(aF(e)){var o=e.vChildren,a=e.childrenEl,s=e.info,l=e.pusherEl;if(a.parentNode){if(s.hidden)return;var c=this.setWidth,u=0,h=0,p=[l],d=!1,f=0;t+=s.height;for(var m=function(e){var o=0;hF(e,(function(e){return o+=e.info.hidden?0:e.info.height||r})),h+=o;var a=t+o;c&&(f=Math.max(f,e.info.width)),d=!1,ai||(p.push(e.el),g.update(e,t,n,i,r),d=!0),t=a},g=this,v=0,y=o.children;vo&&(i.scrollTop=n-i.clientHeight),this.updateVirtualDisplay()}},e.prototype.findElementTop=function(e,t,n){if(e===t)return n;if(aF(t)){var i=t.vChildren,r=t.childrenEl,o=t.info;if(r.parentNode){n+=o.childTop;for(var a=function(t){var i=s.findElementTop(e,t,n);if(null!==i)return{value:i};var r=0;hF(t,(function(e){return r+=e.info.hidden?0:e.info.height})),n+=r},s=this,l=0,c=i.children;li/8&&this.updateVirtualDisplay()},e.prototype.updateVirtualDisplay=function(){var e=this,t=e.showAll,n=e.scrollEl,i=e.containerEl,r=e.sizerEl,o=e.pusherEl,a=e.elements,s=e.nodeInfos;if(t){var l=[];l.push(o);for(var c=0,u=a;cg?(h.parentNode===r&&h.detach()):(w.push(h)),y=M}r.setChildrenInPlace(w),r.style.minHeight=y+"px",o.style.marginBottom=v+"px"},e.prototype.rerender=function(){for(var e=this,t=e.scrollEl,n=e.sizerEl,i=e.pusherEl,r=e.elements,o=e.nodeInfos,a=t.scrollTop,s=[],l=!1,c=[i],u=0,h=r;u=t)break;var l=a[1];lt&&(l=t),s>r&&i(!1,r,s),i(!0,s,l),r=l)}r0&&l.createDiv("tree-item-flair-outer").createSpan("tree-item-flair").setText(String(i.content.length))}this.childrenEl=s.createDiv("search-result-file-matches");var v=this.app.dragManager;v.handleDrag(s,(function(e){return v.dragFile(e,a.file)}))}return e.prototype.renderContentMatches=function(){var e=this,t=this,n=t.app,i=t.file,r=t.result,o=t.content,a=t.collapsible,s=t.extraContext,l=t.separateMatches,c=t.collapseEl;this.vChildren.clear(),this.showTitle&&(c.style.visibility="hidden");var u=!1,h=function(t,n,i,r){u=!0;var o=0,a=function(a,s,c,u){var h=o+1;if(!l)for(;h=s)break;if(p[1]>s){s=p[1],h++;break}h++}var d=t.slice(o,h),f=new gF(e,n,i,a,s,d,r);f.onMatchRender=e.onMatchRender,f.render(c,u),e.vChildren.addChild(f),o=h};if(s)for(;o0&&h(i,e.text,d.caches[t]||{},(function(e){e.match.nodeId=t}))}},m=0,g=p;m0&&h(y,o,v)}this.showTitle&&a&&u&&(c.style.visibility=""),this.invalidate()},e.prototype.getMatchMinimalPositions=function(e,t){for(var n=100,i=t[0]-1,r=0;r=0;){if("\n"===e.charAt(i))break;i--,r++}i++;for(var o=r===n,a=t[1],s=0;s=o.position.start.offset&&t[1]<=o.position.end.offset){var a=o,s=u+1,l=new Set;for(l.add(a.position.start.line);s=h.position.start.offset&&t[1]<=h.position.end.offset)return[h.position.start.offset,h.position.end.offset]}for(var p=t[0],d=p-1e3;p>0&&p>d&&10!==e.charCodeAt(p-1);)p--;for(var f=t[0],m=f+1e3;f0&&w>d&&(dF.lastIndex=w,!dF.test(e));)w--;for(;10===e.charCodeAt(w)&&w0)r={scroll:xe(this.content,n[0][0])};this.app.workspace.trigger("hover-link",{event:e,source:"search",hoverParent:this.parentDom,targetEl:t,linktext:i,state:r})}},e.prototype.onResultContextMenu=function(e){var t=(new KL).addSections(["title","open","action","view","info","","danger"]);this.app.workspace.handleLinkContextMenu(t,this.file.path,"")&&(e.preventDefault(),t.showAtMouseEvent(e))},e.prototype.setCollapse=function(e,t){return v(this,void 0,void 0,(function(){var n,i,r;return y(this,(function(o){switch(o.label){case 0:return this.collapsed===e?[2]:(this.collapsed=e,i=(n=this).containerEl,r=n.childrenEl,i.toggleClass("is-collapsed",e),[4,Ew(r,i,e,t)]);case 1:return o.sent(),this.invalidate(),[2]}}))}))},e.prototype.setCollapsible=function(e){this.collapsible!==e&&(this.collapsible=e,this.collapseEl.style.visibility=e?"":"hidden")},e.prototype.setExtraContext=function(e){this.extraContext!==e&&(this.extraContext=e,this.renderContentMatches())},e.prototype.invalidate=function(){this.parentDom.infinityScroll.invalidate(this,!0)},e}(),gF=function(){function e(e,t,n,i,r,o,a){this.info={height:0,width:0,childTop:0,computed:!1,queued:!1,hidden:!1,next:!1},this.onMatchRender=null,this.parentDom=e,this.content=t,this.cache=n,this.start=i,this.end=r,this.matches=o,this.mutateEState=a;var s=this.el=createDiv("search-result-file-match");Vw(s),s.onClickEvent(this.onResultClick.bind(this)),s.addEventListener("mouseover",this.onFocusEnter.bind(this)),s.addEventListener("mouseout",this.onFocusExit.bind(this)),s.addEventListener("contextmenu",(function(t){return e.onResultContextMenu(t)}))}return e.prototype.onResultClick=function(e){var t;if(!(e.instanceOf(MouseEvent)&&0!==e.button&&1!==e.button||e.defaultPrevented)){e.preventDefault();var n={match:{content:this.content,matches:this.matches}};null===(t=this.mutateEState)||void 0===t||t.call(this,n);var i=this.parentDom,r=i.app,o=i.file;r.workspace.getLeaf(pD.isModEvent(e)).openFile(o,{active:!0,eState:n})}},e.prototype.onFocusExit=function(e){e&&e.instanceOf(MouseEvent)&&!Hw(e,this.el)||this.el.classList.contains("has-focus")||(this.showMoreBeforeEl&&(this.showMoreBeforeEl.detach(),this.showMoreBeforeEl=null),this.showMoreAfterEl&&(this.showMoreAfterEl.detach(),this.showMoreAfterEl=null))},e.prototype.onFocusEnter=function(e){var t=this;if(e&&e.instanceOf(MouseEvent)){if(!Hw(e,this.el))return;this.parentDom.onResultMouseover(e,this.el,this.matches)}this.showMoreBeforeEl&&this.showMoreBeforeEl.detach(),this.showMoreAfterEl&&this.showMoreAfterEl.detach(),this.start>0&&(this.showMoreBeforeEl=this.el.createDiv("search-result-hover-button mod-top"),oT(this.showMoreBeforeEl,"lucide-chevron-up"),tD(this.showMoreBeforeEl,Gk.plugins.search.labelMoreContext(),{placement:"top"}),this.showMoreBeforeEl.addEventListener("click",(function(e){e.preventDefault(),t.showMoreBefore()})));var n=this.content.length;this.end0;){e--;var t=this.getPrevPos(e);if(te){e=n;break}}this.end=e,this.render(),this.onFocusEnter()},e.prototype.getPrevPos=function(e){var t=this.content,n=this.cache,i=n.listItems,r=n.sections;if(i){var o=i[$D(i,e,!0)];if(o){var a=o.position,s=a.start,l=a.end;if(s.offset-s.col<=e&&l.offset>=e)return s.offset-s.col}}if(r){var c=r[$D(r,e,!0)];if(c&&"list"!==c.type){var u=c.position;s=u.start,l=u.end;if(s.offset-s.col<=e&&l.offset>=e)return s.offset-s.col}}for(var h=e;h>0&&10!==t.charCodeAt(h-1);)h--;return h},e.prototype.getNextPos=function(e){var t=this.content,n=this.cache,i=n.listItems,r=n.sections;if(i){var o=i[d=$D(i,e,!0)];if(o){var a=o.position,s=a.start,l=a.end;if(s.offset-s.col<=e&&l.offset>=e){var c=o,u=d+1,h=new Set;for(h.add(c.position.start.line);u=e)return l.offset}}for(var g=e;g0&&(h.highlightRanges=f)}this.highlightRanges=l,n.toggleClass("mod-no-match",0===l.length)}else this.highlightRanges=null}},e.prototype.onSearchInput=function(){this.updateQuery(),this.selectRange(0)},e.prototype.findNext=function(){this.selectRange(this.selectedRange+1)},e.prototype.findPrevious=function(){this.selectRange(this.selectedRange-1)},e.prototype.selectRange=function(e){var t=this.highlightRanges;if(t&&0!==t.length){e>t.length-1&&(e=0),e<0&&(e=t.length-1);var n=t[this.selectedRange];n&&(n.active=!1),this.selectedRange=e;var i=t[this.selectedRange];i.active=!0,this.renderer.selectRange(i)}},e.prototype.getQuery=function(){return this.searchInputEl.value},e.prototype.onEnter=function(e){!e.isComposing&&this.searchInputEl.isActiveElement()&&this.findNext()},e.prototype.onShiftEnter=function(e){!e.isComposing&&this.searchInputEl.isActiveElement()&&this.findPrevious()},e}(),wF=/A-Za-z\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC/,kF=/\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u4E00-\u9FD5\uAC00-\uD7A3\uA960-\uA97C\uD7B0-\uD7C6/,CF=wF.source+/0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19/.source,xF=new RegExp("[".concat(CF,"]")),EF=function(e){if(0===e.length)return"";var t=e.charAt(0),n=e.charAt(e.length-1),i=xF.test(t),r=xF.test(n);return(i?"(?:^|[^".concat(CF,"])"):"")+"(".concat(ye(e),")")+(r?"(?![".concat(CF,"])"):"()")},SF=function(){},MF=function(){function e(e,t,n,i){this.cache=null,this.data=null,this.strings=e,this.original=t,this.keys=n,this.caseSensitive=i}return e.prototype.clone=function(){var t=new e(Object.assign({},this.strings),this.original,this.keys.slice(),this.caseSensitive);return t.cache=this.cache,this.data&&(t.data=new Map(this.data)),t},e.prototype.setData=function(e,t){this.data||(this.data=new Map),this.data.set(e,t)},e.prototype.getData=function(e){return this.data?this.data.get(e):null},e.prototype.deleteData=function(e){this.data&&(this.data.delete(e),0===this.data.size&&(this.data=null))},e}();function TF(e,t){for(var n in t)if(t.hasOwnProperty(n)){var i=t[n];e.hasOwnProperty(n)?e[n]=e[n].concat(i):e[n]=i}}var DF=function(){},AF=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return f(t,e),t.prototype.match=function(e){for(var t={},n=0,i=e.keys;n0&&(a[c]=h,o=!0)}}return o?a:null}var OF=function(e){function t(t){var n=e.call(this)||this;return n.regex=t,n}return f(t,e),t.prototype.match=function(e){if(""!==this.regex)return FF(e,this.regex,!1)},t.prototype.getInfo=function(){return Gk.plugins.search.labelMatchRegex()+"/".concat(this.regex,"/")},t.prototype.requiredInputs=function(){return{content:!0}},t}(DF),BF=function(e){function t(t){var n=e.call(this)||this;return n.text=t,n.regex=EF(t),n}return f(t,e),t.prototype.match=function(e){if(""!==this.text)return FF(e,this.regex,!0)},t.prototype.getInfo=function(){return Gk.plugins.search.labelMatchExactText()+'"'.concat(this.text,'"')},t.prototype.requiredInputs=function(){return{content:!0}},t}(DF),NF=function(e){function t(t){var n=e.call(this,ye(t))||this;return n.text=t,n}return f(t,e),t.prototype.getInfo=function(){return Gk.plugins.search.labelMatchText()+'"'.concat(this.text,'"')},t}(OF),RF=function(e){function t(t){var n=e.call(this)||this;return n.matchers=[],n.matchers=t,n}return f(t,e),t.prototype.requiredInputs=function(){for(var e={},t=0,n=this.matchers;t0&&n.push({start:0,end:a,children:0});for(var s=o?o.position.start.offset:t,l=0,c=i+1;cr.level;c++)l++;n.push({start:a,end:s,children:l})}return n}(i,l.length),a=0,s=o.length;return this.splitContentMatch(e,(function(e,t){for(var n=a;n=0){var c=String(l);a.html=a.html.replace(/
  • /g,(function(e,t,n,i,r,a){return i===c&&a===c?'
  • '):e}))}setTimeout((function(){n.checked=s;var e=n.parentNode;e&&e.instanceOf(HTMLLIElement)&&(e.setAttr("data-task",o.char),e.toggleClass("is-checked",s))}),0)}this.edit(o.text)}},t.toggleCheckbox=function(e,t){for(var n=0,i=0;n0)for(var g=0,v=m;g0?[4,Promise.all(l)]:[3,2];case 1:f.sent(),f.label=2;case 2:return[2]}}))}))},t}(vT);function lO(e,t,n,i){var r=createDiv("internal-query");n.replaceWith(r),r.createDiv("internal-query-header",(function(e){e.createSpan("internal-query-header-icon",(function(e){return oT(e,"lucide-search")})),e.createSpan({cls:"internal-query-header-title",text:t})}));var o=r.createDiv("search-result-container");return new hO(e,o,t,i)}var cO=function(e){function t(t,n,i){var r=e.call(this)||this;return r.hoverPopover=null,r.app=t.app,r.containerEl=t.containerEl,r.containerEl.addClass("markdown-embed"),r.file=n,r.subpath=i,t.showInline&&(r.containerEl.addClass("inline-embed"),r.headerEl=r.containerEl.createDiv({cls:"markdown-embed-title",prepend:!0})),r}return f(t,e),t.prototype.loadFile=function(){var e;return v(this,void 0,Promise,(function(){var t,n,i,r,o,a,s,l,c,u,h,p,d,f,m=this;return y(this,(function(g){switch(g.label){case 0:return n=(t=this).app,i=t.file,r=t.subpath,o=n.metadataCache.getFileCache(i),a=aA(o,r),[4,n.vault.cachedRead(i)];case 1:return s=g.sent(),a&&(s=sA(s,o,a).content),l=LM(s),c=FM(l),u=OM(l),h=WM(u),r||null===(e=this.headerEl)||void 0===e||e.setText(i.basename),(p=this.containerEl.createDiv("markdown-preview-view markdown-rendered")).toggleClass("rtl",n.vault.getConfig("rightToLeft")),p.toggleClass("show-indentation-guide",n.vault.getConfig("showIndentGuide")),p.appendChild(h),d=new aO(this),CT.registerDomEvents(p,d),f=[],uO.postProcess(this.app,{docId:Ce(16),sourcePath:i.path,frontmatter:c,promises:f,addChild:function(e){return m.addChild(e)},getSectionInfo:function(){return null},containerEl:p,el:p,displayMode:!0}),f.length>0?[4,Promise.all(f)]:[3,3];case 2:g.sent(),g.label=3;case 3:return[2]}}))}))},Object.defineProperty(t.prototype,"path",{get:function(){var e;return(null===(e=this.file)||void 0===e?void 0:e.path)||""},enumerable:!1,configurable:!0}),t}(GM),uO=function(e){function t(t){var n=this,i=t.contentEl.createDiv("markdown-reading-view");i.style.width="100%",i.style.height="100%",(n=e.call(this,t.app,i)||this).search=null,n.type="preview",n.view=t;var r=n.renderer;return r.addBottomPadding=!0,n.updateOptions(),n.onResize(),n.onFoldChange=Aw((function(){return n.view.onMarkdownFold()}),500),r.addHeader(),r.addFooter(),n}return f(t,e),Object.defineProperty(t.prototype,"file",{get:function(){return this.view.file},enumerable:!1,configurable:!0}),t.prototype.show=function(){this.renderer.header.el.appendChild(this.view.inlineTitleEl),this.renderer.footer.el.appendChild(this.view.backlinksEl),this.containerEl.show(),this.search&&(this.view.scope=this.search.scope)},t.prototype.hide=function(){this.containerEl.hide(),this.search&&(this.view.scope=null)},t.prototype.get=function(){return this.renderer.text},t.prototype.set=function(e,t){t&&this.clear(),this.renderer.set(e)},t.prototype.clear=function(){this.renderer.clear()},t.prototype.beforeUnload=function(){},t.prototype.rerender=function(e){this.renderer.rerender(e)},t.prototype.getEphemeralState=function(e){},t.prototype.setEphemeralState=function(e){var t=this;if(e.focus){var n=this.renderer.previewEl;n.tabIndex=-1,n.focus()}e.hasOwnProperty("scroll")&&this.renderer.applyScrollDelayed(e.scroll);var i=function(){return v(t,void 0,void 0,(function(){var e;return y(this,(function(t){switch(t.label){case 0:e=0,t.label=1;case 1:return e<5?[4,this.view.onMarkdownScroll()]:[3,5];case 2:return t.sent()?[2]:[4,sleep(100*(e+1))];case 3:t.sent(),t.label=4;case 4:return e++,[3,1];case 5:return[2]}}))}))};if(void 0!==e.line&&e.line>=0&&this.renderer.applyScrollDelayed(e.line,{highlight:!0},i),void 0!==e.match){var r=e.match,o=r.content,a=r.matches;if(a.length>0){var s=xe(o,a[0][0]);this.renderer.applyScrollDelayed(s,{center:!0,highlight:!0},i)}}},t.prototype.getScroll=function(){return this.renderer.getScroll()},t.prototype.applyScroll=function(e){this.renderer.applyScroll(e)},t.prototype.getFoldInfo=function(){return this.renderer.getFoldInfo()},t.prototype.applyFoldInfo=function(e){this.renderer.applyFoldInfo(e)},t.prototype.onResize=function(){this.renderer.onResize(),null!==this.view.scroll&&this.renderer.applyScrollDelayed(this.view.scroll)},t.prototype.showSearch=function(){var e=this;if(!this.search){var t=this.search=new bF(this.app,this.renderer,this.containerEl,(function(){e.search=null,e.view.scope=null}));this.view.scope=t.scope}},t.prototype.updateOptions=function(){var e=this.app,t=this.renderer,n=e.vault,i=t.previewEl,r=n.getConfig("readableLineLength");i.toggleClass("is-readable-line-width",r);var o=n.getConfig("foldHeading");i.toggleClass("allow-fold-headings",o);var a=n.getConfig("foldIndent"),s=n.getConfig("showIndentGuide");i.toggleClass("show-indentation-guide",s),i.toggleClass("allow-fold-lists",a),i.toggleClass("rtl",n.getConfig("rightToLeft")),o||t.unfoldAllHeadings(),a||t.unfoldAllLists(),i.toggleClass("show-frontmatter",n.getConfig("showFrontmatter"));var l=n.getConfig("tabSize");i.style.tabSize=String(l),MM.globalOptions.breaks=!n.getConfig("strictLineBreaks"),this.rerender()},t.prototype.edit=function(e){var t=this;this.renderer.set(e),this.view.triggerQuickPreview(),v(t,void 0,void 0,(function(){return y(this,(function(e){switch(e.label){case 0:return[4,this.view.save()];case 1:return e.sent(),[2]}}))}))},t.prototype.onScroll=function(){Date.now()-this.renderer.lastRender<100||this.view.onMarkdownScroll()},t.prototype.onRenderComplete=function(){e.prototype.onRenderComplete.call(this),this.search&&null===this.search.highlightRanges&&this.search.updateQuery()},t.prototype.foldAll=function(){var e=this.app.vault,t=e.getConfig("foldHeading"),n=e.getConfig("foldIndent");t&&this.renderer.foldAllHeadings(),n&&this.renderer.foldAllLists()},t.prototype.unfoldAll=function(){var e=this.app.vault,t=e.getConfig("foldHeading"),n=e.getConfig("foldIndent");t&&this.renderer.unfoldAllHeadings(),n&&this.renderer.unfoldAllLists()},t.prototype.getSelection=function(){return window.getSelection().toString()},t}(sO),hO=function(e){function t(t,n,i,r){var o=e.call(this,n)||this;return o.searchQuery=null,o.app=t,o.query=i,o.sourcePath=r,o.dom=new vF(t,n,Gk.plugins.search.labelNoMatches()),o.queue=new yF(t,o.dom),o.addChild(o.queue),o}return f(t,e),t.prototype.onload=function(){var e=this,t=e.app,n=e.dom,i=e.sourcePath;n.emptyResults();try{var r=new rO(t,this.query.replace(/\r?\n/g," "),!1);if(!r.matcher)return;this.searchQuery=r;var o=this.queue.start();oO(t,r.requiredInputs,o,(function(e,t){e.path===i&&(t=t.replace(/```query([\s\S]*?)(```|$)/g,(function(e){return e.replace(/./g," ")})));var o=r.match(e,t);o?n.addResult(e,o,t).renderContentMatches():n.removeResult(e)}))}catch(e){console.log(e)}},t.prototype.onResize=function(){this.dom.onResize()},t}(vT),pO=new Set(["Alt-ArrowUp","Shift-Alt-ArrowUp","Alt-ArrowDown","Shift-Alt-ArrowDown","Alt-l","Alt-v"]),dO=Iv.filter((function(e){return!pO.has(e.key)})),fO=function(e,t){var n=t.text.search(/\S/);return-1===n?-1:Ti(t.text.substr(0,n),e.facet(ci.tabSize))},mO=_h.of((function(e,t,n){try{var i=e.doc.lineAt(t),r=fO(e,i);if(r<0)return;for(var o=null,a=i.number+1,s=e.doc.lines;a<=s;++a){var l=e.doc.line(a),c=fO(e,l);if(-1==c);else{if(!(c>r))break;o=l}}if(o)return{from:n,to:o.to}}catch(e){console.error(e)}return null})),gO=_h.of((function(e,t,n){var i=ch(e);function r(e){if(i.length=o.to&&r(o)?"="==o.text[0]?1:2:100}try{var a=e.doc.lines,s=e.doc.lineAt(t);if(s.number===a)return null;var l=o(s);if(100===l)return null;for(var c=e.doc.line(s.number+1),u=s.to;c&&!(o(c)<=l)&&(u=c.to,c.number!==a);)c=e.doc.line(c.number+1);return u===s.to?null:{from:s.to,to:u}}catch(e){console.error(e)}return null})),vO=_h.of((function(e,t,n){var i=e.doc.lineAt(t);if("---"===i.text){for(var r=i.number-1;r>0;r--)if(e.doc.line(r).text.trim())return;for(var o=e.doc.lines,a=i.number+1;a<=o&&"---"!==e.doc.line(a).text;)a++;if(!(a>o))return{from:t+3,to:e.doc.line(a).to}}})),yO=function(e){for(var t=e.state,n=[],i=1;i<=t.doc.lines;i++){var r=t.doc.line(i),o=Gh(t,r.from,r.to);o&&n.push(Yh.of(o))}for(var a=0;an&&(i.empty||i.to>a.from)&&(t(a,r,i),n=a.number),o=a.to+1}var s=e.changes(r);return{changes:r,range:bn.range(s.mapPos(i.anchor,1),s.mapPos(i.head,1))}}))}var wO=/^[\s>]+/,kO=function(e){var t=e.state,n=e.dispatch;return!t.readOnly&&(n(t.update(bO(t,(function(e,n){var i=e.from,r=e.text.match(wO);if(r){var o=r[0].lastIndexOf(">");-1!==o&&(" "===r[0].charAt(o+1)&&o++,i=i+o+1)}n.push({from:i,insert:t.facet(Mh)})})),{userEvent:"input.indent"})),!0)},CO=function(e){var t=e.state,n=e.dispatch;return!t.readOnly&&(n(t.update(bO(t,(function(e,n){var i=e.text.match(wO);if(i){var r=i[0],o=r.indexOf(">");if(o>0)n.push({from:e.from,to:e.from+o,insert:""});else if("> "!==r){var a=r.lastIndexOf(">");-1!==a&&" "===r.charAt(a+1)&&a++;var s=a+1,l=r.substr(s);if(l){for(var c=Ti(l,t.tabSize),u=0,h=Dh(t,Math.max(0,c-Th(t)));u=s?bn.range(l.from,c.to):bn.range(l.to,c.from);return o?i.addRange(u):bn.create([u])},update:function(e){n=e.changes.mapPos(n),i=i.map(e.changes)}}})),LO=new Nn,PO=function(e){return function(t){for(var n=t.state,i=n.doc,r=n.selection,o=[],a=0,s=r.ranges;a=t.lines?"":t.line(e+1).text},t.prototype.lineCount=function(){return this.cm.state.doc.lines},t.prototype.lastLine=function(){return this.cm.state.doc.lines-1},t.prototype.getSelection=function(){var e=this.cm,t=e.state.selection.main;return e.state.doc.sliceString(t.from,t.to)},t.prototype.getRange=function(e,t){var n=this.cm,i=n.state.doc;return n.state.doc.sliceString(SL(i,e),SL(i,t))},t.prototype.replaceSelection=function(e,t){var n=this.cm,i=n.state.replaceSelection(e);i.userEvent=t,n.dispatch(i)},t.prototype.replaceRange=function(e,t,n,i){var r=this.cm,o=r.state.doc,a=SL(o,t),s=n?SL(o,n):a;r.dispatch({changes:{from:a,to:s,insert:e},scrollIntoView:!0,userEvent:i})},t.prototype.getCursor=function(e){void 0===e&&(e="head");var t=this.cm,n=t.state.selection.main,i=t.state.doc;switch(e){case"from":return ML(i,n.from);case"to":return ML(i,n.to);case"anchor":return ML(i,n.anchor);case"head":return ML(i,n.head)}return null},t.prototype.listSelections=function(){for(var e=this.cm,t=e.state.selection.ranges,n=e.state.doc,i=[],r=0,o=t;r0){var m=hn.of(c,s.length,a.state.facet(ci.lineSeparator));l.changes=[m],(o||r)&&(s=m.apply(s))}else l.changes=c;if(o)l.selection=bn.create(o.map((function(e){var t=SL(s,e.from),n=e.to?SL(s,e.to):t;return bn.range(t,n)})));else if(r){d=SL(s,r.from),f=r.to?SL(s,r.to):d;l.selection={anchor:d,head:f}}l.userEvent=t,this.cm.dispatch(l)},t.prototype.wordAt=function(e){var t=this.cm.state.doc,n=this.cm.state.wordAt(SL(t,e));return n?{from:ML(t,n.from),to:ML(t,n.to)}:null},t.prototype.posToOffset=function(e){return SL(this.cm.state.doc,e)},t.prototype.offsetToPos=function(e){return ML(this.cm.state.doc,e)},t.prototype.undo=function(){fm(this.cm)},t.prototype.redo=function(){mm(this.cm)},t.prototype.coordsAtPos=function(e,t){var n=this.cm,i=n.coordsAtPos(SL(n.state.doc,e)),r={top:i.top,left:i.left,bottom:i.bottom,right:i.right};if(t){var o=n.scrollDOM.getBoundingClientRect(),a=o.left,s=o.top;a-=n.scrollDOM.scrollLeft,s-=n.scrollDOM.scrollTop,r.top-=s,r.bottom-=s,r.left-=a,r.right-=a}return r},t.prototype.posAtCoords=function(e,t){var n=this.cm,i=n.posAtCoords({x:e,y:t},!1);return null===i?null:ML(n.state.doc,i)},t.prototype.addHighlights=function(e,t,n,i){var r=this.cm,o=[],a=[],s=xL.get(t);s||(s=jr.mark({class:t}),xL.set(t,s));for(var l=r.state.doc,c=Qh(r.state),u=function(e){var t=SL(l,e.from),n=SL(l,e.to);a.push(s.range(t,n)),i&&c.between(t,n,(function(e,i){n!==e&&t!==i&&o.push(Xh.of({from:e,to:i}))}))},h=0,p=e;h0;for(var n=xL.get(e),i=t.iter();i.value;){if(i.value===n)return!0;i.next()}return!1},t.prototype.getAllFoldableLines=function(){for(var e=this.cm.state,t=[],n=1;n<=e.doc.lines;n++){var i=e.doc.line(n),r=Gh(this.cm.state,i.from,i.to);r&&t.push(r)}return t},t.prototype.getFoldOffsets=function(){for(var e=Qh(this.cm.state),t=new Set,n=e.iter();n.value;)t.add(n.from),n.next();return t},t.prototype.foldLess=function(){for(var e=this.cm.state.doc,t=this.getFoldOffsets(),n=this.getAllFoldableLines(),i=[],r=function(r){for(var o=e.lineAt(r.to).to,a={from:r.from,to:o},s=0,l=n.filter((function(e){return TL(a,e.from,e.to)}));s0&&this.cm.dispatch({effects:i.map((function(e){return Xh.of(e)}))})},t.prototype.foldMore=function(){for(var e=this.getFoldOffsets(),t=this.getAllFoldableLines(),n=[],i=function(i){for(var r=t.filter((function(e){return TL(i,e.from,e.to)})),o=r.length-1;o>=0;o--){var a=r[o];if(!e.has(a.from)){n.push(a);break}}},r=0,o=this.cm.state.selection.ranges;r0&&this.cm.dispatch({effects:n.map((function(e){return Yh.of(e)}))})},t.prototype.searchCursor=function(e){var t=this.cm,n=this,i=function(n,i){return new xy(t.state.doc,e,n,i,(function(e){return e.toLowerCase()}))},r=t.state.selection.main.from,o=t.state.selection.main.to;function a(t,n){for(var r=n;;){for(var o=Math.max(t,r-1e4-e.length),a=i(o,r),s=null;!a.nextOverlapping().done;)s=a.value;if(s)return s;if(o==t)return null;r-=1e4}}var s=null;return{current:function(){return s},findPrevious:function(){s=null;var e=a(0,r)||a(r,t.state.doc.length);if(!e)return null;var n=t.state.doc;return r=e.from,o=e.to,s={from:ML(n,e.from),to:ML(n,e.to)}},findNext:function(){var e=i(o,void 0).nextOverlapping();if(e.done&&(e=i(0,o).nextOverlapping()),e.done)return s=null;var n=e.value,a=t.state.doc;return r=n.from,o=n.to,s={from:ML(a,n.from),to:ML(a,n.to)}},replace:function(e,t){var i=this.current();i&&n.replaceRange(e,i.from,i.to,t)},findAll:function(){for(var e=i(),n=[],r=t.state.doc;!e.next().done;){var o=e.value;n.push({from:ML(r,o.from),to:ML(r,o.to)})}return n},replaceAll:function(e,t){var i=this.findAll().map((function(t){return{from:t.from,to:t.to,text:e}}));n.transaction({changes:i},t)}}},t.prototype.getClickableTokenAt=function(e){if(!e)return null;var t=this.cm,n=t.state.doc,i=[],r=n.line(e.line+1),o=ch(t.state),a=r.from;o.iterate({from:r.from,to:r.to,enter:function(e){var t=e.type,n=e.from,r=e.to,o=t.prop(Kp);o&&(a=s){l=c;break}}if(!(l<0)){var h=function(e){return n.sliceString(e.from,e.to)},p=i[l],d=p.type,f=d.split(" "),m=h(p),g="hmd-internal-link",v=f.contains(g),y=f.contains("formatting-link")&&["[[","]]"].contains(m);if(v||y){for(var b=l-1;b>=0;){var w=i[b].type;if(!w||!w.contains(g))break;b--}for(var k=l+1;kS&&(S=M.to))}return{type:"internal-link",text:fM(x),start:ML(n,E),end:ML(n,S)}}if(f.contains("link")){for(var T=l+1;T-1&&TS&&(S=F.to);else{if(!(ch&&d>h&&l.line(p+1).text===c[d];)p--,d--;var f={line:h,ch:0},m={line:p,ch:l.line(p+1).length},g=c.slice(h,d+1).join("\n");h===Math.min(u,c.length)&&(f={line:h-1,ch:l.line(h).length},c.length>u&&(g="\n"+g)),n.dispatch({changes:{from:SL(l,f),to:SL(l,m),insert:g},userEvent:"set"}),this.isScrolling=!0}},t.prototype.saveHistory=function(){var e=this.path;if(e)try{var t=this.cm.state,n=t.field(pm);if(n){var i=pm.spec.toJSON(n,t),r=function(e){if(e&&Array.isArray(e))for(var t=0,n=e;t20&&NO.shift()}}catch(e){console.error(e)}},t.prototype.reinit=function(){this.cm.setRoot(this.editorEl.doc),this.onResize()},t.prototype.reparent=function(e){this.containerEl=e,e.appendChild(this.editorEl),this.reinit()},t.prototype.show=function(){this.editorEl.show(),this.isVisible=!0},t.prototype.hide=function(){this.editorEl.hide(),this.editorSuggest.close(),this.search.hide(),this.isVisible=!1},t.prototype.clear=function(){this.cleanupLivePreview&&(this.cleanupLivePreview(),this.cleanupLivePreview=null),this.livePreviewPlugin=null;var e=ci.create({extensions:[this.getLocalExtensions(),OO.of(this.getDynamicExtensions()),FO]});this.cm.setState(e)},t.prototype.destroy=function(){this.localExtensions=null,this.cleanupLivePreview&&(this.cleanupLivePreview(),this.cleanupLivePreview=null),this.livePreviewPlugin=null,this.cm.setState(ci.create({})),this.cm.destroy(),this.editorSuggest.close(),this.scope&&this.app.keymap.popScope(this.scope),$w.isMobile&&this.app.mobileToolbar.hide()},t.prototype.getEditorRange=function(){var e=this.cm,t=e.state.doc,n=ML(t,e.state.selection.main.anchor),i=ML(t,e.state.selection.main.head);return{from:{line:n.line,ch:n.ch},to:{line:i.line,ch:i.ch}}},t.prototype.getSelection=function(){return this.editor.getSelection()},t.prototype.setState=function(e){var t=this.editor,n=e.cursor,i=t.getScrollInfo();n&&n.from?($w.isDesktop&&t.focus(),t.setSelection(n.from,n.to),t.scrollTo(i.left,i.top)):!e.focus||$w.isMobile&&!e.focusOnMobile||(t.focus(),t.scrollTo(i.left,i.top),$w.isMobileApp&&uw&&uw.show()),e.hasOwnProperty("scroll")&&this.applyScroll(e.scroll)},t.prototype.setHighlight=function(e){var t=this.editor;if(void 0!==e.startLoc&&void 0!==e.endLoc){var n=e.startLoc,i=e.endLoc,r={line:n.line,ch:n.col},o=i?{line:i.line,ch:i.col}:{line:t.lastLine(),ch:t.getLine(t.lastLine()).length};this.highlightSearchMatches([{from:r,to:o}]),this.isScrolling=!0,this.onScroll()}else if(void 0!==e.line&&e.line>=0){var a=e.line;r={line:a,ch:0},o={line:a,ch:t.getLine(a).length};t.setSelection(o,o),this.highlightSearchMatches([{from:r,to:o}]),this.isScrolling=!0,this.onScroll()}else if(void 0!==e.match){var s=e.match,l=qL(s.content,s.matches);this.highlightSearchMatches(l),this.isScrolling=!0,this.onScroll()}},t.prototype.highlightSearchMatches=function(e,t,n,i){void 0===t&&(t=!0),void 0===n&&(n=!0),void 0===i&&(i=!0);var r=this.editor;if(0!==e.length){r.addHighlights(e,"is-flashing",i,!0);var o=e[0];n&&r.setCursor(o.from),t&&r.scrollIntoView({from:o.to,to:o.from},!0)}else r.removeHighlights("is-flashing")},t.prototype.updateEvent=function(){var e=this,t=!1,n=Aw((function(){e.editorSuggest.trigger(e.editor,e.file,t),t=!1}),50),i=Aw((function(){e.editor.expandText()}),10),r=Aw(this.updateLinkPopup.bind(this),300);return function(o){var a=o.transactions,s=o.docChanged&&a.some((function(e){return"set"!==e.annotation(Qn.userEvent)}));s&&(t=!0,i()),(o.docChanged||o.selectionSet)&&(n(),r()),e.onUpdate(o,s)}},t.prototype.getLocalExtensions=function(){var e=this,t=this.localExtensions;if(!t){(t=this.localExtensions=[]).push(SO.init((function(){return e.cm}))),t.push(TO.init((function(){return e.owner})));var n={key:"Tab",run:function(){return e.editor.indentList(),!0},shift:function(){return e.editor.unindentList(),!0}},i=function(){return e.editorSuggest.isShowingSuggestion()};t.push(Bs.of([{key:"ArrowUp",run:i,preventDefault:!0},{key:"ArrowDown",run:i,preventDefault:!0},{key:"Enter",run:i,preventDefault:!0},{key:"Tab",run:i,preventDefault:!0},{key:"Enter",run:function(){return!!e.app.vault.getConfig("smartIndentList")&&(e.editor.newlineAndIndentContinueMarkdownList(),!0)},shift:function(){return!!e.app.vault.getConfig("smartIndentList")&&(e.editor.newlineAndIndentOnly(),!0)},preventDefault:!0},{key:"Escape",run:function(){return e.editor.removeHighlights(),!1},preventDefault:!0},n])),t.push(Ts.updateListener.of(this.updateEvent())),t.push(Ts.domEventHandlers({dragstart:function(e){return e.dataTransfer.clearData("text/html")},dragover:function(t){return e.clipboardManager.handleDragOver(t)},drop:function(t){return e.clipboardManager.handleDrop(t)},copy:function(t){e.editor.getSelection()||e.editor.getLine(e.editor.getCursor().line)||t.preventDefault()},paste:function(t){return e.clipboardManager.handlePaste(t)},focus:function(){e.app.workspace.activeEditor=e.owner,$w.isMobile&&e.app.mobileToolbar.show()},blur:function(){$w.isMobile&&e.app.mobileToolbar.hide(),e.editorSuggest.close()}}))}return t},t.prototype.getDynamicExtensions=function(){var e=this.app.vault,t=[];e.getConfig("showLineNumber")&&(t.push(dc({fixed:!1})),t.push(aP),t.push(Mc())),e.getConfig("showIndentGuide")&&t.push(RP);var n=e.getConfig("foldHeading"),i=e.getConfig("foldIndent"),r=n||i;this.editorEl.toggleClass("is-folding",r),r&&(t.push(cp()),t.push(OP),n&&t.push(gO),i&&t.push(mO),t.push(vO));var o=e.getConfig("useTab"),a=e.getConfig("tabSize");t.push(ci.tabSize.of(a));var s=o?"\t":new Array(Math.clamp(a,2,4)).fill(" ").join("");t.push(Mh.of(s));var l=e.getConfig("rightToLeft");this.editorEl.toggleClass("is-rtl",l),l&&t.push(Ts.theme({"&":{direction:"rtl"}}));var c=e.getConfig("spellcheck");t.push(Ts.contentAttributes.of({spellcheck:String(c),autocorrect:"on",autocapitalize:"on",contenteditable:"true"}));var u=!this.sourceMode;if(this.editorEl.toggleClass("is-live-preview",u),t.push(DO.init((function(){return u}))),u){var h=this.livePreviewPlugin;h||(h=this.livePreviewPlugin=TN(this,this.cm)),t.push(h)}var p=e.getConfig("autoPairBrackets"),d=e.getConfig("autoPairMarkdown");if(p||d){var f=[];p&&f.push("(","[","{","'",'"'),d&&f.push("*","_","`","```");var m={brackets:f};t.push([gP,hP]),t.push(Bs.of(vP)),t.push(ci.languageData.of((function(){return[{closeBrackets:m}]}))),t.push(EI)}return($w.isMobile?!!localStorage.getItem("vim"):e.getConfig("vimMode"))&&t.push([vI,On.highest(yI),fI,kI]),t.push.apply(t,this.app.workspace.editorExtensions),t},t.prototype.updateOptions=function(){this.cm.dispatch({effects:[OO.reconfigure(this.getDynamicExtensions()),xO.of({field:DO,value:!this.sourceMode})]})},t.prototype.setCssClass=function(e){var t=this.editorEl;if(t.removeClasses(this.cssClasses),e&&e.length>0){var n=t.classList;e=e.filter((function(e){return!n.contains(e)})),t.addClasses(e)}else e=[];this.cssClasses=e},t.prototype.showSearch=function(e){void 0===e&&(e=!1),this.search.show(e)},t.prototype.getScroll=function(){var e=this.cm,t=e.contentDOM.offsetTop,n=e.scrollDOM.scrollTop,i=e.lineBlockAtHeight(Math.max(n-t,0)),r=e.state.doc.lineAt(i.from).number-1,o=e.state.doc.lineAt(i.to).number-1-r+1,a=n-i.top,s=i.height;return 0===r?s+=t:a-=t,r+o*Math.max(0,a)/Math.max(1,s)},t.prototype.applyScroll=function(e){if(Number.isNumber(e)&&!isNaN(e)){var t=this.cm;this.isScrolling=!0,e<0&&(e=0),e>=t.state.doc.lines&&(e=t.state.doc.lines-.99);var n=Math.floor(e),i=e-n,r=t.contentDOM.offsetTop,o=t.state.doc.line(n+1),a=t.lineBlockAt(o.from),s=t.state.doc.lineAt(a.from).number-1,l=t.state.doc.lineAt(a.to).number-1-s+1,c=n-s,u=a.top,h=a.height;0===s?h+=r:u+=r,t.scrollDOM.scrollTop=u+(c+i)*(h/l)}},t.prototype.getFoldInfo=function(){for(var e=this.cm,t=e.state.doc,n=[],i=Qh(e.state).iter();i.value;){var r=ML(t,i.from),o=ML(t,i.to);n.push({from:r.line,to:o.line}),i.next()}return n.length>0?{folds:n,lines:t.lines}:null},t.prototype.applyFoldInfo=function(e){var t=this.cm;if(!e||t.state.doc.lines===e.lines){op(t);var n=[];if(e)for(var i=0,r=e.folds;i=u.bottom&&(m=u.left-p/2),c.style.top=f+"px",c.style.left=Math.clamp(m,0,d-p)+"px",c.onClickEvent((function(t){c.detach(),e.triggerClickableToken(a,t.shiftKey||1===t.button),t.preventDefault()})),"internal-link"===a.type&&c.addEventListener("mouseover",(function(t){Hw(t,c)&&e.app.workspace.trigger("hover-link",{event:t,source:"editor",hoverParent:e,targetEl:c,linktext:a.text,sourcePath:e.path})}))}}},t.prototype.toggleSource=function(){this.sourceMode=!this.sourceMode,this.updateOptions()},t.prototype.onUpdate=function(e,t){},t.prototype.onScroll=function(){this.editorSuggest.reposition(),this.isScrolling?this.isScrolling=!1:this.handleScroll()},t.prototype.handleScroll=function(){},t.prototype.onEditorClick=function(e,t){var n=this;if($w.isMobile?$w.isAndroidApp&&"mousedown"===e.type||"click"===e.type&&!e.isTrusted&&!!t||$w.isIosApp&&"click"===e.type&&e.isTrusted:"click"===e.type&&0===e.button||"mousedown"===e.type&&1===e.button){var i=pD.isModifier(e,"Mod")||1===e.button;if((!this.sourceMode||i)&&(this.sourceMode||0!==e.button||i||!e.altKey&&!e.shiftKey)){var r=t||e.target,o=this.cm.contentDOM;if(o.contains(r)&&r!==o&&r.parentNode!==o){for(var a=r;a&&a!==o;){if(a.instanceOf(HTMLElement)&&"false"===a.contentEditable&&!a.hasClass("external-link")&&!a.draggable)return;a=a.parentNode}var s=this.editor.getClickableTokenAt(this.editor.posAtMouse(e));if(s){var l=pD.isModEvent(e);(function(){if(n.sourceMode)return!0;if(l)return!0;if(!r.instanceOf(HTMLElement))return!1;if("tag"===s.type)return!0;if("internal-link"===s.type){if(!r.matchParent(".cm-underline"))return!1;if(r.matchParent(".cm-hmd-internal-link"))return!0;if(r.matchParent(".cm-link"))return!0}if("external-link"===s.type){if(r.matchParent(".external-link"))return!0;if(!r.matchParent(".cm-underline"))return!1;if(r.matchParent(".cm-url"))return!0;if(r.matchParent(".cm-link"))return!0}return!1})()&&(this.sourceMode&&"tab"===l&&1!==e.button&&!pD.isModifier(e,"Shift")&&(l=!1),this.triggerClickableToken(s,l),e.preventDefault())}}}}},t.prototype.onEditorLinkMouseover=function(e,t){if(Hw(e,t)){var n=this.editor.getClickableTokenAt(this.editor.posAtMouse(e));n&&"internal-link"===n.type&&this.app.workspace.trigger("hover-link",{event:e,source:"editor",hoverParent:this,targetEl:t,linktext:n.text,sourcePath:this.path})}},t.prototype.onEditorDragStart=function(e){var t=e.targetNode;if(t instanceof HTMLElement&&t.draggable){var n=this.cm.contentDOM;if(!n.contains(t))return;if(t===n||t.parentNode===n)return;var i=this.editor.getClickableTokenAt(this.editor.posAtMouse(e));if(!i)return;"internal-link"===i.type?this.app.dragManager.onDragStart(e,this.app.dragManager.dragLink(e,i.text,this.path)):"external-link"===i.type&&XL(e.dataTransfer,i.text)}},t.prototype.onCssChange=function(){this.cm.dispatch({effects:zP.clearCache.of()}),this.editor.refresh()},t.prototype.onViewClick=function(e){var t=this;this.editorSuggest.close(),setTimeout((function(){return t.editor.removeHighlights()}),0)},t.prototype.onResize=function(){var e=this.editor,t=this.containerEl;t.offsetParent&&(this.editorSuggest.reposition(),this.updateBottomPadding(t.clientHeight),$w.isMobile&&e.hasFocus()&&e.scrollIntoView({from:e.getCursor("anchor"),to:e.getCursor("head")}),e.refresh())},t.prototype.updateBottomPadding=function(e){this.cm.contentDOM.style.paddingBottom=Math.round(e/2)+"px"},t}(GM),HO=["--font-interface-override","--font-text-override","--font-monospace-override","--font-text-size","--accent-h","--accent-s","--accent-l"],VO=["is-frameless"],zO=["fullscreenchange","click","contextmenu","auxclick","keydown","keyup","mousedown","mouseup","mousemove","copy","paste","cut","drag","dragstart","dragover","dragend","dragenter","dragleave","drop"];function qO(e){var t=new e.constructor(e.type,e),n=t.preventDefault;t.preventDefault=function(){n.call(t),e.preventDefault()};var i=t.stopPropagation;t.stopPropagation=function(){i.call(t),e.stopPropagation()};var r=t.stopImmediatePropagation;return t.stopImmediatePropagation=function(){r.call(t),e.stopImmediatePropagation()},Object.defineProperty(t,"target",{get:function(){return e.target}}),Object.defineProperty(t,"currentTarget",{get:function(){return e.currentTarget}}),t}function UO(e){for(var t=0,n=zO;t=0;p--){h!==(c=n[p])?u.insertBefore(c,h?h.nextSibling:null):h=h.previousSibling}r=n},s=function(){var t=document.body.className.split(" "),i=e.document.body.className.split(" ");n&&t.push(n),e.document.hasFocus()?t.push("is-focused"):t.remove("is-focused");for(var r=0,o=VO;r=0;c--)l(c);JT();var u=r.getBoundingClientRect();s.showAtPosition({x:u.x,y:u.bottom,width:u.width,overlap:!0}),o&&s.dom.addEventListener("mouseup",(function(e){var t=e.targetNode;setTimeout((function(){for(var n=0,i=s.items;n25&&(i(),o>0&&o>Math.abs(r)&&t(e))};window.addEventListener("mouseup",r),window.addEventListener("mousemove",o)}))}(r,(function(){return o(!0)}))}))}var eB=function(e){function t(t){var n=e.call(this,t)||this;n.canDropAnywhere=!1;var i=n.app,r=i.workspace,o=n.headerEl=n.containerEl.createDiv("view-header");n.contentEl=n.containerEl.createDiv("view-content");var a,s,l=n.iconEl=o.createDiv("clickable-icon view-header-icon");return l.draggable=!0,$w.isMobile||tD(l,Gk.interface.dragToRearrange()),$w.isMobile&&o.createEl("button","view-action clickable-icon mod-left-split-toggle",(function(e){xC(e),tD(e,Gk.interface.sidebarExpand()),oT(e,"sidebar-left"),e.addEventListener("click",(function(){n.app.workspace.leftSplit.toggle()}))})),o.createDiv("view-header-nav-buttons",(function(e){n.backButtonEl=JO(i,(function(){return n.leaf}),"backward"),oT(n.backButtonEl,"lucide-arrow-left"),e.appendChild(n.backButtonEl),n.forwardButtonEl=JO(i,(function(){return n.leaf}),"forward"),oT(n.forwardButtonEl,"lucide-arrow-right"),e.appendChild(n.forwardButtonEl)})),n.titleContainerEl=o.createDiv("view-header-title-container mod-at-start",(function(e){n.titleParentEl=e.createDiv({cls:"view-header-title-parent"}),n.titleEl=e.createDiv({cls:"view-header-title"})})),a=n.titleContainerEl,(s=n.titleEl).addEventListener("scroll",Aw((function(){var e=s.scrollLeft,t=s.scrollWidth,n=s.offsetWidth;a.toggleClass("mod-at-start",0===e),a.toggleClass("mod-at-end",e>=t-n)}),10)),n.actionsEl=o.createDiv("view-actions"),$w.isMobile?(n.moreOptionsButtonEl=n.addAction("lucide-more-vertical",Gk.interface.menu.moreOptions(),(function(e){n.onMoreOptions(e)})),n.moreOptionsButtonEl.addEventListener("contextmenu",(function(){r.rightSplit.expand()})),xC(n.moreOptionsButtonEl)):n.moreOptionsButtonEl=n.addAction("lucide-more-vertical",Gk.interface.menu.moreOptions(),(function(e){e.currentTarget.classList.contains("has-active-menu")||n.onMoreOptions(e)})),l.addEventListener("dragstart",(function(e){r.onDragLeaf(e,n.leaf)})),i.dragManager.handleDrop(n.containerEl,n.handleDrop.bind(n)),n}return f(t,e),t.prototype.updateNavButtons=function(){var e=this.leaf.history,t=e.backHistory,n=e.forwardHistory;this.backButtonEl.ariaDisabled=String(0===t.length),this.forwardButtonEl.ariaDisabled=String(0===n.length)},t.prototype.load=function(){e.prototype.load.call(this),this.onGroupChange();var t=this.app,n=this.leaf;$w.isMobile?(oT(this.iconEl,"lucide-menu"),this.iconEl.addEventListener("click",(function(){t.workspace.leftSplit.expand()}))):oT(this.iconEl,this.getIcon()),this.titleEl.setText(this.getDisplayText()),this.registerEvent(n.on("group-change",this.onGroupChange,this)),this.registerEvent(n.on("history-change",this.updateNavButtons,this))},t.prototype.handleDrop=function(e,t,n){if(this.canDropAnywhere||(oe?e.shiftKey:e.altKey)||this.headerEl.contains(e.target)){var i=this.leaf.handleDrop(e,t,n);if(i)return i.hoverEl=this.headerEl,i.hoverClass="is-highlighted",i}},t.prototype.onGroupChange=function(){},t.prototype.addAction=function(e,t,n){var i=createEl("a","clickable-icon view-action");return this.actionsEl.prepend(i),oT(i,e),tD(i,t),i.onClickEvent((function(e){if(0===e.button||1===e.button)return n(e)})),i},t.prototype.onMoreOptions=function(e){e.preventDefault();var t=(new KL).addSections(["close","pane","open","action","view","view.linked","info","","danger"]);t.setSectionSubmenu("view.linked",{title:Gk.interface.menu.openLinkedView(),icon:"lucide-link"}),this.onPaneMenu(t,"more-options"),this.onMoreOptionsMenu(t);var n=e.target,i=n.getBoundingClientRect();t.setParentElement(n).showAtPosition({x:i.x,y:i.bottom,width:i.width,overlap:!0,left:!0})},t.prototype.onPaneMenu=function(t,n){e.prototype.onPaneMenu.call(this,t,n);var i=this.app,r=this.leaf;this.navigation&&t.addItem((function(e){return e.setSection("pane").setTitle(r.pinned?Gk.interface.menu.unpin():Gk.interface.menu.pin()).setIcon("lucide-pin").onClick((function(){return r.togglePinned()}))})),r.group?t.addItem((function(e){return e.setSection("pane").setTitle(Gk.interface.menu.unlinkTab()).setIcon("lucide-link").onClick((function(){return r.setGroup(null)}))})):$w.isPhone||t.addItem((function(e){return e.setSection("pane").setTitle(Gk.interface.menu.linkTab()).setIcon("lucide-link").onClick((function(){return i.workspace.onStartLink(r)}))})),$w.isDesktop&&"sidebar-context-menu"!==n&&t.addItem((function(e){return e.setSection("open").setTitle(Gk.commands.splitRight()).setIcon("lucide-separator-vertical").onClick((function(){return i.workspace.duplicateLeaf(r,"vertical")}))})).addItem((function(e){return e.setSection("open").setTitle(Gk.commands.splitDown()).setIcon("lucide-separator-horizontal").onClick((function(){return i.workspace.duplicateLeaf(r,"horizontal")}))}))},t.prototype.onMoreOptionsMenu=function(e){},t}(wL),tB=function(e){function t(t){var n=e.call(this,t)||this;return n.allowNoFile=!1,n.navigation=!0,n}return f(t,e),t.prototype.renderBreadcrumbs=function(){var e,t,n=this;this.titleParentEl.empty();var i=null===(t=null===(e=this.file)||void 0===e?void 0:e.parent)||void 0===t?void 0:t.path;if(i&&"/"!==i)for(var r=i.split("/"),o=function(e){var t=r.slice(0,e+1).join("/"),i=r[e];a.titleParentEl.createSpan({cls:"view-header-breadcrumb",text:i}).addEventListener("click",(function(){var e=n.app.internalPlugins.getPluginById("file-explorer").instance;if(e){var i=n.app.vault.getAbstractFileByPath(tt(t));i&&e.revealInFolder(i)}})),a.titleParentEl.createSpan({cls:"view-header-breadcrumb-separator",text:"/"})},a=this,s=0;s1?(t.detach(),[3,5]):[3,3];case 3:return[4,t.open(null)];case 4:n.sent(),n.label=5;case 5:this.app.workspace.onLayoutChange(),n.label=6;case 6:return[2]}}))}))},t.prototype.canAcceptExtension=function(e){return!1},t}(eB);function nB(e,t,n){QT(e,t,{classes:["mod-wide","mod-error"]}),n&&setTimeout((function(){return JT()}),2e3)}var iB=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.fileBeingRenamed=null,t}return f(t,e),t.prototype.setEphemeralState=function(t){e.prototype.setEphemeralState.call(this,t);var n=t.rename;if(n){var i=void 0;"start"===n?i=!0:"end"===n&&(i=!1),this.titleEl.isShown()?($w.isMobileApp&&(this.titleEl.contentEditable="true"),Yk(this.titleEl,i)):this.app.fileManager.promptForFileRename(this.file)}},t.prototype.onOpen=function(){return v(this,void 0,Promise,(function(){var e,t=this;return y(this,(function(n){return(e=this.titleEl).spellcheck=!1,e.tabIndex=-1,$w.isMobileApp?e.addEventListener("touchstart",(function(){e.contentEditable="true"})):e.contentEditable="true",e.addEventListener("focus",this.onTitleFocus.bind(this)),e.addEventListener("blur",this.onTitleBlur.bind(this)),e.addEventListener("input",(function(){return t.onTitleChange(e)})),e.addEventListener("paste",(function(n){return t.onTitlePaste(e,n)})),[2]}))}))},t.prototype.onTitleFocus=function(){var e=this;this.fileBeingRenamed=this.file,ww(this.titleParentEl,new mw({duration:150}).addProp("opacity","1","0","0").addProp("width",this.titleParentEl.clientWidth+"px","0",""),(function(){return e.titleParentEl.detach()}))},t.prototype.onTitleBlur=function(){return v(this,void 0,void 0,(function(){var e,t,n,i;return y(this,(function(r){switch(r.label){case 0:return e=this.titleEl,(t=e.doc.getSelection()).rangeCount>0&&(n=t.getRangeAt(0),i=n.commonAncestorContainer,(e===i||e.contains(i))&&t.removeRange(n)),[4,this.saveTitle(this.titleEl)];case 1:return r.sent(),this.titleContainerEl.prepend(this.titleParentEl),ww(this.titleParentEl,new mw({duration:150}).addProp("opacity","0","1","").addProp("width","0",this.titleParentEl.clientWidth+"px","")),this.titleEl.scrollTo({left:0}),$w.isMobileApp&&(e.contentEditable="false"),[2]}}))}))},t.prototype.onTitlePaste=function(e,t){TC(e,t)},t.prototype.onTitleChange=function(e){JT();var t=this.file;MC(e);var n=e.getText().trim(),i=QO(this.app,t,n,!1);i&&nB(e,i,!0)},t.prototype.saveTitle=function(e){return v(this,void 0,void 0,(function(){var t,n,i,r,o,a,s,l;return y(this,(function(c){switch(c.label){case 0:if(JT(),n=(t=this).file,i=t.fileBeingRenamed,n!==i)return[2];if(r=e.getText().trim(),o=QO(this.app,n,r,!0))return nB(e,o,!0),e.setText(n.basename),[2];if(a=n.getNewPathAfterRename(r),n.path===a)return[2];c.label=1;case 1:return c.trys.push([1,3,,4]),[4,this.app.fileManager.renameFile(n,a)];case 2:return c.sent(),[3,4];case 3:return(s=c.sent())&&(l=s.message||s.code||s.toString(),nB(e,l,!0)),[3,4];case 4:return e.setText(n.basename),this.fileBeingRenamed=null,[2]}}))}))},t.prototype.onPaneMenu=function(t,n){var i=this;e.prototype.onPaneMenu.call(this,t,n);var r=this.file;r&&(t.addItem((function(e){return e.setSection("action").setTitle(Gk.plugins.fileExplorer.menuOptRename()).setIcon("lucide-edit-3").onClick((function(){return i.app.fileManager.promptForFileRename(r)}))})),t.addItem((function(e){return e.setSection("danger").setTitle(Gk.interface.menu.deleteFile()).setIcon("lucide-trash-2").setWarning(!0).onClick((function(){return i.app.fileManager.promptForFileDeletion(r)}))})),this.app.workspace.trigger("file-menu",t,r,n,this.leaf))},t}(tB),rB="audio",oB=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.icon="lucide-file-audio",t}return f(t,e),t.prototype.getViewType=function(){return rB},t.prototype.canAcceptExtension=function(e){return Ve.contains(e)},t.prototype.onLoadFile=function(e){return v(this,void 0,void 0,(function(){var n,i,r,o;return y(this,(function(a){switch(a.label){case 0:return i=(n=this).app,Kw(r=n.contentEl),r.empty(),o=r.createDiv("audio-container"),[4,t.displayInEl(e,i,o)];case 1:return a.sent(),[2]}}))}))},t.displayInEl=function(e,t,n){return v(this,void 0,Promise,(function(){var i;return y(this,(function(r){return i=t.vault.getResourcePath(e),[2,Bw(n,i)]}))}))},t.VIEW_TYPE=rB,t}(iB),aB="image",sB=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.icon="lucide-image",t}return f(t,e),t.prototype.getViewType=function(){return aB},t.prototype.canAcceptExtension=function(e){return He.contains(e)},t.prototype.onLoadFile=function(e){return v(this,void 0,void 0,(function(){var n,i,r,o;return y(this,(function(a){switch(a.label){case 0:return i=(n=this).app,(r=n.contentEl).empty(),o=r.createDiv("image-container"),[4,t.displayInEl(e,i,o)];case 1:return a.sent(),[2]}}))}))},t.displayInEl=function(e,t,n){return v(this,void 0,Promise,(function(){var i;return y(this,(function(r){return i=t.vault.getResourcePath(e),[2,Fw(n,i)]}))}))},t.VIEW_TYPE=aB,t}(iB),lB=function(){this.viewContainerEl=createDiv("pdf-container");var e=this.viewContainerEl.createDiv("pdf-scroll-container"),t=this.controlsEl=this.viewContainerEl.createDiv("pdf-controls");this.previousPageEl=t.createDiv("pdf-controls-pager mod-previous",(function(e){return oT(e,"lucide-chevron-left")})),this.pageInfoEl=t.createDiv("pdf-controls-page-info"),this.nextPageEl=t.createDiv("pdf-controls-pager mod-next",(function(e){return oT(e,"lucide-chevron-right")})),this.canvasEl=e.createEl("canvas","pdf-canvas")},cB=function(e){function t(t,n){var i=e.call(this)||this;i.dom=null,i.pdfDoc=null,i.pageNum=null,i.app=t,i.containerEl=n;var r=i.dom=new lB;return r.previousPageEl.addEventListener("click",(function(){i.navigatePage(-1)})),r.nextPageEl.addEventListener("click",(function(){i.navigatePage(1)})),$w.isMobile&&r.canvasEl.addEventListener("touchend",(function(){i.togglePdfControls()})),i}return f(t,e),t.prototype.togglePdfControls=function(){var e=this.dom.controlsEl.hasClass("mod-visible");this.dom.controlsEl.toggleClass("mod-visible",!e)},t.prototype.navigatePage=function(e){var t=this.pdfDoc;if(this.pdfDoc){var n=this.pageNum+e;n<1&&(n=1);var i=t._pdfInfo.numPages;n>i&&(n=i),this.pageNum=n,this.renderPage()}},t.prototype.renderPage=function(){return v(this,void 0,void 0,(function(){var e,t,n,i,r,o,a,s,l,c,u;return y(this,(function(h){switch(h.label){case 0:return t=(e=this).pdfDoc,n=e.dom,i=e.pageNum,t?(r=t._pdfInfo.numPages,[4,t.getPage(i)]):[2];case 1:return o=h.sent(),a=n.canvasEl.clientWidth,(s=window.devicePixelRatio*a/o.getViewport({scale:1}).width)<1&&(s=1),l=o.getViewport({scale:s}),c=n.canvasEl.getContext("2d"),n.canvasEl.height=l.height,n.canvasEl.width=l.width,n.pageInfoEl.setText("".concat(o.pageNumber," / ").concat(r)),u={canvasContext:c,viewport:l},[4,o.render(u).promise];case 2:return h.sent(),[2]}}))}))},t.prototype.loadFile=function(e,t){return v(this,void 0,Promise,(function(){var n,i,r,o,a,s,l,c,u;return y(this,(function(h){switch(h.label){case 0:return this.destroy(),i=(n=this).app,r=n.dom,n.containerEl.append(r.viewContainerEl),[4,i.vault.readBinary(e)];case 1:o=h.sent(),h.label=2;case 2:return h.trys.push([2,5,,6]),[4,HC.promise];case 3:return h.sent(),s=this,[4,window.pdfjsLib.getDocument(o).promise];case 4:return a=s.pdfDoc=h.sent(),this.pageNum=1,t&&(l=t.match(/^#page=([0-9]+)/))&&(c=parseInt(l[1]),isNaN(c)||(this.pageNum=Math.clamp(c,1,a._pdfInfo.numPages))),this.renderPage(),[3,6];case 5:return u=h.sent(),console.error(u),[3,6];case 6:return[2]}}))}))},t.prototype.onunload=function(){e.prototype.onunload.call(this),this.destroy()},t.prototype.destroy=function(){this.containerEl.empty();var e=this.pdfDoc;e&&e.destroy(),this.pdfDoc=null,this.pageNum=null},t}(GM),uB=function(e){function t(t,n){var i=e.call(this)||this;return i.app=t,i.containerEl=n,i}return f(t,e),t.prototype.loadFile=function(e,t){return v(this,void 0,void 0,(function(){var n,i;return y(this,(function(r){return this.destroy(),n=this.app.vault.getResourcePath(e),(i=this.iframeEl=this.containerEl.createEl("iframe")).src=n+(t||""),i.style.width="100%",i.style.height="100%",[2]}))}))},t.prototype.onunload=function(){e.prototype.onunload.call(this),this.destroy()},t.prototype.destroy=function(){this.iframeEl&&(this.iframeEl.detach(),this.iframeEl=null),URL.revokeObjectURL(this.url)},t}(GM);function hB(e,t){var n,i,r=null===(i=null===(n=window.process)||void 0===n?void 0:n.versions)||void 0===i?void 0:i.electron;return r&&String.isString(r)&&uk("10.0.0",r)?new uB(e,t):new cB(e,t)}var pB,dB=function(e){function t(t){var n=e.call(this,t)||this;return n.icon="lucide-file-text",n.pdfRenderComponent=hB(n.app,n.contentEl),n.addChild(n.pdfRenderComponent),n}return f(t,e),t.prototype.getViewType=function(){return"pdf"},t.prototype.onLoadFile=function(e){return v(this,void 0,Promise,(function(){return y(this,(function(t){switch(t.label){case 0:return[4,this.pdfRenderComponent.loadFile(e,"")];case 1:return t.sent(),[2]}}))}))},t.prototype.setEphemeralState=function(t){e.prototype.setEphemeralState.call(this,t);var n=t.subpath;n&&this.pdfRenderComponent.loadFile(this.file,n)},t.prototype.onUnloadFile=function(e){return v(this,void 0,Promise,(function(){return y(this,(function(e){return this.pdfRenderComponent.destroy(),[2]}))}))},t.VIEW_TYPE="pdf",t}(iB),fB=function(e){function t(t,n,i){var r=e.call(this)||this;return r.app=t.app,r.containerEl=t.containerEl,r.file=n,r.subpath=i,r.containerEl.addClass("pdf-embed"),r.pdfRenderComponent=hB(r.app,t.containerEl),r.addChild(r.pdfRenderComponent),r}return f(t,e),t.prototype.loadFile=function(){return v(this,void 0,void 0,(function(){return y(this,(function(e){switch(e.label){case 0:return[4,this.pdfRenderComponent.loadFile(this.file,this.subpath)];case 1:return e.sent(),[2]}}))}))},t}(GM),mB="video",gB=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return f(t,e),t.prototype.getViewType=function(){return mB},t.prototype.canAcceptExtension=function(e){return ze.contains(e)},t.prototype.onLoadFile=function(e){return v(this,void 0,void 0,(function(){var n,i,r,o;return y(this,(function(a){switch(a.label){case 0:return i=(n=this).app,Kw(r=n.contentEl),r.empty(),o=r.createDiv("video-container"),[4,t.displayInEl(e,i,o)];case 1:return a.sent(),[2]}}))}))},t.displayInEl=function(e,t,n){return v(this,void 0,Promise,(function(){var i;return y(this,(function(r){return i=t.vault.getResourcePath(e),[2,Nw(n,i)]}))}))},t.VIEW_TYPE=mB,t}(iB),vB=/[^a-zA-Z0-9]/,yB=/\s/,bB=/[\r\n]/,wB=/\n\r?\n$/,kB=/^\r?\n\r?\n/;function CB(e,t){return et?e:t}!function(e){e[e.DIFF_DELETE=-1]="DIFF_DELETE",e[e.DIFF_INSERT=1]="DIFF_INSERT",e[e.DIFF_EQUAL=0]="DIFF_EQUAL"}(pB||(pB={}));var EB=/\W/;function SB(e,t){for(var n=e.length,i=t;i0?n[i-1]:-1,a=0,s=0,l=0,c=0,r=null,t=!0)),o++;for(t&&this.diff_cleanupMerge(e),this.diff_cleanupSemanticLossless(e),o=1;o=d?(p>=u.length/2||p>=h.length/2)&&(e.splice(o,0,[pB.DIFF_EQUAL,h.substring(0,p)]),e[o-1][1]=u.substring(0,u.length-p),e[o+1][1]=h.substring(p),o++):(d>=u.length/2||d>=h.length/2)&&(e.splice(o,0,[pB.DIFF_EQUAL,u.substring(0,d)]),e[o-1][0]=pB.DIFF_INSERT,e[o-1][1]=h.substring(0,h.length-d),e[o+1][0]=pB.DIFF_DELETE,e[o+1][1]=u.substring(d),o++),o++}o++}},e.prototype.diff_cleanupSemanticLossless=function(e){for(var t=1;t=u&&(u=h,s=n,l=i,c=r)}e[t-1][1]!==s&&(s?e[t-1][1]=s:(e.splice(t-1,1),t--),e[t][1]=l,c?e[t+1][1]=c:(e.splice(t+1,1),t--))}t++}},e.prototype.diff_cleanupEfficiency=function(e){for(var t=!1,n=[],i=0,r=null,o=0,a=!1,s=!1,l=!1,c=!1;o0?n[i-1]:-1,l=c=!1),t=!0)),o++;t&&this.diff_cleanupMerge(e)},e.prototype.diff_cleanupMerge=function(e){e.push([pB.DIFF_EQUAL,""]);for(var t,n=0,i=0,r=0,o="",a="";n1?(0!==i&&0!==r&&(0!==(t=this.diff_commonPrefix(a,o))&&(n-i-r>0&&e[n-i-r-1][0]===pB.DIFF_EQUAL?e[n-i-r-1][1]+=a.substring(0,t):(e.splice(0,0,[pB.DIFF_EQUAL,a.substring(0,t)]),n++),a=a.substring(t),o=o.substring(t)),0!==(t=this.diff_commonSuffix(a,o))&&(e[n][1]=a.substring(a.length-t)+e[n][1],a=a.substring(0,a.length-t),o=o.substring(0,o.length-t))),n-=i+r,e.splice(n,i+r),o.length&&(e.splice(n,0,[pB.DIFF_DELETE,o]),n++),a.length&&(e.splice(n,0,[pB.DIFF_INSERT,a]),n++),n++):0!==n&&e[n-1][0]===pB.DIFF_EQUAL?(e[n-1][1]+=e[n][1],e.splice(n,1)):n++,r=0,i=0,o="",a=""}""===e[e.length-1][1]&&e.pop();var s=!1;for(n=1;nt));n++)o=i,a=r;return e.length!==n&&e[n][0]===pB.DIFF_DELETE?a:a+(t-o)},e.prototype.diff_prettyHtml=function(e){for(var t=[],n=/&/g,i=//g,o=/\n/g,a=0;a");switch(s){case pB.DIFF_INSERT:t[a]=''+l+"";break;case pB.DIFF_DELETE:t[a]=''+l+"";break;case pB.DIFF_EQUAL:t[a]=""+l+""}}return t.join("")},e.prototype.diff_text1=function(e){for(var t=[],n=0;n2&&(this.diff_cleanupSemantic(r),this.diff_cleanupEfficiency(r));else if(e&&"object"==typeof e&&void 0===t&&void 0===n)r=e,i=this.diff_text1(r);else if("string"==typeof e&&t&&"object"==typeof t&&void 0===n)i=e,r=t;else{if("string"!=typeof e||"string"!=typeof t||!n||"object"!=typeof n)throw new Error("Unknown call format to patch_make");i=e,r=n}if(0===r.length)return[];for(var o=[],a=new TB,s=0,l=0,c=0,u=i,h=i,p=0;p=2*this.patchMargin&&s&&(this.patch_addContext_(a,u),o.push(a),a=new TB,s=0,u=h,l=c)}d!==pB.DIFF_INSERT&&(l+=f.length),d!==pB.DIFF_DELETE&&(c+=f.length)}return s&&(this.patch_addContext_(a,u),o.push(a)),o},e.prototype.patch_deepCopy=function(e){for(var t=[],n=0;nthis.matchMaxBits?-1!==(l=this.match_main(t,s.substring(0,this.matchMaxBits),a))&&(-1===(c=this.match_main(t,s.substring(s.length-this.matchMaxBits),a+s.length-this.matchMaxBits))||l>=c)&&(l=-1):l=this.match_main(t,s,a),-1===l)r[o]=!1,i-=e[o].length2-e[o].length1;else{r[o]=!0,i=l-a;var u=void 0;if(s===(u=-1===c?t.substring(l,l+s.length):t.substring(l,c+this.matchMaxBits)))t=t.substring(0,l)+this.diff_text2(e[o].diffs)+t.substring(l+s.length);else{var h=this.diff_main(s,u,!1);if(s.length>this.matchMaxBits&&this.diff_levenshtein(h)/s.length>this.patchDeleteThreshold)r[o]=!1;else{this.diff_cleanupSemanticLossless(h);for(var p=0,d=0,f=0;fo[0][1].length){var a=t-o[0][1].length;o[0][1]=n.substring(o[0][1].length)+o[0][1],r.start1-=a,r.start2-=a,r.length1+=a,r.length2+=a}if(0===(o=(r=e[e.length-1]).diffs).length||o[o.length-1][0]!==pB.DIFF_EQUAL)o.push([pB.DIFF_EQUAL,n]),r.length1+=t,r.length2+=t;else if(t>o[o.length-1][1].length){a=t-o[o.length-1][1].length;o[o.length-1][1]+=n.substring(0,a),r.length1+=a,r.length2+=a}return n},e.prototype.patch_splitMax=function(e){for(var t=this.matchMaxBits,n=0;n2*t?(s.length1+=u.length,r+=u.length,l=!1,s.diffs.push([c,u]),i.diffs.shift()):(u=u.substring(0,t-s.length1-this.patchMargin),s.length1+=u.length,r+=u.length,c===pB.DIFF_EQUAL?(s.length2+=u.length,o+=u.length):l=!1,s.diffs.push([c,u]),u===i.diffs[0][1]?i.diffs.shift():i.diffs[0][1]=i.diffs[0][1].substring(u.length))}a=(a=this.diff_text2(s.diffs)).substring(a.length-this.patchMargin);var h=this.diff_text1(i.diffs).substring(0,this.patchMargin);""!==h&&(s.length1+=h.length,s.length2+=h.length,0!==s.diffs.length&&s.diffs[s.diffs.length-1][0]===pB.DIFF_EQUAL?s.diffs[s.diffs.length-1][1]+=h:s.diffs.push([pB.DIFF_EQUAL,h])),l||e.splice(++n,0,s)}}},e.prototype.patch_toText=function(e){for(var t=[],n=0;nt.length?e:t,a=e.length>t.length?t:e,s=o.indexOf(a);if(-1!==s)return r=[[pB.DIFF_INSERT,o.substring(0,s)],[pB.DIFF_EQUAL,a],[pB.DIFF_INSERT,o.substring(s+a.length)]],e.length>t.length&&(r[0][0]=pB.DIFF_DELETE,r[2][0]=pB.DIFF_DELETE),r;if(1===a.length)return[[pB.DIFF_DELETE,e],[pB.DIFF_INSERT,t]];var l=this.diff_halfMatch_(e,t);if(l){var c=l[0],u=l[1],h=l[2],p=l[3],d=l[4],f=this.diff_main(c,h,n,i),m=this.diff_main(u,p,n,i);return f.concat([[pB.DIFF_EQUAL,d]],m)}return n&&e.length>100&&t.length>100?this.diff_lineMode_(e,t,i):this.diff_bisect_(e,t,i)},e.prototype.diff_lineMode_=function(e,t,n){var i=this.diff_linesToChars_(e,t);e=i.chars1,t=i.chars2;var r=i.lineArray,o=this.diff_main(e,t,!1,n);this.diff_charsToLines_(o,r),this.diff_cleanupSemantic(o),o.push([pB.DIFF_EQUAL,""]);for(var a=0,s=0,l=0,c="",u="";a=1&&l>=1){o.splice(a-s-l,s+l),a=a-s-l;for(var h=this.diff_main(c,u,!1,n),p=h.length-1;p>=0;p--)o.splice(a,0,h[p]);a+=h.length}l=0,s=0,c="",u=""}a++}return o.pop(),o},e.prototype.diff_bisect_=function(e,t,n){for(var i=e.length,r=t.length,o=Math.ceil((i+r)/2),a=o,s=2*o,l=new Array(s),c=new Array(s),u=0;un);v++){for(var y=-v+d;y<=v-f;y+=2){for(var b=a+y,w=void 0,k=(w=y===-v||y!==v&&l[b-1]i)f+=2;else if(k>r)d+=2;else if(p){if((x=a+h-y)>=0&&x=(E=i-c[x]))return this.diff_bisectSplit_(e,t,w,k,n)}}for(var C=-v+m;C<=v-g;C+=2){for(var x=a+C,E=void 0,S=(E=C===-v||C!==v&&c[x-1]i)g+=2;else if(S>r)m+=2;else if(!p){if((b=a+h-C)>=0&&b=(E=i-E))return this.diff_bisectSplit_(e,t,w,k,n)}}}}return[[pB.DIFF_DELETE,e],[pB.DIFF_INSERT,t]]},e.prototype.diff_bisectSplit_=function(e,t,n,i,r){var o=e.substring(0,n),a=t.substring(0,i),s=e.substring(n),l=t.substring(i),c=this.diff_main(o,a,!1,r),u=this.diff_main(s,l,!1,r);return c.concat(u)},e.prototype.diff_linesToChars_=function(e,t){var n=[],i={};return n[0]="",{chars1:this.diff_linesToCharsMunge_(e,n,i,4e4),chars2:this.diff_linesToCharsMunge_(t,n,i,65535),lineArray:n}},e.prototype.diff_linesToCharsMunge_=function(e,t,n,i){for(var r="",o=0,a=-1,s=t.length;ai?e=e.substring(n-i):nt.length?e:t,i=e.length>t.length?t:e;if(n.length<4||2*i.lengthu[4].length?c:u:c)[4];return e.length>t.length?(o=r[0],a=r[1],s=r[2],l=r[3]):(s=r[0],l=r[1],o=r[2],a=r[3]),[o,a,s,l,h]},e.prototype.diff_halfMatchI_=function(e,t,n){for(var i,r,o,a,s=e.substring(n,n+Math.floor(e.length/4)),l="",c=t.indexOf(s,0);-1!==c;){var u=this.diff_commonPrefix(e.substring(n),t.substring(c)),h=this.diff_commonSuffix(e.substring(0,n),t.substring(0,c));l.length=e.length?[i,r,o,a,l]:null},e.prototype.diff_cleanupSemanticScore_=function(e,t){if(!e||!t)return 6;var n=e.charAt(e.length-1),i=t.charAt(0),r=n.match(vB),o=i.match(vB),a=r&&n.match(yB),s=o&&i.match(yB),l=a&&n.match(bB),c=s&&i.match(bB),u=l&&e.match(wB),h=c&&t.match(kB);return u||h?5:l||c?4:r&&!a&&s?3:a||s?2:r||o?1:0},e.prototype.match_bitap_=function(e,t,n){if(t.length>this.matchMaxBits)throw new Error("Pattern too long for this browser");var i=this.match_alphabet_(t),r=this.matchThreshold,o=e.indexOf(t,n);-1!==o&&(r=CB(this.match_bitapScore_(0,o,t,n),r),-1!==(o=e.lastIndexOf(t,n+t.length))&&(r=CB(this.match_bitapScore_(0,o,t,n),r)));var a,s,l=1<=p;m--){var g=i[e.charAt(m-1)];if(f[m]=0===h?(f[m+1]<<1|1)&g:(f[m+1]<<1|1)&g|(c[m+1]|c[m])<<1|1|c[m+1],f[m]&l){var v=this.match_bitapScore_(h,m-1,t,n);if(v<=r){if(r=v,!((o=m-1)>n))break;p=xB(1,2*n-o)}}}if(this.match_bitapScore_(h+1,n,t,n)>r)break;c=f}return o},e.prototype.match_bitapScore_=function(e,t,n,i){var r=e/n.length,o=Math.abs(i-t);return this.matchDistance?r+o/this.matchDistance:o?1:r},e.prototype.match_alphabet_=function(e){for(var t={},n=0;n2&&(i.diff_cleanupSemantic(r),i.diff_cleanupEfficiency(r));var o=i.patch_make(e,r);return i.patch_apply(o,n)[0]}function AB(e){var t=e.split("\n");return t.length>1&&""===t.last()&&t.pop(),t}function LB(e,t){e.endsWith("\n")||(e+="\n"),t.endsWith("\n")||(t+="\n");var n=new MB,i=n.diff_lineMode(e,t);n.diff_cleanupSemantic(i);for(var r=createDiv("diff-view"),o=function(e,t){var n=createEl("div","diff-line");return t&&n.addClass("mod-"+t),null!=e&&n.setText(e),n.createEl("br"),n},a=[],s=function(e){if(0!==a.length){var t=0===r.childNodes.length,n=t||e?5:10;if(a.length>n){var i=[],o=createDiv("diff-collapsed");o.addEventListener("click",(function(){var e=o.parentNode;if(e){for(var t=0,n=i;t0)){var e=t.ctx,n=e.app,i=e.linktext,r=e.sourcePath,o=QD(i).path;if(n.metadataCache.getFirstLinkpathDest(o,r)){t.containerEl.removeClass("file-embed","mod-empty"),t.containerEl.removeEventListener("click",t.onClick),t.containerEl.empty();var a=qB.load(t.ctx);a&&(t.addChild(a),a.loadFile())}}}),500,!0);this.registerEvent(n.vault.on("create",i)),this.registerEvent(n.vault.on("rename",i))},t}(GM),zB=function(e){function t(){var t=e.call(this)||this;return t.embedByExtension={},t.registerExtensions(Ue,(function(e,t,n){return e.displayMode?new cO(e,t,n):new UB(e,t,n)})),t.registerExtensions(He,(function(e,t){return new BB(e,t)})),t.registerExtensions(Ve,(function(e,t){return new NB(e,t)})),t.registerExtensions(ze,(function(e,t){return new RB(e,t)})),t.registerExtensions(qe,(function(e,t,n){return new fB(e,t,n)})),t}return f(t,e),t.prototype.unregisterExtensions=function(e){for(var t=0,n=e;t=1&&t instanceof HTMLElement){var i=n.getRangeAt(0);if(t===i.startContainer||t.contains(i.startContainer)){var r=i.getBoundingClientRect();r.bottom+r.height/2>=t.getBoundingClientRect().bottom&&(e.preventDefault(),this.editMode?this.editMode.setState({focus:!0,cursor:{from:{line:0,ch:0},to:{line:0,ch:0}}}):this.inlineTitleEl.blur())}}}},t.prototype.saveTitle=function(e){return v(this,void 0,void 0,(function(){var t,n,i,r,o,a,s,l,c;return y(this,(function(u){switch(u.label){case 0:if(JT(),n=(t=this).file,i=t.subpath,r=t.fileBeingRenamed,n!==r)return[2];if(o=e.getText().trim(),i)return[3,5];if(a=QO(this.app,n,o,!0))return e.setText(n.basename),PB(e,a,!0),[2];if(s=n.getNewPathAfterRename(o),n.path===s)return[2];u.label=1;case 1:return u.trys.push([1,3,,4]),[4,this.app.fileManager.renameFile(n,s)];case 2:return u.sent(),[3,4];case 3:return(l=u.sent())&&(c=l.message||l.code||l.toString(),PB(e,c,!0)),[3,4];case 4:e.setText(n.basename),this.fileBeingRenamed=null,u.label=5;case 5:return[2]}}))}))},t.prototype.onload=function(){e.prototype.onload.call(this),this.registerEvent(this.app.metadataCache.on("changed",this.onFileChanged,this)),this.registerEvent(this.app.vault.on("rename",this.onFileRename,this))},t.prototype.onunload=function(){e.prototype.onunload.call(this),this.applyScope(null)},t.prototype.onFileChanged=function(e,t,n){e!==this.file||t===this.data||this.dirty||this.loadFileInternal(t,n)},t.prototype.onFileRename=function(e,t){e instanceof wA&&e===this.file&&!this.subpath&&this.inlineTitleEl.setText(e.basename)},t.prototype.loadFile=function(){return v(this,void 0,Promise,(function(){var e,t,n,i,r,o,a,s,l,c=this;return y(this,(function(u){switch(u.label){case 0:return t=(e=this).app,n=e.file,i=e.headerEl,r=e.previewMode,o=e.subpath,a=e.state,o||(null==i||i.setText(n.basename),this.inlineTitleEl.setText(n.basename),r.registerEvent(t.workspace.on("quick-preview",(function(e,t){e===c.file&&t!==c.data&&c.loadContents(t)})))),l=this,[4,t.vault.cachedRead(n)];case 1:return s=l.data=u.sent(),this.loadFileInternal(s),a&&a.hasOwnProperty("scroll")&&this.previewMode.renderer.applyScrollDelayed(a.scroll,{highlight:!0,center:!0}),this.previewMode.renderer.applyFoldInfo(this.getFoldInfo()),[2]}}))}))},t.prototype.getFoldInfo=function(){return this.app.foldManager.load(this.file)},t.prototype.loadFileInternal=function(e,t){var n=this.file,i=this.lastSavedData;if(this.lastSavedData=e,i){if(i===e)return;if(this.dirty){var r=this.data;if(r===e)return;r!==i&&(e=DB(i,r,e),new gD(Gk.interface.msgFileChanged({file:n.path})))}}this.loadContents(e,t)},t.prototype.loadContents=function(e,t){var n=this,i=n.app,r=n.file,o=n.subpath;if(t||(t=i.metadataCache.getFileCache(r)),o&&!t&&(this.subpathNotFound=!1),o&&t){var a=aA(t,o);this.subpathNotFound=!a;var s="",l="",c="",u="";if(a){var h=sA(e,t,a,this.editable);s=h.before,l=h.after,c=h.heading,u=h.indent,e=h.content,"heading"===a.type&&(this.inlineTitleEl.setText(a.current.heading),this.inlineTitleEl.setAttr("data-level",String(a.current.level)))}this.heading=c,this.before=s,this.after=l,this.indent=u}this.subpathNotFound&&(e="### Unable to find section ".concat(o," in ").concat(r.basename)),this.set(e)},t.prototype.applyScope=function(e){e!==this.scope&&(this.scope&&this.app.keymap.popScope(this.scope),e&&this.app.keymap.pushScope(e),this.scope=e)},t.prototype.onMarkdownFold=function(){var e=this.file,t="preview"===this.getMode()?this.previewMode.renderer.getFoldInfo():this.editMode.getFoldInfo();return this.app.foldManager.save(e,t)},t}(ZO);function _B(e){return HS(e,null,{})}function jB(e){return function(e,t,n){let i=null;if("function"==typeof t||Array.isArray(t)?i=t:void 0===n&&t&&(n=t),"string"==typeof n&&(n=n.length),"number"==typeof n){const e=Math.round(n);n=e<1?void 0:e>8?{indent:8}:{indent:e}}if(void 0===e){const{keepUndefined:e}=n||t||{};if(!e)return}return new JE(e,i,n).toString(n)}(e,null,{})}var WB=window.moment,GB=Zn.define(),KB=vo.define((function(){return{mousedown:!1}})),YB=new Set(["em","strong","inline-code","strikethrough","highlight","link","image","hmd-internal-link","hmd-embed","formatting-link","footref"]),XB=/^\s*(~~~+|```+)[ \t]*([\w\/+#-]*)[^\n`]*$/;var $B=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.start=-1,t.end=-1,t.hooked=!1,t}return f(t,e),t.prototype.setPos=function(e,t){this.start=e,this.end=t},t.prototype.hookClickHandler=function(e,t){var n=this;SC(t,(function(i){for(var r=i.targetNode,o=e.contentDOM;r&&r!==o;){if(r instanceof HTMLElement&&r.hasClass("cm-editor"))return;r=r.parentNode}n.selectElement(e,t)}))},t.prototype.addEditButton=function(e,t){var n=this,i=t.createDiv("edit-block-button");oT(i,"lucide-code-2"),tD(i,"Edit this block"),i.addEventListener("click",(function(){n.selectElement(e,t)}))},t.prototype.selectElement=function(e,t){var n=this.start,i=this.end;if(n<0||i<0)!function(e,t){try{var n=t.posAtDOM(e);t.dispatch({selection:{head:n,anchor:n}}),t.focus()}catch(e){}}(t,e);else{$w.isMobile&&(i=n);try{e.focus(),e.dispatch({selection:{head:n,anchor:i},scrollIntoView:!0})}catch(e){}}},t.prototype.resizeWidget=function(e,t){new ResizeObserver((function(){return e.requestMeasure()})).observe(t,{box:"border-box"})},t.prototype.hook=function(e,t){this.hooked||(this.hooked=!0,this.onHook(e,t))},t.prototype.onHook=function(e,t){},t}(Ur),ZB=jr.replace({}),QB=jr.replace({}),JB=jr.mark({class:"cm-underline",attributes:{draggable:"true"}}),eN=jr.mark({class:"cm-transparent"}),tN=jr.mark({class:"is-unresolved"}),nN=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return f(t,e),t.prototype.toDOM=function(e){return createSpan({cls:"cm-blockquote-border cm-transparent",text:">"})},t}(Ur),iN=jr.replace({widget:new nN}),rN=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return f(t,e),t.prototype.eq=function(e){return e instanceof t},t.prototype.toDOM=function(e){var t=createDiv("hr cm-line");return t.createEl("br"),t.addEventListener("click",(function(){var n=e.posAtDOM(t),i=e.state.doc.lineAt(n);e.dispatch({selection:{head:i.from,anchor:i.to}})})),t.createEl("hr"),t},Object.defineProperty(t.prototype,"estimatedHeight",{get:function(){return 20},enumerable:!1,configurable:!0}),t}(Ur),oN=jr.replace({widget:new rN,block:!0}),aN=jr.mark({class:"list-bullet"}),sN=function(e){function t(t){var n=e.call(this)||this;return n.content=t,n}return f(t,e),t.prototype.eq=function(e){return e instanceof t&&e.content===this.content},t.prototype.updateDOM=function(e){if(e.instanceOf(HTMLLabelElement)&&e.firstChild&&e.firstChild.instanceOf(HTMLInputElement)){var t=e.firstChild;return t.setAttribute("data-task",this.content),t.checked=" "!==this.content,!0}return!1},t.prototype.toDOM=function(e){var t=createEl("label","task-list-label"),n=t.createEl("input",{cls:"task-list-item-checkbox",type:"checkbox"});return n.setAttribute("data-task",this.content),n.checked=" "!==this.content,t.addEventListener("mousedown",(function(e){e.preventDefault()})),n.addEventListener("input",(function(){var t=e.posAtDOM(n),i=e.state.doc.lineAt(t),r=i.text.search(/\[.]/);if(-1!==r){var o=i.text.charAt(r+1),a=i.from+r+1;e.dispatch({changes:[{from:a,to:a+1,insert:" "===o?"x":" "}]})}})),t},t}(Ur),lN=function(e){function t(t){var n=e.call(this)||this;return n.styles=t,n}return f(t,e),t.prototype.eq=function(e){return e instanceof t&&this.styles===e.styles},t.prototype.toDOM=function(e){return createSpan(this.styles)},t.prototype.ignoreEvent=function(e){return!1},t}(Ur),cN=function(e){function t(t,n){var i=e.call(this)||this;return i.url=t,i.title=n,i}return f(t,e),t.prototype.eq=function(e){return e instanceof t&&this.url===e.url&&this.title===e.title},t.prototype.updateDOM=function(e){return!!e.instanceOf(HTMLImageElement)&&(e.src!==this.url&&(e.src=this.url),this.applyTitle(e,this.title),!0)},t.prototype.toDOM=function(e){var t=createEl("img");return t.src=this.url,this.applyTitle(t,this.title),this.hookClickHandler(e,t),this.resizeWidget(e,t),t},t.prototype.applyTitle=function(e,t){var n=0,i=0;if(t){var r=function(e){var t=EM(e);return!!t&&(n=t.x,i=t.y,!0)},o=t.lastIndexOf("|");-1!==o?r(t.substr(o+1))&&(t=t.substr(0,o)):r(t)&&(t="")}n>0&&(e.width=n),i>0&&(e.height=i),e.setAttr("alt",t)},Object.defineProperty(t.prototype,"estimatedHeight",{get:function(){return 30},enumerable:!1,configurable:!0}),t}($B),uN=function(){function e(e){this.tree=ch(e.state),this.decorations=this.buildDeco(e)}return e.prototype.update=function(e){var t,n=ch(e.state);n.length1){var a=c.last();a.deco===ZB&&(a.deco=QB)}for(var l=0,u=c;l=c+2&&"]]"===t.doc.sliceString(c,c+2))return;if(v.has("formatting-link-end")&&i>=2&&"[["===t.doc.sliceString(i-2,i))return;var P=M||k||E||T||A||L;if(v.has("hmd-barelink")&&!v.has("footref")&&(w=P=!1),M&&v.has("link")&&v.has("url"))return o(i,c)||h({from:i,to:c,deco:JB}),c+1"===t.doc.sliceString(c,c+1)&&h({from:c,to:c+1,deco:QB}),void(r=c+1);if((M&&v.has("link")&&"]"===m()||w&&k&&"("===m())&&(D=!0),(b||P)&&(r=c,w||P)){var I={from:i,to:c,deco:D?QB:ZB};if(T){var F=t.doc.sliceString(i+1,i+2);I.deco=jr.widget({widget:new sN(F)})}else if(A){var O=(y=t.doc.lineAt(i)).text.match(RL);O&&O[6]||(I.deco=aN,I.to=r=i+1)}else if(E){var B=m();x&&B.length>1&&B.startsWith("#")&&(h({from:i,to:i+1,deco:ZB}),I.from++),I.deco=JB}else L&&(I.deco=JB);h(I)}if(v.has("url")&&!w)d=m();else if(v.has("url")&&w&&d&&")"===m()&&!f){if(!mM(d)){var N=Array.from(v).map((function(e){return"cm-"+e})).join(" ")+" external-link";h({from:c,to:c,always:!0,deco:jr.widget({widget:new lN(N)})})}d=""}else d=""}}}),p(0)},u=this,h=0,p=e.visibleRanges;h0)for(var d=0,f=p;d-1)if(J.has("hmd-internal-link"))D+=f.sliceString(a,s),T=s;else{if(J.has("formatting-link-end")&&D)if(E){var d=G(D,M,T);K(d,S,s)}else{var m=QD(v=xM(D).href).path;n.metadataCache.getFirstLinkpathDest(m,b)||w.push(tN.range(M,T))}D="",S=-1}else if(J.has("image-marker"))A=!0,I=a;else if(J.has("image-alt-text")&&!J.has("formatting"))L=f.sliceString(a,s);else if(A&&J.has("url")&&!J.has("formatting"))P=f.sliceString(a,s),F=a,O=s;else if(A&&P&&J.has("formatting")){d=void 0;if(mM(P=vM(P))){var g=void 0;try{g=decodeURI(P)}catch(e){return}var v=bM(g).trim();d=G(v+"|"+L,I,s)}else P=gM(P),$w.isDesktopApp&&P.startsWith("file:///")&&(P="app://local/"+P.substr("file:///".length)),(d=new cN(P,L)).setPos(F,O);K(d,I,s),A=!1,P="",L="",I=-1,F=-1,O=-1}else if(J.has("hmd-html-begin"))z=a;else if(z>-1&&!q&&J.has("tag"))q=f.sliceString(a,s);else if(J.has("hmd-html-end")&&q&&!wN.contains(q)){var k=s,x=f.sliceString(z,k),$=f.lineAt(z),Z=f.lineAt(k);h=!fC(q);if(f.sliceString($.from,z).trim()||f.sliceString(k,Z.to).trim()||(z=$.from,k=Z.to),!y(z,k))(d=new kN(n,x,h)).setPos(z,k),w.push(jr.replace({widget:d,block:h,side:1}).range(z,k));z=-1,q=""}else J.has("hr")&&(y(a,s)||w.push(oN.range(a,s)));var Q=r.prop(Yp);if(Q){var J,ee=Q.split(" ");if((J=new Set(ee)).has("HyperMD-callout")&&J.has("HyperMD-quote-1")&&(Y(a),U=a,_=s),J.has("HyperMD-quote")&&-1!==U&&(a-_>1?Y(a):_=s),J.has("HyperMD-table-row")&&(Y(a),a-W>1&&X(a),-1===j&&(j=a),W=s),J.has("HyperMD-codeblock-begin")&&-1===H){var te=f.lineAt(a).text.match(XB);V="",te&&(V=te[2]),H=a}if(J.has("HyperMD-codeblock-end")&&-1!==H){var ne=H;if(H=-1,y(ne,s))return;if((Z=f.lineAt(a)).number<=1)return;if(($=f.lineAt(ne)).number>=f.lines)return;var ie=f.line($.number+1).from,re=f.line(Z.number-1).to,oe=f.sliceString(ie,re);if(fN.canRenderLang(V)){for(var ae=null,se=0,le=C;see.scrollDOM.clientHeight)if(n.clientX>e.scrollDOM.getBoundingClientRect().x+e.scrollDOM.clientWidth)return;var i=e.state.selection,r=e.scrollDOM.scrollTop,o=e.plugin(KB);if(o){o.mousedown=!0;var a=e.scrollDOM.doc,s=function(n){0===n.button&&(a.removeEventListener("mouseup",s,t),o.mousedown=!1,e.state.selection===i&&e.scrollDOM.scrollTop===r||setTimeout((function(){e.dispatch({selection:e.state.selection})}),50))};a.addEventListener("mouseup",s,t)}}};return e.scrollDOM.addEventListener("mousedown",n,t),{destroy:function(){e.scrollDOM.removeEventListener("mousedown",n,t)}}})),Ts.domEventHandlers({focus:function(e,t){return xN(t)},blur:function(e,t){return xN(t)},mousedown:function(e){if(0===e.button&&(pD.isModifier(e,"Mod")||!e.shiftKey&&!e.altKey)){var t=e.targetNode;if(t.instanceOf(Element)){var n=t.matchParent('[draggable="true"]');if(n){n.setAttr("contenteditable",!1);var i=e.preventDefault;return e.preventDefault=function(){e.preventDefault=i},!0}}}}})],SN=vo.define((function(e){return new hN(e)}),{decorations:function(e){return e.decorations}}),MN=vo.define((function(e){return new pN(e)}),{decorations:function(e){return e.decorations}});function TN(e,t){var n=CN(e,t);function i(e,t,i){var r=e.doc.lineAt(t.head),o=r.number+(i?1:-1);if(o<1||o>e.doc.lines)return null;var a=e.doc.line(o),s=!0,l=null;if(e.field(n).between(a.from,a.to,(function(e,t,n){if(n.spec.block)return l||e>a.from||tMath.abs(l.head-o.head)?l:s}(o);return t&&(a=bn.range(o.anchor,a.head,a.goalColumn)),a})),o.mainIndex);return a.eq(r.selection)||e.dispatch(r.update({selection:a,scrollIntoView:!0,userEvent:"select"})),!0}var o=On.high(Bs.of([{key:"ArrowUp",run:function(e){return r(e,!1,!1)},shift:function(e){return r(e,!0,!1)}},{key:"ArrowDown",run:function(e){return r(e,!1,!0)},shift:function(e){return r(e,!0,!0)}}])),a=On.low(vo.define((function(e){return e.getNextPosUpDown=i,{destroy:function(){delete e.getNextPosUpDown}}})));return[KB,SN,MN,n,o,EN,a]}var DN={enable:!1},AN=function(e){function t(t){var n=e.call(this,t)||this;return n.navigation=!1,n.allowNoFile=!0,n.requestUpdate=Aw(n.update,0),n}return f(t,e),t.prototype.load=function(){e.prototype.load.call(this);var t=this.app;this.registerEvent(t.workspace.on("file-open",this.onFileOpen,this))},t.prototype.onLoadFile=function(e){return v(this,void 0,Promise,(function(){return y(this,(function(e){return this.requestUpdate(),[2]}))}))},t.prototype.onUnloadFile=function(e){return v(this,void 0,Promise,(function(){return y(this,(function(e){return this.requestUpdate(),[2]}))}))},t.prototype.onFileOpen=function(e){this.leaf.group||this.leaf.pinned||(e instanceof wA?this.loadFile(e):this.loadFile(null),this.requestUpdate())},t.prototype.onGroupChange=function(){if(e.prototype.onGroupChange.call(this),this.leaf.group)for(var t=0,n=this.leaf.workspace.getGroupLeaves(this.leaf.group);t0&&t.revealLeaf(n[0])}))),i=this,o=(r=Object).assign,a=[{}],[4,t.loadData()];case 1:return i.options=o.apply(r,a.concat([s.sent()])),this.app.workspace.backlinkInDocument=this.options.backlinkInDocument,t.addSettingTab(new BN(e,t,this)),[2]}}))}))},e.prototype.onUserEnable=function(){this.initLeaf()},e.prototype.onUserDisable=function(e){for(var t=0,n=e.workspace.getLeavesOfType(PN);t=e[1]}));if(u&&u.frontmatter){var n=u.frontmatter.position;n&&n.start.offset<=e[0]&&n.end.offset>=e[1]&&(t=!0)}t||(h=!0,C.content.push(e))},S=0,M=d;S]/,n=/\s/,i=/[0-9]/,r=/[a-z]/i,o=new RegExp("["+kF.source+"]"),a=function(e){return!function(e){return we.test(e)}(e)&&!t.test(e)&&!n.test(e)};return{token:function(t){var n=t.peek(),s="",l=o.test(n);if(!a(n))return t.next(),null;for(;(n=t.peek())&&a(n)&&l===o.test(n);)s+=n,t.next();if(t.start>=1&&"'"===t.string.charAt(t.start-1))return null;if("'"===n)return null;if(i.test(s))return null;if(!r.test(s))return null;if(s===s.toUpperCase())return null;var c=t.pos;t.pos=t.start;var u=t.baseToken();t.pos=c;var h="";if(u&&u.type&&(h=u.type),h)for(var p=0,d=h.trim().split(" ");p=0;){var h=(w=n[u]).type;if(!h||!h.contains(qN))break;u--}for(var p=l+1;pg&&(g=w.end))}return{type:"internal-link",text:fM(f),start:{line:e.line,ch:m},end:{line:e.line,ch:g}}}return null}if(o.contains("url")){var v=i.string;if("("===v?i=n[l+1]:")"===v&&(i=n[l-1]),!i)return null;v=i.string;try{v=decodeURI(v)}catch(e){return null}var y=!0;return o.contains("string")?y=!mM(v):/^([a-z0-9+.-]+):/.test(v)||(v="https://"+v),{type:y?"external-link":"internal-link",text:v,start:{line:e.line,ch:i.start},end:{line:e.line,ch:i.end}}}if(o.contains("hashtag")){var b="";for(m=e.ch,g=e.ch,c=0;cg&&(g=w.end);else{if(!(c=a.ch);)c++;if(-1!==c){var u={line:a.line,ch:s.start+c},h={line:a.line,ch:s.start+c+l.length},p=VN.correct(r);return{misspelledWord:r,dictionarySuggestions:p,replace:function(e){n.replaceRange(e,u,h),o.focus(),o.setCursor({line:u.line,ch:u.ch+e.length})},addToDictionary:function(e){var t=n.view.app,i=t.vault.getConfig("spellcheckDictionary");i&&Array.isArray(i)||(i=[]),i.push(r),VN.add(r),t.vault.setConfig("spellcheckDictionary",i),o.replaceRange("",u,h),o.replaceRange(r,u,u)}}}}},t.commands={goUp:"goLineUp",goDown:"goLineDown",goLeft:"goCharLeft",goRight:"goCharRight",goStart:"goDocStart",goEnd:"goDocEnd",goWordLeft:"goWordLeft",goWordRight:"goWordRight",indentMore:"indentMore",indentLess:"indentLess",newlineAndIndent:"newlineAndIndent",swapLineUp:"swapLineUp",swapLineDown:"swapLineDown",deleteLine:"deleteLine",toggleFold:"toggleFold",foldAll:"foldAll",unfoldAll:"unfoldAll"},t}(zL),jN=function(){function e(e){this.type="source",this.hoverPopover=null,this.editorEl=null,this.search=null,this.lastCursor=null,this.scrolling=!1,this.view=e;var t=this.app=e.app,n=this.editorEl=e.contentEl.createDiv("markdown-source-view mod-cm5"),i=this.cmEditor=HN(this.editorEl,{mode:"hypermd",theme:"obsidian",lineWrapping:!0,styleActiveLine:!0,configureMouse:function(e,t,n){return{addNew:n.altKey&&!n.ctrlKey&&!n.metaKey}}}),r=this.editor=new _N(e,i);this.clipboardManager=new nP(e),this.updateOptions();var o=i.getWrapperElement(),a=o.find(".CodeMirror-vscrollbar");a.detach(),n.insertBefore(a,n.firstChild),a.style.width="100%";var s=i.getInputField();if(s.instanceOf(HTMLTextAreaElement)){s.style.top="0",s.style.bottom="";var l=s.parentElement.style;l.position="absolute",l.opacity="0"}s.tabIndex=-1,this.search=new FI(t,r,this.editorEl,(function(t){return e.scope=t})),this.editorSuggest=t.workspace.editorSuggest,this.attachCmEvents(),this.attachDomEvents(),t.workspace.trigger("codemirror",i),CT.registerDomEvents(o,new aO(this))}return e.prototype.show=function(){this.editorEl.show(),this.cmEditor.refresh()},e.prototype.hide=function(){this.editorEl.hide(),this.editorSuggest.close(),this.search.hide()},e.prototype.clear=function(){var e=this.cmEditor.getDoc();e.setValue(""),e.clearHistory()},e.prototype.get=function(){return this.cmEditor.getValue()},e.prototype.set=function(e,t){var n=this.cmEditor;if(t)n.setValue(e),n.clearHistory(),this.lastCursor=null;else{for(var i=n.getScrollInfo(),r=e.split(/\r?\n/g),o=n.lineCount(),a=0;aa&&l>a&&n.getLine(s)===r[l];)s--,l--;var c={line:a,ch:0},u={line:s,ch:n.getLine(s).length},h=r.slice(a,l+1).join("\n");a===Math.min(o,r.length)&&(c={line:a-1,ch:n.getLine(a-1).length},r.length>o&&(h="\n"+h)),n.replaceRange(h,c,u,"setValue"),this.scrolling=!0,n.scrollTo(i.left,i.top)}},e.prototype.beforeUnload=function(){},e.prototype.getEphemeralState=function(e){var t=this.editor;if(t.hasFocus()){var n=t.getCursor("anchor"),i=t.getCursor("head");e.cursor={from:{line:n.line,ch:n.ch},to:{line:i.line,ch:i.ch}}}},e.prototype.setEphemeralState=function(e){var t=this.cmEditor,n=e.cursor,i=t.getScrollInfo();if(n&&n.from&&n.to?(t.focus(),t.setSelection(n.from,n.to),t.scrollTo(i.left,i.top)):e.focus&&(this.lastCursor?t.setCursor(this.lastCursor):t.execCommand("goDocStart"),t.focus(),t.scrollTo(i.left,i.top)),e.hasOwnProperty("scroll")&&this.applyScroll(e.scroll),void 0!==e.startLoc&&void 0!==e.endLoc){var r=e.startLoc,o=e.endLoc,a={line:r.line,ch:r.col},s=o?{line:o.line,ch:o.col}:{line:t.lastLine(),ch:t.getLine(t.lastLine()).length};this.highlightSearchMatch(a,s),this.onScroll()}else if(void 0!==e.line&&e.line>=0){var l=e.line;a={line:l,ch:0},s={line:l,ch:t.getLine(l).length};this.highlightSearchMatch(a,s),t.setSelection(s,s),this.onScroll()}else if(void 0!==e.match){var c=e.match,u=qL(c.content,c.matches);this.highlightSearchMatches(u),this.onScroll()}},Object.defineProperty(e.prototype,"file",{get:function(){return this.view.file},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"path",{get:function(){var e;return(null===(e=this.file)||void 0===e?void 0:e.path)||""},enumerable:!1,configurable:!0}),e.prototype.updateOptions=function(){var e,t=this,n=this.app.vault,i=this.cmEditor,r=n.getConfig("readableLineLength");this.editorEl.toggleClass("is-readable-line-width",r);var o="";n.getConfig("autoPairBrackets")&&(o+="()[]{}''\"\""),n.getConfig("autoPairMarkdown")&&(o+="**__``==~~$$%%"),o?i.setOption("autoCloseBrackets",{pairs:o,explode:"",surroundOnly:"=~$%",override:!0}):i.setOption("autoCloseBrackets",!1);var a=n.getConfig("foldHeading"),s=n.getConfig("foldIndent");if(a||s){i.setOption("foldGutter",!0),i.setOption("gutters",["CodeMirror-linenumbers","CodeMirror-foldgutter"]);var l=[HN.fold.frontmatter];a&&l.push(HN.fold.markdown),s&&l.push(HN.fold.indent);var c=1===l.length?l[0]:new((e=HN.fold.combine).bind.apply(e,w([void 0],l,!1)));i.setOption("foldOptions",{rangeFinder:c})}else i.setOption("foldGutter",!1),i.setOption("gutters",[]),i.setOption("foldOptions",{});var u=n.getConfig("showLineNumber");i.setOption("lineNumbers",u);var h=n.getConfig("useTab");i.setOption("indentWithTabs",!!h);var p=n.getConfig("tabSize");i.setOption("tabSize",p),i.setOption("indentUnit",Math.clamp(p,2,4)),i.setOption("scrollPastEnd",!0);var d=n.getConfig("rightToLeft");i.setOption("direction",d?"rtl":"ltr"),i.setOption("rtlMoveVisually",d);var f=n.getConfig("vimMode"),m=n.getConfig("emacsyKeys");if(f?i.setOption("keyMap","vim"):oe&&m?i.setOption("keyMap","macEmacsy"):i.setOption("keyMap","default"),f&&(s||a)&&(HN.Vim.defineAction("fold",(function(e){return e.execCommand("fold")})),HN.Vim.mapCommand("zc","action","fold"),HN.Vim.defineAction("unfold",(function(e){return e.execCommand("unfold")})),HN.Vim.mapCommand("zo","action","unfold"),HN.Vim.defineAction("toggleFold",(function(e){return e.execCommand("toggleFold")})),HN.Vim.mapCommand("za","action","toggleFold")),n.getConfig("spellcheck")){if(VN||st((function(e){window.process.versions.electron;try{var t=window.require("fs"),n=e.ipcRenderer.sendSync("resources"),i=t.readFileSync(n+"/spellcheck/en_US.aff","utf8"),r=t.readFileSync(n+"/spellcheck/en_US.dic","utf8"),o=new window.nspell(i,r);VN={check:function(e){return o.correct(e)},correct:function(e){return o.suggest(e)},add:function(e){o.add(e)},remove:function(e){o.remove(e)}}}catch(e){console.error("Failed to load spellcheck dictionary.",e)}})),zN&&(i.addOverlay(zN),VN))for(var g=0,v=n.getConfig("spellcheckDictionary");g0){a=e[0];i.scrollIntoView(a,i.getWrapperElement().offsetHeight/4)}},e.prototype.clearHighlights=function(){for(var e=0,t=this.cmEditor.getAllMarks();e0?{folds:t,lines:e.lineCount()}:null},e.prototype.applyFoldInfo=function(e){var t=this.cmEditor;if((!e||t.lineCount()===e.lines)&&(t.execCommand("unfoldAll"),e))for(var n=new Set,i=0,r=e.folds;i"],s={},l=0,c=a;l\s*|\[.]\s+)*/.exec(t.text)||[""])[0],o=0;if(r){for(var a=e.getOption("tabSize"),l=0;li-500)){if(t&&0!==e.deltaY){if(oe&&Number.isInteger(e.deltaY))return;var r=n.app.vault.getConfig("baseFontSize");e.deltaY<0?r++:r--,r=Math.clamp(r,10,30),n.app.vault.setConfig("baseFontSize",r),n.app.updateFontSize()}}else s=i}}),{passive:!0}),n}return f(t,e),t.prototype.onTitleChange=function(t){e.prototype.onTitleChange.call(this,t),(t===this.titleEl?this.inlineTitleEl:this.titleEl).setText(t.getText())},t.prototype.onload=function(){e.prototype.onload.call(this);var t=this.leaf;this.registerEvent(t.workspace.on("quick-preview",this.onQuickPreview,this)),this.containerEl.addEventListener("click",this.onViewClick.bind(this)),this.registerEvent(t.workspace.on("resize",this.onResize,this)),this.registerEvent(t.workspace.on("css-change",this.onCssChange,this)),this.registerEvent(this.app.metadataCache.on("changed",this.onMetadataChanged,this)),this.onResize()},t.prototype.onClose=function(){return v(this,void 0,void 0,(function(){var t;return y(this,(function(n){switch(n.label){case 0:return[4,e.prototype.onClose.call(this)];case 1:return n.sent(),(t=this.editMode)&&t.destroy(),[2]}}))}))},t.prototype.getViewType=function(){return GN},t.prototype.canAcceptExtension=function(e){return Ue.contains(e)},t.prototype.getState=function(){var t=e.prototype.getState.call(this);return t.mode=this.getMode(),t.backlinks=this.showBacklinks,this.editMode&&(t.source=this.editMode&&this.editMode.sourceMode),t},t.prototype.setState=function(t,n){return v(this,void 0,Promise,(function(){var i,r,o,a,s,l;return y(this,(function(c){switch(c.label){case 0:return i=!1,r=t.mode,o=t.backlinks,a=t.source,r?(s=this.modes).hasOwnProperty(r)?[4,this.setMode(s[r])]:[3,2]:[3,2];case 1:i=c.sent(),c.label=2;case 2:return(l=this.editMode)&&"boolean"==typeof a&&l.sourceMode!==a&&(l.toggleSource(),i=!0),"boolean"==typeof o&&(this.showBacklinks=o,this.updateShowBacklinks()),i&&(n.layout=!0),[4,e.prototype.setState.call(this,t,n)];case 3:return c.sent(),[2]}}))}))},t.prototype.getEphemeralState=function(){var t=e.prototype.getEphemeralState.call(this);return this.currentMode.getEphemeralState(t),null!==this.scroll&&(t.scroll=this.scroll),t},t.prototype.setEphemeralState=function(t){var n=t.rename;if(n){var i=void 0;"start"===n?i=!0:"end"===n&&(i=!1),this.inlineTitleEl.isShown()&&this.currentMode.getScroll()<=.5&&(Yk(this.inlineTitleEl,i),delete t.rename)}e.prototype.setEphemeralState.call(this,t);var r=t.subpath;if(r){var o=aA(this.app.metadataCache.getFileCache(this.file),r);o&&(t.line=o.start.line,t.startLoc=o.start,t.endLoc=o.end||null)}this.currentMode.setEphemeralState(t),t.hasOwnProperty("scroll")&&(this.scroll=t.scroll)},t.prototype.onUnloadFile=function(t){return v(this,void 0,Promise,(function(){return y(this,(function(n){return this.onMarkdownFold(),this.currentMode.beforeUnload(),[2,e.prototype.onUnloadFile.call(this,t)]}))}))},t.prototype.registerMode=function(e){return this.modes[e.type]=e,e},t.prototype.getMode=function(){return this.currentMode.type},t.prototype.toggleMode=function(){var e=this.leaf,t=e.getViewState();t.state.mode="preview"===t.state.mode?"source":"preview",e.setViewState(t,{focus:!0})},t.prototype.updateButtons=function(){var e=this.currentMode,t=this.modeButtonEl,n=Gk.interface.menu.modClickOpenNewTab({key:lD.Mod});"source"===e.type?(oT(t,"lucide-book-open"),tD(t,Gk("interface.menu.edit-view")+"\n"+Gk("interface.menu.switch-to-read-view")+"\n"+n)):(oT(t,"lucide-edit-3"),tD(t,Gk("interface.menu.read-view")+"\n"+Gk("interface.menu.switch-to-edit-view")+"\n"+n))},t.prototype.getSyncViewState=function(){var t=e.prototype.getSyncViewState.call(this);return delete t.state.mode,delete t.state.source,delete t.eState.cursor,t},t.prototype.setMode=function(e){return v(this,void 0,Promise,(function(){var t,n,i,r;return y(this,(function(o){switch(o.label){case 0:return e&&this.currentMode!==e?(n=(t=this).currentMode,i=t.scroll,"source"!==n.type?[3,2]:[4,this.save()]):[2,!1];case 1:o.sent(),o.label=2;case 2:return r=n.getFoldInfo(),this.app.foldManager.save(this.file,r),n.hide(),this.currentMode=e,e.show(),null!==this.data&&e.set(this.data,!1),e.onResize(),null!==i&&e.setEphemeralState({scroll:i}),e.applyFoldInfo(r),this.updateButtons(),this.containerEl.setAttribute("data-mode",this.getMode()),[2,!0]}}))}))},t.prototype.getViewData=function(){return this.currentMode.get()},t.prototype.clear=function(){var e=this,t=e.currentMode,n=e.sourceMode,i=e.editMode,r=e.modes;for(var o in t!==n&&t!==i||this.onMarkdownFold(),this.scroll=null,r)r.hasOwnProperty(o)&&r[o].clear()},Object.defineProperty(t.prototype,"path",{get:function(){return this.file.path},enumerable:!1,configurable:!0}),t.prototype.onSwitchView=function(e){return v(this,void 0,void 0,(function(){var t,n,i,r;return y(this,(function(o){switch(o.label){case 0:return e.preventDefault(),t=this.leaf,(n=this.getState()).mode="preview"===this.getMode()?"source":"preview",i={type:GN,state:n},pD.isModEvent(e)&&(r=this.app.workspace,t=r.createLeafBySplit(this.leaf),i.active=!0,i.group=this.leaf),[4,t.setViewState(i)];case 1:return o.sent(),[2]}}))}))},t.prototype.canToggleBacklinks=function(){return"preview"===this.getMode()||this.editMode instanceof NN},t.prototype.toggleBacklinks=function(){return v(this,void 0,void 0,(function(){var e,t,n;return y(this,(function(i){switch(i.label){case 0:return e=this.leaf,(t=this.getState()).backlinks=!t.backlinks,n={type:GN,state:t},[4,e.setViewState(n)];case 1:return i.sent(),this.app.workspace.requestSaveLayout(),[2]}}))}))},t.prototype.updateShowBacklinks=function(){var e=this.showBacklinks,t=this.app,n=this.backlinks;e&&!n?(this.backlinksEl.show(),this.backlinks=this.addChild(new ON(t,this.backlinksEl)),this.updateBacklinks()):!e&&n&&(this.removeChild(n),this.backlinksEl.empty(),this.backlinksEl.hide(),this.backlinks=null),this.currentMode===this.editMode&&this.editMode.onResize()},t.prototype.updateBacklinks=function(){var e=this.backlinks;e&&(e.file=this.file,e.update())},t.prototype.onLoadFile=function(t){return v(this,void 0,Promise,(function(){return y(this,(function(n){switch(n.label){case 0:return this.inlineTitleEl.setText(this.getDisplayText()),[4,e.prototype.onLoadFile.call(this,t)];case 1:return n.sent(),this.updateFrontmatter(this.app.metadataCache.getFileCache(t)),this.updateBacklinks(),[2]}}))}))},t.prototype.onRename=function(t){return v(this,void 0,void 0,(function(){return y(this,(function(n){switch(n.label){case 0:return t===this.file&&this.inlineTitleEl.setText(t.basename),[4,e.prototype.onRename.call(this,t)];case 1:return n.sent(),[2]}}))}))},t.prototype.onMarkdownScroll=function(){var e=this.currentMode.getScroll();return null!==e&&(this.scroll=e),this.syncState(!1)},t.prototype.onMarkdownFold=function(){this.app.foldManager.save(this.file,this.currentMode.getFoldInfo())},t.prototype.onPaneMenu=function(t,n){var i=this;e.prototype.onPaneMenu.call(this,t,n);var r=this.getMode();t.addItem((function(e){return e.setSection("pane").setTitle(Gk.interface.menu.toggleReadingView()).setChecked("preview"===r).setIcon("lucide-book-open").onClick(i.onSwitchView.bind(i))})),this.editMode===this.currentMode&&t.addItem((function(e){return e.setSection("pane").setTitle(Gk.interface.menu.toggleSourceMode()).setIcon("lucide-code-2").setChecked(!!i.getState().source).onClick((function(){var e=i.getState();e.source=!e.source,i.leaf.setViewState({type:GN,state:e})}))})),t.addItem((function(e){return e.setSection("action").setTitle(Gk.interface.menu.find()).setIcon("lucide-file-search").onClick((function(){return i.showSearch()}))})),"source"===r&&t.addItem((function(e){return e.setSection("action").setTitle(Gk.interface.menu.replace()).setIcon("lucide-file-search").onClick((function(){return i.showSearch(!0)}))})),$w.isDesktopApp&&t.addItem((function(e){return e.setSection("action").setTitle(Gk.commands.exportPdf()).setIcon("lucide-file-down").onClick((function(e){return i.printToPdf()}))}))},t.prototype.onResize=function(){this.currentMode.onResize()},t.prototype.onCssChange=function(){this.editMode&&this.editMode.onCssChange(),this.sourceMode&&this.sourceMode instanceof jN&&this.sourceMode.onCssChange()},t.prototype.onMetadataChanged=function(e,t,n){this.file===e&&this.updateFrontmatter(n)},t.prototype.updateFrontmatter=function(e){if(this.editMode){var t=e&&e.frontmatter,n=JSON.stringify(t);this.lastFrontmatter!==n&&(this.lastFrontmatter=n,this.editMode.setCssClass(zM(t)))}},t.prototype.onTitleKeydown=function(e){if(!e.isComposing){if("Escape"===e.key)e.preventDefault(),(t=e.targetNode).setText(this.file.basename),this.setEphemeralState({focus:!0});if("Enter"===e.key||"Tab"===e.key)e.preventDefault(),this.setEphemeralState({focus:!0}),$w.isMobile&&this.editor.focus();else if("ArrowDown"===e.key){var t,n=(t=e.targetNode).win.getSelection();if(n&&n.rangeCount>=1&&t instanceof HTMLElement){var i=n.getRangeAt(0);if(t===i.startContainer||t.contains(i.startContainer)){var r=i.getBoundingClientRect();r.bottom+r.height/2>=t.getBoundingClientRect().bottom&&(e.preventDefault(),this.setEphemeralState({focus:!0,cursor:{from:{line:0,ch:0}}}))}}}}},t.prototype.triggerQuickPreview=function(){var e=this.currentMode.get();this.data!==e&&(this.data=e,this.leaf.workspace.onQuickPreview(this.file,this.data))},t.prototype.onQuickPreview=function(e,t){e===this.file&&this.setData(t,!1)},t.prototype.setViewData=function(e,t){var n=this.currentMode,i=this.modes;if(t){for(var r in this.scroll=null,i)i.hasOwnProperty(r)&&i[r].set(e,!0);var o=this.app.foldManager.load(this.file);o&&n.applyFoldInfo(o)}else n.set(e,!1)},t.prototype.onViewClick=function(e){var t=this,n=t.currentMode,i=t.sourceMode,r=t.editMode;e.defaultPrevented||(n===i&&i.onViewClick(e),n===r&&r.onViewClick(e))},t.prototype.updateOptions=function(){var e=this.modes;for(var t in e)e.hasOwnProperty(t)&&e[t].updateOptions()},t.prototype.showSearch=function(e){void 0===e&&(e=!1),this.currentMode.showSearch(e)},t.prototype.getSelection=function(){return this.currentMode.getSelection()},t.prototype.printToPdf=function(){new XN(this.app,this.file).open()},t.prototype.triggerClickableToken=function(e,t){var n=this;if("internal-link"===e.type)setTimeout((function(){n.app.workspace.openLinkText(e.text,n.file.path,t,{active:!0})}),100);else if("external-link"===e.type)window.open(e.text);else if("tag"===e.type){var i=e.text;i.startsWith("#")||(i="#"+i);var r=this.app.internalPlugins.getPluginById("global-search");r&&r.instance.openGlobalSearch("tag:"+i)}},t.prototype.followLinkUnderCursor=function(e){var t=this.editor.getClickableTokenAt(this.editor.getCursor());t&&this.triggerClickableToken(t,e)},t.VIEW_TYPE=GN,t}(WN),YN=Gk.editor.printModal,XN=function(e){function t(t,n){var i=e.call(this,t)||this;i.file=n,i.modalEl.addClass("mod-narrow"),i.titleEl.setText(YN.title());var r=i.contentEl;r.createEl("p",{cls:"u-muted",text:YN.caption({filename:n.basename})});var o=t.vault.getConfig("pdfExportSettings");return new aL(r).setName(YN.settingIncludeFileName()).addToggle((function(e){return e.setValue(o.includeName).then((function(e){return i.includeName=e}))})),new aL(r).setName(YN.settingPageSize()).addDropdown((function(e){return e.addOption("A3",YN.settingPageSizeA3()).addOption("A4",YN.settingPageSizeA4()).addOption("A5",YN.settingPageSizeA5()).addOption("Legal",YN.settingPageSizeLegal()).addOption("Letter",YN.settingPageSizeLetter()).addOption("Tabloid",YN.settingPageSizeTabloid()).setValue(o.pageSize).then((function(e){return i.pageSize=e}))})),new aL(r).setName(YN.settingLandscape()).addToggle((function(e){return e.setValue(o.landscape).then((function(e){return i.landscape=e}))})),new aL(r).setName(YN.settingMargin()).addDropdown((function(e){return e.addOption("0",YN.settingMarginDefault()).addOption("2",YN.settingMarginMinimal()).addOption("1",YN.settingMarginNone()).setValue(o.margin).then((function(e){return i.marginsType=e}))})),new aL(r).setName(YN.settingDownscalePercent()).addSlider((function(e){return e.setLimits(10,100,1).setDynamicTooltip().setValue(o.downscalePercent).then((function(e){return i.scaleFactor=e}))})),r.createDiv("modal-button-container",(function(e){e.createEl("button",{cls:"mod-cta",text:YN.buttonExportToPdf()},(function(e){e.addEventListener("click",(function(){return v(i,void 0,void 0,(function(){var e,n,i,r;return y(this,(function(o){switch(o.label){case 0:return e={includeName:this.includeName.getValue(),pageSize:this.pageSize.getValue(),landscape:this.landscape.getValue(),margin:this.marginsType.getValue(),downscalePercent:this.scaleFactor.getValue()},t.vault.setConfig("pdfExportSettings",e),(n={}).includeName=e.includeName,n.pageSize=e.pageSize,n.landscape=e.landscape,n.marginsType=parseInt(e.margin),1!==n.marginsType&&2!==n.marginsType||(n.margins={top:0,left:0,bottom:0,right:0}),n.scaleFactor=e.downscalePercent,n.scale=Math.clamp(n.scaleFactor/100,.1,2),n.open=!0,i=this.file,[4,at("electron").remote.dialog.showSaveDialog({defaultPath:i.basename+".pdf",filters:[{name:"PDF Files",extensions:["pdf"]},{name:"All Files",extensions:["*"]}],properties:["showOverwriteConfirmation"]})];case 1:return(r=o.sent()).canceled||!r.filePath?[2]:(n.filepath=r.filePath,this.close(),[4,this.printToPdf(n)]);case 2:return o.sent(),[2]}}))}))}))}))})),i}return f(t,e),t.prototype.printToPdf=function(e){return v(this,void 0,Promise,(function(){var t,n,i,r,o;return y(this,(function(a){switch(a.label){case 0:(t=this.app.loadProgress).setMessage(Gk.dialogue.preparingPdf()),t.show(),n=document.body.createDiv("print theme-light"),(i=new GM).load(),r=function(){n.detach(),i.unload(),t.hide()},n.addEventListener("click",r),a.label=1;case 1:return a.trys.push([1,5,6,7]),[4,this.print(n,i,e.includeName)];case 2:return a.sent(),[4,sleep(200)];case 3:return a.sent(),[4,(s=e,new Promise((function(e){var t=at("electron").ipcRenderer;t.once("print-to-pdf",e),t.send("print-to-pdf",s)})))];case 4:return a.sent(),new gD("PDF Saved to ".concat(e.filepath)),[3,7];case 5:return o=a.sent(),console.error(o),new gD("Failed to save PDF."),[3,7];case 6:return r(),[7];case 7:return[2]}var s}))}))},t.prototype.testPrint=function(){return v(this,void 0,void 0,(function(){var e,t;return y(this,(function(n){switch(n.label){case 0:return(e=document.body.createDiv("print")).addEventListener("click",(function(){e.detach(),t.unload()})),(t=new GM).load(),[4,this.print(e,t,!0)];case 1:return n.sent(),[2]}}))}))},t.prototype.print=function(e,t,n){return v(this,void 0,Promise,(function(){var i,r,o,a,s,l,c,u,h,p,d,f,m;return y(this,(function(g){switch(g.label){case 0:return i=e.createDiv("markdown-preview-view markdown-rendered"),o=(r=this).app,a=r.file,i.toggleClass("rtl",o.vault.getConfig("rightToLeft")),i.toggleClass("show-frontmatter",o.vault.getConfig("showFrontmatter")),n&&i.createEl("h1",{text:a.basename}),[4,this.app.vault.cachedRead(a)];case 1:return s=g.sent(),l=LM(s),c=FM(l),u=OM(l),h=WM(u),i.appendChild(h),i.addClasses(zM(c)),p=[],uO.postProcess(o,{docId:Ce(16),sourcePath:a.path,frontmatter:c,promises:p,addChild:function(e){return t.addChild(e)},getSectionInfo:function(){return null},containerEl:i,el:i,displayMode:!0}),p.length>0?[4,Promise.all(p)]:[3,3];case 2:g.sent(),g.label=3;case 3:for(d=i.findAll("a.internal-link"),f=0,m=d;f0&&(i.appendChild(a({title:"What's new in v".concat(this.version),type:"attention",onClick:function(e){return u.showPatchNotes(e,u.version)}})),r.last()>1&&i.appendChild(a({title:"Other versions",type:""},(function(e){for(var t=function(t){var n=w(w([],o.slice(0,-1),!0),[t],!1).join(".");e.appendChild(a({title:"What's new in v".concat(n),type:"info",onClick:function(e){return u.showPatchNotes(e,n)}}))},n=r.last()-1;n>=0;n--)t(n)}))),i.createEl("hr")),s=r.slice(0,-1),[4,this.fetchReleaseNotes(s.join("."))];case 1:return l=h.sent(),c=OM(LM(l)),i.createEl("h1",{text:"What's new in v".concat(s.join("."))}),i.appendChild(WM(c)),Fk(i,sR),i.createEl("section",{cls:"footnotes"},(function(e){e.createEl("hr"),e.createEl("p",{cls:"footnote",text:"A complete list of previous changes can be found on "},(function(e){e.createEl("a",{href:"https://forum.obsidian.md/c/announcements/13",text:"our forum",cls:"external-link"}),e.appendText(".")}))})),[2]}}))}))},t}(eB);var cR=function(e){function t(){var t=e.call(this)||this;return t.viewByType={},t.typeByExtension={},t.registerViewWithExtensions(Ue,KN.VIEW_TYPE,(function(e){return new KN(e)})),t.registerViewWithExtensions(He,sB.VIEW_TYPE,(function(e){return new sB(e)})),t.registerViewWithExtensions(Ve,oB.VIEW_TYPE,(function(e){return new oB(e)})),t.registerViewWithExtensions(ze,gB.VIEW_TYPE,(function(e){return new gB(e)})),t.registerViewWithExtensions(qe,dB.VIEW_TYPE,(function(e){return new dB(e)})),t.registerView(aR,(function(e){return new lR(e)})),t}return f(t,e),t.prototype.registerView=function(e,t){var n=this.viewByType;if(n.hasOwnProperty(e))throw new Error('Attempting to register an existing view type "'.concat(e,'"'));n[e]=t,this.trigger("view-registered",e)},t.prototype.unregisterView=function(e){var t=this.viewByType;t.hasOwnProperty(e)&&(delete t[e],this.trigger("view-unregistered",e))},t.prototype.registerExtensions=function(e,t){for(var n=this.typeByExtension,i=0,r=e;i=n.length&&(e=0),this.forceSetSelectedItem(e,t))},e.prototype.forceSetSelectedItem=function(e,t){var n,i,r=this.suggestions,o=r[this.selectedItem];o&&o.removeClass("is-selected"),this.selectedItem=e;var a=r[this.selectedItem];a&&(a.addClass("is-selected"),t&&t.instanceOf(KeyboardEvent)&&a.scrollIntoView(!1)),null===(i=(n=this.chooser).onSelectedChange)||void 0===i||i.call(n,this.values[e],t)},e.prototype.onSuggestionClick=function(e,t){e.preventDefault();var n=this.suggestions.indexOf(t);this.setSelectedItem(n,e),this.useSelectedItem(e)},e.prototype.onSuggestionMouseover=function(e,t){var n=this.suggestions.indexOf(t);this.setSelectedItem(n,e)},e.prototype.useSelectedItem=function(e){if(!this.values)return!1;var t=this.values[this.selectedItem];return void 0!==t&&(this.chooser.selectSuggestion(t,e),!0)},e}(),DR=function(){function e(e,t){var n=this;this.isOpen=!1,this.app=e,this.scope=new uD(t||e.scope),this.suggestEl=createDiv("suggestion-container");var i=this.suggestEl.createDiv("suggestion");this.suggestions=new TR(this,i,this.scope),this.scope.register([],"Escape",(function(){return n.close(),!1}))}return e.prototype.open=function(){var e=this.app,t=this.suggestEl;if(!this.isOpen){if(this.isOpen=!0,e.keymap.pushScope(this.scope),yw(t,!0),activeDocument.body.appendChild(t),$w.isPhone){var n=t.offsetHeight-1;ww(t,new mw({duration:300}).addProp("transform","translateY(".concat(n,"px)"),""))}VT(this)}},e.prototype.close=function(){var e=this,t=this.app,n=this.suggestEl;if(this.autoDestroy&&(this.autoDestroy(),this.autoDestroy=null),t.keymap.popScope(this.scope),this.isOpen){if(this.isOpen=!1,$w.isPhone){var i=n.offsetHeight-1;ww(n,new mw({duration:300}).addProp("transform","","translateY(".concat(i,"px)")),(function(){e.suggestions.setSuggestions([]),n.detach()}))}else this.suggestions.setSuggestions([]),n.detach();zT(this)}},e.prototype.reposition=function(e){var t=this.suggestEl;t.style.left="0",t.style.top="0",Qk(e,t,{gap:5})},e.prototype.setAutoDestroy=function(e){var t=this;this.autoDestroy&&this.autoDestroy(),e&&(this.autoDestroy=function(e,t,n){var i=e.doc,r=setInterval((function(){i.body.contains(e)||(clearInterval(r),n())}),t);return function(){clearInterval(r)}}(e,500,(function(){t.close()})))},e}(),AR=function(e){function t(t,n){var i=e.call(this,t)||this;return i.textInputEl=null,i.textInputEl=n,n.addEventListener("input",i.onInputChange.bind(i)),n.addEventListener("focus",i.onInputChange.bind(i)),n.addEventListener("blur",i.close.bind(i)),i.suggestEl.on("mousedown",".suggestion-item",(function(e){e.preventDefault()})),i}return f(t,e),t.prototype.onInputChange=function(){var e=this.textInputEl,t=e.value,n=this.getSuggestions(t);n.length>0?(this.suggestions.setSuggestions(n),this.open(),this.setAutoDestroy(e),$w.isPhone||this.reposition(tC(e))):this.close()},t.prototype.selectSuggestion=function(e,t){this.onSelect&&this.onSelect(e,t)},t}(DR),LR=function(e){function t(t,n,i){void 0===i&&(i=!1);var r=e.call(this,t,n)||this;return r.allowNullSelection=i,r}return f(t,e),t.prototype.renderSuggestion=function(e,t){e?t.setText(e.path):t.setText("+ "+this.textInputEl.value)},t.prototype.getSuggestions=function(e){e=e.toLowerCase();for(var t=[],n=0,i=this.app.vault.getAllLoadedFiles();ne.limit,g.settingEl.toggle(t),i=e.size<0?"Unknown":ee(e.size),r=e.limit<0?"Unknown":ee(e.limit),f.setText(IR.optionOverSizeDesc({size:i,limit:r})),[2]}}))}))},(g=new aL(i).setName(IR.optionOverSize()).setDesc(createFragment((function(e){f=e.createSpan({text:""})}))).addButton((function(e){return e.setButtonText(IR.msgLargestFiles()).onClick((function(){new _R(t,n).open()}))})).addButton((function(e){return e.setWarning().setButtonText(IR.buttonPurgeRemote()).setTooltip(IR.tooltipPurgeRemote()).onClick((function(){return v(k,void 0,void 0,(function(){return y(this,(function(e){switch(e.label){case 0:return[4,n.purge()];case 1:return e.sent(),new gD(IR.msgPurgeComplete()),[4,m()];case 2:return e.sent(),[2]}}))}))}))}))).settingEl.hide(),m(),$w.isMobileApp&&new aL(i).setName(IR.optionPreventSleep()).setDesc(IR.optionPreventSleepDesc()).addToggle((function(e){return e.setValue(k.sync.preventSleep).onChange((function(e){return k.sync.preventSleep=e}))})),new aL(i).setName(IR.optionContactSupport()).setDesc(IR.optionContactSupportDesc()).addButton((function(e){return e.setButtonText(IR.buttonEmailSupport()).onClick((function(){window.open("mailto:support@obsidian.md?subject=Obsidian%20Sync%20Support")}))})),new aL(i).setHeading().setName(IR.optionSelectiveSync()),new aL(i).setName(IR.optionExcludedFolders()).setDesc(createFragment((function(e){var t=k.sync.ignoreFolders;if(e.appendText(IR.optionExcludedFolderDesc()),t.length>0){e.appendText(IR.optionCurrentlyExcludedFolders());for(var n=e.createEl("ul"),i=0,r=t;i0&&(s=this.items.last().uid),[4,this.plugin.getHistory(this.filepath,s)];case 1:for(c=w.sent(),u=c.items,h=0,p=u;h0)}),5)})),r.push(s)},l=0,c=this.history;l0){new aL(t).setName(IR.labelVaultsSharedWithYou()).setHeading();a=t.createDiv("vault-list");for(var u=function(t){var i=n===t.id;a.createDiv("vault-list-item list-item",(function(r){r.toggleClass("is-connected",i),r.createDiv("vault-list-item-icon list-item-part",(function(e){oT(e,i?"open-vault":"vault")})),r.createDiv({cls:"vault-list-item-title list-item-part",text:t.name}),r.createDiv({cls:"vault-list-item-creation-time list-item-part mod-extended",text:IR.labelVaultCreatedTime({time:window.moment(t.created).fromNow()})}),i?r.createEl("button",{cls:"list-item-part vault-list-item-button",text:IR.buttonDisconnectFromRemoteVault()}).addEventListener("click",(function(){return v(e,void 0,void 0,(function(){return y(this,(function(e){switch(e.label){case 0:return this.startLoading(),[4,this.plugin.unsetup()];case 1:return e.sent(),this.open(),[2]}}))}))})):n||r.createEl("button",{cls:"list-item-part vault-list-item-button",text:IR.buttonConnectToRemoteVault()},(function(n){n.addClass("mod-cta"),n.addEventListener("click",(function(){e.connectToVault(t)}))})),r.createDiv("clickable-icon",(function(n){oT(n,"lucide-x"),tD(n,IR.tooltipLeaveVaultSharing()),n.addEventListener("click",(function(){var n=document.createDocumentFragment();n.createEl("p",{cls:"setting-message mod-warning",text:IR.labelLeaveVaultConfirmationDetails()}),n.createEl("p",{text:IR.labelLeaveVaultConfirmationDetails()}),new fD(e.app).setTitle(IR.labelLeaveVaultConfirmation({vault:t.name})).setContent(n).addButton("mod-warning",IR.buttonLeave(),(function(){e.deleteVaultShare(t.id,t.share_uid)})).addCancelButton().open()}))}))}))},h=0,p=o;h0?new fD(n).setTitle(IR.labelConfirmMergeVault()).setContent(createFragment((function(t){t.createEl("p",{text:IR.msgVaultHasNotes()}),t.createEl("p",{text:IR.msgVaultMergeWarning({name:e.name})})}))).addButton("mod-cta",Gk.dialogue.buttonContinue(),t).addCancelButton().open():t(),[2]):(this.errorEl.setText(IR.labelRequireSubscriptionToConnect()),this.errorEl.show(),[2])}}))}))},t.prototype.deleteVaultShare=function(e,t){return v(this,void 0,void 0,(function(){var n=this;return y(this,(function(i){return this.app.account.removeUserFromVault(e,t,(function(){return v(n,void 0,void 0,(function(){return y(this,(function(t){switch(t.label){case 0:return this.plugin.getRemoteVaultId()!==e?[3,2]:[4,this.plugin.unsetup()];case 1:t.sent(),t.label=2;case 2:return[2]}}))}))})),[2]}))}))},t}(dD),zR=function(e){function t(t,n){var i=e.call(this,t)||this;i.keyInputEl=null,i.errorEl=null,i.plugin=null,i.plugin=n;var r=document.createDocumentFragment(),o=kR(r);o.hide();var a=r.createDiv({},(function(e){e.createDiv("message-container",(function(e){i.errorEl=e.createDiv("message mod-error")})),i.errorEl.hide(),e.createEl("p","u-center-text",(function(e){e.createEl("label",{cls:"input-label",text:IR.optionEncryptionPassword()}),i.keyInputEl=e.createEl("input",{type:"password"},(function(e){e.setAttribute("placeholder",IR.optionEncryptionPasswordPlaceholder()),e.addEventListener("keydown",(function(e){"Enter"!==e.key||e.isComposing||s()}))}))}))})),s=function(){return v(i,void 0,void 0,(function(){var e,n,i;return y(this,(function(r){switch(r.label){case 0:o.show(),a.hide(),this.errorEl.hide(),e=this.keyInputEl.value,r.label=1;case 1:return r.trys.push([1,5,,6]),n=this.currentVaultInfo,[4,this.plugin.verifyPassword(n.id,e,n.salt,n.host)];case 2:return r.sent(),new gD(IR.msgVerifiedPassword()),[4,this.plugin.setup(n.id,n.name,e,n.salt,n.host)];case 3:return r.sent(),[4,this.plugin.setPause(!0)];case 4:return r.sent(),this.successCallback&&this.successCallback(),new jR(t,this.plugin,n.name).open(),this.close(),[3,6];case 5:return i=r.sent(),console.error(i),i instanceof XMLHttpRequest?this.errorEl.setText(Gk.plugins.publish.msgNetworkError()):this.errorEl.setText(i.message),this.errorEl.show(),[3,6];case 6:return a.show(),o.hide(),[2]}}))}))};return i.setTitle(IR.labelEnterEncryptionPassword()).setContent(r).addButton("mod-cta",IR.buttonUnlockVault(),(function(){return s(),!0})).addCancelButton(),i}return f(t,e),t.prototype.setVault=function(e,t){this.currentVaultInfo=e,this.keyInputEl.value="",this.successCallback=t},t}(fD),qR=function(e){function t(t,n){var i=e.call(this,t)||this;i.plugin=null,i.syncLog=[],i.syncLogContainerEl=null,i.errorOnly=!1,i.updateSyncLog=function(){for(var e=i.syncLogContainerEl,t=i.syncLog=i.plugin.syncLog,n=function(e){if(e.el)return"continue";e.el=createDiv("list-item",(function(t){var n,i=window.moment(e.ts).format("YYYY-MM-DD HH:mm"),r="".concat(i," - ").concat(e.info," ").concat(null!==(n=e.file)&&void 0!==n?n:"");t.createSpan({text:r})})),e.error&&e.el.addClass("mod-error")},r=0,o=t;r0&&t.push(a);for(t=t.sort((function(e,t){return t.size-e.size})).slice(0,20),i=this.contentEl,r=0,o=t;r0){i.createEl("p",{cls:"u-muted",text:IR.labelSharingWithUsers()});for(var r=i.createDiv(),o=function(n){r.createDiv("list-item",(function(r){n.name?(r.createDiv({cls:"list-item-part",text:n.name}),r.createDiv({cls:"list-item-part mod-extended",text:"<".concat(n.email,">")})):r.createDiv({cls:"list-item-part mod-extended",text:n.email}),n.accepted||r.createDiv({cls:"list-item-part"},(function(e){e.createSpan({cls:"u-muted",text:FR.labelInvitePending()})})),r.createDiv("list-item-part clickable-icon",(function(r){oT(r,"lucide-x"),tD(r,FR.tooltipRemoveUser()),r.addEventListener("click",(function(){i.hide(),t.show(),e.app.account.removeUserFromVault(e.vaultId,n.uid,(function(){e.display()}))}))}))}))},a=0,s=e.shares;athis.nextTs},e}(),KR=Gk.plugins.sync,YR={1e3:"Disconnected",1001:"Going Away",1002:"Protocol Error",1003:"Unsupported Data",1004:"(For future)",1005:"No Status Received",1006:"Disconnected",1007:"Invalid frame payload data",1008:"Policy Violation",1009:"Message too big",1010:"Missing Extension",1011:"Internal Error",1012:"Service Restart",1013:"Try Again Later",1014:"Bad Gateway",1015:"TLS Handshake"},XR=window.WebSocket;var $R=window.process&&window.process.platform,ZR=nw||$R&&"win32"!==$R&&"darwin"!==$R,QR=nw?500:2e3,JR=["image"],eH="";nw&&v(void 0,void 0,void 0,(function(){var e;return y(this,(function(t){switch(t.label){case 0:return[4,lw.getInfo()];case 1:return e=t.sent(),eH=e.name,[2]}}))}));var tH,nH=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.id="sync",t.name=KR.name(),t.description=KR.desc(),t.app=null,t.vault=null,t.plugin=null,t.db=null,t.vaultId=null,t.vaultName=null,t.key=null,t.host=null,t.deviceName="",t.version=0,t.initial=!0,t.localFiles={},t.scanSpecialFiles=!1,t.scanSpecialFileQueue=[],t.serverFiles={},t.fileRetry={},t.newServerFiles=[],t.allowTypes=new Set(JR),t.allowSpecialFiles=new Set,t.ignoreFolders=[],t.preventSleep=!1,t.dirty=!1,t.requestSaveData=Aw(t.saveData.bind(t),2e3),t.boundOnFileAdd=t.onFileAdd.bind(t),t.boundOnFileRemove=t.onFileRemove.bind(t),t.boundOnFileRename=t.onFileRename.bind(t),t.boundOnRaw=t.onRaw.bind(t),t.pause=!1,t.syncing=!1,t.error=!1,t.ready=!1,t.server=null,t.syncLog=[],t.timer=0,t.backoff=new GR(0,3e5,5e3,!0),t.justPushed=null,t.statusIconEl=null,t.filterCache={},t.syncingPath="",t.syncStatus="",t}return f(t,e),t.prototype.getRemoteVaultId=function(){return this.vaultId},t.prototype.getRemoteVaultName=function(){return this.vaultName},t.prototype.init=function(e,t){this.app=e,this.vault=e.vault,this.plugin=t,this.settingTab=new OR(e,t,this),t.registerStatusBarItem(),this.setStatus("Uninitialized")},t.prototype.openChooseRemoteVaultModal=function(e){var t=new VR(this.app,this);t.open(),e&&t.connectToVault(e)},t.prototype.onEnable=function(e,t){return v(this,void 0,void 0,(function(){var n,i,r,o=this;return y(this,(function(a){return n=e.workspace,this.registerEvents(),t.addSettingTab(this.settingTab),t.registerEvent(e.workspace.on("file-menu",this.onFileMenu,this)),n.onLayoutReady((function(){return v(o,void 0,void 0,(function(){return y(this,(function(e){switch(e.label){case 0:return[4,this.loadData()];case 1:return e.sent(),this.requestSync(),[2]}}))}))})),this.timer=window.setInterval(this.requestSync.bind(this),3e4),this.on("status-change",(function(){o.updateStatusBar()})),$w.isMobile?n.onLayoutReady((function(){var e=n.rightSplit;o.statusIconEl=e.addHeaderButton("sync-small",o.onStatusIconClick.bind(o)),o.statusIconEl.addEventListener("contextmenu",o.onStatusIconContextMenu.bind(o)),o.statusIconEl.addClass("sync-status-icon")})):(i=t.statusBarEl)&&(r=i.createDiv("status-bar-item-segment"),this.statusIconEl=r.createSpan("status-bar-item-icon sync-status-icon"),i.addEventListener("click",this.onStatusIconClick.bind(this)),i.addEventListener("contextmenu",this.onStatusIconContextMenu.bind(this))),[2]}))}))},t.prototype.onDisable=function(e,t){this.server&&(this.server.disconnect(),this.server=null),this.timer&&(clearInterval(this.timer),this.timer=0),this.statusIconEl&&this.statusIconEl.detach(),this.unregisterEvents()},t.prototype.onFileMenu=function(e,t,n){var i=this;t instanceof wA&&("tab-header"===n||"more-options"===n||"file-explorer-context-menu"===n)&&e.addItem((function(e){return e.setSection("info").setTitle(KR.actionViewVersionHistory()).setIcon("lucide-history").onClick((function(){return i.showVersionHistory(t.path)}))}))},t.prototype.onStatusIconClick=function(){this.vaultId&&!this.pause?this.showSyncLog():this.openSettings()},t.prototype.onStatusIconContextMenu=function(e){var t=this,n=new KL;if(this.vaultId){var i=this.pause;n.addItem((function(e){return e.setTitle(KR(i?"button-resume":"button-pause")).setIcon(i?"lucide-play-circle":"paused").onClick((function(){return t.setPause(!i)}))})),n.addSeparator(),n.addItem((function(e){return e.setTitle(Gk.interface.settings()).setIcon("lucide-settings").onClick((function(){return t.openSettings()}))})),n.addItem((function(e){return e.setTitle(KR.optionSyncLog()).setIcon("lucide-align-left").onClick((function(){return t.showSyncLog()}))})),n.addItem((function(e){return e.setTitle(KR.optionViewDeletedFiles()).setIcon("lucide-trash-2").onClick((function(){return t.showDeletedFiles()}))}))}n.showAtMouseEvent(e)},t.prototype.loadData=function(){return v(this,void 0,void 0,(function(){var e,t,n,i,r,o,a;return y(this,(function(s){switch(s.label){case 0:e=null,s.label=1;case 1:return s.trys.push([1,4,,5]),t=this,[4,BA(this.app.appId+"-sync",1,{upgrade:function(e,t,n,i){e.objectStoreNames.contains("data")||e.createObjectStore("data")}})];case 2:return[4,(t.db=s.sent()).get("data","data")];case 3:return e=s.sent(),[3,5];case 4:return n=s.sent(),console.error("Failed to load sync data",n),[3,5];case 5:return e?[3,9]:[4,this.plugin.loadData()];case 6:return(e=s.sent())?[4,this.db.put("data",e,"data")]:[3,9];case 7:return s.sent(),[4,this.plugin.deleteData()];case 8:s.sent(),s.label=9;case 9:if(!e)return[2];i=0;try{this.vaultId=e.vaultId,this.vaultName=e.vaultName,this.key=z(e.key),this.host=e.host,this.deviceName=e.deviceName||"",this.pause=!!e.pause,this.version=e.version||0,this.initial=void 0===e.initial||!!e.initial,this.localFiles=e.local||{},this.serverFiles=e.remote||{},this.newServerFiles=e.pending||[],(r=e.appId)&&r!==this.app.appId&&(this.pause=!0,this.version=0,this.initial=!0,this.localFiles={},this.serverFiles={},this.newServerFiles=[]),this.fileRetry={},this.filterCache={},this.allowTypes=new Set(e.allowTypes||JR),this.allowSpecialFiles=new Set(e.allowSpecialFiles||[]),this.ignoreFolders=e.ignoreFolders||[],this.preventSleep=e.preventSleep||!1,i=e.dataVer||0}catch(e){console.error(e)}this.scanFiles();try{if(i<1)for(o in this.serverFiles)this.serverFiles.hasOwnProperty(o)&&!this.localFiles.hasOwnProperty(o)&&o.toLowerCase().endsWith(".canvas")&&((a=this.serverFiles[o]).folder||this.newServerFiles.push(a))}catch(e){console.error(e)}return[2]}}))}))},t.prototype.saveData=function(){return v(this,void 0,void 0,(function(){var e;return y(this,(function(t){switch(t.label){case 0:return this.dirty?(this.dirty=!1,(e={}).appId=this.app.appId,e.vaultId=this.vaultId,e.vaultName=this.vaultName,e.key=q(this.key),e.host=this.host,e.deviceName=this.deviceName,e.pause=this.pause,e.version=this.version,e.initial=this.initial,e.local=this.localFiles,e.remote=this.serverFiles,e.pending=this.newServerFiles,e.allowTypes=Array.from(this.allowTypes),e.allowSpecialFiles=Array.from(this.allowSpecialFiles),e.ignoreFolders=this.ignoreFolders,e.preventSleep=this.preventSleep,e.dataVer=1,[4,this.db.put("data",e,"data")]):[2];case 1:return t.sent(),[2]}}))}))},t.prototype.getDefaultDeviceName=function(){return $w.isDesktopApp?at("os").hostname():eH||"Unknown"},t.prototype.setup=function(e,t,n,i,r){return v(this,void 0,void 0,(function(){var o;return y(this,(function(a){switch(a.label){case 0:return this.vaultId=e,this.vaultName=t,o=this,[4,J(n,i)];case 1:return o.key=a.sent(),this.host=r,this.clear(),this.scanFiles(),[4,this.saveData()];case 2:return a.sent(),this.requestSync(),[2]}}))}))},t.prototype.unsetup=function(){return v(this,void 0,void 0,(function(){return y(this,(function(e){switch(e.label){case 0:return this.vaultId=null,this.vaultName=null,this.key=null,this.host=null,this.clear(),this.setStatus("Uninitialized"),[4,this.saveData()];case 1:return e.sent(),[2]}}))}))},t.prototype.clear=function(){this.dirty=!0,this.version=0,this.initial=!0,this.serverFiles={},this.newServerFiles=[],this.fileRetry={},this.ignoreFolders=[],this.filterCache={},this.allowTypes=new Set(JR);var e=this.server;e&&(e.disconnect(),this.server=null),this.gettingServer=null,this.backoff.success()},t.prototype.setPause=function(e){this.pause=e,e?(this.setStatus("Paused"),this.log("Paused")):(this.setStatus("Resumed"),this.log("Resumed. Detecting changes...")),this.dirty=!0,this.saveData(),this.requestSync()},t.prototype.getPause=function(){return this.pause},t.prototype.changeFilter=function(e){var t=this.serverFiles,n=this.newServerFiles,i=[];for(var r in t)if(t.hasOwnProperty(r)){var o=t[r];this.allowSyncFile(o.path,o.folder)||i.push(o)}e(),this.filterCache={};for(var a=[],s=0,l=i;sQR&&i.splice(0,100),this.trigger("new-log")},t.prototype.scanFiles=function(){for(var e=this.vault,t=this.localFiles,n=[e.getRoot()];n.length;){var i=n.pop();if(this.onFileAdd(i),i instanceof kA)for(var r=0,o=i.children;re&&t.startsWith(i))return!1;return!0},t.prototype.canSyncLocalFile=function(e,t){if(!t.synctime)return!0;var n=t.size,i=n>10240?n>102400?30:20:10;return e-t.synctime>1e3*i},t.prototype.getHost=function(){var e=this.host||"127.0.0.1:3003";return e.startsWith("127.0.0.1")||e.startsWith("localhost")?"ws://"+e:"wss://"+e},t.prototype.setStatus=function(e){this.syncStatus=e,this.trigger("status-change")},t.prototype.getStatus=function(){return this.vaultId?this.error||Object.keys(this.fileRetry).length>0?"error":this.pause?"paused":this.syncing?"syncing":"synced":"paused"},t.prototype.failedSync=function(e){var t=this.syncingPath;if(this.log(e,t,!0),t){var n=this.fileRetry,i=Date.now(),r=n[t];r||(r=n[t]={count:0,error:"",ts:0}),r.error=e;var o=r.count=r.count+1,a=5*Math.pow(2,o)*1e3;a=Math.min(a,3e5),r.ts=i+a}},t.prototype.requestSync=function(){return v(this,void 0,void 0,(function(){var e,t,n,i;return y(this,(function(r){switch(r.label){case 0:return this.syncing?[2]:(this.syncing=!0,this.error=!1,this.trigger("status-change"),[4,sleep(50)]);case 1:r.sent(),e=null,t=!0,r.label=2;case 2:if(!t||!this.plugin.enabled||this.pause||!this.vaultId)return[3,9];!e&&nw&&this.preventSleep&&(e=pw()),r.label=3;case 3:return r.trys.push([3,5,,6]),this.error=!1,this.syncingPath=null,[4,this._sync()];case 4:return t=r.sent(),(n=this.syncingPath)&&delete this.fileRetry[n],[3,6];case 5:return i=r.sent(),console.log("Sync Error!"),console.error(i),this.error=!0,this.failedSync(i.message),t=!1,this.trigger("status-change"),[3,6];case 6:return this.dirty&&this.requestSaveData(),t?[4,sleep(100)]:[3,8];case 7:r.sent(),r.label=8;case 8:return[3,2];case 9:return e&&e.release(),this.syncing=!1,this.trigger("status-change"),[2]}}))}))},t.prototype.getServer=function(){var e=this,t=this.gettingServer;if(!t){this.gettingServer=t=this.asyncGetServer();var n=function(){e.gettingServer=null};t.then(n,n)}return t},t.prototype.asyncGetServer=function(){return v(this,void 0,Promise,(function(){var e,t,n,i,r,o,a=this;return y(this,(function(s){switch(s.label){case 0:return!(e=this.server)||e.isConnected()||e.isConnecting()||(e.disconnect(),e=this.server=null,this.backoff.fail()),e?[3,4]:this.host&&this.app.account.token&&this.vaultId&&this.key?[4,Y(this.key)]:[3,3];case 1:return t=s.sent(),i=G,[4,j(this.key)];case 2:return n=i.apply(void 0,[s.sent()]),e=this.server=new iH(t,n),[3,4];case 3:return[2,null];case 4:if(e.hasConnection())return[3,8];this.setStatus("Connecting to server"),this.log("Connecting to server"),this.ready=!1,s.label=5;case 5:return s.trys.push([5,7,,8]),r=this.deviceName||this.getDefaultDeviceName(),[4,e.connect(this.getHost(),this.app.account.token,this.vaultId,this.version,this.initial,r,(function(e){a.log("Connection successful. Detecting changes..."),a.ready=!0,a.initial&&(a.initial=!1),a.version0?(K=h.pop(),[4,o.exists(K)]):[3,23];case 21:return oe.sent()?[4,o.stat(K)]:(delete t[K],[3,20]);case 22:return(O=oe.sent())&&"file"===O.type?((G=t[K])||(G=u.hasOwnProperty(K)?t[K]=u[K]:t[K]={path:K,ctime:0,mtime:0,size:0,folder:!1,hash:"",synchash:"",synctime:0}),$=Math.ceil(O.mtime),X=Math.ceil(O.ctime),B=O.size,G.mtime&&G.mtime===$&&G.size===O.size||(G.hash=""),G.mtime=$,G.ctime=X,G.size=B,[3,20]):(delete t[K],[3,20]);case 23:return[3,25];case 24:return N=oe.sent(),console.error("Failed to scan config files",N),[3,25];case 25:if(!(i.length>0))return[3,29];R=function(l){var u,h,p,d,f,m,g,v,b,w,k,C,x,E,S,M,T,D,A,L,P,I,F,O,B,N,R,z,q,U,_,j;return y(this,(function(y){switch(y.label){case 0:if(u=i[l],h=u.path,p=n[h],d=t[h],f=function(e,t){return e||re.log("Accepted",h),d&&(d.synctime=Date.now()),t||(n[h]=u),i.splice(l,1),re.setDirty(),!0},!H.allowSyncFile(h,u.folder))return[2,{value:f(!0)}];if(!Be(h)||$w.isAndroidApp&&/[?<>]/.test(h))return H.log("Ignoring remote file name with illegal characters",h,!0),new gD('Sync: Unable to download file with illegal name "'.concat(h,'"')),[2,{value:f(!0,!0)}];if(!H.canSyncPath(a,h))return s++,[2,"continue"];for(H.syncingPath=h,m=l+1;m0)return[2,{value:f(!0)}];H.setStatus("Deleting "+h),H.log("Deleting",h),y.label=11;case 11:return y.trys.push([11,13,,14]),[4,r.delete(E,!0)];case 12:return y.sent(),[3,14];case 13:return v=y.sent(),b=(v?v.message:"")||"Failed to delete folder",H.log(b,h,!0),[3,14];case 14:return[2,{value:f(!0)}];case 15:return d.folder||u.folder||d.hash!==u.hash?p&&(d.folder&&p.folder||d.hash===p.hash)?u.deleted?(H.setStatus("Deleting "+h),(E=r.getAbstractFileByPath(h))?(H.log("Deleting",h),[4,r.delete(E)]):[3,17]):[3,20]:[3,22]:[2,{value:f(!0)}];case 16:return y.sent(),[3,19];case 17:return H.log("Deleting",h),[4,o.remove(h)];case 18:y.sent(),y.label=19;case 19:return[2,{value:f()}];case 20:return H.setStatus("Downloading "+h),[4,H.syncFileDown(e,u)];case 21:return y.sent(),[2,{value:f()}];case 22:return d.folder||!u.folder?[3,24]:(E=r.getAbstractFileByPath(h))instanceof wA?(w=E.extension,k=w?h.substr(h.length-w.length-1):"",C=h.substr(0,h.length-k.length),x=C+" (Conflicted copy)"+k,H.setStatus("Renaming conflicted file "+h),H.log("Renaming conflicted file",h),[4,r.rename(E,x)]):[3,24];case 23:return y.sent(),H.setDirty(),[2,{value:!0}];case 24:return u.initial&&u.mtime>d.mtime?(H.setStatus("Downloading "+h),[4,H.syncFileDown(e,u)]):[3,26];case 25:return y.sent(),[2,{value:f()}];case 26:if(u.initial||d.folder||u.folder||u.deleted||"md"!==Ze(h)||u.hash===d.synchash)return[3,47];if(H.setStatus("Merging "+h),H.log("Merging conflicted file",h),!((E=r.getAbstractFileByPath(h))instanceof wA))return H.log("Merge failed.",h,!0),[2,{value:f(!0)}];S=void 0,y.label=27;case 27:return y.trys.push([27,29,,30]),[4,r.read(E)];case 28:return S=y.sent(),[3,30];case 29:return M=y.sent(),H.log("Merge failed. "+M.toString(),h,!0),[2,{value:f(!0)}];case 30:return S?[3,32]:[4,H.syncFileDown(e,u)];case 31:return y.sent(),[2,{value:f()}];case 32:if(T="",!p||p.deleted)return[3,36];y.label=33;case 33:return y.trys.push([33,35,,36]),D=V,[4,e.pull(p.uid)];case 34:return T=D.apply(void 0,[y.sent()]),[3,36];case 35:return A=y.sent(),H.log("Merge failed. "+A.toString(),h,!0),[2,{value:f(!0)}];case 36:L=void 0,y.label=37;case 37:return y.trys.push([37,39,,40]),P=V,[4,e.pull(u.uid)];case 38:return L=P.apply(void 0,[y.sent()]),[3,40];case 39:return I=y.sent(),H.log("Merge failed. "+I.toString(),h,!0),[2,{value:f(!0)}];case 40:return T===L||S===L?[2,{value:f()}]:L?T?[3,45]:Math.abs(Date.now()-d.ctime)<18e4?(H.app.fileManager.storeTextFileBackup(h,S),H.setStatus("Downloading "+h),[4,r.modify(E,L)]):[3,42]:[2,{value:f()}];case 41:return y.sent(),[2,{value:f()}];case 42:return u.mtime>d.mtime?(H.app.fileManager.storeTextFileBackup(h,S),H.setStatus("Downloading "+h),[4,r.modify(E,L)]):[3,44];case 43:return y.sent(),[2,{value:f()}];case 44:return[2,{value:f()}];case 45:return H.app.fileManager.storeTextFileBackup(h,S),F=DB(T,S,L),[4,r.modify(E,F)];case 46:return y.sent(),H.log("Merge successful",h),[2,{value:f()}];case 47:if(u.folder||u.deleted||!(u.size>0)||!h.startsWith(c))return[3,56];if("json"!==Ze(h))return[3,54];y.label=48;case 48:return y.trys.push([48,53,,54]),H.setStatus("Merging "+h),H.log("Merging conflicted file",h),N=(B=JSON).parse,[4,o.read(h)];case 49:return!(O=N.apply(B,[y.sent()]))||Array.isArray(O)||"object"!=typeof O?[3,52]:(q=(z=JSON).parse,U=V,[4,e.pull(u.uid)]);case 50:if(!(R=q.apply(z,[U.apply(void 0,[y.sent()])])))return[3,52];for(_ in R)R.hasOwnProperty(_)&&(O[_]=R[_]);return[4,o.write(h,JSON.stringify(O,void 0,2))];case 51:return y.sent(),H.log("Merge successful",h),[2,{value:f(!0)}];case 52:return[3,54];case 53:return j=y.sent(),H.log("Merge failed. "+j.toString(),h,!0),[3,54];case 54:return[4,H.syncFileDown(e,u)];case 55:return y.sent(),[2,{value:f()}];case 56:return H.log("Rejected server change",h),[2,{value:f(!0)}]}}))},H=this,ne=0,oe.label=26;case 26:return neU.path.length)&&(U=Y):(!q||Y.path.length>q.path.length)&&(q=Y)}return q?(K=q.path,this.setStatus("Deleting remote file "+K),this.log("Deleting remote file",K),this.syncingPath=K,this.justPushed={path:K,folder:!1,deleted:!0,mtime:0,hash:""},[4,e.push(K,!1,!0,0,0,"",null)]):[3,31];case 30:return oe.sent(),q.deleted=!0,this.setDirty(),[2,!0];case 31:return U?(K=U.path,this.setStatus("Deleting remote folder "+K),this.log("Deleting remote folder",K),this.syncingPath=K,this.justPushed={path:K,folder:!0,deleted:!0,mtime:0,hash:""},[4,e.push(K,!0,!0,0,0,"",null)]):[3,33];case 32:return oe.sent(),U.deleted=!0,this.setDirty(),[2,!0];case 33:for(K in j=null,W=null,t)if(t.hasOwnProperty(K)&&(G=t[K],this.allowSyncFile(K,G.folder)))if(this.canSyncPath(a,K)){if(Y=n[K],ZR&&!G.folder&&Y&&Y.ctime&&(0===G.ctime||G.ctime>Y.ctime)&&!Y.folder&&!Y.deleted&&(G.ctime=Y.ctime),G.folder||!(G.size>103809024))if(Y&&!Y.deleted){if(!j)if(G.folder){if(!this.canSyncLocalFile(a,G)){s++;continue}Y.folder||(!j||G.path.length=0;ne--)(ie=i[ne]).path===K&&(ie.mtime!==$||ie.hash!==Q||te?te&&i.splice(ne,1):(te=!0,i.splice(ne,1),n[K]=ie));return te||(n[K]={uid:ee,path:K,folder:!1,deleted:!1,ctime:X,mtime:$,size:Z.byteLength,hash:Q}),W.synctime=Date.now(),this.setDirty(),[2,!0];case 39:return 0===s?(this.log("Fully synced"),this.setStatus("Fully synced"),[2,!1]):(this.setStatus("Indexing..."),[2,!0])}}))}))},t.prototype.setDirty=function(){this.dirty=!0,this.trigger("status-change")},t.prototype.forceSaveData=function(){this.setDirty(),this.requestSaveData()},t.prototype.getHashFromMetadataCache=function(e){var t=this.app.metadataCache.getFileInfo(e.path);t&&Math.ceil(t.mtime)===e.mtime&&t.size===e.size&&(e.hash=t.hash)},t.prototype.syncFileDown=function(e,t){return v(this,void 0,void 0,(function(){var n,i,r,o,a,s,l,c,u,h,p,d;return y(this,(function(f){switch(f.label){case 0:return n=t.path,[4,(i=this.vault.adapter).stat(n)];case 1:return r=f.sent(),t.folder?r&&"folder"===r.type?[2]:r&&"file"===r.type?(this.log("Deleting local file",n),[4,i.remove(n)]):[3,3]:[3,5];case 2:f.sent(),f.label=3;case 3:return this.log("Creating local folder",n),[4,i.mkdir(n)];case 4:return f.sent(),[2];case 5:return r&&"folder"===r.type?[4,i.list(n)]:[3,10];case 6:return 0!==(o=f.sent()).files.length||0!==o.folders.length?[3,8]:(this.log("Deleting local folder",n),[4,i.rmdir(n,!0)]);case 7:return f.sent(),[2];case 8:return this.log("Renaming conflicted file",n),[4,i.rename(n,n+" (Conflicted copy)")];case 9:return f.sent(),[2];case 10:return this.log("Downloading file",n),[4,e.pull(t.uid)];case 11:if(!(a=f.sent()))throw new Error("Failed to download file, no data.");return[4,_(a)];case 12:return s=f.sent(),[4,RC(i.promise)];case 13:return f.sent(),[4,i.stat(n)];case 14:if((l=f.sent())&&(!r||l.mtime!==r.mtime||l.size!==r.size))throw new Error("Download cancelled because file was changed locally. Will try again soon.");return r?(c=void 0,t.ctime&&(0===r.ctime||t.ctime=0&&e<=999)return"(Unused)";if(e>=1016){if(e<=1999)return"(For WebSocket standard)";if(e<=2999)return"(For WebSocket extensions)";if(e<=3999)return"(For libraries and frameworks)";if(e<=4999)return"(For applications)"}return YR.hasOwnProperty(e)?YR[e]:"(Unknown)"}(e.code)))},h.onopen=function(){l.lastMessageTs=Date.now(),l.heartbeat=window.setInterval((function(){var e=Date.now()-l.lastMessageTs;e>12e4?l.disconnect():e>1e4&&l.send({op:"ping"})}),2e4),l.send({op:"init",token:t,id:n,keyhash:l.keyhash,version:i,initial:r,device:o})},h.onmessage=function(e){var t,n=e.data;if("string"!=typeof n)return u(new Error("Server returned binary"));try{t=JSON.parse(n)}catch(e){return console.error(e),u(new Error("Server JSON failed to parse: "+n))}if("pong"!==t.op){if("err"===t.status)return u(new Error("Failed to authenticated: "+t.msg));if("ok"!==t.res)return u(new Error("Did not respond to login request: "+n));a(),c=!0,h.onmessage=l.onMessage.bind(l),h.onclose=l.disconnect.bind(l),h.onerror=l.disconnect.bind(l)}}}))])}))}))},e.prototype.disconnect=function(){this.socket&&this.socket.close(),this.socket=null,clearInterval(this.heartbeat),this.heartbeat=null;var e=new Error("Disconnected");this.responsePromise&&(this.responsePromise.reject(e),this.responsePromise=null),this.dataPromise&&(this.dataPromise.reject(e),this.dataPromise=null)},e.prototype.pull=function(e){return v(this,void 0,Promise,(function(){var t=this;return y(this,(function(n){return[2,this.queue.queue((function(){return v(t,void 0,void 0,(function(){var t,n,i,r,o,a,s;return y(this,(function(l){switch(l.label){case 0:return[4,this.request({op:"pull",uid:e})];case 1:if((t=l.sent()).deleted)return[3,8];n=t.size,i=t.pieces,r=new ArrayBuffer(n),o=0,a=0,l.label=2;case 2:return a0?[4,$(r,this.cryptoKey)]:[3,7];case 6:r=l.sent(),l.label=7;case 7:return[2,r];case 8:return[2,null]}}))}))}))]}))}))},e.prototype.push=function(e,t,n,i,r,o,a){return v(this,void 0,Promise,(function(){var s=this;return y(this,(function(l){return[2,this.queue.queue((function(){return v(s,void 0,void 0,(function(){var s,l,c,u,h,p,d,f;return y(this,(function(m){switch(m.label){case 0:return[4,this.encodeStr(e)];case 1:return s=m.sent(),l=t?"":Ze(Ge(e)),t||n?[4,this.request({op:"push",path:s,extension:l,hash:"",ctime:0,mtime:0,folder:t,deleted:n})]:[3,3];case 2:return m.sent(),[2];case 3:return a.byteLength>0?[4,X(a,this.cryptoKey)]:[3,5];case 4:a=m.sent(),m.label=5;case 5:return o?[4,this.encodeStr(o)]:[3,7];case 6:o=m.sent(),m.label=7;case 7:return c=a.byteLength,u=2097152,h=Math.ceil(c/u),[4,this.request({op:"push",path:s,extension:l,hash:o,ctime:i,mtime:r,folder:t,deleted:n,size:c,pieces:h})];case 8:if("ok"===m.sent().res)return[2];p=0,m.label=9;case 9:return p=100)&&(e=null),this.dimension=e;var t=this.containerEl,n="";e&&(n=String(e)),t.style.flexGrow=n},t.prototype.detach=function(){this.parent&&this.parent.removeChild(this)},t.prototype.getIcon=function(){return"lucide-file"},t}(vD),mH=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.allowSingleChild=!1,t.autoManageDOM=!0,t}return f(t,e),t.prototype.serialize=function(){var t=e.prototype.serialize.call(this);return t.children=this.children.map((function(e){return e.serialize()})),t},t.prototype.replaceChild=function(e,t){var n=this,i=n.workspace,r=n.autoManageDOM,o=n.containerEl,a=n.children;e<0&&(e=0),e>=a.length&&(e=a.length);var s=a[e],l=s.containerEl.nextSibling;if(r&&s.containerEl.detach(),s.setParent(null),a[e]=t,r){var c=t.containerEl;o.insertBefore(c,l)}t.setParent(this),i.onLayoutChange(this)},t.prototype.insertChild=function(e,t){var n=this,i=n.workspace,r=n.autoManageDOM,o=n.containerEl,a=n.children;(e<0||e>=a.length)&&(e=a.length);var s=a[e],l=s?s.containerEl:null;if(a.splice(e,0,t),r){var c=t.containerEl;o.insertBefore(c,l)}t.setParent(this),i.onLayoutChange(this)},t.prototype.removeChild=function(e){var t=this,n=t.workspace,i=t.autoManageDOM,r=t.parent,o=t.children;if(o.remove(e),e.setParent(null),i&&e.containerEl.detach(),r)if(1!==o.length||this.allowSingleChild){if(0===o.length)return void r.removeChild(this)}else{var a=o[0];o.remove(a),i&&a.containerEl.detach(),a.setParent(null);var s=r.children.indexOf(this);i&&r.replaceChild(s,a),a.setDimension(this.dimension)}n.onLayoutChange(this)},t.prototype.recomputeChildrenDimensions=function(){},t}(fH),gH=function(e){function t(t,n,i){var r=e.call(this,t,i)||this;return r.parent=null,r.children=[],r.type="split",r.direction=null,r.resizeStartPos=null,r.originalSizes=null,r.isResizing=!1,r.workspace=t,r.containerEl.addClass("workspace-split"),r.setDirection(n),r}return f(t,e),t.prototype.serialize=function(){var t=e.prototype.serialize.call(this);return t.direction=this.direction,t},t.prototype.setDirection=function(e){this.containerEl.removeClass("mod-"+this.direction),this.direction=e,this.containerEl.addClass("mod-"+e)},t.prototype.recomputeChildrenDimensions=function(){for(var e=this.children,t=0,n=0,i=e;n0){var c=n.resizeItemsByDiff(l,o,1);Math.abs(o)>c&&(o=c),n.resizeItemsByDiff(s,o,-1)}else{c=n.resizeItemsByDiff(s,o,-1);Math.abs(o)>c&&(o=-c),n.resizeItemsByDiff(l,o,1)}t.preventDefault()}}},o=function(){i.removeEventListener("mousemove",r),i.removeEventListener("mouseup",o),document.body.removeClass("is-grabbing");try{n.finishResize()}catch(e){console.error(e)}};i.addEventListener("mousemove",r),i.addEventListener("mouseup",o),document.body.addClass("is-grabbing")}},t.prototype.resizeItemsByDiff=function(e,t,n){for(var i=0,r=0,o=e;r=pH)t.expand();else if(!t.collapsed){var o=t.workspace.containerEl.clientWidth,a=Math.clamp(i,pH,Math.max(pH,.8*o));t.setSize(a)}e.preventDefault()},r=function(e){0===e.button&&(n.removeEventListener("mousemove",i),n.removeEventListener("mouseup",r),document.body.removeClass("is-grabbing"),t.app.enableCssTransition(),t.workspace.requestSaveLayout(),t.workspace.requestResize())};n.addEventListener("mousemove",i),n.addEventListener("mouseup",r),document.body.addClass("is-grabbing")}},t.prototype.recomputeChildrenDimensions=function(){e.prototype.recomputeChildrenDimensions.call(this),0===this.children.length?(this.collapse(),this.emptyStateEl.show(),"right"===this.side&&this.workspace.rightRibbon.hide()):(this.emptyStateEl.hide(),"right"===this.side&&this.workspace.rightRibbon.show())},t}(gH),yH=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.allowSingleChild=!0,t}return f(t,e),t.prototype.onFocus=function(){var e=this;setTimeout((function(){if(e.doc.hasFocus()){var t=!!e.doc.querySelector(".modal-container"),n=e.workspace,i=n.activeLeaf;if(!i||i.getContainer()!==e){var r=n.getMostRecentLeaf(e);r&&n.setActiveLeaf(r,{focus:!$w.isMobile&&!t})}}}),100)},t.prototype.focus=function(){$w.isDesktopApp&&!this.doc.hasFocus()&&this.win.electronWindow.focus()},t}(gH);function bH(e){if(e.deltaY){var t=e.currentTarget;Math.abs(e.deltaX)>Math.abs(e.deltaY)?t.scrollLeft+=e.deltaX:t.scrollLeft+=e.deltaY,e.preventDefault()}}var wH=function(e){function t(t,n){var i=e.call(this,t,n)||this;i.type="tabs",i.children=[],i.parent=null,i.allowSingleChild=!0,i.autoManageDOM=!1,i.tabHeaderEls=[],i.currentTab=0,i.hasLockedTabWidths=!1,i.isStacked=!1,i.containerEl.addClass("workspace-tabs");var r=i.tabHeaderContainerEl=i.containerEl.createDiv("workspace-tab-header-container"),o=i.tabsInnerEl=r.createDiv("workspace-tab-header-container-inner"),a=i.tabsContainerEl=i.containerEl.createDiv("workspace-tab-container");return i.containerEl.on("click",".workspace-tab-header",(function(e,t){var n=i.tabHeaderEls.indexOf(t);if(-1!==n){i.selectTabIndex(n);var r=i.children[n];r instanceof CH&&i.workspace.setActiveLeaf(r,{focus:!0})}})),o.addEventListener("wheel",bH),window.frameDom&&KO(r),r.addEventListener("mouseleave",(function(){i.unlockTabWidths()})),a.addEventListener("scroll",(function(){return i.onContainerScroll()}),Zk),r.createDiv("workspace-tab-header-new-tab",(function(e){e.createSpan("clickable-icon",(function(e){tD(e,Gk.interface.labelNewTab()),oT(e,"lucide-plus"),e.addEventListener("click",(function(){var e=new CH(i.app);i.insertChild(i.children.length,e),i.selectTabIndex(i.children.length),i.workspace.setActiveLeaf(e,{focus:!0})}))}))})),r.createDiv("workspace-tab-header-spacer"),r.createDiv("workspace-tab-header-tab-list",(function(e){e.createSpan("clickable-icon",(function(e){oT(e,"lucide-chevron-down");var t=function(t){if(!e.classList.contains("has-active-menu")){var n=new KL;n.dom.addClass("mod-tab-list"),n.addItem((function(e){return e.setTitle(i.isStacked?Gk.interface.menu.unstackTabs():Gk.interface.menu.stackTabs()).setIcon("lucide-layers").onClick((function(){i.setStacked(!i.isStacked)}))})).addSeparator();for(var r=function(e){if(!(e instanceof CH))return"continue";var t=e,r=e.view;if(!r)return"continue";n.addItem((function(e){return e.setTitle(r.getDisplayText()).setIcon(r.getIcon()).onClick((function(){i.selectTab(t)}))}))},o=0,a=i.children;o0&&(this.updateTabDisplay(),this.workspace.requestUpdateLayout()))},t.prototype.serialize=function(){var t=e.prototype.serialize.call(this);return this.currentTab>0&&(t.currentTab=this.currentTab),this.isStacked&&(t.stacked=!0),t},t.prototype.selectTabIndex=function(e){var t;this.currentTab=e,this.updateTabDisplay(),this.workspace.requestSaveLayout(),this.workspace.requestResize(),this.isStacked&&(null===(t=this.children[this.currentTab])||void 0===t||t.containerEl.removeClass("is-hidden"),this.scrollIntoView(this.currentTab))},t.prototype.selectTab=function(e){var t=this.children.indexOf(e);-1!==t&&this.selectTabIndex(t)},t.prototype.updateTabDisplay=function(){var e=this,t=e.isStacked,n=e.currentTab,i=e.tabsInnerEl,r=e.tabsContainerEl,o=e.children;if(0!==o.length){n<0&&(n=0),n>=o.length&&(n=o.length-1),n!==this.currentTab&&(this.currentTab=n,this.workspace.requestSaveLayout(),this.workspace.requestResize());for(var a=[],s=[],l=0,c=o;lu&&(r++,i.x=c);break}}return i.x-=5,{rect:i,index:r,droppedIndex:o}},t.prototype.insertChild=function(t,n){e.prototype.insertChild.call(this,t,n),n instanceof CH&&(n.updateHeader(),yw(n.tabHeaderEl)),this.unlockTabWidths()},t.prototype.removeChild=function(t){var n=this.children.indexOf(t),i=this.currentTab,r=this.children[i];t.tabHeaderEl.removeClass("is-active"),1===this.children.length&&(this.workspace.lastTabGroupStacked=this.isStacked),e.prototype.removeChild.call(this,t),this.children.length>0&&n===i?(this.currentTab=Math.max(0,n-1),this.workspace.onLayoutChange(this)):this.currentTab=this.children.indexOf(r)},t.prototype.lockTabWidths=function(){if(this.tabHeaderContainerEl.isShown()&&!this.isStacked){this.hasLockedTabWidths=!0;for(var e=[],t=0,n=this.children;t=u);n[s].containerEl.toggleClass("is-hidden",f)}}},t.prototype.scrollIntoView=function(e){var t=this.children,n=this.tabsContainerEl,i=t[e];if(i){for(var r=0,o=0,a=0,s=0;su&&n.scrollTo({behavior:"smooth",left:u})}},t}(mH),kH=function(){function e(e){this.owner=e,this.backHistory=[],this.forwardHistory=[]}return e.prototype.updateState=function(e){return v(this,void 0,void 0,(function(){var t,n;return y(this,(function(i){switch(i.label){case 0:return t=e.state,n=e.eState,t.popstate=!0,t.active=$w.isDesktop,[4,this.owner.setViewState(t,n)];case 1:return i.sent(),this.owner.trigger("history-change"),[2]}}))}))},e.prototype.forward=function(){return v(this,void 0,void 0,(function(){return y(this,(function(e){return[2,this.go(1)]}))}))},e.prototype.back=function(){return v(this,void 0,void 0,(function(){return y(this,(function(e){return[2,this.go(-1)]}))}))},e.prototype.pushState=function(e){var t=this.backHistory;t.push(e),t.length>20&&t.unshift(),this.forwardHistory=[],this.owner.trigger("history-change")},e.prototype.go=function(e){return v(this,void 0,void 0,(function(){var t,n,i;return y(this,(function(r){switch(r.label){case 0:if(this.owner.working)return new gD(Gk.interface.msgTabBusy()),[2];for(t=this.owner.getHistoryState(),n=t;e>0&&(i=this.forwardHistory.pop());)this.backHistory.push(n),n=i,e--;for(;e<0&&(i=this.backHistory.pop());)this.forwardHistory.push(n),n=i,e++;return n===t?[3,2]:[4,this.updateState(n)];case 1:r.sent(),r.label=2;case 2:return[2]}}))}))},e.prototype.serialize=function(){return{backHistory:w([],this.backHistory,!0),forwardHistory:w([],this.forwardHistory,!0)}},e.prototype.deserialize=function(e){e&&(e.backHistory&&(this.backHistory=e.backHistory),e.forwardHistory&&(this.forwardHistory=e.forwardHistory),this.owner.trigger("history-change"))},e}(),CH=function(e){function t(t,n){var i=e.call(this,t.workspace,n)||this;i.type="leaf",i.activeTime=0,i.history=new kH(i),i.tabHeaderEl=null,i.tabHeaderInnerIconEl=null,i.tabHeaderInnerTitleEl=null,i.tabHeaderStatusContainerEl=null,i.tabHeaderStatusPinEl=null,i.tabHeaderStatusLinkEl=null,i.tabHeaderCloseEl=null,i.group=null,i.pinned=!1,i.width=0,i.height=0,i.resizeObserver=null,i.working=!1,i.app=t;var r=i.containerEl;r.addClass("workspace-leaf"),r.addEventListener("focusin",(function(){i.app.workspace.setActiveLeaf(i)})),r.addEventListener("mousedown",(function(){i.app.workspace.setActiveLeaf(i)}));var o=function(){if(i.parent instanceof wH){var e=i.parent.children;i===e.last()?i.parent.unlockTabWidths():i.parent.lockTabWidths()}i.detach()},a=i.tabHeaderEl=createDiv("workspace-tab-header");a.draggable=!0,a.createDiv("workspace-tab-header-inner",(function(e){i.tabHeaderInnerIconEl=e.createDiv("workspace-tab-header-inner-icon"),i.tabHeaderInnerTitleEl=e.createDiv("workspace-tab-header-inner-title"),i.tabHeaderStatusContainerEl=e.createDiv("workspace-tab-header-status-container"),i.tabHeaderCloseEl=e.createDiv("workspace-tab-header-inner-close-button",(function(e){oT(e,"lucide-x"),tD(e,Gk.interface.menu.close()),e.addEventListener("click",o)}))})),a.addEventListener("dragstart",(function(e){i.workspace.onDragLeaf(e,i)})),a.addEventListener("contextmenu",i.onOpenTabHeaderMenu.bind(i)),a.addEventListener("mousedown",(function(e){1===e.button&&e.preventDefault()})),a.addEventListener("auxclick",(function(e){1===e.button&&i.view instanceof eB&&o()}));var s=Aw(i.onResize.bind(i),20,!0);return(i.resizeObserver=new ResizeObserver((function(e){for(var t=0,n=e;t1||"x"!==e.direction)){var n=o,r=n.containerEl,a=n.backdropEl;yw(r),yw(a);var s=o.workspace.leftSplit,l=o.workspace.rightSplit,c=s.collapsed||s instanceof t&&s.isPinned,u=l.collapsed||l instanceof t&&l.isPinned,p=c&&u&&("left"===i&&e.x>e.startX||"right"===i&&e.xd/2?(ww(r,new mw({duration:225*(s=1-l),fn:"ease-out"}).addProp("transform",null,"translateX(0)","")),ww(a,new mw({duration:150*s,fn:"linear"}).addProp("opacity",null,"1","")),o.onExpand()):(o.collapsed=!0,o.onCollapse(),ww(r,new mw({duration:200*(s=l)}).addProp("transform",null,"translateX(".concat(-d*h,"px)"),""),(function(){r.hide()})),ww(a,new mw({duration:150*s,fn:"linear"}).addProp("opacity",null,"0"),(function(){a.detach()})))}})}}else{var f=r.offsetWidth;e.registerCallback({move:function(t){var n=Math.clamp(-(t-e.startX)*h/f,0,1);r.style.transform="translateX(".concat(-n*f*h,"px)"),a.style.opacity=String(1-n)},cancel:function(){r.style.transform="",a.style.opacity=""},finish:function(t,n,i){var s,l=Math.clamp(-(t-e.startX)*h/f,0,1);-i*h0&&e.length>t&&(e=e.slice(0,t)),this.suggestions.setSuggestions(e),this.updatePosition(!0)}else this.close()},t.prototype.updatePosition=function(e){var t=this.context;if(t){var n=t.editor;if(this.open(),$w.isPhone){if(e){var i=n.getCursor(),r=n.coordsAtPos(i,!0),o=n.getScrollInfo();Math.abs(o.top-r.top)>10&&n.scrollTo(null,r.top+3)}}else{var a=n.coordsAtPos(t.start),s=n.coordsAtPos(t.end),l={top:a.top,left:Math.min(a.left,s.left),right:Math.max(a.right,s.right),bottom:s.bottom},c=EC(n.containerEl.win);if(c){var u=c.scale,h=c.x,p=c.y;l.left=l.left*u+h,l.right=l.right*u+h,l.top=l.top*u+p,l.bottom=l.bottom*u+p}this.reposition(l)}}},t.prototype.close=function(){this.context=null,e.prototype.close.call(this)},t}(DR);function DH(e,t){var n=e.content,i=e.node,r=i.position.start.offset,o=i.position.end.offset,a=0,s="paragraph"===i.type||"listItem"===i.type,l="^"+t;if(s){if(l=" "+l,"listItem"===i.type){var c=i.children;if(c&&c.length>1){var u=c[c.length-1],h=c[c.length-2];"list"===u.type&&(o=h.position.end.offset)}}}else l="\n\n"+l,a=2;return s||"\n"===n.charAt(o)&&"\n"===n.charAt(o+1)||(l+="\n",a++),{blockStart:r,blockEnd:o,addition:l,newlines:a}}function AH(e){var t,n="",i="";return"block"===e.type&&(n=e.file.path,i="#^"+e.node.id),"heading"===e.type&&(n=e.file.path,i="#"+oA(e.heading)),"file"!==e.type&&"alias"!==e.type||(n=e.file.path,i=""),"linktext"===e.type&&(n=(t=QD(e.path)).path,i=t.subpath),{path:n,subpath:i}}var LH=function(e,t){return t.score-e.score},PH={type:"none",matches:null,score:0};function IH(e){return e?-(e.length+(e.length>0?e[0][0]/10:0)):0}function FH(e,t,n,i,r){var o,a;return v(this,void 0,Promise,(function(){var s,l,c,u,h,p,d,f,m,g,v,b;return y(this,(function(y){switch(y.label){case 0:if(!n||0===n.length)return[2,[]];s=r.split("#").filter((function(e){return!!e})),r.endsWith("#")&&s.push(""),(l="#"+s.slice(0,s.length-1).join("#")).endsWith("#")||(l+="#"),c=0,u=0,h=[],y.label=1;case 1:y.trys.push([1,6,7,12]),p=x(BC(OC(n),{maxDelay:0})),y.label=2;case 2:return[4,p.next()];case 3:if((d=y.sent()).done)return[3,5];if(f=d.value,e.isCancelled())return[3,5];if(f.level<=u||c>=s.length)return[3,5];m=f.heading.toLowerCase(),c===s.length-1?""===(g=s[c])?h.push({type:"heading",file:t,path:i,subpath:l,level:f.level,heading:f.heading,score:0,matches:null}):(v=wk(gk(g),f.heading))&&h.push({type:"heading",file:t,path:i,subpath:l,level:f.level,heading:f.heading,score:v.score,matches:v.matches}):m===s[c].toLowerCase()&&(c++,u=f.level),y.label=4;case 4:return[3,2];case 5:return[3,12];case 6:return b=y.sent(),o={error:b},[3,12];case 7:return y.trys.push([7,,10,11]),d&&!d.done&&(a=p.return)?[4,a.call(p)]:[3,9];case 8:y.sent(),y.label=9;case 9:return[3,11];case 10:if(o)throw o.error;return[7];case 11:return[7];case 12:return[2,h]}}))}))}function OH(e,t,n,i,r){var o,a;return v(this,void 0,void 0,(function(){var s,l,c,u,h,p,d,f,m,g,v;return y(this,(function(y){switch(y.label){case 0:if(!i)return[2,[]];s=i.content,l=r.toLowerCase().split(" "),c=[],y.label=1;case 1:y.trys.push([1,6,7,12]),u=x(BC(OC(i.blocks),{maxDelay:0})),y.label=2;case 2:return[4,u.next()];case 3:if((h=y.sent()).done)return[3,5];if(p=h.value,e.isCancelled())return[3,5];d=xk(l,p.display.toLowerCase()),f=IH(d),m=null,(g=p.node.id)&&String.isString(g)&&(m=xk(l,g.toLowerCase()))&&(f=0),(d||m)&&c.push({type:"block",file:t,path:n,content:s,display:p.display,node:p.node,score:f,matches:d,idMatch:m}),y.label=4;case 4:return[3,2];case 5:return[3,12];case 6:return v=y.sent(),o={error:v},[3,12];case 7:return y.trys.push([7,,10,11]),h&&!h.done&&(a=u.return)?[4,a.call(u)]:[3,9];case 8:y.sent(),y.label=9;case 9:return[3,11];case 10:if(o)throw o.error;return[7];case 11:return[7];case 12:return[2,c]}}))}))}function BH(e,t,n){void 0===n&&(n=!1),t.addClass("mod-complex");var i=t.createDiv("suggestion-content"),r=t.createDiv("suggestion-aux"),o=i.createDiv("suggestion-title"),a=i.createDiv("suggestion-note"),s=e.matches;if(!n||"heading"!==e.type&&"block"!==e.type||a.setText(rt(e.file.path)),e.downranked&&t.addClass("mod-downranked"),"none"===e.type)o.setText(Gk.editor.linkSuggestion.labelNoMatchFound());else if("file"===e.type){var l=e.path,c=Ge(l),u=l.substr(0,l.length-c.length);Mk(a,u,s),Mk(o,c,s,-u.length)}else if("alias"===e.type)a.setText(e.path),Mk(o,e.alias,s),r.createSpan({cls:"suggestion-flair"},(function(e){oT(e,"lucide-forward"),tD(e,Gk.interface.tooltip.alias())}));else if("linktext"===e.type)Mk(o,e.path,s);else if("heading"===e.type)Mk(o,e.heading,s),r.createSpan({cls:"suggestion-flair",text:"H"+e.level});else if("block"===e.type){Mk(o,e.display,s);var h=e.node.id;h&&String.isString(h)&&(a.getText().trim()&&a.appendText(" > "),Mk(a,h,e.idMatch))}}var NH=function(e){function t(t){var n=e.call(this,t)||this;return n.runnable=null,n.fileSuggestions=null,n.mode="file",n.global=!1,n.setInstructions([{command:Gk.editor.linkSuggestion.labelTypeHash(),purpose:Gk.editor.linkSuggestion.labelLinkHeading()},{command:Gk.editor.linkSuggestion.labelTypeBlock(),purpose:Gk.editor.linkSuggestion.labelLinkBlock()},{command:Gk.editor.linkSuggestion.labelTypePipe(),purpose:Gk.editor.linkSuggestion.labelChangeDisplayText()}]),n.scope.register([],"Tab",(function(e){if(!e.isComposing&&n.suggestions.useSelectedItem(e))return!1})),n.scope.register(null,"#",(function(e){if(("file"===n.mode||"heading"===n.mode)&&n.suggestions.useSelectedItem(e))return!1})),n.scope.register(null,"^",(function(e){if("file"===n.mode&&n.suggestions.useSelectedItem(e))return!1})),n}return f(t,e),t.prototype.onTrigger=function(e,t,n){var i=e.line,r=t.getLine(i).substr(0,e.ch),o=r.lastIndexOf("[["),a=r.lastIndexOf("]");return-1!==o&&a=this.context.start.line)return null;var a=xk(o,n.display.toLowerCase()),s=IH(a),l=null,c=n.node.id;return c&&String.isString(c)&&(l=xk(o,c.toLowerCase()))&&(s=0),a||l?{type:"block",file:t,path:i,content:r,display:n.display,node:n.node,score:s,matches:a,idMatch:l}:null},t.prototype.getFileSuggestions=function(e,t){var n,i;return v(this,void 0,Promise,(function(){var r,o,a,s,l,c,u,h,p,d,f,m,g,v,b;return y(this,(function(y){switch(y.label){case 0:if(r=this.app.metadataCache,(o=this.fileSuggestions)||(o=this.fileSuggestions=r.getLinkSuggestions()),a=[],""===t){for(s=0,l=o;s=0){var R=UL(F,[B+I.length])[0];l.push({from:R,text:D}),w=IL(o.line+A,o.ch)}}}}if(b&&!b[0].contains("[[")&&(b[2]&&!h&&(h=b[3],u||(u=h)),a=FL(a,b[0].length)),f&&"#"!==d&&"^"!==d)o=FL(o,-2),p="[".concat(u,"](").concat(wM(p),")"),l.push({from:o,to:a,text:p}),c=u?{from:FL(w,p.length-2)}:{from:FL(w,1)};else{"#"===d?(p+="#","file"===e.type&&qe.contains(e.file.extension)&&(p+="page=")):"^"===d&&(p+="^"),h&&(p+="|"+h),p+="]]",l.push({from:o,to:a,text:p});var H=p.length;"Tab"===d?(H-=2,h&&(c={from:FL(w,H),to:FL(w,H-h.length)})):"#"!==d&&"^"!==d&&"|"!==d||(H-=2,h&&(H-=h.length+1)),c||(c={from:FL(w,H)})}r.transaction({changes:l,selection:c}),setTimeout((function(){return r.focus()}))}else"Enter"!==d&&"Tab"!==d||(a=FL(a,b[0].length),r.setSelection(a))}},t.prototype.close=function(){e.prototype.close.call(this),this.fileSuggestions=null,this.runnable&&(this.runnable.cancel(),this.runnable=null)},t}(TH);function RH(e,t){var n=Ge(t),i=e(n);return i?(Ck(i.matches,t.length-n.length),i):((i=e(t))&&(i.score-=1),i)}var HH=/(^|\s)#[^\u2000-\u206F\u2E00-\u2E7F'!"#$%&()*+,.:;<=>?@^`{|}~\[\]\\\s]*$/g,VH=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return f(t,e),t.prototype.onTrigger=function(e,t,n){var i=e.line,r=t.getLine(i),o=r.substr(0,e.ch);if(o.match(HH)&&"#"!==r.substr(e.ch,1)){var a=o.lastIndexOf("#"),s=o.substr(a+1);return{start:{line:i,ch:a},end:{line:i,ch:e.ch},query:s}}return null},t.prototype.renderSuggestion=function(e,t){Sk(t,e.tag,e)},t.prototype.selectSuggestion=function(e){var t=this.context;if(this.close(),t){var n=t.editor,i=t.start,r=t.end;n.transaction({changes:[{from:i,to:r,text:e.tag+" "}]}),setTimeout((function(){return n.focus()}))}},t.prototype.getSuggestions=function(e){var t=e.query;t=t.toLowerCase();var n=this.app.metadataCache.getTags(),i=[],r=[t];for(var o in n)if(pe(n,o))if(""===t)i.push({tag:o,score:0,matches:null});else{var a=xk(r,o.toLowerCase());a&&i.push({tag:o,score:yk(a,t.length,o.length,0),matches:a})}return i.sort((function(e,t){return t.score-e.score})),i},t}(TH),zH=function(){function e(e){this.suggests=[],this.currentSuggest=null,this.addSuggest(new NH(e)),this.addSuggest(new VH(e))}return e.prototype.addSuggest=function(e){this.suggests.push(e)},e.prototype.removeSuggest=function(e){this.currentSuggest===e&&this.close(),this.suggests.remove(e)},e.prototype.trigger=function(e,t,n){if(e.hasFocus()){for(var i=0,r=this.suggests;i0)&&(A+="\tCustom theme and snippets: for cosmetic issues, please first try updating your theme and disabling your snippets. If still not fixed, please try to make the issue happen in the Sandbox Vault or disable community theme and snippets.\n"),"off"===C&&x>0&&(A+="\tCommunity plugins: for bugs, please first try updating all your plugins to latest. If still not fixed, please try to make the issue happen in the Sandbox Vault or disable community plugins.\n"),""===A&&(A="\tnone\n"),s+=A,o.value=s,r.createDiv("modal-button-container",(function(e){$w.isDesktopApp&&e.createEl("button",{text:Gk.interface.helpScreen.labelSandboxVault()},(function(e){e.addEventListener("click",(function(){st((function(e){e.ipcRenderer.sendSync("sandbox")}))}))})),e.createEl("button",{text:Gk.interface.labelCopy()},(function(e){e.addEventListener("click",(function(){Pw(o.value),new gD(Gk.interface.copied({item:Gk.interface.labelDebugInfo()}))}))}))})),i}return f(t,e),t}(dD),UH=function(e){function t(t,n){var i=e.call(this,t)||this;i.sortOrder="download",i.items={},i.itemsVisible=[],i.selectedItemId=null,i.dimBackground=!1,i.onCloseCallback=n,i.returnToGridView=i.returnToGridView.bind(i);var r=i,o=r.contentEl;r.modalEl.addClass("mod-community-modal","mod-sidebar-layout");var a=i.sidebarEl=o.createDiv("modal-sidebar");i.detailsEl=createDiv("community-modal-details"),a.createDiv("community-modal-controls",(function(e){new aL(e).addSearch((function(e){return i.search=e.onChange(Aw(i.update.bind(i),300)).then((function(){e.inputEl.addEventListener("keypress",(function(e){e.isComposing||"Enter"!==e.key||$w.isMobile&&Xk()}))}))})).addButton((function(e){return e.onClick((function(e){return i.showSortMenu(e)})).then((function(e){if($w.isMobile)e.setButtonText(Gk.plugins.fileExplorer.actionChangeSort());else{var t=e.buttonEl;oT(t,"lucide-sort-asc"),tD(t,Gk.plugins.fileExplorer.actionChangeSort()),t.addClass("clickable-icon")}}))})),i.installedOnlyToggleSetting=new aL(e).setName(Gk.setting.thirdPartyPlugin.showInstalledOnly()).addToggle((function(e){return i.installedOnlyToggle=e.setSmall().setValue(!1).onChange((function(){return i.update()}))})),i.addCustomControls(e),i.searchSummaryEl=e.createDiv("community-modal-search-summary u-muted")})),i.listEl=a.createDiv("community-modal-search-results-wrapper").createDiv("community-modal-search-results");var s=i.renderQueue=new FC;return v(i,void 0,void 0,(function(){var e,t,n,i,r;return y(this,(function(o){switch(o.label){case 0:o.trys.push([0,5,6,11]),e=x(BC(s.generator(),{batchSize:10})),o.label=1;case 1:return[4,e.next()];case 2:if((t=o.sent()).done)return[3,4];(0,t.value)(),o.label=3;case 3:return[3,1];case 4:return[3,11];case 5:return n=o.sent(),i={error:n},[3,11];case 6:return o.trys.push([6,,9,10]),t&&!t.done&&(r=e.return)?[4,r.call(e)]:[3,8];case 7:o.sent(),o.label=8;case 8:return[3,10];case 9:if(i)throw i.error;return[7];case 10:return[7];case 11:return[2]}}))})),$w.isMobile&&RT(i.contentEl,(function(e){if(1===e.points&&"x"===e.direction&&!(null===i.selectedItemId||e.touch.clientX>40)){var t=i,n=t.detailsEl,r=t.sidebarEl;i.contentEl.prepend(r),kC(r),e.registerCallback({move:function(t,i){var r=n.offsetWidth,o=Math.clamp((t-e.startX)/r,0,1);n.style.transform="translateX(".concat(o*r,"px)")},cancel:function(){n.style.transform="",r.detach()},finish:function(t,o,a){var s=n.offsetWidth,l=Math.clamp((t-e.startX)/s,0,1);.5*a0||/^F[0-9]+$/i.test(s)){var l=SI(a,s),c=o.getHotkeys(r.id)||o.getDefaultHotkeys(r.id)||[];(c=c.slice()).filter((function(e){return TI(e)===TI(l)})).length>0||(c.push(l),o.setHotkeys(r.id,c),v(i,void 0,void 0,(function(){return y(this,(function(e){switch(e.label){case 0:return[4,o.save()];case 1:return e.sent(),[2]}}))}))),i.finishCustomizingHotkey()}e.preventDefault(),e.stopPropagation()}})),i.setHotkeyScope.register([],"Escape",(function(){if(i.commandBeingCustomized)return i.finishCustomizingHotkey(),!1})),i}return f(t,e),t.prototype.display=function(){var e=this,t=this.containerEl;t.empty();var n=t.createDiv("hotkey-settings-container");n.createDiv("hotkey-search-container",(function(t){e.searchInputEl=t.createEl("input",{type:"text"},(function(t){t.setAttribute("placeholder",Gk.setting.hotkeys.promptFilter()),t.addEventListener("input",(function(){e.updateHotkeyVisibility()}))}))})),this.hotkeyListContainerEl=n.createDiv("hotkey-list-container"),this.updateHotkeyVisibility(),$w.isMobile||this.searchInputEl.focus()},t.prototype.hide=function(){this.finishCustomizingHotkey()},t.prototype.setQuery=function(e){var t=this.searchInputEl;t.value=e,t.focus(),this.updateHotkeyVisibility()},t.prototype.updateHotkeyVisibility=function(){var e=this,t=this.app.commands,n=this.app.hotkeyManager;this.hotkeyListContainerEl.empty();var i=new ke;for(var r in t.commands)if(t.commands.hasOwnProperty(r)){var o=t.commands[r],a=n.getHotkeys(r),s=n.getDefaultHotkeys(r),l=void 0!==s;if(void 0!==a)for(var c=0,u=a;c0)for(var p=0,d=s;p0)if(e.addClass("has-conflict"),1===a.length){var s=a[0];tD(e,Gk.setting.hotkeys.tooltipHotkeySingleConflict({command:s}))}else{var l=a.length;tD(e,Gk.setting.hotkeys.tooltipHotkeyMultipleConflicts({count:l}))}}e.appendText(" "+r+" "),e.createSpan("setting-hotkey-icon setting-delete-hotkey",(function(e){oT(e,"lucide-x"),tD(e,Gk.setting.hotkeys.tooltipDeleteHotkey()),e.addEventListener("click",n)}))};if(u)for(var d=function(t){c.createSpan("setting-hotkey",(function(i){p(i,t,(function(){return v(e,void 0,void 0,(function(){var e;return y(this,(function(i){switch(i.label){case 0:return e=s.filter((function(e){return TI(e)!==TI(t)})),n.setHotkeys(r,e),[4,n.save()];case 1:return i.sent(),this.updateHotkeyVisibility(),[2]}}))}))}))}))},f=0,m=s;f0)for(var b=function(t){c.createSpan("setting-hotkey",(function(i){p(i,t,(function(){return v(e,void 0,void 0,(function(){return y(this,(function(e){switch(e.label){case 0:return n.setHotkeys(r,[]),[4,n.save()];case 1:return e.sent(),this.updateHotkeyVisibility(),[2]}}))}))}))}))},k=0,C=l;k0&&t.push(new eV(a,n,s))}}})),s.label=2;case 2:return s.trys.push([2,,7,8]),this.inProgressUpdates=[],[4,e(t)];case 3:s.sent(),s.label=4;case 4:return this.inProgressUpdates.length>0?(o=this.inProgressUpdates,this.inProgressUpdates=[],[4,Promise.all(o.map((function(e){return e(t)})))]):[3,6];case 5:return s.sent(),[3,4];case 6:return[3,8];case 7:return this.inProgressUpdates=null,[7];case 8:return[4,this.updateAllLinks(t)];case 9:return s.sent(),[2]}}))}))}))]}))}))},e.prototype.updateAllLinks=function(e){return v(this,void 0,Promise,(function(){var t,n,i,r,o,a,s,l,c,u,h=this;return y(this,(function(p){for(t=new ke,n=this.app.metadataCache,i=0,r=e;i0&&(r.createEl("p",{cls:"mod-warning",text:Gk.dialogue.labelNonEmptyFolder()}),r.createEl("p",{cls:"mod-warning",text:Gk.dialogue.labelDeleteFolderWarning()})),e instanceof wA&&(o=t.metadataCache.getBacklinksForFile(e),(a=o.count())>0&&(s=Gk.nouns.linkWithCount({count:a}),l=Gk.dialogue.labelExistingBacklink({links:s}),r.createEl("p",{cls:"mod-warning",text:l}))),[4,new Promise((function(n,i){var o=!1,a=new fD(t).setTitle(e instanceof kA?Gk.dialogue.labelDeleteFolder():Gk.dialogue.labelDeleteFile()).setContent(r);$w.isMobile?a.addButton("mod-warning",Gk.dialogue.buttonDeleteDoNotAskAgain(),(function(){return v(c,void 0,void 0,(function(){var r;return y(this,(function(o){switch(o.label){case 0:return o.trys.push([0,2,,3]),t.vault.setConfig("promptDelete",!1),[4,this.trashFile(e)];case 1:return o.sent(),n(),[3,3];case 2:return r=o.sent(),i(r),[3,3];case 3:return[2]}}))}))})):a.addCheckbox(Gk.dialogue.labelDoNotAskAgain(),(function(e){o=e.target.checked})),a.addButton("mod-warning",Gk.dialogue.buttonDelete(),(function(){return v(c,void 0,void 0,(function(){var r;return y(this,(function(a){switch(a.label){case 0:return a.trys.push([0,2,,3]),o&&t.vault.setConfig("promptDelete",!1),[4,this.trashFile(e)];case 1:return a.sent(),n(),[3,3];case 2:return r=a.sent(),i(r),[3,3];case 3:return[2]}}))}))})).addCancelButton((function(){n()})).open()}))]):[3,2];case 1:return u.sent(),[3,4];case 2:return[4,this.trashFile(e)];case 3:u.sent(),u.label=4;case 4:return[2]}}))}))},e.prototype.promptForFolderDeletion=function(e){return v(this,void 0,void 0,(function(){return y(this,(function(t){return[2,this.promptForDeletion(e)]}))}))},e.prototype.promptForFileDeletion=function(e){return v(this,void 0,void 0,(function(){return y(this,(function(t){return[2,this.promptForDeletion(e)]}))}))},e.prototype.promptForFileRename=function(e){return v(this,void 0,void 0,(function(){return y(this,(function(t){return new rV(this.app,e).open(),[2]}))}))},e.prototype.trashFile=function(e){return v(this,void 0,void 0,(function(){var t,n;return y(this,(function(i){switch(i.label){case 0:return t=this.app,"system"!==(n=t.vault.getConfig("trashOption"))?[3,2]:[4,t.vault.trash(e,!0)];case 1:return i.sent(),[3,6];case 2:return"local"!==n?[3,4]:[4,t.vault.trash(e,!1)];case 3:return i.sent(),[3,6];case 4:return"none"!==n?[3,6]:[4,t.vault.delete(e,!0)];case 5:i.sent(),i.label=6;case 6:return[2]}}))}))},e.prototype.generateMarkdownLink=function(e,t,n,i){var r,o=this.app,a=o.vault.getConfig("useMarkdownLinks"),s=!a,l=o.metadataCache.fileToLinktext(e,t,s)+(n||"");if(e.path===t&&n&&(l=n),a){var c=wM(l);r="md"===e.extension?"[".concat(i||e.basename,"](").concat(c,")"):"![](".concat(c,")")}else i&&i.toLowerCase()===l.toLowerCase()&&(l=i,i=null),r=i?"[[".concat(l,"|").concat(i,"]]"):"[[".concat(l,"]]"),"md"!==e.extension&&(r="!"+r);return r},e.prototype.createAndOpenMarkdownFile=function(e,t){return v(this,void 0,Promise,(function(){var n,i,r,o,a,s;return y(this,(function(l){switch(l.label){case 0:return n=this.app,i=n.workspace,r="",(o=i.getActiveFile())&&(r=o.path),a=this.getNewFileParent(r,e),[4,this.createNewMarkdownFile(a,e)];case 1:return s=l.sent(),[4,(i.activeLeaf.view instanceof uH?i.activeLeaf:t?i.splitActiveLeaf():i.createLeafInTabGroup()).openFile(s,{active:!0,state:{mode:"source"},eState:{rename:"all"}})];case 2:return l.sent(),[2,s]}}))}))},e.prototype.insertTextIntoFile=function(e,t,n,i,r){return v(this,void 0,void 0,(function(){return y(this,(function(o){switch(o.label){case 0:return[4,this.app.vault.process(e,(function(o){var a=""===o?"":"\n\n";return i&&(t=XH(i,{fromTitle:n,newTitle:e.basename,content:t})),r?t+a+o:o+a+t}))];case 1:return o.sent(),[2]}}))}))},e.prototype.mergeFile=function(e,t,n,i){return v(this,void 0,void 0,(function(){var r,o,a=this;return y(this,(function(s){switch(s.label){case 0:return r=this.app.workspace,[4,this.vault.read(t)];case 1:return o=s.sent(),[4,this.runAsyncLinkUpdate((function(r){return v(a,void 0,void 0,(function(){var a,s,l;return y(this,(function(c){switch(c.label){case 0:return[4,this.insertTextIntoFile(e,o,t.basename,n,i)];case 1:return c.sent(),[4,this.trashFile(t)];case 2:if(c.sent(),r)for(a=0,s=r;a0?(s.removeKey(i.path),[4,a.process(i,(function(t){var n=c.map((function(e){return e.change}));return n.push(k.replaceInFile(e)),$H(t,n)}))]):[3,3];case 2:return y.sent(),[3,4];case 3:this.replaceInEditor(e),y.label=4;case 4:return[4,o.updateInternalLinks(s)];case 5:y.sent(),u=Gk.nouns.linkWithCount({count:l}),h=Gk.nouns.fileWithCount({count:Object.keys(s.data).length}),p=Gk.dialogue.msgUpdatedLinks({links:u,files:h}),new gD(p),y.label=6;case 6:for(d=o.linkUpdaters,f=0,m=Object.values(d);f0&&(t=t.slice(0,n)),e.chooser.setSuggestions(t)}else e.onNoSuggestion()};Array.isArray(n)?i(n):v(e,void 0,void 0,(function(){var e;return y(this,(function(t){switch(t.label){case 0:return e=i,[4,n];case 1:return e.apply(void 0,[t.sent()]),[2]}}))}))},t.prototype.onNoSuggestion=function(){this.chooser.setSuggestions(null),this.chooser.addMessage(this.emptyStateText)},t.prototype.selectSuggestion=function(e,t){this.app.keymap.updateModifiers(t),this.close(),this.isOpen=!1,this.onChooseSuggestion(e,t)},t}(dD),cV=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return f(t,e),t.prototype.getSuggestions=function(e){e=e.trim();for(var t=this.getItems(),n=gk(e),i=[],r=0,o=t;r0},t.prototype.checkForUpdate=function(e){var t,n;return v(this,void 0,Promise,(function(){var i,r,o,a,s,l,c,u,h,p,d,f;return y(this,(function(m){switch(m.label){case 0:if(i=this.getThemeFolder(),r=this.updates||{},o=e.name,a=e.repo,!this.isThemeInstalled(o))return[2];s=null===(t=this.themes[o])||void 0===t?void 0:t.version,l=Dk(a,hV),c=null,m.label=1;case 1:return m.trys.push([1,3,,4]),[4,rk(l).json];case 2:return(c=m.sent())&&c.name&&c.name===o?[3,4]:[2];case 3:return m.sent(),[3,4];case 4:return c?[3,10]:[4,this.downloadLegacyTheme(e)];case 5:u=m.sent(),h=!!(null===(n=this.themes[e.name])||void 0===n?void 0:n.dir),p=h?"".concat(i,"/").concat(o,"/").concat(uV):"".concat(i,"/").concat(o,".css"),d="",m.label=6;case 6:return m.trys.push([6,8,,9]),[4,this.app.vault.adapter.read(p)];case 7:return d=m.sent(),[3,9];case 8:return m.sent(),[2,!1];case 9:return u!==d?(r[o]={themeInfo:e},[2,!0]):[2,!1];case 10:return[4,Pk(a,c)];case 11:return f=m.sent(),!s||f&&uk(s,f)?(r[o]={themeInfo:e,version:f},[2,!0]):[2,!1]}}))}))},t.prototype.checkForUpdates=function(){return v(this,void 0,void 0,(function(){var e,t,n,i,r,o;return y(this,(function(a){switch(a.label){case 0:this.updates={},a.label=1;case 1:return a.trys.push([1,3,,4]),[4,fV()];case 2:return e=a.sent(),[3,4];case 3:return t=a.sent(),console.error(t),new gD(pV.msgFailedToInstallTheme()),[2];case 4:n=0,i=e,a.label=5;case 5:return n=t.maxCount)break}return n},e}(),AV=function(e){function t(t,n){var i=e.call(this)||this;if(i.leftSplit=null,i.rightSplit=null,i.leftRibbon=null,i.rightRibbon=null,i.rootSplit=null,i.floatingSplit=null,i.activeLeaf=null,i.activeTabGroup=null,i.containerEl=null,i.layoutReady=!1,i.requestSaveLayout=Aw(i.saveLayout.bind(i),1e3),i.requestResize=Aw(i.onResize.bind(i),0),i.requestActiveLeafEvents=Aw(i.activeLeafEvents.bind(i),0),i.requestUpdateLayout=function(e){var t=null,n=null,i=!1,r=function(){i=!1;var r=t,o=n;t=null,n=null,e.apply(r,o)};return function(){for(var e=[],o=0;o0){if(!e){var n=t.shift(),r=i.activeLeaf,o=i.rootSplit;if(n.rootId&&(o=[i.rootSplit,i.floatingSplit,i.leftSplit,i.rightSplit].find((function(e){return e.id===n.rootId}))),n.parentId){var a=null;i.iterateTabs([o],(function(e){e.id===n.parentId&&(a=e)})),a&&(r=i.createLeafInTabGroup(a))}r&&"empty"===r.view.getViewType()||(r=o===i.floatingSplit?i.openPopoutLeaf():i.splitActiveLeaf(),n.parentId&&(r.parent.id=n.parentId)),n.state.active=!0,n.leafHistory&&r.history.deserialize(n.leafHistory),r.setViewState(n.state,n.eState)}return!0}},hotkeys:[SI(["Mod","Shift"],"T")]}),$w.isDesktopApp&&i.app.commands.addCommand({id:"workspace:export-pdf",name:Gk.commands.exportPdf(),checkCallback:function(e){if(!$w.isDesktopApp)return!1;var t=i.getActiveViewOfType(KN);return t?(e||t.printToPdf(),!0):void 0}}),i.app.commands.addCommand({id:"editor:rename-heading",name:Gk.interface.menu.renameHeading(),icon:"lucide-edit-3",editorCheckCallback:function(e,t,n){var r=n.file;if(r){var o=t.getCursor(),a=kM(t.getLine(o.line));return a?(e||new aV(i.app,t,r,o,a).open(),!0):void 0}}}),$w.isDesktopApp&&(i.app.commands.addCommand({id:"workspace:open-in-new-window",name:Gk.commands.openInNewWindow(),icon:"lucide-maximize",checkCallback:function(e){var t=i.activeLeaf;if(t&&t.view instanceof eB)return e||i.app.workspace.openPopoutLeaf().setViewState(t.getViewState(),{focus:!0}),!0}}),i.app.commands.addCommand({id:"workspace:move-to-new-window",name:Gk.commands.moveToNewWindow(),icon:"lucide-maximize",checkCallback:function(e){var t=i.activeLeaf;if(t&&t.view instanceof eB)return e||i.app.workspace.moveLeafToPopout(t),!0}})),i.app.commands.addCommand({id:"workspace:next-tab",name:"Go to next tab",icon:"lucide-arrow-right",checkCallback:function(e){var t=i.activeLeaf;if(t&&t.parent instanceof wH){if(!e){var n=t.parent,r=n.currentTab+1;r>=n.children.length&&(r=0),n.selectTabIndex(r);var o=n.children[r];o instanceof CH&&i.setActiveLeaf(o,{focus:!0})}return!0}},hotkeys:[SI(["Ctrl"],"Tab"),$w.isMacOS?SI(["Meta","Shift"],"]"):SI(["Ctrl"],"PageDown")]});for(var s=function(e){l.app.commands.addCommand({id:"workspace:goto-tab-".concat(e),name:"Go to tab #".concat(e),checkCallback:function(t){var n=i.activeLeaf;if(n&&n.parent instanceof wH){var r=n.parent.children[e-1];if(r)return t||i.setActiveLeaf(r,{focus:!0}),!0}return!1},hotkeys:[SI(["Mod"],String(e))]})},l=this,c=0,u=[1,2,3,4,5,6,7,8];c0)HT.last().close();else{var t=i.leftSplit;if(t instanceof xH&&t.isFullscreen)t.toggleTabFullscreen();else{var n=i.rightSplit;if(n instanceof xH&&n.isFullscreen)n.toggleTabFullscreen();else if(t.collapsed||t instanceof xH&&t.isPinned)if(n.collapsed||n instanceof xH&&n.isPinned){var r=null===(e=i.activeLeaf)||void 0===e?void 0:e.history;if(r&&r.backHistory.length>0)r.back();else{var o=Date.now();o-p<5e3?ow.exitApp():(p=o,new gD(Gk.interface.mobile.msgBackAgainToExit(),5e3))}}else n.collapse();else t.collapse()}}}))}RT(i.containerEl,(function(e){i.trigger("swipe",e)})),i.on("swipe",(function(e){if(!(e.points>1||"y"!==e.direction||e.yMath.min(100,a)&&(n?uR(n):new gD("Action not configured"))}})}})),i.on("swipe",(function(e){if(!(e.points<2||"x"!==e.direction)&&i.rootSplit.containerEl.contains(e.targetEl)){var t,n=e.x>e.startX;if(t=n?i.app.commands.findCommand("app:go-back"):i.app.commands.findCommand("app:go-forward")){var r=document.body.createDiv({cls:"pull-action pull-out-action",text:t.name});r.onClickEvent((function(){r.detach()})),n?r.style.left="0":r.style.right="0";var o=n?1:-1,a=r.offsetWidth,s=!1;e.registerCallback({move:function(t){var n=Math.clamp((t-e.startX)*o/a,0,1);r.toggleClass("mod-activated",1===n),r.style.transform="translateX(".concat(-(1-n)*a*o,"px)"),1!==n||s||navigator.vibrate(100),s=1===n},cancel:function(){r.detach()},finish:function(t,s,l){var c=Math.clamp((t-e.startX)*o/a,0,1);ww(r,new mw({duration:200*c}).addProp("transform",null,"translateX(".concat(-a*o,"px)"),""),(function(){r.detach()})),l*o/a>.5&&(n?i.app.commands.executeCommandById("app:go-back"):i.app.commands.executeCommandById("app:go-forward"))}})}}})),$w.isIosApp&&i.on("css-change",(function(){return v(i,void 0,void 0,(function(){var e;return y(this,(function(t){switch(t.label){case 0:return(e=iL("--background-primary"))&&0!==e.a||(e=XA(getComputedStyle(document.body).backgroundColor)),e?[4,ow.setBackgroundColor({r:e.r/255,g:e.g/255,b:e.b/255})]:[3,2];case 1:t.sent(),t.label=2;case 2:return[2]}}))}))})),i.registerHoverLinkSource("search",{display:Gk.plugins.pagePreview.labelSourceSearch(),defaultMod:!0}),i.registerHoverLinkSource("preview",{display:Gk.plugins.pagePreview.labelSourcePreview(),defaultMod:!1}),i.registerHoverLinkSource("editor",{display:Gk.plugins.pagePreview.labelSourceEditor(),defaultMod:!0});var d=CodeMirror.getMode;return CodeMirror.getMode=function(e,t){var n=d.call(CodeMirror,e,t);return!t||n&&"null"!==n.name||(CodeMirror.getMode=d,zC.then((function(){for(var e=0,t=i.getLeavesOfType(KN.VIEW_TYPE);e0?(w=b[0],(k=t.getAbstractFileByPath(w))&&k instanceof wA?[4,v.openFile(k)]:[3,10]):[3,10]);case 9:y.sent(),y.label=10;case 10:this.setActiveLeaf(v),y.label=11;case 11:return i.containerEl.addClass("mod-root"),r||(n?(r=this.leftSplit=new EH(this)).collapse():r=this.leftSplit=new vH(this,"horizontal","left")),o||(o=this.rightSplit=n?new SH(this):new vH(this,"horizontal","right")).collapse(),a||(a=this.floatingSplit=new EV(this)),C=this.containerEl,$w.isMobile?C.setChildrenInPlace([r.containerEl,i.containerEl,o.containerEl]):C.setChildrenInPlace([this.leftRibbon.containerEl,r.containerEl,i.containerEl,o.containerEl,this.rightRibbon.containerEl]),x=e.active,(E=this.getLeafById(x))&&this.setActiveLeaf(E,{focus:!0}),this.layoutReady=!0,this.onLayoutChange(),this.requestActiveLeafEvents(),[2]}}))}))},t.prototype.onLayoutReady=function(e){null===this.onLayoutReadyCallbacks?e():this.onLayoutReadyCallbacks.push({pluginId:this.app.plugins.loadingPluginId,callback:e})},t.prototype.changeLayout=function(e){return v(this,void 0,void 0,(function(){return y(this,(function(t){switch(t.label){case 0:return this.layoutReady?[4,this.clearLayout()]:[2];case 1:return t.sent(),[4,this.setLayout(e)];case 2:return t.sent(),[2]}}))}))},t.prototype.deserializeLayout=function(e,t){return v(this,void 0,Promise,(function(){var n,i,r,o,a,s,l,c,u,h,p,d=this;return y(this,(function(f){switch(f.label){case 0:if(n=function(t){return v(d,void 0,void 0,(function(){var n,i,r;return y(this,(function(o){switch(o.label){case 0:n=0,o.label=1;case 1:return n=13?(a=new SV(this,e.id,e),[4,n(a)]):[3,6];case 5:if(f.sent(),0===a.children.length)return[2,null];for(s=0;sf&&d--,f===d)return}return a.removeChild(t),t.setDimension(null),i.insertChild(d,t),i.selectTabIndex(i.children.indexOf(t)),void n.requestResize()}if(!(i instanceof mH&&1===i.children.length&&i.children[0]===t)){var g=i.parent;if(g&&g instanceof gH){var y="top"===h||"bottom"===h?"horizontal":"vertical";if(o){l=new wH(n);n.splitLeaf(i,l,y,"left"===h||"top"===h),a.removeChild(t),t.setDimension(null),l.insertChild(0,t)}else if("center"===h){var b=a.children.indexOf(t),w=g.children.indexOf(i),k=t.dimension,C=i.dimension,x=new CH(n.app);g.replaceChild(w,x),a.replaceChild(b,i),g.replaceChild(w,t),t.setDimension(C),i.setDimension(k),i instanceof CH&&i.view instanceof uH&&i.detach()}else a.removeChild(t),t.setDimension(null),n.splitLeaf(i,t,y,"left"===h||"top"===h);n.requestResize()}else;}}}}}},v=function(){if(window.removeEventListener("touchend",i),window.removeEventListener("dragover",f),window.removeEventListener("dragenter",y),window.removeEventListener("dragleave",b),window.removeEventListener("dragend",v,{capture:!0}),window.removeEventListener("drop",g),h&&(h.style.opacity=null),o.removeOverlay(),r.detach(),null==a||a.detach(),s.detach(),document.body.removeClass("is-grabbing"),$w.isMobile&&(u||e.target.dispatchEvent(new MouseEvent("contextmenu",{button:0,buttons:0,ctrlKey:e.ctrlKey,altKey:e.altKey,metaKey:e.metaKey,shiftKey:e.shiftKey,screenX:e.screenX,screenY:e.screenY,bubbles:!0,cancelable:!0,clientX:e.clientX,clientY:e.clientY}))),$w.isDesktopApp&&e&&m&&t.view instanceof eB){var l=t.containerEl.getBoundingClientRect(),c=t.containerEl.win.electron.webFrame.getZoomLevel();m=!1,t.parent&&t.parent.removeChild(t),t.setDimension(null),n.openPopout({x:e.screenX,y:e.screenY,size:l,zoom:c}).insertChild(0,wH.createFrom(n,t)),n.setActiveLeaf(t,{focus:!0})}},y=function(e){e.target&&(m=!1),f(e)},b=function(e){e.relatedTarget||0===e.buttons||(d(),setTimeout((function(){m=!0})))};window.addEventListener("dragover",f),window.addEventListener("dragenter",y),window.addEventListener("dragleave",b),window.addEventListener("dragend",v,{capture:!0}),window.addEventListener("drop",g)}},t.prototype.onStartLink=function(e){var t=this,n=this.app.dragManager,i=function(i){i.preventDefault();var r=t.getDropLocation(i);if(r&&r!==e)if(r instanceof wH&&(r=r.children[r.currentTab]),r instanceof CH)if(r.view instanceof eB){var o=r.containerEl.getBoundingClientRect();n.showOverlay(i.doc,o)}else n.hideOverlay();else n.hideOverlay();else n.hideOverlay()},r=function(o){window.removeEventListener("mousemove",i),window.removeEventListener("mouseup",r),n.removeOverlay();var a=t.getDropLocation(o);a&&a!==e&&(a instanceof wH&&(a=a.children[a.currentTab]),a instanceof CH&&a.view instanceof eB&&e.setGroupMember(a))};window.addEventListener("mousemove",i),window.addEventListener("mouseup",r)},t.prototype.getDropLocation=function(e){var t=e.win;if(t!==window)for(var n=0,i=this.floatingSplit.children;n0&&n.setDimension(100/e.children.length),e.insertChild(t,n),n},t.prototype.splitLeaf=function(e,t,n,i){for(var r,o,a=e;a;){if(a instanceof gH){o=(r=a).children.indexOf(e);break}e=a,a=a.parent}t instanceof wH||(t=wH.createFrom(this,t));var s=e.dimension;if(n&&n!==r.direction){e.setDimension(null);var l=new gH(this,n);r.replaceChild(o,l),l.setDimension(s),i?(l.insertChild(0,t),l.insertChild(1,e)):(l.insertChild(0,e),l.insertChild(1,t))}else null!==s&&(e.setDimension(s/2),t.setDimension(s/2)),i?r.insertChild(o,t):r.insertChild(o+1,t)},t.prototype.createLeafBySplit=function(e,t,n){var i=new CH(this.app);return this.splitLeaf(e,i,t,n),i},t.prototype.splitActiveLeaf=function(e){var t=this.getMostRecentLeaf();return t?this.createLeafBySplit(t,e):this.createLeafInParent(this.rootSplit,0)},t.prototype.splitLeafOrActive=function(e,t){return e?this.createLeafBySplit(e,t):this.splitActiveLeaf(t)},t.prototype.duplicateLeaf=function(e,t,n){return v(this,void 0,Promise,(function(){var i,r,o;return y(this,(function(a){switch(a.label){case 0:return e?("horizontal"!==t&&"vertical"!==t||(n=t,t="split"),i=e.getViewState(),r=e.history.serialize(),[4,(o="split"===t?this.getLeaf(t,n):this.getLeaf(t)).setViewState(i,{focus:!0})]):[2];case 1:return a.sent(),o.history.deserialize(r),[2,o]}}))}))},t.prototype.getUnpinnedLeaf=function(e){var t,n=this.activeLeaf,i=n;if(i&&i.canNavigate())return i;i=null;var r=null!==(t=null==n?void 0:n.getContainer())&&void 0!==t?t:this.rootSplit;if(this.iterateLeaves(r,(function(t){t.canNavigate()&&(e&&t.type!==e||(!i||i.activeTimen.activeTime&&(n=r,t=i)}var o=new CH(this.app);return e.insertChild(t+1,o),(e instanceof wH||e instanceof xH)&&e.selectTabIndex(t),o},t.prototype.moveLeafToPopout=function(e,t){var n;if(e.view instanceof eB){null!=t||(t={}),t.size||(t.size=e.containerEl.getBoundingClientRect()),t.zoom||(t.zoom=e.containerEl.win.electron.webFrame.getZoomLevel());var i=this.app.workspace.openPopout(t);return null===(n=e.parent)||void 0===n||n.removeChild(e),e.setDimension(null),i.insertChild(0,wH.createFrom(this,e)),i}},t.prototype.openPopout=function(e){var t;if(!$w.isDesktopApp)throw new gD(t="This feature only works in Obsidian's desktop app."),new Error(t);if(dt<13)throw new gD(t="You must update Obsidian's installer to use this feature."),new Error(t);var n=new SV(this,null,e);return this.floatingSplit.insertChild(-1,n),n},t.prototype.openPopoutLeaf=function(e){var t=this.openPopout(e),n=new CH(this.app);return t.insertChild(0,wH.createFrom(this,n)),n},t.prototype.openLinkText=function(e,t,n,i){return v(this,void 0,void 0,(function(){return y(this,(function(r){switch(r.label){case 0:return[4,this.getLeaf(n).openLinkText(e,t,i)];case 1:return r.sent(),[2]}}))}))},t.prototype.setActiveLeaf=function(e,t,n){var i;t&&"boolean"!=typeof t&&(n=t.focus);var r=this.activeLeaf;if(this.isAttached(e))if(this.activeEditor=(null==e?void 0:e.view)instanceof KN?e.view:null,r!==e){if(r&&(r.containerEl.removeClass("mod-active"),r.tabHeaderEl.removeClass("mod-active")),this.activeTabGroup&&this.activeTabGroup.containerEl.removeClass("mod-active"),this.activeLeaf=e,this.activeTabGroup=null==e?void 0:e.parent,e){e.activeTime=Date.now(),e.containerEl.addClass("mod-active"),e.tabHeaderEl.addClass("mod-active"),null===(i=this.activeTabGroup)||void 0===i||i.containerEl.addClass("mod-active");var o=e.parent;if(o instanceof wH){var a=o.children.indexOf(e);o.currentTab!==a&&(o.selectTabIndex(a),o.updateTabDisplay())}var s=e.getContainer();s instanceof SV?s.updateTitle():this.updateTitle(),n&&($w.isDesktopApp&&s.focus(),e.setEphemeralState({focus:!0})),this.updateMobileVisibleTabGroup(),this.requestActiveLeafEvents()}}else n&&e&&e.setEphemeralState({focus:!0})},t.prototype.activeLeafEvents=function(){if(this.layoutReady){var e=this.activeLeaf;this.trigger("active-leaf-change",e);var t=this.lastActiveFile,n=this.getActiveFile();t!==n&&(this.recentFileTracker.onFileOpen(n,t),this.lastActiveFile=n,this.trigger("file-open",n))}},t.prototype.getLeafById=function(e){var t=null;return this.iterateAllLeaves((function(n){if(n.id===e)return t=n,!0})),t},t.prototype.getGroupLeaves=function(e){var t=[];return e?(this.iterateAllLeaves((function(n){n.group===e&&t.push(n)})),t):t},t.prototype.getFocusedContainer=function(){if(activeWindow===window)return this.rootSplit;for(var e=0,t=this.floatingSplit.children;e0){s=u[h-1];break}}else if(h0;)n.pop().recomputeChildrenDimensions();if(0===this.rootSplit.children.length){var i=new CH(this.app),r=new wH(this);this.lastTabGroupStacked&&r.setStacked(!0),r.insertChild(0,i),this.rootSplit.insertChild(0,r)}if(!this.activeLeaf||!this.isAttached(this.activeLeaf)){var o=this.activeTabGroup,a=null;o&&o instanceof wH&&this.isAttached(o)&&(a=o.children[o.currentTab]),a||(a=this.getMostRecentLeaf(this.getFocusedContainer())),a||this.iterateAllLeaves((function(e){(!a||a.activeTime0&&(h=c=o.first(),p=u=o.last()),t===n){var d=i.children[0],f=r.children[0];d instanceof wH&&(d.containerEl.addClass("mod-top","mod-top-left-space"),i.collapsed||(c=d)),f instanceof wH&&(f.containerEl.addClass("mod-top","mod-top-right-space"),r.collapsed||(u=f));var m=e,g=m.leftSidebarToggleButtonEl,v=m.rightSidebarToggleButtonEl,y=function(e,t,n){var i=e.parentElement;if(t!==i){var r=n.prepend,o=n.oldStyle,a=n.newStyle,s=parseFloat(getComputedStyle(e).marginLeft),l=e.offsetWidth;if(i&&""!==o){var c=e.cloneNode(!0);e.replaceWith(c);var u=new mw(dH);"margin"===o?u.addProp("marginLeft","",s-l+"px"):"none"!==o&&u.addProp("overflow","hidden","hidden","").addProp("width",l+"px","0"),ww(c,u,(function(){return c.detach()}))}if(r?t.prepend(e):t.appendChild(e),i&&""!==a){u=new mw(dH);"margin"===a?u.addProp("marginLeft",s-l+"px",""):"none"!==a&&u.addProp("overflow","hidden","hidden","").addProp("width","0",l+"px",""),ww(e,u)}}};$w.isDesktopApp&&$w.isMacOS&&"hidden"===window.titlebarStyle&&!electronWindow.isFullScreen()||$w.isTablet?!i.collapsed&&d instanceof wH?y(g,d.tabHeaderContainerEl,{oldStyle:"margin",newStyle:""}):i.collapsed&&h&&y(g,h.tabHeaderContainerEl,{prepend:!0,oldStyle:"none",newStyle:"margin"}):e.leftRibbon.containerEl.prepend(g),$w.isDesktopApp&&!r.collapsed&&($w.isMacOS||"hidden"!==window.titlebarStyle||electronWindow.isFullScreen())?f instanceof wH&&y(v,f.tabHeaderContainerEl,{newStyle:""}):p&&y(v,p.tabHeaderContainerEl,{oldStyle:"none"})}$w.isDesktopApp&&(c&&c.containerEl.addClass("mod-top-left-space"),u&&u.containerEl.addClass("mod-top-right-space"))};u(n);for(var h=0,p=o.children;h=0&&(r=e.substr(a+1),e=e.substr(0,a),t.hash=r),o>=0&&(i=e.substr(o+1),e=e.substr(0,o));for(var s=0,l=i.split("&");s1&&(c=decodeURIComponent(n[1])),t[decodeURIComponent(n[0])]=c}t.action=e.replace(/\/+$/g,"")}return t}(n))?e.vault&&e.vault.toLowerCase()!==this.app.vault.getName().toLowerCase()?(sessionStorage.setItem("obsidian-uri",n),window.location.reload(),[2]):(t(e),[2]):[2]}))}))};ow.addListener("appUrlOpen",(function(e){i(e.url)}))}},t.prototype.registerObsidianProtocolHandler=function(e,t){if(this.protocolHandlers.has(e))throw new Error('Action "'.concat(e,'" is already registered as a handler.'));this.protocolHandlers.set(e,t)},t.prototype.unregisterObsidianProtocolHandler=function(e,t){t&&this.protocolHandlers.get(e)!==t||this.protocolHandlers.delete(e)},t.prototype.registerHoverLinkSource=function(e,t){this.hoverLinkSources[e]=t},t.prototype.unregisterHoverLinkSource=function(e){delete this.hoverLinkSources[e]},t.prototype.pushUndoHistory=function(e,t,n){if(e){var i=e.getViewState();if("empty"!==i.type){var r=e.getEphemeralState(),o=this.undoHistory;o.unshift({state:i,eState:r,parentId:t,rootId:n,leafHistory:e.history.serialize()}),o.length>10&&o.pop()}}},t.prototype.updateTitle=function(){var e=this.getMostRecentLeaf(this.activeLeaf.getContainer());document.title=this.app.getAppTitle(e?e.getDisplayText().trim():"")},t.prototype.registerEditorExtension=function(e){this.editorExtensions.push(e),this.updateOptions()},t.prototype.unregisterEditorExtension=function(e){this.editorExtensions.remove(e),this.updateOptions()},t.prototype.trigger=function(t){for(var n=[],i=1;i1&&n.setMessage(Gk.interface.mobile.msgImporting()+" (".concat(i,"/").concat(e.length,")")),[4,fetch(A.convertFileSrc(s.uri))];case 3:return[4,g.sent().arrayBuffer()];case 4:return l=g.sent(),c=s.name||Ge(s.uri),u=Xe(c),h=Ze(c),p=void 0,"md"===h?[3,6]:[4,r.getAvailablePathForAttachments(u,h,this.app.workspace.getActiveFile())];case 5:return p=g.sent(),[3,8];case 6:return[4,r.getAvailablePath(u,h)];case 7:p=g.sent(),g.label=8;case 8:return[4,r.createBinary(p,l)];case 9:return d=g.sent(),t.push(d),i++,[3,11];case 10:return f=g.sent(),n.hide(),new gD(Gk.interface.mobile.msgFailedToImportFile({filename:s.name})),new gD(f.toString()),[2];case 11:return o++,[3,1];case 12:return n.hide(),(m=(new KL).addItem((function(e){return e.setTitle(Gk.interface.mobile.msgImportSuccess()).removeIcon().setIsLabel(!0)})).addSeparator()).addItem((function(e){return e.setTitle(Gk.dialogue.buttonDone()).setIcon("lucide-check").onClick((function(){return null}))})),this.app.workspace.trigger("receive-files-menu",m,t),m.showAtPosition({x:0,y:0}),[2]}}))}))},e}(),NV=function(e){function t(t,n){var i=e.call(this,t)||this;return i.emptyStateText=Gk.plugins.quickSwitcher.labelNoNoteCreateNew(),i.text=n,i.shouldShowUnresolved=!0,i.shouldShowNonImageAttachments=!1,i.shouldShowImages=!1,i.shouldShowCanvas=!1,i.shouldShowAllTypes=!1,i.setPlaceholder("Choose file to insert"),i.setInstructions([{command:"↑↓",purpose:"to navigate"},{command:"↵",purpose:"to select"},{command:"esc",purpose:"to dismiss"}]),i}return f(t,e),t.prototype.onChooseSuggestion=function(e,t){return v(this,void 0,Promise,(function(){var t,n,i;return y(this,(function(r){switch(r.label){case 0:t=null,n=this.app,r.label=1;case 1:return r.trys.push([1,7,,8]),e?[3,3]:[4,n.fileManager.createNewMarkdownFileFromLinktext(this.inputEl.value,"")];case 2:return t=r.sent(),[3,6];case 3:return"unresolved"!==e.type?[3,5]:[4,n.fileManager.createNewMarkdownFileFromLinktext(e.linktext,"")];case 4:return t=r.sent(),[3,6];case 5:"file"!==e.type&&"alias"!==e.type||(t=e.file),r.label=6;case 6:return[3,8];case 7:return i=r.sent(),new gD(i.toString()),[2];case 8:return t?[4,this.app.fileManager.insertTextIntoFile(t,this.text,"","",!1)]:[3,11];case 9:return r.sent(),[4,this.app.workspace.getLeaf().openFile(t)];case 10:r.sent(),r.label=11;case 11:return[2]}}))}))},t}(OV),RV=n(8246),HV=n.n(RV),VV="audio/mp4",zV=function(){function e(){this.id="audio-recorder",this.name=Gk.plugins.audioRecorder.name(),this.description=Gk.plugins.audioRecorder.desc(),this.app=null,this.plugin=null,this.recording=!1,this.recorder=null,this.extension=""}return e.prototype.init=function(e,t){var n=this;this.app=e,this.plugin=t,t.registerRibbonItem(Gk.plugins.audioRecorder.actionToggle(),"lucide-mic",this.onRecordAudio.bind(this)),t.registerGlobalCommand({id:"audio-recorder:start",name:Gk.plugins.audioRecorder.actionStart(),icon:"lucide-play-circle",checkCallback:function(e){return!n.recording&&(e||n.onStartRecording(),!0)}}),t.registerGlobalCommand({id:"audio-recorder:stop",name:Gk.plugins.audioRecorder.actionStop(),icon:"lucide-stop-circle",checkCallback:function(e){return!!n.recording&&(e||n.onStopRecording(),!0)}})},e.prototype.checkPermission=function(){return v(this,void 0,Promise,(function(){var e,t,n;return y(this,(function(i){switch(i.label){case 0:return $w.isDesktopApp&&"MacOS"===ie?(e=at("electron"))?(t=e.remote.systemPreferences,n=t.getMediaAccessStatus("microphone"),["denied","restricted","unknown"].contains(n)?(this.showRecordingMessage(Gk.plugins.audioRecorder.msgAccessDenied(),!0),[2,!1]):[3,1]):(this.showRecordingMessage(Gk.plugins.audioRecorder.msgAccessDenied(),!0),[2,!1]):[3,5];case 1:return"not-determined"!==n?[3,3]:(this.showRecordingMessage(Gk.plugins.audioRecorder.msgPendingGrant(),!1),[4,t.askForMediaAccess("microphone")]);case 2:return[2,i.sent()];case 3:if("granted"===n)return[2,!0];i.label=4;case 4:return[2,!1];case 5:return[2,!0]}}))}))},e.prototype.onRecordAudio=function(){return v(this,void 0,void 0,(function(){return y(this,(function(e){switch(e.label){case 0:return[4,this.checkPermission()];case 1:return e.sent()?this.recording?[3,3]:[4,this.onStartRecording()]:[2];case 2:return e.sent(),[3,4];case 3:this.onStopRecording(),e.label=4;case 4:return[2]}}))}))},e.prototype.onStartRecording=function(){return v(this,void 0,void 0,(function(){var e,t,n;return y(this,(function(i){switch(i.label){case 0:if(iw&&!navigator.mediaDevices)return new gD("This functionality requires iOS 14.5."),[2];i.label=1;case 1:return i.trys.push([1,4,,5]),[4,navigator.mediaDevices.getUserMedia({audio:!0,video:!1})];case 2:return e=i.sent(),[4,this.startRecording(e)];case 3:return i.sent(),[3,5];case 4:return(t=i.sent()).message.contains("Requested device not found")&&this.plugin.addedButtonEls.length>0?(n=Gk.plugins.audioRecorder.msgNoMicrophone(),this.showRecordingMessage(n,!0)):(t.message.contains("denied")&&new gD(t.message),console.error(t)),[2];case 5:return this.recording=!0,this.plugin.addedButtonEls.forEach((function(e){oT(e,"lucide-mic"),e.addClass("is-active")})),[2]}}))}))},e.prototype.onStopRecording=function(){this.recording=!1,this.recorder.stop(),this.plugin.addedButtonEls.forEach((function(e){e.removeClass("is-active")}))},e.prototype.startRecording=function(e){var t=this,n=[],i='audio/webm;codecs="opus"';this.extension="webm",MediaRecorder.isTypeSupported(VV)&&(i=VV,this.extension="m4a"),this.recorder=new MediaRecorder(e,{mimeType:i}),this.recorder.addEventListener("dataavailable",(function(e){e.data.size>0&&n.push(e.data)})),this.recorder.addEventListener("stop",(function(){return v(t,void 0,void 0,(function(){var t,o,a;return y(this,(function(s){switch(s.label){case 0:if(this.recorder=null,e.getTracks().forEach((function(e){e.stop()})),t=new Blob(n,{type:i}),"webm"!==this.extension)return[3,4];s.label=1;case 1:return s.trys.push([1,3,,4]),[4,HV()(t)];case 2:return t=s.sent(),[3,4];case 3:return o=s.sent(),console.error(o),[3,4];case 4:return a=this.saveRecording,[4,t.arrayBuffer()];case 5:return[4,a.apply(this,[s.sent()])];case 6:return s.sent(),r&&r.release(),[2]}}))}))})),this.recorder.start();var r=null;nw&&(r=pw())},e.prototype.saveRecording=function(e){return v(this,void 0,void 0,(function(){var t,n,i,r,o,a,s,l;return y(this,(function(c){switch(c.label){case 0:return t=this.app,n=t.workspace,i="Recording "+window.moment().format("YYYYMMDDHHmmss"),r=n.getActiveFile(),o=n.getActiveViewOfType(KN),[4,t.vault.getAvailablePathForAttachments(i,this.extension,r)];case 1:return a=c.sent(),[4,t.vault.createBinary(a,e)];case 2:return s=c.sent(),o?(l=this.app.fileManager.generateMarkdownLink(s,o.file.path),o.editor.replaceSelection("\n".concat(l,"\n")),[2]):[4,n.getUnpinnedLeaf().openFile(s,{active:!0})];case 3:return c.sent(),[2]}}))}))},e.prototype.showRecordingMessage=function(e,t){this.plugin.addedButtonEls.length>0&&QT(this.plugin.addedButtonEls[0],e,{placement:"right",classes:t?["mod-error"]:[]})},e}(),qV=function(e){function t(t,n,i,r){var o=e.call(this,t,n)||this;return o.commands=i,o.cb=r,o}return f(t,e),t.prototype.renderSuggestion=function(e,t){Mk(t,e.command.name,e.matches.matches)},t.prototype.getSuggestions=function(e){var t=Ek(e);return this.commands.map((function(e){return{command:e,matches:t(e.name)}})).filter((function(e){return!!e.matches})).sort((function(e,t){return t.matches.score-e.matches.score})).slice(0,100)},t.prototype.selectSuggestion=function(e){this.cb(e.command),this.close()},t}(AR),UV=function(){function e(){this.id="command-palette",this.name=Gk.plugins.commandPalette.name(),this.description=Gk.plugins.commandPalette.desc(),this.defaultOn=!0,this.modal=null,this.options={}}return e.prototype.init=function(e,t){this.app=e,this.openCallback=this.onOpen.bind(this),t.registerRibbonItem(Gk.plugins.commandPalette.actionOpen(),"lucide-terminal",this.openCallback),t.registerGlobalCommand({id:"command-palette:open",name:Gk.plugins.commandPalette.actionOpen(),icon:"lucide-terminal-square",callback:this.openCallback,hotkeys:[SI(["Mod"],"P")]})},e.prototype.onEnable=function(e,t){return v(this,void 0,Promise,(function(){var n,i,r,o;return y(this,(function(a){switch(a.label){case 0:return this.modal=new _V(e,this),n=this,r=(i=Object).assign,o=[{}],[4,t.loadData()];case 1:return n.options=r.apply(i,o.concat([a.sent()])),t.addSettingTab(new jV(e,t,this)),[2]}}))}))},e.prototype.onDisable=function(e,t){this.modal=null},e.prototype.saveSettings=function(e){e.saveData(this.options)},e.prototype.onOpen=function(){return this.modal&&this.modal.open(),!1},e.prototype.getCommands=function(){var e=this.app.commands.listCommands(),t=this.options.pinned;return t&&e.sort((function(e,n){var i=t.indexOf(e.id),r=t.indexOf(n.id);return i===r?eF(e.name,n.name):-1===i?1:-1===r?-1:i-r})),e},e}(),_V=function(e){function t(t,n){var i=e.call(this,t)||this;return i.emptyStateText=Gk.plugins.commandPalette.labelNoCommands(),i.commands=null,i.plugin=n,i.setInstructions([{command:"↑↓",purpose:Gk.plugins.commandPalette.instructionNavigate()},{command:"↵",purpose:Gk.plugins.commandPalette.instructionUse()},{command:"esc",purpose:Gk.plugins.commandPalette.instructionDismiss()}]),i.setPlaceholder(Gk.plugins.commandPalette.promptTypeCommand()),i.scope.register(null,"Tab",(function(){return!1})),i.scope.register(null,"Enter",(function(e){if(!e.isComposing)return i.chooser.useSelectedItem(e),!1})),i}return f(t,e),t.prototype.onOpen=function(){this.commands=null,e.prototype.onOpen.call(this)},t.prototype.onClose=function(){this.commands=null,e.prototype.onClose.call(this)},t.prototype.getItems=function(){var e=this.commands;return e||(e=this.commands=this.plugin.getCommands()),e},t.prototype.getItemText=function(e){return e.name},t.prototype.renderSuggestion=function(e,t){t.addClass("mod-complex");var n=t.createDiv("suggestion-content"),i=t.createDiv("suggestion-aux"),r=n.createDiv("suggestion-title"),o=e.item,a=o.name,s=a.indexOf(": ");if(-1!==s){var l=a.slice(0,s),c=a.slice(s+2);Sk(r.createSpan("suggestion-prefix"),l,e.match),Sk(r.createSpan(),c,e.match,-(s+2))}else Sk(r.createSpan(),a,e.match);var u=this.app,h=u.hotkeyManager.getHotkeys(o.id),p=u.hotkeyManager.getDefaultHotkeys(o.id);if(h)for(var d=0,f=h;dt&&(n=i,t=r)})),n?[4,this.app.workspace.getLeaf().openFile(n,{active:!0})]:(new gD(YV.msgNoPrevious()),[2]);case 1:return i.sent(),[2]}}))}))},e.prototype.gotoNextExisting=function(e){return v(this,void 0,void 0,(function(){var t,n;return y(this,(function(i){switch(i.label){case 0:return t=Number.POSITIVE_INFINITY,n=null,this.iterateDailyNotes((function(i,r){r>e&&r1&&o.some((function(e){return e.file===i}))){var a=o.map((function(e){return e.file}));$w.isPhone&&r.addItem((function(e){return e.setSection("title").setIcon("lucide-files").setTitle(Gk.nouns.fileWithCount({count:o.length})).setIsLabel(!0)})),r.addItem((function(e){return e.setSection("action").setTitle(QV.actionMoveItems({count:a.length})).setIcon("lucide-folder-tree").onClick((function(){new az(n.app,a).open()}))})),r.addItem((function(e){return e.setSection("danger").setTitle(QV.menuOptDelete()).setIcon("lucide-trash-2").setWarning(!0).onClick((function(){return v(n,void 0,void 0,(function(){var e,t,n;return y(this,(function(i){switch(i.label){case 0:e=0,t=a,i.label=1;case 1:return e0&&c.length>0&&l.last()===c.last();)u=l.last(),l.pop(),c.pop();var h=u.vChildren.children.indexOf(l.last()||a),p=u.vChildren.children.indexOf(c.last()||s);if(-1===h||-1===p)return!0;if(p0?t=r.map((function(e){return e.file})):i instanceof ez&&t.push(i.file),o=0,a=t,l.label=1;case 1:return o0?[4,cz(n,r,e)]:[3,2]:[2];case 1:o.sent(),o.label=2;case 2:return[2]}}))}))},t}(cV);function sz(e,t){if(e===t)return!1;if(e instanceof kA&&e.isRoot())return!1;if(e instanceof kA&&t.path.startsWith(e.path))return!1;var n=e.name;return"/"!==t.path&&(n=t.path+"/"+n),e.path!==n}function lz(e,t){for(var n=[],i=0,r=e;i=0&&(n.intervalMinutes=i,e.plugin.saveData(n))}))})),new aL(t).setName(hz.optionKeep()).setDesc(hz.optionKeepDescription()).addText((function(t){return t.setValue(String(n.keepDays)).onChange((function(t){var i=parseFloat(t);!isNaN(i)&&i>=1&&(n.keepDays=i,e.plugin.saveData(n))}))})),new aL(t).setName(hz.optionOpenHistory()).setDesc(hz.optionOpenHistoryDescription()).addButton((function(t){return t.setButtonText(hz.buttonViewSnapshots()).setCta().onClick((function(){e.instance.openModal()}))})),new aL(t).setName(hz.optionClear()).setDesc(hz.optionClearDescription()).addButton((function(t){return t.setButtonText(hz.buttonClearHistory()).setWarning().onClick((function(){new fD(e.app).setTitle(hz.optionClear()).setContent(createFragment((function(e){e.createEl("p",{cls:"mod-warning",text:hz.labelClearWarning()})}))).addButton("mod-warning",hz.buttonClearHistory(),(function(){e.instance.clearData(),new gD(hz.msgClearComplete())})).addCancelButton().open()}))}))},t}(AD),fz=function(e){function t(t,n,i,r){var o=e.call(this,t,n)||this;return o.paths=[],o.modal=null,o.paths=i,o.modal=r,o}return f(t,e),t.prototype.renderSuggestion=function(e,t){t.setText($e(e))},t.prototype.getSuggestions=function(e){e=e.toLowerCase();for(var t=[],n=0,i=this.paths;n0){n.push({type:"group",name:gz.labelHistory(),icon:"lucide-x",iconTooltip:gz.tooltipClearHistory(),callback:function(){t.app.saveLocalStorage("recent-searches",null)}});for(var s=0,l=a;s0?(this.suggestions.setSuggestions(n),this.open(),$w.isMobile||(this.suggestEl.style.width=Math.max(this.inputEl.offsetWidth,300)+"px",this.setAutoDestroy(e),this.reposition(tC(e)))):this.close()},t.attach=function(e,n,i){void 0===i&&(i=!0),new t(e,n,i)},t.showOnce=function(e,n,i){void 0===i&&(i=!0),new t(e,n,i,!0).onInputChange(),n.focus()},t}(DR),bz=Gk.plugins.search,wz=function(){function e(){this.id="global-search",this.name=bz.name(),this.description=bz.desc(),this.defaultOn=!0,this.app=null,this.options={}}return e.prototype.init=function(e,t){var n=this;this.app=e,t.registerGlobalCommand({id:"global-search:open",name:bz.actionOpenSearch(),icon:"lucide-search",callback:function(){var t=window.getSelection().toString(),i=e.workspace.getActiveViewOfType(KN);if(i){var r=i.getSelection();r&&(t=r)}t?t.contains(" ")&&(t='"'.concat(t.replace(/\\/,"\\\\").replace(/"/,'\\"'),'"')):t=null,n.openGlobalSearch(t)},hotkeys:[SI(["Mod","Shift"],"F")]}),t.registerViewType(kz,(function(e){return new Cz(e)}))},e.prototype.onEnable=function(e,t){return v(this,void 0,void 0,(function(){var n;return y(this,(function(i){switch(i.label){case 0:return t.registerEvent(e.workspace.on("layout-ready",this.initLeaf,this)),t.registerEvent(e.workspace.on("editor-menu",this.onEditorMenu,this)),n=this,[4,t.loadData()];case 1:return n.options=i.sent()||{},[2]}}))}))},e.prototype.onUserEnable=function(){this.initLeaf()},e.prototype.initLeaf=function(){this.app.workspace.ensureSideLeaf(kz,"left",{reveal:!1})},e.prototype.onEditorMenu=function(e,t){var n=this,i=t.getSelection();i&&e.addItem((function(e){return e.setTitle(bz.menuOptSearchFor({keyword:ak(i,40)})).setIcon("lucide-search").onClick((function(){i.contains(" ")&&(i='"'.concat(i.replace(/\\/,"\\\\").replace(/"/,'\\"'),'"')),n.openGlobalSearch(i)}))}))},e.prototype.openGlobalSearch=function(e){this.app.workspace.ensureSideLeaf(kz,"left",{reveal:!0,state:{query:e}})},e.prototype.getGlobalSearchQuery=function(){var e,t=this.app.workspace.getLeavesOfType(kz);if(0===t.length)return"";var n=t[0].getViewState();return(null===(e=null==n?void 0:n.state)||void 0===e?void 0:e.query)?n.state.query:""},e}(),kz="search",Cz=function(e){function t(t){var n=e.call(this,t)||this;n.icon="lucide-search",n.searchContainerEl=null,n.searchInfoEl=null,n.matchingCase=!1,n.explainSearch=!1,n.searchQuery=null,n.recentSearches=[],n.requestSaveSearch=Aw(n.saveSearch.bind(n),5e3,!0);var i=n.containerEl,r=n.headerDom=new LN(n.app,i);n.matchingCaseButtonEl=r.addNavButton("uppercase-lowercase-a",bz.labelMatchCase(),(function(){return n.setMatchingCase(!n.matchingCase)})),n.explainSearchButtonEl=r.addNavButton("help",bz.labelExplainSearchTerm(),(function(){return n.setExplainSearch(!n.explainSearch)})),n.collapseAllButtonEl=r.addNavButton("lucide-list",bz.labelCollapseResults(),(function(){return n.setCollapseAll(!n.dom.collapseAll)})),n.extraContextButtonEl=r.addNavButton("lucide-move-vertical",bz.labelMoreContext(),(function(){return n.setExtraContext(!n.dom.extraContext)})),r.addSortButton((function(e){return n.setSortOrder(e)}),(function(){return n.dom.sortOrder})),r.addNavButton("lucide-copy",bz.labelCopySearchResults(),n.onCopyResultsClick.bind(n));var o=Aw(n.startSearch.bind(n),250,!0);return new fL(i).setPlaceholder(bz.promptStartSearch()).onChange((function(e){n.dom.setFocusedItem(null),n.stopSearch(),e?o():n.startSearch()})).then((function(e){tD(e.clearButtonEl,bz.tooltipClearSearch()),n.searchComponent=e,n.searchComponent.inputEl.addEventListener("keypress",(function(e){e.isComposing||"Enter"!==e.key||($w.isMobile&&Xk(),n.startSearch())})),$w.isMobile&&e.containerEl.createDiv("search-input-suggest-button",(function(t){oT(t,"right-triangle"),t.addEventListener("click",(function(){yz.showOnce(n.app,e.inputEl,!0)}))}))})),n.searchInfoEl=i.createDiv({cls:"search-info-container"}),n.searchInfoEl.hide(),n.scope=new uD(n.app.scope),n.scope.register([],"Enter",n.onKeyEnterInFocus.bind(n)),n.scope.register(["Mod"],"Enter",n.onKeyEnterInFocus.bind(n)),n.scope.register([],"ArrowDown",n.onKeyArrowDownInFocus.bind(n)),n.scope.register([],"ArrowUp",n.onKeyArrowUpInFocus.bind(n)),n.scope.register([],"ArrowLeft",n.onKeyArrowLeftInFocus.bind(n)),n.scope.register([],"ArrowRight",n.onKeyArrowRightInFocus.bind(n)),n.scope.register(["Shift"],"ArrowUp",n.onKeyShowMoreBefore.bind(n)),n.scope.register(["Shift"],"ArrowDown",n.onKeyShowMoreAfter.bind(n)),n.searchContainerEl=i.createDiv("search-result-container mod-global-search"),n.dom=new vF(n.app,n.searchContainerEl,bz.labelNoMatches()),n.queue=new yF(n.app,n.dom),n.addChild(n.queue),$w.isMobile||yz.attach(n.app,n.searchComponent.inputEl,!0),n}return f(t,e),t.prototype.onOpen=function(){return v(this,void 0,Promise,(function(){return y(this,(function(t){return this.registerDomEvent(this.leaf.tabHeaderEl,"click",this.onTabHeaderClick.bind(this)),[2,e.prototype.onOpen.call(this)]}))}))},t.prototype.saveSearch=function(){var e=this.searchComponent.getValue();if(e){var t=this.app.loadLocalStorage("recent-searches");t&&Array.isArray(t)||(t=[]),t.remove(e),t.unshift(e),t.length>20&&(t=t.slice(0,20)),this.app.saveLocalStorage("recent-searches",t)}},t.prototype.getDisplayText=function(){return bz.name()},t.prototype.getViewType=function(){return kz},t.prototype.getState=function(){var t=e.prototype.getState.call(this);return t.query=this.getQuery(),t.matchingCase=this.matchingCase,t.explainSearch=this.explainSearch,t.collapseAll=this.dom.collapseAll,t.extraContext=this.dom.extraContext,t.sortOrder=this.dom.sortOrder,t},t.prototype.setState=function(t,n){return v(this,void 0,Promise,(function(){var i,r,o,a,s,l;return y(this,(function(c){switch(c.label){case 0:return[4,e.prototype.setState.call(this,t,n)];case 1:return c.sent(),i=t.query,r=t.matchingCase,o=t.explainSearch,a=t.collapseAll,s=t.extraContext,l=t.sortOrder,(String.isString(i)||null===i)&&(this.setQuery(i),this.searchComponent.inputEl.select()),isBoolean(r)&&this.setMatchingCase(r),isBoolean(o)&&this.setExplainSearch(o),isBoolean(a)&&this.setCollapseAll(a),isBoolean(s)&&this.setExtraContext(s),String.isString(l)&&iF.hasOwnProperty(l)&&this.setSortOrder(l),[2]}}))}))},t.prototype.setMatchingCase=function(e){e!==this.matchingCase&&(this.matchingCase=e,this.matchingCaseButtonEl.toggleClass("is-active",e),this.app.workspace.requestSaveLayout(),""!==this.searchComponent.getValue()&&this.startSearch())},t.prototype.setExplainSearch=function(e){e!==this.explainSearch&&(this.explainSearch=e,this.searchInfoEl.toggle(e),this.explainSearchButtonEl.toggleClass("is-active",e),this.app.workspace.requestSaveLayout())},t.prototype.setCollapseAll=function(e){e!==this.dom.collapseAll&&(this.dom.setCollapseAll(e),this.collapseAllButtonEl.toggleClass("is-active",e),this.app.workspace.requestSaveLayout())},t.prototype.setExtraContext=function(e){e!==this.dom.extraContext&&(this.dom.setExtraContext(e),this.extraContextButtonEl.toggleClass("is-active",e),this.app.workspace.requestSaveLayout())},t.prototype.onCopyResultsClick=function(e){e.preventDefault(),new xz(this.app,this.dom).open()},t.prototype.onKeyEnterInFocus=function(e){var t=this.dom.focusedItem;t&&(t instanceof gF||t instanceof mF)&&t.onResultClick(e)},t.prototype.onKeyArrowUpInFocus=function(e){e.preventDefault(),this.dom.changeFocusedItem("backwards")},t.prototype.onKeyArrowDownInFocus=function(e){e.preventDefault(),this.dom.changeFocusedItem("forwards")},t.prototype.onKeyArrowLeftInFocus=function(e){var t;if(!this.searchComponent.inputEl.isActiveElement()){e.preventDefault();var n=this.dom.focusedItem;if(n instanceof mF)n.setCollapse(!0,!0);else if(n.parent instanceof mF){n.parent.setCollapse(!0,!0);for(var i=n;null===(t=i.parent)||void 0===t?void 0:t.collapsed;)i=i.parent;this.dom.setFocusedItem(i)}else n===this.dom.infinityScroll.rootEl&&this.dom.setCollapseAll(!0)}},t.prototype.onKeyArrowRightInFocus=function(e){this.searchComponent.inputEl.isActiveElement()||(e.preventDefault(),this.dom.focusedItem===this.dom.infinityScroll.rootEl?this.dom.setCollapseAll(!1):this.dom.focusedItem instanceof mF&&this.dom.focusedItem.setCollapse(!1,!0))},t.prototype.onKeyShowMoreBefore=function(e){this.dom.focusedItem instanceof gF&&this.dom.focusedItem.showMoreBefore()},t.prototype.onKeyShowMoreAfter=function(e){this.dom.focusedItem instanceof gF&&this.dom.focusedItem.showMoreAfter()},t.prototype.setSortOrder=function(e){var t=this.dom;t.sortOrder=e,t.changed()},t.prototype.onResize=function(){this.dom.onResize()},t.prototype.startSearch=function(){var e=this;this.stopSearch();var t=this,n=t.app,i=t.dom,r=t.searchInfoEl;i.emptyResults(),this.dom.setFocusedItem(null);try{var o=this.searchComponent.getValue(),a=new rO(n,o,this.matchingCase);if(!a.matcher)return;this.searchQuery=a,this.renderSearchInfo(a.matcher,r);var s=this.queue.start();oO(n,a.requiredInputs,s,(function(t,n){return v(e,void 0,void 0,(function(){var e;return y(this,(function(r){switch(r.label){case 0:return(e=a.match(t,n))?i.addResult(t,e,n).renderContentMatches():i.removeResult(t),i.el.offsetParent?[3,2]:[4,new Promise((function(e){return i.el.onNodeInserted(e,!0)}))];case 1:r.sent(),r.label=2;case 2:return[2]}}))}))}))}catch(e){r.createDiv({cls:"search-info",text:e.message}),console.log(e)}this.app.workspace.requestSaveLayout(),this.requestSaveSearch()},t.prototype.stopSearch=function(){this.queue.stop(),this.searchInfoEl.empty()},t.prototype.renderSearchInfo=function(e,t){if(t.createDiv({text:e.getInfo()}),e instanceof RF)for(var n=t.createDiv("search-info-children"),i=0,r=e.matchers;i>16&255,t>>16&255)<<16)+(Sz(e>>8&255,t>>8&255)<<8)+(0|Sz(255&e,255&t))},Tz=function(e,t){return t.righte.right||t.bottome.bottom},Dz=function(e,t,n){return{left:e-n,right:e+n,top:t-n,bottom:t+n}},Az=function(e){e.style.margin="0",e.style.padding="0",e.style.border="0",e.style.width="100%",e.style.height="100%",e.style.overflow="hidden"},Lz={showAttachments:!1,hideUnresolved:!1,showOrphans:!0,showTags:!1,localFile:null,localJumps:1,localInterlinks:!1,localForelinks:!0,localBacklinks:!0};function Pz(e){return void 0===e&&(e=""),{type:e,links:{}}}function Iz(e){if(!e)return Pz();var t=Pz(e.type);return e.color&&(t.color=e.color),t}var Fz={tag:!0},Oz={fill:"color-fill",fillFocused:"color-fill-focused",fillTag:"color-fill-tag",fillUnresolved:"color-fill-unresolved",fillAttachment:"color-fill-attachment",arrow:"color-arrow",circle:"color-circle",line:"color-line",text:"color-text",fillHighlight:"color-fill-highlight",lineHighlight:"color-line-highlight"},Bz=100,Nz=function(){function e(e,t,n){this.x=null,this.y=null,this.fx=null,this.fy=null,this.forward={},this.reverse={},this.weight=0,this.color=null,this.rendered=!1,this.fadeAlpha=0,this.moveText=0,this.fontDirty=!1,this.renderer=e,this.id=t,this.type=n}return e.prototype.initGraphics=function(){if(this.rendered)return!1;this.rendered=!0;var e,t=this.renderer;(e=this.circle=new PIXI.Graphics).beginFill(16777215),e.drawCircle(Bz,Bz,Bz),e.endFill(),$w.isMobile&&(e.beginFill(16777215,1e-4),e.drawCircle(Bz,Bz,500),e.endFill()),e.pivot.x=Bz,e.pivot.y=Bz,e.interactive=!0,e.buttonMode=!0,e.zIndex=1,e.on("pointerdown",t.onPointerDown).on("pointerup",t.onPointerUp).on("pointerupoutside",t.onPointerUp).on("pointermove",t.onPointerMove).on("pointerover",t.onPointerOver).on("pointerout",t.onPointerOut).on("click",t.onClick).on("rightclick",t.onClick);var n=this.getFillColor();e.alpha=n.a,e.tint=n.rgb,t.hanger.addChild(e),t.nodePxLookup.set(e,this);var i=new PIXI.TextStyle(this.getTextStyle()),r=this.text=new PIXI.Text(this.getDisplayText(),i);return r.resolution=2,r.anchor.set(.5,0),r.zIndex=2,t.hanger.addChild(r),this.fadeAlpha=0,!0},e.prototype.clearGraphics=function(){if(this.rendered){this.rendered=!1;var e=this,t=e.renderer,n=e.circle,i=e.highlight,r=e.text;n&&(this.circle=null,t.nodePxLookup.delete(n),n.parent&&n.parent.removeChild(n),n.destroy()),i&&(this.highlight=null,i.parent&&i.parent.removeChild(i),i.destroy()),r&&(this.text=null,r.parent&&r.parent.removeChild(r),r.destroy())}},e.prototype.getTextStyle=function(){var e=this.renderer,t=this.getSize();return new PIXI.TextStyle({fontSize:14+t/4,fill:e.colors.text.rgb,fontFamily:'ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Inter", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Microsoft YaHei Light", sans-serif',wordWrap:!0,wordWrapWidth:300,align:"center"})},e.prototype.render=function(){if(this.rendered){var e=this,t=e.renderer,n=e.x,i=e.y,r=e.circle,o=e.highlight,a=e.text,s=e.fadeAlpha,l=e.moveText,c=this.getSize(),u=this.getFillColor(),h=t.colors.text,p=t.getHighlightNode(),d=p===this,f=t.nodeScale,m=a.visible,g=Ez;(!p||d||this.forward.hasOwnProperty(p.id)||this.reverse.hasOwnProperty(p.id))&&(g=1);var v=(s=this.fadeAlpha=Sz(s,g))*u.a,y=t.textAlpha;y*=s,d&&(y=1),y*=h.a;var b=d?15:0;l=this.moveText=m?Sz(l,b):b;var w=y>.001,k=t.viewport,C=d||!Tz(k,Dz(n,i,c*f+1));if(w&&(w=d||!Tz(k,{left:n-300,right:n+300,top:i,bottom:i+200})),r.tint=Mz(r.tint,u.rgb),r.visible=C,C&&(r.x=n,r.y=i,r.scale.x=r.scale.y=c/100*f,r.alpha=v),a.visible=w,w&&(a.x=n,a.y=i+(c+5)*f+l/t.scale,a.scale.x=a.scale.y=f,d&&t.scale<1&&(a.scale.x=a.scale.y=1/t.scale),a.alpha=y),d){o||((o=this.highlight=new PIXI.Graphics).zIndex=1,t.hanger.addChild(o)),o.x=n,o.y=i,o.scale.x=o.scale.y=f,o.clear();var x=Math.max(1,1/t.scale/f),E=t.colors.circle;o.alpha=E.a,o.lineStyle(x,E.rgb,1),o.drawCircle(0,0,c+x/2)}else o&&(o.parent.removeChild(o),o.destroy(),this.highlight=null);this.fontDirty&&(this.fontDirty=!1,a.style=this.getTextStyle())}},e.prototype.getFillColor=function(){var e=this,t=e.renderer,n=e.type,i=e.color;if(t.getHighlightNode()===this)return t.colors.fillHighlight;if("focused"===n){var r=t.colors.fillFocused;if(r.a>0)return r}else{if(i)return i;if("tag"===n)return t.colors.fillTag;if("unresolved"===n)return t.colors.fillUnresolved;if("attachment"===n)return t.colors.fillAttachment}return t.colors.fill},e.prototype.getSize=function(){return this.renderer.fNodeSizeMult*Math.max(8,Math.min(3*Math.sqrt(this.weight+1),30))},e.prototype.getDisplayText=function(){var e=this.id;return Je(e,"md")&&(e=Xe(e)),e},e.prototype.getRelated=function(){return Object.keys(this.forward).concat(Object.keys(this.reverse))},e}(),Rz=function(){function e(e,t,n){this.rendered=!1,this.renderer=e,this.source=t,this.target=n}return e.prototype.initGraphics=function(){if(!this.rendered&&this.source.rendered&&this.target.rendered){this.rendered=!0;var e=this.renderer,t=this.px=new PIXI.Container;e.hanger.addChild(t);var n=this.line=new PIXI.Sprite(PIXI.Texture.WHITE),i=e.colors.line;n.alpha=Ez*i.a,n.tint=i.rgb,t.addChild(n);var r=this.arrow=new PIXI.Graphics,o=e.colors.text;r.alpha=Ez*o.a,r.tint=o.rgb,r.beginFill(16777215),r.moveTo(0,0),r.lineTo(-4,-2),r.lineTo(-3,0),r.lineTo(-4,2),r.lineTo(0,0),r.endFill(),r.zIndex=1,e.hanger.addChild(r)}},e.prototype.clearGraphics=function(){if(this.rendered){this.rendered=!1;var e=this,t=e.px,n=e.line,i=e.arrow;t&&(this.px=null,t.parent&&t.parent.removeChild(t),t.destroy(),t.visible=!1),n&&(this.line=null,n.destroy(),n.visible=!1),i&&(this.arrow=null,i.parent&&i.parent.removeChild(i),i.destroy(),i.visible=!1)}},e.prototype.render=function(){if(this.rendered){var e=this,t=e.px,n=e.line,i=e.arrow,r=e.renderer,o=e.source,a=e.target,s=r.getHighlightNode(),l=o===s||a===s,c=Ez;s&&!l||(c=1);var u=c*Math.clamp(2*(r.scale-.3),0,1),h=r.colors.line;l&&(h=r.colors.lineHighlight);var p,d,f=r.colors.arrow,m=!(o.reverse.hasOwnProperty(a.id)&&o.id.localeCompare(a.id)<0),g=r.fShowArrow,v=r.fLineSizeMult/r.scale,y=r.viewport,b=Dz(o.x,o.y,v),w=Dz(a.x,a.y,v),k=!Tz(y,(p=b,d=w,{left:Math.min(p.left,d.left),right:Math.max(p.right,d.right),top:Math.min(p.top,d.top),bottom:Math.max(p.bottom,d.bottom)}));if(c*=h.a,u*=f.a,n.alpha=Sz(n.alpha,c),i.alpha=Sz(i.alpha,u),m=m&&k,g=g&&k&&i.alpha>.001,n.visible=m,i.visible=g,m||g){var C=a.x-o.x,x=a.y-o.y,E=Math.sqrt(C*C+x*x),S=o.getSize()*r.nodeScale,M=a.getSize()*r.nodeScale;i.visible=g=g&&E>v,m&&(t.x=o.x+C*S/E,t.y=o.y+x*S/E,t.pivot.set(0,0),t.rotation=Math.atan2(x,C),n.x=0,n.y=-v/2,n.width=Math.max(0,E-S-M),n.height=v,n.tint=Mz(n.tint,h.rgb)),i.visible=g,g&&(M+=1,i.x=a.x-C*M/E,i.y=a.y-x*M/E,i.pivot.set(0,0),i.rotation=Math.atan2(x,C),i.scale.x=i.scale.y=2*Math.sqrt(r.fLineSizeMult)/r.scale,i.tint=f.rgb)}}},e}(),Hz=function(){function e(e){this.rendered=!1,this.renderer=e}return e.prototype.initGraphics=function(){var e=this.renderer;if(!this.text){var t=this.text=new PIXI.Text("Powered by Obsidian",this.getTextStyle());t.anchor.set(1,1),t.zIndex=3,t.alpha=.5,e.px.stage.addChild(t)}},e.prototype.clearGraphics=function(){var e=this.text;e&&e.parent&&(this.text=null,e.parent.removeChild(e),e.destroy()),this.rendered=!1},e.prototype.render=function(){var e=this.renderer,t=this.text;if(t){t.visible=!e.hidePowerTag,t.alpha=e.colors.text.a;var n=e.px.renderer;t.x=n.width/n.resolution,t.y=n.height/n.resolution,this.rendered||(this.rendered=!0,this.text.style=this.getTextStyle())}},e.prototype.getTextStyle=function(){return new PIXI.TextStyle({fontSize:12,fill:this.renderer.colors.text.rgb,fontFamily:"Inter",wordWrap:!1,align:"right"})},e}(),Vz=function(){function e(e,t,n,i){var r=this;this.interactiveEl=null,this.onNodeClick=null,this.onNodeRightClick=null,this.onNodeHover=null,this.onNodeUnhover=null,this.workerResults=null,this.nodeLookup={},this.nodes=[],this.links=[],this.dragNode=null,this.highlightNode=null,this.px=null,this.hanger=null,this.nodePxLookup=new Map,this.powerTag=null,this.scale=1,this.nodeScale=1,this.textAlpha=1,this.targetScale=1,this.panX=0,this.panY=0,this.panvX=0,this.panvY=0,this.keyboardActions={},this.panning=!1,this.width=0,this.height=0,this.viewport=null,this.zoomCenterX=0,this.zoomCenterY=0,this.hidePowerTag=!1,this.fNodeSizeMult=1,this.fLineSizeMult=1,this.fTextShowMult=1,this.fShowArrow=!1,this.mouseX=null,this.mouseY=null,this.colors={},this.renderTimer=null,this.hidePowerTag=n,PIXI.utils.skipHello(),this.containerEl=e,this.testCSS();var o=this.interactiveEl=e.createEl("canvas");if(e.style.padding="0",e.style.overflow="hidden",e.style.position="relative",o.style.position="absolute",o.style.left="0",o.style.top="0",Az(o),o.addEventListener("mousedown",(function(e){return e.preventDefault()})),o.addEventListener("wheel",this.onWheel.bind(this)),o.addEventListener("mousemove",this.onMouseMove.bind(this)),o.addEventListener("mouseout",this.onMouseMove.bind(this)),i||(i=new Worker("/sim.js",{name:"Graph Worker"})),this.worker=i,i.onmessage=function(e){e.data.ignore||(r.workerResults=e.data,r.changed())},t){var a=this.iframeEl=e.createEl("iframe");Az(a),a.onload=this.onIframeLoad.bind(this),a.contentDocument&&this.onIframeLoad()}else{var s=e.createEl("canvas");Az(s),setTimeout((function(){try{r.initGraphics(s)}catch(e){setTimeout((function(){r.initGraphics(s)}),300)}}),50)}}return e.prototype.destroy=function(){this.worker.terminate(),this.workerResults=null,this.destroyGraphics()},e.prototype.onIframeLoad=function(){var e=this.iframeEl;e.contentWindow.onbeforeunload=this.onIframeUnload.bind(this);var t=e.contentDocument.body;Az(t),t.innerHTML="";var n=t.firstChild;Az(n),this.destroyGraphics(),this.initGraphics(n)},e.prototype.onIframeUnload=function(){this.destroyGraphics()},e.prototype.onWheel=function(e){if(e.preventDefault(),this.px){var t=e.deltaY;1===e.deltaMode?t*=40:2===e.deltaMode&&(t*=800);var n=this.targetScale;if(n*=Math.pow(1.5,-t/120),this.targetScale=n,n25&&(l=null)}var s=e.data.getLocalPosition(c.hanger);n.fx=s.x,n.fy=s.y,a.postMessage({alpha:.3,alphaTarget:.3,run:!0,forceNode:{id:n.id,x:s.x,y:s.y}}),c.dragNode=n,c.changed()}}},this.onPointerOver=function(e){var t=c.highlightNode=c.getNodeFromGraphics(this);c.changed();var n=e.data.originalEvent;n.instanceOf(MouseEvent)&&(c.mouseX=n.offsetX,c.mouseY=n.offsetY),c.onNodeHover&&c.onNodeHover(n,t.id,t.type)},this.onPointerOut=function(){c.highlightNode=null,c.changed(),c.onNodeUnhover&&c.onNodeUnhover()};var u=this.hanger=new PIXI.Container,h=this.powerTag=new Hz(this);this.onResize(),this.resetPan();var p=new PIXI.Graphics;p.beginFill(0),p.drawRect(0,0,1e4,1e4),p.endFill(),p.alpha=0,p.interactive=!0;var d=null,f=null,m=performance.now(),g=0,v=null,y=null,b=0,w=0,k=function(e){for(var t=performance.now(),i=t-m,r=Array.prototype.slice.call(e.touches),o=null,a=null,s=0,u=r;s0&&(o=r.first(),r.splice(0,1)),a?r.remove(a):r.length>0&&(a=r.first(),r.splice(0,1)),!l&&!c.dragNode&&v&&o&&v.identifier===o.identifier){var p=window.devicePixelRatio;if(y&&a&&y.identifier===a.identifier){var d=n.interactiveEl.getBoundingClientRect(),f=((v.clientX+y.clientX)/2-d.x)*p,k=((v.clientY+y.clientY)/2-d.y)*p,C=((o.clientX+a.clientX)/2-d.x)*p,x=((o.clientY+a.clientY)/2-d.y)*p,E=v.clientX-y.clientX,S=v.clientY-y.clientY,M=o.clientX-a.clientX,T=o.clientY-a.clientY,D=E*E+S*S,A=M*M+T*T;if(0!==D&&0!==A){var L=Math.sqrt(A/D),P=n.targetScale*L,I=n.panX+(C-f),F=n.panY+(x-k);n.zoomCenterX=C,n.zoomCenterY=x,n.setPan(I,F),n.targetScale=P,n.changed()}b=0,w=0}else{var O=(o.clientX-v.clientX)*p,B=(o.clientY-v.clientY)*p;g=Sz(g,i,.8),m=t,b=Sz(b,O,.8),w=Sz(w,B,.8),n.setPan(n.panX+O,n.panY+B),n.changed()}}else g=Sz(g,i,.8),i<100&&(n.panvX=b/g,n.panvY=w/g),b=b=0;v=o,y=a},C=function(e){if(e.data.originalEvent.instanceOf(TouchEvent))k(e.data.originalEvent);else{d=null,document.body.removeClass("is-grabbing"),n.panning=!1;var t=performance.now()-m;g=Sz(g,t,.8),t>100?n.panvX=n.panvY=0:(n.panvX/=g,n.panvY/=g)}};p.on("pointerdown",(function(e){e.data.originalEvent.instanceOf(TouchEvent)?k(e.data.originalEvent):(d=e.data.getLocalPosition(t.stage),f={x:u.x,y:u.y},document.body.addClass("is-grabbing"),n.panning=!0)})).on("pointerup",C).on("pointerupoutside",C).on("pointermove",(function(e){if(e.data.originalEvent.instanceOf(TouchEvent))k(e.data.originalEvent);else if(d){var i=e.data.getLocalPosition(t.stage),r=f.x+i.x-d.x,o=f.y+i.y-d.y,a=performance.now();g=Sz(g,a-m,.8),m=a,n.panvX=Sz(n.panvX,r-n.panX,.8),n.panvY=Sz(n.panvY,o-n.panY,.8),n.setPan(r,o),n.changed()}})),t.stage.addChild(p),t.stage.addChild(u),h.initGraphics(),this.updateZoom(),this.renderCallback=function(){if(n.renderTimer=null,n.px&&!(n.idleFrames>60)){var e=n,i=e.nodes,r=e.links,o=n.workerResults;if(o){var a=o.id,s=o.buffer,l=!0;if(s instanceof ArrayBuffer)n.workerResults=null;else{var p=new Uint32Array(s,s.byteLength-4,1);p[0]===o.v?l=!1:o.v=p[0]}if(l)for(var d=new Float32Array(s),f=0;f50&&O.pop())}}if(O.length>0){for(var V=0,z=O;Vne*ne&&(n.highlightNode=null,n.idleFrames=0,c.onNodeUnhover&&c.onNodeUnhover())}}},this.queueRender()},e.prototype.destroyGraphics=function(){var e=this,t=e.iframeEl,n=e.px,i=e.links,r=e.nodes,o=e.powerTag;this.hanger=null;for(var a=0,s=i;a0)for(var I=60*P*60,F=Math.sqrt(I/Math.PI+m*m)-m,O=Math.sqrt(I),B=0,N=g;B0)f.x=R/V+(Math.random()-.5)*O,f.y=H/V+(Math.random()-.5)*O;else{var j=2*Math.random()*Math.PI,W=m+Math.sqrt(Math.random())*F;f.x=W*Math.cos(j),f.y=W*Math.sin(j)}a[f.id]=[f.x,f.y]}var G=e.weights;for(var v in i)if(i.hasOwnProperty(v)){var K=(f=i[v]).weight;K=G?G.hasOwnProperty(v)?G[v]:0:f.getRelated().length,f.weight!==K&&(f.weight=K,c=!0)}if(c){for(var Y=[],X=0,$=r;X<$.length;X++){x=$[X];Y.push([x.source.id,x.target.id])}this.worker.postMessage({nodes:a,links:Y,alpha:.3,run:!0}),this.changed()}else u&&this.changed()},e.prototype.setRenderOptions=function(e){var t=e.nodeSizeMultiplier,n=e.lineSizeMultiplier,i=e.showArrow,r=e.textFadeMultiplier;Number.isNumber(t)&&(this.fNodeSizeMult=t),Number.isNumber(n)&&(this.fLineSizeMult=n),Number.isNumber(r)&&(this.fTextShowMult=r),isBoolean(i)&&(this.fShowArrow=i),this.changed()},e.prototype.setForces=function(e){this.worker.postMessage({forces:e,alpha:.3,run:!0})},e.prototype.getNodeFromGraphics=function(e){return this.nodePxLookup.get(e)},e.prototype.getHighlightNode=function(){return this.dragNode||this.highlightNode},e.prototype.updateZoom=function(){var e=this,t=e.scale,n=e.targetScale,i=e.panX,r=e.panY;if((t>(n=this.targetScale=Math.min(8,Math.max(1/128,n)))?t/n:n/t)-1>=.01){var o=this.zoomCenterX,a=this.zoomCenterY;if(0===o&&0===a){var s=window.devicePixelRatio;o=this.width/2*s,a=this.height/2*s}var l={x:(o-i)/t,y:(a-r)/t};t=Sz(t,n,.85),i-=l.x*t+i-o,r-=l.y*t+r-a,this.changed()}this.setPan(i,r),this.setScale(t)},e.prototype.setPan=function(e,t){var n=this.hanger;this.panX=e,this.panY=t,n&&(n.x=e,n.y=t)},e.prototype.setScale=function(e){var t=this.hanger;this.scale=e,this.nodeScale=Math.sqrt(1/e);var n=Math.log(e)/Math.log(2);this.textAlpha=Math.clamp(n+1-this.fTextShowMult,0,1),t&&(t.scale.x=t.scale.y=e)},e.prototype.changed=function(){this.idleFrames=0,this.queueRender()},e.prototype.queueRender=function(){!this.renderTimer&&this.renderCallback&&(this.renderTimer=this.containerEl.win.requestAnimationFrame(this.renderCallback))},e.prototype.testCSS=function(){var e=function(e){var t=document.body.createDiv({cls:"graph-view "+e}),n=getComputedStyle(t),i=n.color,r=n.opacity;t.detach();var o=XA(i),a=parseFloat(r);return isNaN(a)&&(a=1),o?{a:a*o.a,rgb:o.r<<16|o.g<<8|o.b}:{a,rgb:8947848}};for(var t in Oz)Oz.hasOwnProperty(t)&&(this.colors[t]=e(Oz[t]));for(var n=0,i=this.nodes;n0)for(var F=0,O=h;F0?(n=this.progression,[4,new Promise((function(e){return Rw(e,0)}))]):[3,3];case 2:return i.sent(),n!==this.progression?[3,3]:(n=1+Math.floor(this.progressionSpeed*(Date.now()-t)/1e3))===this.progression||(this.progression=n,this.render())?[3,1]:[3,3];case 3:return[2]}}))}))},e.prototype.onFileChanged=function(e){"md"!==e.extension&&this.recomputeFile(e)},e.prototype.recomputeFile=function(e){var t=this.queue;t&&t.add(e)},e.prototype.onFileOpen=function(e){var t=e?e.path:"";t!==this.currentFocusFile&&(this.currentFocusFile=t,this.render())},e.prototype.onNodeClick=function(e,t,n){var i=this.app;this.view;if("tag"!==n)i.workspace.openLinkText(t,"",pD.isModEvent(e));else{var r=i.internalPlugins.getPluginById("global-search");r&&r.instance.openGlobalSearch("tag:"+t)}},e.prototype.onNodeRightClick=function(e,t,n){var i=this,r=this.app;if("tag"!==n){var o=r.metadataCache.getFirstLinkpathDest(t,"");if(o&&e.instanceOf(MouseEvent)){var a=(new KL).addSections(["title","open","action","view","info","","danger"]);a.addItem((function(e){return e.setSection("title").setTitle(it(o.path)).setIsLabel(!0)})),a.addItem((function(e){return e.setSection("open").setTitle(Gk.interface.menu.openInNewTab()).setIcon("lucide-file-plus").onClick((function(e){return v(i,void 0,void 0,(function(){return y(this,(function(n){switch(n.label){case 0:return[4,this.app.workspace.getLeaf(pD.isModEvent(e)||!0).openLinkText(t,"")];case 1:return n.sent(),[2]}}))}))}))})),this.app.workspace.trigger("file-menu",a,o,"graph-context-menu",this.view.leaf),a.showAtMouseEvent(e)}}else{var s=r.internalPlugins.getPluginById("global-search");s&&s.instance.openGlobalSearch("tag:"+t)}},e.prototype.onNodeHover=function(e,t,n){if(this.onNodeUnhover(),e.instanceOf(MouseEvent)){var i=this,r=i.app,o=i.hoverPopover,a=i.lastHoverLink;if(""===n||"focused"===n||"attachment"===n){if(o&&o.state!==UN.Hidden&&a===t)return o.onTarget=!0,void o.transition();this.lastHoverLink=t,r.workspace.trigger("hover-link",{event:e,source:"graph",hoverParent:this,targetEl:null,linktext:t})}}},e.prototype.onNodeUnhover=function(){var e=this.hoverPopover;e&&(e.onTarget=!1,e.transition())},e.prototype.getOptions=function(){var e={};return this.filterOptions.getOptions(e),this.colorGroupOptions.getOptions(e),this.displayOptions.getOptions(e),this.forceOptions.getOptions(e),e.scale=this.renderer.targetScale,e.close=this.controlsEl.hasClass("is-close"),e},e.prototype.setOptions=function(e){e&&(this.filterOptions.setOptions(e),this.colorGroupOptions.setOptions(e),this.displayOptions.setOptions(e),this.forceOptions.setOptions(e),e.scale&&this.renderer.zoomTo(e.scale),e.close&&this.controlsEl.toggleClass("is-close",e.close),this.render())},e}(),$z=function(e){function t(t,n,i){var r=e.call(this)||this;return r.engine=null,r.optionListeners={},r.engine=t,r.el.addClass("graph-control-section","mod-".concat(n)),r.setCollapsible(!0),r.setCollapsed(!0,!1),r.innerEl.createEl("header",{cls:"graph-control-section-header",text:i}),r.optionListeners["collapse-"+n]=function(e){return void 0!==e&&isBoolean(e)&&r.setCollapsed(e,!1),r.collapsed},r}return f(t,e),t.prototype.onSelfClick=function(e){return this.toggleCollapsed(!0)},t.prototype.updateCollapsed=function(t){return v(this,void 0,Promise,(function(){return y(this,(function(n){switch(n.label){case 0:return[4,e.prototype.updateCollapsed.call(this,t)];case 1:return n.sent(),this.engine.onOptionsChange(),[2]}}))}))},t.prototype.setOptions=function(e){var t=this.optionListeners;for(var n in e)e.hasOwnProperty(n)&&t.hasOwnProperty(n)&&t[n](e[n])},t.prototype.getOptions=function(e){var t=this.optionListeners;for(var n in t)if(t.hasOwnProperty(n)){var i=t[n]();void 0!==i&&(e[n]=i)}},t}(zz),Zz=function(e){function t(t,n){var i=e.call(this,t,"filter",qz.labelFilters())||this;i.searchSetting=null,t.controlsEl.appendChild(i.el);var r=i.childrenEl;return(i.searchSetting=new aL(r).addSearch((function(e){return e.setPlaceholder(qz.promptFilterNodes()).setValue("").onChange((function(){i.engine.requestUpdateSearch()})).then((function(e){i.search=e,tD(e.clearButtonEl,Gk.plugins.search.tooltipClearSearch()),i.optionListeners.search=function(t){return void 0!==t&&(e.setValue(t),i.engine.requestUpdateSearch()),e.getValue()},e.inputEl.addEventListener("keydown",(function(e){e.isComposing||"Enter"!==e.key||i.engine.updateSearch()})),yz.attach(t.app,e.inputEl,!1)}))}))).settingEl.addClass("mod-search-setting"),n&&(new aL(r).setName(qz.optionDepth()).setTooltip(qz.optionDepthDescription()).setClass("mod-local-jumps").setClass("mod-slider").addSlider((function(e){return e.setLimits(1,5,1).setValue(t.options.localJumps).setDynamicTooltip().registerOptionListener(i.optionListeners,"localJumps").onChange((function(e){t.options.localJumps=e,t.render(),t.onOptionsChange()}))})),new aL(r).setName(qz.optionBacklinks()).setTooltip(qz.optionBacklinksDescription()).setClass("mod-toggle").addToggle((function(e){return e.setSmall().setValue(t.options.localBacklinks).registerOptionListener(i.optionListeners,"localBacklinks").onChange((function(e){t.options.localBacklinks=e,t.render(),t.onOptionsChange()}))})),new aL(r).setName(qz.optionForelinks()).setTooltip(qz.optionForelinksDescription()).setClass("mod-toggle").addToggle((function(e){return e.setSmall().setValue(t.options.localForelinks).registerOptionListener(i.optionListeners,"localForelinks").onChange((function(e){t.options.localForelinks=e,t.render(),t.onOptionsChange()}))})),new aL(r).setName(qz.optionNeighborLinks()).setTooltip(qz.optionNeighborLinksDescription()).setClass("mod-toggle").addToggle((function(e){return e.setSmall().setValue(t.options.localInterlinks).registerOptionListener(i.optionListeners,"localInterlinks").onChange((function(e){t.options.localInterlinks=e,t.render(),t.onOptionsChange()}))}))),new aL(r).setName(qz.optionShowTags()).setTooltip(qz.optionShowTagsDescription()).setClass("mod-toggle").addToggle((function(e){return e.setSmall().setValue(t.options.showTags).registerOptionListener(i.optionListeners,"showTags").onChange((function(e){t.options.showTags=e,t.render(),t.onOptionsChange()}))})),new aL(r).setName(qz.optionShowAttachments()).setTooltip(qz.optionShowAttachmentsDescription()).setClass("mod-toggle").addToggle((function(e){return e.setSmall().setValue(t.options.showAttachments).registerOptionListener(i.optionListeners,"showAttachments").onChange((function(e){t.options.showAttachments=e,t.render(),t.onOptionsChange()}))})),new aL(r).setName(qz.optionShowExistingFilesOnly()).setTooltip(qz.optionShowExistingFilesOnlyDescription()).setClass("mod-toggle").addToggle((function(e){return e.setSmall().setValue(t.options.hideUnresolved).registerOptionListener(i.optionListeners,"hideUnresolved").onChange((function(e){t.options.hideUnresolved=e,t.render(),t.onOptionsChange()}))})),n||new aL(r).setName(qz.optionShowOrphans()).setTooltip(qz.optionShowOrphansDescription()).setClass("mod-toggle").addToggle((function(e){return e.setSmall().setValue(t.options.showOrphans).registerOptionListener(i.optionListeners,"showOrphans").onChange((function(e){t.options.showOrphans=e,t.render(),t.onOptionsChange()}))})),i}return f(t,e),t.prototype.startSearch=function(){this.searchSetting.settingEl.addClass("is-loading")},t.prototype.stopSearch=function(){this.searchSetting.settingEl.removeClass("is-loading")},t.prototype.setDefaultOptions=function(){this.setOptions(Lz)},t}($z),Qz=function(e){function t(t){var n=e.call(this,t,"color-groups",qz.labelGroups())||this;return t.controlsEl.appendChild(n.el),n.optionListeners.colorGroups=function(e){return Array.isArray(e)&&(n.setColorQueries(e),n.engine.requestUpdateSearch()),n.getColoredQueries()},n.setColorQueries([]),n}return f(t,e),t.prototype.getColoredQueries=function(){for(var e=[],t=0,n=this.groups;t?@^`{|}~\[\]\\\s]+)/g,lq=/\B\#(\[\[[\w \t]*?\]\])/g,cq=/\{\{\[\[(TODO|DONE)\]\]\}\}/g,uq=function(e){function t(t){var n=e.call(this,t)||this;n.converters=[];var i=n.contentEl,r=n.converters;n.titleEl.setText(Gk.plugins.markdownFormatImporter.name());for(var o=n.conversionsEl=i.createDiv(),a=[{name:Gk.plugins.markdownFormatImporter.optionRoamTagFixer(),description:Gk.plugins.markdownFormatImporter.optionRoamTagFixerDescription(),convert:function(e,t,n,i){return(n=n.replace(sq,(function(e,t,n){for(var r=!0,o=0;o57){r=!1;break}}return r?e:(i.replaced++,t+"[["+n+"]]")}))).replace(lq,(function(e,t){return i.replaced++,t}))}},{name:Gk.plugins.markdownFormatImporter.optionRoamHighlightFixer(),description:Gk.plugins.markdownFormatImporter.optionRoamHighlightFixerDescription(),convert:function(e,t,n,i){return n.replace(rq,(function(e,t){return i.replaced++,"=="+t+"=="}))}},{name:Gk.plugins.markdownFormatImporter.optionRoamTodoConverter(),description:Gk.plugins.markdownFormatImporter.optionRoamTodoConverterDescription(Rk),convert:function(e,t,n,i){return n.replace(cq,(function(e,t){return i.replaced++,"TODO"===t?"[ ]":"[x]"}))}},{name:Gk.plugins.markdownFormatImporter.optionBearHighlightFixer(),description:Gk.plugins.markdownFormatImporter.optionBearHighlightFixerDescription(),convert:function(e,t,n,i){return n.replace(oq,(function(e,t){return i.replaced++,"=="+t+"=="}))}},{name:Gk.plugins.markdownFormatImporter.zettelkastenLinkFixer(),description:Gk.plugins.markdownFormatImporter.zettelkastenLinkFixerDescription(),convert:function(e,t,n,i){return n.replace(aq,(function(n,r){for(var o=0,a=e.vault.getAllLoadedFiles();on;)o--;else o=t.lineCount()-1;return{heading:s.heading.trim(),start:IL(n,0),end:IL(o,t.getLine(o).length)}},e.prototype.getTemplateText=function(){return v(this,void 0,Promise,(function(){var e,t,n;return y(this,(function(i){switch(i.label){case 0:return e=this.app,t="",this.options.template?(n=e.metadataCache.getFirstLinkpathDest(this.options.template,""))?[4,e.vault.cachedRead(n)]:(new gD(hq.msgFailToFetchTemplate({template:this.options.template})),[2]):[3,2];case 1:return""===(t=i.sent())||t.contains("{{content}}")||(t+="\n\n{{content}}"),[2,t];case 2:return[2]}}))}))},e}(),dq=function(e){function t(t,n){var i=e.call(this,t)||this;return i.currentFile=null,i.emptyStateText=hq.labelNoFiles(),i.noteComposer=n,i.shouldShowNonImageAttachments=!1,i.shouldShowImages=!1,i.shouldShowCanvas=!1,i.setPlaceholder(hq.promptSelectFileToMerge()),i.setInstructions([{command:"↑↓",purpose:hq.instructionNavigate()},{command:"↵",purpose:hq.instructionMerge()},{command:oe?"cmd ↵":"ctrl ↵",purpose:hq.instructionCreateNew()},{command:"shift ↵",purpose:hq.instructionMergeAtTop()},{command:"esc",purpose:hq.instructionDismiss()}]),i.scope.register(["Shift"],"Enter",(function(e){return i.chooser.useSelectedItem(e),!1})),i.scope.register(["Mod"],"Enter",(function(e){return i.chooser.useSelectedItem(e),!1})),i}return f(t,e),t.prototype.setCurrentFile=function(e){this.currentFile=e},t.prototype.onChooseSuggestion=function(e,t){return v(this,void 0,void 0,(function(){var n,i,r,o,a,s,l,c,u,h,p,d=this;return y(this,(function(f){switch(f.label){case 0:if(n=this.app,i=this.inputEl.value,!pD.isModifier(t,"Mod")&&e&&"unresolved"!==e.type)return[3,5];o=i,e&&"unresolved"===e.type&&(o=e.linktext),a=n.fileManager.getNewFileParent(this.currentFile.path,o),f.label=1;case 1:return f.trys.push([1,3,,4]),[4,n.fileManager.createNewMarkdownFile(a,o)];case 2:return r=f.sent(),[3,4];case 3:return s=f.sent(),new gD(s.toString()),[2];case 4:return[3,6];case 5:r=e.file,f.label=6;case 6:return r===this.currentFile||(l=this.currentFile,c=t.shiftKey,u=this.noteComposer,h=function(){return v(d,void 0,void 0,(function(){var e;return y(this,(function(t){switch(t.label){case 0:return[4,u.getTemplateText()];case 1:return e=t.sent(),[4,n.fileManager.mergeFile(r,l,e,c)];case 2:return t.sent(),[2]}}))}))},u.options.askBeforeMerging?((p=document.createDocumentFragment()).createEl("p",{text:hq.labelConfirmFileMerge({file:l.basename,destination:r.basename})}),new fD(n).setTitle(hq.labelMergeFile()).setContent(p).addButton("mod-warning",hq.buttonMergeDoNotAskAgain(),(function(){u.options.askBeforeMerging=!1,u.pluginInstance.saveData(u.options),h()})).addButton("mod-warning",hq.buttonMerge(),(function(){h()})).addCancelButton().open()):h()),[2]}}))}))},t}(OV),fq=function(e){function t(t,n,i,r){var o=e.call(this,t)||this;if(o.defaultValue="",o.editor=n,o.composer=i,o.shouldShowUnresolved=!0,o.shouldShowNonImageAttachments=!1,o.shouldShowImages=!1,o.shouldShowCanvas=!1,!r){var a=n.getSelection().split("\n");if(a.length>0)r=kM(a[0])}return r||(r=""),o.defaultValue=r,o.setPlaceholder(hq.promptSelectFileToMerge()),o.setInstructions([{command:"↑↓",purpose:hq.instructionNavigate()},{command:"↵",purpose:hq.instructionAppend()},{command:oe?"cmd ↵":"ctrl ↵",purpose:hq.instructionCreateNew()},{command:"shift ↵",purpose:hq.instructionPrepend()},{command:"esc",purpose:hq.instructionDismiss()}]),o.scope.register(["Shift"],"Enter",(function(e){return o.chooser.useSelectedItem(e),!1})),o.scope.register(["Mod"],"Enter",(function(e){return o.chooser.useSelectedItem(e),!1})),o}return f(t,e),t.prototype.onOpen=function(){e.prototype.onOpen.call(this),this.inputEl.value=this.defaultValue,this.updateSuggestions()},t.prototype.setCurrentFile=function(e){this.currentFile=e},t.prototype.onChooseSuggestion=function(e,t){return v(this,void 0,void 0,(function(){var n,i,r,o,a,s,l,c,u,h;return y(this,(function(p){switch(p.label){case 0:n=this.app,i=this.editor.getSelection(),r=t.shiftKey,o=pD.isModifier(t,"Mod"),s=this.currentFile,p.label=1;case 1:return p.trys.push([1,7,,8]),!o&&e?[3,3]:[4,n.fileManager.createNewMarkdownFileFromLinktext(this.inputEl.value,s.path)];case 2:return a=p.sent(),[3,6];case 3:return"unresolved"!==e.type?[3,5]:[4,n.fileManager.createNewMarkdownFileFromLinktext(e.linktext,s.path)];case 4:return a=p.sent(),[3,6];case 5:"file"!==e.type&&"alias"!==e.type||(a=e.file),p.label=6;case 6:return[3,8];case 7:return l=p.sent(),new gD(l.toString()),[2];case 8:return[4,this.composer.getTemplateText()];case 9:return c=p.sent(),[4,n.fileManager.insertTextIntoFile(a,i,s.basename,c,r)];case 10:return p.sent(),u=n.fileManager.generateMarkdownLink(a,s.path),"embed"===(h=this.composer.options.replacementText)?this.editor.replaceSelection("!"+u):"none"===h?this.editor.replaceSelection(""):this.editor.replaceSelection(u),[2]}}))}))},t}(OV),mq=function(e){function t(t,n,i){var r=e.call(this,t,n)||this;return r.instance=i,r}return f(t,e),t.prototype.display=function(){var e=this,t=this.containerEl;t.empty();var n=this.instance.options;new aL(t).setName(hq.optionSplitReplacementText()).setDesc(hq.optionSplitReplacementTextDescription()).addDropdown((function(t){return t.addOption("link",hq.optionChoiceSplitReplacementTextLink()).addOption("embed",hq.optionChoiceSplitReplacementTextEmbed()).addOption("none",hq.optionChoiceSplitReplacementTextNone()).setValue(n.replacementText||"link").onChange((function(t){n.replacementText=t,e.plugin.saveData(n)}))})),new aL(t).setName(hq.optionTemplateFile()).setDesc(hq.optionTemplateFileDescription(Rk)).addText((function(t){t.setPlaceholder(Gk.setting.filePathExamplePlaceholder()).setValue(n.template).onChange((function(t){n.template=t.trim(),e.plugin.saveData(n)})),new GV(e.app,t.inputEl)})),new aL(t).setName(hq.optionConfirmFileMerge()).setDesc(hq.optionConfirmFileMergeDescription()).addToggle((function(t){return t.setValue(n.askBeforeMerging).onChange((function(t){n.askBeforeMerging=t,e.plugin.saveData(n)}))}))},t}(AD),gq="outgoing-link",vq=Gk.plugins.outgoingLinks,yq=function(){function e(){this.id="outgoing-link",this.name=vq.name(),this.description=vq.desc(),this.defaultOn=!0}return e.prototype.init=function(e,t){var n=this;this.app=e,this.plugin=t,t.registerViewType(gq,(function(e){return new bq(e)})),t.registerGlobalCommand({id:"outgoing-links:open",name:vq.actionShow(),icon:"lucide-link",callback:function(){n.app.workspace.ensureSideLeaf(gq,"right",{active:!0})}}),t.registerGlobalCommand({id:"outgoing-links:open-for-current",name:vq.actionOpenForCurrent(),icon:"lucide-link",checkCallback:this.openForCurrentFile.bind(this)})},e.prototype.onEnable=function(e,t){t.registerEvent(e.workspace.on("layout-ready",this.initLeaf,this)),t.registerEvent(e.workspace.on("file-menu",this.onFileMenu,this))},e.prototype.onUserEnable=function(){this.initLeaf()},e.prototype.onUserDisable=function(e){for(var t=0,n=e.workspace.getLeavesOfType(gq);th)break;r.invalidated&&(t.splice(n,1),n--)}e.setChildren(t),a.queueCompute(),i.setText(String(e.children.length))};t=this.linksQueue=new FC({onStart:function(){},onStop:function(){h=-1,f()},onCancel:function(){e.linksQueue=null}});var m=new Set;t.addList(c);var g=BC(t.generator(),{batchSize:20,beforePause:function(){f()}});v(e,void 0,void 0,(function(){var e,t,n,i,r,a,l,c,p,d,f,v,b,w;return y(this,(function(y){switch(y.label){case 0:y.trys.push([0,5,6,11]),e=x(g),y.label=1;case 1:return[4,e.next()];case 2:if((t=y.sent()).done)return[3,4];if(n=t.value,i=n.linktext,r=n.pos,a=QD(i),l=a.path,c=a.subpath,(p=s.getFirstLinkpathDest(l,u))||(l=qA(l)),d=(p?p.path:l)+c,m.has(d))return[3,3];m.add(d),(f=new Cq(this,i,l,c,u,p)).pos=r,h=r,o.vChildren.addChild(f),y.label=3;case 3:return[3,1];case 4:return[3,11];case 5:return v=y.sent(),b={error:v},[3,11];case 6:return y.trys.push([6,,9,10]),t&&!t.done&&(w=e.return)?[4,w.call(e)]:[3,8];case 7:y.sent(),y.label=8;case 8:return[3,10];case 9:if(b)throw b.error;return[7];case 10:return[7];case 11:return[2]}}))}))}else o.vChildren.clear()}else o.vChildren.clear()}else o.vChildren.clear()}},t.prototype.recomputeUnlinked=function(){return v(this,void 0,void 0,(function(){var e,t,n,i,r,o,a,s,l,c,u,h,p,d,f,m,g,b,k,C,E,S,M,T,D,A,L,P,I,F,O,B,N,R,H=this;return y(this,(function(V){switch(V.label){case 0:return(e=this.unlinksQueue)&&!e.runnable.isCancelled()&&(e.runnable.cancel(),this.unlinkedFile=null),this.unlinksQueue=null,n=(t=this).unlinkedCollapsed,i=t.unlinkedCountEl,n?(i.hide(),[2]):(r=this.file,o=this.unlinkedDom,s=(a=this).app,l=a.unlinkedDomInfo,this.unlinkedFile=r,i.show(),i.setText("0"),r&&"md"===r.extension?(c=new Map,u=function(e,t){e=e.toLowerCase();var n=c.get(e)||{text:e,files:[]};c.set(e,n),n.files.contains(t)||n.files.push(t)},h=s.metadataCache.getFileCache(r),[4,s.vault.cachedRead(r)]):(o.emptyResults(),[2]));case 1:for(p=V.sent(),d=s.vault.getMarkdownFiles(),f=0,m=d;f=t})))return"continue";var a=[e,t],c=T.getMatchMinimalPositions(p,a),u=c[0],d=c[1],f=c[2],w=c[3],k=new gF(T,p,h,u,d,[a]);l.set(k,n);var C=i;k.onMatchRender=function(e,t){for(var n=t.createDiv({cls:"search-result-file-match-destination-file-container"}),i=function(e){var i=n.createDiv({cls:"search-result-file-match-destination-file"});i.createSpan({cls:"search-result-file-match-destination-file-icon"},(function(e){oT(e,"lucide-link")})),i.createSpan({cls:"search-result-file-match-destination-file-name",text:e.basename});var o="/"!==e.parent.path,l=vq.tooltipLinkFile();o&&(l=$e(e.path)+"\n\n"+l),tD(i,l),i.addEventListener("click",(function(n){return v(M,void 0,void 0,(function(){var i,o,l,c,u,h;return y(this,(function(p){switch(p.label){case 0:return n.preventDefault(),t.detach(),T.invalidate(),i=this.app.vault,o=a[0],l=a[1],e?[4,i.read(r)]:[2];case 1:return c=p.sent(),u=c.slice(o,l),h=s.fileManager.generateMarkdownLink(e,r.path,"",u),c=c.slice(0,o)+h+c.slice(l),[4,i.modify(r,c)];case 2:return p.sent(),[2]}}))}))}))},o=0,l=C;o0),this.setClickable(!!t.onItemClick)},t.prototype.setActive=function(e){this.selfEl.toggleClass("mod-active",e)},t}(xq),Mq=function(e){function t(t,n){var i=e.call(this,t)||this;return i.collapsible=!0,i.highlighted=null,i.allItems=[],i.onItemClick=n,i}return f(t,e),t.prototype.renderOutline=function(e){for(var t=[],n=this.allItems=[],i=0,r=e;i=a;)t.pop(),l=t.last();t.push(s),l?(l.children=l.children||[],l.children.push(s)):this.addRoot(s),n.push(s)}this.highlighted=null,this.render()},t.prototype.highlightLine=function(e){for(var t=this.highlighted,n=null,i=0,r=this.allItems;ig.y)c={item:k,position:"after",y:k.selfEl.offsetTop+k.selfEl.offsetHeight};else c={item:w=s[0],position:"before",y:w.selfEl.offsetTop}}o.parentNode!==r&&r.prepend(o),a(Math.max(0,c.y-2));var C=n.app.metadataCache.getFileCache(n.file);if(!C||!C.headings)return;var x=C.headings,E=t.heading,S=x.indexOf(E),M=c.item.heading,T=x.indexOf(M);if(-1===S||-1===T)return;if("after"===c.position&&(M=x[++T]),S===T)return;for(var D=S+1;D=A&&F<=(-1===L?I:L))return;return i||v(n,void 0,void 0,(function(){var e,t;return y(this,(function(n){switch(n.label){case 0:return[4,this.app.vault.read(this.file)];case 1:return e=n.sent(),-1===L&&(L=e.length),-1===P&&(P=e.length),t=Dq(e.substring(A,L)),e=P0)for(new aL(i).setName(Jq.labelSitesSharedWithYou()).setHeading(),x=i.createDiv("site-list-container"),E=function(e){x.createDiv("site-list-item list-item",(function(t){var i=e.id,a=f[i]||i;t.createDiv({cls:"list-item-part mod-extended",text:a}),t.createEl("button",{text:Jq.buttonChoose()},(function(t){t.addEventListener("click",(function(){return v(D,void 0,void 0,(function(){return y(this,(function(t){switch(t.label){case 0:return[4,r.setup(i,e.host)];case 1:return t.sent(),[4,n.openReviewChanges()];case 2:return t.sent(),[2]}}))}))}))})),t.createDiv("clickable-icon",(function(t){oT(t,"lucide-x"),tD(t,Jq.tooltipLeaveSiteSharing()),t.addEventListener("click",(function(){var t=document.createDocumentFragment();t.createEl("p",{cls:"setting-message mod-warning",text:Jq.labelLeaveSiteConfirmationDetails()}),t.createEl("p",{text:Jq.labelLeaveSiteConfirmationDetails_2()}),new fD(o).setTitle(Jq.labelLeaveSiteConfirmation({site:a})).setContent(t).addButton("mod-warning",Jq.buttonLeave(),(function(){n.deleteSiteShare(i,e.share_uid)})).addCancelButton().open()}))}))}))},S=0,M=u;S0){e.appendText(Gk.plugins.publish.optionCurrentlyIncludedFolders());for(var n=e.createEl("ul"),i=0,r=t;i0){e.appendText(Gk.plugins.sync.optionCurrentlyExcludedFolders());for(var n=e.createEl("ul"),i=0,r=t;i0&&n===t;i.checked=r,i.indeterminate=!r&&n>0,this.selfEl.toggleClass("is-selected",r)},t.prototype.applyQuery=function(e){for(var t=!1,n=0,i=this.children;n0;){var t=e.pop();t.children&&(t.toggleCollapsed(!1),e.push.apply(e,t.children))}},t.prototype.checkAll=function(){for(var e=0,t=this.children;e0)},t.prototype.addChild=function(e){var t=Ke(e.path);if(t){var n=this.folders,i=n[t];i||(i=n[t]=new hU(this,t),this.addChild(i)),i.children.push(e),e.parent=i}else this.addRoot(e)},t.prototype.createItem=function(e){var t=new uU(this,e);this.files[e.path]=t,this.addChild(t)},t.prototype.render=function(){this.children.sort(cU),e.prototype.render.call(this),this.updateChecked()},t.prototype.applyQuery=function(e){for(var t=0,n=this.children;t0){for(d in a.setCollapsed(!0,!1),s.setCollapsed(!0,!1),o.files)o.files.hasOwnProperty(d)&&"deleted"!==(p=o.files[d]).diff.type&&p.setChecked(!0);for(d in o.folders)o.folders.hasOwnProperty(d)&&o.folders[d].updateChecked()}else o.setCollapsed(!0,!1),a.setCollapsed(!0,!1);return o.render(),a.collapseAll(),a.render(),s.collapseAll(),s.render(),[2,e.prototype.show.call(this)]}}))}))},t.prototype.uploadChanges=function(){return v(this,void 0,void 0,(function(){var e,t,n,i;return y(this,(function(r){switch(r.label){case 0:for(n in e=this.pathToDiffMap,t=[],e)e.hasOwnProperty(n)&&(i=e[n]).checked&&t.push(i);return 0===t.length?(new gD(Jq.msgSelectAtLeastOneFile()),[2]):[4,this.parentModal.uploadChanges(t)];case 1:return r.sent(),[2]}}))}))},t}(nU),fU=function(e){function t(t){var n=e.call(this,t)||this;return n.title=Jq.labelUploadChanges(),n.changesContainer=null,n.doneButton=null,n.successMessageEl=null,n.siteLinkEl=null,n.runnable=null,n.changes=[],n.pathToEl={},n.changesContainer=n.el.createDiv("list-item-parent upload-progress-container"),n.successMessageEl=n.el.createDiv({},(function(e){e.createEl("p",{text:Jq.labelClearCache()}),e.createEl("p",{text:Jq.labelVisitSite()},(function(e){return v(n,void 0,void 0,(function(){return y(this,(function(t){return this.siteLinkEl=e.createEl("a"),this.siteLinkEl.setAttribute("target","_blank"),[2]}))}))}))})),n.successMessageEl.hide(),n.el.createDiv("modal-button-container",(function(e){n.doneButton=e.createEl("button",{cls:"mod-cta",text:Jq.buttonDone()},(function(e){e.addEventListener("click",(function(){n.runnable?(n.runnable.cancel(),n.runnable=null):n.parentModal.close()}))})),e.createEl("button",{text:Jq.buttonGoBack()},(function(e){e.addEventListener("click",(function(){n.runnable&&n.runnable.cancel(),n.parentModal.openReviewChanges()}))}))})),n}return f(t,e),t.prototype.addChanges=function(e){this.changes=e},t.prototype.show=function(){return v(this,void 0,void 0,(function(){var t,n,i,r,o;return y(this,(function(a){switch(a.label){case 0:return this.runnable&&this.runnable.cancel(),[4,e.prototype.show.call(this)];case 1:for(a.sent(),this.successMessageEl.hide(),this.changesContainer.removeClass("is-finished"),this.doneButton.addClass("mod-warning"),this.doneButton.setText(Jq.buttonStop()),this.changesContainer.empty(),this.pathToEl={},t=function(e){n.pathToEl[e.path]=n.changesContainer.createDiv("publish-upload-item list-item",(function(t){t.createDiv("list-item-part",(function(e){oT(e,"lucide-file")})),t.createDiv({cls:"list-item-part mod-extended publish-upload-item-title",text:$e(e.path)}),t.createDiv("list-item-part",(function(t){var n=t.createSpan("flair");"new"===e.type||"changed"===e.type?n.setText(Jq.labelStatusToPublish()):"deleted"===e.type&&n.setText(Jq.labelStatusToDelete())}))}))},n=this,i=0,r=this.changes;i'.concat(Jq.labelCustomDomainLinkName(),"")}),this.el.createEl("p",{cls:"u-muted"},(function(e){e.innerHTML=o})),this.el.createDiv("modal-button-container",(function(e){e.createEl("button",{text:Jq.buttonUpdateCustomDomain(),cls:"mod-cta"},(function(e){e.addEventListener("click",(function(){return v(a,void 0,void 0,(function(){var e,t,n,o;return y(this,(function(a){switch(a.label){case 0:return a.trys.push([0,2,,3]),e=i.getValue(),t=r.getValue(),[4,this.parentModal.plugin.apiCustomUrl(e,t)];case 1:return a.sent(),[3,3];case 2:return n=a.sent(),this.parentModal.handleError(n),[2];case 3:return(o=this.parentModal).openSection(o.siteOptionsSection),[2]}}))}))}))})),e.createEl("button",{text:Jq.buttonGoBack()},(function(e){e.addEventListener("click",(function(){return v(a,void 0,void 0,(function(){var e;return y(this,(function(t){return(e=this.parentModal).openSection(e.siteOptionsSection),[2]}))}))}))}))})),[2]}}))}))},t}(nU),bU=function(e){function t(t,n,i){var r=e.call(this,t)||this;return r.shares=[],r.siteId=i,r.setTitle(Jq.labelManageSharing({name:n})),r.addButton("",Gk.dialogue.buttonDone(),(function(){return r.close()})),r.display(),r}return f(t,e),t.prototype.display=function(){var e=this;this.contentEl.empty();var t=kR(this.contentEl);this.app.account.getSiteShareList(this.siteId,(function(n){if(e.shares=n,t.hide(),e.shares.length>0){e.contentEl.createEl("p",{cls:"u-muted",text:Jq.labelSharingWithUsers()});for(var i=e.contentEl.createDiv(),r=function(n){i.createDiv("list-item",(function(i){n.name?(i.createDiv({cls:"list-item-part",text:n.name}),i.createDiv({cls:"list-item-part mod-extended",text:"<".concat(n.email,">")})):i.createDiv({cls:"list-item-part mod-extended",text:n.email}),n.accepted||i.createDiv({cls:"list-item-part"},(function(e){e.createSpan({cls:"u-muted",text:Jq.labelInvitePending()})})),i.createDiv("list-item-part",(function(i){oT(i,"lucide-x"),tD(i,Jq.tooltipRemoveUser()),i.addEventListener("click",(function(){t.show(),e.app.account.removeUserFromSite(e.siteId,n.uid,(function(){e.display()}))}))}))}))},o=0,a=e.shares;o52428800)throw new MU("TOOLARGE","Failed to upload file over limit of 50mb.");return[4,this.getHash(e)];case 1:return t=r.sent(),[4,this.vault.readBinary(e)];case 2:return n=r.sent(),i={"obs-token":this.app.account.token,"obs-id":this.siteId,"obs-path":encodeURIComponent(e.path),"obs-hash":t},[2,this.apiRequest({method:"POST",url:this.getHost()+"/api/upload",headers:i,data:n})]}}))}))},e.prototype.apiDownloadFile=function(e){return v(this,void 0,Promise,(function(){var t;return y(this,(function(n){switch(n.label){case 0:return t={id:this.siteId,token:this.app.account.token,path:e},[4,ajaxPromise({method:"POST",url:this.getHost()+"/api/download",data:t})];case 1:return[2,n.sent()]}}))}))},e.prototype.getHash=function(e){return v(this,void 0,Promise,(function(){var t;return y(this,(function(n){return(t=this.getHashFromMetadataCache(e))?[2,t]:[2,this.computeHash(e)]}))}))},e.prototype.getPublishFlag=function(e){var t=this.app.metadataCache.getFileCache(e);if(!t)return null;var n=NM(t.frontmatter,"publish");if(null!=n){if(String.isString(n)){if("false"===(n=n.toLowerCase())||"no"===n)return!1;if("true"===n||"yes"===n)return!0}return!!n}for(var i=0,r=this.excludes;i0?[4,Promise.all(v)]:[3,4];case 3:y.sent(),y.label=4;case 4:return[4,n];case 5:return y.sent(),(this.deck=new Reveal(s,{embedded:!0,keyboardCondition:"focused",controlsTutorial:!1,overview:!1})).initialize(),setTimeout((function(){s.dispatchEvent(new PointerEvent("pointerdown"))}),0),[3,7];case 6:return b=y.sent(),console.error(b),this.close(),[3,7];case 7:return[2]}}))}))},t.prototype.close=function(){this.destroy()},t.prototype.destroy=function(){this.app.keymap.popScope(this.scope);var e=this,t=e.deck,n=e.containerEl,i=e.revealCssEl,r=e.themeCssEl;n&&(n.detach(),this.containerEl=null),i&&(i.detach(),this.revealCssEl=null),r&&(r.detach(),this.themeCssEl=null),t&&t.destroy()},t}(GM),NU=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.id="starred",t.name=Gk.plugins.starred.name(),t.description=Gk.plugins.starred.desc(),t.defaultOn=!0,t.app=null,t.plugin=null,t.items=[],t}return f(t,e),t.prototype.init=function(e,t){var n=this;this.app=e,this.plugin=t,t.registerGlobalCommand({id:"starred:open",name:Gk.plugins.starred.actionShow(),icon:"lucide-star",callback:function(){n.app.workspace.ensureSideLeaf(RU,"left",{active:!0})}}),t.registerGlobalCommand({id:"starred:star-current-file",name:Gk.plugins.starred.actionToggle(),icon:"lucide-star",callback:function(){var t=e.workspace.getActiveFile();t&&n.toggleFile(t)}}),t.registerViewType(RU,(function(e){return new HU(e,n)}))},t.prototype.onEnable=function(e,t){return v(this,void 0,Promise,(function(){var n;return y(this,(function(i){switch(i.label){case 0:return t.registerEvent(e.workspace.on("layout-ready",this.initLeaf,this)),t.registerEvent(e.vault.on("rename",this.onRename,this)),t.registerEvent(e.workspace.on("file-menu",this.onFileMenu,this)),[4,t.loadData()];case 1:return(n=i.sent())&&n.items&&Array.isArray(n.items)&&(this.items=n.items,this.onItemsChanged(!1)),e.workspace.registerHoverLinkSource("starred",{display:this.name,defaultMod:!0}),[2]}}))}))},t.prototype.onDisable=function(e){e.workspace.unregisterHoverLinkSource("starred")},t.prototype.onUserEnable=function(){this.initLeaf()},t.prototype.initLeaf=function(){this.app.workspace.ensureSideLeaf(RU,"left",{reveal:!1})},t.prototype.toggleFile=function(e){var t=this.findStarredFile(e);t?this.removeItem(t):this.addStarredFile(e)},t.prototype.onRename=function(e,t){for(var n=!1,i=0,r=this.items;i0?t[0]:null},t.prototype.addStarredFile=function(e){this.findStarredFile(e)||this.addItem({type:"file",title:e.basename,path:e.path})},t.prototype.findStarredSearch=function(e){var t=this.items.filter((function(t){return"search"===t.type&&t.query===e}));return t.length>0?t[0]:null},t.prototype.addStarredSearch=function(e){this.findStarredSearch(e)||this.addItem({type:"search",title:e,query:e})},t.prototype.toggleFileStar=function(e){var t=this.findStarredFile(e);t?this.removeItem(t):this.addStarredFile(e)},t.prototype.addFilesStar=function(e){for(var t=0,n=0,i=e;nu&&p.index--,p.index===u)return;return s.parentNode!==a&&a.prepend(s),l(Math.max(0,p.y-2)),r||(c.remove(o),c.splice(p.index,0,o),n.onItemsChanged(!0)),{dropEffect:"move",hoverEl:s,hoverClass:"is-active"}}if("file"===t.type)return r||n.addStarredFile(t.file),{action:Gk.interface.dragAndDrop.starThisFile(),dropEffect:"copy"};if("files"===t.type){if(!r){for(var k=[],C=0,x=t.files;C0&&(this.focusedItem.collapsed?this.focusedItem.setCollapsed(!1,!0):this.focusedItem.vChildren.hasChildren()&&this.changeFocusedItem("forwards"))},t.prototype.setFocusedItem=function(e,t){var n;void 0===t&&(t=!0),(!e||e instanceof WU)&&(null===(n=this.focusedItem)||void 0===n||n.el.removeClass("has-focus"),this.focusedItem=e,e&&(e.el.addClass("has-focus"),t&&(this.infinityScroll.computeSync(),this.infinityScroll.scrollIntoView(e))))},t.prototype.changeFocusedItem=function(e){if(null!==this.focusedItem){var t="forwards"===e?sF(this.focusedItem,!0):lF(this.focusedItem,!0);t&&t instanceof WU&&this.setFocusedItem(t)}else{var n=this.infinityScroll.rootEl;if("backwards"===e){for(var i=n;aF(i)&&i.vChildren.hasChildren();)i=i.vChildren.last();this.setFocusedItem(i)}else this.setFocusedItem(n.vChildren.children[0])}},t.prototype.getDisplayText=function(){return VU.name()},t.prototype.getViewType=function(){return qU},t.prototype.getState=function(){var t=e.prototype.getState.call(this);return t.sortOrder=this.sortOrder,t.useHierarchy=this.useHierarchy,t},t.prototype.setState=function(t,n){return v(this,void 0,Promise,(function(){var i,r;return y(this,(function(o){switch(o.label){case 0:return[4,e.prototype.setState.call(this,t,n)];case 1:return o.sent(),i=t.sortOrder,r=t.useHierarchy,String.isString(i)&&_U.hasOwnProperty(i)&&(this.sortOrder=i),isBoolean(r)&&this.setUseHierarchy(r),this.requestUpdateTags(),[2]}}))}))},t.prototype.load=function(){e.prototype.load.call(this);var t=this.app;this.registerEvent(t.metadataCache.on("finished",this.requestUpdateTags,this)),this.requestUpdateTags()},t.prototype.onResize=function(){this.infinityScroll.onResize()},t.prototype.setIsAllCollapsed=function(e){this.isAllCollapsed!==e&&(this.isAllCollapsed=e,e?(oT(this.collapseOrExpandAllEl,"lucide-chevrons-up-down"),tD(this.collapseOrExpandAllEl,VU.actionExpandAll())):(oT(this.collapseOrExpandAllEl,"lucide-chevrons-down-up"),tD(this.collapseOrExpandAllEl,VU.actionCollapseAll())))},t.prototype.setUseHierarchy=function(e){this.useHierarchy!==e&&(this.collapseOrExpandAllEl.ariaDisabled=String(!e),this.useHierarchy=e,this.useHierarchyEl.toggleClass("is-active",e),this.requestUpdateTags(),this.app.workspace.requestSaveLayout())},t.prototype.saveFold=function(){if(this.app.workspace.layoutReady){var e=this.tagDoms,t=[];for(var n in e)if(e.hasOwnProperty(n)){var i=e[n];i&&i.collapsed&&t.push(n)}this.app.saveLocalStorage("tag-pane-fold",t)}},t.prototype.updateTags=function(){var e=this,t=this.app,n=this.tagDoms,i=t.metadataCache.getTags(),r=Object.keys(i),o=this.tagDoms={},a=this.app.loadLocalStorage("tag-pane-fold"),s=new Set(a||null);if(this.root.vChildren.clear(),this.focusedItem=null,r.length>0){var l=this.sortOrder,c=null;if("alphabetical"===l)c=function(e,t){return eF(e.tag,t.tag)};else if("alphabeticalReverse"===l)c=function(e,t){return-eF(e.tag,t.tag)};else{var u="frequencyReverse"===l?-1:1;c=function(e,t){var n=e.tag,r=t.tag,o=i[n],a=i[r];return o===a?eF(n,r):u*(a-o)}}var h=this.useHierarchy,p=function(t,n){var i=t.split("/").last();if(h&&i!==t){var r=t.substr(0,t.length-i.length-1),a=r.toLowerCase(),s=o[a];s||((s=new WU(e)).setTag(r),o[a]=s),-1===s.vChildren.children.indexOf(n)&&s.vChildren.addChild(n),p(r,s)}else-1===e.root.vChildren.children.indexOf(n)&&e.root.vChildren.addChild(n)};for(var d in n)n.hasOwnProperty(d)&&n[d].vChildren.clear();for(var f=0,m=r;f0&&t.createEl("hr"),t.createDiv({},(function(t){var r=function(r){i.hasOwnProperty(r)&&t.createDiv("list-item",(function(t){t.createDiv({cls:"list-item-part mod-extended",text:r}),t.createEl("button",{cls:"list-item-part",text:i_.buttonLoad()},(function(t){t.addEventListener("click",(function(){n.loadWorkspace(r),e.close()}))})),t.createDiv("list-item-part clickable-icon",(function(t){oT(t,"lucide-x"),tD(t,i_.tooltipDeleteLayout()),t.addEventListener("click",(function(){return v(e,void 0,void 0,(function(){return y(this,(function(e){switch(e.label){case 0:return[4,n.deleteWorkspace(r)];case 1:return e.sent(),new gD(i_.msgDeleteLayoutSuccess()),this.onOpen(),[2]}}))}))}))}))}))};for(var o in i)r(o)})),this.nameEl.focus()},t.prototype.onClose=function(){this.contentEl.empty()},t.prototype.onFinish=function(){var e=this.nameEl.value.trim();e?(this.plugin.saveWorkspace(e),this.plugin.setActiveWorkspace(e),new gD(i_.msgSaveLayoutSuccess()),this.nameEl.value="",this.onOpen()):new gD(i_.msgEnterName())},t}(dD),a_=function(e){function t(t,n,i){var r=e.call(this,t)||this;return r.emptyStateText=i_.labelNoLayoutFound(),r.plugin=n,r.shouldSave=i,r.setPlaceholder(i_.placeholderTypeToSearchLayouts()),r}return f(t,e),t.prototype.getItems=function(){return Object.keys(this.plugin.workspaces)},t.prototype.getEmptySearchItems=function(){return this.getItems()},t.prototype.getItemText=function(e){return e},t.prototype.renderSuggestion=function(e,t){var n=e.item;Mk(t,this.getItemText(n),e.match?e.match.matches:null)},t.prototype.onChooseItem=function(e){if(this.shouldSave){var t=this.plugin,n=t.workspaces,i=t.activeWorkspace;i&&n[i]&&this.plugin.saveWorkspace(i)}this.plugin.loadWorkspace(e)},t}(cV),s_=function(){function e(e,t){this.app=e,this.containerEl=t}return e.prototype.registerStatusBarItem=function(){return this.containerEl.createDiv("status-bar-item")},e}();function l_(e){return e.replace(/["]/g,"").split(",").map((function(e){return e.trim()})).filter((function(e){return e}))}function c_(e){return e.map((function(e){return e.contains(" ")?'"'.concat(e,'"'):e})).join(", ")}function u_(e){return v(this,void 0,Promise,(function(){var t;return y(this,(function(n){switch(n.label){case 0:return""===e?[2,!0]:[4,(t=document.fonts).ready];case 1:return n.sent(),[2,t.check('12px "'.concat(e,'"'))]}}))}))}var h_=Gk.setting.appearance,p_=function(e){function t(t,n,i,r){var o=e.call(this,t)||this;o.setTitle(n),o.values=i,o.descEl=o.contentEl.createDiv(),o.fontListEl=o.contentEl.createDiv("setting-font-list");var a=null,s=null,l=null,c=function(){var e=l.getValue();e&&!o.values.contains(e)&&(o.values.push(e),o.display()),l.setValue(""),a.extraSettingsEl.hide()};return new aL(o.contentEl).setName(h_.labelFontName()).addExtraButton((function(e){return e.setIcon("lucide-alert-circle").setTooltip(h_.msgFontNotFound()).then((function(e){a=e,e.extraSettingsEl.addClass("mod-warning"),e.extraSettingsEl.hide()}))})).addText((function(e){l=e,e.setPlaceholder(h_.optionFontPlaceholder()),e.onChange((function(e){return v(o,void 0,void 0,(function(){var t;return y(this,(function(n){switch(n.label){case 0:return[4,u_(e)];case 1:return t=n.sent(),a.extraSettingsEl.toggle(!t),[2]}}))}))}));var n=e.inputEl;n.addEventListener("focus",(function(){o.modalEl.style.transition="unset",Tw((function(){o.modalEl.style.transition=""})),s||((s=new d_(t,n)).onSelect=function(e,t){c(),t.instanceOf(MouseEvent)&&n.blur()},v_.then((function(){s.onInputChange()})))})),n.addEventListener("keydown",(function(e){e.isComposing||"Enter"===e.key&&c()}))})).addButton((function(e){return e.setButtonText(Gk.interface.buttonAdd()).onClick(c)})),o.addButton("mod-cta",Gk.dialogue.buttonSave(),(function(){o.close(),r(o.values)})),o.addCancelButton(),o}return f(t,e),t.prototype.onOpen=function(){this.display()},t.prototype.display=function(){var e=this,t=this,n=t.fontListEl,i=t.descEl,r=t.values;0===r.length?i.setText(h_.labelNoCustomFontSet()):i.setText(h_.labelFontApplied()),n.empty();for(var o=function(t){n.createDiv("mobile-option-setting-item",(function(i){i.createSpan({cls:"mobile-option-setting-item-name",text:t}).style.fontFamily=t;var o=i.createSpan("mobile-option-setting-item-option-icon");u_(t).then((function(e){e?(o.addClass("mod-success"),oT(o,"lucide-check-circle-2"),tD(o,h_.msgFontFound())):(o.addClass("mod-warning"),oT(o,"lucide-alert-circle"),tD(o,h_.msgFontNotFound()))})),i.createDiv("clickable-icon mobile-option-setting-item-option-icon",(function(n){oT(n,"lucide-x"),tD(n,Gk.interface.deleteActionShortName()),n.addEventListener("click",(function(){r.remove(t),e.display()}))})),i.createDiv("clickable-icon mobile-option-setting-item-option-icon mobile-option-setting-drag-icon",(function(o){oT(o,"lucide-menu"),tD(o,Gk.interface.dragToRearrange()),Gw(i,i,n,0,(function(){return null}),(function(n){r.remove(t),r.splice(n,0,t),e.display()}))}))}))},a=0,s=r;a0){new aL(t).setName(Gk.setting.appearance.labelAdditionalRibbonItems()).setHeading();for(var h=t.createDiv(""),p=function(t){h.createDiv("mobile-option-setting-item",(function(i){i.createSpan("mobile-option-setting-item-add-icon",(function(i){oT(i,"lucide-plus-circle"),i.addEventListener("click",(function(){t.hidden=!1,n.onChange(!0),e.render()}))})),i.createSpan("mobile-option-setting-item-option-icon",(function(e){return oT(e,t.icon)})),i.createSpan({cls:"mobile-option-setting-item-name",text:t.title})}))},d=0,f=u;d0?y_.msgUpdatesFound({count:s}):"")).then((function(e){s>0?(e.addButton((function(e){return e.setButtonText(y_.buttonViewUpdates()).onClick((function(){new wV(n,!0,(function(){S.display()})).open()}))})),e.addButton((function(e){return e.setCta().setButtonText(y_.buttonUpdateAllThemes()).onClick((function(){return oC(S.containerEl,(function(){return v(S,void 0,void 0,(function(){var e,t,n,r;return y(this,(function(o){switch(o.label){case 0:e=0,t=Object.entries(i.updates),o.label=1;case 1:return e0&&e.addButton((function(e){return e.setCta().setButtonText(y_.buttonCheckForUpdates()).onClick((function(){return v(S,void 0,void 0,(function(){return y(this,(function(e){switch(e.label){case 0:return[4,oC(this.containerEl,(function(){return i.checkForUpdates()}))];case 1:return e.sent(),this.display(),[2]}}))}))}))}))})),new aL(t).setHeading().setName(y_.optionFont()),(l=function(e,i,r){var o=function(){var e=l_(n.vault.getConfig(r)),t=createFragment();if(t.appendText(i),1===e.length){var o=e[0];t.createSpan({text:y_.labelSingleFontCurrentlyInEffect()}),t.createSpan({text:o,cls:"u-pop"})}else if(e.length>1){t.createSpan({text:y_.labelMultipleFontsCurrentlyInEffect()});for(var s=t.createEl("ul"),l=function(e){var t=s.createEl("li","");t.createSpan({text:e}),u_(e).then((function(e){e||(t.appendText(" "),t.createSpan("mod-warning",(function(e){oT(e,"lucide-alert-circle"),tD(e,Gk.setting.appearance.msgFontNotFound())})))}))},c=0,u=e;c0?C_.msgUpdatesFound({count:l}):"")).then((function(e){l>0?e.addButton((function(e){return e.setCta().setButtonText(C_.buttonUpdateAllPlugins()).onClick((function(){return oC(n,(function(){return v(t,void 0,void 0,(function(){var e,t,n,r,o;return y(this,(function(a){switch(a.label){case 0:for(t in e=[],s)e.push(t);n=0,a.label=1;case 1:return n0&&e.addButton((function(e){return e.setCta().setButtonText(C_.buttonCheckForUpdates()).onClick((function(){return oC(n,(function(){return v(t,void 0,void 0,(function(){return y(this,(function(e){switch(e.label){case 0:return[4,i.checkForUpdates()];case 1:return e.sent(),this.render(),[2]}}))}))}))}))}))})),new aL(n).setName(C_.labelDebugStartupTime()).setDesc(C_.labelDebugStartupTimeDescription()).addToggle((function(e){return e.setValue("1"===localStorage.getItem("debug-plugin")).onChange((function(e){e?localStorage.setItem("debug-plugin","1"):localStorage.removeItem("debug-plugin")}))})),a.length>0){new aL(n).setName(C_.optionSearchInstalledPlugin()).setDesc(C_.optionSearchInstalledPluginDescription()).addSearch((function(n){return n.setPlaceholder(C_.placeholderSearchInstalledPlugin()).onChange((function(e){t.updateSearch(e)})).then((function(){n.inputEl.addEventListener("keypress",(function(e){e.isComposing||"Enter"!==e.key||$w.isMobile&&Xk()})),e&&!$w.isMobile&&setTimeout((function(){return n.inputEl.focus()}))}))}));var c=new aL(n).setHeading().setName(C_.labelInstalledPlugins()).addExtraButton((function(e){return e.setIcon("lucide-refresh-cw").setTooltip(C_.buttonReloadPlugins()).onClick((function(){return v(t,void 0,void 0,(function(){return y(this,(function(e){switch(e.label){case 0:return[4,i.loadManifests()];case 1:return e.sent(),new gD(C_.msgReloadedThirdPartyPlugins()),this.render(),[2]}}))}))}))}));$w.isDesktopApp&&c.addExtraButton((function(e){return e.setIcon("lucide-folder-open").setTooltip(C_.buttonOpenPluginsFolder()).onClick((function(){return v(t,void 0,void 0,(function(){var e,t;return y(this,(function(n){switch(n.label){case 0:return e=this.app.vault,t=i.getPluginFolder(),[4,e.exists(t)];case 1:return n.sent()?[3,3]:[4,e.createFolder(t)];case 2:n.sent(),n.label=3;case 3:return this.app.openWithDefaultApp(t),[2]}}))}))}))}))}for(var u=function(e){if(!r.hasOwnProperty(e)){var a=o[e].manifest;new aL(n).setName(a.name).setDesc(a.description).addToggle((function(e){return e.setValue(!0).onChange((function(e){return v(t,void 0,void 0,(function(){return y(this,(function(e){switch(e.label){case 0:return[4,i.disablePluginAndSave(a.id)];case 1:return e.sent(),this.render(),[2]}}))}))}))}))}},h=0,p=Object.keys(o);h0)for(var i=e.createEl("ul"),r=function(e){i.createEl("li","").createSpan({text:e},(function(t){e.length>2&&e.startsWith("/")&&e.endsWith("/")&&t.createSpan({text:"Regex",cls:"flair mod-flat"})}))},o=0,a=n;o2&&t.startsWith("/")&&t.endsWith("/")&&e.createSpan({text:"Regex",cls:"flair mod-flat"})})),n.createDiv("clickable-icon mobile-option-setting-item-option-icon",(function(n){oT(n,"lucide-x"),tD(n,Gk.interface.deleteActionShortName()),n.addEventListener("click",(function(){r.remove(t),e.display()}))}))}))},a=0,s=r;a0){new aL(n).setName(L_.optionMoreToolbarOptions()).setHeading();for(var f=function(e){var t=o[e];n.createDiv("mobile-option-setting-item",(function(n){n.createSpan("mobile-option-setting-item-add-icon",(function(t){oT(t,"lucide-plus-circle"),t.addEventListener("click",(function(){s.contains(e)||(s.push(e),c())}))})),n.createSpan("mobile-option-setting-item-option-icon",(function(e){return oT(e,t.icon||"question-mark-glyph")})),n.createSpan({text:t.name})}))},m=0,g=l;m40)){var t=n.activeTab.containerEl;n.contentEl.prepend(n.tabHeadersEl),kC(n.tabHeadersEl),e.registerCallback({move:function(n,i){var r=t.offsetWidth,o=Math.clamp((n-e.startX)/r,0,1);t.style.transform="translateX(".concat(o*r,"px)")},cancel:function(){t.style.transform="",n.tabHeadersEl.detach()},finish:function(i,r,o){var a=t.offsetWidth,s=Math.clamp((i-e.startX)/a,0,1);.5*o0),this.corePluginTabContainer.setChildrenInPlace(t.map((function(e){return e.navEl}))),n.sort((function(e,t){return eF(e.name,t.name)})),this.communityPluginTabHeaderGroup.toggle(n.length>0),this.communityPluginTabContainer.setChildrenInPlace(n.map((function(e){return e.navEl})))},t.prototype.openTab=function(e){var t=this,n=this,i=n.activeTab,r=n.contentEl,o=n.tabContentContainer,a=n.tabHeadersEl;o.empty(),this.updateModalTitle(e),i&&(i.navEl.removeClass("is-active"),i.hide()),this.activeTab=e,this.lastTabId=e.id,e.navEl.addClass("is-active"),o.appendChild(e.containerEl),this.titleEl.createDiv({cls:"modal-setting-back-button",prepend:!0},(function(e){e.addEventListener("click",(function(){return t.closeActiveTab()})),e.createSpan("modal-setting-back-button-icon",(function(e){oT(e,"lucide-arrow-left")}))})),$w.isPhone&&!i?(bC(a),Mw(r,o,"right")):r.appendChild(o),e.display()},t.prototype.closeActiveTab=function(){var e=this,t=this,n=t.activeTab,i=t.contentEl,r=t.tabContentContainer,o=t.tabHeadersEl;if(n){var a=function(){r.empty(),n.navEl.removeClass("is-active"),n.hide(),e.updateModalTitle()};$w.isPhone&&i.isShown()&&this.activeTab.containerEl.isShown()?Mw(i,o,"left",a):(i.setChildrenInPlace([o]),a()),kC(o),this.activeTab=null}},t.prototype.openTabById=function(e){for(var t=0,n=this.settingTabs;t=t.maxX&&e.maxY>=t.maxY}function oj(e){var t=e.minX,n=e.minY;return j_((t+e.maxX)/2,(n+e.maxY)/2)}function aj(e,t){return j_(e.x-t.width/2,e.y-t.height/2)}function sj(e,t,n){return n&&(e="center"===n?aj(e,t):function(e,t){var n=e.x,i=e.y,r=e.width,o=e.height;switch(t){case"left":return j_(n,i-o/2);case"top":return j_(n-r/2,i);case"right":return j_(n-r,i-o/2);case"bottom":return j_(n-r/2,i-o)}}(K_(e,t),n)),K_(e,t)}function lj(e,t,n){var i,r,o,a=n.x,s=n.y,l=n.width,c=n.height;switch(e){case"top":case"bottom":i=G_(a,t.y,l,0),r=!1,o=!0;break;case"left":case"right":i=G_(t.x,s,0,c),r=!0,o=!1;break;case"topleft":case"topright":case"bottomleft":case"bottomright":i=G_(t.x,t.y,0,0),r=!0,o=!0}return{source:i,resizeX:r,resizeY:o}}var cj=Gk.plugins.quickSwitcher,uj=Gk.plugins.canvas,hj=function(e){function t(t,n,i){var r=e.call(this,t.app)||this;return r.emptyStateText=cj.labelNoNoteCreateNew(),r.context="embed",r.canvas=t,r.handleClose=i,r.handleChoose=n,r.shouldShowUnresolved=!1,r.shouldShowMarkdown=!0,r.shouldShowImages=!0,r.shouldShowNonImageAttachments=!0,r.shouldShowAllTypes=t.app.vault.getConfig("showUnsupportedFiles"),r.setPlaceholder(uj.promptStartSearch()),r.setInstructions([{command:"↑↓",purpose:cj.instructionNavigate()},{command:"↵",purpose:cj.instructionOpen()},{command:"shift ↵",purpose:cj.instructionCreate()},{command:"esc",purpose:cj.instructionDismiss()}]),r.scope.register(["Shift"],"Enter",(function(e){return r.selectSuggestion(null,e),!1})),r}return f(t,e),t.prototype.showMarkdownAndCanvas=function(e){return this.shouldShowMarkdown=e,this.shouldShowCanvas=e,this},t.prototype.showAttachments=function(e){return this.shouldShowNonImageAttachments=e,this.shouldShowImages=e,this},t.prototype.onChooseSuggestion=function(e,t){return v(this,void 0,void 0,(function(){var t,n;return y(this,(function(i){switch(i.label){case 0:return e?[3,2]:(t=this.canvas.view.file.path,[4,this.app.fileManager.createNewMarkdownFileFromLinktext(this.inputEl.value,t)]);case 1:return n=i.sent(),this.handleChoose(n),[2];case 2:return"file"!==e.type&&"alias"!==e.type||this.handleChoose(e.file),[2]}}))}))},t.prototype.onClose=function(){this.handleClose&&this.handleClose()},t}(OV),pj=function(e){function t(t,n,i){var r=e.call(this,t)||this;return r.emptyStateText=uj.labelNoImages(),r.context="embed",r.handleClose=i,r.handleChoose=n,r.shouldShowUnresolved=!1,r.shouldShowMarkdown=!1,r.shouldShowCanvas=!1,r.shouldShowAllTypes=!1,r.shouldShowImages=!0,r.shouldShowNonImageAttachments=!1,r.setPlaceholder(uj.promptStartSearch()),r.setInstructions([{command:"↑↓",purpose:cj.instructionNavigate()},{command:"↵",purpose:cj.instructionSelect()},{command:"esc",purpose:cj.instructionDismiss()}]),r}return f(t,e),t.prototype.onChooseSuggestion=function(e){return v(this,void 0,void 0,(function(){return y(this,(function(t){return e?("file"===e.type&&this.handleChoose(e.file),[2]):[2]}))}))},t.prototype.onClose=function(){this.handleClose&&this.handleClose()},t}(OV);function dj(e,t,n){for(var i=[1/0,null],r=0,o=t;r0||l.length>0)&&(a.push({src:s,dest:l}),s=[],l=[]);for(var f=0,m=t.length-1;f<=m;){var g=f+m>>1,v=d-r(t[g]);if(v>0)f=g+1;else{if(!(v<0)){f=m=g;break}m=g-1}}if(f!==m)if(m<0)m=0;else if(f>=t.length-1)f=t.length-1;else{var y=r(t[f])-d,b=d-r(t[m]);y===b?y===o?m=f:f=m:f=m=y0&&r(t[f-1])===w;)f--;for(;m0&&r(s.last())===d&&s.push(p)}return(s.length>0||l.length>0)&&a.push({src:s,dest:l}),0===a.length?null:{matches:a,delta:o}}function yj(e){return e.x}function bj(e){return e.y}var wj=/^(\d+)$/;function kj(e,t){t=(t||"").trim();for(var n=0,i=Array.from(e.classList);nn;){if(i-n>600){var o=i-n+1,a=t-n+1,s=Math.log(o),l=.5*Math.exp(2*s/3),c=.5*Math.sqrt(s*l*(o-l)/o)*(a-o/2<0?-1:1);Aj(e,t,Math.max(n,Math.floor(t-a*l/o+c)),Math.min(i,Math.floor(t+(o-a)*l/o+c)),r)}var u=e[t],h=n,p=i;for(Lj(e,n,t),r(e[i],u)>0&&Lj(e,n,i);h0;)p--}0===r(e[n],u)?Lj(e,n,p):Lj(e,++p,i),p<=t&&(n=p+1),t<=p&&(i=p-1)}}function Lj(e,t,n){var i=e[t];e[t]=e[n],e[n]=i}function Pj(e,t){return et?1:0}const Ij=function(){function e(e){void 0===e&&(e=9),this._maxEntries=Math.max(4,e),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()}return e.prototype.all=function(){return this._all(this.data,[])},e.prototype.search=function(e){var t=this.data,n=[];if(!Uj(e,t))return n;for(var i=this.toBBox,r=[];t;){for(var o=0;o=0&&r[t].children.length>this._maxEntries;)this._split(r,t),t--;this._adjustParentBBoxes(i,r,t)},e.prototype._split=function(e,t){var n=e[t],i=n.children.length,r=this._minEntries;this._chooseSplitAxis(n,r,i);var o=this._chooseSplitIndex(n,r,i),a=_j(n.children.splice(o,n.children.length-o));a.height=n.height,a.leaf=n.leaf,Oj(n,this.toBBox),Oj(a,this.toBBox),t?e[t-1].children.push(a):this._splitRoot(n,a)},e.prototype._splitRoot=function(e,t){this.data=_j([e,t]),this.data.height=e.height+1,this.data.leaf=!1,Oj(this.data,this.toBBox)},e.prototype._chooseSplitIndex=function(e,t,n){for(var i,r,o,a,s,l,c,u=1/0,h=1/0,p=t;p<=n-t;p++){var d=Bj(e,0,p,this.toBBox),f=Bj(e,p,n,this.toBBox),m=(r=d,o=f,a=void 0,s=void 0,l=void 0,c=void 0,a=Math.max(r.minX,o.minX),s=Math.max(r.minY,o.minY),l=Math.min(r.maxX,o.maxX),c=Math.min(r.maxY,o.maxY),Math.max(0,l-a)*Math.max(0,c-s)),g=Vj(d)+Vj(f);m=t;l--){c=e.children[l];Nj(a,e.leaf?r(c):c),s+=zj(a)}return s},e.prototype._adjustParentBBoxes=function(e,t,n){for(var i=n;i>=0;i--)Nj(t[i],e)},e.prototype._condense=function(e){for(var t=e.length-1,n=void 0;t>=0;t--)0===e[t].children.length?t>0?(n=e[t-1].children).splice(n.indexOf(e[t]),1):this.clear():Oj(e[t],this.toBBox)},e}();function Fj(e,t,n){if(!n)return t.indexOf(e);for(var i=0;i=e.minX&&t.maxY>=e.minY}function _j(e){return{children:e,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function jj(e,t,n,i,r){for(var o=[t,n];o.length;)if(!((n=o.pop())-(t=o.pop())<=i)){var a=t+Math.ceil((n-t)/i/2)*i;Dj(e,a,t,n,r),o.push(t,a,a,n)}}var Wj=function(){function e(e){this.data=[],this.current=0,this.max=e}return e.prototype.canUndo=function(){return this.current>0},e.prototype.undo=function(){return this.canUndo()?(this.current--,this.data[this.current]):null},e.prototype.canRedo=function(){return this.currentthis.current&&(t.length=this.current+1),t.push(e),t.length>=this.max&&t.shift(),this.current=t.length-1},e.prototype.replace=function(e){var t=this.data;0===t.length?(t.push(e),this.current=0):t[this.current]=e},e.prototype.clear=function(){this.data.length=0,this.current=0},e}(),Gj=Gk.plugins.canvas,Kj=Gk.interface,Yj="0.7",Xj=.01,$j=.93,Zj=-1.7,Qj=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return f(t,e),t.prototype.insert=function(t){return t.bbox=t.getBBox(),e.prototype.insert.call(this,t),this},t.prototype.remove=function(t){return t.bbox?(e.prototype.remove.call(this,t),t.bbox=null,this):this},t.prototype.toBBox=function(e){return e.bbox},t}(Ij),Jj=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return f(t,e),t.prototype.compareMinX=function(e,t){return e.x-t.x},t.prototype.compareMinY=function(e,t){return e.y-t.y},t}(Qj),eW=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return f(t,e),t.prototype.compareMinX=function(e,t){var n=e.getBBox(),i=t.getBBox();return n.minX-i.minX},t.prototype.compareMinY=function(e,t){var n=e.getBBox(),i=t.getBBox();return n.minY-i.minY},t}(Qj),tW=function(){function e(e){var t=this;this.config={zoomMultiplier:.5,objectSnapDistance:15,minContainerDimension:50,defaultTextNodeDimensions:{width:250,height:60},defaultFileNodeDimensions:{width:400,height:400}},this.requestUpdateFileOpen=Aw(this.updateFileOpen.bind(this),200),this.zIndexCounter=1,this.isHoldingSpace=!1,this.readonly=!1,this.history=new Wj(100),this.data={},this.requestPushHistory=Aw(this.pushHistory.bind(this),250,!0),this.x=0,this.y=0,this.zoom=0,this.scale=1,this.tx=0,this.ty=0,this.tZoom=0,this.finishViewportAnimation=!1,this.zoomToFitQueued=!1,this.screenshotting=!1,this.nodes=new Map,this.nodeIndex=new Jj,this.edges=new Map,this.edgeIndex=new eW,this.edgeFrom=new Ee,this.edgeTo=new Ee,this.staleSelection=null,this.selection=new Set,this.selectionChanged=!1,this.keys={},this.isDragging=!1,this.viewportChanged=!0,this.moved=new Set,this.dirty=new Set,this.frame=0,this.wasAnimating=!1,this.pauseAnimation=0,this.lastNodesInViewport=new Set,this.lastEdgesInViewport=new Set,this.onGlobalKeydown=function(e){if(" "===e.key&&!t.isHoldingSpace){if(1===t.selection.size){var n=Array.from(t.selection)[0];if(n instanceof lW&&n.isEditing)return}t.wrapperEl.appendChild(t.moverEl),t.moverEl.style.zIndex=String(t.zIndexCounter+4),t.isHoldingSpace=!0}},this.onGlobalKeyup=function(e){" "===e.key&&(t.moverEl.detach(),t.isHoldingSpace=!1)},this.pointer={x:0,y:0},this.pointerFrame=0,this.app=e.app,this.view=e,this.menu=new Tj(this);var n=this.wrapperEl=e.contentEl.createDiv({cls:"canvas-wrapper",attr:{tabIndex:-1}});n.onNodeInserted((function(){return t.onResize()})),n.addEventListener("keydown",this.onKeydown.bind(this)),n.addEventListener("pointerdown",this.onPriorityPointerdown.bind(this),{capture:!0}),n.addEventListener("pointerdown",this.onPointerdown.bind(this)),n.addEventListener("dblclick",this.onDoubleClick.bind(this)),n.addEventListener("contextmenu",this.onContextMenu.bind(this)),n.addEventListener("wheel",this.onWheel.bind(this)),$w.isMobile||n.addEventListener("pointermove",this.onPointermove.bind(this)),n.addEventListener("touchstart",(function(e){return e.stopPropagation()}));var i=n.createSvg("svg","canvas-background"),r=Ce(16);this.backgroundPatternEl=i.createSvg("pattern",{attr:{id:r,patternUnits:"userSpaceOnUse"}},(function(e){e.createSvg("circle",{attr:{cx:Yj,cy:Yj,r:Yj}})})),i.createSvg("rect",{attr:{x:"0",y:"0",width:"100%",height:"100%",fill:"url(#".concat(r,")")}}),(this.moverEl=createDiv("canvas-mover")).addEventListener("pointerdown",this.handleMoverPointerdown.bind(this)),this.cardMenuEl=n.createDiv("canvas-card-menu",(function(e){e.createDiv({cls:"canvas-card-menu-button mod-draggable"},(function(e){tD(e,Gj.actionDragToAddCard(),{placement:"top"}),oT(e,"lucide-sticky-note"),e.addEventListener("click",(function(){t.createTextNode({pos:t.posCenter(),position:"center"})})),e.addEventListener("pointerdown",(function(e){var n=t.config.defaultTextNodeDimensions;t.dragTempNode(e,n,(function(e){t.deselectAll(),t.createTextNode({pos:e,size:n})}))}))})),e.createDiv({cls:"canvas-card-menu-button mod-draggable"},(function(e){tD(e,Gj.actionDragToAddNote(),{placement:"top"}),oT(e,"lucide-file-text"),e.addEventListener("click",(function(){new hj(t,(function(e){t.createFileNode({pos:t.posCenter(),file:e})})).showAttachments(!1).open()})),e.addEventListener("pointerdown",(function(e){var n=t.config.defaultFileNodeDimensions;t.dragTempNode(e,n,(function(e){new hj(t,(function(i){t.createFileNode({pos:e,size:n,file:i})})).showAttachments(!1).open()}))}))})),e.createDiv({cls:"canvas-card-menu-button mod-draggable"},(function(e){tD(e,Gj.actionDragToAddMedia(),{placement:"top"}),oT(e,"lucide-file-image"),e.addEventListener("click",(function(){new hj(t,(function(e){t.createFileNode({pos:t.posCenter(),position:"center",file:e})})).showMarkdownAndCanvas(!1).open()})),e.addEventListener("pointerdown",(function(e){var n=t.config.defaultFileNodeDimensions;t.dragTempNode(e,n,(function(e){new hj(t,(function(i){t.createFileNode({pos:e,size:n,file:i})})).showMarkdownAndCanvas(!1).open()}))}))}))})),this.canvasControlsEl=n.createDiv("canvas-controls",(function(e){e.createDiv("canvas-control-group",(function(e){e.createDiv("canvas-control-item",(function(e){t.quickSettingsButton=e,t.setReadonly(t.readonly),e.addEventListener("click",(function(e){if(t.readonly)t.setReadonly(!t.readonly),t.view.saveLocalData();else{var n=new KL;t.showQuickSettingsMenu(n),n.showAtMouseEvent(e)}}))}))})),e.createDiv("canvas-control-group",(function(e){e.createDiv("canvas-control-item",(function(e){oT(e,"lucide-plus"),tD(e,Gk.commands.zoomIn(),{placement:"left"}),e.addEventListener("click",(function(){t.zoomBy(t.config.zoomMultiplier)}))})),e.createDiv("canvas-control-item",(function(e){oT(e,"lucide-rotate-cw"),tD(e,Gk.commands.resetZoom(),{placement:"left"}),e.addEventListener("click",(function(){t.zoomBy(-t.zoom)}))})),e.createDiv("canvas-control-item",(function(e){oT(e,"lucide-maximize");var n=TI(SI(["Shift"],"1"));tD(e,Gj.actionZoomToFit()+"\n(".concat(n,")"),{placement:"left"}),e.addEventListener("click",(function(){t.zoomToFit()}))})),e.createDiv("canvas-control-item",(function(e){oT(e,"lucide-minus"),tD(e,Gk.commands.zoomOut(),{placement:"left"}),e.addEventListener("click",(function(){t.zoomBy(-t.config.zoomMultiplier)}))}))})),e.createDiv("canvas-control-group",(function(e){e.createDiv("canvas-control-item",(function(e){t.undoBtnEl=e,oT(e,"lucide-undo-2"),tD(e,Gk.setting.mobileToolbar.optionUndo(),{placement:"left"}),e.addEventListener("click",(function(){t.undo()}))})),e.createDiv("canvas-control-item",(function(e){t.redoBtnEl=e,oT(e,"lucide-redo-2"),tD(e,Gk.setting.mobileToolbar.optionRedo(),{placement:"left"}),e.addEventListener("click",(function(){t.redo()}))}))})),$w.isDesktop&&e.createDiv("canvas-control-group",(function(e){e.createDiv("canvas-control-item",(function(e){oT(e,"lucide-help-circle"),tD(e,Gj.labelCanvasHelp(),{placement:"left"}),e.addEventListener("click",(function(){new __(t).open()}))}))}))}));var o=this.canvasEl=n.createDiv("canvas");this.edgeContainerEl=o.createSvg("svg","canvas-edges"),this.edgeEndContainerEl=o.createSvg("svg","canvas-edges"),this.app.dragManager.handleDrop(n,(function(e,n,i){if(n){if(!i)switch(n.type){case"file":case"link":(u=n.file)instanceof wA&&t.createFileNode({pos:t.posFromEvt(e),file:u}),t.wrapperEl.focus();break;case"files":var r=n.files;if(r.length){for(var o=new Set,a=0,s=r;a0?(r.x=-s.x,"right"===t&&(r.x+=o)):("up"===t||"down"===t)&&s.y>0&&(r.y=-s.y,"down"===t&&(r.x+=o))}for(var l=0,c=n;ln.maxX-n.minX||e.maxY-e.minY>n.maxY-n.minY?this.zoomToBbox(e):(e.minXn.maxX&&(this.tx=this.x+e.maxX-n.maxX),e.maxY>n.maxY&&(this.ty=this.y+e.maxY-n.maxY),this.markViewportChanged())},Object.defineProperty(e.prototype,"gridSpacing",{get:function(){var e=this.zoom;return e<-3.3?160:e<-2.16?80:e<-.91?40:20},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"snapDistance",{get:function(){return Math.ceil(this.config.objectSnapDistance/this.scale)},enumerable:!1,configurable:!0}),e.prototype.posFromEvt=function(e){return this.posFromDom(this.domPosFromEvt(e))},e.prototype.domPosFromEvt=function(e){var t=this.canvasRect,n=t.cx,i=t.cy;return j_(e.clientX-n,e.clientY-i)},e.prototype.domPosFromClient=function(e){var t=this.canvasRect,n=t.cx,i=t.cy;return j_(e.x-n,e.y-i)},e.prototype.posFromClient=function(e){return this.posFromDom(this.domPosFromClient(e))},e.prototype.posFromDom=function(e){var t=this,n=t.x,i=t.y,r=t.scale;return j_(n+e.x/r,i+e.y/r)},e.prototype.domFromPos=function(e){var t=this,n=t.x,i=t.y,r=t.scale;return j_((e.x-n)*r,(e.y-i)*r)},e.prototype.posCenter=function(){return this.posFromDom(j_(0,0))},e.prototype.posInViewport=function(e){var t=this.canvasRect,n=t.minX,i=t.minY,r=t.maxX,o=t.maxY;return e.x>=n||e.x<=r||e.y>=i||e.y<=o},e.prototype.getViewportNodes=function(e){var t=this.getIntersectingNodes(this.getViewportBBox());if(e){var n=this.selection;t=t.filter((function(e){return!n.has(e)}))}return t},e.prototype.hitTestNode=function(e,t){void 0===t&&(t=0);var n=this.nodeIndex.search(ij(Q_(e.x,e.y,e.x,e.y),t));return 0===n.length?null:(n.sort((function(e,t){return t.zIndex-e.zIndex})),n[0])},e.prototype.addNode=function(e){this.nodes.set(e.id,e),this.requestFrame(),this.canvasPlaceholderEl&&(this.canvasPlaceholderEl.detach(),this.canvasPlaceholderEl=null)},e.prototype.removeNode=function(e){for(var t=0,n=this.getEdgesForNode(e);t0&&t.height>0&&e.height!==t.height&&(this.y=this.ty+=(t.height-e.height)/2/this.scale),$w.isMobile&&1===this.selection.size){var n=Array.from(this.selection)[0];n instanceof lW&&n.isEditing&&this.panIntoView(n.getBBox())}this.viewportChanged=!0,this.requestFrame(),this.canvasRect.width>0&&this.zoomToFitQueued&&(this.zoomToFitQueued=!1,this.finishViewportAnimation=!0,this.zoomToFit())},e.prototype.getZIndex=function(){var e=this,t=e.menu,n=e.cardMenuEl,i=e.canvasControlsEl,r=this.zIndexCounter+=1,o=(r+1).toString();return n.style.zIndex=o,i.style.zIndex=o,t.updateZIndex(r+3),r},e.prototype.createTextNode=function(e){var t=e.pos,n=e.size,i=e.position,r=e.text,o=e.save,a=e.focus,s=new fW(this);return n||(n=this.config.defaultTextNodeDimensions),s.moveAndResize(sj(t,n,i)),r&&s.setText(r),this.addNode(s),!1!==o&&this.requestSave(),!1!==a&&(s.attach(),s.render(),this.selectOnly(s),s.startEditing()),s},e.prototype.createFileNode=function(e){var t=e.pos,n=e.size,i=e.position,r=e.file,o=e.subpath,a=e.save,s=e.focus,l=new dW(this);return n||(n=this.config.defaultFileNodeDimensions),l.moveAndResize(sj(t,n,i)),l.setFile(r,o),this.addNode(l),!1!==a&&this.requestSave(),!1!==s&&this.selectOnly(l),l},e.prototype.createFileNodes=function(e,t){for(var n=t.x,i=t.y,r=this.config.defaultFileNodeDimensions,o=r.width,a=r.height,s=0,l=[],c=0,u=e;c0){for(var N=0,R=Array.from(L);N1?(re.blur(),re.select(),te=!0):J.length>1&&1===ee.size&&(re.deselect(),re.focus(),te=!0):(1===ee.size?re.focus():re.select(),te=!0)}if($w.isMobile){var le=null,ce=Array.from(ee);1===ce.length&&ce[0]instanceof lW&&(le=ce[0]),t.nodeInteractionLayer.setTarget(le)}}t.staleSelection=null,t.selectionChanged=!1,(te||r||Array.from(t.selection).some((function(e){return L.has(e)})))&&t.menu.render(te),L.clear(),t.nodeInteractionLayer.render()})))},e.prototype.cancelFrame=function(){var e=this,t=e.frameWin,n=e.frame,i=e.pointerFrame,r=e.pointerFrameWin;n&&t&&(t.cancelAnimationFrame(n),this.frame=0,this.frameWin=null),i&&r&&(r.cancelAnimationFrame(i),this.pointerFrame=0,this.pointerFrameWin=null)},e.prototype.getViewportBBox=function(){var e=this.canvasRect,t=this.posFromDom(j_(e.minX,e.minY)),n=this.posFromDom(j_(e.maxX,e.maxY));return{minX:t.x,minY:t.y,maxX:n.x,maxY:n.y}},e.prototype.virtualize=function(){var e=this,t=e.screenshotting,n=e.lastNodesInViewport,i=e.lastEdgesInViewport,r=this.getViewportBBox(),o=this.getIntersectingNodes(r),a=this.getIntersectingEdges(r);t&&(o=Array.from(this.nodes.values()),a=Array.from(this.edges.values()));var s=new Set(o),l=new Set(a),c=this.selection;1===c.size&&c.forEach((function(e){e instanceof lW&&s.add(e)}));for(var u=0,h=0,p=o;h0&&this.requestFrame()},e.prototype.rerenderViewport=function(){var e=this;this.lastNodesInViewport.forEach((function(t){return e.markDirty(t)}))},e.prototype.setState=function(e){var t=e.x,n=e.y,i=e.zoom;Number.isNumber(t)&&Number.isNumber(n)&&Number.isNumber(i)&&(this.setViewport(t,n,i),this.zoomToFitQueued=!1)},e.prototype.getState=function(){var e=this;return{x:e.tx,y:e.ty,zoom:e.tZoom}},e.prototype.handleCut=function(e){if(!this.readonly&&this.canvasEl.doc.activeElement===this.wrapperEl){this.handleCopy(e);for(var t=this.selection,n=0,i=Array.from(t);n0)this.app.importAttachments(i,null).then((function(e){t.createFileNodes(e,n),t.requestSave()}));else{var r=e.clipboardData.getData("obsidian/canvas");if(r){var o=void 0;try{o=JSON.parse(r)}catch(e){return void console.error(e)}var a=o.nodes,s=o.edges,l=o.center;if(!a||!Array.isArray(a))return;if(!s||!Array.isArray(s))return;var c=null;l&&(c={x:n.x-l.x,y:n.y-l.y});var u=this.cloneData(o,c),h=this.importData(u,!1);return this.deselectAll(),this.requestSave(),void h.forEach((function(e){return t.select(e)}))}var p=e.clipboardData.getData("text/plain");if(Yw(p))return this.createLinkNode({pos:n,position:"center",url:p}),void this.requestSave();p&&this.createTextNode({pos:n,position:"center",text:p})}}},e.prototype.toggleGridSnapping=function(e){this.options.snapToGrid=e,this.view.plugin.saveOptions()},e.prototype.toggleObjectSnapping=function(e){this.options.snapToObjects=e,this.view.plugin.saveOptions()},e.prototype.getSnapping=function(e,t,n,i){var r,o,a=this.options,s=a.snapToGrid,l=0,c=0;if(a.snapToObjects){var u=mj(e),h=mj(t),p=this.snapDistance;(r=vj(u,h,n?p:0,"x"))&&(l+=r.delta),(o=vj(u,h,i?p:0,"y"))&&(c+=o.delta)}if(s&&(!r||!o)){var d=nj(e),f=this.gridSpacing;!r&&n&&(l+=Math.round(d.minX/f)*f-d.minX),!o&&i&&(c+=Math.round(d.minY/f)*f-d.minY)}return(r||o)&&this.renderSnapPoints(r,o,l,c),j_(l,c)},e.prototype.endSnapPointRendering=function(){this.snapContainerEl&&(this.snapContainerEl.detach(),this.snapContainerEl=null)},e.prototype.clearSnapPoints=function(){this.snapContainerEl&&this.snapContainerEl.empty()},e.prototype.renderSnapPoints=function(e,t,n,i){var r=this.snapContainerEl;r||(r=this.snapContainerEl=this.canvasEl.createSvg("svg","canvas-snaps")),r.style.zIndex=String(this.zIndexCounter+2);var o=function(e){return j_(e.x+n,e.y+i)},a=[];e&&(a=a.concat(e.matches)),t&&(a=a.concat(t.matches));for(var s=0,l=a;s1&&t.selection.has(r)?i.setTarget(null):i.target!==r&&i.setTarget(r)}}))}},e.prototype.onPointermove=function(e){"touch"!==e.pointerType&&this.interactionHitTest(e)},e.prototype.onTouchdown=function(e){var t=this;if(e.isPrimary&&!e.defaultPrevented&&!CC(e,this.wrapperEl,!0)){e.preventDefault();var n=e.targetNode,i=n===this.wrapperEl,r=n===this.menu.selection.selectionEl,o=e.win,a=e,s=function(e){return{id:e.pointerId,x:e.clientX,y:e.clientY,pos:t.posFromEvt(e)}},l=[s(e)],c=!1,u={},h=null,p=null;if(!i&&!r)for(var d=0,f=Array.from(this.nodes.values());d5){if(v&&o.clearTimeout(v),g){if(i){var h=e.shiftKey,d=new Set(t.selection);h||t.deselectAll(),u=t.handleDragToSelect(e,h,d)}else r?u=t.handleSelectionDrag(e,n):p&&(u=t.handleSelectionDrag(e,n,p));if(!u)return u={},void C()}else t.setDragging(!0);c=!0}if(e.pointerId===a.pointerId&&u.move&&u.move(e),!g)if(1===l.length){var f=l[0],m=t.posFromClient(f);t.panBy(f.pos.x-m.x,f.pos.y-m.y)}else{var y=l[0],b=l[1],w=t.posFromClient(y),k=t.posFromClient(b),x=j_((y.pos.x+b.pos.x)/2,(y.pos.y+b.pos.y)/2),E=Y_(y.pos,b.pos),S=Y_(w,k);if(E>0&&S>0){var M=t.scale*S/E,T=Math.log2(M);T=Math.clamp(T,-4,1),t.zoom=t.tZoom=T,t.scale=Math.pow(2,T),t.markViewportChanged(),t.pauseAnimation=Date.now()+200}w=t.posFromClient(y),k=t.posFromClient(b);var D=j_((w.x+k.x)/2,(w.y+k.y)/2);t.panBy(x.x-D.x,x.y-D.y),y.pos=t.posFromClient(y),b.pos=t.posFromClient(b)}}}},w=function(e){if("touch"===e.pointerType){if(e.pointerId===a.pointerId&&!c)return i&&t.deselectAll(),void C();var n=l.find((function(t){return t.id===e.pointerId}));n&&(n.x=e.clientX,n.y=e.clientY,e.pointerId===a.pointerId&&u.end&&u.end(e),l.remove(n),0===l.length&&C())}},k=function(e){e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation(),h=e},C=function(){if(o.removeEventListener("pointerdown",y),o.removeEventListener("pointermove",b),o.removeEventListener("pointerup",w),o.removeEventListener("pointercancel",w),o.removeEventListener("contextmenu",k,{capture:!0}),v&&o.clearTimeout(v),u.cleanup&&u.cleanup(),t.setDragging(!1),!c&&(!g&&r&&t.deselectAll(),g)){var e=h||a;e.targetNode.dispatchEvent(new MouseEvent("contextmenu",e))}};o.addEventListener("pointerdown",y),o.addEventListener("pointermove",b),o.addEventListener("pointerup",w),o.addEventListener("pointercancel",w),o.addEventListener("contextmenu",k,{capture:!0})}},e.prototype.handleDragToSelect=function(e,t,n){var i=this,r=this.posFromEvt(e),o=new Ej(this);return this.handleDragWithPan(e,{move:function(e){var a=i.posFromEvt(e);o.update(J_(r,a));var s={minX:Math.min(r.x,a.x),minY:Math.min(r.y,a.y),maxX:Math.max(r.x,a.x),maxY:Math.max(r.y,a.y)},l=i.getIntersectingNodes(s);l=l.filter((function(e){return!(e instanceof bW)||rj(s,e.getBBox())}));var c=new Set(l);if(t){var u=new Set(n);c.forEach((function(e){u.has(e)?u.delete(e):u.add(e)})),c=u}i.selectAll(c)},end:function(e){if(pD.isModifier(e,"Mod")){var t=i.view.plugin.options.defaultModDragBehavior,n=tj(o.bbox);switch(t){case"card":i.createTextNode({pos:n,size:n}),o.hide();break;case"note":new hj(i,(function(e){i.createFileNode({pos:n,size:n,file:e}),o.hide()})).showAttachments(!1).open();break;case"media":new hj(i,(function(e){i.createFileNode({pos:n,size:n,file:e}),o.hide()})).showMarkdownAndCanvas(!1).open();break;case"webpage":new iW(i.app,"",(function(e){i.createLinkNode({pos:n,size:n,url:e}),o.hide()})).open();break;case"group":i.createGroupNode({pos:n,size:n}),o.hide();break;default:var r=new KL;i.showCreationMenu(r,n,n),r.onHide((function(){o.hide()})),r.showAtMouseEvent(e)}}else o.hide();$_(i.wrapperEl,"click")},cancel:function(){i.selectAll(n),o.hide()}})},e.prototype.onDoubleClick=function(e){if(!(e.defaultPrevented||e.targetNode!==this.wrapperEl||this.isDragging||this.readonly)){var t=this.posFromEvt(e);this.createTextNode({pos:t,position:"center"})}},e.prototype.onContextMenu=function(e){var t=this;if(!e.defaultPrevented&&e.targetNode===this.wrapperEl&&!this.readonly){e.preventDefault(),this.deselectAll();var n=this.posFromEvt(e),i=new KL;this.showCreationMenu(i,n),i.addSeparator(),this.history.canUndo()&&i.addItem((function(e){e.setTitle(Gk.setting.mobileToolbar.optionUndo()).setSection("history").setIcon("lucide-undo-2").onClick((function(){t.undo()}))})),this.history.canRedo()&&i.addItem((function(e){e.setTitle(Gk.setting.mobileToolbar.optionRedo()).setSection("history").setIcon("lucide-redo-2").onClick((function(){t.redo()}))})),$w.isDesktopApp&&i.addSeparator().addItem((function(t){t.setTitle(Gk.interface.menu.paste()).setSection("clipboard").setIcon("lucide-clipboard-check").onClick((function(){e.win.electron.remote.getCurrentWebContents().paste()}))})),this.showQuickSettingsMenu(i),i.showAtMouseEvent(e)}},e.prototype.setReadonly=function(e){var t=this.quickSettingsButton;if(this.readonly=e,t){var n=e?"lucide-lock":"lucide-settings",i=e?Gj.labelDisableReadonly():Gj.labelCanvasSettings();oT(t,n),tD(t,i,{placement:"left"}),this.wrapperEl.toggleClass("mod-readonly",e),this.menu.render(!0)}},e.prototype.showQuickSettingsMenu=function(e){var t=this,n=this.view.plugin,i=n.options;e.addItem((function(e){return e.setSection("canvas").setTitle(Gj.optionSnapToGrid()).setIcon("lucide-grid").setChecked(!!i.snapToGrid).onClick((function(){i.snapToGrid=!i.snapToGrid,n.saveOptions()}))})).addItem((function(e){return e.setSection("canvas").setTitle(Gj.optionSnapToObjects()).setIcon("snap-to-object").setChecked(!!i.snapToObjects).onClick((function(){i.snapToObjects=!i.snapToObjects,n.saveOptions()}))})).addItem((function(e){return e.setSection("canvas").setTitle(Gj.labelReadonly()).setIcon("lucide-lock").setChecked(t.readonly).onClick((function(){t.setReadonly(!t.readonly),t.view.saveLocalData()}))}))},e.prototype.showCreationMenu=function(e,t,n){var i=this;e.addItem((function(e){e.setTitle(Gj.actionAddCard()).setSection("create").setIcon("lucide-sticky-note").onClick((function(){i.createTextNode({pos:t,size:n})}))})).addItem((function(e){e.setTitle(Gj.actionAddNote()).setSection("create").setIcon("lucide-file-text").onClick((function(){new hj(i,(function(e){i.createFileNode({pos:t,size:n,file:e})})).showAttachments(!1).open()}))})).addItem((function(e){e.setTitle(Gj.actionAddMedia()).setSection("create").setIcon("lucide-file-image").onClick((function(){new hj(i,(function(e){i.createFileNode({pos:t,size:n,file:e})})).showMarkdownAndCanvas(!1).open()}))})).addItem((function(e){e.setTitle(Gj.actionAddWebsite()).setSection("create").setIcon("lucide-link").onClick((function(){new iW(i.app,"",(function(e){i.createLinkNode({pos:t,size:n,url:e})})).open()}))})).addItem((function(e){e.setTitle(Gj.actionCreateGroup()).setSection("create").setIcon("create-group").onClick((function(){i.createGroupNode({pos:t,size:n})}))}))},e.prototype.smartZoom=function(e){var t=this.posFromEvt(e),n=Q_(t.x,t.y,t.x,t.y);if(this.selection.size>0&&rj(this.menu.selection.bbox,n))return void this.zoomToSelection();var i=this.getIntersectingNodes(n);if(i.length>0){i.sort((function(e,t){return e.width*e.height-t.width*t.height}));var r=i[0].bbox;this.zoomToBbox(r)}else this.zoomToFit()},e.prototype.onWheel=function(e){if(!this.isDragging){var t=this.wrapperEl,n=this.options.defaultWheelBehavior,i=e.ctrlKey||e.metaKey,r=i||this.isHoldingSpace;if("zoom"===n&&(r=!r),$w.isMacOS&&e.ctrlKey&&0===e.deltaX&&0===e.deltaY)this.smartZoom(e);else if(i||!CC(e,t)){e.preventDefault();var o=e.deltaX,a=e.deltaY,s=e.deltaMode;s&&(s===e.DOM_DELTA_LINE?(o*=40,a*=40):s===e.DOM_DELTA_PAGE&&(o*=800,a*=800)),r?(this.zoomBy(-a/300,a<0?this.domPosFromEvt(e):void 0),this.pauseAnimation=Date.now()+200):e.shiftKey&&0===o?(this.tx+=a/this.scale*$j,this.markViewportChanged()):(this.tx+=o/this.scale*$j,this.ty+=a/this.scale*$j,this.markViewportChanged());var l=e.wheelDeltaX,c=e.wheelDeltaY;0===o&&Number.isInteger(c)&&120===Math.abs(c)&&c!==-3*e.deltaY||0===a&&Number.isInteger(l)&&120===Math.abs(l)&&l!==-3*e.deltaX||(this.finishViewportAnimation=!0)}}},e.prototype.handleMoverPointerdown=function(e){var t=this;if(e.isPrimary&&0===e.button){var n=this.posFromEvt(e);X_(e,(function(){return{move:function(e){var i=t.posFromEvt(e);t.panBy(n.x-i.x,n.y-i.y)}}}))}},e.prototype.onSelectionContextMenu=function(e){var t=this;if(!e.defaultPrevented){e.preventDefault();var n=this.readonly,i=new KL;n||i.addItem((function(e){e.setTitle(Kj.deleteActionShortName()).setIcon("lucide-trash-2").onClick((function(){t.deleteSelection()}))})),i.addItem((function(e){e.setTitle(Gj.actionZoomToSelection()).setIcon("zoom-to-selection").onClick((function(){t.zoomToSelection()}))})),n||i.addItem((function(e){e.setTitle(Gj.actionCreateGroup()).setIcon("create-group").onClick((function(){var e=tj(ij(nj(Array.from(t.selection.values()).map((function(e){return e.getBBox()}))),20));t.createGroupNode({pos:e,size:e})}))})),i.addSeparator(),!n&&$w.isDesktopApp&&i.addSeparator().addItem((function(t){t.setTitle(Gk.interface.menu.cut()).setIcon("lucide-scissors").onClick((function(){e.win.electron.remote.getCurrentWebContents().cut()}))})).addItem((function(t){t.setTitle(Gk.interface.menu.copy()).setIcon("lucide-copy").onClick((function(){e.win.electron.remote.getCurrentWebContents().copy()}))})).addItem((function(t){t.setTitle(Gk.interface.menu.paste()).setIcon("lucide-clipboard-check").onClick((function(){e.win.electron.remote.getCurrentWebContents().paste()}))})),i.showAtMouseEvent(e)}},e.prototype.canSnap=function(e){return $w.isMacOS?!e.ctrlKey:!e.altKey},e.prototype.dragTempNode=function(e,t,n){var i=this;e.isPrimary&&0===e.button&&(e.preventDefault(),X_(e,(function(){var r=new uW(i);return r.resize(t),r.attach(),r.nodeEl.addClass("is-dragging"),i.handleDragWithPan(e,{move:function(e){i.clearSnapPoints();var n=i.posFromEvt(e),o=m(m({},aj(n,t)),t);if(i.canSnap(e)){var a=[o].map(ej),s=i.getViewportNodes().filter((function(e){return!(e instanceof bW)})).map(ej),l=i.getSnapping(a,s,!0,!0);o.x+=l.x,o.y+=l.y}r.moveTo(o),r.render()},end:function(e){i.posInViewport(i.domPosFromEvt(e))&&n(j_(r.x,r.y))},cleanup:function(){r.detach()}})})))},e.prototype.handleDragWithPan=function(e,t){var n=this,i=this.wrapperEl.getBoundingClientRect();this.setDragging(!0);var r=e.win,o=0,a=0,s=0;return m(m({},t),{move:function(e){var l,c=e.clientX,u=e.clientY,h=ij(ej(i),-30);o=0,a=0,ch.maxX&&(o=c-h.maxX),uh.maxY&&(a=u-h.maxY),0!==o||0!==a?(o=Math.clamp(o,-40,40),a=Math.clamp(a,-40,40),s||(s=r.setInterval((function(){var e=.5/Math.sqrt(n.scale);n.panBy(o*e,a*e)}),1e3/60))):s&&(r.clearInterval(s),s=0),null===(l=t.move)||void 0===l||l.call(t,e)},cleanup:function(){var e;s&&(r.clearInterval(s),s=0),n.endSnapPointRendering(),n.setDragging(!1),null===(e=t.cleanup)||void 0===e||e.call(t)}})},e.prototype.handleSelectionDrag=function(e,t,n){var i=this;if(!this.readonly){var r=this.posFromEvt(e);n&&!this.selection.has(n)&&this.selectOnly(n);var o=new Set;this.selection.forEach((function(e){if(e instanceof lW&&(o.add(e),e instanceof bW))for(var t=0,n=i.getContainingNodes(e.getBBox());tMath.abs(a.y)?a.y=0:a.x=0),!i.canSnap(e))return a;var s=h,l=s.filter((function(e){return e instanceof bW}));if(l.length){s=[];for(var c=function(e){l.some((function(t){return t!==e&&rj(t.getBBox(),e.getBBox())}))||s.push(e)},u=0,p=l;u0==e instanceof bW})).map(ej),v=i.getSnapping(m,g,0!==a.x,0!==a.y);return function(e,t){return{x:e.x+t.x,y:e.y+t.y}}(a,v)};return this.handleDragWithPan(e,{move:function(e){i.clearSnapPoints(),d(e);for(var t=m(e),n=0,r=h;nd.right&&(l=d.right),c>d.bottom&&(c=d.bottom),f=G_(Math.round(o),Math.round(a),Math.round(l-o),Math.round(c-a)),m=n.win.electron.remote,[4,m.getCurrentWebContents().capturePage(f)];case 4:return g=y.sent(),v=N(g.toPNG()),[4,window.require("original-fs").promises.writeFile(e,v)];case 5:return y.sent(),b=new gD(createFragment((function(t){t.createEl("p",{text:e}),t.createEl("p").createEl("button",{cls:"mod-cta",text:$w.isMacOS?Gk.plugins.openWithDefaultApp.actionShowInFolderMac():Gk.plugins.openWithDefaultApp.actionShowInFolder()}).addEventListener("click",(function(){b.hide(),electron.shell.showItemInFolder(e)}))})),1e4),[3,7];case 6:return this.app.statusBar.containerEl.show(),n.removeClass("is-screenshotting"),n.removeClass("is-text-garbled"),[7];case 7:return[2]}}))}))},e.prototype.generateHDImage=function(){return v(this,void 0,void 0,(function(){var e,t,n,i,r,o,a,s,l,c,u,h,p,d,f,m,g,b,w,k,C,x,E,S,M,T,D,A,L,P,I,F,O,R,H,V,z,q,U,_,j,W,G,K,Y,X,$,Z,Q,J,ee,te,ne=this;return y(this,(function(ie){switch(ie.label){case 0:return e=this.wrapperEl,0===this.nodes.size?(new gD(Gj.msgExportFailedEmptyCanvas()),[2]):(t=e.win,n=e.doc,i=t.electron.remote,r=i.getCurrentWebContents(),o=Math.pow(1.2,r.getZoomLevel()),a=t.devicePixelRatio,s=Math.round(a/o*1e5)/1e5,16284,l=ij(nj(Array.from(this.nodes.values()).map(ej)),100),c=l.maxX-l.minX,u=l.maxY-l.minY,h=Math.min(2,16284/s/c,16284/s/u),p="",d=Math.min(1,h),f=Math.log2(d),m=Math.log2(h),g=!0,b=!1,w="full",[4,new Promise((function(e){var t=new dD(ne.app);t.setTitle(Gj.actionExportPng()),t.modalEl.addClass("mod-narrow");var n,i,r=t.contentEl;r.createEl("p",{cls:"u-muted",text:Gj.labelExportPngDesc({title:ne.view.file.basename})}),new aL(r).setName(Gj.optionExportPngFrame()).setDesc(Gj.optionExportPngFrameDesc()).addDropdown((function(e){return e.addOption("full",Gj.optionExportPngFrameFull()).addOption("viewport",Gj.optionExportPngFrameViewport()).setValue(w).onChange((function(e){var t="full"===(w=e);n.setVisibility(t),i.setVisibility(t)}))}));var o=function(){return n.setDesc(Gj.labelExportPngDimensions({dimensions:"".concat(Math.ceil(c*d*s).toLocaleString(),"px x ").concat(Math.ceil(u*d*s).toLocaleString(),"px")}))};n=new aL(r).setName(Gj.optionExportPngZoom()).setDesc(Gj.optionExportPngZoomDesc()).addSlider((function(e){return e.setLimits(Math.min(-1,m),m,"any").setValue(f).setDynamicTooltip().onChange((function(e){f=e,d=Math.pow(2,e),o()})).getValuePretty=function(){return Math.pow(2,e.getValue()).toFixed(2)}})),o(),i=new aL(r).setName(Gj.optionExportPngShowLogo()).setDesc(Gj.optionExportPngShowLogoDesc()).addToggle((function(e){return e.setValue(g).onChange((function(e){return g=e}))})),new aL(r).setName(Gj.optionExportPngPrivacyMode()).setDesc(Gj.optionExportPngPrivacyModeDesc()).addToggle((function(e){return e.setValue(b).onChange((function(e){return b=e}))})),r.createDiv("modal-button-container",(function(n){n.createEl("button",{cls:"mod-cta",text:Gk.dialogue.buttonSave()}).addEventListener("click",(function(){return v(ne,void 0,void 0,(function(){return y(this,(function(n){return t.close(),e(),[2]}))}))}))})),t.open()}))]);case 1:return ie.sent(),[4,i.dialog.showSaveDialog({defaultPath:this.view.file.basename+".png",filters:[{name:"PNG Files",extensions:["png"]},{name:"All Files",extensions:["*"]}],properties:["showOverwriteConfirmation"]})];case 2:return(k=ie.sent()).canceled||!k.filePath?[2]:(p=k.filePath)?"viewport"!==w?[3,4]:[4,this.takeScreenshot(p,b)]:[2];case 3:return ie.sent(),[2];case 4:this.deselectAll(),C=n.body,e.addClass("is-screenshotting"),b&&e.addClass("is-text-garbled"),this.screenshotting=!0,C.appendChild(e),E="",ie.label=5;case 5:return ie.trys.push([5,,16,18]),g&&(l.maxY+=80,u+=80,(x=this.canvasEl.createDiv("canvas-watermark")).setCssStyles({position:"absolute",left:l.minX+80+"px",top:l.maxY-80+"px",transform:"translate(0, -100%) scale(".concat(4/d,")"),transformOrigin:"bottom left",display:"flex",whiteSpace:"pre",alignItems:"center",gap:"3px",zIndex:"9999999"}),x.appendChild(B_(24)),x.createDiv({text:"Obsidian"})),M=5/o,e.setCssStyles({top:"".concat(M,"px"),left:"".concat(M,"px"),bottom:"".concat(M,"px"),right:"".concat(M,"px"),width:"auto",height:"auto"}),S=window.open("about:blank","_blank","popup,x=".concat(t.screenX+5,",y=").concat(t.screenY+5,",width=").concat(t.outerWidth-10,",height=").concat(t.outerHeight-10)),T=createEl("base",{href:location.href}),S.document.head.appendChild(T),S.document.title="Obsidian",WO(S),_O(S,[T],"is-popout-window").disconnect(),(D=new N_(S.document)).show(),D.setMessage("Rendering tiles..."),A=!1,D.el.createEl("button",{cls:"mod-cta",text:Gk.dialogue.buttonStop()},(function(e){e.style.marginTop="20px",e.onClickEvent((function(){A=!0}))})),this.onResize(),L=e.getBoundingClientRect(),P=Math.ceil(L.x*o+1),I=Math.ceil(L.y*o+1),F=Math.floor(L.width*o)-2,O=Math.floor(L.height*o)-2,this.zoom=this.tZoom=Math.log2(d/o),R=G_(P,I,F,O),H=F/d,V=O/d,z=Math.ceil((l.maxX-l.minX)/H),q=Math.ceil((l.maxY-l.minY)/V),U=l.minX+H/2,_=l.minY+V/2,(j=n.createElement("canvas")).width=Math.ceil(c*d*s),j.height=Math.ceil(u*d*s),W=j.getContext("2d"),this.viewportChanged=!0,this.requestFrame(),[4,sleep(500)];case 6:ie.sent(),G=z*q,K=0,Y=0,ie.label=7;case 7:if(!(Yt.zoomBreakpoint)},e.prototype.detach=function(){this.nodeEl.parentNode&&this.nodeEl.detach()},e.prototype.updateBreakpoint=function(e){},Object.defineProperty(e.prototype,"isAttached",{get:function(){return!!this.nodeEl.parentNode},enumerable:!1,configurable:!0}),e.prototype.initialize=function(){var e=this.nodeEl;e.addEventListener("click",this.onClick.bind(this)),e.addEventListener("contextmenu",this.onContextMenu.bind(this)),(this.containerEl=e.createDiv("canvas-node-container")).addEventListener("pointerdown",this.onPointerdown.bind(this))},e.prototype.setIsEditing=function(e){this.isEditing!==e&&(this.isEditing=e,this.nodeEl.toggleClass("is-editing",e))},e.prototype.isEditable=function(){return!1},e.prototype.startEditing=function(){var e=this.canvas;e.readonly||(e.selectOnly(this),e.zooms.zoomBreakpoint)},e.prototype.updateZIndex=function(){var e=this.canvas;this.zIndex!==e.zIndexCounter&&(this.zIndex=e.getZIndex()),this.renderZIndex()},e.prototype.renderZIndex=function(){var e=this.canvas,t=this.zIndex;1==e.selection.size&&e.selection.has(this)&&(t=e.zIndexCounter+1),t!==this.renderedZIndex&&(this.nodeEl.style.zIndex=t.toString(),this.renderedZIndex=t)},Object.defineProperty(e.prototype,"isFocused",{get:function(){return this.nodeEl.hasClass("is-focused")},enumerable:!1,configurable:!0}),e.prototype.focus=function(){this.nodeEl.addClass("is-focused"),this.renderZIndex()},e.prototype.blur=function(){this.nodeEl.removeClass("is-focused"),this.setIsEditing(!1),this.renderZIndex()},e.prototype.select=function(){this.nodeEl.addClass("is-selected"),this.renderZIndex()},e.prototype.deselect=function(){this.nodeEl.removeClass("is-selected"),this.renderZIndex()},e.prototype.onPointerdown=function(e){var t=this;if(e.isPrimary&&0===e.button&&!this.isEditing&&"mouse"===e.pointerType&&!this.canvas.readonly){var n=e.targetNode;n instanceof HTMLElement&&n.hasClass("inline-title")||X_(e,(function(){return t.canvas.handleSelectionDrag(e,t.nodeEl,t)}))}},e.prototype.onClick=function(e){if(!this.isEditing){var t=this.canvas;e.shiftKey?t.toggleSelect(this):t.selectOnly(this)}},e.prototype.onContextMenu=function(e){if(!this.isEditing&&!e.defaultPrevented){var t=this.canvas;if(t.selection.has(this)&&t.selection.size>1)t.onSelectionContextMenu(e);else{t.selectOnly(this);var n=(new KL).addSections(["canvas"]);this.showMenu(n),e.preventDefault(),n.showAtMouseEvent(e)}}},e.prototype.showMenu=function(e){var t=this,n=this.canvas;n.readonly||e.addItem((function(e){return e.setSection("danger").setTitle(oW.actionRemove()).setIcon("lucide-trash-2").setWarning(!0).onClick((function(){n.removeNode(t),n.requestSave()}))})),e.addItem((function(e){return e.setSection("canvas").setTitle(oW.actionZoomToSelection()).setIcon("zoom-to-selection").onClick((function(){n.zoomToSelection()}))}))},e.prototype.onResizePointerdown=function(e,t){var n=this;e.isPrimary&&0===e.button&&("mouse"===e.pointerType||this.canvas.selection.has(this))&&(e.preventDefault(),X_(e,(function(){var i=n,r=i.canvas,o=i.x,a=i.y,s=i.width,l=i.height,c=r.options,u=c.snapToGrid,h=c.snapToObjects;return r.selectOnly(n),n.nodeEl.addClass("is-dragging"),n.canvas.handleDragWithPan(e,{move:function(e){var i,c,p=r.config.minContainerDimension,d=r.posFromEvt(e);r.clearSnapPoints();var f=0,m=0,g=lj(t,d,n),v=g.source,y=g.resizeX,b=g.resizeY;if(r.canSnap(e)){if(h){var w=mj([ej(v)]),k=mj(r.getViewportNodes(!0).map(ej)),C=r.snapDistance;y&&(i=vj(w,k,C,"x"))&&(f=i.delta),b&&(c=vj(w,k,C,"y"))&&(m=c.delta)}if(u){var x=r.gridSpacing;y&&!i&&(f=Math.round(d.x/x)*x-d.x),b&&!c&&(m=Math.round(d.y/x)*x-d.y)}}var E=d.x+f,S=d.y+m,M=ej({x:o,y:a,width:s,height:l});t.contains("top")&&(M.minY=Math.min(M.maxY-p,S),M.minY!==S&&(c=null,m=M.minY-d.y)),t.contains("left")&&(M.minX=Math.min(M.maxX-p,E),M.minX!==E&&(i=null,f=M.minX-d.x)),t.contains("bottom")&&(M.maxY=Math.max(M.minY+p,S),M.maxY!==S&&(c=null,m=M.maxY-d.y)),t.contains("right")&&(M.maxX=Math.max(M.minX+p,E),M.maxX!==E&&(i=null,f=M.maxX-d.x));var T={x:M.minX,y:M.minY,width:M.maxX-M.minX,height:M.maxY-M.minY},D=n.aspectRatio;if(0!==D){var A=T.width,L=T.height;if(y&&b){var P=Math.max(A,L*D);L=Math.max(L,A/D),(A=P)!==T.width?i=null:L!==T.height&&(c=null)}else y?L=A/D:b&&(A=L*D);if(t.includes("left")){var I=o+s-A;f+=I-T.x,T.x=I}if(t.includes("top")){var F=a+l-L;m+=F-T.y,T.y=F}t.includes("right")&&(f+=A-T.width),t.includes("bottom")&&(m+=L-T.height),T.width=A,T.height=L}(i||c)&&r.renderSnapPoints(i,c,f,m),n.moveAndResize(T)},end:function(){r.requestSave()},cancel:function(){n.moveAndResize({x:o,y:a,width:s,height:l}),r.requestSave()},cleanup:function(){n.nodeEl.removeClass("is-dragging")}})})))},e.prototype.onConnectionPointerdown=function(e,t){var n=this;e.isPrimary&&0===e.button&&("touch"!==e.pointerType||this.canvas.selection.has(this))&&(e.preventDefault(),X_(e,(function(){var i=n.canvas,r=new uW(i),o=null;i.canvasEl.addClass("is-connecting"),i.deselectAll();var a=function(e){switch(e){case"right":return"left";case"left":return"right";case"top":return"bottom"}return"top"}(t),s={side:t,node:n,end:TW},l=new AW(i,Ce(16),s,{side:a,node:r,end:DW});return i.addEdge(l),n.canvas.handleDragWithPan(e,{move:function(e){var t=i.posFromEvt(e);r.x=t.x,r.y=t.y,r.width=0,r.height=0;var c=i.getIntersectingNodes(ij(r.getBBox(),n.canvas.config.objectSnapDistance)).filter((function(e){return e!==n&&(!(e instanceof bW&&rj(e.getBBox(),n.getBBox()))&&!(n instanceof bW&&rj(n.getBBox(),e.getBBox())))}));(o=dj(t,c,i.config.objectSnapDistance))?l.update(s,{side:o.side,node:o.node,end:DW}):l.update(s,{side:a,node:r,end:DW})},end:function(e){if(o)i.requestSave();else{var t=n.app,r=t.metadataCache,c=(new KL).addSections(["action","file",""]),u=!1,h=function(){activeWindow.setTimeout((function(){u||i.removeEdge(l),u=!1}),50)};c.onHide(h);var p=function(e){l.update(s,{side:a,node:e,end:DW}),i.requestSave()},d=function(t,n){var r=i.posFromEvt(e),o=i.createFileNode({pos:r,position:a,file:t,subpath:n});p(o)},f=function(o,s){return v(n,void 0,void 0,(function(){var n,l,c,h,f,m,g,v;return y(this,(function(y){switch(y.label){case 0:return u=!0,n=i.posFromEvt(e),o?(c=QD(o),h=c.path,f=c.subpath,(m=r.getFirstLinkpathDest(h,s))?[3,2]:(g=QD(o).path,v=t.fileManager.getNewFileParent(o,g),[4,t.fileManager.createNewMarkdownFile(v,g)])):[3,3];case 1:m=y.sent(),y.label=2;case 2:return d(m,f),[3,4];case 3:l=i.createTextNode({pos:n,position:a}),p(l),y.label=4;case 4:return[2]}}))}))};if(c.addItem((function(e){return e.setTitle(oW.actionAddCard()).setSection("action").onClick((function(){return f("","")}))})).addItem((function(e){return e.setTitle(oW.actionAddNote()).setSection("action").onClick((function(){u=!0,new hj(n.canvas,(function(e){u=!0,d(e,"")}),h).open()}))})),n instanceof dW){var m=n.file,g=[];eA(r.getFileCache(m).links,(function(e){var t=QD(e.link),n=t.path,i=t.subpath,o=r.getFirstLinkpathDest(n,m.path);o&&g.push(hW(o,i))}));for(var b=0,w=n.getConnectedFiles(),k=function(e){return w.has(e)?"continue":(w.add(e),c.addItem((function(t){return t.setTitle(e).setSection("file").onClick((function(){return f(e,m.path)}))})),++b>=20?"break":void 0)},C=0,x=g;C1)t.onSelectionContextMenu(e);else{t.readonly||t.selectOnly(this);var n=(new KL).addSections(["canvas"]);this.showMenu(n,e),e.preventDefault(),n.showAtMouseEvent(e)}}},e.prototype.showMenu=function(e,t){var n=this;this.canvas.readonly||(e.addItem((function(e){return e.setSection("danger").setTitle(wW.actionRemove()).setIcon("lucide-trash-2").setWarning(!0).onClick((function(){n.canvas.removeEdge(n),n.canvas.requestSave()}))})),e.addItem((function(e){return e.setSection("canvas").setTitle(wW.actionEditLabel()).setIcon("lucide-edit").onClick((function(){return n.editLabel()}))}))),e.addItem((function(e){return e.setSection("canvas").setTitle(wW.actionFollowConnection()).setIcon("lucide-corner-down-right").onClick((function(){var e=n,i=e.canvas,r=e.from,o=e.to,a=i.posFromEvt(t),s=kW(r.node.getBBox(),r.side),l=kW(o.node.getBBox(),o.side),c="from"===(Y_(a,s)>Y_(a,l)?"to":"from")?o.node:r.node;i.zoomToBbox(c.getBBox())}))}))},e.prototype.onConnectionPointerdown=function(e){var t=this,n=this.canvas;e.isPrimary&&0===e.button&&!n.readonly&&("touch"!==e.pointerType||n.selection.has(this))&&(e.preventDefault(),X_(e,(function(){var n=t,i=n.canvas,r=n.from,o=n.to,a=i.posFromEvt(e),s=kW(r.node.getBBox(),r.side),l=kW(o.node.getBBox(),o.side),c=Y_(a,s)>Y_(a,l)?"to":"from",u="from"===c?o:r,h=new uW(i),p=null;return i.canvasEl.addClass("is-connecting"),i.deselectAll(),t.canvas.handleDragWithPan(e,{move:function(e){var n=i.posFromEvt(e);h.x=n.x,h.y=n.y,h.width=0,h.height=0;var a=i.getIntersectingNodes(ij(h.getBBox(),i.config.objectSnapDistance));a.remove(u.node),p=dj(n,a,i.config.objectSnapDistance),"from"===c?p?t.update({side:p.side,node:p.node,end:r.end},o):t.update({side:r.side,node:h,end:r.end},o):p?t.update(r,{side:p.side,node:p.node,end:o.end}):t.update(r,{side:o.side,node:h,end:o.end})},end:function(){p||i.removeEdge(t),i.requestSave()},cancel:function(){t.update(r,o)},cleanup:function(){i.canvasEl.removeClass("is-connecting"),$_(t.lineGroupEl,"click")}})})))},e}(),LW=function(){function e(e){var t=this;this.isEditing=!1,this.initialTextState="",this.edge=e;var n=e.canvas,i=this.wrapperEl=n.canvasEl.createDiv("canvas-path-label-wrapper");i.addEventListener("click",(function(i){if(!n.readonly){if(i.shiftKey)return t.blur(),void n.toggleSelect(e);var r=n.selection;1===r.size&&r.has(e)?t.isEditing||t.focus(W_(i)):n.selectOnly(e)}})),this.textareaEl=i.createDiv({parent:i,cls:"canvas-path-label",text:this.edge.label,attr:{contentEditable:!1,"data-placeholder":wW.promptAddText()}},(function(e){e.addEventListener("input",(function(){t.edge.label=e.innerText,t.edge.canvas.requestSave(!1)})),t.edge.label||setTimeout((function(){return t.focus()}))})),this.render()}return e.prototype.setText=function(e){this.textareaEl.setText(e)},e.prototype.focus=function(e){var t,n=this.textareaEl;this.isEditing=!0,n.setAttr("contenteditable",!0),n.addClass("is-editing"),e?t=n.doc.caretRangeFromPoint(e.x,e.y):(t=n.doc.createRange()).selectNodeContents(n);var i=n.win.getSelection();i.removeAllRanges(),i.addRange(t),n.focus(),this.initialTextState=this.edge.label||""},e.prototype.blur=function(){var e=this.textareaEl;this.isEditing=!1,e.blur(),e.setAttr("contenteditable",!1),e.removeClass("is-editing"),this.edge.label?this.initialTextState!==this.edge.label&&this.edge.canvas.requestSave():this.destroy(),this.initialTextState=""},e.prototype.render=function(){var e=this.wrapperEl,t=this.edge.getCenter();e.style.transform="translate(".concat(t.x,"px, ").concat(t.y,"px)"),kj(e,this.edge.color),e.toggleClass("is-themed",!!this.edge.color)},e.prototype.destroy=function(e){var t=this.edge;t.label&&delete t.label,this.initialTextState&&!e&&t.canvas.requestSave(),this.wrapperEl.remove(),t.labelElement=null},e}(),PW=Gk.plugins.canvas,IW=function(e){function t(t,n){var i=e.call(this,t.app)||this;return i.emptyStateText=PW.msgNoGroupsFound(),i.view=t,i.cb=n,i.setInstructions([{command:"↑↓",purpose:Gk.plugins.templates.instructionNavigate()},{command:"↵",purpose:PW.instructionJumpToGroup()},{command:"esc",purpose:Gk.plugins.templates.instructionDismiss()}]),i.setPlaceholder(PW.actionJumpToGroup()),i.scope.register(null,"Tab",(function(){return!1})),i}return f(t,e),t.prototype.getItems=function(){return this.view.canvas.getData().nodes.filter((function(e){return"group"===e.type}))},t.prototype.onChooseItem=function(e){this.cb(e)},t.prototype.getItemText=function(e){return e.label||PW.labelUntitledGroup()},t}(cV),FW=function(e){function t(t){var n=e.call(this)||this;return n.index={},n.fileQueue=[],n.app=t,n}return f(t,e),t.prototype.onload=function(){var e=this.app.vault;this.registerEvent(e.on("create",this.onCreate,this)),this.registerEvent(e.on("modify",this.onModify,this)),this.registerEvent(e.on("rename",this.onRename,this)),this.registerEvent(e.on("delete",this.onDelete,this));for(var t=0,n=e.getFiles();t0))return[3,5];t=e.pop(),r.label=1;case 1:return r.trys.push([1,3,,4]),[4,this.process(t)];case 2:return(n=r.sent())&&(this.index[t.path]=n),[3,4];case 3:return i=r.sent(),console.error("Failed to index ".concat(t.path),i),[3,4];case 4:this.frame=null,r.label=5;case 5:return e.length>0&&this.requestFrame(),[2]}}))}))},t.prototype.get=function(e){return this.getForPath(e.path)},t.prototype.getForPath=function(e){return this.index.hasOwnProperty(e)?this.index[e]:null},t.prototype.getAll=function(){return this.index},t}(GM),OW="canvas",BW="canvas",NW=Gk.plugins.canvas,RW=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.refNodeIds=new WeakMap,t}return f(t,e),t.prototype.canProcess=function(e){return e.extension===BW},t.prototype.process=function(e){return v(this,void 0,Promise,(function(){var t,n,i,r,o,a,s,l,c,u,h;return y(this,(function(p){switch(p.label){case 0:return[4,this.app.vault.cachedRead(e)];case 1:if(!(t=p.sent()))return[2,null];if(n=JSON.parse(t),!(i=n.nodes)||!Array.isArray(i))return[2,null];r=[],o={},a=this.refNodeIds,s=function(e){var t,n,i;return y(this,(function(s){switch(s.label){case 0:return"file"!==e.type?[3,1]:(r.push({file:e.file,subpath:e.subpath}),[3,6]);case 1:return"group"===e.type&&e.background?(r.push({file:e.background,subpath:""}),[3,6]):[3,2];case 2:if("text"!==e.type)return[3,6];t=e.text,s.label=3;case 3:return s.trys.push([3,5,,6]),[4,l.parseText(t)];case 4:return JD(n=s.sent(),(function(t){a.set(t,e.id)})),o[e.id]=n,[3,6];case 5:return i=s.sent(),console.error(i),[3,6];case 6:return[2]}}))},l=this,c=0,u=i,p.label=2;case 2:return c0&&new gD("Canvas updated ".concat(p," embed cards.")),[2]}}))}))},e}(),VW=function(){function e(e){this.app=e}return e.prototype.load=function(e){return e?this.app.loadLocalStorage("canvas-"+e.path):null},e.prototype.save=function(e,t){e&&this.app.saveLocalStorage("canvas-"+e.path,t)},e.prototype.handleRename=function(e,t){var n=this.app.loadLocalStorage("canvas-"+e);n&&(this.remove(e),this.save(t,n))},e.prototype.handleDelete=function(e){this.remove(e.path)},e.prototype.remove=function(e){this.app.saveLocalStorage("canvas-"+e,null)},e}(),zW=function(){function e(){var e=this;this.id="canvas",this.name=NW.name(),this.description=NW.desc(),this.defaultOn=!0,this.options={},this.renames=[],this.renameQueue=new AC,this.requestProcessRename=Aw((function(){var t=e.renames;e.renames=[],e.renameQueue.queue((function(){return v(e,void 0,void 0,(function(){var e,n,i,r,o,a,s,l,c,u,h,p,d;return y(this,(function(f){switch(f.label){case 0:for(p in e=t.map((function(e){return e[0]})),n=[],i=this.index.getAll())if(i.hasOwnProperty(p))for(r=i[p],o=0,a=r.embeds;o0&&new gD("Canvas updated ".concat(c," embed cards.")),[2]}}))}))}))}),500,!0)}return e.prototype.init=function(e,t){var n=this;this.app=e,this.plugin=t,t.registerViewType(OW,(function(e){return new qW(e,n)})),t.registerGlobalCommand({id:"canvas:new-file",name:NW.commandCreateNewCanvas(),icon:"lucide-layout-dashboard",callback:function(){return v(n,void 0,void 0,(function(){var t,n,i,r;return y(this,(function(o){switch(o.label){case 0:return t=null===(r=this.app.workspace.getActiveFile())||void 0===r?void 0:r.path,n=this.getNewFileParent(t),[4,this.createNewCanvasFile(n)];case 1:return i=o.sent(),[4,e.workspace.getLeaf().openFile(i,{eState:{rename:"all"}})];case 2:return o.sent(),[2]}}))}))}}),t.registerGlobalCommand({id:"canvas:export-as-image",name:NW.actionExportPng(),icon:"lucide-image",checkCallback:function(e){var t=n.app.workspace.getActiveViewOfType(qW);return!!t&&(e||t.canvas.generateHDImage(),!0)}}),t.registerGlobalCommand({id:"canvas:jump-to-group",name:NW.actionJumpToGroup(),icon:"lucide-move",checkCallback:function(e){var t=n.app.workspace.getActiveViewOfType(qW);return!!t&&(e||new IW(t,(function(e){var n=ej(e);t.canvas.zoomToBbox(n)})).open(),!0)}}),t.registerGlobalCommand({id:"canvas:convert-to-file",name:NW.commandConvertToFile(),icon:"lucide-file-input",checkCallback:function(e){var t=n.app.workspace.getActiveViewOfType(qW);if(t){var i=t.canvas.selection;if(1===i.size){var r=i.values().next().value;if(r instanceof fW)return e||r.convertToFile(),!0}}return!1}}),t.registerRibbonItem(NW.commandCreateNewCanvas(),"lucide-layout-dashboard",(function(){return v(n,void 0,void 0,(function(){var t,n,i,r;return y(this,(function(o){switch(o.label){case 0:return t=null===(r=this.app.workspace.getActiveFile())||void 0===r?void 0:r.path,n=this.getNewFileParent(t),[4,this.createNewCanvasFile(n)];case 1:return i=o.sent(),[4,e.workspace.getLeaf().openFile(i,{eState:{rename:"all"}})];case 2:return o.sent(),[2]}}))}))})),this.index=t.addChild(new RW(e)),this.localDataManager=new VW(e)},e.prototype.onEnable=function(e,t){return v(this,void 0,void 0,(function(){var n,i,r,o;return y(this,(function(a){switch(a.label){case 0:return t.registerEvent(e.workspace.on("file-menu",this.onFileMenu,this)),t.registerEvent(e.vault.on("rename",this.onRename,this)),t.registerEvent(e.vault.on("delete",this.onDelete,this)),e.fileManager.linkUpdaters.canvas=new HW(e,this),t.register((function(){return delete e.fileManager.linkUpdaters.canvas})),e.viewRegistry.registerExtensions([BW],OW),e.embedRegistry.registerExtension(BW,(function(e,t,n){return new UW(e,t,n)})),e.fileManager.registerFileParentCreator(BW,this.getNewFileParent.bind(this)),n=this,r=(i=Object).assign,o=[{snapToObjects:!0,snapToGrid:!0}],[4,t.loadData()];case 1:return n.options=r.apply(i,o.concat([a.sent()])),t.addSettingTab(new _W(e,t,this)),[2]}}))}))},e.prototype.onDisable=function(e){e.viewRegistry.unregisterExtensions([BW]),e.embedRegistry.unregisterExtension(BW),e.fileManager.unregisterFileCreator(BW)},e.prototype.onUserDisable=function(e){for(var t=0,n=e.workspace.getLeavesOfType(OW);t0)){var l=xe(o,a[0][0]);s.child.previewMode.renderer.applyScrollDelayed(l,{center:!0,highlight:!0})}}},t.prototype.onResize=function(){this.canvas.onResize()},t.prototype.getViewType=function(){return OW},t.prototype.getViewData=function(){return Me(this.canvas.data)},t.prototype.setViewData=function(e,t){var n=this.canvas;if(t&&this.clear(),e?(n.setData(JSON.parse(e)),t&&(n.zoomToFitQueued=!0,n.onResize())):(n.createPlaceholder(),n.requestFrame()),t){var i=this.getLocalData();i&&i.hasOwnProperty("readonly")&&"boolean"==typeof i.readonly&&n.setReadonly(i.readonly)}},t.prototype.clear=function(){this.canvas.clear()},t.prototype.onOpen=function(){return v(this,void 0,Promise,(function(){return y(this,(function(t){return this.canvas.load(),[2,e.prototype.onOpen.call(this)]}))}))},t.prototype.onClose=function(){return v(this,void 0,Promise,(function(){return y(this,(function(t){switch(t.label){case 0:return[4,e.prototype.onClose.call(this)];case 1:return t.sent(),this.canvas.unload(),[2]}}))}))},t.prototype.handleCut=function(e){this.canvas.handleCut(e)},t.prototype.handleCopy=function(e){this.canvas.handleCopy(e)},t.prototype.handlePaste=function(e){this.canvas.handlePaste(e)},t.prototype.onPaneMenu=function(t,n){var i=this;e.prototype.onPaneMenu.call(this,t,n),$w.isDesktopApp&&t.addItem((function(e){return e.setSection("action").setTitle(NW.actionExportPng()).setIcon("lucide-image").onClick((function(){return i.canvas.generateHDImage()}))}))},t.prototype.getLocalData=function(){return this.plugin.localDataManager.load(this.file)},t.prototype.saveLocalData=function(){var e={};this.canvas.readonly&&(e.readonly=!0),0===Object.keys(e).length&&(e=null),this.plugin.localDataManager.save(this.file,e)},t}(WN),UW=function(e){function t(t,n,i){var r=e.call(this)||this;return r.app=t.app,r.ctx=t,r.containerEl=t.containerEl,r.containerEl.addClass("canvas-embed"),r.file=n,r.subpath=i,t.showInline&&(r.containerEl.addClass("inline-embed"),r.headerEl=r.containerEl.createDiv({cls:"embed-title"},(function(e){e.createSpan({cls:"file-embed-icon"},(function(e){oT(e,"lucide-layout-dashboard")})),e.appendText(" "+r.file.basename)}))),r}return f(t,e),t.prototype.loadFile=function(){return v(this,void 0,Promise,(function(){var e,t,n,i,r,o,a,s,l,c,u,h,p,d,f,m,g,v,b,w,k,C,x,E,S,M,T,D,A,L,P,I;return y(this,(function(y){switch(y.label){case 0:return t=(e=this).containerEl,n=e.ctx,i=e.app,t.addEventListener("click",(function(e){i.workspace.getLeaf(pD.isModEvent(e)).openLinkText(n.linktext,n.sourcePath)})),a=(o=JSON).parse,[4,i.vault.cachedRead(this.file)];case 1:if(r=a.apply(o,[y.sent()]),s=r.nodes,l=r.edges,!s)return[2];for(l||(l=[]),c=createSvg("svg","canvas-minimap"),u={},h=[],p=0,d=s;p1)){var n=t.touches[0],i=t.targetNode,r=n.clientX,o=n.clientY,a=n.identifier,s=window.setTimeout((function(){l(),i.dispatchEvent(new MouseEvent("contextmenu",{button:0,buttons:0,ctrlKey:t.ctrlKey,altKey:t.altKey,metaKey:t.metaKey,shiftKey:t.shiftKey,screenX:n.screenX,screenY:n.screenY,bubbles:!0,cancelable:!0,clientX:r,clientY:o})),navigator.vibrate(200)}),600),l=function(){e.removeEventListener("touchcancel",u,!0),e.removeEventListener("touchend",u,!0),e.removeEventListener("touchmove",h,!0),e.removeEventListener("dragstart",p,!0),window.clearTimeout(s),zw=null};zw=l;var c=function(e,t){var n=t.clientX-r,i=t.clientY-o;n*n+i*i>25&&l()},u=function(e){for(var t=e.changedTouches,n=0;n0}}),t.addCommand({id:"app:delete-file",name:Gk.commands.deleteCurrentFile(),icon:"lucide-trash-2",checkCallback:function(t){var n=e.workspace.getActiveFile();if(n)return t||e.fileManager.promptForFileDeletion(n),!0}}),t.addCommand({id:"app:toggle-left-sidebar",name:Gk.commands.toggleLeftSidebar(),checkCallback:function(t){if(activeWindow===window){if(!t){var n=e.workspace.leftSplit;n instanceof xH?n.togglePinned():n.toggle()}return!0}return!1}}),t.addCommand({id:"app:toggle-right-sidebar",name:Gk.commands.toggleRightSidebar(),checkCallback:function(t){if(activeWindow===window){if(!t){var n=e.workspace.rightSplit;n instanceof xH?n.togglePinned():n.toggle()}return!0}return!1}}),t.addCommand({id:"app:toggle-default-new-pane-mode",name:Gk.commands.toggleDefaultNewTabMode(),callback:function(){var t=e.vault.getConfig("defaultViewMode");"source"===t?(e.vault.setConfig("defaultViewMode","preview"),new gD(Gk.interface.msgSwitchedToRead())):"preview"===t&&(e.vault.setConfig("defaultViewMode","source"),new gD(Gk.interface.msgSwitchedToEdit()))}}),t.addCommand({id:"app:open-help",name:Gk.commands.openHelp(),icon:"question-mark-glyph",callback:this.openHelp.bind(this),hotkeys:[SI([],"F1")]}),t.addCommand({id:"app:reload",name:Gk.commands.reload(),icon:"lucide-rotate-ccw",callback:function(){return window.location.reload()}}),t.addCommand({id:"app:show-debug-info",name:Gk.commands.showDebugInfo(),callback:function(){return new qH(e).open()}}),$w.isDesktopApp&&(t.addCommand({id:"window:toggle-always-on-top",name:Gk.commands.alwaysOnTop(),checkCallback:function(e){if(activeWindow!==window){var t=activeWindow.electronWindow;if(!t.isMaximized())return e||t.setAlwaysOnTop(!t.isAlwaysOnTop()),!0}return!1}}),t.addCommand({id:"window:zoom-in",name:Gk.commands.zoomIn(),callback:function(){var e=electron.webFrame.getZoomLevel();e<3&&electron.webFrame.setZoomLevel(e+.5)}}),t.addCommand({id:"window:zoom-out",name:Gk.commands.zoomOut(),callback:function(){var e=electron.webFrame.getZoomLevel();e>-2.5&&electron.webFrame.setZoomLevel(e-.5)}}),t.addCommand({id:"window:reset-zoom",name:Gk.commands.resetZoom(),callback:function(){electron.webFrame.setZoomLevel(0)}})),t.addCommand({id:"file-explorer:new-file",name:Gk.plugins.fileExplorer.actionCreateNote(),icon:"lucide-file-plus",callback:function(){return e.fileManager.createAndOpenMarkdownFile()},hotkeys:[SI(["Mod"],"N")]}),t.addCommand({id:"file-explorer:new-file-in-new-pane",name:Gk.plugins.fileExplorer.actionCreateNoteToTheRight(),icon:"lucide-file-plus",callback:function(){return e.fileManager.createAndOpenMarkdownFile(void 0,!0)},hotkeys:[SI(["Mod","Shift"],"N")]}),t.addCommand({id:"open-with-default-app:open",name:$w.isMobileApp?Gk.plugins.openWithDefaultApp.actionOpenFileMobile():Gk.plugins.openWithDefaultApp.actionOpenFile(),icon:"lucide-arrow-up-right",checkCallback:function(t){var n=e.workspace.getActiveFile();if(n)return t||e.openWithDefaultApp(n.path),!0}}),t.addCommand({id:"file-explorer:move-file",name:Gk.plugins.fileExplorer.commandMoveFile(),icon:"lucide-folder-tree",checkCallback:function(t){var n=e.workspace.getActiveFile();if(n)return t||new az(e,[n]).open(),!0}}),$w.isDesktopApp&&t.addCommand({id:"open-with-default-app:show",name:$w.isMacOS?Gk.plugins.openWithDefaultApp.actionShowInFolderMac():Gk.plugins.openWithDefaultApp.actionShowInFolder(),icon:"lucide-files",checkCallback:function(t){var n=e.workspace.getActiveFile();if(n)return t||e.showInFolder(n.path),!0}}),function(e){var t=this,n=e.commands;function i(){var t=e.vault.getConfig("foldHeading"),n=e.vault.getConfig("foldIndent");return t||n}n.addCommand({id:"editor:open-search",name:Gk.commands.searchCurrentFile(),icon:"lucide-search",checkCallback:function(t){var n=e.workspace.activeEditor;if(n)return t||n.showSearch(!1),!0},hotkeys:[SI(["Mod"],"F")]}),n.addCommand({id:"editor:open-search-replace",name:Gk.commands.searchReplaceCurrentFile(),icon:"lucide-search",checkCallback:function(t){var n=e.workspace.activeEditor;if(n&&"source"===n.getMode())return t||n.showSearch(!0),!0},hotkeys:[oe?SI(["Mod","Alt"],"F"):SI(["Mod"],"H")]}),n.addCommand({id:"editor:focus",name:Gk.commands.focusEditor(),checkCallback:function(t){var n=e.workspace.getActiveViewOfType(KN);if(!n){var i=null;e.workspace.iterateAllLeaves((function(e){e.view instanceof KN&&(!i||i.activeTime0)return"continue";var i=TT(t);i.endsWith("\n")&&(i=i.substr(0,i.length-1)),n.createEl("button",{cls:"copy-code-button",text:Gk.interface.menu.copy()}).onClickEvent((function(){return v(e,void 0,void 0,(function(){return y(this,(function(e){switch(e.label){case 0:return[4,navigator.clipboard.writeText(i)];case 1:return e.sent(),new gD(Gk.interface.copied({context:"generic"})),[2]}}))}))}))},i=0,r=t.findAll("pre > code");i{"use strict";function t(){function t(t,e,n){Object.defineProperty(t,e,{value:n,enumerable:!1,configurable:!0,writable:!0})}function e(t,e,n){Object.defineProperty(t,e,{get:n,enumerable:!1,configurable:!0})}for(var n=window,r=0,o=["TouchEvent"];r=0;e--)this[e]===t&&this.splice(e,1)})),Array.prototype.shuffle||t(Array.prototype,"shuffle",(function(){for(var t,e,n=this.length;0!==n;)e=Math.floor(Math.random()*n),t=this[n-=1],this[n]=this[e],this[e]=t;return this})),Array.prototype.unique||t(Array.prototype,"unique",(function(){return Array.from(new Set(this).values())})),Math.clamp||(Math.clamp=function(t,e,n){return Math.min(Math.max(t,e),n)}),Math.square||(Math.square=function(t){return t*t}),String.isString||(String.isString=function(t){return"string"==typeof t||t instanceof String}),String.prototype.contains||(String.prototype.contains=function(t){return-1!==this.indexOf(t)}),String.prototype.startsWith||(String.prototype.startsWith=function(t,e){return this.substr(!e||e<0?0:+e,t.length)===t}),String.prototype.endsWith||(String.prototype.endsWith=function(t,e){var n=void 0===e||e>this.length?this.length:e;return this.substring(n-t.length,n)===t}),String.prototype.format||(String.prototype.format=function(){for(var t=[],e=0;e=200&&t<400?r&&r(e,p):o&&o(e,p)},p.onerror=function(t){o&&o(t,p)},s)for(var c in s)s.hasOwnProperty(c)&&p.setRequestHeader(c,s[c]);p.withCredentials=a||!1,i?(void 0===a&&(p.withCredentials=!0),String.isString(i)?p.send(i):i instanceof ArrayBuffer?(p.setRequestHeader("Content-Type","application/octet-stream"),p.send(i)):(p.setRequestHeader("Content-Type","application/json; charset=utf-8"),p.send(JSON.stringify(i)))):p.send()},window.ajaxPromise=function(t){return new Promise((function(e,n){t.success=e,t.error=function(t,e){return n(e)},ajax(t)}))},window.ready=function(t){"loading"!==document.readyState?t():document.addEventListener("DOMContentLoaded",t)},window.sleep=function(t){return new Promise((function(e){return window.setTimeout(e,t)}))},window.nextFrame=function(){return new Promise((function(t){return window.requestAnimationFrame((function(){return t()}))}))},window.activeWindow=window,window.activeDocument=document,window.jsx=function(t,e){for(var n=[],r=2;r Obsidian (()=>{"use strict";var a=function(t,e){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,t){a.__proto__=t}||function(a,t){for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&(a[e]=t[e])})(t,e)};function t(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function i(){this.constructor=t}a(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}function e(a,t,e,i){return new(e||(e=Promise))((function(r,n){function o(a){try{h(i.next(a))}catch(a){n(a)}}function l(a){try{h(i.throw(a))}catch(a){n(a)}}function h(a){var t;a.done?r(a.value):(t=a.value,t instanceof e?t:new e((function(a){a(t)}))).then(o,l)}h((i=i.apply(a,t||[])).next())}))}function i(a,t){var e,i,r,n,o={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return n={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(n[Symbol.iterator]=function(){return this}),n;function l(n){return function(l){return function(n){if(e)throw new TypeError("Generator is already executing.");for(;o;)try{if(e=1,i&&(r=2&n[0]?i.return:n[0]?i.throw||((r=i.return)&&r.call(i),0):i.next)&&!(r=r.call(i,n[1])).done)return r;switch(i=0,r&&(n=[2&n[0],r.value]),n[0]){case 0:case 1:r=n;break;case 4:return o.label++,{value:n[1],done:!1};case 5:o.label++,i=n[1],n=[0];continue;case 7:n=o.ops.pop(),o.trys.pop();continue;default:if(!(r=o.trys,(r=r.length>0&&r[r.length-1])||6!==n[0]&&2!==n[0])){o=0;continue}if(3===n[0]&&(!r||n[1]>r[0]&&n[1]:|?':"\\/:";p.split("").join(" "),u.split("").join(" "),new RegExp("["+v(p)+"]"),new RegExp("["+v(u)+"]");var d=["md"],m=["canvas"];[].concat(["bmp","png","jpg","jpeg","gif","svg","webp"],["mp3","wav","m4a","3gp","flac","ogg","oga","opus"],["mp4","webm","ogv","mov","mkv"],["pdf"],d,m);var f=window.require;function g(a){return f&&f(a)}function H(a){var t=g("electron");t&&a(t)}var y=!1;H((function(a){y=a.ipcRenderer.sendSync("is-dev"),parseInt(process.versions.electron.split(".")[0])}));var V=y;V||H((function(a){try{a.deprecate.setHandler((function(){}))}catch(a){}}));var b={en:"English",zh:"简体中文","zh-TW":"繁體中文",ru:"Pусский",ko:"한국어",it:"Italiano",id:"Bahasa Indonesia",ro:"Română","pt-BR":"Português do Brasil",cs:"čeština",de:"Deutsch",es:"Español",fr:"Français",no:"Norsk",pl:"język polski",pt:"Português",ja:"日本語",da:"Dansk",uk:"Українська",sq:"Shqip",th:"ไทย",fa:"فارسی",tr:"Türkçe",nl:"Nederlands",am:"አማርኛ",ms:"Bahasa Melayu"},C="default";function L(a,t){if(String.isString(a))return null!==t&&String.isString(t)?t:a;var e={};for(var i in a)a.hasOwnProperty(i)&&(e[i]=L(a[i],t&&t[i]||null));return e}function w(a){return a.replace(/[A-Z]/g,(function(a){return"-"+a.toLowerCase()})).replace(/_[0-9]/g,(function(a){return"-"+a.substring(1)}))}i18next.init({fallbackLng:"en",ns:[C],defaultNS:C,initImmediate:!1,interpolation:{escapeValue:!1}});var k=function a(t,e){var i={};for(var r in t)if(t.hasOwnProperty(r)){var n=e(r),o=t[r];String.isString(o)?i[n]=o:i[n]=a(o,e)}return i}(OBSIDIAN_DEFAULT_I18N,w);i18next.addResourceBundle("en",C,k);var z=Promise.resolve(),A=localStorage.getItem("language");if(A){!1,z=e(void 0,void 0,void 0,(function(){var a,t;return i(this,(function(e){switch(e.label){case 0:return e.trys.push([0,3,,4]),[4,ajaxPromise({url:"/i18n/"+A+".json"})];case 1:return a=e.sent(),t=JSON.parse(a),i18next.addResourceBundle(A,C,t),[4,i18next.changeLanguage(A)];case 2:return e.sent(),[3,4];case 3:return e.sent(),console.error("Failed to load language pack."),[3,4];case 4:return!0,[2]}}))}));try{var Z=A.toLowerCase(),x={zh:"zh-cn",cz:"cs",no:"nn"};x.hasOwnProperty(Z)&&(Z=x[Z]),window.moment.locale(Z)}catch(a){}}V&&H((function(a){window.i18nGenBundles=function(){var t=window.require("fs"),e=a.ipcRenderer.sendSync("resources");for(var i in b)if(b.hasOwnProperty(i)){var r=e+"/i18n/"+i+".json";try{if(t.existsSync(r)){var n=t.readFileSync(r,"utf8"),o=JSON.parse(n),l=L(k,o),h=JSON.stringify(l,null,"\t");t.writeFileSync(r,h,"utf8"),console.log("Saved bundle for",i)}}catch(a){console.error("Failed to process translation for",i,a)}}}}));var E=function a(t,e){var i={};return new Proxy(e,{get:function(e,r){return i.hasOwnProperty(r)?i[r]:i[r]=a(t+w(r)+".",(function(a,e){return String.isString(a)?i18next.t(t+w(r)+"."+a,e):i18next.t(t+w(r),a)}))}})}("",i18next.t.bind(i18next));new WeakMap,function(){function a(a){this.from={},this.to={},this.end={};var t=a||{},e=t.duration,i=void 0===e?100:e,r=t.fn,n=void 0===r?"ease-in-out":r;this.duration=i,this.fn=n}a.prototype.addProp=function(a,t,e,i){return void 0===i&&(i=null),null!==t&&(this.from[a]=t),null!==e&&(this.to[a]=e),null!==i&&(this.end[a]=i),this}}();window.queueMicrotask;function S(a,t){var e=a.relatedTarget;return!e||!t.contains(e)}/bot|crawl|spider/i.test(navigator.userAgent);var D={sx:0,sy:0,ex:0,ey:0,t:0};function O(a){return D&&Date.now()-D.t<1e3&&Math.abs(a.clientX-D.sx)<5&&Math.abs(a.clientY-D.sy)<5||Math.abs(a.clientX-D.ex)<5&&Math.abs(a.clientY-D.ey)<5}var T=null,P=null;var B=null;function q(){B&&(clearTimeout(B),B=null)}function j(a){return"true"===getComputedStyle(a).getPropertyValue("--no-tooltip").trim()}function N(a,t){S(a,t)&&(O(a)||j(t)||F(t))}function K(a,t){if(S(a,t)){_();var e=a.relatedTarget;if(e&&e.matchParent){var i=e.matchParent("[aria-label]");if(i&&i.instanceOf(HTMLElement)){if(j(i))return;F(i)}}}}var I=new WeakMap;function F(a){q();var t=a.getAttribute("aria-label")||"";I.has(a)&&(t=I.get(a)(a));var e="bottom";a.hasAttribute("aria-label-position")&&(e=a.getAttribute("aria-label-position"));var i=[];a.hasAttribute("aria-label-classes")&&(i=(a.getAttribute("aria-label-classes")||"").split(" "));var r=750;a.hasAttribute("aria-label-delay")&&(r=parseInt(a.getAttribute("aria-label-delay")||""),isNaN(r)&&(r=750)),W(a,t,{placement:e,classes:i,delay:r})}var R=0;function W(a,t,e){var i=Date.now(),r=(e=e||{}).placement,n=void 0===r?"bottom":r,o=e.classes,l=void 0===o?[]:o,h=e.gap,M=void 0===h?8:h,c=e.horizontalParent,s=e.delay,v=void 0===s?0:s;if(v>0&&(T||i>R+100))return q(),e.delay=0,void(B=window.setTimeout((function(){return W(a,t,e)}),v));if(t){var u=a.doc,p=a.getBoundingClientRect(),d=p.top,m=p.left,f=p.width,g=p.height;if(c){var H=c.getBoundingClientRect();m=H.left,f=H.width}T&&P===a?T.setText(t):(_(),T=createDiv({cls:"tooltip",text:t}));var y=T.createDiv("tooltip-arrow"),V=0,b=0;"bottom"===n?(V=d+g+M,b=m+f/2):"right"===n?(V=d+g/2,b=m+f+M,l.push("mod-right")):"left"===n?(V=d+g/2,b=m-M,l.push("mod-left")):"top"===n&&(V=d-M-5,b=m+f/2,l.push("mod-top")),T.addClasses(l),T.style.top="0px",T.style.left="0px",T.style.width="",T.style.height="",T.parentNode||u.body.appendChild(T);var C=T.getBoundingClientRect(),L=["bottom","top"].contains(n)?C.width/2:C.width,w="right"===n||"left"===n?C.height/2:C.height;"left"===n?b-=L:"top"===n&&(V-=w);var k=u.body.clientHeight,z=u.body.clientWidth;if(V+w>k&&(V=k-w-M),V=Math.max(V,M),"top"===n||"bottom"===n){if(b+L>z)b-=A=b+L+M-z,y.style.left="initial",y.style.right=L-A-M/2+"px";else if(b-M-L<0){var A;b+=A=-(b-M-L),y.style.right="initial",y.style.left=L-A-M/2+"px"}b=Math.max(b,M)}T.style.top=V+"px",T.style.left=b+"px",T.style.width=C.width+"px",T.style.height=C.height+"px",P=a}}function _(){q(),T&&(R=Date.now(),T.detach(),T=null,P=null)}function U(a,t){var e=t||{},i=e.placement,r=e.classes,n=e.delay;i&&"bottom"!==i&&a.setAttribute("aria-label-position",i),r&&a.setAttribute("aria-label-classes",r.join(" ")),n&&a.setAttribute("aria-label-delay",String(n))}function G(a,t,e){a.setAttribute("aria-label",t),U(a,e),P===a&&W(a,t,e)}var J={isDesktop:!1,isMobile:!1,isDesktopApp:!1,isMobileApp:!1,isIosApp:!1,isAndroidApp:!1,isPhone:!1,isTablet:!1,isMacOS:l,isWin:h,isLinux:M,isSafari:c,mobileDeviceHeight:0,mobileKeyboardHeight:0,mobileSoftKeyboardVisible:!1};var X=function(){function a(a,t){this.eWin=a,this.win=t;var e=this.isMac="darwin"===window.process.platform,i=t.document,r=i.body;r.addClass("is-frameless");var n=this.titleBarEl=i.createElement("div");n.className="titlebar",r.insertBefore(n,r.firstChild);var o=this.titleBarInnerEl=n.createDiv("titlebar-inner");this.titleBarTextEl=o.createDiv({cls:"titlebar-text",text:"Obsidian"}),t.addEventListener("resize",this.updateStatus.bind(this)),new MutationObserver(this.updateTitle.bind(this)).observe(document.head.querySelector("title"),{subtree:!0,characterData:!0,childList:!0}),this.leftButtonContainerEl=o.createDiv("titlebar-button-container mod-left");var l=o.createDiv("titlebar-button-container mod-right");if(this.updateStatus(),this.updateTitle(),!e){if(a.minimizable){var h=l.createDiv("titlebar-button mod-minimize");h.innerHTML='',z.then((function(){G(h,E.interface.window.minimize())})),h.addEventListener("click",(function(){a.minimize()}))}if(a.maximizable){var M=l.createDiv("titlebar-button mod-maximize");M.innerHTML='';var c=function(){t.closed||(a.isMaximized()?G(M,E.interface.window.restoreDown()):G(M,E.interface.window.maximize()))};M.addEventListener("click",(function(){a.isMaximized()?a.unmaximize():a.maximize(),c()})),z.then((function(){c()})),t.addEventListener("resize",c)}if(a.closable){var s=l.createDiv("titlebar-button mod-close");s.innerHTML='',z.then((function(){G(s,E.interface.window.closeWindow())})),s.addEventListener("click",(function(){a.close()}))}}!function(a){if(!J.isMacOS||!J.isDesktopApp)return;a.addEventListener("dblclick",(function(t){if(0===t.button){var e=a.win.electronWindow;e.isMaximizable&&H((function(a){var t=a.remote.systemPreferences.getUserDefault("AppleActionOnDoubleClick","string");"Minimize"===t?e.minimize():"Maximize"!==t&&""!==t||(e.isMaximized()?e.unmaximize():e.maximize())}))}}))}(o)}return a.prototype.updateTitle=function(){this.titleBarTextEl.setText(this.win.document.title)},a.prototype.updateStatus=function(){var a=this.win,t=this.eWin;if(!a.closed){var e=t.webContents.getZoomFactor(),i=a.document.body;if(i.toggleClass("is-fullscreen",t.isFullScreen()),i.toggleClass("is-maximized",t.isMaximized()),i.style.setProperty("--zoom-factor",String(e)),this.isMac&&"hidden"===a.titlebarStyle){var r=40,n=getComputedStyle(i).getPropertyValue("--header-height");n&&(r=parseFloat(n)),(isNaN(r)||0===r)&&(r=40);var o=Math.floor(r*e/2-8);o<-5&&(o=0),t.setTrafficLightPosition({x:o+2,y:o})}}},a}();const $={accessibility:[[1,16,4,1],[6,"m18 19 1-7-5.87.94"],[6,"m5 8 3-3 5.5 3-2.21 3.1"],[6,"M4.24 14.48c-.19.58-.27 1.2-.23 1.84a5 5 0 0 0 5.31 4.67c.65-.04 1.25-.2 1.8-.46"],[6,"M13.76 17.52c.19-.58.27-1.2.23-1.84a5 5 0 0 0-5.31-4.67c-.65.04-1.25.2-1.8.46"]],activity:[[2,"22 12 18 12 15 21 9 3 6 12 2 12"]],"air-vent":[[6,"M6 12H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"],[6,"M6 8h12"],[6,"M18.3 17.7a2.5 2.5 0 0 1-3.16 3.83 2.53 2.53 0 0 1-1.14-2V12"],[6,"M6.6 15.6A2 2 0 1 0 10 17v-5"]],airplay:[[6,"M5 17H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-1"],[3,"12 15 17 21 7 21 12 15"]],"alarm-check":[[6,"M12 21a8 8 0 1 0 0-16 8 8 0 0 0 0 16z"],[6,"M5 3 2 6"],[6,"m22 6-3-3"],[6,"m6 19-2 2"],[6,"m18 19 2 2"],[6,"m9 13 2 2 4-4"]],"alarm-clock-off":[[6,"M6.87 6.87a8 8 0 1 0 11.26 11.26"],[6,"M19.9 14.25A7.44 7.44 0 0 0 20 13a8 8 0 0 0-8-8 7.44 7.44 0 0 0-1.25.1"],[6,"m22 6-3-3"],[6,"m6 19-2 2"],[6,"m2 2 20 20"],[6,"M4 4 2 6"]],"alarm-clock":[[1,12,13,8],[6,"M12 9v4l2 2"],[6,"M5 3 2 6"],[6,"m22 6-3-3"],[6,"m6 19-2 2"],[6,"m18 19 2 2"]],"alarm-minus":[[6,"M12 21a8 8 0 1 0 0-16 8 8 0 0 0 0 16z"],[6,"M5 3 2 6"],[6,"m22 6-3-3"],[6,"m6 19-2 2"],[6,"m18 19 2 2"],[6,"M9 13h6"]],"alarm-plus":[[6,"M12 21a8 8 0 1 0 0-16 8 8 0 0 0 0 16z"],[6,"M5 3 2 6"],[6,"m22 6-3-3"],[6,"m6 19-2 2"],[6,"m18 19 2 2"],[6,"M12 10v6"],[6,"M9 13h6"]],album:[[5,3,3,18,18,2,2],[2,"11 3 11 11 14 8 17 11 17 3"]],"alert-circle":[[1,12,12,10],[0,12,8,12,12],[0,12,16,12.01,16]],"alert-octagon":[[3,"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2"],[0,12,8,12,12],[0,12,16,12.01,16]],"alert-triangle":[[6,"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"],[0,12,9,12,13],[0,12,17,12.01,17]],"align-center-horizontal":[[6,"M2 12h20"],[6,"M10 16v4a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-4"],[6,"M10 8V4a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v4"],[6,"M20 16v1a2 2 0 0 1-2 2h-2a2 2 0 0 1-2-2v-1"],[6,"M14 8V7c0-1.1.9-2 2-2h2a2 2 0 0 1 2 2v1"]],"align-center-vertical":[[6,"M12 2v20"],[6,"M8 10H4a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2h4"],[6,"M16 10h4a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2h-4"],[6,"M8 20H7a2 2 0 0 1-2-2v-2c0-1.1.9-2 2-2h1"],[6,"M16 14h1a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2h-1"]],"align-center":[[0,21,6,3,6],[0,17,12,7,12],[0,19,18,5,18]],"align-end-horizontal":[[5,4,2,6,16,2],[5,14,9,6,9,2],[6,"M22 22H2"]],"align-end-vertical":[[5,2,4,16,6,2],[5,9,14,9,6,2],[6,"M22 22V2"]],"align-horizontal-distribute-center":[[5,4,5,6,14,2],[5,14,7,6,10,2],[6,"M17 22v-5"],[6,"M17 7V2"],[6,"M7 22v-3"],[6,"M7 5V2"]],"align-horizontal-distribute-end":[[5,4,5,6,14,2],[5,14,7,6,10,2],[6,"M10 2v20"],[6,"M20 2v20"]],"align-horizontal-distribute-start":[[5,4,5,6,14,2],[5,14,7,6,10,2],[6,"M4 2v20"],[6,"M14 2v20"]],"align-horizontal-justify-center":[[5,2,5,6,14,2],[5,16,7,6,10,2],[6,"M12 2v20"]],"align-horizontal-justify-end":[[5,2,5,6,14,2],[5,12,7,6,10,2],[6,"M22 2v20"]],"align-horizontal-justify-start":[[5,6,5,6,14,2],[5,16,7,6,10,2],[6,"M2 2v20"]],"align-horizontal-space-around":[[5,9,7,6,10,2],[6,"M4 22V2"],[6,"M20 22V2"]],"align-horizontal-space-between":[[5,3,5,6,14,2],[5,15,7,6,10,2],[6,"M3 2v20"],[6,"M21 2v20"]],"align-justify":[[0,3,6,21,6],[0,3,12,21,12],[0,3,18,21,18]],"align-left":[[0,21,6,3,6],[0,15,12,3,12],[0,17,18,3,18]],"align-right":[[0,21,6,3,6],[0,21,12,9,12],[0,21,18,7,18]],"align-start-horizontal":[[5,4,6,6,16,2],[5,14,6,6,9,2],[6,"M22 2H2"]],"align-start-vertical":[[5,6,14,9,6,2],[5,6,4,16,6,2],[6,"M2 2v20"]],"align-vertical-distribute-center":[[5,5,14,14,6,2],[5,7,4,10,6,2],[6,"M22 7h-5"],[6,"M7 7H1"],[6,"M22 17h-3"],[6,"M5 17H2"]],"align-vertical-distribute-end":[[5,5,14,14,6,2],[5,7,4,10,6,2],[6,"M2 20h20"],[6,"M2 10h20"]],"align-vertical-distribute-start":[[5,5,14,14,6,2],[5,7,4,10,6,2],[6,"M2 14h20"],[6,"M2 4h20"]],"align-vertical-justify-center":[[5,5,16,14,6,2],[5,7,2,10,6,2],[6,"M2 12h20"]],"align-vertical-justify-end":[[5,5,12,14,6,2],[5,7,2,10,6,2],[6,"M2 22h20"]],"align-vertical-justify-start":[[5,5,16,14,6,2],[5,7,6,10,6,2],[6,"M2 2h20"]],"align-vertical-space-around":[[5,7,9,10,6,2],[6,"M22 20H2"],[6,"M22 4H2"]],"align-vertical-space-between":[[5,5,15,14,6,2],[5,7,3,10,6,2],[6,"M2 21h20"],[6,"M2 3h20"]],anchor:[[1,12,5,3],[0,12,22,12,8],[6,"M5 12H2a10 10 0 0 0 20 0h-3"]],angry:[[1,12,12,10],[6,"M16 16s-1.5-2-4-2-4 2-4 2"],[6,"M7.5 8 10 9"],[6,"m14 9 2.5-1"],[6,"M9 10h0"],[6,"M15 10h0"]],annoyed:[[1,12,12,10],[6,"M8 15h8"],[6,"M8 9h2"],[6,"M14 9h2"]],aperture:[[1,12,12,10],[0,14.31,8,20.05,17.94],[0,9.69,8,21.17,8],[0,7.38,12,13.12,2.06],[0,9.69,16,3.95,6.06],[0,14.31,16,2.83,16],[0,16.62,12,10.88,21.94]],apple:[[6,"M12 20.94c1.5 0 2.75 1.06 4 1.06 3 0 6-8 6-12.22A4.91 4.91 0 0 0 17 5c-2.22 0-4 1.44-5 2-1-.56-2.78-2-5-2a4.9 4.9 0 0 0-5 4.78C2 14 5 22 8 22c1.25 0 2.5-1.06 4-1.06Z"],[6,"M10 2c1 .5 2 2 2 5"]],"archive-restore":[[5,2,4,20,5,2],[6,"M12 13v7"],[6,"m9 16 3-3 3 3"],[6,"M4 9v9a2 2 0 0 0 2 2h2"],[6,"M20 9v9a2 2 0 0 1-2 2h-2"]],archive:[[5,2,4,20,5,2],[6,"M4 9v9a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9"],[6,"M10 13h4"]],armchair:[[6,"M19 9V6a2 2 0 0 0-2-2H7a2 2 0 0 0-2 2v3"],[6,"M3 11v5a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-5a2 2 0 0 0-4 0v2H7v-2a2 2 0 0 0-4 0Z"],[6,"M5 18v2"],[6,"M19 18v2"]],"arrow-big-down":[[6,"M9 3h6v11h4l-7 7-7-7h4z"]],"arrow-big-left":[[6,"m3 12 7-7v4h11v6H10v4z"]],"arrow-big-right":[[6,"m21 12-7-7v4H3v6h11v4z"]],"arrow-big-up":[[6,"M9 21V10H5l7-7 7 7h-4v11z"]],"arrow-down-circle":[[1,12,12,10],[2,"8 12 12 16 16 12"],[0,12,8,12,16]],"arrow-down-left":[[0,17,7,7,17],[2,"17 17 7 17 7 7"]],"arrow-down-right":[[0,7,7,17,17],[2,"17 7 17 17 7 17"]],"arrow-down":[[0,12,5,12,19],[2,"19 12 12 19 5 12"]],"arrow-left-circle":[[1,12,12,10],[2,"12 8 8 12 12 16"],[0,16,12,8,12]],"arrow-left-right":[[2,"17 11 21 7 17 3"],[0,21,7,9,7],[2,"7 21 3 17 7 13"],[0,15,17,3,17]],"arrow-left":[[0,19,12,5,12],[2,"12 19 5 12 12 5"]],"arrow-right-circle":[[1,12,12,10],[2,"12 16 16 12 12 8"],[0,8,12,16,12]],"arrow-right":[[0,5,12,19,12],[2,"12 5 19 12 12 19"]],"arrow-up-circle":[[1,12,12,10],[2,"16 12 12 8 8 12"],[0,12,16,12,8]],"arrow-up-down":[[2,"11 17 7 21 3 17"],[0,7,21,7,9],[2,"21 7 17 3 13 7"],[0,17,15,17,3]],"arrow-up-left":[[0,17,17,7,7],[2,"7 17 7 7 17 7"]],"arrow-up-right":[[0,7,17,17,7],[2,"7 7 17 7 17 17"]],"arrow-up":[[0,12,19,12,5],[2,"5 12 12 5 19 12"]],asterisk:[[6,"M12 6v12"],[6,"M17.196 9 6.804 15"],[6,"m6.804 9 10.392 6"]],"at-sign":[[1,12,12,4],[6,"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-3.92 7.94"]],award:[[1,12,8,6],[6,"M15.477 12.89 17 22l-5-3-5 3 1.523-9.11"]],axe:[[6,"m14 12-8.501 8.501a2.12 2.12 0 0 1-2.998 0h-.002a2.12 2.12 0 0 1 0-2.998L11 9.002"],[6,"m9 7 4-4 6 6h3l-.13.648a7.648 7.648 0 0 1-5.081 5.756L15 16v-3z"]],"axis-3d":[[6,"M4 4v16h16"],[6,"m4 20 7-7"]],baby:[[6,"M9 12h0.01"],[6,"M15 12h0.01"],[6,"M10 16c.5.3 1.2.5 2 .5s1.5-.2 2-.5"],[6,"M19 6.3a9 9 0 0 1 1.8 3.9 2 2 0 0 1 0 3.6 9 9 0 0 1-17.6 0 2 2 0 0 1 0-3.6A9 9 0 0 1 12 3c2 0 3.5 1.1 3.5 2.5s-.9 2.5-2 2.5c-.8 0-1.5-.4-1.5-1"]],backpack:[[6,"M4 20V10a4 4 0 0 1 4-4h8a4 4 0 0 1 4 4v10a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2Z"],[6,"M9 6V4a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2"],[6,"M8 21v-5a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v5"],[6,"M8 10h8"],[6,"M8 18h8"]],"baggage-claim":[[6,"M22 18H6a2 2 0 0 1-2-2V7a2 2 0 0 0-2-2"],[6,"M17 14V4a2 2 0 0 0-2-2h-1a2 2 0 0 0-2 2v10"],[5,8,6,13,8,1],[1,18,20,2],[1,9,20,2]],banana:[[6,"M4 13c3.5-2 8-2 10 2a5.5 5.5 0 0 1 8 5"],[6,"M5.15 17.89c5.52-1.52 8.65-6.89 7-12C11.55 4 11.5 2 13 2c3.22 0 5 5.5 5 8 0 6.5-4.2 12-10.49 12C5.11 22 2 22 2 20c0-1.5 1.14-1.55 3.15-2.11Z"]],banknote:[[5,2,6,20,12,2],[1,12,12,2],[6,"M6 12h.01M18 12h.01"]],"bar-chart-2":[[0,18,20,18,10],[0,12,20,12,4],[0,6,20,6,14]],"bar-chart-3":[[6,"M3 3v18h18"],[6,"M18 17V9"],[6,"M13 17V5"],[6,"M8 17v-3"]],"bar-chart-4":[[6,"M3 3v18h18"],[6,"M13 17V9"],[6,"M18 17V5"],[6,"M8 17v-3"]],"bar-chart-horizontal":[[6,"M3 3v18h18"],[6,"M7 16h8"],[6,"M7 11h12"],[6,"M7 6h3"]],"bar-chart":[[0,12,20,12,10],[0,18,20,18,4],[0,6,20,6,16]],baseline:[[6,"M4 20h16"],[6,"m6 16 6-12 6 12"],[6,"M8 12h8"]],bath:[[6,"M9 6 6.5 3.5a1.5 1.5 0 0 0-1-.5C4.683 3 4 3.683 4 4.5V17a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-5"],[0,10,5,8,7],[0,2,12,22,12],[0,7,19,7,21],[0,17,19,17,21]],"battery-charging":[[6,"M15 7h1a2 2 0 0 1 2 2v6a2 2 0 0 1-2 2h-2"],[6,"M6 7H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h1"],[6,"m11 7-3 5h4l-3 5"],[0,22,11,22,13]],"battery-full":[[5,2,7,16,10,2,2],[0,22,11,22,13],[0,6,11,6,13],[0,10,11,10,13],[0,14,11,14,13]],"battery-low":[[5,2,7,16,10,2,2],[0,22,11,22,13],[0,6,11,6,13]],"battery-medium":[[5,2,7,16,10,2,2],[0,22,11,22,13],[0,6,11,6,13],[0,10,11,10,13]],"battery-warning":[[6,"M14 7h2a2 2 0 0 1 2 2v6c0 1 -1 2 -2 2h-2"],[6,"M6 7h-2a2 2 0 0 0-2 2v6c0 1 1 2 2 2h2"],[0,22,11,22,13],[0,10,7,10,13],[0,10,17,10,17.01]],battery:[[5,2,7,16,10,2,2],[0,22,11,22,13]],beaker:[[6,"M4.5 3h15"],[6,"M6 3v16a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V3"],[6,"M6 14h12"]],"bean-off":[[6,"M9 9c-.64.64-1.521.954-2.402 1.165A6 6 0 0 0 8 22a13.96 13.96 0 0 0 9.9-4.1"],[6,"M10.75 5.093A6 6 0 0 1 22 8c0 2.411-.61 4.68-1.683 6.66"],[6,"M5.341 10.62a4 4 0 0 0 6.487 1.208M10.62 5.341a4.015 4.015 0 0 1 2.039 2.04"],[0,2,2,22,22]],bean:[[6,"M10.165 6.598C9.954 7.478 9.64 8.36 9 9c-.64.64-1.521.954-2.402 1.165A6 6 0 0 0 8 22c7.732 0 14-6.268 14-14a6 6 0 0 0-11.835-1.402Z"],[6,"M5.341 10.62a4 4 0 1 0 5.279-5.28"]],"bed-double":[[6,"M2 20v-8a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v8"],[6,"M4 10V6a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v4"],[6,"M12 4v6"],[6,"M2 18h20"]],"bed-single":[[6,"M3 20v-8a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v8"],[6,"M5 10V6a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v4"],[6,"M3 18h18"]],bed:[[6,"M2 4v16"],[6,"M2 8h18a2 2 0 0 1 2 2v10"],[6,"M2 17h20"],[6,"M6 8v9"]],beef:[[1,12.5,8.5,2.5],[6,"M12.5 2a6.5 6.5 0 0 0-6.22 4.6c-1.1 3.13-.78 3.9-3.18 6.08A3 3 0 0 0 5 18c4 0 8.4-1.8 11.4-4.3A6.5 6.5 0 0 0 12.5 2Z"],[6,"m18.5 6 2.19 4.5a6.48 6.48 0 0 1 .31 2 6.49 6.49 0 0 1-2.6 5.2C15.4 20.2 11 22 7 22a3 3 0 0 1-2.68-1.66L2.4 16.5"]],beer:[[6,"M17 11h1a3 3 0 0 1 0 6h-1"],[6,"M9 12v6"],[6,"M13 12v6"],[6,"M14 7.5c-1 0-1.44.5-3 .5s-2-.5-3-.5-1.72.5-2.5.5a2.5 2.5 0 0 1 0-5c.78 0 1.57.5 2.5.5S9.44 2 11 2s2 1.5 3 1.5 1.72-.5 2.5-.5a2.5 2.5 0 0 1 0 5c-.78 0-1.5-.5-2.5-.5Z"],[6,"M5 8v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8"]],"bell-minus":[[6,"M13.73 21a2 2 0 0 1-3.46 0"],[6,"M21 5h-6"],[6,"M18.021 9C18.29 15.193 21 17 21 17H3s3-2 3-9a6 6 0 0 1 7-5.916"]],"bell-off":[[6,"M13.73 21a2 2 0 0 1-3.46 0"],[6,"M18.63 13A17.888 17.888 0 0 1 18 8"],[6,"M6.26 6.26A5.86 5.86 0 0 0 6 8c0 7-3 9-3 9h14"],[6,"M18 8a6 6 0 0 0-9.33-5"],[6,"m2 2 20 20"]],"bell-plus":[[6,"M18.387 12C19.198 15.799 21 17 21 17H3s3-2 3-9a6 6 0 0 1 7-5.916"],[6,"M13.73 21a2 2 0 0 1-3.46 0"],[6,"M18 2v6"],[6,"M21 5h-6"]],"bell-ring":[[6,"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"],[6,"M13.73 21a2 2 0 0 1-3.46 0"],[6,"M2 8c0-2.2.7-4.3 2-6"],[6,"M22 8a10 10 0 0 0-2-6"]],bell:[[6,"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"],[6,"M13.73 21a2 2 0 0 1-3.46 0"]],bike:[[1,5.5,17.5,3.5],[1,18.5,17.5,3.5],[6,"M15 6a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm-3 11.5V14l-3-3 4-3 2 3h2"]],binary:[[6,"M6 20h4"],[6,"M14 10h4"],[6,"M6 14h2v6"],[6,"M14 4h2v6"],[5,6,4,4,6],[5,14,14,4,6]],bitcoin:[[6,"M11.767 19.089c4.924.868 6.14-6.025 1.216-6.894m-1.216 6.894L5.86 18.047m5.908 1.042-.347 1.97m1.563-8.864c4.924.869 6.14-6.025 1.215-6.893m-1.215 6.893-3.94-.694m5.155-6.2L8.29 4.26m5.908 1.042.348-1.97M7.48 20.364l3.126-17.727"]],"bluetooth-connected":[[6,"m7 7 10 10-5 5V2l5 5L7 17"],[0,18,12,21,12],[0,3,12,6,12]],"bluetooth-off":[[6,"m17 17-5 5V12l-5 5"],[6,"m2 2 20 20"],[6,"M14.5 9.5 17 7l-5-5v4.5"]],"bluetooth-searching":[[6,"m7 7 10 10-5 5V2l5 5L7 17"],[6,"M20.83 14.83a4 4 0 0 0 0-5.66"],[6,"M18 12h.01"]],bluetooth:[[6,"m7 7 10 10-5 5V2l5 5L7 17"]],bold:[[6,"M6 4h8a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z"],[6,"M6 12h9a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z"]],bomb:[[1,11,13,9],[6,"m19.5 9.5 1.8-1.8a2.4 2.4 0 0 0 0-3.4l-1.6-1.6a2.41 2.41 0 0 0-3.4 0l-1.8 1.8"],[6,"m22 2-1.5 1.5"]],bone:[[6,"M18.6 9.82c-.52-.21-1.15-.25-1.54.15l-7.07 7.06c-.39.39-.36 1.03-.15 1.54.12.3.16.6.16.93a2.5 2.5 0 0 1-5 0c0-.26-.24-.5-.5-.5a2.5 2.5 0 1 1 .96-4.82c.5.21 1.14.25 1.53-.15l7.07-7.06c.39-.39.36-1.03.15-1.54-.12-.3-.21-.6-.21-.93a2.5 2.5 0 0 1 5 0c.01.26.24.49.5.5a2.5 2.5 0 1 1-.9 4.82Z"]],"book-open-check":[[6,"M8 3H2v15h7c1.7 0 3 1.3 3 3V7c0-2.2-1.8-4-4-4Z"],[6,"m16 12 2 2 4-4"],[6,"M22 6V3h-6c-2.2 0-4 1.8-4 4v14c0-1.7 1.3-3 3-3h7v-2.3"]],"book-open":[[6,"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"],[6,"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"]],book:[[6,"M4 19.5A2.5 2.5 0 0 1 6.5 17H20"],[6,"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"]],"bookmark-minus":[[6,"m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z"],[0,15,10,9,10]],"bookmark-plus":[[6,"m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z"],[0,12,7,12,13],[0,15,10,9,10]],bookmark:[[6,"m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z"]],bot:[[5,3,11,18,10,2],[1,12,5,2],[6,"M12 7v4"],[0,8,16,8,16],[0,16,16,16,16]],"box-select":[[6,"M5 3a2 2 0 0 0-2 2"],[6,"M19 3a2 2 0 0 1 2 2"],[6,"M21 19a2 2 0 0 1-2 2"],[6,"M5 21a2 2 0 0 1-2-2"],[6,"M9 3h1"],[6,"M9 21h1"],[6,"M14 3h1"],[6,"M14 21h1"],[6,"M3 9v1"],[6,"M21 9v1"],[6,"M3 14v1"],[6,"M21 14v1"]],box:[[6,"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"],[2,"3.29 7 12 12 20.71 7"],[0,12,22,12,12]],boxes:[[6,"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z"],[6,"m7 16.5-4.74-2.85"],[6,"m7 16.5 5-3"],[6,"M7 16.5v5.17"],[6,"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z"],[6,"m17 16.5-5-3"],[6,"m17 16.5 4.74-2.85"],[6,"M17 16.5v5.17"],[6,"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z"],[6,"M12 8 7.26 5.15"],[6,"m12 8 4.74-2.85"],[6,"M12 13.5V8"]],briefcase:[[5,2,7,20,14,2,2],[6,"M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"]],brush:[[6,"m9.06 11.9 8.07-8.06a2.85 2.85 0 1 1 4.03 4.03l-8.06 8.08"],[6,"M7.07 14.94c-1.66 0-3 1.35-3 3.02 0 1.33-2.5 1.52-2 2.02 1.08 1.1 2.49 2.02 4 2.02 2.2 0 4-1.8 4-4.04a3.01 3.01 0 0 0-3-3.02z"]],bug:[[5,8,6,8,14,4],[6,"m19 7-3 2"],[6,"m5 7 3 2"],[6,"m19 19-3-2"],[6,"m5 19 3-2"],[6,"M20 13h-4"],[6,"M4 13h4"],[6,"m10 4 1 2"],[6,"m14 4-1 2"]],"building-2":[[6,"M6 22V4c0-.27 0-.55.07-.82a1.477 1.477 0 0 1 1.1-1.11C7.46 2 8.73 2 9 2h7c.27 0 .55 0 .82.07a1.477 1.477 0 0 1 1.11 1.1c.07.28.07.56.07.83v18H6Z"],[6,"M2 14v6c0 1.1.9 2 2 2h2V12H4c-.27 0-.55 0-.82.07-.27.07-.52.2-.72.4-.19.19-.32.44-.39.71A3.4 3.4 0 0 0 2 14Z"],[6,"M20.82 9.07A3.4 3.4 0 0 0 20 9h-2v13h2a2 2 0 0 0 2-2v-9c0-.28 0-.55-.07-.82-.07-.27-.2-.52-.4-.72-.19-.19-.44-.32-.71-.39Z"],[6,"M10 6h4"],[6,"M10 10h4"],[6,"M10 14h4"],[6,"M10 18h4"]],building:[[5,4,2,16,20,2,2],[6,"M9 22v-4h6v4"],[6,"M8 6h.01"],[6,"M16 6h.01"],[6,"M12 6h.01"],[6,"M12 10h.01"],[6,"M12 14h.01"],[6,"M16 10h.01"],[6,"M16 14h.01"],[6,"M8 10h.01"],[6,"M8 14h.01"]],bus:[[6,"M19 17h2l.64-2.54c.24-.959.24-1.962 0-2.92l-1.07-4.27A3 3 0 0 0 17.66 5H4a2 2 0 0 0-2 2v10h2"],[6,"M14 17H9"],[1,6.5,17.5,2.5],[1,16.5,17.5,2.5]],cake:[[6,"M20 21v-8a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v8"],[6,"M4 16s.5-1 2-1 2.5 2 4 2 2.5-2 4-2 2.5 2 4 2 2-1 2-1"],[6,"M2 21h20"],[6,"M7 8v2"],[6,"M12 8v2"],[6,"M17 8v2"],[6,"M7 4h.01"],[6,"M12 4h.01"],[6,"M17 4h.01"]],calculator:[[5,4,2,16,20,2],[0,8,6,16,6],[0,16,14,16,18],[6,"M16 10h.01"],[6,"M12 10h.01"],[6,"M8 10h.01"],[6,"M12 14h.01"],[6,"M8 14h.01"],[6,"M12 18h.01"],[6,"M8 18h.01"]],"calendar-check-2":[[6,"M21 14V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8"],[0,16,2,16,6],[0,8,2,8,6],[0,3,10,21,10],[6,"m16 20 2 2 4-4"]],"calendar-check":[[5,3,4,18,18,2,2],[0,16,2,16,6],[0,8,2,8,6],[0,3,10,21,10],[6,"m9 16 2 2 4-4"]],"calendar-clock":[[6,"M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5"],[6,"M16 2v4"],[6,"M8 2v4"],[6,"M3 10h5"],[6,"M17.5 17.5 16 16.25V14"],[6,"M22 16a6 6 0 1 1-12 0 6 6 0 0 1 12 0Z"]],"calendar-days":[[5,3,4,18,18,2,2],[0,16,2,16,6],[0,8,2,8,6],[0,3,10,21,10],[6,"M8 14h.01"],[6,"M12 14h.01"],[6,"M16 14h.01"],[6,"M8 18h.01"],[6,"M12 18h.01"],[6,"M16 18h.01"]],"calendar-heart":[[6,"M21 10V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h7"],[6,"M16 2v4"],[6,"M8 2v4"],[6,"M3 10h18"],[6,"M21.29 14.7a2.43 2.43 0 0 0-2.65-.52c-.3.12-.57.3-.8.53l-.34.34-.35-.34a2.43 2.43 0 0 0-2.65-.53c-.3.12-.56.3-.79.53-.95.94-1 2.53.2 3.74L17.5 22l3.6-3.55c1.2-1.21 1.14-2.8.19-3.74Z"]],"calendar-minus":[[6,"M21 13V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8"],[0,16,2,16,6],[0,8,2,8,6],[0,3,10,21,10],[0,16,19,22,19]],"calendar-off":[[6,"M4.18 4.18A2 2 0 0 0 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 1.82-1.18"],[6,"M21 15.5V6a2 2 0 0 0-2-2H9.5"],[6,"M16 2v4"],[6,"M3 10h7"],[6,"M21 10h-5.5"],[0,2,2,22,22]],"calendar-plus":[[6,"M21 13V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8"],[0,16,2,16,6],[0,8,2,8,6],[0,3,10,21,10],[0,19,16,19,22],[0,16,19,22,19]],"calendar-range":[[5,3,4,18,18,2,2],[0,16,2,16,6],[0,8,2,8,6],[0,3,10,21,10],[6,"M17 14h-6"],[6,"M13 18H7"],[6,"M7 14h.01"],[6,"M17 18h.01"]],"calendar-search":[[6,"M21 12V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h7.5"],[6,"M16 2v4"],[6,"M8 2v4"],[6,"M3 10h18"],[6,"M18 21a3 3 0 1 0 0-6 3 3 0 0 0 0 6v0Z"],[6,"m22 22-1.5-1.5"]],"calendar-x2":[[6,"M21 13V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8"],[0,16,2,16,6],[0,8,2,8,6],[0,3,10,21,10],[0,17,17,22,22],[0,17,22,22,17]],"calendar-x":[[5,3,4,18,18,2,2],[0,16,2,16,6],[0,8,2,8,6],[0,3,10,21,10],[0,10,14,14,18],[0,14,14,10,18]],calendar:[[5,3,4,18,18,2,2],[0,16,2,16,6],[0,8,2,8,6],[0,3,10,21,10]],"camera-off":[[0,2,2,22,22],[6,"M7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16"],[6,"M9.5 4h5L17 7h3a2 2 0 0 1 2 2v7.5"],[6,"M14.121 15.121A3 3 0 1 1 9.88 10.88"]],camera:[[6,"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"],[1,12,13,3]],"candy-off":[[6,"m8.5 8.5-1 1a4.95 4.95 0 0 0 7 7l1-1"],[6,"M11.843 6.187A4.947 4.947 0 0 1 16.5 7.5a4.947 4.947 0 0 1 1.313 4.657"],[6,"M14 16.5V14"],[6,"M14 6.5v1.843"],[6,"M10 10v7.5"],[6,"m16 7 1-5 1.367.683A3 3 0 0 0 19.708 3H21v1.292a3 3 0 0 0 .317 1.341L22 7l-5 1"],[6,"m8 17-1 5-1.367-.683A3 3 0 0 0 4.292 21H3v-1.292a3 3 0 0 0-.317-1.341L2 17l5-1"],[0,2,2,22,22]],candy:[[6,"m9.5 7.5-2 2a4.95 4.95 0 1 0 7 7l2-2a4.95 4.95 0 1 0-7-7Z"],[6,"M14 6.5v10"],[6,"M10 7.5v10"],[6,"m16 7 1-5 1.37.68A3 3 0 0 0 19.7 3H21v1.3c0 .46.1.92.32 1.33L22 7l-5 1"],[6,"m8 17-1 5-1.37-.68A3 3 0 0 0 4.3 21H3v-1.3a3 3 0 0 0-.32-1.33L2 17l5-1"]],car:[[6,"M14 16H9m10 0h3v-3.15a1 1 0 0 0-.84-.99L16 11l-2.7-3.6a1 1 0 0 0-.8-.4H5.24a2 2 0 0 0-1.8 1.1l-.8 1.63A6 6 0 0 0 2 12.42V16h2"],[1,6.5,16.5,2.5],[1,16.5,16.5,2.5]],carrot:[[6,"M2.27 21.7s9.87-3.5 12.73-6.36a4.5 4.5 0 0 0-6.36-6.37C5.77 11.84 2.27 21.7 2.27 21.7zM8.64 14l-2.05-2.04M15.34 15l-2.46-2.46"],[6,"M22 9s-1.33-2-3.5-2C16.86 7 15 9 15 9s1.33 2 3.5 2S22 9 22 9z"],[6,"M15 2s-2 1.33-2 3.5S15 9 15 9s2-1.84 2-3.5C17 3.33 15 2 15 2z"]],cast:[[6,"M2 8V6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6"],[6,"M2 12a9 9 0 0 1 8 8"],[6,"M2 16a5 5 0 0 1 4 4"],[0,2,20,2.01,20]],cat:[[6,"M12 5c.67 0 1.35.09 2 .26 1.78-2 5.03-2.84 6.42-2.26 1.4.58-.42 7-.42 7 .57 1.07 1 2.24 1 3.44C21 17.9 16.97 21 12 21s-9-3-9-7.56c0-1.25.5-2.4 1-3.44 0 0-1.89-6.42-.5-7 1.39-.58 4.72.23 6.5 2.23A9.04 9.04 0 0 1 12 5Z"],[6,"M8 14v.5"],[6,"M16 14v.5"],[6,"M11.25 16.25h1.5L12 17l-.75-.75Z"]],"check-check":[[6,"M18 6 7 17l-5-5"],[6,"m22 10-7.5 7.5L13 16"]],"check-circle-2":[[6,"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z"],[6,"m9 12 2 2 4-4"]],"check-circle":[[6,"M22 11.08V12a10 10 0 1 1-5.93-9.14"],[2,"22 4 12 14.01 9 11.01"]],"check-square":[[2,"9 11 12 14 22 4"],[6,"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"]],check:[[2,"20 6 9 17 4 12"]],"chef-hat":[[6,"M6 13.87A4 4 0 0 1 7.41 6a5.11 5.11 0 0 1 1.05-1.54 5 5 0 0 1 7.08 0A5.11 5.11 0 0 1 16.59 6 4 4 0 0 1 18 13.87V21H6Z"],[0,6,17,18,17]],cherry:[[6,"M2 17a5 5 0 0 0 10 0c0-2.76-2.5-5-5-3-2.5-2-5 .24-5 3Z"],[6,"M12 17a5 5 0 0 0 10 0c0-2.76-2.5-5-5-3-2.5-2-5 .24-5 3Z"],[6,"M7 14c3.22-2.91 4.29-8.75 5-12 1.66 2.38 4.94 9 5 12"],[6,"M22 9c-4.29 0-7.14-2.33-10-7 5.71 0 10 4.67 10 7Z"]],"chevron-down":[[2,"6 9 12 15 18 9"]],"chevron-first":[[2,"17 18 11 12 17 6"],[6,"M7 6v12"]],"chevron-last":[[2,"7 18 13 12 7 6"],[6,"M17 6v12"]],"chevron-left":[[2,"15 18 9 12 15 6"]],"chevron-right":[[2,"9 18 15 12 9 6"]],"chevron-up":[[2,"18 15 12 9 6 15"]],"chevrons-down-up":[[6,"m7 20 5-5 5 5"],[6,"m7 4 5 5 5-5"]],"chevrons-down":[[2,"7 13 12 18 17 13"],[2,"7 6 12 11 17 6"]],"chevrons-left-right":[[6,"m9 7-5 5 5 5"],[6,"m15 7 5 5-5 5"]],"chevrons-left":[[2,"11 17 6 12 11 7"],[2,"18 17 13 12 18 7"]],"chevrons-right-left":[[6,"m20 17-5-5 5-5"],[6,"m4 17 5-5-5-5"]],"chevrons-right":[[2,"13 17 18 12 13 7"],[2,"6 17 11 12 6 7"]],"chevrons-up-down":[[6,"m7 15 5 5 5-5"],[6,"m7 9 5-5 5 5"]],"chevrons-up":[[2,"17 11 12 6 7 11"],[2,"17 18 12 13 7 18"]],chrome:[[1,12,12,10],[1,12,12,4],[0,21.17,8,12,8],[0,3.95,6.06,8.54,14],[0,10.88,21.94,15.46,14]],"cigarette-off":[[0,2,2,22,22],[6,"M12 12H2v4h14"],[6,"M22 12v4"],[6,"M18 12h-.5"],[6,"M7 12v4"],[6,"M18 8c0-2.5-2-2.5-2-5"],[6,"M22 8c0-2.5-2-2.5-2-5"]],cigarette:[[6,"M18 12H2v4h16"],[6,"M22 12v4"],[6,"M7 12v4"],[6,"M18 8c0-2.5-2-2.5-2-5"],[6,"M22 8c0-2.5-2-2.5-2-5"]],"circle-dot":[[1,12,12,10],[1,12,12,1]],"circle-ellipsis":[[1,12,12,10],[6,"M17 12h.01"],[6,"M12 12h.01"],[6,"M7 12h.01"]],"circle-slashed":[[1,12,12,10],[6,"M22 2 2 22"]],circle:[[1,12,12,10]],citrus:[[6,"M5.51 18.49a12 12 0 0 0 16.12.78c.49-.41.49-1.15.03-1.6L6.34 2.33a1.08 1.08 0 0 0-1.6.03A12 12 0 0 0 5.5 18.5Z"],[6,"M8.34 15.66a8 8 0 0 0 10.4.78c.54-.4.54-1.16.06-1.64L9.2 5.2c-.48-.48-1.25-.48-1.64.06a8 8 0 0 0 .78 10.4Z"],[6,"m14 10-5.5 5.5"],[6,"M14 10v8"],[6,"M14 10H6"]],clapperboard:[[6,"M4 11v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8H4Z"],[6,"m4 11-.88-2.87a2 2 0 0 1 1.33-2.5l11.48-3.5a2 2 0 0 1 2.5 1.32l.87 2.87L4 11.01Z"],[6,"m6.6 4.99 3.38 4.2"],[6,"m11.86 3.38 3.38 4.2"]],"clipboard-check":[[5,8,2,8,4,1,1],[6,"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"],[6,"m9 14 2 2 4-4"]],"clipboard-copy":[[5,8,2,8,4,1,1],[6,"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2"],[6,"M16 4h2a2 2 0 0 1 2 2v4"],[6,"M21 14H11"],[6,"m15 10-4 4 4 4"]],"clipboard-edit":[[5,8,2,8,4,1,1],[6,"M10.42 12.61a2.1 2.1 0 1 1 2.97 2.97L7.95 21 4 22l.99-3.95 5.43-5.44Z"],[6,"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-5.5"],[6,"M4 13.5V6a2 2 0 0 1 2-2h2"]],"clipboard-list":[[5,8,2,8,4,1,1],[6,"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"],[6,"M12 11h4"],[6,"M12 16h4"],[6,"M8 11h.01"],[6,"M8 16h.01"]],"clipboard-signature":[[5,8,2,8,4,1,1],[6,"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-.5"],[6,"M16 4h2a2 2 0 0 1 1.73 1"],[6,"M18.42 9.61a2.1 2.1 0 1 1 2.97 2.97L16.95 17 13 18l.99-3.95 4.43-4.44Z"],[6,"M8 18h1"]],"clipboard-type":[[5,8,2,8,4,1,1],[6,"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"],[6,"M9 12v-1h6v1"],[6,"M11 17h2"],[6,"M12 11v6"]],"clipboard-x":[[5,8,2,8,4,1,1],[6,"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"],[6,"m15 11-6 6"],[6,"m9 11 6 6"]],clipboard:[[5,8,2,8,4,1,1],[6,"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"]],"clock-1":[[1,12,12,10],[2,"12 6 12 12 14.5 8"]],"clock-10":[[1,12,12,10],[2,"12 6 12 12 8 10"]],"clock-11":[[1,12,12,10],[2,"12 6 12 12 9.5 8"]],"clock-12":[[1,12,12,10],[2,"12 6 12 12"]],"clock-2":[[1,12,12,10],[2,"12 6 12 12 16 10"]],"clock-3":[[1,12,12,10],[2,"12 6 12 12 16.5 12"]],"clock-4":[[1,12,12,10],[2,"12 6 12 12 16 14"]],"clock-5":[[1,12,12,10],[2,"12 6 12 12 14.5 16"]],"clock-6":[[1,12,12,10],[2,"12 6 12 12 12 16.5"]],"clock-7":[[1,12,12,10],[2,"12 6 12 12 9.5 16"]],"clock-8":[[1,12,12,10],[2,"12 6 12 12 8 14"]],"clock-9":[[1,12,12,10],[2,"12 6 12 12 7.5 12"]],clock:[[1,12,12,10],[2,"12 6 12 12 16 14"]],"cloud-cog":[[6,"M20 16.2A4.5 4.5 0 0 0 17.5 8h-1.8A7 7 0 1 0 4 14.9"],[1,12,17,3],[6,"M12 13v1"],[6,"M12 20v1"],[6,"M16 17h-1"],[6,"M9 17H8"],[6,"m15 14-.88.88"],[6,"M9.88 19.12 9 20"],[6,"m15 20-.88-.88"],[6,"M9.88 14.88 9 14"]],"cloud-drizzle":[[6,"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"],[6,"M8 19v1"],[6,"M8 14v1"],[6,"M16 19v1"],[6,"M16 14v1"],[6,"M12 21v1"],[6,"M12 16v1"]],"cloud-fog":[[6,"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"],[6,"M16 17H7"],[6,"M17 21H9"]],"cloud-hail":[[6,"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"],[6,"M16 14v2"],[6,"M8 14v2"],[6,"M16 20h.01"],[6,"M8 20h.01"],[6,"M12 16v2"],[6,"M12 22h.01"]],"cloud-lightning":[[6,"M6 16.326A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 .5 8.973"],[6,"m13 12-3 5h4l-3 5"]],"cloud-moon-rain":[[6,"M10.083 9A6.002 6.002 0 0 1 16 4a4.243 4.243 0 0 0 6 6c0 2.22-1.206 4.16-3 5.197"],[6,"M3 20a5 5 0 1 1 8.9-4H13a3 3 0 0 1 2 5.24"],[6,"M11 20v2"],[6,"M7 19v2"]],"cloud-moon":[[6,"M13 22H7a5 5 0 1 1 4.9-6H13a3 3 0 0 1 0 6Z"],[6,"M10.083 9A6.002 6.002 0 0 1 16 4a4.243 4.243 0 0 0 6 6c0 2.22-1.206 4.16-3 5.197"]],"cloud-off":[[6,"m2 2 20 20"],[6,"M5.782 5.782A7 7 0 0 0 9 19h8.5a4.5 4.5 0 0 0 1.307-.193"],[6,"M21.532 16.5A4.5 4.5 0 0 0 17.5 10h-1.79A7.008 7.008 0 0 0 10 5.07"]],"cloud-rain-wind":[[6,"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"],[6,"m9.2 22 3-7"],[6,"m9 13-3 7"],[6,"m17 13-3 7"]],"cloud-rain":[[6,"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"],[6,"M16 14v6"],[6,"M8 14v6"],[6,"M12 16v6"]],"cloud-snow":[[6,"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"],[6,"M8 15h.01"],[6,"M8 19h.01"],[6,"M12 17h.01"],[6,"M12 21h.01"],[6,"M16 15h.01"],[6,"M16 19h.01"]],"cloud-sun-rain":[[6,"M12 2v2"],[6,"m4.93 4.93 1.41 1.41"],[6,"M20 12h2"],[6,"m19.07 4.93-1.41 1.41"],[6,"M15.947 12.65a4 4 0 0 0-5.925-4.128"],[6,"M3 20a5 5 0 1 1 8.9-4H13a3 3 0 0 1 2 5.24"],[6,"M11 20v2"],[6,"M7 19v2"]],"cloud-sun":[[6,"M12 2v2"],[6,"m4.93 4.93 1.41 1.41"],[6,"M20 12h2"],[6,"m19.07 4.93-1.41 1.41"],[6,"M15.947 12.65a4 4 0 0 0-5.925-4.128"],[6,"M13 22H7a5 5 0 1 1 4.9-6H13a3 3 0 0 1 0 6Z"]],cloud:[[6,"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z"]],cloudy:[[6,"M17.5 21H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z"],[6,"M22 10a3 3 0 0 0-3-3h-2.207a5.502 5.502 0 0 0-10.702.5"]],clover:[[6,"M16.2 3.8a2.7 2.7 0 0 0-3.81 0l-.4.38-.4-.4a2.7 2.7 0 0 0-3.82 0C6.73 4.85 6.67 6.64 8 8l4 4 4-4c1.33-1.36 1.27-3.15.2-4.2z"],[6,"M8 8c-1.36-1.33-3.15-1.27-4.2-.2a2.7 2.7 0 0 0 0 3.81l.38.4-.4.4a2.7 2.7 0 0 0 0 3.82C4.85 17.27 6.64 17.33 8 16"],[6,"M16 16c1.36 1.33 3.15 1.27 4.2.2a2.7 2.7 0 0 0 0-3.81l-.38-.4.4-.4a2.7 2.7 0 0 0 0-3.82C19.15 6.73 17.36 6.67 16 8"],[6,"M7.8 20.2a2.7 2.7 0 0 0 3.81 0l.4-.38.4.4a2.7 2.7 0 0 0 3.82 0c1.06-1.06 1.12-2.85-.21-4.21l-4-4-4 4c-1.33 1.36-1.27 3.15-.2 4.2z"],[6,"m7 17-5 5"]],"code-2":[[6,"m18 16 4-4-4-4"],[6,"m6 8-4 4 4 4"],[6,"m14.5 4-5 16"]],code:[[2,"16 18 22 12 16 6"],[2,"8 6 2 12 8 18"]],codepen:[[3,"12 2 22 8.5 22 15.5 12 22 2 15.5 2 8.5 12 2"],[0,12,22,12,15.5],[2,"22 8.5 12 15.5 2 8.5"],[2,"2 15.5 12 8.5 22 15.5"],[0,12,2,12,8.5]],codesandbox:[[6,"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"],[2,"7.5 4.21 12 6.81 16.5 4.21"],[2,"7.5 19.79 7.5 14.6 3 12"],[2,"21 12 16.5 14.6 16.5 19.79"],[2,"3.27 6.96 12 12.01 20.73 6.96"],[0,12,22.08,12,12]],coffee:[[6,"M17 8h1a4 4 0 1 1 0 8h-1"],[6,"M3 8h14v9a4 4 0 0 1-4 4H7a4 4 0 0 1-4-4Z"],[0,6,2,6,4],[0,10,2,10,4],[0,14,2,14,4]],cog:[[6,"M12 20a8 8 0 1 0 0-16 8 8 0 0 0 0 16Z"],[6,"M12 14a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z"],[6,"M12 2v2"],[6,"M12 22v-2"],[6,"m17 20.66-1-1.73"],[6,"M11 10.27 7 3.34"],[6,"m20.66 17-1.73-1"],[6,"m3.34 7 1.73 1"],[6,"M14 12h8"],[6,"M2 12h2"],[6,"m20.66 7-1.73 1"],[6,"m3.34 17 1.73-1"],[6,"m17 3.34-1 1.73"],[6,"m11 13.73-4 6.93"]],coins:[[1,8,8,6],[6,"M18.09 10.37A6 6 0 1 1 10.34 18"],[6,"M7 6h1v4"],[6,"m16.71 13.88.7.71-2.82 2.82"]],columns:[[5,3,3,18,18,2,2],[0,12,3,12,21]],command:[[6,"M18 3a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3H6a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3V6a3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3h12a3 3 0 0 0 3-3 3 3 0 0 0-3-3z"]],compass:[[1,12,12,10],[3,"16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76"]],component:[[6,"M5.5 8.5 9 12l-3.5 3.5L2 12l3.5-3.5Z"],[6,"m12 2 3.5 3.5L12 9 8.5 5.5 12 2Z"],[6,"M18.5 8.5 22 12l-3.5 3.5L15 12l3.5-3.5Z"],[6,"m12 15 3.5 3.5L12 22l-3.5-3.5L12 15Z"]],"concierge-bell":[[6,"M2 18a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v2H2v-2Z"],[6,"M20 16a8 8 0 1 0-16 0"],[6,"M12 4v4"],[6,"M10 4h4"]],contact:[[6,"M17 18a2 2 0 0 0-2-2H9a2 2 0 0 0-2 2"],[5,3,4,18,18,2],[1,12,10,2],[0,8,2,8,4],[0,16,2,16,4]],contrast:[[1,12,12,10],[6,"M12 18a6 6 0 0 0 0-12v12z"]],cookie:[[6,"M12 2a10 10 0 1 0 10 10 4 4 0 0 1-5-5 4 4 0 0 1-5-5"],[6,"M8.5 8.5v.01"],[6,"M16 15.5v.01"],[6,"M12 12v.01"],[6,"M11 17v.01"],[6,"M7 14v.01"]],copy:[[5,9,9,13,13,2,2],[6,"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"]],copyleft:[[1,12,12,10],[6,"M9 9.35a4 4 0 1 1 0 5.3"]],copyright:[[1,12,12,10],[6,"M15 9.354a4 4 0 1 0 0 5.292"]],"corner-down-left":[[2,"9 10 4 15 9 20"],[6,"M20 4v7a4 4 0 0 1-4 4H4"]],"corner-down-right":[[2,"15 10 20 15 15 20"],[6,"M4 4v7a4 4 0 0 0 4 4h12"]],"corner-left-down":[[2,"14 15 9 20 4 15"],[6,"M20 4h-7a4 4 0 0 0-4 4v12"]],"corner-left-up":[[2,"14 9 9 4 4 9"],[6,"M20 20h-7a4 4 0 0 1-4-4V4"]],"corner-right-down":[[2,"10 15 15 20 20 15"],[6,"M4 4h7a4 4 0 0 1 4 4v12"]],"corner-right-up":[[2,"10 9 15 4 20 9"],[6,"M4 20h7a4 4 0 0 0 4-4V4"]],"corner-up-left":[[2,"9 14 4 9 9 4"],[6,"M20 20v-7a4 4 0 0 0-4-4H4"]],"corner-up-right":[[2,"15 14 20 9 15 4"],[6,"M4 20v-7a4 4 0 0 1 4-4h12"]],cpu:[[5,4,4,16,16,2,2],[5,9,9,6,6],[0,9,2,9,4],[0,15,2,15,4],[0,9,21,9,22],[0,15,20,15,22],[0,20,9,22,9],[0,20,14,22,14],[0,2,9,4,9],[0,2,14,4,14]],"credit-card":[[5,2,5,20,14,2],[0,2,10,22,10]],croissant:[[6,"m4.6 13.11 5.79-3.21c1.89-1.05 4.79 1.78 3.71 3.71l-3.22 5.81C8.8 23.16.79 15.23 4.6 13.11Z"],[6,"m10.5 9.5-1-2.29C9.2 6.48 8.8 6 8 6H4.5C2.79 6 2 6.5 2 8.5a7.71 7.71 0 0 0 2 4.83"],[6,"M8 6c0-1.55.24-4-2-4-2 0-2.5 2.17-2.5 4"],[6,"m14.5 13.5 2.29 1c.73.3 1.21.7 1.21 1.5v3.5c0 1.71-.5 2.5-2.5 2.5a7.71 7.71 0 0 1-4.83-2"],[6,"M18 16c1.55 0 4-.24 4 2 0 2-2.17 2.5-4 2.5"]],crop:[[6,"M6 2v14a2 2 0 0 0 2 2h14"],[6,"M18 22V8a2 2 0 0 0-2-2H2"]],cross:[[6,"M11 2a2 2 0 0 0-2 2v5H4a2 2 0 0 0-2 2v2c0 1.1.9 2 2 2h5v5c0 1.1.9 2 2 2h2a2 2 0 0 0 2-2v-5h5a2 2 0 0 0 2-2v-2a2 2 0 0 0-2-2h-5V4a2 2 0 0 0-2-2h-2z"]],crosshair:[[1,12,12,10],[0,22,12,18,12],[0,6,12,2,12],[0,12,6,12,2],[0,12,22,12,18]],crown:[[6,"m2 4 3 12h14l3-12-6 7-4-7-4 7-6-7zm3 16h14"]],"cup-soda":[[6,"m6 8 1.75 12.28a2 2 0 0 0 2 1.72h4.54a2 2 0 0 0 2-1.72L18 8"],[6,"M5 8h14"],[6,"M7 15a6.47 6.47 0 0 1 5 0 6.47 6.47 0 0 0 5 0"],[6,"m12 8 1-6h2"]],"curly-braces":[[6,"M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1"],[6,"M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1"]],currency:[[1,12,12,8],[0,3,3,6,6],[0,21,3,18,6],[0,3,21,6,18],[0,21,21,18,18]],"database-backup":[[4,12,5,9,3],[6,"M3 12c0 1.18 2.03 2.2 5 2.7"],[6,"M21 5v4.5"],[6,"m12 16 1.27-1.35a4.75 4.75 0 1 1 .41 5.74"],[6,"M12 12v4h4"],[6,"M3 5v14c0 1.43 2.97 2.63 7 2.93"]],database:[[4,12,5,9,3],[6,"M21 12c0 1.66-4 3-9 3s-9-1.34-9-3"],[6,"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5"]],delete:[[6,"M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2Z"],[0,18,9,12,15],[0,12,9,18,15]],diamond:[[5,12,1,15.56,15.56,2.41,0,"rotate(45 12 1)"]],"dice-1":[[5,3,3,18,18,2,2],[6,"M12 12h.01"]],"dice-2":[[5,3,3,18,18,2,2],[6,"M15 9h.01"],[6,"M9 15h.01"]],"dice-3":[[5,3,3,18,18,2,2],[6,"M16 8h.01"],[6,"M12 12h.01"],[6,"M8 16h.01"]],"dice-4":[[5,3,3,18,18,2,2],[6,"M16 8h.01"],[6,"M8 8h.01"],[6,"M8 16h.01"],[6,"M16 16h.01"]],"dice-5":[[5,3,3,18,18,2,2],[6,"M16 8h.01"],[6,"M8 8h.01"],[6,"M8 16h.01"],[6,"M16 16h.01"],[6,"M12 12h.01"]],"dice-6":[[5,3,3,18,18,2,2],[6,"M16 8h.01"],[6,"M16 12h.01"],[6,"M16 16h.01"],[6,"M8 8h.01"],[6,"M8 12h.01"],[6,"M8 16h.01"]],dices:[[5,2,10,12,12,2,2],[6,"m17.92 14 3.5-3.5a2.24 2.24 0 0 0 0-3l-5-4.92a2.24 2.24 0 0 0-3 0L10 6"],[6,"M6 18h.01"],[6,"M10 14h.01"],[6,"M15 6h.01"],[6,"M18 9h.01"]],diff:[[6,"M12 3v14"],[6,"M5 10h14"],[6,"M5 21h14"]],disc:[[1,12,12,10],[1,12,12,3]],"divide-circle":[[0,8,12,16,12],[0,12,16,12,16],[0,12,8,12,8],[1,12,12,10]],"divide-square":[[5,3,3,18,18,2,2],[0,8,12,16,12],[0,12,16,12,16],[0,12,8,12,8]],divide:[[1,12,6,1],[0,5,12,19,12],[1,12,18,1]],"dna-off":[[6,"M15 2c-1.35 1.5-2.092 3-2.5 4.5M9 22c1.35-1.5 2.092-3 2.5-4.5"],[6,"M2 15c3.333-3 6.667-3 10-3m10-3c-1.5 1.35-3 2.092-4.5 2.5"],[6,"m17 6-2.5-2.5"],[6,"m14 8-1.5-1.5"],[6,"m7 18 2.5 2.5"],[6,"m3.5 14.5.5.5"],[6,"m20 9 .5.5"],[6,"m6.5 12.5 1 1"],[6,"m16.5 10.5 1 1"],[6,"m10 16 1.5 1.5"],[0,2,2,22,22]],dna:[[6,"M2 15c6.667-6 13.333 0 20-6"],[6,"M9 22c1.798-1.998 2.518-3.995 2.807-5.993"],[6,"M15 2c-1.798 1.998-2.518 3.995-2.807 5.993"],[6,"m17 6-2.5-2.5"],[6,"m14 8-1-1"],[6,"m7 18 2.5 2.5"],[6,"m3.5 14.5.5.5"],[6,"m20 9 .5.5"],[6,"m6.5 12.5 1 1"],[6,"m16.5 10.5 1 1"],[6,"m10 16 1.5 1.5"]],dog:[[6,"M10 5.172C10 3.782 8.423 2.679 6.5 3c-2.823.47-4.113 6.006-4 7 .08.703 1.725 1.722 3.656 1 1.261-.472 1.96-1.45 2.344-2.5"],[6,"M14.267 5.172c0-1.39 1.577-2.493 3.5-2.172 2.823.47 4.113 6.006 4 7-.08.703-1.725 1.722-3.656 1-1.261-.472-1.855-1.45-2.239-2.5"],[6,"M8 14v.5"],[6,"M16 14v.5"],[6,"M11.25 16.25h1.5L12 17l-.75-.75Z"],[6,"M4.42 11.247A13.152 13.152 0 0 0 4 14.556C4 18.728 7.582 21 12 21s8-2.272 8-6.444c0-1.061-.162-2.2-.493-3.309m-9.243-6.082A8.801 8.801 0 0 1 12 5c.78 0 1.5.108 2.161.306"]],"dollar-sign":[[0,12,2,12,22],[6,"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"]],"download-cloud":[[6,"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"],[6,"M12 12v9"],[6,"m8 17 4 4 4-4"]],download:[[6,"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"],[2,"7 10 12 15 17 10"],[0,12,15,12,3]],dribbble:[[1,12,12,10],[6,"M19.13 5.09C15.22 9.14 10 10.44 2.25 10.94"],[6,"M21.75 12.84c-6.62-1.41-12.14 1-16.38 6.32"],[6,"M8.56 2.75c4.37 6 6 9.42 8 17.72"]],droplet:[[6,"M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5C6 11.1 5 13 5 15a7 7 0 0 0 7 7z"]],droplets:[[6,"M7 16.3c2.2 0 4-1.83 4-4.05 0-1.16-.57-2.26-1.71-3.19S7.29 6.75 7 5.3c-.29 1.45-1.14 2.84-2.29 3.76S3 11.1 3 12.25c0 2.22 1.8 4.05 4 4.05z"],[6,"M12.56 6.6A10.97 10.97 0 0 0 14 3.02c.5 2.5 2 4.9 4 6.5s3 3.5 3 5.5a6.98 6.98 0 0 1-11.91 4.97"]],drumstick:[[6,"M15.45 15.4c-2.13.65-4.3.32-5.7-1.1-2.29-2.27-1.76-6.5 1.17-9.42 2.93-2.93 7.15-3.46 9.43-1.18 1.41 1.41 1.74 3.57 1.1 5.71-1.4-.51-3.26-.02-4.64 1.36-1.38 1.38-1.87 3.23-1.36 4.63z"],[6,"m11.25 15.6-2.16 2.16a2.5 2.5 0 1 1-4.56 1.73 2.49 2.49 0 0 1-1.41-4.24 2.5 2.5 0 0 1 3.14-.32l2.16-2.16"]],dumbbell:[[6,"m6.5 6.5 11 11"],[6,"m21 21-1-1"],[6,"m3 3 1 1"],[6,"m18 22 4-4"],[6,"m2 6 4-4"],[6,"m3 10 7-7"],[6,"m14 21 7-7"]],"ear-off":[[6,"M6 18.5a3.5 3.5 0 1 0 7 0c0-1.57.92-2.52 2.04-3.46"],[6,"M6 8.5c0-.75.13-1.47.36-2.14"],[6,"M8.8 3.15A6.5 6.5 0 0 1 19 8.5c0 1.63-.44 2.81-1.09 3.76"],[6,"M12.5 6A2.5 2.5 0 0 1 15 8.5M10 13a2 2 0 0 0 1.82-1.18"],[0,2,2,22,22]],ear:[[6,"M6 8.5a6.5 6.5 0 1 1 13 0c0 6-6 6-6 10a3.5 3.5 0 1 1-7 0"],[6,"M15 8.5a2.5 2.5 0 0 0-5 0v1a2 2 0 1 1 0 4"]],"edit-2":[[6,"M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"]],"edit-3":[[6,"M12 20h9"],[6,"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z"]],edit:[[6,"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"],[6,"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"]],"egg-fried":[[1,11.5,12.5,3.5],[6,"M3 8c0-3.5 2.5-6 6.5-6 5 0 4.83 3 7.5 5s5 2 5 6c0 4.5-2.5 6.5-7 6.5-2.5 0-2.5 2.5-6 2.5s-7-2-7-5.5c0-3 1.5-3 1.5-5C3.5 10 3 9 3 8Z"]],"egg-off":[[6,"M6.399 6.399C5.362 8.157 4.65 10.189 4.5 12c-.37 4.43 1.27 9.95 7.5 10 3.256-.026 5.259-1.547 6.375-3.625"],[6,"M19.532 13.875A14.07 14.07 0 0 0 19.5 12c-.36-4.34-3.95-9.96-7.5-10-1.04.012-2.082.502-3.046 1.297"],[0,2,2,22,22]],egg:[[6,"M12 22c6.23-.05 7.87-5.57 7.5-10-.36-4.34-3.95-9.96-7.5-10-3.55.04-7.14 5.66-7.5 10-.37 4.43 1.27 9.95 7.5 10z"]],"equal-not":[[0,5,9,19,9],[0,5,15,19,15],[0,19,5,5,19]],equal:[[0,5,9,19,9],[0,5,15,19,15]],eraser:[[6,"m7 21-4.3-4.3c-1-1-1-2.5 0-3.4l9.6-9.6c1-1 2.5-1 3.4 0l5.6 5.6c1 1 1 2.5 0 3.4L13 21"],[6,"M22 21H7"],[6,"m5 11 9 9"]],euro:[[6,"M4 10h12"],[6,"M4 14h9"],[6,"M19 6a7.7 7.7 0 0 0-5.2-2A7.9 7.9 0 0 0 6 12c0 4.4 3.5 8 7.8 8 2 0 3.8-.8 5.2-2"]],expand:[[6,"m21 21-6-6m6 6v-4.8m0 4.8h-4.8"],[6,"M3 16.2V21m0 0h4.8M3 21l6-6"],[6,"M21 7.8V3m0 0h-4.8M21 3l-6 6"],[6,"M3 7.8V3m0 0h4.8M3 3l6 6"]],"external-link":[[6,"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"],[2,"15 3 21 3 21 9"],[0,10,14,21,3]],"eye-off":[[6,"M9.88 9.88a3 3 0 1 0 4.24 4.24"],[6,"M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68"],[6,"M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61"],[0,2,2,22,22]],eye:[[6,"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"],[1,12,12,3]],facebook:[[6,"M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"]],factory:[[6,"M2 20a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V8l-7 5V8l-7 5V4a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z"],[6,"M17 18h1"],[6,"M12 18h1"],[6,"M7 18h1"]],fan:[[6,"M10.827 16.379a6.082 6.082 0 0 1-8.618-7.002l5.412 1.45a6.082 6.082 0 0 1 7.002-8.618l-1.45 5.412a6.082 6.082 0 0 1 8.618 7.002l-5.412-1.45a6.082 6.082 0 0 1-7.002 8.618l1.45-5.412Z"],[6,"M12 12v.01"]],"fast-forward":[[3,"13 19 22 12 13 5 13 19"],[3,"2 19 11 12 2 5 2 19"]],feather:[[6,"M20.24 12.24a6 6 0 0 0-8.49-8.49L5 10.5V19h8.5z"],[0,16,8,2,22],[0,17.5,15,9,15]],figma:[[6,"M5 5.5A3.5 3.5 0 0 1 8.5 2H12v7H8.5A3.5 3.5 0 0 1 5 5.5z"],[6,"M12 2h3.5a3.5 3.5 0 1 1 0 7H12V2z"],[6,"M12 12.5a3.5 3.5 0 1 1 7 0 3.5 3.5 0 1 1-7 0z"],[6,"M5 19.5A3.5 3.5 0 0 1 8.5 16H12v3.5a3.5 3.5 0 1 1-7 0z"],[6,"M5 12.5A3.5 3.5 0 0 1 8.5 9H12v7H8.5A3.5 3.5 0 0 1 5 12.5z"]],"file-archive":[[6,"M4 22V4c0-.5.2-1 .6-1.4C5 2.2 5.5 2 6 2h8.5L20 7.5V20c0 .5-.2 1-.6 1.4-.4.4-.9.6-1.4.6h-2"],[2,"14 2 14 8 20 8"],[1,10,20,2],[6,"M10 7V6"],[6,"M10 12v-1"],[6,"M10 18v-2"]],"file-audio-2":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v2"],[2,"14 2 14 8 20 8"],[6,"M2 17v-3a4 4 0 0 1 8 0v3"],[1,9,17,1],[1,3,17,1]],"file-audio":[[6,"M17.5 22h.5c.5 0 1-.2 1.4-.6.4-.4.6-.9.6-1.4V7.5L14.5 2H6c-.5 0-1 .2-1.4.6C4.2 3 4 3.5 4 4v3"],[2,"14 2 14 8 20 8"],[6,"M10 20v-1a2 2 0 1 1 4 0v1a2 2 0 1 1-4 0Z"],[6,"M6 20v-1a2 2 0 1 0-4 0v1a2 2 0 1 0 4 0Z"],[6,"M2 19v-3a6 6 0 0 1 12 0v3"]],"file-axis-3d":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"M8 10v8h8"],[6,"m8 18 4-4"]],"file-badge-2":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[6,"M12 13a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z"],[6,"m14 12.5 1 5.5-3-1-3 1 1-5.5"]],"file-badge":[[6,"M4 7V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2h-6"],[2,"14 2 14 8 20 8"],[6,"M5 17a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z"],[6,"M7 16.5 8 22l-3-1-3 1 1-5.5"]],"file-bar-chart-2":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"M12 18v-6"],[6,"M8 18v-1"],[6,"M16 18v-3"]],"file-bar-chart":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"M12 18v-4"],[6,"M8 18v-2"],[6,"M16 18v-6"]],"file-box":[[6,"M14.5 22H18a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"],[2,"14 2 14 8 20 8"],[6,"M2.97 13.12c-.6.36-.97 1.02-.97 1.74v3.28c0 .72.37 1.38.97 1.74l3 1.83c.63.39 1.43.39 2.06 0l3-1.83c.6-.36.97-1.02.97-1.74v-3.28c0-.72-.37-1.38-.97-1.74l-3-1.83a1.97 1.97 0 0 0-2.06 0l-3 1.83Z"],[6,"m7 17-4.74-2.85"],[6,"m7 17 4.74-2.85"],[6,"M7 17v5"]],"file-check-2":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"],[2,"14 2 14 8 20 8"],[6,"m3 15 2 2 4-4"]],"file-check":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"m9 15 2 2 4-4"]],"file-clock":[[6,"M16 22h2c.5 0 1-.2 1.4-.6.4-.4.6-.9.6-1.4V7.5L14.5 2H6c-.5 0-1 .2-1.4.6C4.2 3 4 3.5 4 4v3"],[2,"14 2 14 8 20 8"],[1,8,16,6],[6,"M9.5 17.5 8 16.25V14"]],"file-code":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"],[2,"14 2 14 8 20 8"],[6,"m9 18 3-3-3-3"],[6,"m5 12-3 3 3 3"]],"file-cog-2":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[1,12,15,2],[6,"M12 12v1"],[6,"M12 17v1"],[6,"m14.6 13.5-.87.5"],[6,"m10.27 16-.87.5"],[6,"m14.6 16.5-.87-.5"],[6,"m10.27 14-.87-.5"]],"file-cog":[[6,"M4 6V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H4"],[2,"14 2 14 8 20 8"],[1,6,14,3],[6,"M6 10v1"],[6,"M6 17v1"],[6,"M10 14H9"],[6,"M3 14H2"],[6,"m9 11-.88.88"],[6,"M3.88 16.12 3 17"],[6,"m9 17-.88-.88"],[6,"M3.88 11.88 3 11"]],"file-diff":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[6,"M12 13V7"],[6,"M9 10h6"],[6,"M9 17h6"]],"file-digit":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"],[2,"14 2 14 8 20 8"],[6,"M10 12h2v6"],[5,2,12,4,6],[6,"M10 18h4"]],"file-down":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"M12 18v-6"],[6,"m9 15 3 3 3-3"]],"file-edit":[[6,"M4 13.5V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2h-5.5"],[2,"14 2 14 8 20 8"],[6,"M10.42 12.61a2.1 2.1 0 1 1 2.97 2.97L7.95 21 4 22l.99-3.95 5.43-5.44Z"]],"file-heart":[[6,"M4 6V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H4"],[2,"14 2 14 8 20 8"],[6,"M10.29 10.7a2.43 2.43 0 0 0-2.66-.52c-.29.12-.56.3-.78.53l-.35.34-.35-.34a2.43 2.43 0 0 0-2.65-.53c-.3.12-.56.3-.79.53-.95.94-1 2.53.2 3.74L6.5 18l3.6-3.55c1.2-1.21 1.14-2.8.19-3.74Z"]],"file-image":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[1,10,13,2],[6,"m20 17-1.09-1.09a2 2 0 0 0-2.82 0L10 22"]],"file-input":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"],[2,"14 2 14 8 20 8"],[6,"M2 15h10"],[6,"m9 18 3-3-3-3"]],"file-json-2":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"],[2,"14 2 14 8 20 8"],[6,"M4 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1"],[6,"M8 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1"]],"file-json":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1"],[6,"M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1"]],"file-key-2":[[6,"M4 10V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H4"],[2,"14 2 14 8 20 8"],[1,4,16,2],[6,"m10 10-4.5 4.5"],[6,"m9 11 1 1"]],"file-key":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[1,10,16,2],[6,"m16 10-4.5 4.5"],[6,"m15 11 1 1"]],"file-line-chart":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"m16 13-3.5 3.5-2-2L8 17"]],"file-lock-2":[[6,"M4 5V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H4"],[2,"14 2 14 8 20 8"],[5,2,13,8,5,1],[6,"M8 13v-2a2 2 0 1 0-4 0v2"]],"file-lock":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[5,8,12,8,6,1],[6,"M15 12v-2a3 3 0 1 0-6 0v2"]],"file-minus-2":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"],[2,"14 2 14 8 20 8"],[6,"M3 15h6"]],"file-minus":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[0,9,15,15,15]],"file-output":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"],[2,"14 2 14 8 20 8"],[6,"M2 15h10"],[6,"m5 12-3 3 3 3"]],"file-pie-chart":[[6,"M16 22h2a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v3"],[2,"14 2 14 8 20 8"],[6,"M4.04 11.71a5.84 5.84 0 1 0 8.2 8.29"],[6,"M13.83 16A5.83 5.83 0 0 0 8 10.17V16h5.83Z"]],"file-plus-2":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"],[2,"14 2 14 8 20 8"],[6,"M3 15h6"],[6,"M6 12v6"]],"file-plus":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[0,12,18,12,12],[0,9,15,15,15]],"file-question":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[6,"M10 10.3c.2-.4.5-.8.9-1a2.1 2.1 0 0 1 2.6.4c.3.4.5.8.5 1.3 0 1.3-2 2-2 2"],[6,"M12 17h.01"]],"file-scan":[[6,"M20 10V7.5L14.5 2H6a2 2 0 0 0-2 2v16c0 1.1.9 2 2 2h4.5"],[2,"14 2 14 8 20 8"],[6,"M16 22a2 2 0 0 1-2-2"],[6,"M20 22a2 2 0 0 0 2-2"],[6,"M20 14a2 2 0 0 1 2 2"],[6,"M16 14a2 2 0 0 0-2 2"]],"file-search-2":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[1,11.5,14.5,2.5],[6,"M13.25 16.25 15 18"]],"file-search":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v3"],[2,"14 2 14 8 20 8"],[6,"M5 17a3 3 0 1 0 0-6 3 3 0 0 0 0 6z"],[6,"m9 18-1.5-1.5"]],"file-signature":[[6,"M20 19.5v.5a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8.5L18 5.5"],[6,"M8 18h1"],[6,"M18.42 9.61a2.1 2.1 0 1 1 2.97 2.97L16.95 17 13 18l.99-3.95 4.43-4.44Z"]],"file-spreadsheet":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"M8 13h2"],[6,"M8 17h2"],[6,"M14 13h2"],[6,"M14 17h2"]],"file-symlink":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v7"],[2,"14 2 14 8 20 8"],[6,"m10 18 3-3-3-3"],[6,"M4 18v-1a2 2 0 0 1 2-2h6"]],"file-terminal":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"m8 16 2-2-2-2"],[6,"M12 18h4"]],"file-text":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[0,16,13,8,13],[0,16,17,8,17],[0,10,9,8,9]],"file-type-2":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"],[2,"14 2 14 8 20 8"],[6,"M2 13v-1h6v1"],[6,"M4 18h2"],[6,"M5 12v6"]],"file-type":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"M9 13v-1h6v1"],[6,"M11 18h2"],[6,"M12 12v6"]],"file-up":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"M12 12v6"],[6,"m15 15-3-3-3 3"]],"file-video-2":[[6,"M4 8V4a2 2 0 0 1 2-2h8.5L20 7.5V20a2 2 0 0 1-2 2H4"],[2,"14 2 14 8 20 8"],[6,"m10 15.5 4 2.5v-6l-4 2.5"],[5,2,12,8,6,1]],"file-video":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"m10 11 5 3-5 3v-6Z"]],"file-volume-2":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[6,"M11.5 13.5c.32.4.5.94.5 1.5s-.18 1.1-.5 1.5"],[6,"M15 12c.64.8 1 1.87 1 3s-.36 2.2-1 3"],[6,"M8 15h.01"]],"file-volume":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v3"],[2,"14 2 14 8 20 8"],[6,"m7 10-3 2H2v4h2l3 2v-8Z"],[6,"M11 11c.64.8 1 1.87 1 3s-.36 2.2-1 3"]],"file-warning":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[6,"M12 9v4"],[6,"M12 17h.01"]],"file-x2":[[6,"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v4"],[6,"M14 2v6h6"],[6,"m3 12.5 5 5"],[6,"m8 12.5-5 5"]],"file-x":[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"],[0,9.5,12.5,14.5,17.5],[0,14.5,12.5,9.5,17.5]],file:[[6,"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"],[2,"14 2 14 8 20 8"]],files:[[6,"M15.5 2H8.6c-.4 0-.8.2-1.1.5-.3.3-.5.7-.5 1.1v12.8c0 .4.2.8.5 1.1.3.3.7.5 1.1.5h9.8c.4 0 .8-.2 1.1-.5.3-.3.5-.7.5-1.1V6.5L15.5 2z"],[6,"M3 7.6v12.8c0 .4.2.8.5 1.1.3.3.7.5 1.1.5h9.8"],[6,"M15 2v5h5"]],film:[[5,2,2,20,20,2.18,2.18],[0,7,2,7,22],[0,17,2,17,22],[0,2,12,22,12],[0,2,7,7,7],[0,2,17,7,17],[0,17,17,22,17],[0,17,7,22,7]],filter:[[3,"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3"]],fingerprint:[[6,"M2 12C2 6.5 6.5 2 12 2a10 10 0 0 1 8 4"],[6,"M5 19.5C5.5 18 6 15 6 12c0-.7.12-1.37.34-2"],[6,"M17.29 21.02c.12-.6.43-2.3.5-3.02"],[6,"M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4"],[6,"M8.65 22c.21-.66.45-1.32.57-2"],[6,"M14 13.12c0 2.38 0 6.38-1 8.88"],[6,"M2 16h.01"],[6,"M21.8 16c.2-2 .131-5.354 0-6"],[6,"M9 6.8a6 6 0 0 1 9 5.2c0 .47 0 1.17-.02 2"]],"fish-off":[[6,"M18 12.47v.03M18 12v.47M17.525 17.526A6.744 6.744 0 0 1 15 18c-3.56 0-7.56-2.53-8.5-6 .348-1.28 1.114-2.433 2.121-3.38M12.065 6.532A8.802 8.802 0 0 1 15 6c3.56 0 6.06 2.54 7 6-.309 1.14-.786 2.177-1.413 3.058"],[6,"M7 10.67C7 8 5.58 5.97 2.73 5.5c-1 1.5-1 5 .23 6.5-1.24 1.5-1.24 5-.23 6.5C5.58 18.03 7 16 7 13.33M14.48 8.958A9.77 9.77 0 0 1 16 6.07M16 17.93a9.77 9.77 0 0 1-1.728-3.618"],[6,"m16.01 17.93-.23 1.4A2 2 0 0 1 13.8 21H9.5a5.96 5.96 0 0 0 1.49-3.98M8.53 3h5.27a2 2 0 0 1 1.98 1.67l.23 1.4M2 2l20 20"]],fish:[[6,"M6.5 12c.94-3.46 4.94-6 8.5-6 3.56 0 6.06 2.54 7 6-.94 3.47-3.44 6-7 6s-7.56-2.53-8.5-6Z"],[6,"M18 12v.5"],[6,"M16 17.93a9.77 9.77 0 0 1 0-11.86"],[6,"M7 10.67C7 8 5.58 5.97 2.73 5.5c-1 1.5-1 5 .23 6.5-1.24 1.5-1.24 5-.23 6.5C5.58 18.03 7 16 7 13.33"],[6,"M10.46 7.26C10.2 5.88 9.17 4.24 8 3h5.8a2 2 0 0 1 1.98 1.67l.23 1.4"],[6,"m16.01 17.93-.23 1.4A2 2 0 0 1 13.8 21H9.5a5.96 5.96 0 0 0 1.49-3.98"]],"flag-off":[[6,"M8 2c3 0 5 2 8 2s4-1 4-1v11"],[6,"M4 22V4"],[6,"M4 15s1-1 4-1 5 2 8 2"],[0,2,2,22,22]],"flag-triangle-left":[[6,"M17 22V2L7 7l10 5"]],"flag-triangle-right":[[6,"M7 22V2l10 5-10 5"]],flag:[[6,"M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z"],[0,4,22,4,15]],flame:[[6,"M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z"]],"flashlight-off":[[6,"M16 16v4a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2V10c0-2-2-2-2-4"],[6,"M7 2h11v4c0 2-2 2-2 4v1"],[0,11,6,18,6],[0,2,2,22,22]],flashlight:[[6,"M18 6c0 2-2 2-2 4v10a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2V10c0-2-2-2-2-4V2h12z"],[0,6,6,18,6],[0,12,12,12,12]],"flask-conical-off":[[6,"M10 10 4.72 20.55a1 1 0 0 0 .9 1.45h12.76a1 1 0 0 0 .9-1.45l-1.272-2.542"],[6,"M10 2v2.343"],[6,"M14 2v6.343"],[6,"M8.5 2h7"],[6,"M7 16h9"],[0,2,2,22,22]],"flask-conical":[[6,"M10 2v7.527a2 2 0 0 1-.211.896L4.72 20.55a1 1 0 0 0 .9 1.45h12.76a1 1 0 0 0 .9-1.45l-5.069-10.127A2 2 0 0 1 14 9.527V2"],[6,"M8.5 2h7"],[6,"M7 16h10"]],"flask-round":[[6,"M10 2v7.31"],[6,"M14 9.3V1.99"],[6,"M8.5 2h7"],[6,"M14 9.3a6.5 6.5 0 1 1-4 0"],[6,"M5.58 16.5h12.85"]],"flip-horizontal-2":[[6,"m3 7 5 5-5 5V7"],[6,"m21 7-5 5 5 5V7"],[6,"M12 20v2"],[6,"M12 14v2"],[6,"M12 8v2"],[6,"M12 2v2"]],"flip-horizontal":[[6,"M8 3H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h3"],[6,"M16 3h3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-3"],[6,"M12 20v2"],[6,"M12 14v2"],[6,"M12 8v2"],[6,"M12 2v2"]],"flip-vertical-2":[[6,"m17 3-5 5-5-5h10"],[6,"m17 21-5-5-5 5h10"],[6,"M4 12H2"],[6,"M10 12H8"],[6,"M16 12h-2"],[6,"M22 12h-2"]],"flip-vertical":[[6,"M21 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v3"],[6,"M21 16v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-3"],[6,"M4 12H2"],[6,"M10 12H8"],[6,"M16 12h-2"],[6,"M22 12h-2"]],"flower-2":[[6,"M12 5a3 3 0 1 1 3 3m-3-3a3 3 0 1 0-3 3m3-3v1M9 8a3 3 0 1 0 3 3M9 8h1m5 0a3 3 0 1 1-3 3m3-3h-1m-2 3v-1"],[1,12,8,2],[6,"M12 10v12"],[6,"M12 22c4.2 0 7-1.667 7-5-4.2 0-7 1.667-7 5Z"],[6,"M12 22c-4.2 0-7-1.667-7-5 4.2 0 7 1.667 7 5Z"]],flower:[[6,"M12 7.5a4.5 4.5 0 1 1 4.5 4.5M12 7.5A4.5 4.5 0 1 0 7.5 12M12 7.5V9m-4.5 3a4.5 4.5 0 1 0 4.5 4.5M7.5 12H9m7.5 0a4.5 4.5 0 1 1-4.5 4.5m4.5-4.5H15m-3 4.5V15"],[1,12,12,3],[6,"m8 16 1.5-1.5"],[6,"M14.5 9.5 16 8"],[6,"m8 8 1.5 1.5"],[6,"M14.5 14.5 16 16"]],focus:[[1,12,12,3],[6,"M3 7V5a2 2 0 0 1 2-2h2"],[6,"M17 3h2a2 2 0 0 1 2 2v2"],[6,"M21 17v2a2 2 0 0 1-2 2h-2"],[6,"M7 21H5a2 2 0 0 1-2-2v-2"]],"folder-archive":[[6,"M22 20V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2h6"],[1,16,19,2],[6,"M16 11v-1"],[6,"M16 17v-2"]],"folder-check":[[6,"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"],[6,"m9 13 2 2 4-4"]],"folder-clock":[[6,"M7 20H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2"],[1,16,16,6],[6,"M16 14v2l1 1"]],"folder-closed":[[6,"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"],[6,"M2 10h20"]],"folder-cog-2":[[6,"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"],[1,12,13,2],[6,"M12 10v1"],[6,"M12 15v1"],[6,"m14.6 11.5-.87.5"],[6,"m10.27 14-.87.5"],[6,"m14.6 14.5-.87-.5"],[6,"m10.27 12-.87-.5"]],"folder-cog":[[6,"M10.5 20H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v3"],[1,18,18,3],[6,"M18 14v1"],[6,"M18 21v1"],[6,"M22 18h-1"],[6,"M15 18h-1"],[6,"m21 15-.88.88"],[6,"M15.88 20.12 15 21"],[6,"m21 21-.88-.88"],[6,"M15.88 15.88 15 15"]],"folder-down":[[6,"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"],[6,"M12 10v6"],[6,"m15 13-3 3-3-3"]],"folder-edit":[[6,"M8.42 10.61a2.1 2.1 0 1 1 2.97 2.97L5.95 19 2 20l.99-3.95 5.43-5.44Z"],[6,"M2 11.5V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-9.5"]],"folder-heart":[[6,"M11 20H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v1.5"],[6,"M21.29 13.7a2.43 2.43 0 0 0-2.65-.52c-.3.12-.57.3-.8.53l-.34.34-.35-.34a2.43 2.43 0 0 0-2.65-.53c-.3.12-.56.3-.79.53-.95.94-1 2.53.2 3.74L17.5 21l3.6-3.55c1.2-1.21 1.14-2.8.19-3.74Z"]],"folder-input":[[6,"M2 9V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-1"],[6,"M2 13h10"],[6,"m9 16 3-3-3-3"]],"folder-key":[[6,"M10 20H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v2"],[1,16,20,2],[6,"m22 14-4.5 4.5"],[6,"m21 15 1 1"]],"folder-lock":[[6,"M10 20H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v2.5"],[5,14,17,8,5,1],[6,"M20 17v-2a2 2 0 1 0-4 0v2"]],"folder-minus":[[6,"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"],[0,9,13,15,13]],"folder-open":[[6,"m6 14 1.45-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.55 6a2 2 0 0 1-1.94 1.5H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H18a2 2 0 0 1 2 2v2"]],"folder-output":[[6,"M2 7.5V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H2"],[6,"M2 13h10"],[6,"m5 10-3 3 3 3"]],"folder-plus":[[6,"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"],[0,12,10,12,16],[0,9,13,15,13]],"folder-search-2":[[6,"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"],[1,11.5,12.5,2.5],[6,"M13.27 14.27 15 16"]],"folder-search":[[6,"M11 20H4a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v4"],[1,17,17,3],[6,"m21 21-1.5-1.5"]],"folder-symlink":[[6,"M2 9V5c0-1.1.9-2 2-2h3.93a2 2 0 0 1 1.66.9l.82 1.2a2 2 0 0 0 1.66.9H20a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H2"],[6,"m8 16 3-3-3-3"],[6,"M2 16v-1a2 2 0 0 1 2-2h6"]],"folder-tree":[[6,"M13 10h7a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-2.5a1 1 0 0 1-.8-.4l-.9-1.2A1 1 0 0 0 15 3h-2a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z"],[6,"M13 21h7a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1h-2.88a1 1 0 0 1-.9-.55l-.44-.9a1 1 0 0 0-.9-.55H13a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z"],[6,"M3 3v2c0 1.1.9 2 2 2h3"],[6,"M3 3v13c0 1.1.9 2 2 2h3"]],"folder-up":[[6,"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"],[6,"M12 10v6"],[6,"m9 13 3-3 3 3"]],"folder-x":[[6,"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"],[6,"m9.5 10.5 5 5"],[6,"m14.5 10.5-5 5"]],folder:[[6,"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z"]],folders:[[6,"M8 17h12a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3.93a2 2 0 0 1-1.66-.9l-.82-1.2a2 2 0 0 0-1.66-.9H8a2 2 0 0 0-2 2v9c0 1.1.9 2 2 2Z"],[6,"M2 8v11c0 1.1.9 2 2 2h14"]],"form-input":[[5,2,6,20,12,2],[6,"M12 12h.01"],[6,"M17 12h.01"],[6,"M7 12h.01"]],forward:[[2,"15 17 20 12 15 7"],[6,"M4 18v-2a4 4 0 0 1 4-4h12"]],frame:[[0,22,6,2,6],[0,22,18,2,18],[0,6,2,6,22],[0,18,2,18,22]],framer:[[6,"M5 16V9h14V2H5l14 14h-7m-7 0 7 7v-7m-7 0h7"]],frown:[[1,12,12,10],[6,"M16 16s-1.5-2-4-2-4 2-4 2"],[0,9,9,9.01,9],[0,15,9,15.01,9]],fuel:[[0,3,22,15,22],[0,4,9,14,9],[6,"M14 22V4a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v18"],[6,"M14 13h2a2 2 0 0 1 2 2v2a2 2 0 0 0 2 2h0a2 2 0 0 0 2-2V9.83a2 2 0 0 0-.59-1.42L18 5"]],"function-square":[[5,3,3,18,18,2,2],[6,"M9 17c2 0 2.8-1 2.8-2.8V10c0-2 1-3.3 3.2-3"],[6,"M9 11.2h5.7"]],"gamepad-2":[[0,6,11,10,11],[0,8,9,8,13],[0,15,12,15.01,12],[0,18,10,18.01,10],[6,"M17.32 5H6.68a4 4 0 0 0-3.978 3.59c-.006.052-.01.101-.017.152C2.604 9.416 2 14.456 2 16a3 3 0 0 0 3 3c1 0 1.5-.5 2-1l1.414-1.414A2 2 0 0 1 9.828 16h4.344a2 2 0 0 1 1.414.586L17 18c.5.5 1 1 2 1a3 3 0 0 0 3-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4 4 0 0 0 17.32 5z"]],gamepad:[[0,6,12,10,12],[0,8,10,8,14],[0,15,13,15.01,13],[0,18,11,18.01,11],[5,2,6,20,12,2]],gauge:[[6,"m12 15 3.5-3.5"],[6,"M20.3 18c.4-1 .7-2.2.7-3.4C21 9.8 17 6 12 6s-9 3.8-9 8.6c0 1.2.3 2.4.7 3.4"]],gavel:[[6,"m14 13-7.5 7.5c-.83.83-2.17.83-3 0 0 0 0 0 0 0a2.12 2.12 0 0 1 0-3L11 10"],[6,"m16 16 6-6"],[6,"m8 8 6-6"],[6,"m9 7 8 8"],[6,"m21 11-8-8"]],gem:[[3,"6 3 18 3 22 9 12 22 2 9"],[6,"m12 22 4-13-3-6"],[6,"M12 22 8 9l3-6"],[6,"M2 9h20"]],ghost:[[6,"M9 10h.01"],[6,"M15 10h.01"],[6,"M12 2a8 8 0 0 0-8 8v12l3-3 2.5 2.5L12 19l2.5 2.5L17 19l3 3V10a8 8 0 0 0-8-8z"]],gift:[[2,"20 12 20 22 4 22 4 12"],[5,2,7,20,5],[0,12,22,12,7],[6,"M12 7H7.5a2.5 2.5 0 0 1 0-5C11 2 12 7 12 7z"],[6,"M12 7h4.5a2.5 2.5 0 0 0 0-5C13 2 12 7 12 7z"]],"git-branch-plus":[[6,"M6 3v12"],[6,"M18 9a3 3 0 1 0 0-6 3 3 0 0 0 0 6z"],[6,"M6 21a3 3 0 1 0 0-6 3 3 0 0 0 0 6z"],[6,"M15 6a9 9 0 0 0-9 9"],[6,"M18 15v6"],[6,"M21 18h-6"]],"git-branch":[[0,6,3,6,15],[1,18,6,3],[1,6,18,3],[6,"M18 9a9 9 0 0 1-9 9"]],"git-commit":[[1,12,12,3],[0,3,12,9,12],[0,15,12,21,12]],"git-compare":[[1,18,18,3],[1,6,6,3],[6,"M13 6h3a2 2 0 0 1 2 2v7"],[6,"M11 18H8a2 2 0 0 1-2-2V9"]],"git-fork":[[1,12,18,3],[1,6,6,3],[1,18,6,3],[6,"M18 9v1a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V9"],[6,"M12 12v3"]],"git-merge":[[1,18,18,3],[1,6,6,3],[6,"M6 21V9a9 9 0 0 0 9 9"]],"git-pull-request-closed":[[1,18,18,3],[1,6,6,3],[6,"M18 11.5V15"],[6,"m21 3-6 6"],[6,"m21 9-6-6"],[0,6,9,6,21]],"git-pull-request-draft":[[1,18,18,3],[1,6,6,3],[6,"M18 6V5"],[6,"M18 11v-1"],[0,6,9,6,21]],"git-pull-request":[[1,18,18,3],[1,6,6,3],[6,"M13 6h3a2 2 0 0 1 2 2v7"],[0,6,9,6,21]],github:[[6,"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"],[6,"M9 18c-4.51 2-5-2-7-2"]],gitlab:[[6,"m22 13.29-3.33-10a.42.42 0 0 0-.14-.18.38.38 0 0 0-.22-.11.39.39 0 0 0-.23.07.42.42 0 0 0-.14.18l-2.26 6.67H8.32L6.1 3.26a.42.42 0 0 0-.1-.18.38.38 0 0 0-.26-.08.39.39 0 0 0-.23.07.42.42 0 0 0-.14.18L2 13.29a.74.74 0 0 0 .27.83L12 21l9.69-6.88a.71.71 0 0 0 .31-.83Z"]],"glass-water":[[6,"M15.2 22H8.8a2 2 0 0 1-2-1.79L5 3h14l-1.81 17.21A2 2 0 0 1 15.2 22Z"],[6,"M6 12a5 5 0 0 1 6 0 5 5 0 0 0 6 0"]],glasses:[[1,6,15,4],[1,18,15,4],[6,"M14 15a2 2 0 0 0-2-2 2 2 0 0 0-2 2"],[6,"M2.5 13 5 7c.7-1.3 1.4-2 3-2"],[6,"M21.5 13 19 7c-.7-1.3-1.5-2-3-2"]],"globe-2":[[6,"M21.54 15H17a2 2 0 0 0-2 2v4.54"],[6,"M7 3.34V5a3 3 0 0 0 3 3v0a2 2 0 0 1 2 2v0c0 1.1.9 2 2 2v0a2 2 0 0 0 2-2v0c0-1.1.9-2 2-2h3.17"],[6,"M11 21.95V18a2 2 0 0 0-2-2v0a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05"],[1,12,12,10]],globe:[[1,12,12,10],[0,2,12,22,12],[6,"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"]],grab:[[6,"M18 11.5V9a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v1.4"],[6,"M14 10V8a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v2"],[6,"M10 9.9V9a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v5"],[6,"M6 14v0a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v0"],[6,"M18 11v0a2 2 0 1 1 4 0v3a8 8 0 0 1-8 8h-4a8 8 0 0 1-8-8 2 2 0 1 1 4 0"]],"graduation-cap":[[6,"M22 10v6M2 10l10-5 10 5-10 5z"],[6,"M6 12v5c3 3 9 3 12 0v-5"]],grape:[[6,"M22 5V2l-5.89 5.89"],[1,16.6,15.89,3],[1,8.11,7.4,3],[1,12.35,11.65,3],[1,13.91,5.85,3],[1,18.15,10.09,3],[1,6.56,13.2,3],[1,10.8,17.44,3],[1,5,19,3]],grid:[[5,3,3,18,18,2,2],[0,3,9,21,9],[0,3,15,21,15],[0,9,3,9,21],[0,15,3,15,21]],"grip-horizontal":[[1,12,9,1],[1,19,9,1],[1,5,9,1],[1,12,15,1],[1,19,15,1],[1,5,15,1]],"grip-vertical":[[1,9,12,1],[1,9,5,1],[1,9,19,1],[1,15,12,1],[1,15,5,1],[1,15,19,1]],grip:[[1,12,5,1],[1,19,5,1],[1,5,5,1],[1,12,12,1],[1,19,12,1],[1,5,12,1],[1,12,19,1],[1,19,19,1],[1,5,19,1]],hammer:[[6,"m15 12-8.5 8.5c-.83.83-2.17.83-3 0 0 0 0 0 0 0a2.12 2.12 0 0 1 0-3L12 9"],[6,"M17.64 15 22 10.64"],[6,"m20.91 11.7-1.25-1.25c-.6-.6-.93-1.4-.93-2.25v-.86L16.01 4.6a5.56 5.56 0 0 0-3.94-1.64H9l.92.82A6.18 6.18 0 0 1 12 8.4v1.56l2 2h2.47l2.26 1.91"]],"hand-metal":[[6,"M18 12.5V10a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v1.4"],[6,"M14 11V9a2 2 0 1 0-4 0v2"],[6,"M10 10.5V5a2 2 0 1 0-4 0v9"],[6,"m7 15-1.76-1.76a2 2 0 0 0-2.83 2.82l3.6 3.6C7.5 21.14 9.2 22 12 22h2a8 8 0 0 0 8-8V7a2 2 0 1 0-4 0v5"]],hand:[[6,"M18 11V6a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v0"],[6,"M14 10V4a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v2"],[6,"M10 10.5V6a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v8"],[6,"M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15"]],"hard-drive":[[0,22,12,2,12],[6,"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"],[0,6,16,6.01,16],[0,10,16,10.01,16]],"hard-hat":[[6,"M2 18a1 1 0 0 0 1 1h18a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v2z"],[6,"M10 10V5a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v5"],[6,"M4 15v-3a6 6 0 0 1 6-6h0"],[6,"M14 6h0a6 6 0 0 1 6 6v3"]],hash:[[0,4,9,20,9],[0,4,15,20,15],[0,10,3,8,21],[0,16,3,14,21]],haze:[[6,"m5.2 6.2 1.4 1.4"],[6,"M2 13h2"],[6,"M20 13h2"],[6,"m17.4 7.6 1.4-1.4"],[6,"M22 17H2"],[6,"M22 21H2"],[6,"M16 13a4 4 0 0 0-8 0"],[6,"M12 5V2.5"]],"heading-1":[[6,"M4 12h8"],[6,"M4 18V6"],[6,"M12 18V6"],[6,"m17 12 3-2v8"]],"heading-2":[[6,"M4 12h8"],[6,"M4 18V6"],[6,"M12 18V6"],[6,"M21 18h-4c0-4 4-3 4-6 0-1.5-2-2.5-4-1"]],"heading-3":[[6,"M4 12h8"],[6,"M4 18V6"],[6,"M12 18V6"],[6,"M17.5 10.5c1.7-1 3.5 0 3.5 1.5a2 2 0 0 1-2 2"],[6,"M17 17.5c2 1.5 4 .3 4-1.5a2 2 0 0 0-2-2"]],"heading-4":[[6,"M4 12h8"],[6,"M4 18V6"],[6,"M12 18V6"],[6,"M17 10v4h4"],[6,"M21 10v8"]],"heading-5":[[6,"M4 12h8"],[6,"M4 18V6"],[6,"M12 18V6"],[6,"M17 13v-3h4"],[6,"M17 17.7c.4.2.8.3 1.3.3 1.5 0 2.7-1.1 2.7-2.5S19.8 13 18.3 13H17"]],"heading-6":[[6,"M4 12h8"],[6,"M4 18V6"],[6,"M12 18V6"],[1,19,16,2],[6,"M20 10c-2 2-3 3.5-3 6"]],heading:[[6,"M6 12h12"],[6,"M6 20V4"],[6,"M18 20V4"]],headphones:[[6,"M3 18v-6a9 9 0 0 1 18 0v6"],[6,"M21 19a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3zM3 19a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2H3z"]],"heart-crack":[[6,"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"],[6,"m12 13-1-1 2-2-3-2.5 2.77-2.92"]],"heart-handshake":[[6,"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"],[6,"M12 5.36 8.87 8.5a2.13 2.13 0 0 0 0 3h0a2.13 2.13 0 0 0 3 0l2.26-2.21a3 3 0 0 1 4.22 0l2.4 2.4"],[6,"m18 15-2-2"],[6,"m15 18-2-2"]],"heart-off":[[6,"M4.12 4.107a5.4 5.4 0 0 0-.538.473C1.46 6.7 1.33 10.28 4 13l8 8 4.5-4.5"],[6,"M19.328 13.672 20 13c2.67-2.72 2.54-6.3.42-8.42a5.4 5.4 0 0 0-7.65 0l-.77.78-.77-.78a5.4 5.4 0 0 0-2.386-1.393"],[0,2,2,22,22]],"heart-pulse":[[6,"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"],[6,"M3.5 12h6l.5-1 2 4.5 2-7 1.5 3.5h5"]],heart:[[6,"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"]],"help-circle":[[1,12,12,10],[6,"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"],[0,12,17,12.01,17]],hexagon:[[6,"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"]],highlighter:[[6,"m9 11-6 6v3h9l3-3"],[6,"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"]],history:[[6,"M3 3v5h5"],[6,"M3.05 13A9 9 0 1 0 6 5.3L3 8"],[6,"M12 7v5l4 2"]],home:[[6,"m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"],[2,"9 22 9 12 15 12 15 22"]],"hop-off":[[6,"M17.5 5.5C19 7 20.5 9 21 11c-1.323.265-2.646.39-4.118.226"],[6,"M5.5 17.5C7 19 9 20.5 11 21c.5-2.5.5-5-1-8.5"],[6,"M17.5 17.5c-2.5 0-4 0-6-1"],[6,"M20 11.5c1 1.5 2 3.5 2 4.5"],[6,"M11.5 20c1.5 1 3.5 2 4.5 2 .5-1.5 0-3-.5-4.5"],[6,"M22 22c-2 0-3.5-.5-5.5-1.5"],[6,"M4.783 4.782C1.073 8.492 1 14.5 5 18c1-1 2-4.5 1.5-6.5 1.5 1 4 1 5.5.5M8.227 2.57C11.578 1.335 15.453 2.089 18 5c-.88.88-3.7 1.761-5.726 1.618"],[0,2,2,22,22]],hop:[[6,"M17.5 5.5C19 7 20.5 9 21 11c-2.5.5-5 .5-8.5-1"],[6,"M5.5 17.5C7 19 9 20.5 11 21c.5-2.5.5-5-1-8.5"],[6,"M16.5 11.5c1 2 1 3.5 1 6-2.5 0-4 0-6-1"],[6,"M20 11.5c1 1.5 2 3.5 2 4.5-1.5.5-3 0-4.5-.5"],[6,"M11.5 20c1.5 1 3.5 2 4.5 2 .5-1.5 0-3-.5-4.5"],[6,"M20.5 16.5c1 2 1.5 3.5 1.5 5.5-2 0-3.5-.5-5.5-1.5"],[6,"M4.783 4.782C8.493 1.072 14.5 1 18 5c-1 1-4.5 2-6.5 1.5 1 1.5 1 4 .5 5.5-1.5.5-4 .5-5.5-.5C7 13.5 6 17 5 18c-4-3.5-3.927-9.508-.217-13.218Z"],[6,"M4.5 4.5 3 3c-.184-.185-.184-.816 0-1"]],hourglass:[[6,"M5 22h14"],[6,"M5 2h14"],[6,"M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22"],[6,"M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2"]],"ice-cream-2":[[6,"M12 17c5 0 8-2.69 8-6H4c0 3.31 3 6 8 6Zm-4 4h8m-4-3v3M5.14 11a3.5 3.5 0 1 1 6.71 0"],[6,"M12.14 11a3.5 3.5 0 1 1 6.71 0"],[6,"M15.5 6.5a3.5 3.5 0 1 0-7 0"]],"ice-cream":[[6,"m7 11 4.08 10.35a1 1 0 0 0 1.84 0L17 11"],[6,"M17 7A5 5 0 0 0 7 7"],[6,"M17 7a2 2 0 0 1 0 4H7a2 2 0 0 1 0-4"]],"image-minus":[[6,"M21 9v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7"],[0,16,5,22,5],[1,9,9,2],[6,"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"]],"image-off":[[0,2,2,22,22],[6,"M10.41 10.41a2 2 0 1 1-2.83-2.83"],[0,13.5,13.5,6,21],[0,18,12,21,15],[6,"M3.59 3.59A1.99 1.99 0 0 0 3 5v14a2 2 0 0 0 2 2h14c.55 0 1.052-.22 1.41-.59"],[6,"M21 15V5a2 2 0 0 0-2-2H9"]],"image-plus":[[6,"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7"],[0,16,5,22,5],[0,19,2,19,8],[1,9,9,2],[6,"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"]],image:[[5,3,3,18,18,2,2],[1,9,9,2],[6,"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"]],import:[[6,"M12 3v12"],[6,"m8 11 4 4 4-4"],[6,"M8 5H4a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-4"]],inbox:[[2,"22 12 16 12 14 15 10 15 8 12 2 12"],[6,"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"]],indent:[[2,"3 8 7 12 3 16"],[0,21,12,11,12],[0,21,6,11,6],[0,21,18,11,18]],"indian-rupee":[[6,"M6 3h12"],[6,"M6 8h12"],[6,"m6 13 8.5 8"],[6,"M6 13h3"],[6,"M9 13c6.667 0 6.667-10 0-10"]],infinity:[[6,"M18.178 8c5.096 0 5.096 8 0 8-5.095 0-7.133-8-12.739-8-4.585 0-4.585 8 0 8 5.606 0 7.644-8 12.74-8z"]],info:[[1,12,12,10],[0,12,16,12,12],[0,12,8,12.01,8]],inspect:[[6,"M21 11V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h6"],[6,"m12 12 4 10 1.7-4.3L22 16Z"]],instagram:[[5,2,2,20,20,5,5],[6,"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"],[0,17.5,6.5,17.51,6.5]],italic:[[0,19,4,10,4],[0,14,20,5,20],[0,15,4,9,20]],"japanese-yen":[[6,"M12 9.5V21m0-11.5L6 3m6 6.5L18 3"],[6,"M6 15h12"],[6,"M6 11h12"]],joystick:[[6,"M21 17a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-2Z"],[6,"M6 15v-2"],[6,"M12 15V9"],[1,12,6,3]],key:[[6,"m21 2-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0 3 3L22 7l-3-3m-3.5 3.5L19 4"]],keyboard:[[5,2,4,20,16,2,2],[6,"M6 8h.001"],[6,"M10 8h.001"],[6,"M14 8h.001"],[6,"M18 8h.001"],[6,"M8 12h.001"],[6,"M12 12h.001"],[6,"M16 12h.001"],[6,"M7 16h10"]],"lamp-ceiling":[[6,"M12 2v5"],[6,"M6 7h12l4 9H2l4-9Z"],[6,"M9.17 16a3 3 0 1 0 5.66 0"]],"lamp-desk":[[6,"m14 5-3 3 2 7 8-8-7-2Z"],[6,"m14 5-3 3-3-3 3-3 3 3Z"],[6,"M9.5 6.5 4 12l3 6"],[6,"M3 22v-2c0-1.1.9-2 2-2h4a2 2 0 0 1 2 2v2H3Z"]],"lamp-floor":[[6,"M9 2h6l3 7H6l3-7Z"],[6,"M12 9v13"],[6,"M9 22h6"]],"lamp-wall-down":[[6,"M11 13h6l3 7H8l3-7Z"],[6,"M14 13V8a2 2 0 0 0-2-2H8"],[6,"M4 9h2a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2H4v6Z"]],"lamp-wall-up":[[6,"M11 4h6l3 7H8l3-7Z"],[6,"M14 11v5a2 2 0 0 1-2 2H8"],[6,"M4 15h2a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H4v-6Z"]],lamp:[[6,"M8 2h8l4 10H4L8 2Z"],[6,"M12 12v6"],[6,"M8 22v-2c0-1.1.9-2 2-2h4a2 2 0 0 1 2 2v2H8Z"]],landmark:[[0,3,22,21,22],[0,6,18,6,11],[0,10,18,10,11],[0,14,18,14,11],[0,18,18,18,11],[3,"12 2 20 7 4 7"]],languages:[[6,"m5 8 6 6"],[6,"m4 14 6-6 2-3"],[6,"M2 5h12"],[6,"M7 2h1"],[6,"m22 22-5-10-5 10"],[6,"M14 18h6"]],"laptop-2":[[5,3,4,18,12,2,2],[0,2,20,22,20]],laptop:[[6,"M20 16V7a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v9m16 0H4m16 0 1.28 2.55a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45L4 16"]],"lasso-select":[[6,"M7 22a5 5 0 0 1-2-4"],[6,"M7 16.93c.96.43 1.96.74 2.99.91"],[6,"M3.34 14A6.8 6.8 0 0 1 2 10c0-4.42 4.48-8 10-8s10 3.58 10 8a7.19 7.19 0 0 1-.33 2"],[6,"M5 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"],[6,"M14.33 22h-.09a.35.35 0 0 1-.24-.32v-10a.34.34 0 0 1 .33-.34c.08 0 .15.03.21.08l7.34 6a.33.33 0 0 1-.21.59h-4.49l-2.57 3.85a.35.35 0 0 1-.28.14v0z"]],lasso:[[6,"M7 22a5 5 0 0 1-2-4"],[6,"M3.3 14A6.8 6.8 0 0 1 2 10c0-4.4 4.5-8 10-8s10 3.6 10 8-4.5 8-10 8a12 12 0 0 1-5-1"],[6,"M5 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"]],laugh:[[1,12,12,10],[6,"M18 13a6 6 0 0 1-6 5 6 6 0 0 1-6-5h12Z"],[0,9,9,9.01,9],[0,15,9,15.01,9]],layers:[[3,"12 2 2 7 12 12 22 7 12 2"],[2,"2 17 12 22 22 17"],[2,"2 12 12 17 22 12"]],"layout-dashboard":[[5,3,3,7,9],[5,14,3,7,5],[5,14,12,7,9],[5,3,16,7,5]],"layout-grid":[[5,3,3,7,7],[5,14,3,7,7],[5,14,14,7,7],[5,3,14,7,7]],"layout-list":[[5,3,14,7,7],[5,3,3,7,7],[0,14,4,21,4],[0,14,9,21,9],[0,14,15,21,15],[0,14,20,21,20]],"layout-template":[[6,"M21 3H3v7h18V3z"],[6,"M21 14h-5v7h5v-7z"],[6,"M12 14H3v7h9v-7z"]],layout:[[5,3,3,18,18,2,2],[0,3,9,21,9],[0,9,21,9,9]],leaf:[[6,"M11 20A7 7 0 0 1 9.8 6.1C15.5 5 17 4.48 19 2c1 2 2 4.18 2 8 0 5.5-4.78 10-10 10Z"],[6,"M2 21c0-3 1.85-5.36 5.08-6C9.5 14.52 12 13 13 12"]],library:[[6,"m16 6 4 14"],[6,"M12 6v14"],[6,"M8 8v12"],[6,"M4 4v16"]],"life-buoy":[[1,12,12,10],[1,12,12,4],[0,4.93,4.93,9.17,9.17],[0,14.83,14.83,19.07,19.07],[0,14.83,9.17,19.07,4.93],[0,14.83,9.17,18.36,5.64],[0,4.93,19.07,9.17,14.83]],"lightbulb-off":[[6,"M9 18h6"],[6,"M10 22h4"],[6,"m2 2 20 20"],[6,"M9 2.804A6 6 0 0 1 18 8a4.65 4.65 0 0 1-1.03 3"],[6,"M8.91 14a4.61 4.61 0 0 0-1.41-2.5C6.23 10.23 6 9 6 8a6 6 0 0 1 .084-1"]],lightbulb:[[0,9,18,15,18],[0,10,22,14,22],[6,"M15.09 14c.18-.98.65-1.74 1.41-2.5A4.65 4.65 0 0 0 18 8 6 6 0 0 0 6 8c0 1 .23 2.23 1.5 3.5A4.61 4.61 0 0 1 8.91 14"]],"line-chart":[[6,"M3 3v18h18"],[6,"m19 9-5 5-4-4-3 3"]],"link-2off":[[6,"M9 17H7A5 5 0 0 1 7 7"],[6,"M15 7h2a5 5 0 0 1 4 8"],[0,8,12,12,12],[0,2,2,22,22]],"link-2":[[6,"M9 17H7A5 5 0 0 1 7 7h2"],[6,"M15 7h2a5 5 0 1 1 0 10h-2"],[0,8,12,16,12]],link:[[6,"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"],[6,"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"]],linkedin:[[6,"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"],[5,2,9,4,12],[1,4,4,2]],"list-checks":[[0,10,6,21,6],[0,10,12,21,12],[0,10,18,21,18],[2,"3 6 4 7 6 5"],[2,"3 12 4 13 6 11"],[2,"3 18 4 19 6 17"]],"list-end":[[6,"M16 12H3"],[6,"M16 6H3"],[6,"M10 18H3"],[6,"M21 6v10a2 2 0 0 1-2 2h-4"],[6,"m16 16-2 2 2 2"]],"list-minus":[[6,"M11 12H3"],[6,"M16 6H3"],[6,"M16 18H3"],[6,"M21 12h-6"]],"list-music":[[6,"M21 15V6"],[6,"M18.5 18a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Z"],[6,"M12 12H3"],[6,"M16 6H3"],[6,"M12 18H3"]],"list-ordered":[[0,10,6,21,6],[0,10,12,21,12],[0,10,18,21,18],[6,"M4 6h1v4"],[6,"M4 10h2"],[6,"M6 18H4c0-1 2-2 2-3s-1-1.5-2-1"]],"list-plus":[[6,"M11 12H3"],[6,"M16 6H3"],[6,"M16 18H3"],[6,"M18 9v6"],[6,"M21 12h-6"]],"list-start":[[6,"M16 12H3"],[6,"M16 18H3"],[6,"M10 6H3"],[6,"M21 18V8a2 2 0 0 0-2-2h-5"],[6,"m16 8-2-2 2-2"]],"list-video":[[6,"M12 12H3"],[6,"M16 6H3"],[6,"M12 18H3"],[6,"m16 12 5 3-5 3v-6Z"]],"list-x":[[6,"M11 12H3"],[6,"M16 6H3"],[6,"M16 18H3"],[6,"m19 10-4 4"],[6,"m15 10 4 4"]],list:[[0,8,6,21,6],[0,8,12,21,12],[0,8,18,21,18],[0,3,6,3.01,6],[0,3,12,3.01,12],[0,3,18,3.01,18]],"loader-2":[[6,"M21 12a9 9 0 1 1-6.219-8.56"]],loader:[[0,12,2,12,6],[0,12,18,12,22],[0,4.93,4.93,7.76,7.76],[0,16.24,16.24,19.07,19.07],[0,2,12,6,12],[0,18,12,22,12],[0,4.93,19.07,7.76,16.24],[0,16.24,7.76,19.07,4.93]],"locate-fixed":[[0,2,12,5,12],[0,19,12,22,12],[0,12,2,12,5],[0,12,19,12,22],[1,12,12,7],[1,12,12,3]],"locate-off":[[0,2,12,5,12],[0,19,12,22,12],[0,12,2,12,5],[0,12,19,12,22],[6,"M7.11 7.11C5.83 8.39 5 10.1 5 12c0 3.87 3.13 7 7 7 1.9 0 3.61-.83 4.89-2.11"],[6,"M18.71 13.96c.19-.63.29-1.29.29-1.96 0-3.87-3.13-7-7-7-.67 0-1.33.1-1.96.29"],[0,2,2,22,22]],locate:[[0,2,12,5,12],[0,19,12,22,12],[0,12,2,12,5],[0,12,19,12,22],[1,12,12,7]],lock:[[5,3,11,18,11,2,2],[6,"M7 11V7a5 5 0 0 1 10 0v4"]],"log-in":[[6,"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4"],[2,"10 17 15 12 10 7"],[0,15,12,3,12]],"log-out":[[6,"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"],[2,"16 17 21 12 16 7"],[0,21,12,9,12]],luggage:[[6,"M6 20h0a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h0"],[6,"M8 18V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v14"],[6,"M10 20h4"],[1,16,20,2],[1,8,20,2]],magnet:[[6,"m6 15-4-4 6.75-6.77a7.79 7.79 0 0 1 11 11L13 22l-4-4 6.39-6.36a2.14 2.14 0 0 0-3-3L6 15"],[6,"m5 8 4 4"],[6,"m12 15 4 4"]],"mail-check":[[6,"M22 13V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h8"],[6,"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"],[6,"m16 19 2 2 4-4"]],"mail-minus":[[6,"M22 15V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h8"],[6,"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"],[6,"M16 19h6"]],"mail-open":[[6,"M21.2 8.4c.5.38.8.97.8 1.6v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V10a2 2 0 0 1 .8-1.6l8-6a2 2 0 0 1 2.4 0l8 6Z"],[6,"m22 10-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 10"]],"mail-plus":[[6,"M22 13V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h8"],[6,"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"],[6,"M19 16v6"],[6,"M16 19h6"]],"mail-question":[[6,"M22 10.5V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h12.5"],[6,"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"],[6,"M18 15.28c.2-.4.5-.8.9-1a2.1 2.1 0 0 1 2.6.4c.3.4.5.8.5 1.3 0 1.3-2 2-2 2"],[6,"M20 22v.01"]],"mail-search":[[6,"M22 12.5V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h7.5"],[6,"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"],[6,"M18 21a3 3 0 1 0 0-6 3 3 0 0 0 0 6v0Z"],[1,18,18,3],[6,"m22 22-1.5-1.5"]],"mail-warning":[[6,"M22 10.5V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h12.5"],[6,"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"],[6,"M20 14v4"],[6,"M20 22v.01"]],"mail-x":[[6,"M22 13V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h9"],[6,"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"],[6,"m17 17 4 4"],[6,"m21 17-4 4"]],mail:[[5,2,4,20,16,2],[6,"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"]],mails:[[5,6,4,16,13,2],[6,"m22 7-7.1 3.78c-.57.3-1.23.3-1.8 0L6 7"],[6,"M2 8v11c0 1.1.9 2 2 2h14"]],"map-pin-off":[[6,"M5.43 5.43A8.06 8.06 0 0 0 4 10c0 6 8 12 8 12a29.94 29.94 0 0 0 5-5"],[6,"M19.18 13.52A8.66 8.66 0 0 0 20 10a8 8 0 0 0-8-8 7.88 7.88 0 0 0-3.52.82"],[6,"M9.13 9.13A2.78 2.78 0 0 0 9 10a3 3 0 0 0 3 3 2.78 2.78 0 0 0 .87-.13"],[6,"M14.9 9.25a3 3 0 0 0-2.15-2.16"],[0,2,2,22,22]],"map-pin":[[6,"M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z"],[1,12,10,3]],map:[[3,"3 6 9 3 15 6 21 3 21 18 15 21 9 18 3 21"],[0,9,3,9,18],[0,15,6,15,21]],martini:[[6,"M8 22h8"],[6,"M12 11v11"],[6,"m19 3-7 8-7-8Z"]],"maximize-2":[[2,"15 3 21 3 21 9"],[2,"9 21 3 21 3 15"],[0,21,3,14,10],[0,3,21,10,14]],maximize:[[6,"M8 3H5a2 2 0 0 0-2 2v3"],[6,"M21 8V5a2 2 0 0 0-2-2h-3"],[6,"M3 16v3a2 2 0 0 0 2 2h3"],[6,"M16 21h3a2 2 0 0 0 2-2v-3"]],medal:[[6,"M7.21 15 2.66 7.14a2 2 0 0 1 .13-2.2L4.4 2.8A2 2 0 0 1 6 2h12a2 2 0 0 1 1.6.8l1.6 2.14a2 2 0 0 1 .14 2.2L16.79 15"],[6,"M11 12 5.12 2.2"],[6,"m13 12 5.88-9.8"],[6,"M8 7h8"],[1,12,17,5],[6,"M12 18v-2h-.5"]],"megaphone-off":[[6,"M9.26 9.26 3 11v3l14.14 3.14"],[6,"M21 15.34V6l-7.31 2.03"],[6,"M11.6 16.8a3 3 0 1 1-5.8-1.6"],[0,2,2,22,22]],megaphone:[[6,"m3 11 18-5v12L3 14v-3z"],[6,"M11.6 16.8a3 3 0 1 1-5.8-1.6"]],meh:[[1,12,12,10],[0,8,15,16,15],[0,9,9,9.01,9],[0,15,9,15.01,9]],menu:[[0,4,12,20,12],[0,4,6,20,6],[0,4,18,20,18]],"message-circle":[[6,"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"]],"message-square":[[6,"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"]],"mic-2":[[6,"m12 8-9.04 9.06a2.82 2.82 0 1 0 3.98 3.98L16 12"],[1,17,7,5]],"mic-off":[[0,2,2,22,22],[6,"M18.89 13.23A7.12 7.12 0 0 0 19 12v-2"],[6,"M5 10v2a7 7 0 0 0 12 5"],[6,"M15 9.34V5a3 3 0 0 0-5.68-1.33"],[6,"M9 9v3a3 3 0 0 0 5.12 2.12"],[0,12,19,12,22]],mic:[[6,"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z"],[6,"M19 10v2a7 7 0 0 1-14 0v-2"],[0,12,19,12,22]],microscope:[[6,"M6 18h8"],[6,"M3 22h18"],[6,"M14 22a7 7 0 1 0 0-14h-1"],[6,"M9 14h2"],[6,"M8 6h4"],[6,"M13 10V6.5a.5.5 0 0 0-.5-.5.5.5 0 0 1-.5-.5V3a1 1 0 0 0-1-1H9a1 1 0 0 0-1 1v2.5a.5.5 0 0 1-.5.5.5.5 0 0 0-.5.5V10c0 1.1.9 2 2 2h2a2 2 0 0 0 2-2Z"]],microwave:[[5,2,4,20,15,2],[5,6,8,8,7,1],[6,"M18 8v7"],[6,"M6 19v2"],[6,"M18 19v2"]],milestone:[[6,"M18 6H5a2 2 0 0 0-2 2v3a2 2 0 0 0 2 2h13l4-3.5L18 6Z"],[6,"M12 13v9"],[6,"M12 2v4"]],"milk-off":[[6,"M8 2h8"],[6,"M9 2v1.343M15 2v2.789a4 4 0 0 0 .672 2.219l.656.984a4 4 0 0 1 .672 2.22v1.131M7.8 7.8l-.128.192A4 4 0 0 0 7 10.212V20a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-3"],[6,"M7 15a6.47 6.47 0 0 1 5 0 6.472 6.472 0 0 0 3.435.435"],[0,2,2,22,22]],milk:[[6,"M8 2h8"],[6,"M9 2v2.789a4 4 0 0 1-.672 2.219l-.656.984A4 4 0 0 0 7 10.212V20a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-9.789a4 4 0 0 0-.672-2.219l-.656-.984A4 4 0 0 1 15 4.788V2"],[6,"M7 15a6.472 6.472 0 0 1 5 0 6.47 6.47 0 0 0 5 0"]],"minimize-2":[[2,"4 14 10 14 10 20"],[2,"20 10 14 10 14 4"],[0,14,10,21,3],[0,3,21,10,14]],minimize:[[6,"M8 3v3a2 2 0 0 1-2 2H3"],[6,"M21 8h-3a2 2 0 0 1-2-2V3"],[6,"M3 16h3a2 2 0 0 1 2 2v3"],[6,"M16 21v-3a2 2 0 0 1 2-2h3"]],"minus-circle":[[1,12,12,10],[0,8,12,16,12]],"minus-square":[[5,3,3,18,18,2,2],[0,8,12,16,12]],minus:[[0,5,12,19,12]],"monitor-off":[[6,"M17 17H4a2 2 0 0 1-2-2V5c0-1.5 1-2 1-2"],[6,"M22 15V5a2 2 0 0 0-2-2H9"],[6,"M8 21h8"],[6,"M12 17v4"],[6,"m2 2 20 20"]],"monitor-smartphone":[[6,"M18 8V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h8"],[6,"M10 19v-3.96 3.15"],[6,"M7 19h5"],[5,16,12,6,10,2]],"monitor-speaker":[[6,"M5.5 20H8"],[6,"M17 9h.01"],[5,12,4,10,16,2],[6,"M8 6H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h4"],[1,17,15,1]],monitor:[[5,2,3,20,14,2,2],[0,8,21,16,21],[0,12,17,12,21]],moon:[[6,"M12 3a6.364 6.364 0 0 0 9 9 9 9 0 1 1-9-9Z"]],"more-horizontal":[[1,12,12,1],[1,19,12,1],[1,5,12,1]],"more-vertical":[[1,12,12,1],[1,12,5,1],[1,12,19,1]],"mountain-snow":[[6,"m8 3 4 8 5-5 5 15H2L8 3z"],[6,"M4.14 15.08c2.62-1.57 5.24-1.43 7.86.42 2.74 1.94 5.49 2 8.23.19"]],mountain:[[6,"m8 3 4 8 5-5 5 15H2L8 3z"]],"mouse-pointer-2":[[6,"m4 4 7.07 17 2.51-7.39L21 11.07z"]],"mouse-pointer-click":[[6,"m9 9 5 12 1.774-5.226L21 14 9 9z"],[6,"m16.071 16.071 4.243 4.243"],[6,"m7.188 2.239.777 2.897M5.136 7.965l-2.898-.777M13.95 4.05l-2.122 2.122m-5.657 5.656-2.12 2.122"]],"mouse-pointer":[[6,"m3 3 7.07 16.97 2.51-7.39 7.39-2.51L3 3z"],[6,"m13 13 6 6"]],mouse:[[5,6,3,12,18,6],[6,"M12 7v4"]],"move-3d":[[6,"M5 3v16h16"],[6,"m5 19 6-6"],[6,"m2 6 3-3 3 3"],[6,"m18 16 3 3-3 3"]],"move-diagonal-2":[[2,"5 11 5 5 11 5"],[2,"19 13 19 19 13 19"],[0,5,5,19,19]],"move-diagonal":[[2,"13 5 19 5 19 11"],[2,"11 19 5 19 5 13"],[0,19,5,5,19]],"move-horizontal":[[2,"18 8 22 12 18 16"],[2,"6 8 2 12 6 16"],[0,2,12,22,12]],"move-vertical":[[2,"8 18 12 22 16 18"],[2,"8 6 12 2 16 6"],[0,12,2,12,22]],move:[[2,"5 9 2 12 5 15"],[2,"9 5 12 2 15 5"],[2,"15 19 12 22 9 19"],[2,"19 9 22 12 19 15"],[0,2,12,22,12],[0,12,2,12,22]],"music-2":[[1,8,18,4],[6,"M12 18V2l7 4"]],"music-3":[[1,12,18,4],[6,"M16 18V2"]],"music-4":[[6,"M9 18V5l12-2v13"],[6,"m9 9 12-2"],[1,6,18,3],[1,18,16,3]],music:[[6,"M9 18V5l12-2v13"],[1,6,18,3],[1,18,16,3]],"navigation-2off":[[6,"M9.31 9.31 5 21l7-4 7 4-1.17-3.17"],[6,"M14.53 8.88 12 2l-1.17 3.17"],[0,2,2,22,22]],"navigation-2":[[3,"12 2 19 21 12 17 5 21 12 2"]],"navigation-off":[[6,"M8.43 8.43 3 11l8 2 2 8 2.57-5.43"],[6,"M17.39 11.73 22 2l-9.73 4.61"],[0,2,2,22,22]],navigation:[[3,"3 11 22 2 13 21 11 13 3 11"]],network:[[5,9,2,6,6],[5,16,16,6,6],[5,2,16,6,6],[6,"M5 16v-4h14v4"],[6,"M12 12V8"]],newspaper:[[6,"M4 22h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-2 2Zm0 0a2 2 0 0 1-2-2v-9c0-1.1.9-2 2-2h2"],[6,"M18 14h-8"],[6,"M15 18h-5"],[6,"M10 6h8v4h-8V6Z"]],"nut-off":[[6,"M12 4V2"],[6,"M5 10v4a7.004 7.004 0 0 0 5.277 6.787c.412.104.802.292 1.102.592L12 22l.621-.621c.3-.3.69-.488 1.102-.592a7.01 7.01 0 0 0 4.125-2.939"],[6,"M19 10v3.343"],[6,"M12 12c-1.349-.573-1.905-1.005-2.5-2-.546.902-1.048 1.353-2.5 2-1.018-.644-1.46-1.08-2-2-1.028.71-1.69.918-3 1 1.081-1.048 1.757-2.03 2-3 .194-.776.84-1.551 1.79-2.21m11.654 5.997c.887-.457 1.28-.891 1.556-1.787 1.032.916 1.683 1.157 3 1-1.297-1.036-1.758-2.03-2-3-.5-2-4-4-8-4-.74 0-1.461.068-2.15.192"],[0,2,2,22,22]],nut:[[6,"M12 4V2"],[6,"M5 10v4a7.004 7.004 0 0 0 5.277 6.787c.412.104.802.292 1.102.592L12 22l.621-.621c.3-.3.69-.488 1.102-.592A7.003 7.003 0 0 0 19 14v-4"],[6,"M12 4C8 4 4.5 6 4 8c-.243.97-.919 1.952-2 3 1.31-.082 1.972-.29 3-1 .54.92.982 1.356 2 2 1.452-.647 1.954-1.098 2.5-2 .595.995 1.151 1.427 2.5 2 1.31-.621 1.862-1.058 2.5-2 .629.977 1.162 1.423 2.5 2 1.209-.548 1.68-.967 2-2 1.032.916 1.683 1.157 3 1-1.297-1.036-1.758-2.03-2-3-.5-2-4-4-8-4Z"]],octagon:[[3,"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2"]],option:[[6,"M3 3h6l6 18h6"],[6,"M14 3h7"]],outdent:[[2,"7 8 3 12 7 16"],[0,21,12,11,12],[0,21,6,11,6],[0,21,18,11,18]],"package-2":[[6,"M3 9h18v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V9Z"],[6,"m3 9 2.45-4.9A2 2 0 0 1 7.24 3h9.52a2 2 0 0 1 1.8 1.1L21 9"],[6,"M12 3v6"]],"package-check":[[6,"m16 16 2 2 4-4"],[6,"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14"],[6,"M16.5 9.4 7.55 4.24"],[2,"3.29 7 12 12 20.71 7"],[0,12,22,12,12]],"package-minus":[[6,"M16 16h6"],[6,"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14"],[6,"M16.5 9.4 7.55 4.24"],[2,"3.29 7 12 12 20.71 7"],[0,12,22,12,12]],"package-open":[[6,"M20.91 8.84 8.56 2.23a1.93 1.93 0 0 0-1.81 0L3.1 4.13a2.12 2.12 0 0 0-.05 3.69l12.22 6.93a2 2 0 0 0 1.94 0L21 12.51a2.12 2.12 0 0 0-.09-3.67Z"],[6,"m3.09 8.84 12.35-6.61a1.93 1.93 0 0 1 1.81 0l3.65 1.9a2.12 2.12 0 0 1 .1 3.69L8.73 14.75a2 2 0 0 1-1.94 0L3 12.51a2.12 2.12 0 0 1 .09-3.67Z"],[0,12,22,12,13],[6,"M20 13.5v3.37a2.06 2.06 0 0 1-1.11 1.83l-6 3.08a1.93 1.93 0 0 1-1.78 0l-6-3.08A2.06 2.06 0 0 1 4 16.87V13.5"]],"package-plus":[[6,"M16 16h6"],[6,"M19 13v6"],[6,"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14"],[6,"M16.5 9.4 7.55 4.24"],[2,"3.29 7 12 12 20.71 7"],[0,12,22,12,12]],"package-search":[[6,"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14"],[6,"M16.5 9.4 7.55 4.24"],[2,"3.29 7 12 12 20.71 7"],[0,12,22,12,12],[1,18.5,15.5,2.5],[6,"M20.27 17.27 22 19"]],"package-x":[[6,"M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14"],[6,"M16.5 9.4 7.55 4.24"],[2,"3.29 7 12 12 20.71 7"],[0,12,22,12,12],[6,"m17 13 5 5m-5 0 5-5"]],package:[[0,16.5,9.4,7.5,4.21],[6,"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"],[2,"3.29 7 12 12 20.71 7"],[0,12,22,12,12]],"paint-bucket":[[6,"m19 11-8-8-8.6 8.6a2 2 0 0 0 0 2.8l5.2 5.2c.8.8 2 .8 2.8 0L19 11Z"],[6,"m5 2 5 5"],[6,"M2 13h15"],[6,"M22 20a2 2 0 1 1-4 0c0-1.6 1.7-2.4 2-4 .3 1.6 2 2.4 2 4Z"]],"paintbrush-2":[[6,"M14 19.9V16h3a2 2 0 0 0 2-2v-2H5v2c0 1.1.9 2 2 2h3v3.9a2 2 0 1 0 4 0Z"],[6,"M6 12V2h12v10"],[6,"M14 2v4"],[6,"M10 2v2"]],paintbrush:[[6,"M18.37 2.63 14 7l-1.59-1.59a2 2 0 0 0-2.82 0L8 7l9 9 1.59-1.59a2 2 0 0 0 0-2.82L17 10l4.37-4.37a2.12 2.12 0 1 0-3-3Z"],[6,"M9 8c-2 3-4 3.5-7 4l8 10c2-1 6-5 6-7"],[6,"M14.5 17.5 4.5 15"]],palette:[[1,13.5,6.5,.5],[1,17.5,10.5,.5],[1,8.5,7.5,.5],[1,6.5,12.5,.5],[6,"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z"]],palmtree:[[6,"M13 8c0-2.76-2.46-5-5.5-5S2 5.24 2 8h2l1-1 1 1h4"],[6,"M13 7.14A5.82 5.82 0 0 1 16.5 6c3.04 0 5.5 2.24 5.5 5h-3l-1-1-1 1h-3"],[6,"M5.89 9.71c-2.15 2.15-2.3 5.47-.35 7.43l4.24-4.25.7-.7.71-.71 2.12-2.12c-1.95-1.96-5.27-1.8-7.42.35z"],[6,"M11 15.5c.5 2.5-.17 4.5-1 6.5h4c2-5.5-.5-12-1-14"]],paperclip:[[6,"m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48"]],"party-popper":[[6,"M5.8 11.3 2 22l10.7-3.79"],[6,"M4 3h.01"],[6,"M22 8h.01"],[6,"M15 2h.01"],[6,"M22 20h.01"],[6,"m22 2-2.24.75a2.9 2.9 0 0 0-1.96 3.12v0c.1.86-.57 1.63-1.45 1.63h-.38c-.86 0-1.6.6-1.76 1.44L14 10"],[6,"m22 13-.82-.33c-.86-.34-1.82.2-1.98 1.11v0c-.11.7-.72 1.22-1.43 1.22H17"],[6,"m11 2 .33.82c.34.86-.2 1.82-1.11 1.98v0C9.52 4.9 9 5.52 9 6.23V7"],[6,"M11 13c1.93 1.93 2.83 4.17 2 5-.83.83-3.07-.07-5-2-1.93-1.93-2.83-4.17-2-5 .83-.83 3.07.07 5 2Z"]],"pause-circle":[[1,12,12,10],[0,10,15,10,9],[0,14,15,14,9]],"pause-octagon":[[6,"M10 15V9"],[6,"M14 15V9"],[6,"M7.714 2h8.572L22 7.714v8.572L16.286 22H7.714L2 16.286V7.714L7.714 2z"]],pause:[[5,6,4,4,16],[5,14,4,4,16]],"pen-tool":[[6,"m12 19 7-7 3 3-7 7-3-3z"],[6,"m18 13-1.5-7.5L2 2l3.5 14.5L13 18l5-5z"],[6,"m2 2 7.586 7.586"],[1,11,11,2]],pencil:[[0,18,2,22,6],[6,"M7.5 20.5 19 9l-4-4L3.5 16.5 2 22z"]],percent:[[0,19,5,5,19],[1,6.5,6.5,2.5],[1,17.5,17.5,2.5]],"person-standing":[[1,12,5,1],[6,"m9 20 3-6 3 6"],[6,"m6 8 6 2 6-2"],[6,"M12 10v4"]],"phone-call":[[6,"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"],[6,"M14.05 2a9 9 0 0 1 8 7.94"],[6,"M14.05 6A5 5 0 0 1 18 10"]],"phone-forwarded":[[2,"18 2 22 6 18 10"],[0,14,6,22,6],[6,"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"]],"phone-incoming":[[2,"16 2 16 8 22 8"],[0,22,2,16,8],[6,"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"]],"phone-missed":[[0,22,2,16,8],[0,16,2,22,8],[6,"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"]],"phone-off":[[6,"M10.68 13.31a16 16 0 0 0 3.41 2.6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7 2 2 0 0 1 1.72 2v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.42 19.42 0 0 1-3.33-2.67m-2.67-3.34a19.79 19.79 0 0 1-3.07-8.63A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91"],[0,22,2,2,22]],"phone-outgoing":[[2,"22 8 22 2 16 2"],[0,16,8,22,2],[6,"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"]],phone:[[6,"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"]],"picture-in-picture-2":[[6,"M21 9V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v10c0 1.1.9 2 2 2h4"],[5,12,13,10,7,2]],"picture-in-picture":[[6,"M8 4.5v5H3m-1-6 6 6m13 0v-3c0-1.16-.84-2-2-2h-7m-9 9v2c0 1.05.95 2 2 2h3"],[5,12,13.5,10,7,0,2]],"pie-chart":[[6,"M21.21 15.89A10 10 0 1 1 8 2.83"],[6,"M22 12A10 10 0 0 0 12 2v10z"]],"piggy-bank":[[6,"M19 5c-1.5 0-2.8 1.4-3 2-3.5-1.5-11-.3-11 5 0 1.8 0 3 2 4.5V20h4v-2h3v2h4v-4c1-.5 1.7-1 2-2h2v-4h-2c0-1-.5-1.5-1-2h0V5z"],[6,"M2 9v1c0 1.1.9 2 2 2h1"],[6,"M16 11h0"]],pilcrow:[[6,"M13 4v16"],[6,"M17 4v16"],[6,"M19 4H9.5a4.5 4.5 0 0 0 0 9H13"]],"pin-off":[[0,2,2,22,22],[0,12,17,12,22],[6,"M9 9v1.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V17h12"],[6,"M15 9.34V6h1a2 2 0 0 0 0-4H7.89"]],pin:[[0,12,17,12,22],[6,"M5 17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V6h1a2 2 0 0 0 0-4H8a2 2 0 0 0 0 4h1v4.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24Z"]],pipette:[[6,"m2 22 1-1h3l9-9"],[6,"M3 21v-3l9-9"],[6,"m15 6 3.4-3.4a2.1 2.1 0 1 1 3 3L18 9l.4.4a2.1 2.1 0 1 1-3 3l-3.8-3.8a2.1 2.1 0 1 1 3-3l.4.4Z"]],pizza:[[6,"M15 11h.01"],[6,"M11 15h.01"],[6,"M16 16h.01"],[6,"m2 16 20 6-6-20c-3.36.9-6.42 2.67-8.88 5.12A19.876 19.876 0 0 0 2 16Z"],[6,"M17 6c-6.29 1.47-9.43 5.13-11 11"]],plane:[[6,"M17.8 19.2 16 11l3.5-3.5C21 6 21.5 4 21 3c-1-.5-3 0-4.5 1.5L13 8 4.8 6.2c-.5-.1-.9.1-1.1.5l-.3.5c-.2.5-.1 1 .3 1.3L9 12l-2 3H4l-1 1 3 2 2 3 1-1v-3l3-2 3.5 5.3c.3.4.8.5 1.3.3l.5-.2c.4-.3.6-.7.5-1.2z"]],"play-circle":[[1,12,12,10],[3,"10 8 16 12 10 16 10 8"]],play:[[3,"5 3 19 12 5 21 5 3"]],"plug-2":[[6,"M9 2v6"],[6,"M15 2v6"],[6,"M12 17v5"],[6,"M5 8h14"],[6,"M6 11V8h12v3a6 6 0 1 1-12 0v0Z"]],"plug-zap":[[6,"m13 2-2 2.5h3L12 7"],[6,"M12 22v-3"],[6,"M10 13v-2.5"],[6,"M10 12.5v-2"],[6,"M14 12.5v-2"],[6,"M16 15a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h4a2 2 0 0 0 2-2v-2z"]],plug:[[6,"M12 22v-5"],[6,"M9 7V2"],[6,"M15 7V2"],[6,"M6 13V8h12v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4Z"]],"plus-circle":[[1,12,12,10],[0,12,8,12,16],[0,8,12,16,12]],"plus-square":[[5,3,3,18,18,2,2],[0,12,8,12,16],[0,8,12,16,12]],plus:[[0,12,5,12,19],[0,5,12,19,12]],pocket:[[6,"M4 3h16a2 2 0 0 1 2 2v6a10 10 0 0 1-10 10A10 10 0 0 1 2 11V5a2 2 0 0 1 2-2z"],[2,"8 10 12 14 16 10"]],podcast:[[1,12,11,1],[6,"M11 17a1 1 0 0 1 2 0c0 .5-.34 3-.5 4.5a.5.5 0 0 1-1 0c-.16-1.5-.5-4-.5-4.5Z"],[6,"M8 14a5 5 0 1 1 8 0"],[6,"M17 18.5a9 9 0 1 0-10 0"]],pointer:[[6,"M22 14a8 8 0 0 1-8 8"],[6,"M18 11v-1a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v0"],[6,"M14 10V9a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v1"],[6,"M10 9.5V4a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v10"],[6,"M18 11a2 2 0 1 1 4 0v3a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15"]],"pound-sterling":[[6,"M18 7c0-5.333-8-5.333-8 0"],[6,"M10 7v14"],[6,"M6 21h12"],[6,"M6 13h10"]],"power-off":[[6,"M18.36 6.64A9 9 0 0 1 20.77 15"],[6,"M6.16 6.16a9 9 0 1 0 12.68 12.68"],[6,"M12 2v4"],[6,"m2 2 20 20"]],power:[[6,"M18.36 6.64a9 9 0 1 1-12.73 0"],[0,12,2,12,12]],printer:[[2,"6 9 6 2 18 2 18 9"],[6,"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"],[5,6,14,12,8]],puzzle:[[6,"M19.439 7.85c-.049.322.059.648.289.878l1.568 1.568c.47.47.706 1.087.706 1.704s-.235 1.233-.706 1.704l-1.611 1.611a.98.98 0 0 1-.837.276c-.47-.07-.802-.48-.968-.925a2.501 2.501 0 1 0-3.214 3.214c.446.166.855.497.925.968a.979.979 0 0 1-.276.837l-1.61 1.61a2.404 2.404 0 0 1-1.705.707 2.402 2.402 0 0 1-1.704-.706l-1.568-1.568a1.026 1.026 0 0 0-.877-.29c-.493.074-.84.504-1.02.968a2.5 2.5 0 1 1-3.237-3.237c.464-.18.894-.527.967-1.02a1.026 1.026 0 0 0-.289-.877l-1.568-1.568A2.402 2.402 0 0 1 1.998 12c0-.617.236-1.234.706-1.704L4.23 8.77c.24-.24.581-.353.917-.303.515.077.877.528 1.073 1.01a2.5 2.5 0 1 0 3.259-3.259c-.482-.196-.933-.558-1.01-1.073-.05-.336.062-.676.303-.917l1.525-1.525A2.402 2.402 0 0 1 12 1.998c.617 0 1.234.236 1.704.706l1.568 1.568c.23.23.556.338.877.29.493-.074.84-.504 1.02-.968a2.5 2.5 0 1 1 3.237 3.237c-.464.18-.894.527-.967 1.02Z"]],"qr-code":[[5,3,3,5,5,1],[5,16,3,5,5,1],[5,3,16,5,5,1],[6,"M21 16h-3a2 2 0 0 0-2 2v3"],[6,"M21 21v.01"],[6,"M12 7v3a2 2 0 0 1-2 2H7"],[6,"M3 12h.01"],[6,"M12 3h.01"],[6,"M12 16v.01"],[6,"M16 12h1"],[6,"M21 12v.01"],[6,"M12 21v-1"]],quote:[[6,"M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z"],[6,"M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z"]],"radio-receiver":[[6,"M5 16v2"],[6,"M19 16v2"],[5,2,8,20,8,2],[6,"M18 12h0"]],radio:[[1,12,12,2],[6,"M4.93 19.07a10 10 0 0 1 0-14.14"],[6,"M7.76 16.24a6 6 0 0 1-1.3-1.95 6 6 0 0 1 0-4.59 6 6 0 0 1 1.3-1.95"],[6,"M16.24 7.76a6 6 0 0 1 1.3 2 6 6 0 0 1 0 4.59 6 6 0 0 1-1.3 1.95"],[6,"M19.07 4.93a10 10 0 0 1 0 14.14"]],"rectangle-horizontal":[[5,2,6,20,12,2]],"rectangle-vertical":[[5,6,2,12,20,2]],recycle:[[6,"M7 19H4.815a1.83 1.83 0 0 1-1.57-.881 1.785 1.785 0 0 1-.004-1.784L7.196 9.5"],[6,"M11 19h8.203a1.83 1.83 0 0 0 1.556-.89 1.784 1.784 0 0 0 0-1.775l-1.226-2.12"],[6,"m14 16-3 3 3 3"],[6,"M8.293 13.596 7.196 9.5 3.1 10.598"],[6,"m9.344 5.811 1.093-1.892A1.83 1.83 0 0 1 11.985 3a1.784 1.784 0 0 1 1.546.888l3.943 6.843"],[6,"m13.378 9.633 4.096 1.098 1.097-4.096"]],"redo-2":[[6,"m15 14 5-5-5-5"],[6,"M20 9H9.5A5.5 5.5 0 0 0 4 14.5v0A5.5 5.5 0 0 0 9.5 20H13"]],redo:[[6,"M21 7v6h-6"],[6,"M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3l3 2.7"]],"refresh-ccw":[[6,"M3 2v6h6"],[6,"M21 12A9 9 0 0 0 6 5.3L3 8"],[6,"M21 22v-6h-6"],[6,"M3 12a9 9 0 0 0 15 6.7l3-2.7"]],"refresh-cw":[[6,"M21 2v6h-6"],[6,"M3 12a9 9 0 0 1 15-6.7L21 8"],[6,"M3 22v-6h6"],[6,"M21 12a9 9 0 0 1-15 6.7L3 16"]],refrigerator:[[6,"M5 6a4 4 0 0 1 4-4h6a4 4 0 0 1 4 4v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6Z"],[6,"M5 10h14"],[6,"M15 7v6"]],regex:[[6,"M17 3v10"],[6,"m12.67 5.5 8.66 5"],[6,"m12.67 10.5 8.66-5"],[6,"M9 17a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2v-2z"]],"repeat-1":[[6,"m17 2 4 4-4 4"],[6,"M3 11v-1a4 4 0 0 1 4-4h14"],[6,"m7 22-4-4 4-4"],[6,"M21 13v1a4 4 0 0 1-4 4H3"],[6,"M11 10h1v4"]],repeat:[[6,"m17 2 4 4-4 4"],[6,"M3 11v-1a4 4 0 0 1 4-4h14"],[6,"m7 22-4-4 4-4"],[6,"M21 13v1a4 4 0 0 1-4 4H3"]],"reply-all":[[2,"7 17 2 12 7 7"],[2,"12 17 7 12 12 7"],[6,"M22 18v-2a4 4 0 0 0-4-4H7"]],reply:[[2,"9 17 4 12 9 7"],[6,"M20 18v-2a4 4 0 0 0-4-4H4"]],rewind:[[3,"11 19 2 12 11 5 11 19"],[3,"22 19 13 12 22 5 22 19"]],rocket:[[6,"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z"],[6,"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z"],[6,"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0"],[6,"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5"]],"rocking-chair":[[2,"3.5 2 6.5 12.5 18 12.5"],[0,9.5,12.5,5.5,20],[0,15,12.5,18.5,20],[6,"M2.75 18a13 13 0 0 0 18.5 0"]],"rotate-3d":[[6,"M16.466 7.5C15.643 4.237 13.952 2 12 2 9.239 2 7 6.477 7 12s2.239 10 5 10c.342 0 .677-.069 1-.2"],[6,"m15.194 13.707 3.814 1.86-1.86 3.814"],[6,"M19 15.57c-1.804.885-4.274 1.43-7 1.43-5.523 0-10-2.239-10-5s4.477-5 10-5c4.838 0 8.873 1.718 9.8 4"]],"rotate-ccw":[[6,"M3 2v6h6"],[6,"M3 13a9 9 0 1 0 3-7.7L3 8"]],"rotate-cw":[[6,"M21 2v6h-6"],[6,"M21 13a9 9 0 1 1-3-7.7L21 8"]],rss:[[6,"M4 11a9 9 0 0 1 9 9"],[6,"M4 4a16 16 0 0 1 16 16"],[1,5,19,1]],ruler:[[6,"M21.3 8.7 8.7 21.3c-1 1-2.5 1-3.4 0l-2.6-2.6c-1-1-1-2.5 0-3.4L15.3 2.7c1-1 2.5-1 3.4 0l2.6 2.6c1 1 1 2.5 0 3.4Z"],[6,"m7.5 10.5 2 2"],[6,"m10.5 7.5 2 2"],[6,"m13.5 4.5 2 2"],[6,"m4.5 13.5 2 2"]],"russian-ruble":[[6,"M14 11c5.333 0 5.333-8 0-8"],[6,"M6 11h8"],[6,"M6 15h8"],[6,"M9 21V3"],[6,"M9 3h5"]],sailboat:[[6,"M22 18H2a4 4 0 0 0 4 4h12a4 4 0 0 0 4-4Z"],[6,"M21 14 10 2 3 14h18Z"],[6,"M10 2v16"]],salad:[[6,"M7 21h10"],[6,"M12 21a9 9 0 0 0 9-9H3a9 9 0 0 0 9 9Z"],[6,"M11.38 12a2.4 2.4 0 0 1-.4-4.77 2.4 2.4 0 0 1 3.2-2.77 2.4 2.4 0 0 1 3.47-.63 2.4 2.4 0 0 1 3.37 3.37 2.4 2.4 0 0 1-1.1 3.7 2.51 2.51 0 0 1 .03 1.1"],[6,"m13 12 4-4"],[6,"M10.9 7.25A3.99 3.99 0 0 0 4 10c0 .73.2 1.41.54 2"]],sandwich:[[6,"M3 11v3a1 1 0 0 0 1 1h16a1 1 0 0 0 1-1v-3"],[6,"M12 19H4a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h16a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-3.83"],[6,"m3 11 7.77-6.04a2 2 0 0 1 2.46 0L21 11H3Z"],[6,"M12.97 19.77 7 15h12.5l-3.75 4.5a2 2 0 0 1-2.78.27Z"]],save:[[6,"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"],[2,"17 21 17 13 7 13 7 21"],[2,"7 3 7 8 15 8"]],"scale-3d":[[6,"M5 7v12h12"],[6,"m5 19 6-6"],[5,3,3,4,4,1],[5,17,17,4,4,1]],scale:[[6,"m16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z"],[6,"m2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z"],[6,"M7 21h10"],[6,"M12 3v18"],[6,"M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2"]],scaling:[[6,"M21 3 9 15"],[6,"M12 3H3v18h18v-9"],[6,"M16 3h5v5"],[6,"M14 15H9v-5"]],"scan-face":[[6,"M3 7V5a2 2 0 0 1 2-2h2"],[6,"M17 3h2a2 2 0 0 1 2 2v2"],[6,"M21 17v2a2 2 0 0 1-2 2h-2"],[6,"M7 21H5a2 2 0 0 1-2-2v-2"],[6,"M8 14s1.5 2 4 2 4-2 4-2"],[6,"M9 9h.01"],[6,"M15 9h.01"]],"scan-line":[[6,"M3 7V5a2 2 0 0 1 2-2h2"],[6,"M17 3h2a2 2 0 0 1 2 2v2"],[6,"M21 17v2a2 2 0 0 1-2 2h-2"],[6,"M7 21H5a2 2 0 0 1-2-2v-2"],[0,7,12,17,12]],scan:[[6,"M3 7V5a2 2 0 0 1 2-2h2"],[6,"M17 3h2a2 2 0 0 1 2 2v2"],[6,"M21 17v2a2 2 0 0 1-2 2h-2"],[6,"M7 21H5a2 2 0 0 1-2-2v-2"]],scissors:[[1,6,6,3],[1,6,18,3],[0,20,4,8.12,15.88],[0,14.47,14.48,20,20],[0,8.12,8.12,12,12]],"screen-share-off":[[6,"M13 3H4a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-3"],[6,"M8 21h8"],[6,"M12 17v4"],[6,"m22 3-5 5"],[6,"m17 3 5 5"]],"screen-share":[[6,"M13 3H4a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-3"],[6,"M8 21h8"],[6,"M12 17v4"],[6,"m17 8 5-5"],[6,"M17 3h5v5"]],scroll:[[6,"M10 17v2a2 2 0 0 1-2 2v0a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2v0a2 2 0 0 0-2 2v3h3"],[6,"M22 17v2a2 2 0 0 1-2 2H8"],[6,"M19 17V5a2 2 0 0 0-2-2H4"],[6,"M22 17H10"]],search:[[1,11,11,8],[0,21,21,16.65,16.65]],send:[[0,22,2,11,13],[3,"22 2 15 22 11 13 2 9 22 2"]],"separator-horizontal":[[0,3,12,21,12],[2,"8 8 12 4 16 8"],[2,"16 16 12 20 8 16"]],"separator-vertical":[[0,12,3,12,21],[2,"8 8 4 12 8 16"],[2,"16 16 20 12 16 8"]],"server-cog":[[6,"M5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-1"],[6,"M5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-1"],[6,"M6 6h.01"],[6,"M6 18h.01"],[1,12,12,3],[6,"M12 8v1"],[6,"M12 15v1"],[6,"M16 12h-1"],[6,"M9 12H8"],[6,"m15 9-.88.88"],[6,"M9.88 14.12 9 15"],[6,"m15 15-.88-.88"],[6,"M9.88 9.88 9 9"]],"server-crash":[[6,"M6 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-2"],[6,"M6 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-2"],[6,"M6 6h.01"],[6,"M6 18h.01"],[6,"m13 6-4 6h6l-4 6"]],"server-off":[[6,"M7 2h13a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-5"],[6,"M10 10 2.5 2.5C2 2 2 2.5 2 5v3a2 2 0 0 0 2 2h6z"],[6,"M22 17v-1a2 2 0 0 0-2-2h-1"],[6,"M4 14a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16.5l1-.5.5.5-8-8H4z"],[6,"M6 18h.01"],[6,"m2 2 20 20"]],server:[[5,2,2,20,8,2,2],[5,2,14,20,8,2,2],[0,6,6,6.01,6],[0,6,18,6.01,18]],"settings-2":[[6,"M20 7h-9"],[6,"M14 17H5"],[1,17,17,3],[1,7,7,3]],settings:[[6,"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"],[1,12,12,3]],"share-2":[[1,18,5,3],[1,6,12,3],[1,18,19,3],[0,8.59,13.51,15.42,17.49],[0,15.41,6.51,8.59,10.49]],share:[[6,"M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8"],[2,"16 6 12 2 8 6"],[0,12,2,12,15]],sheet:[[5,3,3,18,18,2,2],[0,3,9,21,9],[0,3,15,21,15],[0,9,9,9,21],[0,15,9,15,21]],"shield-alert":[[6,"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"],[6,"M12 8v4"],[6,"M12 16h.01"]],"shield-check":[[6,"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"],[6,"m9 12 2 2 4-4"]],"shield-close":[[6,"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"],[0,9.5,9,14.5,14],[0,14.5,9,9.5,14]],"shield-off":[[6,"M19.69 14a6.9 6.9 0 0 0 .31-2V5l-8-3-3.16 1.18"],[6,"M4.73 4.73 4 5v7c0 6 8 10 8 10a20.29 20.29 0 0 0 5.62-4.38"],[0,2,2,22,22]],shield:[[6,"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"]],shirt:[[6,"M20.38 3.46 16 2a4 4 0 0 1-8 0L3.62 3.46a2 2 0 0 0-1.34 2.23l.58 3.47a1 1 0 0 0 .99.84H6v10c0 1.1.9 2 2 2h8a2 2 0 0 0 2-2V10h2.15a1 1 0 0 0 .99-.84l.58-3.47a2 2 0 0 0-1.34-2.23z"]],"shopping-bag":[[6,"M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"],[0,3,6,21,6],[6,"M16 10a4 4 0 0 1-8 0"]],"shopping-cart":[[1,8,21,1],[1,19,21,1],[6,"M2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12"]],shovel:[[6,"M2 22v-5l5-5 5 5-5 5z"],[6,"M9.5 14.5 16 8"],[6,"m17 2 5 5-.5.5a3.53 3.53 0 0 1-5 0s0 0 0 0a3.53 3.53 0 0 1 0-5L17 2"]],"shower-head":[[6,"m4 4 2.5 2.5"],[6,"M13.5 6.5a4.95 4.95 0 0 0-7 7"],[6,"M15 5 5 15"],[6,"M14 17v.01"],[6,"M10 16v.01"],[6,"M13 13v.01"],[6,"M16 10v.01"],[6,"M11 20v.01"],[6,"M17 14v.01"],[6,"M20 11v.01"]],shrink:[[6,"m15 15 6 6m-6-6v4.8m0-4.8h4.8"],[6,"M9 19.8V15m0 0H4.2M9 15l-6 6"],[6,"M15 4.2V9m0 0h4.8M15 9l6-6"],[6,"M9 4.2V9m0 0H4.2M9 9 3 3"]],shrub:[[6,"M12 22v-7l-2-2"],[6,"M17 8v.8A6 6 0 0 1 13.8 20v0H10v0A6.5 6.5 0 0 1 7 8h0a5 5 0 0 1 10 0Z"],[6,"m14 14-2 2"]],shuffle:[[2,"16 3 21 3 21 8"],[0,4,20,21,3],[2,"21 16 21 21 16 21"],[0,15,15,21,21],[0,4,4,9,9]],"sidebar-close":[[5,3,3,18,18,2,2],[6,"M9 3v18"],[6,"m16 15-3-3 3-3"]],"sidebar-open":[[5,3,3,18,18,2,2],[6,"M9 3v18"],[6,"m14 9 3 3-3 3"]],sidebar:[[5,3,3,18,18,2,2],[0,9,3,9,21]],sigma:[[6,"M18 7V4H6l6 8-6 8h12v-3"]],"signal-high":[[6,"M2 20h.01"],[6,"M7 20v-4"],[6,"M12 20v-8"],[6,"M17 20V8"]],"signal-low":[[6,"M2 20h.01"],[6,"M7 20v-4"]],"signal-medium":[[6,"M2 20h.01"],[6,"M7 20v-4"],[6,"M12 20v-8"]],"signal-zero":[[6,"M2 20h.01"]],signal:[[6,"M2 20h.01"],[6,"M7 20v-4"],[6,"M12 20v-8"],[6,"M17 20V8"],[6,"M22 4v16"]],siren:[[6,"M7 12a5 5 0 0 1 5-5v0a5 5 0 0 1 5 5v6H7v-6Z"],[6,"M5 20a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v2H5v-2Z"],[6,"M21 12h1"],[6,"M18.5 4.5 18 5"],[6,"M2 12h1"],[6,"M12 2v1"],[6,"m4.929 4.929.707.707"],[6,"M12 12v6"]],"skip-back":[[3,"19 20 9 12 19 4 19 20"],[0,5,19,5,5]],"skip-forward":[[3,"5 4 15 12 5 20 5 4"],[0,19,5,19,19]],skull:[[1,9,12,1],[1,15,12,1],[6,"M8 20v2h8v-2"],[6,"m12.5 17-.5-1-.5 1h1z"],[6,"M16 20a2 2 0 0 0 1.56-3.25 8 8 0 1 0-11.12 0A2 2 0 0 0 8 20"]],slack:[[5,13,2,3,8,1.5],[6,"M19 8.5V10h1.5A1.5 1.5 0 1 0 19 8.5"],[5,8,14,3,8,1.5],[6,"M5 15.5V14H3.5A1.5 1.5 0 1 0 5 15.5"],[5,14,13,8,3,1.5],[6,"M15.5 19H14v1.5a1.5 1.5 0 1 0 1.5-1.5"],[5,2,8,8,3,1.5],[6,"M8.5 5H10V3.5A1.5 1.5 0 1 0 8.5 5"]],slash:[[1,12,12,10],[0,4.93,4.93,19.07,19.07]],slice:[[6,"m8 14-6 6h9v-3"],[6,"M18.37 3.63 8 14l3 3L21.37 6.63a2.12 2.12 0 1 0-3-3Z"]],"sliders-horizontal":[[0,21,4,14,4],[0,10,4,3,4],[0,21,12,12,12],[0,8,12,3,12],[0,21,20,16,20],[0,12,20,3,20],[0,14,2,14,6],[0,8,10,8,14],[0,16,18,16,22]],sliders:[[0,4,21,4,14],[0,4,10,4,3],[0,12,21,12,12],[0,12,8,12,3],[0,20,21,20,16],[0,20,12,20,3],[0,2,14,6,14],[0,10,8,14,8],[0,18,16,22,16]],"smartphone-charging":[[5,5,2,14,20,2,2],[6,"M12.667 8 10 12h4l-2.667 4"]],smartphone:[[5,5,2,14,20,2,2],[6,"M12 18h.01"]],"smile-plus":[[6,"M22 11v1a10 10 0 1 1-9-10"],[6,"M8 14s1.5 2 4 2 4-2 4-2"],[0,9,9,9.01,9],[0,15,9,15.01,9],[6,"M16 5h6"],[6,"M19 2v6"]],smile:[[1,12,12,10],[6,"M8 14s1.5 2 4 2 4-2 4-2"],[0,9,9,9.01,9],[0,15,9,15.01,9]],snowflake:[[0,2,12,22,12],[0,12,2,12,22],[6,"m20 16-4-4 4-4"],[6,"m4 8 4 4-4 4"],[6,"m16 4-4 4-4-4"],[6,"m8 20 4-4 4 4"]],sofa:[[6,"M20 9V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v3"],[6,"M2 11v5a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-5a2 2 0 0 0-4 0v2H6v-2a2 2 0 0 0-4 0Z"],[6,"M4 18v2"],[6,"M20 18v2"],[6,"M12 4v9"]],"sort-asc":[[6,"M11 11h4"],[6,"M11 15h7"],[6,"M11 19h10"],[6,"M9 7 6 4 3 7"],[6,"M6 6v14"]],"sort-desc":[[6,"M11 5h10"],[6,"M11 9h7"],[6,"M11 13h4"],[6,"m3 17 3 3 3-3"],[6,"M6 18V4"]],soup:[[6,"M12 21a9 9 0 0 0 9-9H3a9 9 0 0 0 9 9Z"],[6,"M7 21h10"],[6,"M19.5 12 22 6"],[6,"M16.25 3c.27.1.8.53.75 1.36-.06.83-.93 1.2-1 2.02-.05.78.34 1.24.73 1.62"],[6,"M11.25 3c.27.1.8.53.74 1.36-.05.83-.93 1.2-.98 2.02-.06.78.33 1.24.72 1.62"],[6,"M6.25 3c.27.1.8.53.75 1.36-.06.83-.93 1.2-1 2.02-.05.78.34 1.24.74 1.62"]],speaker:[[5,4,2,16,20,2,2],[1,12,14,4],[0,12,6,12.01,6]],spline:[[6,"M21 6V4c0-.6-.4-1-1-1h-2a1 1 0 0 0-1 1v2c0 .6.4 1 1 1h2c.6 0 1-.4 1-1Z"],[6,"M7 20v-2c0-.6-.4-1-1-1H4a1 1 0 0 0-1 1v2c0 .6.4 1 1 1h2c.6 0 1-.4 1-1Z"],[6,"M5 17A12 12 0 0 1 17 5"]],sprout:[[6,"M7 20h10"],[6,"M10 20c5.5-2.5.8-6.4 3-10"],[6,"M9.5 9.4c1.1.8 1.8 2.2 2.3 3.7-2 .4-3.5.4-4.8-.3-1.2-.6-2.3-1.9-3-4.2 2.8-.5 4.4 0 5.5.8z"],[6,"M14.1 6a7 7 0 0 0-1.1 4c1.9-.1 3.3-.6 4.3-1.4 1-1 1.6-2.3 1.7-4.6-2.7.1-4 1-4.9 2z"]],square:[[5,3,3,18,18,2,2]],"star-half":[[6,"M12 17.8 5.8 21 7 14.1 2 9.3l7-1L12 2"]],"star-off":[[6,"M8.34 8.34 2 9.27l5 4.87L5.82 21 12 17.77 18.18 21l-.59-3.43"],[6,"M18.42 12.76 22 9.27l-6.91-1L12 2l-1.44 2.91"],[0,2,2,22,22]],star:[[3,"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"]],stethoscope:[[6,"M4.8 2.3A.3.3 0 1 0 5 2H4a2 2 0 0 0-2 2v5a6 6 0 0 0 6 6v0a6 6 0 0 0 6-6V4a2 2 0 0 0-2-2h-1a.2.2 0 1 0 .3.3"],[6,"M8 15v1a6 6 0 0 0 6 6v0a6 6 0 0 0 6-6v-4"],[1,20,10,2]],sticker:[[6,"M15.5 3H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h14a2 2 0 0 0 2-2V8.5L15.5 3Z"],[6,"M15 3v6h6"],[6,"M10 16s.8 1 2 1c1.3 0 2-1 2-1"],[6,"M8 13h0"],[6,"M16 13h0"]],"sticky-note":[[6,"M15.5 3H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h14a2 2 0 0 0 2-2V8.5L15.5 3Z"],[6,"M15 3v6h6"]],"stop-circle":[[1,12,12,10],[5,9,9,6,6]],"stretch-horizontal":[[5,2,4,20,6,2],[5,2,14,20,6,2]],"stretch-vertical":[[5,4,2,6,20,2],[5,14,2,6,20,2]],strikethrough:[[6,"M16 4H9a3 3 0 0 0-2.83 4"],[6,"M14 12a4 4 0 0 1 0 8H6"],[0,4,12,20,12]],subscript:[[6,"m4 5 8 8"],[6,"m12 5-8 8"],[6,"M20 19h-4c0-1.5.44-2 1.5-2.5S20 15.33 20 14c0-.47-.17-.93-.48-1.29a2.11 2.11 0 0 0-2.62-.44c-.42.24-.74.62-.9 1.07"]],subtitles:[[6,"M7 13h4"],[6,"M15 13h2"],[6,"M7 9h2"],[6,"M13 9h4"],[6,"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10Z"]],"sun-dim":[[6,"M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8z"],[6,"M12 4h.01"],[6,"M20 12h.01"],[6,"M12 20h.01"],[6,"M4 12h.01"],[6,"M17.657 6.343h.01"],[6,"M17.657 17.657h.01"],[6,"M6.343 17.657h.01"],[6,"M6.343 6.343h.01"]],"sun-medium":[[6,"M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8z"],[6,"M12 3v1"],[6,"M12 20v1"],[6,"M3 12h1"],[6,"M20 12h1"],[6,"m18.364 5.636-.707.707"],[6,"m6.343 17.657-.707.707"],[6,"m5.636 5.636.707.707"],[6,"m17.657 17.657.707.707"]],"sun-moon":[[6,"M12 16a4 4 0 1 0 0-8 4 4 0 0 0 0 8z"],[6,"M12 8a2.828 2.828 0 1 0 4 4"],[6,"M12 2v2"],[6,"M12 20v2"],[6,"m4.93 4.93 1.41 1.41"],[6,"m17.66 17.66 1.41 1.41"],[6,"M2 12h2"],[6,"M20 12h2"],[6,"m6.34 17.66-1.41 1.41"],[6,"m19.07 4.93-1.41 1.41"]],"sun-snow":[[6,"M10 9a3 3 0 1 0 0 6"],[6,"M2 12h1"],[6,"M14 21V3"],[6,"M10 4V3"],[6,"M10 21v-1"],[6,"m3.64 18.36.7-.7"],[6,"m4.34 6.34-.7-.7"],[6,"M14 12h8"],[6,"m17 4-3 3"],[6,"m14 17 3 3"],[6,"m21 15-3-3 3-3"]],sun:[[1,12,12,4],[6,"M12 2v2"],[6,"M12 20v2"],[6,"m4.93 4.93 1.41 1.41"],[6,"m17.66 17.66 1.41 1.41"],[6,"M2 12h2"],[6,"M20 12h2"],[6,"m6.34 17.66-1.41 1.41"],[6,"m19.07 4.93-1.41 1.41"]],sunrise:[[6,"M12 2v8"],[6,"m4.93 10.93 1.41 1.41"],[6,"M2 18h2"],[6,"M20 18h2"],[6,"m19.07 10.93-1.41 1.41"],[6,"M22 22H2"],[6,"m8 6 4-4 4 4"],[6,"M16 18a4 4 0 0 0-8 0"]],sunset:[[6,"M12 10V2"],[6,"m4.93 10.93 1.41 1.41"],[6,"M2 18h2"],[6,"M20 18h2"],[6,"m19.07 10.93-1.41 1.41"],[6,"M22 22H2"],[6,"m16 6-4 4-4-4"],[6,"M16 18a4 4 0 0 0-8 0"]],superscript:[[6,"m4 19 8-8"],[6,"m12 19-8-8"],[6,"M20 12h-4c0-1.5.442-2 1.5-2.5S20 8.334 20 7.002c0-.472-.17-.93-.484-1.29a2.105 2.105 0 0 0-2.617-.436c-.42.239-.738.614-.899 1.06"]],"swiss-franc":[[6,"M10 21V3h8"],[6,"M6 16h9"],[6,"M10 9.5h7"]],"switch-camera":[[6,"M11 19H4a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h5"],[6,"M13 5h7a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-5"],[1,12,12,3],[6,"m18 22-3-3 3-3"],[6,"m6 2 3 3-3 3"]],sword:[[2,"14.5 17.5 3 6 3 3 6 3 17.5 14.5"],[0,13,19,19,13],[0,16,16,20,20],[0,19,21,21,19]],swords:[[2,"14.5 17.5 3 6 3 3 6 3 17.5 14.5"],[0,13,19,19,13],[0,16,16,20,20],[0,19,21,21,19],[2,"14.5 6.5 18 3 21 3 21 6 17.5 9.5"],[0,5,14,9,18],[0,7,17,4,20],[0,3,19,5,21]],syringe:[[6,"m18 2 4 4"],[6,"m17 7 3-3"],[6,"M19 9 8.7 19.3c-1 1-2.5 1-3.4 0l-.6-.6c-1-1-1-2.5 0-3.4L15 5"],[6,"m9 11 4 4"],[6,"m5 19-3 3"],[6,"m14 4 6 6"]],"table-2":[[6,"M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18"]],table:[[5,3,3,18,18,2,2],[0,3,9,21,9],[0,3,15,21,15],[0,12,3,12,21]],tablet:[[5,4,2,16,20,2,2],[0,12,18,12.01,18]],tag:[[6,"M12 2H2v10l9.29 9.29c.94.94 2.48.94 3.42 0l6.58-6.58c.94-.94.94-2.48 0-3.42L12 2Z"],[6,"M7 7h.01"]],tags:[[6,"M9 5H2v7l6.29 6.29c.94.94 2.48.94 3.42 0l3.58-3.58c.94-.94.94-2.48 0-3.42L9 5Z"],[6,"M6 9.01V9"],[6,"m15 5 6.3 6.3a2.4 2.4 0 0 1 0 3.4L17 19"]],target:[[1,12,12,10],[1,12,12,6],[1,12,12,2]],tent:[[6,"M19 20 10 4"],[6,"m5 20 9-16"],[6,"M3 20h18"],[6,"m12 15-3 5"],[6,"m12 15 3 5"]],"terminal-square":[[6,"m7 11 2-2-2-2"],[6,"M11 13h4"],[5,3,3,18,18,2,2]],terminal:[[2,"4 17 10 11 4 5"],[0,12,19,20,19]],"text-cursor-input":[[6,"M13 20h-1a3 3 0 0 1-3-3V7a3 3 0 0 1 3-3h1"],[6,"M5 4h1a3 3 0 0 1 3 3v10a3 3 0 0 1-3 3H5"],[6,"M13.1 7.9h6.8A2.18 2.18 0 0 1 22 10v4a2.11 2.11 0 0 1-2.1 2.1h-6.8"],[6,"M4.8 16.1h-.7A2.18 2.18 0 0 1 2 14v-4a2.18 2.18 0 0 1 2.1-2.1h.7"]],"text-cursor":[[6,"M17 22h-1a4 4 0 0 1-4-4V6a4 4 0 0 1 4-4h1"],[6,"M7 22h1a4 4 0 0 0 4-4v-1"],[6,"M7 2h1a4 4 0 0 1 4 4v1"]],"thermometer-snowflake":[[6,"M2 12h10"],[6,"M9 4v16"],[6,"m3 9 3 3-3 3"],[6,"M12 6 9 9 6 6"],[6,"m6 18 3-3 1.5 1.5"],[6,"M20 4v10.54a4 4 0 1 1-4 0V4a2 2 0 0 1 4 0Z"]],"thermometer-sun":[[6,"M12 9a4 4 0 0 0-2 7.5"],[6,"M12 3v2"],[6,"m6.6 18.4-1.4 1.4"],[6,"M20 4v10.54a4 4 0 1 1-4 0V4a2 2 0 0 1 4 0Z"],[6,"M4 13H2"],[6,"M6.34 7.34 4.93 5.93"]],thermometer:[[6,"M14 4v10.54a4 4 0 1 1-4 0V4a2 2 0 0 1 4 0Z"]],"thumbs-down":[[6,"M17 14V2"],[6,"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22h0a3.13 3.13 0 0 1-3-3.88Z"]],"thumbs-up":[[6,"M7 10v12"],[6,"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2h0a3.13 3.13 0 0 1 3 3.88Z"]],ticket:[[6,"M3 7v2a3 3 0 1 1 0 6v2c0 1.1.9 2 2 2h14a2 2 0 0 0 2-2v-2a3 3 0 1 1 0-6V7a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2Z"],[6,"M13 5v2"],[6,"M13 17v2"],[6,"M13 11v2"]],"timer-off":[[6,"M10 2h4"],[6,"M4.6 11a8 8 0 0 0 1.7 8.7 8 8 0 0 0 8.7 1.7"],[6,"M7.4 7.4a8 8 0 0 1 10.3 1 8 8 0 0 1 .9 10.2"],[6,"m2 2 20 20"],[6,"M12 12v-2"]],"timer-reset":[[6,"M10 2h4"],[6,"M12 14v-4"],[6,"M4 13a8 8 0 0 1 8-7 8 8 0 1 1-5.3 14L4 17.6"],[6,"M9 17H4v5"]],timer:[[0,10,2,14,2],[0,12,14,15,11],[1,12,14,8]],"toggle-left":[[5,2,6,20,12,6,6],[1,8,12,2]],"toggle-right":[[5,2,6,20,12,6,6],[1,16,12,2]],tornado:[[6,"M21 4H3"],[6,"M18 8H6"],[6,"M19 12H9"],[6,"M16 16h-6"],[6,"M11 20H9"]],"toy-brick":[[5,3,8,18,12,1],[6,"M10 8V5c0-.6-.4-1-1-1H6a1 1 0 0 0-1 1v3"],[6,"M19 8V5c0-.6-.4-1-1-1h-3a1 1 0 0 0-1 1v3"]],train:[[5,4,3,16,16,2],[6,"M4 11h16"],[6,"M12 3v8"],[6,"m8 19-2 3"],[6,"m18 22-2-3"],[6,"M8 15h0"],[6,"M16 15h0"]],"trash-2":[[6,"M3 6h18"],[6,"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"],[6,"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"],[0,10,11,10,17],[0,14,11,14,17]],trash:[[6,"M3 6h18"],[6,"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"],[6,"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"]],"tree-deciduous":[[6,"M8 19h8a4 4 0 0 0 3.8-2.8 4 4 0 0 0-1.6-4.5c1-1.1 1-2.7.4-4-.7-1.2-2.2-2-3.6-1.7a3 3 0 0 0-3-3 3 3 0 0 0-3 3c-1.4-.2-2.9.5-3.6 1.7-.7 1.3-.5 2.9.4 4a4 4 0 0 0-1.6 4.5A4 4 0 0 0 8 19Z"],[6,"M12 19v3"]],"tree-pine":[[6,"m17 14 3 3.3a1 1 0 0 1-.7 1.7H4.7a1 1 0 0 1-.7-1.7L7 14h-.3a1 1 0 0 1-.7-1.7L9 9h-.2A1 1 0 0 1 8 7.3L12 3l4 4.3a1 1 0 0 1-.8 1.7H15l3 3.3a1 1 0 0 1-.7 1.7H17Z"],[6,"M12 22v-3"]],trees:[[6,"M10 10v.2A3 3 0 0 1 8.9 16v0H5v0h0a3 3 0 0 1-1-5.8V10a3 3 0 0 1 6 0Z"],[6,"M7 16v6"],[6,"M13 19v3"],[6,"M12 19h8.3a1 1 0 0 0 .7-1.7L18 14h.3a1 1 0 0 0 .7-1.7L16 9h.2a1 1 0 0 0 .8-1.7L13 3l-1.4 1.5"]],trello:[[5,3,3,18,18,2,2],[5,7,7,3,9],[5,14,7,3,5]],"trending-down":[[2,"22 17 13.5 8.5 8.5 13.5 2 7"],[2,"16 17 22 17 22 11"]],"trending-up":[[2,"22 7 13.5 15.5 8.5 10.5 2 17"],[2,"16 7 22 7 22 13"]],triangle:[[6,"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"]],trophy:[[6,"M6 9H4.5a2.5 2.5 0 0 1 0-5H6"],[6,"M18 9h1.5a2.5 2.5 0 0 0 0-5H18"],[6,"M4 22h16"],[6,"M10 14.66V17c0 .55-.47.98-.97 1.21C7.85 18.75 7 20.24 7 22"],[6,"M14 14.66V17c0 .55.47.98.97 1.21C16.15 18.75 17 20.24 17 22"],[6,"M18 2H6v7a6 6 0 0 0 12 0V2Z"]],truck:[[6,"M10 17h4V5H2v12h3"],[6,"M20 17h2v-3.34a4 4 0 0 0-1.17-2.83L19 9h-5"],[6,"M14 17h1"],[1,7.5,17.5,2.5],[1,17.5,17.5,2.5]],"tv-2":[[6,"M7 21h10"],[5,2,3,20,14,2]],tv:[[5,2,7,20,15,2,2],[2,"17 2 12 7 7 2"]],twitch:[[6,"M21 2H3v16h5v4l4-4h5l4-4V2zm-10 9V7m5 4V7"]],twitter:[[6,"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"]],type:[[2,"4 7 4 4 20 4 20 7"],[0,9,20,15,20],[0,12,4,12,20]],umbrella:[[6,"M22 12a9.92 9.92 0 0 0-3.24-6.41 10.12 10.12 0 0 0-13.52 0A9.92 9.92 0 0 0 2 12Z"],[6,"M12 12v8a2 2 0 0 0 4 0"],[0,12,2,12,3]],underline:[[6,"M6 4v6a6 6 0 0 0 12 0V4"],[0,4,20,20,20]],"undo-2":[[6,"M9 14 4 9l5-5"],[6,"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5v0a5.5 5.5 0 0 1-5.5 5.5H11"]],undo:[[6,"M3 7v6h6"],[6,"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13"]],"unlink-2":[[6,"M15 7h2a5 5 0 0 1 0 10h-2m-6 0H7A5 5 0 0 1 7 7h2"]],unlink:[[6,"m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71"],[6,"m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71"],[0,8,2,8,5],[0,2,8,5,8],[0,16,19,16,22],[0,19,16,22,16]],unlock:[[5,3,11,18,11,2,2],[6,"M7 11V7a5 5 0 0 1 9.9-1"]],"upload-cloud":[[6,"M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"],[6,"M12 12v9"],[6,"m16 16-4-4-4 4"]],upload:[[6,"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"],[2,"17 8 12 3 7 8"],[0,12,3,12,15]],usb:[[1,4,20,1],[1,10,7,1],[6,"M4 20 19 5"],[6,"m21 3-3 1 2 2 1-3Z"],[6,"m10 7-5 5 2 5"],[6,"m10 14 5 2 4-4"],[6,"m18 12 1-1 1 1-1 1-1-1Z"]],"user-check":[[6,"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"],[1,9,7,4],[2,"16 11 18 13 22 9"]],"user-cog":[[6,"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"],[1,9,7,4],[1,19,11,2],[6,"M19 8v1"],[6,"M19 13v1"],[6,"m21.6 9.5-.87.5"],[6,"m17.27 12-.87.5"],[6,"m21.6 12.5-.87-.5"],[6,"m17.27 10-.87-.5"]],"user-minus":[[6,"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"],[1,9,7,4],[0,22,11,16,11]],"user-plus":[[6,"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"],[1,9,7,4],[0,19,8,19,14],[0,22,11,16,11]],"user-x":[[6,"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"],[1,9,7,4],[0,17,8,22,13],[0,22,8,17,13]],user:[[6,"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"],[1,12,7,4]],users:[[6,"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"],[1,9,7,4],[6,"M22 21v-2a4 4 0 0 0-3-3.87"],[6,"M16 3.13a4 4 0 0 1 0 7.75"]],"utensils-crossed":[[6,"m16 2-2.3 2.3a3 3 0 0 0 0 4.2l1.8 1.8a3 3 0 0 0 4.2 0L22 8"],[6,"M15 15 3.3 3.3a4.2 4.2 0 0 0 0 6l7.3 7.3c.7.7 2 .7 2.8 0L15 15Zm0 0 7 7"],[6,"m2.1 21.8 6.4-6.3"],[6,"m19 5-7 7"]],utensils:[[6,"M3 2v7c0 1.1.9 2 2 2h4a2 2 0 0 0 2-2V2"],[6,"M7 2v20"],[6,"M21 15V2v0a5 5 0 0 0-5 5v6c0 1.1.9 2 2 2h3Zm0 0v7"]],vegan:[[6,"M2 2c4.056 3.007 9.232 9.337 10 20 .897-6.818 1.5-9.5 4-14"],[6,"M20.375 6.533A9.953 9.953 0 0 1 22 12c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2c2.003 0 3.869.589 5.433 1.603"],[6,"M17.104 4c-1.002 1.274-1.146 2.586-1.1 4 1.9-.1 3.003-.201 4.3-1.4 1.406-1.3 1.6-2.3 1.7-4.6-2.7.1-3.623.375-4.9 2Z"]],"venetian-mask":[[6,"M2 12a5 5 0 0 0 5 5 8 8 0 0 1 5 2 8 8 0 0 1 5-2 5 5 0 0 0 5-5V7h-5a8 8 0 0 0-5 2 8 8 0 0 0-5-2H2Z"],[6,"M6 11c1.5 0 3 .5 3 2-2 0-3 0-3-2Z"],[6,"M18 11c-1.5 0-3 .5-3 2 2 0 3 0 3-2Z"]],verified:[[6,"M12 3c-1.2 0-2.4.6-3 1.7A3.6 3.6 0 0 0 4.6 9c-1 .6-1.7 1.8-1.7 3s.7 2.4 1.7 3c-.3 1.2 0 2.5 1 3.4.8.8 2.1 1.2 3.3 1 .6 1 1.8 1.6 3 1.6s2.4-.6 3-1.7c1.2.3 2.5 0 3.4-1 .8-.8 1.2-2 1-3.3 1-.6 1.6-1.8 1.6-3s-.6-2.4-1.7-3c.3-1.2 0-2.5-1-3.4a3.7 3.7 0 0 0-3.3-1c-.6-1-1.8-1.6-3-1.6Z"],[6,"m9 12 2 2 4-4"]],"vibrate-off":[[6,"m2 8 2 2-2 2 2 2-2 2"],[6,"m22 8-2 2 2 2-2 2 2 2"],[6,"M8 8v10c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-2"],[6,"M16 10.34V6c0-.55-.45-1-1-1h-4.34"],[0,2,2,22,22]],vibrate:[[6,"m2 8 2 2-2 2 2 2-2 2"],[6,"m22 8-2 2 2 2-2 2 2 2"],[5,8,5,8,14,1]],"video-off":[[6,"M10.66 6H14a2 2 0 0 1 2 2v2.34l1 1L22 8v8"],[6,"M16 16a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h2l10 10Z"],[0,2,2,22,22]],video:[[6,"m22 8-6 4 6 4V8Z"],[5,2,6,14,12,2,2]],view:[[6,"M5 12s2.545-5 7-5c4.454 0 7 5 7 5s-2.546 5-7 5c-4.455 0-7-5-7-5z"],[6,"M12 13a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"],[6,"M21 17v2a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-2"],[6,"M21 7V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2"]],voicemail:[[1,6,12,4],[1,18,12,4],[0,6,16,18,16]],"volume-1":[[3,"11 5 6 9 2 9 2 15 6 15 11 19 11 5"],[6,"M15.54 8.46a5 5 0 0 1 0 7.07"]],"volume-2":[[3,"11 5 6 9 2 9 2 15 6 15 11 19 11 5"],[6,"M15.54 8.46a5 5 0 0 1 0 7.07"],[6,"M19.07 4.93a10 10 0 0 1 0 14.14"]],"volume-x":[[3,"11 5 6 9 2 9 2 15 6 15 11 19 11 5"],[0,22,9,16,15],[0,16,9,22,15]],volume:[[3,"11 5 6 9 2 9 2 15 6 15 11 19 11 5"]],vote:[[6,"m9 12 2 2 4-4"],[6,"M5 7c0-1.1.9-2 2-2h10a2 2 0 0 1 2 2v12H5V7Z"],[6,"M22 19H2"]],wallet:[[6,"M20 12V8H6a2 2 0 0 1-2-2c0-1.1.9-2 2-2h12v4"],[6,"M4 6v12c0 1.1.9 2 2 2h14v-4"],[6,"M18 12a2 2 0 0 0-2 2c0 1.1.9 2 2 2h4v-4h-4z"]],"wand-2":[[6,"m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72Z"],[6,"m14 7 3 3"],[6,"M5 6v4"],[6,"M19 14v4"],[6,"M10 2v2"],[6,"M7 8H3"],[6,"M21 16h-4"],[6,"M11 3H9"]],wand:[[6,"M15 4V2"],[6,"M15 16v-2"],[6,"M8 9h2"],[6,"M20 9h2"],[6,"M17.8 11.8 19 13"],[6,"M15 9h0"],[6,"M17.8 6.2 19 5"],[6,"m3 21 9-9"],[6,"M12.2 6.2 11 5"]],watch:[[1,12,12,6],[2,"12 10 12 12 13 13"],[6,"m16.13 7.66-.81-4.05a2 2 0 0 0-2-1.61h-2.68a2 2 0 0 0-2 1.61l-.78 4.05"],[6,"m7.88 16.36.8 4a2 2 0 0 0 2 1.61h2.72a2 2 0 0 0 2-1.61l.81-4.05"]],waves:[[6,"M2 6c.6.5 1.2 1 2.5 1C7 7 7 5 9.5 5c2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1"],[6,"M2 12c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1"],[6,"M2 18c.6.5 1.2 1 2.5 1 2.5 0 2.5-2 5-2 2.6 0 2.4 2 5 2 2.5 0 2.5-2 5-2 1.3 0 1.9.5 2.5 1"]],webcam:[[1,12,10,8],[1,12,10,3],[6,"M7 22h10"],[6,"M12 22v-4"]],webhook:[[6,"M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2"],[6,"m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06"],[6,"m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8"]],"wheat-off":[[6,"m2 22 10-10"],[6,"m16 8-1.17 1.17"],[6,"M3.47 12.53 5 11l1.53 1.53a3.5 3.5 0 0 1 0 4.94L5 19l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z"],[6,"m8 8-.53.53a3.5 3.5 0 0 0 0 4.94L9 15l1.53-1.53c.55-.55.88-1.25.98-1.97"],[6,"M10.91 5.26c.15-.26.34-.51.56-.73L13 3l1.53 1.53a3.5 3.5 0 0 1 .28 4.62"],[6,"M20 2h2v2a4 4 0 0 1-4 4h-2V6a4 4 0 0 1 4-4Z"],[6,"M11.47 17.47 13 19l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L5 19l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z"],[6,"m16 16-.53.53a3.5 3.5 0 0 1-4.94 0L9 15l1.53-1.53a3.49 3.49 0 0 1 1.97-.98"],[6,"M18.74 13.09c.26-.15.51-.34.73-.56L21 11l-1.53-1.53a3.5 3.5 0 0 0-4.62-.28"],[0,2,2,22,22]],wheat:[[6,"M2 22 16 8"],[6,"M3.47 12.53 5 11l1.53 1.53a3.5 3.5 0 0 1 0 4.94L5 19l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z"],[6,"M7.47 8.53 9 7l1.53 1.53a3.5 3.5 0 0 1 0 4.94L9 15l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z"],[6,"M11.47 4.53 13 3l1.53 1.53a3.5 3.5 0 0 1 0 4.94L13 11l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z"],[6,"M20 2h2v2a4 4 0 0 1-4 4h-2V6a4 4 0 0 1 4-4Z"],[6,"M11.47 17.47 13 19l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L5 19l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z"],[6,"M15.47 13.47 17 15l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L9 15l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z"],[6,"M19.47 9.47 21 11l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L13 11l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z"]],"wifi-off":[[0,2,2,22,22],[6,"M8.5 16.5a5 5 0 0 1 7 0"],[6,"M2 8.82a15 15 0 0 1 4.17-2.65"],[6,"M10.66 5c4.01-.36 8.14.9 11.34 3.76"],[6,"M16.85 11.25a10 10 0 0 1 2.22 1.68"],[6,"M5 13a10 10 0 0 1 5.24-2.76"],[0,12,20,12.01,20]],wifi:[[6,"M5 13a10 10 0 0 1 14 0"],[6,"M8.5 16.5a5 5 0 0 1 7 0"],[6,"M2 8.82a15 15 0 0 1 20 0"],[0,12,20,12.01,20]],wind:[[6,"M17.7 7.7a2.5 2.5 0 1 1 1.8 4.3H2"],[6,"M9.6 4.6A2 2 0 1 1 11 8H2"],[6,"M12.6 19.4A2 2 0 1 0 14 16H2"]],"wine-off":[[6,"M8 22h8"],[6,"M7 10h3m7 0h-1.343"],[6,"M12 15v7"],[6,"M7.307 7.307A12.33 12.33 0 0 0 7 10a5 5 0 0 0 7.391 4.391M8.638 2.981C8.75 2.668 8.872 2.34 9 2h6c1.5 4 2 6 2 8 0 .407-.05.809-.145 1.198"],[0,2,2,22,22]],wine:[[6,"M8 22h8"],[6,"M7 10h10"],[6,"M12 15v7"],[6,"M12 15a5 5 0 0 0 5-5c0-2-.5-4-2-8H9c-1.5 4-2 6-2 8a5 5 0 0 0 5 5Z"]],"wrap-text":[[0,3,6,21,6],[6,"M3 12h15a3 3 0 1 1 0 6h-4"],[2,"16 16 14 18 16 20"],[0,3,18,10,18]],wrench:[[6,"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"]],"x-circle":[[1,12,12,10],[0,15,9,9,15],[0,9,9,15,15]],"x-octagon":[[3,"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2"],[0,15,9,9,15],[0,9,9,15,15]],"x-square":[[5,3,3,18,18,2,2],[0,9,9,15,15],[0,15,9,9,15]],x:[[0,18,6,6,18],[0,6,6,18,18]],youtube:[[6,"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"],[3,"10 15 15 12 10 9"]],"zap-off":[[2,"12.41 6.75 13 2 10.57 4.92"],[2,"18.57 12.91 21 10 15.66 10"],[2,"8 8 3 14 12 14 11 22 16 16"],[0,2,2,22,22]],zap:[[3,"13 2 3 14 12 14 11 22 21 10 12 10 13 2"]],"zoom-in":[[1,11,11,8],[0,21,21,16.65,16.65],[0,11,8,11,14],[0,8,11,14,11]],"zoom-out":[[1,11,11,8],[0,21,21,16.65,16.65],[0,8,11,14,11]]};var Y={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};function Q(a,t){var e=document.createElementNS("http://www.w3.org/2000/svg",a);return Object.keys(t).forEach((function(a){e.setAttribute(a,t[a])})),e}function aa(a){var t=a[0];if(0===t)return Q("line",{x1:a[1],y1:a[2],x2:a[3],y2:a[4]});if(1===t)return Q("circle",{cx:a[1],cy:a[2],r:a[3]});if(2===t)return Q("polyline",{points:a[1]});if(3===t)return Q("polygon",{points:a[1]});if(4===t)return Q("ellipse",{cx:a[1],cy:a[2],rx:a[3],ry:a[4]});if(5===t){var e={x:a[1],y:a[2],width:a[3],height:a[4]};return a[5]&&(e.rx=a[5]),a[6]&&(e.ry=a[6]),a[7]&&(e.transform=a[7]),Q("rect",e)}return 6===t?Q("path",{d:a[1]}):void 0}function ta(a){for(var t=Q("svg",Y),e=0,i=a;e',"box-glyph":'',"check-small":'',"dice-glyph":'',dice:'',discord:'',"right-triangle":'',"heading-glyph":'',help:'',"keyboard-toggle":'',"broken-link":'',experiment:'',"left-arrow":'',link:'',"link-glyph":'',"links-coming-in":'',"links-going-out":'',"open-vault":'',paused:'',"question-mark-glyph":'',"right-arrow":'',"sidebar-left":'',"sidebar-right":'',"sheets-in-box":'',"star-list":'',"sync-small":'',tabs:'',"uppercase-lowercase-a":'',vault:'',"stack-horizontal":'',"stack-vertical":'',"stretch-horizontal":'',"stretch-vertical":'',"distribute-space-horizontal":'',"distribute-space-vertical":'',"zoom-to-selection":'',"create-group":'',"snap-to-object":'',"line-horizontal":'',"aspect-ratio":''},ra={},na={viewBox:"0 0 100 100"},oa={};function la(a,t){if(!oa.hasOwnProperty(a)){var e=t();if(!e)return null;e.classList.add("svg-icon",a),oa[a]=e}return oa[a].cloneNode(!0)}function ha(a,t){var e=a.firstChild;if(!(e&&e.instanceOf(SVGSVGElement)&&e.classList.contains(t))){e&&a.removeChild(e);var i=function(a){return a.startsWith("lucide-")?la(a,(function(){var t=a.substring("lucide-".length);return $.hasOwnProperty(t)?ta($[t]):null})):ra.hasOwnProperty(a)?la(a,(function(){var t=Q("svg",na);return t.innerHTML=ra[a],t})):ia.hasOwnProperty(a)?la(a,(function(){var t=Q("svg",Y);return t.innerHTML=ia[a],t})):(ea.hasOwnProperty(a)&&(a=ea[a]),$.hasOwnProperty(a)?la("lucide-"+a,(function(){return ta($[a])})):null)}(t);i&&a.appendChild(i)}}var Ma=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i;function ca(a,t,e){return e<0&&(e+=1),e>1&&(e-=1),e<1/6?a+6*(t-a)*e:e<.5?t:e<2/3?a+(t-a)*(2/3-e)*6:a}function sa(a){var t,e,i,r=a.h,n=a.s,o=a.l;if(r/=360,o/=100,0==(n/=100))t=e=i=o;else{var l=o<.5?o*(1+n):o+n-o*n,h=2*o-l;t=ca(h,l,r+1/3),e=ca(h,l,r),i=ca(h,l,r-1/3)}return{r:Math.round(255*t),g:Math.round(255*e),b:Math.round(255*i)}}function va(a){var t=a.toString(16);return 1===t.length?"0"+t:t}function ua(a){var t=Ma.exec(a);return t?{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16)}:null}var pa=function(){function a(a){this.components=[];var t=this.settingEl=a.createDiv("setting-item"),e=this.infoEl=t.createDiv("setting-item-info");this.nameEl=e.createDiv("setting-item-name"),this.descEl=e.createDiv("setting-item-description"),this.controlEl=t.createDiv("setting-item-control")}return a.prototype.setName=function(a){return this.nameEl.setText(a),this},a.prototype.setDesc=function(a){return this.descEl.setText(a),this},a.prototype.setClass=function(a){return this.settingEl.addClass(a),this},a.prototype.setTooltip=function(a,t){return G(this.nameEl,a,t),this},a.prototype.setHeading=function(){return this.settingEl.addClass("setting-item-heading"),this},a.prototype.setDisabled=function(a){this.settingEl.toggleClass("is-disabled",a);for(var t=0,e=this.components;t.5?M/(2-o-l):M/(o+l),o){case t:r=(e-i)/M+(e{"use strict";window.OBSIDIAN_DEFAULT_I18N={setting:{options:"Options",plugin:"Plugin",builtinPlugins:"Core plugins",pluginOptions:"Plugin options",folderPathExamplePlaceholder:"Example: folder 1/folder 2",filePathExamplePlaceholder:"Example: folder/note",msgRestartRequired:"Changing this option requires a restart to take effect.",editor:{name:"Editor",sectionGeneral:"General",sectionBehavior:"Behavior",sectionDisplay:"Display",optionSpellcheck:"Spellcheck",optionSpellcheckDescription:"Turn on the spellchecker.",spellcheckLanguages:"Spellcheck languages",spellcheckLanguagesDescription:"Choose the languages for the spellchecker to use.",spellcheckLanguagesMacDescription:"The native spellchecker will automatically detect the language being used for you on macOS.",spellcheckDict:"Spellcheck dictionary",spellcheckDictEmpty:"The spellcheck dictionary is empty.",optionShowInlineTitle:"Show inline title",optionShowInlineTitleDescription:"Displays the filename as an editable title inline with the file contents.",optionReadableLineLength:"Readable line length",optionReadableLineDescription:"Limit maximum line length. Less content fits onscreen, but long blocks of text are more readable.",optionStrictLineBreak:"Strict line breaks",optionStrictLineBreakDescription:"Markdown specs ignore single line breaks in reading view. Turn this off to make single line breaks visible.",optionShowFrontmatter:"Show frontmatter",optionShowFrontmatterDescription:"In reading view, show the frontmatter metadata section. Turn off to hide that section.",optionAutoPairBrackets:"Auto pair brackets",optionAutoPairBracketsDescription:"Pair brackets and quotes automatically.",optionAutoPairMarkdown:"Auto pair Markdown syntax",optionAutoPairMarkdownDescription:"Pair symbols automatically for bold and italic.",optionSmartIndentLists:"Smart indent lists",optionSmartIndentListsDescription:"Automatically set indentation and place list items correctly.",optionFoldHeading:"Fold heading",optionFoldHeadingDescription:"Lets you fold all content under a heading.",optionFoldIndent:"Fold indent",optionFoldIndentDescription:"Lets you fold part of an indentation, such as lists.",optionDefaultNewTabView:"Default view for new tabs",optionDefaultNewTabViewDescription:"The default view that a new markdown tab gets opened in.",optionDefaultNewTabViewEditing:"Editing view",optionDefaultNewTabViewReading:"Reading view",optionDefaultEditingMode:"Default editing mode",optionDefaultEditingModeDescription:"The default editing mode a new tab will start with.",optionDefaultEditingModeSource:"Source mode",optionDefaultEditingModeLivePreview:"Live Preview",optionShowLineNumber:"Show line number",optionShowLineNumberDescription:"Show line number in the gutter.",optionIndentationGuide:"Show indentation guides",optionIndentationGuideDescription:"Show vertical relationship lines between bullet points for visual guidance.",optionUseTabs:"Indent using tabs",optionUseTabsDescription:"Use tabs to indent by pressing the “Tab” key. Turn this off to indent using up to 4 spaces.",optionTabSize:"Tab indent size",optionTabSizeDescription:"Number of spaces a tab character will render as.",optionRtl:"Right-to-left (RTL)",optionRtlDescription:"Sets the text direction of notes to display in right-to-left.",optionAutoConvertHtml:"Auto convert HTML",optionAutoConvertHtmlDescription:"Automatically convert HTML to Markdown when pasting and drag-and-drop from webpages. Use Ctrl/Cmd+Shift+V to paste without conversion.",optionVimKeyBindings:"Vim key bindings",optionVimKeyBindingsDescription:"Allows you to use Vim key bindings when editing.",optionVimKeyBindingsMobile:"On mobile devices, this setting is per-device and is not synchronized through the config file.",optionEmacsyKeys:"Legacy Emacs-style key bindings for macOS",optionEmacsyKeysDescription:"Allows you to use the additional Emacs-style navigation keys, which are standard on macOS, but may interfere with some key operations. Not available while in Vim mode.",labelConfirmEnableVim:"Confirm entering Vim mode",labelVimWarning:"Vim mode is for efficient text editing but can be quite counter-intuitive. If you're not familiar with Vim, this option might make it look like Obsidian has stopped working.",labelVimTest:"To verify that you know your way around Vim, please enter the command to quit Vim without saving below:",labelVimYourAnswer:"Your answer",placeholderEnterCommand:"Enter command...",buttonConfirmEnableVim:"Let me enable Vim",msgVimModeEnabled:"Command is correct. Vim mode now enabled.",msgVimModeNotEnabled:"Command is incorrect. Vim mode remains disabled to protect you.",msgVimModePleaseEnterCommand:"Please enter the command to enable Vim mode",optionLegacyEditor:"Use legacy editor",optionLegacyEditorDescription2:"The legacy editor will be deprecated soon. It is currently no longer maintained, and as such, bugs will no longer be addressed.",labelLegacyDeprecation:"New editor is here",labelLegacyDeprecation_1:"Obsidian now has a brand new editor that's more robust and accessible.",labelLegacyDeprecation_2:"It seems you're still using the legacy editor, and we think you'll enjoy the new editor.",labelLegacyDeprecationChoice:"Which mode would you like to use?",labelLivePreviewDescription:"A more modern, what-you-see-is-what-you-get experience.",labelSourceModeDescription:"See raw Markdown with syntax highlighting.",buttonStartNewEditor:"Start new editor"},file:{name:"Files & Links",optionConfirmFileDeletion:"Confirm file deletion",optionConfirmFileDeletionDescription:"Prompt before file deletion.",optionDeleteDestination:"Deleted files",optionDeleteDestinationDescription:"What happens to a file after you delete it.",optionChoiceSystemTrash:"Move to system trash",optionChoiceVaultTrash:"Move to Obsidian trash (.trash folder)",optionChoicePermanentDelete:"Permanently delete",optionAlwaysUpdateLinks:"Automatically update internal links",optionAlwaysUpdateLinksDescription:"Turn off to be prompted to update links after renaming a file.",optionNewNoteLocation:"Default location for new notes",optionNewNoteLocationDescription:"Where newly created notes are placed. Plugin settings will override this.",optionChoiceVaultRoot:"Vault folder",optionChoiceCurrentFolder:"Same folder as current file",optionChoiceSpecifiedFolder:"In the folder specified below",optionNewFileFolderPath:"Folder to create new notes in",optionNewFileFolderPathDescription:"Newly created notes will appear under this folder. Plugin settings will override this.",optionUseWikiLinks:"Use [[Wikilinks]]",optionUseWikiLinksDescription:"Auto-generate Wikilinks for [[links]] and ![[images]] instead of Markdown links and images. Disable this option to generate Markdown links instead.",optionShowUnsupportedFiles:"Detect all file extensions",optionShowUnsupportedFilesDescription:"Show files with any extension even if Obsidian can't open them natively, so that you can link to them and see them in File Explorer and Quick Switcher.",optionLinkAutocompletedFormat:"New link format",optionLinkAutocompletedFormatDescription:"What links to insert when auto-generating internal links.",optionChoiceShortestLinktext:"Shortest path when possible",optionChoiceRelativePath:"Relative path to file",optionChoiceAbsolutePath:"Absolute path in vault",optionNewAttachmentLocation:"Default location for new attachments",optionNewAttachmentLocationDescription:"Where newly added attachments are placed.",optionChoiceSubdirectory:"In subfolder under current folder",optionAttachmentFolderPath:"Attachment folder path",optionAttachmentFolderPathDescription:"Place newly created attachment files, such as images created via drag-and-drop or audio recordings, in this folder.",optionAttachmentSubfolderPath:"Subfolder name",optionAttachmentSubfolderPathDescription:'If your file is under "vault/folder", and you set subfolder name to "attachments", attachments will be saved to "vault/folder/attachments".',optionAttachmentSubfolderPathPlaceholder:"attachments",optionExcludedFiles:"Excluded files",optionExcludedFilesDesc:"Excluded files will be hidden in Search, Graph View, and Unlinked Mentions, less noticeable in Quick Switcher and link suggestions.",labelNoExcludedFiltersApplied:"No excluded filter is applied right now. Add one below.",labelExcludedFiltersApplied:"Files matching the following filters are currently excluded:",labelExcludedFilter:"Filter",messageEmptyFilter:"Filter cannot be empty",placeholderExcludedFilter:'Enter path or "/regex/"...'},appearance:{name:"Appearance",optionBaseTheme:"Base color scheme",optionBaseThemeDescription:"Choose Obsidian's default color scheme.",optionAccentColor:"Accent color",optionAccentColorDescription:"Choose the accent color used throughout the app.",darkTheme:"Dark",lightTheme:"Light",systemTheme:"Adapt to system",optionFont:"Font",optionAdvanced:"Advanced",optionInterfaceFont:"Interface font",optionInterfaceFontDescription:"Set base font for all of Obsidian.",optionZoomLevel:"Zoom level",optionZoomLevelDescription:"Controls the overall zoom level of the app.",optionTextFont:"Text font",optionTextFontDescription:"Set font for editing and reading views.",optionMonospaceFont:"Monospace font",optionMonospaceFontDescription:"Set font for places like code blocks and frontmatter.",labelSingleFontCurrentlyInEffect:" Currently applied font: ",labelMultipleFontsCurrentlyInEffect:" The following fonts are currently applied:",optionFontPlaceholder:"Enter font name...",labelNoCustomFontSet:"No custom font is applied right now. Add one below.",labelFontApplied:"The first font from this list that is available on your system will be applied.",msgFontNotFound:"This font is not detected on your system.",msgFontFound:"This font is detected on your system.",labelFontName:"Font name",optionCommunityThemes:"Community themes",optionCommunityThemesDescription:"Preview and use amazing themes created by the community.",buttonBrowseCommunityThemes:"Browse",optionFontSize:"Font size",optionFontSizeDescription:"Font size in pixels that affects editing and reading views.",optionFontSizeAction:"Quick font size adjustment",optionFontSizeActionDescription:"Adjust the font size using Ctrl + Scroll, or using the trackpad pinch-zoom gesture.",optionThemes:"Themes",optionManageThemesDescription:"Manage installed themes and browse community themes.",optionThemeButtonManage:"Manage",optionChoiceNone:"None",optionNativeMenus:"Native menus",optionNativeMenusDesc:"Menus throughout the app will match the operating system. They will not be affected by your theme.",buttonReloadThemes:"Reload themes",msgReloadedThemes:"Reloaded custom CSS themes.",buttonOpenThemesFolder:"Open themes folder",optionCssSnippets:"CSS snippets",labelNoCssSnippetsFound:"No CSS snippets found.",noSnippetDescription:'CSS Snippets are stored in "{{path}}".',buttonReloadSnippets:"Reload snippets",buttonOpenSnippetsFolder:"Open snippets folder",msgReloadedSnippets:"Reloaded CSS snippets.",optionToggleSnippetDescription:'Apply CSS snippet at "{{path}}".',labelInstalledThemes:"Installed themes",labelScreenshotUnavailable:"Screenshot unavailable",labelDefaultTheme:"Default",tooltipClickToEnlarge:"Click to enlarge",buttonUpdate:"Update",labelCurrentlySelected:"Selected",optionFrameStyle:"Window frame style",optionFrameDescription:"Determines the styling of the title bar of Obsidian windows. Requires a full restart to take effect.",optionFrameHidden:"Hidden (default)",optionFrameObsidian:"Obsidian frame",optionFrameNative:"Native frame",optionConfigureRibbon:"Ribbon menu",optionConfigureRibbonDesc:"Configure what commands appear in the ribbon menu in that navigation bar.",optionMobileQuickRibbonItem:"Quick access ribbon item",optionMobileQuickRibbonItemDesc:"Tapping on the ribbon item in the navigation menu will activate this ribbon item. Tap and hold will still show the menu.",buttonConfigure:"Configure",labelAdditionalRibbonItems:"Other ribbon items",labelModalConfiguration:"Ribbon Configuration",labelModalConfigurationDesc:"Choose what items you want to be active in the ribbon. Drag and drop to change the order.",optionShowViewHeader:"Show tab title bar",optionShowViewHeaderDesc:"Display the header at the top of every tab.",msgUpdatesFound:"Found {{count}} theme to update.",msgUpdatesFound_plural:"Found {{count}} themes to update.",buttonCheckForUpdates:"Check for updates",buttonViewUpdates:"View updates",buttonUpdateAllThemes:"Update all",labelCurrentThemes:"Current community themes",labelCurrentlyInstalled:"You currently have {{count}} theme installed.",labelCurrentlyInstalled_plural:"You currently have {{count}} themes installed."},hotkeys:{name:"Hotkeys",promptFilter:"Filter...",tooltipDeleteHotkey:"Delete hotkey",labelWaitingForHotkeyPress:"Press hotkey...",tooltipRestoreDefault:"Restore default",tooltipCustomizeCommand:"Customize this command",tooltipHotkeySingleConflict:'This hotkey conflicts with "{{command}}"',tooltipHotkeyMultipleConflicts:"This hotkey conflicts with {{count}} other commands",labelBlankHotkey:"Blank"},about:{name:"About",labelCommercialLicense:"Commercial license",labelLicenseKey:"License key",licenseKeyPlaceholder:"Your license key...",labelActivateLicense:"Activate license",buttonActivate:"Activate",labelUnknownVersion:"Unknown",labelCurrentVersion:"Current version: ",labelInstallVersion:"(Installer version: {{version}})",labelUpToDate:"Your app is up-to-date!",labelReadChangelog:"Read the changelog.",labelManualUpdateRequired:"To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.",labelDownload:"Download",labelNewVersionReady:"A new version is ready to be installed. ",labelRelaunchToUpdate:"Relaunch the app to update.",labelDisabledUpdates:"Updates are disabled.",labelCheckingForUpdates:"Checking for updates...",buttonRelaunch:"Relaunch",buttonCheckForUpdates:"Check for updates",optionAutoUpdate:"Automatic updates",optionAutoUpdateDescription:"Turn this off to prevent the app from checking for updates.",optionGetHelp:"Get help",optionGetHelpDescription:"Get help on using Obsidian.",buttonOpen:"Open",optionLanguage:"Language",optionLanguageDescription:"Change the display language.",optionInsiderBuild:"Receive insider builds",optionInsiderBuildDescription:"Auto-update to insider builds and try new features. These builds are bleeding-edge and might be less stable.",optionAdvanced:"Advanced",optionHwAcceleration:"Hardware acceleration",optionHwAccelerationDescription:"Turns on Hardware Acceleration, which uses your GPU to make Obsidian smoother.",optionHwAccelerationWarning:"If you turn this off, app performance will be severely degraded.",optionConfigLocation:"Override config folder",optionConfigLocationDescription:"Use a different config folder than the default one. Must start with a dot.",optionConfigLocationWarning:"Config location must be a valid folder name that starts with a dot.",labelLicense:"License",labelYourCommercialLicenseKey:'Your commercial license key is "{{key}}".',labelCommercialLicenseInfo:'Registered to "{{company}}" for {{seats}} users. Valid until {{expiry}}.',labelValidatingCommercialLicense:"Validating...",labelInvalidCommercialLicense:"License invalid: ",buttonRemoveCommercialLicense:"Remove",optionCatalyst:"Catalyst license",optionCatalystDesc:"You currently have the {{tier}} Catalyst license. Thanks for your support!",optionCatalystDescNoLicense:"You don't have a Catalyst license right now. Catalyst license is a one-time donation to support Obsidian development.",labelApp:"App"},account:{name:"Account",optionYourAccount:"Your account",optionYourAccountDesc:"You're currently signed in {{name}} ({{email}}).",optionYourAccountDescNoLogin:"You're not logged in right now. An account is only needed for Obsidian Sync, Obsidian Publish, and Catalyst insider builds.",buttonManageSettings:"Manage settings",labelInsider:"Insider",labelSupporter:"Supporter",labelVip:"VIP",buttonUpgradeCatalyst:"Upgrade",optionCommercialLicense:"Commercial license",optionCommercialLicenseDesc:"If you use Obsidian for commercial purposes, you may need to get a commercial license.",buttonPurchase:"Purchase",buttonLogOut:"Log out",labelLogIn:"Log in",labelSignUp:"Sign up",labelEmail:"Email",placeholderEmail:"Your email...",labelPassword:"Password",placeholderPassword:"Your password...",buttonLogin:"Login",messageEmptyEmail:"Email cannot be empty.",messageInvalidEmail:"Email is not valid.",messageEmptyPassword:"Password cannot be empty.",messageLoginFailed:"Login failed, please double check your email and password.",labelNoAccount:"Don't have an account? ",linkSignUpNow:"Sign up now"},corePlugin:{pluginList:"Plugin list",optionSearchPlugin:"Search core plugins",optionSearchPluginDescription:"Filter plugins by name or description.",placeholderSearchPlugin:"Search plugins..."},thirdPartyPlugin:{name:"Community plugins",optionRestrictedMode:"Restricted mode",optionRestrictedModeDescription:"Restricted mode is off. Turn on to disable community plugins.",buttonTurnOn:"Turn on",optionBrowseCommunityPlugins:"Community plugins",optionBrowseCommunityPluginsDescription:"Browse and install community plugins made by our amazing community.",buttonBrowse:"Browse",labelExitRestrictedMode:"Exit Restricted Mode",labelExitRestrictedModeDescription_1:"Community plugins, like any other software you install, could potentially cause data integrity and security issues.",labelExitRestrictedModeDescription_2:"Plugin security is important to us. Here's what we do:",labelExitRestrictedModeDescription_3:"Despite our efforts, there is still a small chance that a community plugin might misbehave.",labelCodeReview:"Initial code review",labelCodeReviewDesc:"Plugins undergo an initial code review by our team before they appear in the store.",labelOpenSource:"Open source",labelOpenSourceDesc:"Most plugins are open source on GitHub, so you can inspect the code yourself.",labelPeerAudit:"Peer audit",labelPeerAuditDesc:"We have a large community of developers who watch out for each other.",labelReportMechanism:"Report mechanism",labelReportMechanismDesc:"We follow up and remove faulty plugins upon user report.",labelExitRestrictedModeDisableConfirmation:"Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.",labelLearnMore:"Learn more about plugin security",buttonTurnOnCommunityPlugins:"Turn on community plugins",labelTrustAuthor:"Do you trust the author of this vault?",labelTrustAuthorDescription_1:"You're opening this vault for the first time, and it comes with some plugins.",labelTrustAuthorDescription_2:"If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.",labelTrustAuthorDescription_3:"If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.",buttonEnablePlugins:"Trust author and enable plugins",buttonDontTrustAuthor:"Browse vault in Restricted Mode",placeholderCommunityPlugins:"Search community plugins...",msgFailedLoadPlugins:"Failed to load community plugins.",labelInstalled:"Installed",buttonInstall:"Install",buttonEnable:"Enable",buttonDisable:"Disable",buttonCopyShareLink:"Copy share link",buttonDonate:"Donate",labelNoResultsFound:"No results found.",labelNoRecentFilesFound:"No recent files found. Type to search...",msgFailedToLoadManifest:"Failed to load plugin manifest.",labelVersion:"Version: {{version}}",labelCurrentlyInstalledVersion:" (currently installed: {{version}})",labelByAuthor:"By ",labelRepository:"Repository: ",labelLastUpdate:"Last update: ",tooltipViewLastUpdate:"View the latest update",labelUnsupported:"This plugin does not support your device.",buttonUpdate:"Update",labelNoReadme:"This plugin did not provide a README file.",msgInstallingPlugin:'Installing plugin "{{name}}"...',msgFailedToInstallPlugin:'Failed to install plugin "{{name}}".',msgSuccessfullyInstalledPlugin:'Successfully installed plugin "{{name}}".',labelInstalledPlugins:"Installed plugins",buttonReloadPlugins:"Reload plugins",msgReloadedThirdPartyPlugins:"Reloaded third-party plugins.",labelUninstall:"Uninstall",labelUninstallPlugin:"Uninstall plugin",labelUninstallPluginConfirmation:"Are you sure you want to uninstall this plugin? This will delete the folder of the plugin.",buttonOpenPluginsFolder:"Open plugins folder",buttonCheckForUpdates:"Check for updates",buttonUpdateAllPlugins:"Update all",labelCurrentPlugins:"Current plugins",labelCurrentlyInstalled:"You currently have {{count}} plugin installed.",labelCurrentlyInstalled_plural:"You currently have {{count}} plugins installed.",labelDebugStartupTime:"Debug startup time",labelDebugStartupTimeDescription:"Show a message with how long each plugin took to initialize when starting the app.",msgNoUpdatesFound:"No plugin updates found.",msgUpdatesFound:"Found {{count}} plugin to update.",msgUpdatesFound_plural:"Found {{count}} plugins to update.",msgUpdatePlugin:"Update to version {{version}}",optionSearchInstalledPlugin:"Search installed plugins",optionSearchInstalledPluginDescription:"Filter installed plugins by name or description.",placeholderSearchInstalledPlugin:"Search installed plugins...",showInstalledOnly:"Show installed only",labelDonateModalTitle:"Donate to support {{name}}",labelDonateModalText1:"Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.",labelDonateModalText2:"100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.",labelDonateModalText3:"Thanks for your generous support!",labelSupportThisPlugin:"Support this plugin:",labelSearchSummary:"Showing {{pluginCount}}:",labelByPopularity:"Most downloaded",labelByReleased:"Recently released",labelByUpdated:"Recently updated",labelAlphabetical:"Alphabetical",labelLastUpdated:"Updated {{time}}"},mobileToolbar:{name:"Mobile",optionConfigureQuickAction:"Configure mobile Quick Action",optionConfigureQuickActionDescription:'Configure which command to trigger when pull down from the top. The current command is set to "{{command}}".',buttonConfigure:"Configure",placeholderSelectQuickAction:"Select Quick Action...",manageToolbarOptions:"Manage toolbar options",optionInternalLink:"Add internal link",optionInternalEmbed:"Add embed",optionTag:"Add tag",optionHeading:"Toggle heading",optionStrikethrough:"Toggle strikethrough",optionHighlight:"Toggle highlight",optionCode:"Toggle code",optionBlockquote:"Toggle blockquote",optionMarkdownLink:"Add Markdown link",optionBulletList:"Toggle bullet list",optionNumberedList:"Toggle numbered list",optionIndentList:"Indent list item",optionUnindentList:"Unindent list item",optionUndo:"Undo",optionRedo:"Redo",optionMoveCaretUp:"Move caret up",optionMoveCaretDown:"Move caret down",optionMoveCaretLeft:"Move caret left",optionMoveCaretRight:"Move caret right",optionFirstLine:"Go to first line",optionLastLine:"Go to last line",optionToggleKeyboard:"Toggle keyboard",optionConfigureToolbar:"Configure mobile toolbar",optionAddedOptions:"Added options",optionMoreToolbarOptions:"More toolbar options",optionAttach:"Insert attachment",optionAddCommand:"Add global command",optionAddCommandDescription:"Select any global command to add to the toolbar."}},editor:{search:{placeholderFind:"Find",placeholderReplace:"Replace",labelPrevious:"Prev",labelNext:"Next",labelAll:"All",labelExitSearch:"Exit search",labelReplace:"Replace",labelReplaceAll:"Replace all"},linkSuggestion:{labelTypeHash:"Type #",labelLinkHeading:"to link heading",labelTypeBlock:"Type ^",labelLinkBlock:"to link blocks",labelTypePipe:"Type |",labelChangeDisplayText:"to change display text",labelNoMatchFound:"No match found"},spellcheck:{noSuggestion:"No suggestions...",addToDictionary:"Add to dictionary"},menu:{editLink:"Edit link"},headingSuggestion:{labelNoHeading:"No heading",labelHeadingLevel:"Heading {{level}}"},printModal:{title:"Export to PDF",caption:'Export "{{filename}}" to PDF with the settings below.',settingPageSize:"Page size",settingPageSizeA3:"A3",settingPageSizeA4:"A4",settingPageSizeA5:"A5",settingPageSizeLegal:"Legal",settingPageSizeLetter:"Letter",settingPageSizeTabloid:"Tabloid",settingIncludeFileName:"Include file name as title",settingLandscape:"Landscape",settingMargin:"Margin",settingMarginDefault:"Default",settingMarginMinimal:"Minimal",settingMarginNone:"None",settingDownscalePercent:"Downscale percent",buttonExportToPdf:"Export to PDF"},linkPopover:{tooltipFollowLink:"Follow link",tooltipOpenLink:"Open link",tooltipSearchTag:"Search tag"}},interface:{embedCannotFind:"Cannot find:",embedOpenInDefaultAppTooltip:"Open in default app",emptySidebar:"The sidebar is empty, try dragging a tab here.",sidebarExpand:"Expand",sidebarCollapse:"Collapse",msgFailToSaveFile:'Failed to save file "{{filepath}}". {{message}}. Make a backup of the contents of this file now to avoid losing data.',noFile:"No file",msgFileChanged:'"{{file}}" has been modified externally, merging changes automatically.',switchVault:"Open another vault",help:"Help",settings:"Settings",dragToRearrange:"Drag to rearrange",msgSwitchedToRead:"Switched default view mode to reading view.",msgSwitchedToEdit:"Switched default view mode to editing view.",msgUpgradeInstaller:"To use this feature, please re-install with latest installer available from our website.",tooltipRestoreDefaultSettings:"Restore default settings",labelCopy:"Copy to clipboard",copied_generic:"Copied to your clipboard",copied:"{{item}} copied to your clipboard",url:"URL",msgOpenFileThroughUri:'Opened file "{{path}}"',msgFileNotFoundThroughUri:'File "{{name}}" not found.',deleteActionShortName:"Delete",msgIndexing:"Obsidian is indexing your vault...\nThis should only happen once.\nSome functionality may not be available until this is complete.",msgIndexingComplete:"Indexing complete.",msgSandboxVault:"This is a sandbox vault.\nChanges you make in this vault will be lost.",labelEnterToCreate:"Enter to create",labelUpdateAvailable:"Update Available",labelDebugInfo:"Debug info",buttonLearnMore:"Learn more",buttonNotNow:"Not now",buttonAdd:"Add",buttonManage:"Manage",labelNewTab:"New tab",msgTabBusy:"This tab is currently busy, please try again later",emptyState:{noFileOpen:"No file is open",createNewFile:"Create new file",goToFile:"Go to file",seeRecentFiles:"See recent files",close:"Close",unknownPaneTitle:"Plugin no longer active",unknownPaneDesc:"The plugin that created this view ({{type}}) has gone away"},menu:{editView:"Current view: editing",readView:"Current view: reading",switchToEditView:"Click to edit",switchToReadView:"Click to read",modClickOpenNewTab:"{{key}}+Click to open in new tab",find:"Find...",replace:"Replace...",edit:"Edit",preview:"Preview",moreOptions:"More options",close:"Close",closeOthers:"Close others",closeRight:"Close tabs to the right",pin:"Pin",unpin:"Unpin",unlinkTab:"Unlink tab",linkTab:"Link with tab...",toggleSourceMode:"Source mode",toggleReadingView:"Reading view",deleteFile:"Delete file",createFile:"Create this file",openLink:"Open link",openInNewTab:"Open in new tab",openToTheRight:"Open to the right",copyUrl:"Copy URL",closeCurrentTab:"Close current tab",copy:"Copy",cut:"Cut",paste:"Paste",pasteAsPlainText:"Paste as plain text",selectAll:"Select all",renameHeading:"Rename this heading...",renameBlockid:"Rename this block ID...",openInNewWindow:"Open in new window",moveToNewWindow:"Move to new window",openInBrowser:"Open in browser",stackTabs:"Stack tabs",unstackTabs:"Unstack tabs",openLinkedView:"Open linked view"},tooltip:{clickToExpand:"Click to expand",clickToCollapse:"Click to collapse",alias:"Alias",notCreatedYet:"Not created yet, select to create"},startScreen:{labelVersion:"Version",labelCreateLocalVault:"Create local vault",optionOpenFolderAsVault:"Open folder as vault",optionOpenFolderAsVaultDescription:"Choose an existing folder of Markdown files.",optionCreateVault:"Create new vault",optionCreateVaultDescription:"Create a new Obsidian vault under a folder.",optionConnectObsidianSync:"Open vault from Obsidian Sync",optionConnectObsidianSyncDescription:"Set up a synced vault with existing remote vault.",optionNewVaultName:"Vault name",optionNewVaultNameDescription:"Pick a name for your awesome vault.",optionNewVaultLocation:"Location",optionNewVaultLocationDescription:"Pick a place to put your new vault.",labelNewVaultLocationPreview:"Your new vault will be placed in: ",optionRevealVaultInExplorer:"Reveal vault in system explorer",optionRevealVaultInExplorerMac:"Reveal vault in Finder",optionRenameVault:"Rename vault...",msgErrorRenameExists:"There is already a vault with this name.",msgErrorNested:"Cannot move vault into a subfolder of itself.",msgErrorRenameOpen:"Can't rename a currently open vault.",msgRenameFailed:"Failed to rename vault.",msgRenameSuccess:"Successfully renamed vault.",optionMoveVault:"Move vault...",msgMoveSelectDest:"Select destination folder",msgErrorMoveExists:"There is already a vault at the destination.",msgErrorMoveOpen:"Can't move a currently open vault.",msgMoveFailed:"Failed to move vault.",msgMoveSuccess:"Successfully moved vault.",optionRemove:"Remove from list",buttonQuickStart:"Quick start",buttonOpen:"Open",buttonBrowse:"Browse",buttonConnect:"Connect",buttonCreateVault:"Create",buttonBack:"Back",msgEmptyVaultName:"Vault name cannot be empty.",msgInvalidFolder:"Please pick a valid folder.",msgFailedToCreateVault:"Failed to create vault.",msgFailedToCreateVaultAtLocation:"Could not create vault at the given location. Please double check the location and permission.",msgErrorFailedToOpenVault:"Failed to open.",msgErrorRemoveCurrentOpenVault:"Can't remove a currently open vault.",optionGetHelp:"Get Help",optionUserEmail:"Email",placeholderYourEmail:"Your email...",optionUserPassword:"Password",placeholderYourPassword:"Your password...",buttonSignIn:"Sign in",buttonSetup:"Setup",optionConnectVaultDesc:"Create a synced vault on this device.",tooltipOwnVault:"This is a remote vault owned by you.",tooltipSharedVault:"This is a remote vault shared with you."},dragAndDrop:{insertLinkHere:"Insert link here",insertLinksHere:"Insert links here",moveIntoFolder:'Move into "{{folder}}"',starThisFile:"Star this file",starTheseFiles:"Star these files",openInThisTab:"Open in this tab",openAsTab:"Open as new tab"},window:{maximize:"Maximize",minimize:"Minimize",restoreDown:"Restore down",closeWindow:"Close window",goBack:"Go back",goForward:"Go forward"},startUp:{loadingObsidian:"Loading Obsidian...",obsidianLoadError:"An error occurred while loading Obsidian.",buttonReloadApp:"Reload app",buttonReloadAppInSafeMode:"Reload app in Restricted Mode",buttonOpenAnotherVault:"Open another vault",loadingComponents:"Loading components...",loadingPlugins:"Loading plugins...",loadingVault:"Loading vault...",msgFailedToLoadVault:"Failed to load vault: ",loadingCache:"Loading cache...",loadingWorkspace:"Loading workspace..."},mobile:{actionImport:"Import into vault",actionChooseFileToInsert:"Choose a file to insert",actionInsertTextIntoFile:"Insert text into {{filename}}",actionInsertLinkIntoFile:"Insert link into {{filename}}",msgImporting:"Importing...",msgImportSuccess:"Import success",msgFailedToImportFile:"Failed to import file {{filename}}",msgBackAgainToExit:"Press back again to exit."},helpScreen:{labelOfficialHelpSite:"Official help site",labelOfficialHelpSiteDesc:"Read the official help documentation of Obsidian, available in multiple languages.",actionVisit:"Visit",labelDiscordChat:"Discord chat",labelDiscordChatDesc:"Discord is the best place to chat with other experienced Obsidian users from around the world.",actionJoin:"Join",labelForum:"Official forum",labelForumDesc:"Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.",labelSandboxVault:"Sandbox vault",labelSandboxVaultDesc:"Play around and experiment with various features. Please note your changes will not be saved."}},commands:{saveFile:"Save current file",followCursorLink:"Follow link under cursor",openCursorLinkInNewTab:"Open link under cursor in new tab",openCursorLinkToTheRight:"Open link under cursor to the right",openCursorLinkInNewWindow:"Open link under cursor in new window",navigateTabAbove:"Focus on tab group above",navigateTabBelow:"Focus on tab group below",navigateTabLeft:"Focus on tab group to the left",navigateTabRight:"Focus on tab group to the right",togglePin:"Toggle pin",splitRight:"Split right",splitDown:"Split down",toggleStackedTabs:"Toggle stacked tabs",navigateBack:"Navigate back",navigateForward:"Navigate forward",useDarkMode:"Use dark mode",useLightMode:"Use light mode",changeTheme:"Change theme",searchCurrentFile:"Search current file",searchReplaceCurrentFile:"Search & replace in current file",openSettings:"Open settings",openHelp:"Open help",toggleEdit:"Toggle editing/reading view",toggleSourceMode:"Toggle Live Preview/Source mode",deleteCurrentFile:"Delete current file",newTab:"New tab",closeAllTabs:"Close all tabs",closeActiveTab:"Close current tab",closeOtherTabs:"Close all other tabs",toggleLeftSidebar:"Toggle left sidebar",toggleRightSidebar:"Toggle right sidebar",toggleDefaultNewTabMode:"Toggle default mode for new tabs",focusEditor:"Focus on last note",toggleFold:"Toggle fold on the current line",foldAll:"Fold all headings and lists",unfoldAll:"Unfold all headings and lists",foldMore:"Fold more",foldLess:"Fold less",swapLineUp:"Move line up",swapLineDown:"Move line down",removeHeading:"Remove heading",toggleHeading:"Set as heading {{level}}",toggleBold:"Toggle bold",toggleItalics:"Toggle italics",toggleHighlight:"Toggle highlight",toggleComments:"Toggle comment",insertLink:"Insert Markdown link",toggleSpellcheck:"Toggle spellcheck",deleteParagraph:"Delete paragraph",toggleChecklist:"Toggle checkbox status",cycleListChecklist:"Cycle bullet/checkbox",insertCallout:"Insert callout",editFileTitle:"Rename file",copyPath:"Copy file path",copyUrl:"Copy Obsidian URL",exportPdf:"Export to PDF",reload:"Reload app without saving",undoCloseTab:"Undo close tab",contextMenu:"Show context menu under cursor",showDebugInfo:"Show debug info",alwaysOnTop:"Toggle window always on top",zoomIn:"Zoom in",zoomOut:"Zoom out",resetZoom:"Reset zoom",togglePreview:"Toggle reading view",moveToNewWindow:"Move current tab to new window",openInNewWindow:"Open current tab in new window",renameCurrentFile:"Rename current file"},dialogue:{labelLinkAffected:"This will affect {{links}} in {{files}}.",msgUpdatedLinks:"Updated {{links}} in {{files}}.",labelUpdateLinks:"Update links",labelConfirmUpdateLinkToFile:"Do you want to update internal links that link to this file?",buttonAlwaysUpdate:"Always update",buttonJustOnce:"Just once",buttonDoNotUpdate:"Do not update",labelConfirmDeletion:'Are you sure you want to delete "{{filename}}"?',labelMoveToSystemTrash:"It will be moved to your system trash.",labelMoveToVaultTrash:'It will be moved to your Obsidian trash, which is located in the ".trash" hidden folder in your vault.',labelPermanentDelete:"The file will be permanent deleted.",labelNonEmptyFolder:"This folder is not empty.",labelDeleteFolderWarning:"If you continue, all files inside this folder will be deleted.",labelDeleteFolder:"Delete folder",buttonDelete:"Delete",buttonDeleteDoNotAskAgain:"Delete and don't ask again",labelDoNotAskAgain:"Don't ask again",labelExistingBacklink:"There is currently {{links}} pointing to this note.",labelExistingBacklink_plural:"There are currently {{links}} pointing to this note.",labelDeleteFile:"Delete file",buttonManage:"Manage",buttonCancel:"Cancel",buttonDone:"Done",buttonSave:"Save",buttonStop:"Stop",buttonContinue:"Continue",preparingPdf:"Preparing PDF...",labelRenameFile:"Note title",labelRenameFileGeneric:"File name",labelNewName:"New name",msgRenameSuccess:"Successfully renamed file.",labelRenameHeading:"Rename heading",labelRenameBlockid:"Rename block ID"},menuItems:{newFile:"New Note",newFileToTheRight:"New Note to the Right",newWindow:"New Window",openSwitcher:"Open Quickly...",openVault:"Open Vault...",closeTab:"Close Tab",closeWindow:"Close Window",find:"Find",replace:"Replace",insertCallout:"Callout",insertMarkdownLink:"Markdown Link",insertWikilink:"Link",setHeading:"Heading {{level}}",noHeading:"No Heading",insertQuote:"Quote",exportPdf:"Export To PDF...",toggleBulletList:"Bullet List",toggleNumberedList:"Numbered List",toggleChecklist:"Task List",toggleBold:"Bold",toggleCode:"Code",toggleComment:"Comment",toggleItalics:"Italics",toggleHighlight:"Highlight",toggleStrikethrough:"Strikethrough",toggleComments:"Comment",foldAll:"Fold All",unfoldAll:"Unfold All",foldMore:"Fold More",foldLess:"Fold Less",sourceMode:"Source Mode",readingView:"Reading View",showDebugInfo:"Show Debug Info",navigateBack:"Navigate Back",navigateForward:"Navigate Forward",toggleLeftSidebar:"Toggle Left Sidebar",toggleRightSidebar:"Toggle Right Sidebar",splitRight:"Split Right",splitDown:"Split Down",releaseNotes:"Release Notes"},plugins:{name:"Plugins",fileExplorer:{name:"Files",desc:"See the files and folders in your vault.",actionOpen:"Open file explorer",actionShow:"Show file explorer",actionCreateNote:"Create new note",actionCreateNoteToTheRight:"Create note to the right",actionCollapseAll:"Collapse all",actionExpandAll:"Expand all",actionNewNote:"New note",actionNewFolder:"New folder",actionChangeSort:"Change sort order",actionRevealFile:"Reveal file in navigation",actionRevealActiveFile:"Reveal current file in navigation",commandMoveFile:"Move current file to another folder",actionMoveFile:"Move file to...",actionMoveFolder:"Move folder to...",actionMoveItems:"Move {{count}} items to...",promptTypeFolder:"Type a folder",labelNoFolders:"No folders found.",instructionNavigate:"to navigate",instructionMove:"to move",instructionDismiss:"to dismiss",labelSortAToZ:"File name (A to Z)",labelSortZToA:"File name (Z to A)",labelSortNewToOld:"Modified time (new to old)",labelSortOldToNew:"Modified time (old to new)",labelSortCreatedOldToNew:"Created time (old to new)",labelSortCreatedNewToOld:"Created time (new to old)",menuOptNewNote:"New note",menuOptNewFolder:"New folder",menuOptSetAttachmentFolder:"Set as attachment folder",menuOptRename:"Rename",menuOptDelete:"Delete",menuOptMakeCopy:"Make a copy",msgInvalidCharacters:"File name cannot contain any of these characters: ",msgUnsafeCharacters:"Links will not work with file names containing any of these characters: ",msgFileAlreadyExists:"There's already a file with the same name",msgEmptyFileName:"File name cannot be empty.",msgBadDotfile:"File name must not start with a dot.",tooltipModifiedTime:"Last modified at {{time}}",tooltipCreatedTime:"Created at {{time}}",tooltipFoldersFilesCount:"{{fileCount}}, {{folderCount}}",actionMoveFileShortName:"Move",labelUntitledFile:"Untitled",labelUntitledFolder:"Untitled",msgSetAttachmentFolder:'Attachments will be saved to "{{path}}" from now on.'},search:{name:"Search",desc:"Search for a keyword in all the notes.",actionOpenSearch:"Search in all files",labelCollapseResults:"Collapse results",labelMatchCase:"Match case",labelExplainSearchTerm:"Explain search term",labelMoreContext:"Show more context",promptStartSearch:"Type to start search...",labelMatchText:"Matches text: ",labelMatchRegex:"Matches regex: ",labelMatchExactText:"Contains exact text: ",labelMatchAll:"Match all of: ",labelMatchAny:"Match any of: ",labelExcluding:"Excluding: ",labelCaseSensitive:"Case sensitive",labelCaseInsensitive:"Case insensitive",labelMatchFilePath:"Match file path: ",labelMatchFileName:"Match file name: ",labelMatchContent:"Match file content: ",labelMatchTask:"Match task: ",labelMatchTaskTodo:"Match task (todo): ",labelMatchTaskDone:"Match task (done): ",labelMatchLine:"Match line: ",labelMatchBlock:"Match block: ",labelMatchSection:"Match section: ",labelMatchTag:"Match tag: ",labelNoMatches:"No matches found.",matchesWithCount:"... and {{count}} more match.",matchesWithCount_plural:"... and {{count}} more matches.",labelCopySearchResults:"Copy search results",buttonCopyResults:"Copy results",msgSuccessfullyCopied:"Results copied to your clipboard.",optionShowPath:"Show path",optionShowPathDescription:"Display full path of the file rather than just the file name.",optionLinkStyle:"Link style",optionLinkStyleDescription:"Optionally turn each file result in to a link.",optionChoiceLinkStyleNone:"None",optionChoiceLinkStyleWikilink:"Wikilink",optionChoiceLinkStyleMarkdownLink:"Markdown link",optionListPrefix:"List prefix",optionListPrefixDescription:"Optionally add a list item prefix to each file result.",optionChoiceListStyleNone:"None",optionChoiceListStyleDash:"Dash (-)",optionChoiceListStyleAsterisk:"Asterisk (*)",optionChoiceListStyleNumbered:"Numbered",tooltipClearSearch:"Clear search",labelSearchOptions:"Search options",tooltipReadMore:"Read more",labelHistory:"History",tooltipClearHistory:"Clear search history",labelPathOptionDescription:"match path of the file",labelFileNameOptionDescription:"match file name",labelTagOptionDescription:"search for tags",labelLineOptionDescription:"search keywords on same line",labelSectionOptionDescription:"search keywords under same heading",menuOptSearchFor:'Search for "{{keyword}}"'},quickSwitcher:{name:"Quick switcher",desc:"Use Ctrl/Cmd+O to jump to other files with your keyboard.",shortName:"Switcher",actionOpen:"Open quick switcher",instructionNavigate:"to navigate",instructionOpen:"to open",instructionOpenInNewTab:"to open in new tab",instructionOpenToTheRight:"to open to the right",instructionCreate:"to create",instructionDismiss:"to dismiss",instructionSelect:"to select",labelNoNoteCreateNew:"No notes found. Enter to create a new one.",promptTypeFileName:"Find or create a note...",labelEnterToCreate:"Enter to create",tooltipNotCreatedYet:"Not created yet, select to create",optionShowExistingOnly:"Show existing only",optionShowExistingOnlyDescription:"Only show results from existing files. Links to files that are not yet created will be hidden.",optionShowAttachments:"Show attachments",optionShowAttachmentsDesc:"Show attachment files like images, videos, and PDFs.",optionShowAllFileTypes:"Show all file types",optionShowAllFileTypesDesc:"Show all files including ones that Obsidian can't open. The file will be opened with the default app for that file type."},graphView:{name:"Graph view",desc:"View a graph that displays links between your notes.",actionOpen:"Open graph view",actionOpenLocal:"Open local graph",actionCopyScreenshot:"Copy screenshot",tabTitle:"Graph of {{displayText}}",labelFilters:"Filters",promptFilterNodes:"Search files...",optionDepth:"Depth",optionDepthDescription:"Show nodes this number of links away",optionNeighborLinks:"Neighbor links",optionNeighborLinksDescription:"Show links between neighbors",optionForelinks:"Outgoing links",optionForelinksDescription:"Show links to other files",optionBacklinks:"Incoming links",optionBacklinksDescription:"Show links from other files",optionShowTags:"Tags",optionShowTagsDescription:"Tags are linked to the files that contain them",optionShowAttachments:"Attachments",optionShowAttachmentsDescription:"Show attachments",optionShowExistingFilesOnly:"Existing files only",optionShowExistingFilesOnlyDescription:"When enabled, links to nonexistent files are not shown",optionShowOrphans:"Orphans",optionShowOrphansDescription:"Show files that are not linked to any other file",labelDisplay:"Display",optionShowArrows:"Arrows",optionShowArrowsDescription:"Show arrows when zoomed in",optionTextFade:"Text fade threshold",optionNodeSize:"Node size",optionLinkThickness:"Link thickness",labelForces:"Forces",optionCenterForce:"Center force",optionLinkForce:"Link force",optionLinkDistance:"Link distance",optionRepelForce:"Repel force",tooltipOpenGraphSettings:"Open graph settings",msgScreenshotCopied:"Screenshot copied to the clipboard.",labelGroups:"Groups",placeholderEnterQuery:"Enter query...",tooltipDeleteGraph:"Delete group",buttonNewGroup:"New group",tooltipClickToChangeDragToReorder:"Click to change color\nDrag to reorder groups",actionTimelapse:"Start graph timelapse animation",tooltipStartTimelapseAnimation:"Start timelapse animation",buttonAnimateTimelapse:"Animate"},backlinks:{name:"Backlinks",desc:"Show links from other files to this file. Backlinks can be shown in a separate view or optionally in the document itself.",actionOpen:"Open backlinks",actionShow:"Show backlinks",actionOpenForCurrent:"Open backlinks for the current note",actionToggleBacklinksInDocument:"Toggle backlinks in document",menuOptBacklinksInDocument:"Backlinks in document",labelLinkedMentions:"Linked mentions",labelNoBacklinks:"No backlinks found.",labelUnlinkedMentions:"Unlinked mentions",labelShowSearch:"Show search filter",labelLinkButtonText:"Link",tabTitle:"Backlinks for {{displayText}}",labelNoUnlinkedMentions:"No unlinked mentions found.",ellipsis:"...",optionBacklinkInDocument:"Backlink in document",optionBacklinkInDocumentDesc:"Show backlinks in document by default when opening new tabs."},outgoingLinks:{name:"Outgoing Links",desc:"Show outgoing links and detect unlinked mentions of other notes in the current note.",actionOpen:"Open outgoing links",actionShow:"Show outgoing links",actionOpenForCurrent:"Open outgoing links for the current file",tabTitle:"Outgoing links from {{displayText}}",labelLinks:"Links",labelNoLinks:"No links found.",labelUnlinkedMentions:"Unlinked mentions",tooltipLinkFile:"Link this file",tooltipNotCreated:"Not created yet"},tagPane:{name:"Tags",desc:"Display your tags and their number of occurrences.",actionShow:"Show tags",labelNoTags:"No tags found.",labelSortByNameAToZ:"Tag name (A to Z)",labelSortByNameZToA:"Tag name (Z to A)",labelSortByFrequencyHighToLow:"Frequency (high to low)",labelSortByFrequencyLowToHigh:"Frequency (low to high)",actionShowNestedTags:"Show nested tags",actionCollapseAll:"Collapse all",actionExpandAll:"Expand all"},pagePreview:{name:"Page preview",desc:"Hover an internal link to preview its content. In editor mode, press Ctrl/Cmd while hovering.",labelEmptyNote:'"{{linktext}}" is not created yet. Click to create.',labelSourceEditor:"Editing view",labelSourcePreview:"Reading view",labelSourceSearch:"Search, Backlinks, and Outgoing links",labelRequireMod:"Require {{key}} to trigger page preview on hover"},starred:{name:"Starred",desc:"Star frequently used files and searches.",actionShow:"Show starred notes",actionToggle:"Star/unstar current file",actionToggleSearch:"Star/unstar current search",actionStar:"Star",actionUnstar:"Unstar",menuOptRemove:"Remove",msgSuccessfullyStarred:'Successfully starred {{type}} "{{title}}".',msgRemovedStarred:'Removed starred {{type}} "{{title}}".',msgCannotFindPath:'Cannot find file at "{{path}}".'},customCss:{name:"Custom CSS",desc:"Read and apply “obsidian.css” in the vault folder.",settingCommunityThemes:"Community themes",msgFetchingThemes:"Fetching community theme data...",promptFilter:"Filter...",labelDarkThemeOnly:"Dark themes only",labelLightThemeOnly:"Light themes only",labelUse:"Use this theme",labelStopUse:"Stop using this theme",labelInstallAndUse:"Install and use",labelUpdate:"Update",labelNoReadme:"This theme did not provide a README file.",tooltipRemoveTheme:"Remove theme",labelVisitOnGithub:"Visit on GitHub",msgLoadError:"Could not load community themes, please check your network.",msgNowUsingTheme:"You're now using {{title}} as your CSS theme.",msgDeletedTheme:"The theme {{title}} has been deleted.",msgUpdatedTheme:"The theme {{title}} has been updated.",labelInstalled:"Installed",labelLegacy:"Legacy",buttonUpdateAllThemes:"Update all",msgFailedLoadThemes:"Failed to load community themes.",msgNoUpdatesFound:"No theme updates found.",msgUpdatesFound:"Found {{count}} theme to update.",msgUpdatesFound_plural:"Found {{count}} themes to update.",msgFailedToInstallTheme:'Failed to install theme "{{name}}".',msgSuccessfullyInstalledTheme:'Successfully installed theme "{{name}}".',msgInstallingTheme:'Installing theme "{{name}}"...',labelSearchSummary:"Showing {{themeCount}}:",labelUpdateAvailable:"Update available"},commandPalette:{name:"Command palette",desc:"Use Cmd/Ctrl+P and begin typing to invoke a command.",actionOpen:"Open command palette",instructionNavigate:"to navigate",instructionUse:"to use",instructionDismiss:"to dismiss",labelNoCommands:"No commands found.",promptTypeCommand:"Select a command...",labelPinnedCommands:"Pinned commands",optionAddNewPin:"New pinned command",optionAddNewPinDescription:"Pinned commands will appear at the top of all commands when no search query is present."},markdownFormatImporter:{name:"Format converter",desc:"Convert Markdown from other apps to Obsidian format.",actionOpen:"Open format converter",optionRoamTagFixer:"Roam Research tag fixer",optionRoamTagFixerDescription:'Converts "#tag" and "#[[tag]]" to "[[tag]]".',optionRoamHighlightFixer:"Roam Research highlight fixer",optionRoamHighlightFixerDescription:'Converts "^^highlight^^" to "==highlight==".',optionRoamTodoConverter:"Roam Research TODO converter",optionRoamTodoConverterDescription:'Converts "{{[[TODO]]}}" to "[ ]".',optionBearHighlightFixer:"Bear highlight fixer",optionBearHighlightFixerDescription:'Converts "::highlight::" to "==highlight==".',zettelkastenLinkFixer:"Zettelkasten link fixer",zettelkastenLinkFixerDescription:'Fixes "[[UID]]" links to full "[[UID File Name]]".',zettelkastenLinkBeautifier:"Zettelkasten link beautifier",zettelkastenLinkBeautifierDescription:'Fixes "[[UID]]" links and also beautify them "[[UID File Name|File Name]]".',msgAllFilesWarning:"Warning: the converter will convert all the files in your vault, not just the current file.",msgOverrideFilesWarning:"Your files will be overwritten. Back up all your files before attempting conversion.",labelStartConversion:"Start conversion",labelStop:"Stop",labelGoBack:"Go back",labelDone:"Done",labelProcessing:"Processing...",labelCancelling:"Cancelling...",labelFinished:"Finished!",labelProcessedFiles:"Processed files",labelModifiedFiles:"Modified files",labelTotalReplacements:"Total replacements"},dailyNotes:{name:"Daily notes",desc:"Create or open today's daily note.",shortName:"Today",actionOpen:"Open today's daily note",actionOpenPrevious:"Open previous daily note",actionOpenNext:"Open next daily note",actionInsertText:"Insert text into daily note",actionInsertLink:"Insert link into daily note",msgFailFormat:'Failed to create daily note. "{{format}}" is not a valid format.',msgFailFolder:'Failed to create daily note. Folder "{{folderOption}}" not found.',msgFailTemplateFile:'Failed to create daily note. Template file "{{template}}" not found.',msgNoPrevious:"There's no daily note before this one.",msgNoNext:"There's no daily note after this one.",optionDateFormat:"Date format",labelReferToSyntax:"For more syntax, refer to ",labelSyntaxLink:"format reference",labelSyntaxLivePreview:"Your current syntax looks like this: ",optionNewFileLocation:"New file location",optionNewFileLocationDescription:"New daily notes will be placed here.",optionTemplate:"Template file location",optionTemplateDescription:"Choose the file to use as a template.",optionOpenOnStart:"Open daily note on startup",optionOpenOnStartDescription:"Open your daily note automatically whenever you open this vault."},uniqueNoteCreator:{name:"Unique note creator",desc:"Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.",shortName:"Unique",actionCreateNote:"Create new unique note",optionNewFileLocation:"New file location",optionNewFileLocationDescription:"The folder path to create the new unique note.",msgFolderNotFound:'Failed to create unique note. Folder "{{folderOption}}" not found.',optionTemplateFile:"Template file location",optionTemplateFileDescription:"The file path to use as template.",optionTemplateFilePlaceholder:"Example: folder1/note",optionIdFormat:"Unique prefix format",msgTemplateFileNotFound:'Failed to create unique note. Template file "{{template}}" not found.',msgFailedToGenerate:'Failed to generate a unique note with the format "{{format}}'},randomNote:{name:"Random note",desc:"Open a random note to rediscover or review.",shortName:"Random",actionOpen:"Open random note"},outline:{name:"Outline",desc:"Display the outline of the current file or linked tab.",actionOpen:"Open outline",actionShow:"Show outline",actionOpenForCurrent:"Open outline of the current file",tabTitle:"Outline of {{displayText}}",labelNoHeadings:"No headings found."},wordCount:{name:"Word count",desc:"Show word count in the status bar."},slides:{name:"Slides",desc:'Present from Markdown. Use "---" to separate slides.',actionStart:"Start presentation"},audioRecorder:{name:"Audio recorder",desc:"Record audio and save as attachment.",actionStart:"Start recording audio",actionStop:"Stop recording audio",actionToggle:"Start/stop recording",msgAccessDenied:"Microphone access was denied, please enable it from the preference pane.",msgPendingGrant:"Please grant microphone permission to start recording.",msgNoMicrophone:"No microphone is connected."},openWithDefaultApp:{name:"Open in default app",desc:"Add a button to open the current file in its default app.",actionOpenFile:"Open in default app",actionOpenFileMobile:"Share",actionShowInFolder:"Show in system explorer",actionShowInFolderMac:"Reveal in Finder"},templates:{name:"Templates",desc:"Insert template content from a folder of template files.",actionInsert:"Insert template",actionInsertCurrentDate:"Insert current date",actionInsertCurrentTime:"Insert current time",optionTemplateFolderLocation:"Template folder location",optionTemplateFolderLocationDescription:"Files in this folder will be available as templates.",optionTemplateDateFormat:"Date format",optionTemplateDateFormatDescription:"{{date}} in the template file will be replaced with this value.",optionTemplateDateFormatDescription2:"You can also use {{date:YYYY-MM-DD}} to override the format once.",optionTemplateTimeFormat:"Time format",optionTemplateTimeFormatDescription:"{{time}} in the template file will be replaced with this value.",optionTemplateTimeFormatDescription2:"You can also use {{time:HH:mm}} to override the format once.",instructionNavigate:"to navigate",instructionInsert:"to insert template",instructionDismiss:"to dismiss",msgNoTemplatesFound:"No templates found",msgFailInvalidFolder:"Failed to list templates. Template folder is invalid.",msgFailFolderNotFound:'Failed to list templates. Folder "{{folderOption}}" not found.',promptTypeTemplate:"Type name of a template..."},translucency:{name:"Translucent window",desc:"Turn on translucency effect to enhance a sense of depth. Best used with dark mode. Not supported on Linux."},slashCommand:{name:"Slash commands",desc:"Enable the ability to trigger slash commands in the editor by typing the forward slash."},editorStatus:{name:"Editor status",desc:"Display and change the current editor mode in the status bar.",read:"Reading",editSource:"Source mode",editLivePreview:"Live Preview"},publish:{name:"Publish",desc:"Publish your notes through Obsidian Publish.",actionPublishChanges:"Publish changes",labelNoInternetAccess:"You need access to the internet to publish changes.",labelPublishServiceDescription:"Obsidian Publish is an add-on paid service that lets you publish your notes online directly from Obsidian.",labelPleaseLogin:"To start publishing, please log in or create a new Obsidian account.",labelNoPublishSubscription:"You do not have an Obsidian Publish subscription yet.",buttonPurchase:"Purchase",labelManageSites:"Manage sites",labelNoSites:"You don't have any sites.",buttonChoose:"Choose",tooltipEditSiteId:"Edit site ID",tooltipDeleteSite:"Delete site",labelDeleteSiteConfirmation:"Are you sure you want to delete this site?",labelDeleteSiteDetails:"This will immediately and permanently delete your site.",labelConfirmDeleteSite:'Confirm delete site "{{site}}"',optionSiteId:"Site ID",optionSiteIdDescription:"Your site will be at https://publish.obsidian.md/{site id}. You can change this later. Only lower case letters, numbers, and dashes are allowed.",optionSiteIdPlaceholder:"Pick a site ID",buttonCreate:"Create",msgInvalidSiteId:"Site ID can only contain lowercase letters, numbers, and dashes.",msgSiteIdInUse:"This site ID is in use, please try another one.",msgCreateSiteIssue:"That was an issue when creating your site.",labelSiteOptions:"Site options",optionSiteGeneral:"General",optionSiteComponents:"Components",optionSiteAppearance:"Appearance",optionSiteReadingExperience:"Reading experience",optionSiteMisc:"Other site settings",optionSiteName:"Site name",optionSiteNameDescription:"Name of your published site. It will show up in the page title of your site.",optionSiteNamePlaceholder:"Name of your site",optionHomePageFile:"Homepage file",optionHomePageFileDescription:"The first page the user sees when landing on your published site",optionHomePageFilePlaceholder:"Pick a published file",optionLogo:"Logo",optionLogoDescription:"Pick an image file as your site logo.",optionLogoPlaceholder:"Any uploaded image in your vault...",optionSiteCollaboration:"Site collaboration",optionSiteCollaborationDesc:"Manage collaborators for this site.",buttonManageCollaborators:"Manage",optionTheme:"Theme",optionThemeDescription:"Choose default color scheme for your site.",optionThemeSystem:"Adapt to system",optionShowThemeToggle:"Light/dark toggle",optionShowThemeToggleDescription:"Let the visitor toggle between light and dark theme on their own.",optionShowNavigation:"Show navigation",optionShowNavigationDescription:"Display a list of all published pages on the left side of your published site.",optionShowSearch:"Show search bar",optionShowSearchDescription:"Display a search bar that lets the visitors search pages, aliases, and headings on your site.",optionShowGraph:"Show graph view",optionShowGraphDescription:"Display a small local graph on each page.",optionShowOutline:"Show table of contents",optionShowOutlineDescription:"Display the outline of headings on each page.",optionShowBacklinks:"Show backlinks",optionShowBacklinksDescription:"Show backlink section at the end of each page.",optionSlidingWindowMode:"Stack pages",optionSlidingWindowModeDescription:"Links will open next to the current page in the same window. Scroll horizontally to see stacked pages.",optionHoverPreviewFile:"Show hover preview",optionHoverPreviewFileDescription:"Display page preview when hovering links.",optionHideTitle:"Hide page title",optionHideTitleDescription:"Hide the page title heading. Useful when you have your own headings at the beginning of each page.",optionReadableLineLength:"Readable line length",optionReadableLineLengthDescription:"Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.",optionSitePassword:"Passwords",optionSitePasswordDescription:"Restrict access to your site with passwords.",optionGoogleAnalytics:"Google Analytics tracking code",optionGoogleAnalyticsDescription:"Configure Google Analytics for your site. Only available for visitors from your custom domain URL. Please check with your local laws and regulations first.",buttonManagePasswords:"Manage",buttonSaveSiteSettings:"Save site settings",msgUpdatedOptions:"Updated options for your site.",buttonGoBack:"Back",labelPublishingTo:"Publishing to",tooltipSwitchSite:"Switch site",buttonAddLinked:"Add linked",tooltipAddLinked:"Add all files that are linked by currently selected items",msgAddedLinkedFiles:"{{count}} linked file has been added.",msgAddedLinkedFiles_plural:"{{count}} linked files have been added.",tooltipOpenSiteOptions:"Change site options",labelNoChangesDetected:"No changes were detected.",labelChangedFilesToBePublished:"Changed",labelUnchangedFilesAlreadyPublished:"Unchanged (select to unpublish)",labelFileSelected:" selected",buttonSelectAllFiles:"Select all",buttonDeselectAllFiles:"Deselect all",labelNewFilesToBePublished:"New",buttonPublish:"Publish",msgNoPermissionToPublishToSite:"You do not have permissions to publish to the current site.",msgSelectAtLeastOneFile:"Please select at least one file.",labelUploadChanges:"Upload changes",buttonDone:"Done",buttonStop:"Stop",labelStatusUploading:"Uploading",labelStatusToPublish:"To publish",labelStatusToDelete:"To delete",labelStatusPublished:"Published",labelStatusDeleted:"Deleted",labelStatusFailed:"Failed",labelStatusCancelled:"Cancelled",buttonChange:"Change",labelClearCache:"It takes up to a few minutes for the changes to show up on your site. If you do not see your latest changes, try clearing the cache in your browser.",labelVisitSite:"You can visit your site here: ",msgSomethingWentWrong:"Something went wrong. Please check the developer console for details.",msgNetworkError:"A network error occurred.",labelManagePasswords:"Manage passwords",labelAddPassword:"Add password",actionNewPassword:"New password",labelNoPassword:"Your site currently does not have any passwords. Anyone can visit it.",labelHavePassword:"Your site is password protected. If you have multiple passwords, visitors can access your site by entering any of them.",optionPasswordName:"Password",optionPasswordDesc:"A hash of your password will be stored securely. Once the password is set, it cannot be revealed in plaintext.",optionPasswordPlaceholder:"Your password",optionNicknameName:"Nickname (optional)",optionNicknameDesc:"Set a nickname to remind yourself what or who the password is for.",actionAddPassword:"Add this password",labelUntitledPassword:"Untitled password",labelPasswordCreatedTime:"Created {{time}}",msgAddedNewPassword:"Added new password.",optionCustomDomain:"Custom domain",optionCustomDomainDesc:"Use your own domain rather than the https://publish.obsidian.md/{site id} URL.",optionNoindex:"Disallow search engine indexing",optionNoindexDesc:"Prevent search engines from indexing your site.",buttonConfigure:"Configure",labelConfigureCustomDomain:"Configure custom domain",optionCustomUrlName:"Custom URL",optionCustomUrlDesc:"The URL that your site will be located at.",optionCustomUrlPlaceholder:"www.yourdomain.com",optionCustomUrlRedirect:"Redirect to your custom domain",optionCustomUrlRedirectDesc:"Redirect visitors on publish.obsidian.md/id to your custom domain.",buttonUpdateCustomDomain:"Update domain setting",labelCustomDomainInstructions:"Please refer to our {{link}} on our help site for more information.",labelCustomDomainLinkName:"custom domain setup guide",labelSiteUsage:"You're using {{site}} out of your {{limit}}.",buttonAddMoreSites:"Add more sites",labelNoSitesBought:"You haven't bought any sites.",buttonGetSite:"Get a site",labelManageSharing:'Manage sharing for "{{name}}"',labelSharingWithUsers:"This site is currently shared with the following people.",labelNotSharing:"This site is not currently shared with anyone.",labelInvitePending:"Pending",tooltipRemoveUser:"Remove user",optionInviteUser:"Invite user",placeholderInviteUser:"Enter their email...",errorEmailMustBeValid:"Please enter a valid email to invite someone.",msgEnablePublishPlugin:"Please enable the Publish core plugin in Settings -> Core plugins to view sites.",labelYourSites:"Your sites",labelSitesSharedWithYou:"Sites shared with you",tooltipLeaveSiteSharing:"Stop collaborating on this site",labelLeaveSiteConfirmation:"Confirm stop site collaboration",labelLeaveSiteConfirmationDetails:"This will remove this site from the list of sites shared with you. This action cannot be reverted.",labelLeaveSiteConfirmationDetails_2:"Please contact the owner of the site if you wish to collaborate on this site again.",buttonLeave:"Leave",labelCompareWithLive:"Compare with live version",buttonUseLiveVersion:"Use live version",labelConfirmOverride:"Confirm overriding local version",labelConfirmOverride_1:"Are you sure you want to override the local version?",labelConfirmOverride_2:"The live version will be used and your local version will be discarded. Please make backups if necessary.",buttonProceed:"Proceed",messageSuccessfullyUsedLiveVersion:"Successfully used live version to override your local version.",labelOpenFile:"Open file",tooltipManagePublishFilters:"Manage publish filters",optionIncludedFolders:"Included folders",optionIncludedFoldersDesc:"Files under these folders will automatically be selected when you review changes to publish.",optionCurrentlyIncludedFolders:" These folders are currently included:",optionExcludedFolders:"Excluded folders",optionExcludedFoldersDesc:"Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.",labelNumberOfFoldersIncluded:"Obsidian Publish is currently including {{folders}}.",labelNumberOfFoldersExcluded:"Obsidian Publish is currently excluding {{folders}}.",labelManageIncludedFolders:"Manage included folders",labelManageExcludedFolders:"Manage excluded folders",labelAddIncludedFolder:"Include a folder",labelAddIncludedFolderDesc:"You can include both existing folders and folders that have not been created yet.",tooltipContactSupport:"Contact support"},workspaces:{name:"Workspaces",desc:"Save and load workspace layouts.",actionLoadLayout:"Load workspace layout",actionManageLayouts:"Manage workspace layouts",actionSaveAndLoadLayout:"Save and load another layout",placeholderSaveCurrentLayoutAs:"Save current workspace layout as...",buttonSave:"Save",buttonLoad:"Load",tooltipDeleteLayout:"Delete layout",msgDeleteLayoutSuccess:"Successfully deleted layout.",msgEnterName:"Please enter a name for the new layout.",msgSaveLayoutSuccess:"Successfully saved layout.",labelNoLayoutFound:"No saved layout found.",placeholderTypeToSearchLayouts:"Type layout name..."},sync:{name:"Sync",desc:"Synchronize your files through Obsidian Sync.",actionViewVersionHistory:"View Sync version history",labelLoadMore:"Load more",labelShowDiff:"Show diff",labelCopyToClipboard:"Copy to clipboard",labelRestoreThisVersion:"Restore this version",msgAlreadyLatestVersion:"This version is already the latest version.",msgRestoredVersion:"Successfully restored version from {{time}}",labelFileDeleted:"This file was deleted",labelNoEarlierVersion:"There was no earlier versions of this file.",labelEmptyFile:"Empty",labelSettingFiles:"Setting files",labelDeletedFiles:"Deleted files",labelVersionHistory:"Version history",labelClickToSeeHistory:"Click on a file to see its history.",labelCreateRemoteVault:"Create remote vault",msgPleaseEnterPassword:"Please enter a password.",msgVaultNameCannotBeEmpty:"Vault name cannot be empty.",msgSuccessfullyCreatedVault:'Successfully create remote vault "{{name}}".',labelRemoteVaultExplanation:"Remote vaults securely synchronize your vault between devices.",optionVaultName:"Vault name",optionVaultNameDesc:"Helps you remember what this vault is for.",optionVaultNamePlaceholder:"My awesome vault",optionUseCustomEncryptionPassword:"Customize end-to-end encryption password",optionUseCustomEncryptionPasswordDesc:"If you turn this off, we will securely manage an encryption key for you.",optionUseCustomEncryptionPasswordDescWarning:"This option cannot be changed later.",optionEncryptionPassword:"Encryption password",optionEncryptionPasswordDesc:"This password cannot be changed later.",optionEncryptionPasswordDescWarning:"If you forget this password, any remote data will remain unusable forever.",optionEncryptionPasswordDesc_2:"This does not affect your local data.",optionEncryptionPasswordPlaceholder:"Your password",labelEnterEncryptionPassword:"Enter encryption password",buttonUnlockVault:"Unlock vault",msgVerifiedPassword:"Successfully verified your password.",labelRemoteVaults:"Your remote vaults",labelVaultCreatedTime:"Created {{time}}",tooltipDeleteRemoteVault:"Delete",tooltipManageSharing:"Manage sharing",labelConfirmDeleteRemoteVault:"Confirm delete vault",labelConfirmDeleteRemoteVaultQuestion:"Are you sure you want to delete this remote vault?",labelConfirmDeleteRemoteVaultResult:"All data on our server, including version history, will be deleted. Your local files will stay intact.",labelConfirmDeleteRemoteVaultWarning:"This action is permanent and irreversible.",msgRemoteVaultDeleted:"{{name}} has been deleted.",buttonConnectToRemoteVault:"Connect",buttonDisconnectFromRemoteVault:"Disconnect",labelNotRemoteVaults:"You don't have any remote vaults.",buttonCreateNewRemoteVault:"Create new vault",labelSyncLog:"Sync log",optionsOnlyShowErrors:"Errors only",optionsOnlyShowErrorsDesc:"Only show errors and hide other log items.",buttonCopySyncLog:"Copy sync log",msgSuccessfullyCopiedSyncLog:"Successfully copied sync log.",buttonRetry:"Retry",buttonPurchaseSubscription:"Purchase",labelThirdPartySyncWarning:"Conflicting file sync service detected",labelThirdPartySyncWarningDesc:"Warning: Your vault seems to be using {{service}} as a third party sync service. If you use Obsidian Sync with this vault, you may run into conflicts, file corruption, or data loss.",labelIcloudDriveWarning:"If you are using iCloud Drive, your Documents and Desktop folders might be synced by iCloud. This could cause conflicts with Obsidian Sync.",optionRemoteVault:"Remote vault",buttonChooseRemoteVault:"Choose",buttonManageRemoteVault:"Manage",optionRemoteVaultDescConnected:'Currently connected to the "{{name}}" remote vault.',optionRemoteVaultDescNotConnected:"Currently not connected to any remote vault.",optionSyncStatus:"Sync status",optionSyncStatusDescPaused:"Obsidian Sync is currently paused.",optionSyncStatusDescRunning:"Obsidian Sync is currently running.",optionDeviceName:"Device name",optionDeviceNameDesc:"This name will be displayed in the sync log. Leave empty to use the default name.",buttonResume:"Resume",buttonPause:"Pause",optionViewDeletedFiles:"Deleted files",optionViewDeletedFilesDesc:"View and restore deleted files.",optionSyncLog:"Sync activity",optionSyncLogDesc:"View recent sync activities for debugging.",buttonView:"View",buttonBulkRestore:"Bulk restore",buttonRestoreSelectedFiles:"Restore selected files",msgRestoring:"Restoring...",msgRestoringComplete:"Restore complete: {{succeeded}} succeeded and {{failed}} failed.",optionOverSize:"Vault size over limit",optionOverSizeDesc:"Your vault is at {{size}} out of {{limit}}.",msgLargestFiles:"View largest files",msgLargestFilesDesc:"These are the remote files that are taking the most space. After deleting attachments, use the purge button to free up remote vault space.",buttonPurgeRemote:"Purge",tooltipPurgeRemote:"Permanently purge deleted attachments from remote vault to save space.",msgPurgeComplete:"Purge complete.",optionPreventSleep:"Prevent device sleep",optionPreventSleepDesc:"Prevents the device from going to sleep when there are still files to be synced.",optionSelectiveSync:"Selective sync",optionExcludedFolders:"Excluded folders",optionExcludedFolderDesc:"Prevent certain folders from being synced.",optionCurrentlyExcludedFolders:" These folders are currently excluded:",buttonManageExcludedFolders:"Manage",optionSyncImage:"Sync images",optionSyncImageDesc:"Sync image files with these extensions: {{extensions}}.",optionSyncAudio:"Sync audio",optionSyncAudioDesc:"Sync audio files with these extensions: {{extensions}}.",optionSyncVideo:"Sync videos",optionSyncVideoDesc:"Sync video files with these extensions: {{extensions}}.",optionSyncPdf:"Sync PDFs",optionSyncPdfDesc:"Sync PDF files.",optionSyncUnsupported:"Sync all other types",optionSyncUnsupportedDesc:"Sync unsupported file types.",optionVaultConfigSync:"Vault configuration sync",optionViewConfigFiles:"Settings version history",optionViewConfigFilesDesc:"View and restore version history of setting files.",optionSyncApp:"Main settings",optionSyncAppDesc:"Enable to sync editor settings, files & links settings, etc.",optionSyncAppearance:"Appearance settings",optionSyncAppearanceDesc:"Sync appearance settings like dark mode, active theme, and enabled snippets.",optionSyncAppearanceData:"Themes and snippets",optionSyncAppearanceDataDesc:"Sync downloaded themes and snippets. Whether they are enabled depends on the previous setting.",optionSyncHotkey:"Hotkeys",optionSyncHotkeyDesc:"Sync custom hotkeys.",optionSyncCorePlugin:"Active core plugin list",optionSyncCorePluginDesc:"Sync which core plugins are enabled.",optionSyncCorePluginData:"Core plugin settings",optionSyncCorePluginDataDesc:"Sync core plugin settings.",optionSyncCommunityPlugin:"Active community plugin list",optionSyncCommunityPluginDesc:"Sync which community plugins are enabled.",optionSyncCommunityPluginData:"Installed community plugins",optionSyncCommunityPluginDataDesc:"Sync installed community plugins (.js, .css, and manifest.json files) and their settings.",labelSyncIntroduction:"Obsidian Sync is Obsidian's add-on sync service with end-to-end encryption and version history.",labelAccountRequired:"To start syncing, please log in or create a new Obsidian account.",buttonSignUp:"Sign up",buttonLogIn:"Log in",labelManageExcludedFolders:"Manage excluded folders",labelNumberOfFoldersExcluded:"Obsidian Sync is currently excluding {{folders}}.",labelAddExcludedFolder:"Exclude a folder",labelAddExcludedFolderDesc:"You can exclude both existing folders and folders that have not been created yet.",tooltipRemoveExcludedFolder:"Remove from excluded list",labelSetupConnection:"Setup connection",labelNowConnectedToVault:'You\'re now connected to "{{name}}".',buttonStartSyncing:"Start syncing",labelConfirmMergeVault:"Confirm Merge Vault",msgVaultHasNotes:"Your local vault already contains some notes.",msgVaultMergeWarning:'If you connect to the remote vault "{{name}}", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.',tooltipUpdateSettingOnAllDevices:"Please update this option and restart app on all the devices where you want it to take effect.",labelSharingWithUsers:"This remote vault is currently shared with the following people.",labelNotSharing:"This remote vault is not currently shared with anyone.",labelVaultsSharedWithYou:"Vaults shared with you",tooltipLeaveVaultSharing:"Stop collaborating on this vault",labelLeaveVaultConfirmation:"Confirm stop vault collaboration",labelLeaveVaultConfirmationDetails:"This will remove this vault from the list of vaults shared with you. This action cannot be reverted.",labelLeaveVaultConfirmationDetails_2:"Please contact the owner of the vault if you wish to collaborate on this vault again.",buttonLeave:"Leave",labelRequireSubscriptionToConnect:"You need an Obsidian Sync subscription to connect to this vault.",optionContactSupport:"Contact support",optionContactSupportDesc:"If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.",buttonEmailSupport:"Email support"},fileRecovery:{name:"File recovery",desc:"Let you restore recent snapshots to recover from accidental data loss. Snapshots are only saved for Markdown files.",actionOpen:"Open saved snapshots",optionInterval:"Snapshot interval",optionIntervalDescription:"Minimal interval in minutes between two snapshots.",optionKeep:"History length",optionKeepDescription:"Length in days snapshots is kept for.",optionOpenHistory:"Snapshots",optionOpenHistoryDescription:"View and restore saved snapshots.",buttonViewSnapshots:"View",optionClear:"Clear history",optionClearDescription:"Wipe all snapshots.",buttonClearHistory:"Clear",labelClearWarning:"Are you sure you want to delete all snapshots? Note that only snapshots will be removed. All files inside your vault will not be affected.",msgClearComplete:"Snapshots cleared.",labelNoHistoryFound:"No snapshots found.",placeholderChooseFile:"Choose a file...",labelSelectFile:"Please select a file on the left to view snapshots."},noteComposer:{name:"Note composer",desc:"Merge, split, and refactor notes.",optionConfirmFileMerge:"Confirm file merge",optionConfirmFileMergeDescription:"Prompt before merge two files.",optionSplitReplacementText:"Text after extraction",optionSplitReplacementTextDescription:"What to show in place of the selected text after extracting it.",optionChoiceSplitReplacementTextLink:"Link to new file",optionChoiceSplitReplacementTextEmbed:"Embed new file",optionChoiceSplitReplacementTextNone:"None",optionTemplateFile:"Template file location",optionTemplateFileDescription:"Template file to use when merging or extracting. Available variables: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.",commandMergeFile:"Merge current file with another file...",actionMergeFile:"Merge entire file with...",labelNoFiles:"No files found.",instructionNavigate:"to navigate",instructionMerge:"to merge",instructionCreateNew:"to create new",instructionMergeAtTop:"to merge at top",instructionDismiss:"to dismiss",promptSelectFileToMerge:"Select file to merge into...",labelMergeFile:"Merge file",labelConfirmFileMerge:'Are you sure you want to merge "{{file}}" into "{{destination}}"? "{{file}}" will be deleted.',buttonMerge:"Merge",buttonMergeDoNotAskAgain:"Merge and don't ask again",commandSplitFile:"Extract current selection...",commandExtractHeading:"Extract this heading...",instructionAppend:"to move to bottom",instructionPrepend:"to move to top",msgFailToFetchTemplate:'Failed to fetch template file: "{{template}}" not found.',msgFailToFindHeading:"Failed to find heading"},canvas:{name:"Canvas",desc:"Arrange and connect notes on an infinite canvas.",actionAddNote:"Add note from vault",actionAddMedia:"Add media from vault",actionAddCard:"Add card",actionAddWebsite:"Add web page",actionCreateGroup:"Create group",actionCreateWithSize:"Create a card with specific size",actionConvertToFile:"Convert to file...",actionDragToAddNote:"Drag to add note from vault",actionDragToAddMedia:"Drag to add media from vault",actionDragToAddCard:"Drag to add card",actionEditLabel:"Edit label",actionRemoveLabel:"Remove label",actionSearchFile:"Search for file",actionSetColor:"Set color",actionAlign:"Align",actionAlignLeft:"Align left",actionAlignCenter:"Align center",actionAlignRight:"Align right",actionAlignTop:"Align top",actionAlignMiddle:"Align middle",actionAlignBottom:"Align bottom",actionDistributeHorizontalSpacing:"Distribute horizontal spacing",actionDistributeVerticalSpacing:"Distribute vertical spacing",actionJustifyHorizontally:"Justify horizontally",actionJustifyVertically:"Justify vertically",actionArrangeHorizontally:"Arrange in a row",actionArrangeVertically:"Arrange in a column",actionArrangeGrid:"Arrange in a grid",actionExportPng:"Export as image",actionJumpToGroup:"Jump to group",actionSetBackground:"Set background",actionEditBackground:"Edit background",actionReplaceBackground:"Replace background",actionRemoveBackground:"Remove background",labelNoImages:"No images found.",labelExportPngDesc:'Export "{{title}}" as a PNG file with the settings below.',labelExportPngDimensions:"Estimated image dimensions: {{dimensions}}",labelDistribute:"Distribute",labelJustify:"Justify",labelArrange:"Arrange",labelAlways:"Always",labelHover:"On hover",labelNever:"Never",labelNoSectionFound:"No section found",optionWheelBehavior:"Default mouse wheel behavior",optionModDragBehavior:"Default {{key}} behavior",optionShowMenu:"Show menu",optionNewCanvasLocation:"Default location for new canvas files",optionNewCanvasLocationDescription:"Where newly created canvas files are placed.",optionNewCanvasFolderPath:"Folder to create new canvas files in",optionNewCanvasFolderPathDescription:"Newly created canvas files will appear under this folder.",optionNodeLabel:"Display card label",optionSnapToGrid:"Snap to grid",optionSnapToGridDesc:"Snap cards to the background grid when moving and resizing.",optionSnapToObjects:"Snap to objects",optionSnapToObjectsDesc:"Snap cards to nearby objects when moving and resizing.",optionZoomBreakpoint:"Zoom threshold for hiding card content",optionZoomBreakpointDesc:"Lower values will increase performance but hide card content sooner when zooming out.",optionExportPngShowLogo:"Show logo",optionExportPngShowLogoDesc:"This will add an Obsidian logo to the bottom left.",optionExportPngPrivacyMode:"Privacy mode",optionExportPngPrivacyModeDesc:"This will obscure any text on your canvas.",optionExportPngZoom:"Zoom",optionExportPngZoomDesc:"A higher zoom will generate a higher resolution image.",optionExportPngFrame:"Viewport",optionExportPngFrameDesc:"Choose to render the entire canvas or just the current visible viewport.",optionExportPngFrameFull:"Full canvas",optionExportPngFrameViewport:"Viewport only",optionBackgroundCover:"Cover",optionBackgroundRatio:"Keep aspect ratio",optionBackgroundRepeat:"Repeat",actionNewCanvas:"New canvas",actionRemove:"Remove",actionNarrowHeading:"Narrow to heading...",actionNarrowBlock:"Narrow to block...",actionSwapFile:"Swap file...",actionChangeUrl:"Change URL...",actionZoomToFit:"Zoom to fit",actionZoomToSelection:"Zoom to selection",actionReloadPage:"Reload page",actionFollowConnection:"Follow connection",commandCreateNewCanvas:"Create new canvas",commandConvertToFile:"Convert to file...",instructionNarrowHeading:"to embed heading",instructionNarrowBlock:"to embed block",instructionJumpToGroup:"to navigate to group",promptToNarrow:"Type to find file, heading, or block",labelEnterUrl:"Enter URL",labelEmptyEmbed:'"{{linktext}}" could not be found.',promptAddText:"Add text...",promptStartSearch:"Type to search...",labelCanvasHelp:"Canvas help",labelCanvasSettings:"Canvas settings",labelNoNarrow:"Show entire file",labelReadonly:"Read-only",labelDisableReadonly:"Disable read-only",labelPan:"Pan",labelPanHorizontal:"Pan horizontally",labelZoom:"Zoom",labelSelectAll:"Select all",labelAddRemoveSelection:"Add to / remove from selection",labelCloneCard:"Clone card",labelConstrainMovementAxis:"Constrain card movement to axis",labelDisableDragSnapping:"Disable snapping while dragging",labelRemoveCard:"Remove card",labelDragFromBelow:"Drag from below or double click",labelLongpress:"Touch and hold to add / move / select",labelDragPan:"Drag to pan",labelPinchZoom:"Pinch to zoom",labelSpaceDragPan:"Space + Drag to pan",labelScrollToZoom:"Scroll to zoom",labelUntitledGroup:"Untitled group",labelLineDirection:"Line direction",labelNondirectional:"Nondirectional",labelUnidirectional:"Unidirectional",labelBidirectional:"Bidirectional",labelImage:"Image",labelStyle:"Style",msgNoGroupsFound:"No groups found",msgExportFailedEmptyCanvas:"Cannot export an empty canvas"}},nouns:{wordWithCount:"{{count}} word",wordWithCount_plural:"{{count}} words",characterWithCount:"{{count}} character",characterWithCount_plural:"{{count}} characters",linkWithCount:"{{count}} link",linkWithCount_plural:"{{count}} links",fileWithCount:"{{count}} file",fileWithCount_plural:"{{count}} files",folderWithCount:"{{count}} folder",folderWithCount_plural:"{{count}} folders",backlinkWithCount:"{{count}} backlink",backlinkWithCount_plural:"{{count}} backlinks",siteWithCount:"{{count}} site",siteWithCount_plural:"{{count}} sites",pluginWithCount:"{{count}} plugin",pluginWithCount_plural:"{{count}} plugins",themeWithCount:"{{count}} theme",themeWithCount_plural:"{{count}} themes"}}})();{ "setting": { "options": "الخيارات", "plugin": "إضافة", "builtin-plugins": "الإضافات الأساسية", "plugin-options": "خيارات الإضافات", "folder-path-example-placeholder": "مثال: ملف 1 /ملف 2", "file-path-example-placeholder": "مثال: ملف/مذكرة", "msg-restart-required": "Changing this option requires a restart to take effect.", "editor": { "name": "محرر", "section-general": "عام", "section-behavior": "سلوك", "section-display": "عرض", "option-spellcheck": "تدقيق إملائي", "option-spellcheck-description": "تفعيل التدقيق الإملائي. حالياً يعمل فقط للغة الإتكليزية.", "spellcheck-languages": "لغات التدقيق الإملائي", "spellcheck-languages-description": "اختر اللغات المراد استخدامها في المدقق الإملائي.", "spellcheck-languages-mac-description": "سيكتشف المدقق الإملائي الأصلي تلقائيًا اللغة المستخدمة لك على macOS.", "spellcheck-dict": "قاموس التدقيق الإملائي", "spellcheck-dict-empty": "قاموس التدقيق الإملائي فارغ.", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "طول الخط المقروء", "option-readable-line-description": "ضع حد أقصى لطول السطر.", "option-strict-line-break": "فاصل السطر", "option-strict-line-break-description": "In preview mode, ignore single line breaks according to the Markdown specs. Turn this off for single line breaks to show in preview.", "option-show-frontmatter": "أظهر الواجهة", "option-show-frontmatter-description": "In preview mode, show frontmatter as a code block. Turn off to hide frontmatter section.", "option-auto-pair-brackets": "Auto pair brackets", "option-auto-pair-brackets-description": "اقتران الأقواس والاقتباسات تلقائيًا.", "option-auto-pair-markdown": "Auto pair Markdown syntax", "option-auto-pair-markdown-description": "Pair symbols automatically for bold and italics.", "option-smart-indent-lists": "Smart indent lists", "option-smart-indent-lists-description": "اعتني بمسافة بادئة وعلامة قائمة نيابة عنك.", "option-fold-heading": "Fold heading", "option-fold-heading-description": "تتيح لك طي كل شيء تحت عنوان.", "option-fold-indent": "Fold indent", "option-fold-indent-description": "تتيح لك طي جزء من نفس المسافة البادئة ، مثل القوائم.", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Editing view", "option-default-new-tab-view-reading": "Reading view", "option-default-editing-mode": "وضع التحرير الافتراضي", "option-default-editing-mode-description": "وضع التحرير الافتراضي الذي سيبدأ به الجزء الجديد.", "option-default-editing-mode-source": "وضع المصدر", "option-default-editing-mode-live-preview": "معاينة مباشرة", "option-show-line-number": "أظهر رقم السطر", "option-show-line-number-description": "أظهر رقم السطر في الحاشية.", "option-indentation-guide": "Show indentation guides", "option-indentation-guide-description": "إظهار خطوط العلاقة العمودية بين النقاط للتوجيه المرئي.", "option-use-tabs": "استخدم علامات التبويب", "option-use-tabs-description": "استخدم علامات التبويب للمسافة البادئة عند الضغط على مفتاح \"Tab\". اضبط هذا على وضع الإيقاف لاستخدام المسافات.", "option-tab-size": "حجم علامة التبويب", "option-tab-size-description": "عدد المسافات التي تعادلها علامة تبويب.", "option-rtl": "اليمين لليسار (RTL)", "option-rtl-description": "يضبط اتجاه نص الملاحظات لعرضه من اليمين إلى اليسار.", "option-auto-convert-html": "Auto convert HTML", "option-auto-convert-html-description": "قم بتحويل HTML إلى Markdown تلقائيًا عند اللصق والسحب والإفلات من صفحات الويب. استخدم Ctrl / Cmd + Shift + V للصق بدون تحويل.", "option-vim-key-bindings": "Vim key bindings", "option-vim-key-bindings-description": "تتيح لك استخدام ارتباطات مفاتيح Vim في محرر المصدر.", "option-vim-key-bindings-mobile": "بالنسبة للأجهزة المحمولة ، يكون هذا الإعداد لكل جهاز ولا تتم مزامنته من خلال ملف التكوين.", "option-emacsy-keys": "Legacy Emacs-style key bindings for macOS", "option-emacsy-keys-description": "Allows you to use the additional Emacs-style navigation keys, which are standard on macOS, but may interfere with some key operations.", "label-confirm-enable-vim": "Confirm entering Vim mode", "label-vim-warning": "Vim mode is for efficient text editing but can be quite counter-intuitive. If you're not familiar with Vim, this option might make it look like Obsidian has stopped working.", "label-vim-test": "To verify that you know your way around Vim, please enter the command to quit Vim without saving below:", "label-vim-your-answer": "اجابتك", "placeholder-enter-command": "أدخل أمر ...", "button-confirm-enable-vim": "اسمح لي بتمكين Vim", "msg-vim-mode-enabled": "الأمر صحيح. تم تمكين وضع Vim الآن.", "msg-vim-mode-not-enabled": "الأمر غير صحيح. يبقى وضع Vim معطلًا لحمايتك.", "msg-vim-mode-please-enter-command": "الرجاء إدخال الأمر لتمكين وضع Vim", "option-legacy-editor": "استخدم المحرر القديم", "option-legacy-editor-description2": "سيتم إنهاء العمل بالمحرر القديم قريبًا. لم يعد يتم صيانته حاليًا ، وبالتالي ، لن تتم معالجة الأخطاء بعد الآن.", "label-legacy-deprecation": "New editor is here", "label-legacy-deprecation-1": "Obsidian now has a brand new editor that's more robust and accessible.", "label-legacy-deprecation-2": "يبدو أنك لا تزال تستخدم المحرر القديم ونعتقد أنك ستستمتع بالمحرر الجديد.", "label-legacy-deprecation-choice": "ما الوضع الذي تريد استخدامه؟", "label-live-preview-description": "تجربة أكثر حداثة ، ما تراه ، هو ما ستحصل عليه.", "label-source-mode-description": "انظر Markdown الخام مع تمييز بناء الجملة.", "button-start-new-editor": "ابدأ محررًا جديدًا" }, "file": { "name": "الملفات والروابط", "option-confirm-file-deletion": "تأكيد حذف الملف", "option-confirm-file-deletion-description": "ما إذا كنت تريد أن تتم مطالبتك بتأكيد حذف الملف.", "option-delete-destination": "الملفات المحذوفة", "option-delete-destination-description": "ماذا تفعل بالملفات بعد حذفها", "option-choice-system-trash": "انقل الى حاوية النظام", "option-choice-vault-trash": "انقل الى حاوية اوبسيدين (.trash folder)", "option-choice-permanent-delete": "حذف نهائي", "option-always-update-links": "جدد الروابط الداخلية دائما", "option-always-update-links-description": "Whether to automatically update links after renaming a file or prompt.", "option-new-note-location": "الموقع الافتراضي للملاحظة الجديدة", "option-new-note-location-description": "أين تضع الملاحظات المنشأة حديثا. إعدادات البرنامج المساعد سوف تتجاوز هذا.", "option-choice-vault-root": "Vault root", "option-choice-current-folder": "نفس المجلد الموجود به الملف", "option-choice-specified-folder": "في المجلد المحدد أدناه", "option-new-file-folder-path": "مجلد لإنشاء ملاحظات جديدة في", "option-new-file-folder-path-description": "ستظهر الملاحظات المنشأة حديثًا تحت هذا المجلد. إعدادات البرنامج المساعد سوف تتجاوز هذا.", "option-use-wiki-links": "استخدم [[Wikilinks]]", "option-use-wiki-links-description": "Auto-generate Wikilinks for [[links]] and ![[images]] instead of Markdown links and images. Disable this option to generate Markdown links instead.", "option-show-unsupported-files": "كشف جميع امتدادات الملفات", "option-show-unsupported-files-description": "Show files with any extension even if Obsidian can't open them natively, so that you can link to them and see them in File Explorer and Quick Switcher.", "option-link-autocompleted-format": "تنسيق ارتباط جديد", "option-link-autocompleted-format-description": "ما هي الروابط التي يجب إدراجها عند الإنشاء التلقائي للروابط الداخلية.", "option-choice-shortest-linktext": "أقصر طريق إن أمكن", "option-choice-relative-path": "المسار النسبي للملف", "option-choice-absolute-path": "Absolute path in vault", "option-new-attachment-location": "الموقع الافتراضي للمرفقات الجديدة", "option-new-attachment-location-description": "مكان وضع المرفقات المضافة حديثًا.", "option-choice-subdirectory": "في المجلد الفرعي تحت المجلد الحالي", "option-attachment-folder-path": "مسار مجلد المرفقات", "option-attachment-folder-path-description": "ستظهر هنا ملفات المرفقات المنشأة حديثًا. يتضمن ذلك الصور التي تم إنشاؤها عن طريق السحب والإفلات أو اللصق والتسجيلات الصوتية.", "option-attachment-subfolder-path": "اسم المجلد الفرعي", "option-attachment-subfolder-path-description": "If your file is under \"vault/folder\", and your set subfolder name to \"attachments\", attachments will be saved to \"vault/folder/attachments\".", "option-attachment-subfolder-path-placeholder": "المرفقات", "option-excluded-files": "الملفات المستبعدة", "option-excluded-files-desc": "ستكون الملفات المستبعدة إما مخفية أو أقل وضوحًا في أماكن مختلفة ، مثل Quick Switcher ، واقتراح الارتباط ، وعرض الرسم البياني.", "label-no-excluded-filters-applied": "لم يتم تطبيق فلتر مستبعد الآن. أضف واحدًا أدناه.", "label-excluded-filters-applied": "الملفات المطابقة للفلاتر التالية مستبعدة حاليًا:", "label-excluded-filter": "فلتر", "placeholder-excluded-filter": "أدخل المسار أو \"/regex/\" ..." }, "appearance": { "name": "المظهر", "option-base-theme": "Base theme", "option-base-theme-description": "Choose Obsidian’s default color scheme.", "option-accent-color": "Accent color", "option-accent-color-description": "Choose the accent color used throughout the app.", "dark-theme": "قاتم", "light-theme": "فاتح", "system-theme": "Adapt to system", "option-font": "Font", "option-advanced": "Advanced", "option-interface-font": "Interface font", "option-interface-font-description": "Set base font for all of Obsidian.", "option-text-font": "Text font", "option-text-font-description": "Set font for editing and reading views.", "option-monospace-font": "Monospace font", "option-monospace-font-description": "Set font for places like code blocks and frontmatter.", "label-single-font-currently-in-effect": " Currently applied font: ", "label-multiple-fonts-currently-in-effect": " The following fonts are currently applied:", "option-font-placeholder": "Enter font name...", "label-no-custom-font-set": "No custom font is applied right now. Add one below.", "label-font-applied": "The first font from this list that is available on your system will be applied.", "msg-font-not-found": "This font is not detected on your system.", "msg-font-found": "This font is detected on your system.", "label-font-name": "Font name", "option-community-themes": "Open community themes", "option-community-themes-description": "Preview and use amazing themes created by the community.", "button-browse-community-themes": "استعرض", "option-font-size": "Font size", "option-font-size-description": "Font size in pixels that affects editor and preview.", "option-font-size-action": "Quick font size adjustment", "option-font-size-action-description": "Adjust the font size using Ctrl + Scroll, or using the trackpad pinch-zoom gesture.", "option-themes": "Themes", "option-manage-themes-description": "Manage installed themes and browse community themes.", "option-theme-button-manage": "Manage", "option-choice-none": "None", "option-native-menus": "Native menus", "option-native-menus-desc": "Menus throughout the app will match the operating system. They will not be affected by your theme.", "button-reload-themes": "Reload themes", "msg-reloaded-themes": "Reloaded custom CSS themes.", "button-open-themes-folder": "Open themes folder", "option-css-snippets": "CSS snippets", "label-no-css-snippets-found": "No CSS snippets found in the snippets folder.", "no-snippet-description": "CSS Snippets are stored in \"{{path}}\".", "button-reload-snippets": "Reload snippets", "button-open-snippets-folder": "Open snippets folder", "msg-reloaded-snippets": "Reloaded CSS snippets.", "option-toggle-snippet-description": "Apply CSS snippet at \"{{path}}\".", "label-installed-themes": "Installed themes", "label-screenshot-unavailable": "Screenshot unavailable", "label-default-theme": "Default", "tooltip-click-to-enlarge": "Click to enlarge", "button-update": "Update", "label-currently-selected": "Selected", "option-frame-style": "Window frame style", "option-frame-description": "Determines the styling of the title bar of Obsidian windows. Requires a full restart to take effect.", "option-frame-hidden": "Hidden (default)", "option-frame-obsidian": "Obsidian frame", "option-frame-native": "Native frame", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Show tab title bar", "option-show-view-header-desc": "Display the header at the top of every tab.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "button-check-for-updates": "Check for updates", "button-view-updates": "View updates", "button-update-all-themes": "Update all", "label-current-themes": "Current community themes", "label-currently-installed": "You currently have {{count}} theme installed.", "label-currently-installed_plural": "You currently have {{count}} themes installed." }, "hotkeys": { "name": "Hotkeys", "prompt-filter": "Filter...", "tooltip-delete-hotkey": "Delete hotkey", "label-waiting-for-hotkey-press": "Press hotkey...", "tooltip-restore-default": "Restore default", "tooltip-customize-command": "Customize this command", "tooltip-hotkey-single-conflict": "This hotkey conflicts with \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "This hotkey conflicts with {{count}} other commands", "label-blank-hotkey": "Blank" }, "about": { "name": "معلومات اضافية", "label-commercial-license": "Commercial license", "label-license-key": "رمز الترخيص", "license-key-placeholder": "رمز الترخيص الخاص بك...", "label-activate-license": "تفعيل الرخصة", "button-activate": "تفعيل", "label-unknown-version": "غير معروف", "label-current-version": "الإصدار الحالي: ", "label-install-version": "(رمز المثبّت: {{version}})", "label-up-to-date": "برنامجك محّدث لأحدث إصدار!", "label-read-changelog": "اقرأ سجل التفييرات.", "label-manual-update-required": "To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.", "label-download": "Download", "label-new-version-ready": "يوجد إصدار جديد جاهز للتنصيب. ", "label-relaunch-to-update": "أعد تشفيل البرنامج للتحديث.", "label-disabled-updates": "Updates are disabled.", "label-checking-for-updates": "يتم التأكد من وجود تحديثات...", "button-relaunch": "إعادة تشغيل البرنامج", "button-check-for-updates": "Check for updates", "option-auto-update": "تحديثات تلقائية", "option-auto-update-description": "Turn this off to prevent the app from checking for updates.", "option-get-help": "Get help", "option-get-help-description": "Get help on using Obsidian.", "button-open": "فتح", "option-language": "لفة", "option-language-description": "تغيير لغة العرض.", "option-insider-build": "Receive insider builds", "option-insider-build-description": "Auto-update to insider builds to try out new features. Note that these builds are bleeding edge and might be less stable.", "option-advanced": "Advanced", "option-hw-acceleration": "Hardware Acceleration", "option-hw-acceleration-description": "Turns on Hardware Acceleration, which uses your GPU to make Obsidian smoother.", "option-hw-acceleration-warning": "If you turn this off, app performance will be severely degraded.", "option-config-location": "Override config folder", "option-config-location-description": "Use a different config folder than the default one. Must start with a dot.", "option-config-location-warning": "Config location must be a valid folder name that starts with a dot.", "label-license": "الرخصة", "label-your-commercial-license-key": "Your commercial license key is \"{{key}}\".", "label-commercial-license-info": "Registered to \"{{company}}\" for {{seats}} users. Valid until {{expiry}}.", "label-validating-commercial-license": "يتم التحقق...", "label-invalid-commercial-license": "الرخصة غير صالحة: ", "button-remove-commercial-license": "Remove", "option-catalyst": "Catalyst license", "option-catalyst-desc": "You currently have the {{tier}} Catalyst license. Thanks for your support!", "option-catalyst-desc-no-license": "You don't have a Catalyst license right now. Catalyst license is a one-time donation to support Obsidian development.", "label-app": "App" }, "account": { "name": "الحساب", "option-your-account": "Your account", "option-your-account-desc": "You're currently signed in {{name}} ({{email}}).", "option-your-account-desc-no-login": "You're not logged in right now. An account is only needed for Obsidian Sync, Obsidian Publish, and Catalyst insider builds.", "button-manage-settings": "Manage settings", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Commercial license", "option-commercial-license-desc": "If you use Obsidian for commercial purpose, you may need to get a commercial license.", "button-purchase": "Purchase", "button-log-out": "خروج", "label-log-in": "دخول", "label-sign-up": "Sign up", "label-email": "البريد الإلكتروني", "placeholder-email": "بريدك الإلكتروني...", "label-password": "كلمة السر", "placeholder-password": "كلمة السر...", "button-login": "دخول", "message-empty-email": "لا يمكن أن يكون البريد الإلكتروني فارغاً.", "message-invalid-email": "البريد الإلكتروني خاطئ.", "message-empty-password": "لا يمكن أن تكون كلمة السر فارغة.", "message-login-failed": "Login failed, please double check your email and password.", "label-no-account": "لا تملك حساباً؟ ", "link-sign-up-now": "سجًل الآن" }, "core-plugin": { "plugin-list": "Plugin list", "option-search-plugin": "Search core plugins", "option-search-plugin-description": "Filter plugins by name or description.", "placeholder-search-plugin": "Search plugins..." }, "third-party-plugin": { "name": "Third-party plugin", "option-restricted-mode": "Restricted mode", "option-restricted-mode-description": "Restricted Mode is off. Turn on to disable community plugins.", "button-turn-on": "Turn on", "option-browse-community-plugins": "Community plugins", "option-browse-community-plugins-description": "Browse and install third-party plugins made by our amazing community.", "button-browse": "Browse", "label-exit-restricted-mode": "Exit Restricted Mode", "label-exit-restricted-mode-description-1": "Community plugins, like any other software you install, could potentially cause data integrity and security issues.", "label-exit-restricted-mode-description-2": "Plugin security is important to us. Here's what we do:", "label-exit-restricted-mode-description-3": "Despite our efforts, there is still a small chance that a community plugin might misbehave.", "label-code-review": "Initial code review", "label-code-review-desc": "Plugins undergo an initial code review by our team before they appear in the store.", "label-open-source": "Open source", "label-open-source-desc": "Most plugins are open source on GitHub, so you can inspect the code yourself.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We have a large community of developers who watch out for each other.", "label-report-mechanism": "Report mechanism", "label-report-mechanism-desc": "We follow up and remove faulty plugins upon user report.", "label-exit-restricted-mode-disable-confirmation": "Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.", "label-learn-more": "Learn more about plugin security", "button-turn-on-community-plugins": "Turn on community plugins", "label-trust-author": "Do you trust the author of this vault?", "label-trust-author-description-1": "You're opening this vault for the first time, and it comes with some plugins.", "label-trust-author-description-2": "If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.", "label-trust-author-description-3": "If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.", "button-enable-plugins": "Trust author and enable plugins", "button-dont-trust-author": "Browse vault in Restricted Mode", "placeholder-community-plugins": "Search community plugins...", "msg-failed-load-plugins": "Failed to load community plugins.", "label-installed": "Installed", "button-install": "Install", "button-enable": "Enable", "button-disable": "Disable", "button-copy-share-link": "Copy share link", "button-donate": "Donate", "label-no-results-found": "No results found.", "msg-failed-to-load-manifest": "Failed to load plugin manifest.", "label-version": "Version: {{version}}", "label-currently-installed-version": " (currently installed: {{version}})", "label-by-author": "By ", "label-repository": "Repository: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "This plugin does not support your device.", "button-update": "تحديث", "label-no-readme": "This plugin did not provide a README file.", "msg-installing-plugin": "Installing plugin \"{{name}}\"...", "msg-failed-to-install-plugin": "Failed to install plugin \"{{name}}\".", "msg-successfully-installed-plugin": "Successfully installed plugin \"{{name}}\".", "label-installed-plugins": "Installed plugins", "button-reload-plugins": "Reload plugins", "msg-reloaded-third-party-plugins": "Reloaded third-party plugins.", "label-uninstall": "إلغاء التثبيت", "label-uninstall-plugin": "Uninstall plugin", "label-uninstall-plugin-confirmation": "Are you sure you want to uninstall this plugin? This will delete the folder of the plugin.", "button-open-plugins-folder": "Open plugins folder", "button-check-for-updates": "تحقق من وجود تحديثات", "button-update-all-plugins": "تحديث الكل", "label-current-plugins": "Current plugins", "label-currently-installed": "You currently have {{count}} plugin installed.", "label-currently-installed_plural": "You currently have {{count}} plugins installed.", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Show a message with how long each plugin took to initialize when starting the app.", "msg-no-updates-found": "No plugin updates found.", "msg-updates-found": "Found {{count}} plugin to update.", "msg-updates-found_plural": "Found {{count}} plugins to update.", "msg-update-plugin": "Update to version {{version}}", "option-search-installed-plugin": "Search installed plugins", "option-search-installed-plugin-description": "Filter installed plugins by name or description.", "placeholder-search-installed-plugin": "Search installed plugins...", "show-installed-only": "Show installed only", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "Showing {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Mobile toolbar", "option-configure-quick-action": "Configure mobile Quick Action", "option-configure-quick-action-description": "Configure which command to trigger when pull down from the top. The current command is set to \"{{command}}\".", "button-configure": "Configure", "placeholder-select-quick-action": "Select Quick Action...", "manage-toolbar-options": "Manage toolbar options", "option-internal-link": "Add internal link", "option-internal-embed": "Add embed", "option-tag": "Add tag", "option-heading": "Toggle heading", "option-strikethrough": "Toggle strikethrough", "option-highlight": "Toggle highlight", "option-code": "Toggle code", "option-blockquote": "Toggle blockquote", "option-markdown-link": "Add Markdown link", "option-bullet-list": "Toggle bullet list", "option-numbered-list": "Toggle numbered list", "option-indent-list": "Indent list item", "option-unindent-list": "Unindent list item", "option-undo": "Undo", "option-redo": "Redo", "option-move-caret-up": "Move caret up", "option-move-caret-down": "Move caret down", "option-move-caret-left": "Move caret left", "option-move-caret-right": "Move caret right", "option-first-line": "Go to first line", "option-last-line": "Go to last line", "option-toggle-keyboard": "Toggle keyboard", "option-configure-toolbar": "Configure mobile toolbar", "option-added-options": "Added options", "option-more-toolbar-options": "More toolbar options", "option-attach": "Insert attachment", "option-add-command": "Add global command", "option-add-command-description": "Select any global command to add to the toolbar." } }, "editor": { "search": { "placeholder-find": "Find", "placeholder-replace": "Replace", "label-previous": "السابق", "label-next": "التالي", "label-all": "الكل", "label-exit-search": "خروج من البحث", "label-replace": "استبدال", "label-replace-all": "استبدال الكل" }, "link-suggestion": { "label-type-hash": "اكتب #", "label-link-heading": "للحصول على رابط الترويسة", "label-type-block": "Type ^", "label-link-block": "to link blocks", "label-type-pipe": "اكتب |", "label-change-display-text": "لتغيير نص العرض", "label-no-match-found": "لم يتم العثور على تطابق" }, "spellcheck": { "no-suggestion": "لا اقتراحات...", "add-to-dictionary": "إضافة للقاموس" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "No heading", "label-heading-level": "Heading {{level}}" }, "print-modal": { "title": "Export to PDF", "caption": "Export \"{{filename}}\" to PDF with the setting below.", "setting-page-size": "Page size", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Include file name as title", "setting-landscape": "Landscape", "setting-margin": "Margin", "setting-margin-default": "Default", "setting-margin-minimal": "Minimal", "setting-margin-none": "None", "setting-downscale-percent": "Downscale percent", "button-export-to-pdf": "Export to PDF" }, "link-popover": { "tooltip-follow-link": "Follow link", "tooltip-open-link": "Open link", "tooltip-search-tag": "Search tag" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Open in default app", "empty-sidebar": "The sidebar is empty, try dragging a pane here.", "sidebar-expand": "Expand", "sidebar-collapse": "Collapse", "msg-fail-to-save-file": "Failed to save file \"{{filepath}}\". {{message}}.", "no-file": "No file", "msg-file-changed": "\"{{file}}\" has been modified externally, merging changes automatically.", "switch-vault": "Open another vault", "help": "Help", "settings": "Settings", "drag-to-rearrange": "Drag to rearrange", "msg-switched-to-read": "Switched default view mode to reading view.", "msg-switched-to-edit": "Switched default view mode to editor.", "msg-upgrade-installer": "To use this feature, please re-install with latest installer available from our website.", "tooltip-restore-default-settings": "Restore default settings", "label-copy": "Copy to clipboard", "copied_generic": "Copied to your clipboard", "copied": "{{item}} copied to your clipboard", "url": "Url", "msg-open-file-through-uri": "Opened file \"{{path}}\"", "msg-file-not-found-through-uri": "File \"{{name}}\" not found.", "delete-action-short-name": "Delete", "msg-indexing": "Obsidian is indexing your vault...\nThis should only happen once.\nSome functionality may not be available until this is complete.", "msg-indexing-complete": "Indexing complete.", "msg-sandbox-vault": "This is a sandbox vault.\nChanges you make in this vault will be lost.", "label-enter-to-create": "Enter to create", "label-update-available": "Update Available", "label-debug-info": "Debug info", "button-learn-more": "Learn more", "button-not-now": "Not now", "button-add": "Add", "button-manage": "Manage", "label-new-tab": "New tab", "msg-tab-busy": "This tab is currently busy, please try again later", "empty-state": { "no-file-open": "No file is open", "create-new-file": "Create new file", "go-to-file": "Go to file", "see-recent-files": "See recent files", "close": "Close", "unknown-pane-title": "Plugin no longer active", "unknown-pane-desc": "The plugin that created this pane ({{type}}) has gone away" }, "menu": { "edit-view": "تحرير (Ctrl/Cmd+Click للتحرير في لوحة جديدة)", "read-view": "Current view: reading", "switch-to-edit-view": "Click to edit", "switch-to-read-view": "Click to read", "mod-click-open-new-tab": "{{key}}+Click to open in new tab", "find": "إبحث...", "replace": "استبدل...", "edit": "تحرير", "preview": "معاينة", "more-options": "خيارات أكثر", "close": "أغلق", "close-others": "Close others", "close-right": "Close tabs to the right", "pin": "ثبت", "unpin": "Unpin", "unlink-tab": "Unlink tab", "link-tab": "Link with tab...", "toggle-source-mode": "Source mode", "toggle-reading-view": "Reading view", "delete-file": "احذف الملف", "create-file": "Create this file", "open-link": "Open link", "open-in-new-tab": "Open in new tab", "open-to-the-right": "Open to the right", "copy-url": "Copy url", "close-current-tab": "Close current tab", "copy": "Copy", "cut": "Cut", "paste": "Paste", "paste-as-plain-text": "Paste as plain text", "select-all": "Select all", "rename-heading": "Rename this heading...", "rename-blockid": "Rename this block ID...", "open-in-new-window": "Open in new window", "move-to-new-window": "Move to new window", "open-in-browser": "Open in browser", "stack-tabs": "Stack tabs", "unstack-tabs": "Unstack tabs" }, "tooltip": { "click-to-expand": "إضغط للتوسيع", "click-to-collapse": "إضغط للإغلاق", "alias": "كنية", "not-created-yet": "Not created yet, select to create" }, "start-screen": { "label-version": "Version", "option-open-folder-as-vault": "Open folder as vault", "option-open-folder-as-vault-description": "Choose an existing folder of Markdown files.", "option-create-vault": "Create new vault", "option-create-vault-description": "Create a new Obsidian vault under a folder.", "option-connect-obsidian-sync": "Connect to Obsidian Sync", "option-connect-obsidian-sync-description": "Set up a synced vault with existing remote vault.", "option-new-vault-name": "Vault name", "option-new-vault-name-description": "Pick a name for your awesome vault.", "option-new-vault-location": "الموقع", "option-new-vault-location-description": "Pick a place to put your new vault.", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Reveal vault in system explorer", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "Rename vault...", "msg-error-rename-exists": "There is already a vault with this name.", "msg-error-nested": "Cannot move vault into a subfolder of itself.", "msg-error-rename-open": "Can't rename a currently open vault.", "msg-rename-failed": "Failed to rename vault.", "msg-rename-success": "Successfully renamed vault.", "option-move-vault": "Move vault...", "msg-move-select-dest": "Select destination folder", "msg-error-move-exists": "There is already a vault at the destination.", "msg-error-move-open": "Can't move a currently open vault.", "msg-move-failed": "Failed to move vault.", "msg-move-success": "Successfully moved vault.", "option-remove": "Remove from list", "button-quick-start": "Quick start", "button-open": "افتح", "button-browse": "تصفح", "button-connect": "Connect", "button-create-vault": "أنشىء", "button-back": "ارجع", "msg-empty-vault-name": "Vault name cannot be empty.", "msg-invalid-folder": "Please pick a valid folder.", "msg-failed-to-create-vault": "Failed to create vault.", "msg-failed-to-create-vault-at-location": "Could not create vault at the given location. Please double check the location and permission.", "msg-error-failed-to-open-vault": "Failed to open.", "msg-error-remove-current-open-vault": "Can't remove a currently open vault.", "option-get-help": "Get Help", "option-user-email": "Email", "placeholder-your-email": "Your email...", "option-user-password": "Password", "placeholder-your-password": "Your password...", "button-sign-in": "Sign in", "button-setup": "Setup", "option-connect-vault-desc": "Create a synced vault on this device.", "tooltip-own-vault": "This is a remote vault owned by you.", "tooltip-shared-vault": "This is a remote vault shared with you." }, "drag-and-drop": { "insert-link-here": "Insert link here", "insert-links-here": "Insert links here", "move-into-folder": "Move into \"{{folder}}\"", "star-this-file": "Star this file", "star-these-files": "Star these files", "open-in-this-tab": "Open in this tab", "open-as-tab": "Open as new tab" }, "window": { "maximize": "كبِّر", "minimize": "صغِّر", "restore-down": "Restore down", "close-window": "اقفل النافذة", "go-back": "ارجع للخلف", "go-forward": "تقدم للأمام" }, "start-up": { "loading-obsidian": "Loading Obsidian...", "obsidian-load-error": "An error occurred while loading Obsidian.", "button-reload-app": "Reload app", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "Open another vault", "loading-components": "Loading components...", "loading-plugins": "Loading plugins...", "loading-vault": "Loading vault...", "msg-failed-to-load-vault": "Failed to load vault: ", "loading-cache": "Loading cache...", "loading-workspace": "Loading workspace..." }, "mobile": { "action-import": "Import into vault", "action-choose-file-to-insert": "Choose a file to insert", "action-insert-text-into-file": "Insert text into {{filename}}", "action-insert-link-into-file": "Insert link into {{filename}}", "msg-importing": "Importing...", "msg-import-success": "Import success", "msg-failed-to-import-file": "Failed to import file {{filename}}", "msg-back-again-to-exit": "Press back again to exit." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "Save current file", "follow-cursor-link": "Follow link under cursor", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "Toggle pin", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "Navigate back", "navigate-forward": "Navigate forward", "use-dark-mode": "Use dark mode", "use-light-mode": "Use light mode", "change-theme": "Change theme", "search-current-file": "Search current file", "search-replace-current-file": "Search & replace in current file", "open-settings": "افتح الإعدادات", "open-help": "Open help", "toggle-edit": "Toggle editing/reading view", "toggle-source-mode": "Toggle Live Preview/Source mode", "delete-current-file": "إالغِ الملف الحالي", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "Toggle left sidebar", "toggle-right-sidebar": "Toggle right sidebar", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "Focus on editor", "toggle-fold": "Toggle fold on the current line", "fold-all": "Fold all headings and lists", "unfold-all": "Unfold all headings and lists", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "Swap line up", "swap-line-down": "Swap line down", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "Toggle bold for selection", "toggle-italics": "Toggle italics for selection", "toggle-highlight": "Toggle highlight for selection", "toggle-comments": "Toggle comments for selection", "insert-link": "Insert link", "toggle-spellcheck": "Toggle spellcheck", "delete-paragraph": "Delete paragraph", "toggle-checklist": "Toggle checklist status", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "Edit file title", "copy-path": "Copy file path", "copy-url": "Copy obsidian url", "export-pdf": "Export to PDF", "reload": "Reload app without saving", "undo-close-tab": "Undo close tab", "context-menu": "Show context menu under cursor", "show-debug-info": "Show debug info", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "Toggle edit/preview mode", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "This will affect {{links}} in {{files}}.", "msg-updated-links": "Updated {{links}} in {{files}}.", "label-update-links": "Update links", "label-confirm-update-link-to-file": "Do you want to update internal links that link to this file?", "button-always-update": "Always update", "button-just-once": "مرة واحدة", "button-do-not-update": "Do not update", "label-confirm-deletion": "Are you sure you want to delete \"{{filename}}\"?", "label-move-to-system-trash": "It will be moved to your system trash.", "label-move-to-vault-trash": "It will be moved to your Obsidian trash, which is located in the \".trash\" hidden folder in your vault.", "label-permanent-delete": "The file will be permanent deleted.", "label-non-empty-folder": "This folder is not empty.", "label-delete-folder-warning": "If you continue, all files inside this folder will be deleted.", "label-delete-folder": "امسح المجلد", "button-delete": "امسح", "button-delete-do-not-ask-again": "Delete and don't ask again", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "There are currently {{links}} pointing to this note.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "امسح الملف", "button-manage": "Manage", "button-cancel": "الغاء", "button-done": "تم", "button-save": "Save", "button-stop": "Stop", "button-continue": "Continue", "preparing-pdf": "Preparing PDF...", "label-rename-file": "أعد تسمية الملف", "label-new-name": "اسم جديد", "msg-rename-success": "تم اعادة التسمية بنجاح.", "label-rename-heading": "Rename heading", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "الإضافات", "file-explorer": { "name": "مستكشف الملفات", "desc": "See all the files in your vault.", "action-open": "Open file explorer", "action-show": "Show file explorer", "action-create-note": "إنشاء ملاحظة جديدة", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "ملاحظة جديدة", "action-new-folder": "مجلد جديد", "action-change-sort": "تغيير ترتيب الفرز", "action-reveal-file": "إظهار الملف في مستكشف الملفات", "action-reveal-active-file": "إظهار الملف الحالي في مستكشف الملفات", "command-move-file": "Move file to another folder", "action-move-file": "Move file to...", "action-move-folder": "Move folder to...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "Type a folder", "label-no-folders": "No folders found.", "instruction-navigate": "to navigate", "instruction-move": "to move", "instruction-dismiss": "to dismiss", "label-sort-a-to-z": "فرز حسب اسم الملف (أ إلى ي)", "label-sort-z-to-a": "فرز حسب اسم الملف (ي إلى أ)", "label-sort-new-to-old": "فرز حسب وقت التعديل (جديد إلى الأقدم)", "label-sort-old-to-new": "فرز حسب وقت التعديل (قديم إلى الأحدث)", "label-sort-created-old-to-new": "Created time (old to new)", "label-sort-created-new-to-old": "Created time (new to old)", "menu-opt-new-note": "ملاحظة جديدة", "menu-opt-new-folder": "مجلد جديد", "menu-opt-set-attachment-folder": "تعيين كمجلد المرفقات", "menu-opt-rename": "تغيير الاسم", "menu-opt-delete": "حذف", "menu-opt-make-copy": "إنشاء نسخة", "msg-invalid-characters": "لا يمكن أن يحوي اسم الملف أي من الأحرف: ", "msg-unsafe-characters": "Links will not work with file names containing any of these characters: ", "msg-file-already-exists": "يوجد ملف بنفس الاسم", "msg-empty-file-name": "لا يمكن أن يكون اسم الملف فارغاً.", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "Last modified at {{time}}", "tooltip-created-time": "Created at {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Move", "label-untitled-file": "Untitled", "label-untitled-folder": "Untitled", "msg-set-attachment-folder": "Attachments will be saved to \"{{path}}\" from now on." }, "search": { "name": "البحث", "desc": "Search for keyword in all the notes.", "action-open-search": "Search in all files", "label-collapse-results": "Collapse results", "label-match-case": "Match case", "label-explain-search-term": "Explain search term", "label-more-context": "Show more context", "prompt-start-search": "Type to start search...", "label-match-text": "Matches text: ", "label-match-regex": "Matches regex: ", "label-match-exact-text": "Contains exact text: ", "label-match-all": "Match all of: ", "label-match-any": "Match any of: ", "label-excluding": "Excluding: ", "label-case-sensitive": "Case sensitive", "label-case-insensitive": "Case insensitive", "label-match-file-path": "Match file path: ", "label-match-file-name": "Match file name: ", "label-match-content": "Match file content: ", "label-match-task": "Match task: ", "label-match-task-todo": "Match task (todo): ", "label-match-task-done": "Match task (done): ", "label-match-line": "Match line: ", "label-match-block": "Match block: ", "label-match-section": "Match section: ", "label-match-tag": "Match tag: ", "label-no-matches": "No matches found.", "matches-with-count": "... and {{count}} more match.", "matches-with-count_plural": "... and {{count}} more matches.", "label-copy-search-results": "Copy search results", "button-copy-results": "Copy results", "msg-successfully-copied": "Results copied to your clipboard.", "option-show-path": "Show path", "option-show-path-description": "Display full path of the file rather than just the file name.", "option-link-style": "Link style", "option-link-style-description": "Optionally turn each file result in to a link.", "option-choice-link-style-none": "None", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Markdown link", "option-list-prefix": "List prefix", "option-list-prefix-description": "Optionally add a list item prefix to each file result.", "option-choice-list-style-none": "None", "option-choice-list-style-dash": "Dash (-)", "option-choice-list-style-asterisk": "Asterisk (*)", "option-choice-list-style-numbered": "Numbered", "tooltip-clear-search": "Clear search", "label-search-options": "Search options", "tooltip-read-more": "Read more", "label-history": "History", "tooltip-clear-history": "Clear search history", "label-path-option-description": "match path of the file", "label-file-name-option-description": "match file name", "label-tag-option-description": "search for tags", "label-line-option-description": "search keywords on same line", "label-section-option-description": "search keywords under same heading", "menu-opt-search-for": "Search for \"{{keyword}}\"" }, "quick-switcher": { "name": "Quick switcher", "desc": "Jump to any files without leaving your keyboard. Ctrl/Cmd+O to activate.", "short-name": "Switcher", "action-open": "Open quick switcher", "instruction-navigate": "to navigate", "instruction-open": "to open", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "to create", "instruction-dismiss": "to dismiss", "label-no-note-create-new": "No notes found. Enter to create a new one.", "prompt-type-file-name": "Type file to switch to or create...", "label-enter-to-create": "Enter to create", "tooltip-not-created-yet": "Not created yet, select to create", "option-show-existing-only": "Show existing only", "option-show-existing-only-description": "Whether to show links to files that are not yet created.", "option-show-attachments": "Show attachments", "option-show-attachments-desc": "Show attachment files like images, videos, and PDFs.", "option-show-all-file-types": "Show all file types", "option-show-all-file-types-desc": "Show all files including ones that Obsidian can't open. The file will be opened with the default app for that file type." }, "graph-view": { "name": "Graph view", "desc": "See a graph overview of which notes link to which.", "action-open": "Open graph view", "action-open-local": "Open local graph", "action-copy-screenshot": "Copy screenshot", "tab-title": "Graph of {{displayText}}", "label-filters": "Filters", "prompt-filter-nodes": "Search files...", "option-depth": "Depth", "option-depth-description": "Show nodes this number of links away", "option-neighbor-links": "Neighbor links", "option-neighbor-links-description": "Show links between neighbors.", "option-forelinks": "Outgoing links", "option-forelinks-description": "Show links to other files", "option-backlinks": "Incoming links", "option-backlinks-description": "Show links from other files", "option-show-tags": "Tags", "option-show-tags-description": "Tags are linked to the files that contain them", "option-show-attachments": "Attachments", "option-show-attachments-description": "Show attachments included by files", "option-show-existing-files-only": "Existing files only", "option-show-existing-files-only-description": "When checked, links to nonexistent files are not shown", "option-show-orphans": "Orphans", "option-show-orphans-description": "Show files that are not linked to any other file", "label-display": "Display", "option-show-arrows": "Arrows", "option-show-arrows-description": "Show arrows when zoomed in", "option-text-fade": "Text fade threshold", "option-node-size": "Node size", "option-link-thickness": "Link thickness", "label-forces": "Forces", "option-center-force": "Center force", "option-link-force": "Link force", "option-link-distance": "Link distance", "option-repel-force": "Repel force", "tooltip-open-graph-settings": "Open graph settings", "msg-screenshot-copied": "Screenshot copied to the clipboard.", "label-groups": "Groups", "placeholder-enter-query": "Enter query...", "tooltip-delete-graph": "Delete group", "button-new-group": "New group", "tooltip-click-to-change-drag-to-reorder": "Click to change color\nDrag to reorder groups", "action-timelapse": "Start graph timelapse animation", "tooltip-start-timelapse-animation": "Start timelapse animation", "button-animate-timelapse": "Animate" }, "backlinks": { "name": "روابط خلفية", "desc": "أظهر عدد الروابط الخلفية في شريط الحالة.", "action-open": "افتح الروابط الخلفية", "action-show": "Show backlinks pane", "action-open-for-current": "افتح الروابط الخلفية للملف الحالي", "action-toggle-backlinks-in-document": "Toggle backlinks in document", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "الروابط المذكورة", "label-no-backlinks": "لا يوجد رواابط خلفية.", "label-unlinked-mentions": "إلغاء الربط", "label-show-search": "Show search filter", "label-link-button-text": "ربط", "tab-title": "الروابط الخلفية من أجل {{displayText}}", "label-no-unlinked-mentions": "لا يوجد روابط غير مذكورة.", "ellipsis": "...", "option-backlink-in-document": "Backlink in document", "option-backlink-in-document-desc": "Show backlinks in document by default when opening new panes." }, "outgoing-links": { "name": "Outgoing Links", "desc": "Show outgoing links and detect unlinked mentions of other notes in the current note.", "action-open": "Open outgoing links", "action-show": "Show outgoing links pane", "action-open-for-current": "Open outgoing links for the current file", "tab-title": "Outgoing links from {{displayText}}", "label-links": "Links", "label-no-links": "No links found.", "label-unlinked-mentions": "Unlinked mentions", "tooltip-link-file": "Link this file", "tooltip-not-created": "Not created yet" }, "tag-pane": { "name": "Tag pane", "desc": "Displays all your tags and along with their number of occurrences.", "action-show": "Show tag pane", "label-no-tags": "No tags found.", "label-sort-by-name-a-to-z": "Tag name (A to Z)", "label-sort-by-name-z-to-a": "Tag name (Z to A)", "label-sort-by-frequency-high-to-low": "Frequency (high to low)", "label-sort-by-frequency-low-to-high": "Frequency (low to high)", "action-show-nested-tags": "Show nested tags", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "Page preview", "desc": "Preview a note when hovering an internal link. Ctrl/Cmd + hover in editor mode.", "label-empty-note": "\"{{linktext}}\" is not created yet. Click to create.", "label-source-editor": "Editor", "label-source-preview": "Preview", "label-source-search": "Search, Backlinks, and Outgoing links", "label-require-mod": "Require {{key}} to trigger page preview on hover" }, "starred": { "name": "Starred", "desc": "Star frequently used files and searches.", "action-show": "Show starred pane", "action-toggle": "Star/unstar current file", "action-toggle-search": "Star/unstar current search", "action-star": "Star", "action-unstar": "Unstar", "menu-opt-remove": "Remove", "msg-successfully-starred": "Successfully starred {{type}} \"{{title}}\".", "msg-removed-starred": "Removed starred {{type}} \"{{title}}\".", "msg-cannot-find-path": "Cannot find file at \"{{path}}\"." }, "custom-css": { "name": "Custom CSS", "desc": "Reads \"obsidian.css\" in the vault and applies it.", "setting-community-themes": "Community themes", "msg-fetching-themes": "Fetching community theme data...", "prompt-filter": "Filter...", "label-dark-theme-only": "Dark themes only", "label-light-theme-only": "Light themes only", "label-use": "Use", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "Update", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "Remove theme", "label-visit-on-github": "Visit on GitHub", "msg-load-error": "Could not load community themes, please check your network.", "msg-now-using-theme": "You're now using {{title}} as your CSS theme.", "msg-deleted-theme": "The theme {{title}} has been deleted.", "msg-updated-theme": "The theme {{title}} has been updated.", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "Command palette", "desc": "Type a command to invoke it. No need to use the UI or remember the shortcut.", "action-open": "Open command palette", "instruction-navigate": "to navigate", "instruction-use": "to use", "instruction-dismiss": "to dismiss", "label-no-commands": "No commands found.", "prompt-type-command": "Type a command...", "label-pinned-commands": "Pinned commands", "option-add-new-pin": "New pinned command", "option-add-new-pin-description": "Pinned commands will appear at the top of all commands when no search query is present." }, "markdown-format-importer": { "name": "Markdown format importer", "desc": "Convert Markdown from other apps to Obsidian format.", "action-open": "Open Markdown importer", "option-roam-tag-fixer": "Roam Research tag fixer", "option-roam-tag-fixer-description": "Converts \"#tag\" and \"#[[tag]]\" to \"[[tag]]\".", "option-roam-highlight-fixer": "Roam Research highlight fixer", "option-roam-highlight-fixer-description": "Converts \"^^highlight^^\" to \"==highlight==\".", "option-roam-todo-converter": "Roam Research TODO converter", "option-roam-todo-converter-description": "Converts \"{{[[TODO]]}}\" to \"[ ]\".", "option-bear-highlight-fixer": "Bear highlight fixer", "option-bear-highlight-fixer-description": "Converts \"::highlight::\" to \"==highlight==\".", "zettelkasten-link-fixer": "Zettelkasten link fixer", "zettelkasten-link-fixer-description": "Fixes \"[[UID]]\" links to full \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Zettelkasten link beautifier", "zettelkasten-link-beautifier-description": "Fixes \"[[UID]]\" links and also beautify them \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Warning: the importer will convert all the files in your vault, not just the current file.", "msg-override-files-warning": "Your files will be overwritten. Back up all your files before attempting conversion.", "label-start-conversion": "Start Conversion", "label-stop": "Stop", "label-go-back": "Go back", "label-done": "Done", "label-processing": "Processing...", "label-cancelling": "Cancelling...", "label-finished": "Finished!", "label-processed-files": "Processed files", "label-modified-files": "Modified files", "label-total-replacements": "Total replacements" }, "daily-notes": { "name": "Daily notes", "desc": "Open today's daily note, or create one if not present.", "short-name": "Today", "action-open": "Open today's note", "action-open-previous": "Open previous daily note", "action-open-next": "Open next daily note", "action-insert-text": "Insert text into daily note", "action-insert-link": "Insert link into daily note", "msg-fail-format": "Failed to create daily note. \"{{format}}\" is not a valid format.", "msg-fail-folder": "Failed to create daily note. Folder \"{{folderOption}}\" not found.", "msg-fail-template-file": "Failed to create daily note. Template file \"{{template}}\" not found.", "msg-no-previous": "There's no daily note before this one.", "msg-no-next": "There's no daily note after this one.", "option-date-format": "Date format", "label-refer-to-syntax": "For more syntax, refer to: ", "label-syntax-link": "format reference", "label-syntax-live-preview": "Here is what it will look like: ", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new daily note.", "option-template": "Template file location", "option-template-description": "The file path to use as template.", "option-open-on-start": "Open daily note on startup", "option-open-on-start-description": "Open your daily note automatically whenever you open this vault." }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Random note", "desc": "Opens a random note. Useful for reviewing and discovering.", "short-name": "Random", "action-open": "Open random note" }, "outline": { "name": "Outline", "desc": "Displays the outline of the current file or linked pane.", "action-open": "Open outline", "action-show": "Show outline pane", "action-open-for-current": "Open outline of the current file", "tab-title": "Outline of {{displayText}}", "label-no-headings": "No headings found." }, "word-count": { "name": "عدد الكلمات", "desc": "أظهر عدد الكلمات في شريط الحالة." }, "slides": { "name": "Slides", "desc": "Present from Markdown. Use \"---\" to separate slides.", "action-start": "Start presentation" }, "audio-recorder": { "name": "Audio recorder", "desc": "Record audio and save as attachment.", "action-start": "Start recording audio", "action-stop": "Stop recording audio", "action-toggle": "Start/stop recording", "msg-access-denied": "Microphone access was denied, please enable it from the preference pane.", "msg-pending-grant": "Please grant microphone permission to start recording.", "msg-no-microphone": "No microphone is connected." }, "open-with-default-app": { "name": "Open in default app", "desc": "Add button to open current file in the default app.", "action-open-file": "Open in default app", "action-open-file-mobile": "Share", "action-show-in-folder": "Show in folder", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "Templates", "desc": "Insert template content from a folder of template files.", "action-insert": "Insert template", "action-insert-current-date": "Insert current date", "action-insert-current-time": "Insert current time", "option-template-folder-location": "Template folder location", "option-template-folder-location-description": "Files in this folder will be available as templates.", "option-template-date-format": "Date format", "option-template-date-format-description": "{{date}} in the template file will be replaced with this value.", "option-template-date-format-description2": "You can also use {{date:YYYY-MM-DD}} to override the format once.", "option-template-time-format": "Time format", "option-template-time-format-description": "{{time}} in the template file will be replaced with this value.", "option-template-time-format-description2": "You can also use {{time:HH:mm}} to override the format once.", "instruction-navigate": "to navigate", "instruction-insert": "to insert template", "instruction-dismiss": "to dismiss", "msg-no-templates-found": "No templates found", "msg-fail-invalid-folder": "Failed to list templates. Template folder is invalid.", "msg-fail-folder-not-found": "Failed to list templates. Folder \"{{folderOption}}\" not found.", "prompt-type-template": "Type name of a template..." }, "translucency": { "name": "Translucent window", "desc": "Turn on translucency effect to enhance a sense of depth. Best used with dark mode. Not supported on Linux." }, "slash-command": { "name": "Slash commands", "desc": "Enable the ability to trigger slash commands in the editor by typing the forward slash." }, "editor-status": { "name": "Editor status", "desc": "Adds a status bar item to show and change the current editor mode.", "read": "Reading", "edit-source": "Source mode", "edit-live-preview": "Live Preview" }, "publish": { "name": "Publish", "desc": "Publish your notes through Obsidian Publish.", "action-publish-changes": "Publish changes", "label-no-internet-access": "You need access to the internet to publish changes.", "label-publish-service-description": "Obsidian Publish is an add-on paid service that lets you publish your notes online directly from Obsidian.", "label-please-login": "To start publishing, please log in or create a new Obsidian account.", "label-no-publish-subscription": "You do not have an Obsidian Publish subscription yet.", "button-purchase": "Purchase", "label-manage-sites": "Manage sites", "label-no-sites": "You don't have any sites.", "button-choose": "Choose", "tooltip-edit-site-id": "Edit site ID", "tooltip-delete-site": "Delete site", "label-delete-site-confirmation": "Are you sure you want to delete this site?", "label-delete-site-details": "This will immediately and permanently delete your site.", "label-confirm-delete-site": "Confirm delete site \"{{site}}\"", "option-site-id": "Site ID", "option-site-id-description": "Your site will be at https://publish.obsidian.md/{site id}. You can change this later. Only lower case letters, numbers, and dashes are allowed.", "option-site-id-placeholder": "Pick a site ID", "button-create": "Create", "msg-invalid-site-id": "Site ID can only contain lowercase letters, numbers, and dashes.", "msg-site-id-in-use": "This site ID is in use, please try another one.", "msg-create-site-issue": "That was an issue when creating your site.", "label-site-options": "Site options", "option-site-general": "General", "option-site-components": "Components", "option-site-appearance": "Appearance", "option-site-reading-experience": "Reading experience", "option-site-misc": "Other site settings", "option-site-name": "Site name", "option-site-name-description": "Name of your published site. It will show up in the page title of your site.", "option-site-name-placeholder": "Name of your site", "option-home-page-file": "Homepage file", "option-home-page-file-description": "The first page the user sees when landing on your published site", "option-home-page-file-placeholder": "Pick a published file", "option-logo": "Logo", "option-logo-description": "Pick an image file as your site logo.", "option-logo-placeholder": "Any any uploaded image in your vault...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "Theme", "option-theme-description": "Choose default color scheme for your site.", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "Show navigation", "option-show-navigation-description": "Display a list of all published pages on the left side of your published site.", "option-show-search": "Show search bar", "option-show-search-description": "Display a search bar at top of the navigation that lets the visitors search pages and headings on your site.", "option-show-graph": "Show graph view", "option-show-graph-description": "Display a small local graph on each page.", "option-show-outline": "Show table of contents", "option-show-outline-description": "Display the outline of headings on each page.", "option-show-backlinks": "Show backlinks", "option-show-backlinks-description": "Show backlink section at the end of each page.", "option-sliding-window-mode": "Use sliding windows", "option-sliding-window-mode-description": "Open pages in new panes to the right. Allows scrolling through panes horizontally.", "option-hover-preview-file": "Show hover preview", "option-hover-preview-file-description": "Display page preview when hovering links.", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "Readable line length", "option-readable-line-length-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-site-password": "Passwords", "option-site-password-description": "Restrict access to your site with passwords.", "option-google-analytics": "Google Analytics tracking code", "option-google-analytics-description": "Configure Google Analytics for your site. Only available for visitors from your custom domain URL. Please check with your local laws and regulations first.", "button-manage-passwords": "Manage", "button-save-site-settings": "Save site settings", "msg-updated-options": "Updated options for your site.", "button-go-back": "Back", "label-publishing-to": "Publishing to", "tooltip-switch-site": "Switch site", "button-add-linked": "Add linked", "tooltip-add-linked": "Add all files that are linked by currently selected items", "msg-added-linked-files": "{{count}} linked file has been added.", "msg-added-linked-files_plural": "{{count}} linked files have been added.", "tooltip-open-site-options": "Change site options", "label-no-changes-detected": "No changes were detected.", "label-changed-files-to-be-published": "Changes", "label-unchanged-files-already-published": "Unchanged (select to delete)", "label-file-selected": " selected", "button-select-all-files": "Select all", "button-deselect-all-files": "Deselect all", "label-new-files-to-be-published": "New", "button-publish": "Publish", "msg-no-permission-to-publish-to-site": "You do not have permissions to publish to the current site.", "msg-select-at-least-one-file": "Please select at least one file.", "label-upload-changes": "Upload changes", "button-done": "Done", "button-stop": "Stop", "label-status-uploading": "Uploading", "label-status-to-publish": "To publish", "label-status-to-delete": "To delete", "label-status-published": "Published", "label-status-deleted": "Deleted", "label-status-failed": "Failed", "label-status-cancelled": "Cancelled", "button-change": "Change", "label-clear-cache": "It takes up to a few minutes for the changes to show up on your site. If you do not see your latest changes, try clearing the cache in your browser.", "label-visit-site": "You can visit your site here: ", "msg-something-went-wrong": "Something went wrong. Please check the developer console for details.", "msg-network-error": "A network error occurred. ", "label-manage-passwords": "Manage passwords", "label-add-password": "Add password", "action-new-password": "New password", "label-no-password": "Your site currently does not have any passwords. Anyone can visit it.", "label-have-password": "Your site is password protected. If you have multiple passwords, visitors can access your site by entering any of them.", "option-password-name": "Password", "option-password-desc": "A hash of your password will be stored securely. Once the password is set, it cannot be revealed in plaintext.", "option-password-placeholder": "Your password", "option-nickname-name": "Nickname (optional)", "option-nickname-desc": "Set a nickname to remind yourself what or who the password is for.", "action-add-password": "Add this password", "label-untitled-password": "Untitled password", "label-password-created-time": "Created {{time}}", "msg-added-new-password": "Added new password.", "option-custom-domain": "Custom domain", "option-custom-domain-desc": "Use your own domain rather than the https://publish.obsidian.md/{site id} URL.", "option-noindex": "Disallow search engine indexing", "option-noindex-desc": "Prevent search engines from indexing your site.", "button-configure": "Configure", "label-configure-custom-domain": "Configure custom domain", "option-custom-url-name": "Custom URL", "option-custom-url-desc": "The URL that your site will be located at.", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "Redirect to your custom domain", "option-custom-url-redirect-desc": "Redirect visitors on publish.obsidian.md/id to your custom domain.", "button-update-custom-domain": "Update domain setting", "label-custom-domain-instructions": "Please refer to our {{link}} on our help site for more information.", "label-custom-domain-link-name": "custom domain setup guide", "label-site-usage": "You're using {{site}} out of your {{limit}}.", "button-add-more-sites": "Buy more sites", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "Workspaces", "desc": "Save and load workspace layout.", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "Save", "button-load": "Load", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "Sync", "desc": "Synchronize your files through Obsidian Sync.", "action-view-version-history": "View version history", "label-load-more": "Load more", "label-show-diff": "Show diff", "label-copy-to-clipboard": "Copy to clipboard", "label-restore-this-version": "Restore this version", "msg-already-latest-version": "This version is already the latest version.", "msg-restored-version": "Successfully restored version from {{time}}", "label-file-deleted": "This file was deleted", "label-no-earlier-version": "There was no earlier versions of this file.", "label-empty-file": "فارغ", "label-setting-files": "Setting files", "label-deleted-files": "الملفات المحذوفة", "label-version-history": "Version history", "label-click-to-see-history": "Click on a deleted file to see its history.", "label-create-remote-vault": "Create remote vault", "msg-please-enter-password": "Please enter a password.", "msg-vault-name-cannot-be-empty": "Vault name cannot be empty.", "msg-successfully-created-vault": "Successfully create remote vault \"{{name}}\".", "label-remote-vault-explanation": "Remote vaults securely synchronize your vault between devices.", "option-vault-name": "Vault name", "option-vault-name-desc": "Helps you remember what this vault is for.", "option-vault-name-placeholder": "My awesome vault", "option-use-custom-encryption-password": "Customize end-to-end encryption password", "option-use-custom-encryption-password-desc": "If you turn this off, we will securely manage an encryption key for you.", "option-use-custom-encryption-password-desc-warning": "This option cannot be changed later.", "option-encryption-password": "Encryption password", "option-encryption-password-desc": "This password cannot be changed later.", "option-encryption-password-desc-warning": "If you forget this password, any remote data will remain unusable forever.", "option-encryption-password-desc-2": "This does not affect your local data.", "option-encryption-password-placeholder": "Your password", "label-enter-encryption-password": "Enter encryption password", "button-unlock-vault": "Unlock vault", "msg-verified-password": "Successfully verified your password.", "label-remote-vaults": "Your remote vaults", "label-vault-created-time": "Created {{time}}", "tooltip-delete-remote-vault": "امسح", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "Confirm delete vault", "label-confirm-delete-remote-vault-question": "Are you sure you want to delete this remote vault?", "label-confirm-delete-remote-vault-result": "All data on our server, including version history, will be deleted. Your local files will stay intact.", "label-confirm-delete-remote-vault-warning": "This action is permanent and irreversible.", "msg-remote-vault-deleted": "{{name}} has been deleted.", "button-connect-to-remote-vault": "Connect", "button-disconnect-from-remote-vault": "Disconnect", "label-not-remote-vaults": "You don't have any remote vaults.", "button-create-new-remote-vault": "Create new vault", "label-sync-log": "Sync log", "options-only-show-errors": "Errors only", "options-only-show-errors-desc": "Only show errors and hide other log items.", "button-copy-sync-log": "Copy sync log", "msg-successfully-copied-sync-log": "Successfully copied sync log.", "button-retry": "أعد المحاولة", "button-purchase-subscription": "Purchase", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "اختر", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "Sync status", "option-sync-status-desc-paused": "Obsidian Sync is currently paused.", "option-sync-status-desc-running": "Obsidian Sync is currently running.", "option-device-name": "Device name", "option-device-name-desc": "This name will be displayed in the sync log. Leave empty to use the default name.", "button-resume": "Resume", "button-pause": "Pause", "option-view-deleted-files": "Deleted files", "option-view-deleted-files-desc": "View and restore deleted files.", "option-sync-log": "Sync activity", "option-sync-log-desc": "View recent sync activities for debugging.", "button-view": "عرض", "button-bulk-restore": "Bulk restore", "button-restore-selected-files": "Restore selected files", "msg-restoring": "Restoring...", "msg-restoring-complete": "`Restore complete: {{succeeded}} succeeded and {{failed}} failed.`", "option-over-size": "Vault size over limit", "option-over-size-desc": "Your vault is at {{size}} out of {{limit}}.", "msg-largest-files": "View largest files", "msg-largest-files-desc": "These are the remote files that are taking the most space. After deleting attachments, use the purge button to free up remote vault space.", "button-purge-remote": "Purge", "tooltip-purge-remote": "Permanently purge deleted attachments from remote vault to save space.", "msg-purge-complete": "Purge complete.", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "Selective sync", "option-excluded-folders": "Excluded folders", "option-excluded-folder-desc": "Prevent certain folders from being synced.", "option-currently-excluded-folders": " These folders currently excluded:", "button-manage-excluded-folders": "Manage", "option-sync-image": "Sync images", "option-sync-image-desc": "Sync image files with these extensions: {{extensions}}.", "option-sync-audio": "Sync audio", "option-sync-audio-desc": "Sync audio files with these extensions: {{extensions}}.", "option-sync-video": "Sync videos", "option-sync-video-desc": "Sync video files with these extensions: {{extensions}}.", "option-sync-pdf": "Sync PDFs", "option-sync-pdf-desc": "Sync PDF files.", "option-sync-unsupported": "Sync all other types", "option-sync-unsupported-desc": "Sync unsupported file types.", "option-vault-config-sync": "Vault configuration sync", "option-view-config-files": "Settings version history", "option-view-config-files-desc": "View and restore version history of setting files.", "option-sync-app": "Main settings", "option-sync-app-desc": "Enable to sync editor settings, files & links settings, custom hotkeys, etc.", "option-sync-appearance": "Appearance settings", "option-sync-appearance-desc": "Sync appearance settings like dark mode, active theme, and enabled snippets.", "option-sync-appearance-data": "Themes and snippets", "option-sync-appearance-data-desc": "Sync downloaded themes and snippets. Whether they are enabled depends on the previous setting.", "option-sync-hotkey": "Hotkeys", "option-sync-hotkey-desc": "Sync custom hotkeys.", "option-sync-core-plugin": "Active core plugin list", "option-sync-core-plugin-desc": "Sync which core plugins are enabled.", "option-sync-core-plugin-data": "Core plugin settings", "option-sync-core-plugin-data-desc": "Sync core plugin settings.", "option-sync-community-plugin": "Active community plugin list", "option-sync-community-plugin-desc": "Sync which community plugins are enabled.", "option-sync-community-plugin-data": "Installed community plugins", "option-sync-community-plugin-data-desc": "Sync installed community plugins (.js, .css, and manifest.json files) and their settings.", "label-sync-introduction": "Obsidian Sync is Obsidian's add-on sync service with end-to-end encryption and version history.", "label-account-required": "To start syncing, please log in or create a new Obsidian account.", "button-sign-up": "Sign up", "button-log-in": "Log in", "label-manage-excluded-folders": "Manage excluded folders", "label-number-of-folders-excluded": "{{folders}} are currently excluded from being synced.", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "Setup connection", "label-now-connected-to-vault": "You're now connected to \"{{name}}\".", "button-start-syncing": "Start syncing", "label-confirm-merge-vault": "Confirm Merge Vault", "msg-vault-has-notes": "Your local vault already contains some notes.", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "File recovery", "desc": "Let you restore recent snapshots to recover from accidental data loss. Snapshots are only saved for Markdown files.", "action-open": "Open saved snapshots", "option-interval": "Snapshot interval", "option-interval-description": "Minimal interval in minutes between two snapshots.", "option-keep": "History length", "option-keep-description": "Length in days snapshots is kept for.", "option-open-history": "Snapshots", "option-open-history-description": "View and restore saved snapshots.", "button-view-snapshots": "View", "option-clear": "Clear history", "option-clear-description": "Wipe all snapshots.", "button-clear-history": "Clear", "label-clear-warning": "Are you sure you want to delete all snapshots? Note that only snapshots will be removed. All files inside your vault will not be affected.", "msg-clear-complete": "Snapshots cleared.", "label-no-history-found": "No snapshots found.", "placeholder-choose-file": "Choose a file...", "label-select-file": "Please select a file on the left to view snapshots." }, "note-composer": { "name": "Note composer", "desc": "Merge, split, and refactor notes.", "option-confirm-file-merge": "Confirm file merge", "option-confirm-file-merge-description": "Prompt before merge two files.", "option-split-replacement-text": "Text after extraction", "option-split-replacement-text-description": "What to show in place of the selected text after extracting it.", "option-choice-split-replacement-text-link": "Link to new file", "option-choice-split-replacement-text-embed": "Embed new file", "option-choice-split-replacement-text-none": "None", "option-template-file": "Template file location", "option-template-file-description": "Template file to use when merging or extracting. Available variables: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Merge current file with another file...", "action-merge-file": "Merge entire file with...", "label-no-files": "No files found.", "instruction-navigate": "to navigate", "instruction-merge": "to merge", "instruction-create-new": "to create new", "instruction-merge-at-top": "to merge at top", "instruction-dismiss": "to dismiss", "prompt-select-file-to-merge": "Select file to merge into...", "label-merge-file": "Merge file", "label-confirm-file-merge": "Are you sure you want to merge \"{{file}}\" into \"{{destination}}\"? \"{{file}}\" will be deleted.", "button-merge": "Merge", "button-merge-do-not-ask-again": "Merge and don't ask again", "command-split-file": "Extract current selection...", "command-extract-heading": "Extract this heading...", "instruction-append": "to move to bottom", "instruction-prepend": "to move to top", "msg-fail-to-fetch-template": "Failed to fetch template file: \"{{template}}\" not found.", "msg-fail-to-find-heading": "Failed to find heading" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} كلمة", "word-with-count_plural": "{{count}} كلمات", "character-with-count": "{{count}} حرف", "character-with-count_plural": "{{count}} أحرف", "link-with-count": "{{count}} رابط", "link-with-count_plural": "{{count}} روابط", "file-with-count": "{{count}} ملف", "file-with-count_plural": "{{count}} ملفات", "folder-with-count": "{{count}} مجلد", "folder-with-count_plural": "{{count}} مجلدات", "backlink-with-count": "{{count}} رابط خلفي", "backlink-with-count_plural": "{{count}} روابط خلفية", "site-with-count": "{{count}} موقع", "site-with-count_plural": "{{count}} مواقع", "plugin-with-count": "{{count}} إضافة", "plugin-with-count_plural": "{{count}} إضافات", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } }{ "setting": { "options": "Options", "plugin": "Plugin", "builtin-plugins": "Core plugins", "plugin-options": "Plugin options", "folder-path-example-placeholder": "Example: folder 1/folder 2", "file-path-example-placeholder": "Example: folder/note", "msg-restart-required": "Changing this option requires a restart to take effect.", "editor": { "name": "Editor", "section-general": "General", "section-behavior": "Behavior", "section-display": "Display", "option-spellcheck": "Spell check", "option-spellcheck-description": "Turns on the spell checker. Currently only works for English (US).", "spellcheck-languages": "Spellcheck languages", "spellcheck-languages-description": "Choose the languages for the spellchecker to use.", "spellcheck-languages-mac-description": "The native spellchecker will automatically detect the language being used for you on macOS.", "spellcheck-dict": "Spellcheck dictionary", "spellcheck-dict-empty": "The spellcheck dictionary is empty.", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "Readable line length", "option-readable-line-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-strict-line-break": "Strict line breaks", "option-strict-line-break-description": "In preview mode, ignore single line breaks according to the Markdown specs. Turn this off for single line breaks to show in preview.", "option-show-frontmatter": "Show frontmatter", "option-show-frontmatter-description": "In preview mode, show frontmatter as a code block. Turn off to hide frontmatter section.", "option-auto-pair-brackets": "Auto pair brackets", "option-auto-pair-brackets-description": "Pair brackets and quotes automatically.", "option-auto-pair-markdown": "Auto pair Markdown syntax", "option-auto-pair-markdown-description": "Pair symbols automatically for bold, italics, highlight, strikethrough, and code.", "option-smart-indent-lists": "Smart indent lists", "option-smart-indent-lists-description": "Take care of indentation and list marker for you.", "option-fold-heading": "Fold heading", "option-fold-heading-description": "Let you fold everything under a heading.", "option-fold-indent": "Fold indent", "option-fold-indent-description": "Let you fold a portion of the same indentation, such as lists.", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Editing view", "option-default-new-tab-view-reading": "Reading view", "option-default-editing-mode": "Default editing mode", "option-default-editing-mode-description": "The default editing mode a new pane will start with.", "option-default-editing-mode-source": "Source mode", "option-default-editing-mode-live-preview": "Live Preview", "option-show-line-number": "Show line number", "option-show-line-number-description": "Show line number in the gutter.", "option-indentation-guide": "Show indentation guides", "option-indentation-guide-description": "Show vertical relationship lines between bullet points for visual guidance.", "option-use-tabs": "Use tabs", "option-use-tabs-description": "Use tabs to indent when pressing the \"Tab\" key. Set this to off to use spaces.", "option-tab-size": "Tab size", "option-tab-size-description": "Number of spaces a tab is equivalent to.", "option-rtl": "Right-to-left (RTL)", "option-rtl-description": "Sets the text direction of notes to display in right-to-left.", "option-auto-convert-html": "Auto convert HTML", "option-auto-convert-html-description": "Automatically convert HTML to Markdown when pasting and drag-and-drop from webpages. Use Ctrl/Cmd+Shift+V to paste without conversion.", "option-vim-key-bindings": "Vim key bindings", "option-vim-key-bindings-description": "Let you use Vim key bindings in the source editor.", "option-vim-key-bindings-mobile": "On mobile devices, this setting is per-device and is not synchronized through the config file.", "option-emacsy-keys": "Legacy Emacs-style key bindings for macOS", "option-emacsy-keys-description": "Allows you to use the additional Emacs-style navigation keys, which are standard on macOS, but may interfere with some key operations.", "label-confirm-enable-vim": "Confirm entering Vim mode", "label-vim-warning": "Vim mode is for efficient text editing but can be quite counter-intuitive. If you're not familiar with Vim, this option might make it look like Obsidian has stopped working.", "label-vim-test": "To verify that you know your way around Vim, please enter the command to quit Vim without saving below:", "label-vim-your-answer": "Your answer", "placeholder-enter-command": "Enter command...", "button-confirm-enable-vim": "Let me enable Vim", "msg-vim-mode-enabled": "Command is correct. Vim mode now enabled.", "msg-vim-mode-not-enabled": "Command is incorrect. Vim mode remains disabled to protect you.", "msg-vim-mode-please-enter-command": "Please enter the command to enable Vim mode", "option-legacy-editor": "Use legacy editor", "option-legacy-editor-description2": "The legacy editor will be deprecated soon. It is currently no longer maintained, and as such, bugs will no longer be addressed.", "label-legacy-deprecation": "New editor is here", "label-legacy-deprecation-1": "Obsidian now has a brand new editor that's more robust and accessible.", "label-legacy-deprecation-2": "It seems you're still using the legacy editor, and we think you'll enjoy the new editor.", "label-legacy-deprecation-choice": "Which mode would you like to use?", "label-live-preview-description": "A more modern, what-you-see-is-what-you-get experience.", "label-source-mode-description": "See raw Markdown with syntax highlighting.", "button-start-new-editor": "Start new editor" }, "file": { "name": "Files & Links", "option-confirm-file-deletion": "Confirm file deletion", "option-confirm-file-deletion-description": "Whether you want to get prompted to confirm file deletion.", "option-delete-destination": "Deleted files", "option-delete-destination-description": "What to do with files after you delete them.", "option-choice-system-trash": "Move to system trash", "option-choice-vault-trash": "Move to Obsidian trash (.trash folder)", "option-choice-permanent-delete": "Permanent delete", "option-always-update-links": "Always update internal links", "option-always-update-links-description": "Whether to automatically update links after renaming a file or prompt.", "option-new-note-location": "New note default location", "option-new-note-location-description": "Where to put newly created notes. Plugin settings will override this.", "option-choice-vault-root": "Vault root", "option-choice-current-folder": "Same folder as the file is in", "option-choice-specified-folder": "In the folder specified below", "option-new-file-folder-path": "Folder to create new notes in", "option-new-file-folder-path-description": "Newly created notes will appear under this folder. Plugin settings will override this.", "option-use-wiki-links": "Use [[Wikilinks]]", "option-use-wiki-links-description": "Auto-generate Wikilinks for [[links]] and ![[images]] instead of Markdown links and images. Disable this option to generate Markdown links instead.", "option-show-unsupported-files": "Detect all file extensions", "option-show-unsupported-files-description": "Show files with any extension even if Obsidian can't open them natively, so that you can link to them and see them in File Explorer and Quick Switcher.", "option-link-autocompleted-format": "New link format", "option-link-autocompleted-format-description": "What links to insert when auto generating internal links.", "option-choice-shortest-linktext": "Shortest path when possible", "option-choice-relative-path": "Relative path to file", "option-choice-absolute-path": "Absolute path in vault", "option-new-attachment-location": "Default location for new attachments", "option-new-attachment-location-description": "Where newly added attachments are placed.", "option-choice-subdirectory": "In subfolder under current folder", "option-attachment-folder-path": "Attachment folder path", "option-attachment-folder-path-description": "Newly created attachment files will appear here. That includes images created via drag and drop or pasting, and audio recordings.", "option-attachment-subfolder-path": "Subfolder name", "option-attachment-subfolder-path-description": "If your file is under \"vault/folder\", and your set subfolder name to \"attachments\", attachments will be saved to \"vault/folder/attachments\".", "option-attachment-subfolder-path-placeholder": "attachments", "option-excluded-files": "Excluded files", "option-excluded-files-desc": "Excluded files will be either hidden or less noticeable in various places, such as Quick Switcher, link suggestion, and Graph View.", "label-no-excluded-filters-applied": "No excluded filter is applied right now. Add one below.", "label-excluded-filters-applied": "Files matching the following filters are currently excluded:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Enter path or \"/regex/\"..." }, "appearance": { "name": "Appearance", "option-base-theme": "Base theme", "option-base-theme-description": "Choose Obsidian’s default color scheme.", "option-accent-color": "Accent color", "option-accent-color-description": "Choose the accent color used throughout the app.", "dark-theme": "Dark", "light-theme": "Light", "system-theme": "Adapt to system", "option-font": "Font", "option-advanced": "Advanced", "option-interface-font": "Interface font", "option-interface-font-description": "Set base font for all of Obsidian.", "option-text-font": "Text font", "option-text-font-description": "Set font for editing and reading views.", "option-monospace-font": "Monospace font", "option-monospace-font-description": "Set font for places like code blocks and frontmatter.", "label-single-font-currently-in-effect": " Currently applied font: ", "label-multiple-fonts-currently-in-effect": " The following fonts are currently applied:", "option-font-placeholder": "Enter font name...", "label-no-custom-font-set": "No custom font is applied right now. Add one below.", "label-font-applied": "The first font from this list that is available on your system will be applied.", "msg-font-not-found": "This font is not detected on your system.", "msg-font-found": "This font is detected on your system.", "label-font-name": "Font name", "option-community-themes": "Open community themes", "option-community-themes-description": "Preview and use amazing themes created by the community.", "button-browse-community-themes": "Browse", "option-font-size": "Font size", "option-font-size-description": "Font size in pixels that affects editor and preview.", "option-font-size-action": "Quick font size adjustment", "option-font-size-action-description": "Adjust the font size using Ctrl + Scroll, or using the trackpad pinch-zoom gesture.", "option-themes": "Themes", "option-manage-themes-description": "Manage installed themes and browse community themes.", "option-theme-button-manage": "Manage", "option-choice-none": "None", "option-native-menus": "Native menus", "option-native-menus-desc": "Menus throughout the app will match the operating system. They will not be affected by your theme.", "button-reload-themes": "Reload themes", "msg-reloaded-themes": "Reloaded custom CSS themes.", "button-open-themes-folder": "Open themes folder", "option-css-snippets": "CSS snippets", "label-no-css-snippets-found": "No CSS snippets found in the snippets folder.", "no-snippet-description": "CSS Snippets are stored in \"{{path}}\".", "button-reload-snippets": "Reload snippets", "button-open-snippets-folder": "Open snippets folder", "msg-reloaded-snippets": "Reloaded CSS snippets.", "option-toggle-snippet-description": "Apply CSS snippet at \"{{path}}\".", "label-installed-themes": "Installed themes", "label-screenshot-unavailable": "Screenshot unavailable", "label-default-theme": "Default", "tooltip-click-to-enlarge": "Click to enlarge", "button-update": "Update", "label-currently-selected": "Selected", "option-frame-style": "Window frame style", "option-frame-description": "Determines the styling of the title bar of Obsidian windows. Requires a full restart to take effect.", "option-frame-hidden": "Hidden (default)", "option-frame-obsidian": "Obsidian frame", "option-frame-native": "Native frame", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Show tab title bar", "option-show-view-header-desc": "Display the header at the top of every tab.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "button-check-for-updates": "Check for updates", "button-view-updates": "View updates", "button-update-all-themes": "Update all", "label-current-themes": "Current community themes", "label-currently-installed": "You currently have {{count}} theme installed.", "label-currently-installed_plural": "You currently have {{count}} themes installed." }, "hotkeys": { "name": "Hotkeys", "prompt-filter": "Filter...", "tooltip-delete-hotkey": "Delete hotkey", "label-waiting-for-hotkey-press": "Press hotkey...", "tooltip-restore-default": "Restore default", "tooltip-customize-command": "Customize this command", "tooltip-hotkey-single-conflict": "This hotkey conflicts with \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "This hotkey conflicts with {{count}} other commands", "label-blank-hotkey": "Blank" }, "about": { "name": "About", "label-commercial-license": "Commercial license", "label-license-key": "License key", "license-key-placeholder": "Your license key...", "label-activate-license": "Activate license", "button-activate": "Activate", "label-unknown-version": "Unknown", "label-current-version": "Current version: ", "label-install-version": "(Installer version: {{version}})", "label-up-to-date": "Your app is up to date!", "label-read-changelog": "Read the changelog.", "label-manual-update-required": "To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.", "label-download": "Download", "label-new-version-ready": "A new version is ready to be installed. ", "label-relaunch-to-update": "Relaunch the app to update.", "label-disabled-updates": "Updates are disabled.", "label-checking-for-updates": "Checking for updates...", "button-relaunch": "Relaunch", "button-check-for-updates": "Check for updates", "option-auto-update": "Automatic updates", "option-auto-update-description": "Turn this off to prevent the app from checking for updates.", "option-get-help": "Get help", "option-get-help-description": "Get help on using Obsidian.", "button-open": "Open", "option-language": "Language", "option-language-description": "Change the display language.", "option-insider-build": "Receive insider builds", "option-insider-build-description": "Auto-update to insider builds to try out new features. Note that these builds are bleeding edge and might be less stable.", "option-advanced": "Advanced", "option-hw-acceleration": "Hardware Acceleration", "option-hw-acceleration-description": "Turns on Hardware Acceleration, which uses your GPU to make Obsidian smoother.", "option-hw-acceleration-warning": "If you turn this off, app performance will be severely degraded.", "option-config-location": "Override config folder", "option-config-location-description": "Use a different config folder than the default one. Must start with a dot.", "option-config-location-warning": "Config location must be a valid folder name that starts with a dot.", "label-license": "License", "label-your-commercial-license-key": "Your commercial license key is \"{{key}}\".", "label-commercial-license-info": "Registered to \"{{company}}\" for {{seats}} users. Valid until {{expiry}}.", "label-validating-commercial-license": "Validating...", "label-invalid-commercial-license": "License invalid: ", "button-remove-commercial-license": "Remove", "option-catalyst": "Catalyst license", "option-catalyst-desc": "You currently have the {{tier}} Catalyst license. Thanks for your support!", "option-catalyst-desc-no-license": "You don't have a Catalyst license right now. Catalyst license is a one-time donation to support Obsidian development.", "label-app": "App" }, "account": { "name": "Account", "option-your-account": "Your account", "option-your-account-desc": "You're currently signed in {{name}} ({{email}}).", "option-your-account-desc-no-login": "You're not logged in right now. An account is only needed for Obsidian Sync, Obsidian Publish, and Catalyst insider builds.", "button-manage-settings": "Manage settings", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Commercial license", "option-commercial-license-desc": "If you use Obsidian for commercial purpose, you may need to get a commercial license.", "button-purchase": "Purchase", "button-log-out": "Log out", "label-log-in": "Log in", "label-sign-up": "Sign up", "label-email": "Email", "placeholder-email": "Your email...", "label-password": "Password", "placeholder-password": "Your password...", "button-login": "Login", "message-empty-email": "Email cannot be empty.", "message-invalid-email": "Email is not valid.", "message-empty-password": "Password cannot be empty.", "message-login-failed": "Login failed, please double check your email and password.", "label-no-account": "Don't have an account? ", "link-sign-up-now": "Sign up now" }, "core-plugin": { "plugin-list": "Plugin list", "option-search-plugin": "Search core plugins", "option-search-plugin-description": "Filter plugins by name or description.", "placeholder-search-plugin": "Search plugins..." }, "third-party-plugin": { "name": "Third-party plugin", "option-restricted-mode": "Restricted mode", "option-restricted-mode-description": "Restricted mode is off. Turn on to disable community plugins.", "button-turn-on": "Turn on", "option-browse-community-plugins": "Community plugins", "option-browse-community-plugins-description": "Browse and install third-party plugins made by our amazing community.", "button-browse": "Browse", "label-exit-restricted-mode": "Exit Restricted Mode", "label-exit-restricted-mode-description-1": "Community plugins, like any other software you install, could potentially cause data integrity and security issues.", "label-exit-restricted-mode-description-2": "Plugin security is important to us. Here's what we do:", "label-exit-restricted-mode-description-3": "Despite our efforts, there is still a small chance that a community plugin might misbehave.", "label-code-review": "Initial code review", "label-code-review-desc": "Plugins undergo an initial code review by our team before they appear in the store.", "label-open-source": "Open source", "label-open-source-desc": "Most plugins are open source on GitHub, so you can inspect the code yourself.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We have a large community of developers who watch out for each other.", "label-report-mechanism": "Report mechanism", "label-report-mechanism-desc": "We follow up and remove faulty plugins upon user report.", "label-exit-restricted-mode-disable-confirmation": "Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.", "label-learn-more": "Learn more about plugin security", "button-turn-on-community-plugins": "Turn on community plugins", "label-trust-author": "Do you trust the author of this vault?", "label-trust-author-description-1": "You're opening this vault for the first time, and it comes with some plugins.", "label-trust-author-description-2": "If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.", "label-trust-author-description-3": "If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.", "button-enable-plugins": "Trust author and enable plugins", "button-dont-trust-author": "Browse vault in Restricted Mode", "placeholder-community-plugins": "Search community plugins...", "msg-failed-load-plugins": "Failed to load community plugins.", "label-installed": "Installed", "button-install": "Install", "button-enable": "Enable", "button-disable": "Disable", "button-copy-share-link": "Copy share link", "button-donate": "Donate", "label-no-results-found": "No results found.", "msg-failed-to-load-manifest": "Failed to load plugin manifest.", "label-version": "Version: {{version}}", "label-currently-installed-version": " (currently installed: {{version}})", "label-by-author": "By ", "label-repository": "Repository: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "This plugin does not support your device.", "button-update": "Update", "label-no-readme": "This plugin did not provide a README file.", "msg-installing-plugin": "Installing plugin \"{{name}}\"...", "msg-failed-to-install-plugin": "Failed to install plugin \"{{name}}\".", "msg-successfully-installed-plugin": "Successfully installed plugin \"{{name}}\".", "label-installed-plugins": "Installed plugins", "button-reload-plugins": "Reload plugins", "msg-reloaded-third-party-plugins": "Reloaded third-party plugins.", "label-uninstall": "Uninstall", "label-uninstall-plugin": "Uninstall plugin", "label-uninstall-plugin-confirmation": "Are you sure you want to uninstall this plugin? This will delete the folder of the plugin.", "button-open-plugins-folder": "Open plugins folder", "button-check-for-updates": "Check for updates", "button-update-all-plugins": "Update all", "label-current-plugins": "Current plugins", "label-currently-installed": "You currently have {{count}} plugin installed.", "label-currently-installed_plural": "You currently have {{count}} plugins installed.", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Show a message with how long each plugin took to initialize when starting the app.", "msg-no-updates-found": "No plugin updates found.", "msg-updates-found": "Found {{count}} plugin to update.", "msg-updates-found_plural": "Found {{count}} plugins to update.", "msg-update-plugin": "Update to version {{version}}", "option-search-installed-plugin": "Search installed plugins", "option-search-installed-plugin-description": "Filter installed plugins by name or description.", "placeholder-search-installed-plugin": "Search installed plugins...", "show-installed-only": "Show installed only", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "Showing {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Mobile toolbar", "option-configure-quick-action": "Configure mobile Quick Action", "option-configure-quick-action-description": "Configure which command to trigger when pull down from the top. The current command is set to \"{{command}}\".", "button-configure": "Configure", "placeholder-select-quick-action": "Select Quick Action...", "manage-toolbar-options": "Manage toolbar options", "option-internal-link": "Add internal link", "option-internal-embed": "Add embed", "option-tag": "Add tag", "option-heading": "Toggle heading", "option-strikethrough": "Toggle strikethrough", "option-highlight": "Toggle highlight", "option-code": "Toggle code", "option-blockquote": "Toggle blockquote", "option-markdown-link": "Add Markdown link", "option-bullet-list": "Toggle bullet list", "option-numbered-list": "Toggle numbered list", "option-indent-list": "Indent list item", "option-unindent-list": "Unindent list item", "option-undo": "Undo", "option-redo": "Redo", "option-move-caret-up": "Move caret up", "option-move-caret-down": "Move caret down", "option-move-caret-left": "Move caret left", "option-move-caret-right": "Move caret right", "option-first-line": "Go to first line", "option-last-line": "Go to last line", "option-toggle-keyboard": "Toggle keyboard", "option-configure-toolbar": "Configure mobile toolbar", "option-added-options": "Added options", "option-more-toolbar-options": "More toolbar options", "option-attach": "Insert attachment", "option-add-command": "Add global command", "option-add-command-description": "Select any global command to add to the toolbar." } }, "editor": { "search": { "placeholder-find": "Find", "placeholder-replace": "Replace", "label-previous": "Prev", "label-next": "Next", "label-all": "All", "label-exit-search": "Exit search", "label-replace": "Replace", "label-replace-all": "Replace all" }, "link-suggestion": { "label-type-hash": "Type #", "label-link-heading": "to link heading", "label-type-block": "Type ^", "label-link-block": "to link blocks", "label-type-pipe": "Type |", "label-change-display-text": "to change display text", "label-no-match-found": "No match found" }, "spellcheck": { "no-suggestion": "No suggestions...", "add-to-dictionary": "Add to dictionary" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "No heading", "label-heading-level": "Heading {{level}}" }, "print-modal": { "title": "Export to PDF", "caption": "Export \"{{filename}}\" to PDF with the setting below.", "setting-page-size": "Page size", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Include file name as title", "setting-landscape": "Landscape", "setting-margin": "Margin", "setting-margin-default": "Default", "setting-margin-minimal": "Minimal", "setting-margin-none": "None", "setting-downscale-percent": "Downscale percent", "button-export-to-pdf": "Export to PDF" }, "link-popover": { "tooltip-follow-link": "Follow link", "tooltip-open-link": "Open link", "tooltip-search-tag": "Search tag" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Open in default app", "empty-sidebar": "The sidebar is empty, try dragging a pane here.", "sidebar-expand": "Expand", "sidebar-collapse": "Collapse", "msg-fail-to-save-file": "Failed to save file \"{{filepath}}\". {{message}}.", "no-file": "No file", "msg-file-changed": "\"{{file}}\" has been modified externally, merging changes automatically.", "switch-vault": "Open another vault", "help": "Help", "settings": "Settings", "drag-to-rearrange": "Drag to rearrange", "msg-switched-to-read": "Switched default view mode to reading view.", "msg-switched-to-edit": "Switched default view mode to editor.", "msg-upgrade-installer": "To use this feature, please re-install with latest installer available from our website.", "tooltip-restore-default-settings": "Restore default settings", "label-copy": "Copy to clipboard", "copied_generic": "Copied to your clipboard", "copied": "{{item}} copied to your clipboard", "url": "Url", "msg-open-file-through-uri": "Opened file \"{{path}}\"", "msg-file-not-found-through-uri": "File \"{{name}}\" not found.", "delete-action-short-name": "Delete", "msg-indexing": "Obsidian is indexing your vault...\nThis should only happen once.\nSome functionality may not be available until this is complete.", "msg-indexing-complete": "Indexing complete.", "msg-sandbox-vault": "This is a sandbox vault.\nChanges you make in this vault will be lost.", "label-enter-to-create": "Enter to create", "label-update-available": "Update Available", "label-debug-info": "Debug info", "button-learn-more": "Learn more", "button-not-now": "Not now", "button-add": "Add", "button-manage": "Manage", "label-new-tab": "New tab", "msg-tab-busy": "This tab is currently busy, please try again later", "empty-state": { "no-file-open": "No file is open", "create-new-file": "Create new file", "go-to-file": "Go to file", "see-recent-files": "See recent files", "close": "Close", "unknown-pane-title": "Plugin no longer active", "unknown-pane-desc": "The plugin that created this pane ({{type}}) has gone away" }, "menu": { "edit-view": "Edit (Ctrl/Cmd+Click to edit in new pane)", "read-view": "Current view: reading", "switch-to-edit-view": "Click to edit", "switch-to-read-view": "Click to read", "mod-click-open-new-tab": "{{key}}+Click to open in new tab", "find": "Find...", "replace": "Replace...", "edit": "Edit", "preview": "Preview", "more-options": "More options", "close": "Close", "close-others": "Close others", "close-right": "Close tabs to the right", "pin": "Pin", "unpin": "Unpin", "unlink-tab": "Unlink tab", "link-tab": "Link with tab...", "toggle-source-mode": "Source mode", "toggle-reading-view": "Reading view", "delete-file": "Delete file", "create-file": "Create this file", "open-link": "Open link", "open-in-new-tab": "Open in new tab", "open-to-the-right": "Open to the right", "copy-url": "Copy url", "close-current-tab": "Close current tab", "copy": "Copy", "cut": "Cut", "paste": "Paste", "paste-as-plain-text": "Paste as plain text", "select-all": "Select all", "rename-heading": "Rename this heading...", "rename-blockid": "Rename this block ID...", "open-in-new-window": "Open in new window", "move-to-new-window": "Move to new window", "open-in-browser": "Open in browser", "stack-tabs": "Stack tabs", "unstack-tabs": "Unstack tabs" }, "tooltip": { "click-to-expand": "Click to expand", "click-to-collapse": "Click to collapse", "alias": "Alias", "not-created-yet": "Not created yet, select to create" }, "start-screen": { "label-version": "Version", "option-open-folder-as-vault": "Open folder as vault", "option-open-folder-as-vault-description": "Choose an existing folder of Markdown files.", "option-create-vault": "Create new vault", "option-create-vault-description": "Create a new Obsidian vault under a folder.", "option-connect-obsidian-sync": "Connect to Obsidian Sync", "option-connect-obsidian-sync-description": "Set up a synced vault with existing remote vault.", "option-new-vault-name": "Vault name", "option-new-vault-name-description": "Pick a name for your awesome vault.", "option-new-vault-location": "Location", "option-new-vault-location-description": "Pick a place to put your new vault.", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Reveal vault in system explorer", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "Rename vault...", "msg-error-rename-exists": "There is already a vault with this name.", "msg-error-nested": "Cannot move vault into a subfolder of itself.", "msg-error-rename-open": "Can't rename a currently open vault.", "msg-rename-failed": "Failed to rename vault.", "msg-rename-success": "Successfully renamed vault.", "option-move-vault": "Move vault...", "msg-move-select-dest": "Select destination folder", "msg-error-move-exists": "There is already a vault at the destination.", "msg-error-move-open": "Can't move a currently open vault.", "msg-move-failed": "Failed to move vault.", "msg-move-success": "Successfully moved vault.", "option-remove": "Remove from list", "button-quick-start": "Quick start", "button-open": "Open", "button-browse": "Browse", "button-connect": "Connect", "button-create-vault": "Create", "button-back": "Back", "msg-empty-vault-name": "Vault name cannot be empty.", "msg-invalid-folder": "Please pick a valid folder.", "msg-failed-to-create-vault": "Failed to create vault.", "msg-failed-to-create-vault-at-location": "Could not create vault at the given location. Please double check the location and permission.", "msg-error-failed-to-open-vault": "Failed to open.", "msg-error-remove-current-open-vault": "Can't remove a currently open vault.", "option-get-help": "Get Help", "option-user-email": "Email", "placeholder-your-email": "Your email...", "option-user-password": "Password", "placeholder-your-password": "Your password...", "button-sign-in": "Sign in", "button-setup": "Setup", "option-connect-vault-desc": "Create a synced vault on this device.", "tooltip-own-vault": "This is a remote vault owned by you.", "tooltip-shared-vault": "This is a remote vault shared with you." }, "drag-and-drop": { "insert-link-here": "Insert link here", "insert-links-here": "Insert links here", "move-into-folder": "Move into \"{{folder}}\"", "star-this-file": "Star this file", "star-these-files": "Star these files", "open-in-this-tab": "Open in this tab", "open-as-tab": "Open as new tab" }, "window": { "maximize": "Maximize", "minimize": "Minimize", "restore-down": "Restore down", "close-window": "Close window", "go-back": "Go back", "go-forward": "Go forward" }, "start-up": { "loading-obsidian": "Loading Obsidian...", "obsidian-load-error": "An error occurred while loading Obsidian.", "button-reload-app": "Reload app", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "Open another vault", "loading-components": "Loading components...", "loading-plugins": "Loading plugins...", "loading-vault": "Loading vault...", "msg-failed-to-load-vault": "Failed to load vault: ", "loading-cache": "Loading cache...", "loading-workspace": "Loading workspace..." }, "mobile": { "action-import": "Import into vault", "action-choose-file-to-insert": "Choose a file to insert", "action-insert-text-into-file": "Insert text into {{filename}}", "action-insert-link-into-file": "Insert link into {{filename}}", "msg-importing": "Importing...", "msg-import-success": "Import success", "msg-failed-to-import-file": "Failed to import file {{filename}}", "msg-back-again-to-exit": "Press back again to exit." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "Save current file", "follow-cursor-link": "Follow link under cursor", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "Toggle pin", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "Navigate back", "navigate-forward": "Navigate forward", "use-dark-mode": "Use dark mode", "use-light-mode": "Use light mode", "change-theme": "Change theme", "search-current-file": "Search current file", "search-replace-current-file": "Search & replace in current file", "open-settings": "Open settings", "open-help": "Open help", "toggle-edit": "Toggle editing/reading view", "toggle-source-mode": "Toggle Live Preview/Source mode", "delete-current-file": "Delete current file", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "Toggle left sidebar", "toggle-right-sidebar": "Toggle right sidebar", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "Focus on editor", "toggle-fold": "Toggle fold on the current line", "fold-all": "Fold all headings and lists", "unfold-all": "Unfold all headings and lists", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "Swap line up", "swap-line-down": "Swap line down", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "Toggle bold for selection", "toggle-italics": "Toggle italics for selection", "toggle-highlight": "Toggle highlight for selection", "toggle-comments": "Toggle comments for selection", "insert-link": "Insert link", "toggle-spellcheck": "Toggle spellcheck", "delete-paragraph": "Delete paragraph", "toggle-checklist": "Toggle checklist status", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "Edit file title", "copy-path": "Copy file path", "copy-url": "Copy obsidian url", "export-pdf": "Export to PDF", "reload": "Reload app without saving", "undo-close-tab": "Undo close tab", "context-menu": "Show context menu under cursor", "show-debug-info": "Show debug info", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "Toggle edit/preview mode", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "This will affect {{links}} in {{files}}.", "msg-updated-links": "Updated {{links}} in {{files}}.", "label-update-links": "Update links", "label-confirm-update-link-to-file": "Do you want to update internal links that link to this file?", "button-always-update": "Always update", "button-just-once": "Just once", "button-do-not-update": "Do not update", "label-confirm-deletion": "Are you sure you want to delete \"{{filename}}\"?", "label-move-to-system-trash": "It will be moved to your system trash.", "label-move-to-vault-trash": "It will be moved to your Obsidian trash, which is located in the \".trash\" hidden folder in your vault.", "label-permanent-delete": "The file will be permanent deleted.", "label-non-empty-folder": "This folder is not empty.", "label-delete-folder-warning": "If you continue, all files inside this folder will be deleted.", "label-delete-folder": "Delete folder", "button-delete": "Delete", "button-delete-do-not-ask-again": "Delete and don't ask again", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "There are currently {{links}} pointing to this note.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "Delete file", "button-manage": "Manage", "button-cancel": "Cancel", "button-done": "Done", "button-save": "Save", "button-stop": "Stop", "button-continue": "Continue", "preparing-pdf": "Preparing PDF...", "label-rename-file": "Rename file", "label-new-name": "New name", "msg-rename-success": "Successfully renamed file.", "label-rename-heading": "Rename heading", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "Plugins", "file-explorer": { "name": "File explorer", "desc": "See all the files in your vault.", "action-open": "Open file explorer", "action-show": "Show file explorer", "action-create-note": "Create new note", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "New note", "action-new-folder": "New folder", "action-change-sort": "Change sort order", "action-reveal-file": "Reveal file in file explorer", "action-reveal-active-file": "Reveal active file in file explorer", "command-move-file": "Move file to another folder", "action-move-file": "Move file to...", "action-move-folder": "Move folder to...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "Type a folder", "label-no-folders": "No folders found.", "instruction-navigate": "to navigate", "instruction-move": "to move", "instruction-dismiss": "to dismiss", "label-sort-a-to-z": "Sort by file name (A to Z)", "label-sort-z-to-a": "Sort by file name (Z to A)", "label-sort-new-to-old": "Sort by edit time (new to old)", "label-sort-old-to-new": "Sort by edit time (old to new)", "label-sort-created-old-to-new": "Created time (old to new)", "label-sort-created-new-to-old": "Created time (new to old)", "menu-opt-new-note": "New note", "menu-opt-new-folder": "New folder", "menu-opt-set-attachment-folder": "Set as attachment folder", "menu-opt-rename": "Rename", "menu-opt-delete": "Delete", "menu-opt-make-copy": "Make a copy", "msg-invalid-characters": "File name cannot contain any of the following characters: ", "msg-unsafe-characters": "Links will not work with file names containing any of these characters: ", "msg-file-already-exists": "There's already a file with the same name", "msg-empty-file-name": "File name cannot be empty.", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "Last modified at {{time}}", "tooltip-created-time": "Created at {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Move", "label-untitled-file": "Untitled", "label-untitled-folder": "Untitled", "msg-set-attachment-folder": "Attachments will be saved to \"{{path}}\" from now on." }, "search": { "name": "Search", "desc": "Search for keyword in all the notes.", "action-open-search": "Search in all files", "label-collapse-results": "Collapse results", "label-match-case": "Match case", "label-explain-search-term": "Explain search term", "label-more-context": "Show more context", "prompt-start-search": "Type to start search...", "label-match-text": "Matches text: ", "label-match-regex": "Matches regex: ", "label-match-exact-text": "Contains exact text: ", "label-match-all": "Match all of: ", "label-match-any": "Match any of: ", "label-excluding": "Excluding: ", "label-case-sensitive": "Case sensitive", "label-case-insensitive": "Case insensitive", "label-match-file-path": "Match file path: ", "label-match-file-name": "Match file name: ", "label-match-content": "Match file content: ", "label-match-task": "Match task: ", "label-match-task-todo": "Match task (todo): ", "label-match-task-done": "Match task (done): ", "label-match-line": "Match line: ", "label-match-block": "Match block: ", "label-match-section": "Match section: ", "label-match-tag": "Match tag: ", "label-no-matches": "No matches found.", "matches-with-count": "... and {{count}} more match.", "matches-with-count_plural": "... and {{count}} more matches.", "label-copy-search-results": "Copy search results", "button-copy-results": "Copy results", "msg-successfully-copied": "Results copied to your clipboard.", "option-show-path": "Show path", "option-show-path-description": "Display full path of the file rather than just the file name.", "option-link-style": "Link style", "option-link-style-description": "Optionally turn each file result in to a link.", "option-choice-link-style-none": "None", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Markdown link", "option-list-prefix": "List prefix", "option-list-prefix-description": "Optionally add a list item prefix to each file result.", "option-choice-list-style-none": "None", "option-choice-list-style-dash": "Dash (-)", "option-choice-list-style-asterisk": "Asterisk (*)", "option-choice-list-style-numbered": "Numbered", "tooltip-clear-search": "Clear search", "label-search-options": "Search options", "tooltip-read-more": "Read more", "label-history": "History", "tooltip-clear-history": "Clear search history", "label-path-option-description": "match path of the file", "label-file-name-option-description": "match file name", "label-tag-option-description": "search for tags", "label-line-option-description": "search keywords on same line", "label-section-option-description": "search keywords under same heading", "menu-opt-search-for": "Search for \"{{keyword}}\"" }, "quick-switcher": { "name": "Quick switcher", "desc": "Jump to any files without leaving your keyboard. Ctrl/Cmd+O to activate.", "short-name": "Switcher", "action-open": "Open quick switcher", "instruction-navigate": "to navigate", "instruction-open": "to open", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "to create", "instruction-dismiss": "to dismiss", "label-no-note-create-new": "No notes found. Enter to create a new one.", "prompt-type-file-name": "Type file to switch to or create...", "label-enter-to-create": "Enter to create", "tooltip-not-created-yet": "Not created yet, select to create", "option-show-existing-only": "Show existing only", "option-show-existing-only-description": "Whether to show links to files that are not yet created.", "option-show-attachments": "Show attachments", "option-show-attachments-desc": "Show attachment files like images, videos, and PDFs.", "option-show-all-file-types": "Show all file types", "option-show-all-file-types-desc": "Show all files including ones that Obsidian can't open. The file will be opened with the default app for that file type." }, "graph-view": { "name": "Graph view", "desc": "See a graph overview of which notes link to which.", "action-open": "Open graph view", "action-open-local": "Open local graph", "action-copy-screenshot": "Copy screenshot", "tab-title": "Graph of {{displayText}}", "label-filters": "Filters", "prompt-filter-nodes": "Search files...", "option-depth": "Depth", "option-depth-description": "Show nodes this number of links away", "option-neighbor-links": "Neighbor links", "option-neighbor-links-description": "Show links between neighbors.", "option-forelinks": "Outgoing links", "option-forelinks-description": "Show links to other files", "option-backlinks": "Incoming links", "option-backlinks-description": "Show links from other files", "option-show-tags": "Tags", "option-show-tags-description": "Tags are linked to the files that contain them", "option-show-attachments": "Attachments", "option-show-attachments-description": "Show attachments included by files", "option-show-existing-files-only": "Existing files only", "option-show-existing-files-only-description": "When checked, links to nonexistent files are not shown", "option-show-orphans": "Orphans", "option-show-orphans-description": "Show files that are not linked to any other file", "label-display": "Display", "option-show-arrows": "Arrows", "option-show-arrows-description": "Show arrows when zoomed in", "option-text-fade": "Text fade threshold", "option-node-size": "Node size", "option-link-thickness": "Link thickness", "label-forces": "Forces", "option-center-force": "Center force", "option-link-force": "Link force", "option-link-distance": "Link distance", "option-repel-force": "Repel force", "tooltip-open-graph-settings": "Open graph settings", "msg-screenshot-copied": "Screenshot copied to the clipboard.", "label-groups": "Groups", "placeholder-enter-query": "Enter query...", "tooltip-delete-graph": "Delete group", "button-new-group": "New group", "tooltip-click-to-change-drag-to-reorder": "Click to change color\nDrag to reorder groups", "action-timelapse": "Start graph timelapse animation", "tooltip-start-timelapse-animation": "Start timelapse animation", "button-animate-timelapse": "Animate" }, "backlinks": { "name": "Backlinks", "desc": "Show number of backlinks in the status bar.", "action-open": "Open backlinks", "action-show": "Show backlinks pane", "action-open-for-current": "Open backlinks for the current file", "action-toggle-backlinks-in-document": "Toggle backlinks in document", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "Linked mentions", "label-no-backlinks": "No backlinks found.", "label-unlinked-mentions": "Unlinked mentions", "label-show-search": "Show search filter", "label-link-button-text": "Link", "tab-title": "Backlinks for {{displayText}}", "label-no-unlinked-mentions": "No unlinked mentions found.", "ellipsis": "...", "option-backlink-in-document": "Backlink in document", "option-backlink-in-document-desc": "Show backlinks in document by default when opening new panes." }, "outgoing-links": { "name": "Outgoing Links", "desc": "Show outgoing links and detect unlinked mentions of other notes in the current note.", "action-open": "Open outgoing links", "action-show": "Show outgoing links pane", "action-open-for-current": "Open outgoing links for the current file", "tab-title": "Outgoing links from {{displayText}}", "label-links": "Links", "label-no-links": "No links found.", "label-unlinked-mentions": "Unlinked mentions", "tooltip-link-file": "Link this file", "tooltip-not-created": "Not created yet" }, "tag-pane": { "name": "Tag pane", "desc": "Displays all your tags and along with their number of occurrences.", "action-show": "Show tag pane", "label-no-tags": "No tags found.", "label-sort-by-name-a-to-z": "Tag name (A to Z)", "label-sort-by-name-z-to-a": "Tag name (Z to A)", "label-sort-by-frequency-high-to-low": "Frequency (high to low)", "label-sort-by-frequency-low-to-high": "Frequency (low to high)", "action-show-nested-tags": "Show nested tags", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "Page preview", "desc": "Preview a note when hovering an internal link. Ctrl/Cmd + hover in editor mode.", "label-empty-note": "\"{{linktext}}\" is not created yet. Click to create.", "label-source-editor": "Editor", "label-source-preview": "Preview", "label-source-search": "Search, Backlinks, and Outgoing links", "label-require-mod": "Require {{key}} to trigger page preview on hover" }, "starred": { "name": "Starred", "desc": "Star frequently used files and searches.", "action-show": "Show starred pane", "action-toggle": "Star/unstar current file", "action-toggle-search": "Star/unstar current search", "action-star": "Star", "action-unstar": "Unstar", "menu-opt-remove": "Remove", "msg-successfully-starred": "Successfully starred {{type}} \"{{title}}\".", "msg-removed-starred": "Removed starred {{type}} \"{{title}}\".", "msg-cannot-find-path": "Cannot find file at \"{{path}}\"." }, "custom-css": { "name": "Custom CSS", "desc": "Reads \"obsidian.css\" in the vault and applies it.", "setting-community-themes": "Community themes", "msg-fetching-themes": "Fetching community theme data...", "prompt-filter": "Filter...", "label-dark-theme-only": "Dark themes only", "label-light-theme-only": "Light themes only", "label-use": "Use", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "Update", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "Remove theme", "label-visit-on-github": "Visit on GitHub", "msg-load-error": "Could not load community themes, please check your network.", "msg-now-using-theme": "You're now using {{title}} as your CSS theme.", "msg-deleted-theme": "The theme {{title}} has been deleted.", "msg-updated-theme": "The theme {{title}} has been updated.", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "Command palette", "desc": "Type a command to invoke it. No need to use the UI or remember the shortcut.", "action-open": "Open command palette", "instruction-navigate": "to navigate", "instruction-use": "to use", "instruction-dismiss": "to dismiss", "label-no-commands": "No commands found.", "prompt-type-command": "Type a command...", "label-pinned-commands": "Pinned commands", "option-add-new-pin": "New pinned command", "option-add-new-pin-description": "Pinned commands will appear at the top of all commands when no search query is present." }, "markdown-format-importer": { "name": "Markdown format importer", "desc": "Convert Markdown from other apps to Obsidian format.", "action-open": "Open Markdown importer", "option-roam-tag-fixer": "Roam Research tag fixer", "option-roam-tag-fixer-description": "Converts \"#tag\" and \"#[[tag]]\" to \"[[tag]]\".", "option-roam-highlight-fixer": "Roam Research highlight fixer", "option-roam-highlight-fixer-description": "Converts \"^^highlight^^\" to \"==highlight==\".", "option-roam-todo-converter": "Roam Research TODO converter", "option-roam-todo-converter-description": "Converts \"{{[[TODO]]}}\" to \"[ ]\".", "option-bear-highlight-fixer": "Bear highlight fixer", "option-bear-highlight-fixer-description": "Converts \"::highlight::\" to \"==highlight==\".", "zettelkasten-link-fixer": "Zettelkasten link fixer", "zettelkasten-link-fixer-description": "Fixes \"[[UID]]\" links to full \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Zettelkasten link beautifier", "zettelkasten-link-beautifier-description": "Fixes \"[[UID]]\" links and also beautify them \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Warning: the importer will convert all the files in your vault, not just the current file.", "msg-override-files-warning": "Your files will be overwritten. Back up all your files before attempting conversion.", "label-start-conversion": "Start Conversion", "label-stop": "Stop", "label-go-back": "Go back", "label-done": "Done", "label-processing": "Processing...", "label-cancelling": "Cancelling...", "label-finished": "Finished!", "label-processed-files": "Processed files", "label-modified-files": "Modified files", "label-total-replacements": "Total replacements" }, "daily-notes": { "name": "Daily notes", "desc": "Open today's daily note, or create one if not present.", "short-name": "Today", "action-open": "Open today's note", "action-open-previous": "Open previous daily note", "action-open-next": "Open next daily note", "action-insert-text": "Insert text into daily note", "action-insert-link": "Insert link into daily note", "msg-fail-format": "Failed to create daily note. \"{{format}}\" is not a valid format.", "msg-fail-folder": "Failed to create daily note. Folder \"{{folderOption}}\" not found.", "msg-fail-template-file": "Failed to create daily note. Template file \"{{template}}\" not found.", "msg-no-previous": "There's no daily note before this one.", "msg-no-next": "There's no daily note after this one.", "option-date-format": "Date format", "label-refer-to-syntax": "For more syntax, refer to: ", "label-syntax-link": "format reference", "label-syntax-live-preview": "Here is what it will look like: ", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new daily note.", "option-template": "Template file location", "option-template-description": "The file path to use as template.", "option-open-on-start": "Open daily note on startup", "option-open-on-start-description": "Open your daily note automatically whenever you open this vault." }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Random note", "desc": "Opens a random note. Useful for reviewing and discovering.", "short-name": "Random", "action-open": "Open random note" }, "outline": { "name": "Outline", "desc": "Displays the outline of the current file or linked pane.", "action-open": "Open outline", "action-show": "Show outline pane", "action-open-for-current": "Open outline of the current file", "tab-title": "Outline of {{displayText}}", "label-no-headings": "No headings found." }, "word-count": { "name": "Word count", "desc": "Show word count in the status bar." }, "slides": { "name": "Slides", "desc": "Present from Markdown. Use \"---\" to separate slides.", "action-start": "Start presentation" }, "audio-recorder": { "name": "Audio recorder", "desc": "Record audio and save as attachment.", "action-start": "Start recording audio", "action-stop": "Stop recording audio", "action-toggle": "Start/stop recording", "msg-access-denied": "Microphone access was denied, please enable it from the preference pane.", "msg-pending-grant": "Please grant microphone permission to start recording.", "msg-no-microphone": "No microphone is connected." }, "open-with-default-app": { "name": "Open in default app", "desc": "Add button to open current file in the default app.", "action-open-file": "Open in default app", "action-open-file-mobile": "Share", "action-show-in-folder": "Show in folder", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "Templates", "desc": "Insert template content from a folder of template files.", "action-insert": "Insert template", "action-insert-current-date": "Insert current date", "action-insert-current-time": "Insert current time", "option-template-folder-location": "Template folder location", "option-template-folder-location-description": "Files in this folder will be available as templates.", "option-template-date-format": "Date format", "option-template-date-format-description": "{{date}} in the template file will be replaced with this value.", "option-template-date-format-description2": "You can also use {{date:YYYY-MM-DD}} to override the format once.", "option-template-time-format": "Time format", "option-template-time-format-description": "{{time}} in the template file will be replaced with this value.", "option-template-time-format-description2": "You can also use {{time:HH:mm}} to override the format once.", "instruction-navigate": "to navigate", "instruction-insert": "to insert template", "instruction-dismiss": "to dismiss", "msg-no-templates-found": "No templates found", "msg-fail-invalid-folder": "Failed to list templates. Template folder is invalid.", "msg-fail-folder-not-found": "Failed to list templates. Folder \"{{folderOption}}\" not found.", "prompt-type-template": "Type name of a template..." }, "translucency": { "name": "Translucent window", "desc": "Turn on translucency effect to enhance a sense of depth. Best used with dark mode. Not supported on Linux." }, "slash-command": { "name": "Slash commands", "desc": "Enable the ability to trigger slash commands in the editor by typing the forward slash." }, "editor-status": { "name": "Editor status", "desc": "Adds a status bar item to show and change the current editor mode.", "read": "Reading", "edit-source": "Source mode", "edit-live-preview": "Live Preview" }, "publish": { "name": "Publish", "desc": "Publish your notes through Obsidian Publish.", "action-publish-changes": "Publish changes...", "label-no-internet-access": "You need access to the internet to publish changes.", "label-publish-service-description": "Obsidian Publish is an add-on paid service that lets you publish your notes online directly from Obsidian.", "label-please-login": "To start publishing, please log in or create a new Obsidian account.", "label-no-publish-subscription": "You do not have an Obsidian Publish subscription yet.", "button-purchase": "Purchase", "label-manage-sites": "Manage sites", "label-no-sites": "You don't have any sites.", "button-choose": "Choose", "tooltip-edit-site-id": "Edit site ID", "tooltip-delete-site": "Delete site", "label-delete-site-confirmation": "Are you sure you want to delete this site?", "label-delete-site-details": "This will immediately and permanently delete your site.", "label-confirm-delete-site": "Confirm delete site \"{{site}}\"", "option-site-id": "Site ID", "option-site-id-description": "Your site will be at https://publish.obsidian.md/{site id}. You can change this later. Only lower case letters, numbers, and dashes are allowed.", "option-site-id-placeholder": "Pick a site ID", "button-create": "Create", "msg-invalid-site-id": "Site ID can only contain lowercase letters, numbers, and dashes.", "msg-site-id-in-use": "This site ID is in use, please try another one.", "msg-create-site-issue": "That was an issue when creating your site.", "label-site-options": "Site options", "option-site-general": "General", "option-site-components": "Components", "option-site-appearance": "Appearance", "option-site-reading-experience": "Reading experience", "option-site-misc": "Other site settings", "option-site-name": "Site name", "option-site-name-description": "Name of your published site. It will show up in the page title of your site.", "option-site-name-placeholder": "Name of your site", "option-home-page-file": "Homepage file", "option-home-page-file-description": "The first page the user sees when landing on your published site", "option-home-page-file-placeholder": "Pick a published file", "option-logo": "Logo", "option-logo-description": "Pick an image file as your site logo.", "option-logo-placeholder": "Any uploaded image in your vault...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "Theme", "option-theme-description": "Choose default color scheme for your site.", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "Show navigation", "option-show-navigation-description": "Display a list of all published pages on the left side of your published site.", "option-show-search": "Show search bar", "option-show-search-description": "Display a search bar at top of the navigation that lets the visitors search pages and headings on your site.", "option-show-graph": "Show graph view", "option-show-graph-description": "Display a small local graph on each page.", "option-show-outline": "Show table of contents", "option-show-outline-description": "Display the outline of headings on each page.", "option-show-backlinks": "Show backlinks", "option-show-backlinks-description": "Show backlink section at the end of each page.", "option-sliding-window-mode": "Use sliding windows", "option-sliding-window-mode-description": "Open pages in new panes to the right. Allows scrolling through panes horizontally.", "option-hover-preview-file": "Show hover preview", "option-hover-preview-file-description": "Display page preview when hovering links.", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "Readable line length", "option-readable-line-length-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-site-password": "Passwords", "option-site-password-description": "Restrict access to your site with passwords.", "option-google-analytics": "Google Analytics tracking code", "option-google-analytics-description": "Configure Google Analytics for your site. Only available for visitors from your custom domain URL. Please check with your local laws and regulations first.", "button-manage-passwords": "Manage", "button-save-site-settings": "Save site settings", "msg-updated-options": "Updated options for your site.", "button-go-back": "Back", "label-publishing-to": "Publishing to", "tooltip-switch-site": "Switch site", "button-add-linked": "Add linked", "tooltip-add-linked": "Add all files that are linked by currently selected items", "msg-added-linked-files": "{{count}} linked file has been added.", "msg-added-linked-files_plural": "{{count}} linked files have been added.", "tooltip-open-site-options": "Change site options", "label-no-changes-detected": "No changes were detected.", "label-changed-files-to-be-published": "Changes", "label-unchanged-files-already-published": "Unchanged (select to delete)", "label-file-selected": " selected", "button-select-all-files": "Select all", "button-deselect-all-files": "Deselect all", "label-new-files-to-be-published": "New", "button-publish": "Publish", "msg-no-permission-to-publish-to-site": "You do not have permissions to publish to the current site.", "msg-select-at-least-one-file": "Please select at least one file.", "label-upload-changes": "Upload changes", "button-done": "Done", "button-stop": "Stop", "label-status-uploading": "Uploading", "label-status-to-publish": "To publish", "label-status-to-delete": "To delete", "label-status-published": "Published", "label-status-deleted": "Deleted", "label-status-failed": "Failed", "label-status-cancelled": "Cancelled", "button-change": "Change", "label-clear-cache": "It takes up to a few minutes for the changes to show up on your site. If you do not see your latest changes, try clearing the cache in your browser.", "label-visit-site": "You can visit your site here: ", "msg-something-went-wrong": "Something went wrong. Please check the developer console for details.", "msg-network-error": "A network error occurred. ", "label-manage-passwords": "Manage passwords", "label-add-password": "Add password", "action-new-password": "New password", "label-no-password": "Your site currently does not have any passwords. Anyone can visit it.", "label-have-password": "Your site is password protected. If you have multiple passwords, visitors can access your site by entering any of them.", "option-password-name": "Password", "option-password-desc": "A hash of your password will be stored securely. Once the password is set, it cannot be revealed in plaintext.", "option-password-placeholder": "Your password", "option-nickname-name": "Nickname (optional)", "option-nickname-desc": "Set a nickname to remind yourself what or who the password is for.", "action-add-password": "Add this password", "label-untitled-password": "Untitled password", "label-password-created-time": "Created {{time}}", "msg-added-new-password": "Added new password.", "option-custom-domain": "Custom domain", "option-custom-domain-desc": "Use your own domain rather than the https://publish.obsidian.md/{site id} URL.", "option-noindex": "Disallow search engine indexing", "option-noindex-desc": "Prevent search engines from indexing your site.", "button-configure": "Configure", "label-configure-custom-domain": "Configure custom domain", "option-custom-url-name": "Custom URL", "option-custom-url-desc": "The URL that your site will be located at.", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "Redirect to your custom domain", "option-custom-url-redirect-desc": "Redirect visitors on publish.obsidian.md/id to your custom domain.", "button-update-custom-domain": "Update domain setting", "label-custom-domain-instructions": "Please refer to our {{link}} on our help site for more information.", "label-custom-domain-link-name": "custom domain setup guide", "label-site-usage": "You're using {{site}} out of your {{limit}}.", "button-add-more-sites": "Buy more sites", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "Workspaces", "desc": "Save and load workspace layout.", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "Save", "button-load": "Load", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "Sync", "desc": "Synchronize your files through Obsidian Sync.", "action-view-version-history": "View version history", "label-load-more": "Load more", "label-show-diff": "Show diff", "label-copy-to-clipboard": "Copy to clipboard", "label-restore-this-version": "Restore this version", "msg-already-latest-version": "This version is already the latest version.", "msg-restored-version": "Successfully restored version from {{time}}", "label-file-deleted": "This file was deleted", "label-no-earlier-version": "There was no earlier versions of this file.", "label-empty-file": "Empty", "label-setting-files": "Setting files", "label-deleted-files": "Deleted files", "label-version-history": "Version history", "label-click-to-see-history": "Click on a deleted file to see its history.", "label-create-remote-vault": "Create remote vault", "msg-please-enter-password": "Please enter a password.", "msg-vault-name-cannot-be-empty": "Vault name cannot be empty.", "msg-successfully-created-vault": "Successfully create remote vault \"{{name}}\".", "label-remote-vault-explanation": "Remote vaults securely synchronize your vault between devices.", "option-vault-name": "Vault name", "option-vault-name-desc": "Helps you remember what this vault is for.", "option-vault-name-placeholder": "My awesome vault", "option-use-custom-encryption-password": "Customize end-to-end encryption password", "option-use-custom-encryption-password-desc": "If you turn this off, we will securely manage an encryption key for you.", "option-use-custom-encryption-password-desc-warning": "This option cannot be changed later.", "option-encryption-password": "Encryption password", "option-encryption-password-desc": "This password cannot be changed later.", "option-encryption-password-desc-warning": "If you forget this password, any remote data will remain unusable forever.", "option-encryption-password-desc-2": "This does not affect your local data.", "option-encryption-password-placeholder": "Your password", "label-enter-encryption-password": "Enter encryption password", "button-unlock-vault": "Unlock vault", "msg-verified-password": "Successfully verified your password.", "label-remote-vaults": "Your remote vaults", "label-vault-created-time": "Created {{time}}", "tooltip-delete-remote-vault": "Delete", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "Confirm delete vault", "label-confirm-delete-remote-vault-question": "Are you sure you want to delete this remote vault?", "label-confirm-delete-remote-vault-result": "All data on our server, including version history, will be deleted. Your local files will stay intact.", "label-confirm-delete-remote-vault-warning": "This action is permanent and irreversible.", "msg-remote-vault-deleted": "{{name}} has been deleted.", "button-connect-to-remote-vault": "Connect", "button-disconnect-from-remote-vault": "Disconnect", "label-not-remote-vaults": "You don't have any remote vaults.", "button-create-new-remote-vault": "Create new vault", "label-sync-log": "Sync log", "options-only-show-errors": "Errors only", "options-only-show-errors-desc": "Only show errors and hide other log items.", "button-copy-sync-log": "Copy sync log", "msg-successfully-copied-sync-log": "Successfully copied sync log.", "button-retry": "Retry", "button-purchase-subscription": "Purchase", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "Choose", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "Sync status", "option-sync-status-desc-paused": "Obsidian Sync is currently paused.", "option-sync-status-desc-running": "Obsidian Sync is currently running.", "option-device-name": "Device name", "option-device-name-desc": "This name will be displayed in the sync log. Leave empty to use the default name.", "button-resume": "Resume", "button-pause": "Pause", "option-view-deleted-files": "Deleted files", "option-view-deleted-files-desc": "View and restore deleted files.", "option-sync-log": "Sync activity", "option-sync-log-desc": "View recent sync activities for debugging.", "button-view": "View", "button-bulk-restore": "Bulk restore", "button-restore-selected-files": "Restore selected files", "msg-restoring": "Restoring...", "msg-restoring-complete": "Restore complete: {{succeeded}} succeeded and {{failed}} failed.", "option-over-size": "Vault size over limit", "option-over-size-desc": "Your vault is at {{size}} out of {{limit}}.", "msg-largest-files": "View largest files", "msg-largest-files-desc": "These are the remote files that are taking the most space. After deleting attachments, use the purge button to free up remote vault space.", "button-purge-remote": "Purge", "tooltip-purge-remote": "Permanently purge deleted attachments from remote vault to save space.", "msg-purge-complete": "Purge complete.", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "Selective sync", "option-excluded-folders": "Excluded folders", "option-excluded-folder-desc": "Prevent certain folders from being synced.", "option-currently-excluded-folders": " These folders currently excluded:", "button-manage-excluded-folders": "Manage", "option-sync-image": "Sync images", "option-sync-image-desc": "Sync image files with these extensions: {{extensions}}.", "option-sync-audio": "Sync audio", "option-sync-audio-desc": "Sync audio files with these extensions: {{extensions}}.", "option-sync-video": "Sync videos", "option-sync-video-desc": "Sync video files with these extensions: {{extensions}}.", "option-sync-pdf": "Sync PDFs", "option-sync-pdf-desc": "Sync PDF files.", "option-sync-unsupported": "Sync all other types", "option-sync-unsupported-desc": "Sync unsupported file types.", "option-vault-config-sync": "Vault configuration sync", "option-view-config-files": "Settings version history", "option-view-config-files-desc": "View and restore version history of setting files.", "option-sync-app": "Main settings", "option-sync-app-desc": "Enable to sync editor settings, files & links settings, custom hotkeys, etc.", "option-sync-appearance": "Appearance settings", "option-sync-appearance-desc": "Sync appearance settings like dark mode, active theme, and enabled snippets.", "option-sync-appearance-data": "Themes and snippets", "option-sync-appearance-data-desc": "Sync downloaded themes and snippets. Whether they are enabled depends on the previous setting.", "option-sync-hotkey": "Hotkeys", "option-sync-hotkey-desc": "Sync custom hotkeys.", "option-sync-core-plugin": "Active core plugin list", "option-sync-core-plugin-desc": "Sync which core plugins are enabled.", "option-sync-core-plugin-data": "Core plugin settings", "option-sync-core-plugin-data-desc": "Sync core plugin settings.", "option-sync-community-plugin": "Active community plugin list", "option-sync-community-plugin-desc": "Sync which community plugins are enabled.", "option-sync-community-plugin-data": "Installed community plugins", "option-sync-community-plugin-data-desc": "Sync installed community plugins (.js, .css, and manifest.json files) and their settings.", "label-sync-introduction": "Obsidian Sync is Obsidian's add-on sync service with end-to-end encryption and version history.", "label-account-required": "To start syncing, please log in or create a new Obsidian account.", "button-sign-up": "Sign up", "button-log-in": "Log in", "label-manage-excluded-folders": "Manage excluded folders", "label-number-of-folders-excluded": "{{folders}} are currently excluded from being synced.", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "Setup connection", "label-now-connected-to-vault": "You're now connected to \"{{name}}\".", "button-start-syncing": "Start syncing", "label-confirm-merge-vault": "Confirm Merge Vault", "msg-vault-has-notes": "Your local vault already contains some notes.", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "File recovery", "desc": "Let you restore recent snapshots to recover from accidental data loss. Snapshots are only saved for Markdown files.", "action-open": "Open saved snapshots", "option-interval": "Snapshot interval", "option-interval-description": "Minimal interval in minutes between two snapshots.", "option-keep": "History length", "option-keep-description": "Length in days snapshots is kept for.", "option-open-history": "Snapshots", "option-open-history-description": "View and restore saved snapshots.", "button-view-snapshots": "View", "option-clear": "Clear history", "option-clear-description": "Wipe all snapshots.", "button-clear-history": "Clear", "label-clear-warning": "Are you sure you want to delete all snapshots? Note that only snapshots will be removed. All files inside your vault will not be affected.", "msg-clear-complete": "Snapshots cleared.", "label-no-history-found": "No snapshots found.", "placeholder-choose-file": "Choose a file...", "label-select-file": "Please select a file on the left to view snapshots." }, "note-composer": { "name": "Note composer", "desc": "Merge, split, and refactor notes.", "option-confirm-file-merge": "Confirm file merge", "option-confirm-file-merge-description": "Prompt before merge two files.", "option-split-replacement-text": "Text after extraction", "option-split-replacement-text-description": "What to show in place of the selected text after extracting it.", "option-choice-split-replacement-text-link": "Link to new file", "option-choice-split-replacement-text-embed": "Embed new file", "option-choice-split-replacement-text-none": "None", "option-template-file": "Template file location", "option-template-file-description": "Template file to use when merging or extracting. Available variables: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Merge current file with another file...", "action-merge-file": "Merge entire file with...", "label-no-files": "No files found.", "instruction-navigate": "to navigate", "instruction-merge": "to merge", "instruction-create-new": "to create new", "instruction-merge-at-top": "to merge at top", "instruction-dismiss": "to dismiss", "prompt-select-file-to-merge": "Select file to merge into...", "label-merge-file": "Merge file", "label-confirm-file-merge": "Are you sure you want to merge \"{{file}}\" into \"{{destination}}\"? \"{{file}}\" will be deleted.", "button-merge": "Merge", "button-merge-do-not-ask-again": "Merge and don't ask again", "command-split-file": "Extract current selection...", "command-extract-heading": "Extract this heading...", "instruction-append": "to move to bottom", "instruction-prepend": "to move to top", "msg-fail-to-fetch-template": "Failed to fetch template file: \"{{template}}\" not found.", "msg-fail-to-find-heading": "Failed to find heading" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} word", "word-with-count_plural": "{{count}} words", "character-with-count": "{{count}} character", "character-with-count_plural": "{{count}} characters", "link-with-count": "{{count}} link", "link-with-count_plural": "{{count}} links", "file-with-count": "{{count}} file", "file-with-count_plural": "{{count}} file", "folder-with-count": "{{count}} folder", "folder-with-count_plural": "{{count}} folders", "backlink-with-count": "{{count}} backlink", "backlink-with-count_plural": "{{count}} backlinks", "site-with-count": "{{count}} site", "site-with-count_plural": "{{count}} sites", "plugin-with-count": "{{count}} plugin", "plugin-with-count_plural": "{{count}} plugins", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } }{ "setting": { "options": "Настойки", "plugin": "Плъгин", "builtin-plugins": "Основни пплъгини", "plugin-options": "Настройки на плъгините", "folder-path-example-placeholder": "Пример: папка 1/папка 2", "file-path-example-placeholder": "Пример: папка/бележка", "msg-restart-required": "Changing this option requires a restart to take effect.", "editor": { "name": "Редактор", "section-general": "General", "section-behavior": "Behavior", "section-display": "Display", "option-spellcheck": "Проверка на правопис", "option-spellcheck-description": "Включва проверката на правописа. В момента работи само за американски английски.", "spellcheck-languages": "Spellcheck languages", "spellcheck-languages-description": "Choose the languages for the spellchecker to use.", "spellcheck-languages-mac-description": "The native spellchecker will automatically detect the language being used for you on macOS.", "spellcheck-dict": "Речник за проверка на правописа", "spellcheck-dict-empty": "Речникът за проверка на правописа е празен", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "Четлива височина на реда", "option-readable-line-description": "Ограничение на височината на реда. Събира по-малко съдържание на екрана, но прави по-дългите параграфи по-лесни за четене.", "option-strict-line-break": "Стриктно прекъсване на реда", "option-strict-line-break-description": "В режим на изглед, ингорира единичните прекъсвания на реда, в зависимост от спецификациите на Markdown. Изключи тази опция, за да се показват единичните прекъсвания на реда в режим на изглед.", "option-show-frontmatter": "Покажи frontmatter", "option-show-frontmatter-description": "В режим на изглед, покажи frontmatter като кодов блок. Turn off to hide frontmatter section.", "option-auto-pair-brackets": "Автоматично затваряне на скоби", "option-auto-pair-brackets-description": "Автоматично затваряне на скоби и кавички.", "option-auto-pair-markdown": "Aвтоматично затваряне на тагове Markdown", "option-auto-pair-markdown-description": "Автоматично затваря тагове за удебелен и курсив стилове.", "option-smart-indent-lists": "Отстъп на списък", "option-smart-indent-lists-description": "Автоматично добавя отстъпи и символи за списъци.", "option-fold-heading": "Свиване на заглавията.", "option-fold-heading-description": "Позволява да се сложи всякакъв текст под заглавие.", "option-fold-indent": "Отстъп на свиването.", "option-fold-indent-description": "Свива текста с равни отстъпи, както при списъците.", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Editing view", "option-default-new-tab-view-reading": "Reading view", "option-default-editing-mode": "Default editing mode", "option-default-editing-mode-description": "The default editing mode a new pane will start with.", "option-default-editing-mode-source": "Source mode", "option-default-editing-mode-live-preview": "Live Preview", "option-show-line-number": "Показване на номера на реда", "option-show-line-number-description": "Добавя номериране на редовете към полетата.", "option-indentation-guide": "Show indentation guides", "option-indentation-guide-description": "Show vertical relationship lines between bullet points for visual guidance.", "option-use-tabs": "Използвай табулации.", "option-use-tabs-description": "Използвайте табулации за отстъпи, когато натиснете \"Tab\" клавиша. Изключете тази опция, за да използвате интервали вместо табулации.", "option-tab-size": "Размер на табулациите.", "option-tab-size-description": "Брой на интервалите, на които е равна една табулация.", "option-rtl": "Right-to-left (RTL)", "option-rtl-description": "Sets the text direction of notes to display in right-to-left.", "option-auto-convert-html": "Auto convert HTML", "option-auto-convert-html-description": "Automatically convert HTML to Markdown when pasting and drag-and-drop from webpages. Use Ctrl/Cmd+Shift+V to paste without conversion.", "option-vim-key-bindings": "Vim key bindings", "option-vim-key-bindings-description": "Let you use Vim key bindings in the source editor.", "option-vim-key-bindings-mobile": "On mobile devices, this setting is per-device and is not synchronized through the config file.", "option-emacsy-keys": "Legacy Emacs-style key bindings for macOS", "option-emacsy-keys-description": "Allows you to use the additional Emacs-style navigation keys, which are standard on macOS, but may interfere with some key operations.", "label-confirm-enable-vim": "Confirm entering Vim mode", "label-vim-warning": "Vim mode is for efficient text editing but can be quite counter-intuitive. If you're not familiar with Vim, this option might make it look like Obsidian has stopped working.", "label-vim-test": "To verify that you know your way around Vim, please enter the command to quit Vim without saving below:", "label-vim-your-answer": "Your answer", "placeholder-enter-command": "Enter command...", "button-confirm-enable-vim": "Let me enable Vim", "msg-vim-mode-enabled": "Command is correct. Vim mode now enabled.", "msg-vim-mode-not-enabled": "Command is incorrect. Vim mode remains disabled to protect you.", "msg-vim-mode-please-enter-command": "Please enter the command to enable Vim mode", "option-legacy-editor": "Use legacy editor", "option-legacy-editor-description2": "The legacy editor will be deprecated soon. It is currently no longer maintained, and as such, bugs will no longer be addressed.", "label-legacy-deprecation": "New editor is here", "label-legacy-deprecation-1": "Obsidian now has a brand new editor that's more robust and accessible.", "label-legacy-deprecation-2": "It seems you're still using the legacy editor, and we think you'll enjoy the new editor.", "label-legacy-deprecation-choice": "Which mode would you like to use?", "label-live-preview-description": "A more modern, what-you-see-is-what-you-get experience.", "label-source-mode-description": "See raw Markdown with syntax highlighting.", "button-start-new-editor": "Start new editor" }, "file": { "name": "Files & Links", "option-confirm-file-deletion": "Confirm file deletion", "option-confirm-file-deletion-description": "Whether you want to get prompted to confirm file deletion.", "option-delete-destination": "Deleted files", "option-delete-destination-description": "What to do with files after you delete them.", "option-choice-system-trash": "Move to system trash", "option-choice-vault-trash": "Move to Obsidian trash (.trash folder)", "option-choice-permanent-delete": "Permanent delete", "option-always-update-links": "Always update internal links", "option-always-update-links-description": "Whether to automatically update links after renaming a file or prompt.", "option-new-note-location": "New note default location", "option-new-note-location-description": "Where to put newly created notes. Plugin settings will override this.", "option-choice-vault-root": "Vault root", "option-choice-current-folder": "Same folder as the file is in", "option-choice-specified-folder": "In the folder specified below", "option-new-file-folder-path": "Folder to create new notes in", "option-new-file-folder-path-description": "Newly created notes will appear under this folder. Plugin settings will override this.", "option-use-wiki-links": "Use [[Wikilinks]]", "option-use-wiki-links-description": "Auto-generate Wikilinks for [[links]] and ![[images]] instead of Markdown links and images. Disable this option to generate Markdown links instead.", "option-show-unsupported-files": "Detect all file extensions", "option-show-unsupported-files-description": "Show files with any extension even if Obsidian can't open them natively, so that you can link to them and see them in File Explorer and Quick Switcher.", "option-link-autocompleted-format": "New link format", "option-link-autocompleted-format-description": "What links to insert when auto generating internal links.", "option-choice-shortest-linktext": "Shortest path when possible", "option-choice-relative-path": "Relative path to file", "option-choice-absolute-path": "Absolute path in vault", "option-new-attachment-location": "Default location for new attachments", "option-new-attachment-location-description": "Where newly added attachments are placed.", "option-choice-subdirectory": "In subfolder under current folder", "option-attachment-folder-path": "Attachment folder path", "option-attachment-folder-path-description": "Newly created attachment files will appear here. That includes images created via drag and drop or pasting, and audio recordings.", "option-attachment-subfolder-path": "Subfolder name", "option-attachment-subfolder-path-description": "If your file is under \"vault/folder\", and your set subfolder name to \"attachments\", attachments will be saved to \"vault/folder/attachments\".", "option-attachment-subfolder-path-placeholder": "attachments", "option-excluded-files": "Excluded files", "option-excluded-files-desc": "Excluded files will be either hidden or less noticeable in various places, such as Quick Switcher, link suggestion, and Graph View.", "label-no-excluded-filters-applied": "No excluded filter is applied right now. Add one below.", "label-excluded-filters-applied": "Files matching the following filters are currently excluded:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Enter path or \"/regex/\"..." }, "appearance": { "name": "Appearance", "option-base-theme": "Base theme", "option-base-theme-description": "Choose Obsidian’s default color scheme.", "option-accent-color": "Accent color", "option-accent-color-description": "Choose the accent color used throughout the app.", "dark-theme": "Dark", "light-theme": "Light", "system-theme": "Adapt to system", "option-font": "Font", "option-advanced": "Advanced", "option-interface-font": "Interface font", "option-interface-font-description": "Set base font for all of Obsidian.", "option-text-font": "Text font", "option-text-font-description": "Set font for editing and reading views.", "option-monospace-font": "Monospace font", "option-monospace-font-description": "Set font for places like code blocks and frontmatter.", "label-single-font-currently-in-effect": " Currently applied font: ", "label-multiple-fonts-currently-in-effect": " The following fonts are currently applied:", "option-font-placeholder": "Enter font name...", "label-no-custom-font-set": "No custom font is applied right now. Add one below.", "label-font-applied": "The first font from this list that is available on your system will be applied.", "msg-font-not-found": "This font is not detected on your system.", "msg-font-found": "This font is detected on your system.", "label-font-name": "Font name", "option-community-themes": "Open community themes", "option-community-themes-description": "Preview and use amazing themes created by the community.", "button-browse-community-themes": "Browse", "option-font-size": "Font size", "option-font-size-description": "Font size in pixels that affects editor and preview.", "option-font-size-action": "Quick font size adjustment", "option-font-size-action-description": "Adjust the font size using Ctrl + Scroll, or using the trackpad pinch-zoom gesture.", "option-themes": "Themes", "option-manage-themes-description": "Manage installed themes and browse community themes.", "option-theme-button-manage": "Manage", "option-choice-none": "None", "option-native-menus": "Native menus", "option-native-menus-desc": "Menus throughout the app will match the operating system. They will not be affected by your theme.", "button-reload-themes": "Reload themes", "msg-reloaded-themes": "Reloaded custom CSS themes.", "button-open-themes-folder": "Open themes folder", "option-css-snippets": "CSS snippets", "label-no-css-snippets-found": "No CSS snippets found in the snippets folder.", "no-snippet-description": "CSS Snippets are stored in \"{{path}}\".", "button-reload-snippets": "Reload snippets", "button-open-snippets-folder": "Open snippets folder", "msg-reloaded-snippets": "Reloaded CSS snippets.", "option-toggle-snippet-description": "Apply CSS snippet at \"{{path}}\".", "label-installed-themes": "Installed themes", "label-screenshot-unavailable": "Screenshot unavailable", "label-default-theme": "Default", "tooltip-click-to-enlarge": "Click to enlarge", "button-update": "Update", "label-currently-selected": "Selected", "option-frame-style": "Window frame style", "option-frame-description": "Determines the styling of the title bar of Obsidian windows. Requires a full restart to take effect.", "option-frame-hidden": "Hidden (default)", "option-frame-obsidian": "Obsidian frame", "option-frame-native": "Native frame", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Show tab title bar", "option-show-view-header-desc": "Display the header at the top of every tab.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "button-check-for-updates": "Check for updates", "button-view-updates": "View updates", "button-update-all-themes": "Update all", "label-current-themes": "Current community themes", "label-currently-installed": "You currently have {{count}} theme installed.", "label-currently-installed_plural": "You currently have {{count}} themes installed." }, "hotkeys": { "name": "Hotkeys", "prompt-filter": "Filter...", "tooltip-delete-hotkey": "Delete hotkey", "label-waiting-for-hotkey-press": "Press hotkey...", "tooltip-restore-default": "Restore default", "tooltip-customize-command": "Customize this command", "tooltip-hotkey-single-conflict": "This hotkey conflicts with \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "This hotkey conflicts with {{count}} other commands", "label-blank-hotkey": "Blank" }, "about": { "name": "About", "label-commercial-license": "Commercial license", "label-license-key": "License key", "license-key-placeholder": "Your license key...", "label-activate-license": "Activate license", "button-activate": "Activate", "label-unknown-version": "Unknown", "label-current-version": "Current version: ", "label-install-version": "(Installer version: {{version}})", "label-up-to-date": "Your app is up to date!", "label-read-changelog": "Read the changelog.", "label-manual-update-required": "To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.", "label-download": "Download", "label-new-version-ready": "A new version is ready to be installed. ", "label-relaunch-to-update": "Relaunch the app to update.", "label-disabled-updates": "Updates are disabled.", "label-checking-for-updates": "Checking for updates...", "button-relaunch": "Relaunch", "button-check-for-updates": "Check for updates", "option-auto-update": "Automatic updates", "option-auto-update-description": "Turn this off to prevent the app from checking for updates.", "option-get-help": "Get help", "option-get-help-description": "Get help on using Obsidian.", "button-open": "Open", "option-language": "Language", "option-language-description": "Change the display language.", "option-insider-build": "Receive insider builds", "option-insider-build-description": "Auto-update to insider builds to try out new features. Note that these builds are bleeding edge and might be less stable.", "option-advanced": "Advanced", "option-hw-acceleration": "Hardware Acceleration", "option-hw-acceleration-description": "Turns on Hardware Acceleration, which uses your GPU to make Obsidian smoother.", "option-hw-acceleration-warning": "If you turn this off, app performance will be severely degraded.", "option-config-location": "Override config folder", "option-config-location-description": "Use a different config folder than the default one. Must start with a dot.", "option-config-location-warning": "Config location must be a valid folder name that starts with a dot.", "label-license": "License", "label-your-commercial-license-key": "Your commercial license key is \"{{key}}\".", "label-commercial-license-info": "Registered to \"{{company}}\" for {{seats}} users. Valid until {{expiry}}.", "label-validating-commercial-license": "Validating...", "label-invalid-commercial-license": "License invalid: ", "button-remove-commercial-license": "Remove", "option-catalyst": "Catalyst license", "option-catalyst-desc": "You currently have the {{tier}} Catalyst license. Thanks for your support!", "option-catalyst-desc-no-license": "You don't have a Catalyst license right now. Catalyst license is a one-time donation to support Obsidian development.", "label-app": "App" }, "account": { "name": "Account", "option-your-account": "Your account", "option-your-account-desc": "You're currently signed in {{name}} ({{email}}).", "option-your-account-desc-no-login": "You're not logged in right now. An account is only needed for Obsidian Sync, Obsidian Publish, and Catalyst insider builds.", "button-manage-settings": "Manage settings", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Commercial license", "option-commercial-license-desc": "If you use Obsidian for commercial purpose, you may need to get a commercial license.", "button-purchase": "Purchase", "button-log-out": "Log out", "label-log-in": "Log in", "label-sign-up": "Sign up", "label-email": "Email", "placeholder-email": "Your email...", "label-password": "Password", "placeholder-password": "Your password...", "button-login": "Login", "message-empty-email": "Email cannot be empty.", "message-invalid-email": "Email is not valid.", "message-empty-password": "Password cannot be empty.", "message-login-failed": "Login failed, please double check your email and password.", "label-no-account": "Don't have an account? ", "link-sign-up-now": "Sign up now" }, "core-plugin": { "plugin-list": "Plugin list", "option-search-plugin": "Search core plugins", "option-search-plugin-description": "Filter plugins by name or description.", "placeholder-search-plugin": "Search plugins..." }, "third-party-plugin": { "name": "Third-party plugin", "option-restricted-mode": "Restricted mode", "option-restricted-mode-description": "Restricted mode is off. Turn on to disable community plugins.", "button-turn-on": "Turn on", "option-browse-community-plugins": "Community plugins", "option-browse-community-plugins-description": "Browse and install third-party plugins made by our amazing community.", "button-browse": "Browse", "label-exit-restricted-mode": "Exit Restricted Mode", "label-exit-restricted-mode-description-1": "Community plugins, like any other software you install, could potentially cause data integrity and security issues.", "label-exit-restricted-mode-description-2": "Plugin security is important to us. Here's what we do:", "label-exit-restricted-mode-description-3": "Despite our efforts, there is still a small chance that a community plugin might misbehave.", "label-code-review": "Initial code review", "label-code-review-desc": "Plugins undergo an initial code review by our team before they appear in the store.", "label-open-source": "Open source", "label-open-source-desc": "Most plugins are open source on GitHub, so you can inspect the code yourself.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We have a large community of developers who watch out for each other.", "label-report-mechanism": "Report mechanism", "label-report-mechanism-desc": "We follow up and remove faulty plugins upon user report.", "label-exit-restricted-mode-disable-confirmation": "Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.", "label-learn-more": "Learn more about plugin security", "button-turn-on-community-plugins": "Turn on community plugins", "label-trust-author": "Do you trust the author of this vault?", "label-trust-author-description-1": "You're opening this vault for the first time, and it comes with some plugins.", "label-trust-author-description-2": "If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.", "label-trust-author-description-3": "If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.", "button-enable-plugins": "Trust author and enable plugins", "button-dont-trust-author": "Browse vault in Restricted Mode", "placeholder-community-plugins": "Search community plugins...", "msg-failed-load-plugins": "Failed to load community plugins.", "label-installed": "Installed", "button-install": "Install", "button-enable": "Enable", "button-disable": "Disable", "button-copy-share-link": "Copy share link", "button-donate": "Donate", "label-no-results-found": "No results found.", "msg-failed-to-load-manifest": "Failed to load plugin manifest.", "label-version": "Version: {{version}}", "label-currently-installed-version": " (currently installed: {{version}})", "label-by-author": "By ", "label-repository": "Repository: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "This plugin does not support your device.", "button-update": "Update", "label-no-readme": "This plugin did not provide a README file.", "msg-installing-plugin": "Installing plugin \"{{name}}\"...", "msg-failed-to-install-plugin": "Failed to install plugin \"{{name}}\".", "msg-successfully-installed-plugin": "Successfully installed plugin \"{{name}}\".", "label-installed-plugins": "Installed plugins", "button-reload-plugins": "Reload plugins", "msg-reloaded-third-party-plugins": "Reloaded third-party plugins.", "label-uninstall": "Uninstall", "label-uninstall-plugin": "Uninstall plugin", "label-uninstall-plugin-confirmation": "Are you sure you want to uninstall this plugin? This will delete the folder of the plugin.", "button-open-plugins-folder": "Open plugins folder", "button-check-for-updates": "Check for updates", "button-update-all-plugins": "Update all", "label-current-plugins": "Current plugins", "label-currently-installed": "You currently have {{count}} plugin installed.", "label-currently-installed_plural": "You currently have {{count}} plugins installed.", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Show a message with how long each plugin took to initialize when starting the app.", "msg-no-updates-found": "No plugin updates found.", "msg-updates-found": "Found {{count}} plugin to update.", "msg-updates-found_plural": "Found {{count}} plugins to update.", "msg-update-plugin": "Update to version {{version}}", "option-search-installed-plugin": "Search installed plugins", "option-search-installed-plugin-description": "Filter installed plugins by name or description.", "placeholder-search-installed-plugin": "Search installed plugins...", "show-installed-only": "Show installed only", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "Showing {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Mobile toolbar", "option-configure-quick-action": "Configure mobile Quick Action", "option-configure-quick-action-description": "Configure which command to trigger when pull down from the top. The current command is set to \"{{command}}\".", "button-configure": "Configure", "placeholder-select-quick-action": "Select Quick Action...", "manage-toolbar-options": "Manage toolbar options", "option-internal-link": "Add internal link", "option-internal-embed": "Add embed", "option-tag": "Add tag", "option-heading": "Toggle heading", "option-strikethrough": "Toggle strikethrough", "option-highlight": "Toggle highlight", "option-code": "Toggle code", "option-blockquote": "Toggle blockquote", "option-markdown-link": "Add Markdown link", "option-bullet-list": "Toggle bullet list", "option-numbered-list": "Toggle numbered list", "option-indent-list": "Indent list item", "option-unindent-list": "Unindent list item", "option-undo": "Undo", "option-redo": "Redo", "option-move-caret-up": "Move caret up", "option-move-caret-down": "Move caret down", "option-move-caret-left": "Move caret left", "option-move-caret-right": "Move caret right", "option-first-line": "Go to first line", "option-last-line": "Go to last line", "option-toggle-keyboard": "Toggle keyboard", "option-configure-toolbar": "Configure mobile toolbar", "option-added-options": "Added options", "option-more-toolbar-options": "More toolbar options", "option-attach": "Insert attachment", "option-add-command": "Add global command", "option-add-command-description": "Select any global command to add to the toolbar." } }, "editor": { "search": { "placeholder-find": "Find", "placeholder-replace": "Replace", "label-previous": "Prev", "label-next": "Next", "label-all": "All", "label-exit-search": "Exit search", "label-replace": "Replace", "label-replace-all": "Replace all" }, "link-suggestion": { "label-type-hash": "Type #", "label-link-heading": "to link heading", "label-type-block": "Type ^", "label-link-block": "to link blocks", "label-type-pipe": "Type |", "label-change-display-text": "to change display text", "label-no-match-found": "No match found" }, "spellcheck": { "no-suggestion": "No suggestions...", "add-to-dictionary": "Add to dictionary" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "No heading", "label-heading-level": "Heading {{level}}" }, "print-modal": { "title": "Export to PDF", "caption": "Export \"{{filename}}\" to PDF with the setting below.", "setting-page-size": "Page size", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Include file name as title", "setting-landscape": "Landscape", "setting-margin": "Margin", "setting-margin-default": "Default", "setting-margin-minimal": "Minimal", "setting-margin-none": "None", "setting-downscale-percent": "Downscale percent", "button-export-to-pdf": "Export to PDF" }, "link-popover": { "tooltip-follow-link": "Follow link", "tooltip-open-link": "Open link", "tooltip-search-tag": "Search tag" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Open in default app", "empty-sidebar": "The sidebar is empty, try dragging a pane here.", "sidebar-expand": "Expand", "sidebar-collapse": "Collapse", "msg-fail-to-save-file": "Failed to save file \"{{filepath}}\". {{message}}.", "no-file": "No file", "msg-file-changed": "\"{{file}}\" has been modified externally, merging changes automatically.", "switch-vault": "Open another vault", "help": "Help", "settings": "Settings", "drag-to-rearrange": "Drag to rearrange", "msg-switched-to-read": "Switched default view mode to reading view.", "msg-switched-to-edit": "Switched default view mode to editor.", "msg-upgrade-installer": "To use this feature, please re-install with latest installer available from our website.", "tooltip-restore-default-settings": "Restore default settings", "label-copy": "Copy to clipboard", "copied_generic": "Copied to your clipboard", "copied": "{{item}} copied to your clipboard", "url": "Url", "msg-open-file-through-uri": "Opened file \"{{path}}\"", "msg-file-not-found-through-uri": "File \"{{name}}\" not found.", "delete-action-short-name": "Delete", "msg-indexing": "Obsidian is indexing your vault...\nThis should only happen once.\nSome functionality may not be available until this is complete.", "msg-indexing-complete": "Indexing complete.", "msg-sandbox-vault": "This is a sandbox vault.\nChanges you make in this vault will be lost.", "label-enter-to-create": "Enter to create", "label-update-available": "Update Available", "label-debug-info": "Debug info", "button-learn-more": "Learn more", "button-not-now": "Not now", "button-add": "Add", "button-manage": "Manage", "label-new-tab": "New tab", "msg-tab-busy": "This tab is currently busy, please try again later", "empty-state": { "no-file-open": "No file is open", "create-new-file": "Create new file", "go-to-file": "Go to file", "see-recent-files": "See recent files", "close": "Close", "unknown-pane-title": "Plugin no longer active", "unknown-pane-desc": "The plugin that created this pane ({{type}}) has gone away" }, "menu": { "edit-view": "Edit (Ctrl/Cmd+Click to edit in new pane)", "read-view": "Current view: reading", "switch-to-edit-view": "Click to edit", "switch-to-read-view": "Click to read", "mod-click-open-new-tab": "{{key}}+Click to open in new tab", "find": "Find...", "replace": "Replace...", "edit": "Edit", "preview": "Preview", "more-options": "More options", "close": "Close", "close-others": "Close others", "close-right": "Close tabs to the right", "pin": "Pin", "unpin": "Unpin", "unlink-tab": "Unlink tab", "link-tab": "Link with tab...", "toggle-source-mode": "Source mode", "toggle-reading-view": "Reading view", "delete-file": "Delete file", "create-file": "Create this file", "open-link": "Open link", "open-in-new-tab": "Open in new tab", "open-to-the-right": "Open to the right", "copy-url": "Copy url", "close-current-tab": "Close current tab", "copy": "Copy", "cut": "Cut", "paste": "Paste", "paste-as-plain-text": "Paste as plain text", "select-all": "Select all", "rename-heading": "Rename this heading...", "rename-blockid": "Rename this block ID...", "open-in-new-window": "Open in new window", "move-to-new-window": "Move to new window", "open-in-browser": "Open in browser", "stack-tabs": "Stack tabs", "unstack-tabs": "Unstack tabs" }, "tooltip": { "click-to-expand": "Click to expand", "click-to-collapse": "Click to collapse", "alias": "Alias", "not-created-yet": "Not created yet, select to create" }, "start-screen": { "label-version": "Version", "option-open-folder-as-vault": "Open folder as vault", "option-open-folder-as-vault-description": "Choose an existing folder of Markdown files.", "option-create-vault": "Create new vault", "option-create-vault-description": "Create a new Obsidian vault under a folder.", "option-connect-obsidian-sync": "Connect to Obsidian Sync", "option-connect-obsidian-sync-description": "Set up a synced vault with existing remote vault.", "option-new-vault-name": "Vault name", "option-new-vault-name-description": "Pick a name for your awesome vault.", "option-new-vault-location": "Location", "option-new-vault-location-description": "Pick a place to put your new vault.", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Reveal vault in system explorer", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "Rename vault...", "msg-error-rename-exists": "There is already a vault with this name.", "msg-error-nested": "Cannot move vault into a subfolder of itself.", "msg-error-rename-open": "Can't rename a currently open vault.", "msg-rename-failed": "Failed to rename vault.", "msg-rename-success": "Successfully renamed vault.", "option-move-vault": "Move vault...", "msg-move-select-dest": "Select destination folder", "msg-error-move-exists": "There is already a vault at the destination.", "msg-error-move-open": "Can't move a currently open vault.", "msg-move-failed": "Failed to move vault.", "msg-move-success": "Successfully moved vault.", "option-remove": "Remove from list", "button-quick-start": "Quick start", "button-open": "Open", "button-browse": "Browse", "button-connect": "Connect", "button-create-vault": "Create", "button-back": "Back", "msg-empty-vault-name": "Vault name cannot be empty.", "msg-invalid-folder": "Please pick a valid folder.", "msg-failed-to-create-vault": "Failed to create vault.", "msg-failed-to-create-vault-at-location": "Could not create vault at the given location. Please double check the location and permission.", "msg-error-failed-to-open-vault": "Failed to open.", "msg-error-remove-current-open-vault": "Can't remove a currently open vault.", "option-get-help": "Get Help", "option-user-email": "Email", "placeholder-your-email": "Your email...", "option-user-password": "Password", "placeholder-your-password": "Your password...", "button-sign-in": "Sign in", "button-setup": "Setup", "option-connect-vault-desc": "Create a synced vault on this device.", "tooltip-own-vault": "This is a remote vault owned by you.", "tooltip-shared-vault": "This is a remote vault shared with you." }, "drag-and-drop": { "insert-link-here": "Insert link here", "insert-links-here": "Insert links here", "move-into-folder": "Move into \"{{folder}}\"", "star-this-file": "Star this file", "star-these-files": "Star these files", "open-in-this-tab": "Open in this tab", "open-as-tab": "Open as new tab" }, "window": { "maximize": "Maximize", "minimize": "Minimize", "restore-down": "Restore down", "close-window": "Close window", "go-back": "Go back", "go-forward": "Go forward" }, "start-up": { "loading-obsidian": "Loading Obsidian...", "obsidian-load-error": "An error occurred while loading Obsidian.", "button-reload-app": "Reload app", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "Open another vault", "loading-components": "Loading components...", "loading-plugins": "Loading plugins...", "loading-vault": "Loading vault...", "msg-failed-to-load-vault": "Failed to load vault: ", "loading-cache": "Loading cache...", "loading-workspace": "Loading workspace..." }, "mobile": { "action-import": "Import into vault", "action-choose-file-to-insert": "Choose a file to insert", "action-insert-text-into-file": "Insert text into {{filename}}", "action-insert-link-into-file": "Insert link into {{filename}}", "msg-importing": "Importing...", "msg-import-success": "Import success", "msg-failed-to-import-file": "Failed to import file {{filename}}", "msg-back-again-to-exit": "Press back again to exit." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "Save current file", "follow-cursor-link": "Follow link under cursor", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "Toggle pin", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "Navigate back", "navigate-forward": "Navigate forward", "use-dark-mode": "Use dark mode", "use-light-mode": "Use light mode", "change-theme": "Change theme", "search-current-file": "Search current file", "search-replace-current-file": "Search & replace in current file", "open-settings": "Open settings", "open-help": "Open help", "toggle-edit": "Toggle editing/reading view", "toggle-source-mode": "Toggle Live Preview/Source mode", "delete-current-file": "Delete current file", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "Toggle left sidebar", "toggle-right-sidebar": "Toggle right sidebar", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "Focus on editor", "toggle-fold": "Toggle fold on the current line", "fold-all": "Fold all headings and lists", "unfold-all": "Unfold all headings and lists", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "Swap line up", "swap-line-down": "Swap line down", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "Toggle bold for selection", "toggle-italics": "Toggle italics for selection", "toggle-highlight": "Toggle highlight for selection", "toggle-comments": "Toggle comments for selection", "insert-link": "Insert link", "toggle-spellcheck": "Toggle spellcheck", "delete-paragraph": "Delete paragraph", "toggle-checklist": "Toggle checklist status", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "Edit file title", "copy-path": "Copy file path", "copy-url": "Copy obsidian url", "export-pdf": "Export to PDF", "reload": "Reload app without saving", "undo-close-tab": "Undo close tab", "context-menu": "Show context menu under cursor", "show-debug-info": "Show debug info", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "Toggle edit/preview mode", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "This will affect {{links}} in {{files}}.", "msg-updated-links": "Updated {{links}} in {{files}}.", "label-update-links": "Update links", "label-confirm-update-link-to-file": "Do you want to update internal links that link to this file?", "button-always-update": "Always update", "button-just-once": "Just once", "button-do-not-update": "Do not update", "label-confirm-deletion": "Are you sure you want to delete \"{{filename}}\"?", "label-move-to-system-trash": "It will be moved to your system trash.", "label-move-to-vault-trash": "It will be moved to your Obsidian trash, which is located in the \".trash\" hidden folder in your vault.", "label-permanent-delete": "The file will be permanent deleted.", "label-non-empty-folder": "This folder is not empty.", "label-delete-folder-warning": "If you continue, all files inside this folder will be deleted.", "label-delete-folder": "Delete folder", "button-delete": "Delete", "button-delete-do-not-ask-again": "Delete and don't ask again", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "There are currently {{links}} pointing to this note.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "Delete file", "button-manage": "Manage", "button-cancel": "Cancel", "button-done": "Done", "button-save": "Save", "button-stop": "Stop", "button-continue": "Continue", "preparing-pdf": "Preparing PDF...", "label-rename-file": "Rename file", "label-new-name": "New name", "msg-rename-success": "Successfully renamed file.", "label-rename-heading": "Rename heading", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "Plugins", "file-explorer": { "name": "File explorer", "desc": "See all the files in your vault.", "action-open": "Open file explorer", "action-show": "Show file explorer", "action-create-note": "Create new note", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "New note", "action-new-folder": "New folder", "action-change-sort": "Change sort order", "action-reveal-file": "Reveal file in file explorer", "action-reveal-active-file": "Reveal active file in file explorer", "command-move-file": "Move file to another folder", "action-move-file": "Move file to...", "action-move-folder": "Move folder to...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "Type a folder", "label-no-folders": "No folders found.", "instruction-navigate": "to navigate", "instruction-move": "to move", "instruction-dismiss": "to dismiss", "label-sort-a-to-z": "Sort by file name (A to Z)", "label-sort-z-to-a": "Sort by file name (Z to A)", "label-sort-new-to-old": "Sort by edit time (new to old)", "label-sort-old-to-new": "Sort by edit time (old to new)", "label-sort-created-old-to-new": "Created time (old to new)", "label-sort-created-new-to-old": "Created time (new to old)", "menu-opt-new-note": "New note", "menu-opt-new-folder": "New folder", "menu-opt-set-attachment-folder": "Set as attachment folder", "menu-opt-rename": "Rename", "menu-opt-delete": "Delete", "menu-opt-make-copy": "Make a copy", "msg-invalid-characters": "File name cannot contain any of the following characters: ", "msg-unsafe-characters": "Links will not work with file names containing any of these characters: ", "msg-file-already-exists": "There's already a file with the same name", "msg-empty-file-name": "File name cannot be empty.", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "Last modified at {{time}}", "tooltip-created-time": "Created at {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Move", "label-untitled-file": "Untitled", "label-untitled-folder": "Untitled", "msg-set-attachment-folder": "Attachments will be saved to \"{{path}}\" from now on." }, "search": { "name": "Search", "desc": "Search for keyword in all the notes.", "action-open-search": "Search in all files", "label-collapse-results": "Collapse results", "label-match-case": "Match case", "label-explain-search-term": "Explain search term", "label-more-context": "Show more context", "prompt-start-search": "Type to start search...", "label-match-text": "Matches text: ", "label-match-regex": "Matches regex: ", "label-match-exact-text": "Contains exact text: ", "label-match-all": "Match all of: ", "label-match-any": "Match any of: ", "label-excluding": "Excluding: ", "label-case-sensitive": "Case sensitive", "label-case-insensitive": "Case insensitive", "label-match-file-path": "Match file path: ", "label-match-file-name": "Match file name: ", "label-match-content": "Match file content: ", "label-match-task": "Match task: ", "label-match-task-todo": "Match task (todo): ", "label-match-task-done": "Match task (done): ", "label-match-line": "Match line: ", "label-match-block": "Match block: ", "label-match-section": "Match section: ", "label-match-tag": "Match tag: ", "label-no-matches": "No matches found.", "matches-with-count": "... and {{count}} more match.", "matches-with-count_plural": "... and {{count}} more matches.", "label-copy-search-results": "Copy search results", "button-copy-results": "Copy results", "msg-successfully-copied": "Results copied to your clipboard.", "option-show-path": "Show path", "option-show-path-description": "Display full path of the file rather than just the file name.", "option-link-style": "Link style", "option-link-style-description": "Optionally turn each file result in to a link.", "option-choice-link-style-none": "None", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Markdown link", "option-list-prefix": "List prefix", "option-list-prefix-description": "Optionally add a list item prefix to each file result.", "option-choice-list-style-none": "None", "option-choice-list-style-dash": "Dash (-)", "option-choice-list-style-asterisk": "Asterisk (*)", "option-choice-list-style-numbered": "Numbered", "tooltip-clear-search": "Clear search", "label-search-options": "Search options", "tooltip-read-more": "Read more", "label-history": "History", "tooltip-clear-history": "Clear search history", "label-path-option-description": "match path of the file", "label-file-name-option-description": "match file name", "label-tag-option-description": "search for tags", "label-line-option-description": "search keywords on same line", "label-section-option-description": "search keywords under same heading", "menu-opt-search-for": "Search for \"{{keyword}}\"" }, "quick-switcher": { "name": "Quick switcher", "desc": "Jump to any files without leaving your keyboard. Ctrl/Cmd+O to activate.", "short-name": "Switcher", "action-open": "Open quick switcher", "instruction-navigate": "to navigate", "instruction-open": "to open", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "to create", "instruction-dismiss": "to dismiss", "label-no-note-create-new": "No notes found. Enter to create a new one.", "prompt-type-file-name": "Type file to switch to or create...", "label-enter-to-create": "Enter to create", "tooltip-not-created-yet": "Not created yet, select to create", "option-show-existing-only": "Show existing only", "option-show-existing-only-description": "Whether to show links to files that are not yet created.", "option-show-attachments": "Show attachments", "option-show-attachments-desc": "Show attachment files like images, videos, and PDFs.", "option-show-all-file-types": "Show all file types", "option-show-all-file-types-desc": "Show all files including ones that Obsidian can't open. The file will be opened with the default app for that file type." }, "graph-view": { "name": "Graph view", "desc": "See a graph overview of which notes link to which.", "action-open": "Open graph view", "action-open-local": "Open local graph", "action-copy-screenshot": "Copy screenshot", "tab-title": "Graph of {{displayText}}", "label-filters": "Filters", "prompt-filter-nodes": "Search files...", "option-depth": "Depth", "option-depth-description": "Show nodes this number of links away", "option-neighbor-links": "Neighbor links", "option-neighbor-links-description": "Show links between neighbors.", "option-forelinks": "Outgoing links", "option-forelinks-description": "Show links to other files", "option-backlinks": "Incoming links", "option-backlinks-description": "Show links from other files", "option-show-tags": "Tags", "option-show-tags-description": "Tags are linked to the files that contain them", "option-show-attachments": "Attachments", "option-show-attachments-description": "Show attachments included by files", "option-show-existing-files-only": "Existing files only", "option-show-existing-files-only-description": "When checked, links to nonexistent files are not shown", "option-show-orphans": "Orphans", "option-show-orphans-description": "Show files that are not linked to any other file", "label-display": "Display", "option-show-arrows": "Arrows", "option-show-arrows-description": "Show arrows when zoomed in", "option-text-fade": "Text fade threshold", "option-node-size": "Node size", "option-link-thickness": "Link thickness", "label-forces": "Forces", "option-center-force": "Center force", "option-link-force": "Link force", "option-link-distance": "Link distance", "option-repel-force": "Repel force", "tooltip-open-graph-settings": "Open graph settings", "msg-screenshot-copied": "Screenshot copied to the clipboard.", "label-groups": "Groups", "placeholder-enter-query": "Enter query...", "tooltip-delete-graph": "Delete group", "button-new-group": "New group", "tooltip-click-to-change-drag-to-reorder": "Click to change color\nDrag to reorder groups", "action-timelapse": "Start graph timelapse animation", "tooltip-start-timelapse-animation": "Start timelapse animation", "button-animate-timelapse": "Animate" }, "backlinks": { "name": "Backlinks", "desc": "Show number of backlinks in the status bar.", "action-open": "Open backlinks", "action-show": "Show backlinks pane", "action-open-for-current": "Open backlinks for the current file", "action-toggle-backlinks-in-document": "Toggle backlinks in document", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "Linked mentions", "label-no-backlinks": "No backlinks found.", "label-unlinked-mentions": "Unlinked mentions", "label-show-search": "Show search filter", "label-link-button-text": "Link", "tab-title": "Backlinks for {{displayText}}", "label-no-unlinked-mentions": "No unlinked mentions found.", "ellipsis": "...", "option-backlink-in-document": "Backlink in document", "option-backlink-in-document-desc": "Show backlinks in document by default when opening new panes." }, "outgoing-links": { "name": "Outgoing Links", "desc": "Show outgoing links and detect unlinked mentions of other notes in the current note.", "action-open": "Open outgoing links", "action-show": "Show outgoing links pane", "action-open-for-current": "Open outgoing links for the current file", "tab-title": "Outgoing links from {{displayText}}", "label-links": "Links", "label-no-links": "No links found.", "label-unlinked-mentions": "Unlinked mentions", "tooltip-link-file": "Link this file", "tooltip-not-created": "Not created yet" }, "tag-pane": { "name": "Tag pane", "desc": "Displays all your tags and along with their number of occurrences.", "action-show": "Show tag pane", "label-no-tags": "No tags found.", "label-sort-by-name-a-to-z": "Tag name (A to Z)", "label-sort-by-name-z-to-a": "Tag name (Z to A)", "label-sort-by-frequency-high-to-low": "Frequency (high to low)", "label-sort-by-frequency-low-to-high": "Frequency (low to high)", "action-show-nested-tags": "Show nested tags", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "Page preview", "desc": "Preview a note when hovering an internal link. Ctrl/Cmd + hover in editor mode.", "label-empty-note": "\"{{linktext}}\" is not created yet. Click to create.", "label-source-editor": "Editor", "label-source-preview": "Preview", "label-source-search": "Search, Backlinks, and Outgoing links", "label-require-mod": "Require {{key}} to trigger page preview on hover" }, "starred": { "name": "Starred", "desc": "Star frequently used files and searches.", "action-show": "Show starred pane", "action-toggle": "Star/unstar current file", "action-toggle-search": "Star/unstar current search", "action-star": "Star", "action-unstar": "Unstar", "menu-opt-remove": "Remove", "msg-successfully-starred": "Successfully starred {{type}} \"{{title}}\".", "msg-removed-starred": "Removed starred {{type}} \"{{title}}\".", "msg-cannot-find-path": "Cannot find file at \"{{path}}\"." }, "custom-css": { "name": "Custom CSS", "desc": "Reads \"obsidian.css\" in the vault and applies it.", "setting-community-themes": "Community themes", "msg-fetching-themes": "Fetching community theme data...", "prompt-filter": "Filter...", "label-dark-theme-only": "Dark themes only", "label-light-theme-only": "Light themes only", "label-use": "Use", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "Update", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "Remove theme", "label-visit-on-github": "Visit on GitHub", "msg-load-error": "Could not load community themes, please check your network.", "msg-now-using-theme": "You're now using {{title}} as your CSS theme.", "msg-deleted-theme": "The theme {{title}} has been deleted.", "msg-updated-theme": "The theme {{title}} has been updated.", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "Command palette", "desc": "Type a command to invoke it. No need to use the UI or remember the shortcut.", "action-open": "Open command palette", "instruction-navigate": "to navigate", "instruction-use": "to use", "instruction-dismiss": "to dismiss", "label-no-commands": "No commands found.", "prompt-type-command": "Type a command...", "label-pinned-commands": "Pinned commands", "option-add-new-pin": "New pinned command", "option-add-new-pin-description": "Pinned commands will appear at the top of all commands when no search query is present." }, "markdown-format-importer": { "name": "Markdown format importer", "desc": "Convert Markdown from other apps to Obsidian format.", "action-open": "Open Markdown importer", "option-roam-tag-fixer": "Roam Research tag fixer", "option-roam-tag-fixer-description": "Converts \"#tag\" and \"#[[tag]]\" to \"[[tag]]\".", "option-roam-highlight-fixer": "Roam Research highlight fixer", "option-roam-highlight-fixer-description": "Converts \"^^highlight^^\" to \"==highlight==\".", "option-roam-todo-converter": "Roam Research TODO converter", "option-roam-todo-converter-description": "Converts \"{{[[TODO]]}}\" to \"[ ]\".", "option-bear-highlight-fixer": "Bear highlight fixer", "option-bear-highlight-fixer-description": "Converts \"::highlight::\" to \"==highlight==\".", "zettelkasten-link-fixer": "Zettelkasten link fixer", "zettelkasten-link-fixer-description": "Fixes \"[[UID]]\" links to full \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Zettelkasten link beautifier", "zettelkasten-link-beautifier-description": "Fixes \"[[UID]]\" links and also beautify them \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Warning: the importer will convert all the files in your vault, not just the current file.", "msg-override-files-warning": "Your files will be overwritten. Back up all your files before attempting conversion.", "label-start-conversion": "Start Conversion", "label-stop": "Stop", "label-go-back": "Go back", "label-done": "Done", "label-processing": "Processing...", "label-cancelling": "Cancelling...", "label-finished": "Finished!", "label-processed-files": "Processed files", "label-modified-files": "Modified files", "label-total-replacements": "Total replacements" }, "daily-notes": { "name": "Daily notes", "desc": "Open today's daily note, or create one if not present.", "short-name": "Today", "action-open": "Open today's note", "action-open-previous": "Open previous daily note", "action-open-next": "Open next daily note", "action-insert-text": "Insert text into daily note", "action-insert-link": "Insert link into daily note", "msg-fail-format": "Failed to create daily note. \"{{format}}\" is not a valid format.", "msg-fail-folder": "Failed to create daily note. Folder \"{{folderOption}}\" not found.", "msg-fail-template-file": "Failed to create daily note. Template file \"{{template}}\" not found.", "msg-no-previous": "There's no daily note before this one.", "msg-no-next": "There's no daily note after this one.", "option-date-format": "Date format", "label-refer-to-syntax": "For more syntax, refer to: ", "label-syntax-link": "format reference", "label-syntax-live-preview": "Here is what it will look like: ", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new daily note.", "option-template": "Template file location", "option-template-description": "The file path to use as template.", "option-open-on-start": "Open daily note on startup", "option-open-on-start-description": "Open your daily note automatically whenever you open this vault." }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Random note", "desc": "Opens a random note. Useful for reviewing and discovering.", "short-name": "Random", "action-open": "Open random note" }, "outline": { "name": "Outline", "desc": "Displays the outline of the current file or linked pane.", "action-open": "Open outline", "action-show": "Show outline pane", "action-open-for-current": "Open outline of the current file", "tab-title": "Outline of {{displayText}}", "label-no-headings": "No headings found." }, "word-count": { "name": "Word count", "desc": "Show word count in the status bar." }, "slides": { "name": "Slides", "desc": "Present from Markdown. Use \"---\" to separate slides.", "action-start": "Start presentation" }, "audio-recorder": { "name": "Audio recorder", "desc": "Record audio and save as attachment.", "action-start": "Start recording audio", "action-stop": "Stop recording audio", "action-toggle": "Start/stop recording", "msg-access-denied": "Microphone access was denied, please enable it from the preference pane.", "msg-pending-grant": "Please grant microphone permission to start recording.", "msg-no-microphone": "No microphone is connected." }, "open-with-default-app": { "name": "Open in default app", "desc": "Add button to open current file in the default app.", "action-open-file": "Open in default app", "action-open-file-mobile": "Share", "action-show-in-folder": "Show in folder", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "Templates", "desc": "Insert template content from a folder of template files.", "action-insert": "Insert template", "action-insert-current-date": "Insert current date", "action-insert-current-time": "Insert current time", "option-template-folder-location": "Template folder location", "option-template-folder-location-description": "Files in this folder will be available as templates.", "option-template-date-format": "Date format", "option-template-date-format-description": "{{date}} in the template file will be replaced with this value.", "option-template-date-format-description2": "You can also use {{date:YYYY-MM-DD}} to override the format once.", "option-template-time-format": "Time format", "option-template-time-format-description": "{{time}} in the template file will be replaced with this value.", "option-template-time-format-description2": "You can also use {{time:HH:mm}} to override the format once.", "instruction-navigate": "to navigate", "instruction-insert": "to insert template", "instruction-dismiss": "to dismiss", "msg-no-templates-found": "No templates found", "msg-fail-invalid-folder": "Failed to list templates. Template folder is invalid.", "msg-fail-folder-not-found": "Failed to list templates. Folder \"{{folderOption}}\" not found.", "prompt-type-template": "Type name of a template..." }, "translucency": { "name": "Translucent window", "desc": "Turn on translucency effect to enhance a sense of depth. Best used with dark mode. Not supported on Linux." }, "slash-command": { "name": "Slash commands", "desc": "Enable the ability to trigger slash commands in the editor by typing the forward slash." }, "editor-status": { "name": "Editor status", "desc": "Adds a status bar item to show and change the current editor mode.", "read": "Reading", "edit-source": "Source mode", "edit-live-preview": "Live Preview" }, "publish": { "name": "Publish", "desc": "Publish your notes through Obsidian Publish.", "action-publish-changes": "Publish changes...", "label-no-internet-access": "You need access to the internet to publish changes.", "label-publish-service-description": "Obsidian Publish is an add-on paid service that lets you publish your notes online directly from Obsidian.", "label-please-login": "To start publishing, please log in or create a new Obsidian account.", "label-no-publish-subscription": "You do not have an Obsidian Publish subscription yet.", "button-purchase": "Purchase", "label-manage-sites": "Manage sites", "label-no-sites": "You don't have any sites.", "button-choose": "Choose", "tooltip-edit-site-id": "Edit site ID", "tooltip-delete-site": "Delete site", "label-delete-site-confirmation": "Are you sure you want to delete this site?", "label-delete-site-details": "This will immediately and permanently delete your site.", "label-confirm-delete-site": "Confirm delete site \"{{site}}\"", "option-site-id": "Site ID", "option-site-id-description": "Your site will be at https://publish.obsidian.md/{site id}. You can change this later. Only lower case letters, numbers, and dashes are allowed.", "option-site-id-placeholder": "Pick a site ID", "button-create": "Create", "msg-invalid-site-id": "Site ID can only contain lowercase letters, numbers, and dashes.", "msg-site-id-in-use": "This site ID is in use, please try another one.", "msg-create-site-issue": "That was an issue when creating your site.", "label-site-options": "Site options", "option-site-general": "General", "option-site-components": "Components", "option-site-appearance": "Appearance", "option-site-reading-experience": "Reading experience", "option-site-misc": "Other site settings", "option-site-name": "Site name", "option-site-name-description": "Name of your published site. It will show up in the page title of your site.", "option-site-name-placeholder": "Name of your site", "option-home-page-file": "Homepage file", "option-home-page-file-description": "The first page the user sees when landing on your published site", "option-home-page-file-placeholder": "Pick a published file", "option-logo": "Logo", "option-logo-description": "Pick an image file as your site logo.", "option-logo-placeholder": "Any uploaded image in your vault...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "Theme", "option-theme-description": "Choose default color scheme for your site.", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "Show navigation", "option-show-navigation-description": "Display a list of all published pages on the left side of your published site.", "option-show-search": "Show search bar", "option-show-search-description": "Display a search bar at top of the navigation that lets the visitors search pages and headings on your site.", "option-show-graph": "Show graph view", "option-show-graph-description": "Display a small local graph on each page.", "option-show-outline": "Show table of contents", "option-show-outline-description": "Display the outline of headings on each page.", "option-show-backlinks": "Show backlinks", "option-show-backlinks-description": "Show backlink section at the end of each page.", "option-sliding-window-mode": "Use sliding windows", "option-sliding-window-mode-description": "Open pages in new panes to the right. Allows scrolling through panes horizontally.", "option-hover-preview-file": "Show hover preview", "option-hover-preview-file-description": "Display page preview when hovering links.", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "Readable line length", "option-readable-line-length-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-site-password": "Passwords", "option-site-password-description": "Restrict access to your site with passwords.", "option-google-analytics": "Google Analytics tracking code", "option-google-analytics-description": "Configure Google Analytics for your site. Only available for visitors from your custom domain URL. Please check with your local laws and regulations first.", "button-manage-passwords": "Manage", "button-save-site-settings": "Save site settings", "msg-updated-options": "Updated options for your site.", "button-go-back": "Back", "label-publishing-to": "Publishing to", "tooltip-switch-site": "Switch site", "button-add-linked": "Add linked", "tooltip-add-linked": "Add all files that are linked by currently selected items", "msg-added-linked-files": "{{count}} linked file has been added.", "msg-added-linked-files_plural": "{{count}} linked files have been added.", "tooltip-open-site-options": "Change site options", "label-no-changes-detected": "No changes were detected.", "label-changed-files-to-be-published": "Changes", "label-unchanged-files-already-published": "Unchanged (select to delete)", "label-file-selected": " selected", "button-select-all-files": "Select all", "button-deselect-all-files": "Deselect all", "label-new-files-to-be-published": "New", "button-publish": "Publish", "msg-no-permission-to-publish-to-site": "You do not have permissions to publish to the current site.", "msg-select-at-least-one-file": "Please select at least one file.", "label-upload-changes": "Upload changes", "button-done": "Done", "button-stop": "Stop", "label-status-uploading": "Uploading", "label-status-to-publish": "To publish", "label-status-to-delete": "To delete", "label-status-published": "Published", "label-status-deleted": "Deleted", "label-status-failed": "Failed", "label-status-cancelled": "Cancelled", "button-change": "Change", "label-clear-cache": "It takes up to a few minutes for the changes to show up on your site. If you do not see your latest changes, try clearing the cache in your browser.", "label-visit-site": "You can visit your site here: ", "msg-something-went-wrong": "Something went wrong. Please check the developer console for details.", "msg-network-error": "A network error occurred. ", "label-manage-passwords": "Manage passwords", "label-add-password": "Add password", "action-new-password": "New password", "label-no-password": "Your site currently does not have any passwords. Anyone can visit it.", "label-have-password": "Your site is password protected. If you have multiple passwords, visitors can access your site by entering any of them.", "option-password-name": "Password", "option-password-desc": "A hash of your password will be stored securely. Once the password is set, it cannot be revealed in plaintext.", "option-password-placeholder": "Your password", "option-nickname-name": "Nickname (optional)", "option-nickname-desc": "Set a nickname to remind yourself what or who the password is for.", "action-add-password": "Add this password", "label-untitled-password": "Untitled password", "label-password-created-time": "Created {{time}}", "msg-added-new-password": "Added new password.", "option-custom-domain": "Custom domain", "option-custom-domain-desc": "Use your own domain rather than the https://publish.obsidian.md/{site id} URL.", "option-noindex": "Disallow search engine indexing", "option-noindex-desc": "Prevent search engines from indexing your site.", "button-configure": "Configure", "label-configure-custom-domain": "Configure custom domain", "option-custom-url-name": "Custom URL", "option-custom-url-desc": "The URL that your site will be located at.", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "Redirect to your custom domain", "option-custom-url-redirect-desc": "Redirect visitors on publish.obsidian.md/id to your custom domain.", "button-update-custom-domain": "Update domain setting", "label-custom-domain-instructions": "Please refer to our {{link}} on our help site for more information.", "label-custom-domain-link-name": "custom domain setup guide", "label-site-usage": "You're using {{site}} out of your {{limit}}.", "button-add-more-sites": "Buy more sites", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "Workspaces", "desc": "Save and load workspace layout.", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "Save", "button-load": "Load", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "Sync", "desc": "Synchronize your files through Obsidian Sync.", "action-view-version-history": "View version history", "label-load-more": "Load more", "label-show-diff": "Show diff", "label-copy-to-clipboard": "Copy to clipboard", "label-restore-this-version": "Restore this version", "msg-already-latest-version": "This version is already the latest version.", "msg-restored-version": "Successfully restored version from {{time}}", "label-file-deleted": "This file was deleted", "label-no-earlier-version": "There was no earlier versions of this file.", "label-empty-file": "Empty", "label-setting-files": "Setting files", "label-deleted-files": "Deleted files", "label-version-history": "Version history", "label-click-to-see-history": "Click on a deleted file to see its history.", "label-create-remote-vault": "Create remote vault", "msg-please-enter-password": "Please enter a password.", "msg-vault-name-cannot-be-empty": "Vault name cannot be empty.", "msg-successfully-created-vault": "Successfully create remote vault \"{{name}}\".", "label-remote-vault-explanation": "Remote vaults securely synchronize your vault between devices.", "option-vault-name": "Vault name", "option-vault-name-desc": "Helps you remember what this vault is for.", "option-vault-name-placeholder": "My awesome vault", "option-use-custom-encryption-password": "Customize end-to-end encryption password", "option-use-custom-encryption-password-desc": "If you turn this off, we will securely manage an encryption key for you.", "option-use-custom-encryption-password-desc-warning": "This option cannot be changed later.", "option-encryption-password": "Encryption password", "option-encryption-password-desc": "This password cannot be changed later.", "option-encryption-password-desc-warning": "If you forget this password, any remote data will remain unusable forever.", "option-encryption-password-desc-2": "This does not affect your local data.", "option-encryption-password-placeholder": "Your password", "label-enter-encryption-password": "Enter encryption password", "button-unlock-vault": "Unlock vault", "msg-verified-password": "Successfully verified your password.", "label-remote-vaults": "Your remote vaults", "label-vault-created-time": "Created {{time}}", "tooltip-delete-remote-vault": "Delete", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "Confirm delete vault", "label-confirm-delete-remote-vault-question": "Are you sure you want to delete this remote vault?", "label-confirm-delete-remote-vault-result": "All data on our server, including version history, will be deleted. Your local files will stay intact.", "label-confirm-delete-remote-vault-warning": "This action is permanent and irreversible.", "msg-remote-vault-deleted": "{{name}} has been deleted.", "button-connect-to-remote-vault": "Connect", "button-disconnect-from-remote-vault": "Disconnect", "label-not-remote-vaults": "You don't have any remote vaults.", "button-create-new-remote-vault": "Create new vault", "label-sync-log": "Sync log", "options-only-show-errors": "Errors only", "options-only-show-errors-desc": "Only show errors and hide other log items.", "button-copy-sync-log": "Copy sync log", "msg-successfully-copied-sync-log": "Successfully copied sync log.", "button-retry": "Retry", "button-purchase-subscription": "Purchase", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "Choose", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "Sync status", "option-sync-status-desc-paused": "Obsidian Sync is currently paused.", "option-sync-status-desc-running": "Obsidian Sync is currently running.", "option-device-name": "Device name", "option-device-name-desc": "This name will be displayed in the sync log. Leave empty to use the default name.", "button-resume": "Resume", "button-pause": "Pause", "option-view-deleted-files": "Deleted files", "option-view-deleted-files-desc": "View and restore deleted files.", "option-sync-log": "Sync activity", "option-sync-log-desc": "View recent sync activities for debugging.", "button-view": "View", "button-bulk-restore": "Bulk restore", "button-restore-selected-files": "Restore selected files", "msg-restoring": "Restoring...", "msg-restoring-complete": "Restore complete: {{succeeded}} succeeded and {{failed}} failed.", "option-over-size": "Vault size over limit", "option-over-size-desc": "Your vault is at {{size}} out of {{limit}}.", "msg-largest-files": "View largest files", "msg-largest-files-desc": "These are the remote files that are taking the most space. After deleting attachments, use the purge button to free up remote vault space.", "button-purge-remote": "Purge", "tooltip-purge-remote": "Permanently purge deleted attachments from remote vault to save space.", "msg-purge-complete": "Purge complete.", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "Selective sync", "option-excluded-folders": "Excluded folders", "option-excluded-folder-desc": "Prevent certain folders from being synced.", "option-currently-excluded-folders": " These folders currently excluded:", "button-manage-excluded-folders": "Manage", "option-sync-image": "Sync images", "option-sync-image-desc": "Sync image files with these extensions: {{extensions}}.", "option-sync-audio": "Sync audio", "option-sync-audio-desc": "Sync audio files with these extensions: {{extensions}}.", "option-sync-video": "Sync videos", "option-sync-video-desc": "Sync video files with these extensions: {{extensions}}.", "option-sync-pdf": "Sync PDFs", "option-sync-pdf-desc": "Sync PDF files.", "option-sync-unsupported": "Sync all other types", "option-sync-unsupported-desc": "Sync unsupported file types.", "option-vault-config-sync": "Vault configuration sync", "option-view-config-files": "Settings version history", "option-view-config-files-desc": "View and restore version history of setting files.", "option-sync-app": "Main settings", "option-sync-app-desc": "Enable to sync editor settings, files & links settings, custom hotkeys, etc.", "option-sync-appearance": "Appearance settings", "option-sync-appearance-desc": "Sync appearance settings like dark mode, active theme, and enabled snippets.", "option-sync-appearance-data": "Themes and snippets", "option-sync-appearance-data-desc": "Sync downloaded themes and snippets. Whether they are enabled depends on the previous setting.", "option-sync-hotkey": "Hotkeys", "option-sync-hotkey-desc": "Sync custom hotkeys.", "option-sync-core-plugin": "Active core plugin list", "option-sync-core-plugin-desc": "Sync which core plugins are enabled.", "option-sync-core-plugin-data": "Core plugin settings", "option-sync-core-plugin-data-desc": "Sync core plugin settings.", "option-sync-community-plugin": "Active community plugin list", "option-sync-community-plugin-desc": "Sync which community plugins are enabled.", "option-sync-community-plugin-data": "Installed community plugins", "option-sync-community-plugin-data-desc": "Sync installed community plugins (.js, .css, and manifest.json files) and their settings.", "label-sync-introduction": "Obsidian Sync is Obsidian's add-on sync service with end-to-end encryption and version history.", "label-account-required": "To start syncing, please log in or create a new Obsidian account.", "button-sign-up": "Sign up", "button-log-in": "Log in", "label-manage-excluded-folders": "Manage excluded folders", "label-number-of-folders-excluded": "{{folders}} are currently excluded from being synced.", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "Setup connection", "label-now-connected-to-vault": "You're now connected to \"{{name}}\".", "button-start-syncing": "Start syncing", "label-confirm-merge-vault": "Confirm Merge Vault", "msg-vault-has-notes": "Your local vault already contains some notes.", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "File recovery", "desc": "Let you restore recent snapshots to recover from accidental data loss. Snapshots are only saved for Markdown files.", "action-open": "Open saved snapshots", "option-interval": "Snapshot interval", "option-interval-description": "Minimal interval in minutes between two snapshots.", "option-keep": "History length", "option-keep-description": "Length in days snapshots is kept for.", "option-open-history": "Snapshots", "option-open-history-description": "View and restore saved snapshots.", "button-view-snapshots": "View", "option-clear": "Clear history", "option-clear-description": "Wipe all snapshots.", "button-clear-history": "Clear", "label-clear-warning": "Are you sure you want to delete all snapshots? Note that only snapshots will be removed. All files inside your vault will not be affected.", "msg-clear-complete": "Snapshots cleared.", "label-no-history-found": "No snapshots found.", "placeholder-choose-file": "Choose a file...", "label-select-file": "Please select a file on the left to view snapshots." }, "note-composer": { "name": "Note composer", "desc": "Merge, split, and refactor notes.", "option-confirm-file-merge": "Confirm file merge", "option-confirm-file-merge-description": "Prompt before merge two files.", "option-split-replacement-text": "Text after extraction", "option-split-replacement-text-description": "What to show in place of the selected text after extracting it.", "option-choice-split-replacement-text-link": "Link to new file", "option-choice-split-replacement-text-embed": "Embed new file", "option-choice-split-replacement-text-none": "None", "option-template-file": "Template file location", "option-template-file-description": "Template file to use when merging or extracting. Available variables: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Merge current file with another file...", "action-merge-file": "Merge entire file with...", "label-no-files": "No files found.", "instruction-navigate": "to navigate", "instruction-merge": "to merge", "instruction-create-new": "to create new", "instruction-merge-at-top": "to merge at top", "instruction-dismiss": "to dismiss", "prompt-select-file-to-merge": "Select file to merge into...", "label-merge-file": "Merge file", "label-confirm-file-merge": "Are you sure you want to merge \"{{file}}\" into \"{{destination}}\"? \"{{file}}\" will be deleted.", "button-merge": "Merge", "button-merge-do-not-ask-again": "Merge and don't ask again", "command-split-file": "Extract current selection...", "command-extract-heading": "Extract this heading...", "instruction-append": "to move to bottom", "instruction-prepend": "to move to top", "msg-fail-to-fetch-template": "Failed to fetch template file: \"{{template}}\" not found.", "msg-fail-to-find-heading": "Failed to find heading" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} word", "word-with-count_plural": "{{count}} words", "character-with-count": "{{count}} character", "character-with-count_plural": "{{count}} characters", "link-with-count": "{{count}} link", "link-with-count_plural": "{{count}} links", "file-with-count": "{{count}} file", "file-with-count_plural": "{{count}} file", "folder-with-count": "{{count}} folder", "folder-with-count_plural": "{{count}} folders", "backlink-with-count": "{{count}} backlink", "backlink-with-count_plural": "{{count}} backlinks", "site-with-count": "{{count}} site", "site-with-count_plural": "{{count}} sites", "plugin-with-count": "{{count}} plugin", "plugin-with-count_plural": "{{count}} plugins", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } }{ "setting": { "options": "Options", "plugin": "Plugin", "builtin-plugins": "Core plugins", "plugin-options": "Plugin options", "folder-path-example-placeholder": "Example: folder 1/folder 2", "file-path-example-placeholder": "Example: folder/note", "msg-restart-required": "Changing this option requires a restart to take effect.", "editor": { "name": "Editor", "section-general": "General", "section-behavior": "Behavior", "section-display": "Display", "option-spellcheck": "Spell check", "option-spellcheck-description": "Turns on the spell checker. Currently only works for English (US).", "spellcheck-languages": "Spellcheck languages", "spellcheck-languages-description": "Choose the languages for the spellchecker to use.", "spellcheck-languages-mac-description": "The native spellchecker will automatically detect the language being used for you on macOS.", "spellcheck-dict": "Spellcheck dictionary", "spellcheck-dict-empty": "The spellcheck dictionary is empty.", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "Readable line length", "option-readable-line-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-strict-line-break": "Strict line breaks", "option-strict-line-break-description": "In preview mode, ignore single line breaks according to the Markdown specs. Turn this off for single line breaks to show in preview.", "option-show-frontmatter": "Show frontmatter", "option-show-frontmatter-description": "In preview mode, show frontmatter as a code block. Turn off to hide frontmatter section.", "option-auto-pair-brackets": "Auto pair brackets", "option-auto-pair-brackets-description": "Pair brackets and quotes automatically.", "option-auto-pair-markdown": "Auto pair Markdown syntax", "option-auto-pair-markdown-description": "Pair symbols automatically for bold, italics, highlight, strikethrough, and code.", "option-smart-indent-lists": "Smart indent lists", "option-smart-indent-lists-description": "Take care of indentation and list marker for you.", "option-fold-heading": "Fold heading", "option-fold-heading-description": "Let you fold everything under a heading.", "option-fold-indent": "Fold indent", "option-fold-indent-description": "Let you fold a portion of the same indentation, such as lists.", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Editing view", "option-default-new-tab-view-reading": "Reading view", "option-default-editing-mode": "Default editing mode", "option-default-editing-mode-description": "The default editing mode a new pane will start with.", "option-default-editing-mode-source": "Source mode", "option-default-editing-mode-live-preview": "Live Preview", "option-show-line-number": "Show line number", "option-show-line-number-description": "Show line number in the gutter.", "option-indentation-guide": "Show indentation guides", "option-indentation-guide-description": "Show vertical relationship lines between bullet points for visual guidance.", "option-use-tabs": "Use tabs", "option-use-tabs-description": "Use tabs to indent when pressing the \"Tab\" key. Set this to off to use spaces.", "option-tab-size": "Tab size", "option-tab-size-description": "Number of spaces a tab is equivalent to.", "option-rtl": "Right-to-left (RTL)", "option-rtl-description": "Sets the text direction of notes to display in right-to-left.", "option-auto-convert-html": "Auto convert HTML", "option-auto-convert-html-description": "Automatically convert HTML to Markdown when pasting and drag-and-drop from webpages. Use Ctrl/Cmd+Shift+V to paste without conversion.", "option-vim-key-bindings": "Vim key bindings", "option-vim-key-bindings-description": "Let you use Vim key bindings in the source editor.", "option-vim-key-bindings-mobile": "On mobile devices, this setting is per-device and is not synchronized through the config file.", "option-emacsy-keys": "Legacy Emacs-style key bindings for macOS", "option-emacsy-keys-description": "Allows you to use the additional Emacs-style navigation keys, which are standard on macOS, but may interfere with some key operations.", "label-confirm-enable-vim": "Confirm entering Vim mode", "label-vim-warning": "Vim mode is for efficient text editing but can be quite counter-intuitive. If you're not familiar with Vim, this option might make it look like Obsidian has stopped working.", "label-vim-test": "To verify that you know your way around Vim, please enter the command to quit Vim without saving below:", "label-vim-your-answer": "Your answer", "placeholder-enter-command": "Enter command...", "button-confirm-enable-vim": "Let me enable Vim", "msg-vim-mode-enabled": "Command is correct. Vim mode now enabled.", "msg-vim-mode-not-enabled": "Command is incorrect. Vim mode remains disabled to protect you.", "msg-vim-mode-please-enter-command": "Please enter the command to enable Vim mode", "option-legacy-editor": "Use legacy editor", "option-legacy-editor-description2": "The legacy editor will be deprecated soon. It is currently no longer maintained, and as such, bugs will no longer be addressed.", "label-legacy-deprecation": "New editor is here", "label-legacy-deprecation-1": "Obsidian now has a brand new editor that's more robust and accessible.", "label-legacy-deprecation-2": "It seems you're still using the legacy editor, and we think you'll enjoy the new editor.", "label-legacy-deprecation-choice": "Which mode would you like to use?", "label-live-preview-description": "A more modern, what-you-see-is-what-you-get experience.", "label-source-mode-description": "See raw Markdown with syntax highlighting.", "button-start-new-editor": "Start new editor" }, "file": { "name": "Files & Links", "option-confirm-file-deletion": "Confirm file deletion", "option-confirm-file-deletion-description": "Whether you want to get prompted to confirm file deletion.", "option-delete-destination": "Deleted files", "option-delete-destination-description": "What to do with files after you delete them.", "option-choice-system-trash": "Move to system trash", "option-choice-vault-trash": "Move to Obsidian trash (.trash folder)", "option-choice-permanent-delete": "Permanent delete", "option-always-update-links": "Always update internal links", "option-always-update-links-description": "Whether to automatically update links after renaming a file or prompt.", "option-new-note-location": "New note default location", "option-new-note-location-description": "Where to put newly created notes. Plugin settings will override this.", "option-choice-vault-root": "Vault root", "option-choice-current-folder": "Same folder as the file is in", "option-choice-specified-folder": "In the folder specified below", "option-new-file-folder-path": "Folder to create new notes in", "option-new-file-folder-path-description": "Newly created notes will appear under this folder. Plugin settings will override this.", "option-use-wiki-links": "Use [[Wikilinks]]", "option-use-wiki-links-description": "Auto-generate Wikilinks for [[links]] and ![[images]] instead of Markdown links and images. Disable this option to generate Markdown links instead.", "option-show-unsupported-files": "Detect all file extensions", "option-show-unsupported-files-description": "Show files with any extension even if Obsidian can't open them natively, so that you can link to them and see them in File Explorer and Quick Switcher.", "option-link-autocompleted-format": "New link format", "option-link-autocompleted-format-description": "What links to insert when auto generating internal links.", "option-choice-shortest-linktext": "Shortest path when possible", "option-choice-relative-path": "Relative path to file", "option-choice-absolute-path": "Absolute path in vault", "option-new-attachment-location": "Default location for new attachments", "option-new-attachment-location-description": "Where newly added attachments are placed.", "option-choice-subdirectory": "In subfolder under current folder", "option-attachment-folder-path": "Attachment folder path", "option-attachment-folder-path-description": "Newly created attachment files will appear here. That includes images created via drag and drop or pasting, and audio recordings.", "option-attachment-subfolder-path": "Subfolder name", "option-attachment-subfolder-path-description": "If your file is under \"vault/folder\", and your set subfolder name to \"attachments\", attachments will be saved to \"vault/folder/attachments\".", "option-attachment-subfolder-path-placeholder": "attachments", "option-excluded-files": "Excluded files", "option-excluded-files-desc": "Excluded files will be either hidden or less noticeable in various places, such as Quick Switcher, link suggestion, and Graph View.", "label-no-excluded-filters-applied": "No excluded filter is applied right now. Add one below.", "label-excluded-filters-applied": "Files matching the following filters are currently excluded:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Enter path or \"/regex/\"..." }, "appearance": { "name": "Appearance", "option-base-theme": "Base theme", "option-base-theme-description": "Choose Obsidian’s default color scheme.", "option-accent-color": "Accent color", "option-accent-color-description": "Choose the accent color used throughout the app.", "dark-theme": "Dark", "light-theme": "Light", "system-theme": "Adapt to system", "option-font": "Font", "option-advanced": "Advanced", "option-interface-font": "Interface font", "option-interface-font-description": "Set base font for all of Obsidian.", "option-text-font": "Text font", "option-text-font-description": "Set font for editing and reading views.", "option-monospace-font": "Monospace font", "option-monospace-font-description": "Set font for places like code blocks and frontmatter.", "label-single-font-currently-in-effect": " Currently applied font: ", "label-multiple-fonts-currently-in-effect": " The following fonts are currently applied:", "option-font-placeholder": "Enter font name...", "label-no-custom-font-set": "No custom font is applied right now. Add one below.", "label-font-applied": "The first font from this list that is available on your system will be applied.", "msg-font-not-found": "This font is not detected on your system.", "msg-font-found": "This font is detected on your system.", "label-font-name": "Font name", "option-community-themes": "Open community themes", "option-community-themes-description": "Preview and use amazing themes created by the community.", "button-browse-community-themes": "Browse", "option-font-size": "Font size", "option-font-size-description": "Font size in pixels that affects editor and preview.", "option-font-size-action": "Quick font size adjustment", "option-font-size-action-description": "Adjust the font size using Ctrl + Scroll, or using the trackpad pinch-zoom gesture.", "option-themes": "Themes", "option-manage-themes-description": "Manage installed themes and browse community themes.", "option-theme-button-manage": "Manage", "option-choice-none": "None", "option-native-menus": "Native menus", "option-native-menus-desc": "Menus throughout the app will match the operating system. They will not be affected by your theme.", "button-reload-themes": "Reload themes", "msg-reloaded-themes": "Reloaded custom CSS themes.", "button-open-themes-folder": "Open themes folder", "option-css-snippets": "CSS snippets", "label-no-css-snippets-found": "No CSS snippets found in the snippets folder.", "no-snippet-description": "CSS Snippets are stored in \"{{path}}\".", "button-reload-snippets": "Reload snippets", "button-open-snippets-folder": "Open snippets folder", "msg-reloaded-snippets": "Reloaded CSS snippets.", "option-toggle-snippet-description": "Apply CSS snippet at \"{{path}}\".", "label-installed-themes": "Installed themes", "label-screenshot-unavailable": "Screenshot unavailable", "label-default-theme": "Default", "tooltip-click-to-enlarge": "Click to enlarge", "button-update": "Update", "label-currently-selected": "Selected", "option-frame-style": "Window frame style", "option-frame-description": "Determines the styling of the title bar of Obsidian windows. Requires a full restart to take effect.", "option-frame-hidden": "Hidden (default)", "option-frame-obsidian": "Obsidian frame", "option-frame-native": "Native frame", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Show tab title bar", "option-show-view-header-desc": "Display the header at the top of every tab.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "button-check-for-updates": "Check for updates", "button-view-updates": "View updates", "button-update-all-themes": "Update all", "label-current-themes": "Current community themes", "label-currently-installed": "You currently have {{count}} theme installed.", "label-currently-installed_plural": "You currently have {{count}} themes installed." }, "hotkeys": { "name": "Hotkeys", "prompt-filter": "Filter...", "tooltip-delete-hotkey": "Delete hotkey", "label-waiting-for-hotkey-press": "Press hotkey...", "tooltip-restore-default": "Restore default", "tooltip-customize-command": "Customize this command", "tooltip-hotkey-single-conflict": "This hotkey conflicts with \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "This hotkey conflicts with {{count}} other commands", "label-blank-hotkey": "Blank" }, "about": { "name": "About", "label-commercial-license": "Commercial license", "label-license-key": "License key", "license-key-placeholder": "Your license key...", "label-activate-license": "Activate license", "button-activate": "Activate", "label-unknown-version": "Unknown", "label-current-version": "Current version: ", "label-install-version": "(Installer version: {{version}})", "label-up-to-date": "Your app is up to date!", "label-read-changelog": "Read the changelog.", "label-manual-update-required": "To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.", "label-download": "Download", "label-new-version-ready": "A new version is ready to be installed. ", "label-relaunch-to-update": "Relaunch the app to update.", "label-disabled-updates": "Updates are disabled.", "label-checking-for-updates": "Checking for updates...", "button-relaunch": "Relaunch", "button-check-for-updates": "Check for updates", "option-auto-update": "Automatic updates", "option-auto-update-description": "Turn this off to prevent the app from checking for updates.", "option-get-help": "Get help", "option-get-help-description": "Get help on using Obsidian.", "button-open": "Open", "option-language": "Language", "option-language-description": "Change the display language.", "option-insider-build": "Receive insider builds", "option-insider-build-description": "Auto-update to insider builds to try out new features. Note that these builds are bleeding edge and might be less stable.", "option-advanced": "Advanced", "option-hw-acceleration": "Hardware Acceleration", "option-hw-acceleration-description": "Turns on Hardware Acceleration, which uses your GPU to make Obsidian smoother.", "option-hw-acceleration-warning": "If you turn this off, app performance will be severely degraded.", "option-config-location": "Override config folder", "option-config-location-description": "Use a different config folder than the default one. Must start with a dot.", "option-config-location-warning": "Config location must be a valid folder name that starts with a dot.", "label-license": "License", "label-your-commercial-license-key": "Your commercial license key is \"{{key}}\".", "label-commercial-license-info": "Registered to \"{{company}}\" for {{seats}} users. Valid until {{expiry}}.", "label-validating-commercial-license": "Validating...", "label-invalid-commercial-license": "License invalid: ", "button-remove-commercial-license": "Remove", "option-catalyst": "Catalyst license", "option-catalyst-desc": "You currently have the {{tier}} Catalyst license. Thanks for your support!", "option-catalyst-desc-no-license": "You don't have a Catalyst license right now. Catalyst license is a one-time donation to support Obsidian development.", "label-app": "App" }, "account": { "name": "Account", "option-your-account": "Your account", "option-your-account-desc": "You're currently signed in {{name}} ({{email}}).", "option-your-account-desc-no-login": "You're not logged in right now. An account is only needed for Obsidian Sync, Obsidian Publish, and Catalyst insider builds.", "button-manage-settings": "Manage settings", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Commercial license", "option-commercial-license-desc": "If you use Obsidian for commercial purpose, you may need to get a commercial license.", "button-purchase": "Purchase", "button-log-out": "Log out", "label-log-in": "Log in", "label-sign-up": "Sign up", "label-email": "Email", "placeholder-email": "Your email...", "label-password": "Password", "placeholder-password": "Your password...", "button-login": "Login", "message-empty-email": "Email cannot be empty.", "message-invalid-email": "Email is not valid.", "message-empty-password": "Password cannot be empty.", "message-login-failed": "Login failed, please double check your email and password.", "label-no-account": "Don't have an account? ", "link-sign-up-now": "Sign up now" }, "core-plugin": { "plugin-list": "Plugin list", "option-search-plugin": "Search core plugins", "option-search-plugin-description": "Filter plugins by name or description.", "placeholder-search-plugin": "Search plugins..." }, "third-party-plugin": { "name": "Third-party plugin", "option-restricted-mode": "Restricted mode", "option-restricted-mode-description": "Restricted mode is off. Turn on to disable community plugins.", "button-turn-on": "Turn on", "option-browse-community-plugins": "Community plugins", "option-browse-community-plugins-description": "Browse and install third-party plugins made by our amazing community.", "button-browse": "Browse", "label-exit-restricted-mode": "Exit Restricted Mode", "label-exit-restricted-mode-description-1": "Community plugins, like any other software you install, could potentially cause data integrity and security issues.", "label-exit-restricted-mode-description-2": "Plugin security is important to us. Here's what we do:", "label-exit-restricted-mode-description-3": "Despite our efforts, there is still a small chance that a community plugin might misbehave.", "label-code-review": "Initial code review", "label-code-review-desc": "Plugins undergo an initial code review by our team before they appear in the store.", "label-open-source": "Open source", "label-open-source-desc": "Most plugins are open source on GitHub, so you can inspect the code yourself.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We have a large community of developers who watch out for each other.", "label-report-mechanism": "Report mechanism", "label-report-mechanism-desc": "We follow up and remove faulty plugins upon user report.", "label-exit-restricted-mode-disable-confirmation": "Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.", "label-learn-more": "Learn more about plugin security", "button-turn-on-community-plugins": "Turn on community plugins", "label-trust-author": "Do you trust the author of this vault?", "label-trust-author-description-1": "You're opening this vault for the first time, and it comes with some plugins.", "label-trust-author-description-2": "If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.", "label-trust-author-description-3": "If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.", "button-enable-plugins": "Trust author and enable plugins", "button-dont-trust-author": "Browse vault in Restricted Mode", "placeholder-community-plugins": "Search community plugins...", "msg-failed-load-plugins": "Failed to load community plugins.", "label-installed": "Installed", "button-install": "Install", "button-enable": "Enable", "button-disable": "Disable", "button-copy-share-link": "Copy share link", "button-donate": "Donate", "label-no-results-found": "No results found.", "msg-failed-to-load-manifest": "Failed to load plugin manifest.", "label-version": "Version: {{version}}", "label-currently-installed-version": " (currently installed: {{version}})", "label-by-author": "By ", "label-repository": "Repository: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "This plugin does not support your device.", "button-update": "Update", "label-no-readme": "This plugin did not provide a README file.", "msg-installing-plugin": "Installing plugin \"{{name}}\"...", "msg-failed-to-install-plugin": "Failed to install plugin \"{{name}}\".", "msg-successfully-installed-plugin": "Successfully installed plugin \"{{name}}\".", "label-installed-plugins": "Installed plugins", "button-reload-plugins": "Reload plugins", "msg-reloaded-third-party-plugins": "Reloaded third-party plugins.", "label-uninstall": "Uninstall", "label-uninstall-plugin": "Uninstall plugin", "label-uninstall-plugin-confirmation": "Are you sure you want to uninstall this plugin? This will delete the folder of the plugin.", "button-open-plugins-folder": "Open plugins folder", "button-check-for-updates": "Check for updates", "button-update-all-plugins": "Update all", "label-current-plugins": "Current plugins", "label-currently-installed": "You currently have {{count}} plugin installed.", "label-currently-installed_plural": "You currently have {{count}} plugins installed.", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Show a message with how long each plugin took to initialize when starting the app.", "msg-no-updates-found": "No plugin updates found.", "msg-updates-found": "Found {{count}} plugin to update.", "msg-updates-found_plural": "Found {{count}} plugins to update.", "msg-update-plugin": "Update to version {{version}}", "option-search-installed-plugin": "Search installed plugins", "option-search-installed-plugin-description": "Filter installed plugins by name or description.", "placeholder-search-installed-plugin": "Search installed plugins...", "show-installed-only": "Show installed only", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "Showing {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Mobile toolbar", "option-configure-quick-action": "Configure mobile Quick Action", "option-configure-quick-action-description": "Configure which command to trigger when pull down from the top. The current command is set to \"{{command}}\".", "button-configure": "Configure", "placeholder-select-quick-action": "Select Quick Action...", "manage-toolbar-options": "Manage toolbar options", "option-internal-link": "Add internal link", "option-internal-embed": "Add embed", "option-tag": "Add tag", "option-heading": "Toggle heading", "option-strikethrough": "Toggle strikethrough", "option-highlight": "Toggle highlight", "option-code": "Toggle code", "option-blockquote": "Toggle blockquote", "option-markdown-link": "Add Markdown link", "option-bullet-list": "Toggle bullet list", "option-numbered-list": "Toggle numbered list", "option-indent-list": "Indent list item", "option-unindent-list": "Unindent list item", "option-undo": "Undo", "option-redo": "Redo", "option-move-caret-up": "Move caret up", "option-move-caret-down": "Move caret down", "option-move-caret-left": "Move caret left", "option-move-caret-right": "Move caret right", "option-first-line": "Go to first line", "option-last-line": "Go to last line", "option-toggle-keyboard": "Toggle keyboard", "option-configure-toolbar": "Configure mobile toolbar", "option-added-options": "Added options", "option-more-toolbar-options": "More toolbar options", "option-attach": "Insert attachment", "option-add-command": "Add global command", "option-add-command-description": "Select any global command to add to the toolbar." } }, "editor": { "search": { "placeholder-find": "Find", "placeholder-replace": "Replace", "label-previous": "Prev", "label-next": "Next", "label-all": "All", "label-exit-search": "Exit search", "label-replace": "Replace", "label-replace-all": "Replace all" }, "link-suggestion": { "label-type-hash": "Type #", "label-link-heading": "to link heading", "label-type-block": "Type ^", "label-link-block": "to link blocks", "label-type-pipe": "Type |", "label-change-display-text": "to change display text", "label-no-match-found": "No match found" }, "spellcheck": { "no-suggestion": "No suggestions...", "add-to-dictionary": "Add to dictionary" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "No heading", "label-heading-level": "Heading {{level}}" }, "print-modal": { "title": "Export to PDF", "caption": "Export \"{{filename}}\" to PDF with the setting below.", "setting-page-size": "Page size", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Include file name as title", "setting-landscape": "Landscape", "setting-margin": "Margin", "setting-margin-default": "Default", "setting-margin-minimal": "Minimal", "setting-margin-none": "None", "setting-downscale-percent": "Downscale percent", "button-export-to-pdf": "Export to PDF" }, "link-popover": { "tooltip-follow-link": "Follow link", "tooltip-open-link": "Open link", "tooltip-search-tag": "Search tag" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Open in default app", "empty-sidebar": "The sidebar is empty, try dragging a pane here.", "sidebar-expand": "Expand", "sidebar-collapse": "Collapse", "msg-fail-to-save-file": "Failed to save file \"{{filepath}}\". {{message}}.", "no-file": "No file", "msg-file-changed": "\"{{file}}\" has been modified externally, merging changes automatically.", "switch-vault": "Open another vault", "help": "Help", "settings": "Settings", "drag-to-rearrange": "Drag to rearrange", "msg-switched-to-read": "Switched default view mode to reading view.", "msg-switched-to-edit": "Switched default view mode to editor.", "msg-upgrade-installer": "To use this feature, please re-install with latest installer available from our website.", "tooltip-restore-default-settings": "Restore default settings", "label-copy": "Copy to clipboard", "copied_generic": "Copied to your clipboard", "copied": "{{item}} copied to your clipboard", "url": "Url", "msg-open-file-through-uri": "Opened file \"{{path}}\"", "msg-file-not-found-through-uri": "File \"{{name}}\" not found.", "delete-action-short-name": "Delete", "msg-indexing": "Obsidian is indexing your vault...\nThis should only happen once.\nSome functionality may not be available until this is complete.", "msg-indexing-complete": "Indexing complete.", "msg-sandbox-vault": "This is a sandbox vault.\nChanges you make in this vault will be lost.", "label-enter-to-create": "Enter to create", "label-update-available": "Update Available", "label-debug-info": "Debug info", "button-learn-more": "Learn more", "button-not-now": "Not now", "button-add": "Add", "button-manage": "Manage", "label-new-tab": "New tab", "msg-tab-busy": "This tab is currently busy, please try again later", "empty-state": { "no-file-open": "No file is open", "create-new-file": "Create new file", "go-to-file": "Go to file", "see-recent-files": "See recent files", "close": "Close", "unknown-pane-title": "Plugin no longer active", "unknown-pane-desc": "The plugin that created this pane ({{type}}) has gone away" }, "menu": { "edit-view": "Edit (Ctrl/Cmd+Click to edit in new pane)", "read-view": "Current view: reading", "switch-to-edit-view": "Click to edit", "switch-to-read-view": "Click to read", "mod-click-open-new-tab": "{{key}}+Click to open in new tab", "find": "Find...", "replace": "Replace...", "edit": "Edit", "preview": "Preview", "more-options": "More options", "close": "Close", "close-others": "Close others", "close-right": "Close tabs to the right", "pin": "Pin", "unpin": "Unpin", "unlink-tab": "Unlink tab", "link-tab": "Link with tab...", "toggle-source-mode": "Source mode", "toggle-reading-view": "Reading view", "delete-file": "Delete file", "create-file": "Create this file", "open-link": "Open link", "open-in-new-tab": "Open in new tab", "open-to-the-right": "Open to the right", "copy-url": "Copy url", "close-current-tab": "Close current tab", "copy": "Copy", "cut": "Cut", "paste": "Paste", "paste-as-plain-text": "Paste as plain text", "select-all": "Select all", "rename-heading": "Rename this heading...", "rename-blockid": "Rename this block ID...", "open-in-new-window": "Open in new window", "move-to-new-window": "Move to new window", "open-in-browser": "Open in browser", "stack-tabs": "Stack tabs", "unstack-tabs": "Unstack tabs" }, "tooltip": { "click-to-expand": "Click to expand", "click-to-collapse": "Click to collapse", "alias": "Alias", "not-created-yet": "Not created yet, select to create" }, "start-screen": { "label-version": "Version", "option-open-folder-as-vault": "Open folder as vault", "option-open-folder-as-vault-description": "Choose an existing folder of Markdown files.", "option-create-vault": "Create new vault", "option-create-vault-description": "Create a new Obsidian vault under a folder.", "option-connect-obsidian-sync": "Connect to Obsidian Sync", "option-connect-obsidian-sync-description": "Set up a synced vault with existing remote vault.", "option-new-vault-name": "Vault name", "option-new-vault-name-description": "Pick a name for your awesome vault.", "option-new-vault-location": "Location", "option-new-vault-location-description": "Pick a place to put your new vault.", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Reveal vault in system explorer", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "Rename vault...", "msg-error-rename-exists": "There is already a vault with this name.", "msg-error-nested": "Cannot move vault into a subfolder of itself.", "msg-error-rename-open": "Can't rename a currently open vault.", "msg-rename-failed": "Failed to rename vault.", "msg-rename-success": "Successfully renamed vault.", "option-move-vault": "Move vault...", "msg-move-select-dest": "Select destination folder", "msg-error-move-exists": "There is already a vault at the destination.", "msg-error-move-open": "Can't move a currently open vault.", "msg-move-failed": "Failed to move vault.", "msg-move-success": "Successfully moved vault.", "option-remove": "Remove from list", "button-quick-start": "Quick start", "button-open": "Open", "button-browse": "Browse", "button-connect": "Connect", "button-create-vault": "Create", "button-back": "Back", "msg-empty-vault-name": "Vault name cannot be empty.", "msg-invalid-folder": "Please pick a valid folder.", "msg-failed-to-create-vault": "Failed to create vault.", "msg-failed-to-create-vault-at-location": "Could not create vault at the given location. Please double check the location and permission.", "msg-error-failed-to-open-vault": "Failed to open.", "msg-error-remove-current-open-vault": "Can't remove a currently open vault.", "option-get-help": "Get Help", "option-user-email": "Email", "placeholder-your-email": "Your email...", "option-user-password": "Password", "placeholder-your-password": "Your password...", "button-sign-in": "Sign in", "button-setup": "Setup", "option-connect-vault-desc": "Create a synced vault on this device.", "tooltip-own-vault": "This is a remote vault owned by you.", "tooltip-shared-vault": "This is a remote vault shared with you." }, "drag-and-drop": { "insert-link-here": "Insert link here", "insert-links-here": "Insert links here", "move-into-folder": "Move into \"{{folder}}\"", "star-this-file": "Star this file", "star-these-files": "Star these files", "open-in-this-tab": "Open in this tab", "open-as-tab": "Open as new tab" }, "window": { "maximize": "Maximize", "minimize": "Minimize", "restore-down": "Restore down", "close-window": "Close window", "go-back": "Go back", "go-forward": "Go forward" }, "start-up": { "loading-obsidian": "Loading Obsidian...", "obsidian-load-error": "An error occurred while loading Obsidian.", "button-reload-app": "Reload app", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "Open another vault", "loading-components": "Loading components...", "loading-plugins": "Loading plugins...", "loading-vault": "Loading vault...", "msg-failed-to-load-vault": "Failed to load vault: ", "loading-cache": "Loading cache...", "loading-workspace": "Loading workspace..." }, "mobile": { "action-import": "Import into vault", "action-choose-file-to-insert": "Choose a file to insert", "action-insert-text-into-file": "Insert text into {{filename}}", "action-insert-link-into-file": "Insert link into {{filename}}", "msg-importing": "Importing...", "msg-import-success": "Import success", "msg-failed-to-import-file": "Failed to import file {{filename}}", "msg-back-again-to-exit": "Press back again to exit." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "Save current file", "follow-cursor-link": "Follow link under cursor", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "Toggle pin", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "Navigate back", "navigate-forward": "Navigate forward", "use-dark-mode": "Use dark mode", "use-light-mode": "Use light mode", "change-theme": "Change theme", "search-current-file": "Search current file", "search-replace-current-file": "Search & replace in current file", "open-settings": "Open settings", "open-help": "Open help", "toggle-edit": "Toggle editing/reading view", "toggle-source-mode": "Toggle Live Preview/Source mode", "delete-current-file": "Delete current file", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "Toggle left sidebar", "toggle-right-sidebar": "Toggle right sidebar", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "Focus on editor", "toggle-fold": "Toggle fold on the current line", "fold-all": "Fold all headings and lists", "unfold-all": "Unfold all headings and lists", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "Swap line up", "swap-line-down": "Swap line down", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "Toggle bold for selection", "toggle-italics": "Toggle italics for selection", "toggle-highlight": "Toggle highlight for selection", "toggle-comments": "Toggle comments for selection", "insert-link": "Insert link", "toggle-spellcheck": "Toggle spellcheck", "delete-paragraph": "Delete paragraph", "toggle-checklist": "Toggle checklist status", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "Edit file title", "copy-path": "Copy file path", "copy-url": "Copy obsidian url", "export-pdf": "Export to PDF", "reload": "Reload app without saving", "undo-close-tab": "Undo close tab", "context-menu": "Show context menu under cursor", "show-debug-info": "Show debug info", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "Toggle edit/preview mode", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "This will affect {{links}} in {{files}}.", "msg-updated-links": "Updated {{links}} in {{files}}.", "label-update-links": "Update links", "label-confirm-update-link-to-file": "Do you want to update internal links that link to this file?", "button-always-update": "Always update", "button-just-once": "Just once", "button-do-not-update": "Do not update", "label-confirm-deletion": "Are you sure you want to delete \"{{filename}}\"?", "label-move-to-system-trash": "It will be moved to your system trash.", "label-move-to-vault-trash": "It will be moved to your Obsidian trash, which is located in the \".trash\" hidden folder in your vault.", "label-permanent-delete": "The file will be permanent deleted.", "label-non-empty-folder": "This folder is not empty.", "label-delete-folder-warning": "If you continue, all files inside this folder will be deleted.", "label-delete-folder": "Delete folder", "button-delete": "Delete", "button-delete-do-not-ask-again": "Delete and don't ask again", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "There are currently {{links}} pointing to this note.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "Delete file", "button-manage": "Manage", "button-cancel": "Cancel", "button-done": "Done", "button-save": "Save", "button-stop": "Stop", "button-continue": "Continue", "preparing-pdf": "Preparing PDF...", "label-rename-file": "Rename file", "label-new-name": "New name", "msg-rename-success": "Successfully renamed file.", "label-rename-heading": "Rename heading", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "Plugins", "file-explorer": { "name": "File explorer", "desc": "See all the files in your vault.", "action-open": "Open file explorer", "action-show": "Show file explorer", "action-create-note": "Create new note", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "New note", "action-new-folder": "New folder", "action-change-sort": "Change sort order", "action-reveal-file": "Reveal file in file explorer", "action-reveal-active-file": "Reveal active file in file explorer", "command-move-file": "Move file to another folder", "action-move-file": "Move file to...", "action-move-folder": "Move folder to...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "Type a folder", "label-no-folders": "No folders found.", "instruction-navigate": "to navigate", "instruction-move": "to move", "instruction-dismiss": "to dismiss", "label-sort-a-to-z": "Sort by file name (A to Z)", "label-sort-z-to-a": "Sort by file name (Z to A)", "label-sort-new-to-old": "Sort by edit time (new to old)", "label-sort-old-to-new": "Sort by edit time (old to new)", "label-sort-created-old-to-new": "Created time (old to new)", "label-sort-created-new-to-old": "Created time (new to old)", "menu-opt-new-note": "New note", "menu-opt-new-folder": "New folder", "menu-opt-set-attachment-folder": "Set as attachment folder", "menu-opt-rename": "Rename", "menu-opt-delete": "Delete", "menu-opt-make-copy": "Make a copy", "msg-invalid-characters": "File name cannot contain any of the following characters: ", "msg-unsafe-characters": "Links will not work with file names containing any of these characters: ", "msg-file-already-exists": "There's already a file with the same name", "msg-empty-file-name": "File name cannot be empty.", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "Last modified at {{time}}", "tooltip-created-time": "Created at {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Move", "label-untitled-file": "Untitled", "label-untitled-folder": "Untitled", "msg-set-attachment-folder": "Attachments will be saved to \"{{path}}\" from now on." }, "search": { "name": "Search", "desc": "Search for keyword in all the notes.", "action-open-search": "Search in all files", "label-collapse-results": "Collapse results", "label-match-case": "Match case", "label-explain-search-term": "Explain search term", "label-more-context": "Show more context", "prompt-start-search": "Type to start search...", "label-match-text": "Matches text: ", "label-match-regex": "Matches regex: ", "label-match-exact-text": "Contains exact text: ", "label-match-all": "Match all of: ", "label-match-any": "Match any of: ", "label-excluding": "Excluding: ", "label-case-sensitive": "Case sensitive", "label-case-insensitive": "Case insensitive", "label-match-file-path": "Match file path: ", "label-match-file-name": "Match file name: ", "label-match-content": "Match file content: ", "label-match-task": "Match task: ", "label-match-task-todo": "Match task (todo): ", "label-match-task-done": "Match task (done): ", "label-match-line": "Match line: ", "label-match-block": "Match block: ", "label-match-section": "Match section: ", "label-match-tag": "Match tag: ", "label-no-matches": "No matches found.", "matches-with-count": "... and {{count}} more match.", "matches-with-count_plural": "... and {{count}} more matches.", "label-copy-search-results": "Copy search results", "button-copy-results": "Copy results", "msg-successfully-copied": "Results copied to your clipboard.", "option-show-path": "Show path", "option-show-path-description": "Display full path of the file rather than just the file name.", "option-link-style": "Link style", "option-link-style-description": "Optionally turn each file result in to a link.", "option-choice-link-style-none": "None", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Markdown link", "option-list-prefix": "List prefix", "option-list-prefix-description": "Optionally add a list item prefix to each file result.", "option-choice-list-style-none": "None", "option-choice-list-style-dash": "Dash (-)", "option-choice-list-style-asterisk": "Asterisk (*)", "option-choice-list-style-numbered": "Numbered", "tooltip-clear-search": "Clear search", "label-search-options": "Search options", "tooltip-read-more": "Read more", "label-history": "History", "tooltip-clear-history": "Clear search history", "label-path-option-description": "match path of the file", "label-file-name-option-description": "match file name", "label-tag-option-description": "search for tags", "label-line-option-description": "search keywords on same line", "label-section-option-description": "search keywords under same heading", "menu-opt-search-for": "Search for \"{{keyword}}\"" }, "quick-switcher": { "name": "Quick switcher", "desc": "Jump to any files without leaving your keyboard. Ctrl/Cmd+O to activate.", "short-name": "Switcher", "action-open": "Open quick switcher", "instruction-navigate": "to navigate", "instruction-open": "to open", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "to create", "instruction-dismiss": "to dismiss", "label-no-note-create-new": "No notes found. Enter to create a new one.", "prompt-type-file-name": "Type file to switch to or create...", "label-enter-to-create": "Enter to create", "tooltip-not-created-yet": "Not created yet, select to create", "option-show-existing-only": "Show existing only", "option-show-existing-only-description": "Whether to show links to files that are not yet created.", "option-show-attachments": "Show attachments", "option-show-attachments-desc": "Show attachment files like images, videos, and PDFs.", "option-show-all-file-types": "Show all file types", "option-show-all-file-types-desc": "Show all files including ones that Obsidian can't open. The file will be opened with the default app for that file type." }, "graph-view": { "name": "Graph view", "desc": "See a graph overview of which notes link to which.", "action-open": "Open graph view", "action-open-local": "Open local graph", "action-copy-screenshot": "Copy screenshot", "tab-title": "Graph of {{displayText}}", "label-filters": "Filters", "prompt-filter-nodes": "Search files...", "option-depth": "Depth", "option-depth-description": "Show nodes this number of links away", "option-neighbor-links": "Neighbor links", "option-neighbor-links-description": "Show links between neighbors.", "option-forelinks": "Outgoing links", "option-forelinks-description": "Show links to other files", "option-backlinks": "Incoming links", "option-backlinks-description": "Show links from other files", "option-show-tags": "Tags", "option-show-tags-description": "Tags are linked to the files that contain them", "option-show-attachments": "Attachments", "option-show-attachments-description": "Show attachments included by files", "option-show-existing-files-only": "Existing files only", "option-show-existing-files-only-description": "When checked, links to nonexistent files are not shown", "option-show-orphans": "Orphans", "option-show-orphans-description": "Show files that are not linked to any other file", "label-display": "Display", "option-show-arrows": "Arrows", "option-show-arrows-description": "Show arrows when zoomed in", "option-text-fade": "Text fade threshold", "option-node-size": "Node size", "option-link-thickness": "Link thickness", "label-forces": "Forces", "option-center-force": "Center force", "option-link-force": "Link force", "option-link-distance": "Link distance", "option-repel-force": "Repel force", "tooltip-open-graph-settings": "Open graph settings", "msg-screenshot-copied": "Screenshot copied to the clipboard.", "label-groups": "Groups", "placeholder-enter-query": "Enter query...", "tooltip-delete-graph": "Delete group", "button-new-group": "New group", "tooltip-click-to-change-drag-to-reorder": "Click to change color\nDrag to reorder groups", "action-timelapse": "Start graph timelapse animation", "tooltip-start-timelapse-animation": "Start timelapse animation", "button-animate-timelapse": "Animate" }, "backlinks": { "name": "Backlinks", "desc": "Show number of backlinks in the status bar.", "action-open": "Open backlinks", "action-show": "Show backlinks pane", "action-open-for-current": "Open backlinks for the current file", "action-toggle-backlinks-in-document": "Toggle backlinks in document", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "Linked mentions", "label-no-backlinks": "No backlinks found.", "label-unlinked-mentions": "Unlinked mentions", "label-show-search": "Show search filter", "label-link-button-text": "Link", "tab-title": "Backlinks for {{displayText}}", "label-no-unlinked-mentions": "No unlinked mentions found.", "ellipsis": "...", "option-backlink-in-document": "Backlink in document", "option-backlink-in-document-desc": "Show backlinks in document by default when opening new panes." }, "outgoing-links": { "name": "Outgoing Links", "desc": "Show outgoing links and detect unlinked mentions of other notes in the current note.", "action-open": "Open outgoing links", "action-show": "Show outgoing links pane", "action-open-for-current": "Open outgoing links for the current file", "tab-title": "Outgoing links from {{displayText}}", "label-links": "Links", "label-no-links": "No links found.", "label-unlinked-mentions": "Unlinked mentions", "tooltip-link-file": "Link this file", "tooltip-not-created": "Not created yet" }, "tag-pane": { "name": "Tag pane", "desc": "Displays all your tags and along with their number of occurrences.", "action-show": "Show tag pane", "label-no-tags": "No tags found.", "label-sort-by-name-a-to-z": "Tag name (A to Z)", "label-sort-by-name-z-to-a": "Tag name (Z to A)", "label-sort-by-frequency-high-to-low": "Frequency (high to low)", "label-sort-by-frequency-low-to-high": "Frequency (low to high)", "action-show-nested-tags": "Show nested tags", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "Page preview", "desc": "Preview a note when hovering an internal link. Ctrl/Cmd + hover in editor mode.", "label-empty-note": "\"{{linktext}}\" is not created yet. Click to create.", "label-source-editor": "Editor", "label-source-preview": "Preview", "label-source-search": "Search, Backlinks, and Outgoing links", "label-require-mod": "Require {{key}} to trigger page preview on hover" }, "starred": { "name": "Starred", "desc": "Star frequently used files and searches.", "action-show": "Show starred pane", "action-toggle": "Star/unstar current file", "action-toggle-search": "Star/unstar current search", "action-star": "Star", "action-unstar": "Unstar", "menu-opt-remove": "Remove", "msg-successfully-starred": "Successfully starred {{type}} \"{{title}}\".", "msg-removed-starred": "Removed starred {{type}} \"{{title}}\".", "msg-cannot-find-path": "Cannot find file at \"{{path}}\"." }, "custom-css": { "name": "Custom CSS", "desc": "Reads \"obsidian.css\" in the vault and applies it.", "setting-community-themes": "Community themes", "msg-fetching-themes": "Fetching community theme data...", "prompt-filter": "Filter...", "label-dark-theme-only": "Dark themes only", "label-light-theme-only": "Light themes only", "label-use": "Use", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "Update", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "Remove theme", "label-visit-on-github": "Visit on GitHub", "msg-load-error": "Could not load community themes, please check your network.", "msg-now-using-theme": "You're now using {{title}} as your CSS theme.", "msg-deleted-theme": "The theme {{title}} has been deleted.", "msg-updated-theme": "The theme {{title}} has been updated.", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "Command palette", "desc": "Type a command to invoke it. No need to use the UI or remember the shortcut.", "action-open": "Open command palette", "instruction-navigate": "to navigate", "instruction-use": "to use", "instruction-dismiss": "to dismiss", "label-no-commands": "No commands found.", "prompt-type-command": "Type a command...", "label-pinned-commands": "Pinned commands", "option-add-new-pin": "New pinned command", "option-add-new-pin-description": "Pinned commands will appear at the top of all commands when no search query is present." }, "markdown-format-importer": { "name": "Markdown format importer", "desc": "Convert Markdown from other apps to Obsidian format.", "action-open": "Open Markdown importer", "option-roam-tag-fixer": "Roam Research tag fixer", "option-roam-tag-fixer-description": "Converts \"#tag\" and \"#[[tag]]\" to \"[[tag]]\".", "option-roam-highlight-fixer": "Roam Research highlight fixer", "option-roam-highlight-fixer-description": "Converts \"^^highlight^^\" to \"==highlight==\".", "option-roam-todo-converter": "Roam Research TODO converter", "option-roam-todo-converter-description": "Converts \"{{[[TODO]]}}\" to \"[ ]\".", "option-bear-highlight-fixer": "Bear highlight fixer", "option-bear-highlight-fixer-description": "Converts \"::highlight::\" to \"==highlight==\".", "zettelkasten-link-fixer": "Zettelkasten link fixer", "zettelkasten-link-fixer-description": "Fixes \"[[UID]]\" links to full \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Zettelkasten link beautifier", "zettelkasten-link-beautifier-description": "Fixes \"[[UID]]\" links and also beautify them \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Warning: the importer will convert all the files in your vault, not just the current file.", "msg-override-files-warning": "Your files will be overwritten. Back up all your files before attempting conversion.", "label-start-conversion": "Start Conversion", "label-stop": "Stop", "label-go-back": "Go back", "label-done": "Done", "label-processing": "Processing...", "label-cancelling": "Cancelling...", "label-finished": "Finished!", "label-processed-files": "Processed files", "label-modified-files": "Modified files", "label-total-replacements": "Total replacements" }, "daily-notes": { "name": "Daily notes", "desc": "Open today's daily note, or create one if not present.", "short-name": "Today", "action-open": "Open today's note", "action-open-previous": "Open previous daily note", "action-open-next": "Open next daily note", "action-insert-text": "Insert text into daily note", "action-insert-link": "Insert link into daily note", "msg-fail-format": "Failed to create daily note. \"{{format}}\" is not a valid format.", "msg-fail-folder": "Failed to create daily note. Folder \"{{folderOption}}\" not found.", "msg-fail-template-file": "Failed to create daily note. Template file \"{{template}}\" not found.", "msg-no-previous": "There's no daily note before this one.", "msg-no-next": "There's no daily note after this one.", "option-date-format": "Date format", "label-refer-to-syntax": "For more syntax, refer to: ", "label-syntax-link": "format reference", "label-syntax-live-preview": "Here is what it will look like: ", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new daily note.", "option-template": "Template file location", "option-template-description": "The file path to use as template.", "option-open-on-start": "Open daily note on startup", "option-open-on-start-description": "Open your daily note automatically whenever you open this vault." }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Random note", "desc": "Opens a random note. Useful for reviewing and discovering.", "short-name": "Random", "action-open": "Open random note" }, "outline": { "name": "Outline", "desc": "Displays the outline of the current file or linked pane.", "action-open": "Open outline", "action-show": "Show outline pane", "action-open-for-current": "Open outline of the current file", "tab-title": "Outline of {{displayText}}", "label-no-headings": "No headings found." }, "word-count": { "name": "Word count", "desc": "Show word count in the status bar." }, "slides": { "name": "Slides", "desc": "Present from Markdown. Use \"---\" to separate slides.", "action-start": "Start presentation" }, "audio-recorder": { "name": "Audio recorder", "desc": "Record audio and save as attachment.", "action-start": "Start recording audio", "action-stop": "Stop recording audio", "action-toggle": "Start/stop recording", "msg-access-denied": "Microphone access was denied, please enable it from the preference pane.", "msg-pending-grant": "Please grant microphone permission to start recording.", "msg-no-microphone": "No microphone is connected." }, "open-with-default-app": { "name": "Open in default app", "desc": "Add button to open current file in the default app.", "action-open-file": "Open in default app", "action-open-file-mobile": "Share", "action-show-in-folder": "Show in folder", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "Templates", "desc": "Insert template content from a folder of template files.", "action-insert": "Insert template", "action-insert-current-date": "Insert current date", "action-insert-current-time": "Insert current time", "option-template-folder-location": "Template folder location", "option-template-folder-location-description": "Files in this folder will be available as templates.", "option-template-date-format": "Date format", "option-template-date-format-description": "{{date}} in the template file will be replaced with this value.", "option-template-date-format-description2": "You can also use {{date:YYYY-MM-DD}} to override the format once.", "option-template-time-format": "Time format", "option-template-time-format-description": "{{time}} in the template file will be replaced with this value.", "option-template-time-format-description2": "You can also use {{time:HH:mm}} to override the format once.", "instruction-navigate": "to navigate", "instruction-insert": "to insert template", "instruction-dismiss": "to dismiss", "msg-no-templates-found": "No templates found", "msg-fail-invalid-folder": "Failed to list templates. Template folder is invalid.", "msg-fail-folder-not-found": "Failed to list templates. Folder \"{{folderOption}}\" not found.", "prompt-type-template": "Type name of a template..." }, "translucency": { "name": "Translucent window", "desc": "Turn on translucency effect to enhance a sense of depth. Best used with dark mode. Not supported on Linux." }, "slash-command": { "name": "Slash commands", "desc": "Enable the ability to trigger slash commands in the editor by typing the forward slash." }, "editor-status": { "name": "Editor status", "desc": "Adds a status bar item to show and change the current editor mode.", "read": "Reading", "edit-source": "Source mode", "edit-live-preview": "Live Preview" }, "publish": { "name": "Publish", "desc": "Publish your notes through Obsidian Publish.", "action-publish-changes": "Publish changes...", "label-no-internet-access": "You need access to the internet to publish changes.", "label-publish-service-description": "Obsidian Publish is an add-on paid service that lets you publish your notes online directly from Obsidian.", "label-please-login": "To start publishing, please log in or create a new Obsidian account.", "label-no-publish-subscription": "You do not have an Obsidian Publish subscription yet.", "button-purchase": "Purchase", "label-manage-sites": "Manage sites", "label-no-sites": "You don't have any sites.", "button-choose": "Choose", "tooltip-edit-site-id": "Edit site ID", "tooltip-delete-site": "Delete site", "label-delete-site-confirmation": "Are you sure you want to delete this site?", "label-delete-site-details": "This will immediately and permanently delete your site.", "label-confirm-delete-site": "Confirm delete site \"{{site}}\"", "option-site-id": "Site ID", "option-site-id-description": "Your site will be at https://publish.obsidian.md/{site id}. You can change this later. Only lower case letters, numbers, and dashes are allowed.", "option-site-id-placeholder": "Pick a site ID", "button-create": "Create", "msg-invalid-site-id": "Site ID can only contain lowercase letters, numbers, and dashes.", "msg-site-id-in-use": "This site ID is in use, please try another one.", "msg-create-site-issue": "That was an issue when creating your site.", "label-site-options": "Site options", "option-site-general": "General", "option-site-components": "Components", "option-site-appearance": "Appearance", "option-site-reading-experience": "Reading experience", "option-site-misc": "Other site settings", "option-site-name": "Site name", "option-site-name-description": "Name of your published site. It will show up in the page title of your site.", "option-site-name-placeholder": "Name of your site", "option-home-page-file": "Homepage file", "option-home-page-file-description": "The first page the user sees when landing on your published site", "option-home-page-file-placeholder": "Pick a published file", "option-logo": "Logo", "option-logo-description": "Pick an image file as your site logo.", "option-logo-placeholder": "Any uploaded image in your vault...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "Theme", "option-theme-description": "Choose default color scheme for your site.", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "Show navigation", "option-show-navigation-description": "Display a list of all published pages on the left side of your published site.", "option-show-search": "Show search bar", "option-show-search-description": "Display a search bar at top of the navigation that lets the visitors search pages and headings on your site.", "option-show-graph": "Show graph view", "option-show-graph-description": "Display a small local graph on each page.", "option-show-outline": "Show table of contents", "option-show-outline-description": "Display the outline of headings on each page.", "option-show-backlinks": "Show backlinks", "option-show-backlinks-description": "Show backlink section at the end of each page.", "option-sliding-window-mode": "Use sliding windows", "option-sliding-window-mode-description": "Open pages in new panes to the right. Allows scrolling through panes horizontally.", "option-hover-preview-file": "Show hover preview", "option-hover-preview-file-description": "Display page preview when hovering links.", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "Readable line length", "option-readable-line-length-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-site-password": "Passwords", "option-site-password-description": "Restrict access to your site with passwords.", "option-google-analytics": "Google Analytics tracking code", "option-google-analytics-description": "Configure Google Analytics for your site. Only available for visitors from your custom domain URL. Please check with your local laws and regulations first.", "button-manage-passwords": "Manage", "button-save-site-settings": "Save site settings", "msg-updated-options": "Updated options for your site.", "button-go-back": "Back", "label-publishing-to": "Publishing to", "tooltip-switch-site": "Switch site", "button-add-linked": "Add linked", "tooltip-add-linked": "Add all files that are linked by currently selected items", "msg-added-linked-files": "{{count}} linked file has been added.", "msg-added-linked-files_plural": "{{count}} linked files have been added.", "tooltip-open-site-options": "Change site options", "label-no-changes-detected": "No changes were detected.", "label-changed-files-to-be-published": "Changes", "label-unchanged-files-already-published": "Unchanged (select to delete)", "label-file-selected": " selected", "button-select-all-files": "Select all", "button-deselect-all-files": "Deselect all", "label-new-files-to-be-published": "New", "button-publish": "Publish", "msg-no-permission-to-publish-to-site": "You do not have permissions to publish to the current site.", "msg-select-at-least-one-file": "Please select at least one file.", "label-upload-changes": "Upload changes", "button-done": "Done", "button-stop": "Stop", "label-status-uploading": "Uploading", "label-status-to-publish": "To publish", "label-status-to-delete": "To delete", "label-status-published": "Published", "label-status-deleted": "Deleted", "label-status-failed": "Failed", "label-status-cancelled": "Cancelled", "button-change": "Change", "label-clear-cache": "It takes up to a few minutes for the changes to show up on your site. If you do not see your latest changes, try clearing the cache in your browser.", "label-visit-site": "You can visit your site here: ", "msg-something-went-wrong": "Something went wrong. Please check the developer console for details.", "msg-network-error": "A network error occurred. ", "label-manage-passwords": "Manage passwords", "label-add-password": "Add password", "action-new-password": "New password", "label-no-password": "Your site currently does not have any passwords. Anyone can visit it.", "label-have-password": "Your site is password protected. If you have multiple passwords, visitors can access your site by entering any of them.", "option-password-name": "Password", "option-password-desc": "A hash of your password will be stored securely. Once the password is set, it cannot be revealed in plaintext.", "option-password-placeholder": "Your password", "option-nickname-name": "Nickname (optional)", "option-nickname-desc": "Set a nickname to remind yourself what or who the password is for.", "action-add-password": "Add this password", "label-untitled-password": "Untitled password", "label-password-created-time": "Created {{time}}", "msg-added-new-password": "Added new password.", "option-custom-domain": "Custom domain", "option-custom-domain-desc": "Use your own domain rather than the https://publish.obsidian.md/{site id} URL.", "option-noindex": "Disallow search engine indexing", "option-noindex-desc": "Prevent search engines from indexing your site.", "button-configure": "Configure", "label-configure-custom-domain": "Configure custom domain", "option-custom-url-name": "Custom URL", "option-custom-url-desc": "The URL that your site will be located at.", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "Redirect to your custom domain", "option-custom-url-redirect-desc": "Redirect visitors on publish.obsidian.md/id to your custom domain.", "button-update-custom-domain": "Update domain setting", "label-custom-domain-instructions": "Please refer to our {{link}} on our help site for more information.", "label-custom-domain-link-name": "custom domain setup guide", "label-site-usage": "You're using {{site}} out of your {{limit}}.", "button-add-more-sites": "Buy more sites", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "Workspaces", "desc": "Save and load workspace layout.", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "Save", "button-load": "Load", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "Sync", "desc": "Synchronize your files through Obsidian Sync.", "action-view-version-history": "View version history", "label-load-more": "Load more", "label-show-diff": "Show diff", "label-copy-to-clipboard": "Copy to clipboard", "label-restore-this-version": "Restore this version", "msg-already-latest-version": "This version is already the latest version.", "msg-restored-version": "Successfully restored version from {{time}}", "label-file-deleted": "This file was deleted", "label-no-earlier-version": "There was no earlier versions of this file.", "label-empty-file": "Empty", "label-setting-files": "Setting files", "label-deleted-files": "Deleted files", "label-version-history": "Version history", "label-click-to-see-history": "Click on a deleted file to see its history.", "label-create-remote-vault": "Create remote vault", "msg-please-enter-password": "Please enter a password.", "msg-vault-name-cannot-be-empty": "Vault name cannot be empty.", "msg-successfully-created-vault": "Successfully create remote vault \"{{name}}\".", "label-remote-vault-explanation": "Remote vaults securely synchronize your vault between devices.", "option-vault-name": "Vault name", "option-vault-name-desc": "Helps you remember what this vault is for.", "option-vault-name-placeholder": "My awesome vault", "option-use-custom-encryption-password": "Customize end-to-end encryption password", "option-use-custom-encryption-password-desc": "If you turn this off, we will securely manage an encryption key for you.", "option-use-custom-encryption-password-desc-warning": "This option cannot be changed later.", "option-encryption-password": "Encryption password", "option-encryption-password-desc": "This password cannot be changed later.", "option-encryption-password-desc-warning": "If you forget this password, any remote data will remain unusable forever.", "option-encryption-password-desc-2": "This does not affect your local data.", "option-encryption-password-placeholder": "Your password", "label-enter-encryption-password": "Enter encryption password", "button-unlock-vault": "Unlock vault", "msg-verified-password": "Successfully verified your password.", "label-remote-vaults": "Your remote vaults", "label-vault-created-time": "Created {{time}}", "tooltip-delete-remote-vault": "Delete", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "Confirm delete vault", "label-confirm-delete-remote-vault-question": "Are you sure you want to delete this remote vault?", "label-confirm-delete-remote-vault-result": "All data on our server, including version history, will be deleted. Your local files will stay intact.", "label-confirm-delete-remote-vault-warning": "This action is permanent and irreversible.", "msg-remote-vault-deleted": "{{name}} has been deleted.", "button-connect-to-remote-vault": "Connect", "button-disconnect-from-remote-vault": "Disconnect", "label-not-remote-vaults": "You don't have any remote vaults.", "button-create-new-remote-vault": "Create new vault", "label-sync-log": "Sync log", "options-only-show-errors": "Errors only", "options-only-show-errors-desc": "Only show errors and hide other log items.", "button-copy-sync-log": "Copy sync log", "msg-successfully-copied-sync-log": "Successfully copied sync log.", "button-retry": "Retry", "button-purchase-subscription": "Purchase", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "Choose", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "Sync status", "option-sync-status-desc-paused": "Obsidian Sync is currently paused.", "option-sync-status-desc-running": "Obsidian Sync is currently running.", "option-device-name": "Device name", "option-device-name-desc": "This name will be displayed in the sync log. Leave empty to use the default name.", "button-resume": "Resume", "button-pause": "Pause", "option-view-deleted-files": "Deleted files", "option-view-deleted-files-desc": "View and restore deleted files.", "option-sync-log": "Sync activity", "option-sync-log-desc": "View recent sync activities for debugging.", "button-view": "View", "button-bulk-restore": "Bulk restore", "button-restore-selected-files": "Restore selected files", "msg-restoring": "Restoring...", "msg-restoring-complete": "`Restore complete: {{succeeded}} succeeded and {{failed}} failed.`", "option-over-size": "Vault size over limit", "option-over-size-desc": "Your vault is at {{size}} out of {{limit}}.", "msg-largest-files": "View largest files", "msg-largest-files-desc": "These are the remote files that are taking the most space. After deleting attachments, use the purge button to free up remote vault space.", "button-purge-remote": "Purge", "tooltip-purge-remote": "Permanently purge deleted attachments from remote vault to save space.", "msg-purge-complete": "Purge complete.", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "Selective sync", "option-excluded-folders": "Excluded folders", "option-excluded-folder-desc": "Prevent certain folders from being synced.", "option-currently-excluded-folders": " These folders currently excluded:", "button-manage-excluded-folders": "Manage", "option-sync-image": "Sync images", "option-sync-image-desc": "Sync image files with these extensions: {{extensions}}.", "option-sync-audio": "Sync audio", "option-sync-audio-desc": "Sync audio files with these extensions: {{extensions}}.", "option-sync-video": "Sync videos", "option-sync-video-desc": "Sync video files with these extensions: {{extensions}}.", "option-sync-pdf": "Sync PDFs", "option-sync-pdf-desc": "Sync PDF files.", "option-sync-unsupported": "Sync all other types", "option-sync-unsupported-desc": "Sync unsupported file types.", "option-vault-config-sync": "Vault configuration sync", "option-view-config-files": "Settings version history", "option-view-config-files-desc": "View and restore version history of setting files.", "option-sync-app": "Main settings", "option-sync-app-desc": "Enable to sync editor settings, files & links settings, custom hotkeys, etc.", "option-sync-appearance": "Appearance settings", "option-sync-appearance-desc": "Sync appearance settings like dark mode, active theme, and enabled snippets.", "option-sync-appearance-data": "Themes and snippets", "option-sync-appearance-data-desc": "Sync downloaded themes and snippets. Whether they are enabled depends on the previous setting.", "option-sync-hotkey": "Hotkeys", "option-sync-hotkey-desc": "Sync custom hotkeys.", "option-sync-core-plugin": "Active core plugin list", "option-sync-core-plugin-desc": "Sync which core plugins are enabled.", "option-sync-core-plugin-data": "Core plugin settings", "option-sync-core-plugin-data-desc": "Sync core plugin settings.", "option-sync-community-plugin": "Active community plugin list", "option-sync-community-plugin-desc": "Sync which community plugins are enabled.", "option-sync-community-plugin-data": "Installed community plugins", "option-sync-community-plugin-data-desc": "Sync installed community plugins (.js, .css, and manifest.json files) and their settings.", "label-sync-introduction": "Obsidian Sync is Obsidian's add-on sync service with end-to-end encryption and version history.", "label-account-required": "To start syncing, please log in or create a new Obsidian account.", "button-sign-up": "Sign up", "button-log-in": "Log in", "label-manage-excluded-folders": "Manage excluded folders", "label-number-of-folders-excluded": "{{folders}} are currently excluded from being synced.", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "Setup connection", "label-now-connected-to-vault": "You're now connected to \"{{name}}\".", "button-start-syncing": "Start syncing", "label-confirm-merge-vault": "Confirm Merge Vault", "msg-vault-has-notes": "Your local vault already contains some notes.", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "File recovery", "desc": "Let you restore recent snapshots to recover from accidental data loss. Snapshots are only saved for Markdown files.", "action-open": "Open saved snapshots", "option-interval": "Snapshot interval", "option-interval-description": "Minimal interval in minutes between two snapshots.", "option-keep": "History length", "option-keep-description": "Length in days snapshots is kept for.", "option-open-history": "Snapshots", "option-open-history-description": "View and restore saved snapshots.", "button-view-snapshots": "View", "option-clear": "Clear history", "option-clear-description": "Wipe all snapshots.", "button-clear-history": "Clear", "label-clear-warning": "Are you sure you want to delete all snapshots? Note that only snapshots will be removed. All files inside your vault will not be affected.", "msg-clear-complete": "Snapshots cleared.", "label-no-history-found": "No snapshots found.", "placeholder-choose-file": "Choose a file...", "label-select-file": "Please select a file on the left to view snapshots." }, "note-composer": { "name": "Note composer", "desc": "Merge, split, and refactor notes.", "option-confirm-file-merge": "Confirm file merge", "option-confirm-file-merge-description": "Prompt before merge two files.", "option-split-replacement-text": "Text after extraction", "option-split-replacement-text-description": "What to show in place of the selected text after extracting it.", "option-choice-split-replacement-text-link": "Link to new file", "option-choice-split-replacement-text-embed": "Embed new file", "option-choice-split-replacement-text-none": "None", "option-template-file": "Template file location", "option-template-file-description": "Template file to use when merging or extracting. Available variables: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Merge current file with another file...", "action-merge-file": "Merge entire file with...", "label-no-files": "No files found.", "instruction-navigate": "to navigate", "instruction-merge": "to merge", "instruction-create-new": "to create new", "instruction-merge-at-top": "to merge at top", "instruction-dismiss": "to dismiss", "prompt-select-file-to-merge": "Select file to merge into...", "label-merge-file": "Merge file", "label-confirm-file-merge": "Are you sure you want to merge \"{{file}}\" into \"{{destination}}\"? \"{{file}}\" will be deleted.", "button-merge": "Merge", "button-merge-do-not-ask-again": "Merge and don't ask again", "command-split-file": "Extract current selection...", "command-extract-heading": "Extract this heading...", "instruction-append": "to move to bottom", "instruction-prepend": "to move to top", "msg-fail-to-fetch-template": "Failed to fetch template file: \"{{template}}\" not found.", "msg-fail-to-find-heading": "Failed to find heading" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} word", "word-with-count_plural": "{{count}} words", "character-with-count": "{{count}} character", "character-with-count_plural": "{{count}} characters", "link-with-count": "{{count}} link", "link-with-count_plural": "{{count}} links", "file-with-count": "{{count}} file", "file-with-count_plural": "{{count}} file", "folder-with-count": "{{count}} folder", "folder-with-count_plural": "{{count}} folders", "backlink-with-count": "{{count}} backlink", "backlink-with-count_plural": "{{count}} backlinks", "site-with-count": "{{count}} site", "site-with-count_plural": "{{count}} sites", "plugin-with-count": "{{count}} plugin", "plugin-with-count_plural": "{{count}} plugins", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } }{ "setting": { "options": "Options", "plugin": "Plugin", "builtin-plugins": "Core plugins", "plugin-options": "Plugin options", "folder-path-example-placeholder": "Example: folder 1/folder 2", "file-path-example-placeholder": "Example: folder/note", "msg-restart-required": "Changing this option requires a restart to take effect.", "editor": { "name": "Editor", "section-general": "General", "section-behavior": "Behavior", "section-display": "Display", "option-spellcheck": "Spell check", "option-spellcheck-description": "Turns on the spell checker. Currently only works for English (US).", "spellcheck-languages": "Spellcheck languages", "spellcheck-languages-description": "Choose the languages for the spellchecker to use.", "spellcheck-languages-mac-description": "The native spellchecker will automatically detect the language being used for you on macOS.", "spellcheck-dict": "Spellcheck dictionary", "spellcheck-dict-empty": "The spellcheck dictionary is empty.", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "Readable line length", "option-readable-line-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-strict-line-break": "Strict line breaks", "option-strict-line-break-description": "In preview mode, ignore single line breaks according to the Markdown specs. Turn this off for single line breaks to show in preview.", "option-show-frontmatter": "Show frontmatter", "option-show-frontmatter-description": "In preview mode, show frontmatter as a code block. Turn off to hide frontmatter section.", "option-auto-pair-brackets": "Auto pair brackets", "option-auto-pair-brackets-description": "Pair brackets and quotes automatically.", "option-auto-pair-markdown": "Auto pair Markdown syntax", "option-auto-pair-markdown-description": "Pair symbols automatically for bold, italics, highlight, strikethrough, and code.", "option-smart-indent-lists": "Smart indent lists", "option-smart-indent-lists-description": "Take care of indentation and list marker for you.", "option-fold-heading": "Fold heading", "option-fold-heading-description": "Let you fold everything under a heading.", "option-fold-indent": "Fold indent", "option-fold-indent-description": "Let you fold a portion of the same indentation, such as lists.", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Editing view", "option-default-new-tab-view-reading": "Reading view", "option-default-editing-mode": "Default editing mode", "option-default-editing-mode-description": "The default editing mode a new pane will start with.", "option-default-editing-mode-source": "Source mode", "option-default-editing-mode-live-preview": "Live Preview", "option-show-line-number": "Show line number", "option-show-line-number-description": "Show line number in the gutter.", "option-indentation-guide": "Show indentation guides", "option-indentation-guide-description": "Show vertical relationship lines between bullet points for visual guidance.", "option-use-tabs": "Use tabs", "option-use-tabs-description": "Use tabs to indent when pressing the \"Tab\" key. Set this to off to use spaces.", "option-tab-size": "Tab size", "option-tab-size-description": "Number of spaces a tab is equivalent to.", "option-rtl": "Right-to-left (RTL)", "option-rtl-description": "Sets the text direction of notes to display in right-to-left.", "option-auto-convert-html": "Auto convert HTML", "option-auto-convert-html-description": "Automatically convert HTML to Markdown when pasting and drag-and-drop from webpages. Use Ctrl/Cmd+Shift+V to paste without conversion.", "option-vim-key-bindings": "Vim key bindings", "option-vim-key-bindings-description": "Let you use Vim key bindings in the source editor.", "option-vim-key-bindings-mobile": "On mobile devices, this setting is per-device and is not synchronized through the config file.", "option-emacsy-keys": "Legacy Emacs-style key bindings for macOS", "option-emacsy-keys-description": "Allows you to use the additional Emacs-style navigation keys, which are standard on macOS, but may interfere with some key operations.", "label-confirm-enable-vim": "Confirm entering Vim mode", "label-vim-warning": "Vim mode is for efficient text editing but can be quite counter-intuitive. If you're not familiar with Vim, this option might make it look like Obsidian has stopped working.", "label-vim-test": "To verify that you know your way around Vim, please enter the command to quit Vim without saving below:", "label-vim-your-answer": "Your answer", "placeholder-enter-command": "Enter command...", "button-confirm-enable-vim": "Let me enable Vim", "msg-vim-mode-enabled": "Command is correct. Vim mode now enabled.", "msg-vim-mode-not-enabled": "Command is incorrect. Vim mode remains disabled to protect you.", "msg-vim-mode-please-enter-command": "Please enter the command to enable Vim mode", "option-legacy-editor": "Use legacy editor", "option-legacy-editor-description2": "The legacy editor will be deprecated soon. It is currently no longer maintained, and as such, bugs will no longer be addressed.", "label-legacy-deprecation": "New editor is here", "label-legacy-deprecation-1": "Obsidian now has a brand new editor that's more robust and accessible.", "label-legacy-deprecation-2": "It seems you're still using the legacy editor, and we think you'll enjoy the new editor.", "label-legacy-deprecation-choice": "Which mode would you like to use?", "label-live-preview-description": "A more modern, what-you-see-is-what-you-get experience.", "label-source-mode-description": "See raw Markdown with syntax highlighting.", "button-start-new-editor": "Start new editor" }, "file": { "name": "Files & Links", "option-confirm-file-deletion": "Confirm file deletion", "option-confirm-file-deletion-description": "Whether you want to get prompted to confirm file deletion.", "option-delete-destination": "Deleted files", "option-delete-destination-description": "What to do with files after you delete them.", "option-choice-system-trash": "Move to system trash", "option-choice-vault-trash": "Move to Obsidian trash (.trash folder)", "option-choice-permanent-delete": "Permanent delete", "option-always-update-links": "Always update internal links", "option-always-update-links-description": "Whether to automatically update links after renaming a file or prompt.", "option-new-note-location": "New note default location", "option-new-note-location-description": "Where to put newly created notes. Plugin settings will override this.", "option-choice-vault-root": "Vault root", "option-choice-current-folder": "Same folder as the file is in", "option-choice-specified-folder": "In the folder specified below", "option-new-file-folder-path": "Folder to create new notes in", "option-new-file-folder-path-description": "Newly created notes will appear under this folder. Plugin settings will override this.", "option-use-wiki-links": "Use [[Wikilinks]]", "option-use-wiki-links-description": "Auto-generate Wikilinks for [[links]] and ![[images]] instead of Markdown links and images. Disable this option to generate Markdown links instead.", "option-show-unsupported-files": "Detect all file extensions", "option-show-unsupported-files-description": "Show files with any extension even if Obsidian can't open them natively, so that you can link to them and see them in File Explorer and Quick Switcher.", "option-link-autocompleted-format": "New link format", "option-link-autocompleted-format-description": "What links to insert when auto generating internal links.", "option-choice-shortest-linktext": "Shortest path when possible", "option-choice-relative-path": "Relative path to file", "option-choice-absolute-path": "Absolute path in vault", "option-new-attachment-location": "Default location for new attachments", "option-new-attachment-location-description": "Where newly added attachments are placed.", "option-choice-subdirectory": "In subfolder under current folder", "option-attachment-folder-path": "Attachment folder path", "option-attachment-folder-path-description": "Newly created attachment files will appear here. That includes images created via drag and drop or pasting, and audio recordings.", "option-attachment-subfolder-path": "Subfolder name", "option-attachment-subfolder-path-description": "If your file is under \"vault/folder\", and your set subfolder name to \"attachments\", attachments will be saved to \"vault/folder/attachments\".", "option-attachment-subfolder-path-placeholder": "attachments", "option-excluded-files": "Excluded files", "option-excluded-files-desc": "Excluded files will be either hidden or less noticeable in various places, such as Quick Switcher, link suggestion, and Graph View.", "label-no-excluded-filters-applied": "No excluded filter is applied right now. Add one below.", "label-excluded-filters-applied": "Files matching the following filters are currently excluded:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Enter path or \"/regex/\"..." }, "appearance": { "name": "Appearance", "option-base-theme": "Base theme", "option-base-theme-description": "Choose Obsidian’s default color scheme.", "option-accent-color": "Accent color", "option-accent-color-description": "Choose the accent color used throughout the app.", "dark-theme": "Dark", "light-theme": "Light", "system-theme": "Adapt to system", "option-font": "Font", "option-advanced": "Advanced", "option-interface-font": "Interface font", "option-interface-font-description": "Set base font for all of Obsidian.", "option-text-font": "Text font", "option-text-font-description": "Set font for editing and reading views.", "option-monospace-font": "Monospace font", "option-monospace-font-description": "Set font for places like code blocks and frontmatter.", "label-single-font-currently-in-effect": " Currently applied font: ", "label-multiple-fonts-currently-in-effect": " The following fonts are currently applied:", "option-font-placeholder": "Enter font name...", "label-no-custom-font-set": "No custom font is applied right now. Add one below.", "label-font-applied": "The first font from this list that is available on your system will be applied.", "msg-font-not-found": "This font is not detected on your system.", "msg-font-found": "This font is detected on your system.", "label-font-name": "Font name", "option-community-themes": "Open community themes", "option-community-themes-description": "Preview and use amazing themes created by the community.", "button-browse-community-themes": "Browse", "option-font-size": "Font size", "option-font-size-description": "Font size in pixels that affects editor and preview.", "option-font-size-action": "Quick font size adjustment", "option-font-size-action-description": "Adjust the font size using Ctrl + Scroll, or using the trackpad pinch-zoom gesture.", "option-themes": "Themes", "option-manage-themes-description": "Manage installed themes and browse community themes.", "option-theme-button-manage": "Manage", "option-choice-none": "None", "option-native-menus": "Native menus", "option-native-menus-desc": "Menus throughout the app will match the operating system. They will not be affected by your theme.", "button-reload-themes": "Reload themes", "msg-reloaded-themes": "Reloaded custom CSS themes.", "button-open-themes-folder": "Open themes folder", "option-css-snippets": "CSS snippets", "label-no-css-snippets-found": "No CSS snippets found in the snippets folder.", "no-snippet-description": "CSS Snippets are stored in \"{{path}}\".", "button-reload-snippets": "Reload snippets", "button-open-snippets-folder": "Open snippets folder", "msg-reloaded-snippets": "Reloaded CSS snippets.", "option-toggle-snippet-description": "Apply CSS snippet at \"{{path}}\".", "label-installed-themes": "Installed themes", "label-screenshot-unavailable": "Screenshot unavailable", "label-default-theme": "Default", "tooltip-click-to-enlarge": "Click to enlarge", "button-update": "Update", "label-currently-selected": "Selected", "option-frame-style": "Window frame style", "option-frame-description": "Determines the styling of the title bar of Obsidian windows. Requires a full restart to take effect.", "option-frame-hidden": "Hidden (default)", "option-frame-obsidian": "Obsidian frame", "option-frame-native": "Native frame", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Show tab title bar", "option-show-view-header-desc": "Display the header at the top of every tab.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "button-check-for-updates": "Check for updates", "button-view-updates": "View updates", "button-update-all-themes": "Update all", "label-current-themes": "Current community themes", "label-currently-installed": "You currently have {{count}} theme installed.", "label-currently-installed_plural": "You currently have {{count}} themes installed." }, "hotkeys": { "name": "Hotkeys", "prompt-filter": "Filter...", "tooltip-delete-hotkey": "Delete hotkey", "label-waiting-for-hotkey-press": "Press hotkey...", "tooltip-restore-default": "Restore default", "tooltip-customize-command": "Customize this command", "tooltip-hotkey-single-conflict": "This hotkey conflicts with \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "This hotkey conflicts with {{count}} other commands", "label-blank-hotkey": "Blank" }, "about": { "name": "About", "label-commercial-license": "Commercial license", "label-license-key": "License key", "license-key-placeholder": "Your license key...", "label-activate-license": "Activate license", "button-activate": "Activate", "label-unknown-version": "Unknown", "label-current-version": "Current version: ", "label-install-version": "(Installer version: {{version}})", "label-up-to-date": "Your app is up to date!", "label-read-changelog": "Read the changelog.", "label-manual-update-required": "To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.", "label-download": "Download", "label-new-version-ready": "A new version is ready to be installed. ", "label-relaunch-to-update": "Relaunch the app to update.", "label-disabled-updates": "Updates are disabled.", "label-checking-for-updates": "Checking for updates...", "button-relaunch": "Relaunch", "button-check-for-updates": "Check for updates", "option-auto-update": "Automatic updates", "option-auto-update-description": "Turn this off to prevent the app from checking for updates.", "option-get-help": "Get help", "option-get-help-description": "Get help on using Obsidian.", "button-open": "Open", "option-language": "Language", "option-language-description": "Change the display language.", "option-insider-build": "Receive insider builds", "option-insider-build-description": "Auto-update to insider builds to try out new features. Note that these builds are bleeding edge and might be less stable.", "option-advanced": "Advanced", "option-hw-acceleration": "Hardware Acceleration", "option-hw-acceleration-description": "Turns on Hardware Acceleration, which uses your GPU to make Obsidian smoother.", "option-hw-acceleration-warning": "If you turn this off, app performance will be severely degraded.", "option-config-location": "Override config folder", "option-config-location-description": "Use a different config folder than the default one. Must start with a dot.", "option-config-location-warning": "Config location must be a valid folder name that starts with a dot.", "label-license": "License", "label-your-commercial-license-key": "Your commercial license key is \"{{key}}\".", "label-commercial-license-info": "Registered to \"{{company}}\" for {{seats}} users. Valid until {{expiry}}.", "label-validating-commercial-license": "Validating...", "label-invalid-commercial-license": "License invalid: ", "button-remove-commercial-license": "Remove", "option-catalyst": "Catalyst license", "option-catalyst-desc": "You currently have the {{tier}} Catalyst license. Thanks for your support!", "option-catalyst-desc-no-license": "You don't have a Catalyst license right now. Catalyst license is a one-time donation to support Obsidian development.", "label-app": "App" }, "account": { "name": "Account", "option-your-account": "Your account", "option-your-account-desc": "You're currently signed in {{name}} ({{email}}).", "option-your-account-desc-no-login": "You're not logged in right now. An account is only needed for Obsidian Sync, Obsidian Publish, and Catalyst insider builds.", "button-manage-settings": "Manage settings", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Commercial license", "option-commercial-license-desc": "If you use Obsidian for commercial purpose, you may need to get a commercial license.", "button-purchase": "Purchase", "button-log-out": "Log out", "label-log-in": "Log in", "label-sign-up": "Sign up", "label-email": "Email", "placeholder-email": "Your email...", "label-password": "Password", "placeholder-password": "Your password...", "button-login": "Login", "message-empty-email": "Email cannot be empty.", "message-invalid-email": "Email is not valid.", "message-empty-password": "Password cannot be empty.", "message-login-failed": "Login failed, please double check your email and password.", "label-no-account": "Don't have an account? ", "link-sign-up-now": "Sign up now" }, "core-plugin": { "plugin-list": "Plugin list", "option-search-plugin": "Search core plugins", "option-search-plugin-description": "Filter plugins by name or description.", "placeholder-search-plugin": "Search plugins..." }, "third-party-plugin": { "name": "Third-party plugin", "option-restricted-mode": "Restricted mode", "option-restricted-mode-description": "Restricted mode is off. Turn on to disable community plugins.", "button-turn-on": "Turn on", "option-browse-community-plugins": "Community plugins", "option-browse-community-plugins-description": "Browse and install third-party plugins made by our amazing community.", "button-browse": "Browse", "label-exit-restricted-mode": "Exit Restricted Mode", "label-exit-restricted-mode-description-1": "Community plugins, like any other software you install, could potentially cause data integrity and security issues.", "label-exit-restricted-mode-description-2": "Plugin security is important to us. Here's what we do:", "label-exit-restricted-mode-description-3": "Despite our efforts, there is still a small chance that a community plugin might misbehave.", "label-code-review": "Initial code review", "label-code-review-desc": "Plugins undergo an initial code review by our team before they appear in the store.", "label-open-source": "Open source", "label-open-source-desc": "Most plugins are open source on GitHub, so you can inspect the code yourself.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We have a large community of developers who watch out for each other.", "label-report-mechanism": "Report mechanism", "label-report-mechanism-desc": "We follow up and remove faulty plugins upon user report.", "label-exit-restricted-mode-disable-confirmation": "Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.", "label-learn-more": "Learn more about plugin security", "button-turn-on-community-plugins": "Turn on community plugins", "label-trust-author": "Do you trust the author of this vault?", "label-trust-author-description-1": "You're opening this vault for the first time, and it comes with some plugins.", "label-trust-author-description-2": "If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.", "label-trust-author-description-3": "If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.", "button-enable-plugins": "Trust author and enable plugins", "button-dont-trust-author": "Browse vault in Restricted Mode", "placeholder-community-plugins": "Search community plugins...", "msg-failed-load-plugins": "Failed to load community plugins.", "label-installed": "Installed", "button-install": "Install", "button-enable": "Enable", "button-disable": "Disable", "button-copy-share-link": "Copy share link", "button-donate": "Donate", "label-no-results-found": "No results found.", "msg-failed-to-load-manifest": "Failed to load plugin manifest.", "label-version": "Version: {{version}}", "label-currently-installed-version": " (currently installed: {{version}})", "label-by-author": "By ", "label-repository": "Repository: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "This plugin does not support your device.", "button-update": "Update", "label-no-readme": "This plugin did not provide a README file.", "msg-installing-plugin": "Installing plugin \"{{name}}\"...", "msg-failed-to-install-plugin": "Failed to install plugin \"{{name}}\".", "msg-successfully-installed-plugin": "Successfully installed plugin \"{{name}}\".", "label-installed-plugins": "Installed plugins", "button-reload-plugins": "Reload plugins", "msg-reloaded-third-party-plugins": "Reloaded third-party plugins.", "label-uninstall": "Uninstall", "label-uninstall-plugin": "Uninstall plugin", "label-uninstall-plugin-confirmation": "Are you sure you want to uninstall this plugin? This will delete the folder of the plugin.", "button-open-plugins-folder": "Open plugins folder", "button-check-for-updates": "Check for updates", "button-update-all-plugins": "Update all", "label-current-plugins": "Current plugins", "label-currently-installed": "You currently have {{count}} plugin installed.", "label-currently-installed_plural": "You currently have {{count}} plugins installed.", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Show a message with how long each plugin took to initialize when starting the app.", "msg-no-updates-found": "No plugin updates found.", "msg-updates-found": "Found {{count}} plugin to update.", "msg-updates-found_plural": "Found {{count}} plugins to update.", "msg-update-plugin": "Update to version {{version}}", "option-search-installed-plugin": "Search installed plugins", "option-search-installed-plugin-description": "Filter installed plugins by name or description.", "placeholder-search-installed-plugin": "Search installed plugins...", "show-installed-only": "Show installed only", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "Showing {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Mobile toolbar", "option-configure-quick-action": "Configure mobile Quick Action", "option-configure-quick-action-description": "Configure which command to trigger when pull down from the top. The current command is set to \"{{command}}\".", "button-configure": "Configure", "placeholder-select-quick-action": "Select Quick Action...", "manage-toolbar-options": "Manage toolbar options", "option-internal-link": "Add internal link", "option-internal-embed": "Add embed", "option-tag": "Add tag", "option-heading": "Toggle heading", "option-strikethrough": "Toggle strikethrough", "option-highlight": "Toggle highlight", "option-code": "Toggle code", "option-blockquote": "Toggle blockquote", "option-markdown-link": "Add Markdown link", "option-bullet-list": "Toggle bullet list", "option-numbered-list": "Toggle numbered list", "option-indent-list": "Indent list item", "option-unindent-list": "Unindent list item", "option-undo": "Undo", "option-redo": "Redo", "option-move-caret-up": "Move caret up", "option-move-caret-down": "Move caret down", "option-move-caret-left": "Move caret left", "option-move-caret-right": "Move caret right", "option-first-line": "Go to first line", "option-last-line": "Go to last line", "option-toggle-keyboard": "Toggle keyboard", "option-configure-toolbar": "Configure mobile toolbar", "option-added-options": "Added options", "option-more-toolbar-options": "More toolbar options", "option-attach": "Insert attachment", "option-add-command": "Add global command", "option-add-command-description": "Select any global command to add to the toolbar." } }, "editor": { "search": { "placeholder-find": "Find", "placeholder-replace": "Replace", "label-previous": "Prev", "label-next": "Next", "label-all": "All", "label-exit-search": "Exit search", "label-replace": "Replace", "label-replace-all": "Replace all" }, "link-suggestion": { "label-type-hash": "Type #", "label-link-heading": "to link heading", "label-type-block": "Type ^", "label-link-block": "to link blocks", "label-type-pipe": "Type |", "label-change-display-text": "to change display text", "label-no-match-found": "No match found" }, "spellcheck": { "no-suggestion": "No suggestions...", "add-to-dictionary": "Add to dictionary" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "No heading", "label-heading-level": "Heading {{level}}" }, "print-modal": { "title": "Export to PDF", "caption": "Export \"{{filename}}\" to PDF with the setting below.", "setting-page-size": "Page size", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Include file name as title", "setting-landscape": "Landscape", "setting-margin": "Margin", "setting-margin-default": "Default", "setting-margin-minimal": "Minimal", "setting-margin-none": "None", "setting-downscale-percent": "Downscale percent", "button-export-to-pdf": "Export to PDF" }, "link-popover": { "tooltip-follow-link": "Follow link", "tooltip-open-link": "Open link", "tooltip-search-tag": "Search tag" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Open in default app", "empty-sidebar": "The sidebar is empty, try dragging a pane here.", "sidebar-expand": "Expand", "sidebar-collapse": "Collapse", "msg-fail-to-save-file": "Failed to save file \"{{filepath}}\". {{message}}.", "no-file": "No file", "msg-file-changed": "\"{{file}}\" has been modified externally, merging changes automatically.", "switch-vault": "Open another vault", "help": "Help", "settings": "Settings", "drag-to-rearrange": "Drag to rearrange", "msg-switched-to-read": "Switched default view mode to reading view.", "msg-switched-to-edit": "Switched default view mode to editor.", "msg-upgrade-installer": "To use this feature, please re-install with latest installer available from our website.", "tooltip-restore-default-settings": "Restore default settings", "label-copy": "Copy to clipboard", "copied_generic": "Copied to your clipboard", "copied": "{{item}} copied to your clipboard", "url": "Url", "msg-open-file-through-uri": "Opened file \"{{path}}\"", "msg-file-not-found-through-uri": "File \"{{name}}\" not found.", "delete-action-short-name": "Delete", "msg-indexing": "Obsidian is indexing your vault...\nThis should only happen once.\nSome functionality may not be available until this is complete.", "msg-indexing-complete": "Indexing complete.", "msg-sandbox-vault": "This is a sandbox vault.\nChanges you make in this vault will be lost.", "label-enter-to-create": "Enter to create", "label-update-available": "Update Available", "label-debug-info": "Debug info", "button-learn-more": "Learn more", "button-not-now": "Not now", "button-add": "Add", "button-manage": "Manage", "label-new-tab": "New tab", "msg-tab-busy": "This tab is currently busy, please try again later", "empty-state": { "no-file-open": "No file is open", "create-new-file": "Create new file", "go-to-file": "Go to file", "see-recent-files": "See recent files", "close": "Close", "unknown-pane-title": "Plugin no longer active", "unknown-pane-desc": "The plugin that created this pane ({{type}}) has gone away" }, "menu": { "edit-view": "Edit (Ctrl/Cmd+Click to edit in new pane)", "read-view": "Current view: reading", "switch-to-edit-view": "Click to edit", "switch-to-read-view": "Click to read", "mod-click-open-new-tab": "{{key}}+Click to open in new tab", "find": "Find...", "replace": "Replace...", "edit": "Edit", "preview": "Preview", "more-options": "More options", "close": "Close", "close-others": "Close others", "close-right": "Close tabs to the right", "pin": "Pin", "unpin": "Unpin", "unlink-tab": "Unlink tab", "link-tab": "Link with tab...", "toggle-source-mode": "Source mode", "toggle-reading-view": "Reading view", "delete-file": "Delete file", "create-file": "Create this file", "open-link": "Open link", "open-in-new-tab": "Open in new tab", "open-to-the-right": "Open to the right", "copy-url": "Copy url", "close-current-tab": "Close current tab", "copy": "Copy", "cut": "Cut", "paste": "Paste", "paste-as-plain-text": "Paste as plain text", "select-all": "Select all", "rename-heading": "Rename this heading...", "rename-blockid": "Rename this block ID...", "open-in-new-window": "Open in new window", "move-to-new-window": "Move to new window", "open-in-browser": "Open in browser", "stack-tabs": "Stack tabs", "unstack-tabs": "Unstack tabs" }, "tooltip": { "click-to-expand": "Click to expand", "click-to-collapse": "Click to collapse", "alias": "Alias", "not-created-yet": "Not created yet, select to create" }, "start-screen": { "label-version": "Version", "option-open-folder-as-vault": "Open folder as vault", "option-open-folder-as-vault-description": "Choose an existing folder of Markdown files.", "option-create-vault": "Create new vault", "option-create-vault-description": "Create a new Obsidian vault under a folder.", "option-connect-obsidian-sync": "Connect to Obsidian Sync", "option-connect-obsidian-sync-description": "Set up a synced vault with existing remote vault.", "option-new-vault-name": "Vault name", "option-new-vault-name-description": "Pick a name for your awesome vault.", "option-new-vault-location": "Location", "option-new-vault-location-description": "Pick a place to put your new vault.", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Reveal vault in system explorer", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "Rename vault...", "msg-error-rename-exists": "There is already a vault with this name.", "msg-error-nested": "Cannot move vault into a subfolder of itself.", "msg-error-rename-open": "Can't rename a currently open vault.", "msg-rename-failed": "Failed to rename vault.", "msg-rename-success": "Successfully renamed vault.", "option-move-vault": "Move vault...", "msg-move-select-dest": "Select destination folder", "msg-error-move-exists": "There is already a vault at the destination.", "msg-error-move-open": "Can't move a currently open vault.", "msg-move-failed": "Failed to move vault.", "msg-move-success": "Successfully moved vault.", "option-remove": "Remove from list", "button-quick-start": "Quick start", "button-open": "Open", "button-browse": "Browse", "button-connect": "Connect", "button-create-vault": "Create", "button-back": "Back", "msg-empty-vault-name": "Vault name cannot be empty.", "msg-invalid-folder": "Please pick a valid folder.", "msg-failed-to-create-vault": "Failed to create vault.", "msg-failed-to-create-vault-at-location": "Could not create vault at the given location. Please double check the location and permission.", "msg-error-failed-to-open-vault": "Failed to open.", "msg-error-remove-current-open-vault": "Can't remove a currently open vault.", "option-get-help": "Get Help", "option-user-email": "Email", "placeholder-your-email": "Your email...", "option-user-password": "Password", "placeholder-your-password": "Your password...", "button-sign-in": "Sign in", "button-setup": "Setup", "option-connect-vault-desc": "Create a synced vault on this device.", "tooltip-own-vault": "This is a remote vault owned by you.", "tooltip-shared-vault": "This is a remote vault shared with you." }, "drag-and-drop": { "insert-link-here": "Insert link here", "insert-links-here": "Insert links here", "move-into-folder": "Move into \"{{folder}}\"", "star-this-file": "Star this file", "star-these-files": "Star these files", "open-in-this-tab": "Open in this tab", "open-as-tab": "Open as new tab" }, "window": { "maximize": "Maximize", "minimize": "Minimize", "restore-down": "Restore down", "close-window": "Close window", "go-back": "Go back", "go-forward": "Go forward" }, "start-up": { "loading-obsidian": "Loading Obsidian...", "obsidian-load-error": "An error occurred while loading Obsidian.", "button-reload-app": "Reload app", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "Open another vault", "loading-components": "Loading components...", "loading-plugins": "Loading plugins...", "loading-vault": "Loading vault...", "msg-failed-to-load-vault": "Failed to load vault: ", "loading-cache": "Loading cache...", "loading-workspace": "Loading workspace..." }, "mobile": { "action-import": "Import into vault", "action-choose-file-to-insert": "Choose a file to insert", "action-insert-text-into-file": "Insert text into {{filename}}", "action-insert-link-into-file": "Insert link into {{filename}}", "msg-importing": "Importing...", "msg-import-success": "Import success", "msg-failed-to-import-file": "Failed to import file {{filename}}", "msg-back-again-to-exit": "Press back again to exit." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "Save current file", "follow-cursor-link": "Follow link under cursor", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "Toggle pin", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "Navigate back", "navigate-forward": "Navigate forward", "use-dark-mode": "Use dark mode", "use-light-mode": "Use light mode", "change-theme": "Change theme", "search-current-file": "Search current file", "search-replace-current-file": "Search & replace in current file", "open-settings": "Open settings", "open-help": "Open help", "toggle-edit": "Toggle editing/reading view", "toggle-source-mode": "Toggle Live Preview/Source mode", "delete-current-file": "Delete current file", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "Toggle left sidebar", "toggle-right-sidebar": "Toggle right sidebar", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "Focus on editor", "toggle-fold": "Toggle fold on the current line", "fold-all": "Fold all headings and lists", "unfold-all": "Unfold all headings and lists", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "Swap line up", "swap-line-down": "Swap line down", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "Toggle bold for selection", "toggle-italics": "Toggle italics for selection", "toggle-highlight": "Toggle highlight for selection", "toggle-comments": "Toggle comments for selection", "insert-link": "Insert link", "toggle-spellcheck": "Toggle spellcheck", "delete-paragraph": "Delete paragraph", "toggle-checklist": "Toggle checklist status", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "Edit file title", "copy-path": "Copy file path", "copy-url": "Copy obsidian url", "export-pdf": "Export to PDF", "reload": "Reload app without saving", "undo-close-tab": "Undo close tab", "context-menu": "Show context menu under cursor", "show-debug-info": "Show debug info", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "Toggle edit/preview mode", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "This will affect {{links}} in {{files}}.", "msg-updated-links": "Updated {{links}} in {{files}}.", "label-update-links": "Update links", "label-confirm-update-link-to-file": "Do you want to update internal links that link to this file?", "button-always-update": "Always update", "button-just-once": "Just once", "button-do-not-update": "Do not update", "label-confirm-deletion": "Are you sure you want to delete \"{{filename}}\"?", "label-move-to-system-trash": "It will be moved to your system trash.", "label-move-to-vault-trash": "It will be moved to your Obsidian trash, which is located in the \".trash\" hidden folder in your vault.", "label-permanent-delete": "The file will be permanent deleted.", "label-non-empty-folder": "This folder is not empty.", "label-delete-folder-warning": "If you continue, all files inside this folder will be deleted.", "label-delete-folder": "Delete folder", "button-delete": "Delete", "button-delete-do-not-ask-again": "Delete and don't ask again", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "There are currently {{links}} pointing to this note.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "Delete file", "button-manage": "Manage", "button-cancel": "Cancel", "button-done": "Done", "button-save": "Save", "button-stop": "Stop", "button-continue": "Continue", "preparing-pdf": "Preparing PDF...", "label-rename-file": "Rename file", "label-new-name": "New name", "msg-rename-success": "Successfully renamed file.", "label-rename-heading": "Rename heading", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "Plugins", "file-explorer": { "name": "File explorer", "desc": "See all the files in your vault.", "action-open": "Open file explorer", "action-show": "Show file explorer", "action-create-note": "Create new note", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "New note", "action-new-folder": "New folder", "action-change-sort": "Change sort order", "action-reveal-file": "Reveal file in file explorer", "action-reveal-active-file": "Reveal active file in file explorer", "command-move-file": "Move file to another folder", "action-move-file": "Move file to...", "action-move-folder": "Move folder to...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "Type a folder", "label-no-folders": "No folders found.", "instruction-navigate": "to navigate", "instruction-move": "to move", "instruction-dismiss": "to dismiss", "label-sort-a-to-z": "Sort by file name (A to Z)", "label-sort-z-to-a": "Sort by file name (Z to A)", "label-sort-new-to-old": "Sort by edit time (new to old)", "label-sort-old-to-new": "Sort by edit time (old to new)", "label-sort-created-old-to-new": "Created time (old to new)", "label-sort-created-new-to-old": "Created time (new to old)", "menu-opt-new-note": "New note", "menu-opt-new-folder": "New folder", "menu-opt-set-attachment-folder": "Set as attachment folder", "menu-opt-rename": "Rename", "menu-opt-delete": "Delete", "menu-opt-make-copy": "Make a copy", "msg-invalid-characters": "File name cannot contain any of the following characters: ", "msg-unsafe-characters": "Links will not work with file names containing any of these characters: ", "msg-file-already-exists": "There's already a file with the same name", "msg-empty-file-name": "File name cannot be empty.", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "Last modified at {{time}}", "tooltip-created-time": "Created at {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Move", "label-untitled-file": "Untitled", "label-untitled-folder": "Untitled", "msg-set-attachment-folder": "Attachments will be saved to \"{{path}}\" from now on." }, "search": { "name": "Search", "desc": "Search for keyword in all the notes.", "action-open-search": "Search in all files", "label-collapse-results": "Collapse results", "label-match-case": "Match case", "label-explain-search-term": "Explain search term", "label-more-context": "Show more context", "prompt-start-search": "Type to start search...", "label-match-text": "Matches text: ", "label-match-regex": "Matches regex: ", "label-match-exact-text": "Contains exact text: ", "label-match-all": "Match all of: ", "label-match-any": "Match any of: ", "label-excluding": "Excluding: ", "label-case-sensitive": "Case sensitive", "label-case-insensitive": "Case insensitive", "label-match-file-path": "Match file path: ", "label-match-file-name": "Match file name: ", "label-match-content": "Match file content: ", "label-match-task": "Match task: ", "label-match-task-todo": "Match task (todo): ", "label-match-task-done": "Match task (done): ", "label-match-line": "Match line: ", "label-match-block": "Match block: ", "label-match-section": "Match section: ", "label-match-tag": "Match tag: ", "label-no-matches": "No matches found.", "matches-with-count": "... and {{count}} more match.", "matches-with-count_plural": "... and {{count}} more matches.", "label-copy-search-results": "Copy search results", "button-copy-results": "Copy results", "msg-successfully-copied": "Results copied to your clipboard.", "option-show-path": "Show path", "option-show-path-description": "Display full path of the file rather than just the file name.", "option-link-style": "Link style", "option-link-style-description": "Optionally turn each file result in to a link.", "option-choice-link-style-none": "None", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Markdown link", "option-list-prefix": "List prefix", "option-list-prefix-description": "Optionally add a list item prefix to each file result.", "option-choice-list-style-none": "None", "option-choice-list-style-dash": "Dash (-)", "option-choice-list-style-asterisk": "Asterisk (*)", "option-choice-list-style-numbered": "Numbered", "tooltip-clear-search": "Clear search", "label-search-options": "Search options", "tooltip-read-more": "Read more", "label-history": "History", "tooltip-clear-history": "Clear search history", "label-path-option-description": "match path of the file", "label-file-name-option-description": "match file name", "label-tag-option-description": "search for tags", "label-line-option-description": "search keywords on same line", "label-section-option-description": "search keywords under same heading", "menu-opt-search-for": "Search for \"{{keyword}}\"" }, "quick-switcher": { "name": "Quick switcher", "desc": "Jump to any files without leaving your keyboard. Ctrl/Cmd+O to activate.", "short-name": "Switcher", "action-open": "Open quick switcher", "instruction-navigate": "to navigate", "instruction-open": "to open", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "to create", "instruction-dismiss": "to dismiss", "label-no-note-create-new": "No notes found. Enter to create a new one.", "prompt-type-file-name": "Type file to switch to or create...", "label-enter-to-create": "Enter to create", "tooltip-not-created-yet": "Not created yet, select to create", "option-show-existing-only": "Show existing only", "option-show-existing-only-description": "Whether to show links to files that are not yet created.", "option-show-attachments": "Show attachments", "option-show-attachments-desc": "Show attachment files like images, videos, and PDFs.", "option-show-all-file-types": "Show all file types", "option-show-all-file-types-desc": "Show all files including ones that Obsidian can't open. The file will be opened with the default app for that file type." }, "graph-view": { "name": "Graph view", "desc": "See a graph overview of which notes link to which.", "action-open": "Open graph view", "action-open-local": "Open local graph", "action-copy-screenshot": "Copy screenshot", "tab-title": "Graph of {{displayText}}", "label-filters": "Filters", "prompt-filter-nodes": "Search files...", "option-depth": "Depth", "option-depth-description": "Show nodes this number of links away", "option-neighbor-links": "Neighbor links", "option-neighbor-links-description": "Show links between neighbors.", "option-forelinks": "Outgoing links", "option-forelinks-description": "Show links to other files", "option-backlinks": "Incoming links", "option-backlinks-description": "Show links from other files", "option-show-tags": "Tags", "option-show-tags-description": "Tags are linked to the files that contain them", "option-show-attachments": "Attachments", "option-show-attachments-description": "Show attachments included by files", "option-show-existing-files-only": "Existing files only", "option-show-existing-files-only-description": "When checked, links to nonexistent files are not shown", "option-show-orphans": "Orphans", "option-show-orphans-description": "Show files that are not linked to any other file", "label-display": "Display", "option-show-arrows": "Arrows", "option-show-arrows-description": "Show arrows when zoomed in", "option-text-fade": "Text fade threshold", "option-node-size": "Node size", "option-link-thickness": "Link thickness", "label-forces": "Forces", "option-center-force": "Center force", "option-link-force": "Link force", "option-link-distance": "Link distance", "option-repel-force": "Repel force", "tooltip-open-graph-settings": "Open graph settings", "msg-screenshot-copied": "Screenshot copied to the clipboard.", "label-groups": "Groups", "placeholder-enter-query": "Enter query...", "tooltip-delete-graph": "Delete group", "button-new-group": "New group", "tooltip-click-to-change-drag-to-reorder": "Click to change color\nDrag to reorder groups", "action-timelapse": "Start graph timelapse animation", "tooltip-start-timelapse-animation": "Start timelapse animation", "button-animate-timelapse": "Animate" }, "backlinks": { "name": "Backlinks", "desc": "Show number of backlinks in the status bar.", "action-open": "Open backlinks", "action-show": "Show backlinks pane", "action-open-for-current": "Open backlinks for the current file", "action-toggle-backlinks-in-document": "Toggle backlinks in document", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "Linked mentions", "label-no-backlinks": "No backlinks found.", "label-unlinked-mentions": "Unlinked mentions", "label-show-search": "Show search filter", "label-link-button-text": "Link", "tab-title": "Backlinks for {{displayText}}", "label-no-unlinked-mentions": "No unlinked mentions found.", "ellipsis": "...", "option-backlink-in-document": "Backlink in document", "option-backlink-in-document-desc": "Show backlinks in document by default when opening new panes." }, "outgoing-links": { "name": "Outgoing Links", "desc": "Show outgoing links and detect unlinked mentions of other notes in the current note.", "action-open": "Open outgoing links", "action-show": "Show outgoing links pane", "action-open-for-current": "Open outgoing links for the current file", "tab-title": "Outgoing links from {{displayText}}", "label-links": "Links", "label-no-links": "No links found.", "label-unlinked-mentions": "Unlinked mentions", "tooltip-link-file": "Link this file", "tooltip-not-created": "Not created yet" }, "tag-pane": { "name": "Tag pane", "desc": "Displays all your tags and along with their number of occurrences.", "action-show": "Show tag pane", "label-no-tags": "No tags found.", "label-sort-by-name-a-to-z": "Tag name (A to Z)", "label-sort-by-name-z-to-a": "Tag name (Z to A)", "label-sort-by-frequency-high-to-low": "Frequency (high to low)", "label-sort-by-frequency-low-to-high": "Frequency (low to high)", "action-show-nested-tags": "Show nested tags", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "Page preview", "desc": "Preview a note when hovering an internal link. Ctrl/Cmd + hover in editor mode.", "label-empty-note": "\"{{linktext}}\" is not created yet. Click to create.", "label-source-editor": "Editor", "label-source-preview": "Preview", "label-source-search": "Search, Backlinks, and Outgoing links", "label-require-mod": "Require {{key}} to trigger page preview on hover" }, "starred": { "name": "Starred", "desc": "Star frequently used files and searches.", "action-show": "Show starred pane", "action-toggle": "Star/unstar current file", "action-toggle-search": "Star/unstar current search", "action-star": "Star", "action-unstar": "Unstar", "menu-opt-remove": "Remove", "msg-successfully-starred": "Successfully starred {{type}} \"{{title}}\".", "msg-removed-starred": "Removed starred {{type}} \"{{title}}\".", "msg-cannot-find-path": "Cannot find file at \"{{path}}\"." }, "custom-css": { "name": "Custom CSS", "desc": "Reads \"obsidian.css\" in the vault and applies it.", "setting-community-themes": "Community themes", "msg-fetching-themes": "Fetching community theme data...", "prompt-filter": "Filter...", "label-dark-theme-only": "Dark themes only", "label-light-theme-only": "Light themes only", "label-use": "Use", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "Update", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "Remove theme", "label-visit-on-github": "Visit on GitHub", "msg-load-error": "Could not load community themes, please check your network.", "msg-now-using-theme": "You're now using {{title}} as your CSS theme.", "msg-deleted-theme": "The theme {{title}} has been deleted.", "msg-updated-theme": "The theme {{title}} has been updated.", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "Command palette", "desc": "Type a command to invoke it. No need to use the UI or remember the shortcut.", "action-open": "Open command palette", "instruction-navigate": "to navigate", "instruction-use": "to use", "instruction-dismiss": "to dismiss", "label-no-commands": "No commands found.", "prompt-type-command": "Type a command...", "label-pinned-commands": "Pinned commands", "option-add-new-pin": "New pinned command", "option-add-new-pin-description": "Pinned commands will appear at the top of all commands when no search query is present." }, "markdown-format-importer": { "name": "Markdown format importer", "desc": "Convert Markdown from other apps to Obsidian format.", "action-open": "Open Markdown importer", "option-roam-tag-fixer": "Roam Research tag fixer", "option-roam-tag-fixer-description": "Converts \"#tag\" and \"#[[tag]]\" to \"[[tag]]\".", "option-roam-highlight-fixer": "Roam Research highlight fixer", "option-roam-highlight-fixer-description": "Converts \"^^highlight^^\" to \"==highlight==\".", "option-roam-todo-converter": "Roam Research TODO converter", "option-roam-todo-converter-description": "Converts \"{{[[TODO]]}}\" to \"[ ]\".", "option-bear-highlight-fixer": "Bear highlight fixer", "option-bear-highlight-fixer-description": "Converts \"::highlight::\" to \"==highlight==\".", "zettelkasten-link-fixer": "Zettelkasten link fixer", "zettelkasten-link-fixer-description": "Fixes \"[[UID]]\" links to full \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Zettelkasten link beautifier", "zettelkasten-link-beautifier-description": "Fixes \"[[UID]]\" links and also beautify them \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Warning: the importer will convert all the files in your vault, not just the current file.", "msg-override-files-warning": "Your files will be overwritten. Back up all your files before attempting conversion.", "label-start-conversion": "Start Conversion", "label-stop": "Stop", "label-go-back": "Go back", "label-done": "Done", "label-processing": "Processing...", "label-cancelling": "Cancelling...", "label-finished": "Finished!", "label-processed-files": "Processed files", "label-modified-files": "Modified files", "label-total-replacements": "Total replacements" }, "daily-notes": { "name": "Daily notes", "desc": "Open today's daily note, or create one if not present.", "short-name": "Today", "action-open": "Open today's note", "action-open-previous": "Open previous daily note", "action-open-next": "Open next daily note", "action-insert-text": "Insert text into daily note", "action-insert-link": "Insert link into daily note", "msg-fail-format": "Failed to create daily note. \"{{format}}\" is not a valid format.", "msg-fail-folder": "Failed to create daily note. Folder \"{{folderOption}}\" not found.", "msg-fail-template-file": "Failed to create daily note. Template file \"{{template}}\" not found.", "msg-no-previous": "There's no daily note before this one.", "msg-no-next": "There's no daily note after this one.", "option-date-format": "Date format", "label-refer-to-syntax": "For more syntax, refer to: ", "label-syntax-link": "format reference", "label-syntax-live-preview": "Here is what it will look like: ", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new daily note.", "option-template": "Template file location", "option-template-description": "The file path to use as template.", "option-open-on-start": "Open daily note on startup", "option-open-on-start-description": "Open your daily note automatically whenever you open this vault." }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Random note", "desc": "Opens a random note. Useful for reviewing and discovering.", "short-name": "Random", "action-open": "Open random note" }, "outline": { "name": "Outline", "desc": "Displays the outline of the current file or linked pane.", "action-open": "Open outline", "action-show": "Show outline pane", "action-open-for-current": "Open outline of the current file", "tab-title": "Outline of {{displayText}}", "label-no-headings": "No headings found." }, "word-count": { "name": "Word count", "desc": "Show word count in the status bar." }, "slides": { "name": "Slides", "desc": "Present from Markdown. Use \"---\" to separate slides.", "action-start": "Start presentation" }, "audio-recorder": { "name": "Audio recorder", "desc": "Record audio and save as attachment.", "action-start": "Start recording audio", "action-stop": "Stop recording audio", "action-toggle": "Start/stop recording", "msg-access-denied": "Microphone access was denied, please enable it from the preference pane.", "msg-pending-grant": "Please grant microphone permission to start recording.", "msg-no-microphone": "No microphone is connected." }, "open-with-default-app": { "name": "Open in default app", "desc": "Add button to open current file in the default app.", "action-open-file": "Open in default app", "action-open-file-mobile": "Share", "action-show-in-folder": "Show in folder", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "Templates", "desc": "Insert template content from a folder of template files.", "action-insert": "Insert template", "action-insert-current-date": "Insert current date", "action-insert-current-time": "Insert current time", "option-template-folder-location": "Template folder location", "option-template-folder-location-description": "Files in this folder will be available as templates.", "option-template-date-format": "Date format", "option-template-date-format-description": "{{date}} in the template file will be replaced with this value.", "option-template-date-format-description2": "You can also use {{date:YYYY-MM-DD}} to override the format once.", "option-template-time-format": "Time format", "option-template-time-format-description": "{{time}} in the template file will be replaced with this value.", "option-template-time-format-description2": "You can also use {{time:HH:mm}} to override the format once.", "instruction-navigate": "to navigate", "instruction-insert": "to insert template", "instruction-dismiss": "to dismiss", "msg-no-templates-found": "No templates found", "msg-fail-invalid-folder": "Failed to list templates. Template folder is invalid.", "msg-fail-folder-not-found": "Failed to list templates. Folder \"{{folderOption}}\" not found.", "prompt-type-template": "Type name of a template..." }, "translucency": { "name": "Translucent window", "desc": "Turn on translucency effect to enhance a sense of depth. Best used with dark mode. Not supported on Linux." }, "slash-command": { "name": "Slash commands", "desc": "Enable the ability to trigger slash commands in the editor by typing the forward slash." }, "editor-status": { "name": "Editor status", "desc": "Adds a status bar item to show and change the current editor mode.", "read": "Reading", "edit-source": "Source mode", "edit-live-preview": "Live Preview" }, "publish": { "name": "Publish", "desc": "Publish your notes through Obsidian Publish.", "action-publish-changes": "Publish changes...", "label-no-internet-access": "You need access to the internet to publish changes.", "label-publish-service-description": "Obsidian Publish is an add-on paid service that lets you publish your notes online directly from Obsidian.", "label-please-login": "To start publishing, please log in or create a new Obsidian account.", "label-no-publish-subscription": "You do not have an Obsidian Publish subscription yet.", "button-purchase": "Purchase", "label-manage-sites": "Manage sites", "label-no-sites": "You don't have any sites.", "button-choose": "Choose", "tooltip-edit-site-id": "Edit site ID", "tooltip-delete-site": "Delete site", "label-delete-site-confirmation": "Are you sure you want to delete this site?", "label-delete-site-details": "This will immediately and permanently delete your site.", "label-confirm-delete-site": "Confirm delete site \"{{site}}\"", "option-site-id": "Site ID", "option-site-id-description": "Your site will be at https://publish.obsidian.md/{site id}. You can change this later. Only lower case letters, numbers, and dashes are allowed.", "option-site-id-placeholder": "Pick a site ID", "button-create": "Create", "msg-invalid-site-id": "Site ID can only contain lowercase letters, numbers, and dashes.", "msg-site-id-in-use": "This site ID is in use, please try another one.", "msg-create-site-issue": "That was an issue when creating your site.", "label-site-options": "Site options", "option-site-general": "General", "option-site-components": "Components", "option-site-appearance": "Appearance", "option-site-reading-experience": "Reading experience", "option-site-misc": "Other site settings", "option-site-name": "Site name", "option-site-name-description": "Name of your published site. It will show up in the page title of your site.", "option-site-name-placeholder": "Name of your site", "option-home-page-file": "Homepage file", "option-home-page-file-description": "The first page the user sees when landing on your published site", "option-home-page-file-placeholder": "Pick a published file", "option-logo": "Logo", "option-logo-description": "Pick an image file as your site logo.", "option-logo-placeholder": "Any uploaded image in your vault...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "Theme", "option-theme-description": "Choose default color scheme for your site.", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "Show navigation", "option-show-navigation-description": "Display a list of all published pages on the left side of your published site.", "option-show-search": "Show search bar", "option-show-search-description": "Display a search bar at top of the navigation that lets the visitors search pages and headings on your site.", "option-show-graph": "Show graph view", "option-show-graph-description": "Display a small local graph on each page.", "option-show-outline": "Show table of contents", "option-show-outline-description": "Display the outline of headings on each page.", "option-show-backlinks": "Show backlinks", "option-show-backlinks-description": "Show backlink section at the end of each page.", "option-sliding-window-mode": "Use sliding windows", "option-sliding-window-mode-description": "Open pages in new panes to the right. Allows scrolling through panes horizontally.", "option-hover-preview-file": "Show hover preview", "option-hover-preview-file-description": "Display page preview when hovering links.", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "Readable line length", "option-readable-line-length-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-site-password": "Passwords", "option-site-password-description": "Restrict access to your site with passwords.", "option-google-analytics": "Google Analytics tracking code", "option-google-analytics-description": "Configure Google Analytics for your site. Only available for visitors from your custom domain URL. Please check with your local laws and regulations first.", "button-manage-passwords": "Manage", "button-save-site-settings": "Save site settings", "msg-updated-options": "Updated options for your site.", "button-go-back": "Back", "label-publishing-to": "Publishing to", "tooltip-switch-site": "Switch site", "button-add-linked": "Add linked", "tooltip-add-linked": "Add all files that are linked by currently selected items", "msg-added-linked-files": "{{count}} linked file has been added.", "msg-added-linked-files_plural": "{{count}} linked files have been added.", "tooltip-open-site-options": "Change site options", "label-no-changes-detected": "No changes were detected.", "label-changed-files-to-be-published": "Changes", "label-unchanged-files-already-published": "Unchanged (select to delete)", "label-file-selected": " selected", "button-select-all-files": "Select all", "button-deselect-all-files": "Deselect all", "label-new-files-to-be-published": "New", "button-publish": "Publish", "msg-no-permission-to-publish-to-site": "You do not have permissions to publish to the current site.", "msg-select-at-least-one-file": "Please select at least one file.", "label-upload-changes": "Upload changes", "button-done": "Done", "button-stop": "Stop", "label-status-uploading": "Uploading", "label-status-to-publish": "To publish", "label-status-to-delete": "To delete", "label-status-published": "Published", "label-status-deleted": "Deleted", "label-status-failed": "Failed", "label-status-cancelled": "Cancelled", "button-change": "Change", "label-clear-cache": "It takes up to a few minutes for the changes to show up on your site. If you do not see your latest changes, try clearing the cache in your browser.", "label-visit-site": "You can visit your site here: ", "msg-something-went-wrong": "Something went wrong. Please check the developer console for details.", "msg-network-error": "A network error occurred. ", "label-manage-passwords": "Manage passwords", "label-add-password": "Add password", "action-new-password": "New password", "label-no-password": "Your site currently does not have any passwords. Anyone can visit it.", "label-have-password": "Your site is password protected. If you have multiple passwords, visitors can access your site by entering any of them.", "option-password-name": "Password", "option-password-desc": "A hash of your password will be stored securely. Once the password is set, it cannot be revealed in plaintext.", "option-password-placeholder": "Your password", "option-nickname-name": "Nickname (optional)", "option-nickname-desc": "Set a nickname to remind yourself what or who the password is for.", "action-add-password": "Add this password", "label-untitled-password": "Untitled password", "label-password-created-time": "Created {{time}}", "msg-added-new-password": "Added new password.", "option-custom-domain": "Custom domain", "option-custom-domain-desc": "Use your own domain rather than the https://publish.obsidian.md/{site id} URL.", "option-noindex": "Disallow search engine indexing", "option-noindex-desc": "Prevent search engines from indexing your site.", "button-configure": "Configure", "label-configure-custom-domain": "Configure custom domain", "option-custom-url-name": "Custom URL", "option-custom-url-desc": "The URL that your site will be located at.", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "Redirect to your custom domain", "option-custom-url-redirect-desc": "Redirect visitors on publish.obsidian.md/id to your custom domain.", "button-update-custom-domain": "Update domain setting", "label-custom-domain-instructions": "Please refer to our {{link}} on our help site for more information.", "label-custom-domain-link-name": "custom domain setup guide", "label-site-usage": "You're using {{site}} out of your {{limit}}.", "button-add-more-sites": "Buy more sites", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "Workspaces", "desc": "Save and load workspace layout.", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "Save", "button-load": "Load", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "Sync", "desc": "Synchronize your files through Obsidian Sync.", "action-view-version-history": "View version history", "label-load-more": "Load more", "label-show-diff": "Show diff", "label-copy-to-clipboard": "Copy to clipboard", "label-restore-this-version": "Restore this version", "msg-already-latest-version": "This version is already the latest version.", "msg-restored-version": "Successfully restored version from {{time}}", "label-file-deleted": "This file was deleted", "label-no-earlier-version": "There was no earlier versions of this file.", "label-empty-file": "Empty", "label-setting-files": "Setting files", "label-deleted-files": "Deleted files", "label-version-history": "Version history", "label-click-to-see-history": "Click on a deleted file to see its history.", "label-create-remote-vault": "Create remote vault", "msg-please-enter-password": "Please enter a password.", "msg-vault-name-cannot-be-empty": "Vault name cannot be empty.", "msg-successfully-created-vault": "Successfully create remote vault \"{{name}}\".", "label-remote-vault-explanation": "Remote vaults securely synchronize your vault between devices.", "option-vault-name": "Vault name", "option-vault-name-desc": "Helps you remember what this vault is for.", "option-vault-name-placeholder": "My awesome vault", "option-use-custom-encryption-password": "Customize end-to-end encryption password", "option-use-custom-encryption-password-desc": "If you turn this off, we will securely manage an encryption key for you.", "option-use-custom-encryption-password-desc-warning": "This option cannot be changed later.", "option-encryption-password": "Encryption password", "option-encryption-password-desc": "This password cannot be changed later.", "option-encryption-password-desc-warning": "If you forget this password, any remote data will remain unusable forever.", "option-encryption-password-desc-2": "This does not affect your local data.", "option-encryption-password-placeholder": "Your password", "label-enter-encryption-password": "Enter encryption password", "button-unlock-vault": "Unlock vault", "msg-verified-password": "Successfully verified your password.", "label-remote-vaults": "Your remote vaults", "label-vault-created-time": "Created {{time}}", "tooltip-delete-remote-vault": "Delete", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "Confirm delete vault", "label-confirm-delete-remote-vault-question": "Are you sure you want to delete this remote vault?", "label-confirm-delete-remote-vault-result": "All data on our server, including version history, will be deleted. Your local files will stay intact.", "label-confirm-delete-remote-vault-warning": "This action is permanent and irreversible.", "msg-remote-vault-deleted": "{{name}} has been deleted.", "button-connect-to-remote-vault": "Connect", "button-disconnect-from-remote-vault": "Disconnect", "label-not-remote-vaults": "You don't have any remote vaults.", "button-create-new-remote-vault": "Create new vault", "label-sync-log": "Sync log", "options-only-show-errors": "Errors only", "options-only-show-errors-desc": "Only show errors and hide other log items.", "button-copy-sync-log": "Copy sync log", "msg-successfully-copied-sync-log": "Successfully copied sync log.", "button-retry": "Retry", "button-purchase-subscription": "Purchase", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "Choose", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "Sync status", "option-sync-status-desc-paused": "Obsidian Sync is currently paused.", "option-sync-status-desc-running": "Obsidian Sync is currently running.", "option-device-name": "Device name", "option-device-name-desc": "This name will be displayed in the sync log. Leave empty to use the default name.", "button-resume": "Resume", "button-pause": "Pause", "option-view-deleted-files": "Deleted files", "option-view-deleted-files-desc": "View and restore deleted files.", "option-sync-log": "Sync activity", "option-sync-log-desc": "View recent sync activities for debugging.", "button-view": "View", "button-bulk-restore": "Bulk restore", "button-restore-selected-files": "Restore selected files", "msg-restoring": "Restoring...", "msg-restoring-complete": "`Restore complete: {{succeeded}} succeeded and {{failed}} failed.`", "option-over-size": "Vault size over limit", "option-over-size-desc": "Your vault is at {{size}} out of {{limit}}.", "msg-largest-files": "View largest files", "msg-largest-files-desc": "These are the remote files that are taking the most space. After deleting attachments, use the purge button to free up remote vault space.", "button-purge-remote": "Purge", "tooltip-purge-remote": "Permanently purge deleted attachments from remote vault to save space.", "msg-purge-complete": "Purge complete.", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "Selective sync", "option-excluded-folders": "Excluded folders", "option-excluded-folder-desc": "Prevent certain folders from being synced.", "option-currently-excluded-folders": " These folders currently excluded:", "button-manage-excluded-folders": "Manage", "option-sync-image": "Sync images", "option-sync-image-desc": "Sync image files with these extensions: {{extensions}}.", "option-sync-audio": "Sync audio", "option-sync-audio-desc": "Sync audio files with these extensions: {{extensions}}.", "option-sync-video": "Sync videos", "option-sync-video-desc": "Sync video files with these extensions: {{extensions}}.", "option-sync-pdf": "Sync PDFs", "option-sync-pdf-desc": "Sync PDF files.", "option-sync-unsupported": "Sync all other types", "option-sync-unsupported-desc": "Sync unsupported file types.", "option-vault-config-sync": "Vault configuration sync", "option-view-config-files": "Settings version history", "option-view-config-files-desc": "View and restore version history of setting files.", "option-sync-app": "Main settings", "option-sync-app-desc": "Enable to sync editor settings, files & links settings, custom hotkeys, etc.", "option-sync-appearance": "Appearance settings", "option-sync-appearance-desc": "Sync appearance settings like dark mode, active theme, and enabled snippets.", "option-sync-appearance-data": "Themes and snippets", "option-sync-appearance-data-desc": "Sync downloaded themes and snippets. Whether they are enabled depends on the previous setting.", "option-sync-hotkey": "Hotkeys", "option-sync-hotkey-desc": "Sync custom hotkeys.", "option-sync-core-plugin": "Active core plugin list", "option-sync-core-plugin-desc": "Sync which core plugins are enabled.", "option-sync-core-plugin-data": "Core plugin settings", "option-sync-core-plugin-data-desc": "Sync core plugin settings.", "option-sync-community-plugin": "Active community plugin list", "option-sync-community-plugin-desc": "Sync which community plugins are enabled.", "option-sync-community-plugin-data": "Installed community plugins", "option-sync-community-plugin-data-desc": "Sync installed community plugins (.js, .css, and manifest.json files) and their settings.", "label-sync-introduction": "Obsidian Sync is Obsidian's add-on sync service with end-to-end encryption and version history.", "label-account-required": "To start syncing, please log in or create a new Obsidian account.", "button-sign-up": "Sign up", "button-log-in": "Log in", "label-manage-excluded-folders": "Manage excluded folders", "label-number-of-folders-excluded": "{{folders}} are currently excluded from being synced.", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "Setup connection", "label-now-connected-to-vault": "You're now connected to \"{{name}}\".", "button-start-syncing": "Start syncing", "label-confirm-merge-vault": "Confirm Merge Vault", "msg-vault-has-notes": "Your local vault already contains some notes.", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "File recovery", "desc": "Let you restore recent snapshots to recover from accidental data loss. Snapshots are only saved for Markdown files.", "action-open": "Open saved snapshots", "option-interval": "Snapshot interval", "option-interval-description": "Minimal interval in minutes between two snapshots.", "option-keep": "History length", "option-keep-description": "Length in days snapshots is kept for.", "option-open-history": "Snapshots", "option-open-history-description": "View and restore saved snapshots.", "button-view-snapshots": "View", "option-clear": "Clear history", "option-clear-description": "Wipe all snapshots.", "button-clear-history": "Clear", "label-clear-warning": "Are you sure you want to delete all snapshots? Note that only snapshots will be removed. All files inside your vault will not be affected.", "msg-clear-complete": "Snapshots cleared.", "label-no-history-found": "No snapshots found.", "placeholder-choose-file": "Choose a file...", "label-select-file": "Please select a file on the left to view snapshots." }, "note-composer": { "name": "Note composer", "desc": "Merge, split, and refactor notes.", "option-confirm-file-merge": "Confirm file merge", "option-confirm-file-merge-description": "Prompt before merge two files.", "option-split-replacement-text": "Text after extraction", "option-split-replacement-text-description": "What to show in place of the selected text after extracting it.", "option-choice-split-replacement-text-link": "Link to new file", "option-choice-split-replacement-text-embed": "Embed new file", "option-choice-split-replacement-text-none": "None", "option-template-file": "Template file location", "option-template-file-description": "Template file to use when merging or extracting. Available variables: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Merge current file with another file...", "action-merge-file": "Merge entire file with...", "label-no-files": "No files found.", "instruction-navigate": "to navigate", "instruction-merge": "to merge", "instruction-create-new": "to create new", "instruction-merge-at-top": "to merge at top", "instruction-dismiss": "to dismiss", "prompt-select-file-to-merge": "Select file to merge into...", "label-merge-file": "Merge file", "label-confirm-file-merge": "Are you sure you want to merge \"{{file}}\" into \"{{destination}}\"? \"{{file}}\" will be deleted.", "button-merge": "Merge", "button-merge-do-not-ask-again": "Merge and don't ask again", "command-split-file": "Extract current selection...", "command-extract-heading": "Extract this heading...", "instruction-append": "to move to bottom", "instruction-prepend": "to move to top", "msg-fail-to-fetch-template": "Failed to fetch template file: \"{{template}}\" not found.", "msg-fail-to-find-heading": "Failed to find heading" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} word", "word-with-count_plural": "{{count}} words", "character-with-count": "{{count}} character", "character-with-count_plural": "{{count}} characters", "link-with-count": "{{count}} link", "link-with-count_plural": "{{count}} links", "file-with-count": "{{count}} file", "file-with-count_plural": "{{count}} file", "folder-with-count": "{{count}} folder", "folder-with-count_plural": "{{count}} folders", "backlink-with-count": "{{count}} backlink", "backlink-with-count_plural": "{{count}} backlinks", "site-with-count": "{{count}} site", "site-with-count_plural": "{{count}} sites", "plugin-with-count": "{{count}} plugin", "plugin-with-count_plural": "{{count}} plugins", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } }{ "setting": { "options": "Možnosti", "plugin": "Doplněk", "builtin-plugins": "Vestavěné doplňky", "plugin-options": "Možnosti doplňků", "folder-path-example-placeholder": "Příklad: složka 1/složka 2", "file-path-example-placeholder": "Příklad: složka/poznámka", "msg-restart-required": "Je vyžadován restart aby se tato změna projevila.", "editor": { "name": "Režim úprav", "section-general": "Obecné", "section-behavior": "Chování", "section-display": "Zobrazení", "option-spellcheck": "Kontrola pravopisu", "option-spellcheck-description": "Spustit kontrolu pravopisu. V současnosti je podporována pouze v Angličtině.", "spellcheck-languages": "Jazyky kontroly pravopisu", "spellcheck-languages-description": "Zvolte jazyk kontroly pravopisu.", "spellcheck-languages-mac-description": "Nativní kontrola pravopisu automaticky rozpozná jazyk, který se se používá v macOS.", "spellcheck-dict": "Slovník kontroly pravopisu", "spellcheck-dict-empty": "Slovník kontroly pravopisu je prázdný.", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "Čitelná délka řádku", "option-readable-line-description": "Omezit maximální délku řádku. Na obrazovku se vleze méně informací, ale dlouhé odstavce budou lépe čitelné.", "option-strict-line-break": "Přísné zalomení řádku", "option-strict-line-break-description": "V režimu náhledu ignorovat jednotlivé zalomení konce řádků podle specifikací Markdownu. Tuto možnost vypněte, aby se jednotlivé zalomení řádků zobrazovaly v náhledu.", "option-show-frontmatter": "Zobrazit hlavičku", "option-show-frontmatter-description": "V režimu náhledu zobrazit hlavičku jako blok kódu. Tuto možnost vypněte pro skrytí hlavičky.", "option-auto-pair-brackets": "Automatické spárování závorek", "option-auto-pair-brackets-description": "Automaticky spáruje závorky a citace.", "option-auto-pair-markdown": "Automatické spárování pomocí Markdown syntaxe", "option-auto-pair-markdown-description": "Automaticky spárujte symboly pro tučné písmo a kurzívu.", "option-smart-indent-lists": "Inteligentní odsazení seznamů", "option-smart-indent-lists-description": "Postará se o odsazení a očíslování seznamů za vás.", "option-fold-heading": "Srolovatelné nadpisy", "option-fold-heading-description": "Umožní schovat vše pod nadpisem.", "option-fold-indent": "Srolovatelné odsazení", "option-fold-indent-description": "Umožní schovat část stejného odsazení, třeba seznam.", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Editing view", "option-default-new-tab-view-reading": "Reading view", "option-default-editing-mode": "Defaultní režim pro editování", "option-default-editing-mode-description": "Defaultní režim pro editování, který se použije pro nový panel.", "option-default-editing-mode-source": "Zdrojový kód", "option-default-editing-mode-live-preview": "Živý náhled", "option-show-line-number": "Zobrazovat čísla řádků", "option-show-line-number-description": "Zobrazení čísla řádku v levém žlábku.", "option-indentation-guide": "Show indentation guides", "option-indentation-guide-description": "Show vertical relationship lines between bullet points for visual guidance.", "option-use-tabs": "Používat odrážky", "option-use-tabs-description": "Použije odrážky při odsazení pomocí klávesy \"Tab\". Chcete-li používat mezery, nechte tuto možnost vypnutou.", "option-tab-size": "Velikost tabulátoru", "option-tab-size-description": "Množství mezer kterému odbovídá tabulátor.", "option-rtl": "Right-to-left (RTL)", "option-rtl-description": "Sets the text direction of notes to display in right-to-left.", "option-auto-convert-html": "Automatická konverze HTML", "option-auto-convert-html-description": "Automaticky konvertuje HTML do Markdownu při vkládání nebo přetažení z webových stránek. Použíjte Ctrl/Cmd+Shift+V pro vložení bez konverze.", "option-vim-key-bindings": "Vim klávesové zkratky", "option-vim-key-bindings-description": "Umožní použití Vim klávesových zkratek v zdrojovém editoru.", "option-vim-key-bindings-mobile": "On mobile devices, this setting is per-device and is not synchronized through the config file.", "option-emacsy-keys": "Legacy Emacs-style key bindings for macOS", "option-emacsy-keys-description": "Allows you to use the additional Emacs-style navigation keys, which are standard on macOS, but may interfere with some key operations.", "label-confirm-enable-vim": "Confirm entering Vim mode", "label-vim-warning": "Vim mode is for efficient text editing but can be quite counter-intuitive. If you're not familiar with Vim, this option might make it look like Obsidian has stopped working.", "label-vim-test": "To verify that you know your way around Vim, please enter the command to quit Vim without saving below:", "label-vim-your-answer": "Your answer", "placeholder-enter-command": "Enter command...", "button-confirm-enable-vim": "Let me enable Vim", "msg-vim-mode-enabled": "Command is correct. Vim mode now enabled.", "msg-vim-mode-not-enabled": "Command is incorrect. Vim mode remains disabled to protect you.", "msg-vim-mode-please-enter-command": "Please enter the command to enable Vim mode", "option-legacy-editor": "Použít starší verzi editoru", "option-legacy-editor-description2": "The legacy editor will be deprecated soon. It is currently no longer maintained, and as such, bugs will no longer be addressed.", "label-legacy-deprecation": "New editor is here", "label-legacy-deprecation-1": "Obsidian now has a brand new editor that's more robust and accessible.", "label-legacy-deprecation-2": "It seems you're still using the legacy editor, and we think you'll enjoy the new editor.", "label-legacy-deprecation-choice": "Which mode would you like to use?", "label-live-preview-description": "A more modern, what-you-see-is-what-you-get experience.", "label-source-mode-description": "See raw Markdown with syntax highlighting.", "button-start-new-editor": "Start new editor" }, "file": { "name": "Soubory a odkazy", "option-confirm-file-deletion": "Potvrzovat odstranění souborů", "option-confirm-file-deletion-description": "Chcete-li být vyzváni k potvrzení při odstraňování souboru.", "option-delete-destination": "Odstraněné soubory", "option-delete-destination-description": "Kam přesouvat odstraněné soubory.", "option-choice-system-trash": "Přesunout do systémového koše", "option-choice-vault-trash": "Přesunout do koše Obsidianu (složka .trash)", "option-choice-permanent-delete": "Permanentní odstranění", "option-always-update-links": "Vždy aktualizovat interní odkazy", "option-always-update-links-description": "Zda automaticky aktualizovat odkazy po přejmenování souboru.", "option-new-note-location": "Výchozí umístění nové poznámky", "option-new-note-location-description": "Specifikujte kde se mají vytvářet nové poznámky. Nastavení jiných doplňků toto nastavení přepíšou.", "option-choice-vault-root": "Kořen trezoru", "option-choice-current-folder": "Stejná složka ve které je aktuální soubor", "option-choice-specified-folder": "Ve složce specifikované níže", "option-new-file-folder-path": "Složka do které se budou vytvářet nové poznámky", "option-new-file-folder-path-description": "Nově vytvořené poznámky se vytvoří v této složce. Nastavení doplňků toto nastavení přepíšou.", "option-use-wiki-links": "Používat [[Wiki-odkaz]]", "option-use-wiki-links-description": "Automaticky vytvoří Wiki-odkaz pro [[odkaz]] a ![[obrázek]] místo Markdown odkazů a obrázků. Tuto možnost vypněte pro vytváření Markdown odkazů.", "option-show-unsupported-files": "Detect all file extensions", "option-show-unsupported-files-description": "Show files with any extension even if Obsidian can't open them natively, so that you can link to them and see them in File Explorer and Quick Switcher.", "option-link-autocompleted-format": "Formát automaticky vytvořených odkazů", "option-link-autocompleted-format-description": "Jaký formát mají mít automaticky vygenerované interní odkazy.", "option-choice-shortest-linktext": "Nejkratší možná cesta", "option-choice-relative-path": "Relativní cesta k souboru", "option-choice-absolute-path": "Absolutní cesta k souboru", "option-new-attachment-location": "Výchozí umístění pro nové přílohy", "option-new-attachment-location-description": "Kam se umisťují nově přidané přílohy.", "option-choice-subdirectory": "Do podsložky v aktuální složce", "option-attachment-folder-path": "Umístění složky příloh", "option-attachment-folder-path-description": "Nově vytvořené přílohy se přesunou sem. Mezi přílohy patří vložené obrázky nebo audio nahrávky.", "option-attachment-subfolder-path": "Název podsložky", "option-attachment-subfolder-path-description": "Pokud je soubor v \"trezor/složka\", a pojmenujete podsložku jako \"přílohy\", tak se přílohy budou ukládat do \"trezor/složka/přílohy\".", "option-attachment-subfolder-path-placeholder": "přílohy", "option-excluded-files": "Excluded files", "option-excluded-files-desc": "Excluded files will be either hidden or less noticeable in various places, such as Quick Switcher, link suggestion, and Graph View.", "label-no-excluded-filters-applied": "No excluded filter is applied right now. Add one below.", "label-excluded-filters-applied": "Files matching the following filters are currently excluded:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Enter path or \"/regex/\"..." }, "appearance": { "name": "Vzhled", "option-base-theme": "Základní motiv", "option-base-theme-description": "Zvolte výchozí odstín základního motivu Obsidianu.", "option-accent-color": "Accent color", "option-accent-color-description": "Choose the accent color used throughout the app.", "dark-theme": "Tmavý", "light-theme": "Světlý", "system-theme": "Adapt to system", "option-font": "Font", "option-advanced": "Advanced", "option-interface-font": "Interface font", "option-interface-font-description": "Set base font for all of Obsidian.", "option-text-font": "Text font", "option-text-font-description": "Set font for editing and reading views.", "option-monospace-font": "Monospace font", "option-monospace-font-description": "Set font for places like code blocks and frontmatter.", "label-single-font-currently-in-effect": " Currently applied font: ", "label-multiple-fonts-currently-in-effect": " The following fonts are currently applied:", "option-font-placeholder": "Enter font name...", "label-no-custom-font-set": "No custom font is applied right now. Add one below.", "label-font-applied": "The first font from this list that is available on your system will be applied.", "msg-font-not-found": "This font is not detected on your system.", "msg-font-found": "This font is detected on your system.", "label-font-name": "Font name", "option-community-themes": "Otevřít komunitní motivy", "option-community-themes-description": "Prouzkoumejte a vyberte si z úžasných motivů vytvořených komunitou.", "button-browse-community-themes": "Prohledat", "option-font-size": "Font size", "option-font-size-description": "Font size in pixels that affects editor and preview.", "option-font-size-action": "Quick font size adjustment", "option-font-size-action-description": "Adjust the font size using Ctrl + Scroll, or using the trackpad pinch-zoom gesture.", "option-themes": "Motivy", "option-manage-themes-description": "Manage installed themes and browse community themes.", "option-theme-button-manage": "Manage", "option-choice-none": "Žádný", "option-native-menus": "Native menus", "option-native-menus-desc": "Menus throughout the app will match the operating system. They will not be affected by your theme.", "button-reload-themes": "Znovu načíst motivy", "msg-reloaded-themes": "Vlastní CSS byli aktualizovány.", "button-open-themes-folder": "Otevřít složku motivů", "option-css-snippets": "CSS úryvky", "label-no-css-snippets-found": "Ve složce úryvků nejsou žádné CSS úryvky.", "no-snippet-description": "CSS úryvky jsou umisťovány v \"{{path}}\".", "button-reload-snippets": "Znovu načíst úryvky", "button-open-snippets-folder": "Otevřít složku úryvků", "msg-reloaded-snippets": "CSS úryvky byli aktualizovány.", "option-toggle-snippet-description": "Použít CSS úryvky umistěné v \"{{path}}\".", "label-installed-themes": "Installed themes", "label-screenshot-unavailable": "Screenshot unavailable", "label-default-theme": "Default", "tooltip-click-to-enlarge": "Click to enlarge", "button-update": "Update", "label-currently-selected": "Selected", "option-frame-style": "Window frame style", "option-frame-description": "Determines the styling of the title bar of Obsidian windows. Requires a full restart to take effect.", "option-frame-hidden": "Hidden (default)", "option-frame-obsidian": "Obsidian frame", "option-frame-native": "Native frame", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Show tab title bar", "option-show-view-header-desc": "Display the header at the top of every tab.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "button-check-for-updates": "Check for updates", "button-view-updates": "View updates", "button-update-all-themes": "Update all", "label-current-themes": "Current community themes", "label-currently-installed": "You currently have {{count}} theme installed.", "label-currently-installed_plural": "You currently have {{count}} themes installed." }, "hotkeys": { "name": "Klávesové Zkratky", "prompt-filter": "Filtrovat...", "tooltip-delete-hotkey": "Smazat klávesovou zkratku", "label-waiting-for-hotkey-press": "Stikněte klávesovou zkratku...", "tooltip-restore-default": "Vrátit vychozí nastavení", "tooltip-customize-command": "Přizpůsobte si tento příkaz", "tooltip-hotkey-single-conflict": "Tato klávesová zkratka je už používána \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "Tato klávesová zkratka je už používána {{count}} dalšími zkratkami", "label-blank-hotkey": "Blank" }, "about": { "name": "O Obsidianu", "label-commercial-license": "Commercial license", "label-license-key": "Licenční klíč", "license-key-placeholder": "Váš licenční klíč...", "label-activate-license": "Aktivovat licenci", "button-activate": "Aktivovat", "label-unknown-version": "Neznáma", "label-current-version": "Současná verze: ", "label-install-version": "(Verze instalátoru: {{version}})", "label-up-to-date": "Vaše aplikace je aktuální!", "label-read-changelog": "Přečíst seznam změn.", "label-manual-update-required": "To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.", "label-download": "Download", "label-new-version-ready": "Nová verze je připravená k instalaci. ", "label-relaunch-to-update": "Restartovat a aktualizovat aplikaci.", "label-disabled-updates": "Aktualizace jsou vypnuté.", "label-checking-for-updates": "Vyhledávání aktualizací...", "button-relaunch": "Restartovat", "button-check-for-updates": "Vyhledat aktualizace", "option-auto-update": "Automatické aktualizace", "option-auto-update-description": "Toto vypnětě pokud nechcete aby si aplikace sama vyhledávala aktualizace.", "option-get-help": "Get help", "option-get-help-description": "Get help on using Obsidian.", "button-open": "Otevřít", "option-language": "Jazyk", "option-language-description": "Změna jazyku rozhraní.", "option-insider-build": "Dostávat insider buildy", "option-insider-build-description": "Automatická aktualizace insider buildů pro vyzkoušení nejnovějších funkcí. Varujeme že tyto buildy obsahují nejmodernější technologie a můou být méně stabilní.", "option-advanced": "Rozšířené", "option-hw-acceleration": "Hardwarová akcelerace", "option-hw-acceleration-description": "Zapne hardwarovou akceleraci, která využívá GPU pro plynulejší chod Obsidianu.", "option-hw-acceleration-warning": "Pokud toto vypnete, výkon aplikace poklesne.", "option-config-location": "Override config folder", "option-config-location-description": "Use a different config folder than the default one. Must start with a dot.", "option-config-location-warning": "Config location must be a valid folder name that starts with a dot.", "label-license": "Licence", "label-your-commercial-license-key": "Klíč vaší komerční licence je \"{{key}}\".", "label-commercial-license-info": "Registrováno \"{{company}}\" pro {{seats}} uživatelů. Platné do {{expiry}}.", "label-validating-commercial-license": "Ověřování...", "label-invalid-commercial-license": "Licence je neplatná: ", "button-remove-commercial-license": "Odebrat", "option-catalyst": "Catalyst license", "option-catalyst-desc": "You currently have the {{tier}} Catalyst license. Thanks for your support!", "option-catalyst-desc-no-license": "You don't have a Catalyst license right now. Catalyst license is a one-time donation to support Obsidian development.", "label-app": "App" }, "account": { "name": "Účet", "option-your-account": "Your account", "option-your-account-desc": "You're currently signed in {{name}} ({{email}}).", "option-your-account-desc-no-login": "You're not logged in right now. An account is only needed for Obsidian Sync, Obsidian Publish, and Catalyst insider builds.", "button-manage-settings": "Manage settings", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Commercial license", "option-commercial-license-desc": "If you use Obsidian for commercial purpose, you may need to get a commercial license.", "button-purchase": "Purchase", "button-log-out": "Odhlásit", "label-log-in": "Přihlásit", "label-sign-up": "Sign up", "label-email": "Email", "placeholder-email": "Váš email...", "label-password": "Heslo", "placeholder-password": "Vaše heslo...", "button-login": "Přihlásit", "message-empty-email": "Email nesmí být prázdný.", "message-invalid-email": "Email není správně.", "message-empty-password": "Heslo nesmí být prázdné.", "message-login-failed": "Přihlášení selhalo, zkontrolujte váš email a heslo.", "label-no-account": "Nemáte účet? ", "link-sign-up-now": "Zaregistrujte se" }, "core-plugin": { "plugin-list": "Plugin list", "option-search-plugin": "Search core plugins", "option-search-plugin-description": "Filter plugins by name or description.", "placeholder-search-plugin": "Search plugins..." }, "third-party-plugin": { "name": "Doplňky třetích stran", "option-restricted-mode": "Restricted mode", "option-restricted-mode-description": "Restricted Mode is off. Turn on to disable community plugins.", "button-turn-on": "Turn on", "option-browse-community-plugins": "Komunitní doplňky", "option-browse-community-plugins-description": "Prozkoumejte a nainstalujte si doplňky třetích stran od naší skvělé komunity.", "button-browse": "Prohledat", "label-exit-restricted-mode": "Exit Restricted Mode", "label-exit-restricted-mode-description-1": "Community plugins, like any other software you install, could potentially cause data integrity and security issues.", "label-exit-restricted-mode-description-2": "Plugin security is important to us. Here's what we do:", "label-exit-restricted-mode-description-3": "Despite our efforts, there is still a small chance that a community plugin might misbehave.", "label-code-review": "Initial code review", "label-code-review-desc": "Plugins undergo an initial code review by our team before they appear in the store.", "label-open-source": "Open source", "label-open-source-desc": "Most plugins are open source on GitHub, so you can inspect the code yourself.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We have a large community of developers who watch out for each other.", "label-report-mechanism": "Report mechanism", "label-report-mechanism-desc": "We follow up and remove faulty plugins upon user report.", "label-exit-restricted-mode-disable-confirmation": "Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.", "label-learn-more": "Learn more about plugin security", "button-turn-on-community-plugins": "Turn on community plugins", "label-trust-author": "Do you trust the author of this vault?", "label-trust-author-description-1": "You're opening this vault for the first time, and it comes with some plugins.", "label-trust-author-description-2": "If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.", "label-trust-author-description-3": "If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.", "button-enable-plugins": "Trust author and enable plugins", "button-dont-trust-author": "Browse vault in Restricted Mode", "placeholder-community-plugins": "Prohledat komunitní doplňky...", "msg-failed-load-plugins": "Načtení komunitních doplňků selhalo.", "label-installed": "Nainstalováno", "button-install": "Nainstalovat", "button-enable": "Enable", "button-disable": "Disable", "button-copy-share-link": "Copy share link", "button-donate": "Donate", "label-no-results-found": "Žádné výsledky.", "msg-failed-to-load-manifest": "Nepodařilo se načíct manifest doplňku.", "label-version": "Verze: {{version}}", "label-currently-installed-version": " (aktuálně nainstalovaná: {{version}})", "label-by-author": "Autor ", "label-repository": "Repozitář: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "This plugin does not support your device.", "button-update": "Aktualizovat", "label-no-readme": "Tento doplněk neposkytlu README soubor.", "msg-installing-plugin": "Instaluje se dompněk \"{{name}}\"...", "msg-failed-to-install-plugin": "Nepodařilo se nainstalovat doplněk \"{{name}}\".", "msg-successfully-installed-plugin": "Doplněk \"{{name}}\" byl úspěšně nainstalován.", "label-installed-plugins": "Nainstalované doplňky", "button-reload-plugins": "Znovu načíst doplňky", "msg-reloaded-third-party-plugins": "Doplňky třetích stran byli aktualizovány.", "label-uninstall": "Odinstalovat", "label-uninstall-plugin": "Odinstalovat doplněk", "label-uninstall-plugin-confirmation": "Jste si jisti že chcete odinstalovat tento doplněk? Složka tohoto doplňku bude smazána.", "button-open-plugins-folder": "Otevřít složku doplňků", "button-check-for-updates": "Zkontrolovat aktualizace", "button-update-all-plugins": "Aktualizovat vše", "label-current-plugins": "Současné doplňky", "label-currently-installed": "V současnosti máte nainstalován {{count}} doplněk.", "label-currently-installed_plural": "V současnosti máte nainstalováno {{count}} doplňků.", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Show a message with how long each plugin took to initialize when starting the app.", "msg-no-updates-found": "Nebyly nalezeny žádné aktualizace doplňků.", "msg-updates-found": "Nalezena aktualizace pro {{count}} doplněk.", "msg-updates-found_plural": "Nalezeny aktualizace pro {{count}} doplňků.", "msg-update-plugin": "Aktualizovat na verzi {{version}}", "option-search-installed-plugin": "Prohledat nainstalované doplňky", "option-search-installed-plugin-description": "Filtrovat nainstalované doplňky dle jména nebo popisu.", "placeholder-search-installed-plugin": "Prohledat nainstalované doplňky...", "show-installed-only": "Show installed only", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "Zobrazuji {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Mobile toolbar", "option-configure-quick-action": "Configure mobile Quick Action", "option-configure-quick-action-description": "Configure which command to trigger when pull down from the top. The current command is set to \"{{command}}\".", "button-configure": "Configure", "placeholder-select-quick-action": "Select Quick Action...", "manage-toolbar-options": "Manage toolbar options", "option-internal-link": "Add internal link", "option-internal-embed": "Add embed", "option-tag": "Add tag", "option-heading": "Toggle heading", "option-strikethrough": "Toggle strikethrough", "option-highlight": "Toggle highlight", "option-code": "Toggle code", "option-blockquote": "Toggle blockquote", "option-markdown-link": "Add Markdown link", "option-bullet-list": "Toggle bullet list", "option-numbered-list": "Toggle numbered list", "option-indent-list": "Indent list item", "option-unindent-list": "Unindent list item", "option-undo": "Undo", "option-redo": "Redo", "option-move-caret-up": "Move caret up", "option-move-caret-down": "Move caret down", "option-move-caret-left": "Move caret left", "option-move-caret-right": "Move caret right", "option-first-line": "Go to first line", "option-last-line": "Go to last line", "option-toggle-keyboard": "Toggle keyboard", "option-configure-toolbar": "Configure mobile toolbar", "option-added-options": "Added options", "option-more-toolbar-options": "More toolbar options", "option-attach": "Insert attachment", "option-add-command": "Add global command", "option-add-command-description": "Select any global command to add to the toolbar." } }, "editor": { "search": { "placeholder-find": "Find", "placeholder-replace": "Replace", "label-previous": "Předchozí", "label-next": "Následující", "label-all": "Všechny", "label-exit-search": "Opustit vyhledávání", "label-replace": "Nahradit", "label-replace-all": "Nahradit vše" }, "link-suggestion": { "label-type-hash": "Napište #", "label-link-heading": "pro odkaz na nadpis", "label-type-block": "Napište ^", "label-link-block": "pro blokovou referenci", "label-type-pipe": "Napište |", "label-change-display-text": "pro změnu zobrazovaného textu", "label-no-match-found": "No match found" }, "spellcheck": { "no-suggestion": "Žádné návrhy...", "add-to-dictionary": "Přidat do slovníku" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "No heading", "label-heading-level": "Heading {{level}}" }, "print-modal": { "title": "Exportovat do PDF", "caption": "Exportuje \"{{filename}}\" do PDF s nastavením níže.", "setting-page-size": "Velikost stránky", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legální", "setting-page-size-letter": "Dopis", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Include file name as title", "setting-landscape": "Na šířku", "setting-margin": "Okraj", "setting-margin-default": "Základní", "setting-margin-minimal": "Minimální", "setting-margin-none": "Žádný", "setting-downscale-percent": "Procento zmenšení", "button-export-to-pdf": "Exportovat do PDF" }, "link-popover": { "tooltip-follow-link": "Follow link", "tooltip-open-link": "Open link", "tooltip-search-tag": "Search tag" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Otevřít ve výchozí aplikaci", "empty-sidebar": "Postranní panel je prázdný, zkuste sem přetáhnout nějaký panel.", "sidebar-expand": "Vysunout", "sidebar-collapse": "Skrýt", "msg-fail-to-save-file": "Uložení souboru \"{{filepath}}\" se nezdařilo. {{message}}.", "no-file": "Žádný soubor", "msg-file-changed": "\"{{file}}\" has been modified externally, merging changes automatically.", "switch-vault": "Otevřít jiný trezor", "help": "Nápověda", "settings": "Nastavení", "drag-to-rearrange": "Přetažením změníte uspořádání", "msg-switched-to-read": "Switched default view mode to reading view.", "msg-switched-to-edit": "Přepnuto výchozího zobrazení na mód úprav.", "msg-upgrade-installer": "Pro použít této funkce, nainstalujte znovu pomocí nejnovějšího instalátoru, který je dostupný na našem webu.", "tooltip-restore-default-settings": "Obnovit výchozí nastavení", "label-copy": "Copy to clipboard", "copied_generic": "Copied to your clipboard", "copied": "{{item}} zkopírován do schránky", "url": "Url", "msg-open-file-through-uri": "Opened file \"{{path}}\"", "msg-file-not-found-through-uri": "File \"{{name}}\" not found.", "delete-action-short-name": "Delete", "msg-indexing": "Obsidian is indexing your vault...\nThis should only happen once.\nSome functionality may not be available until this is complete.", "msg-indexing-complete": "Indexing complete.", "msg-sandbox-vault": "This is a sandbox vault.\nChanges you make in this vault will be lost.", "label-enter-to-create": "Enter to create", "label-update-available": "Update Available", "label-debug-info": "Debug info", "button-learn-more": "Learn more", "button-not-now": "Not now", "button-add": "Add", "button-manage": "Manage", "label-new-tab": "New tab", "msg-tab-busy": "This tab is currently busy, please try again later", "empty-state": { "no-file-open": "Není otevřený žádný soubor", "create-new-file": "Vytvořit nový soubor", "go-to-file": "Přejít k souboru", "see-recent-files": "Nedávné soubory", "close": "Zavřít", "unknown-pane-title": "Plugin no longer active", "unknown-pane-desc": "The plugin that created this pane ({{type}}) has gone away" }, "menu": { "edit-view": "Režim úprav (Ctrl/Cmd+Klik pro úpravu v novém panelu)", "read-view": "Current view: reading", "switch-to-edit-view": "Click to edit", "switch-to-read-view": "Click to read", "mod-click-open-new-tab": "{{key}}+Click to open in new tab", "find": "Najít...", "replace": "Vyměnit...", "edit": "Upravit", "preview": "Náhled", "more-options": "Více možností", "close": "Zavřít", "close-others": "Close others", "close-right": "Close tabs to the right", "pin": "Připnout", "unpin": "Unpin", "unlink-tab": "Unlink tab", "link-tab": "Link with tab...", "toggle-source-mode": "Source mode", "toggle-reading-view": "Reading view", "delete-file": "Smazat soubor", "create-file": "Create this file", "open-link": "Open link", "open-in-new-tab": "Open in new tab", "open-to-the-right": "Open to the right", "copy-url": "Kopírovat url", "close-current-tab": "Close current tab", "copy": "Copy", "cut": "Cut", "paste": "Paste", "paste-as-plain-text": "Paste as plain text", "select-all": "Select all", "rename-heading": "Rename this heading...", "rename-blockid": "Rename this block ID...", "open-in-new-window": "Open in new window", "move-to-new-window": "Move to new window", "open-in-browser": "Open in browser", "stack-tabs": "Stack tabs", "unstack-tabs": "Unstack tabs" }, "tooltip": { "click-to-expand": "Kliknutím rozbalíte", "click-to-collapse": "Kliknutím sbalíte", "alias": "Alias", "not-created-yet": "Not created yet, select to create" }, "start-screen": { "label-version": "Version", "option-open-folder-as-vault": "Použít složku jako trezor", "option-open-folder-as-vault-description": "Vyberte existující složku s Markdown soubory.", "option-create-vault": "Vytvořit nový trezor", "option-create-vault-description": "Vytvořit nový trezor Obsidianu ve složce.", "option-connect-obsidian-sync": "Connect to Obsidian Sync", "option-connect-obsidian-sync-description": "Set up a synced vault with existing remote vault.", "option-new-vault-name": "Jméno trezoru", "option-new-vault-name-description": "Zvolte jméno vašeho úžasného trezoru.", "option-new-vault-location": "Umístění", "option-new-vault-location-description": "Zvolte umístění nového trezoru.", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Reveal vault in system explorer", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "Rename vault...", "msg-error-rename-exists": "There is already a vault with this name.", "msg-error-nested": "Cannot move vault into a subfolder of itself.", "msg-error-rename-open": "Can't rename a currently open vault.", "msg-rename-failed": "Failed to rename vault.", "msg-rename-success": "Successfully renamed vault.", "option-move-vault": "Move vault...", "msg-move-select-dest": "Select destination folder", "msg-error-move-exists": "There is already a vault at the destination.", "msg-error-move-open": "Can't move a currently open vault.", "msg-move-failed": "Failed to move vault.", "msg-move-success": "Successfully moved vault.", "option-remove": "Remove from list", "button-quick-start": "Quick start", "button-open": "Otevřít", "button-browse": "Procházet", "button-connect": "Connect", "button-create-vault": "Vytvořit", "button-back": "Zpět", "msg-empty-vault-name": "Jméno trezoru nesmí být prázdné.", "msg-invalid-folder": "Prosím zvolte platnou složku.", "msg-failed-to-create-vault": "Trezor se nepodařilo vytvořit.", "msg-failed-to-create-vault-at-location": "Trezor se nepodařilo vytvořit ve zvoleném umístění. Znovu zkontrolujte umístění a oprávnění.", "msg-error-failed-to-open-vault": "Trezor se nepodařilo otevřít.", "msg-error-remove-current-open-vault": "Nelze smazat právě otevřený trezor.", "option-get-help": "Get Help", "option-user-email": "Email", "placeholder-your-email": "Your email...", "option-user-password": "Password", "placeholder-your-password": "Your password...", "button-sign-in": "Sign in", "button-setup": "Setup", "option-connect-vault-desc": "Create a synced vault on this device.", "tooltip-own-vault": "This is a remote vault owned by you.", "tooltip-shared-vault": "This is a remote vault shared with you." }, "drag-and-drop": { "insert-link-here": "Zde vložte odkaz", "insert-links-here": "Zde vložte odkazy", "move-into-folder": "Přesunout do složky \"{{folder}}\"", "star-this-file": "Označit hvězdičkou", "star-these-files": "Označit hvězdičkami", "open-in-this-tab": "Open in this tab", "open-as-tab": "Open as new tab" }, "window": { "maximize": "Maximize", "minimize": "Minimize", "restore-down": "Restore down", "close-window": "Close window", "go-back": "Go back", "go-forward": "Go forward" }, "start-up": { "loading-obsidian": "Loading Obsidian...", "obsidian-load-error": "An error occurred while loading Obsidian.", "button-reload-app": "Reload app", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "Open another vault", "loading-components": "Loading components...", "loading-plugins": "Loading plugins...", "loading-vault": "Loading vault...", "msg-failed-to-load-vault": "Failed to load vault: ", "loading-cache": "Loading cache...", "loading-workspace": "Loading workspace..." }, "mobile": { "action-import": "Import into vault", "action-choose-file-to-insert": "Choose a file to insert", "action-insert-text-into-file": "Insert text into {{filename}}", "action-insert-link-into-file": "Insert link into {{filename}}", "msg-importing": "Importing...", "msg-import-success": "Import success", "msg-failed-to-import-file": "Failed to import file {{filename}}", "msg-back-again-to-exit": "Press back again to exit." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "Uložit aktuální soubor", "follow-cursor-link": "Následovat odkaz pod kurzorem", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "Připnout", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "Přejít zpět", "navigate-forward": "Přejít vpřed", "use-dark-mode": "Použít tmavý režim", "use-light-mode": "Použít světlý režim", "change-theme": "Change theme", "search-current-file": "Najít v aktivním souboru", "search-replace-current-file": "Najít a vyměnit v aktivním souboru", "open-settings": "Otevřít nastavení", "open-help": "Otevřít nápovědu", "toggle-edit": "Toggle editing/reading view", "toggle-source-mode": "Toggle Live Preview/Source mode", "delete-current-file": "Odstranit současný soubor", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "Zobrazit/skrýt levý boční panel", "toggle-right-sidebar": "Zobrazit/skrýt pravý boční panel", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "Focus on editor", "toggle-fold": "Sbalení/rozbalení aktuálního řádku", "fold-all": "Sbalit všechny nadpisy a seznamy", "unfold-all": "Rozbalit všechny nadpisy a seznamy", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "Prohodit řádek nahoru", "swap-line-down": "Prohodit řádek dolů", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "Přepnout tučně pro výběr", "toggle-italics": "Přepnout kurzívu pro výběr", "toggle-highlight": "Přepnout zvýraznění pro výběr", "toggle-comments": "Toggle comments for selection", "insert-link": "Vložit odkaz", "toggle-spellcheck": "Toggle spellcheck", "delete-paragraph": "Odstranit odstavec", "toggle-checklist": "Změnit odfajfkování", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "Upravit název souboru", "copy-path": "Kopírovat cestu souboru", "copy-url": "Kopírovat url obsidianu", "export-pdf": "Exportovat do PDF", "reload": "Reload app without saving", "undo-close-tab": "Undo close tab", "context-menu": "Show context menu under cursor", "show-debug-info": "Show debug info", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "Přepínání mezi módem úprav/náhledu", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "Tohle ovlivní {{links}} ve {{files}}.", "msg-updated-links": "Aktualizovány {{links}} ve {{files}}.", "label-update-links": "Aktualizovány odkazy", "label-confirm-update-link-to-file": "Chcete aktualizovat interní odkazy, které odkazují na tento soubor?", "button-always-update": "Aktualizovat vždy", "button-just-once": "Jen jednou", "button-do-not-update": "Neaktualizovat", "label-confirm-deletion": "Jste si jisti že chcete odstranit \"{{filename}}\"?", "label-move-to-system-trash": "Soubor bude přesunut do systémového koše.", "label-move-to-vault-trash": "Soubor bude přesunut do koše Obsidianu, který se nachází v schované složce \".trash\" ve vašem trezoru.", "label-permanent-delete": "Soubor bude permanentně odstraněn.", "label-non-empty-folder": "Složka není prázdná.", "label-delete-folder-warning": "Pokud budete pokračovat, všechny soubory uvnitř složky budou také odstraněny.", "label-delete-folder": "Odstranit složku", "button-delete": "Odstranit", "button-delete-do-not-ask-again": "Odstranit a vícekrát se neptat", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "Tento počet odkazů odkazuje na tuto poznámku: {{links}}.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "Odstranit soubor", "button-manage": "Manage", "button-cancel": "Zrušit", "button-done": "Hotovo", "button-save": "Save", "button-stop": "Stop", "button-continue": "Continue", "preparing-pdf": "Připravuje se PDF...", "label-rename-file": "Rename file", "label-new-name": "New name", "msg-rename-success": "Successfully renamed file.", "label-rename-heading": "Rename heading", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "Doplňky", "file-explorer": { "name": "Průzkumník souborů", "desc": "Zobrazuje všechny soubory ve vašem trezoru.", "action-open": "Open file explorer", "action-show": "Show file explorer", "action-create-note": "Vytvořit novou poznámku", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "Nová poznámka", "action-new-folder": "Nová složka", "action-change-sort": "Změnit pořadí řazení", "action-reveal-file": "Zobrazit soubor v průzkumníku souborů", "action-reveal-active-file": "Zobrazit aktivní soubor v průzkumníku souborů", "command-move-file": "Přesunou soubor do jiné složky", "action-move-file": "Přesunout soubor do...", "action-move-folder": "Přesunou složku do...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "Napište název složky", "label-no-folders": "Nebyly nalezeny žádné složky.", "instruction-navigate": "přesunout na", "instruction-move": "přemístit na", "instruction-dismiss": "přerušit", "label-sort-a-to-z": "Seřadit podle jména (od A do Z)", "label-sort-z-to-a": "Seřadit podle jména (od Z po A)", "label-sort-new-to-old": "Seřadit podle data upravení (od nejnovéjšího po nejstarší)", "label-sort-old-to-new": "Seřadit podle data upravení (od nejstaršího po nejnovější)", "label-sort-created-old-to-new": "Čas vytvoření (od nejstaršího po nejnovější)", "label-sort-created-new-to-old": "Čas vytvoření (od nejnovéjšího po nejstarší)", "menu-opt-new-note": "Nová poznámka", "menu-opt-new-folder": "Nová složka", "menu-opt-set-attachment-folder": "Nastavit jako složku příloh", "menu-opt-rename": "Přejmenovat", "menu-opt-delete": "Smazat", "menu-opt-make-copy": "Vytvořit kopii", "msg-invalid-characters": "Název souborů nemůže obsahovat žádný z nasledujících znaků: ", "msg-unsafe-characters": "Links will not work with file names containing any of these characters: ", "msg-file-already-exists": "Již existuje soubor se stejným názvem", "msg-empty-file-name": "Název souboru nemůže být prázdný.", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "Naposledy upraveno {{time}}", "tooltip-created-time": "Vytvořeno {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Move", "label-untitled-file": "Untitled", "label-untitled-folder": "Untitled", "msg-set-attachment-folder": "Attachments will be saved to \"{{path}}\" from now on." }, "search": { "name": "Hledat", "desc": "Vyhledat klíčové slovo ve všech poznámkách.", "action-open-search": "Hledat ve všech souborech", "label-collapse-results": "Sbalit výsledky", "label-match-case": "Rozlišovat velká a malá písmena", "label-explain-search-term": "Vysvětlit hledaný výraz", "label-more-context": "Zobrazit více kontextu", "prompt-start-search": "Pište pro zahájení hledání ...", "label-match-text": "Odpovídá textu:", "label-match-regex": "Shoduje se s regulárním výrazem:", "label-match-exact-text": "Obsahuje přesný text:", "label-match-all": "Shoduje se ze vším z:", "label-match-any": "Shoduje se s některými z:", "label-excluding": "Vyloučit:", "label-case-sensitive": "Rozlišovat malá a velká písmena", "label-case-insensitive": "Nerozlišovat malá a velká písmena", "label-match-file-path": "Shoduje se s cestou k souboru:", "label-match-file-name": "Shoduje se s názevem souboru:", "label-match-content": "Shoduje se s obsahem souboru:", "label-match-task": "Match task: ", "label-match-task-todo": "Match task (todo): ", "label-match-task-done": "Match task (done): ", "label-match-line": "Shoduje se s frází: ", "label-match-block": "Match block: ", "label-match-section": "Match section: ", "label-match-tag": "Shoduje se s štítkem:", "label-no-matches": "Nebyly nalezeny žádné shody.", "matches-with-count": "... a {{count}} další shoda.", "matches-with-count_plural": "... a {{count}} dalších shod.", "label-copy-search-results": "Kopírovat výsledky hledání", "button-copy-results": "Kopírovat výsledky", "msg-successfully-copied": "Výsledky zkopírovány do schránky.", "option-show-path": "Zobrazit cestu", "option-show-path-description": "Zobrazit celou cestu k souboru, nikoli pouze jeho název.", "option-link-style": "Styl odkazu", "option-link-style-description": "Každý nalezený soubor transformovat na odkaz.", "option-choice-link-style-none": "Žádný", "option-choice-link-style-wikilink": "Wiki odkaz (Wikilink)", "option-choice-link-style-markdown-link": "Markdown odkaz", "option-list-prefix": "Předpona seznamu", "option-list-prefix-description": "Volitelně přidat předponu položky seznamu ke každému výsledku souboru.", "option-choice-list-style-none": "Žádný", "option-choice-list-style-dash": "Pomlčka (-)", "option-choice-list-style-asterisk": "Hvězdička (*)", "option-choice-list-style-numbered": "Očíslovaný", "tooltip-clear-search": "Smazat historii hledání", "label-search-options": "Search options", "tooltip-read-more": "Read more", "label-history": "History", "tooltip-clear-history": "Clear search history", "label-path-option-description": "match path of the file", "label-file-name-option-description": "match file name", "label-tag-option-description": "search for tags", "label-line-option-description": "search keywords on same line", "label-section-option-description": "search keywords under same heading", "menu-opt-search-for": "Search for \"{{keyword}}\"" }, "quick-switcher": { "name": "Rychlé přepínání", "desc": "Skakejte mezi soubory bez sundání rukou z klávesnice. Ctrl/Cmd+O pro aktivování.", "short-name": "Switcher", "action-open": "Otevřít rychlé přepínání", "instruction-navigate": "pro navigaci", "instruction-open": "pro otevření", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "pro vytvoření", "instruction-dismiss": "pro odmítnutís", "label-no-note-create-new": "Žádné poznámky. Enter pro vytvoření nové.", "prompt-type-file-name": "Napište soubor na který přepnout nebo jej vytvořit...", "label-enter-to-create": "Enter pro vytvoření", "tooltip-not-created-yet": "Not created yet, select to create", "option-show-existing-only": "Show existing only", "option-show-existing-only-description": "Whether to show links to files that are not yet created.", "option-show-attachments": "Show attachments", "option-show-attachments-desc": "Show attachment files like images, videos, and PDFs.", "option-show-all-file-types": "Show all file types", "option-show-all-file-types-desc": "Show all files including ones that Obsidian can't open. The file will be opened with the default app for that file type." }, "graph-view": { "name": "Graf", "desc": "Podívejte se na grafický přehled toho jak jsou poznámky propojené.", "action-open": "Otevřít graf", "action-open-local": "Otevřít lokální graf", "action-copy-screenshot": "Kopírovat jako obrázek", "tab-title": "Graf {{displayText}}", "label-filters": "Filtry", "prompt-filter-nodes": "Vyhledat soubory...", "option-depth": "Hloubka", "option-depth-description": "Zobrazit uzly tento počet odkazů daleko", "option-neighbor-links": "Sousedící odkazy", "option-neighbor-links-description": "Zobrazit propojené odkazy u sousedních.", "option-forelinks": "Odchozí odkazy", "option-forelinks-description": "Zobrazit propojení odkazů na jiné soubory", "option-backlinks": "Příchozí odkazy", "option-backlinks-description": "Zobrazit propojené odkazy z jiných souorů na tento", "option-show-tags": "Tagy", "option-show-tags-description": "Tagy budou propojeny se soubory které je obsahují", "option-show-attachments": "Přílohy", "option-show-attachments-description": "Zobrazit přílohy obsažené v souborech", "option-show-existing-files-only": "Jenom existující soubory", "option-show-existing-files-only-description": "Pokud zaškrtnuto, tak propojení na neexistující soubory nebude vidět", "option-show-orphans": "Sirotci", "option-show-orphans-description": "Zobrazit soubory které nejsou propojeny s žádným jiným souborem", "label-display": "Zobrazení", "option-show-arrows": "Šipky", "option-show-arrows-description": "Zobrazit šipky podle směru odkazu při přiblížení", "option-text-fade": "Prahová hodnota zmizení textů", "option-node-size": "Velikost uzlů", "option-link-thickness": "Tloušťka čar", "label-forces": "Síly", "option-center-force": "Gravitace středu", "option-link-force": "Síla propojení", "option-link-distance": "Délka propojení", "option-repel-force": "Odpudivá síla", "tooltip-open-graph-settings": "Otevřít nastavení grafu", "msg-screenshot-copied": "Snímek obrazovky zkopírován do schránky.", "label-groups": "Groups", "placeholder-enter-query": "Enter query...", "tooltip-delete-graph": "Delete group", "button-new-group": "New group", "tooltip-click-to-change-drag-to-reorder": "Click to change color\nDrag to reorder groups", "action-timelapse": "Start graph timelapse animation", "tooltip-start-timelapse-animation": "Start timelapse animation", "button-animate-timelapse": "Animate" }, "backlinks": { "name": "Zpětné odkazy", "desc": "Ukázovat množství zpětných odkazů ve stavovém řádku.", "action-open": "Otevřít zpětné odkazy", "action-show": "Show backlinks pane", "action-open-for-current": "Otevřít zpětné odkazy současného souboru", "action-toggle-backlinks-in-document": "Toggle backlinks in document", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "Propojené zmínky", "label-no-backlinks": "Žádné zpětné odkazy.", "label-unlinked-mentions": "Nepropojené zmínky", "label-show-search": "Show search filter", "label-link-button-text": "Odkaz", "tab-title": "Zpětné odkazy pro {{displayText}}", "label-no-unlinked-mentions": "Nebyly nalezeny žádné nepropojené zmínky.", "ellipsis": "...", "option-backlink-in-document": "Backlink in document", "option-backlink-in-document-desc": "Show backlinks in document by default when opening new panes." }, "outgoing-links": { "name": "Outgoing Links", "desc": "Show outgoing links and detect unlinked mentions of other notes in the current note.", "action-open": "Open outgoing links", "action-show": "Show outgoing links pane", "action-open-for-current": "Open outgoing links for the current file", "tab-title": "Outgoing links from {{displayText}}", "label-links": "Links", "label-no-links": "No links found.", "label-unlinked-mentions": "Unlinked mentions", "tooltip-link-file": "Link this file", "tooltip-not-created": "Not created yet" }, "tag-pane": { "name": "Panel tagů", "desc": "Zobrazuje všechny vaše tagy s množstvím výskytů.", "action-show": "Show tag pane", "label-no-tags": "Žádné tagy.", "label-sort-by-name-a-to-z": "Název tagů (od A do Z)", "label-sort-by-name-z-to-a": "Název tagů (od Z do A)", "label-sort-by-frequency-high-to-low": "Počet výskytů (Od nejvíce po nejméně)", "label-sort-by-frequency-low-to-high": "Počet výskytů (Od nejméně po nejvíce)", "action-show-nested-tags": "Zobrazit vnořené značky", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "Náhled poznámky", "desc": "Náhled poznámky při najetí myší na interní odkaz. Ctrl/Cmd + najetí myší v režimu úprav.", "label-empty-note": "\"{{linktext}}\" prozatím neexituje. Klikněte pro vytvoření.", "label-source-editor": "Editor", "label-source-preview": "Preview", "label-source-search": "Search, Backlinks, and Outgoing links", "label-require-mod": "Require {{key}} to trigger page preview on hover" }, "starred": { "name": "S hvězdičkou", "desc": "Označit hvězdičkou často používané soubory a vyhledávání.", "action-show": "Show starred pane", "action-toggle": "Přidat/odebrat hvězdičku současnému souboru", "action-toggle-search": "Přidat/odebrat hvězdičku současnému vyhledávání", "action-star": "Označit hvězdičkou", "action-unstar": "Odebrat hvězdičku", "menu-opt-remove": "Odebrat", "msg-successfully-starred": "Úspěšně přidány hvězdičky u {{type}} \"{{title}}\".", "msg-removed-starred": "Úspěšně odebrány hvězdičky u {{type}} \"{{title}}\".", "msg-cannot-find-path": "Nelze nalézt soubor v umístění \"{{path}}\"." }, "custom-css": { "name": "Vlastní CSS", "desc": "Přečte \"obsidian.css\" v trezoru a použije je.", "setting-community-themes": "Komunitní motivy", "msg-fetching-themes": "Načítání komunitních motivů...", "prompt-filter": "Filtr...", "label-dark-theme-only": "Pouze tmavé motivy", "label-light-theme-only": "Pouze světlé motivy", "label-use": "Použít", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "Update", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "Remove theme", "label-visit-on-github": "Zobrazit na GitHubu", "msg-load-error": "Nepodařilo se načíct komunitní motivy, zkontrolujte své internetové připojení.", "msg-now-using-theme": "Právě používáte {{title}} jako váš CSS motiv.", "msg-deleted-theme": "The theme {{title}} has been deleted.", "msg-updated-theme": "The theme {{title}} has been updated.", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "Paleta příkazů", "desc": "Zadejte příkaz k jeho provedení. Není třeba používat uživatelské rozhraní nebo si pamatovat zástupce.", "action-open": "Otevřít paletu příkazů", "instruction-navigate": "pro navigaci", "instruction-use": "pro použití", "instruction-dismiss": "pro odmítnutí", "label-no-commands": "Nebyly nalezeny žádné příkazy.", "prompt-type-command": "Napište příkaz...", "label-pinned-commands": "Pinned commands", "option-add-new-pin": "New pinned command", "option-add-new-pin-description": "Pinned commands will appear at the top of all commands when no search query is present." }, "markdown-format-importer": { "name": "Importér Markdown formátu", "desc": "Převede Markdown z jiných aplikací do formátu Obsidianu.", "action-open": "Otevřít importér Markdown formátu", "option-roam-tag-fixer": "Opravení štítků z Roam Research", "option-roam-tag-fixer-description": "Převede \"#tag\" a \"#[[tag]]\" na \"[[tag]]\".", "option-roam-highlight-fixer": "Opravení zvýraznění z Roam Research", "option-roam-highlight-fixer-description": "Převede \"^^highlight^^\" na \"==highlight==\".", "option-roam-todo-converter": "Opravení TODO z Roam Research", "option-roam-todo-converter-description": "Převede \"{{[[TODO]]}}\" na \"[ ]\".", "option-bear-highlight-fixer": "Opravení zvýraznění z Bear", "option-bear-highlight-fixer-description": "Převede \"::highlight::\" na \"==highlight==\".", "zettelkasten-link-fixer": "Opravení Zettelkasten odkazů", "zettelkasten-link-fixer-description": "Převede \"[[UID]]\" odkazy na úplné \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Zkrášlení Zettelkasten odkazů", "zettelkasten-link-beautifier-description": "Převede \"[[UID]]\" odkazy a zkrášlí je na \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Upozornění: importér převede všechny soubory ve vašem trezoru, nejen aktuální soubor.", "msg-override-files-warning": "Vaše soubory budou přepsány. Před provedením převodu si zálohujte všechny své soubory.", "label-start-conversion": "Začít převod", "label-stop": "Stop", "label-go-back": "Jít zpět", "label-done": "Hotovo", "label-processing": "Zpracovávání...", "label-cancelling": "Rušení...", "label-finished": "Dokončeno!", "label-processed-files": "Zpracované soubory", "label-modified-files": "Upravené soubory", "label-total-replacements": "Všechny změny" }, "daily-notes": { "name": "Každodenní poznámky", "desc": "Otevře dnešní poznámku a pokud ještě neexistuje tak ji vytvoří.", "short-name": "Today", "action-open": "Otevřít dnešní poznámku", "action-open-previous": "Otevřít předchozí denní poznámku", "action-open-next": "Otevřít následující denní poznámku", "action-insert-text": "Insert text into daily note", "action-insert-link": "Insert link into daily note", "msg-fail-format": "Nezdařilo se vytvořit dnešní poznámku. \"{{format}}\" není validní formát.", "msg-fail-folder": "Nezdařilo se vytvořit dnešní poznámku. Složka \"{{folderOption}}\" nebyla nalezena.", "msg-fail-template-file": "Nezdařilo se vytvořit dnešní poznámku. Soubor šablony \"{{template}}\" nebyl nalezen.", "msg-no-previous": "Neexistuje předchozí denní poznámka před touto.", "msg-no-next": "Neexistuje následující denní poznámka po této.", "option-date-format": "Formát data", "label-refer-to-syntax": "Více syntaxí najdete na: ", "label-syntax-link": "dokumentace formátu", "label-syntax-live-preview": "Tady je ukázka jak to bude vypadat: ", "option-new-file-location": "Umístění nových poznámek", "option-new-file-location-description": "Složka kam se budou vytvářet denní poznámky.", "option-template": "Umístění šablony", "option-template-description": "Umístění zápisku co bude použit jako šablona.", "option-open-on-start": "Open daily note on startup", "option-open-on-start-description": "Open your daily note automatically whenever you open this vault." }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Náhodná poznámka", "desc": "Otevře náhodnou poznámku. Užitečné pro kontrolu a objevování.", "short-name": "Náhoda", "action-open": "Otevřít náhodnou poznámku" }, "outline": { "name": "Přehled", "desc": "Zobrazí přehled současného souboru nebo připojeního panelu.", "action-open": "Otevřít přehled", "action-show": "Show outline pane", "action-open-for-current": "Open outline of the current file", "tab-title": "Přehled {{displayText}}", "label-no-headings": "Nebyly nalezeny žádné nadpisy." }, "word-count": { "name": "Počet slov", "desc": "Zobrazovat počet slov ve stavovém řádku." }, "slides": { "name": "Snímky", "desc": "Prezentujte přímo z Markdownu. Použijte \"---\" pro rozdělení snímků prezentace.", "action-start": "Spustit prezentaci" }, "audio-recorder": { "name": "Diktafon", "desc": "Nahraje zvukový záznam a uloží jako přílohu.", "action-start": "Spustit nahrávání", "action-stop": "Zastavit nahrávání", "action-toggle": "Spustit/zastavit nahrávání", "msg-access-denied": "Byl zamítnut přístup k mikrofonu, povolte jej v panelu předvoleb.", "msg-pending-grant": "Chcete-li zahájit nahrávání, udělejte oprávnění pro používání mikrofonu.", "msg-no-microphone": "Není připojen žádný mikrofón." }, "open-with-default-app": { "name": "Otevřít ve výchozí aplikaci", "desc": "Přidá možnost pro otevření aktuálního souboru ve výchozí aplikaci.", "action-open-file": "Otevřít ve výchozí aplikaci", "action-open-file-mobile": "Share", "action-show-in-folder": "Zobrazit ve složce", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "Šablony", "desc": "Vloží obsah šablony ze složky souborů šablon.", "action-insert": "Vložit šablonu", "action-insert-current-date": "Insert current date", "action-insert-current-time": "Insert current time", "option-template-folder-location": "Umístění složky šablon", "option-template-folder-location-description": "Soubory v této složce budou dostupné jako šablony.", "option-template-date-format": "Formát data", "option-template-date-format-description": "{{date}} v šabloně bude nahrazen touto hodnotou.", "option-template-date-format-description2": "Můžete také použít {{date:YYYY-MM-DD}} pro přepsání formátu u konkrétního souboru.", "option-template-time-format": "Formát času", "option-template-time-format-description": "{{time}} v šabloně bude nahrazen touto hodnotou.", "option-template-time-format-description2": "Můžete také použít {{time:HH:mm}} pro přepsání formátu u konkrétního souboru.", "instruction-navigate": "pro navigaci", "instruction-insert": "pro vložení šablony", "instruction-dismiss": "pro odmítnutí", "msg-no-templates-found": "Nebyly nalezeny žádné šablony", "msg-fail-invalid-folder": "Nepodařilo se načíst šablony. Složka šablon není validní.", "msg-fail-folder-not-found": "Nepodařilo se načíst šablony. Složka \"{{folderOption}}\" nebyla nalezena.", "prompt-type-template": "Napište název šablony..." }, "translucency": { "name": "Průhledné okno", "desc": "Přidá efekt průhlednosti pro navození pocitu hloubky. Vhodnější pro tmavý režim. Není podporováno na Linuxu." }, "slash-command": { "name": "Slash commands", "desc": "Enable the ability to trigger slash commands in the editor by typing the forward slash." }, "editor-status": { "name": "Editor status", "desc": "Adds a status bar item to show and change the current editor mode.", "read": "Reading", "edit-source": "Source mode", "edit-live-preview": "Live Preview" }, "publish": { "name": "Publikovat", "desc": "Publikujte vaše poznámky pomocí Obsidian Publish.", "action-publish-changes": "Publish changes", "label-no-internet-access": "Pro publikování změn je nutný přístup k internetu.", "label-publish-service-description": "Obsidian Publish je doplňková placená služba, která vám umožní publikovat poznámky online přímo z Obsidianu.", "label-please-login": "Pro publikování se musíte přihlásit nebo si vytvořit Obsidian účet.", "label-no-publish-subscription": "Obsidian Publish zatím nemáte předplacený.", "button-purchase": "Předplatit", "label-manage-sites": "Správa stránek", "label-no-sites": "Nemáte žádné stránky.", "button-choose": "Zvolit", "tooltip-edit-site-id": "Změnit ID stránky", "tooltip-delete-site": "Odstranit stránku", "label-delete-site-confirmation": "Jste si jisti že chcete stránku odstranit?", "label-delete-site-details": "Vaše stránka bude okamžitě a permanentně smazána.", "label-confirm-delete-site": "Potvrďte smazání stránky \"{{site}}\"", "option-site-id": "ID stránky", "option-site-id-description": "Vaši stránku najdete na https://publish.obsidian.md/{site id}. Toto můžete změnit i později. Jsou povolena jen malá písmena, čísla a pomlčky.", "option-site-id-placeholder": "Zvolte ID stránky", "button-create": "Vytvořit", "msg-invalid-site-id": "ID stránky může obsahovat pouze malá písmena, čísla a pomlčky.", "msg-site-id-in-use": "Toto ID stránky je už používáno, zkuste prosím jiné.", "msg-create-site-issue": "Při vytváření stránky došlo k chybě.", "label-site-options": "Možnosti stránky", "option-site-general": "General", "option-site-components": "Komponenty", "option-site-appearance": "Vzhled", "option-site-reading-experience": "Zážitek ze čtení", "option-site-misc": "Other site settings", "option-site-name": "Jméno stránky", "option-site-name-description": "Jméno vaší publikované stránky. Ukáže se jako nadpis vaší stránky.", "option-site-name-placeholder": "Jméno vaší stránky", "option-home-page-file": "Soubor domovské stránky", "option-home-page-file-description": "První stránka co návštěvník uvidí když navštíví vašich publikovaných stránkách", "option-home-page-file-placeholder": "Zvolte publikovaný soubor", "option-logo": "Logo", "option-logo-description": "Pick an image file as your site logo.", "option-logo-placeholder": "Any any uploaded image in your vault...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "Motiv", "option-theme-description": "Zvolte vychozí barevný motiv pro vaše stránky.", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "Zobrazovat navigaci", "option-show-navigation-description": "Zobrazit seznam všech publikovaných stránek na levé straně publikovaného webu.", "option-show-search": "Zobrazovat vyhledávací pole", "option-show-search-description": "Zobrazí vyhledávací pole nad navigací, které návětevníkům umožní vyhledat poznámky a nadpisy na vašich stránkách.", "option-show-graph": "Zobrazovat graf", "option-show-graph-description": "Na každé stránce zobrazit malý lokální graf.", "option-show-outline": "Zobrazovat tabulku obsahu", "option-show-outline-description": "Zobrazit tabulku s obsahem na každé stránce.", "option-show-backlinks": "Zobrazovat zpáteční odkazy", "option-show-backlinks-description": "Zobrazit sekci zpětných odkazů na konci každé stránky.", "option-sliding-window-mode": "Použít posuvná okna", "option-sliding-window-mode-description": "Otevírat stránky v nových panelech vpravo. Umožňuje vodorovné posouvání v panelech.", "option-hover-preview-file": "Zobrazovat náhled při najetí kurzorem", "option-hover-preview-file-description": "Zobrazí náhled stránky při najetí kurzorem na odkaz.", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "Čitelná délka řádku", "option-readable-line-length-description": "Omezit maximální délku řádku. Na obrazovku se vleze méně informací, ale dlouhé odstavce budou lépe čitelné.", "option-site-password": "Hesla", "option-site-password-description": "Umožní přístup na vaše stránky jen těm kteří mají heslo.", "option-google-analytics": "Google Analytics tracking code", "option-google-analytics-description": "Configure Google Analytics for your site. Only available for visitors from your custom domain URL. Please check with your local laws and regulations first.", "button-manage-passwords": "Spravovat", "button-save-site-settings": "Uložit nastavení stránky", "msg-updated-options": "Nastavení vaší stránky bylo aktualizováno.", "button-go-back": "Zpět", "label-publishing-to": "Publikovat na", "tooltip-switch-site": "Změnit stránku", "button-add-linked": "Přidat propojené odkazy", "tooltip-add-linked": "Přidejte všechny soubory, které jsou propojeny k aktuálně vybraným položkám", "msg-added-linked-files": "{{count}} propojený soubor byl přidán.", "msg-added-linked-files_plural": "{{count}} propojených souborů bylo přidáno.", "tooltip-open-site-options": "Změna nastavení stránky", "label-no-changes-detected": "Nebyly detekovány žádné změny.", "label-changed-files-to-be-published": "Změny", "label-unchanged-files-already-published": "Nezměněno (vyberte pro smazání)", "label-file-selected": " vybrané", "button-select-all-files": "Vybrat vše", "button-deselect-all-files": "Odznačit vše", "label-new-files-to-be-published": "Nový", "button-publish": "Publikovat", "msg-no-permission-to-publish-to-site": "Nemáte oprávnění publikovat na současnou stránku.", "msg-select-at-least-one-file": "Vyberte alespoň jeden soubor.", "label-upload-changes": "Nahrát změny", "button-done": "Hotovo", "button-stop": "Zastavit", "label-status-uploading": "Nahrávání", "label-status-to-publish": "Bude publikováno", "label-status-to-delete": "Bude smazáno", "label-status-published": "Publikováno", "label-status-deleted": "Smazáno", "label-status-failed": "Nezdařilo se", "label-status-cancelled": "Zrušeno", "button-change": "Změnit", "label-clear-cache": "Publikování vašich změn může zabrat pár minut než se na vaších stránkých objeví. Pokud změny stále nevidíte, zkuste vymazat mezipaměť prohlížeče.", "label-visit-site": "Vaše stránky můžete navštívit zde: ", "msg-something-went-wrong": "Něco se nezdařilo. Pro více informací zkontrolujte vývojařskou konzoli.", "msg-network-error": "Problém s internetovým připojením. ", "label-manage-passwords": "Spravovat hesla", "label-add-password": "Přidat heslo", "action-new-password": "Nové heslo", "label-no-password": "Vaše stránka zatím nemá žádné hesla. Kdokoliv je může navštívit.", "label-have-password": "Heslo vašich stránek je chráněno. Pokud máte více hesel, návštěvníci můžou použít kterékoliv z nich pro návštěvu vašich stránek.", "option-password-name": "Heslo", "option-password-desc": "Vaše zahashované heslo bude uchováno bezpečně. Jakmile je heslo nastaveno, nemůže už být zobrazeno v originální textové podobě.", "option-password-placeholder": "Vaše heslo", "option-nickname-name": "Přezdívka (nepovinné)", "option-nickname-desc": "Nastavit přezdívku pro připomenutí komu je toto heslo přiděleno.", "action-add-password": "Přidat toto heslo", "label-untitled-password": "Nepojmenované heslo", "label-password-created-time": "Vytvořeno {{time}}", "msg-added-new-password": "Přidáno nové heslo.", "option-custom-domain": "Custom domain", "option-custom-domain-desc": "Use your own domain rather than the https://publish.obsidian.md/{site id} URL.", "option-noindex": "Disallow search engine indexing", "option-noindex-desc": "Prevent search engines from indexing your site.", "button-configure": "Configure", "label-configure-custom-domain": "Configure custom domain", "option-custom-url-name": "Custom URL", "option-custom-url-desc": "The URL that your site will be located at.", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "Redirect to your custom domain", "option-custom-url-redirect-desc": "Redirect visitors on publish.obsidian.md/id to your custom domain.", "button-update-custom-domain": "Update domain setting", "label-custom-domain-instructions": "Please refer to our {{link}} on our help site for more information.", "label-custom-domain-link-name": "custom domain setup guide", "label-site-usage": "You're using {{site}} out of your {{limit}}.", "button-add-more-sites": "Buy more sites", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "Pracovní prostory", "desc": "Uložit a načíst rozložení pracovního prostoru.", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "Uložit", "button-load": "Načíst", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "Synchronizace", "desc": "Synchronizujte svoje soubory pomocí Obsidian Sync.", "action-view-version-history": "Zobrazit historii verzí", "label-load-more": "Načíst více", "label-show-diff": "Show diff", "label-copy-to-clipboard": "Copy to clipboard", "label-restore-this-version": "Obnovit tuto verzi", "msg-already-latest-version": "Tato verze již je nejaktuálnější verze.", "msg-restored-version": "Úspěšně obnovena verze ze {{time}}", "label-file-deleted": "Tento soubor byl smazán", "label-no-earlier-version": "Neexistují žádné dřívější verze tohoto souboru.", "label-empty-file": "Prízdné", "label-setting-files": "Setting files", "label-deleted-files": "Smazané soubory", "label-version-history": "Version history", "label-click-to-see-history": "Klikněte na smazaný soubor pro zobrazení jeho historie.", "label-create-remote-vault": "Vytvořit vzdálený trezor", "msg-please-enter-password": "Prosím vložte heslo.", "msg-vault-name-cannot-be-empty": "Název trezoru nemůže být prázdný.", "msg-successfully-created-vault": "Úspěšně byl vytvořen vzdálený trezor \"{{name}}\".", "label-remote-vault-explanation": "Vzdálené trezory bezpečně synchronizují váš trezor mezi více zařízeními.", "option-vault-name": "Název trezoru", "option-vault-name-desc": "Pomůže vám připomenout co je v tomto trezoru.", "option-vault-name-placeholder": "Můj úchvatný trezor", "option-use-custom-encryption-password": "Customize end-to-end encryption password", "option-use-custom-encryption-password-desc": "If you turn this off, we will securely manage an encryption key for you.", "option-use-custom-encryption-password-desc-warning": "This option cannot be changed later.", "option-encryption-password": "Encryption password", "option-encryption-password-desc": "This password cannot be changed later.", "option-encryption-password-desc-warning": "If you forget this password, any remote data will remain unusable forever.", "option-encryption-password-desc-2": "This does not affect your local data.", "option-encryption-password-placeholder": "Your password", "label-enter-encryption-password": "Enter encryption password", "button-unlock-vault": "Unlock vault", "msg-verified-password": "Successfully verified your password.", "label-remote-vaults": "Your remote vaults", "label-vault-created-time": "Created {{time}}", "tooltip-delete-remote-vault": "Delete", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "Confirm delete vault", "label-confirm-delete-remote-vault-question": "Are you sure you want to delete this remote vault?", "label-confirm-delete-remote-vault-result": "All data on our server, including version history, will be deleted. Your local files will stay intact.", "label-confirm-delete-remote-vault-warning": "This action is permanent and irreversible.", "msg-remote-vault-deleted": "{{name}} has been deleted.", "button-connect-to-remote-vault": "Connect", "button-disconnect-from-remote-vault": "Disconnect", "label-not-remote-vaults": "You don't have any remote vaults.", "button-create-new-remote-vault": "Create new vault", "label-sync-log": "Sync log", "options-only-show-errors": "Errors only", "options-only-show-errors-desc": "Only show errors and hide other log items.", "button-copy-sync-log": "Copy sync log", "msg-successfully-copied-sync-log": "Successfully copied sync log.", "button-retry": "Retry", "button-purchase-subscription": "Purchase", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "Choose", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "Sync status", "option-sync-status-desc-paused": "Obsidian Sync is currently paused.", "option-sync-status-desc-running": "Obsidian Sync is currently running.", "option-device-name": "Device name", "option-device-name-desc": "This name will be displayed in the sync log. Leave empty to use the default name.", "button-resume": "Resume", "button-pause": "Pause", "option-view-deleted-files": "Deleted files", "option-view-deleted-files-desc": "View and restore deleted files.", "option-sync-log": "Sync activity", "option-sync-log-desc": "View recent sync activities for debugging.", "button-view": "View", "button-bulk-restore": "Bulk restore", "button-restore-selected-files": "Restore selected files", "msg-restoring": "Restoring...", "msg-restoring-complete": "`Restore complete: {{succeeded}} succeeded and {{failed}} failed.`", "option-over-size": "Vault size over limit", "option-over-size-desc": "Your vault is at {{size}} out of {{limit}}.", "msg-largest-files": "View largest files", "msg-largest-files-desc": "These are the remote files that are taking the most space. After deleting attachments, use the purge button to free up remote vault space.", "button-purge-remote": "Purge", "tooltip-purge-remote": "Permanently purge deleted attachments from remote vault to save space.", "msg-purge-complete": "Purge complete.", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "Selective sync", "option-excluded-folders": "Excluded folders", "option-excluded-folder-desc": "Prevent certain folders from being synced.", "option-currently-excluded-folders": " These folders currently excluded:", "button-manage-excluded-folders": "Manage", "option-sync-image": "Sync images", "option-sync-image-desc": "Sync image files with these extensions: {{extensions}}.", "option-sync-audio": "Sync audio", "option-sync-audio-desc": "Sync audio files with these extensions: {{extensions}}.", "option-sync-video": "Sync videos", "option-sync-video-desc": "Sync video files with these extensions: {{extensions}}.", "option-sync-pdf": "Sync PDFs", "option-sync-pdf-desc": "Sync PDF files.", "option-sync-unsupported": "Sync all other types", "option-sync-unsupported-desc": "Sync unsupported file types.", "option-vault-config-sync": "Vault configuration sync", "option-view-config-files": "Settings version history", "option-view-config-files-desc": "View and restore version history of setting files.", "option-sync-app": "Main settings", "option-sync-app-desc": "Enable to sync editor settings, files & links settings, custom hotkeys, etc.", "option-sync-appearance": "Appearance settings", "option-sync-appearance-desc": "Sync appearance settings like dark mode, active theme, and enabled snippets.", "option-sync-appearance-data": "Themes and snippets", "option-sync-appearance-data-desc": "Sync downloaded themes and snippets. Whether they are enabled depends on the previous setting.", "option-sync-hotkey": "Hotkeys", "option-sync-hotkey-desc": "Sync custom hotkeys.", "option-sync-core-plugin": "Active core plugin list", "option-sync-core-plugin-desc": "Sync which core plugins are enabled.", "option-sync-core-plugin-data": "Core plugin settings", "option-sync-core-plugin-data-desc": "Sync core plugin settings.", "option-sync-community-plugin": "Active community plugin list", "option-sync-community-plugin-desc": "Sync which community plugins are enabled.", "option-sync-community-plugin-data": "Installed community plugins", "option-sync-community-plugin-data-desc": "Sync installed community plugins (.js, .css, and manifest.json files) and their settings.", "label-sync-introduction": "Obsidian Sync is Obsidian's add-on sync service with end-to-end encryption and version history.", "label-account-required": "To start syncing, please log in or create a new Obsidian account.", "button-sign-up": "Sign up", "button-log-in": "Log in", "label-manage-excluded-folders": "Manage excluded folders", "label-number-of-folders-excluded": "{{folders}} are currently excluded from being synced.", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "Setup connection", "label-now-connected-to-vault": "You're now connected to \"{{name}}\".", "button-start-syncing": "Start syncing", "label-confirm-merge-vault": "Confirm Merge Vault", "msg-vault-has-notes": "Your local vault already contains some notes.", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "File recovery", "desc": "Let you restore recent snapshots to recover from accidental data loss. Snapshots are only saved for Markdown files.", "action-open": "Open saved snapshots", "option-interval": "Snapshot interval", "option-interval-description": "Minimal interval in minutes between two snapshots.", "option-keep": "History length", "option-keep-description": "Length in days snapshots is kept for.", "option-open-history": "Snapshots", "option-open-history-description": "View and restore saved snapshots.", "button-view-snapshots": "View", "option-clear": "Clear history", "option-clear-description": "Wipe all snapshots.", "button-clear-history": "Clear", "label-clear-warning": "Are you sure you want to delete all snapshots? Note that only snapshots will be removed. All files inside your vault will not be affected.", "msg-clear-complete": "Snapshots cleared.", "label-no-history-found": "No snapshots found.", "placeholder-choose-file": "Choose a file...", "label-select-file": "Please select a file on the left to view snapshots." }, "note-composer": { "name": "Note composer", "desc": "Merge, split, and refactor notes.", "option-confirm-file-merge": "Confirm file merge", "option-confirm-file-merge-description": "Prompt before merge two files.", "option-split-replacement-text": "Text after extraction", "option-split-replacement-text-description": "What to show in place of the selected text after extracting it.", "option-choice-split-replacement-text-link": "Link to new file", "option-choice-split-replacement-text-embed": "Embed new file", "option-choice-split-replacement-text-none": "None", "option-template-file": "Template file location", "option-template-file-description": "Template file to use when merging or extracting. Available variables: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Merge current file with another file...", "action-merge-file": "Merge entire file with...", "label-no-files": "No files found.", "instruction-navigate": "to navigate", "instruction-merge": "to merge", "instruction-create-new": "to create new", "instruction-merge-at-top": "to merge at top", "instruction-dismiss": "to dismiss", "prompt-select-file-to-merge": "Select file to merge into...", "label-merge-file": "Merge file", "label-confirm-file-merge": "Are you sure you want to merge \"{{file}}\" into \"{{destination}}\"? \"{{file}}\" will be deleted.", "button-merge": "Merge", "button-merge-do-not-ask-again": "Merge and don't ask again", "command-split-file": "Extract current selection...", "command-extract-heading": "Extract this heading...", "instruction-append": "to move to bottom", "instruction-prepend": "to move to top", "msg-fail-to-fetch-template": "Failed to fetch template file: \"{{template}}\" not found.", "msg-fail-to-find-heading": "Failed to find heading" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} slovo", "word-with-count_plural": "{{count}} slov", "character-with-count": "{{count}} znak", "character-with-count_plural": "{{count}} znaků", "link-with-count": "{{count}} odkaz", "link-with-count_plural": "{{count}} odkazů", "file-with-count": "{{count}} soubor", "file-with-count_plural": "{{count}} souborů", "folder-with-count": "{{count}} složka", "folder-with-count_plural": "{{count}} složek", "backlink-with-count": "{{count}} zpětný odkaz", "backlink-with-count_plural": "{{count}} zpětných odkazů", "site-with-count": "{{count}} stránka", "site-with-count_plural": "{{count}} stránek", "plugin-with-count": "{{count}} doplněk", "plugin-with-count_plural": "{{count}} doplňků", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } }{ "setting": { "options": "Indstillinger", "plugin": "Plugin", "builtin-plugins": "Kerne plugins", "plugin-options": "Plugin indstillinger", "folder-path-example-placeholder": "Eksempel: mappe 1/mappe 2", "file-path-example-placeholder": "Eksempel: mappe/note", "msg-restart-required": "Denne indstilling kræver en genstart for at fungere.", "editor": { "name": "Editor", "section-general": "Generelt", "section-behavior": "Adfærd", "section-display": "Visning", "option-spellcheck": "Stavekontrol", "option-spellcheck-description": "Slå stavekontrol til, som på nuværende kun virker for Amerikansk Engelsk.", "spellcheck-languages": "Stavekontrol sprog", "spellcheck-languages-description": "Vælg det sprog som stavekontrollen skal benytte.", "spellcheck-languages-mac-description": "På macOS vil den indbyggede stavekontrol automatisk detektere det anvendte sprog.", "spellcheck-dict": "Stavekontrol ordbog", "spellcheck-dict-empty": "Stavekontrol ordbogen er tom.", "option-show-inline-title": "Vis indlejret titel", "option-show-inline-title-description": "Viser notens navn som en redigerbar titel indlejret øverst i noten.", "option-readable-line-length": "Læsbar linje længde", "option-readable-line-description": "Begræns maksimum linje længde. Mindre indhold tilpasses skærmen, men længere blokke af tekst er mere læsbare.", "option-strict-line-break": "Strengt linjeskift", "option-strict-line-break-description": "Markdown specifikationerne ignorerer linjeskift i forhåndsvisning. Slå dette fra for at gøre enkelt linjeskift synligt.", "option-show-frontmatter": "Vis YAML front matter metadata sektion", "option-show-frontmatter-description": "Vis YAML front matter metadata som en kodeblok i forhåndsvisning. Slå fra for at skjule YAML front matter sektion.", "option-auto-pair-brackets": "Auto par kantede parenteser", "option-auto-pair-brackets-description": "Par kantede parenteser og citér automatisk.", "option-auto-pair-markdown": "Auto par Markdown syntaks", "option-auto-pair-markdown-description": "Par automatisk symboler for fed og kursiv tekst.", "option-smart-indent-lists": "Smarte indryknings lister", "option-smart-indent-lists-description": "Sæt indrykning automatisk og placér elementer korrekt..", "option-fold-heading": "Fold overskrift", "option-fold-heading-description": "Folder al indhold ind under en overskrift.", "option-fold-indent": "Fold indrykning", "option-fold-indent-description": "Lader dig folde en del af en indrykning, såsom lister.", "option-default-new-tab-view": "Standard visningstilstand for ny fane", "option-default-new-tab-view-description": "Standard visningstilstand en ny fane åbnes i.", "option-default-new-tab-view-editing": "Redigeringstilstand", "option-default-new-tab-view-reading": "Visningstilstand", "option-default-editing-mode": "Standard redigeringstilstand", "option-default-editing-mode-description": "Standard redigeringstilstand et nyt panel åbnes i.", "option-default-editing-mode-source": "Kilde", "option-default-editing-mode-live-preview": "Live", "option-show-line-number": "Vis linjenummer", "option-show-line-number-description": "Vis linjenummer i margen.", "option-indentation-guide": "Vis indrykningshjælpelinjer", "option-indentation-guide-description": "Vis lodrette relationslinjer mellem punkttegn for visuel hjælp.", "option-use-tabs": "Benyt tabulator", "option-use-tabs-description": "Benyt tabulator til at indrykke ved at trykke på \"Tab\" tasten. Slå den fra for at benytte mellemrumstasten.", "option-tab-size": "Tab størrelse", "option-tab-size-description": "Antal mellemrum som en tab svarer til.", "option-rtl": "Højre-til-venstre (RTL)", "option-rtl-description": "Sætter visning af noternes tekstretning fra højre til venstre.", "option-auto-convert-html": "Autokonvertér HTML", "option-auto-convert-html-description": "Konvertér HTML automatisk til Markdown ved indsætning og træk og slip fra websider. Benyt Ctrl/Cmd+Shift+V for at indsætte uden konvertering.", "option-vim-key-bindings": "Vim tastaturgenveje", "option-vim-key-bindings-description": "Lader dig benytte Vim tastaturgenveje i kildeeditoren.", "option-vim-key-bindings-mobile": "På mobile enheder er denne indstilling pr. enhed og synkroniseres ikke via konfigurationsfilen.", "option-emacsy-keys": "Ældre Emacs tastaturgenveje for macOS", "option-emacsy-keys-description": "Lader dig benytte yderligere Emacs tastaturgenveje, som er standard på macOS, men disse kan kollidere med andre tastaturgenveje.", "label-confirm-enable-vim": "Bekræft at du vil benytte Vim redigeringstilstand", "label-vim-warning": "Vim redigeringstilstand kan anvendes til effektiv redigering men kan forekomme ulogisk. Hvis du ikke kender Vim, kan denne funktion få det til at se ud som om Obsidian ikke fungerer.", "label-vim-test": "For at bekræfte at du har kendskab til Vim, bedes du skrive kommandoen til at afslutte Vim uden at gemme herunder:", "label-vim-your-answer": "Dit svar", "placeholder-enter-command": "Skriv kommando...", "button-confirm-enable-vim": "Lad mig aktivere Vim", "msg-vim-mode-enabled": "Kommandoen er korrekt. Vim redigeringstilstand er nu aktiveret.", "msg-vim-mode-not-enabled": "Kommandoen er ikke korrekt. Vim tilstand forbliver deaktiveret for at beskytte dig.", "msg-vim-mode-please-enter-command": "Skriv venligst kommandoen for at aktivere Vim redigeringstilstand", "option-legacy-editor": "Benyt gammel editor", "option-legacy-editor-description2": "Den gamle editor vil blive fjernet snart. Den bliver ikke længere vedligeholdt, og derfor vil eventuelle fejl ikke blive rettet.", "label-legacy-deprecation": "Den nye editor er her nu", "label-legacy-deprecation-1": "Obsidian har nu en helt ny editor, som er mere robust og nemmere at benytte.", "label-legacy-deprecation-2": "Det ser ud til at du stadig benytter den gamle editor, og vi tror du vil få glæde af den nye editor.", "label-legacy-deprecation-choice": "Hvilken tilstand ønsker du at benytte?", "label-live-preview-description": "En mere moderne hvad-du-ser-er-hvad-du-få oplevelse.", "label-source-mode-description": "Se rå Markdown med syntaksfremhævning.", "button-start-new-editor": "Start ny editor" }, "file": { "name": "Filer & Links", "option-confirm-file-deletion": "Bekræft fil sletning", "option-confirm-file-deletion-description": "Spørg før fil sletning.", "option-delete-destination": "Slettede filer", "option-delete-destination-description": "Hvad sker der med en fil efter at du har slettet den.", "option-choice-system-trash": "Flyt til system papirkurven", "option-choice-vault-trash": "Flyt til Obsidian papirkurven (.trash folder)", "option-choice-permanent-delete": "Slet permanent", "option-always-update-links": "Opdater automatisk interne links", "option-always-update-links-description": "Slå spørgsmål om at opdatere links efter omdøbning af en fil fra.", "option-new-note-location": "Standard placering for nye noter", "option-new-note-location-description": "Hvor nye noter bliver placeret. Plugin indstillinger vil tilsidesætte det.", "option-choice-vault-root": "Boks mappe", "option-choice-current-folder": "Samme mappe som nuværende fil", "option-choice-specified-folder": "I mappen angivet nedenfor", "option-new-file-folder-path": "Mappe som nye filer skal lægges i", "option-new-file-folder-path-description": "Nye noter vil blive lagt i denne mappe. Plugin indstillinger vil tilsidesætte det.", "option-use-wiki-links": "Benyt [[Wikilinks]]", "option-use-wiki-links-description": "Auto-generer Wikilinks for [[links]] og ![[images]] i stedet for Markdown links og billeder. Slå denne indstilling fra for at generere Markdown links i stedet.", "option-show-unsupported-files": "Vis alle filtyper", "option-show-unsupported-files-description": "Viser alle filtyper, selv dem Obsidian ikke undersøtter direkte, så du kan linke til dem og vise dem i stifinderen og i hurtig skifteren.", "option-link-autocompleted-format": "Ny link format", "option-link-autocompleted-format-description": "Hvilke links som skal indsættes, når der auto-genereres interne links.", "option-choice-shortest-linktext": "Korteste sti, når det er muligt", "option-choice-relative-path": "Relativ stil til fil", "option-choice-absolute-path": "Absolut sti til boks", "option-new-attachment-location": "Standard placering for nye vedhæftede filer", "option-new-attachment-location-description": "Hvor nye vedhæftede filer er placeret.", "option-choice-subdirectory": "I undermappe under nuværende mappe", "option-attachment-folder-path": "Sti til vedhæftede filer", "option-attachment-folder-path-description": "Placer nye vedhæftede filer, såsom billeder der er dannet ved træk og slip eller lydoptagelser, i denne mappe.", "option-attachment-subfolder-path": "Navn på undermappe", "option-attachment-subfolder-path-description": "Hvis din fil ligger i \"boks/vedhæftninger\", og du sætter dit undermappe navn til \"vedhæftninger\", så vil vedhæftede filer blive gemt i \"boks/mappe/vedhæftninger\".", "option-attachment-subfolder-path-placeholder": "vedhæftninger", "option-excluded-files": "Udeladte filer", "option-excluded-files-desc": "Udeladte filer vil enten skjules eller være mindre synlige forskellige steder, såsom i hurtigskifteren, linkforslag og grafvisning.", "label-no-excluded-filters-applied": "Der er ikke anvendt et udeladelsesfilter lige nu. Tilføj et nedenunder.", "label-excluded-filters-applied": "Filer der matcher de følgende filtre er for nuværende udeladt:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Angiv sti eller \"/regex/\"..." }, "appearance": { "name": "Udseende", "option-base-theme": "Basis tema", "option-base-theme-description": "Vælg Obsidian’s standard farvetema.", "option-accent-color": "Markeringsfarve", "option-accent-color-description": "Vælg markeringsfarven som skal anvendes overalt.", "dark-theme": "Mørk", "light-theme": "Lys", "system-theme": "Tilpas til systemet", "option-font": "Font", "option-advanced": "Avanceret", "option-interface-font": "Grænseflade font", "option-interface-font-description": "Sæt basisfont for Obsidian.", "option-text-font": "Tekst font", "option-text-font-description": "Sæt font for redigerings- og visningspaneler.", "option-monospace-font": "Monospace font", "option-monospace-font-description": "Sæt font for særlige områder som f.eks. kodeblokke og YAML frontmatter.", "label-single-font-currently-in-effect": " Nuværende valgte font: ", "label-multiple-fonts-currently-in-effect": " De følgende fonte er for nuværende valgt:", "option-font-placeholder": "Skriv font navn...", "label-no-custom-font-set": "Der er ikke tilføjet en brugerdefineret font i øjeblikket. Tilføj en nedenunder.", "label-font-applied": "Den første font fra denne liste af tilgængelige fonte på dit system vil blive anvendt.", "msg-font-not-found": "Denne font findes ikke på dit system.", "msg-font-found": "Denne font findes på dit system.", "label-font-name": "Font navn", "option-community-themes": "Fællesskabstemaer", "option-community-themes-description": "Forhåndsvis og anvend fantastiske temaer skabt af fællesskabet.", "button-browse-community-themes": "Gennemse", "option-font-size": "Font størrelse", "option-font-size-description": "Font størrelse i pixels som påvirker editor og forhåndvisning.", "option-font-size-action": "Hurtig justering af font størrelse", "option-font-size-action-description": "Juster font størrelsen med Ctrl + Scroll, eller ved knibe-sammen bevægelse på trackpad.", "option-themes": "Temaer", "option-manage-themes-description": "Administrér installerede temaer og gennemse andre fællesskabstemaer.", "option-theme-button-manage": "Administrér", "option-choice-none": "Ingen", "option-native-menus": "Indbyggede menuer", "option-native-menus-desc": "Menuerne i Obsidian vil matche operativ systements menuer. Menuerne ændres ikke af det valgte tema.", "button-reload-themes": "Genindlæs temaer", "msg-reloaded-themes": "Genindlæs brugerdefinerede CSS temaer.", "button-open-themes-folder": "Åben tema mappe", "option-css-snippets": "CSS kodestykker", "label-no-css-snippets-found": "Der er ikke fundet nogle CSS kodestykker.", "no-snippet-description": "CSS kodestykker er gemt under \"{{path}}\".", "button-reload-snippets": "Genindlæs kodestykker", "button-open-snippets-folder": "Åben kodestykke mappe", "msg-reloaded-snippets": "Genindlæste CSS kodestykker.", "option-toggle-snippet-description": "Anvend CSS kodestykkerne fra mappen \"{{path}}\".", "label-installed-themes": "Installerede temaer", "label-screenshot-unavailable": "Skærmbillede ikke tilgængeligt", "label-default-theme": "Standard", "tooltip-click-to-enlarge": "Klik for at forstørre", "button-update": "Opdater", "label-currently-selected": "Valgte", "option-frame-style": "Rammestil for vinduer", "option-frame-description": "Bestem titelbar stilen for Obsidian vinduer. Kræver en genstart af Obisitian for at få effekt.", "option-frame-hidden": "Skjult (standard)", "option-frame-obsidian": "Obsidian ramme", "option-frame-native": "Operativsystem ramme", "option-configure-ribbon": "Båndmenu", "option-configure-ribbon-desc": "Konfigurer de kommandoer som skal kunne ses i båndmenuen på navigationslinjen.", "option-mobile-quick-ribbon-item": "Hurtig adgang til båndelement", "option-mobile-quick-ribbon-item-desc": "ET tryk på båndelementet på navigationslinjen vil aktivere dette båndelement. Ve at trykke og holde vil menuen vises.", "button-configure": "Konfigurer", "label-additional-ribbon-items": "Andre båndelementer", "label-modal-configuration": "Båndkonfigurator", "label-modal-configuration-desc": "Vælg hvilke elementer du vil have aktive på båndet. Træk og slip for at ændre rækkefølgen.", "option-show-view-header": "Vis fane titelbar", "option-show-view-header-desc": "Viser titlen i toppen af hver fane.", "msg-updates-found": "Fandt {{count}} tema, som kan opdateres.", "msg-updates-found_plural": "Fandt {{count}} temaer, som kan opdateres.", "button-check-for-updates": "Tjek for opdateringer", "button-view-updates": "Vis opdateringer", "button-update-all-themes": "Opdater alle", "label-current-themes": "Nuværende fællesskabstemaer", "label-currently-installed": "Du har for nuværende {{count}} tema installeret.", "label-currently-installed_plural": "Du har for nuværende {{count}} temaer installeret." }, "hotkeys": { "name": "Genvejstaster", "prompt-filter": "Filter...", "tooltip-delete-hotkey": "Slet genvejstast", "label-waiting-for-hotkey-press": "Tryk genvejstast...", "tooltip-restore-default": "Gendan standard", "tooltip-customize-command": "Tilpas denne genvejstast", "tooltip-hotkey-single-conflict": "Denne genvejstast er i konflikt med \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "Denne genvejstast er i konflikt med {{count}} andre genvejstaster", "label-blank-hotkey": "Ingen aktive genveje" }, "about": { "name": "Om", "label-commercial-license": "Commerciel licens", "label-license-key": "Licensnøgle", "license-key-placeholder": "Din licensnøgle...", "label-activate-license": "Aktiver licens", "button-activate": "Aktiver", "label-unknown-version": "Ukendt", "label-current-version": "Nuværende version: ", "label-install-version": "(Installationsversion: {{version}})", "label-up-to-date": "Obsidian er opdateret!", "label-read-changelog": "Læs ændringsloggen.", "label-manual-update-required": "For at understøtte de seneste features og modtage de seneste sikkerhedsopdateringer skal Obsidian opdateres med det nyeste installationsprogram. Du skal hente Obsidian manuelt og geninstallere Obsidian.", "label-download": "Download", "label-new-version-ready": "En ny version er klar til at blive installeret. ", "label-relaunch-to-update": "Genstart Obsidian for at opdatere den.", "label-disabled-updates": "Opdateringer er deaktiveret.", "label-checking-for-updates": "Tjekker for nye opdateringer...", "button-relaunch": "Genstart", "button-check-for-updates": "Tjek for opdateringer", "option-auto-update": "Automatisk opdatering", "option-auto-update-description": "Hvis du deaktiverer denne indstilling vil Obsidian ikke tjekke for opdateringer.", "option-get-help": "Få hjælp", "option-get-help-description": "Få hjælp til at bruge Obsidian.", "button-open": "Åben", "option-language": "Sprog", "option-language-description": "Skift det viste sprog.", "option-insider-build": "Modtag insider versioner", "option-insider-build-description": "Opdater automatisk til insider versioner og prøv nye funktioner. Disse versioner er helt nye og kan være mindre stabile.", "option-advanced": "Avanceret", "option-hw-acceleration": "Hardware Acceleration", "option-hw-acceleration-description": "Aktiverer hardware acceleration, som benytter din GPU for at øge Obsidians ydeevne.", "option-hw-acceleration-warning": "Hvis du deaktiverer hardware acceleration vil ydeevnen blive alvorligt forringet.", "option-config-location": "Tilsidesæt konfigurationsmappe", "option-config-location-description": "Benyt en anden konfigurationsmappe end standard mappen. Mappenavnet skal begynde med et punktum.", "option-config-location-warning": "Konfigurationsmappen skal være et gyldigt mappenavn, som begynder med et punktum.", "label-license": "Licens", "label-your-commercial-license-key": "Din kommercielle licensnøgle er \"{{key}}\".", "label-commercial-license-info": "Registreret til \"{{company}}\" til {{seats}} brugere. Gyldig indtil {{expiry}}.", "label-validating-commercial-license": "Validerer...", "label-invalid-commercial-license": "Licensen er ugyldig: ", "button-remove-commercial-license": "Fjern", "option-catalyst": "Catalyst licens", "option-catalyst-desc": "Du har i øjeblikket en {{tier}} Catalyst licens. Tak for din støtte!", "option-catalyst-desc-no-license": "Du har ikke en Catalyst licens i øjeblikket. Catalyst licensen er en engangsdonation til at støtte udviklingen af Obsidian.", "label-app": "Applikation" }, "account": { "name": "Konto", "option-your-account": "Din konto", "option-your-account-desc": "Du er logget ind som {{name}} ({{email}}).", "option-your-account-desc-no-login": "Du er ikke logget ind i øjeblikket. Du skal have en konto for at benytte Obsidian Sync, Obsidian Publish, og Catalyst insider versioner.", "button-manage-settings": "Administrer indstillinger", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Opgrader", "option-commercial-license": "Kommerciel licens", "option-commercial-license-desc": "Hvis du anvender Obsidian til kommercielle formål, skal du muligvis have en kommerciel licens.", "button-purchase": "Køb", "button-log-out": "Log ud", "label-log-in": "Log på", "label-sign-up": "Tilmeld dig", "label-email": "Email", "placeholder-email": "Din email...", "label-password": "Kodeord", "placeholder-password": "Dit kodeord...", "button-login": "Log på", "message-empty-email": "Email feltet kan ikke være tomt.", "message-invalid-email": "Email er ikke gyldig.", "message-empty-password": "Kodeord feltet kan ikke være tomt.", "message-login-failed": "Log på fejlede. Vær venlig at tjekke email og kodeord.", "label-no-account": "Har du ikke en konto? ", "link-sign-up-now": "Opret dig nu" }, "core-plugin": { "plugin-list": "Plugin liste", "option-search-plugin": "Søg kerne plugins", "option-search-plugin-description": "Filter plugins efter navn eller beskrivelse.", "placeholder-search-plugin": "Søg plugins..." }, "third-party-plugin": { "name": "Tredjeparts plugins", "option-restricted-mode": "Begrænset tilstand", "option-restricted-mode-description": "Begrænset tilstand er slået fra. Slå den til for at deaktivere fællesskabsplugins.", "button-turn-on": "Slå til", "option-browse-community-plugins": "Fællesskabsplugins", "option-browse-community-plugins-description": "Gennemse og installer tredjeparts plugins skabt af Obsidians fantastiske fællesskab.", "button-browse": "Gennemse", "label-exit-restricted-mode": "Forlad begrænset tilstand", "label-exit-restricted-mode-description-1": "Fællesskabsplugins kan, ligesom al anden software du installerer, potentielt dataintegritets- og sikkerhedsproblemer.", "label-exit-restricted-mode-description-2": "Plugin sikkerhed er vigtig for os. Her er hvad vi gør:", "label-exit-restricted-mode-description-3": "På trods af vores anstrengelser, er der stadig en lille chance for at et fællesskabsplugin kan skabe problemer.", "label-code-review": "Indledende kodegennemgang", "label-code-review-desc": "Vores team foretager en indledende kodegennemgang af alle plugins før de kan hentes ned i Obsidian.", "label-open-source": "Open source", "label-open-source-desc": "De fleste plugins er open source på GitHub, så du kan studere soucekoden selv.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "Vi har et stort udviklerfællesskab, som holder øje med hinanden.", "label-report-mechanism": "Rapporteringsmekanisme", "label-report-mechanism-desc": "Vi følger op og fjerner skadelige plugins, når de anmeldes til os.", "label-exit-restricted-mode-disable-confirmation": "Ønsker du at forlade begrænset tilstand for at aktivere fællesskabsplugins? Vi anbefaler, at du tager backup af dine data før du gør det.", "label-learn-more": "Lær mere om plugin sikkerhed", "button-turn-on-community-plugins": "Aktiver fællesskabsplugins", "label-trust-author": "Stoler du på denne boks ophavsmand?", "label-trust-author-description-1": "Du er ved at åbne denne boks for første gang, og den benytter nogle plugins.", "label-trust-author-description-2": "Hvis du har modtaget denne boks fra en anden person, så bemærk at ukendte plugins kan udgøre en sikkerhedsrisiko.", "label-trust-author-description-3": "Hvis du ikke stoler på ophavsmanden til denne boks, anbefaler vi at du forbliver i begrænset tilstand, så boksens plugins ikke kører.", "button-enable-plugins": "Stol på ophavsmanden og aktiver plugins", "button-dont-trust-author": "Gennemse boks i begrænset tilstand", "placeholder-community-plugins": "Søg fællesskabsplugins...", "msg-failed-load-plugins": "Det var ikke muligt at hente fællesskabsplugins.", "label-installed": "Installeret", "button-install": "Installer", "button-enable": "Aktiver", "button-disable": "Deaktiver", "button-copy-share-link": "Kopier link til deling", "button-donate": "Donér", "label-no-results-found": "Der blev ikke fundet nogen resultater.", "msg-failed-to-load-manifest": "Kunne ikke læse plugin manifestet.", "label-version": "Version: {{version}}", "label-currently-installed-version": " (installeret i øjeblikket: {{version}})", "label-by-author": "Af ", "label-repository": "Repository: ", "label-last-update": "Seneste opdatering: ", "tooltip-view-last-update": "Vis den seneste opdatering", "label-unsupported": "Dette plugin understøtter ikke din enhed.", "button-update": "Opdater", "label-no-readme": "Dette plugin indeholder ikke en README fil", "msg-installing-plugin": "Installerer plugin \"{{name}}\"...", "msg-failed-to-install-plugin": "Det var ikke muligt at installere plugin \"{{name}}\".", "msg-successfully-installed-plugin": "Installationen af plugin \"{{name}}\" blev fuldført.", "label-installed-plugins": "Installerede plugins", "button-reload-plugins": "Genindlæs plugins", "msg-reloaded-third-party-plugins": "Genindlæste tredjeparts plugins.", "label-uninstall": "Afinstaller", "label-uninstall-plugin": "Afinstaller plugin", "label-uninstall-plugin-confirmation": "Er du sikker på, at du vil afinstallere dette plugin? Dette vil slette mappen, hvor det er installeret.", "button-open-plugins-folder": "Åben plugins mappe", "button-check-for-updates": "Tjek for opdateringer", "button-update-all-plugins": "Update all", "label-current-plugins": "Nuværende plugins", "label-currently-installed": "Du har lige nu {{count}} plugin installeret.", "label-currently-installed_plural": "Du har lige nu {{count}} plugins installeret.", "label-debug-startup-time": "Debug opstartstid", "label-debug-startup-time-description": "Vis en besked med hvor lang tid hver plugin tog om at initialisere ved start af Obsidian.", "msg-no-updates-found": "Der er ikke fundet plugin opdateringer.", "msg-updates-found": "Fandt {{count}} plugin der kan opdateres.", "msg-updates-found_plural": "Fandt {{count}} plugins der kan opdateres.", "msg-update-plugin": "Opdater til version {{version}}", "option-search-installed-plugin": "Søg installerede plugins", "option-search-installed-plugin-description": "Filtrer installerede plugins efter navn eller beskrivelse.", "placeholder-search-installed-plugin": "Søg installerede plugins...", "show-installed-only": "Vis kun installerede", "label-donate-modal-title": "Donér for at supporte {{name}}", "label-donate-modal-text1": "Plugin udviklere er frivillige som udvikler fantastiske ting udelukkende af passion. Hvis du finder dette plugin brugbart, så overvej at støtte udvikleren.", "label-donate-modal-text2": "100% af dit bidrag vil gå til pluginudvikleren; Obsidian tager ikke en del af bidraget. Finansieringsplatformen udvikleren har valgt, kan muligvis tage betaling for det.", "label-donate-modal-text3": "Tak for din generøse støtte!", "label-support-this-plugin": "Støt dette plugin:", "label-search-summary": "Fundet {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "For nylig udgivet", "label-by-updated": "For nylig opdateret", "label-alphabetical": "Alfabetisk", "label-last-updated": "Opdateret {{time}}" }, "mobile-toolbar": { "name": "Mobil værktøjslinje", "option-configure-quick-action": "Konfigurer mobil hurtig funktion", "option-configure-quick-action-description": "Konfigurer hvilken kommando der skal udføres, når der trækkes ned fra toppen. Den nuværende kommando er sat til \"{{command}}\".", "button-configure": "Konfigurer", "placeholder-select-quick-action": "Vælg hurtig funktion...", "manage-toolbar-options": "Administrer instillinger til værktøjslinje", "option-internal-link": "Tilføj internt link", "option-internal-embed": "Tilføj indlejret", "option-tag": "Tilføj tag", "option-heading": "Skift overskrift", "option-strikethrough": "Skift gennemstregning", "option-highlight": "Skift fremhævet", "option-code": "Skift kode", "option-blockquote": "Skift blokcitat", "option-markdown-link": "Tilføj Markdown link", "option-bullet-list": "Skift punktliste", "option-numbered-list": "Skift nummereret liste", "option-indent-list": "Indent list item", "option-unindent-list": "Fjernindryk listeelement", "option-undo": "Fortryd", "option-redo": "Gentag", "option-move-caret-up": "Flyt indsætningspunkt op", "option-move-caret-down": "Flyt indsætningspunkt ned", "option-move-caret-left": "Flyt indsætningspunkt til venstre", "option-move-caret-right": "Flyt indsætningspunkt til højre", "option-first-line": "Gå til første linje", "option-last-line": "Gå til sidste linje", "option-toggle-keyboard": "Skift tastatur", "option-configure-toolbar": "Konfigurer mobil værktøjslinje", "option-added-options": "Tilføjede indstillinger", "option-more-toolbar-options": "Flere værktøjslinje indstillinger", "option-attach": "Indsæt vedhæftning", "option-add-command": "Tilføj global kommando", "option-add-command-description": "Vælg enhver global kommando og tilføj til værktøjslinjen." } }, "editor": { "search": { "placeholder-find": "Find", "placeholder-replace": "Erstat", "label-previous": "Forrige", "label-next": "Næste", "label-all": "Alt", "label-exit-search": "Afslut søgning", "label-replace": "Erstat", "label-replace-all": "Erstat alt" }, "link-suggestion": { "label-type-hash": "Skriv #", "label-link-heading": "for at linke overskrift", "label-type-block": "Skriv ^", "label-link-block": "for at linke blokke", "label-type-pipe": "Skriv |", "label-change-display-text": "for at ændre visningstekst", "label-no-match-found": "Ingen match fundet" }, "spellcheck": { "no-suggestion": "Ingen forslag...", "add-to-dictionary": "Tilføj til ordbog" }, "menu": { "edit-link": "Rediger link" }, "heading-suggestion": { "label-no-heading": "Ingen overskrift", "label-heading-level": "Overskrift {{level}}" }, "print-modal": { "title": "Eksporter til PDF", "caption": "Eksporter \"{{filename}}\" til PDF med nedenstående indstillinger.", "setting-page-size": "Side størrelse", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Inkluder filnavn som titel", "setting-landscape": "Landskab", "setting-margin": "Margin", "setting-margin-default": "Standard", "setting-margin-minimal": "Minimal", "setting-margin-none": "Ingen", "setting-downscale-percent": "Nedskaleringsprocent", "button-export-to-pdf": "Eksporter til PDF" }, "link-popover": { "tooltip-follow-link": "Følg link", "tooltip-open-link": "Åben link", "tooltip-search-tag": "Søg tag" } }, "interface": { "embed-cannot-find": "Kan ikke finde:", "embed-open-in-default-app-tooltip": "Åben i standard app", "empty-sidebar": "Sidebjælken er tom, prøv at trække et panel derhen.", "sidebar-expand": "Vis", "sidebar-collapse": "Skjul", "msg-fail-to-save-file": "Kunne ikke gemme filen \"{{filepath}}\". {{message}}.", "no-file": "Ingen fil", "msg-file-changed": "\"{{file}}\" er eksternt modificeret, fletter ændringer automatisk.", "switch-vault": "Åben en anden boks", "help": "Hjælp", "settings": "Indstillinger", "drag-to-rearrange": "Træk for at omarrangere", "msg-switched-to-read": "Skiftede standard visningstilstand til læsningstilstand.", "msg-switched-to-edit": "Skiftede standard visningstilstand til redigeringstilstand.", "msg-upgrade-installer": "For at benytte denne funktion skal det seneste installationsprogram fra vores hjemmeside være installeret.", "tooltip-restore-default-settings": "Gendan standard indstillinger", "label-copy": "Kopier til udklipsholder", "copied_generic": "Kopieret til udklipsholderen", "copied": "{{item}} blev kopieret til udklipsholderen.", "url": "Url", "msg-open-file-through-uri": "Åbnede filen \"{{path}}\"", "msg-file-not-found-through-uri": "Filen \"{{name}}\" blev ikke fundet.", "delete-action-short-name": "Slet", "msg-indexing": "Obsidian indekserer din boks...\nDet bør kun ske én gang.\nNogle funktioner er muligvis ikke tilgængelige indtil indekseringen er færdig.", "msg-indexing-complete": "Indeksering færdig.", "msg-sandbox-vault": "Dette er en sandkasse boks.\n Ændringer du foretager i denne boks vil blive nulstillet.", "label-enter-to-create": "Tryk Enter for at oprette", "label-update-available": "En opdatering er tilgængelig", "label-debug-info": "Debug information", "button-learn-more": "Lær mere", "button-not-now": "Ikke nu", "button-add": "Tilføj", "button-manage": "Administrer", "label-new-tab": "Ny fane", "msg-tab-busy": "Denne fane er optaget i øjeblikket. Prøv igen senere", "empty-state": { "no-file-open": "Ingen fil er åben", "create-new-file": "Opret ny fil", "go-to-file": "Gå til fil", "see-recent-files": "Se seneste filer", "close": "Luk", "unknown-pane-title": "Plugin er ikke længere aktivt", "unknown-pane-desc": "Det plugin som oprettede dette panel ({{type}}) findes ikke mere" }, "menu": { "edit-view": "Rediger (Ctrl/Cmd+Klik for at redigere i nyt panel)", "read-view": "Nuværende visning: Læsning", "switch-to-edit-view": "Klik for at redigere", "switch-to-read-view": "Klik for at læse", "mod-click-open-new-tab": "{{key}}+Klik for at åbne i en ny fane", "find": "Søg...", "replace": "Erstat...", "edit": "Rediger", "preview": "Forhåndsvis", "more-options": "Flere muligheder", "close": "Luk", "close-others": "Luk andre", "close-right": "Luk faner til højre", "pin": "Fastgør", "unpin": "Frigør", "unlink-tab": "Fjern link til fane", "link-tab": "Link med fane...", "toggle-source-mode": "Kildetilstand", "toggle-reading-view": "Visningstilstand", "delete-file": "Slet fil", "create-file": "Opret denne fil", "open-link": "Åben link", "open-in-new-tab": "Open in new tab", "open-to-the-right": "Åben til højre", "copy-url": "Kopier url", "close-current-tab": "Luk nuværende fane", "copy": "Kopier", "cut": "Klip", "paste": "Indsæt", "paste-as-plain-text": "Indsæt som almindelig tekst", "select-all": "Vælg alt", "rename-heading": "Omdøb denne overskrift...", "rename-blockid": "Omdøb dette blok ID...", "open-in-new-window": "Åben i nyt vindue", "move-to-new-window": "Skift til nyt vindue", "open-in-browser": "Åben i browser", "stack-tabs": "Stabel faner", "unstack-tabs": "Fjern fanestabling" }, "tooltip": { "click-to-expand": "Klik for at vise", "click-to-collapse": "Klik for at skjule", "alias": "Alias", "not-created-yet": "Ikke oprettet endnu, vælg for at oprette" }, "start-screen": { "label-version": "Version", "option-open-folder-as-vault": "Åben mappe som boks", "option-open-folder-as-vault-description": "Vælg en eksisterende mappe med Markdown filer.", "option-create-vault": "Opret ny boks", "option-create-vault-description": "Opret en ny Obsidian boks under en mappe.", "option-connect-obsidian-sync": "Forbind til Obsidian Sync", "option-connect-obsidian-sync-description": "Opsæt en synkroniseret boks med en eksisterende ekstern boks.", "option-new-vault-name": "Navn på boks", "option-new-vault-name-description": "Angiv et navn til din fantastiske boks.", "option-new-vault-location": "Placering", "option-new-vault-location-description": "Angiv en placering til din nye boks.", "label-new-vault-location-preview": "Din boks vil blive placeret her: ", "option-reveal-vault-in-explorer": "Vis boks i system stifinderen", "option-reveal-vault-in-explorer-mac": "Vis boks i Finder", "option-rename-vault": "Omdøb boks...", "msg-error-rename-exists": "Der er allerede en boks med dette navn.", "msg-error-nested": "Kan ikke flytte boksen ind i en undermappe i boksen selv.", "msg-error-rename-open": "Kan ikke omdøbe en boks, som er åben i øjeblikket.", "msg-rename-failed": "Kunne ikke omdøbe boks.", "msg-rename-success": "Boksen er omdøbt.", "option-move-vault": "Flyt boks...", "msg-move-select-dest": "Vælg mappe hvor boksen skal flyttes til", "msg-error-move-exists": "Der er allerede en boks med dette navn i den valgte mappe.", "msg-error-move-open": "Kan ikke flytte en boks, som er åben i øjeblikket.", "msg-move-failed": "Kunne ikke flytte boks.", "msg-move-success": "Boksen er flyttet.", "option-remove": "Fjern fra listen", "button-quick-start": "Hurtigstart", "button-open": "Åben", "button-browse": "Gennemse", "button-connect": "Forbind", "button-create-vault": "Opret", "button-back": "Tilbage", "msg-empty-vault-name": "Navnet på boksen kan ikke være tom.", "msg-invalid-folder": "Angiv venligst en gyldig mappe.", "msg-failed-to-create-vault": "Kunne ikke oprette boksen.", "msg-failed-to-create-vault-at-location": "Kunne ikke oprette boksen på den angivne placering. Tjek om placeringen findes og eventuelle tilladelser.", "msg-error-failed-to-open-vault": "Kunne ikke åbne boksen.", "msg-error-remove-current-open-vault": "Kan ikke fjerne en boks, som er åben i øjeblikket.", "option-get-help": "Få hjælp", "option-user-email": "Email", "placeholder-your-email": "Din email...", "option-user-password": "Kodeord", "placeholder-your-password": "Dit kodeord...", "button-sign-in": "Login", "button-setup": "Opsætning", "option-connect-vault-desc": "Opret en synkroniseret boks på denne enhed.", "tooltip-own-vault": "Dette er en fjernboks, som er ejet af dig.", "tooltip-shared-vault": "Dette er en fjernboks, som er delt med dig." }, "drag-and-drop": { "insert-link-here": "Indsæt link her", "insert-links-here": "Indsæt links her", "move-into-folder": "Flyt til \"{{folder}}\"", "star-this-file": "Marker denne fil som favorit", "star-these-files": "Marker disse filer som favoritter", "open-in-this-tab": "Åben i denne fane", "open-as-tab": "Åben som ny fane" }, "window": { "maximize": "Maksimer", "minimize": "Minimer", "restore-down": "Gendan fra maksimeret", "close-window": "Luk vindue", "go-back": "Gå tilbage", "go-forward": "Gå frem" }, "start-up": { "loading-obsidian": "Starter Obsidian...", "obsidian-load-error": "En fejl opstod under opstart af Obsidian.", "button-reload-app": "Genstart Obsidian", "button-reload-app-in-safe-mode": "Genindlæs Obsidian i sikker tilstand", "button-open-another-vault": "Åben en anden boks", "loading-components": "Starter komponenter...", "loading-plugins": "Starter plugins...", "loading-vault": "Åbner boks...", "msg-failed-to-load-vault": "Fejlede ved åbning af boks: ", "loading-cache": "Indlæser cache...", "loading-workspace": "Åbner arbejdsområde..." }, "mobile": { "action-import": "Importer til boks", "action-choose-file-to-insert": "Vælg en fil til at indsætte i", "action-insert-text-into-file": "Indsæt tekst i {{filename}}", "action-insert-link-into-file": "Indsæt link i {{filename}}", "msg-importing": "Importerer...", "msg-import-success": "Import gik fint", "msg-failed-to-import-file": "Kunne ikke importere {{filename}}", "msg-back-again-to-exit": "Tryk igen for at afslutte." }, "help-screen": { "label-official-help-site": "Official hjælpeside", "label-official-help-site-desc": "Læs den officielle Obsidian hjælpedokumentation, som er tilgængelig på flere sprog.", "action-visit": "Besøg", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord er det bedste sted, hvis du vil chatte med andre erfarne Obsidian brugere fra hele verden.", "action-join": "Tilslut", "label-forum": "Officielt forum", "label-forum-desc": "Hjælp hinanden, opret forslag til forbedringer, rapporter fejl, og deltag i dybdegående diskussioner om knowledge management.", "label-sandbox-vault": "Sandkasse boks", "label-sandbox-vault-desc": "Leg og eksperimenter med forskellige funktioner. Dine ændringer i boksen vil ikke blive gemt." } }, "commands": { "save-file": "Gem nuværende fil", "follow-cursor-link": "Følg link under markør", "open-cursor-link-in-new-tab": "Åben link under markør i ny fane", "open-cursor-link-to-the-right": "Åben link under markør til højre", "open-cursor-link-in-new-window": "Åben link under markør i nyt vindue", "navigate-tab-above": "Sæt fokus på fanegruppen ovenover", "navigate-tab-below": "Sæt fokus på fanegruppen nedenunder", "navigate-tab-left": "Sæt fokus på fanegruppen til venstre", "navigate-tab-right": "Sæt fokus på fanegruppen til højre", "toggle-pin": "Tilføj/Fjern nål", "split-right": "Split til højre", "split-down": "Split ned", "toggle-stacked-tabs": "Skift stablede faner", "navigate-back": "Naviger tilbage", "navigate-forward": "Naviger frem", "use-dark-mode": "Benyt mørk tilstand", "use-light-mode": "Benyt lys tilstand", "change-theme": "Skift tema", "search-current-file": "Søg i nuværende fil", "search-replace-current-file": "Søg & Erstat i nuværende fil", "open-settings": "Åben indstillinger", "open-help": "Åben hjælp", "toggle-edit": "Skift mellem redigering- og læsningstilstand", "toggle-source-mode": "Skift mellem live forhåndsvisning og kildetilstand", "delete-current-file": "Slet nuværende fil", "new-tab": "Ny fane", "close-all-tabs": "Luk alle faner", "close-active-tab": "Luk nuværende fane", "close-other-tabs": "Luk alle andre faner", "toggle-left-sidebar": "Slå venstre sidebjælke til og fra", "toggle-right-sidebar": "Slå højre sidebjælke til og fra", "toggle-default-new-tab-mode": "Skift standard tilstand for nye faner", "focus-editor": "Fokus på editor", "toggle-fold": "Slå foldning på den nuværende linje til og fra", "fold-all": "Fold alle overskrifter og lister", "unfold-all": "Udfold alle overskrifter og lister", "fold-more": "Fold mere", "fold-less": "Fold mindre", "swap-line-up": "Skift en linje op", "swap-line-down": "Skift en linje ned", "remove-heading": "Fjern overskrift", "toggle-heading": "Sæt som overskrift {{level}}", "toggle-bold": "Slå fed tekst til og fra for markering", "toggle-italics": "Slå kursiv tekst til og fra for markering", "toggle-highlight": "Slå fremhævet tekst til og fra for markering", "toggle-comments": "Slå kommentarer til og fra for markering", "insert-link": "Indsæt link", "toggle-spellcheck": "Slå stavekontrol til og fra", "delete-paragraph": "Slet afsnit", "toggle-checklist": "Slå status tjekliste til og fra", "cycle-list-checklist": "Skift mellem punkttegn/afkrydsningsfelt", "insert-callout": "Indsæt boble", "edit-file-title": "Rediger fil titel", "copy-path": "Kopier fil sti", "copy-url": "Kopier obsidian url", "export-pdf": "Eksporter til PDF", "reload": "Genindlæs Obsidan uden at gemme", "undo-close-tab": "Fortryd lukket fane", "context-menu": "Vis kontekstmenu under musemarkør", "show-debug-info": "Vis debug information", "always-on-top": "Skift så vindue altid er øverst", "zoom-in": "Zoom ind", "zoom-out": "Zoom ud", "reset-zoom": "Nulstil zoom", "toggle-preview": "Skift mellem redigering- og forhåndsvisningstilstand", "move-to-new-window": "Flyt nuværende panel til et nyt vindue", "open-in-new-window": "Åben nuværende panel i et nyt vindue", "rename-current-file": "Omdøb nuværende fil" }, "dialogue": { "label-link-affected": "Dette vil påvirke {{links}} i {{files}}.", "msg-updated-links": "Opdaterede {{links}} i {{files}}.", "label-update-links": "Opdater links", "label-confirm-update-link-to-file": "Vil du opdatere interne links, som linker til denne fil?", "button-always-update": "Opdater altid", "button-just-once": "Kun en gang", "button-do-not-update": "Opdater ikke", "label-confirm-deletion": "Er du sikker på, at du vil slette \"{{filename}}\"?", "label-move-to-system-trash": "Den bliver flyttet til system papirkurven.", "label-move-to-vault-trash": "Den bliver flyttet til Obsidian papirkurven, som er placeret i den skjulte \".trash\" mappe i din boks.", "label-permanent-delete": "Filen bliver permanent slettet.", "label-non-empty-folder": "Denne mappe er ikke tom.", "label-delete-folder-warning": "Hvis du fortsætter, vil alle filer i denne mappe blive slettet.", "label-delete-folder": "Slet mappe", "button-delete": "Slet", "button-delete-do-not-ask-again": "Slet og spørg ikke igen", "label-do-not-ask-again": "Spørg ikke igen", "label-existing-backlink": "Der er på nuværende tidspunkt {{links}}, der peger på denne note.", "label-existing-backlink_plural": "Der er på nuværende tidspunkt {{links}} der peger på denne note.", "label-delete-file": "Slet fil", "button-manage": "Administrer", "button-cancel": "Annuller", "button-done": "Færdig", "button-save": "Gem", "button-stop": "Stop", "button-continue": "Fortsæt", "preparing-pdf": "Klargører PDF...", "label-rename-file": "Omdøb fil", "label-new-name": "Nyt navn", "msg-rename-success": "Filen er omdøbt.", "label-rename-heading": "Omdøb overskrift", "label-rename-blockid": "Omdøb blok ID" }, "menu-items": { "new-file": "Opret note", "new-file-to-the-right": "Ny note til højre", "new-window": "Nyt vindue", "open-switcher": "Åben hurtig...", "open-vault": "Åben boks...", "close-tab": "Luk fane", "close-window": "Luk vindue", "find": "Find", "replace": "Erstat", "insert-callout": "Boble", "insert-markdown-link": "Markdown link", "insert-wikilink": "Link", "set-heading": "Overskrift {{level}}", "no-heading": "Ingen overskrift", "insert-quote": "Citér", "export-pdf": "Eksporter PDF", "toggle-bullet-list": "Punktliste", "toggle-numbered-list": "Nummereret liste", "toggle-checklist": "Opgaveliste", "toggle-bold": "Fed", "toggle-code": "Kode", "toggle-comment": "Kommentar", "toggle-italics": "Kursiv", "toggle-highlight": "Fremhæv", "toggle-strikethrough": "Gennemstreget", "toggle-comments": "Kommentarer", "fold-all": "Fold alle", "unfold-all": "Sammenfold alle", "fold-more": "Fold Mere", "fold-less": "Fold Mindre", "source-mode": "Kildetilstand", "reading-view": "Læsning", "show-debug-info": "Vis debug information", "navigate-back": "Naviger tilbage", "navigate-forward": "Naviger frem", "toggle-left-sidebar": "Skift venstre sidebjælke", "toggle-right-sidebar": "Skift højre sidebjælke", "split-right": "Split til højre", "split-down": "Split ned", "release-notes": "Udgivelsesnoter" }, "plugins": { "name": "Plugins", "file-explorer": { "name": "Stifinder", "desc": "Se filer og mapper i din boks.", "action-open": "Åben stifinder", "action-show": "Vis stifinder", "action-create-note": "Opret ny note", "action-create-note-to-the-right": "opret note til højre", "action-collapse-all": "Sammenfold alle", "action-expand-all": "Udfold alle", "action-new-note": "Ny note", "action-new-folder": "Ny mappe", "action-change-sort": "Skift sorteringsrækkefølge", "action-reveal-file": "Vis fil i navigation", "action-reveal-active-file": "Vis aktive fil i navigation", "command-move-file": "Flyt fil til en anden mappe", "action-move-file": "Flyt fil til...", "action-move-folder": "Flyt mappe til...", "action-move-items": "Flyt {{count}} elementer til...", "prompt-type-folder": "Skriv et mappenavn", "label-no-folders": "Der er ikke fundet nogle mapper.", "instruction-navigate": "at navigere", "instruction-move": "at flytte", "instruction-dismiss": "at afvise", "label-sort-a-to-z": "Fil navn (A til Å)", "label-sort-z-to-a": "Fil navn (Å to A)", "label-sort-new-to-old": "Sidst redigeret (ny til gammel)", "label-sort-old-to-new": "Sidst redigeret (gammel til ny)", "label-sort-created-old-to-new": "Oprettelsestidspunkt (gammel til ny)", "label-sort-created-new-to-old": "Oprettelsestidspunkt (ny til gammel)", "menu-opt-new-note": "Ny note", "menu-opt-new-folder": "Ny mappe", "menu-opt-set-attachment-folder": "Angiv som vedhæftningsmappe", "menu-opt-rename": "Omdøb", "menu-opt-delete": "Slet", "menu-opt-make-copy": "Opret en kopi", "msg-invalid-characters": "Filnavnet kan ikke indeholde nogle af følgende tegn: ", "msg-unsafe-characters": "Links vil ikke fungere med filnavne, der indholder nogle af følgende tegn: ", "msg-file-already-exists": "Der findes allerede en fil med dette navn", "msg-empty-file-name": "Et filnavn kan ikke være tomt.", "msg-bad-dotfile": "Et filnavn må ikke starte med et punktum.", "tooltip-modified-time": "Sidst modificeret {{time}}", "tooltip-created-time": "Oprettet {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Flyt", "label-untitled-file": "Unavngivet", "label-untitled-folder": "Unavngivet", "msg-set-attachment-folder": "Vedhæftninger vil blive gemt i \"{{path}}\" fra nu af." }, "search": { "name": "Søg", "desc": "Søg efter et nøgleord i alle noter.", "action-open-search": "Søg i alle filer", "label-collapse-results": "Sammenfold resultater", "label-match-case": "Forskel på små og store bogstaver", "label-explain-search-term": "Forklar søgeord", "label-more-context": "Vis mere kontekst", "prompt-start-search": "Skriv for at starte søgning...", "label-match-text": "Matcher tekst: ", "label-match-regex": "Matcher regulært søgeudtryk: ", "label-match-exact-text": "Indeholder nøjagtig tekst: ", "label-match-all": "Matcher alle: ", "label-match-any": "Matcher nogle: ", "label-excluding": "Udelukker: ", "label-case-sensitive": "Forskel på store og små bogstaver", "label-case-insensitive": "Ikke forskel på store og små bogstaver", "label-match-file-path": "Matcher fil sti: ", "label-match-file-name": "Matcher fil navn: ", "label-match-content": "Matcher fil indhold: ", "label-match-task": "Matcher opgave: ", "label-match-task-todo": "Matcher opgave (skal gøres): ", "label-match-task-done": "Matcher opgave (færdig): ", "label-match-line": "Matcher linje: ", "label-match-block": "Matcher blok: ", "label-match-section": "Matcher sektion: ", "label-match-tag": "Matcher tag: ", "label-no-matches": "Ingen matcher fundet.", "matches-with-count": "... og {{count}} mere match.", "matches-with-count_plural": "... og {{count}} flere der matcher.", "label-copy-search-results": "Kopier søgeresultater", "button-copy-results": "Kopier resultater", "msg-successfully-copied": "Resultaterne er kopieret til udklipsholderen.", "option-show-path": "Vis sti", "option-show-path-description": "Vis filens fulde sti i stedet for kun filnavnet.", "option-link-style": "Link type", "option-link-style-description": "Mulighed for at omdanne hver filresultat til et link.", "option-choice-link-style-none": "Ingen", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Markdown link", "option-list-prefix": "Liste præfix", "option-list-prefix-description": "Mulighed for a tilføje et præfix til et punkt på en liste for hver filresultat.", "option-choice-list-style-none": "Ingen", "option-choice-list-style-dash": "Tankestreg (-)", "option-choice-list-style-asterisk": "Stjerne (*)", "option-choice-list-style-numbered": "Nummereret", "tooltip-clear-search": "Nulstil søgning", "label-search-options": "Søgeindstillinger", "tooltip-read-more": "Læs mere", "label-history": "Historik", "tooltip-clear-history": "Nulstil søgehistorik", "label-path-option-description": "match fil sti", "label-file-name-option-description": "match fil navn", "label-tag-option-description": "søg efter tags", "label-line-option-description": "søg nøgleord på samme linje", "label-section-option-description": "søg nøgleord under samme overskrift", "menu-opt-search-for": "Søg efter \"{{keyword}}\"" }, "quick-switcher": { "name": "Hurtigskifter", "desc": "Benyt Ctrl/Cmd+O for at skifte til andre filer med dit tastatur.", "short-name": "Skifter", "action-open": "Åben hurtigskifter", "instruction-navigate": "for at navigere", "instruction-open": "for at åbne", "instruction-open-in-new-tab": "for at åbne i ny fane", "instruction-open-to-the-right": "for at åbne til højre", "instruction-create": "for at oprette", "instruction-dismiss": "for at annullere", "label-no-note-create-new": "Ingen noter fundet. Tast Enter for at oprette en ny.", "prompt-type-file-name": "Skriv filnavnet du vil skifte til eller oprette...", "label-enter-to-create": "Tast Enter for at oprette", "tooltip-not-created-yet": "Ikke oprettet endnu, vælg for at oprette", "option-show-existing-only": "Vis kun eksisterende", "option-show-existing-only-description": "Om der skal vises links til filer som endnu ikke er oprettet.", "option-show-attachments": "Vis vedhæftninger", "option-show-attachments-desc": "Viser vedhæftede filer, som f.eks. billeder, videoer, og PDFer.", "option-show-all-file-types": "Vis alle filtyper", "option-show-all-file-types-desc": "Viser alle filtyper inklusiv dem, som Obsidian ikke kan åbne. Filen vil blive åbnet med standard app'en for den fil type." }, "graph-view": { "name": "Grafvisning", "desc": "Viser en graf over dine noter med links mellem dem.", "action-open": "Åben grafvisning", "action-open-local": "Åben lokal graf", "action-copy-screenshot": "Kopier skærmbillede", "tab-title": "Graf af {{displayText}}", "label-filters": "Filtre", "prompt-filter-nodes": "Søg filer...", "option-depth": "Dybde", "option-depth-description": "Vis noder, så mange links væk", "option-neighbor-links": "Nabolinks", "option-neighbor-links-description": "Vis links mellem naboer", "option-forelinks": "Udgående links", "option-forelinks-description": "Vis links til andre filer", "option-backlinks": "Indkomne links", "option-backlinks-description": "Vis links fra andre filer", "option-show-tags": "Tags", "option-show-tags-description": "Tags bliver linket til de filer, som indeholder dem", "option-show-attachments": "Vedhæftninger", "option-show-attachments-description": "Vis vedhæftninger", "option-show-existing-files-only": "Kun eksisterende filer", "option-show-existing-files-only-description": "Når aktiveret vises ikke-eksisterende filer ikke", "option-show-orphans": "Uafhængige", "option-show-orphans-description": "Viser filer, som ikke er linket til en anden fil", "label-display": "Vis", "option-show-arrows": "Pile", "option-show-arrows-description": "Vis pile, når der er zoomet ind", "option-text-fade": "Tekst udtoningstærskel", "option-node-size": "Node størrelse", "option-link-thickness": "Link tykkelse", "label-forces": "Kræfter", "option-center-force": "Centreret kraft", "option-link-force": "Link kraft", "option-link-distance": "Link afstand", "option-repel-force": "Afvis kraft", "tooltip-open-graph-settings": "Åben graf indstillinger", "msg-screenshot-copied": "Skærmbillede er kopieret til udklipsholderen.", "label-groups": "Grupper", "placeholder-enter-query": "Angiv forespørgsel...", "tooltip-delete-graph": "Slet gruppe", "button-new-group": "Ny gruppe", "tooltip-click-to-change-drag-to-reorder": "Klik for at ændre farve\nTræk for at omarrangere grupper", "action-timelapse": "Start tidsgraf animation", "tooltip-start-timelapse-animation": "Start tidsgraf animation", "button-animate-timelapse": "Animer" }, "backlinks": { "name": "Tilbagelinks", "desc": "Vis antallet af tilbagelinks i statuslinjen, og vis tilbagelinks og vis tilbagelinks og ikke-linkede omtaler i et sidebjælke panel.", "action-open": "Åben tilbagelinks", "action-show": "Vis tilbagellinkspanel", "action-open-for-current": "Åben tilbagelinks i den nuværende fil", "action-toggle-backlinks-in-document": "Vis/skjul tilbagelinks", "menu-opt-backlinks-in-document": "Tilbagelinks i dokumentet", "label-linked-mentions": "Linkede omtaler", "label-no-backlinks": "Ingen tilbagelinks fundet.", "label-unlinked-mentions": "Ikke-linkede omtaler", "label-show-search": "Vis søgefilter", "label-link-button-text": "Link", "tab-title": "Tilbagelinks for {{displayText}}", "label-no-unlinked-mentions": "Ingen ikke-linkede omtaler fundet.", "ellipsis": "...", "option-backlink-in-document": "Tilbagelinks i dokumentet", "option-backlink-in-document-desc": "Viser tilbagelinks i dokumentet som standard, når et nyt panel åbnes." }, "outgoing-links": { "name": "Udgående Links", "desc": "Vis udgående links og find ikke-linkede omtaler fra andre noter i nuværende note.", "action-open": "Åben udgående links", "action-show": "Vis udgående links panel", "action-open-for-current": "Åben udgående links for nuværende fil", "tab-title": "Udgående links fra {{displayText}}", "label-links": "Links", "label-no-links": "Ingen links fundet.", "label-unlinked-mentions": "Ikke-linkede omtaler", "tooltip-link-file": "Link denne fil", "tooltip-not-created": "Ikke oprettet endnu" }, "tag-pane": { "name": "Tag panel", "desc": "Viser dine tags og antallet af forekomster.", "action-show": "Vis tagspanel", "label-no-tags": "Der er ikke fundet nogle tags.", "label-sort-by-name-a-to-z": "Tag navn (A to Å)", "label-sort-by-name-z-to-a": "Tag navn (Å to A)", "label-sort-by-frequency-high-to-low": "Frekvens (høj til lav)", "label-sort-by-frequency-low-to-high": "Frekvens (lav til høj)", "action-show-nested-tags": "Vis indlejrede tags", "action-collapse-all": "Sammenfold alle", "action-expand-all": "Udfold alle" }, "page-preview": { "name": "Forhåndsvisning af side", "desc": "Før musen over et internt link for at forhåndsvise indholdet. I redigeringstilstand, tryk Ctrl/Cmd mens musen holdes over linket.", "label-empty-note": "\"{{linktext}}\" er ikke oprettet endnu. Klik for at oprette.", "label-source-editor": "Editor", "label-source-preview": "Forhåndsvis", "label-source-search": "Søg, Tilbagelinks og Udgående links", "label-require-mod": "Kræver {{key}} for at vise forhåndsvisning af side, når musemarkøren føres over linket" }, "starred": { "name": "Favoritter", "desc": "Marker ofte benyttede filer og søgninger som favoritter.", "action-show": "Vis panel med favoritter", "action-toggle": "Skift favoritstatus for nuværende fil", "action-toggle-search": "Skift favoritstatus for nuværende søgning", "action-star": "Tilføj til favoritter", "action-unstar": "Fjern fra favoritter", "menu-opt-remove": "Fjern", "msg-successfully-starred": "{{type}} \"{{title}}\" blev tilføjet til favoritter.", "msg-removed-starred": "{{type}} \"{{title}}\" blev fjernet fra favoritter.", "msg-cannot-find-path": "Kan ikke finde filen i \"{{path}}\"." }, "custom-css": { "name": "Brugerdefineret CSS", "desc": "Læs og anvend “obsidian.css” i boks mappen.", "setting-community-themes": "Fællesskabstemaer", "msg-fetching-themes": "Henter tilgængelige fællesskabstemaer...", "prompt-filter": "Filter...", "label-dark-theme-only": "Kun mørke temaer", "label-light-theme-only": "Kun lyse temaer", "label-use": "Benyt", "label-stop-use": "Stop brugen af dette tema", "label-install-and-use": "Installer og benyt", "label-update": "Opdater", "label-no-readme": "Dette tema havde ikke en README (LÆSMIG) fil.", "tooltip-remove-theme": "Fjern tema", "label-visit-on-github": "Besøg på GitHub", "msg-load-error": "Kunne ikke hente fællesskabstemaer. Tjek din internetforbindelse.", "msg-now-using-theme": "Du benytter nu {{title}} som dit CSS tema.", "msg-deleted-theme": "Temaet {{title}} er blevet slettet.", "msg-updated-theme": "Temaet {{title}} er blevet opdateret.", "label-installed": "Installeret", "label-legacy": "Ældre", "button-update-all-themes": "Opdater alle", "msg-failed-load-themes": "Kunne ikke hente fællesskabstemaer.", "msg-no-updates-found": "Der blev ikke fundet nogle temaopdateringer.", "msg-updates-found": "Fandt {{count}} tema som kan opdateres.", "msg-updates-found_plural": "Fandt {{count}} temaer som kan opdateres.", "msg-failed-to-install-theme": "Kunne ikke installere temaet \"{{name}}\".", "msg-successfully-installed-theme": "Installerede temaet \"{{name}}\" uden problemer.", "msg-installing-theme": "Installerer tema \"{{name}}\"...", "label-search-summary": "Viser {{themeCount}}:", "label-update-available": "Opdatering tilgængelig" }, "command-palette": { "name": "Kommandopalette", "desc": "Benyt Cmd/Ctrl+P og begynd at taste for at aktivere en kommando.", "action-open": "Åben kommandopalette", "instruction-navigate": "for at navigere", "instruction-use": "for at benytte", "instruction-dismiss": "for at annullere", "label-no-commands": "Der er ikke fundet nogle kommandoer.", "prompt-type-command": "Tast en kommando...", "label-pinned-commands": "Fastgjorte kommandoer", "option-add-new-pin": "Ny fastgjort kommando", "option-add-new-pin-description": "Fastgjorte kommandoer bliver vist øverst i kommandolisten, når der ikke er foretaget en søgning.." }, "markdown-format-importer": { "name": "Import af Markdown formatterede filer", "desc": "Konverter Markdown filer fra andre apps til Obidian format.", "action-open": "Åben import af Markdown filer", "option-roam-tag-fixer": "Konverter Roam Research tag", "option-roam-tag-fixer-description": "Konverterer \"#tag\" og \"#[[tag]]\" til \"[[tag]]\".", "option-roam-highlight-fixer": "Konverter Roam Research fremhævninger", "option-roam-highlight-fixer-description": "Konverterer \"^^fremhævet^^\" til \"==fremhævet==\".", "option-roam-todo-converter": "Konverter Roam Research TODOs", "option-roam-todo-converter-description": "Konverterer \"{{[[TODO]]}}\" til \"[ ]\".", "option-bear-highlight-fixer": "Konverter Bear fremhævning", "option-bear-highlight-fixer-description": "Konverterer \"::fremhævning::\" til \"==fremhævning==\".", "zettelkasten-link-fixer": "Konverter Zettelkasten links", "zettelkasten-link-fixer-description": "Konverterer \"[[UID]]\" links til fuldt format \"[[UID Filname]]\".", "zettelkasten-link-beautifier": "Zettelkasten link forskønner", "zettelkasten-link-beautifier-description": "Fikser \"[[UID]]\" links og forskønner dem til \"[[UID Filname|Filname]]\".", "msg-all-files-warning": "Advarsel: importen vil konvertere alle filerne i din boks, ikke kun den nuværende fil.", "msg-override-files-warning": "Dine filer vil blive overskrevet. Tag en backup af alle dine filer unden du foretager konverteringen.", "label-start-conversion": "Start Konvertering", "label-stop": "Stop", "label-go-back": "Gå tilbage", "label-done": "Udført", "label-processing": "Behandler...", "label-cancelling": "Annullerer...", "label-finished": "Færdig!", "label-processed-files": "Behandlede filer", "label-modified-files": "Modificerede filer", "label-total-replacements": "Total antal erstatninger" }, "daily-notes": { "name": "Daglige noter", "desc": "Opret eller åben dagens daglige note.", "short-name": "I dag", "action-open": "Åben dagens note", "action-open-previous": "Åben forrige daglige note", "action-open-next": "Åben efterfølgende daglige note", "action-insert-text": "Indsæt tekst i daglig note", "action-insert-link": "Indsæt link i daglig note", "msg-fail-format": "Kunne ikke oprette daglig note. \"{{format}}\" er ikke et gyldigt format.", "msg-fail-folder": "Kunne ikke oprette daglig note. Mappen \"{{folderOption}}\" blev ikke fundet.", "msg-fail-template-file": "Kunne ikke oprette daglig note. Skabelonfilen \"{{template}}\" blev ikke fundet.", "msg-no-previous": "Der er ikke daglige noter før denne her.", "msg-no-next": "Der er ikke daglige noter efter denne her.", "option-date-format": "Dato format", "label-refer-to-syntax": "For flere muligheder, se denne ", "label-syntax-link": "syntaks reference", "label-syntax-live-preview": "Din nuværende syntaks ser sådan ud: ", "option-new-file-location": "Placering af nye filer", "option-new-file-location-description": "Nye daglige noter vil blive placeret her.", "option-template": "Placering af skabelon fil", "option-template-description": "Vælg den fil, som skal benyttes som skabelon.", "option-open-on-start": "Åben daglig note ved start", "option-open-on-start-description": "Åbner din daglige note automatisk, når du åbner denne boks." }, "unique-note-creator": { "name": "Unik note opretter", "desc": "Opretter noter med et unikt tidsstempel-præfiks til arbejdsprocesser, såsom zettelkasten eller slip box.", "short-name": "Unik", "action-create-note": "Opret ny unik note", "option-new-file-location": "Ny fil lokation", "option-new-file-location-description": "Stien til mappen hvor den nye unikke note skal oprettes.", "msg-folder-not-found": "Kunne ikke oprette unik note. Kunne ikke finde mappen \"{{folderOption}}\".", "option-template-file": "Skabelonfil lokation", "option-template-file-description": "Mappestien, som skal anvendes som skabelon.", "option-template-file-placeholder": "Eksempel: mappe1/note", "option-id-format": "Unikt præfiksformat", "msg-template-file-not-found": "Kunne ikke oprette unik note. Skabelonfilen \"{{template}}\" blev ikke fundet.", "msg-failed-to-generate": "Kunne ikke oprette unik note med formatet \"{{format}}" }, "random-note": { "name": "Tilfældig note", "desc": "Åben en tilfældig note for at genopdage eller vurdere den.", "short-name": "Tilfældig", "action-open": "Åben tilfældig note" }, "outline": { "name": "Disposition", "desc": "Den nuværende fils disposition eller linkede panel.", "action-open": "Åben disposition", "action-show": "Vis dispositionspanel", "action-open-for-current": "Åben dispositionen for den nuværende fil", "tab-title": "Disposition for {{displayText}}", "label-no-headings": "Der blev ikke fundet overskrifter." }, "word-count": { "name": "Ordtæller", "desc": "Viser antallet af ord på statuslinjen." }, "slides": { "name": "Slides", "desc": "Præsenter fra Markdown. Benyt \"---\" for at adskille slides.", "action-start": "Start præsentation" }, "audio-recorder": { "name": "Lyd optager", "desc": "Optag lyd og gem som vedhæftning.", "action-start": "Start lydoptagelse", "action-stop": "Stop lydoptagelse", "action-toggle": "Start/stop lydoptagelse", "msg-access-denied": "Mikrofonadgang blev nægtet. Aktiver den på indstillingssiden.", "msg-pending-grant": "Giv tilladelse til at benytte mikrofonen for at kunne optage lyd.", "msg-no-microphone": "Der er ingen mikrofoner tilsluttet." }, "open-with-default-app": { "name": "Åben i standard app", "desc": "Tilføj en knap til at kunne åbne den nuværende fil i dens standard app.", "action-open-file": "Åben i standard applikation", "action-open-file-mobile": "Del", "action-show-in-folder": "Vis i system stifinder", "action-show-in-folder-mac": "Vis i Finder" }, "templates": { "name": "Skabeloner", "desc": "Indsæt skabelonindhold fra en mappe med skabelon filer.", "action-insert": "Indsæt skabelon", "action-insert-current-date": "Indsæt nuværende dato", "action-insert-current-time": "Indsæt nuværende tidspunkt", "option-template-folder-location": "Placering af skabelonmappe", "option-template-folder-location-description": "Filer i denne mappe er tilgængelige som skabeloner.", "option-template-date-format": "Dato format", "option-template-date-format-description": "{{date}} i skabelonfilen vil blive erstattet med denne værdi.", "option-template-date-format-description2": "Du kan også benytte {{date:YYYY-MM-DD}} for at tilsidesætte standardformatet.", "option-template-time-format": "Tidsformat", "option-template-time-format-description": "{{time}} i skabelonfilen vil blive erstattet med denne værdi.", "option-template-time-format-description2": "Du kan også benytte {{time:HH:mm}} for at tilsidesætte standardformatet.", "instruction-navigate": "for at navigere", "instruction-insert": "for at indsætte skabelon", "instruction-dismiss": "for at annullere", "msg-no-templates-found": "Der er ikke fundet nogle skabeloner", "msg-fail-invalid-folder": "Kunne ikke vise skabeloner. Skabelonmappen er ugyldig.", "msg-fail-folder-not-found": "Kunne ikke vise skabeloner. Mappen \"{{folderOption}}\" blev ikke fundet.", "prompt-type-template": "Skriv navnet på en skabelon..." }, "translucency": { "name": "Gennemskinnelig vindue", "desc": "Slå gennemskindelig effekt til for at øge dybdefølelsen. Bedst når mørk tilstand benyttes. Ikke understøttet på Linux." }, "slash-command": { "name": "Slash kommandoer", "desc": "Aktiverer slash kommandoer i editoren ved at skrive en skråstreg." }, "editor-status": { "name": "Editor status", "desc": "Tilføjer en statusbar element til at vise nuværende redigeringstilstand og mulighed for at ændre den.", "read": "Læsning", "edit-source": "Kilde tilstand", "edit-live-preview": "Live forhåndsvisning" }, "publish": { "name": "Udgiv", "desc": "Udgiv dine noter gennem Obsidian Publish.", "action-publish-changes": "Udgiv ændringer...", "label-no-internet-access": "Du skal have adgang til internettet for at kunne udgive ændringer.", "label-publish-service-description": "Obsidian Publish er en separat tilføjelse og betalt service, som gør dig i stand til at udgive dine noter direkte fra Obsidian.", "label-please-login": "For at begynde at udgive skal du logge på eller oprette en ny Obsidian konto.", "label-no-publish-subscription": "Du har ikke et Obsidian Publish abonnement endnu.", "button-purchase": "Køb", "label-manage-sites": "Administrer websteder", "label-no-sites": "Du har ingen websteder.", "button-choose": "Vælg", "tooltip-edit-site-id": "Rediger websteds ID", "tooltip-delete-site": "Slet websted", "label-delete-site-confirmation": "Er du sikker på, at du vil slette dette websted?", "label-delete-site-details": "Dette vil slette dit websted permanent med det samme.", "label-confirm-delete-site": "Bekræft sletning af websted \"{{site}}\"", "option-site-id": "Websteds ID", "option-site-id-description": "Dit websted ligger på https://publish.obsidian.md/{site id}. Du kan ændre dette senere. Kun små bogstaver, tal og tankestreg er tilladt.", "option-site-id-placeholder": "Vælg dit websteds ID", "button-create": "Opret", "msg-invalid-site-id": "Et websted ID kan kun indeholde små bogstaver, tal og tankestreger.", "msg-site-id-in-use": "Dette websteds ID er i brug. Prøv et andet.", "msg-create-site-issue": "Der var et problem med at oprette dit websted.", "label-site-options": "Websteds indstillinger", "option-site-general": "Generelle", "option-site-components": "Komponenter", "option-site-appearance": "Udseende", "option-site-reading-experience": "Læseoplevelse", "option-site-misc": "Andre webstedsindstillinger", "option-site-name": "Webstedsnavn", "option-site-name-description": "Navnet på dit udgivne websted. Det vil blive vist som sidetitlen på dit websted.", "option-site-name-placeholder": "Navn på dit websted", "option-home-page-file": "Hjemmeside fil", "option-home-page-file-description": "Den første side, som brugeren ser, når vedkommende ankommer på dit udgivne websted.", "option-home-page-file-placeholder": "Vælg en udgivet fil", "option-logo": "Logo", "option-logo-description": "Vælg en billedfil som dit webstedslogo.", "option-logo-placeholder": "Et uploaded billede i din boks...", "option-site-collaboration": "Webstedssamarbejde", "option-site-collaboration-desc": "Administrer samarbejdspartnere for dette websted.", "button-manage-collaborators": "Administrer", "option-theme": "Tema", "option-theme-description": "Vælg standard farveskema til dit websted.", "option-theme-system": "Tilpas til system", "option-show-theme-toggle": "Lys/mørk skifter", "option-show-theme-toggle-description": "Lader brugeren kunne skifte mellem lyst og mørkt tema.", "option-show-navigation": "Vis navigation", "option-show-navigation-description": "Vis en liste af alle udgivne sider på den venstre side af dit udgivne websted.", "option-show-search": "Vis søgelinjen", "option-show-search-description": "Vis en søgelinje i toppen af navigationen, så besøgende kan søge i sider og overskrifter på dit websted.", "option-show-graph": "Vis graf", "option-show-graph-description": "Viser en lille lokal graf på hver side.", "option-show-outline": "Vis indholdsfortegnelse", "option-show-outline-description": "Viser en indholdsfortegnelse med sidens overskrifter på hver side.", "option-show-backlinks": "Vis tilbagelinks", "option-show-backlinks-description": "Vis tilbagelink sektion i slutningen af hver side.", "option-sliding-window-mode": "Benyt glidende vinduer", "option-sliding-window-mode-description": "Åben sider i nye paneler til højre. Tilader rulning gennem paneler vandret.", "option-hover-preview-file": "Vis forhåndsvisning når musen er over", "option-hover-preview-file-description": "Forhåndsviser den side, som et link peger på, når musen føres over.", "option-hide-title": "Skjul sidetitel", "option-hide-title-description": "Skjuler sidetiteloverskriften. Dette er brugbart, når du har dine egne overskrifter på starten af hver side.", "option-readable-line-length": "Læsbar linjelængde", "option-readable-line-length-description": "Begrænser den maksimale linjelængde. Giver mindre indhold på skærmen, men gør længere afsnit nemmere at læse.", "option-site-password": "Kodeord", "option-site-password-description": "Begræns tilgang til dit websted med kodeord.", "option-google-analytics": "Google Analytics sporingskode", "option-google-analytics-description": "Konfigurer Google Analytics på det websted. Er kun tilgængeligt for besøgende på din egen domæne URL. Tjek dine lokale love og regulativer først.", "button-manage-passwords": "Administrer", "button-save-site-settings": "Gem websteds indstillinger", "msg-updated-options": "Opdaterede dit websteds indstillinger.", "button-go-back": "Tilbage", "label-publishing-to": "Udgivet til", "tooltip-switch-site": "Skift websted", "button-add-linked": "Tilføj linkede", "tooltip-add-linked": "Tilføj alle filer, som er linket med de nuværende valgte elementer", "msg-added-linked-files": "{{count}} linket fil blev tilføjet.", "msg-added-linked-files_plural": "{{count}} linkede filer blev tilføjet.", "tooltip-open-site-options": "Skift websteds indstillinger", "label-no-changes-detected": "Ingen ændringer blev registreret.", "label-changed-files-to-be-published": "Ændrede", "label-unchanged-files-already-published": "Uændrede (Vælg for ikke at udgive)", "label-file-selected": " valgt", "button-select-all-files": "Vælg alle", "button-deselect-all-files": "Fravælg alle", "label-new-files-to-be-published": "Ny", "button-publish": "Udgiv", "msg-no-permission-to-publish-to-site": "Du har ikke rettigheder til at udgive til det nuværende websted.", "msg-select-at-least-one-file": "Vælg mindst en fil.", "label-upload-changes": "Overfør ændringer", "button-done": "Færdig", "button-stop": "Stop", "label-status-uploading": "Overfører", "label-status-to-publish": "Udgives", "label-status-to-delete": "Slettes", "label-status-published": "Udgivne", "label-status-deleted": "Slettede", "label-status-failed": "Fejlede", "label-status-cancelled": "Annullerede", "button-change": "Udfør", "label-clear-cache": "Det tager nogle minutter før ændringer kan ses på dit websted. Hvis du ikke kan se dine sidste ændringer, så prøv at slette din browser cache.", "label-visit-site": "Du kan besøge dit websted her: ", "msg-something-went-wrong": "Noget gik galt. Tjek udviklerkonsollen for detaljer.", "msg-network-error": "Der opstod en netværksfejl. ", "label-manage-passwords": "Administrer kodeord", "label-add-password": "Tilføj kodeord", "action-new-password": "Nyt kodeord", "label-no-password": "Dit websted har ikke nogle kodeord i øjeblikket. Alle kan besøgde det.", "label-have-password": "Dit websted er kodeordsbeskyttet. Hvis du har flere kodeord, så kan besøgende besøge dit websted med et af dem.", "option-password-name": "Kodeord", "option-password-desc": "Dit kodeord bliver gemt i en sikker hashtabel. Når kodeordet er sat, kan det ikke afsløres i almindelig tekst.", "option-password-placeholder": "Dit kodeord", "option-nickname-name": "Kaldenavn (valgfrit)", "option-nickname-desc": "Angiv et kaldenavn, som minder dig om hvad eller hvem kodeordet er til.", "action-add-password": "Tilføj dette kodeord", "label-untitled-password": "Unavngivet kodeord", "label-password-created-time": "Oprettet {{time}}", "msg-added-new-password": "Tilføjede nyt kodeord.", "option-custom-domain": "Brugerdefineret domæne", "option-custom-domain-desc": "Benyt dit eget domæne i stedet for https://publish.obsidian.md/{websteds id} URL.", "option-noindex": "Forbyd søgemaskine indeksering", "option-noindex-desc": "Forhindrer søgemaskiner i at indeksere dit websted.", "button-configure": "Konfigurer", "label-configure-custom-domain": "Konfigurer brugerdefineret domæne", "option-custom-url-name": "Brugerdefineret URL", "option-custom-url-desc": "Den URL hvor dit websted skal placeres.", "option-custom-url-placeholder": "www.ditdomæne.com", "option-custom-url-redirect": "Omdiriger til dit eget domæne", "option-custom-url-redirect-desc": "Omdirigerer besøgende på publish.obsidian.md/id til dit eget domæne.", "button-update-custom-domain": "Opdater domæne indstilinger", "label-custom-domain-instructions": "Der henvises til vores {{link}} på vores hjælpewebsted for mere information.", "label-custom-domain-link-name": "guide til brugerdefineret domæne konfiguration", "label-site-usage": "Du benytter {{site}} ud af {{limit}}.", "button-add-more-sites": "Køb flere websteder", "label-no-sites-bought": "Du har ikke købt nogle websteder.", "button-get-site": "Køb et websted", "label-manage-sharing": "Administrer deling for \"{{name}}\"", "label-sharing-with-users": "Dette websted er for nuværende delt med de følgende personer.", "label-not-sharing": "Dette websted er for nuværende ikke delt med nogen.", "label-invite-pending": "Afventer", "tooltip-remove-user": "Fjern bruger", "option-invite-user": "Inviter bruger", "placeholder-invite-user": "Angiv deres email...", "error-email-must-be-valid": "Angiv venligst en gyldig email for at invitere nogen.", "msg-enable-publish-plugin": "Aktiver venligst Publish kerne plugin'et i Indstillinger -> Kerne plugins for at se websteder.", "label-your-sites": "Dine websteder", "label-sites-shared-with-you": "Websteder delt med dig", "tooltip-leave-site-sharing": "Stop deling af dette websted", "label-leave-site-confirmation": "Bekræft at du vil stoppe deling af websted", "label-leave-site-confirmation-details": "Dette vil fjerne webstedet fra listen af westeder delt med dig. Dette kan ikke fortrydes eller omgøres.", "label-leave-site-confirmation-details-2": "Kontakt venligst ejeren af dette websted, hvis du vil dele dette websted igen.", "button-leave": "Forlad", "label-compare-with-live": "Sammenlign med live version", "button-use-live-version": "Benyt live version", "label-confirm-override": "Bekræft tilsidesættelse af lokal version", "label-confirm-override-1": "Er du sikker på at du vil tilsidesætte den lokale version?", "label-confirm-override-2": "Live versionen vil blive benyttet og din lokale version vil fjernet. Lav en backup, hvis det er nødvendigt.", "button-proceed": "Fortsæt", "message-successfully-used-live-version": "Live versionen har nu overskrevet din lokale version.", "label-open-file": "Åben fil", "tooltip-manage-publish-filters": "Administrer publish filtre", "option-included-folders": "Inkluderede mapper", "option-included-folders-desc": "Filer i disse mapper vil automatisk blive valgt, når du gennemgår ændringer, der skal offentliggøres.", "option-currently-included-folders": " Disse mapper er i øjeblikket inkluderet:", "option-excluded-folders": "Ekskluderede mapper", "option-excluded-folders-desc": "Filer i disse mapper vil ikke blive vist, når du gennemgår ændringer, der skal offentliggøres. Denne indstilling har højere prioritet end indstillingen om inkluderede mapper.", "label-number-of-folders-included": "Obsidian Publish inkluderer følgende mapper {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish ekskluderer følgende mapper {{folders}}.", "label-manage-included-folders": "Administrer inkluderede mapper", "label-manage-excluded-folders": "Administrere ekskluderede mapper", "label-add-included-folder": "Inkluder en mappe", "label-add-included-folder-desc": "Du kan inkludere både en eksisterende mappe og mapper som ikke er oprettet endnu.", "tooltip-contact-support": "Kontakt support" }, "workspaces": { "name": "Arbejdsområder", "desc": "Gem og indlæs arbejdsområdelayout.", "action-load-layout": "Indlæs arbejdsområdelayout", "action-manage-layouts": "Administrer arbejdsområdelayouts", "action-save-and-load-layout": "Gem og indlæs et andet layout", "placeholder-save-current-layout-as": "Gem nuværende arbejdsområdelayout som...", "button-save": "Gem", "button-load": "Indlæs", "tooltip-delete-layout": "Slet layout", "msg-delete-layout-success": "Layoutet er slettet.", "msg-enter-name": "Angiv et navn til det nye layout.", "msg-save-layout-success": "Layoutet blev gemt.", "label-no-layout-found": "Der er ikke fundet nogle gemte found.", "placeholder-type-to-search-layouts": "Skriv layout navn..." }, "sync": { "name": "Synkroniser", "desc": "Synkroniser dine filer ved hjælp af Obsidian Sync.", "action-view-version-history": "Vis versionshistorik", "label-load-more": "Indlæs mere", "label-show-diff": "Vis forskel", "label-copy-to-clipboard": "Kopier til udklipsholder", "label-restore-this-version": "Gendan denne version", "msg-already-latest-version": "Denne version er allerede den seneste version.", "msg-restored-version": "Gendannede version fra {{time}}", "label-file-deleted": "Denne fil var slettet", "label-no-earlier-version": "Der blev ikke fundet tidligere versioner af denne fil.", "label-empty-file": "Tom", "label-setting-files": "Indstillingsfiler", "label-deleted-files": "Slettede filer", "label-version-history": "Versionshistorik", "label-click-to-see-history": "Klik på en slettet fil for at se dens historik.", "label-create-remote-vault": "Opret ekstern boks", "msg-please-enter-password": "Angiv et kodeord.", "msg-vault-name-cannot-be-empty": "Boksnavnet kan ikke være tomt.", "msg-successfully-created-vault": "Oprettede den eksterne boks \"{{name}}\".", "label-remote-vault-explanation": "Eksterne bokse synkroniserer din boks sikkert mellem enheder.", "option-vault-name": "Boks navn", "option-vault-name-desc": "Hjælper dig med at huske hvad denne boks er til for.", "option-vault-name-placeholder": "Min fantastiske boks", "option-use-custom-encryption-password": "Tilpas kodeord til slutpunkt-til-slutpunkt (end-to-end) kryptering", "option-use-custom-encryption-password-desc": "Hvis du slår denne indstilling fra, vil vi opbevare en sikker krypteringsnøgle for dig.", "option-use-custom-encryption-password-desc-warning": "Denne indstilling kan ikke ændres senere.", "option-encryption-password": "Krypteret kodeord", "option-encryption-password-desc": "Dette kodeord kan ikke ændres senere.", "option-encryption-password-desc-warning": "Hvis du glemmer dette kodeord, vil al ekstern data forblive ubrugeligt for altid.", "option-encryption-password-desc-2": "Dette vil ikke påvirke dine lokale data.", "option-encryption-password-placeholder": "Dit kodeord", "label-enter-encryption-password": "Skriv krypteringskodeord", "button-unlock-vault": "Lås boks op", "msg-verified-password": "Dit kodeord er verificeret.", "label-remote-vaults": "Dine eksterne bokse", "label-vault-created-time": "Oprettet {{time}}", "tooltip-delete-remote-vault": "Slet", "tooltip-manage-sharing": "Administrer deling", "label-confirm-delete-remote-vault": "Bekræft sletning af boks", "label-confirm-delete-remote-vault-question": "Er du sikker på, at du vil slette denne eksterne boks?", "label-confirm-delete-remote-vault-result": "Al data på vores server, inklusiv versionshistorik, vil blive slettet. Dine lokale filer ændres ikke.", "label-confirm-delete-remote-vault-warning": "Denne handling er permanent og kan ikke omgøres.", "msg-remote-vault-deleted": "{{name}} er slettet.", "button-connect-to-remote-vault": "Forbind", "button-disconnect-from-remote-vault": "Afbryd", "label-not-remote-vaults": "Du har ingen eksterne bokse.", "button-create-new-remote-vault": "Opret ny ekstern boks", "label-sync-log": "Synkroniseringslog", "options-only-show-errors": "Kun fejl", "options-only-show-errors-desc": "Vis kun fejl og skjul andre logfilelementer.", "button-copy-sync-log": "Kopier synkroniseringslog", "msg-successfully-copied-sync-log": "Synkroniseringsloggen er kopieret.", "button-retry": "Forsøg igen", "button-purchase-subscription": "Køb", "option-remote-vault": "Fjernboks", "button-choose-remote-vault": "Vælg", "button-manage-remote-vault": "Administrer", "option-remote-vault-desc-connected": "Er lige nu forbundet med fjernboksen \"{{name}}\".", "option-remote-vault-desc-not-connected": "Er ikke forbundet med nogen fjernboks lige nu.", "option-sync-status": "Synkroniseringsstatus", "option-sync-status-desc-paused": "Obsidian Sync er midlertidig afbrudt.", "option-sync-status-desc-running": "Obsidian Sync kører.", "option-device-name": "Enhedsnavn", "option-device-name-desc": "Dette navn vil blive vist i synkroniseringsloggen. Lad feltet være tomt hvis standard navn ønskes.", "button-resume": "Fortsæt", "button-pause": "Afbryd midlertidigt", "option-view-deleted-files": "Slettede filer", "option-view-deleted-files-desc": "Vis og gendan slettede filer.", "option-sync-log": "Synkroniseringsaktivitet", "option-sync-log-desc": "Vis seneste synkroniseringsaktivitet for fejlfinding.", "button-view": "Vis", "button-bulk-restore": "Massegendannelse", "button-restore-selected-files": "Gendan valgte filer", "msg-restoring": "Gendanner...", "msg-restoring-complete": "`Gendannelse færdig: {{succeeded}} forløb godt og {{failed}} fejlede.`", "option-over-size": "Boks størrelsen har overskredet grænsen", "option-over-size-desc": "Din boks er på {{size}} ud af {{limit}}.", "msg-largest-files": "Vis største filer", "msg-largest-files-desc": "Dette er de eksterne filer, som tager mest plads. Efter sletning af vedhæftninger, så benyt fjern knappen for at frigive plads i den eksterne boks.", "button-purge-remote": "Fjern", "tooltip-purge-remote": "Fjern slettede vedhæftninger permanent fra den eksterne boks for at spare plads.", "msg-purge-complete": "Vedhæftninger fjernet.", "option-prevent-sleep": "Undgå at enheden går i dvale", "option-prevent-sleep-desc": "Forhindrer at enhenden går i dvale hvis der er filer, som skal synkroniseres.", "option-selective-sync": "Selektiv synkronisering", "option-excluded-folders": "Udelukkede mapper", "option-excluded-folder-desc": "Udeluk nogle mapper fra at blive synkroniseret.", "option-currently-excluded-folders": " Disse mapper er udelukket:", "button-manage-excluded-folders": "Administrer", "option-sync-image": "Synkroniser billedfiler", "option-sync-image-desc": "Synkroniser billeder med disse filtypenavne: {{extensions}}.", "option-sync-audio": "Synkroniser lydfiler", "option-sync-audio-desc": "Synkroniser lydfiler med disse filtypenavne: {{extensions}}.", "option-sync-video": "Synkroniser videoer", "option-sync-video-desc": "Synkroniser videoer med disse filtypenavne: {{extensions}}.", "option-sync-pdf": "Synkroniser PDF filer", "option-sync-pdf-desc": "Synkroniser PDF filer.", "option-sync-unsupported": "Synkroniser alle andre typer", "option-sync-unsupported-desc": "Synkroniser usupporterede filtyper.", "option-vault-config-sync": "Boks konfigurationssynkronisering", "option-view-config-files": "Versionshistorie for indstillinger", "option-view-config-files-desc": "Vis og gendan versionshistorie for indstillingsfiler.", "option-sync-app": "Hovedindstillinger", "option-sync-app-desc": "Aktiverer synkronisering af editor indstillinger, filer & links indstillinger, brugerdefinerede genvejstaster osv.", "option-sync-appearance": "Indstillinger for udseende", "option-sync-appearance-desc": "Synkroniseringsindstillinger for udseende, såsom mørk tema, aktivt tema, og aktive CSS kodestykker.", "option-sync-appearance-data": "Temaer og CSS kodestykker", "option-sync-appearance-data-desc": "Synkroniser hentede temaer og CSS kodestykker. Om de er aktiveret afhænger af den foregående indstilling.", "option-sync-hotkey": "Genvejstaster", "option-sync-hotkey-desc": "Synkroniser brugerdefinerede genvejstaster.", "option-sync-core-plugin": "Aktive kerne plugin liste", "option-sync-core-plugin-desc": "Synkroniser hvilke kerne plugins, som er aktive.", "option-sync-core-plugin-data": "Kerne plugin indstillinger", "option-sync-core-plugin-data-desc": "Synkroniser kerne plugin indstillinger.", "option-sync-community-plugin": "Aktive tredjeparts plugin's liste", "option-sync-community-plugin-desc": "Synkroniser aktive tredjeparts plugins liste, som er aktive.", "option-sync-community-plugin-data": "Installerede fællesskabsplugins", "option-sync-community-plugin-data-desc": "Synkroniser installerede fællesskabsplugins (.js, .css, og manifest.json filer) og deres indstillinger.", "label-sync-introduction": "Obsidian Sync er en Obsidian's synkroniseringsservice udvidelse med slutpunkt-til-slutpunkt (end-to-end) kryptering og versionshistorik.", "label-account-required": "For at begynde synkronisering skal du logge på eller oprette en ny Obsidian konto.", "button-sign-up": "Opret konto", "button-log-in": "Log på", "label-manage-excluded-folders": "Administrer udelukkede mapper", "label-number-of-folders-excluded": "{{folders}} er i øjeblikket udelukket fra at blive synkroniseret.", "label-add-excluded-folder": "Udeluk en mappe", "label-add-excluded-folder-desc": "Du kan udelukke både eksisterende mapper og mapper, som ikke er oprettet endnu.", "tooltip-remove-excluded-folder": "Fjern fra udelukkelseslisten", "label-setup-connection": "Opsæt forbindelse", "label-now-connected-to-vault": "Du er nu forbundet til \"{{name}}\".", "button-start-syncing": "Start synkronisering", "label-confirm-merge-vault": "Godkend fletning af boks", "msg-vault-has-notes": "Din lokale boks indeholder allerede nogle noter.", "msg-vault-merge-warning": "Hvis du forbinder til den eksterne boks \"{{name}}\", vil noter i din lokale boks blive flettet med noter i den eksterne boks. I tilfælde af konflikter vil den nyeste version blive anvendt.", "tooltip-update-setting-on-all-devices": "Opdater denne indstilling og genstart Obsidian på alle de enheder, hvor den skal have effekt.", "label-sharing-with-users": "Denne fjernboks er for øjeblikket del med følgende personer.", "label-not-sharing": "Denne fjernboks er for øjeblikket ikke delt med nogen.", "label-vaults-shared-with-you": "Bokse delt med dig", "tooltip-leave-vault-sharing": "Stop samarbejdet i denne boks", "label-leave-vault-confirmation": "Bekræft samarbejde i denne boks", "label-leave-vault-confirmation-details": "Dette vil fjerne denne boks fra listen af bokse, som er delt med dig. Denne handling kan ikke fortrydes.", "label-leave-vault-confirmation-details-2": "Kontakt venligst ejeren af denne boks, hvis du ønsker at samarbejde i denne boks igen.", "button-leave": "Leave", "label-require-subscription-to-connect": "Du har brug for et Obsidian Sync abonnement for at kunne forbinde til denne boks.", "option-contact-support": "Kontakt support", "option-contact-support-desc": "Hvis du får problemer med Obsidian Sync, så kontakt os, så vi kan hjælpe dig! Du kan skrive til support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "Filgenoprettelse", "desc": "Lader dig gendanne nylige snapshots for at genoprette din boks fra tilfældige datatab. Snapshots bliver kun gemt for Markdown filer.", "action-open": "Åben gemte snapshots", "option-interval": "Snapshot interval", "option-interval-description": "Minimums interval i minutter mellem to snapshots.", "option-keep": "Historik længde", "option-keep-description": "Antal dage som snapshots bliver gemt.", "option-open-history": "Snapshots", "option-open-history-description": "Vis og gendan gemte snapshots.", "button-view-snapshots": "Vis", "option-clear": "Ryd historik", "option-clear-description": "Slet snapshots fuldstændigt.", "button-clear-history": "Ryd", "label-clear-warning": "Er du sikker på, at du vil slette alle snapshots? Bemærk at kun snapshots vil blive slettet. Alle filer i din boks vil ikke blive berørt.", "msg-clear-complete": "Snapshots slettet.", "label-no-history-found": "Ingen snapshots fundet.", "placeholder-choose-file": "Vælg en fil...", "label-select-file": "Vælg venligst en fil til venstre for at vise snapshots." }, "note-composer": { "name": "Note værktøj", "desc": "Flet, del og omstrukturer noter.", "option-confirm-file-merge": "Bekræft filfletning", "option-confirm-file-merge-description": "Bed om bekræftelse før fletning af to filer.", "option-split-replacement-text": "Tekst efter udtrækning", "option-split-replacement-text-description": "Hvad som skal vises i stedet for den valgte tekst, efter udtrækning.", "option-choice-split-replacement-text-link": "Link til ny fil", "option-choice-split-replacement-text-embed": "Indlejr en ny fil", "option-choice-split-replacement-text-none": "Intet", "option-template-file": "Skabelon", "option-template-file-description": "Skabelonen som skal benyttes ved fletning eller udtrækning. Tilgængelige variabler: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Flet nuværende fil med en anden fil...", "action-merge-file": "Flet hele filen med...", "label-no-files": "Ingen filer fundet.", "instruction-navigate": "for at navigere", "instruction-merge": "for at flette", "instruction-create-new": "for at oprette", "instruction-merge-at-top": "flet til toppen", "instruction-dismiss": "for at annullere", "prompt-select-file-to-merge": "Vælg filen som der skal flettes ind i...", "label-merge-file": "Flet fil", "label-confirm-file-merge": "Er du sikker på at du vil flette \"{{file}}\" i \"{{destination}}\"? \"{{file}}\" vil blive slettet.", "button-merge": "Flet", "button-merge-do-not-ask-again": "Flet og spørg ikke igen", "command-split-file": "Udtræk nuværende markering...", "command-extract-heading": "Udtræk indhold fra denne overskrift...", "instruction-append": "flyt til bunden", "instruction-prepend": "flyt til toppen", "msg-fail-to-fetch-template": "Kunne ikke indlæse skabelonfilen: \"{{template}}\" blev ikke fundet.", "msg-fail-to-find-heading": "Kunne ikke finde overskrift" }, "canvas": { "name": "Canvas", "desc": "Arranger og forbind noter på et uendeligt canvas.", "action-add-note": "Tilføj note fra boksen", "action-add-media": "Tilføj medie fra boksen", "action-add-card": "Tilføj kort", "action-add-website": "Tilføj websted", "action-create-group": "Opret gruppe", "action-create-with-size": "Opret et kort i en bestemt størrelse", "action-convert-to-file": "Konverter til fil...", "action-drag-to-add-note": "Træk for at tilføje note fra boksen", "action-drag-to-add-media": "Træk for at tilføje medie fra boksen", "action-drag-to-add-card": "Træk for at tilføje kort", "action-enable-grid-snapping": "Aktiver fastgøring til gitter", "action-disable-grid-snapping": "Deaktiver fastgøring til gitter", "action-edit-label": "Rediger mærkat", "action-remove-label": "Fjern mærkat", "action-search-file": "Søg efter fil", "action-set-color": "Sæt farve", "action-align": "Juster", "action-align-left": "Juster til venstre", "action-align-center": "Centrer", "action-align-right": "Juster til højre", "action-align-top": "Juster til top", "action-align-middle": "Juster til midten", "action-align-bottom": "Juster til bund", "action-distribute-horizontal-spacing": "Fordel horisontalt", "action-distribute-vertical-spacing": "Fordel vertikalt", "action-justify-horizontally": "Lige margener horisontalt", "action-justify-vertically": "Lige margener vertikalt", "action-stack-horizontally": "Stak horisontalt", "action-stack-vertically": "Stak vertikalt", "action-stack-grid": "Stak i gitter", "action-export-png": "Eksporter som billede", "label-export-png-desc": "Eksporter \"{{title}}\" som et PNG billede med nedenstående indstillinger.", "label-export-png-dimensions": "Estimeret billedstørrelse: {{dimensions}}", "option-export-png-show-logo": "Vis logo", "option-export-png-show-logo-desc": "Dette vil tilføje et Obsidian logo nederst til venstre på billedet.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "En højere zoom vil generere et billede med højere opløsning.", "option-export-png-frame": "Billedstørrelse", "option-export-png-frame-desc": "Vælg hele canvasset eller det synlige område som billedstørrelse.", "option-export-png-frame-full": "Hele canvasset", "option-export-png-frame-viewport": "Det synlige område", "action-remove": "Fjern", "action-narrow": "Indsnæv til sektion...", "action-swap-file": "Byt fil...", "action-change-url": "Skift URL...", "action-zoom-to-fit": "Zoom til at passe", "action-zoom-to-selection": "Zoom til valg", "action-reload-page": "Gendindlæs side", "action-go-to-target": "Gå til destination", "action-go-to-source": "Gå til kilde", "command-create-new-canvas": "Opret nyt canvas", "command-new-canvas": "Nyt canvas", "instruction-narrow": "for at indlejre overskrift", "prompt-to-narrow": "Skriv navn på overskrift", "label-enter-url": "Angiv URL", "label-empty-embed": "\"{{linktext}}\" kunne ikke findes.", "prompt-add-text": "Tilføj tekst...", "prompt-start-search": "Skriv for at søge...", "label-canvas-help": "Canvas hjælp", "label-no-heading": "Ingen overskrift", "label-pan": "Panorer", "label-pan-horizontal": "Panorer horisontalt", "label-zoom": "Zoom", "label-select-all": "Vælg alle", "label-add-remove-selection": "Tilføj/fjern fra markering", "label-clone-card": "Opret kopi af kort", "label-constrain-movement-axis": "Begræns kortets bevægelse til aksen", "label-disable-drag-snapping": "Deaktiver snapping, mens du trækker", "label-remove-card": "Fjern kort", "label-drag-from-below": "Træk fra neden eller dobbeltklik", "label-space-drag-pan": "Mellemrum + Træk for at panorere", "label-scroll-to-zoom": "Rul for at zoome", "label-untitled-group": "Unavngivet gruppe" } }, "nouns": { "word-with-count": "{{count}} ord", "word-with-count_plural": "{{count}} ord", "character-with-count": "{{count}} tegn", "character-with-count_plural": "{{count}} tegn", "link-with-count": "{{count}} link", "link-with-count_plural": "{{count}} links", "file-with-count": "{{count}} fil", "file-with-count_plural": "{{count}} filer", "folder-with-count": "{{count}} mappe", "folder-with-count_plural": "{{count}} mapper", "backlink-with-count": "{{count}} tilbagelink", "backlink-with-count_plural": "{{count}} tilbagelinks", "site-with-count": "{{count}} websted", "site-with-count_plural": "{{count}} websteder", "plugin-with-count": "{{count}} plugin", "plugin-with-count_plural": "{{count}} plugins", "theme-with-count": "{{count}} tema", "theme-with-count_plural": "{{count}} temaer" } } { "setting": { "options": "Optionen", "plugin": "Erweiterungen", "builtin-plugins": "Obsidian-Erweiterungen", "plugin-options": "Erweiterungs-Einstellungen", "folder-path-example-placeholder": "Beispiel: Ordner 1/Ordner 2", "file-path-example-placeholder": "Beispiel: Ordner/Notiz", "msg-restart-required": "Damit diese Änderungen wirksam werden, starte Obsidian bitte neu.", "editor": { "name": "Editor", "section-general": "Allgemein", "section-behavior": "Verhalten", "section-display": "Anzeige", "option-spellcheck": "Rechtschreibprüfung", "option-spellcheck-description": "Schaltet die Rechtschreibprüfung ein. Funktioniert derzeit nur für Englisch (US).", "spellcheck-languages": "Rechtschreibprüfung - Sprachen", "spellcheck-languages-description": "Wähle die Sprachen aus, für die die Rechtschreibprüfung aktiv sein soll.", "spellcheck-languages-mac-description": "Die eingebaute Rechtschreibprüfung erkennt auf macOS automatisch die Sprache, die Du für Obsidian nutzt.", "spellcheck-dict": "Wörterbuch für die Rechtschreibprüfung", "spellcheck-dict-empty": "Das Wörterbuch für die Rechtschreibprüfung ist leer.", "option-show-inline-title": "Zeige Titel in Notiz", "option-show-inline-title-description": "Zeigt den Dateinamen als bearbeitbaren Titel zusammen mit den Dateiinhalten in der Notiz an.", "option-readable-line-length": "Lesbare Zeilenlänge", "option-readable-line-description": "Begrenzt die maximale Zeilenlänge. Es passt weniger Inhalt auf den Bildschirm, dafür sind lange Absätze besser lesbar.", "option-strict-line-break": "Strikte Zeilenbegrenzung", "option-strict-line-break-description": "Ignoriert einzelne Zeilenumbrüche im Vorschau-Modus gemäß der Markdown-Spezifikationen. Schalte dies aus, um einzelne Zeilenumbrüche im Vorschau-Modus anzuzeigen.", "option-show-frontmatter": "Frontmatter anzeigen", "option-show-frontmatter-description": "Zeigt den Frontmatter im Vorschaumodus als Code-Block. Schalte dies aus, um den Frontmatter Bereich zu deaktivieren.", "option-auto-pair-brackets": "Automatische Klammerpaare", "option-auto-pair-brackets-description": "Setzt automatisch Klammern- und Anführungszeichen-Paare.", "option-auto-pair-markdown": "Automatische Markdown-Vervollständigung", "option-auto-pair-markdown-description": "Setzt automatisch Symbol-Paare für Fett- und Kursivschrift.", "option-smart-indent-lists": "Intelligenter Zeileneinzug", "option-smart-indent-lists-description": "Schaltet den automatischen Zeilen- und Listeneinzug ein.", "option-fold-heading": "Überschriften einklappen", "option-fold-heading-description": "Klappt alles unterhalb einer Überschrift ein.", "option-fold-indent": "Zeileneinzug einklappen", "option-fold-indent-description": "Klappt einen Teil des gleichen Zeileneinzugs, etwa bei Listen, ein.", "option-default-new-tab-view": "Standard-Ansicht für neue Tabs", "option-default-new-tab-view-description": "Standard-Ansicht, in der sich neue Markdown-Tabs öffnen.", "option-default-new-tab-view-editing": "Bearbeitungs-Ansicht", "option-default-new-tab-view-reading": "Lese-Ansicht", "option-default-editing-mode": "Standardmodus zum Bearbeiten", "option-default-editing-mode-description": "Der Standardmodus zum Bearbeiten, in dem ein neuer Fensterbereich geöffnet wird.", "option-default-editing-mode-source": "Quellcode Ansicht", "option-default-editing-mode-live-preview": "Live-Vorschau", "option-show-line-number": "Zeilennummern zeigen", "option-show-line-number-description": "Zeigt Zeilennummern im Steg an.", "option-indentation-guide": "Einrück-Hilfen anzeigen", "option-indentation-guide-description": "Zeigt vertikale Linien für eine visuelle Hilfe zum Einrücken zwischen Listeneinträgen an.", "option-use-tabs": "Tabs nutzen", "option-use-tabs-description": "Nutzt Tabs für den Zeileneinzug, wenn die \"Tab\"-Taste gedrückt wird. Schalte dies aus, um Leerzeichen zu verwenden.", "option-tab-size": "Länge der Tabs", "option-tab-size-description": "Definiert die Anzahl der Leerzeichen, die einem Tab entsprechen.", "option-rtl": "Schrift - Rechts nach Links (RTL)", "option-rtl-description": "Ändert die Ausrichtung des Texts in Notizen von rechts nach links.", "option-auto-convert-html": "HTML automatisch konvertieren", "option-auto-convert-html-description": "Konvertiert HTML automatisch nach Markdown, wenn Inhalte von Webseiten per Drag-And-Drop eingefügt werden. Nutze STRG/CMD+Shift+V um ohne Konvertierung einzufügen.", "option-vim-key-bindings": "Vim-Tastenbindung", "option-vim-key-bindings-description": "Erlaubt die Nutzung der VIM-Tastenbelegung im Quellcode Editor.", "option-vim-key-bindings-mobile": "Auf mobilen Geräten kann diese Einstellung für jedes Gerät separat gewählt werden und wird nicht über die Konfigurationsdatei synchronisiert.", "option-emacsy-keys": "Veraltete Emacs Tastenbelegungen für macOS", "option-emacsy-keys-description": "Erlaubt die Nutzung der zusätzlichen Emacs Navigationstasten. Diese sind der Standard für macOS, können aber einige Tastenoperationen beeinträchtigen.", "label-confirm-enable-vim": "Vim-Modus bestätigen", "label-vim-warning": "Mit dem Vim-Modus können Texte effizient bearbeitet werden, aber dieser Modus ist nicht immer sehr intuitiv. Falls Du Dich nicht mit Vim auskennst, könnte diese Option es aussehen lassen, als ob Obsidian nicht mehr funktionieren würde.", "label-vim-test": "Um zu zeigen, dass Du Dich mit Vim auskennst, bitte gib den Befehl ein, um Vim zu schließen, ohne zu speichern:", "label-vim-your-answer": "Deine Antwort", "placeholder-enter-command": "Befehl eingeben...", "button-confirm-enable-vim": "Aktiviere Vim", "msg-vim-mode-enabled": "Der Befehl ist korrekt. Vim-Modus ist jetzt aktiviert.", "msg-vim-mode-not-enabled": "Der Befehl ist falsch. Vim-Modus bleibt zur Sicherheit Deiner Dateien deaktiviert.", "msg-vim-mode-please-enter-command": "Bitte gib den Befehl ein, um den Vim-Modus zu aktivieren", "option-legacy-editor": "Nutze veralteten Editor", "option-legacy-editor-description2": "Dieser Editor ist veraltet. Er wird aktuell nicht weiter bearbeitet, daher werden auch eventuelle Bugs nicht mehr behoben.", "label-legacy-deprecation": "Der neue Editor ist hier", "label-legacy-deprecation-1": "Obsidian hat jetzt einen brandneuen Editor, der stabiler und zugänglicher ist.", "label-legacy-deprecation-2": "Anscheinend nutzt Du noch den veralteten Editor, und wir glauben, dass Dir der neue Editor gefallen wird.", "label-legacy-deprecation-choice": "Welchen Modus möchtest Du nutzen?", "label-live-preview-description": "Eine moderne, was-du-siehst-ist-was-du-bekommst (WYSIWYG) Erfahrung.", "label-source-mode-description": "Zeige reines Markdown mit Syntax-Highlighting.", "button-start-new-editor": "Starte neuen Editor" }, "file": { "name": "Dateien & Links", "option-confirm-file-deletion": "Löschen der Datei bestätigen", "option-confirm-file-deletion-description": "Zeigt Bestätigungsdialog zum Löschen einer Datei.", "option-delete-destination": "Gelöschte Dateien", "option-delete-destination-description": "Was soll mit gelöschten Dateien geschehen?", "option-choice-system-trash": "In Papierkorb (System) verschieben", "option-choice-vault-trash": "In Papierkorb (Obsidian, .trash Ordner) verschieben", "option-choice-permanent-delete": "Endgültig löschen", "option-always-update-links": "Links immer aktualisieren", "option-always-update-links-description": "Aktualisiert Links automatisch, wenn eine Datei umbenannt wird.", "option-new-note-location": "Standardordner für neue Notizen", "option-new-note-location-description": "Speichert neue Notizen an diesem Ort. Erweiterungs-Einstellungen überschreiben dies.", "option-choice-vault-root": "Im Vault Hauptordner", "option-choice-current-folder": "Im aktuellen Ordner (bei geöffneter Notiz)", "option-choice-specified-folder": "Eigenen Ordner unten festlegen", "option-new-file-folder-path": "Ordner für neue Notizen", "option-new-file-folder-path-description": "Speichert neue Notizen an diesem Ort. Erweiterungs-Einstellungen überschreiben dies.", "option-use-wiki-links": "[[Wiki-Links]] benutzen", "option-use-wiki-links-description": "Erzeugt automatisch Wiki-Links für [[Links]] und ![[Bilder]] anstelle von Markdown-Links und Bildern. Deaktiviere diese Option, um stattdessen Markdown-Links zu erzeugen.", "option-show-unsupported-files": "Alle Datei-Endungen erkennen", "option-show-unsupported-files-description": "Zeigt Dateien mit allen Endungen, selbst wenn Obsidian diese Dateien nicht nativ öffnen kann. Damit kannst Du sie verlinken und im Dateiexplorer und in der Schnellauswahl sehen.", "option-link-autocompleted-format": "Link-Format", "option-link-autocompleted-format-description": "Welche Form haben automatisch erzeugte, interne Links?", "option-choice-shortest-linktext": "Wenn möglich: kürzester Pfad", "option-choice-relative-path": "Relativer Pfad (von der aktuellen Datei)", "option-choice-absolute-path": "Absoluter Pfad im Vault", "option-new-attachment-location": "Standardordner für neue Anhänge", "option-new-attachment-location-description": "Wo werden neu hinzugefügte Anhänge platziert?", "option-choice-subdirectory": "In Unterordner des aktuellen Ordners", "option-attachment-folder-path": "Ordnerpfad für Anhänge", "option-attachment-folder-path-description": "Speichert neu angehängte Dateien hier. Das schließt eingefügte Bilder (auch per Drag-and-Drop) ein, sowie Audioaufzeichnungen.", "option-attachment-subfolder-path": "Name des Unterordners", "option-attachment-subfolder-path-description": "Wenn Deine Datei unter \"vault/folder\" liegt und Du den Unterordner \"attachments\" genannt hast, werden Anhänge unter \"vault/folder/attachments\" gespeichert.", "option-attachment-subfolder-path-placeholder": "Anhänge", "option-excluded-files": "Ignorierte Dateien", "option-excluded-files-desc": "Ignorierte Dateien sind entweder versteckt oder weniger auffällig an verschiedenen Stellen, wie z.B. in der Schnellauswahl, Linkvorschlag und Graphansicht.", "label-no-excluded-filters-applied": "Im Moment werden keine Dateien ignoriert. Füge einen Filter hinzu.", "label-excluded-filters-applied": "Dateien, die den folgenden Filterkriterien entsprechen, werden momentan ignoriert:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Pfad eingeben oder \"/regex/\"..." }, "appearance": { "name": "Darstellung", "option-base-theme": "Standard Farbschema", "option-base-theme-description": "Wähle das Standard Farbschema für Obsidian.", "option-accent-color": "Akzentfarbe", "option-accent-color-description": "Wähle eine Akzentfarbe, die in der gesamten Anwendung genutzt werden soll.", "dark-theme": "Dunkel", "light-theme": "Hell", "system-theme": "An System anpassen", "option-font": "Schriftart", "option-advanced": "Erweitert", "option-interface-font": "Standard Schriftart", "option-interface-font-description": "Wähle die Standard Schriftart für Obsidian.", "option-text-font": "Text-Schriftart", "option-text-font-description": "Wähle eine Schriftart für die Bearbeitung (Editor) und Leseansicht.", "option-monospace-font": "Monospace-Schriftart", "option-monospace-font-description": "Wähle eine Schriftart für Code-Blöcke und Frontmatter.", "label-single-font-currently-in-effect": "Aktuelle Schriftart: ", "label-multiple-fonts-currently-in-effect": "Die folgenden Schriftarten werden momentan genutzt:", "option-font-placeholder": "Name der Schriftart eingeben...", "label-no-custom-font-set": "Keine eigene Schriftart wird momentan genutzt. Füge unten eine hinzu.", "label-font-applied": "Die erste Schriftart auf dieser Liste, die auf Deinem System verfügbar ist, wird genutzt.", "msg-font-not-found": "Diese Schriftart wurde auf Deinem System nicht gefunden.", "msg-font-found": "Diese Schriftart wurde auf Deinem System gefunden.", "label-font-name": "Name der Schriftart", "option-community-themes": "Farbschemen aus der Community", "option-community-themes-description": "Zeige und nutze tolle, durch die Community erstellte Farbschemen.", "button-browse-community-themes": "Durchsuchen", "option-font-size": "Schriftgröße", "option-font-size-description": "Schriftgröße in Pixeln, wirkt sich auf Editor und Vorschau aus.", "option-font-size-action": "Schnellanpassung der Schriftgröße", "option-font-size-action-description": "Die Schriftgröße kann durch Strg + Scrollen oder durch eine Pinch-To-Zoom Geste auf dem Trackpad angepasst werden.", "option-themes": "Farbschemen", "option-manage-themes-description": "Verwalte installierte Farbschemen und durchsuche die Community-Farbschemen.", "option-theme-button-manage": "Verwalten", "option-choice-none": "Keines", "option-native-menus": "Native Menüs", "option-native-menus-desc": "Der Menü-Stil wird an das Betriebssystem angepasst. Das gewählte Farbschema hat darauf keinen Einfluss.", "button-reload-themes": "Farbschemen neu laden", "msg-reloaded-themes": "Eigene CSS-Schemen neu geladen.", "button-open-themes-folder": "Schemen-Ordner öffnen", "option-css-snippets": "CSS-Bausteine", "label-no-css-snippets-found": "Keine CSS-Bausteine im Ordner gefunden.", "no-snippet-description": "CSS -Bausteine sind in \"{{path}}\" gespeichert.", "button-reload-snippets": "Bausteine neu laden", "button-open-snippets-folder": "Baustein-Ordner öffnen", "msg-reloaded-snippets": "CSS-Bausteine neu geladen.", "option-toggle-snippet-description": "Wende CSS-Baustein unter \"{{path}}\" an.", "label-installed-themes": "Installierte Farbschemen", "label-screenshot-unavailable": "Bildschirmaufnahme nicht verfügbar", "label-default-theme": "Standard", "tooltip-click-to-enlarge": "Klicke zum Vergrößern", "button-update": "Aktualisieren", "label-currently-selected": "Ausgewählt", "option-frame-style": "Stil des Obsidian-Fensters", "option-frame-description": "Stellt die Titelleiste aller Obsidian-Fenster ein. Dies benötigt einen Neustart der Anwendung.", "option-frame-hidden": "Versteckt (Standard)", "option-frame-obsidian": "Obsidian", "option-frame-native": "Nativ", "option-configure-ribbon": "Ribbon Menü", "option-configure-ribbon-desc": "Konfiguriere, welche Befehle im Ribbon Menü erscheinen sollen.", "option-mobile-quick-ribbon-item": "Schnellzugriff zu Ribbon-Befehl", "option-mobile-quick-ribbon-item-desc": "Der Befehl wird durch Antippen im Ribbon-Menü aktiviert. Antippen und Halten zeigt das Menü an.", "button-configure": "Konfigurieren", "label-additional-ribbon-items": "Andere Ribbon-Befehle", "label-modal-configuration": "Ribbon Konfiguration", "label-modal-configuration-desc": "Wähle aus, welche Befehle im Ribbon aktiviert sein sollen. Ändere die Reihenfolge durch Ziehen und Loslassen.", "option-show-view-header": "Zeige Tab-Titelleiste", "option-show-view-header-desc": "Zeigt die Titelleiste am oberen Rand jedes Tabs an.", "msg-updates-found": "{{count}} Farbschema zum Aktualisieren gefunden.", "msg-updates-found_plural": "{{count}} Farbschemen zum Aktualisieren gefunden.", "button-check-for-updates": "Auf Aktualisierungen überprüfen", "button-view-updates": "Aktualisierungen anzeigen", "button-update-all-themes": "Alle aktualisieren", "label-current-themes": "Aktuelle Farbschemen aus der Community", "label-currently-installed": "Du hast aktuell {{count}} Farbschema installiert.", "label-currently-installed_plural": "Du hast aktuell {{count}} Farbschemen installiert." }, "hotkeys": { "name": "Tastenkürzel", "prompt-filter": "Filter...", "tooltip-delete-hotkey": "Kürzel löschen", "label-waiting-for-hotkey-press": "Tastenkürzel drücken...", "tooltip-restore-default": "Standard wiederherstellen", "tooltip-customize-command": "Eigenes Kürzel festlegen", "tooltip-hotkey-single-conflict": "Dieses Kürzel und \"{{command}}\" überschneiden sich.", "tooltip-hotkey-multiple-conflicts": "Dieses Kürzel überschneidet sich mit {{count}} anderen.", "label-blank-hotkey": "Leer" }, "about": { "name": "Über", "label-commercial-license": "Kommerzielle Lizenz", "label-license-key": "Lizenzschlüssel", "license-key-placeholder": "Dein Lizenzschlüssel...", "label-activate-license": "Lizenz aktivieren", "button-activate": "Aktivieren", "label-unknown-version": "Unbekannt", "label-current-version": "Aktuelle Version: ", "label-install-version": "(Installer-Version: {{version}})", "label-up-to-date": "Deine Anwendung ist auf dem neuesten Stand!", "label-read-changelog": "Liste der Änderungen lesen.", "label-manual-update-required": "Um die neuesten Funktionen zu unterstützen und die aktuellsten Sicherheitspatches zu erhalten, benötigt Obsidian eine umfangreiche Neuinstallation. Du musst Obsidian erneut manuell herunterladen und neu installieren.", "label-download": "Herunterladen", "label-new-version-ready": "Eine neue Version ist bereit zur Installation. ", "label-relaunch-to-update": "Anwendung neu starten, um zu aktualisieren.", "label-disabled-updates": "Aktualisierungen sind deaktiviert.", "label-checking-for-updates": "Suche nach Aktualisierungen...", "button-relaunch": "Neu starten", "button-check-for-updates": "Nach Aktualisierungen suchen", "option-auto-update": "Automatische Aktualisierungen", "option-auto-update-description": "Sucht automatisch nach Aktualisierungen. Schalte dies aus, um die automatische Suche nach Aktualisierungen zu verhindern.", "option-get-help": "Hilfe", "option-get-help-description": "Bekomme Hilfe zum Umgang mit Obsidian.", "button-open": "Öffnen", "option-language": "Sprache", "option-language-description": "Die verwendete Sprache auswählen.", "option-insider-build": "Insider-Builds erhalten", "option-insider-build-description": "Lädt automatisch Insider-Builds herunter, um neue Funktionen zu testen. Achtung: Diese Builds sind brandneu und könnten weniger stabil sein.", "option-advanced": "Erweitert", "option-hw-acceleration": "Hardware-Beschleunigung", "option-hw-acceleration-description": "Aktiviert die Hardware-Beschleunigung, um Obsidian flüssiger darzustellen. Verwendet Deine GPU.", "option-hw-acceleration-warning": "Wenn Du dies deaktivierst, kann die Anwendungsperformance stark beeinträchtigt sein.", "option-config-location": "Konfigurationsordner überschreiben", "option-config-location-description": "Nutzt einen anderen als den Standardordner für Konfigurationsdateien. Muss mit einem Punkt beginnen.", "option-config-location-warning": "Konfigurationsordner muss ein gültiger Ordnername sein, der mit einem Punkt beginnt.", "label-license": "Lizenz", "label-your-commercial-license-key": "Dein kommerzieller Lizenzschlüssel ist \"{{key}}\".", "label-commercial-license-info": "Registriert bei \"{{company}}\" für {{seats}} Benutzer. Gültig bis {{expiry}}.", "label-validating-commercial-license": "Bestätigen...", "label-invalid-commercial-license": "Lizenz ungültig: ", "button-remove-commercial-license": "Entfernen", "option-catalyst": "Catalyst Lizenz", "option-catalyst-desc": "Du nutzt aktuell die {{tier}} Catalyst Lizenz. Vielen Dank für Deine Unterstützung!", "option-catalyst-desc-no-license": "Du nutzt aktuell keine Catalyst Lizenz. Die Catalyst Lizenz ist eine einmalige Spende, um die Entwicklung von Obsidian zu unterstützen.", "label-app": "Anwendung" }, "account": { "name": "Nutzerkonto", "option-your-account": "Dein Nutzerkonto", "option-your-account-desc": "Du bist momentan eingeloggt {{name}} ({{email}}).", "option-your-account-desc-no-login": "Du bist momentan nicht eingeloggt. Ein Nutzerkonto ist nur notwendig für Obsidian Sync, Obsidian Publish, und Catalyst Insider Builds.", "button-manage-settings": "Einstellungen verwalten", "label-insider": "Insider", "label-supporter": "Unterstützer", "label-vip": "VIP", "button-upgrade-catalyst": "Erweitern", "option-commercial-license": "Kommerzielle Lizenz", "option-commercial-license-desc": "Wenn Du Obsidian für kommerzielle Zwecke nutzt, musst Du vielleicht eine kommerzielle Lizenz nutzen.", "button-purchase": "Erwerben", "button-log-out": "Ausloggen", "label-log-in": "Einloggen", "label-sign-up": "Registrieren", "label-email": "E-Mail", "placeholder-email": "Deine E-Mail...", "label-password": "Passwort", "placeholder-password": "Dein Passwort...", "button-login": "Einloggen", "message-empty-email": "E-Mail darf nicht leer sein.", "message-invalid-email": "E-Mail ist ungültig.", "message-empty-password": "Passwort darf nicht leer sein.", "message-login-failed": "Einloggen fehlgeschlagen, bitte überprüfe Deine E-Mail und Dein Passwort.", "label-no-account": "Du hast noch kein Nutzerkonto? ", "link-sign-up-now": "Jetzt anmelden" }, "core-plugin": { "plugin-list": "Liste der Erweiterungen", "option-search-plugin": "Durchsuche Kern-Erweiterungen", "option-search-plugin-description": "Filtere Erweiterungen nach Name oder Beschreibung.", "placeholder-search-plugin": "Durchsuche Erweiterungen..." }, "third-party-plugin": { "name": "Externe Erweiterungen", "option-restricted-mode": "Eingeschränkter Modus", "option-restricted-mode-description": "Eingeschränkter Modus ist abgeschaltet. Schalte ihn ein, um Community-Erweiterungen zu deaktivieren.", "button-turn-on": "Einschalten", "option-browse-community-plugins": "Community-Erweiterungen", "option-browse-community-plugins-description": "Durchsuche und installiere von unserer großartigen Community erstellte Erweiterungen.", "button-browse": "Durchsuchen", "label-exit-restricted-mode": "Eingeschränkten Modus verlassen", "label-exit-restricted-mode-description-1": "Community-Erweiterungen, wie auch jede andere Software, die Du installierst, können potentiell Probleme mit der Daten-Integrität und -Sicherheit verursachen.", "label-exit-restricted-mode-description-2": "Die Sicherheit von Erweiterungen ist uns sehr wichtig. Hier siehst Du, was wir tun:", "label-exit-restricted-mode-description-3": "Trotz unserer Anstrengungen besteht trotzdem eine kleine Chance, dass eine Community-Erweiterung sich unangemessen verhält.", "label-code-review": "Erster Code-Review", "label-code-review-desc": "Erweiterungen werden zu Beginn von unserem Team einem Code-Review unterzogen, bevor sie im Store erscheinen.", "label-open-source": "Open Source", "label-open-source-desc": "Die meisten Erweiterungen sind Open Source auf Github, Du kannst den Code also selbst untersuchen.", "label-peer-audit": "Peer-Audit", "label-peer-audit-desc": "Wir haben eine große Community von Entwicklern, die ein Auge aufeinander haben.", "label-report-mechanism": "Meldesystem", "label-report-mechanism-desc": "Wir folgen Meldungen zu fehlerhaften Erweiterungen, die wir von unseren Nutzern bekommen, und entfernen sie.", "label-exit-restricted-mode-disable-confirmation": "Möchtest Du den eingeschränkten Modus verlassen, um Community-Erweiterungen zu aktivieren? Wir empfehlen Dir dringend, vorher ein Backup Deiner Daten zu machen.", "label-learn-more": "Erfahre mehr zur Sicherheit von Erweiterungen", "button-turn-on-community-plugins": "Community-Erweiterungen aktivieren", "label-trust-author": "Vertraust Du dem Ersteller dieses Vaults?", "label-trust-author-description-1": "Du öffnest diesen Vault zum Ersten Mal, und es enthält einige Erweiterungen.", "label-trust-author-description-2": "Wenn Du diesen Vault von einer anderen Person erhaslten hast, beachte bitte, dass Erweiterungen unbekannter Herkunft Sicherheitsrisiken sein können.", "label-trust-author-description-3": "Falls Du dem Ersteller dieses Vaults nicht komplett vertraust, empfehlen wir, im eingeschränkten Modus zu bleiben, damit Erweiterungen in diesem Vault nicht ausgeführt werden.", "button-enable-plugins": "Dem Ersteller vertrauen und Erweiterungen aktivieren", "button-dont-trust-author": "Vault im eingeschränkten Modus betrachten", "placeholder-community-plugins": "Durchsuche Community-Erweiterungen...", "msg-failed-load-plugins": "Laden der Community-Erweiterungen fehlgeschlagen.", "label-installed": "Installiert", "button-install": "Installieren", "button-enable": "Aktivieren", "button-disable": "Deaktivieren", "button-copy-share-link": "Öffentlichen Link kopieren", "button-donate": "Donate", "label-no-results-found": "Keine Ergebnisse gefunden.", "msg-failed-to-load-manifest": "Laden des Erweiterungs-Manifestes fehlgeschlagen.", "label-version": "Version: {{version}}", "label-currently-installed-version": " (aktuell installiert: {{version}})", "label-by-author": "Von ", "label-repository": "Repository: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "Dein Gerät wird von dieser Erweiterung nicht unterstützt.", "button-update": "Aktualisieren", "label-no-readme": "Diese Erweiterung enthält keine README Datei.", "msg-installing-plugin": "Installiere Erweiterung \"{{name}}\"...", "msg-failed-to-install-plugin": "Installieren der Erweiterung \"{{name}}\" fehlgeschlagen.", "msg-successfully-installed-plugin": "Installation der Erweiterung \"{{name}}\" erfolgreich.", "label-installed-plugins": "Installierte Erweiterungen", "button-reload-plugins": "Erweiterungen neu laden", "msg-reloaded-third-party-plugins": "Drittanbieter-Erweiterungen neu geladen.", "label-uninstall": "Deinstallieren", "label-uninstall-plugin": "Erweiterung deinstallieren", "label-uninstall-plugin-confirmation": "Bist Du sicher, dass Du diese Erweiterung deinstallieren möchtest? Dies wird den Ordner der Erweiterung löschen.", "button-open-plugins-folder": "Ordner für Erweiterungen öffnen", "button-check-for-updates": "Nach Aktualisierungen suchen", "button-update-all-plugins": "Alle aktualisieren", "label-current-plugins": "Aktuelle Erweiterungen", "label-currently-installed": "Du hast im Moment {{count}} installierte Erweiterung.", "label-currently-installed_plural": "Du hast im Moment {{count}} installierte Erweiterungen.", "label-debug-startup-time": "Debug: Startup Zeiten", "label-debug-startup-time-description": "Zeigt eine Nachricht, wie lang jede Erweiterung für ihre Initialisierung brauchte, als die Anwendung gestartet wurde.", "msg-no-updates-found": "Keine Aktualisierung für Erweiterungen gefunden.", "msg-updates-found": "{{count}} Erweiterung kann aktualisiert werden.", "msg-updates-found_plural": "{{count}} Erweiterungen können aktualisiert werden.", "msg-update-plugin": "Aktualisiere auf Version {{version}}", "option-search-installed-plugin": "Installierte Erweiterungen durchsuchen", "option-search-installed-plugin-description": "Installierte Erweiterungen nach Name oder Beschreibung filtern.", "placeholder-search-installed-plugin": "Installierte Erweiterungen durchsuchen...", "show-installed-only": "Nur installierte anzeigen", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "Zeige {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Mobile Werkzeugleiste", "option-configure-quick-action": "Mobile Schnell-Aktion konfigurieren", "option-configure-quick-action-description": "Stellt ein, welcher Befehl ausgeführt wird, wenn Du von oben nach unten ziehst. Momentan ist es \"{{command}}\".", "button-configure": "Konfigurieren", "placeholder-select-quick-action": "Schnell-Aktion auswählen...", "manage-toolbar-options": "Optionen für die Werkzeugleiste verwalten", "option-internal-link": "Internen Link hinzufügen", "option-internal-embed": "Einbettung hinzufügen", "option-tag": "Tag hinzufügen", "option-heading": "Überschrift umschalten", "option-strikethrough": "Durchgestrichen umschalten", "option-highlight": "Hervorheben umschalten", "option-code": "Code umschalten", "option-blockquote": "Blockzitat umschalten", "option-markdown-link": "Markdown-Link hinzufügen", "option-bullet-list": "Auflistung (nicht nummeriert) umschalten", "option-numbered-list": "Auflistung (nummeriert) umschalten", "option-indent-list": "Listeneintrag einziehen", "option-unindent-list": "Einzug von Listeneintrag rückgängig machen", "option-undo": "Rückgängig", "option-redo": "Wiederholen", "option-move-caret-up": "Cursor nach oben", "option-move-caret-down": "Cursor nach unten", "option-move-caret-left": "Cursor nach links", "option-move-caret-right": "Cursor nach rechts", "option-first-line": "Springe zu erster Zeile", "option-last-line": "Springe zu letzter Zeile", "option-toggle-keyboard": "Tastatur umschalten", "option-configure-toolbar": "Mobile Werkzeugleiste bearbeiten", "option-added-options": "Hinzugefügte Optionen", "option-more-toolbar-options": "Mehr Optionen für die Werkzeugleiste", "option-attach": "Anhang hinzufügen", "option-add-command": "Globalen Befehl hinzufügen", "option-add-command-description": "Wähle einen globalen Befehl aus, der zur Werkzeugleiste hinzugefügt wird." } }, "editor": { "search": { "placeholder-find": "Finden", "placeholder-replace": "Ersetzen", "label-previous": "Vorherige", "label-next": "Nächste", "label-all": "Alle", "label-exit-search": "Suche beenden", "label-replace": "Ersetzen", "label-replace-all": "Alle Ersetzen" }, "link-suggestion": { "label-type-hash": "Tippe #", "label-link-heading": "um mit Überschrift zu verlinken", "label-type-block": "Tippe ^", "label-link-block": "um Blöcke zu verlinken", "label-type-pipe": "Tippe |", "label-change-display-text": "um den Anzeigetext zu ändern", "label-no-match-found": "Keine Übereinstimmung gefunden" }, "spellcheck": { "no-suggestion": "Keine Vorschläge...", "add-to-dictionary": "In das Wörterbuch/Dictionary aufnehmen" }, "menu": { "edit-link": "Link bearbeiten" }, "heading-suggestion": { "label-no-heading": "Keine Überschrift", "label-heading-level": "Überschrift {{level}}" }, "print-modal": { "title": "Als PDF exportieren", "caption": "Exportiert \"{{filename}}\" nach PDF mit den folgenden Einstellungen.", "setting-page-size": "Seitenformat", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Brief (Letter)", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Dateinamen als Titel anhängen", "setting-landscape": "Querformat", "setting-margin": "Rand", "setting-margin-default": "Standard", "setting-margin-minimal": "Minimal", "setting-margin-none": "Kein", "setting-downscale-percent": "Verkleinern (Prozent)", "button-export-to-pdf": "Als PDF exportieren" }, "link-popover": { "tooltip-follow-link": "Link folgen", "tooltip-open-link": "Link öffnen", "tooltip-search-tag": "Tag suchen" } }, "interface": { "embed-cannot-find": "Nicht gefunden:", "embed-open-in-default-app-tooltip": "Mit Standard-Anwendung öffnen", "empty-sidebar": "Die Seitenleiste ist leer, ziehe einen Fensterbereich hierher.", "sidebar-expand": "Aufklappen", "sidebar-collapse": "Zuklappen", "msg-fail-to-save-file": "Fehler beim Speichern der Datei \"{{filepath}}\". {{message}}.", "no-file": "Keine Datei", "msg-file-changed": "\"{{file}}\" wurde extern bearbeitet. Änderungen werden automatisch eingefügt.", "switch-vault": "Einen anderen Vault öffnen", "help": "Hilfe", "settings": "Einstellungen", "drag-to-rearrange": "Zum Umordnen ziehen", "msg-switched-to-read": "Standard-Ansichtsmodus auf Leseansicht umgeschaltet.", "msg-switched-to-edit": "Standard-Ansichtsmodus auf Editor umgeschaltet.", "msg-upgrade-installer": "Bitte installiere die Anwendung mit dem aktuellsten Installer von unserer Website neu, um diese Funktion nutzen zu können.", "tooltip-restore-default-settings": "Standard-Einstellungen wiederherstellen", "label-copy": "In Zwischenablage kopieren", "copied_generic": "In Zwischenablage kopiert", "copied": "{{item}} in die Zwischenablage kopiert", "url": "URL", "msg-open-file-through-uri": "Datei \"{{path}}\" geöffnet", "msg-file-not-found-through-uri": "Datei \"{{name}}\" nicht gefunden.", "delete-action-short-name": "Löschen", "msg-indexing": "Obisidan indiziert Deinen Vault...\nDies sollte nur einmal geschehen.\nManche Funktionen könnten erst nach der Indizierung verfügbar sein.", "msg-indexing-complete": "Indizierung abgeschlossen.", "msg-sandbox-vault": "Dies ist ein Sandbox-Vault. \nJegliche Veränderungen an diesem Vault werden verloren gehen.", "label-enter-to-create": "Enter zum Erstellen", "label-update-available": "Aktualisierung verfügbar", "label-debug-info": "Debug Informationen", "button-learn-more": "Erfahre mehr", "button-not-now": "Nicht jetzt", "button-add": "Hinzufügen", "button-manage": "Verwalten", "label-new-tab": "Neuer Tab", "msg-tab-busy": "Dieser Tab lädt gerade noch. Bitte versuche es später noch einmal", "empty-state": { "no-file-open": "Keine Datei geöffnet", "create-new-file": "Neue Datei erzeugen", "go-to-file": "Gehe zu Datei", "see-recent-files": "Zuletzt verwendete Dateien", "close": "Schließen", "unknown-pane-title": "Erweiterung ist nicht mehr aktiv", "unknown-pane-desc": "Die Erweiterung, die diesen Fensterbereich ({{type}}) hinzufügte, ist nicht mehr vorhanden" }, "menu": { "edit-view": "Bearbeiten (Strg/Cmd + Klick zum Bearbeiten in neuem Fensterbereich)", "read-view": "Aktuelle Ansicht: Lesemodus", "switch-to-edit-view": "Klicken zum Bearbeiten", "switch-to-read-view": "Klicken zum Lesen", "mod-click-open-new-tab": "{{key}} + Klicken, um in neuem Tab zu öffnen", "find": "Finde...", "replace": "Ersetze...", "edit": "Bearbeite", "preview": "Vorschau", "more-options": "Weitere Optionen", "close": "Schließen", "close-others": "Andere schließen", "close-right": "Schließe alle Tabs rechts davon", "pin": "Anheften", "unpin": "Anheftung aufheben", "unlink-tab": "Tab-Verlinkung aufheben", "link-tab": "Mit Tab verlinken...", "toggle-source-mode": "Quellcode-Ansicht", "toggle-reading-view": "Lese-Ansicht", "delete-file": "Datei löschen", "create-file": "Diese Datei erstellen", "open-link": "Link öffnen", "open-in-new-tab": "In neuem Tab öffnen", "open-to-the-right": "Rechts davon öffnen", "copy-url": "URL kopieren", "close-current-tab": "Aktuellen Tab schließen", "copy": "Kopieren", "cut": "Ausschneiden", "paste": "Einfügen", "paste-as-plain-text": "Als unformatierten Text einfügen", "select-all": "Alles auswählen", "rename-heading": "Diese Überschrift umbenennen...", "rename-blockid": "Diese Block-ID umbenennen...", "open-in-new-window": "In neuem Fenster öffnen", "move-to-new-window": "In ein neues Fenster verschieben", "open-in-browser": "Open in browser", "stack-tabs": "Tabs stapeln", "unstack-tabs": "Tabs nicht mehr stapeln" }, "tooltip": { "click-to-expand": "Klick zum Aufklappen", "click-to-collapse": "Klick zum Zuklappen", "alias": "Alias", "not-created-yet": "Noch nicht erstellt, auswählen zum Erstellen" }, "start-screen": { "label-version": "Version", "option-open-folder-as-vault": "Ordner als Vault öffnen.", "option-open-folder-as-vault-description": "Wähle einen vorhandenen Ordner mit Markdown Dateien.", "option-create-vault": "Einen neuen Vault erstellen.", "option-create-vault-description": "Erstelle einen neuen Obsidian Vault innerhalb eines Ordners.", "option-connect-obsidian-sync": "Mit Obsidian Sync verbinden", "option-connect-obsidian-sync-description": "Erstelle einen synchronisierten Vault mit einem bestehenden Remote-Vault.", "option-new-vault-name": "Name des Vaults", "option-new-vault-name-description": "Wähle einen Namen für Deinen wunderbaren Vault.", "option-new-vault-location": "Speicherort", "option-new-vault-location-description": "Wähle einen Speicherort für Deinen neuen Vault.", "label-new-vault-location-preview": "Dein neuer Vault wird hier gespeichert: ", "option-reveal-vault-in-explorer": "Zeige Vault im System Explorer", "option-reveal-vault-in-explorer-mac": "Zeige Vault im Finder", "option-rename-vault": "Vault umbenennen...", "msg-error-rename-exists": "Es existiert bereits ein Vault mit diesem Namen.", "msg-error-nested": "Ein Vault kann nicht in seinen eigenen Unterordner verschoben werden.", "msg-error-rename-open": "Ein gerade geöffneter Vault kann nicht umbenannt werden.", "msg-rename-failed": "Umbenennen des Vault fehlgeschlagen.", "msg-rename-success": "Umbenennen des Vault erfolgreich.", "option-move-vault": "Vault verschieben...", "msg-move-select-dest": "Wähle einen Zielordner", "msg-error-move-exists": "An diesem Ort ist bereits ein Vault.", "msg-error-move-open": "Ein gerade geöffneter Vault kann nicht verschoben werden.", "msg-move-failed": "Verschieben des Vault fehlgeschlagen.", "msg-move-success": "Verschieben des Vault erfolgreich.", "option-remove": "Von Liste entfernen", "button-quick-start": "Schnellstart", "button-open": "Öffnen", "button-browse": "Wählen", "button-connect": "Verbinden", "button-create-vault": "Erstellen", "button-back": "Zurück", "msg-empty-vault-name": "Der Vault-Name darf nicht leer sein.", "msg-invalid-folder": "Bitte wähle einen gültigen Ordner.", "msg-failed-to-create-vault": "Erstellung des Vaults fehlgeschlagen.", "msg-failed-to-create-vault-at-location": "Der Vault konnte unter dem angegebenen Ort nicht erstellt werden. Bitte prüfe den Speicherort und die Berechtigung.", "msg-error-failed-to-open-vault": "Öffnen fehlgeschlagen.", "msg-error-remove-current-open-vault": "Der Vault ist gerade geöffnet und kann nicht entfernt werden.", "option-get-help": "Hilfe", "option-user-email": "E-Mail", "placeholder-your-email": "Deine E-Mail...", "option-user-password": "Passwort", "placeholder-your-password": "Dein Passwort...", "button-sign-in": "Einloggen", "button-setup": "Einrichten", "option-connect-vault-desc": "Erstelle einen synchronisierten Vault auf diesem Gerät.", "tooltip-own-vault": "Dies ist ein Remote-Vault, der Dir gehört.", "tooltip-shared-vault": "Dies ist ein Remote-Vault, der mit Dir geteilt wurde." }, "drag-and-drop": { "insert-link-here": "Link hier einfügen", "insert-links-here": "Link hier einfügen", "move-into-folder": "Nach \"{{folder}}\" verschieben", "star-this-file": "Diese Datei mit Stern markieren", "star-these-files": "Diese Dateien mit Stern markieren", "open-in-this-tab": "In diesem Tab öffnen", "open-as-tab": "Als neuen Tab öffnen" }, "window": { "maximize": "Maximieren", "minimize": "Minimieren", "restore-down": "Kleines Fenster wiederherstellen", "close-window": "Fenster schließen", "go-back": "Zurück", "go-forward": "Weiter" }, "start-up": { "loading-obsidian": "Obsidian laden...", "obsidian-load-error": "Beim Laden von Obsidian ist ein Fehler aufgetreten.", "button-reload-app": "App neu laden", "button-reload-app-in-safe-mode": "App im abgesicherten Modus neu laden", "button-open-another-vault": "Anderer Vault öffnen", "loading-components": "Komponenten laden...", "loading-plugins": "Erweiterungen laden...", "loading-vault": "Vault laden...", "msg-failed-to-load-vault": "Laden des Vaults fehlgeschlagen: ", "loading-cache": "Cache laden...", "loading-workspace": "Workspace laden..." }, "mobile": { "action-import": "In Vault importieren", "action-choose-file-to-insert": "Wähle eine Datei zum Einfügen", "action-insert-text-into-file": "Füge Text in {{filename}} ein", "action-insert-link-into-file": "Füge Link in {{filename}} ein", "msg-importing": "Importiere...", "msg-import-success": "Import erfolgreich", "msg-failed-to-import-file": "Fehler beim Import von {{filename}}", "msg-back-again-to-exit": "Zum Verlassen erneut zurück drücken." }, "help-screen": { "label-official-help-site": "Offizielle Hilfe-Seite", "label-official-help-site-desc": "Lies die offizielle Dokumentation von Obsidian, verfügbar in mehreren Sprachen.", "action-visit": "Besuchen", "label-discord-chat": "Discord Chat", "label-discord-chat-desc": "Discord ist der beste Ort, um mit anderen erfahrenen Obsidian-Nutzern auf der ganzen Welt zu chatten.", "action-join": "Beitreten", "label-forum": "Offizielles Forum", "label-forum-desc": "Helft Euch gegenseitig, schlagt neue Features vor, meldet Bugs und führt ausführliche Diskussionen über Knowledge-Management.", "label-sandbox-vault": "Sandbox-Vault", "label-sandbox-vault-desc": "Spiele und experimentiere mit verschiedenen Features. Bitte beachte, dass Deine Veränderungen an diesem Vault nicht gespeichert werden." } }, "commands": { "save-file": "Aktuelle Datei speichern", "follow-cursor-link": "Link unter Mauszeiger verfolgen", "open-cursor-link-in-new-tab": "Link unter Mauszeiger in neuem Tab öffnen", "open-cursor-link-to-the-right": "Link unter Mauszeiger rechts davon öffnen", "open-cursor-link-in-new-window": "Link unter Mauszeiger in neuem Fenster öffnen", "navigate-tab-above": "Obere Tabgruppe fokussieren", "navigate-tab-below": "Untere Tabgruppe fokussieren", "navigate-tab-left": "Linke Tabgruppe fokussieren", "navigate-tab-right": "Rechte Tabgruppe fokussieren", "toggle-pin": "Pin umschalten", "split-right": "Rechts teilen", "split-down": "Unten teilen", "toggle-stacked-tabs": "Umschalten zwischen Stapel-/Tab-Ansicht", "navigate-back": "Zurück navigieren", "navigate-forward": "Vorwärts navigieren", "use-dark-mode": "Dunklen Modus benutzen", "use-light-mode": "Hellen Modus benutzen", "change-theme": "Farbschema wechseln", "search-current-file": "In geöffneter Datei suchen", "search-replace-current-file": "In geöffneter Datei suchen & ersetzen", "open-settings": "Einstellungen öffnen", "open-help": "Hilfe öffnen", "toggle-edit": "Umschalten zwischen Editor/Lesemodus", "toggle-source-mode": "Umschalten zwischen Live-Vorschau/Quellcode-Ansicht", "delete-current-file": "Aktuelle Datei löschen", "new-tab": "Neuer Tab", "close-active-tab": "Schließe aktuellen Tab", "close-other-tabs": "Schließe andere Tabs", "close-all-tabs": "Schließe alle Tabs", "toggle-left-sidebar": "Linke Seitenleiste umschalten", "toggle-right-sidebar": "Rechte Seitenleiste umschalten", "toggle-default-new-tab-mode": "Standardmodus für neue Tabs umschalten", "focus-editor": "Editor fokussieren", "toggle-fold": "Aktuelle Zeile einklappen", "fold-all": "Alle Überschriften und Listen einklappen", "unfold-all": "Alle Überschriften und Listen aufklappen", "fold-more": "Noch mehr einklappen", "fold-less": "Weniger einklappen", "swap-line-up": "Mit Zeile darüber tauschen", "swap-line-down": "Mit Zeile darunter tauschen", "remove-heading": "Überschrift entfernen", "toggle-heading": "Als Überschrift {{level}} setzen", "toggle-bold": "Tausche fett für Auswahl", "toggle-italics": "Tausche kursiv für Auswahl", "toggle-highlight": "Tausche hervorgehoben für Auswahl", "toggle-comments": "Kommentare für Auswahl umschalten", "insert-link": "Link einfügen", "toggle-spellcheck": "Rechtschreibprüfung umschalten", "delete-paragraph": "Absatz löschen", "toggle-checklist": "Status der Checkliste umschalten", "cycle-list-checklist": "Zwischen Checkbox/Listenpunkt umschalten", "insert-callout": "Callout einfügen", "edit-file-title": "Dateinamen ändern", "copy-path": "Dateipfad kopieren", "copy-url": "Obsidian URL kopieren", "export-pdf": "Nach PDF exportieren", "reload": "Anwendung neu laden ohne zu speichern", "undo-close-tab": "Tab wieder öffnen", "context-menu": "Zeige Kontextmenü unter dem Cursor", "show-debug-info": "Zeige Debug Informationen", "always-on-top": "Fenster immer im Vordergrund halten", "zoom-in": "Vergrößern", "zoom-out": "Verkleinern", "reset-zoom": "Vergrößerung zurücksetzen", "toggle-preview": "Editor/Vorschau Modus wechseln", "move-to-new-window": "Aktiven Fensterbereich in neues Fenster verschieben", "open-in-new-window": "Aktiven Fensterbereich in neuem Fenster öffnen", "rename-current-file": "Aktuelle Datei umbenennen" }, "dialogue": { "label-link-affected": "Das betrifft {{links}} in {{files}}.", "msg-updated-links": "Aktualisiert {{links}} in {{files}}.", "label-update-links": "Links aktualisieren", "label-confirm-update-link-to-file": "Möchtest Du interne Links aktualisieren, die auf diese Datei verweisen?", "button-always-update": "Immer aktualisieren", "button-just-once": "Nur dieses eine Mal", "button-do-not-update": "Nicht aktualisieren", "label-confirm-deletion": "Möchtest Du wirklich \"{{filename}}\" löschen?", "label-move-to-system-trash": "Die Datei wird in den Papierkorb Deines Systems verschoben.", "label-move-to-vault-trash": "Die Datei wird in Deinen Obsidian Papierkorb verschoben, der sich im versteckten Ordner \".trash\" in Deinem Tresor befindet.", "label-permanent-delete": "Die Datei wird dauerhaft gelöscht.", "label-non-empty-folder": "Dieser Ordner ist nicht leer.", "label-delete-folder-warning": "Wenn Du fortfährst, werden alle Dateien in diesem Ordner gelöscht.", "label-delete-folder": "Ordner löschen", "button-delete": "Löschen", "button-delete-do-not-ask-again": "Löschen und nicht mehr fragen", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "Es existieren {{links}} Links, die auf diese Notiz verweisen.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "Datei löschen", "button-manage": "Manage", "button-cancel": "Abbrechen", "button-done": "Fertig", "button-save": "Speichern", "button-stop": "Stop", "button-continue": "Fortsetzen", "preparing-pdf": "PDF wird vorbereitet...", "label-rename-file": "Datei umbenennen", "label-new-name": "Neuer Name", "msg-rename-success": "Datei erfolgreich umbenannt.", "label-rename-heading": "Überschrift umbenennen", "label-rename-blockid": "Block ID umbenennen" }, "menu-items": { "new-file": "Notiz erstellen", "new-file-in-new-tab": "Notiz in neuem Tab erstellen", "open-switcher": "Schnell öffnen...", "open-vault": "Vault öffnen...", "find": "Suche", "replace": "Ersetze", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "close-tab": "Tab schließen", "close-window": "Fenster schließen", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Überschrift {{level}}", "no-heading": "Keine Überschrift", "insert-quote": "Zitat", "export-pdf": "Export PDF", "toggle-bullet-list": "Auflistung", "toggle-numbered-list": "Nummerierte Liste", "toggle-checklist": "Aufgabenliste", "toggle-bold": "Fett", "toggle-code": "Code", "toggle-comment": "Kommentar", "toggle-italics": "Kursiv", "toggle-highlight": "Hervorgehoben", "toggle-strikethrough": "Durchgestrichen", "toggle-comments": "Kommentar", "fold-all": "Alle einklappen", "unfold-all": "Alle ausklappen", "fold-more": "Noch mehr einklappen", "fold-less": "Weniger einklappen", "source-mode": "Quellcode-Ansicht", "reading-view": "Lese-Ansicht", "show-debug-info": "Debug-Informationen anzeigen", "navigate-back": "Zurück", "navigate-forward": "Vorwärts", "toggle-left-sidebar": "Linke Seitenleiste umschalten", "toggle-right-sidebar": "Rechte Seitenleiste umschalten", "split-right": "Rechts teilen", "split-down": "Unten teilen", "release-notes": "Neuigkeiten" }, "plugins": { "name": "Erweiterungen", "file-explorer": { "name": "Dateiexplorer", "desc": "Zeige alle Dateien in Deinem Vault.", "action-open": "Dateiexplorer öffnen", "action-show": "Dateiexplorer zeigen", "action-create-note": "Neue Notiz erstellen", "action-create-note-to-the-right": "Notiz rechts erstellen", "action-collapse-all": "Alles einklappen", "action-expand-all": "Alles ausklappen", "action-new-note": "Neue Notiz", "action-new-folder": "Neuer Ordner", "action-change-sort": "Sortierreihenfolge ändern", "action-reveal-file": "Zeige Datei im Dateiexplorer", "action-reveal-active-file": "Aktive Datei im Dateiexplorer zeigen", "command-move-file": "Datei in anderen Ordner verschieben", "action-move-file": "Datei verschieben nach...", "action-move-folder": "Ordner verschieben nach...", "action-move-items": "Verschiebe {{count}} Elemente nach...", "prompt-type-folder": "Ordnernamen eingeben", "label-no-folders": "Keine Ordner gefunden.", "instruction-navigate": "zum Navigieren", "instruction-move": "zum Verschieben", "instruction-dismiss": "zum Abbrechen", "label-sort-a-to-z": "Nach Dateinamen sortieren (A - Z)", "label-sort-z-to-a": "Nach Dateinamen sortieren (Z - A)", "label-sort-new-to-old": "Nach Bearbeitungszeitpunkt sortieren (neu - alt)", "label-sort-old-to-new": "Nach Bearbeitungszeitpunkt sortieren (alt - neu)", "label-sort-created-old-to-new": "Nach Erstellungszeitpunkt sortieren (alt - neu)", "label-sort-created-new-to-old": "Nach Erstellungszeitpunkt sortieren (neu - alt)", "menu-opt-new-note": "Neue Notiz", "menu-opt-new-folder": "Neuer Ordner", "menu-opt-set-attachment-folder": "Als Ordner für Anhänge festlegen", "menu-opt-rename": "Umbenennen", "menu-opt-delete": "Löschen", "menu-opt-make-copy": "Kopie erstellen", "msg-invalid-characters": "Dateiname darf keines der folgenden Symbole enthalten: ", "msg-unsafe-characters": "Links werden nicht funktionieren, wenn der Dateiname eines der folgenden Symbole enthält: ", "msg-file-already-exists": "Es existiert bereits eine Datei mit demselben Namen", "msg-empty-file-name": "Der Dateiname darf nicht leer sein.", "msg-bad-dotfile": "Der Dateiname darf nicht mit einem Punkt beginnen.", "tooltip-modified-time": "Zuletzt bearbeitet: {{time}}", "tooltip-created-time": "Erstellt: {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Verschieben", "label-untitled-file": "Unbenannt", "label-untitled-folder": "Unbenannt", "msg-set-attachment-folder": "Anhänge werden von nun an in diesem Pfad \"{{path}}\" gespeichert." }, "search": { "name": "Suchen", "desc": "Sucht in allen Notizen nach einem Stichwort.", "action-open-search": "In allen Dateien suchen", "label-collapse-results": "Ergebnisse zuklappen", "label-match-case": "Großschreibung beachten", "label-explain-search-term": "Suchbegriff erklären", "label-more-context": "Mehr Kontext anzeigen", "prompt-start-search": "Suchbegriff eingeben...", "label-match-text": "Suchbegriff stimmt überein: ", "label-match-regex": "RegEx stimmt überein: ", "label-match-exact-text": "Enthält exakt: ", "label-match-all": "Enthält alle: ", "label-match-any": "Enthält eins von: ", "label-excluding": "Ohne: ", "label-case-sensitive": "Großschreibung beachten", "label-case-insensitive": "Großschreibung ignorieren", "label-match-file-path": "Dateipfad stimmt überein: ", "label-match-file-name": "Dateiname stimmt überein: ", "label-match-content": "Dateiinhalt stimmt überein: ", "label-match-task": "Aufgabe stimmt überein: ", "label-match-task-todo": "Aufgabe (zu erledigen) stimmt überein: ", "label-match-task-done": "Aufgabe (erledigt) stimmt überein: ", "label-match-line": "Zeile stimmt überein: ", "label-match-block": "Block stimmt überein: ", "label-match-section": "Abschnitt stimmt überein: ", "label-match-tag": "Tag stimmt überein: ", "label-no-matches": "Keine Übereinstimmungen gefunden.", "matches-with-count": "... und {{count}} weitere Übereinstimmung.", "matches-with-count_plural": "... und {{count}} weitere Übereinstimmungen.", "label-copy-search-results": "Suchergebnisse kopieren", "button-copy-results": "Kopieren", "msg-successfully-copied": "Suchergebnisse in die Zwischenablage kopiert.", "option-show-path": "Zeige Pfad", "option-show-path-description": "Zeigt den kompletten Pfad der Datei an, anstelle nur des Dateinamens.", "option-link-style": "Art der Links", "option-link-style-description": "Optional: Wandelt jedes Suchergebnis in einen Link um.", "option-choice-link-style-none": "Keine", "option-choice-link-style-wikilink": "Wiki-Link", "option-choice-link-style-markdown-link": "Markdown-Link", "option-list-prefix": "Listensymbol", "option-list-prefix-description": "Optional: Fügt vor jedem Suchergebnis ein Listensymbol ein.", "option-choice-list-style-none": "Keines", "option-choice-list-style-dash": "Bindestrich (-)", "option-choice-list-style-asterisk": "Sternchen (*)", "option-choice-list-style-numbered": "Nummeriert", "tooltip-clear-search": "Suche leeren", "label-search-options": "Suchoptionen", "tooltip-read-more": "Mehr lesen", "label-history": "Verlauf", "tooltip-clear-history": "Suchverlauf löschen", "label-path-option-description": "Pfad stimmt überein", "label-file-name-option-description": "Dateiname stimmt überein", "label-tag-option-description": "suche nach Tags", "label-line-option-description": "suche Begriff in der gleichen Zeile", "label-section-option-description": "suche Begriff unter der gleichen Überschrift", "menu-opt-search-for": "Suche nach \"{{keyword}}\"" }, "quick-switcher": { "name": "Schnellauswahl", "desc": "Ermöglicht das schnelle Wechseln zu einer beliebigen Notiz mittels Tastenkombination. Strg/Cmd+O, um den Dialog anzuzeigen.", "short-name": "Switcher", "action-open": "Schnellauswahl öffnen", "instruction-navigate": "navigieren", "instruction-open": "öffnen", "instruction-open-in-new-tab": "um in neuem Tab zu öffnen", "instruction-open-to-the-right": "um rechts davon zu öffnen", "instruction-create": "erstellen", "instruction-dismiss": "abbrechen", "label-no-note-create-new": "Keine Notiz gefunden. Eingabetaste, um eine neue Notiz zu erstellen.", "prompt-type-file-name": "Gib einen Namen ein, um zu einer Notiz zu wechseln oder diese zu erstellen...", "label-enter-to-create": "Eingabetaste, um eine neue Notiz mit diesem Namen zu erstellen", "tooltip-not-created-yet": "Noch nicht erstellt, auswäheln zum Erstellen", "option-show-existing-only": "Nur Existierende anzeigen", "option-show-existing-only-description": "Wähle aus, ob Links zu noch nicht erstellten Dateien angezeigt werden.", "option-show-attachments": "Anhänge anzeigen", "option-show-attachments-desc": "Zeigt angehängte Dateien wie Bilder, Videos und PDFs.", "option-show-all-file-types": "Alle Dateitypen zeigen", "option-show-all-file-types-desc": "Zeigt alle Dateitypen an, inklusive solcher, die Obsidian nicht öffnen kann. Die Datei wird mit der Standardanwendung geöffnet." }, "graph-view": { "name": "Graphansicht", "desc": "Zeigt eine Übersicht des Graphen, wie die Notizen verlinkt sind.", "action-open": "Graphen-Ansicht öffnen", "action-open-local": "Lokalen Graph öffnen", "action-copy-screenshot": "Kopiere Bildschirmaufnahme", "tab-title": "Graph von {{displayText}}", "label-filters": "Filter", "prompt-filter-nodes": "Suche Dateien...", "option-depth": "Tiefe", "option-depth-description": "Zeige Notizen, die diese Anzahl von Links entfernt sind.", "option-neighbor-links": "Benachbarte Knoten", "option-neighbor-links-description": "Zeige Links zwischen benachbarten Knoten.", "option-forelinks": "Ausgehende Links", "option-forelinks-description": "Zeige Links zu anderen Dateien", "option-backlinks": "Eingehende Links", "option-backlinks-description": "Zeige Links von anderen Dateien", "option-show-tags": "Kategorien", "option-show-tags-description": "Kategorien sind verlinkt mit den Dateien, die sie beinhalten.", "option-show-attachments": "Anhänge", "option-show-attachments-description": "Zeige Anhänge, die in den Notizen enthalten sind.", "option-show-existing-files-only": "Nur existierende Dateien zeigen", "option-show-existing-files-only-description": "Wenn aktiviert, werden Links zu nicht-existierenden Dateien nicht angezeigt.", "option-show-orphans": "Verwaiste Dateien", "option-show-orphans-description": "Zeige Dateien, die nicht mit anderen Dateien verlinkt sind.", "label-display": "Anzeige", "option-show-arrows": "Pfeile", "option-show-arrows-description": "Zeige Pfeile beim Vergrößern", "option-text-fade": "Grenze Text-Transparenz", "option-node-size": "Knotengröße", "option-link-thickness": "Kantenstärke", "label-forces": "Kräfte", "option-center-force": "Zentrierkraft", "option-link-force": "Linkkraft", "option-link-distance": "Linkabstand", "option-repel-force": "Abprallkraft", "tooltip-open-graph-settings": "Graph-Einstellungen öffnen", "msg-screenshot-copied": "Bildschirmaufnahme in die Zwischenablage kopiert.", "label-groups": "Gruppen", "placeholder-enter-query": "Suchbegriff eingeben...", "tooltip-delete-graph": "Gruppe löschen", "button-new-group": "Neue Gruppe", "tooltip-click-to-change-drag-to-reorder": "Klicke, um Farbe zu ändern\nZiehe, um Gruppen neu zu sortieren", "action-timelapse": "Zeitraffer-Animation des Graphen beginnen", "tooltip-start-timelapse-animation": "Zeitraffer-Animation starten", "button-animate-timelapse": "Animieren" }, "backlinks": { "name": "Rückverweis", "desc": "Zeigt die Anzahl der Rückverweise in der Statusleiste.", "action-open": "Rückverweise öffnen", "action-show": "Rückverweis-Bereich zeigen", "action-open-for-current": "Öffne Rückverweise für die aktuelle Datei", "action-toggle-backlinks-in-document": "Rückverweise im Dokument ein/ausblenden", "menu-opt-backlinks-in-document": "Rückverweise im Dokument", "label-linked-mentions": "Verlinkte Erwähnungen", "label-no-backlinks": "Keine Rückverweise gefunden.", "label-unlinked-mentions": "Nicht-verlinkte Erwähnungen", "label-show-search": "Zeige Suchfilter", "label-link-button-text": "Link", "tab-title": "Rückverweise für {{displayText}}", "label-no-unlinked-mentions": "Keine nicht-verlinkten Erwähnungen gefunden.", "ellipsis": "...", "option-backlink-in-document": "Rückverweis in Notiz", "option-backlink-in-document-desc": "Zeige Rückverweise in dieser Notiz immer an, wenn neue Fensterbereiche geöffnet werden." }, "outgoing-links": { "name": "Ausgehende Links", "desc": "Zeigt ausgehende Links und erkennt nicht verlinkte Erwähnungen anderer Notizen in der aktuellen Notiz.", "action-open": "Ausgehende Links öffnen", "action-show": "Fensterbereich mit ausgehenden Links zeigen", "action-open-for-current": "Ausgehende Links für die aktuelle Datei öffnen", "tab-title": "Ausgehende Links von {{displayText}} öffnen", "label-links": "Links", "label-no-links": "Keine Links gefunden.", "label-unlinked-mentions": "Nicht verlinkte Erwähnungen", "tooltip-link-file": "Diese Datei verlinken", "tooltip-not-created": "Noch nicht erstellt" }, "tag-pane": { "name": "Tag-Bereich", "desc": "Zeigt alle Deine Tags und die Anzahl der Vorkommen.", "action-show": "Tag-Bereich zeigen", "label-no-tags": "Keine Tags gefunden.", "label-sort-by-name-a-to-z": "Tag (A - Z)", "label-sort-by-name-z-to-a": "Tag (Z - A)", "label-sort-by-frequency-high-to-low": "Häufigkeit (hoch - niedrig)", "label-sort-by-frequency-low-to-high": "Häufigkeit (niedrig - hoch)", "action-show-nested-tags": "Zeige verschachtelte Tags", "action-collapse-all": "Alles einklappen", "action-expand-all": "Alles ausklappen" }, "page-preview": { "name": "Seitenvorschau", "desc": "Vorschau der Notiz während der Mauszeiger über einem internen Link schwebt. Strg/Cmd + Schweben im Bearbeitungsmodus.", "label-empty-note": "\"{{linktext}}\" ist noch nicht erstellt. Klicken zum Erstellen.", "label-source-editor": "Editor", "label-source-preview": "Vorschau", "label-source-search": "Suche, Rückverweise und ausgehende Links", "label-require-mod": "Benötigt {{key}}, um Seitenvorschau beim Schweben mit dem Mauszeiger zu aktivieren" }, "starred": { "name": "Mit Stern", "desc": "Ermöglicht das Kennzeichnen häufig benutzter Dateien und Suchen mit einem Stern.", "action-show": "Stern-Bereich zeigen", "action-toggle": "Stern zu aktueller Datei hinzufügen/entfernen", "action-toggle-search": "hinzufügen/entfernen des Sterns zu aktueller Suche", "action-star": "Mit Stern markieren", "action-unstar": "Stern entfernen", "menu-opt-remove": "Entfernen", "msg-successfully-starred": "Erfolgreich mit Stern markiert {{type}} \"{{title}}\".", "msg-removed-starred": "Mit Stern markierte {{type}} \"{{title}}\" entfernt.", "msg-cannot-find-path": "Datei kann unter folgendem Pfad \"{{path}}\" nicht gefunden werden." }, "custom-css": { "name": "Benutzerdefiniertes CSS", "desc": "Liest \"obsidian.css\" im Tresor und wendet es an.", "setting-community-themes": "Community Farbschemen", "msg-fetching-themes": "Lade die Community Farbschema Dateien...", "prompt-filter": "Filter...", "label-dark-theme-only": "Nur dunkle Farbschemen", "label-light-theme-only": "Nur helle Farbschemen", "label-use": "Aktivieren", "label-stop-use": "Dieses Farbschema nicht mehr nutzen", "label-install-and-use": "Installieren und nutzen", "label-update": "Aktualisieren", "label-no-readme": "Dieses Farbschema hat keine README-Datei.", "tooltip-remove-theme": "Farbschema entfernen", "label-visit-on-github": "Auf GitHub besuchen", "msg-load-error": "Die Community Farbschemen konnten nicht geladen werden. Bitte überprüfe Deine Netzwerkverbindung.", "msg-now-using-theme": "Du nutzt jetzt {{title}} als Dein CSS-Thema.", "msg-deleted-theme": "Das Farbschema {{title}} wurde gelöscht.", "msg-updated-theme": "Das Farbschema {{title}} wurde aktualisiert.", "label-installed": "Installiert", "label-legacy": "Legacy", "button-update-all-themes": "Alles aktualisieren", "msg-failed-load-themes": "Laden von Community-Farbschemen fehlgeschlagen.", "msg-no-updates-found": "Keine Farbschema-Aktualisierungen gefunden.", "msg-updates-found": "{{count}} Farbschema kann aktualisiert werden.", "msg-updates-found_plural": "{{count}} Farbschemen können aktualisiert werden.", "msg-failed-to-install-theme": "Insatallation von Farbschema \"{{name}}\" fehlgeschlagen.", "msg-successfully-installed-theme": "Farbschema \"{{name}}\" wurde erfolgreich installiert.", "msg-installing-theme": "Farbschema \"{{name}}\" wird installiert...", "label-search-summary": "Zeige {{themeCount}}:", "label-update-available": "Aktualisierung verfügbar" }, "command-palette": { "name": "Befehlspalette", "desc": "Ermöglicht die schnelle Eingabe eines Befehls. Dies ist sinnvoll, da Du nicht die Benutzeroberfläche benutzen oder das Tastenkürzel merken musst.", "action-open": "Befehlspalette öffnen", "instruction-navigate": "zum navigieren", "instruction-use": "zum benutzen", "instruction-dismiss": "zum schließen", "label-no-commands": "Keine Befehle gefunden.", "prompt-type-command": "Gib einen Befehl ein...", "label-pinned-commands": "Angeheftete Befehle", "option-add-new-pin": "Neuen Befehl anheften", "option-add-new-pin-description": "Wenn kein Suchbegriff eingegeben ist, werden angeheftete Befehle vor allen anderen gezeigt." }, "markdown-format-importer": { "name": "Importprogramm für Markdown Format", "desc": "Konvertiert das Markdown von anderen Anwendungen in das Obsidian Format.", "action-open": "Markdown Importprogramm öffnen", "option-roam-tag-fixer": "Korrekturregel für Roam Research Kategorien", "option-roam-tag-fixer-description": "Konvertiert \"#tag\" und \"#[[tag]]\" zu \"[[tag]]\".", "option-roam-highlight-fixer": "Korrekturregel für Roam Research Hervorherbung", "option-roam-highlight-fixer-description": "Konvertiert \"^^highlight^^\" zu \"==highlight==\".", "option-roam-todo-converter": "Konvertierer für Roam Research TODO", "option-roam-todo-converter-description": "Konvertiert \"{{[[TODO]]}}\" zu \"[ ]\".", "option-bear-highlight-fixer": "Korrekturregel für Bear Hervorherbung", "option-bear-highlight-fixer-description": "Konvertiert \"::highlight::\" zu \"==highlight==\".", "zettelkasten-link-fixer": "Korrekturregel für Zettelkasten-Links", "zettelkasten-link-fixer-description": "Korrigiert \"[[UID]]\" Links zu vollständigen \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Verschönerer für Zettelkasten Links", "zettelkasten-link-beautifier-description": "Korrigiert \"[[UID]]\" Links und verschönert sie zu \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Warnung: Das Importprogramm wird alle Dateien im Vault konvertierten, nicht nur die aktuelle Datei.", "msg-override-files-warning": "Deine Dateien werden überschrieben. Erstelle eine Sicherungskopie Deiner Dateien vor der Konvertierung.", "label-start-conversion": "Konvertierung starten", "label-stop": "Stop", "label-go-back": "Zurück", "label-done": "Fertig", "label-processing": "Verarbeite...", "label-cancelling": "Abbrechen...", "label-finished": "Erledigt!", "label-processed-files": "Verarbeitete Dateien", "label-modified-files": "Geänderte Dateien", "label-total-replacements": "Summe Ersetzungen" }, "daily-notes": { "name": "Tägliche Notizen", "desc": "Öffnet die heutige Notiz oder erstelle eine, wenn sie nicht vorhanden ist.", "short-name": "Heute", "action-open": "Heutige Notiz öffnen", "action-open-previous": "Vorherige Tagesnotiz öffnen", "action-open-next": "Nächste tägliche Notiz öffnen", "action-insert-text": "Text in tägliche Notiz einfügen", "action-insert-link": "Link in tägliche Notiz einfügen", "msg-fail-format": "Tägliche Notiz konnte nicht erstellt werden. \"{{format}}\" ist kein gültiges Format.", "msg-fail-folder": "Tägliche Notiz konnte nicht erstellt werden. Ordner \"{{folderOption}}\" wurde nicht gefunden.", "msg-fail-template-file": "Tägliche Notiz konnte nicht erstellt werden. Vorlagedatei \"{{template}}\" wurde nicht gefunden.", "msg-no-previous": "Es gibt keine tägliche Notiz vor dieser.", "msg-no-next": "Es gibt keine tägliche Notiz nach dieser.", "option-date-format": "Datumsformat", "label-refer-to-syntax": "Weitere Syntax findest Du unter: ", "label-syntax-link": "Format-Referenz", "label-syntax-live-preview": "So wird es aussehen: ", "option-new-file-location": "Neuer Dateispeicherort", "option-new-file-location-description": "Der Ordnerpfad, um die neue tägliche Notiz zu erstellen.", "option-template": "Speicherort der Vorlagendatei", "option-template-description": "Der Dateipfad, der als Vorlage verwendet werden soll.", "option-open-on-start": "Tagesnotiz beim Start öffnen", "option-open-on-start-description": "Öffnet Deine tägliche Notiz automatisch, sobald Du diesen Vault öffnest." }, "unique-note-creator": { "name": "Eindeutige Notiz erstellen", "desc": "Erstellt eindeutige Notizen mit einzigartigen Zeitstempeln im Namen, für Methoden wie den Zettelkasten.", "short-name": "Eindeutig", "action-create-note": "Neue eindeutige Notiz erstellen", "option-new-file-location": "Neuer Datei-Speicherort", "option-new-file-location-description": "Der Pfad zu dem Ordner, in dem die neue eindeutige Notiz erstellt wird.", "msg-folder-not-found": "Eindeutige Notiz konnte nicht erstellt werden. Ordner \"{{folderOption}}\" nicht gefunden.", "option-template-file": "Vorlage Speicherort", "option-template-file-description": "Der Pfad zu der Datei, die als Vorlage genutzt werden soll.", "option-template-file-placeholder": "Beispiel: ordner1/notiz", "option-id-format": "Eindeutiges Zeitstempelformat", "msg-template-file-not-found": "Eindeutige Notiz konnte nicht erstellt werden. Vorlagendatei \"{{template}}\" nicht gefunden.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Zufällige Notiz", "desc": "Öffnet eine zufällige Notiz. Nützlich für die Überprüfung und Erkundung.", "short-name": "Zufall", "action-open": "Zufällige Notiz öffnen" }, "outline": { "name": "Gliederung", "desc": "Zeigt die Gliederung der aktuellen Datei oder des verlinkten Bereichs an.", "action-open": "Gliederung öffnen", "action-show": "Gliederungsbereich zeigen", "action-open-for-current": "Gliederung für die aktuelle Datei öffnen", "tab-title": "Gliederung von {{displayText}}", "label-no-headings": "Keine Überschriften gefunden." }, "word-count": { "name": "Anzahl der Wörter", "desc": "Zeigt die Anzahl der Wörter in der Statusleiste an." }, "slides": { "name": "Präsentation", "desc": "Ermöglicht die Präsentation mit Markdown. Verwende \"---\", um Folien zu trennen.", "action-start": "Präsentation starten" }, "audio-recorder": { "name": "Audio-Rekorder", "desc": "Ermöglicht die Aufzeichnung von Audio und das Speichern von Aufzeichnungen als Anhang.", "action-start": "Audioaufzeichnung starten", "action-stop": "Audioaufzeichnung stoppen", "action-toggle": "Audioaufzeichnung starten/stoppen", "msg-access-denied": "Der Mikrofonzugriff wurde verweigert. Aktiviere ihn bitte über den Einstellungsbereich.", "msg-pending-grant": "Bitte erteile dem Mikrofon die Berechtigung, die Aufnahme zu starten.", "msg-no-microphone": "Es ist kein Mikrofon angeschlossen." }, "open-with-default-app": { "name": "Mit Standard-Anwendung öffnen", "desc": "Fügt einen Button hinzu, um die aktuelle Datei mit der Standard-Anwendung zu öffnen.", "action-open-file": "Mit Standard-Anwendung öffnen", "action-open-file-mobile": "Teilen", "action-show-in-folder": "Im Ordner anzeigen", "action-show-in-folder-mac": "Im Finder anzeigen" }, "templates": { "name": "Vorlagen", "desc": "Ermöglicht das Einfügen von Vorlageinhalten aus Vorlagen in einem Ordner.", "action-insert": "Vorlage einfügen", "action-insert-current-date": "Aktuelles Datum einfügen", "action-insert-current-time": "Aktuelle Zeit einfügen", "option-template-folder-location": "Vorlagenordner Speicherort", "option-template-folder-location-description": "Dateien in diesem Ordner werden als Vorlagen verfügbar sein.", "option-template-date-format": "Datumsformat", "option-template-date-format-description": "{{date}} in der Vorlage werden mit dem aktuellen Wert ersetzt.", "option-template-date-format-description2": "Du kannst auch {{date:YYYY-MM-DD}} benutzen, um das Format einmal zu überschreiben.", "option-template-time-format": "Zeitformat", "option-template-time-format-description": "{{time}} in der Vorlage werden mit dem aktuellen Wert ersetzt.", "option-template-time-format-description2": "Du kann auch {{time:HH:mm}} benutzen, um das Format einmal zu überschreiben.", "instruction-navigate": "zum navigieren", "instruction-insert": "Vorlage einfügen", "instruction-dismiss": "zum abbrechen", "msg-no-templates-found": "Keine Vorlagen gefunden", "msg-fail-invalid-folder": "Es können keine Vorlagen angezeigt werden. Der Vorlagenordner ist nicht gültig.", "msg-fail-folder-not-found": "Es können keine Vorlagen angezeigt werden. Ordner \"{{folderOption}}\" wurde nicht gefunden.", "prompt-type-template": "Vorlagenamen eingeben..." }, "translucency": { "name": "Durchscheinender Fensterbereich", "desc": "Aktiviert den Durchschein-Effekt, um ein Gefühl von Tiefe zu erzeugen. Nutze es am besten mit dem Dunklen Modus. Wird von Linux nicht unterstützt." }, "slash-command": { "name": "Slash-Befehle", "desc": "Aktiviert die Möglichkeit, Slash-Befehle im Editor zu verwenden, wenn du den Schrägstrich eingibst." }, "editor-status": { "name": "Editor Status", "desc": "Fügt eine Statusleiste hinzu, die den aktuellen Editor-Modus zeigt und ihn ändern kann.", "read": "Lesen", "edit-source": "Quellcode-Ansicht", "edit-live-preview": "Live-Vorschau" }, "publish": { "name": "Veröffentlichen", "desc": "Ermöglicht das Veröffentlichen Deiner Notizen mittels Obsidian Publish.", "action-publish-changes": "Änderungen veröffentlichen", "label-no-internet-access": "Es wird eine Internetverbindung benötigt, um Änderungen zu veröffentlichen.", "label-publish-service-description": "Obsidian Publish ist ein optionaler, kostenpflichtiger Service, der es Dir ermöglicht, Deine Notizen direkt aus Obsidian zu veröffentlichen..", "label-please-login": "Um Notizen zu veröffentlichen, bitte logge Dich ein oder erstelle ein neues Obsidian Konto.", "label-no-publish-subscription": "Du hast bisher den Obsidian Publish Service nicht aktiviert.", "button-purchase": "Erwerben", "label-manage-sites": "Seiten verwalten", "label-no-sites": "Du hast keine Seiten.", "button-choose": "Wählen", "tooltip-edit-site-id": "Seiten-ID bearbeiten", "tooltip-delete-site": "Seite löschen", "label-delete-site-confirmation": "Bist Du sicher, dass Du diese Seite löschen möchtest?", "label-delete-site-details": "Das wird Deine Seite sofort und unwiderruflich löschen.", "label-confirm-delete-site": "Bestätige das Löschen der Seite \"{{site}}\"", "option-site-id": "Seiten-ID", "option-site-id-description": "Deine Seite wird unter https://publish.obsidian.md/{site id} zu finden sein. Du kannst das später ändern. Nur Kleinbuchstaben, Ziffern und Bindestriche sind erlaubt.", "option-site-id-placeholder": "Wähle eine Seiten-ID", "button-create": "Erstellen", "msg-invalid-site-id": "Seiten-ID darf nur Kleinbuchstaben, Ziffern und Bindestriche enthalten.", "msg-site-id-in-use": "Diese Seiten-ID wird bereits verwendet, bitte versuche eine andere.", "msg-create-site-issue": "Es gab ein Problem beim Erstellen Deiner Seite.", "label-site-options": "Seiten-Einstellungen", "option-site-general": "Allgemein", "option-site-components": "Komponenten", "option-site-appearance": "Aussehen", "option-site-reading-experience": "Leser-Erlebnis", "option-site-misc": "Andere Seiten-Einstellungen", "option-site-name": "Seiten-Name", "option-site-name-description": "Der Name Deiner veröffentlichten Seite. Er wird im Seitentitel der Seite zu sehen sein.", "option-site-name-placeholder": "Name Deiner Seite", "option-home-page-file": "Homepage Datei", "option-home-page-file-description": "Die erste Seite, die Nutzer sehen, wenn sie Deine veröffentlichte Seite aufrufen", "option-home-page-file-placeholder": "Wähle eine veröffentlichte Datei", "option-logo": "Logo", "option-logo-description": "Wähle eine Bilddatei als Logo Deiner Seite.", "option-logo-placeholder": "Irgendein hochgeladenes Bild in Deiner Vault...", "option-site-collaboration": "Seiten-Zusammenarbeit", "option-site-collaboration-desc": "Verwalte Mitarbeiter für diese Seite.", "button-manage-collaborators": "Verwalten", "option-theme": "Schema", "option-theme-description": "Wähle ein Standard-Schema für Deine Seite.", "option-theme-system": "An System anpassen", "option-show-theme-toggle": "Hell/Dunkel umschalten", "option-show-theme-toggle-description": "Lässt den Besucher selbst zwischen dem hellen und dunklen Farbschema umschalten.", "option-show-navigation": "Navigation anzeigen", "option-show-navigation-description": "Zeigt eine Liste aller Deiner veröffentlichten Seiten am linken Rand der Seiten.", "option-show-search": "Zeige Suchbereich", "option-show-search-description": "Zeigt einen Suchbereich über der Navigation, mit dem Besucher Seiten und Titel auf Deiner Seite durchsuchen können.", "option-show-graph": "Zeige Graphenansicht", "option-show-graph-description": "Zeigt einen kleinen, lokalen Graphen auf jeder Seite an.", "option-show-outline": "Zeige Inhaltsverzeichnis", "option-show-outline-description": "Zeigt eine Liste aller Überschriften auf jeder Seite an.", "option-show-backlinks": "Zeige Rückverweise", "option-show-backlinks-description": "Zeigt am Ende jeder Seite einen Bereich mmit Rückverweisen an.", "option-sliding-window-mode": "Nutze horizontales Scrollen", "option-sliding-window-mode-description": "Öffnet Seiten in neuen Fensterbereichen rechts. Erlaubt horizontales Scrollen durch die Fensterbereiche.", "option-hover-preview-file": "Zeige Vorschau", "option-hover-preview-file-description": "Zeigt eine Vorschau der Seite beim Schweben mit dem Mauszeiger über einem Link.", "option-hide-title": "Seitentitel verstecken", "option-hide-title-description": "Versteckt den Seitentitel. Das ist nützlich, wenn Du Deine eigenen Überschriften am Anfang jeder Seite hast.", "option-readable-line-length": "Lesbare Zeilenlänge", "option-readable-line-length-description": "Begrenzt die maximale Zeilenlänge. Es passt weniger Inhalt auf den Bildschirm, dafür sind lange Absätze besser lesbar.", "option-site-password": "Passwörter", "option-site-password-description": "Beschränke den Zugang zu Deiner Seite mit Passwörtern.", "option-google-analytics": "Google Analytics Code", "option-google-analytics-description": "Bearbeitet Google Analytics für Deine Seite. Nur verfügbar für Besucher von Deiner eigen Domain URL. Bitte beachte Deine lokalen Gesetze und Regulierungen dazu.", "button-manage-passwords": "Verwalten", "button-save-site-settings": "Seiteneinstellungen speichern", "msg-updated-options": "Einstellungen für Deine Seite aktualisiert.", "button-go-back": "Zurück", "label-publishing-to": "Veröffentlichen nach", "tooltip-switch-site": "Seite wechseln", "button-add-linked": "Verlinkte hinzufügen", "tooltip-add-linked": "Fügt alle von der aktuellen Auswahl verlinkten Dateien hinzu", "msg-added-linked-files": "{{count}} verlinkte Datei wurde hinzugefügt.", "msg-added-linked-files_plural": "{{count}} verlinkte Dateien wurden hinzugefügt.", "tooltip-open-site-options": "Seiteneinstellungen ändern", "label-no-changes-detected": "Keine Änderungen wurden gefunden.", "label-changed-files-to-be-published": "Änderungen", "label-unchanged-files-already-published": "Unverändert (zum Löschen auswählen)", "label-file-selected": " ausgewählt", "button-select-all-files": "Alle auswählen", "button-deselect-all-files": "Auswahl aufheben", "label-new-files-to-be-published": "Neu", "button-publish": "Veröffentlichen", "msg-no-permission-to-publish-to-site": "Du hast nicht die erforderlichen Berechtigungen, um zu dieser Seite zu veröffentlichen.", "msg-select-at-least-one-file": "Bitte wähle mindestens eine Datei aus.", "label-upload-changes": "Änderungen hochladen", "button-done": "Fertig", "button-stop": "Stopp", "label-status-uploading": "Lädt hoch", "label-status-to-publish": "Zum Veröffentlichen", "label-status-to-delete": "Zum Löschen", "label-status-published": "Veröffentlicht", "label-status-deleted": "Gelöscht", "label-status-failed": "Fehlgeschlagen", "label-status-cancelled": "Abgebrochen", "button-change": "Ändern", "label-clear-cache": "Es kann einige Minuten dauern, bis die Änderungen auf Deiner Seite sichtbar sind. Wenn Du Deine letzten Änderungen nicht sehen kannst, versuche, den Cache Deines Browsers zu löschen.", "label-visit-site": "Du kannst Deine Seite hier finden: ", "msg-something-went-wrong": "Etwas ist schief gelaufen. Bitte prüfe die Entwickler-Konsole für Details.", "msg-network-error": "Ein Netzwerkfehler ist aufgetreten. ", "label-manage-passwords": "Passwörter verwalten", "label-add-password": "Passwort hinzufügen", "action-new-password": "Neues Passwort", "label-no-password": "Deine Seite nutzt momentan keine Passwörter. Jeder kann Deine Seite besuchen.", "label-have-password": "Deine Seite ist passwortgeschützt. Wenn Du mehrere Passwörter hast, können Besucher mit jedem beliebigen dieser Passwörter auf Deine Seite zugreifen.", "option-password-name": "Passwort", "option-password-desc": "Ein Hash Deines Passwortes wird sicher gespeichert. Sobald das Passwort einmal gesetzt ist, kann es nicht mehr als Text angezeigt werden.", "option-password-placeholder": "Dein Passwort", "option-nickname-name": "Spitzname (optional)", "option-nickname-desc": "Wähle einen Spitznamen, um Dich daran zu erinnern, für wen oder was das Passwort ist.", "action-add-password": "Dieses Passwort hinzufügen", "label-untitled-password": "Unbenanntes Passwort", "label-password-created-time": "Erstellt: {{time}}", "msg-added-new-password": "Neues Passwort hinzugefügt.", "option-custom-domain": "Eigene Domain", "option-custom-domain-desc": "Nutze Deine eigene Domain anstelle der https://publish.obsidian.md/{site id} URL.", "option-noindex": "Verbiete Indizierung durch Suchmaschinen", "option-noindex-desc": "Verhindert, dass Suchmaschinen Deine Seite indizieren.", "button-configure": "Konfigurieren", "label-configure-custom-domain": "Eigene Domain konfigurieren", "option-custom-url-name": "Eigene URL", "option-custom-url-desc": "Die URL, unter der Deine Seite zu finden sein wird.", "option-custom-url-placeholder": "www.eigenedomain.com", "option-custom-url-redirect": "Weiterleitung zu Deiner eigenen Domain", "option-custom-url-redirect-desc": "Leite Deine Besucher auf publish.obsidian.md/id zu Deiner eigenen Domain weiter.", "button-update-custom-domain": "Domain-Einstellungen aktualisieren", "label-custom-domain-instructions": "Bitte überprüfe unsere {{link}} auf unserer Hilfe-Seite für mehr Informationen.", "label-custom-domain-link-name": "Anleitung für eigene Domains", "label-site-usage": "Du nutzt {{site}} von Deinen {{limit}} Seiten.", "button-add-more-sites": "Kaufe mehr Seiten", "label-no-sites-bought": "Du hast noch keine Seiten gekauft.", "button-get-site": "Erwerbe eine Seite", "label-manage-sharing": "Teilen verwalten für \"{{name}}\"", "label-sharing-with-users": "Diese Seite wird aktuell mit den folgenden Personen geteilt.", "label-not-sharing": "Diese Seite wird aktuell mit niemandem geteilt.", "label-invite-pending": "Ausstehend", "tooltip-remove-user": "Nutzer entfernen", "option-invite-user": "Nutzer einladen", "placeholder-invite-user": "Gib die Email-Adresse ein...", "error-email-must-be-valid": "Bitte gib eine gültige Email-Adresse ein, um jemanden einzuladen.", "msg-enable-publish-plugin": "Bitte aktiviere das Publish-Kernplugin in Einstellungen -> Obsidian-Erweiterungen, um Seiten anzuzeigen.", "label-your-sites": "Deine Seiten", "label-sites-shared-with-you": "Seiten, die mit Dir geteilt wurden", "tooltip-leave-site-sharing": "Mitarbeit an dieser Seite beenden", "label-leave-site-confirmation": "Beendigung der Mitarbeit an dieser Seite bestätigen", "label-leave-site-confirmation-details": "Dies wird diese Seite aus der Liste der mit Dir geteilten Seiten entfernen. Diese Aktion kann nicht rückgängig gemacht werden.", "label-leave-site-confirmation-details-2": "Bitte kontaktiere den Eigentümer der Seite, falls Du wieder mitarbeiten möchtest.", "button-leave": "Verlassen", "label-compare-with-live": "Mit Live-Version vergleichen", "button-use-live-version": "Live-Version nutzen", "label-confirm-override": "Überschreiben der lokalen Version bestätigen", "label-confirm-override-1": "Bist Du sicher, dass Du die lokale Version überschreiben willst?", "label-confirm-override-2": "Die Live-Version wird genutzt und Deine lokale Version wird verworfen. Bitte erstelle vorher ein Backup, falls nötig.", "button-proceed": "Fortfahren", "message-successfully-used-live-version": "Live-Version wurde erfolgreich genutzt, um Deine lokale Version zu überschreiben.", "label-open-file": "Datei öffnen", "tooltip-manage-publish-filters": "Publish-Filter verwalten", "option-included-folders": "Eingeschlossene Ordner", "option-included-folders-desc": "Dateien in diesen Ordnern werden automatisch ausgewählt, wenn Du Veränderungen zum Veröffentlichen anschaust.", "option-currently-included-folders": "Diese Ordner sind aktuell eingeschlossen:", "option-excluded-folders": "Ausgeschlossene Ordner", "option-excluded-folders-desc": "Dateien in diesen Ordnern werden nicht auftauchen, wenn Du Veränderungen zum Vveröffentlichen anschaust. Diese Einstellung hat höhere Priorität als die eingeschlossenen Ordner oben.", "label-number-of-folders-included": "Obsidian Publish schließt aktuell {{folders}} ein.", "label-number-of-folders-excluded": "Obsidian Publish schließt aktuell {{folders}} aus.", "label-manage-included-folders": "Eingeschlossene Ordner verwalten", "label-manage-excluded-folders": "Ausgeschlossene Ordner verwalten", "label-add-included-folder": "Ordner einschließen", "label-add-included-folder-desc": "Du kannst sowohl bestehende, als auch zukünftig erstellte Ordner einschließen.", "tooltip-contact-support": "Support kontaktieren" }, "workspaces": { "name": "Workspaces", "desc": "Ermöglicht das Speichern und Laden von Workspace-Layouts.", "action-load-layout": "Workspace-Layout laden", "action-manage-layouts": "Workspace-Layouts verwalten", "action-save-and-load-layout": "Speichern und ein anderes Layout laden", "placeholder-save-current-layout-as": "Speichere das aktuelle Workspace-Layout als...", "button-save": "Speichern", "button-load": "Laden", "tooltip-delete-layout": "Layout löschen", "msg-delete-layout-success": "Layout erfolgreich gelöscht.", "msg-enter-name": "Bitte gib einen Namen für das neue Layout ein.", "msg-save-layout-success": "Layout erfolgreich gespeichert.", "label-no-layout-found": "Kein gespeichertes Layout gefunden.", "placeholder-type-to-search-layouts": "Layout-Namen eingeben..." }, "sync": { "name": "Sync", "desc": "Synchronisiere Deine Dateien mit Obsidian Sync.", "action-view-version-history": "Zeige Versionsverlauf", "label-load-more": "Mehr laden", "label-show-diff": "Unterschiede zeigen", "label-copy-to-clipboard": "In Zwischenablage kopieren", "label-restore-this-version": "Diese Version wiederherstellen", "msg-already-latest-version": "Diese Version ist bereits die aktuellste Version.", "msg-restored-version": "Erfolgreich Version von {{time}} wiederhergestellt.", "label-file-deleted": "Diese Datei wurde gelöscht", "label-no-earlier-version": "Es gibt keine frühere Versionen dieser Datei.", "label-empty-file": "Leer", "label-setting-files": "Einstellungsdateien", "label-deleted-files": "Gelöschte Dateien", "label-version-history": "Versionsverlauf", "label-click-to-see-history": "Klicke auf eine gelöschte Datei, um ihren Verlauf zu sehen.", "label-create-remote-vault": "Remote-Vault erstellen", "msg-please-enter-password": "Bitte gib ein Passwort ein.", "msg-vault-name-cannot-be-empty": "Vault-Name darf nicht leer sein.", "msg-successfully-created-vault": "Erfolgreich Remote-Vault erstellt \"{{name}}\".", "label-remote-vault-explanation": "Remote-Vaults synchronisieren Deinen Vault sicher zwischen Deinen Geräten.", "option-vault-name": "Vault-Name", "option-vault-name-desc": "Hilft, Dich an den Inhalt Deines Vaults zu erinnern.", "option-vault-name-placeholder": "Mein großartiger Vault", "option-use-custom-encryption-password": "Passwort für Ende-zu-Ende-Verschlüsselung konfigurieren", "option-use-custom-encryption-password-desc": "Wenn Du das deaktivierst, werden wir einen sicheren Verschlüsselungs-Key für Dich verwalten.", "option-use-custom-encryption-password-desc-warning": "Diese Option kann später nicht mehr geändert werden!", "option-encryption-password": "Passwort für Verschlüsselung", "option-encryption-password-desc": "Dieses Passwort kann später nicht mehr verändert werden!", "option-encryption-password-desc-warning": "Wenn Du dieses Passwort vergisst, werden alle Remote-Daten für immer unbrauchbar sein.", "option-encryption-password-desc-2": "Dies betrifft nicht Deine lokalen Daten.", "option-encryption-password-placeholder": "Dein Passwort", "label-enter-encryption-password": "Passwort für Verschlüsselung eingeben", "button-unlock-vault": "Vault freischalten", "msg-verified-password": "Dein Passwort wurde erfolgreich verifiziert.", "label-remote-vaults": "Deine Remote-Vaults", "label-vault-created-time": "Erstellt {{time}}", "tooltip-delete-remote-vault": "Löschen", "tooltip-manage-sharing": "Teilen verwalten", "label-confirm-delete-remote-vault": "Löschen des Vaults bestätigen", "label-confirm-delete-remote-vault-question": "Bist Du sicher, dass Du diesen Remote-Vault löschen willst?", "label-confirm-delete-remote-vault-result": "Alle Daten auf unseren Servern, inklusive des Versions-Verlaufes, werden gelöscht. Deine lokalen Dateien bleiben unberührt.", "label-confirm-delete-remote-vault-warning": "Diese Aktion ist permanent und irreversibel.", "msg-remote-vault-deleted": "{{name}} wurde gelöscht.", "button-connect-to-remote-vault": "Verbinden", "button-disconnect-from-remote-vault": "Verbindung trennen", "label-not-remote-vaults": "Du hast keine Remote-Vaults.", "button-create-new-remote-vault": "Neuen Vault erstellen", "label-sync-log": "Sync-Log", "options-only-show-errors": "Nur Fehler", "options-only-show-errors-desc": "Zeigt nur Fehler und versteckt andere Log-Einträge.", "button-copy-sync-log": "Sync-Log kopieren", "msg-successfully-copied-sync-log": "Sync-Log erfolgreich kopiert.", "button-retry": "Erneut versuchen", "button-purchase-subscription": "Erwerben", "option-remote-vault": "Remote-Vault", "button-choose-remote-vault": "Wählen", "button-manage-remote-vault": "Verwalten", "option-remote-vault-desc-connected": "Aktuell verbunden zum \"{{name}}\" Remote-Vault.", "option-remote-vault-desc-not-connected": "Aktuell mit keinem Remote-Vault verbunden.", "option-sync-status": "Sync Status", "option-sync-status-desc-paused": "Obsidian Sync ist momentan pausiert.", "option-sync-status-desc-running": "Obsidian Sync läuft gerade.", "option-device-name": "Name des Gerätes", "option-device-name-desc": "Dieser Name wird im Sync-Log gezeigt. Wenn Du das Feld leer lässt, wird der Standardname verwendet.", "button-resume": "Fortfahren", "button-pause": "Pause", "option-view-deleted-files": "Gelöschte Dateien", "option-view-deleted-files-desc": "Zeigt gelöschte Dateien und ermöglicht Wiederherstellung.", "option-sync-log": "Sync-Aktivität", "option-sync-log-desc": "Zeigt kürzliche Sync-Aktivitäten zum Debugging.", "button-view": "Zeigen", "button-bulk-restore": "Mehrere wiederherstellen", "button-restore-selected-files": "Stellt die ausgewählten Dateien wieder her", "msg-restoring": "Wiederherstellen...", "msg-restoring-complete": "`Wiederherstellung vollständig: {{succeeded}} erfolgreich und {{failed}} fehlgeschlagen.`", "option-over-size": "Vault Größe über Limit", "option-over-size-desc": "Deine Vault belegt {{size}} von {{limit}}.", "msg-largest-files": "Zeige größte Dateien", "msg-largest-files-desc": "Dies sind die Remote-Dateien, die den meisten Platz beanspruchen. Nachdem Du Anhänge gelöscht hast, nutze den Bereinigen-Knopf um Speicherplatz für deinen Remote-Vault freizugeben.", "button-purge-remote": "Bereinigen", "tooltip-purge-remote": "Gelöschte Anhänge werden permanent vom Remote-Vault entfernt, um Speicherplatz zu sparen.", "msg-purge-complete": "Bereinigung erfolgreich.", "option-prevent-sleep": "Gerät aktiv halten", "option-prevent-sleep-desc": "Verhindert, dass das Gerät in den Ruhemodus geht, während noch Dateien synchronisiert werden müssen.", "option-selective-sync": "Selektive Synchronisation", "option-excluded-folders": "Ausgeschlossene Ordner", "option-excluded-folder-desc": "Vermeidet, dass bestimmte Ordner synchronisiert werden.", "option-currently-excluded-folders": "Diese Ordner sind momentan ausgeschlossen:", "button-manage-excluded-folders": "Verwalten", "option-sync-image": "Bilder synchronisieren", "option-sync-image-desc": "Synchronisiert Bilddateien mit diesen Dateiendungen: {{extensions}}.", "option-sync-audio": "Audiodateien synchronisieren", "option-sync-audio-desc": "Synchronisiert Audiodateien mit diesen Dateiendungen: {{extensions}}.", "option-sync-video": "Videos synchronisieren", "option-sync-video-desc": "Synchronisiert Videodateien mit diesen Dateiendungen: {{extensions}}.", "option-sync-pdf": "PDFs synchronisieren", "option-sync-pdf-desc": "Synchronisiert PDF-Dateien.", "option-sync-unsupported": "Alle anderen Dateien synchronisieren", "option-sync-unsupported-desc": "Synchronisiert Dateien mit nicht unterstützten Dateiendungen.", "option-vault-config-sync": "Vault-Konfiguration synchronisieren", "option-view-config-files": "Einstellungsverlauf", "option-view-config-files-desc": "Zeigt den Versionsverlauf der Einstellungsdateien, mit Option zum Wiederherstellen.", "option-sync-app": "Allgemeine Einstellungen", "option-sync-app-desc": "Aktiviere, um Editor-Einstellungen, Datei- und Link-Einstellungen, eigene Tastaturkürzel, etc. zu synchronisieren.", "option-sync-appearance": "Ercheinungseinstellungen", "option-sync-appearance-desc": "Synchronisiert Erscheinungseinstellungen wie dunklen Modus, aktives Thema und aktivierte CSS-Snippets.", "option-sync-appearance-data": "Themen und Snippets", "option-sync-appearance-data-desc": "Synchronisiert heruntergeladene Themen und Snippets. Ob diese aktiviert sind, entscheidet die vorherige Einstellung.", "option-sync-hotkey": "Tastenkürzel", "option-sync-hotkey-desc": "Synchronisiert eigene Tastenkürzel.", "option-sync-core-plugin": "Aktive Kern-Erweiterungen", "option-sync-core-plugin-desc": "Synchronisiert, welche Kern-Erweiterungen aktiviert sind.", "option-sync-core-plugin-data": "Kern-Erweiterung Einstellungen", "option-sync-core-plugin-data-desc": "Synchronisiert Einstellungen der Kern-Erweiterungen.", "option-sync-community-plugin": "Aktive Community-Erweiterungen", "option-sync-community-plugin-desc": "Synchronisiert, welche Community-Erweiterungen aktiviert sind.", "option-sync-community-plugin-data": "Installierte Community-Erweiterungen", "option-sync-community-plugin-data-desc": "Synchronisiert installierte Community-Erweiterungen (.js, .css, und manifest.json Dateien) und ihre Einstellungen.", "label-sync-introduction": "Obsidian Sync ist Obsidian's optionaler Synchronisationsservice mit Ende-zu-Ende-Verschlüsselung und Versionsverlauf.", "label-account-required": "Um die Synchronisation zu starten, logge Dich bitte ein oder erstelle einen neuen Obsidian-Account.", "button-sign-up": "Account erstellen", "button-log-in": "Einloggen", "label-manage-excluded-folders": "Ausgeschlossene Ordner verwalten", "label-number-of-folders-excluded": "{{folders}} sind momentan von der Synchronisation ausgeschlossen.", "label-add-excluded-folder": "Ordner ausschließen", "label-add-excluded-folder-desc": "Du kannst bereits exisiterende und zukünftig erstellte Ordner ausschließen.", "tooltip-remove-excluded-folder": "Von Ausschlussliste entfernen", "label-setup-connection": "Verbindung aufsetzen", "label-now-connected-to-vault": "Du bist jetzt mit \"{{name}}\" verbunden.", "button-start-syncing": "Synchronisation starten", "label-confirm-merge-vault": "Vault-Kombination bestätigen", "msg-vault-has-notes": "Dein lokaler Vault enthält bereits einige Notizen.", "msg-vault-merge-warning": "Wenn Du mit dem Remote-Vault \"{{name}}\" verbindest, werden Notizen aus Deinem lokalen Vault mit Notizen aus Deinem Remote-Vault kombiniert. In Konfliktsituationen wird die aktuellere Version der Notiz beibehalten.", "tooltip-update-setting-on-all-devices": "Bitte aktualisiere diese Einstellung und starte die Anwendung auf allen Deinen Geräten neu, auf denen die Änderungen übernommen werden sollen.", "label-sharing-with-users": "Dieser Remote-Vault wird aktuell mit den folgenden Personen geteilt.", "label-not-sharing": "Dieser Remote-Vault wird aktuell mit niemandem geteilt.", "label-vaults-shared-with-you": "Vaults, die mit Dir geteilt wurden", "tooltip-leave-vault-sharing": "Nicht mehr an diesem Vault mitarbeiten", "label-leave-vault-confirmation": "Bestätige, dass Du nicht mehr an diesem Vault mitarbeiten möchtest", "label-leave-vault-confirmation-details": "Dies wird den Vault von der Liste der mit dir geteilten Vaults entfernen. Diese Aktion kann nicht rückgängig gemacht werden!", "label-leave-vault-confirmation-details-2": "Bitte kotaktiere den Eigentümer des Vaults, falls Du wieder an diesem Vault mitarbeiten möchtest.", "button-leave": "Verlassen", "label-require-subscription-to-connect": "Du benötigst ein Obsidian Sync Abo, um mit diesem Vault zu verbinden.", "option-contact-support": "Support kontaktieren", "option-contact-support-desc": "Falls Du irgendwelche Probleme mit Obsidian Sync hast, bitte kontaktiere uns, damit wir Dir helfen können! Du kannst uns erreichen unter support@obsidian.md.", "button-email-support": "Email an den Support" }, "file-recovery": { "name": "Datenwiederherstellung", "desc": "Wiederherstellung älterer Dateiversionen bei versehentlichem Datenverlust. Sicherungskopien werden nur für Markdown-Dateien erstellt.", "action-open": "Gespeicherte Sicherungskopien öffnen", "option-interval": "Sicherungsintervall", "option-interval-description": "Mindestintervall zwischen zwei Sicherungskopien (in Minuten).", "option-keep": "Archivierungsdauer", "option-keep-description": "Zeitraum, für den Sicherungskopien aufbewahrt werden sollen (in Tagen).", "option-open-history": "Sicherungskopien", "option-open-history-description": "Gespeicherte Sicherungskopien ansehen und wiederherstellen.", "button-view-snapshots": "Ansehen", "option-clear": "Archiv leeren", "option-clear-description": "Alle Sicherungskopien löschen.", "button-clear-history": "Leeren", "label-clear-warning": "Bist du sicher, dass du alle Sicherungskopien löschen möchtest? Es werden nur die Sicherungskopien entfernt. Sämtliche Dateien in deinem Vault bleiben erhalten.", "msg-clear-complete": "Sicherungskopien gelöscht.", "label-no-history-found": "Keine Sicherungskopien gefunden.", "placeholder-choose-file": "Wähle eine Datei aus...", "label-select-file": "Bitte wähle eine Datei auf der linken Seite, um gespeicherte ältere Versionen anzusehen." }, "note-composer": { "name": "Notizen-Werkbank", "desc": "Verbinden, Aufteilen und Umgestalten von Notizen.", "option-confirm-file-merge": "Bestätigung der Verbindung von Dateien", "option-confirm-file-merge-description": "Fragt nach, bevor zwei Dateien verbunden werden.", "option-split-replacement-text": "Text nach Extrahierung", "option-split-replacement-text-description": "Was wird an der Stelle des markierten Textes nach der Extrahierung angezeigt?", "option-choice-split-replacement-text-link": "Link zu neuer Datei", "option-choice-split-replacement-text-embed": "Einbettung der neuen Datei", "option-choice-split-replacement-text-none": "Nichts", "option-template-file": "Vorlagen-Datei Speicherort", "option-template-file-description": "Vorlagen-Datei, die beim Verbinden oder Extrahieren verwendet wird. Verfügbare Variablen: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, z.B. {{date:YYYY-MM-DD}}.", "command-merge-file": "Verbinde aktuelle Datei mit anderer Datei...", "action-merge-file": "Verbinde gesamte Datei mit...", "label-no-files": "Keine Dateien gefunden.", "instruction-navigate": "zum Navigieren", "instruction-merge": "zum Verbinden", "instruction-create-new": "um neu zu erstellen", "instruction-merge-at-top": "um am Anfang zu verbinden", "instruction-dismiss": "zum Verwerfen", "prompt-select-file-to-merge": "Wähle Datei zum Verbinden...", "label-merge-file": "Datei verbinden", "label-confirm-file-merge": "Bist Du sicher, dass Du \"{{file}}\" mit \"{{destination}}\" verbinden willst?? \"{{file}}\" wird dabei gelöscht.", "button-merge": "Verbinden", "button-merge-do-not-ask-again": "Verbinden und nicht erneut nachfragen", "command-split-file": "Aktuelle Auswahl extrahieren...", "command-extract-heading": "Diese Überschrift extrahieren...", "instruction-append": "um zum Ende zu verschieben", "instruction-prepend": "um zum Anfang zu verschieben", "msg-fail-to-fetch-template": "Vorlagen-Datei: \"{{template}}\" nicht gefunden.", "msg-fail-to-find-heading": "Überschrift konnte nicht gefunden werden" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} Wort", "word-with-count_plural": "{{count}} Wörter", "character-with-count": "{{count}} Zeichen", "character-with-count_plural": "{{count}} Zeichen", "link-with-count": "{{count}} Link", "link-with-count_plural": "{{count}} Links", "file-with-count": "{{count}} Datei", "file-with-count_plural": "{{count}} Dateien", "folder-with-count": "{{count}} Ordner", "folder-with-count_plural": "{{count}} Ordner", "backlink-with-count": "{{count}} Rückverweis", "backlink-with-count_plural": "{{count}} Rückverweise", "site-with-count": "{{count}} Seite", "site-with-count_plural": "{{count}} Seiten", "plugin-with-count": "{{count}} Erweiterung", "plugin-with-count_plural": "{{count}} Erweiterungen", "theme-with-count": "{{count}} Farbschema", "theme-with-count_plural": "{{count}} Farbschemen" } } { "setting": { "options": "Options", "plugin": "Plugin", "builtin-plugins": "Core plugins", "plugin-options": "Plugin options", "folder-path-example-placeholder": "Example: folder 1/folder 2", "file-path-example-placeholder": "Example: folder/note", "msg-restart-required": "Changing this option requires a restart to take effect.", "editor": { "name": "Editor", "section-general": "General", "section-behavior": "Behavior", "section-display": "Display", "option-spellcheck": "Spell check", "option-spellcheck-description": "Turns on the spell checker. Currently only works for English (US).", "spellcheck-languages": "Spellcheck languages", "spellcheck-languages-description": "Choose the languages for the spellchecker to use.", "spellcheck-languages-mac-description": "The native spellchecker will automatically detect the language being used for you on macOS.", "spellcheck-dict": "Spellcheck dictionary", "spellcheck-dict-empty": "The spellcheck dictionary is empty.", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "Readable line length", "option-readable-line-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-strict-line-break": "Strict line breaks", "option-strict-line-break-description": "In preview mode, ignore single line breaks according to the Markdown specs. Turn this off for single line breaks to show in preview.", "option-show-frontmatter": "Show frontmatter", "option-show-frontmatter-description": "In preview mode, show frontmatter as a code block. Turn off to hide frontmatter section.", "option-auto-pair-brackets": "Auto pair brackets", "option-auto-pair-brackets-description": "Pair brackets and quotes automatically.", "option-auto-pair-markdown": "Auto pair Markdown syntax", "option-auto-pair-markdown-description": "Pair symbols automatically for bold and italics.", "option-smart-indent-lists": "Smart indent lists", "option-smart-indent-lists-description": "Take care of indentation and list marker for you.", "option-fold-heading": "Fold heading", "option-fold-heading-description": "Let you fold everything under a heading.", "option-fold-indent": "Fold indent", "option-fold-indent-description": "Let you fold a portion of the same indentation, such as lists.", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Editing view", "option-default-new-tab-view-reading": "Reading view", "option-default-editing-mode": "Default editing mode", "option-default-editing-mode-description": "The default editing mode a new pane will start with.", "option-default-editing-mode-source": "Source mode", "option-default-editing-mode-live-preview": "Live Preview", "option-show-line-number": "Show line number", "option-show-line-number-description": "Show line number in the gutter.", "option-indentation-guide": "Show indentation guides", "option-indentation-guide-description": "Show vertical relationship lines between bullet points for visual guidance.", "option-use-tabs": "Use tabs", "option-use-tabs-description": "Use tabs to indent when pressing the \"Tab\" key. Set this to off to use spaces.", "option-tab-size": "Tab size", "option-tab-size-description": "Number of spaces a tab is equivalent to.", "option-rtl": "Right-to-left (RTL)", "option-rtl-description": "Sets the text direction of notes to display in right-to-left.", "option-auto-convert-html": "Auto convert HTML", "option-auto-convert-html-description": "Automatically convert HTML to Markdown when pasting and drag-and-drop from webpages. Use Ctrl/Cmd+Shift+V to paste without conversion.", "option-vim-key-bindings": "Vim key bindings", "option-vim-key-bindings-description": "Let you use Vim key bindings in the source editor.", "option-vim-key-bindings-mobile": "On mobile devices, this setting is per-device and is not synchronized through the config file.", "option-emacsy-keys": "Legacy Emacs-style key bindings for macOS", "option-emacsy-keys-description": "Allows you to use the additional Emacs-style navigation keys, which are standard on macOS, but may interfere with some key operations.", "label-confirm-enable-vim": "Confirm entering Vim mode", "label-vim-warning": "Vim mode is for efficient text editing but can be quite counter-intuitive. If you're not familiar with Vim, this option might make it look like Obsidian has stopped working.", "label-vim-test": "To verify that you know your way around Vim, please enter the command to quit Vim without saving below:", "label-vim-your-answer": "Your answer", "placeholder-enter-command": "Enter command...", "button-confirm-enable-vim": "Let me enable Vim", "msg-vim-mode-enabled": "Command is correct. Vim mode now enabled.", "msg-vim-mode-not-enabled": "Command is incorrect. Vim mode remains disabled to protect you.", "msg-vim-mode-please-enter-command": "Please enter the command to enable Vim mode", "option-legacy-editor": "Use legacy editor", "option-legacy-editor-description2": "The legacy editor will be deprecated soon. It is currently no longer maintained, and as such, bugs will no longer be addressed.", "label-legacy-deprecation": "New editor is here", "label-legacy-deprecation-1": "Obsidian now has a brand new editor that's more robust and accessible.", "label-legacy-deprecation-2": "It seems you're still using the legacy editor, and we think you'll enjoy the new editor.", "label-legacy-deprecation-choice": "Which mode would you like to use?", "label-live-preview-description": "A more modern, what-you-see-is-what-you-get experience.", "label-source-mode-description": "See raw Markdown with syntax highlighting.", "button-start-new-editor": "Start new editor" }, "file": { "name": "File", "option-confirm-file-deletion": "Confirm file deletion", "option-confirm-file-deletion-description": "Whether you want to get prompted to confirm file deletion.", "option-delete-destination": "Deleted files", "option-delete-destination-description": "What to do with files after you delete them.", "option-choice-system-trash": "Move to system trash", "option-choice-vault-trash": "Move to Obsidian trash (.trash folder)", "option-choice-permanent-delete": "Permanent delete", "option-always-update-links": "Always update internal links", "option-always-update-links-description": "Whether to automatically update links after renaming a file or prompt.", "option-new-note-location": "New note default location", "option-new-note-location-description": "Where to put newly created notes. Plugin settings will override this.", "option-choice-vault-root": "Vault root", "option-choice-current-folder": "Same folder as the file is in", "option-choice-specified-folder": "In the folder specified below", "option-new-file-folder-path": "Folder to create new notes in", "option-new-file-folder-path-description": "Newly created notes will appear under this folder. Plugin settings will override this.", "option-use-wiki-links": "Use [[Wikilinks]]", "option-use-wiki-links-description": "Auto-generate Wikilinks for [[links]] and ![[images]] instead of Markdown links and images. Disable this option to generate Markdown links instead.", "option-show-unsupported-files": "Detect all file extensions", "option-show-unsupported-files-description": "Show files with any extension even if Obsidian can't open them natively, so that you can link to them and see them in File Explorer and Quick Switcher.", "option-link-autocompleted-format": "New link format", "option-link-autocompleted-format-description": "What links to insert when auto generating internal links.", "option-choice-shortest-linktext": "Shortest path when possible", "option-choice-relative-path": "Relative path to file", "option-choice-absolute-path": "Absolute path in vault", "option-new-attachment-location": "Default location for new attachments", "option-new-attachment-location-description": "Where newly added attachments are placed.", "option-choice-subdirectory": "In subfolder under current folder", "option-attachment-folder-path": "Attachment folder path", "option-attachment-folder-path-description": "Newly created attachment files will appear here. That includes images created via drag and drop or pasting, and audio recordings.", "option-attachment-subfolder-path": "Subfolder name", "option-attachment-subfolder-path-description": "If your file is under \"vault/folder\", and you set subfolder name to \"attachments\", attachments will be saved to \"vault/folder/attachments\".", "option-attachment-subfolder-path-placeholder": "attachments", "option-excluded-files": "Excluded files", "option-excluded-files-desc": "Excluded files will be either hidden or less noticeable in various places, such as Quick Switcher, link suggestion, and Graph View.", "label-no-excluded-filters-applied": "No excluded filter is applied right now. Add one below.", "label-excluded-filters-applied": "Files matching the following filters are currently excluded:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Enter path or \"/regex/\"..." }, "appearance": { "name": "Appearance", "option-base-theme": "Base theme", "option-base-theme-description": "Choose Obsidian’s default color scheme.", "option-accent-color": "Accent color", "option-accent-color-description": "Choose the accent color used throughout the app.", "dark-theme": "Dark", "light-theme": "Light", "system-theme": "Adapt to system", "option-font": "Font", "option-advanced": "Advanced", "option-interface-font": "Interface font", "option-interface-font-description": "Set base font for all of Obsidian.", "option-text-font": "Text font", "option-text-font-description": "Set font for editing and reading views.", "option-monospace-font": "Monospace font", "option-monospace-font-description": "Set font for places like code blocks and frontmatter.", "label-single-font-currently-in-effect": " Currently applied font: ", "label-multiple-fonts-currently-in-effect": " The following fonts are currently applied:", "option-font-placeholder": "Enter font name...", "label-no-custom-font-set": "No custom font is applied right now. Add one below.", "label-font-applied": "The first font from this list that is available on your system will be applied.", "msg-font-not-found": "This font is not detected on your system.", "msg-font-found": "This font is detected on your system.", "label-font-name": "Font name", "option-community-themes": "Open community themes", "option-community-themes-description": "Preview and use amazing themes created by the community.", "button-browse-community-themes": "Browse", "option-font-size": "Font size", "option-font-size-description": "Font size in pixels that affects editor and preview.", "option-font-size-action": "Quick font size adjustment", "option-font-size-action-description": "Adjust the font size using Ctrl + Scroll, or using the trackpad pinch-zoom gesture.", "option-themes": "Themes", "option-manage-themes-description": "Manage installed themes and browse community themes.", "option-theme-button-manage": "Manage", "option-choice-none": "None", "option-native-menus": "Native menus", "option-native-menus-desc": "Menus throughout the app will match the operating system. They will not be affected by your theme.", "button-reload-themes": "Reload themes", "msg-reloaded-themes": "Reloaded custom CSS themes.", "button-open-themes-folder": "Open themes folder", "option-css-snippets": "CSS snippets", "label-no-css-snippets-found": "No CSS snippets found.", "no-snippet-description": "CSS Snippets are stored in \"{{path}}\".", "button-reload-snippets": "Reload snippets", "button-open-snippets-folder": "Open snippets folder", "msg-reloaded-snippets": "Reloaded CSS snippets.", "option-toggle-snippet-description": "Apply CSS snippet at \"{{path}}\".", "label-installed-themes": "Installed themes", "label-screenshot-unavailable": "Screenshot unavailable", "label-default-theme": "Default", "tooltip-click-to-enlarge": "Click to enlarge", "button-update": "Update", "label-currently-selected": "Selected", "option-frame-style": "Window frame style", "option-frame-description": "Determines the styling of the title bar of Obsidian windows. Requires a full restart to take effect.", "option-frame-hidden": "Hidden (default)", "option-frame-obsidian": "Obsidian frame", "option-frame-native": "Native frame", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Show tab title bar", "option-show-view-header-desc": "Display the header at the top of every tab.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "button-check-for-updates": "Check for updates", "button-view-updates": "View updates", "button-update-all-themes": "Update all", "label-current-themes": "Current community themes", "label-currently-installed": "You currently have {{count}} theme installed.", "label-currently-installed_plural": "You currently have {{count}} themes installed." }, "hotkeys": { "name": "Hotkeys", "prompt-filter": "Filter...", "tooltip-delete-hotkey": "Delete hotkey", "label-waiting-for-hotkey-press": "Press hotkey...", "tooltip-restore-default": "Restore default", "tooltip-customize-command": "Customize this command", "tooltip-hotkey-single-conflict": "This hotkey conflicts with \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "This hotkey conflicts with {{count}} other commands", "label-blank-hotkey": "Blank" }, "about": { "name": "About", "label-commercial-license": "Commercial license", "label-license-key": "License key", "license-key-placeholder": "Your license key...", "label-activate-license": "Activate license", "button-activate": "Activate", "label-unknown-version": "Unknown", "label-current-version": "Current version: ", "label-install-version": "(Installer version: {{version}})", "label-up-to-date": "Your app is up to date!", "label-read-changelog": "Read the changelog.", "label-manual-update-required": "To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.", "label-download": "Download", "label-new-version-ready": "A new version is ready to be installed. ", "label-relaunch-to-update": "Relaunch the app to update.", "label-disabled-updates": "Updates are disabled.", "label-checking-for-updates": "Checking for updates...", "button-relaunch": "Relaunch", "button-check-for-updates": "Check for updates", "option-auto-update": "Automatic updates", "option-auto-update-description": "Turn this off to prevent the app from checking for updates.", "option-get-help": "Get help", "option-get-help-description": "Get help on using Obsidian.", "button-open": "Open", "option-language": "Language", "option-language-description": "Change the display language.", "option-insider-build": "Receive insider builds", "option-insider-build-description": "Auto-update to insider builds to try out new features. Note that these builds are bleeding edge and might be less stable.", "option-advanced": "Advanced", "option-hw-acceleration": "Hardware Acceleration", "option-hw-acceleration-description": "Turns on Hardware Acceleration, which uses your GPU to make Obsidian smoother.", "option-hw-acceleration-warning": "If you turn this off, app performance will be severely degraded.", "option-config-location": "Override config folder", "option-config-location-description": "Use a different config folder than the default one. Must start with a dot.", "option-config-location-warning": "Config location must be a valid folder name that starts with a dot.", "label-license": "License", "label-your-commercial-license-key": "Your commercial license key is \"{{key}}\".", "label-commercial-license-info": "Registered to \"{{company}}\" for {{seats}} users. Valid until {{expiry}}.", "label-validating-commercial-license": "Validating...", "label-invalid-commercial-license": "License invalid: ", "button-remove-commercial-license": "Remove", "option-catalyst": "Catalyst license", "option-catalyst-desc": "You currently have the {{tier}} Catalyst license. Thanks for your support!", "option-catalyst-desc-no-license": "You don't have a Catalyst license right now. Catalyst license is a one-time donation to support Obsidian development.", "label-app": "App" }, "account": { "name": "Account", "option-your-account": "Your account", "option-your-account-desc": "You're currently signed in {{name}} ({{email}}).", "option-your-account-desc-no-login": "You're not logged in right now. An account is only needed for Obsidian Sync, Obsidian Publish, and Catalyst insider builds.", "button-manage-settings": "Manage settings", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Commercial license", "option-commercial-license-desc": "If you use Obsidian for commercial purpose, you may need to get a commercial license.", "button-purchase": "Purchase", "button-log-out": "Log out", "label-log-in": "Log in", "label-sign-up": "Sign up", "label-email": "Email", "placeholder-email": "Your email...", "label-password": "Password", "placeholder-password": "Your password...", "button-login": "Login", "message-empty-email": "Email cannot be empty.", "message-invalid-email": "Email is not valid.", "message-empty-password": "Password cannot be empty.", "message-login-failed": "Login failed, please double check your email and password.", "label-no-account": "Don't have an account? ", "link-sign-up-now": "Sign up now" }, "core-plugin": { "plugin-list": "Plugin list", "option-search-plugin": "Search core plugins", "option-search-plugin-description": "Filter plugins by name or description.", "placeholder-search-plugin": "Search plugins..." }, "third-party-plugin": { "name": "Community plugins", "option-restricted-mode": "Restricted mode", "option-restricted-mode-description": "Restricted mode is off. Turn on to disable community plugins.", "button-turn-on": "Turn on", "option-browse-community-plugins": "Community plugins", "option-browse-community-plugins-description": "Browse and install third-party plugins made by our amazing community.", "button-browse": "Browse", "label-exit-restricted-mode": "Exit Restricted Mode", "label-exit-restricted-mode-description-1": "Community plugins, like any other software you install, could potentially cause data integrity and security issues.", "label-exit-restricted-mode-description-2": "Plugin security is important to us. Here's what we do:", "label-exit-restricted-mode-description-3": "Despite our efforts, there is still a small chance that a community plugin might misbehave.", "label-code-review": "Initial code review", "label-code-review-desc": "Plugins undergo an initial code review by our team before they appear in the store.", "label-open-source": "Open source", "label-open-source-desc": "Most plugins are open source on GitHub, so you can inspect the code yourself.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We have a large community of developers who watch out for each other.", "label-report-mechanism": "Report mechanism", "label-report-mechanism-desc": "We follow up and remove faulty plugins upon user report.", "label-exit-restricted-mode-disable-confirmation": "Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.", "label-learn-more": "Learn more about plugin security", "button-turn-on-community-plugins": "Turn on community plugins", "label-trust-author": "Do you trust the author of this vault?", "label-trust-author-description-1": "You're opening this vault for the first time, and it comes with some plugins.", "label-trust-author-description-2": "If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.", "label-trust-author-description-3": "If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.", "button-enable-plugins": "Trust author and enable plugins", "button-dont-trust-author": "Browse vault in Restricted Mode", "placeholder-community-plugins": "Search community plugins...", "msg-failed-load-plugins": "Failed to load community plugins.", "label-installed": "Installed", "button-install": "Install", "button-enable": "Enable", "button-disable": "Disable", "button-copy-share-link": "Copy share link", "button-donate": "Donate", "label-no-results-found": "No results found.", "msg-failed-to-load-manifest": "Failed to load plugin manifest.", "label-version": "Version: {{version}}", "label-currently-installed-version": " (currently installed: {{version}})", "label-by-author": "By ", "label-repository": "Repository: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "This plugin does not support your device.", "button-update": "Update", "label-no-readme": "This plugin did not provide a README file.", "msg-installing-plugin": "Installing plugin \"{{name}}\"...", "msg-failed-to-install-plugin": "Failed to install plugin \"{{name}}\".", "msg-successfully-installed-plugin": "Successfully installed plugin \"{{name}}\".", "label-installed-plugins": "Installed plugins", "button-reload-plugins": "Reload plugins", "msg-reloaded-third-party-plugins": "Reloaded third-party plugins.", "label-uninstall": "Uninstall", "label-uninstall-plugin": "Uninstall plugin", "label-uninstall-plugin-confirmation": "Are you sure you want to uninstall this plugin? This will delete the folder of the plugin.", "button-open-plugins-folder": "Open plugins folder", "button-check-for-updates": "Check for updates", "button-update-all-plugins": "Update all", "label-current-plugins": "Current plugins", "label-currently-installed": "You currently have {{count}} plugin installed.", "label-currently-installed_plural": "You currently have {{count}} plugins installed.", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Show a message with how long each plugin took to initialize when starting the app.", "msg-no-updates-found": "No plugin updates found.", "msg-updates-found": "Found {{count}} plugin to update.", "msg-updates-found_plural": "Found {{count}} plugins to update.", "msg-update-plugin": "Update to version {{version}}", "option-search-installed-plugin": "Search installed plugins", "option-search-installed-plugin-description": "Filter installed plugins by name or description.", "placeholder-search-installed-plugin": "Search installed plugins...", "show-installed-only": "Show installed only", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "Showing {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Mobile toolbar", "option-configure-quick-action": "Configure mobile Quick Action", "option-configure-quick-action-description": "Configure which command to trigger when pull down from the top. The current command is set to \"{{command}}\".", "button-configure": "Configure", "placeholder-select-quick-action": "Select Quick Action...", "manage-toolbar-options": "Manage toolbar options", "option-internal-link": "Add internal link", "option-internal-embed": "Add embed", "option-tag": "Add tag", "option-heading": "Toggle heading", "option-strikethrough": "Toggle strikethrough", "option-highlight": "Toggle highlight", "option-code": "Toggle code", "option-blockquote": "Toggle blockquote", "option-markdown-link": "Add Markdown link", "option-bullet-list": "Toggle bullet list", "option-numbered-list": "Toggle numbered list", "option-indent-list": "Indent list item", "option-unindent-list": "Unindent list item", "option-undo": "Undo", "option-redo": "Redo", "option-move-caret-up": "Move caret up", "option-move-caret-down": "Move caret down", "option-move-caret-left": "Move caret left", "option-move-caret-right": "Move caret right", "option-first-line": "Go to first line", "option-last-line": "Go to last line", "option-toggle-keyboard": "Toggle keyboard", "option-configure-toolbar": "Configure mobile toolbar", "option-added-options": "Added options", "option-more-toolbar-options": "More toolbar options", "option-attach": "Insert attachment", "option-add-command": "Add global command", "option-add-command-description": "Select any global command to add to the toolbar." } }, "editor": { "search": { "placeholder-find": "Find", "placeholder-replace": "Replace", "label-previous": "Prev", "label-next": "Next", "label-all": "All", "label-exit-search": "Exit search", "label-replace": "Replace", "label-replace-all": "Replace all" }, "link-suggestion": { "label-type-hash": "Type #", "label-link-heading": "to link heading", "label-type-block": "Type ^", "label-link-block": "to link blocks", "label-type-pipe": "Type |", "label-change-display-text": "to change display text", "label-no-match-found": "No match found" }, "spellcheck": { "no-suggestion": "No suggestions...", "add-to-dictionary": "Add to dictionary" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "No heading", "label-heading-level": "Heading {{level}}" }, "print-modal": { "title": "Export to PDF", "caption": "Export \"{{filename}}\" to PDF with the settings below.", "setting-page-size": "Page size", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Include file name as title", "setting-landscape": "Landscape", "setting-margin": "Margin", "setting-margin-default": "Default", "setting-margin-minimal": "Minimal", "setting-margin-none": "None", "setting-downscale-percent": "Downscale percent", "button-export-to-pdf": "Export to PDF" }, "link-popover": { "tooltip-follow-link": "Follow link", "tooltip-open-link": "Open link", "tooltip-search-tag": "Search tag" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Open in default app", "empty-sidebar": "The sidebar is empty, try dragging a pane here.", "sidebar-expand": "Expand", "sidebar-collapse": "Collapse", "msg-fail-to-save-file": "Failed to save file \"{{filepath}}\". {{message}}.", "no-file": "No file", "msg-file-changed": "\"{{file}}\" has been modified externally, merging changes automatically.", "switch-vault": "Open another vault", "help": "Help", "settings": "Settings", "drag-to-rearrange": "Drag to rearrange", "msg-switched-to-read": "Switched default view mode to reading view.", "msg-switched-to-edit": "Switched default view mode to editor.", "msg-upgrade-installer": "To use this feature, please re-install with latest installer available from our website.", "tooltip-restore-default-settings": "Restore default settings", "label-copy": "Copy to clipboard", "copied_generic": "Copied to your clipboard", "copied": "{{item}} copied to your clipboard", "url": "Url", "msg-open-file-through-uri": "Opened file \"{{path}}\"", "msg-file-not-found-through-uri": "File \"{{name}}\" not found.", "delete-action-short-name": "Delete", "msg-indexing": "Obsidian is indexing your vault...\nThis should only happen once.\nSome functionality may not be available until this is complete.", "msg-indexing-complete": "Indexing complete.", "msg-sandbox-vault": "This is a sandbox vault.\nChanges you make in this vault will be lost.", "label-enter-to-create": "Enter to create", "label-update-available": "Update Available", "label-debug-info": "Debug info", "button-learn-more": "Learn more", "button-not-now": "Not now", "button-add": "Add", "button-manage": "Manage", "label-new-tab": "New tab", "msg-tab-busy": "This tab is currently busy, please try again later", "empty-state": { "no-file-open": "No file is open", "create-new-file": "Create new file", "go-to-file": "Go to file", "see-recent-files": "See recent files", "close": "Close", "unknown-pane-title": "Plugin no longer active", "unknown-pane-desc": "The plugin that created this pane ({{type}}) has gone away" }, "menu": { "edit-view": "Edit (Ctrl/Cmd+Click to edit in new pane)", "read-view": "Current view: reading", "switch-to-edit-view": "Click to edit", "switch-to-read-view": "Click to read", "mod-click-open-new-tab": "{{key}}+Click to open in new tab", "find": "Find...", "replace": "Replace...", "edit": "Edit", "preview": "Preview", "more-options": "More options", "close": "Close", "close-others": "Close others", "close-right": "Close tabs to the right", "pin": "Pin", "unpin": "Unpin", "unlink-tab": "Unlink tab", "link-tab": "Link with tab...", "toggle-source-mode": "Source mode", "toggle-reading-view": "Reading view", "delete-file": "Delete file", "create-file": "Create this file", "open-link": "Open link", "open-in-new-tab": "Open in new tab", "open-to-the-right": "Open to the right", "copy-url": "Copy url", "close-current-tab": "Close current tab", "copy": "Copy", "cut": "Cut", "paste": "Paste", "paste-as-plain-text": "Paste as plain text", "select-all": "Select all", "rename-heading": "Rename this heading...", "rename-blockid": "Rename this block ID...", "open-in-new-window": "Open in new window", "move-to-new-window": "Move to new window", "open-in-browser": "Open in browser", "stack-tabs": "Stack tabs", "unstack-tabs": "Unstack tabs" }, "tooltip": { "click-to-expand": "Click to expand", "click-to-collapse": "Click to collapse", "alias": "Alias", "not-created-yet": "Not created yet, select to create" }, "start-screen": { "label-version": "Version", "option-open-folder-as-vault": "Open folder as vault", "option-open-folder-as-vault-description": "Choose an existing folder of Markdown files.", "option-create-vault": "Create new vault", "option-create-vault-description": "Create a new Obsidian vault under a folder.", "option-connect-obsidian-sync": "Connect to Obsidian Sync", "option-connect-obsidian-sync-description": "Set up a synced vault with existing remote vault.", "option-new-vault-name": "Vault name", "option-new-vault-name-description": "Pick a name for your awesome vault.", "option-new-vault-location": "Location", "option-new-vault-location-description": "Pick a place to put your new vault.", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Reveal vault in system explorer", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "Rename vault...", "msg-error-rename-exists": "There is already a vault with this name.", "msg-error-nested": "Cannot move vault into a subfolder of itself.", "msg-error-rename-open": "Can't rename a currently open vault.", "msg-rename-failed": "Failed to rename vault.", "msg-rename-success": "Successfully renamed vault.", "option-move-vault": "Move vault...", "msg-move-select-dest": "Select destination folder", "msg-error-move-exists": "There is already a vault at the destination.", "msg-error-move-open": "Can't move a currently open vault.", "msg-move-failed": "Failed to move vault.", "msg-move-success": "Successfully moved vault.", "option-remove": "Remove from list", "button-quick-start": "Quick start", "button-open": "Open", "button-browse": "Browse", "button-connect": "Connect", "button-create-vault": "Create", "button-back": "Back", "msg-empty-vault-name": "Vault name cannot be empty.", "msg-invalid-folder": "Please pick a valid folder.", "msg-failed-to-create-vault": "Failed to create vault.", "msg-failed-to-create-vault-at-location": "Could not create vault at the given location. Please double check the location and permission.", "msg-error-failed-to-open-vault": "Failed to open.", "msg-error-remove-current-open-vault": "Can't remove a currently open vault.", "option-get-help": "Get Help", "option-user-email": "Email", "placeholder-your-email": "Your email...", "option-user-password": "Password", "placeholder-your-password": "Your password...", "button-sign-in": "Sign in", "button-setup": "Setup", "option-connect-vault-desc": "Create a synced vault on this device.", "tooltip-own-vault": "This is a remote vault owned by you.", "tooltip-shared-vault": "This is a remote vault shared with you." }, "drag-and-drop": { "insert-link-here": "Insert link here", "insert-links-here": "Insert links here", "move-into-folder": "Move into \"{{folder}}\"", "star-this-file": "Star this file", "star-these-files": "Star these files", "open-in-this-tab": "Open in this tab", "open-as-tab": "Open as new tab" }, "window": { "maximize": "Maximize", "minimize": "Minimize", "restore-down": "Restore down", "close-window": "Close window", "go-back": "Go back", "go-forward": "Go forward" }, "start-up": { "loading-obsidian": "Loading Obsidian...", "obsidian-load-error": "An error occurred while loading Obsidian.", "button-reload-app": "Reload app", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "Open another vault", "loading-components": "Loading components...", "loading-plugins": "Loading plugins...", "loading-vault": "Loading vault...", "msg-failed-to-load-vault": "Failed to load vault: ", "loading-cache": "Loading cache...", "loading-workspace": "Loading workspace..." }, "mobile": { "action-import": "Import into vault", "action-choose-file-to-insert": "Choose a file to insert", "action-insert-text-into-file": "Insert text into {{filename}}", "action-insert-link-into-file": "Insert link into {{filename}}", "msg-importing": "Importing...", "msg-import-success": "Import success", "msg-failed-to-import-file": "Failed to import file {{filename}}", "msg-back-again-to-exit": "Press back again to exit." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "Save current file", "follow-cursor-link": "Follow link under cursor", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "Toggle pin", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "Navigate back", "navigate-forward": "Navigate forward", "use-dark-mode": "Use dark mode", "use-light-mode": "Use light mode", "change-theme": "Change theme", "search-current-file": "Search current file", "search-replace-current-file": "Search & replace in current file", "open-settings": "Open settings", "open-help": "Open help", "toggle-edit": "Toggle editing/reading view", "toggle-source-mode": "Toggle Live Preview/Source mode", "delete-current-file": "Delete current file", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "Toggle left sidebar", "toggle-right-sidebar": "Toggle right sidebar", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "Focus on editor", "toggle-fold": "Toggle fold on the current line", "fold-all": "Fold all headings and lists", "unfold-all": "Unfold all headings and lists", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "Swap line up", "swap-line-down": "Swap line down", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "Toggle bold for selection", "toggle-italics": "Toggle italics for selection", "toggle-highlight": "Toggle highlight for selection", "toggle-comments": "Toggle comments for selection", "insert-link": "Insert link", "toggle-spellcheck": "Toggle spellcheck", "delete-paragraph": "Delete paragraph", "toggle-checklist": "Toggle checklist status", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "Edit file title", "copy-path": "Copy file path", "copy-url": "Copy obsidian url", "export-pdf": "Export to PDF", "reload": "Reload app without saving", "undo-close-tab": "Undo close tab", "context-menu": "Show context menu under cursor", "show-debug-info": "Show debug info", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "Toggle edit/preview mode", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "This will affect {{links}} in {{files}}.", "msg-updated-links": "Updated {{links}} in {{files}}.", "label-update-links": "Update links", "label-confirm-update-link-to-file": "Do you want to update internal links that link to this file?", "button-always-update": "Always update", "button-just-once": "Just once", "button-do-not-update": "Do not update", "label-confirm-deletion": "Are you sure you want to delete \"{{filename}}\"?", "label-move-to-system-trash": "It will be moved to your system trash.", "label-move-to-vault-trash": "It will be moved to your Obsidian trash, which is located in the \".trash\" hidden folder in your vault.", "label-permanent-delete": "The file will be permanent deleted.", "label-non-empty-folder": "This folder is not empty.", "label-delete-folder-warning": "If you continue, all files inside this folder will be deleted.", "label-delete-folder": "Delete folder", "button-delete": "Delete", "button-delete-do-not-ask-again": "Delete and don't ask again", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "There are currently {{links}} pointing to this note.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "Delete file", "button-manage": "Manage", "button-cancel": "Cancel", "button-done": "Done", "button-save": "Save", "button-stop": "Stop", "button-continue": "Continue", "preparing-pdf": "Preparing PDF...", "label-rename-file": "Rename file", "label-new-name": "New name", "msg-rename-success": "Successfully renamed file.", "label-rename-heading": "Rename heading", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "Plugins", "file-explorer": { "name": "File explorer", "desc": "See all the files in your vault.", "action-open": "Open file explorer", "action-show": "Show file explorer", "action-create-note": "Create new note", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "New note", "action-new-folder": "New folder", "action-change-sort": "Change sort order", "action-reveal-file": "Reveal file in file explorer", "action-reveal-active-file": "Reveal active file in file explorer", "command-move-file": "Move file to another folder", "action-move-file": "Move file to...", "action-move-folder": "Move folder to...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "Type a folder", "label-no-folders": "No folders found.", "instruction-navigate": "to navigate", "instruction-move": "to move", "instruction-dismiss": "to dismiss", "label-sort-a-to-z": "Sort by file name (A to Z)", "label-sort-z-to-a": "Sort by file name (Z to A)", "label-sort-new-to-old": "Sort by edit time (new to old)", "label-sort-old-to-new": "Sort by edit time (old to new)", "label-sort-created-old-to-new": "Created time (old to new)", "label-sort-created-new-to-old": "Created time (new to old)", "menu-opt-new-note": "New note", "menu-opt-new-folder": "New folder", "menu-opt-set-attachment-folder": "Set as attachment folder", "menu-opt-rename": "Rename", "menu-opt-delete": "Delete", "menu-opt-make-copy": "Make a copy", "msg-invalid-characters": "File name cannot contain any of the following characters: ", "msg-unsafe-characters": "Links will not work with file names containing any of these characters: ", "msg-file-already-exists": "There's already a file with the same name", "msg-empty-file-name": "File name cannot be empty.", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "Last modified at {{time}}", "tooltip-created-time": "Created at {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Move", "label-untitled-file": "Untitled", "label-untitled-folder": "Untitled", "msg-set-attachment-folder": "Attachments will be saved to \"{{path}}\" from now on." }, "search": { "name": "Search", "desc": "Search for keyword in all the notes.", "action-open-search": "Search in all files", "label-collapse-results": "Collapse results", "label-match-case": "Match case", "label-explain-search-term": "Explain search term", "label-more-context": "Show more context", "prompt-start-search": "Type to start search...", "label-match-text": "Matches text: ", "label-match-regex": "Matches regex: ", "label-match-exact-text": "Contains exact text: ", "label-match-all": "Match all of: ", "label-match-any": "Match any of: ", "label-excluding": "Excluding: ", "label-case-sensitive": "Case sensitive", "label-case-insensitive": "Case insensitive", "label-match-file-path": "Match file path: ", "label-match-file-name": "Match file name: ", "label-match-content": "Match file content: ", "label-match-task": "Match task: ", "label-match-task-todo": "Match task (todo): ", "label-match-task-done": "Match task (done): ", "label-match-line": "Match line: ", "label-match-block": "Match block: ", "label-match-section": "Match section: ", "label-match-tag": "Match tag: ", "label-no-matches": "No matches found.", "matches-with-count": "... and {{count}} more match.", "matches-with-count_plural": "... and {{count}} more matches.", "label-copy-search-results": "Copy search results", "button-copy-results": "Copy results", "msg-successfully-copied": "Results copied to your clipboard.", "option-show-path": "Show path", "option-show-path-description": "Display full path of the file rather than just the file name.", "option-link-style": "Link style", "option-link-style-description": "Optionally turn each file result in to a link.", "option-choice-link-style-none": "None", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Markdown link", "option-list-prefix": "List prefix", "option-list-prefix-description": "Optionally add a list item prefix to each file result.", "option-choice-list-style-none": "None", "option-choice-list-style-dash": "Dash (-)", "option-choice-list-style-asterisk": "Asterisk (*)", "option-choice-list-style-numbered": "Numbered", "tooltip-clear-search": "Clear search", "label-search-options": "Search options", "tooltip-read-more": "Read more", "label-history": "History", "tooltip-clear-history": "Clear search history", "label-path-option-description": "match path of the file", "label-file-name-option-description": "match file name", "label-tag-option-description": "search for tags", "label-line-option-description": "search keywords on same line", "label-section-option-description": "search keywords under same heading", "menu-opt-search-for": "Search for \"{{keyword}}\"" }, "quick-switcher": { "name": "Quick switcher", "desc": "Jump to any files without leaving your keyboard. Ctrl/Cmd+O to activate.", "short-name": "Switcher", "action-open": "Open quick switcher", "instruction-navigate": "to navigate", "instruction-open": "to open", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "to create", "instruction-dismiss": "to dismiss", "label-no-note-create-new": "No notes found. Enter to create a new one.", "prompt-type-file-name": "Type file to switch to or create...", "label-enter-to-create": "Enter to create", "tooltip-not-created-yet": "Not created yet, select to create", "option-show-existing-only": "Show existing only", "option-show-existing-only-description": "Only show results from existing files. Links to files that are not yet created will be hidden.", "option-show-attachments": "Show attachments", "option-show-attachments-desc": "Show attachment files like images, videos, and PDFs.", "option-show-all-file-types": "Show all file types", "option-show-all-file-types-desc": "Show all files including ones that Obsidian can't open. The file will be opened with the default app for that file type." }, "graph-view": { "name": "Graph view", "desc": "See a graph overview of which notes link to which.", "action-open": "Open graph view", "action-open-local": "Open local graph", "action-copy-screenshot": "Copy screenshot", "tab-title": "Graph of {{displayText}}", "label-filters": "Filters", "prompt-filter-nodes": "Search files...", "option-depth": "Depth", "option-depth-description": "Show nodes this number of links away", "option-neighbor-links": "Neighbor links", "option-neighbor-links-description": "Show links between neighbors", "option-forelinks": "Outgoing links", "option-forelinks-description": "Show links to other files", "option-backlinks": "Incoming links", "option-backlinks-description": "Show links from other files", "option-show-tags": "Tags", "option-show-tags-description": "Tags are linked to the files that contain them", "option-show-attachments": "Attachments", "option-show-attachments-description": "Show attachments", "option-show-existing-files-only": "Existing files only", "option-show-existing-files-only-description": "When enabled, links to nonexistent files are not shown", "option-show-orphans": "Orphans", "option-show-orphans-description": "Show files that are not linked to any other file", "label-display": "Display", "option-show-arrows": "Arrows", "option-show-arrows-description": "Show arrows when zoomed in", "option-text-fade": "Text fade threshold", "option-node-size": "Node size", "option-link-thickness": "Link thickness", "label-forces": "Forces", "option-center-force": "Center force", "option-link-force": "Link force", "option-link-distance": "Link distance", "option-repel-force": "Repel force", "tooltip-open-graph-settings": "Open graph settings", "msg-screenshot-copied": "Screenshot copied to the clipboard.", "label-groups": "Groups", "placeholder-enter-query": "Enter query...", "tooltip-delete-graph": "Delete group", "button-new-group": "New group", "tooltip-click-to-change-drag-to-reorder": "Click to change color\nDrag to reorder groups", "action-timelapse": "Start graph timelapse animation", "tooltip-start-timelapse-animation": "Start timelapse animation", "button-animate-timelapse": "Animate" }, "backlinks": { "name": "Backlinks", "desc": "Show number of backlinks in the status bar.", "action-open": "Open backlinks", "action-show": "Show backlinks pane", "action-open-for-current": "Open backlinks for the current file", "action-toggle-backlinks-in-document": "Toggle backlinks in document", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "Linked mentions", "label-no-backlinks": "No backlinks found.", "label-unlinked-mentions": "Unlinked mentions", "label-show-search": "Show search filter", "label-link-button-text": "Link", "tab-title": "Backlinks for {{displayText}}", "label-no-unlinked-mentions": "No unlinked mentions found.", "ellipsis": "...", "option-backlink-in-document": "Backlink in document", "option-backlink-in-document-desc": "Show backlinks in document by default when opening new panes." }, "outgoing-links": { "name": "Outgoing Links", "desc": "Show outgoing links and detect unlinked mentions of other notes in the current note.", "action-open": "Open outgoing links", "action-show": "Show outgoing links pane", "action-open-for-current": "Open outgoing links for the current file", "tab-title": "Outgoing links from {{displayText}}", "label-links": "Links", "label-no-links": "No links found.", "label-unlinked-mentions": "Unlinked mentions", "tooltip-link-file": "Link this file", "tooltip-not-created": "Not created yet" }, "tag-pane": { "name": "Tag pane", "desc": "Displays all your tags and along with their number of occurrences.", "action-show": "Show tag pane", "label-no-tags": "No tags found.", "label-sort-by-name-a-to-z": "Tag name (A to Z)", "label-sort-by-name-z-to-a": "Tag name (Z to A)", "label-sort-by-frequency-high-to-low": "Frequency (high to low)", "label-sort-by-frequency-low-to-high": "Frequency (low to high)", "action-show-nested-tags": "Show nested tags", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "Page preview", "desc": "Preview a note when hovering an internal link. Ctrl/Cmd + hover in editor mode.", "label-empty-note": "\"{{linktext}}\" is not created yet. Click to create.", "label-source-editor": "Editor", "label-source-preview": "Preview", "label-source-search": "Search, Backlinks, and Outgoing links", "label-require-mod": "Require {{key}} to trigger page preview on hover" }, "starred": { "name": "Starred", "desc": "Star frequently used files and searches.", "action-show": "Show starred pane", "action-toggle": "Star/unstar current file", "action-toggle-search": "Star/unstar current search", "action-star": "Star", "action-unstar": "Unstar", "menu-opt-remove": "Remove", "msg-successfully-starred": "Successfully starred {{type}} \"{{title}}\".", "msg-removed-starred": "Removed starred {{type}} \"{{title}}\".", "msg-cannot-find-path": "Cannot find file at \"{{path}}\"." }, "custom-css": { "name": "Custom CSS", "desc": "Reads \"obsidian.css\" in the vault and applies it.", "setting-community-themes": "Community themes", "msg-fetching-themes": "Fetching community theme data...", "prompt-filter": "Filter...", "label-dark-theme-only": "Dark themes only", "label-light-theme-only": "Light themes only", "label-use": "Use", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "Update", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "Remove theme", "label-visit-on-github": "Visit on GitHub", "msg-load-error": "Could not load community themes, please check your network.", "msg-now-using-theme": "You're now using {{title}} as your CSS theme.", "msg-deleted-theme": "The theme {{title}} has been deleted.", "msg-updated-theme": "The theme {{title}} has been updated.", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "Command palette", "desc": "Type a command to invoke it. No need to use the UI or remember the shortcut.", "action-open": "Open command palette", "instruction-navigate": "to navigate", "instruction-use": "to use", "instruction-dismiss": "to dismiss", "label-no-commands": "No commands found.", "prompt-type-command": "Type a command...", "label-pinned-commands": "Pinned commands", "option-add-new-pin": "New pinned command", "option-add-new-pin-description": "Pinned commands will appear at the top of all commands when no search query is present." }, "markdown-format-importer": { "name": "Markdown format importer", "desc": "Convert Markdown from other apps to Obsidian format.", "action-open": "Open Markdown importer", "option-roam-tag-fixer": "Roam Research tag fixer", "option-roam-tag-fixer-description": "Converts \"#tag\" and \"#[[tag]]\" to \"[[tag]]\".", "option-roam-highlight-fixer": "Roam Research highlight fixer", "option-roam-highlight-fixer-description": "Converts \"^^highlight^^\" to \"==highlight==\".", "option-roam-todo-converter": "Roam Research TODO converter", "option-roam-todo-converter-description": "Converts \"{{[[TODO]]}}\" to \"[ ]\".", "option-bear-highlight-fixer": "Bear highlight fixer", "option-bear-highlight-fixer-description": "Converts \"::highlight::\" to \"==highlight==\".", "zettelkasten-link-fixer": "Zettelkasten link fixer", "zettelkasten-link-fixer-description": "Fixes \"[[UID]]\" links to full \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Zettelkasten link beautifier", "zettelkasten-link-beautifier-description": "Fixes \"[[UID]]\" links and also beautify them \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Warning: the importer will convert all the files in your vault, not just the current file.", "msg-override-files-warning": "Your files will be overwritten. Back up all your files before attempting conversion.", "label-start-conversion": "Start Conversion", "label-stop": "Stop", "label-go-back": "Go back", "label-done": "Done", "label-processing": "Processing...", "label-cancelling": "Cancelling...", "label-finished": "Finished!", "label-processed-files": "Processed files", "label-modified-files": "Modified files", "label-total-replacements": "Total replacements" }, "daily-notes": { "name": "Daily notes", "desc": "Open today's daily note, or create one if not present.", "short-name": "Today", "action-open": "Open today's note", "action-open-previous": "Open previous daily note", "action-open-next": "Open next daily note", "action-insert-text": "Insert text into daily note", "action-insert-link": "Insert link into daily note", "msg-fail-format": "Failed to create daily note. \"{{format}}\" is not a valid format.", "msg-fail-folder": "Failed to create daily note. Folder \"{{folderOption}}\" not found.", "msg-fail-template-file": "Failed to create daily note. Template file \"{{template}}\" not found.", "msg-no-previous": "There's no daily note before this one.", "msg-no-next": "There's no daily note after this one.", "option-date-format": "Date format", "label-refer-to-syntax": "For more syntax, refer to: ", "label-syntax-link": "format reference", "label-syntax-live-preview": "Here is what it will look like: ", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new daily note.", "option-template": "Template file location", "option-template-description": "The file path to use as template.", "option-open-on-start": "Open daily note on startup", "option-open-on-start-description": "Open your daily note automatically whenever you open this vault." }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Random note", "desc": "Opens a random note. Useful for reviewing and discovering.", "short-name": "Random", "action-open": "Open random note" }, "outline": { "name": "Outline", "desc": "Displays the outline of the current file or linked pane.", "action-open": "Open outline", "action-show": "Show outline pane", "action-open-for-current": "Open outline of the current file", "tab-title": "Outline of {{displayText}}", "label-no-headings": "No headings found." }, "word-count": { "name": "Word count", "desc": "Show word count in the status bar." }, "slides": { "name": "Slides", "desc": "Present from Markdown. Use \"---\" to separate slides.", "action-start": "Start presentation" }, "audio-recorder": { "name": "Audio recorder", "desc": "Record audio and save as attachment.", "action-start": "Start recording audio", "action-stop": "Stop recording audio", "action-toggle": "Start/stop recording", "msg-access-denied": "Microphone access was denied, please enable it from the preference pane.", "msg-pending-grant": "Please grant microphone permission to start recording.", "msg-no-microphone": "No microphone is connected." }, "open-with-default-app": { "name": "Open in default app", "desc": "Add button to open current file in the default app.", "action-open-file": "Open in default app", "action-open-file-mobile": "Share", "action-show-in-folder": "Show in folder", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "Templates", "desc": "Insert template content from a folder of template files.", "action-insert": "Insert template", "action-insert-current-date": "Insert current date", "action-insert-current-time": "Insert current time", "option-template-folder-location": "Template folder location", "option-template-folder-location-description": "Files in this folder will be available as templates.", "option-template-date-format": "Date format", "option-template-date-format-description": "{{date}} in the template file will be replaced with this value.", "option-template-date-format-description2": "You can also use {{date:YYYY-MM-DD}} to override the format once.", "option-template-time-format": "Time format", "option-template-time-format-description": "{{time}} in the template file will be replaced with this value.", "option-template-time-format-description2": "You can also use {{time:HH:mm}} to override the format once.", "instruction-navigate": "to navigate", "instruction-insert": "to insert template", "instruction-dismiss": "to dismiss", "msg-no-templates-found": "No templates found", "msg-fail-invalid-folder": "Failed to list templates. Template folder is invalid.", "msg-fail-folder-not-found": "Failed to list templates. Folder \"{{folderOption}}\" not found.", "prompt-type-template": "Type name of a template..." }, "translucency": { "name": "Translucent window", "desc": "Turn on translucency effect to enhance a sense of depth. Best used with dark mode. Not supported on Linux." }, "slash-command": { "name": "Slash commands", "desc": "Enable the ability to trigger slash commands in the editor by typing the forward slash." }, "editor-status": { "name": "Editor status", "desc": "Adds a status bar item to show and change the current editor mode.", "read": "Reading", "edit-source": "Source mode", "edit-live-preview": "Live Preview" }, "publish": { "name": "Publish", "desc": "Publish your notes through Obsidian Publish.", "action-publish-changes": "Publish changes", "label-no-internet-access": "You need access to the internet to publish changes.", "label-publish-service-description": "Obsidian Publish is an add-on paid service that lets you publish your notes online directly from Obsidian.", "label-please-login": "To start publishing, please log in or create a new Obsidian account.", "label-no-publish-subscription": "You do not have an Obsidian Publish subscription yet.", "button-purchase": "Purchase", "label-manage-sites": "Manage sites", "label-no-sites": "You don't have any sites.", "button-choose": "Choose", "tooltip-edit-site-id": "Edit site ID", "tooltip-delete-site": "Delete site", "label-delete-site-confirmation": "Are you sure you want to delete this site?", "label-delete-site-details": "This will immediately and permanently delete your site.", "label-confirm-delete-site": "Confirm delete site \"{{site}}\"", "option-site-id": "Site ID", "option-site-id-description": "Your site will be at https://publish.obsidian.md/{site id}. You can change this later. Only lower case letters, numbers, and dashes are allowed.", "option-site-id-placeholder": "Pick a site ID", "button-create": "Create", "msg-invalid-site-id": "Site ID can only contain lowercase letters, numbers, and dashes.", "msg-site-id-in-use": "This site ID is in use, please try another one.", "msg-create-site-issue": "That was an issue when creating your site.", "label-site-options": "Site options", "option-site-general": "General", "option-site-components": "Components", "option-site-appearance": "Appearance", "option-site-reading-experience": "Reading experience", "option-site-misc": "Other site settings", "option-site-name": "Site name", "option-site-name-description": "Name of your published site. It will show up in the page title of your site.", "option-site-name-placeholder": "Name of your site", "option-home-page-file": "Homepage file", "option-home-page-file-description": "The first page the user sees when landing on your published site", "option-home-page-file-placeholder": "Pick a published file", "option-logo": "Logo", "option-logo-description": "Pick an image file as your site logo.", "option-logo-placeholder": "Any any uploaded image in your vault...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "Theme", "option-theme-description": "Choose default color scheme for your site.", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "Show navigation", "option-show-navigation-description": "Display a list of all published pages on the left side of your published site.", "option-show-search": "Show search bar", "option-show-search-description": "Display a search bar at top of the navigation that lets the visitors search pages and headings on your site.", "option-show-graph": "Show graph view", "option-show-graph-description": "Display a small local graph on each page.", "option-show-outline": "Show table of contents", "option-show-outline-description": "Display the outline of headings on each page.", "option-show-backlinks": "Show backlinks", "option-show-backlinks-description": "Show backlink section at the end of each page.", "option-sliding-window-mode": "Use sliding windows", "option-sliding-window-mode-description": "Open pages in new panes to the right. Allows scrolling through panes horizontally.", "option-hover-preview-file": "Show hover preview", "option-hover-preview-file-description": "Display page preview when hovering links.", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "Readable line length", "option-readable-line-length-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-site-password": "Passwords", "option-site-password-description": "Restrict access to your site with passwords.", "option-google-analytics": "Google Analytics tracking code", "option-google-analytics-description": "Configure Google Analytics for your site. Only available for visitors from your custom domain URL. Please check with your local laws and regulations first.", "button-manage-passwords": "Manage", "button-save-site-settings": "Save site settings", "msg-updated-options": "Updated options for your site.", "button-go-back": "Back", "label-publishing-to": "Publishing to", "tooltip-switch-site": "Switch site", "button-add-linked": "Add linked", "tooltip-add-linked": "Add all files that are linked by currently selected items", "msg-added-linked-files": "{{count}} linked file has been added.", "msg-added-linked-files_plural": "{{count}} linked files have been added.", "tooltip-open-site-options": "Change site options", "label-no-changes-detected": "No changes were detected.", "label-changed-files-to-be-published": "Changed", "label-unchanged-files-already-published": "Unchanged (select to unpublish)", "label-file-selected": " selected", "button-select-all-files": "Select all", "button-deselect-all-files": "Deselect all", "label-new-files-to-be-published": "New", "button-publish": "Publish", "msg-no-permission-to-publish-to-site": "You do not have permissions to publish to the current site.", "msg-select-at-least-one-file": "Please select at least one file.", "label-upload-changes": "Upload changes", "button-done": "Done", "button-stop": "Stop", "label-status-uploading": "Uploading", "label-status-to-publish": "To publish", "label-status-to-delete": "To delete", "label-status-published": "Published", "label-status-deleted": "Deleted", "label-status-failed": "Failed", "label-status-cancelled": "Cancelled", "button-change": "Change", "label-clear-cache": "It takes up to a few minutes for the changes to show up on your site. If you do not see your latest changes, try clearing the cache in your browser.", "label-visit-site": "You can visit your site here: ", "msg-something-went-wrong": "Something went wrong. Please check the developer console for details.", "msg-network-error": "A network error occurred.", "label-manage-passwords": "Manage passwords", "label-add-password": "Add password", "action-new-password": "New password", "label-no-password": "Your site currently does not have any passwords. Anyone can visit it.", "label-have-password": "Your site is password protected. If you have multiple passwords, visitors can access your site by entering any of them.", "option-password-name": "Password", "option-password-desc": "A hash of your password will be stored securely. Once the password is set, it cannot be revealed in plaintext.", "option-password-placeholder": "Your password", "option-nickname-name": "Nickname (optional)", "option-nickname-desc": "Set a nickname to remind yourself what or who the password is for.", "action-add-password": "Add this password", "label-untitled-password": "Untitled password", "label-password-created-time": "Created {{time}}", "msg-added-new-password": "Added new password.", "option-custom-domain": "Custom domain", "option-custom-domain-desc": "Use your own domain rather than the https://publish.obsidian.md/{site id} URL.", "option-noindex": "Disallow search engine indexing", "option-noindex-desc": "Prevent search engines from indexing your site.", "button-configure": "Configure", "label-configure-custom-domain": "Configure custom domain", "option-custom-url-name": "Custom URL", "option-custom-url-desc": "The URL that your site will be located at.", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "Redirect to your custom domain", "option-custom-url-redirect-desc": "Redirect visitors on publish.obsidian.md/id to your custom domain.", "button-update-custom-domain": "Update domain setting", "label-custom-domain-instructions": "Please refer to our {{link}} on our help site for more information.", "label-custom-domain-link-name": "custom domain setup guide", "label-site-usage": "You're using {{site}} out of your {{limit}}.", "button-add-more-sites": "Buy more sites", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "Workspaces", "desc": "Save and load workspace layout.", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "Save", "button-load": "Load", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "Sync", "desc": "Synchronize your files through Obsidian Sync.", "action-view-version-history": "View version history", "label-load-more": "Load more", "label-show-diff": "Show diff", "label-copy-to-clipboard": "Copy to clipboard", "label-restore-this-version": "Restore this version", "msg-already-latest-version": "This version is already the latest version.", "msg-restored-version": "Successfully restored version from {{time}}", "label-file-deleted": "This file was deleted", "label-no-earlier-version": "There was no earlier versions of this file.", "label-empty-file": "Empty", "label-setting-files": "Setting files", "label-deleted-files": "Deleted files", "label-version-history": "Version history", "label-click-to-see-history": "Click on a deleted file to see its history.", "label-create-remote-vault": "Create remote vault", "msg-please-enter-password": "Please enter a password.", "msg-vault-name-cannot-be-empty": "Vault name cannot be empty.", "msg-successfully-created-vault": "Successfully create remote vault \"{{name}}\".", "label-remote-vault-explanation": "Remote vaults securely synchronize your vault between devices.", "option-vault-name": "Vault name", "option-vault-name-desc": "Helps you remember what this vault is for.", "option-vault-name-placeholder": "My awesome vault", "option-use-custom-encryption-password": "Customize end-to-end encryption password", "option-use-custom-encryption-password-desc": "If you turn this off, we will securely manage an encryption key for you.", "option-use-custom-encryption-password-desc-warning": "This option cannot be changed later.", "option-encryption-password": "Encryption password", "option-encryption-password-desc": "This password cannot be changed later.", "option-encryption-password-desc-warning": "If you forget this password, any remote data will remain unusable forever.", "option-encryption-password-desc-2": "This does not affect your local data.", "option-encryption-password-placeholder": "Your password", "label-enter-encryption-password": "Enter encryption password", "button-unlock-vault": "Unlock vault", "msg-verified-password": "Successfully verified your password.", "label-remote-vaults": "Your remote vaults", "label-vault-created-time": "Created {{time}}", "tooltip-delete-remote-vault": "Delete", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "Confirm delete vault", "label-confirm-delete-remote-vault-question": "Are you sure you want to delete this remote vault?", "label-confirm-delete-remote-vault-result": "All data on our server, including version history, will be deleted. Your local files will stay intact.", "label-confirm-delete-remote-vault-warning": "This action is permanent and irreversible.", "msg-remote-vault-deleted": "{{name}} has been deleted.", "button-connect-to-remote-vault": "Connect", "button-disconnect-from-remote-vault": "Disconnect", "label-not-remote-vaults": "You don't have any remote vaults.", "button-create-new-remote-vault": "Create new vault", "label-sync-log": "Sync log", "options-only-show-errors": "Errors only", "options-only-show-errors-desc": "Only show errors and hide other log items.", "button-copy-sync-log": "Copy sync log", "msg-successfully-copied-sync-log": "Successfully copied sync log.", "button-retry": "Retry", "button-purchase-subscription": "Purchase", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "Choose", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "Sync status", "option-sync-status-desc-paused": "Obsidian Sync is currently paused.", "option-sync-status-desc-running": "Obsidian Sync is currently running.", "option-device-name": "Device name", "option-device-name-desc": "This name will be displayed in the sync log. Leave empty to use the default name.", "button-resume": "Resume", "button-pause": "Pause", "option-view-deleted-files": "Deleted files", "option-view-deleted-files-desc": "View and restore deleted files.", "option-sync-log": "Sync activity", "option-sync-log-desc": "View recent sync activities for debugging.", "button-view": "View", "button-bulk-restore": "Bulk restore", "button-restore-selected-files": "Restore selected files", "msg-restoring": "Restoring...", "msg-restoring-complete": "Restore complete: {{succeeded}} succeeded and {{failed}} failed.", "option-over-size": "Vault size over limit", "option-over-size-desc": "Your vault is at {{size}} out of {{limit}}.", "msg-largest-files": "View largest files", "msg-largest-files-desc": "These are the remote files that are taking the most space. After deleting attachments, use the purge button to free up remote vault space.", "button-purge-remote": "Purge", "tooltip-purge-remote": "Permanently purge deleted attachments from remote vault to save space.", "msg-purge-complete": "Purge complete.", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "Selective sync", "option-excluded-folders": "Excluded folders", "option-excluded-folder-desc": "Prevent certain folders from being synced.", "option-currently-excluded-folders": " These folders currently excluded:", "button-manage-excluded-folders": "Manage", "option-sync-image": "Sync images", "option-sync-image-desc": "Sync image files with these extensions: {{extensions}}.", "option-sync-audio": "Sync audio", "option-sync-audio-desc": "Sync audio files with these extensions: {{extensions}}.", "option-sync-video": "Sync videos", "option-sync-video-desc": "Sync video files with these extensions: {{extensions}}.", "option-sync-pdf": "Sync PDFs", "option-sync-pdf-desc": "Sync PDF files.", "option-sync-unsupported": "Sync all other types", "option-sync-unsupported-desc": "Sync unsupported file types.", "option-vault-config-sync": "Vault configuration sync", "option-view-config-files": "Settings version history", "option-view-config-files-desc": "View and restore version history of setting files.", "option-sync-app": "Main settings", "option-sync-app-desc": "Enable to sync editor settings, files & links settings, custom hotkeys, etc.", "option-sync-appearance": "Appearance settings", "option-sync-appearance-desc": "Sync appearance settings like dark mode, active theme, and enabled snippets.", "option-sync-appearance-data": "Themes and snippets", "option-sync-appearance-data-desc": "Sync downloaded themes and snippets. Whether they are enabled depends on the previous setting.", "option-sync-hotkey": "Hotkeys", "option-sync-hotkey-desc": "Sync custom hotkeys.", "option-sync-core-plugin": "Active core plugin list", "option-sync-core-plugin-desc": "Sync which core plugins are enabled.", "option-sync-core-plugin-data": "Core plugin settings", "option-sync-core-plugin-data-desc": "Sync core plugin settings.", "option-sync-community-plugin": "Active community plugin list", "option-sync-community-plugin-desc": "Sync which community plugins are enabled.", "option-sync-community-plugin-data": "Installed community plugins", "option-sync-community-plugin-data-desc": "Sync installed community plugins (.js, .css, and manifest.json files) and their settings.", "label-sync-introduction": "Obsidian Sync is Obsidian's add-on sync service with end-to-end encryption and version history.", "label-account-required": "To start syncing, please log in or create a new Obsidian account.", "button-sign-up": "Sign up", "button-log-in": "Log in", "label-manage-excluded-folders": "Manage excluded folders", "label-number-of-folders-excluded": "{{folders}} are currently excluded from being synced.", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "Setup connection", "label-now-connected-to-vault": "You're now connected to \"{{name}}\".", "button-start-syncing": "Start syncing", "label-confirm-merge-vault": "Confirm Merge Vault", "msg-vault-has-notes": "Your local vault already contains some notes.", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "File recovery", "desc": "Let you restore recent snapshots to recover from accidental data loss. Snapshots are only saved for Markdown files.", "action-open": "Open saved snapshots", "option-interval": "Snapshot interval", "option-interval-description": "Minimal interval in minutes between two snapshots.", "option-keep": "History length", "option-keep-description": "Length in days snapshots is kept for.", "option-open-history": "Snapshots", "option-open-history-description": "View and restore saved snapshots.", "button-view-snapshots": "View", "option-clear": "Clear history", "option-clear-description": "Wipe all snapshots.", "button-clear-history": "Clear", "label-clear-warning": "Are you sure you want to delete all snapshots? Note that only snapshots will be removed. All files inside your vault will not be affected.", "msg-clear-complete": "Snapshots cleared.", "label-no-history-found": "No snapshots found.", "placeholder-choose-file": "Choose a file...", "label-select-file": "Please select a file on the left to view snapshots." }, "note-composer": { "name": "Note composer", "desc": "Merge, split, and refactor notes.", "option-confirm-file-merge": "Confirm file merge", "option-confirm-file-merge-description": "Prompt before merge two files.", "option-split-replacement-text": "Text after extraction", "option-split-replacement-text-description": "What to show in place of the selected text after extracting it.", "option-choice-split-replacement-text-link": "Link to new file", "option-choice-split-replacement-text-embed": "Embed new file", "option-choice-split-replacement-text-none": "None", "option-template-file": "Template file location", "option-template-file-description": "Template file to use when merging or extracting. Available variables: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Merge current file with another file...", "action-merge-file": "Merge entire file with...", "label-no-files": "No files found.", "instruction-navigate": "to navigate", "instruction-merge": "to merge", "instruction-create-new": "to create new", "instruction-merge-at-top": "to merge at top", "instruction-dismiss": "to dismiss", "prompt-select-file-to-merge": "Select file to merge into...", "label-merge-file": "Merge file", "label-confirm-file-merge": "Are you sure you want to merge \"{{file}}\" into \"{{destination}}\"? \"{{file}}\" will be deleted.", "button-merge": "Merge", "button-merge-do-not-ask-again": "Merge and don't ask again", "command-split-file": "Extract current selection...", "command-extract-heading": "Extract this heading...", "instruction-append": "to move to bottom", "instruction-prepend": "to move to top", "msg-fail-to-fetch-template": "Failed to fetch template file: \"{{template}}\" not found.", "msg-fail-to-find-heading": "Failed to find heading" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} word", "word-with-count_plural": "{{count}} words", "character-with-count": "{{count}} character", "character-with-count_plural": "{{count}} characters", "link-with-count": "{{count}} link", "link-with-count_plural": "{{count}} links", "file-with-count": "{{count}} file", "file-with-count_plural": "{{count}} file", "folder-with-count": "{{count}} folder", "folder-with-count_plural": "{{count}} folders", "backlink-with-count": "{{count}} backlink", "backlink-with-count_plural": "{{count}} backlinks", "site-with-count": "{{count}} site", "site-with-count_plural": "{{count}} sites", "plugin-with-count": "{{count}} plugin", "plugin-with-count_plural": "{{count}} plugins", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } }{ "setting": { "options": "Options", "plugin": "Plugin", "builtin-plugins": "Core plugins", "plugin-options": "Plugin options", "folder-path-example-placeholder": "Example: folder 1/folder 2", "file-path-example-placeholder": "Example: folder/note", "msg-restart-required": "Changing this option requires a restart to take effect.", "editor": { "name": "Editor", "section-general": "General", "section-behavior": "Behavior", "section-display": "Display", "option-spellcheck": "Spell check", "option-spellcheck-description": "Turns on the spell checker. Currently only works for English (US).", "spellcheck-languages": "Spellcheck languages", "spellcheck-languages-description": "Choose the languages for the spellchecker to use.", "spellcheck-languages-mac-description": "The native spellchecker will automatically detect the language being used for you on macOS.", "spellcheck-dict": "Spellcheck dictionary", "spellcheck-dict-empty": "The spellcheck dictionary is empty.", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "Readable line length", "option-readable-line-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-strict-line-break": "Strict line breaks", "option-strict-line-break-description": "In preview mode, ignore single line breaks according to the Markdown specs. Turn this off for single line breaks to show in preview.", "option-show-frontmatter": "Show frontmatter", "option-show-frontmatter-description": "In preview mode, show frontmatter as a code block. Turn off to hide frontmatter section.", "option-auto-pair-brackets": "Auto pair brackets", "option-auto-pair-brackets-description": "Pair brackets and quotes automatically.", "option-auto-pair-markdown": "Auto pair Markdown syntax", "option-auto-pair-markdown-description": "Pair symbols automatically for bold, italics, highlight, strikethrough, and code.", "option-smart-indent-lists": "Smart indent lists", "option-smart-indent-lists-description": "Take care of indentation and list marker for you.", "option-fold-heading": "Fold heading", "option-fold-heading-description": "Let you fold everything under a heading.", "option-fold-indent": "Fold indent", "option-fold-indent-description": "Let you fold a portion of the same indentation, such as lists.", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Editing view", "option-default-new-tab-view-reading": "Reading view", "option-default-editing-mode": "Default editing mode", "option-default-editing-mode-description": "The default editing mode a new pane will start with.", "option-default-editing-mode-source": "Source mode", "option-default-editing-mode-live-preview": "Live Preview", "option-show-line-number": "Show line number", "option-show-line-number-description": "Show line number in the gutter.", "option-indentation-guide": "Show indentation guides", "option-indentation-guide-description": "Show vertical relationship lines between bullet points for visual guidance.", "option-use-tabs": "Use tabs", "option-use-tabs-description": "Use tabs to indent when pressing the \"Tab\" key. Set this to off to use spaces.", "option-tab-size": "Tab size", "option-tab-size-description": "Number of spaces a tab is equivalent to.", "option-rtl": "Right-to-left (RTL)", "option-rtl-description": "Sets the text direction of notes to display in right-to-left.", "option-auto-convert-html": "Auto convert HTML", "option-auto-convert-html-description": "Automatically convert HTML to Markdown when pasting and drag-and-drop from webpages. Use Ctrl/Cmd+Shift+V to paste without conversion.", "option-vim-key-bindings": "Vim key bindings", "option-vim-key-bindings-description": "Let you use Vim key bindings in the source editor.", "option-vim-key-bindings-mobile": "On mobile devices, this setting is per-device and is not synchronized through the config file.", "option-emacsy-keys": "Legacy Emacs-style key bindings for macOS", "option-emacsy-keys-description": "Allows you to use the additional Emacs-style navigation keys, which are standard on macOS, but may interfere with some key operations.", "label-confirm-enable-vim": "Confirm entering Vim mode", "label-vim-warning": "Vim mode is for efficient text editing but can be quite counter-intuitive. If you're not familiar with Vim, this option might make it look like Obsidian has stopped working.", "label-vim-test": "To verify that you know your way around Vim, please enter the command to quit Vim without saving below:", "label-vim-your-answer": "Your answer", "placeholder-enter-command": "Enter command...", "button-confirm-enable-vim": "Let me enable Vim", "msg-vim-mode-enabled": "Command is correct. Vim mode now enabled.", "msg-vim-mode-not-enabled": "Command is incorrect. Vim mode remains disabled to protect you.", "msg-vim-mode-please-enter-command": "Please enter the command to enable Vim mode", "option-legacy-editor": "Use legacy editor", "option-legacy-editor-description2": "The legacy editor will be deprecated soon. It is currently no longer maintained, and as such, bugs will no longer be addressed.", "label-legacy-deprecation": "New editor is here", "label-legacy-deprecation-1": "Obsidian now has a brand new editor that's more robust and accessible.", "label-legacy-deprecation-2": "It seems you're still using the legacy editor, and we think you'll enjoy the new editor.", "label-legacy-deprecation-choice": "Which mode would you like to use?", "label-live-preview-description": "A more modern, what-you-see-is-what-you-get experience.", "label-source-mode-description": "See raw Markdown with syntax highlighting.", "button-start-new-editor": "Start new editor" }, "file": { "name": "Files & Links", "option-confirm-file-deletion": "Confirm file deletion", "option-confirm-file-deletion-description": "Whether you want to get prompted to confirm file deletion.", "option-delete-destination": "Deleted files", "option-delete-destination-description": "What to do with files after you delete them.", "option-choice-system-trash": "Move to system trash", "option-choice-vault-trash": "Move to Obsidian trash (.trash folder)", "option-choice-permanent-delete": "Permanent delete", "option-always-update-links": "Always update internal links", "option-always-update-links-description": "Whether to automatically update links after renaming a file or prompt.", "option-new-note-location": "New note default location", "option-new-note-location-description": "Where to put newly created notes. Plugin settings will override this.", "option-choice-vault-root": "Vault root", "option-choice-current-folder": "Same folder as the file is in", "option-choice-specified-folder": "In the folder specified below", "option-new-file-folder-path": "Folder to create new notes in", "option-new-file-folder-path-description": "Newly created notes will appear under this folder. Plugin settings will override this.", "option-use-wiki-links": "Use [[Wikilinks]]", "option-use-wiki-links-description": "Auto-generate Wikilinks for [[links]] and ![[images]] instead of Markdown links and images. Disable this option to generate Markdown links instead.", "option-show-unsupported-files": "Detect all file extensions", "option-show-unsupported-files-description": "Show files with any extension even if Obsidian can't open them natively, so that you can link to them and see them in File Explorer and Quick Switcher.", "option-link-autocompleted-format": "New link format", "option-link-autocompleted-format-description": "What links to insert when auto generating internal links.", "option-choice-shortest-linktext": "Shortest path when possible", "option-choice-relative-path": "Relative path to file", "option-choice-absolute-path": "Absolute path in vault", "option-new-attachment-location": "Default location for new attachments", "option-new-attachment-location-description": "Where newly added attachments are placed.", "option-choice-subdirectory": "In subfolder under current folder", "option-attachment-folder-path": "Attachment folder path", "option-attachment-folder-path-description": "Newly created attachment files will appear here. That includes images created via drag and drop or pasting, and audio recordings.", "option-attachment-subfolder-path": "Subfolder name", "option-attachment-subfolder-path-description": "If your file is under \"vault/folder\", and your set subfolder name to \"attachments\", attachments will be saved to \"vault/folder/attachments\".", "option-attachment-subfolder-path-placeholder": "attachments", "option-excluded-files": "Excluded files", "option-excluded-files-desc": "Excluded files will be either hidden or less noticeable in various places, such as Quick Switcher, link suggestion, and Graph View.", "label-no-excluded-filters-applied": "No excluded filter is applied right now. Add one below.", "label-excluded-filters-applied": "Files matching the following filters are currently excluded:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Enter path or \"/regex/\"..." }, "appearance": { "name": "Appearance", "option-base-theme": "Base theme", "option-base-theme-description": "Choose Obsidian’s default color scheme.", "option-accent-color": "Accent color", "option-accent-color-description": "Choose the accent color used throughout the app.", "dark-theme": "Dark", "light-theme": "Light", "system-theme": "Adapt to system", "option-font": "Font", "option-advanced": "Advanced", "option-interface-font": "Interface font", "option-interface-font-description": "Set base font for all of Obsidian.", "option-text-font": "Text font", "option-text-font-description": "Set font for editing and reading views.", "option-monospace-font": "Monospace font", "option-monospace-font-description": "Set font for places like code blocks and frontmatter.", "label-single-font-currently-in-effect": " Currently applied font: ", "label-multiple-fonts-currently-in-effect": " The following fonts are currently applied:", "option-font-placeholder": "Enter font name...", "label-no-custom-font-set": "No custom font is applied right now. Add one below.", "label-font-applied": "The first font from this list that is available on your system will be applied.", "msg-font-not-found": "This font is not detected on your system.", "msg-font-found": "This font is detected on your system.", "label-font-name": "Font name", "option-community-themes": "Open community themes", "option-community-themes-description": "Preview and use amazing themes created by the community.", "button-browse-community-themes": "Browse", "option-font-size": "Font size", "option-font-size-description": "Font size in pixels that affects editor and preview.", "option-font-size-action": "Quick font size adjustment", "option-font-size-action-description": "Adjust the font size using Ctrl + Scroll, or using the trackpad pinch-zoom gesture.", "option-themes": "Themes", "option-manage-themes-description": "Manage installed themes and browse community themes.", "option-theme-button-manage": "Manage", "option-choice-none": "None", "option-native-menus": "Native menus", "option-native-menus-desc": "Menus throughout the app will match the operating system. They will not be affected by your theme.", "button-reload-themes": "Reload themes", "msg-reloaded-themes": "Reloaded custom CSS themes.", "button-open-themes-folder": "Open themes folder", "option-css-snippets": "CSS snippets", "label-no-css-snippets-found": "No CSS snippets found in the snippets folder.", "no-snippet-description": "CSS Snippets are stored in \"{{path}}\".", "button-reload-snippets": "Reload snippets", "button-open-snippets-folder": "Open snippets folder", "msg-reloaded-snippets": "Reloaded CSS snippets.", "option-toggle-snippet-description": "Apply CSS snippet at \"{{path}}\".", "label-installed-themes": "Installed themes", "label-screenshot-unavailable": "Screenshot unavailable", "label-default-theme": "Default", "tooltip-click-to-enlarge": "Click to enlarge", "button-update": "Update", "label-currently-selected": "Selected", "option-frame-style": "Window frame style", "option-frame-description": "Determines the styling of the title bar of Obsidian windows. Requires a full restart to take effect.", "option-frame-hidden": "Hidden (default)", "option-frame-obsidian": "Obsidian frame", "option-frame-native": "Native frame", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Show tab title bar", "option-show-view-header-desc": "Display the header at the top of every tab.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "button-check-for-updates": "Check for updates", "button-view-updates": "View updates", "button-update-all-themes": "Update all", "label-current-themes": "Current community themes", "label-currently-installed": "You currently have {{count}} theme installed.", "label-currently-installed_plural": "You currently have {{count}} themes installed." }, "hotkeys": { "name": "Hotkeys", "prompt-filter": "Filter...", "tooltip-delete-hotkey": "Delete hotkey", "label-waiting-for-hotkey-press": "Press hotkey...", "tooltip-restore-default": "Restore default", "tooltip-customize-command": "Customize this command", "tooltip-hotkey-single-conflict": "This hotkey conflicts with \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "This hotkey conflicts with {{count}} other commands", "label-blank-hotkey": "Blank" }, "about": { "name": "About", "label-commercial-license": "Commercial license", "label-license-key": "License key", "license-key-placeholder": "Your license key...", "label-activate-license": "Activate license", "button-activate": "Activate", "label-unknown-version": "Unknown", "label-current-version": "Current version: ", "label-install-version": "(Installer version: {{version}})", "label-up-to-date": "Your app is up to date!", "label-read-changelog": "Read the changelog.", "label-manual-update-required": "To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.", "label-download": "Download", "label-new-version-ready": "A new version is ready to be installed. ", "label-relaunch-to-update": "Relaunch the app to update.", "label-disabled-updates": "Updates are disabled.", "label-checking-for-updates": "Checking for updates...", "button-relaunch": "Relaunch", "button-check-for-updates": "Check for updates", "option-auto-update": "Automatic updates", "option-auto-update-description": "Turn this off to prevent the app from checking for updates.", "option-get-help": "Get help", "option-get-help-description": "Get help on using Obsidian.", "button-open": "Open", "option-language": "Language", "option-language-description": "Change the display language.", "option-insider-build": "Receive insider builds", "option-insider-build-description": "Auto-update to insider builds to try out new features. Note that these builds are bleeding edge and might be less stable.", "option-advanced": "Advanced", "option-hw-acceleration": "Hardware Acceleration", "option-hw-acceleration-description": "Turns on Hardware Acceleration, which uses your GPU to make Obsidian smoother.", "option-hw-acceleration-warning": "If you turn this off, app performance will be severely degraded.", "option-config-location": "Override config folder", "option-config-location-description": "Use a different config folder than the default one. Must start with a dot.", "option-config-location-warning": "Config location must be a valid folder name that starts with a dot.", "label-license": "License", "label-your-commercial-license-key": "Your commercial license key is \"{{key}}\".", "label-commercial-license-info": "Registered to \"{{company}}\" for {{seats}} users. Valid until {{expiry}}.", "label-validating-commercial-license": "Validating...", "label-invalid-commercial-license": "License invalid: ", "button-remove-commercial-license": "Remove", "option-catalyst": "Catalyst license", "option-catalyst-desc": "You currently have the {{tier}} Catalyst license. Thanks for your support!", "option-catalyst-desc-no-license": "You don't have a Catalyst license right now. Catalyst license is a one-time donation to support Obsidian development.", "label-app": "App" }, "account": { "name": "Account", "option-your-account": "Your account", "option-your-account-desc": "You're currently signed in {{name}} ({{email}}).", "option-your-account-desc-no-login": "You're not logged in right now. An account is only needed for Obsidian Sync, Obsidian Publish, and Catalyst insider builds.", "button-manage-settings": "Manage settings", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Commercial license", "option-commercial-license-desc": "If you use Obsidian for commercial purposes, you may need to get a commercial license.", "button-purchase": "Purchase", "button-log-out": "Log out", "label-log-in": "Log in", "label-sign-up": "Sign up", "label-email": "Email", "placeholder-email": "Your email...", "label-password": "Password", "placeholder-password": "Your password...", "button-login": "Login", "message-empty-email": "Email cannot be empty.", "message-invalid-email": "Email is not valid.", "message-empty-password": "Password cannot be empty.", "message-login-failed": "Login failed, please double-check your email and password.", "label-no-account": "Don't have an account? ", "link-sign-up-now": "Sign up now" }, "core-plugin": { "plugin-list": "Plugin list", "option-search-plugin": "Search core plugins", "option-search-plugin-description": "Filter plugins by name or description.", "placeholder-search-plugin": "Search plugins..." }, "third-party-plugin": { "name": "Third-party plugin", "option-restricted-mode": "Restricted mode", "option-restricted-mode-description": "Restricted Mode is off. Turn on to disable community plugins.", "button-turn-on": "Turn on", "option-browse-community-plugins": "Community plugins", "option-browse-community-plugins-description": "Browse and install third-party plugins made by our amazing community.", "button-browse": "Browse", "label-exit-restricted-mode": "Exit Restricted Mode", "label-exit-restricted-mode-description-1": "Community plugins, like any other software you install, could potentially cause data integrity and security issues.", "label-exit-restricted-mode-description-2": "Plugin security is important to us. Here's what we do:", "label-exit-restricted-mode-description-3": "Despite our efforts, there is still a small chance that a community plugin might misbehave.", "label-code-review": "Initial code review", "label-code-review-desc": "Plugins undergo an initial code review by our team before they appear in the store.", "label-open-source": "Open source", "label-open-source-desc": "Most plugins are open source on GitHub, so you can inspect the code yourself.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We have a large community of developers who watch out for each other.", "label-report-mechanism": "Report mechanism", "label-report-mechanism-desc": "We follow up and remove faulty plugins upon user report.", "label-exit-restricted-mode-disable-confirmation": "Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.", "label-learn-more": "Learn more about plugin security", "button-turn-on-community-plugins": "Turn on community plugins", "label-trust-author": "Do you trust the author of this vault?", "label-trust-author-description-1": "You're opening this vault for the first time, and it comes with some plugins.", "label-trust-author-description-2": "If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.", "label-trust-author-description-3": "If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.", "button-enable-plugins": "Trust author and enable plugins", "button-dont-trust-author": "Browse vault in Restricted Mode", "placeholder-community-plugins": "Search community plugins...", "msg-failed-load-plugins": "Failed to load community plugins.", "label-installed": "Installed", "button-install": "Install", "button-enable": "Enable", "button-disable": "Disable", "button-copy-share-link": "Copy share link", "button-donate": "Donate", "label-no-results-found": "No results found.", "msg-failed-to-load-manifest": "Failed to load plugin manifest.", "label-version": "Version: {{version}}", "label-currently-installed-version": " (currently installed: {{version}})", "label-by-author": "By ", "label-repository": "Repository: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "This plugin does not support your device.", "button-update": "Update", "label-no-readme": "This plugin did not provide a README file.", "msg-installing-plugin": "Installing plugin \"{{name}}\"...", "msg-failed-to-install-plugin": "Failed to install plugin \"{{name}}\".", "msg-successfully-installed-plugin": "Successfully installed plugin \"{{name}}\".", "label-installed-plugins": "Installed plugins", "button-reload-plugins": "Reload plugins", "msg-reloaded-third-party-plugins": "Reloaded third-party plugins.", "label-uninstall": "Uninstall", "label-uninstall-plugin": "Uninstall plugin", "label-uninstall-plugin-confirmation": "Are you sure you want to uninstall this plugin? This will delete the folder of the plugin.", "button-open-plugins-folder": "Open plugins folder", "button-check-for-updates": "Check for updates", "button-update-all-plugins": "Update all", "label-current-plugins": "Current plugins", "label-currently-installed": "You currently have {{count}} plugin installed.", "label-currently-installed_plural": "You currently have {{count}} plugins installed.", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Show a message with how long each plugin took to initialize when starting the app.", "msg-no-updates-found": "No plugin updates found.", "msg-updates-found": "Found {{count}} plugin to update.", "msg-updates-found_plural": "Found {{count}} plugins to update.", "msg-update-plugin": "Update to version {{version}}", "option-search-installed-plugin": "Search installed plugins", "option-search-installed-plugin-description": "Filter installed plugins by name or description.", "placeholder-search-installed-plugin": "Search installed plugins...", "show-installed-only": "Show installed only", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "Showing {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Mobile toolbar", "option-configure-quick-action": "Configure mobile Quick Action", "option-configure-quick-action-description": "Configure which command to trigger when pull down from the top. The current command is set to \"{{command}}\".", "button-configure": "Configure", "placeholder-select-quick-action": "Select Quick Action...", "manage-toolbar-options": "Manage toolbar options", "option-internal-link": "Add internal link", "option-internal-embed": "Add embed", "option-tag": "Add tag", "option-heading": "Toggle heading", "option-strikethrough": "Toggle strikethrough", "option-highlight": "Toggle highlight", "option-code": "Toggle code", "option-blockquote": "Toggle blockquote", "option-markdown-link": "Add Markdown link", "option-bullet-list": "Toggle bullet list", "option-numbered-list": "Toggle numbered list", "option-indent-list": "Indent list item", "option-unindent-list": "Unindent list item", "option-undo": "Undo", "option-redo": "Redo", "option-move-caret-up": "Move caret up", "option-move-caret-down": "Move caret down", "option-move-caret-left": "Move caret left", "option-move-caret-right": "Move caret right", "option-first-line": "Go to first line", "option-last-line": "Go to last line", "option-toggle-keyboard": "Toggle keyboard", "option-configure-toolbar": "Configure mobile toolbar", "option-added-options": "Added options", "option-more-toolbar-options": "More toolbar options", "option-attach": "Insert attachment", "option-add-command": "Add global command", "option-add-command-description": "Select any global command to add to the toolbar." } }, "editor": { "search": { "placeholder-find": "Find", "placeholder-replace": "Replace", "label-previous": "Prev", "label-next": "Next", "label-all": "All", "label-exit-search": "Exit search", "label-replace": "Replace", "label-replace-all": "Replace all" }, "link-suggestion": { "label-type-hash": "Type #", "label-link-heading": "to link heading", "label-type-block": "Type ^", "label-link-block": "to link blocks", "label-type-pipe": "Type |", "label-change-display-text": "to change display text", "label-no-match-found": "No match found" }, "spellcheck": { "no-suggestion": "No suggestions...", "add-to-dictionary": "Add to dictionary" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "No heading", "label-heading-level": "Heading {{level}}" }, "print-modal": { "title": "Export to PDF", "caption": "Export \"{{filename}}\" to PDF with the setting below.", "setting-page-size": "Page size", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Include file name as title", "setting-landscape": "Landscape", "setting-margin": "Margin", "setting-margin-default": "Default", "setting-margin-minimal": "Minimal", "setting-margin-none": "None", "setting-downscale-percent": "Downscale percent", "button-export-to-pdf": "Export to PDF" }, "link-popover": { "tooltip-follow-link": "Follow link", "tooltip-open-link": "Open link", "tooltip-search-tag": "Search tag" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Open in default app", "empty-sidebar": "The sidebar is empty, try dragging a pane here.", "sidebar-expand": "Expand", "sidebar-collapse": "Collapse", "msg-fail-to-save-file": "Failed to save file \"{{filepath}}\". {{message}}.", "no-file": "No file", "msg-file-changed": "\"{{file}}\" has been modified externally, merging changes automatically.", "switch-vault": "Open another vault", "help": "Help", "settings": "Settings", "drag-to-rearrange": "Drag to rearrange", "msg-switched-to-read": "Switched default view mode to reading view.", "msg-switched-to-edit": "Switched default view mode to editor.", "msg-upgrade-installer": "To use this feature, please re-install with latest installer available from our website.", "tooltip-restore-default-settings": "Restore default settings", "label-copy": "Copy to clipboard", "copied_generic": "Copied to your clipboard", "copied": "{{item}} copied to your clipboard", "url": "Url", "msg-open-file-through-uri": "Opened file \"{{path}}\"", "msg-file-not-found-through-uri": "File \"{{name}}\" not found.", "delete-action-short-name": "Delete", "msg-indexing": "Obsidian is indexing your vault...\nThis should only happen once.\nSome functionality may not be available until this is complete.", "msg-indexing-complete": "Indexing complete.", "msg-sandbox-vault": "This is a sandbox vault.\nChanges you make in this vault will be lost.", "label-enter-to-create": "Enter to create", "label-update-available": "Update Available", "label-debug-info": "Debug info", "button-learn-more": "Learn more", "button-not-now": "Not now", "button-add": "Add", "button-manage": "Manage", "label-new-tab": "New tab", "msg-tab-busy": "This tab is currently busy, please try again later", "empty-state": { "no-file-open": "No file is open", "create-new-file": "Create new file", "go-to-file": "Go to file", "see-recent-files": "See recent files", "close": "Close", "unknown-pane-title": "Plugin no longer active", "unknown-pane-desc": "The plugin that created this pane ({{type}}) has gone away" }, "menu": { "edit-view": "Edit (Ctrl/Cmd+Click to edit in new pane)", "read-view": "Current view: reading", "switch-to-edit-view": "Click to edit", "switch-to-read-view": "Click to read", "mod-click-open-new-tab": "{{key}}+Click to open in new tab", "find": "Find...", "replace": "Replace...", "edit": "Edit", "preview": "Preview", "more-options": "More options", "close": "Close", "close-others": "Close others", "close-right": "Close tabs to the right", "pin": "Pin", "unpin": "Unpin", "unlink-tab": "Unlink tab", "link-tab": "Link with tab...", "toggle-source-mode": "Source mode", "toggle-reading-view": "Reading view", "delete-file": "Delete file", "create-file": "Create this file", "open-link": "Open link", "open-in-new-tab": "Open in new tab", "open-to-the-right": "Open to the right", "copy-url": "Copy url", "close-current-tab": "Close current tab", "copy": "Copy", "cut": "Cut", "paste": "Paste", "paste-as-plain-text": "Paste as plain text", "select-all": "Select all", "rename-heading": "Rename this heading...", "rename-blockid": "Rename this block ID...", "open-in-new-window": "Open in new window", "move-to-new-window": "Move to new window", "open-in-browser": "Open in browser", "stack-tabs": "Stack tabs", "unstack-tabs": "Unstack tabs" }, "tooltip": { "click-to-expand": "Click to expand", "click-to-collapse": "Click to collapse", "alias": "Alias", "not-created-yet": "Not created yet, select to create" }, "start-screen": { "label-version": "Version", "option-open-folder-as-vault": "Open folder as vault", "option-open-folder-as-vault-description": "Choose an existing folder of Markdown files.", "option-create-vault": "Create new vault", "option-create-vault-description": "Create a new Obsidian vault under a folder.", "option-connect-obsidian-sync": "Connect to Obsidian Sync", "option-connect-obsidian-sync-description": "Set up a synced vault with existing remote vault.", "option-new-vault-name": "Vault name", "option-new-vault-name-description": "Pick a name for your awesome vault.", "option-new-vault-location": "Location", "option-new-vault-location-description": "Pick a place to put your new vault.", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Reveal vault in system explorer", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "Rename vault...", "msg-error-rename-exists": "There is already a vault with this name.", "msg-error-nested": "Cannot move vault into a subfolder of itself.", "msg-error-rename-open": "Can't rename a currently open vault.", "msg-rename-failed": "Failed to rename vault.", "msg-rename-success": "Successfully renamed vault.", "option-move-vault": "Move vault...", "msg-move-select-dest": "Select destination folder", "msg-error-move-exists": "There is already a vault at the destination.", "msg-error-move-open": "Can't move a currently open vault.", "msg-move-failed": "Failed to move vault.", "msg-move-success": "Successfully moved vault.", "option-remove": "Remove from list", "button-quick-start": "Quick start", "button-open": "Open", "button-browse": "Browse", "button-connect": "Connect", "button-create-vault": "Create", "button-back": "Back", "msg-empty-vault-name": "Vault name cannot be empty.", "msg-invalid-folder": "Please pick a valid folder.", "msg-failed-to-create-vault": "Failed to create vault.", "msg-failed-to-create-vault-at-location": "Could not create vault at the given location. Please double-check the location and permission.", "msg-error-failed-to-open-vault": "Failed to open.", "msg-error-remove-current-open-vault": "Can't remove a currently open vault.", "option-get-help": "Get Help", "option-user-email": "Email", "placeholder-your-email": "Your email...", "option-user-password": "Password", "placeholder-your-password": "Your password...", "button-sign-in": "Sign in", "button-setup": "Setup", "option-connect-vault-desc": "Create a synced vault on this device.", "tooltip-own-vault": "This is a remote vault owned by you.", "tooltip-shared-vault": "This is a remote vault shared with you." }, "drag-and-drop": { "insert-link-here": "Insert link here", "insert-links-here": "Insert links here", "move-into-folder": "Move into \"{{folder}}\"", "star-this-file": "Star this file", "star-these-files": "Star these files", "open-in-this-tab": "Open in this tab", "open-as-tab": "Open as new tab" }, "window": { "maximize": "Maximize", "minimize": "Minimize", "restore-down": "Restore down", "close-window": "Close window", "go-back": "Go back", "go-forward": "Go forward" }, "start-up": { "loading-obsidian": "Loading Obsidian...", "obsidian-load-error": "An error occurred while loading Obsidian.", "button-reload-app": "Reload app", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "Open another vault", "loading-components": "Loading components...", "loading-plugins": "Loading plugins...", "loading-vault": "Loading vault...", "msg-failed-to-load-vault": "Failed to load vault: ", "loading-cache": "Loading cache...", "loading-workspace": "Loading workspace..." }, "mobile": { "action-import": "Import into vault", "action-choose-file-to-insert": "Choose a file to insert", "action-insert-text-into-file": "Insert text into {{filename}}", "action-insert-link-into-file": "Insert link into {{filename}}", "msg-importing": "Importing...", "msg-import-success": "Import success", "msg-failed-to-import-file": "Failed to import file {{filename}}", "msg-back-again-to-exit": "Press back again to exit." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "Save current file", "follow-cursor-link": "Follow link under cursor", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "Toggle pin", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "Navigate back", "navigate-forward": "Navigate forward", "use-dark-mode": "Use dark mode", "use-light-mode": "Use light mode", "change-theme": "Change theme", "search-current-file": "Search current file", "search-replace-current-file": "Search & replace in current file", "open-settings": "Open settings", "open-help": "Open help", "toggle-edit": "Toggle editing/reading view", "toggle-source-mode": "Toggle Live Preview/Source mode", "delete-current-file": "Delete current file", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "Toggle left sidebar", "toggle-right-sidebar": "Toggle right sidebar", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "Focus on editor", "toggle-fold": "Toggle fold on the current line", "fold-all": "Fold all headings and lists", "unfold-all": "Unfold all headings and lists", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "Swap line up", "swap-line-down": "Swap line down", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "Toggle bold for selection", "toggle-italics": "Toggle italics for selection", "toggle-highlight": "Toggle highlight for selection", "toggle-comments": "Toggle comments for selection", "insert-link": "Insert link", "toggle-spellcheck": "Toggle spellcheck", "delete-paragraph": "Delete paragraph", "toggle-checklist": "Toggle checklist status", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "Edit file title", "copy-path": "Copy file path", "copy-url": "Copy obsidian url", "export-pdf": "Export to PDF", "reload": "Reload app without saving", "undo-close-tab": "Undo close tab", "context-menu": "Show context menu under cursor", "show-debug-info": "Show debug info", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "Toggle edit/preview mode", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "This will affect {{links}} in {{files}}.", "msg-updated-links": "Updated {{links}} in {{files}}.", "label-update-links": "Update links", "label-confirm-update-link-to-file": "Do you want to update internal links that link to this file?", "button-always-update": "Always update", "button-just-once": "Just once", "button-do-not-update": "Do not update", "label-confirm-deletion": "Are you sure you want to delete \"{{filename}}\"?", "label-move-to-system-trash": "It will be moved to your system trash.", "label-move-to-vault-trash": "It will be moved to your Obsidian trash, which is located in the \".trash\" hidden folder in your vault.", "label-permanent-delete": "The file will be permanently deleted.", "label-non-empty-folder": "This folder is not empty.", "label-delete-folder-warning": "If you continue, all files inside this folder will be deleted.", "label-delete-folder": "Delete folder", "button-delete": "Delete", "button-delete-do-not-ask-again": "Delete and don't ask again", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "There are currently {{links}} pointing to this note.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "Delete file", "button-manage": "Manage", "button-cancel": "Cancel", "button-done": "Done", "button-save": "Save", "button-stop": "Stop", "button-continue": "Continue", "preparing-pdf": "Preparing PDF...", "label-rename-file": "Rename file", "label-new-name": "New name", "msg-rename-success": "Successfully renamed file.", "label-rename-heading": "Rename heading", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "Plugins", "file-explorer": { "name": "File explorer", "desc": "See all the files in your vault.", "action-open": "Open file explorer", "action-show": "Show file explorer", "action-create-note": "Create new note", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "New note", "action-new-folder": "New folder", "action-change-sort": "Change sort order", "action-reveal-file": "Reveal file in file explorer", "action-reveal-active-file": "Reveal active file in file explorer", "command-move-file": "Move file to another folder", "action-move-file": "Move file to...", "action-move-folder": "Move folder to...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "Type a folder", "label-no-folders": "No folders found.", "instruction-navigate": "to navigate", "instruction-move": "to move", "instruction-dismiss": "to dismiss", "label-sort-a-to-z": "Sort by file name (A to Z)", "label-sort-z-to-a": "Sort by file name (Z to A)", "label-sort-new-to-old": "Sort by edit time (new to old)", "label-sort-old-to-new": "Sort by edit time (old to new)", "label-sort-created-old-to-new": "Created time (old to new)", "label-sort-created-new-to-old": "Created time (new to old)", "menu-opt-new-note": "New note", "menu-opt-new-folder": "New folder", "menu-opt-set-attachment-folder": "Set as attachment folder", "menu-opt-rename": "Rename", "menu-opt-delete": "Delete", "menu-opt-make-copy": "Make a copy", "msg-invalid-characters": "File name cannot contain any of the following characters: ", "msg-unsafe-characters": "Links will not work with file names containing any of these characters: ", "msg-file-already-exists": "There's already a file with the same name", "msg-empty-file-name": "File name cannot be empty.", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "Last modified at {{time}}", "tooltip-created-time": "Created at {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Move", "label-untitled-file": "Untitled", "label-untitled-folder": "Untitled", "msg-set-attachment-folder": "Attachments will be saved to \"{{path}}\" from now on." }, "search": { "name": "Search", "desc": "Search for keyword in all the notes.", "action-open-search": "Search in all files", "label-collapse-results": "Collapse results", "label-match-case": "Match case", "label-explain-search-term": "Explain search term", "label-more-context": "Show more context", "prompt-start-search": "Type to start search...", "label-match-text": "Matches text: ", "label-match-regex": "Matches regex: ", "label-match-exact-text": "Contains exact text: ", "label-match-all": "Match all of: ", "label-match-any": "Match any of: ", "label-excluding": "Excluding: ", "label-case-sensitive": "Case sensitive", "label-case-insensitive": "Case insensitive", "label-match-file-path": "Match file path: ", "label-match-file-name": "Match file name: ", "label-match-content": "Match file content: ", "label-match-task": "Match task: ", "label-match-task-todo": "Match task (todo): ", "label-match-task-done": "Match task (done): ", "label-match-line": "Match line: ", "label-match-block": "Match block: ", "label-match-section": "Match section: ", "label-match-tag": "Match tag: ", "label-no-matches": "No matches found.", "matches-with-count": "... and {{count}} more match.", "matches-with-count_plural": "... and {{count}} more matches.", "label-copy-search-results": "Copy search results", "button-copy-results": "Copy results", "msg-successfully-copied": "Results copied to your clipboard.", "option-show-path": "Show path", "option-show-path-description": "Display full path of the file rather than just the file name.", "option-link-style": "Link style", "option-link-style-description": "Optionally turn each file result in to a link.", "option-choice-link-style-none": "None", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Markdown link", "option-list-prefix": "List prefix", "option-list-prefix-description": "Optionally add a list item prefix to each file result.", "option-choice-list-style-none": "None", "option-choice-list-style-dash": "Dash (-)", "option-choice-list-style-asterisk": "Asterisk (*)", "option-choice-list-style-numbered": "Numbered", "tooltip-clear-search": "Clear search", "label-search-options": "Search options", "tooltip-read-more": "Read more", "label-history": "History", "tooltip-clear-history": "Clear search history", "label-path-option-description": "match path of the file", "label-file-name-option-description": "match file name", "label-tag-option-description": "search for tags", "label-line-option-description": "search keywords on same line", "label-section-option-description": "search keywords under same heading", "menu-opt-search-for": "Search for \"{{keyword}}\"" }, "quick-switcher": { "name": "Quick switcher", "desc": "Jump to any files without leaving your keyboard. Ctrl/Cmd+O to activate.", "short-name": "Switcher", "action-open": "Open quick switcher", "instruction-navigate": "to navigate", "instruction-open": "to open", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "to create", "instruction-dismiss": "to dismiss", "label-no-note-create-new": "No notes found. Enter to create a new one.", "prompt-type-file-name": "Type file to switch to or create...", "label-enter-to-create": "Enter to create", "tooltip-not-created-yet": "Not created yet, select to create", "option-show-existing-only": "Show existing only", "option-show-existing-only-description": "Whether to show links to files that are not yet created.", "option-show-attachments": "Show attachments", "option-show-attachments-desc": "Show attachment files like images, videos, and PDFs.", "option-show-all-file-types": "Show all file types", "option-show-all-file-types-desc": "Show all files including ones that Obsidian can't open. The file will be opened with the default app for that file type." }, "graph-view": { "name": "Graph view", "desc": "See a graph overview of which notes link to which.", "action-open": "Open graph view", "action-open-local": "Open local graph", "action-copy-screenshot": "Copy screenshot", "tab-title": "Graph of {{displayText}}", "label-filters": "Filters", "prompt-filter-nodes": "Search files...", "option-depth": "Depth", "option-depth-description": "Show nodes this number of links away", "option-neighbor-links": "Neighbor links", "option-neighbor-links-description": "Show links between neighbors.", "option-forelinks": "Outgoing links", "option-forelinks-description": "Show links to other files", "option-backlinks": "Incoming links", "option-backlinks-description": "Show links from other files", "option-show-tags": "Tags", "option-show-tags-description": "Tags are linked to the files that contain them", "option-show-attachments": "Attachments", "option-show-attachments-description": "Show attachments included by files", "option-show-existing-files-only": "Existing files only", "option-show-existing-files-only-description": "When checked, links to nonexistent files are not shown", "option-show-orphans": "Orphans", "option-show-orphans-description": "Show files that are not linked to any other file", "label-display": "Display", "option-show-arrows": "Arrows", "option-show-arrows-description": "Show arrows when zoomed in", "option-text-fade": "Text fade threshold", "option-node-size": "Node size", "option-link-thickness": "Link thickness", "label-forces": "Forces", "option-center-force": "Center force", "option-link-force": "Link force", "option-link-distance": "Link distance", "option-repel-force": "Repel force", "tooltip-open-graph-settings": "Open graph settings", "msg-screenshot-copied": "Screenshot copied to the clipboard.", "label-groups": "Groups", "placeholder-enter-query": "Enter query...", "tooltip-delete-graph": "Delete group", "button-new-group": "New group", "tooltip-click-to-change-drag-to-reorder": "Click to change color\nDrag to reorder groups", "action-timelapse": "Start graph timelapse animation", "tooltip-start-timelapse-animation": "Start timelapse animation", "button-animate-timelapse": "Animate" }, "backlinks": { "name": "Backlinks", "desc": "Show number of backlinks in the status bar.", "action-open": "Open backlinks", "action-show": "Show backlinks pane", "action-open-for-current": "Open backlinks for the current file", "action-toggle-backlinks-in-document": "Toggle backlinks in document", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "Linked mentions", "label-no-backlinks": "No backlinks found.", "label-unlinked-mentions": "Unlinked mentions", "label-show-search": "Show search filter", "label-link-button-text": "Link", "tab-title": "Backlinks for {{displayText}}", "label-no-unlinked-mentions": "No unlinked mentions found.", "ellipsis": "...", "option-backlink-in-document": "Backlink in document", "option-backlink-in-document-desc": "Show backlinks in document by default when opening new panes." }, "outgoing-links": { "name": "Outgoing Links", "desc": "Show outgoing links and detect unlinked mentions of other notes in the current note.", "action-open": "Open outgoing links", "action-show": "Show outgoing links pane", "action-open-for-current": "Open outgoing links for the current file", "tab-title": "Outgoing links from {{displayText}}", "label-links": "Links", "label-no-links": "No links found.", "label-unlinked-mentions": "Unlinked mentions", "tooltip-link-file": "Link this file", "tooltip-not-created": "Not created yet" }, "tag-pane": { "name": "Tag pane", "desc": "Displays all your tags along with their number of occurrences.", "action-show": "Show tag pane", "label-no-tags": "No tags found.", "label-sort-by-name-a-to-z": "Tag name (A to Z)", "label-sort-by-name-z-to-a": "Tag name (Z to A)", "label-sort-by-frequency-high-to-low": "Frequency (high to low)", "label-sort-by-frequency-low-to-high": "Frequency (low to high)", "action-show-nested-tags": "Show nested tags", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "Page preview", "desc": "Preview a note when hovering an internal link. Ctrl/Cmd + hover in editor mode.", "label-empty-note": "\"{{linktext}}\" is not created yet. Click to create.", "label-source-editor": "Editor", "label-source-preview": "Preview", "label-source-search": "Search, Backlinks, and Outgoing links", "label-require-mod": "Require {{key}} to trigger page preview on hover" }, "starred": { "name": "Starred", "desc": "Star frequently used files and searches.", "action-show": "Show starred pane", "action-toggle": "Star/unstar current file", "action-toggle-search": "Star/unstar current search", "action-star": "Star", "action-unstar": "Unstar", "menu-opt-remove": "Remove", "msg-successfully-starred": "Successfully starred {{type}} \"{{title}}\".", "msg-removed-starred": "Removed starred {{type}} \"{{title}}\".", "msg-cannot-find-path": "Cannot find file at \"{{path}}\"." }, "custom-css": { "name": "Custom CSS", "desc": "Reads \"obsidian.css\" in the vault and applies it.", "setting-community-themes": "Community themes", "msg-fetching-themes": "Fetching community theme data...", "prompt-filter": "Filter...", "label-dark-theme-only": "Dark themes only", "label-light-theme-only": "Light themes only", "label-use": "Use", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "Update", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "Remove theme", "label-visit-on-github": "Visit on GitHub", "msg-load-error": "Could not load community themes, please check your network.", "msg-now-using-theme": "You're now using {{title}} as your CSS theme.", "msg-deleted-theme": "The theme {{title}} has been deleted.", "msg-updated-theme": "The theme {{title}} has been updated.", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "Command palette", "desc": "Type a command to invoke it. No need to use the UI or remember the shortcut.", "action-open": "Open command palette", "instruction-navigate": "to navigate", "instruction-use": "to use", "instruction-dismiss": "to dismiss", "label-no-commands": "No commands found.", "prompt-type-command": "Type a command...", "label-pinned-commands": "Pinned commands", "option-add-new-pin": "New pinned command", "option-add-new-pin-description": "Pinned commands will appear at the top of all commands when no search query is present." }, "markdown-format-importer": { "name": "Markdown format importer", "desc": "Convert Markdown from other apps to Obsidian format.", "action-open": "Open Markdown importer", "option-roam-tag-fixer": "Roam Research tag fixer", "option-roam-tag-fixer-description": "Converts \"#tag\" and \"#[[tag]]\" to \"[[tag]]\".", "option-roam-highlight-fixer": "Roam Research highlight fixer", "option-roam-highlight-fixer-description": "Converts \"^^highlight^^\" to \"==highlight==\".", "option-roam-todo-converter": "Roam Research TODO converter", "option-roam-todo-converter-description": "Converts \"{{[[TODO]]}}\" to \"[ ]\".", "option-bear-highlight-fixer": "Bear highlight fixer", "option-bear-highlight-fixer-description": "Converts \"::highlight::\" to \"==highlight==\".", "zettelkasten-link-fixer": "Zettelkasten link fixer", "zettelkasten-link-fixer-description": "Fixes \"[[UID]]\" links to full \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Zettelkasten link beautifier", "zettelkasten-link-beautifier-description": "Fixes \"[[UID]]\" links and also beautify them \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Warning: the importer will convert all the files in your vault, not just the current file.", "msg-override-files-warning": "Your files will be overwritten. Back up all your files before attempting conversion.", "label-start-conversion": "Start Conversion", "label-stop": "Stop", "label-go-back": "Go back", "label-done": "Done", "label-processing": "Processing...", "label-cancelling": "Cancelling...", "label-finished": "Finished!", "label-processed-files": "Processed files", "label-modified-files": "Modified files", "label-total-replacements": "Total replacements" }, "daily-notes": { "name": "Daily notes", "desc": "Open today's daily note, or create one if not present.", "short-name": "Today", "action-open": "Open today's note", "action-open-previous": "Open previous daily note", "action-open-next": "Open next daily note", "action-insert-text": "Insert text into daily note", "action-insert-link": "Insert link into daily note", "msg-fail-format": "Failed to create daily note. \"{{format}}\" is not a valid format.", "msg-fail-folder": "Failed to create daily note. Folder \"{{folderOption}}\" not found.", "msg-fail-template-file": "Failed to create daily note. Template file \"{{template}}\" not found.", "msg-no-previous": "There's no daily note before this one.", "msg-no-next": "There's no daily note after this one.", "option-date-format": "Date format", "label-refer-to-syntax": "For more syntax, refer to: ", "label-syntax-link": "format reference", "label-syntax-live-preview": "Here is what it will look like: ", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new daily note.", "option-template": "Template file location", "option-template-description": "The file path to use as template.", "option-open-on-start": "Open daily note on startup", "option-open-on-start-description": "Open your daily note automatically whenever you open this vault." }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Random note", "desc": "Opens a random note. Useful for reviewing and discovering.", "short-name": "Random", "action-open": "Open random note" }, "outline": { "name": "Outline", "desc": "Displays the outline of the current file or linked pane.", "action-open": "Open outline", "action-show": "Show outline pane", "action-open-for-current": "Open outline of the current file", "tab-title": "Outline of {{displayText}}", "label-no-headings": "No headings found." }, "word-count": { "name": "Word count", "desc": "Show word count in the status bar." }, "slides": { "name": "Slides", "desc": "Present from Markdown. Use \"---\" to separate slides.", "action-start": "Start presentation" }, "audio-recorder": { "name": "Audio recorder", "desc": "Record audio and save as attachment.", "action-start": "Start recording audio", "action-stop": "Stop recording audio", "action-toggle": "Start/stop recording", "msg-access-denied": "Microphone access was denied, please enable it from the preference pane.", "msg-pending-grant": "Please grant microphone permission to start recording.", "msg-no-microphone": "No microphone is connected." }, "open-with-default-app": { "name": "Open in default app", "desc": "Add button to open current file in the default app.", "action-open-file": "Open in default app", "action-open-file-mobile": "Share", "action-show-in-folder": "Show in folder", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "Templates", "desc": "Insert template content from a folder of template files.", "action-insert": "Insert template", "action-insert-current-date": "Insert current date", "action-insert-current-time": "Insert current time", "option-template-folder-location": "Template folder location", "option-template-folder-location-description": "Files in this folder will be available as templates.", "option-template-date-format": "Date format", "option-template-date-format-description": "{{date}} in the template file will be replaced with this value.", "option-template-date-format-description2": "You can also use {{date:YYYY-MM-DD}} to override the format once.", "option-template-time-format": "Time format", "option-template-time-format-description": "{{time}} in the template file will be replaced with this value.", "option-template-time-format-description2": "You can also use {{time:HH:mm}} to override the format once.", "instruction-navigate": "to navigate", "instruction-insert": "to insert template", "instruction-dismiss": "to dismiss", "msg-no-templates-found": "No templates found", "msg-fail-invalid-folder": "Failed to list templates. Template folder is invalid.", "msg-fail-folder-not-found": "Failed to list templates. Folder \"{{folderOption}}\" not found.", "prompt-type-template": "Type name of a template..." }, "translucency": { "name": "Translucent window", "desc": "Turn on translucency effect to enhance a sense of depth. Best used with dark mode. Not supported on Linux." }, "slash-command": { "name": "Slash commands", "desc": "Enable the ability to trigger slash commands in the editor by typing the forward slash." }, "editor-status": { "name": "Editor status", "desc": "Adds a status bar item to show and change the current editor mode.", "read": "Reading", "edit-source": "Source mode", "edit-live-preview": "Live Preview" }, "publish": { "name": "Publish", "desc": "Publish your notes through Obsidian Publish.", "action-publish-changes": "Publish changes...", "label-no-internet-access": "You need access to the internet to publish changes.", "label-publish-service-description": "Obsidian Publish is an add-on paid service that lets you publish your notes online directly from Obsidian.", "label-please-login": "To start publishing, please log in or create a new Obsidian account.", "label-no-publish-subscription": "You do not have an Obsidian Publish subscription yet.", "button-purchase": "Purchase", "label-manage-sites": "Manage sites", "label-no-sites": "You don't have any sites.", "button-choose": "Choose", "tooltip-edit-site-id": "Edit site ID", "tooltip-delete-site": "Delete site", "label-delete-site-confirmation": "Are you sure you want to delete this site?", "label-delete-site-details": "This will immediately and permanently delete your site.", "label-confirm-delete-site": "Confirm delete site \"{{site}}\"", "option-site-id": "Site ID", "option-site-id-description": "Your site will be at https://publish.obsidian.md/{site id}. You can change this later. Only lowercase letters, numbers, and dashes are allowed.", "option-site-id-placeholder": "Pick a site ID", "button-create": "Create", "msg-invalid-site-id": "Site ID can only contain lowercase letters, numbers, and dashes.", "msg-site-id-in-use": "This site ID is in use, please try another one.", "msg-create-site-issue": "That was an issue when creating your site.", "label-site-options": "Site options", "option-site-general": "General", "option-site-components": "Components", "option-site-appearance": "Appearance", "option-site-reading-experience": "Reading experience", "option-site-misc": "Other site settings", "option-site-name": "Site name", "option-site-name-description": "Name of your published site. It will show up in the page title of your site.", "option-site-name-placeholder": "Name of your site", "option-home-page-file": "Homepage file", "option-home-page-file-description": "The first page the user sees when landing on your published site", "option-home-page-file-placeholder": "Pick a published file", "option-logo": "Logo", "option-logo-description": "Pick an image file as your site logo.", "option-logo-placeholder": "Any uploaded image in your vault...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "Theme", "option-theme-description": "Choose default color scheme for your site.", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "Show navigation", "option-show-navigation-description": "Display a list of all published pages on the left side of your published site.", "option-show-search": "Show search bar", "option-show-search-description": "Display a search bar at top of the navigation that lets the visitors search pages and headings on your site.", "option-show-graph": "Show graph view", "option-show-graph-description": "Display a small local graph on each page.", "option-show-outline": "Show table of contents", "option-show-outline-description": "Display the outline of headings on each page.", "option-show-backlinks": "Show backlinks", "option-show-backlinks-description": "Show backlink section at the end of each page.", "option-sliding-window-mode": "Use sliding windows", "option-sliding-window-mode-description": "Open pages in new panes to the right. Allows scrolling through panes horizontally.", "option-hover-preview-file": "Show hover preview", "option-hover-preview-file-description": "Display page preview when hovering links.", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "Readable line length", "option-readable-line-length-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-site-password": "Passwords", "option-site-password-description": "Restrict access to your site with passwords.", "option-google-analytics": "Google Analytics tracking code", "option-google-analytics-description": "Configure Google Analytics for your site. Only available for visitors from your custom domain URL. Please check with your local laws and regulations first.", "button-manage-passwords": "Manage", "button-save-site-settings": "Save site settings", "msg-updated-options": "Updated options for your site.", "button-go-back": "Back", "label-publishing-to": "Publishing to", "tooltip-switch-site": "Switch site", "button-add-linked": "Add linked", "tooltip-add-linked": "Add all files that are linked by currently selected items", "msg-added-linked-files": "{{count}} linked file has been added.", "msg-added-linked-files_plural": "{{count}} linked files have been added.", "tooltip-open-site-options": "Change site options", "label-no-changes-detected": "No changes were detected.", "label-changed-files-to-be-published": "Changes", "label-unchanged-files-already-published": "Unchanged (select to delete)", "label-file-selected": " selected", "button-select-all-files": "Select all", "button-deselect-all-files": "Deselect all", "label-new-files-to-be-published": "New", "button-publish": "Publish", "msg-no-permission-to-publish-to-site": "You do not have permission to publish to the current site.", "msg-select-at-least-one-file": "Please select at least one file.", "label-upload-changes": "Upload changes", "button-done": "Done", "button-stop": "Stop", "label-status-uploading": "Uploading", "label-status-to-publish": "To publish", "label-status-to-delete": "To delete", "label-status-published": "Published", "label-status-deleted": "Deleted", "label-status-failed": "Failed", "label-status-cancelled": "Cancelled", "button-change": "Change", "label-clear-cache": "It takes up to a few minutes for the changes to show up on your site. If you do not see your latest changes, try clearing the cache in your browser.", "label-visit-site": "You can visit your site here: ", "msg-something-went-wrong": "Something went wrong. Please check the developer console for details.", "msg-network-error": "A network error occurred. ", "label-manage-passwords": "Manage passwords", "label-add-password": "Add password", "action-new-password": "New password", "label-no-password": "Your site currently does not have any passwords. Anyone can visit it.", "label-have-password": "Your site is password protected. If you have multiple passwords, visitors can access your site by entering any of them.", "option-password-name": "Password", "option-password-desc": "A hash of your password will be stored securely. Once the password is set, it cannot be revealed in plaintext.", "option-password-placeholder": "Your password", "option-nickname-name": "Nickname (optional)", "option-nickname-desc": "Set a nickname to remind yourself what or who the password is for.", "action-add-password": "Add this password", "label-untitled-password": "Untitled password", "label-password-created-time": "Created {{time}}", "msg-added-new-password": "Added new password.", "option-custom-domain": "Custom domain", "option-custom-domain-desc": "Use your own domain rather than the https://publish.obsidian.md/{site id} URL.", "option-noindex": "Disallow search engine indexing", "option-noindex-desc": "Prevent search engines from indexing your site.", "button-configure": "Configure", "label-configure-custom-domain": "Configure custom domain", "option-custom-url-name": "Custom URL", "option-custom-url-desc": "The URL that your site will be located at.", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "Redirect to your custom domain", "option-custom-url-redirect-desc": "Redirect visitors on publish.obsidian.md/id to your custom domain.", "button-update-custom-domain": "Update domain setting", "label-custom-domain-instructions": "Please refer to our {{link}} on our help site for more information.", "label-custom-domain-link-name": "custom domain setup guide", "label-site-usage": "You're using {{site}} out of your {{limit}}.", "button-add-more-sites": "Buy more sites", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "Workspaces", "desc": "Save and load workspace layout.", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "Save", "button-load": "Load", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "Sync", "desc": "Synchronize your files through Obsidian Sync.", "action-view-version-history": "View version history", "label-load-more": "Load more", "label-show-diff": "Show diff", "label-copy-to-clipboard": "Copy to clipboard", "label-restore-this-version": "Restore this version", "msg-already-latest-version": "This version is already the latest version.", "msg-restored-version": "Successfully restored version from {{time}}", "label-file-deleted": "This file was deleted", "label-no-earlier-version": "There were no earlier versions of this file.", "label-empty-file": "Empty", "label-setting-files": "Setting files", "label-deleted-files": "Deleted files", "label-version-history": "Version history", "label-click-to-see-history": "Click on a deleted file to see its history.", "label-create-remote-vault": "Create remote vault", "msg-please-enter-password": "Please enter a password.", "msg-vault-name-cannot-be-empty": "Vault name cannot be empty.", "msg-successfully-created-vault": "Successfully create remote vault \"{{name}}\".", "label-remote-vault-explanation": "Remote vaults securely synchronize your vault between devices.", "option-vault-name": "Vault name", "option-vault-name-desc": "Helps you remember what this vault is for.", "option-vault-name-placeholder": "My awesome vault", "option-use-custom-encryption-password": "Customize end-to-end encryption password", "option-use-custom-encryption-password-desc": "If you turn this off, we will securely manage an encryption key for you.", "option-use-custom-encryption-password-desc-warning": "This option cannot be changed later.", "option-encryption-password": "Encryption password", "option-encryption-password-desc": "This password cannot be changed later.", "option-encryption-password-desc-warning": "If you forget this password, any remote data will remain unusable forever.", "option-encryption-password-desc-2": "This does not affect your local data.", "option-encryption-password-placeholder": "Your password", "label-enter-encryption-password": "Enter encryption password", "button-unlock-vault": "Unlock vault", "msg-verified-password": "Successfully verified your password.", "label-remote-vaults": "Your remote vaults", "label-vault-created-time": "Created {{time}}", "tooltip-delete-remote-vault": "Delete", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "Confirm delete vault", "label-confirm-delete-remote-vault-question": "Are you sure you want to delete this remote vault?", "label-confirm-delete-remote-vault-result": "All data on our server, including version history, will be deleted. Your local files will stay intact.", "label-confirm-delete-remote-vault-warning": "This action is permanent and irreversible.", "msg-remote-vault-deleted": "{{name}} has been deleted.", "button-connect-to-remote-vault": "Connect", "button-disconnect-from-remote-vault": "Disconnect", "label-not-remote-vaults": "You don't have any remote vaults.", "button-create-new-remote-vault": "Create new vault", "label-sync-log": "Sync log", "options-only-show-errors": "Errors only", "options-only-show-errors-desc": "Only show errors and hide other log items.", "button-copy-sync-log": "Copy sync log", "msg-successfully-copied-sync-log": "Successfully copied sync log.", "button-retry": "Retry", "button-purchase-subscription": "Purchase", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "Choose", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "Sync status", "option-sync-status-desc-paused": "Obsidian Sync is currently paused.", "option-sync-status-desc-running": "Obsidian Sync is currently running.", "option-device-name": "Device name", "option-device-name-desc": "This name will be displayed in the sync log. Leave empty to use the default name.", "button-resume": "Resume", "button-pause": "Pause", "option-view-deleted-files": "Deleted files", "option-view-deleted-files-desc": "View and restore deleted files.", "option-sync-log": "Sync activity", "option-sync-log-desc": "View recent sync activities for debugging.", "button-view": "View", "button-bulk-restore": "Bulk restore", "button-restore-selected-files": "Restore selected files", "msg-restoring": "Restoring...", "msg-restoring-complete": "`Restore complete: {{succeeded}} succeeded and {{failed}} failed.`", "option-over-size": "Vault size over limit", "option-over-size-desc": "Your vault is at {{size}} out of {{limit}}.", "msg-largest-files": "View largest files", "msg-largest-files-desc": "These are the remote files that are taking the most space. After deleting attachments, use the purge button to free up remote vault space.", "button-purge-remote": "Purge", "tooltip-purge-remote": "Permanently purge deleted attachments from remote vault to save space.", "msg-purge-complete": "Purge complete.", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "Selective sync", "option-excluded-folders": "Excluded folders", "option-excluded-folder-desc": "Prevent certain folders from being synced.", "option-currently-excluded-folders": " These folders currently excluded:", "button-manage-excluded-folders": "Manage", "option-sync-image": "Sync images", "option-sync-image-desc": "Sync image files with these extensions: {{extensions}}.", "option-sync-audio": "Sync audio", "option-sync-audio-desc": "Sync audio files with these extensions: {{extensions}}.", "option-sync-video": "Sync videos", "option-sync-video-desc": "Sync video files with these extensions: {{extensions}}.", "option-sync-pdf": "Sync PDFs", "option-sync-pdf-desc": "Sync PDF files.", "option-sync-unsupported": "Sync all other types", "option-sync-unsupported-desc": "Sync unsupported file types.", "option-vault-config-sync": "Vault configuration sync", "option-view-config-files": "Settings version history", "option-view-config-files-desc": "View and restore version history of setting files.", "option-sync-app": "Main settings", "option-sync-app-desc": "Enable to sync editor settings, files & links settings, custom hotkeys, etc.", "option-sync-appearance": "Appearance settings", "option-sync-appearance-desc": "Sync appearance settings like dark mode, active theme, and enabled snippets.", "option-sync-appearance-data": "Themes and snippets", "option-sync-appearance-data-desc": "Sync downloaded themes and snippets. Whether they are enabled depends on the previous setting.", "option-sync-hotkey": "Hotkeys", "option-sync-hotkey-desc": "Sync custom hotkeys.", "option-sync-core-plugin": "Active core plugin list", "option-sync-core-plugin-desc": "Sync which core plugins are enabled.", "option-sync-core-plugin-data": "Core plugin settings", "option-sync-core-plugin-data-desc": "Sync core plugin settings.", "option-sync-community-plugin": "Active community plugin list", "option-sync-community-plugin-desc": "Sync which community plugins are enabled.", "option-sync-community-plugin-data": "Installed community plugins", "option-sync-community-plugin-data-desc": "Sync installed community plugins (.js, .css, and manifest.json files) and their settings.", "label-sync-introduction": "Obsidian Sync is Obsidian's add-on sync service with end-to-end encryption and version history.", "label-account-required": "To start syncing, please log in or create a new Obsidian account.", "button-sign-up": "Sign up", "button-log-in": "Log in", "label-manage-excluded-folders": "Manage excluded folders", "label-number-of-folders-excluded": "{{folders}} are currently excluded from being synced.", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "Setup connection", "label-now-connected-to-vault": "You're now connected to \"{{name}}\".", "button-start-syncing": "Start syncing", "label-confirm-merge-vault": "Confirm Merge Vault", "msg-vault-has-notes": "Your local vault already contains some notes.", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "File recovery", "desc": "Let you restore recent snapshots to recover from accidental data loss. Snapshots are only saved for Markdown files.", "action-open": "Open saved snapshots", "option-interval": "Snapshot interval", "option-interval-description": "Minimal interval in minutes between two snapshots.", "option-keep": "History length", "option-keep-description": "Length in days snapshots is kept for.", "option-open-history": "Snapshots", "option-open-history-description": "View and restore saved snapshots.", "button-view-snapshots": "View", "option-clear": "Clear history", "option-clear-description": "Wipe all snapshots.", "button-clear-history": "Clear", "label-clear-warning": "Are you sure you want to delete all snapshots? Note that only snapshots will be removed. All files inside your vault will not be affected.", "msg-clear-complete": "Snapshots cleared.", "label-no-history-found": "No snapshots found.", "placeholder-choose-file": "Choose a file...", "label-select-file": "Please select a file on the left to view snapshots." }, "note-composer": { "name": "Note composer", "desc": "Merge, split, and refactor notes.", "option-confirm-file-merge": "Confirm file merge", "option-confirm-file-merge-description": "Prompt before merging two files.", "option-split-replacement-text": "Text after extraction", "option-split-replacement-text-description": "What to show in place of the selected text after extracting it.", "option-choice-split-replacement-text-link": "Link to new file", "option-choice-split-replacement-text-embed": "Embed new file", "option-choice-split-replacement-text-none": "None", "option-template-file": "Template file location", "option-template-file-description": "Template file to use when merging or extracting. Available variables: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Merge current file with another file...", "action-merge-file": "Merge entire file with...", "label-no-files": "No files found.", "instruction-navigate": "to navigate", "instruction-merge": "to merge", "instruction-create-new": "to create new", "instruction-merge-at-top": "to merge at top", "instruction-dismiss": "to dismiss", "prompt-select-file-to-merge": "Select file to merge into...", "label-merge-file": "Merge file", "label-confirm-file-merge": "Are you sure you want to merge \"{{file}}\" into \"{{destination}}\"? \"{{file}}\" will be deleted.", "button-merge": "Merge", "button-merge-do-not-ask-again": "Merge and don't ask again", "command-split-file": "Extract current selection...", "command-extract-heading": "Extract this heading...", "instruction-append": "to move to bottom", "instruction-prepend": "to move to top", "msg-fail-to-fetch-template": "Failed to fetch template file: \"{{template}}\" not found.", "msg-fail-to-find-heading": "Failed to find heading" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} word", "word-with-count_plural": "{{count}} words", "character-with-count": "{{count}} character", "character-with-count_plural": "{{count}} characters", "link-with-count": "{{count}} link", "link-with-count_plural": "{{count}} links", "file-with-count": "{{count}} file", "file-with-count_plural": "{{count}} file", "folder-with-count": "{{count}} folder", "folder-with-count_plural": "{{count}} folders", "backlink-with-count": "{{count}} backlink", "backlink-with-count_plural": "{{count}} backlinks", "site-with-count": "{{count}} site", "site-with-count_plural": "{{count}} sites", "plugin-with-count": "{{count}} plugin", "plugin-with-count_plural": "{{count}} plugins", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } }{ "setting": { "options": "Opciones", "plugin": "Plugin", "builtin-plugins": "Plugins principales", "plugin-options": "Opciones Plugins", "folder-path-example-placeholder": "Ejemplo: carpeta 1/carpeta 2", "file-path-example-placeholder": "Ejemplo: carpeta/nota", "msg-restart-required": "Para cambiar esta opción, es necesario reiniciar para que surta efecto.", "editor": { "name": "Editor", "section-general": "General", "section-behavior": "Conducta", "section-display": "Monitor", "option-spellcheck": "Revisión ortográfica", "option-spellcheck-description": "Activar el corrector de ortografía. Por ahora sólo funciona para Inglés (US).", "spellcheck-languages": "Idiomas del corrector ortográfico", "spellcheck-languages-description": "Elija los idiomas que utilizará el corrector ortográfico.", "spellcheck-languages-mac-description": "El corrector ortográfico nativo detectará automáticamente el idioma que se está utilizando en macOS.", "spellcheck-dict": "Diccionario del corrector de ortografía", "spellcheck-dict-empty": "El diccionario del corrector de ortografía está vacío.", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "Longitud de línea legible", "option-readable-line-description": "Limitar el máximo de la longitud de línea. Muestra menos contenido en pantalla, pero los párrafos largos son más legibles.", "option-strict-line-break": "Saltos de línea estrictos", "option-strict-line-break-description": "En modo previsualización, ignora los saltos de una sola línea según las especificaciones de Markdown. Desactívalo para que los saltos de una sola línea se muestren en previsualización.", "option-show-frontmatter": "Mostrar frontmatter", "option-show-frontmatter-description": "En modo de vista previa, muestra frontmatter como un bloque de código. Desactivelo para ocultar la sección frontmatter.", "option-auto-pair-brackets": "Emparejamiento automático de corchetes", "option-auto-pair-brackets-description": "Empareja automáticamente los corchetes y comillas.", "option-auto-pair-markdown": "Emparejamiento automático de sintaxis Markdown", "option-auto-pair-markdown-description": "Empareja automáticamente los símbolos para negrita y cursiva.", "option-smart-indent-lists": "Listas con indentado inteligente", "option-smart-indent-lists-description": "Gestiona la indentación y marcador de lista por ti.", "option-fold-heading": "Colapsar encabezado", "option-fold-heading-description": "Permite colapsar todo bajo un encabezado.", "option-fold-indent": "Colapsar texto indentado", "option-fold-indent-description": "Permite colapsar una porción con el mismo indentado como, por ejemplo, listas.", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Editing view", "option-default-new-tab-view-reading": "Reading view", "option-default-editing-mode": "Modo de edición predeterminado", "option-default-editing-mode-description": "El modo de edición predeterminado con el que comenzará un nuevo panel.", "option-default-editing-mode-source": "Modo fuente", "option-default-editing-mode-live-preview": "Vista previa en vivo", "option-show-line-number": "Mostrar número de línea", "option-show-line-number-description": "Mostrar los números de línea en la canaleta.", "option-indentation-guide": "Mostrar guías de sangría", "option-indentation-guide-description": "Mostrar líneas de relación verticales entre viñetas para asistencia visual.", "option-use-tabs": "Usar tabulador", "option-use-tabs-description": "Usa el tabulador para indentar cuando se presiona la tecla \"Tab\". Desactivar para usar espacios.", "option-tab-size": "Tamaño de tabulación", "option-tab-size-description": "Número de espacios a los que equivale una tabulación.", "option-rtl": "Right-to-left (RTL)", "option-rtl-description": "Establece la dirección del texto de las notas para que se muestren de derecha a izquierda.", "option-auto-convert-html": "Conversión automática de HTML", "option-auto-convert-html-description": "Convierte automáticamente HTML a Markdown al pegar y arrastrar y soltar desde páginas web. Use Ctrl/Cmd+Shift+V para pegar sin convertir.", "option-vim-key-bindings": "Atajos de teclado de Vim", "option-vim-key-bindings-description": "Permite el uso de los atajos de teclado de Vim en el editor.", "option-vim-key-bindings-mobile": "En dispositivos móviles este ajuste se realiza individualmente por dispositivo y no se sincroniza a través del archivo config.", "option-emacsy-keys": "Vinculaciones de teclas de estilo Emacs heredadas para macOS", "option-emacsy-keys-description": "Le permite usar las teclas de navegación adicionales al estilo de Emacs, que son estándar en macOS, pero pueden interferir con algunas operaciones clave.", "label-confirm-enable-vim": "Confirme la entrada en modo Vim", "label-vim-warning": "El modo Vim es para una edición de texto eficiente, pero puede ser poco intuitivo. Si no está familiarizadon con Vim, esta opción puede hacer que parezca que Obsidian ha dejado de funcionar.", "label-vim-test": "Para verificar que conoce Vim, introduzca a continuación el comando para salir de Vim sin guardar:", "label-vim-your-answer": "Tu respuesta", "placeholder-enter-command": "Introduce el comando...", "button-confirm-enable-vim": "Habilitar Vim", "msg-vim-mode-enabled": "El comando es correcto. El modo Vim ahora está habilitado.", "msg-vim-mode-not-enabled": "El comando es incorrecto. El modo Vim permanece desactivado para protegerte.", "msg-vim-mode-please-enter-command": "Por favor, introduce el comando para habilitar el modo Vim", "option-legacy-editor": "Usar editor heredado", "option-legacy-editor-description2": "The legacy editor will be deprecated soon. It is currently no longer maintained, and as such, bugs will no longer be addressed.", "label-legacy-deprecation": "New editor is here", "label-legacy-deprecation-1": "Obsidian now has a brand new editor that's more robust and accessible.", "label-legacy-deprecation-2": "It seems you're still using the legacy editor, and we think you'll enjoy the new editor.", "label-legacy-deprecation-choice": "Which mode would you like to use?", "label-live-preview-description": "A more modern, what-you-see-is-what-you-get experience.", "label-source-mode-description": "See raw Markdown with syntax highlighting.", "button-start-new-editor": "Start new editor" }, "file": { "name": "Archivos y enlaces", "option-confirm-file-deletion": "Confirmar borrado de archivo", "option-confirm-file-deletion-description": "Si se desea confirmar el borrado del archivo.", "option-delete-destination": "Archivos borrados", "option-delete-destination-description": "Qué hacer con los archivos una vez han sido borrados.", "option-choice-system-trash": "Mover a la papelera del sistema", "option-choice-vault-trash": "Mover a la papelera de Obsidian (carpeta .trash)", "option-choice-permanent-delete": "Borrar permanentemente", "option-always-update-links": "Siempre actualizar enlaces cuando", "option-always-update-links-description": "Si los enlaces se actualizan automaticamente después de renombrar un archivo o preguntar.", "option-new-note-location": "Lugar por defecto para nuevas notas", "option-new-note-location-description": "Dónde poner las nuevas notas. Es sobreescrito por configuraciones de plugins.", "option-choice-vault-root": "Ruta raíz de bóveda", "option-choice-current-folder": "Misma carpeta donde está el archivo", "option-choice-specified-folder": "En la carpeta especificada debajo", "option-new-file-folder-path": "Carpeta en la que crear nuevas notas", "option-new-file-folder-path-description": "Las notas nuevas aparecerán bajo esta carpeta. Es sobreescrito por configuraciones de plugins.", "option-use-wiki-links": "Usar [[Wikilinks]]", "option-use-wiki-links-description": "Genere automáticamente Wikilinks para [[links]] y ![[images]] en lugar de enlaces e imágenes de Markdown. Desactive esta opción para generar enlaces de Markdown en su lugar.", "option-show-unsupported-files": "Detectar todas las extensiones de archivo", "option-show-unsupported-files-description": "Muestre archivos con cualquier extensión, incluso si Obsidian no puede abrirlos de forma nativa, para que pueda vincularlos y verlos en el Explorador de Archivos y el Selector Rápido (Quick Switcher).", "option-link-autocompleted-format": "Formato de enlace nuevo", "option-link-autocompleted-format-description": "Qué enlaces insertar cuando se autogeneran los enlaces internos.", "option-choice-shortest-linktext": "Camino más corto cuando sea posible", "option-choice-relative-path": "Ruta relativa al archivo", "option-choice-absolute-path": "Ruta absoluta en el bóveda", "option-new-attachment-location": "Ubicación predeterminada para nuevos archivos adjuntos", "option-new-attachment-location-description": "Donde se colocan los archivos adjuntos recién agregados.", "option-choice-subdirectory": "En la subcarpeta de la carpeta actual", "option-attachment-folder-path": "Ruta de la carpeta de adjuntos", "option-attachment-folder-path-description": "Los adjuntos nuevos aparecerán aquí. Incluye imágenes creadas mediante drag al arrastrar y soltar o al pegar, y grabaciones de audio.", "option-attachment-subfolder-path": "Nombre de la subcarpeta", "option-attachment-subfolder-path-description": "Si su archivo está en \"vault/folder\", y su nombre de la subcarpeta establecida en \"adjuntos\", los archivos adjuntos se guardarán en \"vault/folder/adjuntos\".", "option-attachment-subfolder-path-placeholder": "adjuntos", "option-excluded-files": "Archivos excluídos", "option-excluded-files-desc": "Los archivos excluídos se ocultarán o harán menos visibles en diferentes lugares, como Quick Switcher, link suggestion, y Graph View.", "label-no-excluded-filters-applied": "No se está aplicando ningún filtro de exclusión. Añada uno debajo.", "label-excluded-filters-applied": "Los archivos que cumplen los siguientes filtros están actualmente excluídos:", "label-excluded-filter": "Filtrar", "placeholder-excluded-filter": "Enter path or \"/regex/\"..." }, "appearance": { "name": "Apariencia", "option-base-theme": "Tema base", "option-base-theme-description": "Elige el esquema de colores por defecto de Obsidian.", "option-accent-color": "Color acentuado", "option-accent-color-description": "Seleccione el color acentuado utilizado en toda la aplicación.", "dark-theme": "Oscuro", "light-theme": "Claro", "system-theme": "Adaptar al sistema", "option-font": "Fuente", "option-advanced": "Avanzado", "option-interface-font": "Fuente de la interfaz", "option-interface-font-description": "Configurar la fuente de la interfaz para todo Obsidian.", "option-text-font": "Fuente del texto", "option-text-font-description": "Configurar la fuente en las vistas de edición y lectura.", "option-monospace-font": "Fuente Monospace", "option-monospace-font-description": "Configurar la fuente en lugares como bloques de código y frontmatter.", "label-single-font-currently-in-effect": " Fuente actualmente usada: ", "label-multiple-fonts-currently-in-effect": " Las siguientes fuentes están siendo actualmente usadas:", "option-font-placeholder": "Introducir nombre de la fuente...", "label-no-custom-font-set": "No hay ninguna fuente personalizada aplicada ahora mismo. Añade una abajo.", "label-font-applied": "Se aplicará la primera fuente de esta lista que esté disponible en su sistema.", "msg-font-not-found": "No se ha detectado esta fuente en su sistema.", "msg-font-found": "Esta fuente ha sido detectada en su sistema.", "label-font-name": "Nombre de la fuente", "option-community-themes": "Abrir temas de la comunidad", "option-community-themes-description": "Previsualizar y usar temas increíbles creados por la comunidad.", "button-browse-community-themes": "Navegar", "option-font-size": "Tamaño de fuente", "option-font-size-description": "Tamaño de fuente en píxeles que afecta al editor y la vista previa.", "option-font-size-action": "Ajuste rápido del tamaño de fuente", "option-font-size-action-description": "Ajuste el tamaño de la fuente usando Ctrl + Scroll, o usando el gesto de pellizcar y acercar del trackpad.", "option-themes": "Temas", "option-manage-themes-description": "Administre los temas instalados y explore los temas de la comunidad.", "option-theme-button-manage": "Gestionar", "option-choice-none": "Ninguno", "option-native-menus": "Menús nativos", "option-native-menus-desc": "Los menús de toda la aplicación coincidirán con el sistema operativo. No se verán afectados por su tema.", "button-reload-themes": "Recargar temas", "msg-reloaded-themes": "Recargados temas CSS personalizados.", "button-open-themes-folder": "Abrir carpeta de temas", "option-css-snippets": "Fragmentos CSS", "label-no-css-snippets-found": "No se encontraron fragmentos CSS en la carpeta de fragmentos.", "no-snippet-description": "Los fragmentos de CSS están almacenados en \"{{path}}\".", "button-reload-snippets": "Recargar fragmentos", "button-open-snippets-folder": "Abrir carpeta de fragmentos", "msg-reloaded-snippets": "Recargar fragmentos CSS.", "option-toggle-snippet-description": "Aplicar fragmentos CSS en \"{{path}}\".", "label-installed-themes": "Temas instalados", "label-screenshot-unavailable": "Captura de pantalla no disponible", "label-default-theme": "Por defecto", "tooltip-click-to-enlarge": "Click para agrandar", "button-update": "Actualizar", "label-currently-selected": "Seleccionado", "option-frame-style": "Estilo marco de ventana", "option-frame-description": "Determina el estilo de la barra de título de la ventana de Obsidian. Requiere reinicio para que tome efecto.", "option-frame-hidden": "Oculto (por defecto)", "option-frame-obsidian": "Marco de Obsidian", "option-frame-native": "Marco nativo", "option-configure-ribbon": "Menú de cinta", "option-configure-ribbon-desc": "Configure qué comandos aparecen en el menú de cinta en la barra de navegación.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configurar", "label-additional-ribbon-items": "Otros elementos de cinta", "label-modal-configuration": "Configuración cinta", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Show tab title bar", "option-show-view-header-desc": "Mostar el encabezado en la parte superior de todas las pestañas.", "msg-updates-found": "Encontrado {{count}} tema para actualizar.", "msg-updates-found_plural": "Encontrados {{count}} temas para actualizar.", "button-check-for-updates": "Comprobar actualizaciones", "button-view-updates": "Ver actualizaciones", "button-update-all-themes": "Actualizar todo", "label-current-themes": "Temas comunidad actuales", "label-currently-installed": "Tiene actualmente {{count}} tema instalado.", "label-currently-installed_plural": "Tiene actualmente {{count}} temas instalados." }, "hotkeys": { "name": "Atajos", "prompt-filter": "Filtrar...", "tooltip-delete-hotkey": "Borrar atajo", "label-waiting-for-hotkey-press": "Presionar teclas...", "tooltip-restore-default": "Restaurar los valores por defecto", "tooltip-customize-command": "Modificar este comando", "tooltip-hotkey-single-conflict": "Éste atajo está en conflicto con \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "Éste atajo está en conflicto con otros {{count}} comandos", "label-blank-hotkey": "Blank" }, "about": { "name": "Acerca de", "label-commercial-license": "Licencia comercial", "label-license-key": "Clave de licencia", "license-key-placeholder": "Su clave de licencia...", "label-activate-license": "Activar licencia", "button-activate": "Activar", "label-unknown-version": "Desconocido", "label-current-version": "Versión actual: ", "label-install-version": "(Versión del instalador: {{version}})", "label-up-to-date": "¡Su aplicación está actualizada!", "label-read-changelog": "Leer el log de cambios.", "label-manual-update-required": "Para apoyar las últimas funcionalidad y recibir los últimos parches de seguridad, Obsidian necesita una actualización importante del instalador. Necesita descargar y reinstalar manualmente Obsidian.", "label-download": "Descargar", "label-new-version-ready": "Una nueva versión está lista para instalarse. ", "label-relaunch-to-update": "Vuelva a lanzar la app para actualizar.", "label-disabled-updates": "Las actualizaciones están desactivadas.", "label-checking-for-updates": "Buscando actualizaciones...", "button-relaunch": "Volver a lanzar", "button-check-for-updates": "Buscar actualizaciones", "option-auto-update": "Actualizaciones automáticas", "option-auto-update-description": "Desactive esto para evitar que la app busque actualizaciones.", "option-get-help": "Obtener ayuda", "option-get-help-description": "Obtener ayuda para el uso de Obsidian.", "button-open": "Abrir", "option-language": "Idioma", "option-language-description": "Cambiar el idioma mostrado.", "option-insider-build": "Recibir builds como Insider", "option-insider-build-description": "Actualizar automáticamente a builds de Insider para probar nuevas funciones. Tome en cuenta que estas builds son la versión más reciente y son inestables.", "option-advanced": "Avanzado", "option-hw-acceleration": "Aceleracion de hardware", "option-hw-acceleration-description": "Activa la aceleración de hardware, que usa su GPU para hacer que Obsidian sea más suave.", "option-hw-acceleration-warning": "Si desactiva esta opción, el rendimiento de la aplicación se verá gravemente degradado.", "option-config-location": "Anular la carpeta de configuración", "option-config-location-description": "Utilice una carpeta de configuración diferente a la predeterminada. Debe comenzar con un punto.", "option-config-location-warning": "La ubicación de la configuración debe ser un nombre de carpeta válido que comience con un punto.", "label-license": "Licencia", "label-your-commercial-license-key": "Su clave de licencia comercial es \"{{key}}\".", "label-commercial-license-info": "Registrado a \"{{company}}\" para {{seats}} usuarios. Válido hasta {{expiry}}.", "label-validating-commercial-license": "Validando...", "label-invalid-commercial-license": "Licencia inválida: ", "button-remove-commercial-license": "Eliminar", "option-catalyst": "Licencia Catalyst", "option-catalyst-desc": "Tiene actualmente la licencia Catalyst {{tier}}. ¡Gracias por tu apoyo!", "option-catalyst-desc-no-license": "No tienes en este momento una licencia Catalyst. La licencia Catalyst es una única donación para apoyar el desarrollo de Obsidian.", "label-app": "Aplicación" }, "account": { "name": "Cuenta", "option-your-account": "Tu cuenta", "option-your-account-desc": "Sesión iniciada como {{name}} ({{email}}).", "option-your-account-desc-no-login": "No estás identificado en este momento. Un cuenta es sólo necesaria para Obsidian Sync, Obsidian Publish, y las builds internas de Catalyst.", "button-manage-settings": "Cambiar ajustes", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Mejorar licencia", "option-commercial-license": "Licencia comercial", "option-commercial-license-desc": "Si usa Obsidian para temas comerciales, puede que necesite comprar una licencia comercial.", "button-purchase": "Comprar", "button-log-out": "Salir", "label-log-in": "Entrar", "label-sign-up": "Registrarse", "label-email": "Email", "placeholder-email": "Su email...", "label-password": "Contraseña", "placeholder-password": "Su contraseña...", "button-login": "Iniciar sesión", "message-empty-email": "Email no puede estar vacío.", "message-invalid-email": "Email no es válido.", "message-empty-password": "Contraseña no puede estar vacía.", "message-login-failed": "El ingreso falló. Por favor, revise su email y contraseña.", "label-no-account": "¿Aún no tiene una cuenta? ", "link-sign-up-now": "Regístrese ahora" }, "core-plugin": { "plugin-list": "Lista de Plugins", "option-search-plugin": "Busque los plugins principales del núcleo de Obsidian", "option-search-plugin-description": "Filtra los plugins por nombre o descripción.", "placeholder-search-plugin": "Buscar plugins..." }, "third-party-plugin": { "name": "Plugins externos", "option-restricted-mode": "Restricted mode", "option-restricted-mode-description": "Restricted Mode is off. Turn on to disable community plugins.", "button-turn-on": "Turn on", "option-browse-community-plugins": "Plugins creados por la comunidad", "option-browse-community-plugins-description": "Busca e instala plugins hechos por nuestra comunidad", "button-browse": "Buscar", "label-exit-restricted-mode": "Exit Restricted Mode", "label-exit-restricted-mode-description-1": "Community plugins, like any other software you install, could potentially cause data integrity and security issues.", "label-exit-restricted-mode-description-2": "Plugin security is important to us. Here's what we do:", "label-exit-restricted-mode-description-3": "Despite our efforts, there is still a small chance that a community plugin might misbehave.", "label-code-review": "Initial code review", "label-code-review-desc": "Plugins undergo an initial code review by our team before they appear in the store.", "label-open-source": "Open source", "label-open-source-desc": "Most plugins are open source on GitHub, so you can inspect the code yourself.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We have a large community of developers who watch out for each other.", "label-report-mechanism": "Report mechanism", "label-report-mechanism-desc": "We follow up and remove faulty plugins upon user report.", "label-exit-restricted-mode-disable-confirmation": "Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.", "label-learn-more": "Learn more about plugin security", "button-turn-on-community-plugins": "Turn on community plugins", "label-trust-author": "Do you trust the author of this vault?", "label-trust-author-description-1": "You're opening this vault for the first time, and it comes with some plugins.", "label-trust-author-description-2": "If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.", "label-trust-author-description-3": "If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.", "button-enable-plugins": "Trust author and enable plugins", "button-dont-trust-author": "Browse vault in Restricted Mode", "placeholder-community-plugins": "Busca plugins...", "msg-failed-load-plugins": "Ha ocurrido un fallo al cargar los plugins.", "label-installed": "Instalado correctamente", "button-install": "Instalar", "button-enable": "Activar", "button-disable": "Desactivar", "button-copy-share-link": "Copiar link para compartir", "button-donate": "Donate", "label-no-results-found": "Sin resultados.", "msg-failed-to-load-manifest": "Error al cargar el manifesto.", "label-version": "Versión: {{version}}", "label-currently-installed-version": " (Instalada: {{version}})", "label-by-author": "Por ", "label-repository": "Repositorio: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "Este plugin no soporta su dispositivo.", "button-update": "Actualizar", "label-no-readme": "Este plugin no tiene un archivo README", "msg-installing-plugin": "Instalando \"{{name}}\"...", "msg-failed-to-install-plugin": "Ha ocurrido un fallo al instalar \"{{name}}\".", "msg-successfully-installed-plugin": "\"{{name}}\" se ha instalado correctamente.", "label-installed-plugins": "Plugins instalados", "button-reload-plugins": "Recargar", "msg-reloaded-third-party-plugins": "Se han recargado los plugins.", "label-uninstall": "Desinstalar", "label-uninstall-plugin": "Desinstalar plugin", "label-uninstall-plugin-confirmation": "Estás seguro de que quieres desinstalar este plugin? Esto borrará la carpeta en la que está descargado.", "button-open-plugins-folder": "Abrir carpeta de plugins", "button-check-for-updates": "Buscar actualizaciones", "button-update-all-plugins": "Actualizar todo", "label-current-plugins": "Plugins actuales", "label-currently-installed": "Tienes {{count}} plugin instalado actualmente.", "label-currently-installed_plural": "Tienes {{count}} plugins instalados actualmente.", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Show a message with how long each plugin took to initialize when starting the app.", "msg-no-updates-found": "No se encontraron actualizaciones de plugins.", "msg-updates-found": "Se encontró {{count}} actualización de plugin.", "msg-updates-found_plural": "Se encontraron {{count}} actualizaciones de plugins.", "msg-update-plugin": "Actualizar a la versión {{version}}", "option-search-installed-plugin": "Buscar plugins instalados.", "option-search-installed-plugin-description": "Filtrar plugins instalados por nombre o descripción.", "placeholder-search-installed-plugin": "Buscar plugins instalados...", "show-installed-only": "Show installed only", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "Mostrando {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Barra de herramientas móvil", "option-configure-quick-action": "Configurar Quick Action móvil", "option-configure-quick-action-description": "Configure el comando que se ejecutará cuando arrastre desde arriba. El comando actual es \"{{command}}\".", "button-configure": "Configurar", "placeholder-select-quick-action": "Seleccionar Quick Action...", "manage-toolbar-options": "Administrar las opciones en la barra de herramientas móvil", "option-internal-link": "Añadir enlace interno", "option-internal-embed": "Add embed", "option-tag": "Añadir etiqueta", "option-heading": "Alternar cabecera", "option-strikethrough": "Toggle strikethrough", "option-highlight": "Toggle highlight", "option-code": "Toggle code", "option-blockquote": "Toggle blockquote", "option-markdown-link": "Add Markdown link", "option-bullet-list": "Toggle bullet list", "option-numbered-list": "Toggle numbered list", "option-indent-list": "Indent list item", "option-unindent-list": "Unindent list item", "option-undo": "Deshacer", "option-redo": "Rehacer", "option-move-caret-up": "Move caret up", "option-move-caret-down": "Move caret down", "option-move-caret-left": "Move caret left", "option-move-caret-right": "Move caret right", "option-first-line": "Ir a la primera línea", "option-last-line": "Ir a la última línea", "option-toggle-keyboard": "Toggle keyboard", "option-configure-toolbar": "Configure mobile toolbar", "option-added-options": "Added options", "option-more-toolbar-options": "More toolbar options", "option-attach": "Insertar archivo adjunto", "option-add-command": "Add global command", "option-add-command-description": "Select any global command to add to the toolbar." } }, "editor": { "search": { "placeholder-find": "Buscar", "placeholder-replace": "Reemplazar", "label-previous": "Anterior", "label-next": "Siguiente", "label-all": "Todo", "label-exit-search": "Salir de la búsqueda", "label-replace": "Reemplazar", "label-replace-all": "Reemplazar todas" }, "link-suggestion": { "label-type-hash": "Escriba #", "label-link-heading": "para enlazar el encabezado", "label-type-block": "Escriba ^", "label-link-block": "to link blocks", "label-type-pipe": "Escriba |", "label-change-display-text": "para cambiar el texto mostrado", "label-no-match-found": "No se encontraron resultados" }, "spellcheck": { "no-suggestion": "Sin sugerencias...", "add-to-dictionary": "Añadir al diccionario" }, "menu": { "edit-link": "Editar enlace" }, "heading-suggestion": { "label-no-heading": "Sin encabezado", "label-heading-level": "Encabezado {{level}}" }, "print-modal": { "title": "Exportar a PDF", "caption": "Exportar \"{{filename}}\" a PDF con las configuraciónes a continuación.", "setting-page-size": "Tamaño de página", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Carta", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Incluir el nombre del archivo como título", "setting-landscape": "Horizontal", "setting-margin": "Márgenes", "setting-margin-default": "Predeterminado", "setting-margin-minimal": "Minimo", "setting-margin-none": "Ninguno", "setting-downscale-percent": "Porcentaje de reducción de escala", "button-export-to-pdf": "Exportar a PDF" }, "link-popover": { "tooltip-follow-link": "Seguir enlace", "tooltip-open-link": "Abrir enlace", "tooltip-search-tag": "Buscar etiqueta" } }, "interface": { "embed-cannot-find": "No pudo encontrar:", "embed-open-in-default-app-tooltip": "Abrir en la app por defecto", "empty-sidebar": "La barra lateral esta vacia, intente arrastrar un panel aquí.", "sidebar-expand": "Expandir", "sidebar-collapse": "Colapsar", "msg-fail-to-save-file": "Error al guardar el archivo \"{{filepath}}\". {{message}}.", "no-file": "No hay archivo", "msg-file-changed": "\"{{file}}\" ha sido modificado externamente, combinando cambios de manera automática.", "switch-vault": "Abrir otra bóveda", "help": "Ayuda", "settings": "Preferencias", "drag-to-rearrange": "Arrastre para reordenar", "msg-switched-to-read": "Modo de visualización por defecto ha sido cambiado a lector.", "msg-switched-to-edit": "Cambió modo de visualización por defecto a editor.", "msg-upgrade-installer": "Para usar esta función, por favor reinstale mediante el instalador más reciente disponible en nuestra página web.", "tooltip-restore-default-settings": "Restaurar ajustes por defecto", "label-copy": "Copiar al portapapeles", "copied_generic": "Copiado a su portapapeles", "copied": "{{item}} copiado al portapapeles", "url": "Url", "msg-open-file-through-uri": "Archivo abierto \"{{path}}\"", "msg-file-not-found-through-uri": "Archivo \"{{name}}\" no encontrado.", "delete-action-short-name": "Borrar", "msg-indexing": "Obsidian está indexando tu bóveda...\nEsto debe ocurrir sólo una vez.\nAlguna funcionalidad puede no estar disponible hasta que esto finalice.", "msg-indexing-complete": "Indexado completo.", "msg-sandbox-vault": "This is a sandbox vault.\nChanges you make in this vault will be lost.", "label-enter-to-create": "Enter to create", "label-update-available": "Actualización disponible", "label-debug-info": "Debug info", "button-learn-more": "Aprende más", "button-not-now": "Ahora no", "button-add": "Añadir", "button-manage": "Administrar", "label-new-tab": "Nueva pestaña", "msg-tab-busy": "Esta pestaña está ocupada en este momento, por favor, inténtelo de nuevo más tarde", "empty-state": { "no-file-open": "Ningún archivo está abierto", "create-new-file": "Crear nuevo archivo", "go-to-file": "Ir a archivo", "see-recent-files": "Ver archivos recientes", "close": "Cerrar", "unknown-pane-title": "Plugin ya no activo", "unknown-pane-desc": "El plugin que creó este panel ({{type}}) no está disponible" }, "menu": { "edit-view": "Editar (Ctrl/Cmd+Click para editar en nuevo panel)", "read-view": "Vista actual: lectura", "switch-to-edit-view": "Clic para editar", "switch-to-read-view": "Clic para leer", "mod-click-open-new-tab": "{{key}}+Clic para abrir en pestaña nueva", "find": "Buscar...", "replace": "Reemplazar...", "edit": "Editar", "preview": "Vista previa", "more-options": "Más opciones", "close": "Cerrar", "close-others": "Close others", "close-right": "Close tabs to the right", "pin": "Fijar", "unpin": "Desfijar", "unlink-tab": "Desenlazar pestaña", "link-tab": "Enlazar con pestaña...", "toggle-source-mode": "Modo fuente", "toggle-reading-view": "Modo lectura", "delete-file": "Eliminar archivo", "create-file": "Crear archivo", "open-link": "Abrir enlace", "open-in-new-tab": "Abrir en pestaña nueva", "open-to-the-right": "Abrir a la derecha", "copy-url": "Copiar url", "close-current-tab": "Cerrar pestaña actual", "copy": "Copiar", "cut": "Cortar", "paste": "Pegar", "paste-as-plain-text": "Paste as plain text", "select-all": "Seleccionar todo", "rename-heading": "Renombrar este encabezado...", "rename-blockid": "Renombrar este bloque ID...", "open-in-new-window": "Abrir en ventana nueva", "move-to-new-window": "Mover a ventana nueva", "open-in-browser": "Abrir en explorador", "stack-tabs": "Apilar pestañas", "unstack-tabs": "Desapilar pestañas" }, "tooltip": { "click-to-expand": "Click para expandir", "click-to-collapse": "Click para colapsar", "alias": "Alias", "not-created-yet": "Aún no creado, seleccione para crear" }, "start-screen": { "label-version": "Versión", "option-open-folder-as-vault": "Abrir carpeta como bóveda", "option-open-folder-as-vault-description": "Seleccionar un directorio existente de archivos Markdown.", "option-create-vault": "Crear una bóveda nueva", "option-create-vault-description": "Crear una nueva bóveda de Obsidian en un directorio.", "option-connect-obsidian-sync": "Conectar a Obsidian Sync", "option-connect-obsidian-sync-description": "Establece una bóveda sincronizada con una bóveda remota existente.", "option-new-vault-name": "Nombre de la bóveda", "option-new-vault-name-description": "Elige un nombre para tu increíble bóveda.", "option-new-vault-location": "Ubicación", "option-new-vault-location-description": "Elige un lugar para ubicar tu nueva bóveda.", "label-new-vault-location-preview": "Tu nueva bóveda será ubicada en: ", "option-reveal-vault-in-explorer": "Mostrar la bóveda en el explorador del sistema", "option-reveal-vault-in-explorer-mac": "Mostrar la bóveda en el Buscador", "option-rename-vault": "Renombrar la bóveda...", "msg-error-rename-exists": "Ya hay una bóveda con este nombre.", "msg-error-nested": "No se puede mover la bóveda a un subdirectorio de si misma.", "msg-error-rename-open": "No se puede renombrar un bóveda abierta actualmente.", "msg-rename-failed": "Fallo al renombrar la bóveda.", "msg-rename-success": "Bóveda renombrada con éxito.", "option-move-vault": "Mover la bóveda...", "msg-move-select-dest": "Selecciona el directorio destino", "msg-error-move-exists": "Ya hay una bóveda en el directorio destino.", "msg-error-move-open": "No se puede mover una bóveda abierta actualmente.", "msg-move-failed": "Fallo al mover la bóveda.", "msg-move-success": "Bóveda movida con éxito.", "option-remove": "Eliminar de la lista", "button-quick-start": "Inicio rápido", "button-open": "Abrir", "button-browse": "Navegar", "button-connect": "Conectar", "button-create-vault": "Crear", "button-back": "Volver", "msg-empty-vault-name": "El nombre de la bóveda no puede estar vacío.", "msg-invalid-folder": "Por favor, selecciona un directorio válido.", "msg-failed-to-create-vault": "Fallo al crear la bóveda.", "msg-failed-to-create-vault-at-location": "No se pudo crear la bóveda en la ubicación indicada. Por favor, verifique la ubicación y permisos.", "msg-error-failed-to-open-vault": "Fallo al abrir.", "msg-error-remove-current-open-vault": "No se puede eliminar una bóveda abierta actualmente.", "option-get-help": "Obtener ayuda", "option-user-email": "Email", "placeholder-your-email": "Su email...", "option-user-password": "Contraseña", "placeholder-your-password": "Su Contraseña...", "button-sign-in": "Sign in", "button-setup": "Configurar", "option-connect-vault-desc": "Crear una bóveda sincronizada en este dispositivo.", "tooltip-own-vault": "Esta es una bóveda remota propiedad tuya.", "tooltip-shared-vault": "Esta es una bóveda remota compartida contigo." }, "drag-and-drop": { "insert-link-here": "Inserta enlace aquí here", "insert-links-here": "Inserta enlaces aquí", "move-into-folder": "Mover a \"{{folder}}\"", "star-this-file": "Star this file", "star-these-files": "Star these files", "open-in-this-tab": "Abrir en esta pestaña", "open-as-tab": "Abrir como pestaña nueva" }, "window": { "maximize": "Maximizar", "minimize": "Minimizar", "restore-down": "Restore down", "close-window": "Cerrar ventana", "go-back": "Ir hacia atrás", "go-forward": "Ir hacia adelante" }, "start-up": { "loading-obsidian": "Cargando Obsidian...", "obsidian-load-error": "Ha ocurrido un error miestras cargaba Obsidian.", "button-reload-app": "Recargar aplicación", "button-reload-app-in-safe-mode": "Recargar aplicación en modo seguro", "button-open-another-vault": "Abrir otra bóveda", "loading-components": "Cargando componentes...", "loading-plugins": "Cargando plugins...", "loading-vault": "Cargando bóveda...", "msg-failed-to-load-vault": "Fallo al cargar la bóveda: ", "loading-cache": "Cargando cache...", "loading-workspace": "Cargando espacio de trabajo..." }, "mobile": { "action-import": "Importar a la bóveda", "action-choose-file-to-insert": "Selecciona un archivo a insertar", "action-insert-text-into-file": "Insertar texto en {{filename}}", "action-insert-link-into-file": "Insertar enlace en {{filename}}", "msg-importing": "Importando...", "msg-import-success": "Importación exitosa", "msg-failed-to-import-file": "Fallo al importar el archivo {{filename}}", "msg-back-again-to-exit": "Presiona atrás de nuevo para salir." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "Guardar archivo actual", "follow-cursor-link": "Seguir enlace bajo el cursor", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "Cambiar estado de fijado", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "Navegar hacia atrás", "navigate-forward": "Navegar hacia adelante", "use-dark-mode": "Usar modo oscuro", "use-light-mode": "Usar modo claro", "change-theme": "Change theme", "search-current-file": "Buscar en archivo actual", "search-replace-current-file": "Buscar y reemplazar en el archivo actual", "open-settings": "Abrir ajustes", "open-help": "Abrir ayuda", "toggle-edit": "Alternar vistas de lectura y edición", "toggle-source-mode": "Toggle Live Preview/Source mode", "delete-current-file": "Eliminar archivo actual", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "Alternar barra lateral izquierda", "toggle-right-sidebar": "Alternar barra lateral derecha", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "Focus on editor", "toggle-fold": "Alternar colapsar en la linea actual", "fold-all": "Colapsar todos los títulos y listas", "unfold-all": "Expandir todos los títulos y listas", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "Intercambiar linea hacia arriba", "swap-line-down": "Intercambiar linea hacia abajo", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "Alternar negrita para selección", "toggle-italics": "Alternar italica para selección", "toggle-highlight": "Alternar resaltado para selección", "toggle-comments": "Alternar comentarios para selección", "insert-link": "Insertar enlace", "toggle-spellcheck": "Alternar corrector ortográfico", "delete-paragraph": "Eliminar párrafo", "toggle-checklist": "Toggle checkbox status", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "Editar nombre del archivo", "copy-path": "Copiar ruta del archivo", "copy-url": "Copy obsidian url", "export-pdf": "Export to PDF", "reload": "Reload app without saving", "undo-close-tab": "Undo close tab", "context-menu": "Show context menu under cursor", "show-debug-info": "Show debug info", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "Alternar entre modo edición/vista previa", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "Esto afectará a {{links}} en {{files}}.", "msg-updated-links": "Actualizado {{links}} en {{files}}.", "label-update-links": "Actualizar enlaces", "label-confirm-update-link-to-file": "¿Quiere actualizar los enlaces internos que enlazan a este archivo?", "button-always-update": "Siempre actualizar", "button-just-once": "Solo una vez", "button-do-not-update": "No actualizar", "label-confirm-deletion": "¿Está seguro de que quiere eliminar \"{{filename}}\"?", "label-move-to-system-trash": "Será movido a la papelera de su sistema.", "label-move-to-vault-trash": "Será movido a la papelera de Obsidian, la cual se encuentra en \".trash\" carpeta oculta dentro de su boveda.", "label-permanent-delete": "Este archivo será eliminado permanentemente", "label-non-empty-folder": "Esta carpeta no está vacia.", "label-delete-folder-warning": "Si continua, todos los archivos en esta carpeta serán eliminados.", "label-delete-folder": "Eliminar carpeta", "button-delete": "Eliminar", "button-delete-do-not-ask-again": "Eliminar y no preguntar de nuevo", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "Actualmente hay {{links}} enlazando a esta nota.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "Eliminar archivo", "button-manage": "Manage", "button-cancel": "Cancelar", "button-done": "Done", "button-save": "Save", "button-stop": "Stop", "button-continue": "Continuar", "preparing-pdf": "Preparando PDF...", "label-rename-file": "Renombrar archivo", "label-new-name": "Nuevo nombre", "msg-rename-success": "Successfully renamed file.", "label-rename-heading": "Renombrar cabecera", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "Plugins", "file-explorer": { "name": "Explorador de archivos", "desc": "Vea todos los archivos en su bóveda.", "action-open": "Open file explorer", "action-show": "Show file explorer", "action-create-note": "Crear nueva nota", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "Nueva nota", "action-new-folder": "Nueva carpeta", "action-change-sort": "Cambiar el orden", "action-reveal-file": "Mostrar en el explorador de archivos", "action-reveal-active-file": "Mostrar archivo actual en el explorador de archivos", "command-move-file": "Move file to another folder", "action-move-file": "Move file to...", "action-move-folder": "Move folder to...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "Type a folder", "label-no-folders": "No folders found.", "instruction-navigate": "to navigate", "instruction-move": "to move", "instruction-dismiss": "to dismiss", "label-sort-a-to-z": "Ordenar por nombre de archivo (A to Z)", "label-sort-z-to-a": "Ordenar por nombre de archivo (Z to A)", "label-sort-new-to-old": "Ordenar por fecha de edición (más reciente)", "label-sort-old-to-new": "Ordenar por fecha de edición (más viejo)", "label-sort-created-old-to-new": "Created time (old to new)", "label-sort-created-new-to-old": "Created time (new to old)", "menu-opt-new-note": "Nueva nota", "menu-opt-new-folder": "Nueva carpeta", "menu-opt-set-attachment-folder": "Establecer como carpeta de adjuntos", "menu-opt-rename": "Renombrar", "menu-opt-delete": "Borrar", "menu-opt-make-copy": "Hacer una copia", "msg-invalid-characters": "El nombre de archivo no puede contener ninguno de los siguientes caracteres: ", "msg-unsafe-characters": "Links will not work with file names containing any of these characters: ", "msg-file-already-exists": "Ya hay un archivo con ese nombre", "msg-empty-file-name": "El nombre de archivo no puede estar vacio.", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "Last modified at {{time}}", "tooltip-created-time": "Created at {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Move", "label-untitled-file": "Untitled", "label-untitled-folder": "Untitled", "msg-set-attachment-folder": "Attachments will be saved to \"{{path}}\" from now on." }, "search": { "name": "Buscar", "desc": "Buscar palabras clave en todas las notas.", "action-open-search": "Buscar en todos los archivos", "label-collapse-results": "Colapsar resultados", "label-match-case": "Coincidir mayúsculas/minúsculas", "label-explain-search-term": "Explicar término de búsqueda", "label-more-context": "Mostrar más contexto", "prompt-start-search": "Escriba para empezar a buscar...", "label-match-text": "Corresponde con texto: ", "label-match-regex": "Corresponde con regex: ", "label-match-exact-text": "Contiene el texto exacto: ", "label-match-all": "Corresponde con todo en: ", "label-match-any": "Corresponde con cualquiera de: ", "label-excluding": "Excluye: ", "label-case-sensitive": "Coincide con mayúsculas y minúsculas", "label-case-insensitive": "Ignorar mayúsculas y minúsculas", "label-match-file-path": "Concide con la ruta de archivo: ", "label-match-file-name": "Coincide con el nombre de archivo: ", "label-match-content": "Coincide con el contenido del archivo: ", "label-match-task": "Match task: ", "label-match-task-todo": "Match task (todo): ", "label-match-task-done": "Match task (done): ", "label-match-line": "Match line: ", "label-match-block": "Match block: ", "label-match-section": "Match section: ", "label-match-tag": "Coincide con la etiqueta: ", "label-no-matches": "No hay coincidencias.", "matches-with-count": "... y {{count}} correspondencia más.", "matches-with-count_plural": "... y {{count}} correspondencias más.", "label-copy-search-results": "Copy search results", "button-copy-results": "Copy results", "msg-successfully-copied": "Results copied to your clipboard.", "option-show-path": "Show path", "option-show-path-description": "Display full path of the file rather than just the file name.", "option-link-style": "Link style", "option-link-style-description": "Optionally turn each file result in to a link.", "option-choice-link-style-none": "None", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Markdown link", "option-list-prefix": "List prefix", "option-list-prefix-description": "Optionally add a list item prefix to each file result.", "option-choice-list-style-none": "None", "option-choice-list-style-dash": "Dash (-)", "option-choice-list-style-asterisk": "Asterisk (*)", "option-choice-list-style-numbered": "Numbered", "tooltip-clear-search": "Clear search", "label-search-options": "Search options", "tooltip-read-more": "Read more", "label-history": "History", "tooltip-clear-history": "Clear search history", "label-path-option-description": "match path of the file", "label-file-name-option-description": "match file name", "label-tag-option-description": "search for tags", "label-line-option-description": "search keywords on same line", "label-section-option-description": "search keywords under same heading", "menu-opt-search-for": "Search for \"{{keyword}}\"" }, "quick-switcher": { "name": "Quick switcher", "desc": "Salta a cualquier archivo sin dejar tu teclado. Ctrl/Cmd+O para activar.", "short-name": "Switcher", "action-open": "Abrir quick switcher", "instruction-navigate": "para navegar", "instruction-open": "para abrir", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "para crear", "instruction-dismiss": "para descartar", "label-no-note-create-new": "No se encontraron notas. Presione Enter para crear una nueva.", "prompt-type-file-name": "Escriba el archivo para cambiar o crear...", "label-enter-to-create": "Presione Enter para crear", "tooltip-not-created-yet": "Not created yet, select to create", "option-show-existing-only": "Show existing only", "option-show-existing-only-description": "Whether to show links to files that are not yet created.", "option-show-attachments": "Show attachments", "option-show-attachments-desc": "Show attachment files like images, videos, and PDFs.", "option-show-all-file-types": "Show all file types", "option-show-all-file-types-desc": "Show all files including ones that Obsidian can't open. The file will be opened with the default app for that file type." }, "graph-view": { "name": "Vista de Gráfico", "desc": "Vea un resumen gráfico de cuales notas están enlazadas con cuales.", "action-open": "Abrir vista de gráfico", "action-open-local": "Abrir gráfico local", "action-copy-screenshot": "Copiar captura de pantalla", "tab-title": "Gráfico de {{displayText}}", "label-filters": "Filters", "prompt-filter-nodes": "Search files...", "option-depth": "Depth", "option-depth-description": "Show nodes this number of links away", "option-neighbor-links": "Neighbor links", "option-neighbor-links-description": "Mostrar enlaces entre vecinos.", "option-forelinks": "Outgoing links", "option-forelinks-description": "Show links to other files", "option-backlinks": "Incoming links", "option-backlinks-description": "Show links from other files", "option-show-tags": "Tags", "option-show-tags-description": "Tags are linked to the files that contain them", "option-show-attachments": "Attachments", "option-show-attachments-description": "Show attachments included by files", "option-show-existing-files-only": "Existing files only", "option-show-existing-files-only-description": "When checked, links to nonexistent files are not shown", "option-show-orphans": "Orphans", "option-show-orphans-description": "Show files that are not linked to any other file", "label-display": "Display", "option-show-arrows": "Arrows", "option-show-arrows-description": "Show arrows when zoomed in", "option-text-fade": "Text fade threshold", "option-node-size": "Node size", "option-link-thickness": "Link thickness", "label-forces": "Forces", "option-center-force": "Center force", "option-link-force": "Link force", "option-link-distance": "Link distance", "option-repel-force": "Repel force", "tooltip-open-graph-settings": "Open graph settings", "msg-screenshot-copied": "Screenshot copied to the clipboard.", "label-groups": "Groups", "placeholder-enter-query": "Enter query...", "tooltip-delete-graph": "Delete group", "button-new-group": "New group", "tooltip-click-to-change-drag-to-reorder": "Click to change color\nDrag to reorder groups", "action-timelapse": "Start graph timelapse animation", "tooltip-start-timelapse-animation": "Start timelapse animation", "button-animate-timelapse": "Animate" }, "backlinks": { "name": "Backlinks", "desc": "Muestre el número de backlinks en la barra de estatus.", "action-open": "Abrir backlinks", "action-show": "Show backlinks pane", "action-open-for-current": "Abrir backlinks para el archivo actual", "action-toggle-backlinks-in-document": "Toggle backlinks in document", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "Menciones con enlaces", "label-no-backlinks": "No se encontraron backlinks.", "label-unlinked-mentions": "Menciones sin enlace", "label-show-search": "Show search filter", "label-link-button-text": "Enlace", "tab-title": "Backlinks para {{displayText}}", "label-no-unlinked-mentions": "No se encontraron menciones sin enlace.", "ellipsis": "...", "option-backlink-in-document": "Backlink in document", "option-backlink-in-document-desc": "Show backlinks in document by default when opening new panes." }, "outgoing-links": { "name": "Outgoing Links", "desc": "Show outgoing links and detect unlinked mentions of other notes in the current note.", "action-open": "Open outgoing links", "action-show": "Show outgoing links pane", "action-open-for-current": "Open outgoing links for the current file", "tab-title": "Outgoing links from {{displayText}}", "label-links": "Links", "label-no-links": "No links found.", "label-unlinked-mentions": "Unlinked mentions", "tooltip-link-file": "Link this file", "tooltip-not-created": "Not created yet" }, "tag-pane": { "name": "Panel de Etiquetas", "desc": "Muestra sus etiquetas junto con el número de ocurrencias.", "action-show": "Show tag pane", "label-no-tags": "Etiquetas no encontradas.", "label-sort-by-name-a-to-z": "Tag name (A to Z)", "label-sort-by-name-z-to-a": "Tag name (Z to A)", "label-sort-by-frequency-high-to-low": "Frequency (high to low)", "label-sort-by-frequency-low-to-high": "Frequency (low to high)", "action-show-nested-tags": "Show nested tags", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "Vista previa", "desc": "Ver la vista previa de una nota al colocar el cursor sobre un link interno. Ctrl/Cmd + cursor en modo edición.", "label-empty-note": "\"{{linktext}}\" no se ha creado todavia. Haga click para crear.", "label-source-editor": "Editor", "label-source-preview": "Preview", "label-source-search": "Search, Backlinks, and Outgoing links", "label-require-mod": "Require {{key}} to trigger page preview on hover" }, "starred": { "name": "Destacados", "desc": "Destacar archivos y búsquedas usados frequentemente.", "action-show": "Show starred pane", "action-toggle": "Agregar/remover el archivo actual", "action-toggle-search": "Agregar/remover la búsqueda actual", "action-star": "Agregar a destacados", "action-unstar": "Remover de destacados", "menu-opt-remove": "Remover", "msg-successfully-starred": "Destacado con éxito {{type}} \"{{title}}\".", "msg-removed-starred": "Destacado removido {{type}} \"{{title}}\".", "msg-cannot-find-path": "No se encuentra el archivo en \"{{path}}\"." }, "custom-css": { "name": "Personalizar CSS", "desc": "Lee \"obsidian.css\" en la bóveda y lo aplica.", "setting-community-themes": "Temas de la comunidad", "msg-fetching-themes": "Obteniendo datos de los temas de la comunidad...", "prompt-filter": "Filtrar...", "label-dark-theme-only": "Solo temas oscuros", "label-light-theme-only": "Solo temas claros", "label-use": "Aplicar", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "Actualizar", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "Quitar tema", "label-visit-on-github": "Ver en GitHub", "msg-load-error": "No se han podido cargar los temas de la comunidad, por favor revise su conexión.", "msg-now-using-theme": "Ahora estás usando {{title}} como tu tema CSS.", "msg-deleted-theme": "Se eliminó el tema {{title}}.", "msg-updated-theme": "Se actualizó el tema {{title}}.", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "Paleta de Commandos", "desc": "Escriba un comando para invocarlo. No es necesario usar la UI para recordar un atajo.", "action-open": "Abrir paleta de comandos", "instruction-navigate": "para navegar", "instruction-use": "para usar", "instruction-dismiss": "para descartar", "label-no-commands": "No se encontraron comandos.", "prompt-type-command": "Escribe un comando...", "label-pinned-commands": "Pinned commands", "option-add-new-pin": "New pinned command", "option-add-new-pin-description": "Pinned commands will appear at the top of all commands when no search query is present." }, "markdown-format-importer": { "name": "Importador de formato de Markdown", "desc": "Convertir Markdown de otras apps al formato de Obsidian.", "action-open": "Abrir el importador de Markdown", "option-roam-tag-fixer": "Corrector de etiquetas de Roam Research", "option-roam-tag-fixer-description": "Convierte \"#etiqueta\" y \"#[[etiqueta]]\" a \"[[etiqueta]]\".", "option-roam-highlight-fixer": "Corrector de highlights de Roam Research", "option-roam-highlight-fixer-description": "Converts \"^^highlight^^\" to \"==highlight==\".", "option-roam-todo-converter": "Convertidor de TODOs de Roam Research", "option-roam-todo-converter-description": "Convierte de \"{{[[TODO]]}}\" a \"[ ]\".", "option-bear-highlight-fixer": "Bear highlight fixer", "option-bear-highlight-fixer-description": "Converts \"::highlight::\" to \"==highlight==\".", "zettelkasten-link-fixer": "Corrector de links de Zettelkasten", "zettelkasten-link-fixer-description": "Corrige links de \"[[UID]]\" a \"[[UID Nombre de Archivo]]\".", "zettelkasten-link-beautifier": "Embellece links de Zettelkasten", "zettelkasten-link-beautifier-description": "Arregla links y cambia el formato de \"[[UID]]\" a \"[[UID Nombre de Archivo|Nombre de Archivo]]\".", "msg-all-files-warning": "Advertencia: el importador convertirá todos los archivos de la bóveda, no solo el archivo actual.", "msg-override-files-warning": "Sus archivos serán sobreescritos. Haga un respaldo antes de intentar la conversión.", "label-start-conversion": "Empezar la conversión", "label-stop": "Cancelar", "label-go-back": "Regresar", "label-done": "Ok", "label-processing": "Procesando...", "label-cancelling": "Cancelando...", "label-finished": "Completado!", "label-processed-files": "Archivos procesados", "label-modified-files": "Archivos modificados", "label-total-replacements": "Reemplazos totales" }, "daily-notes": { "name": "Notas diarias", "desc": "Abrir la nota de hoy o crear una si no hay una presente.", "short-name": "Today", "action-open": "Abrir la nota de hoy", "action-open-previous": "Abrir la nota diaria anterior", "action-open-next": "Abrir la siguiente nota diaria", "action-insert-text": "Insert text into daily note", "action-insert-link": "Insert link into daily note", "msg-fail-format": "Error al crear nota diaria. \"{{format}}\" no es un formato válido.", "msg-fail-folder": "Error al crear nota diaria. La carpeta \"{{folderOption}}\" no existe.", "msg-fail-template-file": "Error al crear nota diaria. El archivo de plantilla \"{{template}}\" no existe.", "msg-no-previous": "No hay nota diaria antes de esta.", "msg-no-next": "No hay nota diaria después de esta.", "option-date-format": "Formato de fecha", "label-refer-to-syntax": "Para más opciones, vea: ", "label-syntax-link": "referencia de formato", "label-syntax-live-preview": "Así es como se verá: ", "option-new-file-location": "Ubicación del nuevo archivo", "option-new-file-location-description": "La carpeta para crear una nota diaria nueva.", "option-template": "Ubicación del archivo plantilla", "option-template-description": "La ruta al archivo para usar como plantilla.", "option-open-on-start": "Open daily note on startup", "option-open-on-start-description": "Open your daily note automatically whenever you open this vault." }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Nota al azar", "desc": "Abre una nota al azar. Útil para revisiones y descubrimientos.", "short-name": "Random", "action-open": "Abrir nota al azar" }, "outline": { "name": "Esquema", "desc": "Muestra el esquema del archivo actual o el panel enlazado.", "action-open": "Abrir el esquema", "action-show": "Show outline pane", "action-open-for-current": "Open outline of the current file", "tab-title": "Esquema de {{displayText}}", "label-no-headings": "No se encontraron encabezados." }, "word-count": { "name": "Conteo de palabras", "desc": "Mostrar el número de palabras en la barra de estado." }, "slides": { "name": "Diapositivas", "desc": "Presente desde Markdown. Use \"---\" para separar diapositivas.", "action-start": "Empezar presentación" }, "audio-recorder": { "name": "Grabadora de audio", "desc": "Grabar audio y guardar como archivo adjunto.", "action-start": "Empezar a grabar audio", "action-stop": "Parar de grabar audio", "action-toggle": "Empezar/Parar de grabar", "msg-access-denied": "Acceso al microfono denegado, por favor habilítelo desde el panel de preferencias.", "msg-pending-grant": "Por favor autorice acceso al microfono para empezar a grabar.", "msg-no-microphone": "No hay microfono conectado." }, "open-with-default-app": { "name": "Abrir en la app por defecto", "desc": "Añadir botón para abrir el archivo actual en la app por defecto.", "action-open-file": "Abrir en la app por defecto", "action-open-file-mobile": "Compartir", "action-show-in-folder": "Mostrar en carpeta", "action-show-in-folder-mac": "Mostrar en Finder" }, "templates": { "name": "Plantillas", "desc": "Insertar contenido de plantillas desde una carpeta de archivo de plantillas.", "action-insert": "Insertar plantilla", "action-insert-current-date": "Inserta fecha actual", "action-insert-current-time": "Inserta hora actual", "option-template-folder-location": "Ubicación de la carpeta de plantillas", "option-template-folder-location-description": "Archivos en esta carpeta estarán disponibles como plantillas.", "option-template-date-format": "Formato de fecha", "option-template-date-format-description": "{{date}} en la plantilla será reemplazado con este valor.", "option-template-date-format-description2": "También puedes usar {{date:YYYY-MM-DD}} para sobreescribir el formato una vez.", "option-template-time-format": "Formato de tiempo", "option-template-time-format-description": "{{time}} en la plantilla será reemplazado con este valor.", "option-template-time-format-description2": "También puedes usar {{time:HH:mm}} para sobreescribir el formato una vez.", "instruction-navigate": "para navegar", "instruction-insert": "para insertar plantilla", "instruction-dismiss": "para descartar", "msg-no-templates-found": "No se encontraron plantillas", "msg-fail-invalid-folder": "Error al listar las plantillas. La carpeta de plantillas es inválida.", "msg-fail-folder-not-found": "Error al listar las plantillas. La carpeta \"{{folderOption}}\" no fue encontrada.", "prompt-type-template": "Escriba el nombre de una plantilla..." }, "translucency": { "name": "Ventana translúcida", "desc": "Activa un efecto de translucidez que aumenta la sensación de profundidad. Mejor usar en modo oscuro. No soportado en Linux." }, "slash-command": { "name": "Slash commands", "desc": "Enable the ability to trigger slash commands in the editor by typing the forward slash." }, "editor-status": { "name": "Estado del editor", "desc": "Añadir el item a la barra de estado y cambiar el actual modo del editor.", "read": "Leyendo", "edit-source": "Codigo fuente", "edit-live-preview": "Vista previa" }, "publish": { "name": "Publica", "desc": "Publica tus notas a través de Obsidian Publish.", "action-publish-changes": "Publicar cambios", "label-no-internet-access": "You need access to the internet to publish changes.", "label-publish-service-description": "Obsidian Publish is an add-on paid service that lets you publish your notes online directly from Obsidian.", "label-please-login": "To start publishing, please log in or create a new Obsidian account.", "label-no-publish-subscription": "You do not have an Obsidian Publish subscription yet.", "button-purchase": "Purchase", "label-manage-sites": "Manage sites", "label-no-sites": "You don't have any sites.", "button-choose": "Choose", "tooltip-edit-site-id": "Edit site ID", "tooltip-delete-site": "Delete site", "label-delete-site-confirmation": "Are you sure you want to delete this site?", "label-delete-site-details": "This will immediately and permanently delete your site.", "label-confirm-delete-site": "Confirm delete site \"{{site}}\"", "option-site-id": "Site ID", "option-site-id-description": "Your site will be at https://publish.obsidian.md/{site id}. You can change this later. Only lower case letters, numbers, and dashes are allowed.", "option-site-id-placeholder": "Pick a site ID", "button-create": "Create", "msg-invalid-site-id": "Site ID can only contain lowercase letters, numbers, and dashes.", "msg-site-id-in-use": "This site ID is in use, please try another one.", "msg-create-site-issue": "That was an issue when creating your site.", "label-site-options": "Site options", "option-site-general": "General", "option-site-components": "Components", "option-site-appearance": "Appearance", "option-site-reading-experience": "Reading experience", "option-site-misc": "Other site settings", "option-site-name": "Site name", "option-site-name-description": "Name of your published site. It will show up in the page title of your site.", "option-site-name-placeholder": "Name of your site", "option-home-page-file": "Homepage file", "option-home-page-file-description": "The first page the user sees when landing on your published site", "option-home-page-file-placeholder": "Pick a published file", "option-logo": "Logo", "option-logo-description": "Pick an image file as your site logo.", "option-logo-placeholder": "Any any uploaded image in your vault...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "Theme", "option-theme-description": "Choose default color scheme for your site.", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "Show navigation", "option-show-navigation-description": "Display a list of all published pages on the left side of your published site.", "option-show-search": "Show search bar", "option-show-search-description": "Display a search bar at top of the navigation that lets the visitors search pages and headings on your site.", "option-show-graph": "Show graph view", "option-show-graph-description": "Display a small local graph on each page.", "option-show-outline": "Show table of contents", "option-show-outline-description": "Display the outline of headings on each page.", "option-show-backlinks": "Show backlinks", "option-show-backlinks-description": "Show backlink section at the end of each page.", "option-sliding-window-mode": "Use sliding windows", "option-sliding-window-mode-description": "Open pages in new panes to the right. Allows scrolling through panes horizontally.", "option-hover-preview-file": "Show hover preview", "option-hover-preview-file-description": "Display page preview when hovering links.", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "Readable line length", "option-readable-line-length-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-site-password": "Passwords", "option-site-password-description": "Restrict access to your site with passwords.", "option-google-analytics": "Google Analytics tracking code", "option-google-analytics-description": "Configure Google Analytics for your site. Only available for visitors from your custom domain URL. Please check with your local laws and regulations first.", "button-manage-passwords": "Manage", "button-save-site-settings": "Save site settings", "msg-updated-options": "Updated options for your site.", "button-go-back": "Back", "label-publishing-to": "Publishing to", "tooltip-switch-site": "Switch site", "button-add-linked": "Add linked", "tooltip-add-linked": "Add all files that are linked by currently selected items", "msg-added-linked-files": "{{count}} linked file has been added.", "msg-added-linked-files_plural": "{{count}} linked files have been added.", "tooltip-open-site-options": "Change site options", "label-no-changes-detected": "No changes were detected.", "label-changed-files-to-be-published": "Changes", "label-unchanged-files-already-published": "Unchanged (select to delete)", "label-file-selected": " selected", "button-select-all-files": "Select all", "button-deselect-all-files": "Deselect all", "label-new-files-to-be-published": "New", "button-publish": "Publish", "msg-no-permission-to-publish-to-site": "You do not have permissions to publish to the current site.", "msg-select-at-least-one-file": "Please select at least one file.", "label-upload-changes": "Upload changes", "button-done": "Done", "button-stop": "Stop", "label-status-uploading": "Uploading", "label-status-to-publish": "To publish", "label-status-to-delete": "To delete", "label-status-published": "Published", "label-status-deleted": "Deleted", "label-status-failed": "Failed", "label-status-cancelled": "Cancelled", "button-change": "Change", "label-clear-cache": "It takes up to a few minutes for the changes to show up on your site. If you do not see your latest changes, try clearing the cache in your browser.", "label-visit-site": "You can visit your site here: ", "msg-something-went-wrong": "Something went wrong. Please check the developer console for details.", "msg-network-error": "A network error occurred. ", "label-manage-passwords": "Manage passwords", "label-add-password": "Add password", "action-new-password": "New password", "label-no-password": "Your site currently does not have any passwords. Anyone can visit it.", "label-have-password": "Your site is password protected. If you have multiple passwords, visitors can access your site by entering any of them.", "option-password-name": "Password", "option-password-desc": "A hash of your password will be stored securely. Once the password is set, it cannot be revealed in plaintext.", "option-password-placeholder": "Your password", "option-nickname-name": "Nickname (optional)", "option-nickname-desc": "Set a nickname to remind yourself what or who the password is for.", "action-add-password": "Add this password", "label-untitled-password": "Untitled password", "label-password-created-time": "Created {{time}}", "msg-added-new-password": "Added new password.", "option-custom-domain": "Custom domain", "option-custom-domain-desc": "Use your own domain rather than the https://publish.obsidian.md/{site id} URL.", "option-noindex": "Disallow search engine indexing", "option-noindex-desc": "Prevent search engines from indexing your site.", "button-configure": "Configure", "label-configure-custom-domain": "Configure custom domain", "option-custom-url-name": "Custom URL", "option-custom-url-desc": "The URL that your site will be located at.", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "Redirect to your custom domain", "option-custom-url-redirect-desc": "Redirect visitors on publish.obsidian.md/id to your custom domain.", "button-update-custom-domain": "Update domain setting", "label-custom-domain-instructions": "Please refer to our {{link}} on our help site for more information.", "label-custom-domain-link-name": "custom domain setup guide", "label-site-usage": "You're using {{site}} out of your {{limit}}.", "button-add-more-sites": "Buy more sites", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "Workspaces", "desc": "Save and load workspace layout.", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "Save", "button-load": "Load", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "Sync", "desc": "Synchronize your files through Obsidian Sync.", "action-view-version-history": "View version history", "label-load-more": "Load more", "label-show-diff": "Show diff", "label-copy-to-clipboard": "Copy to clipboard", "label-restore-this-version": "Restore this version", "msg-already-latest-version": "This version is already the latest version.", "msg-restored-version": "Successfully restored version from {{time}}", "label-file-deleted": "This file was deleted", "label-no-earlier-version": "There was no earlier versions of this file.", "label-empty-file": "Empty", "label-setting-files": "Setting files", "label-deleted-files": "Deleted files", "label-version-history": "Version history", "label-click-to-see-history": "Click on a deleted file to see its history.", "label-create-remote-vault": "Create remote vault", "msg-please-enter-password": "Please enter a password.", "msg-vault-name-cannot-be-empty": "Vault name cannot be empty.", "msg-successfully-created-vault": "Successfully create remote vault \"{{name}}\".", "label-remote-vault-explanation": "Remote vaults securely synchronize your vault between devices.", "option-vault-name": "Vault name", "option-vault-name-desc": "Helps you remember what this vault is for.", "option-vault-name-placeholder": "My awesome vault", "option-use-custom-encryption-password": "Customize end-to-end encryption password", "option-use-custom-encryption-password-desc": "If you turn this off, we will securely manage an encryption key for you.", "option-use-custom-encryption-password-desc-warning": "This option cannot be changed later.", "option-encryption-password": "Encryption password", "option-encryption-password-desc": "This password cannot be changed later.", "option-encryption-password-desc-warning": "If you forget this password, any remote data will remain unusable forever.", "option-encryption-password-desc-2": "This does not affect your local data.", "option-encryption-password-placeholder": "Your password", "label-enter-encryption-password": "Enter encryption password", "button-unlock-vault": "Unlock vault", "msg-verified-password": "Successfully verified your password.", "label-remote-vaults": "Your remote vaults", "label-vault-created-time": "Created {{time}}", "tooltip-delete-remote-vault": "Delete", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "Confirm delete vault", "label-confirm-delete-remote-vault-question": "Are you sure you want to delete this remote vault?", "label-confirm-delete-remote-vault-result": "All data on our server, including version history, will be deleted. Your local files will stay intact.", "label-confirm-delete-remote-vault-warning": "This action is permanent and irreversible.", "msg-remote-vault-deleted": "{{name}} has been deleted.", "button-connect-to-remote-vault": "Connect", "button-disconnect-from-remote-vault": "Disconnect", "label-not-remote-vaults": "You don't have any remote vaults.", "button-create-new-remote-vault": "Create new vault", "label-sync-log": "Sync log", "options-only-show-errors": "Errors only", "options-only-show-errors-desc": "Only show errors and hide other log items.", "button-copy-sync-log": "Copy sync log", "msg-successfully-copied-sync-log": "Successfully copied sync log.", "button-retry": "Retry", "button-purchase-subscription": "Purchase", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "Choose", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "Sync status", "option-sync-status-desc-paused": "Obsidian Sync is currently paused.", "option-sync-status-desc-running": "Obsidian Sync is currently running.", "option-device-name": "Device name", "option-device-name-desc": "This name will be displayed in the sync log. Leave empty to use the default name.", "button-resume": "Resume", "button-pause": "Pause", "option-view-deleted-files": "Deleted files", "option-view-deleted-files-desc": "View and restore deleted files.", "option-sync-log": "Sync activity", "option-sync-log-desc": "View recent sync activities for debugging.", "button-view": "View", "button-bulk-restore": "Bulk restore", "button-restore-selected-files": "Restore selected files", "msg-restoring": "Restoring...", "msg-restoring-complete": "`Restore complete: {{succeeded}} succeeded and {{failed}} failed.`", "option-over-size": "Vault size over limit", "option-over-size-desc": "Your vault is at {{size}} out of {{limit}}.", "msg-largest-files": "View largest files", "msg-largest-files-desc": "These are the remote files that are taking the most space. After deleting attachments, use the purge button to free up remote vault space.", "button-purge-remote": "Purge", "tooltip-purge-remote": "Permanently purge deleted attachments from remote vault to save space.", "msg-purge-complete": "Purge complete.", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "Selective sync", "option-excluded-folders": "Excluded folders", "option-excluded-folder-desc": "Prevent certain folders from being synced.", "option-currently-excluded-folders": " These folders currently excluded:", "button-manage-excluded-folders": "Manage", "option-sync-image": "Sync images", "option-sync-image-desc": "Sync image files with these extensions: {{extensions}}.", "option-sync-audio": "Sync audio", "option-sync-audio-desc": "Sync audio files with these extensions: {{extensions}}.", "option-sync-video": "Sync videos", "option-sync-video-desc": "Sync video files with these extensions: {{extensions}}.", "option-sync-pdf": "Sync PDFs", "option-sync-pdf-desc": "Sync PDF files.", "option-sync-unsupported": "Sync all other types", "option-sync-unsupported-desc": "Sync unsupported file types.", "option-vault-config-sync": "Vault configuration sync", "option-view-config-files": "Settings version history", "option-view-config-files-desc": "View and restore version history of setting files.", "option-sync-app": "Main settings", "option-sync-app-desc": "Enable to sync editor settings, files & links settings, custom hotkeys, etc.", "option-sync-appearance": "Appearance settings", "option-sync-appearance-desc": "Sync appearance settings like dark mode, active theme, and enabled snippets.", "option-sync-appearance-data": "Themes and snippets", "option-sync-appearance-data-desc": "Sync downloaded themes and snippets. Whether they are enabled depends on the previous setting.", "option-sync-hotkey": "Hotkeys", "option-sync-hotkey-desc": "Sync custom hotkeys.", "option-sync-core-plugin": "Active core plugin list", "option-sync-core-plugin-desc": "Sync which core plugins are enabled.", "option-sync-core-plugin-data": "Core plugin settings", "option-sync-core-plugin-data-desc": "Sync core plugin settings.", "option-sync-community-plugin": "Active community plugin list", "option-sync-community-plugin-desc": "Sync which community plugins are enabled.", "option-sync-community-plugin-data": "Installed community plugins", "option-sync-community-plugin-data-desc": "Sync installed community plugins (.js, .css, and manifest.json files) and their settings.", "label-sync-introduction": "Obsidian Sync is Obsidian's add-on sync service with end-to-end encryption and version history.", "label-account-required": "To start syncing, please log in or create a new Obsidian account.", "button-sign-up": "Sign up", "button-log-in": "Log in", "label-manage-excluded-folders": "Manage excluded folders", "label-number-of-folders-excluded": "{{folders}} are currently excluded from being synced.", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "Setup connection", "label-now-connected-to-vault": "You're now connected to \"{{name}}\".", "button-start-syncing": "Start syncing", "label-confirm-merge-vault": "Confirm Merge Vault", "msg-vault-has-notes": "Your local vault already contains some notes.", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "File recovery", "desc": "Let you restore recent snapshots to recover from accidental data loss. Snapshots are only saved for Markdown files.", "action-open": "Open saved snapshots", "option-interval": "Snapshot interval", "option-interval-description": "Minimal interval in minutes between two snapshots.", "option-keep": "History length", "option-keep-description": "Length in days snapshots is kept for.", "option-open-history": "Snapshots", "option-open-history-description": "View and restore saved snapshots.", "button-view-snapshots": "View", "option-clear": "Clear history", "option-clear-description": "Wipe all snapshots.", "button-clear-history": "Clear", "label-clear-warning": "Are you sure you want to delete all snapshots? Note that only snapshots will be removed. All files inside your vault will not be affected.", "msg-clear-complete": "Snapshots cleared.", "label-no-history-found": "No snapshots found.", "placeholder-choose-file": "Choose a file...", "label-select-file": "Please select a file on the left to view snapshots." }, "note-composer": { "name": "Note composer", "desc": "Merge, split, and refactor notes.", "option-confirm-file-merge": "Confirm file merge", "option-confirm-file-merge-description": "Prompt before merge two files.", "option-split-replacement-text": "Text after extraction", "option-split-replacement-text-description": "What to show in place of the selected text after extracting it.", "option-choice-split-replacement-text-link": "Link to new file", "option-choice-split-replacement-text-embed": "Embed new file", "option-choice-split-replacement-text-none": "None", "option-template-file": "Template file location", "option-template-file-description": "Template file to use when merging or extracting. Available variables: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Merge current file with another file...", "action-merge-file": "Merge entire file with...", "label-no-files": "No files found.", "instruction-navigate": "to navigate", "instruction-merge": "to merge", "instruction-create-new": "to create new", "instruction-merge-at-top": "to merge at top", "instruction-dismiss": "to dismiss", "prompt-select-file-to-merge": "Select file to merge into...", "label-merge-file": "Merge file", "label-confirm-file-merge": "Are you sure you want to merge \"{{file}}\" into \"{{destination}}\"? \"{{file}}\" will be deleted.", "button-merge": "Merge", "button-merge-do-not-ask-again": "Merge and don't ask again", "command-split-file": "Extract current selection...", "command-extract-heading": "Extract this heading...", "instruction-append": "to move to bottom", "instruction-prepend": "to move to top", "msg-fail-to-fetch-template": "Failed to fetch template file: \"{{template}}\" not found.", "msg-fail-to-find-heading": "Failed to find heading" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} palabra", "word-with-count_plural": "{{count}} palabras", "character-with-count": "{{count}} carácter", "character-with-count_plural": "{{count}} caracteres", "link-with-count": "{{count}} enlace", "link-with-count_plural": "{{count}} enlaces", "file-with-count": "{{count}} archivo", "file-with-count_plural": "{{count}} archivos", "folder-with-count": "{{count}} carpeta", "folder-with-count_plural": "{{count}} carpetas", "backlink-with-count": "{{count}} backlink", "backlink-with-count_plural": "{{count}} backlinks", "site-with-count": "{{count}} site", "site-with-count_plural": "{{count}} sites", "plugin-with-count": "{{count}} plugin", "plugin-with-count_plural": "{{count}} plugins", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } }{ "setting": { "options": "Options", "plugin": "Plugin", "builtin-plugins": "Core plugins", "plugin-options": "Plugin options", "folder-path-example-placeholder": "Example: folder 1/folder 2", "file-path-example-placeholder": "Example: folder/note", "msg-restart-required": "Changing this option requires a restart to take effect.", "editor": { "name": "Editor", "section-general": "General", "section-behavior": "Behavior", "section-display": "Display", "option-spellcheck": "Spell check", "option-spellcheck-description": "Turns on the spell checker. Currently only works for English (US).", "spellcheck-languages": "Spellcheck languages", "spellcheck-languages-description": "Choose the languages for the spellchecker to use.", "spellcheck-languages-mac-description": "The native spellchecker will automatically detect the language being used for you on macOS.", "spellcheck-dict": "Spellcheck dictionary", "spellcheck-dict-empty": "The spellcheck dictionary is empty.", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "Readable line length", "option-readable-line-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-strict-line-break": "Strict line breaks", "option-strict-line-break-description": "In preview mode, ignore single line breaks according to the Markdown specs. Turn this off for single line breaks to show in preview.", "option-show-frontmatter": "Show frontmatter", "option-show-frontmatter-description": "In preview mode, show frontmatter as a code block. Turn off to hide frontmatter section.", "option-auto-pair-brackets": "Auto pair brackets", "option-auto-pair-brackets-description": "Pair brackets and quotes automatically.", "option-auto-pair-markdown": "Auto pair Markdown syntax", "option-auto-pair-markdown-description": "Pair symbols automatically for bold, italics, highlight, strikethrough, and code.", "option-smart-indent-lists": "Smart indent lists", "option-smart-indent-lists-description": "Take care of indentation and list marker for you.", "option-fold-heading": "Fold heading", "option-fold-heading-description": "Let you fold everything under a heading.", "option-fold-indent": "Fold indent", "option-fold-indent-description": "Let you fold a portion of the same indentation, such as lists.", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Editing view", "option-default-new-tab-view-reading": "Reading view", "option-default-editing-mode": "Default editing mode", "option-default-editing-mode-description": "The default editing mode a new pane will start with.", "option-default-editing-mode-source": "Source mode", "option-default-editing-mode-live-preview": "Live Preview", "option-show-line-number": "Show line number", "option-show-line-number-description": "Show line number in the gutter.", "option-indentation-guide": "Show indentation guides", "option-indentation-guide-description": "Show vertical relationship lines between bullet points for visual guidance.", "option-use-tabs": "Use tabs", "option-use-tabs-description": "Use tabs to indent when pressing the \"Tab\" key. Set this to off to use spaces.", "option-tab-size": "Tab size", "option-tab-size-description": "Number of spaces a tab is equivalent to.", "option-rtl": "Right-to-left (RTL)", "option-rtl-description": "Sets the text direction of notes to display in right-to-left.", "option-auto-convert-html": "Auto convert HTML", "option-auto-convert-html-description": "Automatically convert HTML to Markdown when pasting and drag-and-drop from webpages. Use Ctrl/Cmd+Shift+V to paste without conversion.", "option-vim-key-bindings": "Vim key bindings", "option-vim-key-bindings-description": "Let you use Vim key bindings in the source editor.", "option-vim-key-bindings-mobile": "On mobile devices, this setting is per-device and is not synchronized through the config file.", "option-emacsy-keys": "Legacy Emacs-style key bindings for macOS", "option-emacsy-keys-description": "Allows you to use the additional Emacs-style navigation keys, which are standard on macOS, but may interfere with some key operations.", "label-confirm-enable-vim": "Confirm entering Vim mode", "label-vim-warning": "Vim mode is for efficient text editing but can be quite counter-intuitive. If you're not familiar with Vim, this option might make it look like Obsidian has stopped working.", "label-vim-test": "To verify that you know your way around Vim, please enter the command to quit Vim without saving below:", "label-vim-your-answer": "Your answer", "placeholder-enter-command": "Enter command...", "button-confirm-enable-vim": "Let me enable Vim", "msg-vim-mode-enabled": "Command is correct. Vim mode now enabled.", "msg-vim-mode-not-enabled": "Command is incorrect. Vim mode remains disabled to protect you.", "msg-vim-mode-please-enter-command": "Please enter the command to enable Vim mode", "option-legacy-editor": "Use legacy editor", "option-legacy-editor-description2": "The legacy editor will be deprecated soon. It is currently no longer maintained, and as such, bugs will no longer be addressed.", "label-legacy-deprecation": "New editor is here", "label-legacy-deprecation-1": "Obsidian now has a brand new editor that's more robust and accessible.", "label-legacy-deprecation-2": "It seems you're still using the legacy editor, and we think you'll enjoy the new editor.", "label-legacy-deprecation-choice": "Which mode would you like to use?", "label-live-preview-description": "A more modern, what-you-see-is-what-you-get experience.", "label-source-mode-description": "See raw Markdown with syntax highlighting.", "button-start-new-editor": "Start new editor" }, "file": { "name": "Files & Links", "option-confirm-file-deletion": "Confirm file deletion", "option-confirm-file-deletion-description": "Whether you want to get prompted to confirm file deletion.", "option-delete-destination": "Deleted files", "option-delete-destination-description": "What to do with files after you delete them.", "option-choice-system-trash": "Move to system trash", "option-choice-vault-trash": "Move to Obsidian trash (.trash folder)", "option-choice-permanent-delete": "Permanent delete", "option-always-update-links": "Always update internal links", "option-always-update-links-description": "Whether to automatically update links after renaming a file or prompt.", "option-new-note-location": "New note default location", "option-new-note-location-description": "Where to put newly created notes. Plugin settings will override this.", "option-choice-vault-root": "Vault root", "option-choice-current-folder": "Same folder as the file is in", "option-choice-specified-folder": "In the folder specified below", "option-new-file-folder-path": "Folder to create new notes in", "option-new-file-folder-path-description": "Newly created notes will appear under this folder. Plugin settings will override this.", "option-use-wiki-links": "Use [[Wikilinks]]", "option-use-wiki-links-description": "Auto-generate Wikilinks for [[links]] and ![[images]] instead of Markdown links and images. Disable this option to generate Markdown links instead.", "option-show-unsupported-files": "Detect all file extensions", "option-show-unsupported-files-description": "Show files with any extension even if Obsidian can't open them natively, so that you can link to them and see them in File Explorer and Quick Switcher.", "option-link-autocompleted-format": "New link format", "option-link-autocompleted-format-description": "What links to insert when auto generating internal links.", "option-choice-shortest-linktext": "Shortest path when possible", "option-choice-relative-path": "Relative path to file", "option-choice-absolute-path": "Absolute path in vault", "option-new-attachment-location": "Default location for new attachments", "option-new-attachment-location-description": "Where newly added attachments are placed.", "option-choice-subdirectory": "In subfolder under current folder", "option-attachment-folder-path": "Attachment folder path", "option-attachment-folder-path-description": "Newly created attachment files will appear here. That includes images created via drag and drop or pasting, and audio recordings.", "option-attachment-subfolder-path": "Subfolder name", "option-attachment-subfolder-path-description": "If your file is under \"vault/folder\", and your set subfolder name to \"attachments\", attachments will be saved to \"vault/folder/attachments\".", "option-attachment-subfolder-path-placeholder": "attachments", "option-excluded-files": "Excluded files", "option-excluded-files-desc": "Excluded files will be either hidden or less noticeable in various places, such as Quick Switcher, link suggestion, and Graph View.", "label-no-excluded-filters-applied": "No excluded filter is applied right now. Add one below.", "label-excluded-filters-applied": "Files matching the following filters are currently excluded:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Enter path or \"/regex/\"..." }, "appearance": { "name": "Appearance", "option-base-theme": "Base theme", "option-base-theme-description": "Choose Obsidian’s default color scheme.", "option-accent-color": "Accent color", "option-accent-color-description": "Choose the accent color used throughout the app.", "dark-theme": "Dark", "light-theme": "Light", "system-theme": "Adapt to system", "option-font": "Font", "option-advanced": "Advanced", "option-interface-font": "Interface font", "option-interface-font-description": "Set base font for all of Obsidian.", "option-text-font": "Text font", "option-text-font-description": "Set font for editing and reading views.", "option-monospace-font": "Monospace font", "option-monospace-font-description": "Set font for places like code blocks and frontmatter.", "label-single-font-currently-in-effect": " Currently applied font: ", "label-multiple-fonts-currently-in-effect": " The following fonts are currently applied:", "option-font-placeholder": "Enter font name...", "label-no-custom-font-set": "No custom font is applied right now. Add one below.", "label-font-applied": "The first font from this list that is available on your system will be applied.", "msg-font-not-found": "This font is not detected on your system.", "msg-font-found": "This font is detected on your system.", "label-font-name": "Font name", "option-community-themes": "Open community themes", "option-community-themes-description": "Preview and use amazing themes created by the community.", "button-browse-community-themes": "Browse", "option-font-size": "Font size", "option-font-size-description": "Font size in pixels that affects editor and preview.", "option-font-size-action": "Quick font size adjustment", "option-font-size-action-description": "Adjust the font size using Ctrl + Scroll, or using the trackpad pinch-zoom gesture.", "option-themes": "Themes", "option-manage-themes-description": "Manage installed themes and browse community themes.", "option-theme-button-manage": "Manage", "option-choice-none": "None", "option-native-menus": "Native menus", "option-native-menus-desc": "Menus throughout the app will match the operating system. They will not be affected by your theme.", "button-reload-themes": "Reload themes", "msg-reloaded-themes": "Reloaded custom CSS themes.", "button-open-themes-folder": "Open themes folder", "option-css-snippets": "CSS snippets", "label-no-css-snippets-found": "No CSS snippets found in the snippets folder.", "no-snippet-description": "CSS Snippets are stored in \"{{path}}\".", "button-reload-snippets": "Reload snippets", "button-open-snippets-folder": "Open snippets folder", "msg-reloaded-snippets": "Reloaded CSS snippets.", "option-toggle-snippet-description": "Apply CSS snippet at \"{{path}}\".", "label-installed-themes": "Installed themes", "label-screenshot-unavailable": "Screenshot unavailable", "label-default-theme": "Default", "tooltip-click-to-enlarge": "Click to enlarge", "button-update": "Update", "label-currently-selected": "Selected", "option-frame-style": "Window frame style", "option-frame-description": "Determines the styling of the title bar of Obsidian windows. Requires a full restart to take effect.", "option-frame-hidden": "Hidden (default)", "option-frame-obsidian": "Obsidian frame", "option-frame-native": "Native frame", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Show tab title bar", "option-show-view-header-desc": "Display the header at the top of every tab.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "button-check-for-updates": "Check for updates", "button-view-updates": "View updates", "button-update-all-themes": "Update all", "label-current-themes": "Current community themes", "label-currently-installed": "You currently have {{count}} theme installed.", "label-currently-installed_plural": "You currently have {{count}} themes installed." }, "hotkeys": { "name": "Hotkeys", "prompt-filter": "Filter...", "tooltip-delete-hotkey": "Delete hotkey", "label-waiting-for-hotkey-press": "Press hotkey...", "tooltip-restore-default": "Restore default", "tooltip-customize-command": "Customize this command", "tooltip-hotkey-single-conflict": "This hotkey conflicts with \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "This hotkey conflicts with {{count}} other commands", "label-blank-hotkey": "Blank" }, "about": { "name": "About", "label-commercial-license": "Commercial license", "label-license-key": "License key", "license-key-placeholder": "Your license key...", "label-activate-license": "Activate license", "button-activate": "Activate", "label-unknown-version": "Unknown", "label-current-version": "Current version: ", "label-install-version": "(Installer version: {{version}})", "label-up-to-date": "Your app is up to date!", "label-read-changelog": "Read the changelog.", "label-manual-update-required": "To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.", "label-download": "Download", "label-new-version-ready": "A new version is ready to be installed. ", "label-relaunch-to-update": "Relaunch the app to update.", "label-disabled-updates": "Updates are disabled.", "label-checking-for-updates": "Checking for updates...", "button-relaunch": "Relaunch", "button-check-for-updates": "Check for updates", "option-auto-update": "Automatic updates", "option-auto-update-description": "Turn this off to prevent the app from checking for updates.", "option-get-help": "Get help", "option-get-help-description": "Get help on using Obsidian.", "button-open": "Open", "option-language": "Language", "option-language-description": "Change the display language.", "option-insider-build": "Receive insider builds", "option-insider-build-description": "Auto-update to insider builds to try out new features. Note that these builds are bleeding edge and might be less stable.", "option-advanced": "Advanced", "option-hw-acceleration": "Hardware Acceleration", "option-hw-acceleration-description": "Turns on Hardware Acceleration, which uses your GPU to make Obsidian smoother.", "option-hw-acceleration-warning": "If you turn this off, app performance will be severely degraded.", "option-config-location": "Override config folder", "option-config-location-description": "Use a different config folder than the default one. Must start with a dot.", "option-config-location-warning": "Config location must be a valid folder name that starts with a dot.", "label-license": "License", "label-your-commercial-license-key": "Your commercial license key is \"{{key}}\".", "label-commercial-license-info": "Registered to \"{{company}}\" for {{seats}} users. Valid until {{expiry}}.", "label-validating-commercial-license": "Validating...", "label-invalid-commercial-license": "License invalid: ", "button-remove-commercial-license": "Remove", "option-catalyst": "Catalyst license", "option-catalyst-desc": "You currently have the {{tier}} Catalyst license. Thanks for your support!", "option-catalyst-desc-no-license": "You don't have a Catalyst license right now. Catalyst license is a one-time donation to support Obsidian development.", "label-app": "App" }, "account": { "name": "Account", "option-your-account": "Your account", "option-your-account-desc": "You're currently signed in {{name}} ({{email}}).", "option-your-account-desc-no-login": "You're not logged in right now. An account is only needed for Obsidian Sync, Obsidian Publish, and Catalyst insider builds.", "button-manage-settings": "Manage settings", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Commercial license", "option-commercial-license-desc": "If you use Obsidian for commercial purpose, you may need to get a commercial license.", "button-purchase": "Purchase", "button-log-out": "Log out", "label-log-in": "Log in", "label-sign-up": "Sign up", "label-email": "Email", "placeholder-email": "Your email...", "label-password": "Password", "placeholder-password": "Your password...", "button-login": "Login", "message-empty-email": "Email cannot be empty.", "message-invalid-email": "Email is not valid.", "message-empty-password": "Password cannot be empty.", "message-login-failed": "Login failed, please double check your email and password.", "label-no-account": "Don't have an account? ", "link-sign-up-now": "Sign up now" }, "core-plugin": { "plugin-list": "Plugin list", "option-search-plugin": "Search core plugins", "option-search-plugin-description": "Filter plugins by name or description.", "placeholder-search-plugin": "Search plugins..." }, "third-party-plugin": { "name": "Third-party plugin", "option-restricted-mode": "Restricted mode", "option-restricted-mode-description": "Restricted mode is off. Turn on to disable community plugins.", "button-turn-on": "Turn on", "option-browse-community-plugins": "Community plugins", "option-browse-community-plugins-description": "Browse and install third-party plugins made by our amazing community.", "button-browse": "Browse", "label-exit-restricted-mode": "Exit Restricted Mode", "label-exit-restricted-mode-description-1": "Community plugins, like any other software you install, could potentially cause data integrity and security issues.", "label-exit-restricted-mode-description-2": "Plugin security is important to us. Here's what we do:", "label-exit-restricted-mode-description-3": "Despite our efforts, there is still a small chance that a community plugin might misbehave.", "label-code-review": "Initial code review", "label-code-review-desc": "Plugins undergo an initial code review by our team before they appear in the store.", "label-open-source": "Open source", "label-open-source-desc": "Most plugins are open source on GitHub, so you can inspect the code yourself.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We have a large community of developers who watch out for each other.", "label-report-mechanism": "Report mechanism", "label-report-mechanism-desc": "We follow up and remove faulty plugins upon user report.", "label-exit-restricted-mode-disable-confirmation": "Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.", "label-learn-more": "Learn more about plugin security", "button-turn-on-community-plugins": "Turn on community plugins", "label-trust-author": "Do you trust the author of this vault?", "label-trust-author-description-1": "You're opening this vault for the first time, and it comes with some plugins.", "label-trust-author-description-2": "If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.", "label-trust-author-description-3": "If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.", "button-enable-plugins": "Trust author and enable plugins", "button-dont-trust-author": "Browse vault in Restricted Mode", "placeholder-community-plugins": "Search community plugins...", "msg-failed-load-plugins": "Failed to load community plugins.", "label-installed": "Installed", "button-install": "Install", "button-enable": "Enable", "button-disable": "Disable", "button-copy-share-link": "Copy share link", "button-donate": "Donate", "label-no-results-found": "No results found.", "msg-failed-to-load-manifest": "Failed to load plugin manifest.", "label-version": "Version: {{version}}", "label-currently-installed-version": " (currently installed: {{version}})", "label-by-author": "By ", "label-repository": "Repository: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "This plugin does not support your device.", "button-update": "Update", "label-no-readme": "This plugin did not provide a README file.", "msg-installing-plugin": "Installing plugin \"{{name}}\"...", "msg-failed-to-install-plugin": "Failed to install plugin \"{{name}}\".", "msg-successfully-installed-plugin": "Successfully installed plugin \"{{name}}\".", "label-installed-plugins": "Installed plugins", "button-reload-plugins": "Reload plugins", "msg-reloaded-third-party-plugins": "Reloaded third-party plugins.", "label-uninstall": "Uninstall", "label-uninstall-plugin": "Uninstall plugin", "label-uninstall-plugin-confirmation": "Are you sure you want to uninstall this plugin? This will delete the folder of the plugin.", "button-open-plugins-folder": "Open plugins folder", "button-check-for-updates": "Check for updates", "button-update-all-plugins": "Update all", "label-current-plugins": "Current plugins", "label-currently-installed": "You currently have {{count}} plugin installed.", "label-currently-installed_plural": "You currently have {{count}} plugins installed.", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Show a message with how long each plugin took to initialize when starting the app.", "msg-no-updates-found": "No plugin updates found.", "msg-updates-found": "Found {{count}} plugin to update.", "msg-updates-found_plural": "Found {{count}} plugins to update.", "msg-update-plugin": "Update to version {{version}}", "option-search-installed-plugin": "Search installed plugins", "option-search-installed-plugin-description": "Filter installed plugins by name or description.", "placeholder-search-installed-plugin": "Search installed plugins...", "show-installed-only": "Show installed only", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "Showing {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Mobile toolbar", "option-configure-quick-action": "Configure mobile Quick Action", "option-configure-quick-action-description": "Configure which command to trigger when pull down from the top. The current command is set to \"{{command}}\".", "button-configure": "Configure", "placeholder-select-quick-action": "Select Quick Action...", "manage-toolbar-options": "Manage toolbar options", "option-internal-link": "Add internal link", "option-internal-embed": "Add embed", "option-tag": "Add tag", "option-heading": "Toggle heading", "option-strikethrough": "Toggle strikethrough", "option-highlight": "Toggle highlight", "option-code": "Toggle code", "option-blockquote": "Toggle blockquote", "option-markdown-link": "Add Markdown link", "option-bullet-list": "Toggle bullet list", "option-numbered-list": "Toggle numbered list", "option-indent-list": "Indent list item", "option-unindent-list": "Unindent list item", "option-undo": "Undo", "option-redo": "Redo", "option-move-caret-up": "Move caret up", "option-move-caret-down": "Move caret down", "option-move-caret-left": "Move caret left", "option-move-caret-right": "Move caret right", "option-first-line": "Go to first line", "option-last-line": "Go to last line", "option-toggle-keyboard": "Toggle keyboard", "option-configure-toolbar": "Configure mobile toolbar", "option-added-options": "Added options", "option-more-toolbar-options": "More toolbar options", "option-attach": "Insert attachment", "option-add-command": "Add global command", "option-add-command-description": "Select any global command to add to the toolbar." } }, "editor": { "search": { "placeholder-find": "Find", "placeholder-replace": "Replace", "label-previous": "Prev", "label-next": "Next", "label-all": "All", "label-exit-search": "Exit search", "label-replace": "Replace", "label-replace-all": "Replace all" }, "link-suggestion": { "label-type-hash": "Type #", "label-link-heading": "to link heading", "label-type-block": "Type ^", "label-link-block": "to link blocks", "label-type-pipe": "Type |", "label-change-display-text": "to change display text", "label-no-match-found": "No match found" }, "spellcheck": { "no-suggestion": "No suggestions...", "add-to-dictionary": "Add to dictionary" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "No heading", "label-heading-level": "Heading {{level}}" }, "print-modal": { "title": "Export to PDF", "caption": "Export \"{{filename}}\" to PDF with the setting below.", "setting-page-size": "Page size", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Include file name as title", "setting-landscape": "Landscape", "setting-margin": "Margin", "setting-margin-default": "Default", "setting-margin-minimal": "Minimal", "setting-margin-none": "None", "setting-downscale-percent": "Downscale percent", "button-export-to-pdf": "Export to PDF" }, "link-popover": { "tooltip-follow-link": "Follow link", "tooltip-open-link": "Open link", "tooltip-search-tag": "Search tag" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Open in default app", "empty-sidebar": "The sidebar is empty, try dragging a pane here.", "sidebar-expand": "Expand", "sidebar-collapse": "Collapse", "msg-fail-to-save-file": "Failed to save file \"{{filepath}}\". {{message}}.", "no-file": "No file", "msg-file-changed": "\"{{file}}\" has been modified externally, merging changes automatically.", "switch-vault": "Open another vault", "help": "Help", "settings": "Settings", "drag-to-rearrange": "Drag to rearrange", "msg-switched-to-read": "Switched default view mode to reading view.", "msg-switched-to-edit": "Switched default view mode to editor.", "msg-upgrade-installer": "To use this feature, please re-install with latest installer available from our website.", "tooltip-restore-default-settings": "Restore default settings", "label-copy": "Copy to clipboard", "copied_generic": "Copied to your clipboard", "copied": "{{item}} copied to your clipboard", "url": "Url", "msg-open-file-through-uri": "Opened file \"{{path}}\"", "msg-file-not-found-through-uri": "File \"{{name}}\" not found.", "delete-action-short-name": "Delete", "msg-indexing": "Obsidian is indexing your vault...\nThis should only happen once.\nSome functionality may not be available until this is complete.", "msg-indexing-complete": "Indexing complete.", "msg-sandbox-vault": "This is a sandbox vault.\nChanges you make in this vault will be lost.", "label-enter-to-create": "Enter to create", "label-update-available": "Update Available", "label-debug-info": "Debug info", "button-learn-more": "Learn more", "button-not-now": "Not now", "button-add": "Add", "button-manage": "Manage", "label-new-tab": "New tab", "msg-tab-busy": "This tab is currently busy, please try again later", "empty-state": { "no-file-open": "No file is open", "create-new-file": "Create new file", "go-to-file": "Go to file", "see-recent-files": "See recent files", "close": "Close", "unknown-pane-title": "Plugin no longer active", "unknown-pane-desc": "The plugin that created this pane ({{type}}) has gone away" }, "menu": { "edit-view": "Edit (Ctrl/Cmd+Click to edit in new pane)", "read-view": "Current view: reading", "switch-to-edit-view": "Click to edit", "switch-to-read-view": "Click to read", "mod-click-open-new-tab": "{{key}}+Click to open in new tab", "find": "Find...", "replace": "Replace...", "edit": "Edit", "preview": "Preview", "more-options": "More options", "close": "Close", "close-others": "Close others", "close-right": "Close tabs to the right", "pin": "Pin", "unpin": "Unpin", "unlink-tab": "Unlink tab", "link-tab": "Link with tab...", "toggle-source-mode": "Source mode", "toggle-reading-view": "Reading view", "delete-file": "Delete file", "create-file": "Create this file", "open-link": "Open link", "open-in-new-tab": "Open in new tab", "open-to-the-right": "Open to the right", "copy-url": "Copy url", "close-current-tab": "Close current tab", "copy": "Copy", "cut": "Cut", "paste": "Paste", "paste-as-plain-text": "Paste as plain text", "select-all": "Select all", "rename-heading": "Rename this heading...", "rename-blockid": "Rename this block ID...", "open-in-new-window": "Open in new window", "move-to-new-window": "Move to new window", "open-in-browser": "Open in browser", "stack-tabs": "Stack tabs", "unstack-tabs": "Unstack tabs" }, "tooltip": { "click-to-expand": "Click to expand", "click-to-collapse": "Click to collapse", "alias": "Alias", "not-created-yet": "Not created yet, select to create" }, "start-screen": { "label-version": "Version", "option-open-folder-as-vault": "Open folder as vault", "option-open-folder-as-vault-description": "Choose an existing folder of Markdown files.", "option-create-vault": "Create new vault", "option-create-vault-description": "Create a new Obsidian vault under a folder.", "option-connect-obsidian-sync": "Connect to Obsidian Sync", "option-connect-obsidian-sync-description": "Set up a synced vault with existing remote vault.", "option-new-vault-name": "Vault name", "option-new-vault-name-description": "Pick a name for your awesome vault.", "option-new-vault-location": "Location", "option-new-vault-location-description": "Pick a place to put your new vault.", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Reveal vault in system explorer", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "Rename vault...", "msg-error-rename-exists": "There is already a vault with this name.", "msg-error-nested": "Cannot move vault into a subfolder of itself.", "msg-error-rename-open": "Can't rename a currently open vault.", "msg-rename-failed": "Failed to rename vault.", "msg-rename-success": "Successfully renamed vault.", "option-move-vault": "Move vault...", "msg-move-select-dest": "Select destination folder", "msg-error-move-exists": "There is already a vault at the destination.", "msg-error-move-open": "Can't move a currently open vault.", "msg-move-failed": "Failed to move vault.", "msg-move-success": "Successfully moved vault.", "option-remove": "Remove from list", "button-quick-start": "Quick start", "button-open": "Open", "button-browse": "Browse", "button-connect": "Connect", "button-create-vault": "Create", "button-back": "Back", "msg-empty-vault-name": "Vault name cannot be empty.", "msg-invalid-folder": "Please pick a valid folder.", "msg-failed-to-create-vault": "Failed to create vault.", "msg-failed-to-create-vault-at-location": "Could not create vault at the given location. Please double check the location and permission.", "msg-error-failed-to-open-vault": "Failed to open.", "msg-error-remove-current-open-vault": "Can't remove a currently open vault.", "option-get-help": "Get Help", "option-user-email": "Email", "placeholder-your-email": "Your email...", "option-user-password": "Password", "placeholder-your-password": "Your password...", "button-sign-in": "Sign in", "button-setup": "Setup", "option-connect-vault-desc": "Create a synced vault on this device.", "tooltip-own-vault": "This is a remote vault owned by you.", "tooltip-shared-vault": "This is a remote vault shared with you." }, "drag-and-drop": { "insert-link-here": "Insert link here", "insert-links-here": "Insert links here", "move-into-folder": "Move into \"{{folder}}\"", "star-this-file": "Star this file", "star-these-files": "Star these files", "open-in-this-tab": "Open in this tab", "open-as-tab": "Open as new tab" }, "window": { "maximize": "Maximize", "minimize": "Minimize", "restore-down": "Restore down", "close-window": "Close window", "go-back": "Go back", "go-forward": "Go forward" }, "start-up": { "loading-obsidian": "Loading Obsidian...", "obsidian-load-error": "An error occurred while loading Obsidian.", "button-reload-app": "Reload app", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "Open another vault", "loading-components": "Loading components...", "loading-plugins": "Loading plugins...", "loading-vault": "Loading vault...", "msg-failed-to-load-vault": "Failed to load vault: ", "loading-cache": "Loading cache...", "loading-workspace": "Loading workspace..." }, "mobile": { "action-import": "Import into vault", "action-choose-file-to-insert": "Choose a file to insert", "action-insert-text-into-file": "Insert text into {{filename}}", "action-insert-link-into-file": "Insert link into {{filename}}", "msg-importing": "Importing...", "msg-import-success": "Import success", "msg-failed-to-import-file": "Failed to import file {{filename}}", "msg-back-again-to-exit": "Press back again to exit." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "Save current file", "follow-cursor-link": "Follow link under cursor", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "Toggle pin", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "Navigate back", "navigate-forward": "Navigate forward", "use-dark-mode": "Use dark mode", "use-light-mode": "Use light mode", "change-theme": "Change theme", "search-current-file": "Search current file", "search-replace-current-file": "Search & replace in current file", "open-settings": "Open settings", "open-help": "Open help", "toggle-edit": "Toggle editing/reading view", "toggle-source-mode": "Toggle Live Preview/Source mode", "delete-current-file": "Delete current file", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "Toggle left sidebar", "toggle-right-sidebar": "Toggle right sidebar", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "Focus on editor", "toggle-fold": "Toggle fold on the current line", "fold-all": "Fold all headings and lists", "unfold-all": "Unfold all headings and lists", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "Swap line up", "swap-line-down": "Swap line down", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "Toggle bold for selection", "toggle-italics": "Toggle italics for selection", "toggle-highlight": "Toggle highlight for selection", "toggle-comments": "Toggle comments for selection", "insert-link": "Insert link", "toggle-spellcheck": "Toggle spellcheck", "delete-paragraph": "Delete paragraph", "toggle-checklist": "Toggle checklist status", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "Edit file title", "copy-path": "Copy file path", "copy-url": "Copy obsidian url", "export-pdf": "Export to PDF", "reload": "Reload app without saving", "undo-close-tab": "Undo close tab", "context-menu": "Show context menu under cursor", "show-debug-info": "Show debug info", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "Toggle edit/preview mode", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "This will affect {{links}} in {{files}}.", "msg-updated-links": "Updated {{links}} in {{files}}.", "label-update-links": "Update links", "label-confirm-update-link-to-file": "Do you want to update internal links that link to this file?", "button-always-update": "Always update", "button-just-once": "Just once", "button-do-not-update": "Do not update", "label-confirm-deletion": "Are you sure you want to delete \"{{filename}}\"?", "label-move-to-system-trash": "It will be moved to your system trash.", "label-move-to-vault-trash": "It will be moved to your Obsidian trash, which is located in the \".trash\" hidden folder in your vault.", "label-permanent-delete": "The file will be permanent deleted.", "label-non-empty-folder": "This folder is not empty.", "label-delete-folder-warning": "If you continue, all files inside this folder will be deleted.", "label-delete-folder": "Delete folder", "button-delete": "Delete", "button-delete-do-not-ask-again": "Delete and don't ask again", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "There are currently {{links}} pointing to this note.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "Delete file", "button-manage": "Manage", "button-cancel": "Cancel", "button-done": "Done", "button-save": "Save", "button-stop": "Stop", "button-continue": "Continue", "preparing-pdf": "Preparing PDF...", "label-rename-file": "Rename file", "label-new-name": "New name", "msg-rename-success": "Successfully renamed file.", "label-rename-heading": "Rename heading", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "Plugins", "file-explorer": { "name": "File explorer", "desc": "See all the files in your vault.", "action-open": "Open file explorer", "action-show": "Show file explorer", "action-create-note": "Create new note", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "New note", "action-new-folder": "New folder", "action-change-sort": "Change sort order", "action-reveal-file": "Reveal file in file explorer", "action-reveal-active-file": "Reveal active file in file explorer", "command-move-file": "Move file to another folder", "action-move-file": "Move file to...", "action-move-folder": "Move folder to...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "Type a folder", "label-no-folders": "No folders found.", "instruction-navigate": "to navigate", "instruction-move": "to move", "instruction-dismiss": "to dismiss", "label-sort-a-to-z": "Sort by file name (A to Z)", "label-sort-z-to-a": "Sort by file name (Z to A)", "label-sort-new-to-old": "Sort by edit time (new to old)", "label-sort-old-to-new": "Sort by edit time (old to new)", "label-sort-created-old-to-new": "Created time (old to new)", "label-sort-created-new-to-old": "Created time (new to old)", "menu-opt-new-note": "New note", "menu-opt-new-folder": "New folder", "menu-opt-set-attachment-folder": "Set as attachment folder", "menu-opt-rename": "Rename", "menu-opt-delete": "Delete", "menu-opt-make-copy": "Make a copy", "msg-invalid-characters": "File name cannot contain any of the following characters: ", "msg-unsafe-characters": "Links will not work with file names containing any of these characters: ", "msg-file-already-exists": "There's already a file with the same name", "msg-empty-file-name": "File name cannot be empty.", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "Last modified at {{time}}", "tooltip-created-time": "Created at {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Move", "label-untitled-file": "Untitled", "label-untitled-folder": "Untitled", "msg-set-attachment-folder": "Attachments will be saved to \"{{path}}\" from now on." }, "search": { "name": "Search", "desc": "Search for keyword in all the notes.", "action-open-search": "Search in all files", "label-collapse-results": "Collapse results", "label-match-case": "Match case", "label-explain-search-term": "Explain search term", "label-more-context": "Show more context", "prompt-start-search": "Type to start search...", "label-match-text": "Matches text: ", "label-match-regex": "Matches regex: ", "label-match-exact-text": "Contains exact text: ", "label-match-all": "Match all of: ", "label-match-any": "Match any of: ", "label-excluding": "Excluding: ", "label-case-sensitive": "Case sensitive", "label-case-insensitive": "Case insensitive", "label-match-file-path": "Match file path: ", "label-match-file-name": "Match file name: ", "label-match-content": "Match file content: ", "label-match-task": "Match task: ", "label-match-task-todo": "Match task (todo): ", "label-match-task-done": "Match task (done): ", "label-match-line": "Match line: ", "label-match-block": "Match block: ", "label-match-section": "Match section: ", "label-match-tag": "Match tag: ", "label-no-matches": "No matches found.", "matches-with-count": "... and {{count}} more match.", "matches-with-count_plural": "... and {{count}} more matches.", "label-copy-search-results": "Copy search results", "button-copy-results": "Copy results", "msg-successfully-copied": "Results copied to your clipboard.", "option-show-path": "Show path", "option-show-path-description": "Display full path of the file rather than just the file name.", "option-link-style": "Link style", "option-link-style-description": "Optionally turn each file result in to a link.", "option-choice-link-style-none": "None", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Markdown link", "option-list-prefix": "List prefix", "option-list-prefix-description": "Optionally add a list item prefix to each file result.", "option-choice-list-style-none": "None", "option-choice-list-style-dash": "Dash (-)", "option-choice-list-style-asterisk": "Asterisk (*)", "option-choice-list-style-numbered": "Numbered", "tooltip-clear-search": "Clear search", "label-search-options": "Search options", "tooltip-read-more": "Read more", "label-history": "History", "tooltip-clear-history": "Clear search history", "label-path-option-description": "match path of the file", "label-file-name-option-description": "match file name", "label-tag-option-description": "search for tags", "label-line-option-description": "search keywords on same line", "label-section-option-description": "search keywords under same heading", "menu-opt-search-for": "Search for \"{{keyword}}\"" }, "quick-switcher": { "name": "Quick switcher", "desc": "Jump to any files without leaving your keyboard. Ctrl/Cmd+O to activate.", "short-name": "Switcher", "action-open": "Open quick switcher", "instruction-navigate": "to navigate", "instruction-open": "to open", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "to create", "instruction-dismiss": "to dismiss", "label-no-note-create-new": "No notes found. Enter to create a new one.", "prompt-type-file-name": "Type file to switch to or create...", "label-enter-to-create": "Enter to create", "tooltip-not-created-yet": "Not created yet, select to create", "option-show-existing-only": "Show existing only", "option-show-existing-only-description": "Whether to show links to files that are not yet created.", "option-show-attachments": "Show attachments", "option-show-attachments-desc": "Show attachment files like images, videos, and PDFs.", "option-show-all-file-types": "Show all file types", "option-show-all-file-types-desc": "Show all files including ones that Obsidian can't open. The file will be opened with the default app for that file type." }, "graph-view": { "name": "Graph view", "desc": "See a graph overview of which notes link to which.", "action-open": "Open graph view", "action-open-local": "Open local graph", "action-copy-screenshot": "Copy screenshot", "tab-title": "Graph of {{displayText}}", "label-filters": "Filters", "prompt-filter-nodes": "Search files...", "option-depth": "Depth", "option-depth-description": "Show nodes this number of links away", "option-neighbor-links": "Neighbor links", "option-neighbor-links-description": "Show links between neighbors.", "option-forelinks": "Outgoing links", "option-forelinks-description": "Show links to other files", "option-backlinks": "Incoming links", "option-backlinks-description": "Show links from other files", "option-show-tags": "Tags", "option-show-tags-description": "Tags are linked to the files that contain them", "option-show-attachments": "Attachments", "option-show-attachments-description": "Show attachments included by files", "option-show-existing-files-only": "Existing files only", "option-show-existing-files-only-description": "When checked, links to nonexistent files are not shown", "option-show-orphans": "Orphans", "option-show-orphans-description": "Show files that are not linked to any other file", "label-display": "Display", "option-show-arrows": "Arrows", "option-show-arrows-description": "Show arrows when zoomed in", "option-text-fade": "Text fade threshold", "option-node-size": "Node size", "option-link-thickness": "Link thickness", "label-forces": "Forces", "option-center-force": "Center force", "option-link-force": "Link force", "option-link-distance": "Link distance", "option-repel-force": "Repel force", "tooltip-open-graph-settings": "Open graph settings", "msg-screenshot-copied": "Screenshot copied to the clipboard.", "label-groups": "Groups", "placeholder-enter-query": "Enter query...", "tooltip-delete-graph": "Delete group", "button-new-group": "New group", "tooltip-click-to-change-drag-to-reorder": "Click to change color\nDrag to reorder groups", "action-timelapse": "Start graph timelapse animation", "tooltip-start-timelapse-animation": "Start timelapse animation", "button-animate-timelapse": "Animate" }, "backlinks": { "name": "Backlinks", "desc": "Show number of backlinks in the status bar.", "action-open": "Open backlinks", "action-show": "Show backlinks pane", "action-open-for-current": "Open backlinks for the current file", "action-toggle-backlinks-in-document": "Toggle backlinks in document", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "Linked mentions", "label-no-backlinks": "No backlinks found.", "label-unlinked-mentions": "Unlinked mentions", "label-show-search": "Show search filter", "label-link-button-text": "Link", "tab-title": "Backlinks for {{displayText}}", "label-no-unlinked-mentions": "No unlinked mentions found.", "ellipsis": "...", "option-backlink-in-document": "Backlink in document", "option-backlink-in-document-desc": "Show backlinks in document by default when opening new panes." }, "outgoing-links": { "name": "Outgoing Links", "desc": "Show outgoing links and detect unlinked mentions of other notes in the current note.", "action-open": "Open outgoing links", "action-show": "Show outgoing links pane", "action-open-for-current": "Open outgoing links for the current file", "tab-title": "Outgoing links from {{displayText}}", "label-links": "Links", "label-no-links": "No links found.", "label-unlinked-mentions": "Unlinked mentions", "tooltip-link-file": "Link this file", "tooltip-not-created": "Not created yet" }, "tag-pane": { "name": "Tag pane", "desc": "Displays all your tags and along with their number of occurrences.", "action-show": "Show tag pane", "label-no-tags": "No tags found.", "label-sort-by-name-a-to-z": "Tag name (A to Z)", "label-sort-by-name-z-to-a": "Tag name (Z to A)", "label-sort-by-frequency-high-to-low": "Frequency (high to low)", "label-sort-by-frequency-low-to-high": "Frequency (low to high)", "action-show-nested-tags": "Show nested tags", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "Page preview", "desc": "Preview a note when hovering an internal link. Ctrl/Cmd + hover in editor mode.", "label-empty-note": "\"{{linktext}}\" is not created yet. Click to create.", "label-source-editor": "Editor", "label-source-preview": "Preview", "label-source-search": "Search, Backlinks, and Outgoing links", "label-require-mod": "Require {{key}} to trigger page preview on hover" }, "starred": { "name": "Starred", "desc": "Star frequently used files and searches.", "action-show": "Show starred pane", "action-toggle": "Star/unstar current file", "action-toggle-search": "Star/unstar current search", "action-star": "Star", "action-unstar": "Unstar", "menu-opt-remove": "Remove", "msg-successfully-starred": "Successfully starred {{type}} \"{{title}}\".", "msg-removed-starred": "Removed starred {{type}} \"{{title}}\".", "msg-cannot-find-path": "Cannot find file at \"{{path}}\"." }, "custom-css": { "name": "Custom CSS", "desc": "Reads \"obsidian.css\" in the vault and applies it.", "setting-community-themes": "Community themes", "msg-fetching-themes": "Fetching community theme data...", "prompt-filter": "Filter...", "label-dark-theme-only": "Dark themes only", "label-light-theme-only": "Light themes only", "label-use": "Use", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "Update", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "Remove theme", "label-visit-on-github": "Visit on GitHub", "msg-load-error": "Could not load community themes, please check your network.", "msg-now-using-theme": "You're now using {{title}} as your CSS theme.", "msg-deleted-theme": "The theme {{title}} has been deleted.", "msg-updated-theme": "The theme {{title}} has been updated.", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "Command palette", "desc": "Type a command to invoke it. No need to use the UI or remember the shortcut.", "action-open": "Open command palette", "instruction-navigate": "to navigate", "instruction-use": "to use", "instruction-dismiss": "to dismiss", "label-no-commands": "No commands found.", "prompt-type-command": "Type a command...", "label-pinned-commands": "Pinned commands", "option-add-new-pin": "New pinned command", "option-add-new-pin-description": "Pinned commands will appear at the top of all commands when no search query is present." }, "markdown-format-importer": { "name": "Markdown format importer", "desc": "Convert Markdown from other apps to Obsidian format.", "action-open": "Open Markdown importer", "option-roam-tag-fixer": "Roam Research tag fixer", "option-roam-tag-fixer-description": "Converts \"#tag\" and \"#[[tag]]\" to \"[[tag]]\".", "option-roam-highlight-fixer": "Roam Research highlight fixer", "option-roam-highlight-fixer-description": "Converts \"^^highlight^^\" to \"==highlight==\".", "option-roam-todo-converter": "Roam Research TODO converter", "option-roam-todo-converter-description": "Converts \"{{[[TODO]]}}\" to \"[ ]\".", "option-bear-highlight-fixer": "Bear highlight fixer", "option-bear-highlight-fixer-description": "Converts \"::highlight::\" to \"==highlight==\".", "zettelkasten-link-fixer": "Zettelkasten link fixer", "zettelkasten-link-fixer-description": "Fixes \"[[UID]]\" links to full \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Zettelkasten link beautifier", "zettelkasten-link-beautifier-description": "Fixes \"[[UID]]\" links and also beautify them \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Warning: the importer will convert all the files in your vault, not just the current file.", "msg-override-files-warning": "Your files will be overwritten. Back up all your files before attempting conversion.", "label-start-conversion": "Start Conversion", "label-stop": "Stop", "label-go-back": "Go back", "label-done": "Done", "label-processing": "Processing...", "label-cancelling": "Cancelling...", "label-finished": "Finished!", "label-processed-files": "Processed files", "label-modified-files": "Modified files", "label-total-replacements": "Total replacements" }, "daily-notes": { "name": "Daily notes", "desc": "Open today's daily note, or create one if not present.", "short-name": "Today", "action-open": "Open today's note", "action-open-previous": "Open previous daily note", "action-open-next": "Open next daily note", "action-insert-text": "Insert text into daily note", "action-insert-link": "Insert link into daily note", "msg-fail-format": "Failed to create daily note. \"{{format}}\" is not a valid format.", "msg-fail-folder": "Failed to create daily note. Folder \"{{folderOption}}\" not found.", "msg-fail-template-file": "Failed to create daily note. Template file \"{{template}}\" not found.", "msg-no-previous": "There's no daily note before this one.", "msg-no-next": "There's no daily note after this one.", "option-date-format": "Date format", "label-refer-to-syntax": "For more syntax, refer to: ", "label-syntax-link": "format reference", "label-syntax-live-preview": "Here is what it will look like: ", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new daily note.", "option-template": "Template file location", "option-template-description": "The file path to use as template.", "option-open-on-start": "Open daily note on startup", "option-open-on-start-description": "Open your daily note automatically whenever you open this vault." }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Random note", "desc": "Opens a random note. Useful for reviewing and discovering.", "short-name": "Random", "action-open": "Open random note" }, "outline": { "name": "Outline", "desc": "Displays the outline of the current file or linked pane.", "action-open": "Open outline", "action-show": "Show outline pane", "action-open-for-current": "Open outline of the current file", "tab-title": "Outline of {{displayText}}", "label-no-headings": "No headings found." }, "word-count": { "name": "Word count", "desc": "Show word count in the status bar." }, "slides": { "name": "Slides", "desc": "Present from Markdown. Use \"---\" to separate slides.", "action-start": "Start presentation" }, "audio-recorder": { "name": "Audio recorder", "desc": "Record audio and save as attachment.", "action-start": "Start recording audio", "action-stop": "Stop recording audio", "action-toggle": "Start/stop recording", "msg-access-denied": "Microphone access was denied, please enable it from the preference pane.", "msg-pending-grant": "Please grant microphone permission to start recording.", "msg-no-microphone": "No microphone is connected." }, "open-with-default-app": { "name": "Open in default app", "desc": "Add button to open current file in the default app.", "action-open-file": "Open in default app", "action-open-file-mobile": "Share", "action-show-in-folder": "Show in folder", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "Templates", "desc": "Insert template content from a folder of template files.", "action-insert": "Insert template", "action-insert-current-date": "Insert current date", "action-insert-current-time": "Insert current time", "option-template-folder-location": "Template folder location", "option-template-folder-location-description": "Files in this folder will be available as templates.", "option-template-date-format": "Date format", "option-template-date-format-description": "{{date}} in the template file will be replaced with this value.", "option-template-date-format-description2": "You can also use {{date:YYYY-MM-DD}} to override the format once.", "option-template-time-format": "Time format", "option-template-time-format-description": "{{time}} in the template file will be replaced with this value.", "option-template-time-format-description2": "You can also use {{time:HH:mm}} to override the format once.", "instruction-navigate": "to navigate", "instruction-insert": "to insert template", "instruction-dismiss": "to dismiss", "msg-no-templates-found": "No templates found", "msg-fail-invalid-folder": "Failed to list templates. Template folder is invalid.", "msg-fail-folder-not-found": "Failed to list templates. Folder \"{{folderOption}}\" not found.", "prompt-type-template": "Type name of a template..." }, "translucency": { "name": "Translucent window", "desc": "Turn on translucency effect to enhance a sense of depth. Best used with dark mode. Not supported on Linux." }, "slash-command": { "name": "Slash commands", "desc": "Enable the ability to trigger slash commands in the editor by typing the forward slash." }, "editor-status": { "name": "Editor status", "desc": "Adds a status bar item to show and change the current editor mode.", "read": "Reading", "edit-source": "Source mode", "edit-live-preview": "Live Preview" }, "publish": { "name": "Publish", "desc": "Publish your notes through Obsidian Publish.", "action-publish-changes": "Publish changes...", "label-no-internet-access": "You need access to the internet to publish changes.", "label-publish-service-description": "Obsidian Publish is an add-on paid service that lets you publish your notes online directly from Obsidian.", "label-please-login": "To start publishing, please log in or create a new Obsidian account.", "label-no-publish-subscription": "You do not have an Obsidian Publish subscription yet.", "button-purchase": "Purchase", "label-manage-sites": "Manage sites", "label-no-sites": "You don't have any sites.", "button-choose": "Choose", "tooltip-edit-site-id": "Edit site ID", "tooltip-delete-site": "Delete site", "label-delete-site-confirmation": "Are you sure you want to delete this site?", "label-delete-site-details": "This will immediately and permanently delete your site.", "label-confirm-delete-site": "Confirm delete site \"{{site}}\"", "option-site-id": "Site ID", "option-site-id-description": "Your site will be at https://publish.obsidian.md/{site id}. You can change this later. Only lower case letters, numbers, and dashes are allowed.", "option-site-id-placeholder": "Pick a site ID", "button-create": "Create", "msg-invalid-site-id": "Site ID can only contain lowercase letters, numbers, and dashes.", "msg-site-id-in-use": "This site ID is in use, please try another one.", "msg-create-site-issue": "That was an issue when creating your site.", "label-site-options": "Site options", "option-site-general": "General", "option-site-components": "Components", "option-site-appearance": "Appearance", "option-site-reading-experience": "Reading experience", "option-site-misc": "Other site settings", "option-site-name": "Site name", "option-site-name-description": "Name of your published site. It will show up in the page title of your site.", "option-site-name-placeholder": "Name of your site", "option-home-page-file": "Homepage file", "option-home-page-file-description": "The first page the user sees when landing on your published site", "option-home-page-file-placeholder": "Pick a published file", "option-logo": "Logo", "option-logo-description": "Pick an image file as your site logo.", "option-logo-placeholder": "Any uploaded image in your vault...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "Theme", "option-theme-description": "Choose default color scheme for your site.", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "Show navigation", "option-show-navigation-description": "Display a list of all published pages on the left side of your published site.", "option-show-search": "Show search bar", "option-show-search-description": "Display a search bar at top of the navigation that lets the visitors search pages and headings on your site.", "option-show-graph": "Show graph view", "option-show-graph-description": "Display a small local graph on each page.", "option-show-outline": "Show table of contents", "option-show-outline-description": "Display the outline of headings on each page.", "option-show-backlinks": "Show backlinks", "option-show-backlinks-description": "Show backlink section at the end of each page.", "option-sliding-window-mode": "Use sliding windows", "option-sliding-window-mode-description": "Open pages in new panes to the right. Allows scrolling through panes horizontally.", "option-hover-preview-file": "Show hover preview", "option-hover-preview-file-description": "Display page preview when hovering links.", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "Readable line length", "option-readable-line-length-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-site-password": "Passwords", "option-site-password-description": "Restrict access to your site with passwords.", "option-google-analytics": "Google Analytics tracking code", "option-google-analytics-description": "Configure Google Analytics for your site. Only available for visitors from your custom domain URL. Please check with your local laws and regulations first.", "button-manage-passwords": "Manage", "button-save-site-settings": "Save site settings", "msg-updated-options": "Updated options for your site.", "button-go-back": "Back", "label-publishing-to": "Publishing to", "tooltip-switch-site": "Switch site", "button-add-linked": "Add linked", "tooltip-add-linked": "Add all files that are linked by currently selected items", "msg-added-linked-files": "{{count}} linked file has been added.", "msg-added-linked-files_plural": "{{count}} linked files have been added.", "tooltip-open-site-options": "Change site options", "label-no-changes-detected": "No changes were detected.", "label-changed-files-to-be-published": "Changes", "label-unchanged-files-already-published": "Unchanged (select to delete)", "label-file-selected": " selected", "button-select-all-files": "Select all", "button-deselect-all-files": "Deselect all", "label-new-files-to-be-published": "New", "button-publish": "Publish", "msg-no-permission-to-publish-to-site": "You do not have permissions to publish to the current site.", "msg-select-at-least-one-file": "Please select at least one file.", "label-upload-changes": "Upload changes", "button-done": "Done", "button-stop": "Stop", "label-status-uploading": "Uploading", "label-status-to-publish": "To publish", "label-status-to-delete": "To delete", "label-status-published": "Published", "label-status-deleted": "Deleted", "label-status-failed": "Failed", "label-status-cancelled": "Cancelled", "button-change": "Change", "label-clear-cache": "It takes up to a few minutes for the changes to show up on your site. If you do not see your latest changes, try clearing the cache in your browser.", "label-visit-site": "You can visit your site here: ", "msg-something-went-wrong": "Something went wrong. Please check the developer console for details.", "msg-network-error": "A network error occurred. ", "label-manage-passwords": "Manage passwords", "label-add-password": "Add password", "action-new-password": "New password", "label-no-password": "Your site currently does not have any passwords. Anyone can visit it.", "label-have-password": "Your site is password protected. If you have multiple passwords, visitors can access your site by entering any of them.", "option-password-name": "Password", "option-password-desc": "A hash of your password will be stored securely. Once the password is set, it cannot be revealed in plaintext.", "option-password-placeholder": "Your password", "option-nickname-name": "Nickname (optional)", "option-nickname-desc": "Set a nickname to remind yourself what or who the password is for.", "action-add-password": "Add this password", "label-untitled-password": "Untitled password", "label-password-created-time": "Created {{time}}", "msg-added-new-password": "Added new password.", "option-custom-domain": "Custom domain", "option-custom-domain-desc": "Use your own domain rather than the https://publish.obsidian.md/{site id} URL.", "option-noindex": "Disallow search engine indexing", "option-noindex-desc": "Prevent search engines from indexing your site.", "button-configure": "Configure", "label-configure-custom-domain": "Configure custom domain", "option-custom-url-name": "Custom URL", "option-custom-url-desc": "The URL that your site will be located at.", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "Redirect to your custom domain", "option-custom-url-redirect-desc": "Redirect visitors on publish.obsidian.md/id to your custom domain.", "button-update-custom-domain": "Update domain setting", "label-custom-domain-instructions": "Please refer to our {{link}} on our help site for more information.", "label-custom-domain-link-name": "custom domain setup guide", "label-site-usage": "You're using {{site}} out of your {{limit}}.", "button-add-more-sites": "Buy more sites", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "Workspaces", "desc": "Save and load workspace layout.", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "Save", "button-load": "Load", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "Sync", "desc": "Synchronize your files through Obsidian Sync.", "action-view-version-history": "View version history", "label-load-more": "Load more", "label-show-diff": "Show diff", "label-copy-to-clipboard": "Copy to clipboard", "label-restore-this-version": "Restore this version", "msg-already-latest-version": "This version is already the latest version.", "msg-restored-version": "Successfully restored version from {{time}}", "label-file-deleted": "This file was deleted", "label-no-earlier-version": "There was no earlier versions of this file.", "label-empty-file": "Empty", "label-setting-files": "Setting files", "label-deleted-files": "Deleted files", "label-version-history": "Version history", "label-click-to-see-history": "Click on a deleted file to see its history.", "label-create-remote-vault": "Create remote vault", "msg-please-enter-password": "Please enter a password.", "msg-vault-name-cannot-be-empty": "Vault name cannot be empty.", "msg-successfully-created-vault": "Successfully create remote vault \"{{name}}\".", "label-remote-vault-explanation": "Remote vaults securely synchronize your vault between devices.", "option-vault-name": "Vault name", "option-vault-name-desc": "Helps you remember what this vault is for.", "option-vault-name-placeholder": "My awesome vault", "option-use-custom-encryption-password": "Customize end-to-end encryption password", "option-use-custom-encryption-password-desc": "If you turn this off, we will securely manage an encryption key for you.", "option-use-custom-encryption-password-desc-warning": "This option cannot be changed later.", "option-encryption-password": "Encryption password", "option-encryption-password-desc": "This password cannot be changed later.", "option-encryption-password-desc-warning": "If you forget this password, any remote data will remain unusable forever.", "option-encryption-password-desc-2": "This does not affect your local data.", "option-encryption-password-placeholder": "Your password", "label-enter-encryption-password": "Enter encryption password", "button-unlock-vault": "Unlock vault", "msg-verified-password": "Successfully verified your password.", "label-remote-vaults": "Your remote vaults", "label-vault-created-time": "Created {{time}}", "tooltip-delete-remote-vault": "Delete", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "Confirm delete vault", "label-confirm-delete-remote-vault-question": "Are you sure you want to delete this remote vault?", "label-confirm-delete-remote-vault-result": "All data on our server, including version history, will be deleted. Your local files will stay intact.", "label-confirm-delete-remote-vault-warning": "This action is permanent and irreversible.", "msg-remote-vault-deleted": "{{name}} has been deleted.", "button-connect-to-remote-vault": "Connect", "button-disconnect-from-remote-vault": "Disconnect", "label-not-remote-vaults": "You don't have any remote vaults.", "button-create-new-remote-vault": "Create new vault", "label-sync-log": "Sync log", "options-only-show-errors": "Errors only", "options-only-show-errors-desc": "Only show errors and hide other log items.", "button-copy-sync-log": "Copy sync log", "msg-successfully-copied-sync-log": "Successfully copied sync log.", "button-retry": "Retry", "button-purchase-subscription": "Purchase", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "Choose", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "Sync status", "option-sync-status-desc-paused": "Obsidian Sync is currently paused.", "option-sync-status-desc-running": "Obsidian Sync is currently running.", "option-device-name": "Device name", "option-device-name-desc": "This name will be displayed in the sync log. Leave empty to use the default name.", "button-resume": "Resume", "button-pause": "Pause", "option-view-deleted-files": "Deleted files", "option-view-deleted-files-desc": "View and restore deleted files.", "option-sync-log": "Sync activity", "option-sync-log-desc": "View recent sync activities for debugging.", "button-view": "View", "button-bulk-restore": "Bulk restore", "button-restore-selected-files": "Restore selected files", "msg-restoring": "Restoring...", "msg-restoring-complete": "Restore complete: {{succeeded}} succeeded and {{failed}} failed.", "option-over-size": "Vault size over limit", "option-over-size-desc": "Your vault is at {{size}} out of {{limit}}.", "msg-largest-files": "View largest files", "msg-largest-files-desc": "These are the remote files that are taking the most space. After deleting attachments, use the purge button to free up remote vault space.", "button-purge-remote": "Purge", "tooltip-purge-remote": "Permanently purge deleted attachments from remote vault to save space.", "msg-purge-complete": "Purge complete.", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "Selective sync", "option-excluded-folders": "Excluded folders", "option-excluded-folder-desc": "Prevent certain folders from being synced.", "option-currently-excluded-folders": " These folders currently excluded:", "button-manage-excluded-folders": "Manage", "option-sync-image": "Sync images", "option-sync-image-desc": "Sync image files with these extensions: {{extensions}}.", "option-sync-audio": "Sync audio", "option-sync-audio-desc": "Sync audio files with these extensions: {{extensions}}.", "option-sync-video": "Sync videos", "option-sync-video-desc": "Sync video files with these extensions: {{extensions}}.", "option-sync-pdf": "Sync PDFs", "option-sync-pdf-desc": "Sync PDF files.", "option-sync-unsupported": "Sync all other types", "option-sync-unsupported-desc": "Sync unsupported file types.", "option-vault-config-sync": "Vault configuration sync", "option-view-config-files": "Settings version history", "option-view-config-files-desc": "View and restore version history of setting files.", "option-sync-app": "Main settings", "option-sync-app-desc": "Enable to sync editor settings, files & links settings, custom hotkeys, etc.", "option-sync-appearance": "Appearance settings", "option-sync-appearance-desc": "Sync appearance settings like dark mode, active theme, and enabled snippets.", "option-sync-appearance-data": "Themes and snippets", "option-sync-appearance-data-desc": "Sync downloaded themes and snippets. Whether they are enabled depends on the previous setting.", "option-sync-hotkey": "Hotkeys", "option-sync-hotkey-desc": "Sync custom hotkeys.", "option-sync-core-plugin": "Active core plugin list", "option-sync-core-plugin-desc": "Sync which core plugins are enabled.", "option-sync-core-plugin-data": "Core plugin settings", "option-sync-core-plugin-data-desc": "Sync core plugin settings.", "option-sync-community-plugin": "Active community plugin list", "option-sync-community-plugin-desc": "Sync which community plugins are enabled.", "option-sync-community-plugin-data": "Installed community plugins", "option-sync-community-plugin-data-desc": "Sync installed community plugins (.js, .css, and manifest.json files) and their settings.", "label-sync-introduction": "Obsidian Sync is Obsidian's add-on sync service with end-to-end encryption and version history.", "label-account-required": "To start syncing, please log in or create a new Obsidian account.", "button-sign-up": "Sign up", "button-log-in": "Log in", "label-manage-excluded-folders": "Manage excluded folders", "label-number-of-folders-excluded": "{{folders}} are currently excluded from being synced.", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "Setup connection", "label-now-connected-to-vault": "You're now connected to \"{{name}}\".", "button-start-syncing": "Start syncing", "label-confirm-merge-vault": "Confirm Merge Vault", "msg-vault-has-notes": "Your local vault already contains some notes.", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "File recovery", "desc": "Let you restore recent snapshots to recover from accidental data loss. Snapshots are only saved for Markdown files.", "action-open": "Open saved snapshots", "option-interval": "Snapshot interval", "option-interval-description": "Minimal interval in minutes between two snapshots.", "option-keep": "History length", "option-keep-description": "Length in days snapshots is kept for.", "option-open-history": "Snapshots", "option-open-history-description": "View and restore saved snapshots.", "button-view-snapshots": "View", "option-clear": "Clear history", "option-clear-description": "Wipe all snapshots.", "button-clear-history": "Clear", "label-clear-warning": "Are you sure you want to delete all snapshots? Note that only snapshots will be removed. All files inside your vault will not be affected.", "msg-clear-complete": "Snapshots cleared.", "label-no-history-found": "No snapshots found.", "placeholder-choose-file": "Choose a file...", "label-select-file": "Please select a file on the left to view snapshots." }, "note-composer": { "name": "Note composer", "desc": "Merge, split, and refactor notes.", "option-confirm-file-merge": "Confirm file merge", "option-confirm-file-merge-description": "Prompt before merge two files.", "option-split-replacement-text": "Text after extraction", "option-split-replacement-text-description": "What to show in place of the selected text after extracting it.", "option-choice-split-replacement-text-link": "Link to new file", "option-choice-split-replacement-text-embed": "Embed new file", "option-choice-split-replacement-text-none": "None", "option-template-file": "Template file location", "option-template-file-description": "Template file to use when merging or extracting. Available variables: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Merge current file with another file...", "action-merge-file": "Merge entire file with...", "label-no-files": "No files found.", "instruction-navigate": "to navigate", "instruction-merge": "to merge", "instruction-create-new": "to create new", "instruction-merge-at-top": "to merge at top", "instruction-dismiss": "to dismiss", "prompt-select-file-to-merge": "Select file to merge into...", "label-merge-file": "Merge file", "label-confirm-file-merge": "Are you sure you want to merge \"{{file}}\" into \"{{destination}}\"? \"{{file}}\" will be deleted.", "button-merge": "Merge", "button-merge-do-not-ask-again": "Merge and don't ask again", "command-split-file": "Extract current selection...", "command-extract-heading": "Extract this heading...", "instruction-append": "to move to bottom", "instruction-prepend": "to move to top", "msg-fail-to-fetch-template": "Failed to fetch template file: \"{{template}}\" not found.", "msg-fail-to-find-heading": "Failed to find heading" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} word", "word-with-count_plural": "{{count}} words", "character-with-count": "{{count}} character", "character-with-count_plural": "{{count}} characters", "link-with-count": "{{count}} link", "link-with-count_plural": "{{count}} links", "file-with-count": "{{count}} file", "file-with-count_plural": "{{count}} file", "folder-with-count": "{{count}} folder", "folder-with-count_plural": "{{count}} folders", "backlink-with-count": "{{count}} backlink", "backlink-with-count_plural": "{{count}} backlinks", "site-with-count": "{{count}} site", "site-with-count_plural": "{{count}} sites", "plugin-with-count": "{{count}} plugin", "plugin-with-count_plural": "{{count}} plugins", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } }{ "setting": { "options": "تنظیمات", "plugin": "افزونه‌ها", "builtin-plugins": "افزونه‌های اصلی", "plugin-options": "تنظیماتِ افزونه‌ها", "folder-path-example-placeholder": "مثال: پوشه‌ی ۱ / پوشه‌ی ۲", "file-path-example-placeholder": "مثال: پوشه/نوشته", "msg-restart-required": "برای اِعمالِ این گزینه‌ها باید برنامه را باز-و-بسته کنید.", "editor": { "name": "ویرایشگر", "section-general": "عمومی", "section-behavior": "رفتار", "section-display": "نمایش", "option-spellcheck": "بررسیِ املا", "option-spellcheck-description": "روشن‌کردنِ بررسیِ املا که هم‌اکنون فقط با انگلیسیِ امریکایی کار می‌کند.", "spellcheck-languages": "زبان‌های بررسیِ املایی", "spellcheck-languages-description": "زبان‌هایی که می‌خواهید بررسیِ املایی شوند را برگزینید.", "spellcheck-languages-mac-description": "در مک‌اواس همان بررسیِ املاییِ سیستم‌عامل کار را انجام می‌دهد.", "spellcheck-dict": "فرهنگِ املایی", "spellcheck-dict-empty": "فرهنگِ املایی خالی است.", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "طولِ‌خطوطِ خوانا", "option-readable-line-description": "محدودسازیِ بیشینه‌ی طولِ خطوط. در این حالت، محتوای کمتری در صفحه جا می‌گیرد اما متن خواناتر می‌شوند.", "option-strict-line-break": "سخت‌گیری در نمایشِ شکستِ خطوط", "option-strict-line-break-description": "در حالتِ پیش‌نمایش، با توجه به مشخصاتِ مارک‌داون، شکستِ خطوط یا نقطه‌سرِخط نمایش داده نمی‌شود. اگر این گزینه را خاموش کنید، شکستِ خطوطِ تکی هم نشان داده می‌شود.", "option-show-frontmatter": "نمایشِ پیش‌درآمد", "option-show-frontmatter-description": "در حالتِ پیش‌نمایش، پیش‌درآمد را به‌صورتِ بلوکِ کد نشان بده. برای پنهان‌کردنِ پیش‌درآمد این گزینه را خاموش کنید.", "option-auto-pair-brackets": "جفت‌سازیِ خودکارِ کمانک‌ها", "option-auto-pair-brackets-description": "جفت‌سازیِ خودکارِ کمانک‌ها و نشانه‌های نقلِ‌قول.", "option-auto-pair-markdown": "جفت‌سازیِ خودکارِ نحوِ مارک‌داون", "option-auto-pair-markdown-description": "جفت‌سازیِ خودکارِ نشانه‌هایی مانندِ درشت‌نویس، کج‌نویس، هایلات، خط‌خورده و کد", "option-smart-indent-lists": "تورفتگیِ هوشمند در فهرست‌ها", "option-smart-indent-lists-description": "خودبه‌خود تورفتگی و نشانه‌های فهرستی را سر-و-سامان می‌دهد", "option-fold-heading": "جمع‌کردنِ سرفصل‌ها", "option-fold-heading-description": "جمع‌کردنِ همه‌ی محتوا زیرِ سرفصل", "option-fold-indent": "جمع‌کردنِ تورفتگی", "option-fold-indent-description": "جمع‌کردنِ بخشی از فرورفتگیِ یکسان مثلاً در فهرست‌ها", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Editing view", "option-default-new-tab-view-reading": "Reading view", "option-default-editing-mode": "حالتِ ویرایشِ پیش‌فرض", "option-default-editing-mode-description": "حالتِ پیش‌فرضي که برگِ جدید به شکل‌اش باز می‌شود.", "option-default-editing-mode-source": "حالتِ منبع", "option-default-editing-mode-live-preview": "پیش‌نمایشِ زنده", "option-show-line-number": "نمایشِ شماره‌ی خطوط", "option-show-line-number-description": "نمایشِ شماره‌ی خطوط در کناره", "option-indentation-guide": "Show indentation guides", "option-indentation-guide-description": "Show vertical relationship lines between bullet points for visual guidance.", "option-use-tabs": "استفاده از کلیدِ تب", "option-use-tabs-description": "ایجادِ تورفتگی با فشاردادنِ کلیدِ \"Tab\". برای استفاده از کلیدِ اسپیس' این گزینه را بخاموشید. ", "option-tab-size": "مقدارِ کلیدِ تب", "option-tab-size-description": "هر کلیدِ تب برابر با چند اسپیس باشد؟", "option-rtl": "راست-به-چپ", "option-rtl-description": "جهتِ نوشته‌ها را راست-به-چپ می‌کند.", "option-auto-convert-html": "تبدیلِ خودکارِ اچ‌تی‌ام‌ال", "option-auto-convert-html-description": "وقتي صفحاتِ وب کشید-و-انداخته یا جاگذاری می‌شوند، خودبه‌خود اچ‌تی‌ام‌ال تبدیل به مارک‌داون می‌شود. اگر می‌خواهید این تبدیل انجام نشود، از Ctrl/Cmd+Shift+V استفاده کنید.", "option-vim-key-bindings": "کلیدبندیِ ویم", "option-vim-key-bindings-description": "استفاده از کلیدبندیِ ویم در ویرایشگرِ منبع.", "option-vim-key-bindings-mobile": "On mobile devices, this setting is per-device and is not synchronized through the config file.", "option-emacsy-keys": "کلیدبندیِ ایمکس-مانندِ قدیمی برای مک‌اواس", "option-emacsy-keys-description": "می‌گذارد از کلیدهای جابه‌جاییِ ایمکس-مانند استفاده کنید که استانداردِ مک‌اواس هستند اما ممکن است با برخي عملیات‌های کلیدی تداخل پیدا کنند.", "label-confirm-enable-vim": "تاییدِ ورود به حالت ویم", "label-vim-warning": "حالتِ ویم برای ویرایشِ متونْ کارامد است اما چندان سرراست نیست. اگر با ویم آشنا نباشید و این گزینه را فعال کنید خیال می‌کنید اوبسیدین از کار افتاده.", "label-vim-test": "برای این‌که معلوم شود واقعاً از ویم سر در می‌آورید یا نه، فرمانِ «خروج بدونِ ذخیره‌کردن» در ویم را' در زیر وارد فرمایید:", "label-vim-your-answer": "پاسخِ شما", "placeholder-enter-command": "فرمان را وارد کنید...", "button-confirm-enable-vim": "بگذار ویم را فعال کنم", "msg-vim-mode-enabled": "فرمان درست است، اکنون حالتِ ویم فعال است.", "msg-vim-mode-not-enabled": "فرمان نادرست است، حالتِ ویم غیرفعال می‌ماند تا از شما حفاظت شود.", "msg-vim-mode-please-enter-command": "برای فعالیدنِ ویم' فرمان را وارد فرمایید", "option-legacy-editor": "استفاده از ویرایشگرِ قدیمی", "option-legacy-editor-description2": "The legacy editor will be deprecated soon. It is currently no longer maintained, and as such, bugs will no longer be addressed.", "label-legacy-deprecation": "New editor is here", "label-legacy-deprecation-1": "Obsidian now has a brand new editor that's more robust and accessible.", "label-legacy-deprecation-2": "It seems you're still using the legacy editor, and we think you'll enjoy the new editor.", "label-legacy-deprecation-choice": "Which mode would you like to use?", "label-live-preview-description": "A more modern, what-you-see-is-what-you-get experience.", "label-source-mode-description": "See raw Markdown with syntax highlighting.", "button-start-new-editor": "Start new editor" }, "file": { "name": "فایل‌ها و پیوندها", "option-confirm-file-deletion": "تاییدِ پاکیدنِ فایل", "option-confirm-file-deletion-description": "هنگامِ پاکیدنِ فایل‌ها پیامي نشان داده شود یا نه؟", "option-delete-destination": "فایل‌های پاکیده", "option-delete-destination-description": "پس از پاکیدنِ فایل‌ها چه بلایي سرشان بیاید؟", "option-choice-system-trash": "ریختن در زباله‌دانِ دستگاه", "option-choice-vault-trash": "ریختن در زباله‌دانِ اوبسیدین (.trash پوشه‌ی)", "option-choice-permanent-delete": "پاکیدن برای همیشه", "option-always-update-links": "همیشه پیوندهای درونی به‌روز شوند", "option-always-update-links-description": "تعیینِ این‌که پس از نام‌گذاریِ فایل‌ها' پیوندها خودبه‌خود به‌روز شوند یا پیغامِ تأیید نشان داده شود.", "option-new-note-location": "جای پیش‌فرضِ نوشته‌های جدید", "option-new-note-location-description": "جای ذخیره‌ی نوشته‌های جدید. یادتان باشد که افزونه‌ها می‌توانند این تنظیم را پامال کنند.", "option-choice-vault-root": "پوشه‌ی اصلیِ خزانه", "option-choice-current-folder": "همان پوشه‌اي که فایل در آن است", "option-choice-specified-folder": "در پوشه‌اي که پایین تعیین می‌کنم", "option-new-file-folder-path": "پوشه‌ی نوشته‌های جدید", "option-new-file-folder-path-description": "نوشته‌های جدید در این پوشه ساخته می‌شوند. افزونه‌ها می‌توانند این تنظیم را پامال کنند.", "option-use-wiki-links": "استفاده از [[ویکی‌پیوند]]", "option-use-wiki-links-description": "ساختِ خودکارِ ویکی‌پیوند برای [[پیوندها]] و ![[تصاویر]] به جای پیوندها و تصاویرِ مارک‌داونی. با خاموشیدنِ این گزینه' پیوندهای مارک‌داونی ساخته می‌شود.", "option-show-unsupported-files": "شناساییِ همه‌جور فرمتِ فایل", "option-show-unsupported-files-description": "نمایشِ همه‌جور قالبِ فایل، حتا فایل‌هایي که خودِ اوبسیدیان هم نمی‌تواند اجرا کند، در نتیجه می‌توانید چنین فایل‌هایي را در مرورگرِ فایل و پرشِ سریع ببینید و به آن‌ها پیوند بزنید.", "option-link-autocompleted-format": "قالب‌بندیِ پیوندِ جدید", "option-link-autocompleted-format-description": "وقتي پیوندهای درونی خودبه‌خود ساخته می‌شوند' چه پیوندي درج شود؟", "option-choice-shortest-linktext": "کوتاه‌ترین مسیرِ ممکن", "option-choice-relative-path": "مسیرِ وابسته به فایل", "option-choice-absolute-path": "مسیرِ مستقل در خزانه", "option-new-attachment-location": "جای پیش‌فرضِ پیوست‌های جدید", "option-new-attachment-location-description": "پیوست‌های تازه‌افزوده کجا گذاشته شوند؟", "option-choice-subdirectory": "در زیرپوشه‌اي درونِ پوشه‌ی کنونی", "option-attachment-folder-path": "مسیرِ پوشه‌ی پیوست‌ها", "option-attachment-folder-path-description": "پیوست‌های نوساخته اینجا ظاهر می‌شوند؛ یعنی تصاویري که با کشیدن و انداختن یا جاگذاری ساخته شده‌اند و همچنین صوت‌های ضبط‌شده.", "option-attachment-subfolder-path": "نامِ زیرپوشه", "option-attachment-subfolder-path-description": "اگر فایل درونِ \"vault/folder\" است و نامِ زیرپوشه را \"attachments\" گذاشته‌اید، پیوست‌ها در \"vault/folder/attachments\" ذخیره خواهند شد.", "option-attachment-subfolder-path-placeholder": "پیوست‌ها", "option-excluded-files": "Excluded files", "option-excluded-files-desc": "Excluded files will be hidden in Search, Graph View, and Unlinked Mentions, less noticeable in Quick Switcher and link suggestions.", "label-no-excluded-filters-applied": "No excluded filter is applied right now. Add one below.", "label-excluded-filters-applied": "Files matching the following filters are currently excluded:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Enter path or \"/regex/\"..." }, "appearance": { "name": "چهره", "option-base-theme": "پوسته‌ی پایه", "option-base-theme-description": "انتخابِ شِمای رنگیِ پیش‌فرضِ اوبسیدین", "option-accent-color": "Accent color", "option-accent-color-description": "Choose the accent color used throughout the app.", "dark-theme": "تاریک", "light-theme": "روشن", "system-theme": "Adapt to system", "option-font": "Font", "option-advanced": "Advanced", "option-interface-font": "Interface font", "option-interface-font-description": "Set base font for all of Obsidian.", "option-text-font": "Text font", "option-text-font-description": "Set font for editing and reading views.", "option-monospace-font": "Monospace font", "option-monospace-font-description": "Set font for places like code blocks and frontmatter.", "label-single-font-currently-in-effect": " Currently applied font: ", "label-multiple-fonts-currently-in-effect": " The following fonts are currently applied:", "option-font-placeholder": "Enter font name...", "label-no-custom-font-set": "No custom font is applied right now. Add one below.", "label-font-applied": "The first font from this list that is available on your system will be applied.", "msg-font-not-found": "This font is not detected on your system.", "msg-font-found": "This font is detected on your system.", "label-font-name": "Font name", "option-community-themes": "گشودنِ پوسته‌های انجمن", "option-community-themes-description": "پیش‌نمایش و استفاده از پوسته‌های خفني که انجمن ساخته.", "button-browse-community-themes": "مرور", "option-font-size": "اندازه‌ی فونت", "option-font-size-description": "اندازه‌ی فونت به پیکسل که بر ویرایشگر و پیش‌نمایش مؤثر است.", "option-font-size-action": "تغییرِ سریعِ اندازه‌ی فونت", "option-font-size-action-description": "تنظیمِ اندازه‌ی فونت با نگه‌داشتنِ کنترل و اسکرولِ موس یا حرکتِ نیشگون‌مانند رویِ تِرَک‌پد ", "option-themes": "پوسته‌ها", "option-manage-themes-description": "مدیریتِ پوسته‌های نصبیده و مرورِ پوسته‌های انجمن.", "option-theme-button-manage": "مدیریت", "option-choice-none": "هیچ‌کدام", "option-native-menus": "Native menus", "option-native-menus-desc": "Menus throughout the app will match the operating system. They will not be affected by your theme.", "button-reload-themes": "بازگیریِ پوسته‌ها", "msg-reloaded-themes": "پوسته‌های دلخواهِ سی‌اس‌اس بازگذاری شدند.", "button-open-themes-folder": "گشودنِ پوشه‌ی پوسته‌ها'", "option-css-snippets": "تکه‌کدهای سی‌اس‌اس", "label-no-css-snippets-found": "در پوشه‌ی تکه‌کدها، تکه‌کدِ سی‌اس‌اسي پیدا نشد.", "no-snippet-description": "تکه‌کدهای سی‌اس‌اس در مسیرِ \"{{path}}\" ذخیره شده‌اند.", "button-reload-snippets": "بازگیریِ تکه‌کدها", "button-open-snippets-folder": "گشودنِ پوشه‌ی تکه‌کدها", "msg-reloaded-snippets": "تکه‌کدهای سی‌اس‌اس بازگیری شدند.", "option-toggle-snippet-description": "اِعمالِ تکه‌کدهای سی‌اس‌اس در \"{{path}}\".", "label-installed-themes": "پوسته‌های نصب‌شده", "label-screenshot-unavailable": "تصویري نیست", "label-default-theme": "پیش‌فرض", "tooltip-click-to-enlarge": "برای بزرگ‌نمایی کلیک کنید", "button-update": "به‌روزرساندن", "label-currently-selected": "انتخاب‌شده", "option-frame-style": "Window frame style", "option-frame-description": "Determines the styling of the title bar of Obsidian windows. Requires a full restart to take effect.", "option-frame-hidden": "Hidden (default)", "option-frame-obsidian": "Obsidian frame", "option-frame-native": "Native frame", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Show tab title bar", "option-show-view-header-desc": "Display the header at the top of every tab.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "button-check-for-updates": "Check for updates", "button-view-updates": "View updates", "button-update-all-themes": "Update all", "label-current-themes": "Current community themes", "label-currently-installed": "You currently have {{count}} theme installed.", "label-currently-installed_plural": "You currently have {{count}} themes installed." }, "hotkeys": { "name": "میانبرها", "prompt-filter": "صافیدن...", "tooltip-delete-hotkey": "پاکیدنِ میانبر", "label-waiting-for-hotkey-press": "میانبرِ دلخواه را وارد کنید...", "tooltip-restore-default": "واگردانی به حالِ اول", "tooltip-customize-command": "شخصی‌سازیِ این فرمان", "tooltip-hotkey-single-conflict": "میانبر واردشده با \"{{command}}\" تداخل دارد", "tooltip-hotkey-multiple-conflicts": "این میانبر با {{count}} فرمانِ دیگر تداخل دارد", "label-blank-hotkey": "خالی" }, "about": { "name": "درباره", "label-commercial-license": "لایسنسِ تجاری", "label-license-key": "کلیدِ لایسنس", "license-key-placeholder": "کلیدِ لایسنسِ شما...", "label-activate-license": "فعالیدنِ لایسنس", "button-activate": "فعالیدن", "label-unknown-version": "نامعلوم", "label-current-version": "نسخه‌ی کنونی: ", "label-install-version": "(نسخه‌ی نصب‌گر: {{version}})", "label-up-to-date": "برنامه به‌روز است!", "label-read-changelog": "خواندنِ تغییرات‌نامه.", "label-manual-update-required": "To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.", "label-download": "دریافت", "label-new-version-ready": "نسخه‌ی جدیدي آماده‌ی نصب است. ", "label-relaunch-to-update": "برای به‌روزرسانی برنامه را باز-و-بسته کنید.", "label-disabled-updates": "به‌روزرسانی‌ها غیرفعال اند.", "label-checking-for-updates": "به‌روزرسانی‌ها دارند بررسی می‌شوند...", "button-relaunch": "باز-و-بستنِ برنامه", "button-check-for-updates": "بررسی برای به‌روزرسانی", "option-auto-update": "به‌روزرسانیِ خودکار", "option-auto-update-description": "با خاموشیدنِ این گزینه، برنامه دیگر وجود به‌روزرسانی را بررسی نمی‌کند..", "option-get-help": "Get help", "option-get-help-description": "Get help on using Obsidian.", "button-open": "گشودن", "option-language": "زبان", "option-language-description": "تغییرِ زبانِ نمایشی", "option-insider-build": "دریافت بیلدهای اندرونی", "option-insider-build-description": "دریافتِ خودکارِ بیلدهای اندرونی برای آزمایشِ قابلیت‌های جدید. توجه کنید که این بیلدها بسیار نوپا بوده و ممکن است کمتر پایدار باشند", "option-advanced": "پیشرفته", "option-hw-acceleration": "شتاب‌دهیِ سخت‌افزاری", "option-hw-acceleration-description": "این گزینه شتاب‌دهیِ سخت‌افزاری را فعال می‌کند؛ یعنی با استفاده از کارت گرافیک، اوبسیدین را روان‌تر می‌کند.", "option-hw-acceleration-warning": "اگر این گزینه را خاموش کنید، کاراییِ برنامه خیلي افت می‌کند.", "option-config-location": "پایمالیِ پوشه‌ی پیکربندی", "option-config-location-description": "استفاده از پوشه‌اي دیگر به‌جای پوشه‌ی پیکربندیِ پیش‌فرض. نام این پوشه‌ی جدید باید با نقطه آغاز شود.", "option-config-location-warning": "نامِ پوشه‌ی پیکربندی باید معتبر بوده و با نقطه آغاز شود.", "label-license": "لایسنس", "label-your-commercial-license-key": "کلیدِ لایسنسِ تجاریِ شما \"{{key}}\" است.", "label-commercial-license-info": "ثبت‌شده به نام \"{{company}}\" برای {{seats}} کاربر. معتبر تا تاریخ {{expiry}}.", "label-validating-commercial-license": "دارد ارزیابی می‌شود...", "label-invalid-commercial-license": "لایسنس: ", "button-remove-commercial-license": "پاکیدن", "option-catalyst": "Catalyst license", "option-catalyst-desc": "You currently have the {{tier}} Catalyst license. Thanks for your support!", "option-catalyst-desc-no-license": "You don't have a Catalyst license right now. Catalyst license is a one-time donation to support Obsidian development.", "label-app": "App" }, "account": { "name": "حساب", "option-your-account": "Your account", "option-your-account-desc": "You're currently signed in {{name}} ({{email}}).", "option-your-account-desc-no-login": "You're not logged in right now. An account is only needed for Obsidian Sync, Obsidian Publish, and Catalyst insider builds.", "button-manage-settings": "Manage settings", "label-insider": "اندرونی", "label-supporter": "حامی", "label-vip": "عالی‌رتبه", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Commercial license", "option-commercial-license-desc": "If you use Obsidian for commercial purpose, you may need to get a commercial license.", "button-purchase": "Purchase", "button-log-out": "خروج", "label-log-in": "ورود", "label-sign-up": "Sign up", "label-email": "ایمیل", "placeholder-email": "ایمیلِ شما...", "label-password": "گذرواژه", "placeholder-password": "گذرواژه‌ی شما...", "button-login": "ورود", "message-empty-email": "ایمیل نباید خالی باشد.", "message-invalid-email": "ایمیل نادرست است.", "message-empty-password": "گذرواژه نباید خالی باشد.", "message-login-failed": "ورود به مشکل خورد، ایمیل و گذرواژه را وارِسی کنید.", "label-no-account": "حسابي ندارید؟ ", "link-sign-up-now": "اکنون نام بنویسید." }, "core-plugin": { "plugin-list": "فهرستِ افزونه‌ها", "option-search-plugin": "جستنِ افزونه‌های اصلی", "option-search-plugin-description": "صافیدنِ افزونه‌ها براساسِ نام یا توضیحات.", "placeholder-search-plugin": "جستنِ افزونه‌ها..." }, "third-party-plugin": { "name": "افزونه‌های شخصِ ثالث", "option-restricted-mode": "Restricted mode", "option-restricted-mode-description": "Restricted mode is off. Turn on to disable community plugins.", "button-turn-on": "Turn on", "option-browse-community-plugins": "افزونه‌های انجمن", "option-browse-community-plugins-description": "مرور و نصبِ افزونه‌های شخصِ ثالثي که انجمنِ خفن‌مان ساخته.", "button-browse": "مرور", "label-exit-restricted-mode": "Exit Restricted Mode", "label-exit-restricted-mode-description-1": "Community plugins, like any other software you install, could potentially cause data integrity and security issues.", "label-exit-restricted-mode-description-2": "Plugin security is important to us. Here's what we do:", "label-exit-restricted-mode-description-3": "Despite our efforts, there is still a small chance that a community plugin might misbehave.", "label-code-review": "Initial code review", "label-code-review-desc": "Plugins undergo an initial code review by our team before they appear in the store.", "label-open-source": "Open source", "label-open-source-desc": "Most plugins are open source on GitHub, so you can inspect the code yourself.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We have a large community of developers who watch out for each other.", "label-report-mechanism": "Report mechanism", "label-report-mechanism-desc": "We follow up and remove faulty plugins upon user report.", "label-exit-restricted-mode-disable-confirmation": "Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.", "label-learn-more": "Learn more about plugin security", "button-turn-on-community-plugins": "Turn on community plugins", "label-trust-author": "Do you trust the author of this vault?", "label-trust-author-description-1": "You're opening this vault for the first time, and it comes with some plugins.", "label-trust-author-description-2": "If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.", "label-trust-author-description-3": "If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.", "button-enable-plugins": "Trust author and enable plugins", "button-dont-trust-author": "Browse vault in Restricted Mode", "placeholder-community-plugins": "جستنِ افزونه‌های انجمن...", "msg-failed-load-plugins": "بارگیریِ افزونه‌های انجمن به مشکل خورد.", "label-installed": "نصب‌شده", "button-install": "نصب", "button-enable": "فعالیدن", "button-disable": "غیرفعالیدن", "button-copy-share-link": "رونوشتِ پیوندِ همرسانی", "button-donate": "Donate", "label-no-results-found": "نتیجه‌اي پیدا نشد!", "msg-failed-to-load-manifest": "بارگیریِ مانیفستِ افزونه به مشکل خورد.", "label-version": "نسخه: {{version}}", "label-currently-installed-version": " (نسخه‌ی نصبیده‌ی کنونی: {{version}})", "label-by-author": "کاري از ", "label-repository": "مخزن: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "این افزونه دستگاه‌تان را پشتیبانی نمی‌کند.", "button-update": "به‌روزرساندن", "label-no-readme": "این افزونه فایلِ مرابخوان ارائه نکرده.", "msg-installing-plugin": "افزونه‌ی \"{{name}}\" دارد نصب می‌شود...", "msg-failed-to-install-plugin": "نصبِ افزونه‌ی \"{{name}}\" به مشکل خورد.", "msg-successfully-installed-plugin": "نصب افزونه‌ی \"{{name}}\" موفق بود.", "label-installed-plugins": "افزونه‌های نصبیده", "button-reload-plugins": "بازگیریِ افزونه‌ها", "msg-reloaded-third-party-plugins": "افزونه‌های شخصِ ثالث بازگیری شدند.", "label-uninstall": "پاکیدن", "label-uninstall-plugin": "پاکیدنِ افزونه", "label-uninstall-plugin-confirmation": "آیا از پاکیدنِ افزونه مطمئنید؟ با این کار پوشه‌ی افزونه هم پاک می‌شود.", "button-open-plugins-folder": "گشودنِ پوشه‌ی افزونه‌ها", "button-check-for-updates": "بررسیِ به‌روزرسانی‌ها", "button-update-all-plugins": "به‌روزرساندنِ همه", "label-current-plugins": "افزونه‌های کنونی", "label-currently-installed": "هم‌اکنون {{count}} افزونه نصب است.", "label-currently-installed_plural": "هم‌اکنون {{count}} افزونه نصب است.", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Show a message with how long each plugin took to initialize when starting the app.", "msg-no-updates-found": "به‌روزرسانیِ افزونه‌اي پیدا نشد.", "msg-updates-found": "{{count}} افزونه برای به‌روزرساندن پیدا شد", "msg-updates-found_plural": "{{count}} افزونه برای به‌روزرساندن پیدا شد", "msg-update-plugin": "به‌روزرساندن به نسخه {{version}}", "option-search-installed-plugin": "جستنِ افزونه‌های نصبیده", "option-search-installed-plugin-description": "صافیدنِ افزونه‌ها براساسِ نام یا توضیحات.", "placeholder-search-installed-plugin": "جستنِ افزونه‌های نصبیده...", "show-installed-only": "Show installed only", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "{{pluginCount}}افزونه را نمایش می‌دهد", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "نوارابزارِ گوشی", "option-configure-quick-action": "پیکربندیِ کارهای سریعِ گوشی", "option-configure-quick-action-description": "پیکربندیِ فرماني که هنگامِ لمس از بالا به پایین اجرا می‌شود. فرمانِ کنونی \"{{command}}\" است.", "button-configure": "پیکربندی", "placeholder-select-quick-action": "انتخابِ کارِ سریع...", "manage-toolbar-options": "مدیریتِ گزینه‌های نوارابزار", "option-internal-link": "افزودنِ پیوندِ درونی", "option-internal-embed": "افزودنِ جاساز", "option-tag": "افزودنِ برچسب", "option-heading": "سرفصل", "option-strikethrough": "کج‌نویس", "option-highlight": "هایلات", "option-code": "کُد", "option-blockquote": "نقل‌ِقول", "option-markdown-link": "افزودنِ پیوندِ مارک‌داونی", "option-bullet-list": "فهرستِ گلوله‌ای", "option-numbered-list": "فهرستِ شماره‌دار", "option-indent-list": "توبردنِ مورد", "option-unindent-list": "بیرون‌بردنِ مورد", "option-undo": "واگرد", "option-redo": "ازنو", "option-move-caret-up": "بالابردنِ نشانگر", "option-move-caret-down": "پایین‌آوردنِ نشانگر", "option-move-caret-left": "چپ‌بردنِ نشانگر", "option-move-caret-right": "راست‌بردنِ نشانگر", "option-first-line": "رفتن به خطِ اول", "option-last-line": "رفتن به خطِ آخر", "option-toggle-keyboard": "صفحه‌کلید", "option-configure-toolbar": "پیکربندیِ نوارابزار گوشی", "option-added-options": "گزینه‌های افزوده", "option-more-toolbar-options": "گزینه‌های بیش‌تر", "option-attach": "درجِ پیوست", "option-add-command": "افزودنِ فرمانِ سراسری", "option-add-command-description": "فرمانِ دلخواهي را به نوارابزار اضافه کنید." } }, "editor": { "search": { "placeholder-find": "یافتن", "placeholder-replace": "جایگزینی", "label-previous": "قبلي", "label-next": "بعدي", "label-all": "همه", "label-exit-search": "خروج از جست‌وجو", "label-replace": "جایگزینی", "label-replace-all": "جایگزین‌کردنِ همه" }, "link-suggestion": { "label-type-hash": "# تایپ کنید", "label-link-heading": "برای پیوندِ سرفصل", "label-type-block": "تایپ کنید ^", "label-link-block": "برای پیوندِ بلوک", "label-type-pipe": "تایپ کنید |", "label-change-display-text": "برای تغییرِ متنِ نمایشی", "label-no-match-found": "نتیجه‌اي پیدا نشد" }, "spellcheck": { "no-suggestion": "پیشنهادي نیست...", "add-to-dictionary": "افزودن به واژه‌نامه" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "No heading", "label-heading-level": "Heading {{level}}" }, "print-modal": { "title": "خروجی به پی‌دی‌اف", "caption": "خروجی گرفتنِ \"{{filename}}\" به پی‌دی‌اف با تنظیماتِ زیر.", "setting-page-size": "اندازه‌ی برگه", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Include file name as title", "setting-landscape": "افقی", "setting-margin": "حاشیه", "setting-margin-default": "پیش‌فرض", "setting-margin-minimal": "کمینه", "setting-margin-none": "بی‌حاشیه", "setting-downscale-percent": "درصدِ کاهشِ مقیاس", "button-export-to-pdf": "خروجی به پی‌دی‌اف" }, "link-popover": { "tooltip-follow-link": "دنبالیدنِ پیوند", "tooltip-open-link": "گشودنِ پیوند", "tooltip-search-tag": "جستنِ برچسب" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "گشودن در برنامه‌ی پیش‌فرض", "empty-sidebar": "نوارِ کناری خالی‌ست، برگي را به این‌جا بکشید.", "sidebar-expand": "گستردن", "sidebar-collapse": "جمع‌کردن", "msg-fail-to-save-file": "ذخیره‌ی فایلِ \"{{filepath}}\" به مشکل خورد. {{message}}.", "no-file": "فایلي نیست", "msg-file-changed": "\"{{file}}\" از بیرون دستکاری شده است، تغییرات دارند خودبه‌خود ادغام می‌شوند.", "switch-vault": "گشودنِ خزانه‌اي دیگر", "help": "راهنما", "settings": "تنظیمات", "drag-to-rearrange": "کشیدن برای بازچینش", "msg-switched-to-read": "حالتِ نمای پیش‌فرض به نمای خواندن تغییر کرد.", "msg-switched-to-edit": "حالتِ نمای پیش‌فرض به ویرایشگر تغییر کرد.", "msg-upgrade-installer": "برای استفاده از این قابلیت، برنامه را با جدیدترین نصب‌گر که در سایت‌مان هست، باز نصب فرمایید.", "tooltip-restore-default-settings": "بازنشانی به تنظیماتِ پیش‌فرض", "label-copy": "رونوشت در حافظه", "copied_generic": "Copied to your clipboard", "copied": "{{item}} در حافظه رونوشت شد.", "url": "نشانی", "msg-open-file-through-uri": "فایلِ \"{{path}}\" گشوده شد.", "msg-file-not-found-through-uri": "فایلِ \"{{name}}\" پیدا نشد.", "delete-action-short-name": "پاکیدن", "msg-indexing": "اوبسیدین دارد خزانه را نمایه‌سازی می‌کند...\nاین عمل بایستی یک بار رخ دهد.\nممکن است تا پیش از پایانِ این کار، برخي قابلیت‌ها کار نکنند", "msg-indexing-complete": "نمایه‌سازی کامل شد.", "msg-sandbox-vault": "This is a sandbox vault.\nChanges you make in this vault will be lost.", "label-enter-to-create": "برای ساختن اینتر بزنید", "label-update-available": "به‌روزرسانی موجود است", "label-debug-info": "اطلاعاتِ اشکال‌زدایی", "button-learn-more": "اطلاعاتِ بیش‌تر", "button-not-now": "فعلاً نه", "button-add": "Add", "button-manage": "Manage", "label-new-tab": "New tab", "msg-tab-busy": "This tab is currently busy, please try again later", "empty-state": { "no-file-open": "فایلي باز نیست", "create-new-file": "ساختِ فایلِ جدید", "go-to-file": "رفتن به فایل", "see-recent-files": "دیدنِ فایل‌های اخیر", "close": "بستن", "unknown-pane-title": "افزونه دیگر فعال نیست", "unknown-pane-desc": "افزونه‌اي که این برگ را ساخته ({{type}}) ناموجود است" }, "menu": { "edit-view": "ویرایش (کنترل/⌘+کلیک برای ویرایش در برگِ جدید)", "read-view": "نمای کنونی: خواندن", "switch-to-edit-view": "کلیک برای ویرایش", "switch-to-read-view": "کلیک برای خواندن", "mod-click-open-new-tab": "{{key}}+Click to open in new tab", "find": "یافتن...", "replace": "جایگزینی...", "edit": "ویرایش", "preview": "پیش‌نمایش", "more-options": "گزینه‌های بیش‌تر", "close": "بستن", "close-others": "Close others", "close-right": "Close tabs to the right", "pin": "سنجاقیدن", "unpin": "Unpin", "unlink-tab": "Unlink tab", "link-tab": "Link with tab...", "toggle-source-mode": "Source mode", "toggle-reading-view": "Reading view", "delete-file": "پاکیدنِ فایل", "create-file": "Create this file", "open-link": "Open link", "open-in-new-tab": "Open in new tab", "open-to-the-right": "Open to the right", "copy-url": "رونوشتِ نشانی", "close-current-tab": "Close current tab", "copy": "رونوشت", "cut": "برش", "paste": "جاگذاری", "paste-as-plain-text": "جاگذاری به‌صورتِ متنِ ساده", "select-all": "انتخابِ همه", "rename-heading": "نام‌گذاریِ این سرفصل...", "rename-blockid": "Rename this block ID...", "open-in-new-window": "Open in new window", "move-to-new-window": "Move to new window", "open-in-browser": "Open in browser", "stack-tabs": "Stack tabs", "unstack-tabs": "Unstack tabs" }, "tooltip": { "click-to-expand": "کلیک برای گسترش", "click-to-collapse": "کلیک برای جمع‌کردن", "alias": "نامِ مستعار", "not-created-yet": "هنوز ساخته نشده، برای ساختن انتخاب کنید" }, "start-screen": { "label-version": "نسخه", "option-open-folder-as-vault": "گشودنِ پوشه به‌عنوانِ خزانه", "option-open-folder-as-vault-description": "انتخابِ پوشه‌اي موجود که فایل‌های مارک‌داون دارد.", "option-create-vault": "ساختِ خزانه‌ی جدید", "option-create-vault-description": "ساختِ خزانه‌ی اوبسیدین تحتِ یک پوشه", "option-connect-obsidian-sync": "Open vault from Obsidian Sync", "option-connect-obsidian-sync-description": "Set up a synced vault with existing remote vault.", "option-new-vault-name": "نامِ خزانه", "option-new-vault-name-description": "برای خزانه‌ی خَفَنت نامي انتخاب کن...", "option-new-vault-location": "جایگاه", "option-new-vault-location-description": "انتخابِ جایي برای گذاشتنِ خزانه", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Reveal vault in system explorer", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "Rename vault...", "msg-error-rename-exists": "There is already a vault with this name.", "msg-error-nested": "Cannot move vault into a subfolder of itself.", "msg-error-rename-open": "Can't rename a currently open vault.", "msg-rename-failed": "Failed to rename vault.", "msg-rename-success": "Successfully renamed vault.", "option-move-vault": "Move vault...", "msg-move-select-dest": "Select destination folder", "msg-error-move-exists": "There is already a vault at the destination.", "msg-error-move-open": "Can't move a currently open vault.", "msg-move-failed": "Failed to move vault.", "msg-move-success": "Successfully moved vault.", "option-remove": "Remove from list", "button-quick-start": "Quick start", "button-open": "گشودن", "button-browse": "مرور", "button-connect": "Connect", "button-create-vault": "ساختن", "button-back": "بازگشت", "msg-empty-vault-name": "خزانه نمی‌تواند بی‌نام باشد.", "msg-invalid-folder": "پوشه‌اي معتبر انتخاب فرمایید.", "msg-failed-to-create-vault": "ساختِ خزانه به مشکل خورد.", "msg-failed-to-create-vault-at-location": "در جای داده‌شده نمی‌توان خزانه‌ی جدیدي ساخت. مجوزها و جایگاه را وارِسی کنید.", "msg-error-failed-to-open-vault": "گشودن به مشکل خورد.", "msg-error-remove-current-open-vault": "نمی‌شود خزانه‌اي که اکنون باز است را پاکید.", "option-get-help": "Get Help", "option-user-email": "Email", "placeholder-your-email": "Your email...", "option-user-password": "Password", "placeholder-your-password": "Your password...", "button-sign-in": "Sign in", "button-setup": "Setup", "option-connect-vault-desc": "Create a synced vault on this device.", "tooltip-own-vault": "This is a remote vault owned by you.", "tooltip-shared-vault": "This is a remote vault shared with you." }, "drag-and-drop": { "insert-link-here": "پیوند همین‌جا درج شود", "insert-links-here": "پیوندها همین‌جا درج شوند", "move-into-folder": "ریختن در \"{{folder}}\"", "star-this-file": "ستاره‌کردنِ این فایل", "star-these-files": "ستاره‌کردنِ این فایل‌ها", "open-in-this-tab": "Open in this tab", "open-as-tab": "Open as new tab" }, "window": { "maximize": "بزرگیدنِ پنجره", "minimize": "پنهان‌کردنِ پنجره", "restore-down": "کوچکیدنِ پنجره", "close-window": "بستنِ پنجره", "go-back": "عقب‌گرد", "go-forward": "پیش‌رفت" }, "start-up": { "loading-obsidian": "بارگیریِ اوبسیدین...", "obsidian-load-error": "هنگامِ بارگیریِ اوبسیدین خطایي رخ داد.", "button-reload-app": "باز-و-بستنِ برنامه", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "گشودنِ خزانه‌اي دیگر", "loading-components": "بارگیریِ سازه‌ها...", "loading-plugins": "بارگیریِ افزونه‌ها...", "loading-vault": "بارگیریِ خزانه...", "msg-failed-to-load-vault": "بارگیریِ خزانه به مشکل خورد: ", "loading-cache": "بارگیریِ حافظه‌ی پنهان...", "loading-workspace": "بارگیریِ فضای کاری..." }, "mobile": { "action-import": "واردکردن به خزانه", "action-choose-file-to-insert": "فایلي برای درج انتخاب کنید", "action-insert-text-into-file": "درجِ متن درونِ {{filename}}", "action-insert-link-into-file": "درجِ پیوند درونِ {{filename}}", "msg-importing": "دارد وارد می‌شود...", "msg-import-success": "واردکردن موفق بود", "msg-failed-to-import-file": "واردکردنِ فایل به مشکل خورد {{filename}}", "msg-back-again-to-exit": "Press back again to exit." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "ذخیره‌ی فایلِ کنونی", "follow-cursor-link": "دنبالیدنِ پیوندِ زیرِ نشانگر", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "سنجاق‌بودن", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "عقب‌گرد", "navigate-forward": "پیش‌رفت", "use-dark-mode": "حالتِ تاریک", "use-light-mode": "حالتِ روشن", "change-theme": "Change theme", "search-current-file": "جست‌وجو در فایلِ کنونی", "search-replace-current-file": "جست‌وجو و جایگزینی در فایلِ کنونی", "open-settings": "گشودنِ تنظیمات", "open-help": "گشودنِ راهنما", "toggle-edit": "نمای خواندن/ویرایش", "toggle-source-mode": "نمای حالتِ پیش‌نمایشِ زنده/منبع", "delete-current-file": "پاکیدنِ فایلِ کنونی", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "نمایشِ نوارِ کناریِ چپ", "toggle-right-sidebar": "نمایشِ نوارِ کناریِ راست", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "تمرکز بر ویرایشگر", "toggle-fold": "تغییرِ حالتِ جمع‌کردن در این خط", "fold-all": "جمع‌کردنِ همه‌ی سرفصل‌ها و فهرست‌ها", "unfold-all": "گستردنِ همه‌ی سرفصل‌ها و فهرست‌ها", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "بالابردنِ این خط", "swap-line-down": "پایین‌آوردنِ این خط", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "درشت‌نویسی", "toggle-italics": "کج‌نویسی", "toggle-highlight": "شبرنگ‌بودن", "toggle-comments": "کامنت‌بودن", "insert-link": "درجِ پیوند", "toggle-spellcheck": "بررسیِ املا", "delete-paragraph": "پاکیدنِ بند", "toggle-checklist": "بازبینه‌سازی", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "ویرایشِ عنوانِ فایل", "copy-path": "رونوشتِ مسیرِ فعال", "copy-url": "رونوشتِ نشانیِ اوبسیدین", "export-pdf": "خروجیِ پی‌دی‌اف", "reload": "باز-و-بستن بدونِ ذخیره", "undo-close-tab": "Undo close tab", "context-menu": "نمایشِ منویِ محتوایی زیرِ نشانگرِ موس", "show-debug-info": "نمایشِ اطلاعاتِ اشکال‌زدایی", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "تغییرِ حالتِ ویرایش/پیش‌نمایش", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "This will affect {{links}} in {{files}}.", "msg-updated-links": "Updated {{links}} in {{files}}.", "label-update-links": "به‌روزرسانیِ پیوندها", "label-confirm-update-link-to-file": "آیا می‌خواهید پیوندهای درونی که به این فایل پیوندشده‌اند را به‌روز کنید؟", "button-always-update": "همیشه به‌روز شود", "button-just-once": "فقط یک‌بار", "button-do-not-update": "به‌روز نشود", "label-confirm-deletion": "آیا مطمئن‌اید می‌خواهید \"{{filename}}\" را حذف کنید؟", "label-move-to-system-trash": "این فایل به زباله‌دانِ دستگاه‌تان ریخته می‌شود.", "label-move-to-vault-trash": "این فایل به زباله‌دانِ اوبسیدین منتقل می‌شود که در پوشه‌ی \".trash\" جای دارد و آن هم' خود در پوشه‌ی خزانه پنهان است.", "label-permanent-delete": "این فایل برای همیشه پاکیده خواهد شد.", "label-non-empty-folder": "این پوشه خالی نیست.", "label-delete-folder-warning": "اگر ادامه دهید، همه‌ی فایل‌های درونِ این پوشه پاکیده خواهند شد.", "label-delete-folder": "پاکیدنِ پوشه", "button-delete": "پاکیدن", "button-delete-do-not-ask-again": "بپاک و دیگر نپرس", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "هم‌اکنون {{links}} به این نوشته اشاره‌دارند.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "پاکیدنِ فایل", "button-manage": "Manage", "button-cancel": "لغو", "button-done": "انجام", "button-save": "Save", "button-stop": "Stop", "button-continue": "ادامه", "preparing-pdf": "درحالِ آماده‌سازیِ پی‌دی‌اف...", "label-rename-file": "نام‌گذاریِ فایل", "label-new-name": "نامِ جدید", "msg-rename-success": "نام‌گذاری موفق بود", "label-rename-heading": "نام‌گذاریِ سرفصل", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "افزونه‌ها", "file-explorer": { "name": "مرورگرِ فایل", "desc": "دیدنِ همه‌ی فایل‌های خزانه.", "action-open": "گشودنِ مرورگرِ فایل", "action-show": "نمایشِ مرورگرِ فایل", "action-create-note": "ساختِ نوشته‌ی جدید", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "نوشته‌ی جدید", "action-new-folder": "پوشه‌ی جدید", "action-change-sort": "تغییرِ ترتیبِ چینش", "action-reveal-file": "نشان‌دادنِ فایل در مرورگرِ فایل", "action-reveal-active-file": "نشان‌دادنِ فایلِ فعال در مرورگرِ فایل", "command-move-file": "ریختنِ فایل در پوشه‌اي دیگر", "action-move-file": "ریختنِ فایل به...", "action-move-folder": "ریختنِ پوشه در...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "نامِ پوشه‌اي را تایپ کنید...", "label-no-folders": "پوشه‌اي پیدا نشد.", "instruction-navigate": "برای جابه‌جایی", "instruction-move": "برای ریختن", "instruction-dismiss": "برای خروج", "label-sort-a-to-z": "چینش براساسِ نامِ فایل (ترتیبِ الفبایی)", "label-sort-z-to-a": "چینش براساسِ نامِ فایل (عکسِ ترتیبِ الفبایی)", "label-sort-new-to-old": "چینش براساسِ زمانِ ویرایش (نو به کهنه)", "label-sort-old-to-new": "چینش براساسِ زمانِ ویرایش (کهنه به نو)", "label-sort-created-old-to-new": "زمانِ ساخته‌شدن (کهنه به نو)", "label-sort-created-new-to-old": "زمانِ ساخته‌شدن (نو به کهنه)", "menu-opt-new-note": "نوشته‌ی جدید", "menu-opt-new-folder": "پوشه‌ی جدید", "menu-opt-set-attachment-folder": "تنظیم به‌عنوانِ پوشه‌ی پیوست‌ها", "menu-opt-rename": "نام‌گذاری", "menu-opt-delete": "پاکیدن", "menu-opt-make-copy": "رونوشت‌گیری", "msg-invalid-characters": "در نامِ فایل نمی‌توانید از این نویسه‌ها استفاده کنید: ", "msg-unsafe-characters": "پیوندها با فایل‌هایي که نامشان این نویسه‌ها را داشته باشد کار نمی‌کنند: ", "msg-file-already-exists": "از قبل فایلي به همین نام وجود دارد", "msg-empty-file-name": "فایل نمی‌تواند بی‌نام باشد.", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "آخرین بار در {{time}} دستکاری شده", "tooltip-created-time": "ساخته‌شده در {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "ریختن", "label-untitled-file": "بی‌نام", "label-untitled-folder": "بی‌نام", "msg-set-attachment-folder": "از حالا پیوست‌ها در \"{{path}}\" ذخیره می‌شوند." }, "search": { "name": "جست‌وجو", "desc": "جستنِ کلیدواژه‌ها در همه‌ی نوشته‌ها", "action-open-search": "جست‌وجو در همه‌ی فایل‌ها", "label-collapse-results": "پنهان‌کردنِ نتایج", "label-match-case": "همخوانیِ کامل", "label-explain-search-term": "توضیح‌دادنِ متنِ جست‌وجوشده", "label-more-context": "نمایشِ محتوای بیش‌تر", "prompt-start-search": "تایپ برای آغازِ جست‌وجو...", "label-match-text": "هم‌خوانی با متنِ: ", "label-match-regex": "هم‌خوانی با ریجکسِ: ", "label-match-exact-text": "دقیقاً حاویِ متنِ: ", "label-match-all": "همخوانی با همه‌ی: ", "label-match-any": "همخوانی با هرکدام از:: ", "label-excluding": "به‌استثنای: ", "label-case-sensitive": "حساس به بزرگ‌و‌کوچکی حرف", "label-case-insensitive": "بی‌تفاوت به بزرگ‌و‌کوچکی حرف", "label-match-file-path": "هم‌خوانی با مسیرِ فایلِ: ", "label-match-file-name": "هم‌خوانی با نامِ فایلِ: ", "label-match-content": "هم‌خوانی با محتوای فایلِ: ", "label-match-task": "هم‌خوانی با کارِ: ", "label-match-task-todo": "Match task (todo): ", "label-match-task-done": "Match task (done): ", "label-match-line": "هم‌خوانی با خطِ: ", "label-match-block": "هم‌خوانی با بلوکِ: ", "label-match-section": "هم‌خوانی با بخشِ: ", "label-match-tag": "هم‌خوانی با برچسبِ: ", "label-no-matches": "نتیجه‌اي پیدا", "matches-with-count": "... and {{count}} more match.", "matches-with-count_plural": "... and {{count}} more matches.", "label-copy-search-results": "رونوشتِ نتایجِ جست‌وجو", "button-copy-results": "رونوشتِ نتایج", "msg-successfully-copied": "نتایج در حافظه رونوشت شدند.", "option-show-path": "نمایشِ مسیر", "option-show-path-description": "Display full path of the file rather than just the file name.", "option-link-style": "سبکِ پیوند", "option-link-style-description": "Optionally turn each file result in to a link.", "option-choice-link-style-none": "هیچ‌کدام", "option-choice-link-style-wikilink": "ویکی‌پیوند", "option-choice-link-style-markdown-link": "پیوندِ مارک‌داونی", "option-list-prefix": "List prefix", "option-list-prefix-description": "Optionally add a list item prefix to each file result.", "option-choice-list-style-none": "هیچ‌کدام", "option-choice-list-style-dash": "خط‌تیره (-)", "option-choice-list-style-asterisk": "خط‌تیره (-)", "option-choice-list-style-numbered": "شماره‌گذاری‌شده", "tooltip-clear-search": "پاک‌سازیِ جست‌وجو", "label-search-options": "گزینه‌های جست‌وجو", "tooltip-read-more": "اطلاعاتِ بیش‌تر", "label-history": "تاریخچه", "tooltip-clear-history": "پاک‌سازیِ تاریخچه‌ی جست‌وجو", "label-path-option-description": "هم‌خوانی‌دادنِ مسیرِ فایل", "label-file-name-option-description": "هم‌خوانی‌دادنِ نامِ فایل", "label-tag-option-description": "جستنِ برچسب‌ها", "label-line-option-description": "جستنِ کلیدواژه‌های درونِ یک خط", "label-section-option-description": "جستنِ کلیدواژه‌های زیرِ یک عنوان", "menu-opt-search-for": "جستنِ \"{{keyword}}\"" }, "quick-switcher": { "name": "پرشِ سریع", "desc": "پریدن به فایل‌های مختلف بدونِ دست‌برداشتن از صفحه‌کلید", "short-name": "پرش", "action-open": "گشودنِ پرشِ سریع", "instruction-navigate": "برای جابه‌جایی", "instruction-open": "برای گشودن", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "برای ساختن", "instruction-dismiss": "برای بستن", "label-no-note-create-new": "نوشته‌اي پیدا نشد. برای ساختِ نوشته‌اي جدید با این نام، کلید اینتر را بزنید.", "prompt-type-file-name": "برای ساخت یا پرش به نوشته' نامش را بنویسید...", "label-enter-to-create": "برای ساخت اینتر را بزنید", "tooltip-not-created-yet": "هنوز ساخته نشده، برای ساختن انتخاب کنید.", "option-show-existing-only": "فقط نمایشِ موجودها", "option-show-existing-only-description": "تعیینِ این‌که پیوند به فایل‌هایي که هنوز ساخته نشده‌اند نمایش داده بشوند یا نه.", "option-show-attachments": "نمایشِ پیوست‌ها", "option-show-attachments-desc": "نمایشِ پیوست‌هایي مانندِ فیلم، تصویر و پی‌دی‌اف.", "option-show-all-file-types": "نمایشِ همه‌جور فایل", "option-show-all-file-types-desc": "نمایشِ همه‌ی فایل‌ها حتا آن‌هایي که اوبسیدین نمی‌تواند باز کند. این فایل‌ها را برنامه‌ی پیش‌فرض‌شان باز خواهد کرد." }, "graph-view": { "name": "نمای نمودار", "desc": "دیدنِ نمودارِ اجمالیِ این‌که هر نوشته به کدام نوشته‌ها پیوند شده‌است.", "action-open": "گشودنِ نمای نمودار", "action-open-local": "گشودنِ نمودارِ محلی", "action-copy-screenshot": "رونوشتِ نماگرفت", "tab-title": "نمودارِ {{displayText}}", "label-filters": "صافی‌ها", "prompt-filter-nodes": "جستنِ فایل‌ها", "option-depth": "عمق", "option-depth-description": "نمایشِ گره‌هایي که در این مقدار فاصله هستند.", "option-neighbor-links": "پیوندهای همسایه", "option-neighbor-links-description": "نمایشِ پیوندهای میانِ همسایه‌ها", "option-forelinks": "پیوندهای برون‌رو", "option-forelinks-description": "نمایشِ پیوندها به فایل‌های دیگر", "option-backlinks": "پیوندهای درون‌آ", "option-backlinks-description": "نمایشِ پیوندها از فایل‌های دیگر", "option-show-tags": "برچسب‌ها", "option-show-tags-description": "برچسب‌ها به فایل‌هایي که حاوی‌شان هستند، پیوند شده‌اند.", "option-show-attachments": "پیوست‌ها", "option-show-attachments-description": "نمایشِ پیوست‌های درونِ فایل‌ها", "option-show-existing-files-only": "فقط فایل‌های موجود", "option-show-existing-files-only-description": "وقتي تیک‌دار باشد، پیوندها به فایل‌ها ناموجود نشان داده‌نمی‌شوند.", "option-show-orphans": "یتیمان", "option-show-orphans-description": "نمایش فایل‌هایي که به هیچ فایلِ دیگري پیوند نشده‌اند.", "label-display": "نمایش", "option-show-arrows": "پیکان‌ها", "option-show-arrows-description": "نمایشِ پیکان‌ها هنگامِ زوم", "option-text-fade": "آستانه‌ی محوشدگیِ نوشته", "option-node-size": "اندازه‌ی گره", "option-link-thickness": "کلفتیِ پیوند", "label-forces": "نیروها", "option-center-force": "نیروی مرکز", "option-link-force": "نیروی پیوند", "option-link-distance": "دوری پیوند", "option-repel-force": "نیرو پس‌زننده", "tooltip-open-graph-settings": "گشودنِ تنظیماتِ نمودار", "msg-screenshot-copied": "نماگرفت به حافظه رونوشت شد", "label-groups": "گروه‌ها", "placeholder-enter-query": "نوشتنِ پرسمان...", "tooltip-delete-graph": "پاکیدنِ گروه", "button-new-group": "گروهِ جدید", "tooltip-click-to-change-drag-to-reorder": "کلیک برای تغییرِ رنگ \n کشیدن برای چینشِ گروه‌ها", "action-timelapse": "آغازِ پویانماییِ سریعِ نمودار", "tooltip-start-timelapse-animation": "آغازِ پویانمایی", "button-animate-timelapse": "پویانمایی" }, "backlinks": { "name": "پشت‌وندها", "desc": "نمایشِ تعدادِ پشت‌وندها در نوارِ وضعیت", "action-open": "گشودنِ پشت‌وندها", "action-show": "نمایشِ برگِ پشت‌وندها", "action-open-for-current": "گشودنِ پشت‌وندها برای فایلِ کنونی", "action-toggle-backlinks-in-document": "تاگِلِ پشت‌وندها در این نوشته", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "یادکردهای پیوندشده", "label-no-backlinks": "پشت‌وندي پیدا نشد", "label-unlinked-mentions": "یادکردهای پیوندنشده", "label-show-search": "نمایشِ صافی‌های جستن", "label-link-button-text": "پیوند", "tab-title": "پشت‌وندهای {{displayText}}", "label-no-unlinked-mentions": "یادکرد پیوندنشده‌اي پیدا نشد.", "ellipsis": "...", "option-backlink-in-document": "پشت‌وند در نوشته", "option-backlink-in-document-desc": "نمایشِ پیش‌فرضِ پشت‌وندها هنگامِ بازکردنِ برگ‌های جدید." }, "outgoing-links": { "name": "پیوندهای برون‌رو", "desc": "نمایشِ پیوندهای برون‌رو و تشخیصِ یادکردهای پیوندنشده‌ی نوشته‌های دیگر در این نوشته.", "action-open": "گشودنِ پیوندهای برون‌رو", "action-show": "نمایشِ برگِ پیوندهای برون‌رو", "action-open-for-current": "گشودنِ پیوندهای برون‌رو برای فایلِ کنونی", "tab-title": "لینک‌های برون‌رو از {{displayText}}", "label-links": "پیوندها", "label-no-links": "پیوندي پیدا نشد.", "label-unlinked-mentions": "یادکردهای پیوندنشده", "tooltip-link-file": "پیونددادنِ این فایل", "tooltip-not-created": "هنوز ساخته‌نشده" }, "tag-pane": { "name": "برگِ برچسب", "desc": "نمایشِ همه‌ی برچسب‌ها و این‌که چندبار استفاده شده‌اند.", "action-show": "نمایشِ برگِ برچسب", "label-no-tags": "برچسبي پیدا نشد.", "label-sort-by-name-a-to-z": "نامِ برچسب (ترتیبِ الفبایی)", "label-sort-by-name-z-to-a": "نامِ برچسب (عکسِ ترتیبِ الفبایی)", "label-sort-by-frequency-high-to-low": "فراوانی (زیاد به کم)", "label-sort-by-frequency-low-to-high": "فراوانی (کم به زیاد)", "action-show-nested-tags": "نمایشِ برچسب‌های تودرتو", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "پیش‌نمایشِ صفحه", "desc": "وقتي با موس روی پیوندي درونی می‌ایستید، پیش‌نمایشي نشان داده شود. برای استفاده، در حالتِ ویرایشگر، کلیدِ کنترل/کامند را نگه دارید.", "label-empty-note": "\"{{linktext}}\" هنوز ساخته نشده. برای ساختن کلیک کنید.", "label-source-editor": "ویرایشگر", "label-source-preview": "پیش‌نمایش", "label-source-search": "جستن، پشت‌وندها و پیوندهای برون‌رو", "label-require-mod": "Require {{key}} to trigger page preview on hover" }, "starred": { "name": "ستاره‌شده", "desc": "ستاره‌کردنِ فایل و جست‌وجوهای پراستفاده.", "action-show": "نمایشِ برگِ ستاره‌شده‌ها", "action-toggle": "ستاره/بی‌ستاره‌کردنِ فایلِ کنونی", "action-toggle-search": "ستاره/بی‌ستاره‌کردنِ جست‌وجوی کنونی", "action-star": "ستاره‌کردن", "action-unstar": "بی‌ستاره‌کردن", "menu-opt-remove": "پاکیدن", "msg-successfully-starred": "Successfully starred {{type}} \"{{title}}\".", "msg-removed-starred": "Removed starred {{type}} \"{{title}}\".", "msg-cannot-find-path": "Cannot find file at \"{{path}}\"." }, "custom-css": { "name": "سی‌اس‌اسِ دلخواه", "desc": "Reads \"obsidian.css\" in the vault and applies it.", "setting-community-themes": "پوسته‌های انجمن", "msg-fetching-themes": "درحالِ دریافتِ داده‌های پوسته‌های انجمن...", "prompt-filter": "صافیدن...", "label-dark-theme-only": "فقط پوسته‌های تاریک", "label-light-theme-only": "فقط پوسته‌های روشن", "label-use": "استفاده", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "به‌روزرساندن", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "پاکیدنِ پوسته", "label-visit-on-github": "مشاهده در گیت‌هاب", "msg-load-error": "بارگیریِ پوسته‌های انجمن به مشکل خورد، نتِ خود را وارِسی کنید.", "msg-now-using-theme": "You're now using {{title}} as your CSS theme.", "msg-deleted-theme": "The theme {{title}} has been deleted.", "msg-updated-theme": "The theme {{title}} has been updated.", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "فرمان‌دان", "desc": "فراخوانِ فرمان‌ها با تایپ؛ دیگر نیازي نیست از رابطِ‌کاربری استفاده کنید یا میانبرِ صفحه‌کلیدِ فرمان‌ها را بلد باشید.", "action-open": "گشودنِ فرمان‌دان", "instruction-navigate": "برای جابه‌جایی", "instruction-use": "برای استفاده", "instruction-dismiss": "برای خروج", "label-no-commands": "فرماني یافت نشد.", "prompt-type-command": "فرماني تایپ کنید...", "label-pinned-commands": "فرمان‌های سنجاقیده", "option-add-new-pin": "فرمانِ سنجاقیده‌ی جدید", "option-add-new-pin-description": "اگر چیزي نجسته باشید، فرمان‌های سنجاقیده بالای همه‌ی فرمان‌های دیگر نمایش داده‌می‌شود." }, "markdown-format-importer": { "name": "واردکننده‌ی قالبِ مارک‌داون", "desc": "تبدیلِ مارک‌داون از برنامه‌های دیگر به قالبِ اوبسیدین", "action-open": "گشودنِ واردکننده‌ی مارک‌داون", "option-roam-tag-fixer": "Roam Research tag fixer", "option-roam-tag-fixer-description": "Converts \"#tag\" and \"#[[tag]]\" to \"[[tag]]\".", "option-roam-highlight-fixer": "Roam Research highlight fixer", "option-roam-highlight-fixer-description": "Converts \"^^highlight^^\" to \"==highlight==\".", "option-roam-todo-converter": "Roam Research TODO converter", "option-roam-todo-converter-description": "Converts \"{{[[TODO]]}}\" to \"[ ]\".", "option-bear-highlight-fixer": "Bear highlight fixer", "option-bear-highlight-fixer-description": "Converts \"::highlight::\" to \"==highlight==\".", "zettelkasten-link-fixer": "Zettelkasten link fixer", "zettelkasten-link-fixer-description": "Fixes \"[[UID]]\" links to full \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Zettelkasten link beautifier", "zettelkasten-link-beautifier-description": "Fixes \"[[UID]]\" links and also beautify them \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "هشدار: واردکننده همه‌ی فایل‌های خزانه را تبدیل می‌کند نه فقط فایل کنونی را.", "msg-override-files-warning": "فایل‌های‌تان جایگزین و بازنویسی می‌شوند. پیش از تبدیل از همه‌ی فایل‌ها پشتیبان بگیرید.", "label-start-conversion": "آغازِ تبدیل", "label-stop": "ایست", "label-go-back": "بازگشت", "label-done": "انجام‌شد", "label-processing": "درحالِ پردازش...", "label-cancelling": "درحالِ لغویدن...", "label-finished": "انجام شد!", "label-processed-files": "فایل‌های پرداخته", "label-modified-files": "فایل‌های دستکاری‌شده", "label-total-replacements": "مجموعِ جایگزینی‌ها" }, "daily-notes": { "name": "نوشته‌های روزانه", "desc": "گشودنِ نوشته‌ی امروز یا اگر نبود، ساختِ نوشته‌ی جدید.", "short-name": "امروز", "action-open": "گشودنِ نوشته‌ی امروز", "action-open-previous": "گشودنِ نوشته‌ی روزانه‌ی قبلی", "action-open-next": "گشودنِ نوشته‌ی روزانه‌ی بعدی", "action-insert-text": "درجِ متن در نوشته‌ی روزانه", "action-insert-link": "درجِ پیوند در نوشته‌ی روزانه", "msg-fail-format": "Failed to create daily note. \"{{format}}\" is not a valid format.", "msg-fail-folder": "Failed to create daily note. Folder \"{{folderOption}}\" not found.", "msg-fail-template-file": "Failed to create daily note. Template file \"{{template}}\" not found.", "msg-no-previous": "قبل از این نوشته، دیگر نوشته‌ی روزانه‌ای نیست.", "msg-no-next": "دیگر نوشته‌ی روزانه‌ای نیست.", "option-date-format": "قالبِ تاریخ", "label-refer-to-syntax": "For more syntax, refer to: ", "label-syntax-link": "format reference", "label-syntax-live-preview": "Here is what it will look like: ", "option-new-file-location": "جای فایلِ جدید", "option-new-file-location-description": "The folder path to create the new daily note.", "option-template": "جای فایلِ الگو", "option-template-description": "The file path to use as template.", "option-open-on-start": "گشودنِ نوشته‌های روزانه هنگامِ بالاآمدنِ برنامه", "option-open-on-start-description": "هرگاه این خزانه را باز کردید نوشته‌ی روزانه هم باز شود." }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "نوشته‌ی شانسی", "desc": "شانسی نوشته‌اي را باز می‌کند. به دردِ مرور و کشف می‌خورد.", "short-name": "شانسی", "action-open": "گشودنِ نوشته‌ی شانسی" }, "outline": { "name": "پیرانما", "desc": "پیرانمای فایلِ کنونی یا برگِ پیوندشده را نمایش می‌دهد.", "action-open": "گشودنِ پیرانما", "action-show": "نمایشِ برگِ پیرانما", "action-open-for-current": "گشودنِ پیرانمای فایلِ کنونی", "tab-title": "پیرانمای {{displayText}}", "label-no-headings": "سرفصلي پیدا نشد." }, "word-count": { "name": "شمارِ واژگان", "desc": "نمایشِ شمارِ واژگان در نوارِ وضعیت" }, "slides": { "name": "نمابرگ", "desc": "از فایلِ مارک‌داون ارائه دهد. برای جداکردنِ نمابرگ‌ها از \"---\" استفاده کنید.", "action-start": "آغازِ ارائه" }, "audio-recorder": { "name": "ضبطِ صوت", "desc": "ضبطِ صوت و ذخیره‌اش به‌صورتِ پیوست.", "action-start": "آغازِ ضبطِ صوت", "action-stop": "پایانِ ضبطِ صوت", "action-toggle": "آغاز/پایانِ ضبطِ صوت", "msg-access-denied": "دسترسی به صدابَر منع شد، لطفاً از برگِ تنظیمات فعال‌اش کنید.", "msg-pending-grant": "برای آغازِ ضبط، لطفاً اجازه‌ی استفاده از صدابَر را بدهید.", "msg-no-microphone": "صدابَري وصل نیست." }, "open-with-default-app": { "name": "گشودن در برنامه‌ی پیش‌فرض", "desc": "افزودنِ دکمه‌اي برای بازکردنِ فایلِ کنونی در برنامه‌ی پیش‌فرض.", "action-open-file": "گشودن در برنامه‌ی پیش‌فرض", "action-open-file-mobile": "همرسانی", "action-show-in-folder": "نمایش در پوشه", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "الگوها", "desc": "درجِ الگو از پوشه‌اي حاویِ فایل‌های الگو.", "action-insert": "درجِ الگو", "action-insert-current-date": "درجِ تاریخِ کنونی", "action-insert-current-time": "درجِ زمانِ کنونی", "option-template-folder-location": "جای پوشه‌ی الگو", "option-template-folder-location-description": "فایل‌های این پوشه زین‌پس الگو خواهند بود.", "option-template-date-format": "قالبِ تاریخ", "option-template-date-format-description": "{{date}} in the template file will be replaced with this value.", "option-template-date-format-description2": "You can also use {{date:YYYY-MM-DD}} to override the format once.", "option-template-time-format": "Time format", "option-template-time-format-description": "{{time}} in the template file will be replaced with this value.", "option-template-time-format-description2": "You can also use {{time:HH:mm}} to override the format once.", "instruction-navigate": "برای جابه‌جایی", "instruction-insert": "برای درجِ الگو", "instruction-dismiss": "برای خروج", "msg-no-templates-found": "الگویي پیدا نشد", "msg-fail-invalid-folder": ".فهرست‌سازیِ الگوها به مشکل خورد. پوشه‌ی الگوها نامعتبر است", "msg-fail-folder-not-found": "Failed to list templates. Folder \"{{folderOption}}\" not found.", "prompt-type-template": "الگو را نام‌گذاری کنید..." }, "translucency": { "name": "پنجره‌ی شفاف", "desc": "برای بهبودِ حسِ عمق، جلوه‌ی شفافیت را فعال کنید. این جلوه با پوسته‌ی تاریک بهتر کار می‌کند. در لینوکس پشتیبانی نمی‌شود" }, "slash-command": { "name": "فرمان‌های کج‌خط", "desc": "قابلیتِ بازکردنِ فرمان‌های کج‌خط با تایپِ نشانه‌ی ممیز." }, "editor-status": { "name": "وضعیتِ ویرایشگر", "desc": "موردي به نوارِ وضعیت اضافه می‌کند که با آن می‌توان حالتِ کنونیِ ویرایشگر را دید و تغییر داد.", "read": "خواندن", "edit-source": "حالتِ منبع", "edit-live-preview": "پیش‌نمایشِ زنده" }, "publish": { "name": "پابلیش", "desc": "با اوبسیدین پابلیش، یادداشت‌های‌تان را منتشر کنید.", "action-publish-changes": "نشرِ تغییرات...", "label-no-internet-access": "برای نشرِ تغییرات اینترنت نیاز است.", "label-publish-service-description": "اوبسیدیان پابلیش افزونه‌اي‌ست پولی که می‌گذارد یادداشت‌های‌تان را مستقیماً از درونِ اوبسیدین به شکلِ آنلاین منتشر کنید.", "label-please-login": "برای آغازِ نشر، واردِ حسابِ اوبسیدین‌تان شوید یا حسابِ جدیدي باز کنید.", "label-no-publish-subscription": "هنوز اشتراکِ اوبسیدین پابلیش ندارید.", "button-purchase": "خرید", "label-manage-sites": "مدیریتِ سایت‌ها", "label-no-sites": "سایتي ندارید.", "button-choose": "انتخاب", "tooltip-edit-site-id": "ویرایشِ شناسه‌ی سایت", "tooltip-delete-site": "پاکیدنِ سایت", "label-delete-site-confirmation": "مطمئن‌اید می‌خواهید این سایت را بپاکید؟", "label-delete-site-details": "این کار فوری و برای همیشه سایت را می‌پاکد.", "label-confirm-delete-site": "Confirm delete site \"{{site}}\"", "option-site-id": "شناسه‌ی سایت", "option-site-id-description": "Your site will be at https://publish.obsidian.md/{site id}. You can change this later. Only lower case letters, numbers, and dashes are allowed.", "option-site-id-placeholder": "انتخابِ شناسه‌ی سایت", "button-create": "ساختن", "msg-invalid-site-id": "Site ID can only contain lowercase letters, numbers, and dashes.", "msg-site-id-in-use": "This site ID is in use, please try another one.", "msg-create-site-issue": "هنگامِ ساختنِ سایتِ شما مشکلي پیش آمد.", "label-site-options": "تنظیماتِ سایت", "option-site-general": "General", "option-site-components": "سازه‌ها", "option-site-appearance": "چهره", "option-site-reading-experience": "تجربه‌ی خواندن", "option-site-misc": "دیگر تنظیماتِ سایت", "option-site-name": "نامِ سایت", "option-site-name-description": "Name of your published site. It will show up in the page title of your site.", "option-site-name-placeholder": "نامِ سایت", "option-home-page-file": "فایلِ صفحه‌ی اصلی", "option-home-page-file-description": "The first page the user sees when landing on your published site", "option-home-page-file-placeholder": "یک فایلِ منتشرشده را انتخاب کنید", "option-logo": "نشان", "option-logo-description": "یک فایلِ تصویر را به عنوانِ نشانِ سایت انتخاب کنید", "option-logo-placeholder": "Any uploaded image in your vault...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "پوسته", "option-theme-description": "انتخابِ شِمای رنگیِ پیش‌فرضِ سایت.", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "Show navigation", "option-show-navigation-description": "Display a list of all published pages on the left side of your published site.", "option-show-search": "نمایشِ کادرِ جست‌وجو", "option-show-search-description": "Display a search bar at top of the navigation that lets the visitors search pages and headings on your site.", "option-show-graph": "نمایشِ نمایِ نمودار", "option-show-graph-description": "نمایشِ نمودارِ محلیِ کوچک در هر صفحه.", "option-show-outline": "فهرستِ رئوسِ مطالب", "option-show-outline-description": "Display the outline of headings on each page.", "option-show-backlinks": "نمایشِ پشت‌وندها", "option-show-backlinks-description": "Show backlink section at the end of each page.", "option-sliding-window-mode": "Use sliding windows", "option-sliding-window-mode-description": "Open pages in new panes to the right. Allows scrolling through panes horizontally.", "option-hover-preview-file": "Show hover preview", "option-hover-preview-file-description": "Display page preview when hovering links.", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "خواناسازیِ طولِ خطوط", "option-readable-line-length-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-site-password": "گذرواژه‌ها", "option-site-password-description": "Restrict access to your site with passwords.", "option-google-analytics": "Google Analytics tracking code", "option-google-analytics-description": "Configure Google Analytics for your site. Only available for visitors from your custom domain URL. Please check with your local laws and regulations first.", "button-manage-passwords": "مدیریت", "button-save-site-settings": "ذخیره‌ی تنظیماتِ سایت", "msg-updated-options": "تنظیماتِ سایت به‌روز شدند.", "button-go-back": "بازگشت", "label-publishing-to": "Publishing to", "tooltip-switch-site": "Switch site", "button-add-linked": "Add linked", "tooltip-add-linked": "Add all files that are linked by currently selected items", "msg-added-linked-files": "{{count}} linked file has been added.", "msg-added-linked-files_plural": "{{count}} linked files have been added.", "tooltip-open-site-options": "تغییرِ تنظیماتِ سایت", "label-no-changes-detected": "تغییري شناسایی نشد.", "label-changed-files-to-be-published": "تغییرات", "label-unchanged-files-already-published": "Unchanged (select to delete)", "label-file-selected": " انتخاب‌شده", "button-select-all-files": "انتخابِ همه", "button-deselect-all-files": "لغوِ انتخابِ همه", "label-new-files-to-be-published": "جدید", "button-publish": "نشردادن", "msg-no-permission-to-publish-to-site": "You do not have permissions to publish to the current site.", "msg-select-at-least-one-file": "دست‌کم یک فایل انتخاب فرمایید.", "label-upload-changes": "بارگذاریِ تغییرات", "button-done": "انجام", "button-stop": "ایست", "label-status-uploading": "دارد بارگذاری می‌شود", "label-status-to-publish": "برای نشر", "label-status-to-delete": "برای پاکیدن", "label-status-published": "نشرشده", "label-status-deleted": "پاکیده‌شد", "label-status-failed": "شکست‌خورده", "label-status-cancelled": "لغوشده", "button-change": "تغییر", "label-clear-cache": "It takes up to a few minutes for the changes to show up on your site. If you do not see your latest changes, try clearing the cache in your browser.", "label-visit-site": "You can visit your site here: ", "msg-something-went-wrong": "Something went wrong. Please check the developer console for details.", "msg-network-error": "خطایي در اتصالِ اینترنت پیش‌آمده. ", "label-manage-passwords": "مدیریتِ گذرواژه‌ها", "label-add-password": "افزودنِ گذرواژه", "action-new-password": "گذرواژه‌ی جدید", "label-no-password": "هم‌اکنون سایتِ شما گذرواژه‌اي ندارد. همه می‌توانند سایت را ببینند.", "label-have-password": "Your site is password protected. If you have multiple passwords, visitors can access your site by entering any of them.", "option-password-name": "گذرواژه", "option-password-desc": "A hash of your password will be stored securely. Once the password is set, it cannot be revealed in plaintext.", "option-password-placeholder": "گذرواژه‌ی شما", "option-nickname-name": "لقب (اختیاری)", "option-nickname-desc": "Set a nickname to remind yourself what or who the password is for.", "action-add-password": "افزودنِ این گذرواژه", "label-untitled-password": "گذرواژه‌ی بی‌نام", "label-password-created-time": "Created {{time}}", "msg-added-new-password": "گذرواژه‌ی جدید افزوده شد.", "option-custom-domain": "دامنه‌ی دلخواه", "option-custom-domain-desc": "Use your own domain rather than the https://publish.obsidian.md/{site id} URL.", "option-noindex": "Disallow search engine indexing", "option-noindex-desc": "جلوگیری از نمایه‌سازیِ موتورهای جست‌وجو (یعنی سایت قابلِ‌جستن در گوگل و مانندِ آن نباشد).", "button-configure": "پیکربندی", "label-configure-custom-domain": "پیکربندیِ دامنه‌ی دلخواه", "option-custom-url-name": "نشانیِ دلخواه", "option-custom-url-desc": "نشانیِ سایتِ شما.", "option-custom-url-placeholder": "www.damane-ye-shoma.ir", "option-custom-url-redirect": "انتقال به دامنه‌ی دلخواهِ شما", "option-custom-url-redirect-desc": "Redirect visitors on publish.obsidian.md/id to your custom domain.", "button-update-custom-domain": "به‌روزرسانیِ تنظیماتِ دامنه", "label-custom-domain-instructions": "Please refer to our {{link}} on our help site for more information.", "label-custom-domain-link-name": "راهنمای راه‌اندازیِ دامنه‌ی دلخواه", "label-site-usage": "You're using {{site}} out of your {{limit}}.", "button-add-more-sites": "خریدِ سایت‌های بیش‌تر", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "فضاهای کاری", "desc": "ذخیره و بارگیریِ آرایشِ فضایِ کاری", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "ذخیره", "button-load": "بارگیری", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "همگاه‌سازی", "desc": "با اوبسیدین سینک فایل‌های خود را همگاه‌سازی کنید.", "action-view-version-history": "دیدنِ تاریخچه‌ی نسخه‌ها", "label-load-more": "بارگیریِ بیش‌تر", "label-show-diff": "Show diff", "label-copy-to-clipboard": "رونوشت به حافظه", "label-restore-this-version": "بازیابیِ این نسخه", "msg-already-latest-version": "این نسخه جدیدترین است.", "msg-restored-version": "Successfully restored version from {{time}}", "label-file-deleted": "این فایل پاکیده شده", "label-no-earlier-version": "نسخه‌ی قدیمی‌تري از این فایل موجود نیست.", "label-empty-file": "خالی", "label-setting-files": "فایل‌های تنظیمات", "label-deleted-files": "فایل‌های پاکیده", "label-version-history": "Version history", "label-click-to-see-history": "برای دیدنِ تاریخچه‌ی فایلِ پاکیده' کلیک کنید.", "label-create-remote-vault": "ساختنِ خزانه‌ی راهِ‌دور", "msg-please-enter-password": "گذواژه‌اي وارد فرمایید.", "msg-vault-name-cannot-be-empty": "خزانه نباید بی‌نام باشد.", "msg-successfully-created-vault": "Successfully create remote vault \"{{name}}\".", "label-remote-vault-explanation": "Remote vaults securely synchronize your vault between devices.", "option-vault-name": "نامِ خزانه", "option-vault-name-desc": "به یادآوریِ کاربردِ این خزانه کمک می‌کند.", "option-vault-name-placeholder": "خزانه‌ی خفنِ من", "option-use-custom-encryption-password": "شخصی‌سازیِ گذرواژه‌ی سراسر رمزگذاری‌شده", "option-use-custom-encryption-password-desc": "If you turn this off, we will securely manage an encryption key for you.", "option-use-custom-encryption-password-desc-warning": "نمی‌شود بعداً این تنظیم را تغییر داد.", "option-encryption-password": "گذرواژه‌ی رمزگذاری‌شده", "option-encryption-password-desc": "این گذرواژه را نمی‌توان بعداً تغییر داد.", "option-encryption-password-desc-warning": "If you forget this password, any remote data will remain unusable forever.", "option-encryption-password-desc-2": "This does not affect your local data.", "option-encryption-password-placeholder": "'گذرواژه‌ی شما'", "label-enter-encryption-password": "گذرواژه‌ی رمزگذاری‌شده را وارد کنید", "button-unlock-vault": "قفل‌گشاییِ خزانه", "msg-verified-password": "ارزیابیِ گذرواژه‌ی شما موفق بود.", "label-remote-vaults": "خزانه‌های راهِ‌دورِ شما", "label-vault-created-time": "Created {{time}}", "tooltip-delete-remote-vault": "پاکیدن", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "تأییدِ پاکیدنِ خزانه", "label-confirm-delete-remote-vault-question": "Are you sure you want to delete this remote vault?", "label-confirm-delete-remote-vault-result": "All data on our server, including version history, will be deleted. Your local files will stay intact.", "label-confirm-delete-remote-vault-warning": "This action is permanent and irreversible.", "msg-remote-vault-deleted": "{{name}} has been deleted.", "button-connect-to-remote-vault": "وصلیدن", "button-disconnect-from-remote-vault": "قطعیدن", "label-not-remote-vaults": "خزانه‌ی راهِ‌دوري ندارید.", "button-create-new-remote-vault": "ساختِ خزانه‌ی جدید", "label-sync-log": "Sync log", "options-only-show-errors": "فقط خطاها", "options-only-show-errors-desc": "Only show errors and hide other log items.", "button-copy-sync-log": "Copy sync log", "msg-successfully-copied-sync-log": "Successfully copied sync log.", "button-retry": "بازکوشش", "button-purchase-subscription": "خرید", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "انتخاب", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "وضعیتِ همگاه‌سازی", "option-sync-status-desc-paused": "اوبسیدین سینک هم‌اکنون از کار ایستاده.", "option-sync-status-desc-running": "اوبسیدین سینک دارد کار می‌کند.", "option-device-name": "نامِ دستگاه", "option-device-name-desc": "This name will be displayed in the sync log. Leave empty to use the default name.", "button-resume": "ادامه", "button-pause": "توقفِ موقت", "option-view-deleted-files": "فایل‌های پاکیده", "option-view-deleted-files-desc": "مشاهده و بازیابیِ فایل‌های پاکیده.", "option-sync-log": "Sync activity", "option-sync-log-desc": "View recent sync activities for debugging.", "button-view": "دیدن", "button-bulk-restore": "بازیابیِ فله‌ای", "button-restore-selected-files": "بازیابیِ فایل‌های انتخابی", "msg-restoring": "درحال بازیابی...", "msg-restoring-complete": "`Restore complete: {{succeeded}} succeeded and {{failed}} failed.`", "option-over-size": "Vault size over limit", "option-over-size-desc": "Your vault is at {{size}} out of {{limit}}.", "msg-largest-files": "دیدنِ بزرگ‌ترین فایل‌ها", "msg-largest-files-desc": "These are the remote files that are taking the most space. After deleting attachments, use the purge button to free up remote vault space.", "button-purge-remote": "پاکیدنِ کامل", "tooltip-purge-remote": "Permanently purge deleted attachments from remote vault to save space.", "msg-purge-complete": "پاکیدنِ کامل انجام شد.", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "همگاه‌سازیِ گزینشی", "option-excluded-folders": "پوشه‌های استثناشده", "option-excluded-folder-desc": "Prevent certain folders from being synced.", "option-currently-excluded-folders": " هم‌اکنون این پوشه‌ها استثنا شده‌اند:", "button-manage-excluded-folders": "مدیریت", "option-sync-image": "همگاه‌سازیِ تصویرها", "option-sync-image-desc": "Sync image files with these extensions: {{extensions}}.", "option-sync-audio": "همگاه‌سازیِ صوت‌ها", "option-sync-audio-desc": "Sync audio files with these extensions: {{extensions}}.", "option-sync-video": "همگاه‌سازیِ فیلم‌ها", "option-sync-video-desc": "Sync video files with these extensions: {{extensions}}.", "option-sync-pdf": "همگاه‌سازیِ پی‌دی‌اف‌ها", "option-sync-pdf-desc": "همگاه‌سازیِ فایل‌های پی‌دی‌اف.", "option-sync-unsupported": "همگاه‌سازیِ همه جور فایلِ دیگر", "option-sync-unsupported-desc": "Sync unsupported file types.", "option-vault-config-sync": "Vault configuration sync", "option-view-config-files": "Settings version history", "option-view-config-files-desc": "View and restore version history of setting files.", "option-sync-app": "تنظیماتِ اصلی", "option-sync-app-desc": "Enable to sync editor settings, files & links settings, custom hotkeys, etc.", "option-sync-appearance": "تنظیماتِ چهره", "option-sync-appearance-desc": "Sync appearance settings like dark mode, active theme, and enabled snippets.", "option-sync-appearance-data": "پوسته‌ها و تکه‌کدها", "option-sync-appearance-data-desc": "Sync downloaded themes and snippets. Whether they are enabled depends on the previous setting.", "option-sync-hotkey": "میانبرها", "option-sync-hotkey-desc": "همگاه‌سازیِ میانبرهای دلخواه", "option-sync-core-plugin": "فهرستِ افزونه‌های اصلیِ فعال", "option-sync-core-plugin-desc": "همگاه‌سازیِ افزونه‌های اصلیِ فعال.", "option-sync-core-plugin-data": "تنظیماتِ افزونه‌های اصلی", "option-sync-core-plugin-data-desc": "همگاه‌سازیِ تنظیماتِ افزونه‌های اصلی", "option-sync-community-plugin": "فهرستِ افزونه‌های فعالِ انجمن", "option-sync-community-plugin-desc": "همگاه‌سازیِ افزونه‌های فعالِ انجمن", "option-sync-community-plugin-data": "افزونه‌های نصبیده‌ی انجمن", "option-sync-community-plugin-data-desc": "Sync installed community plugins (.js, .css, and manifest.json files) and their settings.", "label-sync-introduction": "Obsidian Sync is Obsidian's add-on sync service with end-to-end encryption and version history.", "label-account-required": "To start syncing, please log in or create a new Obsidian account.", "button-sign-up": "نام‌نویسی", "button-log-in": "ورود", "label-manage-excluded-folders": "مدیریتِ پوشه‌های استثناشده", "label-number-of-folders-excluded": "{{folders}} are currently excluded from being synced.", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "راه‌اندازیِ اتصال", "label-now-connected-to-vault": "You're now connected to \"{{name}}\".", "button-start-syncing": "آغازِ همگاه‌سازی", "label-confirm-merge-vault": "تأییدِ ادغامِ خزانه", "msg-vault-has-notes": "Your local vault already contains some notes.", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "بازیابیِ فایل", "desc": "Let you restore recent snapshots to recover from accidental data loss. Snapshots are only saved for Markdown files.", "action-open": "گشودنِ پشتیبان‌های مقطعیِ ذخیره‌شده", "option-interval": "Snapshot interval", "option-interval-description": "Minimal interval in minutes between two snapshots.", "option-keep": "درازیِ تاریخچه", "option-keep-description": "تعداد روزهایي که پشتیبان‌های مقطعی نگه داشته می‌شوند.", "option-open-history": "پشتیبان‌های مقطعی", "option-open-history-description": "دیدن و بازیابیِ پشتیبان‌های مقطعیِ ذخیره‌شده.", "button-view-snapshots": "دیدن", "option-clear": "پاکیدنِ تاریخچه", "option-clear-description": "پاکیدنِ پشتیبان‌های مقطعی", "button-clear-history": "پاکیدن", "label-clear-warning": "Are you sure you want to delete all snapshots? Note that only snapshots will be removed. All files inside your vault will not be affected.", "msg-clear-complete": "پشتیبان‌های مقطعی پاک شدند.", "label-no-history-found": "پشتیبانِ مقطعی‌ای پیدا نشد.", "placeholder-choose-file": "انتخابِ یک فایل...", "label-select-file": "برای دیدنِ پشتیبان‌های مقطعی، فایلي را از سمتِ چپ انتخاب کنید." }, "note-composer": { "name": "نوشته‌نگار", "desc": "Merge, split, and refactor notes.", "option-confirm-file-merge": "تأییدِ ترکیبِ فایل", "option-confirm-file-merge-description": "Prompt before merge two files.", "option-split-replacement-text": "متن پس از استخراج", "option-split-replacement-text-description": "What to show in place of the selected text after extracting it.", "option-choice-split-replacement-text-link": "پیوند به فایلِ جدید", "option-choice-split-replacement-text-embed": "جاسازِ فایلِ جدید", "option-choice-split-replacement-text-none": "هیچ‌کدام", "option-template-file": "جای فایلِ الگو", "option-template-file-description": "Template file to use when merging or extracting. Available variables: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "ادغامِ این فایل با فایلي دیگر...", "action-merge-file": "ترکیبِ کلِ فایل با...", "label-no-files": "فایلي پیدا نشد.", "instruction-navigate": "برای جابه‌جایی", "instruction-merge": "برای ادغام", "instruction-create-new": "برای ساختنِ جدید", "instruction-merge-at-top": "to merge at top", "instruction-dismiss": "برای خروج", "prompt-select-file-to-merge": "Select file to merge into...", "label-merge-file": "ترکیبِ فایل", "label-confirm-file-merge": "Are you sure you want to merge \"{{file}}\" into \"{{destination}}\"? \"{{file}}\" will be deleted.", "button-merge": "ادغام", "button-merge-do-not-ask-again": "ادغام کن و دیگر نپرس", "command-split-file": "Extract current selection...", "command-extract-heading": "Extract this heading...", "instruction-append": "to move to bottom", "instruction-prepend": "to move to top", "msg-fail-to-fetch-template": "Failed to fetch template file: \"{{template}}\" not found.", "msg-fail-to-find-heading": "پیداکردنِ سرفصل به مشکل خورد" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} واژه", "word-with-count_plural": "{{count}} واژه", "character-with-count": "{{count}} نویسه", "character-with-count_plural": "{{count}} نویسه", "link-with-count": "{{count}} پیوند", "link-with-count_plural": "{{count}} پیوند", "file-with-count": "{{count}} فایل", "file-with-count_plural": "{{count}} فایل", "folder-with-count": "{{count}} پوشه", "folder-with-count_plural": "{{count}} پوشه", "backlink-with-count": "{{count}} پشت‌وند", "backlink-with-count_plural": "{{count}} پشت‌وند", "site-with-count": "{{count}} سایت", "site-with-count_plural": "{{count}} سایت", "plugin-with-count": "{{count}} افزونه", "plugin-with-count_plural": "{{count}} افزونه", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } }{ "setting": { "options": "Options", "plugin": "Module", "builtin-plugins": "Modules principaux", "plugin-options": "Options des modules", "folder-path-example-placeholder": "Exemple : dossier1/dossier2", "file-path-example-placeholder": "Exemple : dossier/note", "msg-restart-required": "Changer cette option requiert un redémarrage pour prendre effet", "editor": { "name": "Éditeur", "section-general": "Général", "section-behavior": "Comportement", "section-display": "Affichage", "option-spellcheck": "Vérification orthographique", "option-spellcheck-description": "Active le correcteur orthographique.", "spellcheck-languages": "Langues du correcteur", "spellcheck-languages-description": "Choisir les langues que le correcteur orthographique doit vérifier.", "spellcheck-languages-mac-description": "Le correcteur orthographique natif détectera automatiquement la langue utilisée sur macOS", "spellcheck-dict": "Dictionnaire du correcteur orthographique", "spellcheck-dict-empty": "Le dictionnaire du correcteur orthographique est vide.", "option-show-inline-title": "Afficher le titre comme entête", "option-show-inline-title-description": "Affiche le nom du fichier sous forme d'entête modifiable avec le contenu du fichier.", "option-readable-line-length": "Longueur de ligne lisible", "option-readable-line-description": "Limite la longueur de ligne maximale. Affiche moins de contenu à l'écran mais rend les longs paragraphes plus lisibles.", "option-strict-line-break": "Sauts de ligne stricts", "option-strict-line-break-description": "En mode aperçu, ignore les sauts de ligne selon les spécifications Markdown. Désactiver cette option permet que les sauts de ligne uniques s'affichent en mode aperçu.", "option-show-frontmatter": "Afficher les métadonnées", "option-show-frontmatter-description": "En mode aperçu, affiche les métadonnées comme bloc de code. Désactiver pour cacher les métadonnées.", "option-auto-pair-brackets": "Association automatique des crochets", "option-auto-pair-brackets-description": "Associe automatiquement les crochets et guillemets.", "option-auto-pair-markdown": "Association automatique de la syntaxe Markdown", "option-auto-pair-markdown-description": "Associe automatiquement les symboles pour : gras, italique, surlignage, soulignement et code.", "option-smart-indent-lists": "Indentation intelligente des listes", "option-smart-indent-lists-description": "Prise en charge automatique de l'indentation des marqueurs de liste.", "option-fold-heading": "Pliage de l'entête", "option-fold-heading-description": "Permet de plier toute la section sous une entête.", "option-fold-indent": "Pliage de l'indentation", "option-fold-indent-description": "Permet de plier des portions d'indentation identique, tels que les listes.", "option-default-new-tab-view": "Mode par défaut pour les nouveaux onglets", "option-default-new-tab-view-description": "Le mode par défaut dans lequel un nouvel onglet markdown est ouvert.", "option-default-new-tab-view-editing": "Mode édition", "option-default-new-tab-view-reading": "Mode lecture", "option-default-editing-mode": "Mode d'édition par défaut", "option-default-editing-mode-description": "Le mode d'édition par défaut dans un nouveau volet.", "option-default-editing-mode-source": "Mode source", "option-default-editing-mode-live-preview": "Aperçu en direct", "option-show-line-number": "Afficher le numéro de ligne", "option-show-line-number-description": "Afficher le numéro de ligne dans la marge.", "option-indentation-guide": "Afficher les guides d'indentation", "option-indentation-guide-description": "Affiche les lignes verticales pour relier entre elles les puces d'indentation de même niveau afin de fournir un guide visuel.", "option-use-tabs": "Utiliser des tabulations", "option-use-tabs-description": "Utilise des tabulations pour indenter lorsqu'avec la touche \"Tab\". Désactiver cette option pour utiliser des espaces.", "option-tab-size": "Taille de la tabulation", "option-tab-size-description": "Nombre d'espaces auquel une tabulation équivaut.", "option-rtl": "De droite à gauche (RTL)", "option-rtl-description": "Définit la direction du texte des notes à afficher de droite à gauche", "option-auto-convert-html": "Convertir automatiquement l'HTML", "option-auto-convert-html-description": "Convertit automatiquement l'HTML en Markdown lors du collage et du glisser-déposer à partir de pages Web. Utiliser Ctrl/Cmd + Maj + V pour coller sans mise en forme.", "option-vim-key-bindings": "Raccourcis clavier Vim", "option-vim-key-bindings-description": "Permet d'utiliser les raccourcis clavier Vim en mode éditeur.", "option-vim-key-bindings-mobile": "Sur les mobiles, ce réglage est propre à chaque appareil et n'est pas synchronisé.", "option-emacsy-keys": "Raccourcis clavier Emacs pour macOS", "option-emacsy-keys-description": "Permet d'utiliser les touches de navigation supplémentaires de style Emacs, qui sont standard sur macOS, mais peuvent interférer avec certains raccourcis.", "label-confirm-enable-vim": "Confirmer l'entrée en mode Vim", "label-vim-warning": "Le mode Vim permet une édition de texte efficace mais peut être contre-intuitive. Si vous n'êtes pas familier avec Vim, cette option peut donner l'impression qu'Obsidian a cessé de fonctionner.", "label-vim-test": "Pour vérifier que vous connaissez Vim, veuillez entrer la commande pour quitter Vim sans enregistrer ci-dessous : ", "label-vim-your-answer": "Votre réponse", "placeholder-enter-command": "Entrer la commande...", "button-confirm-enable-vim": "Activer Vim", "msg-vim-mode-enabled": "La commande étant correcte, le mode Vim est maintenant activé.", "msg-vim-mode-not-enabled": "La commande étant incorrecte, le mode Vim reste désactivé pour vous protéger.", "msg-vim-mode-please-enter-command": "Entrer la commande pour activer le mode Vim", "option-legacy-editor": "Utiliser l'ancien éditeur", "option-legacy-editor-description2": "L'ancien éditeur sera prochainement déprécié. Il n'est actuellement plus maintenant, et par conséquents, les bugs ne seront plus corrigés .", "label-legacy-deprecation": "Le nouvel éditeur est ici.", "label-legacy-deprecation-1": "Obsidian dispose désormais d'un tout nouvel éditeur, plus robuste et plus accessible.", "label-legacy-deprecation-2": "Il semble que vous utilisez toujours l'ancien éditeur, et nous pensons que vous apprécierez le nouveau éditeur.", "label-legacy-deprecation-choice": "Quel mode souhaitez-vous utiliser ?", "label-live-preview-description": "Une expérience plus moderne, où ce que l'on voit est ce que l'on obtient.", "label-source-mode-description": "Voir Markdown brut avec coloration syntaxique.", "button-start-new-editor": "Lancer le nouvel éditeur" }, "file": { "name": "Fichiers & Liens", "option-confirm-file-deletion": "Confirmer la suppression du fichier", "option-confirm-file-deletion-description": "Pour recevoir une invite de confirmation à la suppression du fichier.", "option-delete-destination": "Fichiers supprimés", "option-delete-destination-description": "Que faire des fichiers après les avoir supprimés ?", "option-choice-system-trash": "Déplacer vers la corbeille du système", "option-choice-vault-trash": "Déplacer vers la corbeille d'Obsidian (dossier .trash)", "option-choice-permanent-delete": "Supprimer définitivement", "option-always-update-links": "Toujours mettre à jour les liens internes", "option-always-update-links-description": "Mettre à jour automatiquement les liens internes après avoir renommé un fichier.", "option-new-note-location": "Emplacement par défaut de la nouvelle note", "option-new-note-location-description": "Où placer les nouvelles notes. Les paramètres des modules remplaceront ce paramètre.", "option-choice-vault-root": "Racine du coffre", "option-choice-current-folder": "Même dossier que le fichier", "option-choice-specified-folder": "Dans le dossier spécifié ci-dessous", "option-new-file-folder-path": "Dossier dans lequel créer de nouvelles notes", "option-new-file-folder-path-description": "Les nouvelles notes apparaîtront dans ce dossier. Les paramètres des modules primeront en cas de conflit.", "option-use-wiki-links": "Utiliser les [[Wikilinks]]", "option-use-wiki-links-description": "Générer automatiquement des Wikilinks pour les [[liens]] et ![[images]] à la place des liens Markdown et images. Désactiver cette option pour générer automatiquement les liens Markdown.", "option-show-unsupported-files": "Détecter toutes les extensions de fichiers", "option-show-unsupported-files-description": "Afficher les fichiers et leurs extensions, même si Obsidian ne peut pas les ouvrir nativement, afin que vous puissiez les lier et les voir dans l'explorateur de fichiers et le sélecteur rapide.", "option-link-autocompleted-format": "Format des nouveaux liens", "option-link-autocompleted-format-description": "Quel sera le format des liens lors de la génération automatique de liens internes.", "option-choice-shortest-linktext": "Chemin le plus court si possible", "option-choice-relative-path": "Chemin relatif au fichier", "option-choice-absolute-path": "Chemin absolu dans le coffre", "option-new-attachment-location": "Emplacement par défaut des nouvelles pièces jointes", "option-new-attachment-location-description": "Emplacement des pièces jointes nouvellement ajoutées.", "option-choice-subdirectory": "Dans le sous-dossier, sous le dossier actuel", "option-attachment-folder-path": "Chemin du dossier des pièces jointes", "option-attachment-folder-path-description": "Les nouveaux fichiers joints apparaîtront ici. Cela inclut les images créées par glisser-déposer ou collées et les enregistrements audio.", "option-attachment-subfolder-path": "Nom du sous-dossier", "option-attachment-subfolder-path-description": "Si votre dossier est sous \"coffre/dossier\", et votre nom de sous-dossier défini sur \"pièces jointes\", alors les pièces jointes seront enregistrées dans \"coffre/dossier/pièces jointes\".", "option-attachment-subfolder-path-placeholder": "pièces jointes", "option-excluded-files": "Fichiers exclus", "option-excluded-files-desc": "Les fichiers exclus seront soit masqués, soit moins visibles à divers endroits, notamment dans le sélecteur rapide, la suggestion de liens et la vue graphique.", "label-no-excluded-filters-applied": "Aucun filtre d'exclusion n'est appliqué pour le moment. Ajoutez-en un en dessous.", "label-excluded-filters-applied": "Les fichiers correspondant aux filtres suivants sont actuellement exclus :", "label-excluded-filter": "Filtre", "placeholder-excluded-filter": "Entrer un chemin ou un \"/regex/\"..." }, "appearance": { "name": "Apparence", "option-base-theme": "Thème de base", "option-base-theme-description": "Choisissez le jeu de couleurs par défaut d'Obsidian.", "option-accent-color": "Couleur d'accentuation", "option-accent-color-description": "Choisissez la couleur d'accentuation utilisée dans toute l'application.", "dark-theme": "Sombre", "light-theme": "Clair", "system-theme": "S'adapte automatiquement au système", "option-font": "Police", "option-advanced": "Avancé", "option-interface-font": "Police d'interface", "option-interface-font-description": "Définir la police de base pour tout Obsidian.", "option-text-font": "Police de texte", "option-text-font-description": "Définir la police pour l'édition et l'aperçu.", "option-monospace-font": "Police monospace", "option-monospace-font-description": "Définir la police pour des endroits tels que les blocs de code et de métadonnées.", "label-single-font-currently-in-effect": " Police actuellement utilisée : ", "label-multiple-fonts-currently-in-effect": " Les polices suivantes sont actuellement appliquées :", "option-font-placeholder": "Entrer le nom de la police...", "label-no-custom-font-set": "Aucune police personnalisée n'est appliquée pour le moment. Ajoutez-en une ci-dessous.", "label-font-applied": "La première police de cette liste qui est présente dans votre système sera appliquée.", "msg-font-not-found": "Cette police n'est pas détectée dans votre système.", "msg-font-found": "Cette police est détectée dans votre système.", "label-font-name": "Nom de la police", "option-community-themes": "Ouvrir les thèmes communautaires", "option-community-themes-description": "Prévisualiser et utiliser des thèmes incroyables créés par la communauté.", "button-browse-community-themes": "Parcourir", "option-font-size": "Taille de police", "option-font-size-description": "Taille de police en pixels qui affecte l'éditeur et l'aperçu.", "option-font-size-action": "Réglage rapide de la taille de police ", "option-font-size-action-description": "Ajuster la taille de la police à l'aide de Ctrl + Molette ou à l'aide du geste de zoom par pincement du trackpad.", "option-themes": "Thèmes", "option-manage-themes-description": "Gérer les thèmes installés et parcourir les thèmes de la communautés", "option-theme-button-manage": "Gérer", "option-choice-none": "Aucun", "option-native-menus": "Menus natifs", "option-native-menus-desc": "Les menus de l'application correspondent au système d'exploitation. Ils ne seront pas affectés par votre thème.", "button-reload-themes": "Recharger les thèmes", "msg-reloaded-themes": "Thèmes CSS personnalisés rechargés.", "button-open-themes-folder": "Ouvrir le dossier des thèmes", "option-css-snippets": "Extraits CSS", "label-no-css-snippets-found": "Aucun extrait de code CSS trouvé dans le dossier des extraits de code.", "no-snippet-description": "Les extraits CSS sont stockés dans \"{{path}}\".", "button-reload-snippets": "Recharger les extraits", "button-open-snippets-folder": "Ouvrir le dossier des extraits de code", "msg-reloaded-snippets": "Extraits CSS rechargés.", "option-toggle-snippet-description": "Appliquer l'extrait de code CSS à partir du fichier \"{{path}}\".", "label-installed-themes": "Thèmes installés", "label-screenshot-unavailable": "Capture d'écran indisponible", "label-default-theme": "Défaut", "tooltip-click-to-enlarge": "Cliquer pour agrandir", "button-update": "Mettre à jour", "label-currently-selected": "Selectionné", "option-frame-style": "Style du cadre des fenêtres", "option-frame-description": "Détermine le style de la barre de titre des fenêtres Obsidian. Nécessite un redémarrage complet pour prendre effet.", "option-frame-hidden": "Caché (défaut)", "option-frame-obsidian": "Cadre Obsidian", "option-frame-native": "Cadre natif", "option-configure-ribbon": "Menu bandeau", "option-configure-ribbon-desc": "Configurer les commandes apparaissant dans le menu bandeau de cette barre de navigation.", "option-mobile-quick-ribbon-item": "Élement du bandeau d'accès rapide", "option-mobile-quick-ribbon-item-desc": "Taper sur l'élément du bandeau dans le menu de navigation activera cet élément. Maintenir appuyer permet d'afficher le menu.", "button-configure": "Configurer", "label-additional-ribbon-items": "Autre éléments du bandeau", "label-modal-configuration": "Configuration du bandeau", "label-modal-configuration-desc": "Choisir les éléments que vous voulez activer dans le bandeau. Faire un glisser-déposer permet de modifier l'ordre.", "option-show-view-header": "Afficher la barre de titre des onglets", "option-show-view-header-desc": "Afficher le menu d'entête en amont de chaque onglet.", "msg-updates-found": "Trouvé {{count}} thème à mettre à jour.", "msg-updates-found_plural": "Trouvé {{count}} thèmes à mettre à jour.", "button-check-for-updates": "Vérifier les mises-à-jour", "button-view-updates": "Afficher les mises-à-jour", "button-update-all-themes": "Tout mettre à jour", "label-current-themes": "Thème communautaire actuel", "label-currently-installed": "Vous avez actuellement {{count}} thème installé.", "label-currently-installed_plural": "Vous avez actuellement {{count}} thèmes installés." }, "hotkeys": { "name": "Raccourcis clavier", "prompt-filter": "Filtrer...", "tooltip-delete-hotkey": "Supprimer le raccourci clavier", "label-waiting-for-hotkey-press": "Appuyer sur la touche de raccourci...", "tooltip-restore-default": "Restaurer par défaut", "tooltip-customize-command": "Personnaliser la commande", "tooltip-hotkey-single-conflict": "Ce raccourci clavier est en conflit avec \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "Ce raccourci clavier est en conflit avec {{count}} autres commandes", "label-blank-hotkey": "Indéfini" }, "about": { "name": "À propos", "label-commercial-license": "Licence commerciale", "label-license-key": "Clé de licence", "license-key-placeholder": "Votre clé de licence...", "label-activate-license": "Activer une licence", "button-activate": "Activer", "label-unknown-version": "Inconnue", "label-current-version": "Version actuelle : ", "label-install-version": "(Version de l'installateur : {{version}})", "label-up-to-date": "Votre application est à jour !", "label-read-changelog": "Lire le journal des modifications.", "label-manual-update-required": "Pour profiter des dernières fonctionnalités et recevoir les derniers correctifs de sécurité, Obsidian nécessite une mise à jour majeure de son installateur. Vous devez télécharger et réinstaller Obsidian manuellement.", "label-download": "Télécharger", "label-new-version-ready": "Une nouvelle version est prête à être installée.", "label-relaunch-to-update": "Relancer l'application pour faire la mise à jour.", "label-disabled-updates": "Les mises à jour sont désactivées.", "label-checking-for-updates": "Recherche des mises à jour...", "button-relaunch": "Relancer", "button-check-for-updates": "Rechercher les mises à jour", "option-auto-update": "Mises à jour automatiques", "option-auto-update-description": "Désactiver pour empêcher l'application de chercher les mises à jour.", "option-get-help": "Obtenir de l'aide", "option-get-help-description": "Obtenir de l'aide sur l'utilisation d'Obsidian", "button-open": "Ouvrir", "option-language": "Langue", "option-language-description": "Changer la langue d'affichage.", "option-insider-build": "Recevoir les pré-versions (Insider)", "option-insider-build-description": "Mise à jour automatique sur des pré-versions pour essayer des nouvelles fonctionnalités. Notez que ces versions peuvent être moins stables.", "option-advanced": "Avancé", "option-hw-acceleration": "Accélération matérielle", "option-hw-acceleration-description": "Active l'accélération matérielle. Utilise votre GPU pour rendre Obsidian plus fluide.", "option-hw-acceleration-warning": "Si vous désactivez cette option, les performances de l'application seront sévèrement dégradées.", "option-config-location": "Modifier le dossier de configuration", "option-config-location-description": "Utilise un dossier de configuration différent de celui par défaut. Il doit commencer par un point.", "option-config-location-warning": "L'emplacement de configuration doit être un nom de dossier valide commençant par un point.", "label-license": "Licence", "label-your-commercial-license-key": "Votre clé commerciale est : \"{{key}}\".", "label-commercial-license-info": "Enregistré à \"{{company}}\" pour {{seats}} utilisateurs. Valable jusqu'au {{expiry}}.", "label-validating-commercial-license": "Validation en cours...", "label-invalid-commercial-license": "Licence invalide : ", "button-remove-commercial-license": "Supprimer", "option-catalyst": "Licence Catalyst", "option-catalyst-desc": "Vous avez actuellement la licence {{tier}} Catalyst. Merci pour votre soutien !", "option-catalyst-desc-no-license": "Vous n'avez pas de licence Catalyst pour le moment. La licence Catalyst est un don unique pour soutenir le développement d'Obsidian.", "label-app": "Application" }, "account": { "name": "Compte", "option-your-account": "Votre compte", "option-your-account-desc": "Vous êtes actuellement connecté avec {{name}} ({{email}}).", "option-your-account-desc-no-login": "Vous n'êtes pas connecté pour le moment. Un compte n'est nécessaire que pour Obsidian Sync, Obsidian Publish et préversions Catalyst.", "button-manage-settings": "Gérer les paramètres", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Mise à niveau", "option-commercial-license": "Licence commerciale", "option-commercial-license-desc": "Si vous utilisez Obsidian à des fins commerciales, vous devrez peut-être obtenir une licence commerciale.", "button-purchase": "Acheter", "button-log-out": "Se déconnecter", "label-log-in": "Se connecter", "label-sign-up": "S'inscrire", "label-email": "Adresse électronique", "placeholder-email": "Votre adresse électronique...", "label-password": "Mot de passe", "placeholder-password": "Votre mot de passe...", "button-login": "Se connecter", "message-empty-email": "L'adresse électronique ne peut pas être vide.", "message-invalid-email": "L'adresse électronique est invalide.", "message-empty-password": "Le mot de passe ne peut pas être vide.", "message-login-failed": "Échec de connexion, merci de vérifier à nouveau l'adresse électronique et le mot de passe.", "label-no-account": "Vous n'avez pas de compte ? ", "link-sign-up-now": "S'inscrire maintenant" }, "core-plugin": { "plugin-list": "Liste des modules principaux", "option-search-plugin": "Rechercher parmi les modules principaux", "option-search-plugin-description": "Filtrer les modules par nom ou description.", "placeholder-search-plugin": "Rechercher parmi les modules..." }, "third-party-plugin": { "name": "Modules complémentaires", "option-restricted-mode": "Mode restreint", "option-restricted-mode-description": "Le mode restreint est désactivé. Activez cette option pour désactiver les modules complémentaires.", "button-turn-on": "Activer", "option-browse-community-plugins": "Modules complémentaires", "option-browse-community-plugins-description": "Parcourir et installer des modules complémentaires créés par notre formidable communauté...", "button-browse": "Parcourir", "label-exit-restricted-mode": "Quitter le mode restreint", "label-exit-restricted-mode-description-1": "Les modules complémentaires, comme tout autre logiciel que vous installez, peuvent potentiellement causer des problèmes d'intégrité et de sécurité des données.", "label-exit-restricted-mode-description-2": "La sécurité des modules est importante pour nous. Voici ce que nous faisons :", "label-exit-restricted-mode-description-3": "Malgré nos efforts, il existe toujours une petite chance qu'un module complémentaire se comporte mal.", "label-code-review": "Examen initial du code", "label-code-review-desc": "Les modules sont soumises à un examen initial du code par notre équipe avant d'apparaître dans la boutique.", "label-open-source": "Open source", "label-open-source-desc": "La plupart des modules sont open source sur GitHub, ce qui vous permet d'inspecter le code vous-même.", "label-peer-audit": "Audit par des pairs", "label-peer-audit-desc": "Nous avons une grande communauté de développeurs qui veillent les uns sur les autres.", "label-report-mechanism": "Dispositif de rapport", "label-report-mechanism-desc": "Nous assurons le suivi et le retrait des modules défectueux sur signalement de l'utilisateur.", "label-exit-restricted-mode-disable-confirmation": "Souhaitez-vous quitter le mode restreint pour activer les modules complémentaires ? Nous vous recommandons vivement de faire des sauvegardes de vos données avant de le faire.", "label-learn-more": "En savoir plus sur la sécurité des modules", "button-turn-on-community-plugins": "Activez les modules complémentaires", "label-trust-author": "Faites-vous confiance à l'auteur de ce coffre ?", "label-trust-author-description-1": "Vous ouvrez ce coffre pour la première fois, et il est livré avec quelques modules.", "label-trust-author-description-2": "Si vous avez obtenu ce coffre de quelqu'un d'autre, veuillez noter que les modules d'origines inconnues peuvent présenter des risques pour la sécurité.", "label-trust-author-description-3": "Si vous ne faites pas entièrement confiance à l'auteur de ce coffre, nous vous recommandons de rester en mode restreint, afin que les modules d'extension de ce coffre ne s'exécutent pas.", "button-enable-plugins": "Faites confiance à l'auteur et activez les modules", "button-dont-trust-author": "Parcourir le coffre en mode restreint", "placeholder-community-plugins": "Recherche de modules complémentaires...", "msg-failed-load-plugins": "Impossible de charger les modules complémentaires.", "label-installed": "Installé", "button-install": "Installer", "button-enable": "Activer", "button-disable": "Désactiver", "button-copy-share-link": "Copier le lien de partage", "button-donate": "Faire un don", "label-no-results-found": "Aucun résultat trouvé.", "msg-failed-to-load-manifest": "Échec du chargement du manifeste du module.", "label-version": "Version : {{version}}", "label-currently-installed-version": " (actuellement installée : {{version}})", "label-by-author": "Par ", "label-repository": "Dépôt : ", "label-last-update": "Dernière mise à jour : ", "tooltip-view-last-update": "Voir la dernière mise à jour", "label-unsupported": "Ce module complémentaire ne prend pas en charge cet appareil.", "button-update": "Mise à jour", "label-no-readme": "Ce module complémentaire n'a pas fourni de fichier README.", "msg-installing-plugin": "Installation du module \"{{name}}\"...", "msg-failed-to-install-plugin": "Échec de l'installation du module \"{{name}}\".", "msg-successfully-installed-plugin": "Le module \"{{name}}\" a été installé avec succès.", "label-installed-plugins": "Modules installés", "button-reload-plugins": "Recharger les modules complémentaires", "msg-reloaded-third-party-plugins": "Modules complémentaires rechargés.", "label-uninstall": "Désinstaller", "label-uninstall-plugin": "Désinstaller le module complémentaire", "label-uninstall-plugin-confirmation": "Êtes-vous sûr de vouloir désinstaller ce module ? Cela supprimera aussi son dossier.", "button-open-plugins-folder": "Ouvrir le dossier des modules complémentaires", "button-check-for-updates": "Rechercher des mises à jour", "button-update-all-plugins": "Tout mettre à jour", "label-current-plugins": "Modules actuels", "label-currently-installed": "Il y a {{count}} module installé.", "label-currently-installed_plural": "Il y a {{count}} modules installés.", "label-debug-startup-time": "Débogage du temps de démarrage", "label-debug-startup-time-description": "Afficher un message avec le temps que chaque module complémentaire a pris pour s'initialiser lors du démarrage de l'application.", "msg-no-updates-found": "Aucune mise à jour de module complémentaire trouvée.", "msg-updates-found": "{{count}} module peut être mis à jour.", "msg-updates-found_plural": "{{count}} modules peuvent être mis à jour.", "msg-update-plugin": "Mettre à jour vers la version {{version}}", "option-search-installed-plugin": "Rechercher dans les modules installés", "option-search-installed-plugin-description": "Filtrer les modules installés par nom ou par description", "placeholder-search-installed-plugin": "Rechercher les modules installés...", "show-installed-only": "Afficher uniquement les modules installés", "label-donate-modal-title": "Faire un don pour soutenir {{name}}", "label-donate-modal-text1": "Les développeurs de modules sont des bénévoles de la communauté qui réalisent des trucs incroyables par passion. Si vous trouvez ce module utile, veuillez envisager de faire un don pour soutenir son développement.", "label-donate-modal-text2": "100% des dons iront directement au développeur du module ; Obsidian ne prend pas de commission. La plateforme de financement qu'ils choisissent peut prélever des frais de transaction.", "label-donate-modal-text3": "Merci pour votre généreux soutien !", "label-support-this-plugin": "Soutenir ce module :", "label-search-summary": "Affichage de {{pluginCount}} : ", "label-by-popularity": "Les plus téléchargés", "label-by-released": "Récemment publiés", "label-by-updated": "Récemment mis à jour", "label-alphabetical": "Alphabétique", "label-last-updated": "Mise à jour {{time}}" }, "mobile-toolbar": { "name": "Barre d'outils mobile", "option-configure-quick-action": "Configurer l'action rapide", "option-configure-quick-action-description": "Configure la commande à déclencher lorsque vous tirez du haut vers le bas. La commande actuelle est définie sur \"{{command}}\".", "button-configure": "Configurer", "placeholder-select-quick-action": "Sélectionner l'action rapide...", "manage-toolbar-options": "Gérer les options de la barre d'outils", "option-internal-link": "Ajouter un lien interne", "option-internal-embed": "Intégrer un aperçu", "option-tag": "Ajouter un mot-clé", "option-heading": "Basculer l'entête", "option-strikethrough": "Mettre en barré", "option-highlight": "Mettre en surbrillance", "option-code": "Basculer en code", "option-blockquote": "Basculer en bloc de citation", "option-markdown-link": "Ajouter un lien Markdown", "option-bullet-list": "Basculer en liste à puces", "option-numbered-list": "Basculer en liste numérotée", "option-indent-list": "Indenter l'item de liste", "option-unindent-list": "Désindenter l'item de liste", "option-undo": "Annuler", "option-redo": "Rétablir", "option-move-caret-up": "Déplacer le curseur vers le haut", "option-move-caret-down": "Déplacer le curseur vers le bas", "option-move-caret-left": "Déplacer le curseur vers la gauche", "option-move-caret-right": "Déplacer le curseur vers la droite", "option-first-line": "Aller à la première ligne", "option-last-line": "Aller à la dernière ligne", "option-toggle-keyboard": "Basculer le clavier", "option-configure-toolbar": "Configurer la barre d'outils mobile", "option-added-options": "Options ajoutées", "option-more-toolbar-options": "Plus d'options de barre d'outils", "option-attach": "Insérer une pièce jointe", "option-add-command": "Ajouter une commande globale", "option-add-command-description": "Sélectionner une commande globale à ajouter à la barre d'outils." } }, "editor": { "search": { "placeholder-find": "Chercher", "placeholder-replace": "Remplacer", "label-previous": "Précédent", "label-next": "Suivant", "label-all": "Tout", "label-exit-search": "Quitter la recherche", "label-replace": "Remplacer", "label-replace-all": "Remplacer tout" }, "link-suggestion": { "label-type-hash": "Saisir #", "label-link-heading": "pour lier l'entête", "label-type-block": "Saisir ^", "label-link-block": "pour lier les blocs", "label-type-pipe": "Saisir |", "label-change-display-text": "pour changer le texte d'affichage", "label-no-match-found": "Aucune correspondance trouvée" }, "spellcheck": { "no-suggestion": "Aucune suggestion...", "add-to-dictionary": "Ajouter au dictionnaire" }, "menu": { "edit-link": "Éditer le lien" }, "heading-suggestion": { "label-no-heading": "Aucun entête", "label-heading-level": "Entête {{level}}" }, "print-modal": { "title": "Exporter au format PDF", "caption": "Exporter \"{{filename}}\" au format PDF avec les réglages ci-dessous.", "setting-page-size": "Format de la page", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal US", "setting-page-size-letter": "Lettre US", "setting-page-size-tabloid": "Tabloïd", "setting-include-file-name": "Inclure le nom du fichier comme entête", "setting-landscape": "Paysage", "setting-margin": "Marge", "setting-margin-default": "Défaut", "setting-margin-minimal": "Minimale", "setting-margin-none": "Aucune", "setting-downscale-percent": "Mise à l'échelle", "button-export-to-pdf": "Exporter au format PDF" }, "link-popover": { "tooltip-follow-link": "Suivre le lien", "tooltip-open-link": "Ouvrir le lien", "tooltip-search-tag": "Mot-clé de recherche" } }, "interface": { "embed-cannot-find": "Impossible de trouver :", "embed-open-in-default-app-tooltip": "Ouvrir avec l'application par défaut", "empty-sidebar": "La barre latérale est vide, essayez de faire glisser un volet ici.", "sidebar-expand": "Développer", "sidebar-collapse": "Réduire", "msg-fail-to-save-file": "Échec de l'enregistrement du fichier \"{{filepath}}\". {{message}}.", "no-file": "Pas de fichier", "msg-file-changed": "\"{{file}}\" a été modifié hors de l'application. Fusion automatique des modifications.", "switch-vault": "Ouvrir un autre coffre", "help": "Aide", "settings": "Paramètres", "drag-to-rearrange": "Glisser pour réorganiser", "msg-switched-to-read": "Mode d'affichage par défaut basculé sur Aperçu.", "msg-switched-to-edit": "Mode d'affichage par défaut basculé sur Éditeur.", "msg-upgrade-installer": "Pour utiliser cette fonctionnalité, merci de réinstaller Obsidian avec le dernier programme d'installation disponible sur notre site web.", "tooltip-restore-default-settings": "Restaurer les paramètres par défaut", "label-copy": "Copier dans le presse-papier", "copied_generic": "Copié dans votre presse-papier", "copied": "{{item}} copié dans le presse-papier", "url": "URL", "msg-open-file-through-uri": "Fichier ouvert \"{{path}}\"", "msg-file-not-found-through-uri": "Le fichier \"{{name}}\" n'a pas été trouvé.", "delete-action-short-name": "Supprimer", "msg-indexing": "Obsidian indexe votre coffre...\nCela ne devrait se produire qu'une seule fois.\nCertaines fonctionnalités peuvent ne pas être disponibles tant que le processus n'est pas terminé.", "msg-indexing-complete": "Indexation terminée.", "msg-sandbox-vault": "C'est un coffre test.\nLes modifications faites dans ce coffre seront perdues.", "label-enter-to-create": "Enter pour créer", "label-update-available": "Mise à jour disponible", "label-debug-info": "Infos de débogage", "button-learn-more": "En savoir plus", "button-not-now": "Pas maintenant", "button-add": "Ajouter", "button-manage": "Gérer", "label-new-tab": "Nouvel onglet", "msg-tab-busy": "Cet onglet est actuellement occupé, veuillez réessayer plus tard.", "empty-state": { "no-file-open": "Aucun fichier n'est ouvert", "create-new-file": "Créer un nouveau fichier", "go-to-file": "Aller au fichier", "see-recent-files": "Voir les fichiers récents", "close": "Fermer", "unknown-pane-title": "Le module complémentaire n'est plus actif.", "unknown-pane-desc": "Le module complémentaire qui créait ce volet ({{type}}) a disparu." }, "menu": { "edit-view": "Éditer (Ctrl/Cmd + Clic pour éditer dans un nouveau volet)", "read-view": "Mode actuel : Aperçu", "switch-to-edit-view": "Cliquer pour modifier", "switch-to-read-view": "Cliquer pour lire", "mod-click-open-new-tab": "{{key}}+Clique pour ouvrir dans un nouvel onglet", "find": "Chercher...", "replace": "Remplacer...", "edit": "Éditer", "preview": "Aperçu", "more-options": "Plus d'options", "close": "Fermer", "close-others": "Fermer les autres", "close-right": "Fermer les onglets vers la droite", "pin": "Épingler", "unpin": "Désépingler", "unlink-tab": "Délier l'onglet", "link-tab": "Lier avec l'onglet...", "toggle-source-mode": "Mode source", "toggle-reading-view": "Mode lecture", "delete-file": "Supprimer le fichier", "create-file": "Créer ce fichier", "open-link": "Ouvrir le lien", "open-in-new-tab": "Ouvrir dans un nouvel onglet", "open-to-the-right": "Ouvrir vers la droite", "copy-url": "Copier le lien", "close-current-tab": "Fermer l'onglet actuel", "copy": "Copier", "cut": "Couper", "paste": "Coller", "paste-as-plain-text": "Coller en texte brut", "select-all": "Tout sélectionner", "rename-heading": "Renommer cet entête...", "rename-blockid": "Renommer cet ID de bloc...", "open-in-new-window": "Ouvrir dans une nouvelle fenêtre", "move-to-new-window": "Déplacer dans une nouvelle fenêtre", "open-in-browser": "Ouvrir dans le navigateur", "stack-tabs": "Empiler les onglets", "unstack-tabs": "Désempiler les onglets" }, "tooltip": { "click-to-expand": "Cliquer pour afficher", "click-to-collapse": "Cliquer pour réduire", "alias": "Alias", "not-created-yet": "Pas encore créé, cliquer pour créer" }, "start-screen": { "label-version": "Version", "option-open-folder-as-vault": "Ouvrir un dossier comme coffre", "option-open-folder-as-vault-description": "Choisissez un dossier de fichiers Markdown existant.", "option-create-vault": "Créer un nouveau coffre", "option-create-vault-description": "Crée un nouveau coffre Obsidian dans un dossier.", "option-connect-obsidian-sync": "Se connecter à Obsidian Sync", "option-connect-obsidian-sync-description": "Configure un coffre synchronisé avec un coffre distant existant.", "option-new-vault-name": "Nom du coffre", "option-new-vault-name-description": "Choisir un nom pour votre superbe coffre.", "option-new-vault-location": "Emplacement", "option-new-vault-location-description": "Choisir un emplacement où mettre votre nouveau coffre.", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Révéler le coffre dans l'explorateur système", "option-reveal-vault-in-explorer-mac": "Révéler le coffre dans le Finder", "option-rename-vault": "Renommer le coffre...", "msg-error-rename-exists": "Il y a déjà un coffre avec ce nom.", "msg-error-nested": "Impossible de déplacer le coffre dans un de ses sous-dossiers.", "msg-error-rename-open": "Impossible de renommer un coffre actuellement ouvert.", "msg-rename-failed": "Échec du renommage du coffre.", "msg-rename-success": "Le coffre a été renommé avec succès.", "option-move-vault": "Déplacement du coffre...", "msg-move-select-dest": "Sélectionner le dossier de destination", "msg-error-move-exists": "Il y a déjà un coffre dans le dossier de destination.", "msg-error-move-open": "Impossible de déplacer un coffre actuellement ouvert.", "msg-move-failed": "Échec du déplacement du coffre.", "msg-move-success": "Le coffre a été déplacé avec succès.", "option-remove": "Supprimer de la liste", "button-quick-start": "Démarrage rapide", "button-open": "Ouvrir", "button-browse": "Parcourir", "button-connect": "Connecter", "button-create-vault": "Créer", "button-back": "Retour", "msg-empty-vault-name": "Le nom du coffre ne peut pas être vide.", "msg-invalid-folder": "Merci de choisir un dossier valide.", "msg-failed-to-create-vault": "Échec de la création du coffre.", "msg-failed-to-create-vault-at-location": "Impossible de créer le coffre à cet emplacement. Merci de vérifier l'emplacement et ses permissions d'accès.", "msg-error-failed-to-open-vault": "Échec de l'ouverture.", "msg-error-remove-current-open-vault": "Impossible de supprimer un coffre en cours d'utilisation.", "option-get-help": "Obtenir de l'aide", "option-user-email": "Email", "placeholder-your-email": "Votre email...", "option-user-password": "Mot de passe", "placeholder-your-password": "Votre mot de passe...", "button-sign-in": "Connexion", "button-setup": "Configuration", "option-connect-vault-desc": "Créez un coffre synchronisé sur cet appareil.", "tooltip-own-vault": "Il s'agit d'un coffre distant dont vous êtes le propriétaire.", "tooltip-shared-vault": "Il s'agit d'un coffre distant partagé avec vous." }, "drag-and-drop": { "insert-link-here": "Insérer le lien ici", "insert-links-here": "Insérer des liens ici", "move-into-folder": "Déplacer dans \"{{folder}}\"", "star-this-file": "Ajouter ce fichier aux favoris", "star-these-files": "Ajouter ces fichiers aux favoris", "open-in-this-tab": "Ouvrir dans cet onglet", "open-as-tab": "Ouvrir comme nouvel onglet" }, "window": { "maximize": "Maximiser", "minimize": "Minimiser", "restore-down": "Restaurer", "close-window": "Fermer la fenêtre", "go-back": "Précédent", "go-forward": "Suivant" }, "start-up": { "loading-obsidian": "Chargement d'Obsidian", "obsidian-load-error": "Une erreur s'est produite lors du chargement d'Obsidian.", "button-reload-app": "Recharger l'application", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "Ouvrir un autre coffre", "loading-components": "Chargement des composants...", "loading-plugins": "Chargement des modules...", "loading-vault": "Chargement du coffre...", "msg-failed-to-load-vault": "Échec du chargement du coffre : ", "loading-cache": "Chargement du cache...", "loading-workspace": "Chargement de l'espace de travail..." }, "mobile": { "action-import": "Importer dans le coffre", "action-choose-file-to-insert": "Choisir un fichier à insérer ", "action-insert-text-into-file": "Insérer du texte dans {{filename}}", "action-insert-link-into-file": "Insérer le lien dans {{filename}}", "msg-importing": "Importation...", "msg-import-success": "Importation réussie", "msg-failed-to-import-file": "Échec de l'importation du fichier {{filename}}", "msg-back-again-to-exit": "Appuyez à nouveau sur la touche retour pour sortir." }, "help-screen": { "label-official-help-site": "Site officiel du support", "label-official-help-site-desc": "Lisez la documentation d'aide officielle d'Obsidian, disponible en plusieurs langues.", "action-visit": "Visiter", "label-discord-chat": "Discussion sur Discord", "label-discord-chat-desc": "Discord est le meilleur endroit pour discuter avec d'autres utilisateurs expérimentés d'Obsidian dans le monde entier.", "action-join": "Rejoindre", "label-forum": "Forum officiel", "label-forum-desc": "Aidez-vous les uns les autres, postez des demandes de fonctionnalités, signalez les bogues et ayez des discussions approfondies sur la gestion des connaissances.", "label-sandbox-vault": "Coffre de test", "label-sandbox-vault-desc": "Jouez et expérimentez avec les différentes fonctionnalités. Notez que vos modifications ne seront pas enregistrées." } }, "commands": { "save-file": "Enregistrer le fichier courant", "follow-cursor-link": "Suivre le lien sous le curseur", "open-cursor-link-in-new-tab": "Ouvrir le lien sous le curseur dans un nouvel onglet", "open-cursor-link-to-the-right": "Ouvrir le lien sous le curseur vers la droite", "open-cursor-link-in-new-window": "Ouvrir le lien sous le curseur dans une nouvelle fenêtre", "navigate-tab-above": "Focus sur le groupe d'onglets ci-dessus", "navigate-tab-below": "Focus sur le groupe d'onglets ci-dessous", "navigate-tab-left": "Focus sur le groupe d'onglets vers la gauche", "navigate-tab-right": "Focus sur le groupe d'onglets vers la droite", "toggle-pin": "Basculer l'épingle", "split-right": "Fractionner vers la droite", "split-down": "Fractionner vers le bas", "toggle-stacked-tabs": "Faire basculer les onglets empilés", "navigate-back": "Naviguer en arrière", "navigate-forward": "Naviguer vers l'avant", "use-dark-mode": "Utiliser l'affichage sombre", "use-light-mode": "Utiliser l'affichage clair", "change-theme": "Changer le thème", "search-current-file": "Rechercher dans le fichier courant", "search-replace-current-file": "Rechercher & remplacer dans le fichier courant", "open-settings": "Ouvrir les paramètres", "open-help": "Ouvrir l'aide", "toggle-edit": "Basculer entre Édition et Aperçu", "toggle-source-mode": "Basculer entre aperçu en direct et mode source", "delete-current-file": "Supprimer le fichier actuel", "new-tab": "Nouvel onglet", "close-all-tabs": "Fermer tous les onglets", "close-active-tab": "Fermer l'onglet actuel", "close-other-tabs": "Fermer tous les autres onglets", "toggle-left-sidebar": "Basculer la barre latérale gauche", "toggle-right-sidebar": "Basculer la barre latérale droite", "toggle-default-new-tab-mode": "Basculer le mode par défaut pour les nouveaux onglets", "focus-editor": "Focus sur l'éditeur", "toggle-fold": "Basculer le pli sur la ligne actuelle", "fold-all": "Plier tous les titres et listes", "unfold-all": "Déplier tous les titres et listes", "fold-more": "Plier plus", "fold-less": "Plier moins", "swap-line-up": "Déplacer la ligne vers le haut", "swap-line-down": "Déplacer la ligne vers le bas", "remove-heading": "Supprimer l'entête", "toggle-heading": "Définir comme entête {{level}}", "toggle-bold": "Mettre en gras la sélection", "toggle-italics": "Mettre en italique la sélection", "toggle-highlight": "Mettre en surbrillance la sélection", "toggle-comments": "Mettre en commentaire la sélection", "insert-link": "Insérer un lien", "toggle-spellcheck": "Activer la vérification orthographique", "delete-paragraph": "Supprimer le paragraphe", "toggle-checklist": "Basculer l'état de l'élément de la checklist", "cycle-list-checklist": "Basculer entre puce/case à cocher", "insert-callout": "Insérer une mise en avant (callout)", "edit-file-title": "Modifier le titre du fichier", "copy-path": "Copier le chemin du fichier", "copy-url": "Copier l'url Obsidian", "export-pdf": "Exporter en PDF", "reload": "Recharger l'application sans enregistrer", "undo-close-tab": "Annuler la fermeture de l'onglet", "context-menu": "Afficher le menu contextuel sous le curseur", "show-debug-info": "Afficher les informations de débogages", "always-on-top": "Rendre la fenêtre toujours visible", "zoom-in": "Zoom avant", "zoom-out": "Zoom arrière", "reset-zoom": "Reset zoom", "toggle-preview": "Basculer entre édition et aperçu", "move-to-new-window": "Déplacer le volet actuel vers une nouvelle fenêtre", "open-in-new-window": "Ouvrir le volet actuel dans une nouvelle fenêtre", "rename-current-file": "Renommer le fichier actuel" }, "dialogue": { "label-link-affected": "Cela met à jour {{links}} dans {{files}}.", "msg-updated-links": "{{links}} mis à jour dans {{files}}.", "label-update-links": "Mettre à jour les liens", "label-confirm-update-link-to-file": "Mettre à jour les liens internes qui renvoient à ce fichier ?", "button-always-update": "Toujours mettre à jour", "button-just-once": "Cette fois uniquement", "button-do-not-update": "Ne pas mettre à jour", "label-confirm-deletion": "Confirmer la suppression de \"{{filename}}\" ?", "label-move-to-system-trash": "Il sera déplacé vers la corbeille de votre système.", "label-move-to-vault-trash": "Il sera déplacé vers votre corbeille Obsidian, qui se trouve dans le dossier caché \".trash\" de votre coffre.", "label-permanent-delete": "Le fichier sera définitivement supprimé.", "label-non-empty-folder": "Ce dossier n'est pas vide.", "label-delete-folder-warning": "En cas de confirmation, tous les fichiers de ce dossier seront supprimés.", "label-delete-folder": "Supprimer le dossier", "button-delete": "Supprimer", "button-delete-do-not-ask-again": "Supprimer et ne plus redemander", "label-do-not-ask-again": "Ne pas redemander", "label-existing-backlink": "Il y a actuellement {{links}} rétrolien pointant vers cette note.", "label-existing-backlink_plural": "Il y a actuellement {{links}} rétroliens pointant vers cette note.", "label-delete-file": "Supprimer le fichier", "button-manage": "Gérer", "button-cancel": "Annuler", "button-done": "Valider", "button-save": "Sauvegarder", "button-stop": "Stop", "button-continue": "Continuer", "preparing-pdf": "Préparation du PDF...", "label-rename-file": "Renommer le fichier", "label-new-name": "Nouveau nom", "msg-rename-success": "Fichier correctement renommé.", "label-rename-heading": "Renommer l'entête", "label-rename-blockid": "Renommer l'ID du bloc" }, "menu-items": { "new-file": "Créer une note", "new-file-to-the-right": "Créer une note à droite", "new-window": "Nouvelle fenêtre", "open-switcher": "Ouvrir rapidement...", "open-vault": "Ouvrir le coffre...", "close-tab": "Fermer l'onglet", "close-window": "Fermer la fenêtre", "find": "Trouver", "replace": "Remplacer", "insert-callout": "Mise en avant (callout)", "insert-markdown-link": "Lien Markdown", "insert-wikilink": "Lien", "set-heading": "Entête {{level}}", "no-heading": "Aucune entête", "insert-quote": "Citation", "export-pdf": "Export PDF", "toggle-bullet-list": "Liste à puces", "toggle-numbered-list": "Liste numérotée", "toggle-checklist": "Liste de tâches", "toggle-bold": "Gras", "toggle-code": "Code", "toggle-comment": "Commentaire", "toggle-italics": "Italique", "toggle-highlight": "Surligné", "toggle-strikethrough": "Barré", "toggle-comments": "Commentaires", "fold-all": "Tout plier", "unfold-all": "Tout déplier", "fold-more": "Plier plus", "fold-less": "Plier moins", "source-mode": "Mode source", "reading-view": "Mode lecture", "show-debug-info": "Afficher les informations de débogages.", "navigate-back": "Naviguer vers l'arrière", "navigate-forward": "Naviguer vers l'avant", "toggle-left-sidebar": "Basculer la barre latérale gauche", "toggle-right-sidebar": "Basculer la barre latérale droite", "split-right": "Fractionner à droite", "split-down": "Fractionner en bas", "release-notes": "Notes de mise à jour" }, "plugins": { "name": "Extensions", "file-explorer": { "name": "Explorateur de fichiers", "desc": "Voir tous les fichiers de votre coffre.", "action-open": "Ouvrir l'explorateur de fichiers", "action-show": "Afficher l'explorateur de fichiers", "action-create-note": "Créer une nouvelle note", "action-create-note-to-the-right": "Créer une note à droite", "action-collapse-all": "Tout réduire", "action-expand-all": "Tout développer", "action-new-note": "Nouvelle note", "action-new-folder": "Nouveau dossier", "action-change-sort": "Modifier l'ordre de tri", "action-reveal-file": "Afficher le fichier dans l'explorateur de fichiers", "action-reveal-active-file": "Afficher le fichier actif dans l'explorateur de fichiers", "command-move-file": "Déplacer le fichier vers un autre dossier", "action-move-file": "Déplacer le fichier vers...", "action-move-folder": "Déplacer le dossier vers...", "action-move-items": "Déplacer {{count}} articles dans...", "prompt-type-folder": "Saisir le nom d'un dossier", "label-no-folders": "Aucun dossier trouvé.", "instruction-navigate": "pour naviguer", "instruction-move": "pour déplacer", "instruction-dismiss": "pour annuler", "label-sort-a-to-z": "Trier par nom de fichier (A à Z)", "label-sort-z-to-a": "Trier par nom de fichier (Z à A)", "label-sort-new-to-old": "Trier par date d'édition (plus récent au plus ancien)", "label-sort-old-to-new": "Trier par date d'édition (plus ancien au plus récent)", "label-sort-created-old-to-new": "Trier par date de création (plus ancien au plus récent)", "label-sort-created-new-to-old": "Trier par date de création (plus récent au plus ancien)", "menu-opt-new-note": "Nouvelle note", "menu-opt-new-folder": "Nouveau dossier", "menu-opt-set-attachment-folder": "Définir comme dossier des pièces jointes", "menu-opt-rename": "Renommer", "menu-opt-delete": "Supprimer", "menu-opt-make-copy": "Dupliquer", "msg-invalid-characters": "Le nom de fichier ne peut contenir les caractères suivants : ", "msg-unsafe-characters": "Les liens ne fonctionneront pas avec les noms de fichiers contenant l'un de ces caractères : ", "msg-file-already-exists": "Il y a déjà un fichier du même nom", "msg-empty-file-name": "Le nom de fichier ne peut pas être vide.", "msg-bad-dotfile": "Le nom de fichier ne doit pas commencer avec un point.", "tooltip-modified-time": "Dernière modification le {{time}}", "tooltip-created-time": "Créé le {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Déplacer", "label-untitled-file": "Sans titre", "label-untitled-folder": "Sans titre", "msg-set-attachment-folder": "Les pièces jointes seront désormais enregistrées dans \"{{path}}\"." }, "search": { "name": "Rechercher", "desc": "Rechercher le mot-clé dans toutes les notes.", "action-open-search": "Rechercher dans tous les fichiers", "label-collapse-results": "Réduire les résultats", "label-match-case": "Respecter la casse", "label-explain-search-term": "Expliquer le terme de recherche", "label-more-context": "Afficher plus de contexte", "prompt-start-search": "Saisir pour lancer la recherche...", "label-match-text": "Correspond au texte : ", "label-match-regex": "Correspond au regex : ", "label-match-exact-text": "Contient l'expression exacte : ", "label-match-all": "Contient tous ces termes : ", "label-match-any": "Contient au moins l'un de ces termes : ", "label-excluding": "Exclure : ", "label-case-sensitive": "Sensible à la casse", "label-case-insensitive": "Insensible à la casse", "label-match-file-path": "Correspond au chemin d'accès au fichier : ", "label-match-file-name": "Correspond au nom du fichier : ", "label-match-content": "Correspond au contenu : ", "label-match-task": "Correspond à la tâche : ", "label-match-task-todo": "Correspond à la tâche (à faire) : ", "label-match-task-done": "Correspond à la tâche (fait) : ", "label-match-line": "Correspond à la ligne : ", "label-match-block": "Correspond au bloc : ", "label-match-section": "Correspond à la section : ", "label-match-tag": "Correspond au mot-clé : ", "label-no-matches": "Aucun résultat.", "matches-with-count": "... et {{count}} autre résultat.", "matches-with-count_plural": "... et {{count}} autres résultats.", "label-copy-search-results": "Copier le résultat de la recherche", "button-copy-results": "Copier les résultats", "msg-successfully-copied": "Résultats copiés dans votre presse-papiers.", "option-show-path": "Afficher l'emplacement", "option-show-path-description": "Affiche le chemin complet du fichier plutôt que simplement le nom du fichier.", "option-link-style": "Style de lien", "option-link-style-description": "Transformer chaque fichier trouvé en un lien.", "option-choice-link-style-none": "Aucun", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Lien Markdown", "option-list-prefix": "Préfixe de liste", "option-list-prefix-description": "Ajoute un préfixe à chaque fichier trouvé.", "option-choice-list-style-none": "Aucun", "option-choice-list-style-dash": "Tiret (-)", "option-choice-list-style-asterisk": "Astérisque (*)", "option-choice-list-style-numbered": "Numéroté", "tooltip-clear-search": "Effacer la recherche", "label-search-options": "Options de recherche", "tooltip-read-more": "Lire plus", "label-history": "Historique", "tooltip-clear-history": "Effacer l'historique de recherche", "label-path-option-description": "correspondance avec le chemin du fichier", "label-file-name-option-description": "correspondance avec le nom du fichier", "label-tag-option-description": "recherche par mots-clés", "label-line-option-description": "recherche par mots-clés dans la même ligne", "label-section-option-description": "recherche par mots-clés sous le même titre", "menu-opt-search-for": "Rechercher \"{{keyword}}\"" }, "quick-switcher": { "name": "Sélecteur rapide", "desc": "Accéder à tous les fichiers sans quitter le clavier. Ctrl/Cmd + O pour activer.", "short-name": "Sélecteur", "action-open": "Ouvrir le sélecteur rapide", "instruction-navigate": "pour naviguer", "instruction-open": "pour ouvrir", "instruction-open-in-new-tab": "pour ouvrir dans un nouvel onglet", "instruction-open-to-the-right": "pour ouvrir vers la droite", "instruction-create": "pour créer", "instruction-dismiss": "pour annuler", "label-no-note-create-new": "Aucune note trouvée. Appuyer sur Entrée pour en créer une nouvelle.", "prompt-type-file-name": "Saisir le fichier vers lequel basculer ou créer...", "label-enter-to-create": "Entrer pour créer le fichier", "tooltip-not-created-yet": "Inexistant, selectionner pour créer.", "option-show-existing-only": "Afficher uniquement des liens existants", "option-show-existing-only-description": "Si cochés, les liens vers des fichiers inexistants ne seront pas affichés.", "option-show-attachments": "Afficher les pièces jointes", "option-show-attachments-desc": "Afficher les pièces jointes tels que les images, vidéos et PDF.", "option-show-all-file-types": "Afficher tous les types de fichiers", "option-show-all-file-types-desc": "Afficher tous les fichiers, y compris ceux qu'Obsidian ne peut pas ouvrir. Le fichier sera ouvert avec l'application par défaut pour ce type de fichier." }, "graph-view": { "name": "Vue graphique", "desc": "Voir un aperçu graphique des connexions entre vos notes", "action-open": "Ouvrir la vue graphique", "action-open-local": "Ouvrir la vue graphique autour du fichier courant", "action-copy-screenshot": "Copier la capture d'écran", "tab-title": "Graphique de {{displayText}}", "label-filters": "Filtres", "prompt-filter-nodes": "Rechercher des fichiers...", "option-depth": "Profondeur", "option-depth-description": "Affiche les nœuds à ce nombre de nœuds de distance.", "option-neighbor-links": "Liens voisins", "option-neighbor-links-description": "Afficher les liens entre voisins.", "option-forelinks": "Liens sortants", "option-forelinks-description": "Afficher les liens vers d'autres fichiers", "option-backlinks": "Rétroliens", "option-backlinks-description": "Afficher les liens venant d'autres fichiers", "option-show-tags": "Mot-clés", "option-show-tags-description": "Les mots-clés sont liés aux notes qui les contiennent", "option-show-attachments": "Pièces jointes", "option-show-attachments-description": "Afficher les pièces jointes incluses dans les notes", "option-show-existing-files-only": "Fichiers existants uniquement", "option-show-existing-files-only-description": "Si cochés, les liens vers des fichiers inexistants ne seront pas affichés", "option-show-orphans": "Orphelins", "option-show-orphans-description": "Afficher les fichiers qui ne sont liés à aucun autre fichier", "label-display": "Afficher", "option-show-arrows": "Flèches", "option-show-arrows-description": "Afficher les flèches quand zoomé", "option-text-fade": "Seuil de fondu du texte", "option-node-size": "Taille des nœuds", "option-link-thickness": "Épaisseur des liens", "label-forces": "Forces", "option-center-force": "Force centrale", "option-link-force": "Force de liaison", "option-link-distance": "Distance des liens", "option-repel-force": "Force de répulsion", "tooltip-open-graph-settings": "Ouvrir les paramètres du graphique", "msg-screenshot-copied": "Capture d'écran copiée dans le presse-papiers.", "label-groups": "Groupes", "placeholder-enter-query": "Entrer la requête...", "tooltip-delete-graph": "Supprimer le groupe", "button-new-group": "Nouveau groupe", "tooltip-click-to-change-drag-to-reorder": "Cliquer pour changer la couleur\nFaire glisser pour réorganiser les groupes", "action-timelapse": "Lancer l'animation timelapse du graphique", "tooltip-start-timelapse-animation": "Démarrer le timelapse", "button-animate-timelapse": "Animer" }, "backlinks": { "name": "Rétroliens", "desc": "Afficher le nombre de rétroliens dans la barre d'état.", "action-open": "Ouvrir les rétroliens", "action-show": "Afficher le volet des rétroliens", "action-open-for-current": "Ouvrir les rétroliens du fichier courant", "action-toggle-backlinks-in-document": "Basculer les rétroliens dans le document", "menu-opt-backlinks-in-document": "Rétroliens dans le document", "label-linked-mentions": "Occurences liées", "label-no-backlinks": "Aucun rétrolien trouvé.", "label-unlinked-mentions": "Occurences non liées", "label-show-search": "Afficher le filtre de recherche", "label-link-button-text": "Lien", "tab-title": "Rétrolien pour {{displayText}}", "label-no-unlinked-mentions": "Aucune occurence non liée trouvée.", "ellipsis": "...", "option-backlink-in-document": "Rétroliens dans le document", "option-backlink-in-document-desc": "Afficher les rétroliens dans le document par défaut lors de l'ouverture de nouveaux volets." }, "outgoing-links": { "name": "Liens sortants", "desc": "Afficher les liens sortants et détecter des mentions non liées d'autres notes dans la note actuelle.", "action-open": "Ouvrir les liens sortants", "action-show": "Afficher le volet des liens sortants", "action-open-for-current": "Ouvre les liens sortants pour le fichier actuel", "tab-title": "Liens sortants de {{displayText}}", "label-links": "Liens", "label-no-links": "Aucun lien trouvé.", "label-unlinked-mentions": "Mention non liée", "tooltip-link-file": "Lier ce fichier", "tooltip-not-created": "Pas encore créé" }, "tag-pane": { "name": "Volet de mots-clés", "desc": "Affiche tous vos mots-clés et leur nombre d'occurrences", "action-show": "Afficher le volet des mot-clés", "label-no-tags": "Aucun mot-clé trouvé", "label-sort-by-name-a-to-z": "Nom de mot-clé (A à Z)", "label-sort-by-name-z-to-a": "Nom de mot-clé (Z à A)", "label-sort-by-frequency-high-to-low": "Fréquence (décroissant)", "label-sort-by-frequency-low-to-high": "Fréquence (croissant)", "action-show-nested-tags": "Afficher les mots-clés imbriqués", "action-collapse-all": "Tout réduire", "action-expand-all": "Tout développer" }, "page-preview": { "name": "Aperçu de page", "desc": "Prévisualiser une note en passant la souris sur un lien interne. Ctrl/Cmd + survol en mode édition.", "label-empty-note": "\"{{linktext}}\" n'est pas encore créé. Cliquer pour créer.", "label-source-editor": "Éditeur", "label-source-preview": "Aperçu", "label-source-search": "Recherche, rétroliens et liens sortants", "label-require-mod": "Exiger l'appui de {{key}} pour déclencher l'aperçu de page au survol" }, "starred": { "name": "Favoris", "desc": "Ajouter aux favoris les fichiers et les recherches fréquemment utilisés.", "action-show": "Afficher le volet des fichiers favoris", "action-toggle": "(Dés)épingle le fichier courant des favoris", "action-toggle-search": "(Dés)épingle la recherche courante des favoris", "action-star": "Ajouter aux favoris", "action-unstar": "Supprimer des favoris", "menu-opt-remove": "Supprimer", "msg-successfully-starred": "Fichier \"{{title}}\" ajouté aux favoris.", "msg-removed-starred": "Fichier \"{{title}}\" supprimé des favoris.", "msg-cannot-find-path": "Impossible de trouver le fichier \"{{path}}\"." }, "custom-css": { "name": "CSS personnalisé", "desc": "Lire \"obsidian.css\" dans le coffre et l'appliquer.", "setting-community-themes": "Thèmes tiers", "msg-fetching-themes": "Récupération des thèmes de la communauté...", "prompt-filter": "Filtrer...", "label-dark-theme-only": "Thèmes sombres uniquement", "label-light-theme-only": "Thèmes clairs uniquement", "label-use": "Utiliser", "label-stop-use": "Arrêter d'utiliser ce thème", "label-install-and-use": "Installer et utiliser", "label-update": "Mise à jour", "label-no-readme": "Ce thème ne contient pas de README.", "tooltip-remove-theme": "Supprimer le thème", "label-visit-on-github": "Ouvrir sur GitHub", "msg-load-error": "Impossible de charger les thèmes de la communauté, merci de vérifier la connexion internet.", "msg-now-using-theme": "Vous utilisez maintenant {{title}} en thème CSS.", "msg-deleted-theme": "Le thème {{title}} a été supprimé", "msg-updated-theme": "Le thème {{title}} a été mis à jour.", "label-installed": "Installé", "label-legacy": "Legacy", "button-update-all-themes": "Tout mettre à jour", "msg-failed-load-themes": "Échec du chargement des thèmes communautaires.", "msg-no-updates-found": "Aucune mise à jour de thème trouvée.", "msg-updates-found": "Trouvé {{count}} thème à mettre à jour.", "msg-updates-found_plural": "Trouvé {{count}} thèmes à mettre à jour.", "msg-failed-to-install-theme": "Échec de la mise à jour du thème \"{{name}}\".", "msg-successfully-installed-theme": "Le thème \"{{name}}\" a été installé avec succès.", "msg-installing-theme": "Installation du thème \"{{name}}\"...", "label-search-summary": "Affichage de {{themeCount}} :", "label-update-available": "Mise à jour disponible" }, "command-palette": { "name": "Palette de commandes", "desc": "Saisir une commande pour l'invoquer. Pas besoin d'utiliser l'interface utilisateur ou de mémoriser le raccourci.", "action-open": "Ouvrir la palette de commandes", "instruction-navigate": "pour naviguer", "instruction-use": "pour utiliser", "instruction-dismiss": "pour fermer", "label-no-commands": "Aucune commande trouvée.", "prompt-type-command": "Saisir une commande...", "label-pinned-commands": "Commandes épinglées", "option-add-new-pin": "Nouvelle commande épinglée", "option-add-new-pin-description": "Les commandes épinglées apparaîtront en haut de toutes les commandes lorsqu'aucune requête de recherche n'est présente." }, "markdown-format-importer": { "name": "Importateur depuis des fichiers Markdown", "desc": "Convertir les fichiers Markdown d'autres applications au format Obsidian.", "action-open": "Ouvrir l'importateur Markdown", "option-roam-tag-fixer": "Répare les mots-clés de Roam Research", "option-roam-tag-fixer-description": "Convertit \"#tag\" et \"#[[tag]]\" en \"[[tag]]\".", "option-roam-highlight-fixer": "Répare le surlignage de Roam Research", "option-roam-highlight-fixer-description": "Convertit \"^^surlignage^^\" en \"==surlignage==\".", "option-roam-todo-converter": "Convertit les TODO de Roam Research", "option-roam-todo-converter-description": "Convertit \"{{[[TODO]]}}\" en \"[ ]\".", "option-bear-highlight-fixer": "Répare le surlignage de Bear", "option-bear-highlight-fixer-description": "Convertit \"::surlignage::\" en \"==surlignage==\".", "zettelkasten-link-fixer": "Répare les liens Zettelkasten", "zettelkasten-link-fixer-description": "Répare les liens \"[[UID]]\" en liens \"[[UID Nom Du Fichier]]\" complet.", "zettelkasten-link-beautifier": "Embellisseur de lien Zettelkasten", "zettelkasten-link-beautifier-description": "Répare les liens \"[[UID]]\" et les embellit en \"[[UID Nom Du Fichier|Nom Du Fichier]]\".", "msg-all-files-warning": "Attention : l'importateur convertira tous les fichiers de votre coffre, pas seulement le fichier actuel.", "msg-override-files-warning": "Vos fichiers seront écrasés. Enregistrez tous vos fichiers avant de tenter la conversion.", "label-start-conversion": "Lancer la conversion", "label-stop": "Arrêter", "label-go-back": "Retourner", "label-done": "Fait", "label-processing": "Traitement en cours...", "label-cancelling": "Annulation...", "label-finished": "Terminé !", "label-processed-files": "Fichiers traités", "label-modified-files": "Fichiers modifiés", "label-total-replacements": "Remplacements totaux" }, "daily-notes": { "name": "Notes quotidiennes", "desc": "Ouvre la note quotidienne ou la crée si elle n'est pas présente.", "short-name": "Aujourd'hui", "action-open": "Ouvrir la note quotidienne", "action-open-previous": "Ouvrir la note quotidienne précédente", "action-open-next": "Ouvrir la note quotidienne suivante", "action-insert-text": "Insérer du texte dans la note quotidienne", "action-insert-link": "Insérer un lien dans la note quotidienne", "msg-fail-format": "Échec de la création de la note quotidienne. \"{{format}}\" n'est pas un format valide.", "msg-fail-folder": "Échec de la création de la note quotidienne. Le dossier \"{{folderOption}}\" n'a pas été trouvé.", "msg-fail-template-file": "Échec de la création de la note quotidienne. Le fichier modèle \"{{template}}\" n'a pas été trouvé.", "msg-no-previous": "Il n'y a pas de note quotidienne avant celle-ci.", "msg-no-next": "Il n'y a pas de note quotidienne après celle-ci.", "option-date-format": "Format de la date", "label-refer-to-syntax": "Pour plus d'informations à propos de la syntaxe, se reporter à : ", "label-syntax-link": "référence des formats", "label-syntax-live-preview": "Voici ce à quoi cela va ressembler : ", "option-new-file-location": "Nouvel emplacement de fichier", "option-new-file-location-description": "Emplacement du dossier où créer la nouvelle note quotidienne.", "option-template": "Emplacement du fichier de modèle", "option-template-description": "Emplacement du fichier à utiliser comme modèle.", "option-open-on-start": "Ouverture de la note quotidienne au démarrage", "option-open-on-start-description": "Ouvre la note quotidienne automatiquement à chaque ouverture de ce coffre." }, "unique-note-creator": { "name": "Créateur de note unique", "desc": "Créez des notes avec des préfixes d'horodatage uniques, pour des workflows tels que zettelkasten ou slip box.", "short-name": "Unique", "action-create-note": "Créer une nouvelle note unique", "option-new-file-location": "Nouvel emplacement du fichier", "option-new-file-location-description": "Le chemin du dossier pour créer la nouvelle note unique.", "msg-folder-not-found": "Échec de la création d'une note unique. Dossier \"{{folderOption}}\" introuvable.", "option-template-file": "Emplacement du modèle", "option-template-file-description": "Le chemin du fichier à utiliser comme modèle.", "option-template-file-placeholder": "Exemple: dossier1/note", "option-id-format": "Format de préfixe unique", "msg-template-file-not-found": "Échec de la création d'une note unique. Modèle \"{{template}}\" introuvable.", "msg-failed-to-generate": "Échec de la création d'une note unique avec le format \"{{format}}" }, "random-note": { "name": "Note aléatoire", "desc": "Ouvre une note au hasard. Utile pour réviser et découvrir.", "short-name": "Aléatoire", "action-open": "Ouvre une note au hasard" }, "outline": { "name": "Plan", "desc": "Affiche le plan du fichier courant ou du volet lié.", "action-open": "Ouvrir le plan", "action-show": "Affiche le volet de plan", "action-open-for-current": "Ouvrir le plan du fichier actuel", "tab-title": "Plan de {{displayText}}", "label-no-headings": "Aucun entête trouvé." }, "word-count": { "name": "Nombre de mots", "desc": "Affiche le nombre de mots dans la barre d'état." }, "slides": { "name": "Diapositives", "desc": "Présentation à partir du Markdown. Utiliser \"---\" pour séparer les diapositives.", "action-start": "Démarrer la présentation" }, "audio-recorder": { "name": "Enregistreur audio", "desc": "Enregistre l'audio et l'enregistre comme pièce jointe.", "action-start": "Commencer l'enregistrement audio", "action-stop": "Arrêter l'enregistrement audio", "action-toggle": "Démarrer / arrêter l'enregistrement", "msg-access-denied": "L'accès au microphone a été refusé, merci de l'activer dans le volet des préférences.", "msg-pending-grant": "Merci d'autoriser le microphone pour démarrer l'enregistrement.", "msg-no-microphone": "Aucun microphone n'est connecté." }, "open-with-default-app": { "name": "Ouvrir avec l'application par défaut", "desc": "Ajouter un bouton pour ouvrir le fichier actuel avec l'application par défaut", "action-open-file": "Ouvrir avec l'application par défaut", "action-open-file-mobile": "Partager", "action-show-in-folder": "Afficher dans le dossier", "action-show-in-folder-mac": "Révéler dans le Finder" }, "templates": { "name": "Modèles", "desc": "Insérer le contenu d'un modèle à partir d'un dossier de fichiers de modèles.", "action-insert": "Insérer le modèle", "action-insert-current-date": "Insérer la date actuelle", "action-insert-current-time": "Insérer l'heure actuelle", "option-template-folder-location": "Emplacement du dossier modèle", "option-template-folder-location-description": "Les fichiers dans ce dossier seront disponibles comme modèles.", "option-template-date-format": "Format de date", "option-template-date-format-description": "{{date}} dans ce fichier modèle sera remplacé par cette valeur.", "option-template-date-format-description2": "Il est aussi possible d'utiliser {{date:YYYY-MM-DD}} pour passer outre le format ponctuellement.", "option-template-time-format": "Format de temps", "option-template-time-format-description": "{{time}} dans ce fichier modèle sera remplacé par cette valeur.", "option-template-time-format-description2": "Il est aussi possible d'utiliser {{time:HH:mm}} pour passer outre le format ponctuellement.", "instruction-navigate": "pour naviguer", "instruction-insert": "pour insérer le modèle", "instruction-dismiss": "pour annuler", "msg-no-templates-found": "Aucun modèle trouvé", "msg-fail-invalid-folder": "Échec de l'affichage de la liste des modèles. Le dossier modèle n'est pas valide.", "msg-fail-folder-not-found": "Échec de l'affichage de la liste des modèles. Le dossier \"{{folderOption}}\" est introuvable.", "prompt-type-template": "Saisir le nom d'un modèle..." }, "translucency": { "name": "Transparence de la fenêtre", "desc": "Active l'effet de transparence pour améliorer la sensation de profondeur. À utiliser de préférence avec le mode sombre. Non pris en charge sous Linux." }, "slash-command": { "name": "Commandes Slash /", "desc": "Permet de déclencher les commandes Slash / dans l'éditeur en tapant la touche barre oblique." }, "editor-status": { "name": "Statut Édition", "desc": "Ajoute un élément dans la barre d'état pour afficher et modifier le mode d'édition actuel.", "read": "Aperçu", "edit-source": "Mode source", "edit-live-preview": "Aperçu en direct" }, "publish": { "name": "Publier", "desc": "Publie vos notes via Obsidian Publish.", "action-publish-changes": "Publier les modifications", "label-no-internet-access": "Un accès à internet est nécessaire pour publier les modifications.", "label-publish-service-description": "Obsidian Publish est un service payant complémentaire qui vous permet de publier vos notes en ligne directement depuis Obsidian.", "label-please-login": "Pour commencer à publier, connectez-vous ou créez un nouveau compte Obsidian.", "label-no-publish-subscription": "Aucun abonnement à Obsidian Publish.", "button-purchase": "Acheter", "label-manage-sites": "Gérer les sites", "label-no-sites": "Vous n'avez aucun site.", "button-choose": "Choisir", "tooltip-edit-site-id": "Modifier l'ID du site", "tooltip-delete-site": "Supprimer le site", "label-delete-site-confirmation": "Êtes-vous sûr de vouloir supprimer ce site ?", "label-delete-site-details": "Cela supprimera immédiatement et définitivement votre site.", "label-confirm-delete-site": "Confirmer la suppression du site \"{{site}}\"", "option-site-id": "ID du site", "option-site-id-description": "Votre site sera disponible à https://publish.obsidian.md/{site id}. Il est possible de changer cela plus tard. Seuls les lettres minuscules, les chiffres et les tirets sont autorisés.", "option-site-id-placeholder": "Choisir un identifiant de site", "button-create": "Créer", "msg-invalid-site-id": "L'ID de site ne peut contenir que des lettres minuscules, des chiffres et des tirets.", "msg-site-id-in-use": "Cet ID de site est déjà utilisé, merci d'en essayer un autre.", "msg-create-site-issue": "Un problème est survenu lors de la création de votre site.", "label-site-options": "Options du site", "option-site-general": "Général", "option-site-components": "Composants", "option-site-appearance": "Apparence", "option-site-reading-experience": "Mode lecture", "option-site-misc": "Autres paramètres du site", "option-site-name": "Nom du site", "option-site-name-description": "Il apparaîtra comme titre du site.", "option-site-name-placeholder": "Nom de votre site", "option-home-page-file": "Page d'accueil", "option-home-page-file-description": "La première page que l'utilisateur voit quand il va sur le site", "option-home-page-file-placeholder": "Nom du fichier", "option-logo": "Logo", "option-logo-description": "Choisir une image à utiliser comme logo du site.", "option-logo-placeholder": "Nom de l'image", "option-site-collaboration": "Publication collaborative", "option-site-collaboration-desc": "Gérer les collaborateurs de ce site.", "button-manage-collaborators": "Gérer", "option-theme": "Thème", "option-theme-description": "Choisir le jeu de couleurs par défaut pour votre site.", "option-theme-system": "Adapter au système", "option-show-theme-toggle": "Bascule entre les thèmes sombre/lumineux", "option-show-theme-toggle-description": "Laisse le visiteur basculer entre le thème clair et le thème sombre.", "option-show-navigation": "Affichage de la navigation", "option-show-navigation-description": "Affiche toutes les pages publiées sur le côté gauche de votre site publié.", "option-show-search": "Affichage de la barre de recherche", "option-show-search-description": "Affiche une barre de recherche en haut de la navigation qui permet aux visiteurs de rechercher pages et titres sur votre site.", "option-show-graph": "Afficher la vue graphique", "option-show-graph-description": "Affiche un petit graphique local sur chaque page.", "option-show-outline": "Afficher la table des matières", "option-show-outline-description": "Affiche le plan du fichier sur chaque page.", "option-show-backlinks": "Afficher des rétroliens", "option-show-backlinks-description": "Affiche une section avec les rétroliens au bas de chaque page.", "option-sliding-window-mode": "Utiliser les fenêtres coulissantes", "option-sliding-window-mode-description": "Ouvre les nouvelles pages dans des volets à droite. Permet de faire défiler les volets horizontalement.", "option-hover-preview-file": "Afficher l'aperçu au survol", "option-hover-preview-file-description": "Affiche l'aperçu de la page lors du survol des liens.", "option-hide-title": "Cacher le titre de la page", "option-hide-title-description": "Cache le titre de la page. Utile lorsque vous avez vos propres titres au début de chaque page.", "option-readable-line-length": "Longueur de ligne lisible", "option-readable-line-length-description": "Limite la longueur de ligne maximale. Affiche moins de contenu à l'écran mais rends les longs paragraphes plus lisibles.", "option-site-password": "Mots de passe", "option-site-password-description": "Restreindre l'accès à votre site avec un ou des mots de passe.", "option-google-analytics": "Code de suivi Google Analytics", "option-google-analytics-description": "Configure Google Analytics pour votre site. Uniquement disponible pour les visiteurs depuis l'URL de votre domaine personnalisé. Merci de d'abord vérifier les lois et réglementations locales.", "button-manage-passwords": "Gérer", "button-save-site-settings": "Enregistrer les paramètres du site", "msg-updated-options": "Options mises à jour pour votre site.", "button-go-back": "Retour", "label-publishing-to": "Publier sur", "tooltip-switch-site": "Changer de site", "button-add-linked": "Ajouter les fichiers liés", "tooltip-add-linked": "Ajouter tous les fichiers qui sont liés dans les éléments sélectionnés", "msg-added-linked-files": "{{count}} fichier lié a été ajouté.", "msg-added-linked-files_plural": "{{count}} fichiers liés ont été ajoutés.", "tooltip-open-site-options": "Modifier les options du site", "label-no-changes-detected": "Aucun changement n'a été détecté.", "label-changed-files-to-be-published": "Changements", "label-unchanged-files-already-published": "Inchangé (sélectionner pour supprimer)", "label-file-selected": " sélectionné", "button-select-all-files": "Tout sélectionner", "button-deselect-all-files": "Tout désélectionner", "label-new-files-to-be-published": "Nouveau", "button-publish": "Publier", "msg-no-permission-to-publish-to-site": "Vous ne disposez pas des autorisations nécessaires pour publier sur le site actuel.", "msg-select-at-least-one-file": "Merci de sélectionner au moins un fichier.", "label-upload-changes": "Envoyer les modifications", "button-done": "Terminer", "button-stop": "Arrêter", "label-status-uploading": "Envoi en cours", "label-status-to-publish": "À publier", "label-status-to-delete": "À supprimer", "label-status-published": "Publié", "label-status-deleted": "Supprimé", "label-status-failed": "Erreur", "label-status-cancelled": "Annulé", "button-change": "Modifier", "label-clear-cache": "Il faut quelques minutes pour que les modifications apparaissent sur votre site. Si vous ne voyez pas vos dernières modifications, essayez de vider le cache de votre navigateur.", "label-visit-site": "Vous pouvez visiter votre site ici : ", "msg-something-went-wrong": "Un problème est survenu. Consulter la console développeur pour plus de détails.", "msg-network-error": "Une erreur réseau s'est produite.", "label-manage-passwords": "Gérer les mots de passe", "label-add-password": "Ajouter un mot de passe", "action-new-password": "Nouveau mot de passe", "label-no-password": "Votre site n'a actuellement aucun mot de passe. Tout le monde peut le visiter.", "label-have-password": "Votre site est protégé par mot de passe. Si vous avez plusieurs mots de passe, les visiteurs peuvent accéder à votre site en saisissant l'un d'entre eux.", "option-password-name": "Mot de passe", "option-password-desc": "Une version chiffrée de votre mot de passe sera stocké en toute sécurité. Une fois le mot de passe défini, il ne peut pas être déchiffré en clair.", "option-password-placeholder": "Votre mot de passe", "option-nickname-name": "Surnom (optionnel)", "option-nickname-desc": "Définissez un surnom pour vous rappeler à quoi ou à qui est destiné le mot de passe.", "action-add-password": "Ajouter ce mot de passe", "label-untitled-password": "Mot de passe sans titre", "label-password-created-time": "Créé {{time}}", "msg-added-new-password": "Nouveau mot de passe ajouté.", "option-custom-domain": "Domaine personnalisé", "option-custom-domain-desc": "Utiliser un domaine personnalisé à la place de l'URL : https://publish.obsidian.md/{site id}.", "option-noindex": "Refuser l'indexation par les moteurs de recherche", "option-noindex-desc": "Empêcher les moteurs de recherche d'indexer le site.", "button-configure": "Configurer", "label-configure-custom-domain": "Configuration du domaine personnalisé", "option-custom-url-name": "URL personnalisée", "option-custom-url-desc": "L'URL sur laquelle votre site sera situé.", "option-custom-url-placeholder": "www.votredomaine.fr", "option-custom-url-redirect": "Redirection vers un domaine personnalisé", "option-custom-url-redirect-desc": "Rediriger les visiteurs de publish.obsidian.md/id vers le domaine personnalisé.", "button-update-custom-domain": "Mettre à jour les paramètres du domaine", "label-custom-domain-instructions": "Veuillez vous référer à notre {{link}} sur notre site pour plus d'informations.", "label-custom-domain-link-name": "guide d'aide pour le domaine personnalisé", "label-site-usage": "Vous utilisez {{site}} de vos {{limit}} sites possibles.", "button-add-more-sites": "Acheter plus de sites", "label-no-sites-bought": "Vous n'avez acheté aucun site.", "button-get-site": "Obtenir un site", "label-manage-sharing": "Gérer le partage pour \"{{name}}\"", "label-sharing-with-users": "Ce site est actuellement partagé avec les personnes suivantes.", "label-not-sharing": "Ce site n'est actuellement partagé avec personne.", "label-invite-pending": "En attente", "tooltip-remove-user": "Supprimer l'utilisateur", "option-invite-user": "Inviter un utilisateur", "placeholder-invite-user": "Entrer leur email...", "error-email-must-be-valid": "Veuillez saisir une adresse électronique valide pour inviter quelqu'un.", "msg-enable-publish-plugin": "Veuillez activer le plugin principal Publish dans Paramètres -> modules principaux pour afficher les sites.", "label-your-sites": "Vos sites", "label-sites-shared-with-you": "Sites partagés avec vous", "tooltip-leave-site-sharing": "Arrêter de collaborer sur ce site", "label-leave-site-confirmation": "Confirmer l'arrêt de la collaboration", "label-leave-site-confirmation-details": "Cela supprimera ce site de la liste des sites partagés avec vous. Cette action ne peut pas être annulée.", "label-leave-site-confirmation-details-2": "Veuillez contacter le propriétaire du site si vous souhaitez collaborer à nouveau sur ce site.", "button-leave": "Quitter", "label-compare-with-live": "Comparer avec la version live", "button-use-live-version": "Utiliser la version live", "label-confirm-override": "Confirmer le remplacement de la version locale", "label-confirm-override-1": "Êtes-vous sûr de vouloir remplacer la version locale ?", "label-confirm-override-2": "La version en ligne sera utilisée et votre version locale sera abandonnée. Veuillez faire des sauvegardes si nécessaire.", "button-proceed": "Continuer", "message-successfully-used-live-version": "Utilisation réussie de la version en direct pour remplacer votre version locale.", "label-open-file": "Ouvrir le dossier", "tooltip-manage-publish-filters": "Gérer les filtres de Publish", "option-included-folders": "Dossiers inclus", "option-included-folders-desc": "Les fichiers situés dans ces dossiers seront automatiquement sélectionnés lorsque vous examinerez les modifications à publier.", "option-currently-included-folders": " Ces dossiers sont actuellement inclus :", "option-excluded-folders": "Dossiers exclus", "option-excluded-folders-desc": "Les fichiers situés dans ces dossiers n'apparaîtront pas lorsque vous examinerez les modifications à publier. Ce paramètre est prioritaire sur les dossiers inclus ci-dessus.", "label-number-of-folders-included": "Obsidian Publish inclut actuellement {{dossiers}}.", "label-number-of-folders-excluded": "Obsidian Publish exclut actuellement les {{dossiers}}.", "label-manage-included-folders": "Gérer les dossiers inclus", "label-manage-excluded-folders": "Gérer les dossiers exclus", "label-add-included-folder": "Inclure un dossier", "label-add-included-folder-desc": "Vous pouvez inclure à la fois des dossiers existants et des dossiers qui n'ont pas encore été créés..", "tooltip-contact-support": "Contacter le support" }, "workspaces": { "name": "Espaces de travail", "desc": "Enregistrer et charger la disposition de l'espace de travail.", "action-load-layout": "Charger l'espace de travail", "action-manage-layouts": "Gérer les espaces de travail", "action-save-and-load-layout": "Sauvegarder et charger un autre espace de travail", "placeholder-save-current-layout-as": "Sauvegarder l'espace de travail actuel comme...", "button-save": "Sauvegarder", "button-load": "Charger", "tooltip-delete-layout": "Supprimer l'espace de travail", "msg-delete-layout-success": "L'espace de travail a été supprimé avec succès.", "msg-enter-name": "Veuiller saisir un nom pour le nouvel espace de travail.", "msg-save-layout-success": "L'espace de travail été sauvegardé avec succès.", "label-no-layout-found": "Aucun espace de travail enregistré n'a été trouvé.", "placeholder-type-to-search-layouts": "Taper le nom de l'espace de travail..." }, "sync": { "name": "Sync", "desc": "Synchronise vos fichiers avec Obsidian Sync.", "action-view-version-history": "Afficher l'historique des instantanés", "label-load-more": "Charger plus", "label-show-diff": "Afficher les différences", "label-copy-to-clipboard": "Copier dans le presse-papiers", "label-restore-this-version": "Restaurer cette version", "msg-already-latest-version": "Cette version est déjà la dernière.", "msg-restored-version": "Version restaurée avec succès d'{{time}}", "label-file-deleted": "Ce fichier a été supprimé", "label-no-earlier-version": "Il n'y avait pas de versions antérieures de ce fichier.", "label-empty-file": "Vide", "label-setting-files": "Fichiers de configuration", "label-deleted-files": "Fichiers supprimés", "label-version-history": "Historique des versions", "label-click-to-see-history": "Cliquez sur un fichier supprimé pour voir son historique.", "label-create-remote-vault": "Créer un coffre distant", "msg-please-enter-password": "Veuillez entrer un mot de passe.", "msg-vault-name-cannot-be-empty": "Le nom du coffre ne peut pas être vide.", "msg-successfully-created-vault": "Création réussie du coffre distant \"{{name}}\".", "label-remote-vault-explanation": "Les coffres distants permettent une synchronisation fiable et sécurisée entre tous vos appareils.", "option-vault-name": "Nom du coffre", "option-vault-name-desc": "Choisir un nom évoquant l'objet du coffre.", "option-vault-name-placeholder": "Mon superbe coffre", "option-use-custom-encryption-password": "Personnalise le mot de passe de chiffrement de bout en bout", "option-use-custom-encryption-password-desc": "Si cette option est désactivée, une clé de chiffrement sera générée automatiquement.", "option-use-custom-encryption-password-desc-warning": "Cette option ne peut pas être modifiée ultérieurement.", "option-encryption-password": "Mot de passe de chiffrement", "option-encryption-password-desc": "Le mot de passe ne pourra pas être modifié ultérieurement.", "option-encryption-password-desc-warning": "Si vous oubliez le mot de passe, les données stockées à distance resteront inutilisables à jamais.", "option-encryption-password-desc-2": "Cela n'affecte pas les données stockées localement.", "option-encryption-password-placeholder": "Votre mot de passe", "label-enter-encryption-password": "Entrer le mot de passe de chiffrement", "button-unlock-vault": "Déverrouiller le coffre", "msg-verified-password": "Votre mot de passe a été vérifié avec succès.", "label-remote-vaults": "Vos coffres distants", "label-vault-created-time": "Créé {{time}}", "tooltip-delete-remote-vault": "Supprimer", "tooltip-manage-sharing": "Gérer le partage", "label-confirm-delete-remote-vault": "Confirmer la suppression du coffre", "label-confirm-delete-remote-vault-question": "Souhaitez-vous vraiment supprimer ce coffre distant ?", "label-confirm-delete-remote-vault-result": "Toutes les données stockées sur notre serveur ainsi que l'historique des instantanés seront supprimés. Vos fichiers locaux resteront intacts.", "label-confirm-delete-remote-vault-warning": "Cette action est permanente et irréversible.", "msg-remote-vault-deleted": "Le coffre distant {{name}} a été supprimé.", "button-connect-to-remote-vault": "Se connecter", "button-disconnect-from-remote-vault": "Se déconnecter", "label-not-remote-vaults": "Vous n'avez aucun coffre distant.", "button-create-new-remote-vault": "Créer un nouveau coffre", "label-sync-log": "Journal des synchronisations", "options-only-show-errors": "Erreurs uniquement", "options-only-show-errors-desc": "Afficher uniquement les erreurs et masquer les autres éléments du journal.", "button-copy-sync-log": "Copier le journal des synchronisations", "msg-successfully-copied-sync-log": "Journal des synchronisations copié avec succès.", "button-retry": "Réessayer", "button-purchase-subscription": "Acheter", "option-remote-vault": "coffre distant", "button-choose-remote-vault": "Choisir", "button-manage-remote-vault": "Gérer", "option-remote-vault-desc-connected": "Actuellement connecté au coffre distant \"{{name}}\".", "option-remote-vault-desc-not-connected": "Actuellement non connecté à un coffre distant.", "option-sync-status": "État de la synchronisation", "option-sync-status-desc-paused": "Obsidian Sync est en pause.", "option-sync-status-desc-running": "Obsidian Sync est activé et en fonction.", "option-device-name": "Nom de l'appareil", "option-device-name-desc": "Ce nom sera affiché dans le journal des synchronisations. Laissez vide pour utiliser le nom par défaut.", "button-resume": "Reprendre", "button-pause": "Pause", "option-view-deleted-files": "Fichiers supprimés", "option-view-deleted-files-desc": "Afficher et récupérer les fichiers supprimés.", "option-sync-log": "Activité de synchronisation", "option-sync-log-desc": "Afficher le journal des synchronisations récentes.", "button-view": "Voir", "button-bulk-restore": "Tout récupérer", "button-restore-selected-files": "Récupérer les fichiers sélectionnés", "msg-restoring": "Récupération...", "msg-restoring-complete": "`Récupération complète : {{succeeded}} réussi et {{failed}} échec.`", "option-over-size": "Taille du coffre au-dessus de la limite", "option-over-size-desc": "Votre coffre est {{size}} au-dessus de la limite de {{limit}}.", "msg-largest-files": "Voir les fichiers les plus volumineux", "msg-largest-files-desc": "Voici les fichiers téléversés qui prennent le plus de place. Après la suppression des pièces jointes, utilisez le bouton purger pour libérer l'espace sur le coffre distant.", "button-purge-remote": "Purger", "tooltip-purge-remote": "Efface de manière permanente les pièces jointes supprimées de votre coffre distant et ainsi libére de l'espace.", "msg-purge-complete": "Purge complète.", "option-prevent-sleep": "Empêcher la mise en veille de l'appareil", "option-prevent-sleep-desc": "Empêche l'appareil de se mettre en veille lorsqu'il reste des fichiers à synchroniser.", "option-selective-sync": "Synchronisation sélective", "option-excluded-folders": "Dossiers exclus", "option-excluded-folder-desc": "Empêche la synchronisation de certains dossiers.", "option-currently-excluded-folders": " Les dossiers suivants sont actuellement exclus :", "button-manage-excluded-folders": "Gérer", "option-sync-image": "Synchronisation des images", "option-sync-image-desc": "Synchronise les fichiers image ayant ces extensions : {{extensions}}.", "option-sync-audio": "Synchronisation des audios", "option-sync-audio-desc": "Synchronise les fichiers audio ayant ces extensions : {{extensions}}.", "option-sync-video": "Synchronisation des vidéos", "option-sync-video-desc": "Synchronise les fichiers vidéo ayant ces extensions : {{extensions}}.", "option-sync-pdf": "Synchronisation des PDFs", "option-sync-pdf-desc": "Synchronise les fichiers PDF.", "option-sync-unsupported": "Synchronisation de tous les autres types", "option-sync-unsupported-desc": "Synchronise les types de fichiers non pris en charge par Obsidian.", "option-vault-config-sync": "Configuration de la synchronisation du coffre", "option-view-config-files": "Historique des versions des paramètres", "option-view-config-files-desc": "Affiche et restaure l'historique des versions des fichiers de paramètres.", "option-sync-app": "Réglages principaux", "option-sync-app-desc": "Synchronise les paramètres de l'éditeur, des fichiers, des liens, des raccourcis personnalisés, etc.", "option-sync-appearance": "Paramètres d'apparence", "option-sync-appearance-desc": "Synchronise les paramètres d'apparence tels que le mode sombre, le thème actif et les extraits CSS activés.", "option-sync-appearance-data": "Thèmes et extraits CSS", "option-sync-appearance-data-desc": "Synchronise les thèmes et les extraits CSS téléchargés. Dépend aussi du choix des paramètres précédents.", "option-sync-hotkey": "Raccourcis clavier", "option-sync-hotkey-desc": "Synchronise les raccourcis clavier personnalisés.", "option-sync-core-plugin": "Liste des modules principaux actifs", "option-sync-core-plugin-desc": "Synchronise la liste des modules principaux actifs.", "option-sync-core-plugin-data": "Paramètres des modules principaux", "option-sync-core-plugin-data-desc": "Synchronise les paramètres des modules principaux.", "option-sync-community-plugin": "Liste des modules complémentaires actifs", "option-sync-community-plugin-desc": "Synchronise les modules complémentaires actifs.", "option-sync-community-plugin-data": "Liste des modules complémentaires installés", "option-sync-community-plugin-data-desc": "Synchronise les modules complémentaires installés (Fichiers .js, .css, et manifest.json) ainsi que leurs paramètres.", "label-sync-introduction": "Obsidian Sync est le service de synchronisation complémentaire d'Obsidian ; avec chiffrement de bout en bout et historique des instantanés.", "label-account-required": "Pour démarrer la synchronisation, veuillez vous connecter ou créer un nouveau compte Obsidian.", "button-sign-up": "S'inscrire", "button-log-in": "S'identifier", "label-manage-excluded-folders": "Gérer les dossiers qui sont exclus", "label-number-of-folders-excluded": "{{folders}} sont actuellement exclus de la synchronisation.", "label-add-excluded-folder": "Exclure un dossier", "label-add-excluded-folder-desc": "Vous pouvez exclure à la fois les dossiers existants et les dossiers qui n'ont pas encore été créés.", "tooltip-remove-excluded-folder": "Retirer de la liste des exclus", "label-setup-connection": "Paramétrer la connexion", "label-now-connected-to-vault": "Vous êtes maintenant connecté à \"{{name}}\".", "button-start-syncing": "Démarrer la synchronisation", "label-confirm-merge-vault": "Confirmer la fusion des coffres", "msg-vault-has-notes": "Votre coffre local contient déjà quelques notes.", "msg-vault-merge-warning": "Si vous vous connectez à l'espace de stockage distant \"{{nom}}\", les notes de votre espace de stockage local seront fusionnées avec les notes de votre espace de stockage distant. En cas de conflit, la version la plus récente de la note sera préservée.", "tooltip-update-setting-on-all-devices": "Veuillez mettre à jour cette option et redémarrer l'application sur tous les appareils où vous souhaitez qu'elle prenne effet.", "label-sharing-with-users": "Ce coffre distant est actuellement partagé avec les personnes suivantes.", "label-not-sharing": "Ce coffre distant n'est actuellement partagé avec personne.", "label-vaults-shared-with-you": "Coffres partagés avec vous.", "tooltip-leave-vault-sharing": "Arrêter de collaborer sur ce coffre", "label-leave-vault-confirmation": "Confirmer l'arrêt de la collaboration", "label-leave-vault-confirmation-details": "Cela supprimera ce coffre de la liste des coffres-forts partagés avec vous. Cette action ne peut pas être annulée.", "label-leave-vault-confirmation-details-2": "Veuillez contacter le propriétaire du coffre si vous souhaitez collaborer à nouveau sur ce coffre.", "button-leave": "Quitter", "label-require-subscription-to-connect": "Vous avez besoin d'un abonnement à Obsidian Sync pour vous connecter à ce coffre.", "option-contact-support": "Contacter le support", "option-contact-support-desc": "Si vous rencontrez des problèmes avec Obsidian Sync, veuillez nous contacter pour que nous puissions vous aider ! Vous pouvez nous joindre à support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "Récupération de fichier", "desc": "Permet de restaurer des instantanés récents en cas de perte de données accidentelle. Les instantanés ne sont enregistrés que pour les fichiers Markdown.", "action-open": "Ouvrir les instantanés", "option-interval": "Intervalle entre les instantanés", "option-interval-description": "Intervalle minimal en minutes entre l'enregistrement de deux instantanés.", "option-keep": "Durée de l'historique", "option-keep-description": "Durée en jours pendant laquelle les instantanés sont conservés.", "option-open-history": "Instantanés", "option-open-history-description": "Afficher et restaurer les instantanés enregistrés.", "button-view-snapshots": "Ouvrir", "option-clear": "Supprimer l'historique", "option-clear-description": "Efface tout l'historique des instantanés.", "button-clear-history": "Supprimer", "label-clear-warning": "Souhaitez-vous vraiment supprimer tous les instantanés ? Seuls les instantanés seront supprimés, aucun fichier de votre coffre ne sera touché.", "msg-clear-complete": "Instantanés effacés.", "label-no-history-found": "Aucun instantané trouvé.", "placeholder-choose-file": "Choisir un fichier...", "label-select-file": "Sélectionner un fichier sur la gauche pour en afficher les instantanés." }, "note-composer": { "name": "Compositeur de note", "desc": "Fusionne, scinde et restructure des notes.", "option-confirm-file-merge": "Confirmer la fusion du fichier", "option-confirm-file-merge-description": "Invite avant de fusionner deux fichiers.", "option-split-replacement-text": "Texte après extraction", "option-split-replacement-text-description": "Que montrer à la place du texte sélectionné après l'extraction.", "option-choice-split-replacement-text-link": "Lien vers un nouveau fichier", "option-choice-split-replacement-text-embed": "Incorporer un nouveau fichier", "option-choice-split-replacement-text-none": "Rien", "option-template-file": "Emplacement du fichier de modèle", "option-template-file-description": "Fichier de modèle à utiliser lors de la fusion ou de l'extraction. Variables disponibles : {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, par exemple {{date:YYYY-MM-DD}}.", "command-merge-file": "Fusionner le fichier actuel avec un autre fichier...", "action-merge-file": "Fusionner tout le fichier avec...", "label-no-files": "Aucun fichier trouvé.", "instruction-navigate": "pour naviguer", "instruction-merge": "pour fusionner", "instruction-create-new": "pour créer un nouveau", "instruction-merge-at-top": "pour fusionner en haut", "instruction-dismiss": "pour annuler", "prompt-select-file-to-merge": "Sélectionner un fichier à fusionner...", "label-merge-file": "Fusionner le fichier", "label-confirm-file-merge": "Êtes-vous sûr de vouloir fusionner \"{{file}}\" vers \"{{destination}}\" ? \"{{file}}\" sera supprimé.", "button-merge": "Fusionner", "button-merge-do-not-ask-again": "Fusionner et ne pas demander à nouveau", "command-split-file": "Extraire la sélection actuelle...", "command-extract-heading": "Extraire cette entête...", "instruction-append": "pour ajouter en bas", "instruction-prepend": "pour ajouter en haut", "msg-fail-to-fetch-template": "Échec de récupération du fichier de modèle : \"{{template}}\" n'a pas été trouvé.", "msg-fail-to-find-heading": "Impossible de trouver l'entête" }, "canvas": { "name": "Canvas", "desc": "Arranger et connecter des notes dans une toile infinie.", "action-add-note": "Ajouter une note du coffre", "action-add-media": "Ajouter un média du coffre", "action-add-card": "Ajouter une carte", "action-add-website": "Ajouter une page web", "action-create-group": "Créer un groupe", "action-create-with-size": "Créer une carte avec une taille spécifique", "action-convert-to-file": "Convertir en fichier...", "action-drag-to-add-note": "Glisser pour ajouter une note du coffre", "action-drag-to-add-media": "Glisser pour ajouter un média du coffre", "action-drag-to-add-card": "Glisser pour ajouter une carte", "action-enable-grid-snapping": "Activer l'accroche de la grille", "action-disable-grid-snapping": "Désactiver l'accroche de la grille", "action-edit-label": "Éditer l'étiquette", "action-remove-label": "Supprimer l'étiquette", "action-search-file": "Chercher pour un fichier", "action-set-color": "Définir la couleur", "action-align": "Aligner", "action-align-left": "Aligner à gauche", "action-align-center": "Aligner au centre", "action-align-right": "Aligner à droite", "action-align-top": "Aligner en haut", "action-align-middle": "Aligner au milieu", "action-align-bottom": "Aligner en bas", "action-distribute-horizontal-spacing": "Répartir l'espacement horizontal", "action-distribute-vertical-spacing": "Répartir l'espacement vertical", "action-justify-horizontally": "Justifier horizontalement", "action-justify-vertically": "Justifier horizontalement", "action-stack-horizontally": "Superposer horizontalement", "action-stack-vertically": "Superposer verticalement", "action-stack-grid": "Superposer en pile", "action-export-png": "Exporter comme image", "label-export-png-desc": "Exporter \"{{title}}\" dans un fichier PNG avec les paramètres suivants.", "label-export-png-dimensions": "Dimensions estimées de l'image: {{dimensions}}", "option-export-png-show-logo": "Afficher le logo", "option-export-png-show-logo-desc": "Cela affichera le logo d'Obsidian en bas à droite.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "Un zoom plus élevé génère une image de plus haute résolution.", "option-export-png-frame": "Fenêtre d'affichage", "option-export-png-frame-desc": "Choisir d'afficher le rendu de l'ensemble de la toile ou seulement la fenêtre actuellement visible.", "option-export-png-frame-full": "Toile complète", "option-export-png-frame-viewport": "Fenêtre d'affichage uniquement", "action-remove": "Supprimer", "action-narrow": "Réduire à la section...", "action-swap-file": "Échanger le fichier...", "action-change-url": "Changer l'URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoomer sur la sélection", "action-reload-page": "Recharger la page", "action-go-to-target": "Aller à la cible", "action-go-to-source": "Aller à la source", "command-create-new-canvas": "Créer une nouvelle toile", "command-new-canvas": "Nouvelle toile", "instruction-narrow": "pour intégrer un entête", "prompt-to-narrow": "Taper le nom de l'entête", "label-enter-url": "Entrer l'URL", "label-empty-embed": "\"{{linktext}}\" ne peut pas être trouver.", "prompt-add-text": "Ajouter du texte...", "prompt-start-search": "Taper pour rechercher...", "label-canvas-help": "Aide concernant la toile", "label-no-heading": "Aucun entête", "label-pan": "Panoramique", "label-pan-horizontal": "Panoramique horizontal", "label-zoom": "Zoomer", "label-select-all": "Tout sélectionner", "label-add-remove-selection": "Ajouter à / supprimer de la sélection", "label-clone-card": "Cloner la carte", "label-constrain-movement-axis": "Limitation du mouvement de la carte à l'axe", "label-disable-drag-snapping": "Désactiver le verrouillage lors d'un déplacement", "label-remove-card": "Supprimer la carte", "label-drag-from-below": "Faites glisser depuis le bas ou double-cliquez", "label-space-drag-pan": "Espace + glisser pour faire un panoramique", "label-scroll-to-zoom": "Faites défiler pour zoomer", "label-untitled-group": "Groupe sans titre" } }, "nouns": { "word-with-count": "{{count}} mot", "word-with-count_plural": "{{count}} mots", "character-with-count": "{{count}} caractère", "character-with-count_plural": "{{count}} caractères", "link-with-count": "{{count}} lien", "link-with-count_plural": "{{count}} liens", "file-with-count": "{{count}} fichier", "file-with-count_plural": "{{count}} fichiers", "folder-with-count": "{{count}} dossier", "folder-with-count_plural": "{{count}} dossiers", "backlink-with-count": "{{count}} rétrolien", "backlink-with-count_plural": "{{count}} rétroliens", "site-with-count": "{{count}} site", "site-with-count_plural": "{{count}} sites", "plugin-with-count": "{{count}} module", "plugin-with-count_plural": "{{count}} modules", "theme-with-count": "{{count}} thème", "theme-with-count_plural": "{{count}} thèmes" } }{ "setting": { "options": "विकल्प", "plugin": "प्लग-इन", "builtin-plugins": "कोर प्लग-इन", "plugin-options": "प्लग-इन विकल्प", "folder-path-example-placeholder": "उदाहरण के लिए: फोल्डर १/फोल्डर २", "file-path-example-placeholder": "उदाहरण के लिए: फोल्डर/नोट", "msg-restart-required": "Changing this option requires a restart to take effect.", "editor": { "name": "एडिटर", "section-general": "सामान्य", "section-behavior": "व्यवहार", "section-display": "डिस्प्ले", "option-spellcheck": "स्पेल चेक", "option-spellcheck-description": "स्पेल चेक को चालू करता है। अभी के लिए केवल अंग्रेजी (युस) के साथ काम करता है।", "spellcheck-languages": "भाषा की वर्तनी जांच करें ", "spellcheck-languages-description": "Choose the languages for the spellchecker to use.", "spellcheck-languages-mac-description": "The native spellchecker will automatically detect the language being used for you on macOS.", "spellcheck-dict": "वर्तनी जांच शब्दकोश", "spellcheck-dict-empty": "वर्तनी जांच शब्दकोश खाली है।", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "पढ़ने के लिए लाइन की लम्बाई ", "option-readable-line-description": "अधिकतम लाइन लंबाई को सीमित करता है। कम सामग्री स्क्रीन पर फिट करता है, लेकिन लंबे पैराग्राफ को अधिक पढ़ने योग्य बनाता है।", "option-strict-line-break": "सख्त पंक्ति विच्छेद", "option-strict-line-break-description": "In preview mode, ignore single line breaks according to the Markdown specs. Turn this off for single line breaks to show in preview.", "option-show-frontmatter": "अग्र-सामग्री दिखाएं", "option-show-frontmatter-description": "In preview mode, show frontmatter as a code block. Turn off to hide frontmatter section.", "option-auto-pair-brackets": "स्वतः कोष्ठक बंद", "option-auto-pair-brackets-description": "कोष्ठक और उद्धरण-चिन्ह स्वतः बंद करें।", "option-auto-pair-markdown": "Auto pair Markdown syntax", "option-auto-pair-markdown-description": "Pair symbols automatically for bold and italics.", "option-smart-indent-lists": "Smart indent lists", "option-smart-indent-lists-description": "Take care of indentation and list marker for you.", "option-fold-heading": "Fold heading", "option-fold-heading-description": "Let you fold everything under a heading.", "option-fold-indent": "Fold indent", "option-fold-indent-description": "Let you fold a portion of the same indentation, such as lists.", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "संपादन रूप", "option-default-new-tab-view-reading": "पठन रूप", "option-default-editing-mode": "Default editing mode", "option-default-editing-mode-description": "The default editing mode a new pane will start with.", "option-default-editing-mode-source": "Source mode", "option-default-editing-mode-live-preview": "Live Preview", "option-show-line-number": "पंक्ति संख्या दिखाएं", "option-show-line-number-description": "Show line number in the gutter.", "option-indentation-guide": "Show indentation guides", "option-indentation-guide-description": "Show vertical relationship lines between bullet points for visual guidance.", "option-use-tabs": "टैब प्रयोग करें", "option-use-tabs-description": "Use tabs to indent when pressing the \"Tab\" key. Set this to off to use spaces.", "option-tab-size": "टैब लंबाई", "option-tab-size-description": "Number of spaces a tab is equivalent to.", "option-rtl": "दाएं-से-बाएं", "option-rtl-description": "Sets the text direction of notes to display in right-to-left.", "option-auto-convert-html": "HTML स्वत: परिवर्तित करें", "option-auto-convert-html-description": "Automatically convert HTML to Markdown when pasting and drag-and-drop from webpages. Use Ctrl/Cmd+Shift+V to paste without conversion.", "option-vim-key-bindings": "Vim key bindings", "option-vim-key-bindings-description": "Let you use Vim key bindings in the source editor.", "option-vim-key-bindings-mobile": "On mobile devices, this setting is per-device and is not synchronized through the config file.", "option-emacsy-keys": "Legacy Emacs-style key bindings for macOS", "option-emacsy-keys-description": "Allows you to use the additional Emacs-style navigation keys, which are standard on macOS, but may interfere with some key operations.", "label-confirm-enable-vim": "Confirm entering Vim mode", "label-vim-warning": "Vim mode is for efficient text editing but can be quite counter-intuitive. If you're not familiar with Vim, this option might make it look like Obsidian has stopped working.", "label-vim-test": "To verify that you know your way around Vim, please enter the command to quit Vim without saving below:", "label-vim-your-answer": "आपका उत्तर", "placeholder-enter-command": "आदेश डालें...", "button-confirm-enable-vim": "Let me enable Vim", "msg-vim-mode-enabled": "Command is correct. Vim mode now enabled.", "msg-vim-mode-not-enabled": "Command is incorrect. Vim mode remains disabled to protect you.", "msg-vim-mode-please-enter-command": "Please enter the command to enable Vim mode", "option-legacy-editor": "Use legacy editor", "option-legacy-editor-description2": "The legacy editor will be deprecated soon. It is currently no longer maintained, and as such, bugs will no longer be addressed.", "label-legacy-deprecation": "New editor is here", "label-legacy-deprecation-1": "Obsidian now has a brand new editor that's more robust and accessible.", "label-legacy-deprecation-2": "It seems you're still using the legacy editor, and we think you'll enjoy the new editor.", "label-legacy-deprecation-choice": "Which mode would you like to use?", "label-live-preview-description": "A more modern, what-you-see-is-what-you-get experience.", "label-source-mode-description": "See raw Markdown with syntax highlighting.", "button-start-new-editor": "Start new editor" }, "file": { "name": "Files & Links", "option-confirm-file-deletion": "Confirm file deletion", "option-confirm-file-deletion-description": "Whether you want to get prompted to confirm file deletion.", "option-delete-destination": "Deleted files", "option-delete-destination-description": "What to do with files after you delete them.", "option-choice-system-trash": "Move to system trash", "option-choice-vault-trash": "Move to Obsidian trash (.trash folder)", "option-choice-permanent-delete": "Permanent delete", "option-always-update-links": "Always update internal links", "option-always-update-links-description": "Whether to automatically update links after renaming a file or prompt.", "option-new-note-location": "New note default location", "option-new-note-location-description": "Where to put newly created notes. Plugin settings will override this.", "option-choice-vault-root": "Vault root", "option-choice-current-folder": "Same folder as the file is in", "option-choice-specified-folder": "In the folder specified below", "option-new-file-folder-path": "Folder to create new notes in", "option-new-file-folder-path-description": "Newly created notes will appear under this folder. Plugin settings will override this.", "option-use-wiki-links": "Use [[Wikilinks]]", "option-use-wiki-links-description": "Auto-generate Wikilinks for [[links]] and ![[images]] instead of Markdown links and images. Disable this option to generate Markdown links instead.", "option-show-unsupported-files": "Detect all file extensions", "option-show-unsupported-files-description": "Show files with any extension even if Obsidian can't open them natively, so that you can link to them and see them in File Explorer and Quick Switcher.", "option-link-autocompleted-format": "New link format", "option-link-autocompleted-format-description": "What links to insert when auto generating internal links.", "option-choice-shortest-linktext": "Shortest path when possible", "option-choice-relative-path": "Relative path to file", "option-choice-absolute-path": "Absolute path in vault", "option-new-attachment-location": "Default location for new attachments", "option-new-attachment-location-description": "Where newly added attachments are placed.", "option-choice-subdirectory": "In subfolder under current folder", "option-attachment-folder-path": "Attachment folder path", "option-attachment-folder-path-description": "Newly created attachment files will appear here. That includes images created via drag and drop or pasting, and audio recordings.", "option-attachment-subfolder-path": "Subfolder name", "option-attachment-subfolder-path-description": "If your file is under \"vault/folder\", and your set subfolder name to \"attachments\", attachments will be saved to \"vault/folder/attachments\".", "option-attachment-subfolder-path-placeholder": "attachments", "option-excluded-files": "Excluded files", "option-excluded-files-desc": "Excluded files will be either hidden or less noticeable in various places, such as Quick Switcher, link suggestion, and Graph View.", "label-no-excluded-filters-applied": "No excluded filter is applied right now. Add one below.", "label-excluded-filters-applied": "Files matching the following filters are currently excluded:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Enter path or \"/regex/\"..." }, "appearance": { "name": "रूप", "option-base-theme": "आधार थीम", "option-base-theme-description": "ओब्सीडियन की डिफाल्ट रंग प्रणाली चुनें।", "option-accent-color": "Accent color", "option-accent-color-description": "Choose the accent color used throughout the app.", "dark-theme": "काली", "light-theme": "सफेद", "system-theme": "Adapt to system", "option-font": "Font", "option-advanced": "Advanced", "option-interface-font": "Interface font", "option-interface-font-description": "Set base font for all of Obsidian.", "option-text-font": "Text font", "option-text-font-description": "Set font for editing and reading views.", "option-monospace-font": "Monospace font", "option-monospace-font-description": "Set font for places like code blocks and frontmatter.", "label-single-font-currently-in-effect": " Currently applied font: ", "label-multiple-fonts-currently-in-effect": " The following fonts are currently applied:", "option-font-placeholder": "Enter font name...", "label-no-custom-font-set": "No custom font is applied right now. Add one below.", "label-font-applied": "The first font from this list that is available on your system will be applied.", "msg-font-not-found": "This font is not detected on your system.", "msg-font-found": "This font is detected on your system.", "label-font-name": "Font name", "option-community-themes": "कम्युनिटी थीम खोलें", "option-community-themes-description": "कम्युनिटी के द्वारा बनायी गयी अद्भुत थीम्स की समीक्षा करें और प्रयोग करें ।", "button-browse-community-themes": "ब्राउज़", "option-font-size": "Font size", "option-font-size-description": "Font size in pixels that affects editor and preview.", "option-font-size-action": "Quick font size adjustment", "option-font-size-action-description": "Adjust the font size using Ctrl + Scroll, or using the trackpad pinch-zoom gesture.", "option-themes": "थीम्स", "option-manage-themes-description": "Manage installed themes and browse community themes.", "option-theme-button-manage": "Manage", "option-choice-none": "None", "option-native-menus": "Native menus", "option-native-menus-desc": "Menus throughout the app will match the operating system. They will not be affected by your theme.", "button-reload-themes": "Reload themes", "msg-reloaded-themes": "Reloaded custom CSS themes.", "button-open-themes-folder": "Open themes folder", "option-css-snippets": "CSS snippets", "label-no-css-snippets-found": "No CSS snippets found in the snippets folder.", "no-snippet-description": "CSS Snippets are stored in \"{{path}}\".", "button-reload-snippets": "Reload snippets", "button-open-snippets-folder": "Open snippets folder", "msg-reloaded-snippets": "Reloaded CSS snippets.", "option-toggle-snippet-description": "Apply CSS snippet at \"{{path}}\".", "label-installed-themes": "Installed themes", "label-screenshot-unavailable": "Screenshot unavailable", "label-default-theme": "Default", "tooltip-click-to-enlarge": "Click to enlarge", "button-update": "Update", "label-currently-selected": "Selected", "option-frame-style": "Window frame style", "option-frame-description": "Determines the styling of the title bar of Obsidian windows. Requires a full restart to take effect.", "option-frame-hidden": "Hidden (default)", "option-frame-obsidian": "Obsidian frame", "option-frame-native": "Native frame", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Show tab title bar", "option-show-view-header-desc": "Display the header at the top of every tab.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "button-check-for-updates": "Check for updates", "button-view-updates": "View updates", "button-update-all-themes": "Update all", "label-current-themes": "Current community themes", "label-currently-installed": "You currently have {{count}} theme installed.", "label-currently-installed_plural": "You currently have {{count}} themes installed." }, "hotkeys": { "name": "हॉटकी", "prompt-filter": "फ़िल्टर...", "tooltip-delete-hotkey": "हॉटकी हटाएी", "label-waiting-for-hotkey-press": "हॉटकी दबाएँ...", "tooltip-restore-default": "डिफ़ॉल्ट सेटिंग्स को पुनर्स्थापित करें", "tooltip-customize-command": "कमांड को बदलें", "tooltip-hotkey-single-conflict": "यह हॉटकी संघर्ष करता है \"{{command}}\" कमांड के साथो", "tooltip-hotkey-multiple-conflicts": "यह हॉटकी संघर्ष करता है {{count}} कमांडो के साथो", "label-blank-hotkey": "खाली" }, "about": { "name": "About", "label-commercial-license": "Commercial license", "label-license-key": "License key", "license-key-placeholder": "Your license key...", "label-activate-license": "एक्टिवटे लाइसेंस", "button-activate": "Activate", "label-unknown-version": "अनजान", "label-current-version": "Current version: ", "label-install-version": "(Installer version: {{version}})", "label-up-to-date": "Your app is up to date!", "label-read-changelog": "Read the changelog.", "label-manual-update-required": "To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.", "label-download": "Download", "label-new-version-ready": "A new version is ready to be installed. ", "label-relaunch-to-update": "Relaunch the app to update.", "label-disabled-updates": "Updates are disabled.", "label-checking-for-updates": "Checking for updates...", "button-relaunch": "Relaunch", "button-check-for-updates": "Check for updates", "option-auto-update": "Automatic updates", "option-auto-update-description": "Turn this off to prevent the app from checking for updates.", "option-get-help": "Get help", "option-get-help-description": "Get help on using Obsidian.", "button-open": "Open", "option-language": "Language", "option-language-description": "Change the display language.", "option-insider-build": "Receive insider builds", "option-insider-build-description": "Auto-update to insider builds to try out new features. Note that these builds are bleeding edge and might be less stable.", "option-advanced": "Advanced", "option-hw-acceleration": "Hardware Acceleration", "option-hw-acceleration-description": "Turns on Hardware Acceleration, which uses your GPU to make Obsidian smoother.", "option-hw-acceleration-warning": "If you turn this off, app performance will be severely degraded.", "option-config-location": "Override config folder", "option-config-location-description": "Use a different config folder than the default one. Must start with a dot.", "option-config-location-warning": "Config location must be a valid folder name that starts with a dot.", "label-license": "License", "label-your-commercial-license-key": "Your commercial license key is \"{{key}}\".", "label-commercial-license-info": "Registered to \"{{company}}\" for {{seats}} users. Valid until {{expiry}}.", "label-validating-commercial-license": "Validating...", "label-invalid-commercial-license": "License invalid: ", "button-remove-commercial-license": "Remove", "option-catalyst": "Catalyst license", "option-catalyst-desc": "You currently have the {{tier}} Catalyst license. Thanks for your support!", "option-catalyst-desc-no-license": "You don't have a Catalyst license right now. Catalyst license is a one-time donation to support Obsidian development.", "label-app": "App" }, "account": { "name": "खाता", "option-your-account": "Your account", "option-your-account-desc": "You're currently signed in {{name}} ({{email}}).", "option-your-account-desc-no-login": "You're not logged in right now. An account is only needed for Obsidian Sync, Obsidian Publish, and Catalyst insider builds.", "button-manage-settings": "Manage settings", "label-insider": "इंसाईडर", "label-supporter": "समर्थक", "label-vip": "वीआईपी", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Commercial license", "option-commercial-license-desc": "If you use Obsidian for commercial purpose, you may need to get a commercial license.", "button-purchase": "Purchase", "button-log-out": "लॉग आउट ", "label-log-in": "लॉग इन", "label-sign-up": "Sign up", "label-email": "ईमेल", "placeholder-email": "आपका ईमेल...", "label-password": "पासवर्ड", "placeholder-password": "आपका पासवर्ड...", "button-login": "लॉग इन", "message-empty-email": "ईमेल खाली नहीं हो सकता।", "message-invalid-email": "ईमेल मान्य नहीं है।", "message-empty-password": "पासवर्ड खाली नहीं हो सकता|", "message-login-failed": "लॉगिन विफल, कृपया अपना ईमेल और पासवर्ड दोबारा जांचें।", "label-no-account": "खाता नहीं है? ", "link-sign-up-now": "अभी साइनअप करें" }, "core-plugin": { "plugin-list": "Plugin list", "option-search-plugin": "Search core plugins", "option-search-plugin-description": "Filter plugins by name or description.", "placeholder-search-plugin": "Search plugins..." }, "third-party-plugin": { "name": "Third-party plugin", "option-restricted-mode": "Restricted mode", "option-restricted-mode-description": "Restricted Mode is off. Turn on to disable community plugins.", "button-turn-on": "Turn on", "option-browse-community-plugins": "Community plugins", "option-browse-community-plugins-description": "Browse and install third-party plugins made by our amazing community.", "button-browse": "Browse", "label-exit-restricted-mode": "Exit Restricted Mode", "label-exit-restricted-mode-description-1": "Community plugins, like any other software you install, could potentially cause data integrity and security issues.", "label-exit-restricted-mode-description-2": "Plugin security is important to us. Here's what we do:", "label-exit-restricted-mode-description-3": "Despite our efforts, there is still a small chance that a community plugin might misbehave.", "label-code-review": "Initial code review", "label-code-review-desc": "Plugins undergo an initial code review by our team before they appear in the store.", "label-open-source": "Open source", "label-open-source-desc": "Most plugins are open source on GitHub, so you can inspect the code yourself.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We have a large community of developers who watch out for each other.", "label-report-mechanism": "Report mechanism", "label-report-mechanism-desc": "We follow up and remove faulty plugins upon user report.", "label-exit-restricted-mode-disable-confirmation": "Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.", "label-learn-more": "Learn more about plugin security", "button-turn-on-community-plugins": "Turn on community plugins", "label-trust-author": "Do you trust the author of this vault?", "label-trust-author-description-1": "You're opening this vault for the first time, and it comes with some plugins.", "label-trust-author-description-2": "If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.", "label-trust-author-description-3": "If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.", "button-enable-plugins": "Trust author and enable plugins", "button-dont-trust-author": "Browse vault in Restricted Mode", "placeholder-community-plugins": "Search community plugins...", "msg-failed-load-plugins": "Failed to load community plugins.", "label-installed": "Installed", "button-install": "Install", "button-enable": "Enable", "button-disable": "Disable", "button-copy-share-link": "Copy share link", "button-donate": "Donate", "label-no-results-found": "No results found.", "msg-failed-to-load-manifest": "Failed to load plugin manifest.", "label-version": "Version: {{version}}", "label-currently-installed-version": " (currently installed: {{version}})", "label-by-author": "By ", "label-repository": "Repository: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "This plugin does not support your device.", "button-update": "Update", "label-no-readme": "This plugin did not provide a README file.", "msg-installing-plugin": "Installing plugin \"{{name}}\"...", "msg-failed-to-install-plugin": "Failed to install plugin \"{{name}}\".", "msg-successfully-installed-plugin": "Successfully installed plugin \"{{name}}\".", "label-installed-plugins": "Installed plugins", "button-reload-plugins": "Reload plugins", "msg-reloaded-third-party-plugins": "Reloaded third-party plugins.", "label-uninstall": "Uninstall", "label-uninstall-plugin": "Uninstall plugin", "label-uninstall-plugin-confirmation": "Are you sure you want to uninstall this plugin? This will delete the folder of the plugin.", "button-open-plugins-folder": "Open plugins folder", "button-check-for-updates": "Check for updates", "button-update-all-plugins": "Update all", "label-current-plugins": "Current plugins", "label-currently-installed": "You currently have {{count}} plugin installed.", "label-currently-installed_plural": "You currently have {{count}} plugins installed.", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Show a message with how long each plugin took to initialize when starting the app.", "msg-no-updates-found": "No plugin updates found.", "msg-updates-found": "Found {{count}} plugin to update.", "msg-updates-found_plural": "Found {{count}} plugins to update.", "msg-update-plugin": "Update to version {{version}}", "option-search-installed-plugin": "Search installed plugins", "option-search-installed-plugin-description": "Filter installed plugins by name or description.", "placeholder-search-installed-plugin": "Search installed plugins...", "show-installed-only": "Show installed only", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "Showing {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Mobile toolbar", "option-configure-quick-action": "Configure mobile Quick Action", "option-configure-quick-action-description": "Configure which command to trigger when pull down from the top. The current command is set to \"{{command}}\".", "button-configure": "Configure", "placeholder-select-quick-action": "Select Quick Action...", "manage-toolbar-options": "Manage toolbar options", "option-internal-link": "Add internal link", "option-internal-embed": "Add embed", "option-tag": "Add tag", "option-heading": "Toggle heading", "option-strikethrough": "Toggle strikethrough", "option-highlight": "Toggle highlight", "option-code": "Toggle code", "option-blockquote": "Toggle blockquote", "option-markdown-link": "Add Markdown link", "option-bullet-list": "Toggle bullet list", "option-numbered-list": "Toggle numbered list", "option-indent-list": "Indent list item", "option-unindent-list": "Unindent list item", "option-undo": "Undo", "option-redo": "Redo", "option-move-caret-up": "Move caret up", "option-move-caret-down": "Move caret down", "option-move-caret-left": "Move caret left", "option-move-caret-right": "Move caret right", "option-first-line": "Go to first line", "option-last-line": "Go to last line", "option-toggle-keyboard": "Toggle keyboard", "option-configure-toolbar": "Configure mobile toolbar", "option-added-options": "Added options", "option-more-toolbar-options": "More toolbar options", "option-attach": "Insert attachment", "option-add-command": "Add global command", "option-add-command-description": "Select any global command to add to the toolbar." } }, "editor": { "search": { "placeholder-find": "Find", "placeholder-replace": "Replace", "label-previous": "पिछला", "label-next": "अगला", "label-all": "सब", "label-exit-search": "खोज मोड से बाहर निकलें", "label-replace": "बदलें", "label-replace-all": "सबको बदली करें" }, "link-suggestion": { "label-type-hash": "Type #", "label-link-heading": "to link heading", "label-type-block": "Type ^", "label-link-block": "to link blocks", "label-type-pipe": "Type |", "label-change-display-text": "to change display text", "label-no-match-found": "No match found" }, "spellcheck": { "no-suggestion": "No suggestions...", "add-to-dictionary": "Add to dictionary" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "No heading", "label-heading-level": "Heading {{level}}" }, "print-modal": { "title": "Export to PDF", "caption": "Export \"{{filename}}\" to PDF with the setting below.", "setting-page-size": "Page size", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Include file name as title", "setting-landscape": "Landscape", "setting-margin": "Margin", "setting-margin-default": "Default", "setting-margin-minimal": "Minimal", "setting-margin-none": "None", "setting-downscale-percent": "Downscale percent", "button-export-to-pdf": "Export to PDF" }, "link-popover": { "tooltip-follow-link": "Follow link", "tooltip-open-link": "Open link", "tooltip-search-tag": "Search tag" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Open in default app", "empty-sidebar": "The sidebar is empty, try dragging a pane here.", "sidebar-expand": "Expand", "sidebar-collapse": "Collapse", "msg-fail-to-save-file": "Failed to save file \"{{filepath}}\". {{message}}.", "no-file": "No file", "msg-file-changed": "\"{{file}}\" has been modified externally, merging changes automatically.", "switch-vault": "Open another vault", "help": "Help", "settings": "Settings", "drag-to-rearrange": "Drag to rearrange", "msg-switched-to-read": "Switched default view mode to reading view.", "msg-switched-to-edit": "Switched default view mode to editor.", "msg-upgrade-installer": "To use this feature, please re-install with latest installer available from our website.", "tooltip-restore-default-settings": "Restore default settings", "label-copy": "Copy to clipboard", "copied_generic": "Copied to your clipboard", "copied": "{{item}} copied to your clipboard", "url": "Url", "msg-open-file-through-uri": "Opened file \"{{path}}\"", "msg-file-not-found-through-uri": "File \"{{name}}\" not found.", "delete-action-short-name": "Delete", "msg-indexing": "Obsidian is indexing your vault...\nThis should only happen once.\nSome functionality may not be available until this is complete.", "msg-indexing-complete": "Indexing complete.", "msg-sandbox-vault": "This is a sandbox vault.\nChanges you make in this vault will be lost.", "label-enter-to-create": "Enter to create", "label-update-available": "Update Available", "label-debug-info": "Debug info", "button-learn-more": "Learn more", "button-not-now": "Not now", "button-add": "Add", "button-manage": "Manage", "label-new-tab": "New tab", "msg-tab-busy": "This tab is currently busy, please try again later", "empty-state": { "no-file-open": "No file is open", "create-new-file": "Create new file", "go-to-file": "Go to file", "see-recent-files": "See recent files", "close": "Close", "unknown-pane-title": "Plugin no longer active", "unknown-pane-desc": "The plugin that created this pane ({{type}}) has gone away" }, "menu": { "edit-view": "Edit (Ctrl/Cmd+Click to edit in new pane)", "read-view": "Current view: reading", "switch-to-edit-view": "Click to edit", "switch-to-read-view": "Click to read", "mod-click-open-new-tab": "{{key}}+Click to open in new tab", "find": "Find...", "replace": "Replace...", "edit": "Edit", "preview": "Preview", "more-options": "More options", "close": "Close", "close-others": "Close others", "close-right": "Close tabs to the right", "pin": "Pin", "unpin": "Unpin", "unlink-tab": "Unlink tab", "link-tab": "Link with tab...", "toggle-source-mode": "Source mode", "toggle-reading-view": "Reading view", "delete-file": "Delete file", "create-file": "Create this file", "open-link": "Open link", "open-in-new-tab": "Open in new tab", "open-to-the-right": "Open to the right", "copy-url": "Copy url", "close-current-tab": "Close current tab", "copy": "Copy", "cut": "Cut", "paste": "Paste", "paste-as-plain-text": "Paste as plain text", "select-all": "Select all", "rename-heading": "Rename this heading...", "rename-blockid": "Rename this block ID...", "open-in-new-window": "Open in new window", "move-to-new-window": "Move to new window", "open-in-browser": "Open in browser", "stack-tabs": "Stack tabs", "unstack-tabs": "Unstack tabs" }, "tooltip": { "click-to-expand": "बड़ा करने के लिए क्लिक करे ", "click-to-collapse": "छोटा करने के लिए क्लिक करे", "alias": "Alias", "not-created-yet": "Not created yet, select to create" }, "start-screen": { "label-version": "Version", "option-open-folder-as-vault": "Open folder as vault", "option-open-folder-as-vault-description": "Choose an existing folder of Markdown files.", "option-create-vault": "Create new vault", "option-create-vault-description": "Create a new Obsidian vault under a folder.", "option-connect-obsidian-sync": "Connect to Obsidian Sync", "option-connect-obsidian-sync-description": "Set up a synced vault with existing remote vault.", "option-new-vault-name": "Vault name", "option-new-vault-name-description": "Pick a name for your awesome vault.", "option-new-vault-location": "Location", "option-new-vault-location-description": "Pick a place to put your new vault.", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Reveal vault in system explorer", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "Rename vault...", "msg-error-rename-exists": "There is already a vault with this name.", "msg-error-nested": "Cannot move vault into a subfolder of itself.", "msg-error-rename-open": "Can't rename a currently open vault.", "msg-rename-failed": "Failed to rename vault.", "msg-rename-success": "Successfully renamed vault.", "option-move-vault": "Move vault...", "msg-move-select-dest": "Select destination folder", "msg-error-move-exists": "There is already a vault at the destination.", "msg-error-move-open": "Can't move a currently open vault.", "msg-move-failed": "Failed to move vault.", "msg-move-success": "Successfully moved vault.", "option-remove": "Remove from list", "button-quick-start": "Quick start", "button-open": "Open", "button-browse": "Browse", "button-connect": "Connect", "button-create-vault": "Create", "button-back": "Back", "msg-empty-vault-name": "Vault name cannot be empty.", "msg-invalid-folder": "Please pick a valid folder.", "msg-failed-to-create-vault": "Failed to create vault.", "msg-failed-to-create-vault-at-location": "Could not create vault at the given location. Please double check the location and permission.", "msg-error-failed-to-open-vault": "Failed to open.", "msg-error-remove-current-open-vault": "Can't remove a currently open vault.", "option-get-help": "Get Help", "option-user-email": "Email", "placeholder-your-email": "Your email...", "option-user-password": "Password", "placeholder-your-password": "Your password...", "button-sign-in": "Sign in", "button-setup": "Setup", "option-connect-vault-desc": "Create a synced vault on this device.", "tooltip-own-vault": "This is a remote vault owned by you.", "tooltip-shared-vault": "This is a remote vault shared with you." }, "drag-and-drop": { "insert-link-here": "Insert link here", "insert-links-here": "Insert links here", "move-into-folder": "Move into \"{{folder}}\"", "star-this-file": "Star this file", "star-these-files": "Star these files", "open-in-this-tab": "Open in this tab", "open-as-tab": "Open as new tab" }, "window": { "maximize": "Maximize", "minimize": "Minimize", "restore-down": "Restore down", "close-window": "Close window", "go-back": "Go back", "go-forward": "Go forward" }, "start-up": { "loading-obsidian": "Loading Obsidian...", "obsidian-load-error": "An error occurred while loading Obsidian.", "button-reload-app": "Reload app", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "Open another vault", "loading-components": "Loading components...", "loading-plugins": "Loading plugins...", "loading-vault": "Loading vault...", "msg-failed-to-load-vault": "Failed to load vault: ", "loading-cache": "Loading cache...", "loading-workspace": "Loading workspace..." }, "mobile": { "action-import": "Import into vault", "action-choose-file-to-insert": "Choose a file to insert", "action-insert-text-into-file": "Insert text into {{filename}}", "action-insert-link-into-file": "Insert link into {{filename}}", "msg-importing": "Importing...", "msg-import-success": "Import success", "msg-failed-to-import-file": "Failed to import file {{filename}}", "msg-back-again-to-exit": "Press back again to exit." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "करंट फाइल सेव करे", "follow-cursor-link": "कर्सर के नीचे लिंक को फॉलो करे", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "पिन टॉगल करें", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "वापस नेविगेट करें", "navigate-forward": "आगे नेविगेट करें", "use-dark-mode": "डार्क मोड का उपयोग करें", "use-light-mode": "लाइट मोड का उपयोग करें", "change-theme": "Change theme", "search-current-file": "वर्तमान फ़ाइल खोजें", "search-replace-current-file": "वर्तमान फ़ाइल में खोजें और बदलें", "open-settings": "सेटिंग्स खोलें", "open-help": "हेल्प खोले", "toggle-edit": "Toggle editing/reading view", "toggle-source-mode": "Toggle Live Preview/Source mode", "delete-current-file": "वर्तमान फ़ाइल नष्ट करे", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "बाएं साइडबार को टॉगल करें", "toggle-right-sidebar": "दाएं साइडबार को टॉगल करें", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "Focus on editor", "toggle-fold": "करंट लाइन पर फोल्ड टॉगल करे ", "fold-all": "सब हैडिंग और लिस्ट को बंद करे", "unfold-all": "सब हैडिंग और लिस्ट को खोले", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "लाइन को ऊपर डाले", "swap-line-down": "लाइन को नीचे डाले", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "चयन के लिए बोल्ड टॉगल करें", "toggle-italics": "चयन के लिए इटैलिक टॉगल करें", "toggle-highlight": "चयन के लिए हाइलाइट टॉगल करें", "toggle-comments": "Toggle comments for selection", "insert-link": "लिंक डालें", "toggle-spellcheck": "Toggle spellcheck", "delete-paragraph": "पैराग्राफ हटाएं", "toggle-checklist": "Toggle checklist status", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "Edit file title", "copy-path": "Copy file path", "copy-url": "Copy obsidian url", "export-pdf": "Export to PDF", "reload": "Reload app without saving", "undo-close-tab": "Undo close tab", "context-menu": "Show context menu under cursor", "show-debug-info": "Show debug info", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "एडिट / प्रीव्यू मोड को टॉगल करे", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "यह {{links}} को इन {{files}} मैं प्रभावित करेगा।", "msg-updated-links": "{{files}} में {{links}} अपडेटेड है।", "label-update-links": "लिंक्स अपडेट करें", "label-confirm-update-link-to-file": "क्या आप इंटरनल लिंक्स को अपडेट करना चाहते हैं जो इस फाइल से जुड़े है?", "button-always-update": "हमेशा अपडेट करे", "button-just-once": "खाली एक बार करे", "button-do-not-update": "अपडेट न करें", "label-confirm-deletion": "क्या आप पक्का इसे नष्ट करना चाहते हैं \"{{filename}}\"?", "label-move-to-system-trash": "इसे आपके सिस्टम ट्रैश में ले जाया जाएगा।", "label-move-to-vault-trash": "इसे आपके ओब्सीडियन ट्रैश में ले जाया जाएगा जो की आपके \".trash\" छिपा फ़ोल्डर में स्थित है।", "label-permanent-delete": "ये फाइल हमेशा के लिए नष्ट हो जायेगा।", "label-non-empty-folder": "ये फोल्डर खाली नहीं है।", "label-delete-folder-warning": "अगर आप आगे बढ़ेंगे तोह इस फोल्डर के अंदर सब फाइल्स नष्ट होजाएंग।", "label-delete-folder": "फोल्डर नष्ट करो", "button-delete": "नष्ट करो", "button-delete-do-not-ask-again": "नष्ट करो और वापिस मत पूछो", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "अभी के लिए इस नोट की ओर {{links}} संकेत हैं।", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "फ़ाइल नष्ट करें", "button-manage": "Manage", "button-cancel": "Cancel", "button-done": "Done", "button-save": "Save", "button-stop": "Stop", "button-continue": "Continue", "preparing-pdf": "Preparing PDF...", "label-rename-file": "Rename file", "label-new-name": "New name", "msg-rename-success": "Successfully renamed file.", "label-rename-heading": "Rename heading", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "Plugins", "file-explorer": { "name": "File explorer", "desc": "See all the files in your vault.", "action-open": "Open file explorer", "action-show": "Show file explorer", "action-create-note": "Create new note", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "New note", "action-new-folder": "New folder", "action-change-sort": "Change sort order", "action-reveal-file": "Reveal file in file explorer", "action-reveal-active-file": "Reveal active file in file explorer", "command-move-file": "Move file to another folder", "action-move-file": "Move file to...", "action-move-folder": "Move folder to...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "Type a folder", "label-no-folders": "No folders found.", "instruction-navigate": "to navigate", "instruction-move": "to move", "instruction-dismiss": "to dismiss", "label-sort-a-to-z": "Sort by file name (A to Z)", "label-sort-z-to-a": "Sort by file name (Z to A)", "label-sort-new-to-old": "Sort by edit time (new to old)", "label-sort-old-to-new": "Sort by edit time (old to new)", "label-sort-created-old-to-new": "Created time (old to new)", "label-sort-created-new-to-old": "Created time (new to old)", "menu-opt-new-note": "New note", "menu-opt-new-folder": "New folder", "menu-opt-set-attachment-folder": "Set as attachment folder", "menu-opt-rename": "Rename", "menu-opt-delete": "Delete", "menu-opt-make-copy": "Make a copy", "msg-invalid-characters": "File name cannot contain any of the following characters: ", "msg-unsafe-characters": "Links will not work with file names containing any of these characters: ", "msg-file-already-exists": "There's already a file with the same name", "msg-empty-file-name": "File name cannot be empty.", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "Last modified at {{time}}", "tooltip-created-time": "Created at {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Move", "label-untitled-file": "Untitled", "label-untitled-folder": "Untitled", "msg-set-attachment-folder": "Attachments will be saved to \"{{path}}\" from now on." }, "search": { "name": "Search", "desc": "Search for keyword in all the notes.", "action-open-search": "Search in all files", "label-collapse-results": "Collapse results", "label-match-case": "Match case", "label-explain-search-term": "Explain search term", "label-more-context": "Show more context", "prompt-start-search": "Type to start search...", "label-match-text": "Matches text: ", "label-match-regex": "Matches regex: ", "label-match-exact-text": "Contains exact text: ", "label-match-all": "Match all of: ", "label-match-any": "Match any of: ", "label-excluding": "Excluding: ", "label-case-sensitive": "Case sensitive", "label-case-insensitive": "Case insensitive", "label-match-file-path": "Match file path: ", "label-match-file-name": "Match file name: ", "label-match-content": "Match file content: ", "label-match-task": "Match task: ", "label-match-task-todo": "Match task (todo): ", "label-match-task-done": "Match task (done): ", "label-match-line": "Match line: ", "label-match-block": "Match block: ", "label-match-section": "Match section: ", "label-match-tag": "Match tag: ", "label-no-matches": "No matches found.", "matches-with-count": "... and {{count}} more match.", "matches-with-count_plural": "... and {{count}} more matches.", "label-copy-search-results": "Copy search results", "button-copy-results": "Copy results", "msg-successfully-copied": "Results copied to your clipboard.", "option-show-path": "Show path", "option-show-path-description": "Display full path of the file rather than just the file name.", "option-link-style": "Link style", "option-link-style-description": "Optionally turn each file result in to a link.", "option-choice-link-style-none": "None", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Markdown link", "option-list-prefix": "List prefix", "option-list-prefix-description": "Optionally add a list item prefix to each file result.", "option-choice-list-style-none": "None", "option-choice-list-style-dash": "Dash (-)", "option-choice-list-style-asterisk": "Asterisk (*)", "option-choice-list-style-numbered": "Numbered", "tooltip-clear-search": "Clear search", "label-search-options": "Search options", "tooltip-read-more": "Read more", "label-history": "History", "tooltip-clear-history": "Clear search history", "label-path-option-description": "match path of the file", "label-file-name-option-description": "match file name", "label-tag-option-description": "search for tags", "label-line-option-description": "search keywords on same line", "label-section-option-description": "search keywords under same heading", "menu-opt-search-for": "Search for \"{{keyword}}\"" }, "quick-switcher": { "name": "Quick switcher", "desc": "Jump to any files without leaving your keyboard. Ctrl/Cmd+O to activate.", "short-name": "Switcher", "action-open": "Open quick switcher", "instruction-navigate": "to navigate", "instruction-open": "to open", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "to create", "instruction-dismiss": "to dismiss", "label-no-note-create-new": "No notes found. Enter to create a new one.", "prompt-type-file-name": "Type file to switch to or create...", "label-enter-to-create": "Enter to create", "tooltip-not-created-yet": "Not created yet, select to create", "option-show-existing-only": "Show existing only", "option-show-existing-only-description": "Whether to show links to files that are not yet created.", "option-show-attachments": "Show attachments", "option-show-attachments-desc": "Show attachment files like images, videos, and PDFs.", "option-show-all-file-types": "Show all file types", "option-show-all-file-types-desc": "Show all files including ones that Obsidian can't open. The file will be opened with the default app for that file type." }, "graph-view": { "name": "Graph view", "desc": "See a graph overview of which notes link to which.", "action-open": "Open graph view", "action-open-local": "Open local graph", "action-copy-screenshot": "Copy screenshot", "tab-title": "Graph of {{displayText}}", "label-filters": "Filters", "prompt-filter-nodes": "Search files...", "option-depth": "Depth", "option-depth-description": "Show nodes this number of links away", "option-neighbor-links": "Neighbor links", "option-neighbor-links-description": "Show links between neighbors.", "option-forelinks": "Outgoing links", "option-forelinks-description": "Show links to other files", "option-backlinks": "Incoming links", "option-backlinks-description": "Show links from other files", "option-show-tags": "Tags", "option-show-tags-description": "Tags are linked to the files that contain them", "option-show-attachments": "Attachments", "option-show-attachments-description": "Show attachments included by files", "option-show-existing-files-only": "Existing files only", "option-show-existing-files-only-description": "When checked, links to nonexistent files are not shown", "option-show-orphans": "Orphans", "option-show-orphans-description": "Show files that are not linked to any other file", "label-display": "Display", "option-show-arrows": "Arrows", "option-show-arrows-description": "Show arrows when zoomed in", "option-text-fade": "Text fade threshold", "option-node-size": "Node size", "option-link-thickness": "Link thickness", "label-forces": "Forces", "option-center-force": "Center force", "option-link-force": "Link force", "option-link-distance": "Link distance", "option-repel-force": "Repel force", "tooltip-open-graph-settings": "Open graph settings", "msg-screenshot-copied": "Screenshot copied to the clipboard.", "label-groups": "Groups", "placeholder-enter-query": "Enter query...", "tooltip-delete-graph": "Delete group", "button-new-group": "New group", "tooltip-click-to-change-drag-to-reorder": "Click to change color\nDrag to reorder groups", "action-timelapse": "Start graph timelapse animation", "tooltip-start-timelapse-animation": "Start timelapse animation", "button-animate-timelapse": "Animate" }, "backlinks": { "name": "बैकलिंक", "desc": "स्टेटस बार में बैकलिंक्स की संख्या दिखाएं।", "action-open": "बैकलिंक्स खोलें", "action-show": "बैकलिंक्स पैनल दिखाएं", "action-open-for-current": "वर्तमान फ़ाइल के लिए बैकलिंक्स खोलें", "action-toggle-backlinks-in-document": "दस्तावेजों में बैकलिंक्स टॉगल करें", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "लिंक्ड मेनशान", "label-no-backlinks": "कोई लिंक्ड मेनशान नहीं मिला।", "label-unlinked-mentions": "अनलिंक्ड मेनशान", "label-show-search": "सरच फ़िल्टर दिखाएं", "label-link-button-text": "लिंक", "tab-title": "{{displayText}} के लिए बैकलिंक", "label-no-unlinked-mentions": "कोई अनलिंक्ड मेनशान नहीं मिला।", "ellipsis": "...", "option-backlink-in-document": "Backlink in document", "option-backlink-in-document-desc": "Show backlinks in document by default when opening new panes." }, "outgoing-links": { "name": "Outgoing Links", "desc": "Show outgoing links and detect unlinked mentions of other notes in the current note.", "action-open": "Open outgoing links", "action-show": "Show outgoing links pane", "action-open-for-current": "Open outgoing links for the current file", "tab-title": "Outgoing links from {{displayText}}", "label-links": "Links", "label-no-links": "No links found.", "label-unlinked-mentions": "Unlinked mentions", "tooltip-link-file": "Link this file", "tooltip-not-created": "Not created yet" }, "tag-pane": { "name": "Tag pane", "desc": "Displays all your tags and along with their number of occurrences.", "action-show": "Show tag pane", "label-no-tags": "No tags found.", "label-sort-by-name-a-to-z": "Tag name (A to Z)", "label-sort-by-name-z-to-a": "Tag name (Z to A)", "label-sort-by-frequency-high-to-low": "Frequency (high to low)", "label-sort-by-frequency-low-to-high": "Frequency (low to high)", "action-show-nested-tags": "Show nested tags", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "Page preview", "desc": "Preview a note when hovering an internal link. Ctrl/Cmd + hover in editor mode.", "label-empty-note": "\"{{linktext}}\" is not created yet. Click to create.", "label-source-editor": "Editor", "label-source-preview": "Preview", "label-source-search": "Search, Backlinks, and Outgoing links", "label-require-mod": "Require {{key}} to trigger page preview on hover" }, "starred": { "name": "Starred", "desc": "Star frequently used files and searches.", "action-show": "Show starred pane", "action-toggle": "Star/unstar current file", "action-toggle-search": "Star/unstar current search", "action-star": "Star", "action-unstar": "Unstar", "menu-opt-remove": "Remove", "msg-successfully-starred": "Successfully starred {{type}} \"{{title}}\".", "msg-removed-starred": "Removed starred {{type}} \"{{title}}\".", "msg-cannot-find-path": "Cannot find file at \"{{path}}\"." }, "custom-css": { "name": "Custom CSS", "desc": "Reads \"obsidian.css\" in the vault and applies it.", "setting-community-themes": "Community themes", "msg-fetching-themes": "Fetching community theme data...", "prompt-filter": "Filter...", "label-dark-theme-only": "Dark themes only", "label-light-theme-only": "Light themes only", "label-use": "Use", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "Update", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "Remove theme", "label-visit-on-github": "Visit on GitHub", "msg-load-error": "Could not load community themes, please check your network.", "msg-now-using-theme": "You're now using {{title}} as your CSS theme.", "msg-deleted-theme": "The theme {{title}} has been deleted.", "msg-updated-theme": "The theme {{title}} has been updated.", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "Command palette", "desc": "Type a command to invoke it. No need to use the UI or remember the shortcut.", "action-open": "Open command palette", "instruction-navigate": "to navigate", "instruction-use": "to use", "instruction-dismiss": "to dismiss", "label-no-commands": "No commands found.", "prompt-type-command": "Type a command...", "label-pinned-commands": "Pinned commands", "option-add-new-pin": "New pinned command", "option-add-new-pin-description": "Pinned commands will appear at the top of all commands when no search query is present." }, "markdown-format-importer": { "name": "Markdown format importer", "desc": "Convert Markdown from other apps to Obsidian format.", "action-open": "Open Markdown importer", "option-roam-tag-fixer": "Roam Research tag fixer", "option-roam-tag-fixer-description": "Converts \"#tag\" and \"#[[tag]]\" to \"[[tag]]\".", "option-roam-highlight-fixer": "Roam Research highlight fixer", "option-roam-highlight-fixer-description": "Converts \"^^highlight^^\" to \"==highlight==\".", "option-roam-todo-converter": "Roam Research TODO converter", "option-roam-todo-converter-description": "Converts \"{{[[TODO]]}}\" to \"[ ]\".", "option-bear-highlight-fixer": "Bear highlight fixer", "option-bear-highlight-fixer-description": "Converts \"::highlight::\" to \"==highlight==\".", "zettelkasten-link-fixer": "Zettelkasten link fixer", "zettelkasten-link-fixer-description": "Fixes \"[[UID]]\" links to full \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Zettelkasten link beautifier", "zettelkasten-link-beautifier-description": "Fixes \"[[UID]]\" links and also beautify them \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Warning: the importer will convert all the files in your vault, not just the current file.", "msg-override-files-warning": "Your files will be overwritten. Back up all your files before attempting conversion.", "label-start-conversion": "Start Conversion", "label-stop": "Stop", "label-go-back": "Go back", "label-done": "Done", "label-processing": "Processing...", "label-cancelling": "Cancelling...", "label-finished": "Finished!", "label-processed-files": "Processed files", "label-modified-files": "Modified files", "label-total-replacements": "Total replacements" }, "daily-notes": { "name": "Daily notes", "desc": "Open today's daily note, or create one if not present.", "short-name": "Today", "action-open": "Open today's note", "action-open-previous": "Open previous daily note", "action-open-next": "Open next daily note", "action-insert-text": "Insert text into daily note", "action-insert-link": "Insert link into daily note", "msg-fail-format": "Failed to create daily note. \"{{format}}\" is not a valid format.", "msg-fail-folder": "Failed to create daily note. Folder \"{{folderOption}}\" not found.", "msg-fail-template-file": "Failed to create daily note. Template file \"{{template}}\" not found.", "msg-no-previous": "There's no daily note before this one.", "msg-no-next": "There's no daily note after this one.", "option-date-format": "Date format", "label-refer-to-syntax": "For more syntax, refer to: ", "label-syntax-link": "format reference", "label-syntax-live-preview": "Here is what it will look like: ", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new daily note.", "option-template": "Template file location", "option-template-description": "The file path to use as template.", "option-open-on-start": "Open daily note on startup", "option-open-on-start-description": "Open your daily note automatically whenever you open this vault." }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Random note", "desc": "Opens a random note. Useful for reviewing and discovering.", "short-name": "Random", "action-open": "Open random note" }, "outline": { "name": "Outline", "desc": "Displays the outline of the current file or linked pane.", "action-open": "Open outline", "action-show": "Show outline pane", "action-open-for-current": "Open outline of the current file", "tab-title": "Outline of {{displayText}}", "label-no-headings": "No headings found." }, "word-count": { "name": "Word count", "desc": "Show word count in the status bar." }, "slides": { "name": "Slides", "desc": "Present from Markdown. Use \"---\" to separate slides.", "action-start": "Start presentation" }, "audio-recorder": { "name": "Audio recorder", "desc": "Record audio and save as attachment.", "action-start": "Start recording audio", "action-stop": "Stop recording audio", "action-toggle": "Start/stop recording", "msg-access-denied": "Microphone access was denied, please enable it from the preference pane.", "msg-pending-grant": "Please grant microphone permission to start recording.", "msg-no-microphone": "No microphone is connected." }, "open-with-default-app": { "name": "डिफ़ॉल्ट ऐप में खोलें", "desc": "डिफ़ॉल्ट ऐप में यह फ़ाइल खोलने के लिए बटन लगायें।", "action-open-file": "डिफ़ॉल्ट ऐप में खोलें", "action-open-file-mobile": "Share", "action-show-in-folder": "फ़ोल्डर में खोलें", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "Templates", "desc": "Insert template content from a folder of template files.", "action-insert": "Insert template", "action-insert-current-date": "Insert current date", "action-insert-current-time": "Insert current time", "option-template-folder-location": "Template folder location", "option-template-folder-location-description": "Files in this folder will be available as templates.", "option-template-date-format": "Date format", "option-template-date-format-description": "{{date}} in the template file will be replaced with this value.", "option-template-date-format-description2": "You can also use {{date:YYYY-MM-DD}} to override the format once.", "option-template-time-format": "Time format", "option-template-time-format-description": "{{time}} in the template file will be replaced with this value.", "option-template-time-format-description2": "You can also use {{time:HH:mm}} to override the format once.", "instruction-navigate": "to navigate", "instruction-insert": "to insert template", "instruction-dismiss": "to dismiss", "msg-no-templates-found": "No templates found", "msg-fail-invalid-folder": "Failed to list templates. Template folder is invalid.", "msg-fail-folder-not-found": "Failed to list templates. Folder \"{{folderOption}}\" not found.", "prompt-type-template": "Type name of a template..." }, "translucency": { "name": "Translucent window", "desc": "Turn on translucency effect to enhance a sense of depth. Best used with dark mode. Not supported on Linux." }, "slash-command": { "name": "Slash commands", "desc": "Enable the ability to trigger slash commands in the editor by typing the forward slash." }, "editor-status": { "name": "Editor status", "desc": "Adds a status bar item to show and change the current editor mode.", "read": "Reading", "edit-source": "Source mode", "edit-live-preview": "Live Preview" }, "publish": { "name": "Publish", "desc": "Publish your notes through Obsidian Publish.", "action-publish-changes": "Publish changes", "label-no-internet-access": "You need access to the internet to publish changes.", "label-publish-service-description": "Obsidian Publish is an add-on paid service that lets you publish your notes online directly from Obsidian.", "label-please-login": "To start publishing, please log in or create a new Obsidian account.", "label-no-publish-subscription": "You do not have an Obsidian Publish subscription yet.", "button-purchase": "Purchase", "label-manage-sites": "Manage sites", "label-no-sites": "You don't have any sites.", "button-choose": "Choose", "tooltip-edit-site-id": "Edit site ID", "tooltip-delete-site": "Delete site", "label-delete-site-confirmation": "Are you sure you want to delete this site?", "label-delete-site-details": "This will immediately and permanently delete your site.", "label-confirm-delete-site": "Confirm delete site \"{{site}}\"", "option-site-id": "Site ID", "option-site-id-description": "Your site will be at https://publish.obsidian.md/{site id}. You can change this later. Only lower case letters, numbers, and dashes are allowed.", "option-site-id-placeholder": "Pick a site ID", "button-create": "Create", "msg-invalid-site-id": "Site ID can only contain lowercase letters, numbers, and dashes.", "msg-site-id-in-use": "This site ID is in use, please try another one.", "msg-create-site-issue": "That was an issue when creating your site.", "label-site-options": "Site options", "option-site-general": "General", "option-site-components": "Components", "option-site-appearance": "Appearance", "option-site-reading-experience": "Reading experience", "option-site-misc": "Other site settings", "option-site-name": "Site name", "option-site-name-description": "Name of your published site. It will show up in the page title of your site.", "option-site-name-placeholder": "Name of your site", "option-home-page-file": "Homepage file", "option-home-page-file-description": "The first page the user sees when landing on your published site", "option-home-page-file-placeholder": "Pick a published file", "option-logo": "Logo", "option-logo-description": "Pick an image file as your site logo.", "option-logo-placeholder": "Any any uploaded image in your vault...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "Theme", "option-theme-description": "Choose default color scheme for your site.", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "Show navigation", "option-show-navigation-description": "Display a list of all published pages on the left side of your published site.", "option-show-search": "Show search bar", "option-show-search-description": "Display a search bar at top of the navigation that lets the visitors search pages and headings on your site.", "option-show-graph": "Show graph view", "option-show-graph-description": "Display a small local graph on each page.", "option-show-outline": "Show table of contents", "option-show-outline-description": "Display the outline of headings on each page.", "option-show-backlinks": "Show backlinks", "option-show-backlinks-description": "Show backlink section at the end of each page.", "option-sliding-window-mode": "Use sliding windows", "option-sliding-window-mode-description": "Open pages in new panes to the right. Allows scrolling through panes horizontally.", "option-hover-preview-file": "Show hover preview", "option-hover-preview-file-description": "Display page preview when hovering links.", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "Readable line length", "option-readable-line-length-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-site-password": "Passwords", "option-site-password-description": "Restrict access to your site with passwords.", "option-google-analytics": "Google Analytics tracking code", "option-google-analytics-description": "Configure Google Analytics for your site. Only available for visitors from your custom domain URL. Please check with your local laws and regulations first.", "button-manage-passwords": "Manage", "button-save-site-settings": "Save site settings", "msg-updated-options": "Updated options for your site.", "button-go-back": "Back", "label-publishing-to": "Publishing to", "tooltip-switch-site": "Switch site", "button-add-linked": "Add linked", "tooltip-add-linked": "Add all files that are linked by currently selected items", "msg-added-linked-files": "{{count}} linked file has been added.", "msg-added-linked-files_plural": "{{count}} linked files have been added.", "tooltip-open-site-options": "Change site options", "label-no-changes-detected": "No changes were detected.", "label-changed-files-to-be-published": "Changes", "label-unchanged-files-already-published": "Unchanged (select to delete)", "label-file-selected": " selected", "button-select-all-files": "Select all", "button-deselect-all-files": "Deselect all", "label-new-files-to-be-published": "New", "button-publish": "Publish", "msg-no-permission-to-publish-to-site": "You do not have permissions to publish to the current site.", "msg-select-at-least-one-file": "Please select at least one file.", "label-upload-changes": "Upload changes", "button-done": "Done", "button-stop": "Stop", "label-status-uploading": "Uploading", "label-status-to-publish": "To publish", "label-status-to-delete": "To delete", "label-status-published": "Published", "label-status-deleted": "Deleted", "label-status-failed": "Failed", "label-status-cancelled": "Cancelled", "button-change": "Change", "label-clear-cache": "It takes up to a few minutes for the changes to show up on your site. If you do not see your latest changes, try clearing the cache in your browser.", "label-visit-site": "You can visit your site here: ", "msg-something-went-wrong": "Something went wrong. Please check the developer console for details.", "msg-network-error": "A network error occurred. ", "label-manage-passwords": "Manage passwords", "label-add-password": "Add password", "action-new-password": "New password", "label-no-password": "Your site currently does not have any passwords. Anyone can visit it.", "label-have-password": "Your site is password protected. If you have multiple passwords, visitors can access your site by entering any of them.", "option-password-name": "Password", "option-password-desc": "A hash of your password will be stored securely. Once the password is set, it cannot be revealed in plaintext.", "option-password-placeholder": "Your password", "option-nickname-name": "Nickname (optional)", "option-nickname-desc": "Set a nickname to remind yourself what or who the password is for.", "action-add-password": "Add this password", "label-untitled-password": "Untitled password", "label-password-created-time": "Created {{time}}", "msg-added-new-password": "Added new password.", "option-custom-domain": "Custom domain", "option-custom-domain-desc": "Use your own domain rather than the https://publish.obsidian.md/{site id} URL.", "option-noindex": "Disallow search engine indexing", "option-noindex-desc": "Prevent search engines from indexing your site.", "button-configure": "Configure", "label-configure-custom-domain": "Configure custom domain", "option-custom-url-name": "Custom URL", "option-custom-url-desc": "The URL that your site will be located at.", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "Redirect to your custom domain", "option-custom-url-redirect-desc": "Redirect visitors on publish.obsidian.md/id to your custom domain.", "button-update-custom-domain": "Update domain setting", "label-custom-domain-instructions": "Please refer to our {{link}} on our help site for more information.", "label-custom-domain-link-name": "custom domain setup guide", "label-site-usage": "You're using {{site}} out of your {{limit}}.", "button-add-more-sites": "Buy more sites", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "Workspaces", "desc": "Save and load workspace layout.", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "Save", "button-load": "Load", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "Sync", "desc": "Synchronize your files through Obsidian Sync.", "action-view-version-history": "View version history", "label-load-more": "Load more", "label-show-diff": "Show diff", "label-copy-to-clipboard": "Copy to clipboard", "label-restore-this-version": "Restore this version", "msg-already-latest-version": "This version is already the latest version.", "msg-restored-version": "Successfully restored version from {{time}}", "label-file-deleted": "This file was deleted", "label-no-earlier-version": "There was no earlier versions of this file.", "label-empty-file": "Empty", "label-setting-files": "Setting files", "label-deleted-files": "Deleted files", "label-version-history": "Version history", "label-click-to-see-history": "Click on a deleted file to see its history.", "label-create-remote-vault": "Create remote vault", "msg-please-enter-password": "Please enter a password.", "msg-vault-name-cannot-be-empty": "Vault name cannot be empty.", "msg-successfully-created-vault": "Successfully create remote vault \"{{name}}\".", "label-remote-vault-explanation": "Remote vaults securely synchronize your vault between devices.", "option-vault-name": "Vault name", "option-vault-name-desc": "Helps you remember what this vault is for.", "option-vault-name-placeholder": "My awesome vault", "option-use-custom-encryption-password": "Customize end-to-end encryption password", "option-use-custom-encryption-password-desc": "If you turn this off, we will securely manage an encryption key for you.", "option-use-custom-encryption-password-desc-warning": "This option cannot be changed later.", "option-encryption-password": "Encryption password", "option-encryption-password-desc": "This password cannot be changed later.", "option-encryption-password-desc-warning": "If you forget this password, any remote data will remain unusable forever.", "option-encryption-password-desc-2": "This does not affect your local data.", "option-encryption-password-placeholder": "Your password", "label-enter-encryption-password": "Enter encryption password", "button-unlock-vault": "Unlock vault", "msg-verified-password": "Successfully verified your password.", "label-remote-vaults": "Your remote vaults", "label-vault-created-time": "Created {{time}}", "tooltip-delete-remote-vault": "Delete", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "Confirm delete vault", "label-confirm-delete-remote-vault-question": "Are you sure you want to delete this remote vault?", "label-confirm-delete-remote-vault-result": "All data on our server, including version history, will be deleted. Your local files will stay intact.", "label-confirm-delete-remote-vault-warning": "This action is permanent and irreversible.", "msg-remote-vault-deleted": "{{name}} has been deleted.", "button-connect-to-remote-vault": "Connect", "button-disconnect-from-remote-vault": "Disconnect", "label-not-remote-vaults": "You don't have any remote vaults.", "button-create-new-remote-vault": "Create new vault", "label-sync-log": "Sync log", "options-only-show-errors": "Errors only", "options-only-show-errors-desc": "Only show errors and hide other log items.", "button-copy-sync-log": "Copy sync log", "msg-successfully-copied-sync-log": "Successfully copied sync log.", "button-retry": "Retry", "button-purchase-subscription": "Purchase", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "Choose", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "Sync status", "option-sync-status-desc-paused": "Obsidian Sync is currently paused.", "option-sync-status-desc-running": "Obsidian Sync is currently running.", "option-device-name": "Device name", "option-device-name-desc": "This name will be displayed in the sync log. Leave empty to use the default name.", "button-resume": "Resume", "button-pause": "Pause", "option-view-deleted-files": "Deleted files", "option-view-deleted-files-desc": "View and restore deleted files.", "option-sync-log": "Sync activity", "option-sync-log-desc": "View recent sync activities for debugging.", "button-view": "View", "button-bulk-restore": "Bulk restore", "button-restore-selected-files": "Restore selected files", "msg-restoring": "Restoring...", "msg-restoring-complete": "`Restore complete: {{succeeded}} succeeded and {{failed}} failed.`", "option-over-size": "Vault size over limit", "option-over-size-desc": "Your vault is at {{size}} out of {{limit}}.", "msg-largest-files": "View largest files", "msg-largest-files-desc": "These are the remote files that are taking the most space. After deleting attachments, use the purge button to free up remote vault space.", "button-purge-remote": "Purge", "tooltip-purge-remote": "Permanently purge deleted attachments from remote vault to save space.", "msg-purge-complete": "Purge complete.", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "Selective sync", "option-excluded-folders": "Excluded folders", "option-excluded-folder-desc": "Prevent certain folders from being synced.", "option-currently-excluded-folders": " These folders currently excluded:", "button-manage-excluded-folders": "Manage", "option-sync-image": "Sync images", "option-sync-image-desc": "Sync image files with these extensions: {{extensions}}.", "option-sync-audio": "Sync audio", "option-sync-audio-desc": "Sync audio files with these extensions: {{extensions}}.", "option-sync-video": "Sync videos", "option-sync-video-desc": "Sync video files with these extensions: {{extensions}}.", "option-sync-pdf": "Sync PDFs", "option-sync-pdf-desc": "Sync PDF files.", "option-sync-unsupported": "Sync all other types", "option-sync-unsupported-desc": "Sync unsupported file types.", "option-vault-config-sync": "Vault configuration sync", "option-view-config-files": "Settings version history", "option-view-config-files-desc": "View and restore version history of setting files.", "option-sync-app": "Main settings", "option-sync-app-desc": "Enable to sync editor settings, files & links settings, custom hotkeys, etc.", "option-sync-appearance": "Appearance settings", "option-sync-appearance-desc": "Sync appearance settings like dark mode, active theme, and enabled snippets.", "option-sync-appearance-data": "Themes and snippets", "option-sync-appearance-data-desc": "Sync downloaded themes and snippets. Whether they are enabled depends on the previous setting.", "option-sync-hotkey": "Hotkeys", "option-sync-hotkey-desc": "Sync custom hotkeys.", "option-sync-core-plugin": "Active core plugin list", "option-sync-core-plugin-desc": "Sync which core plugins are enabled.", "option-sync-core-plugin-data": "Core plugin settings", "option-sync-core-plugin-data-desc": "Sync core plugin settings.", "option-sync-community-plugin": "Active community plugin list", "option-sync-community-plugin-desc": "Sync which community plugins are enabled.", "option-sync-community-plugin-data": "Installed community plugins", "option-sync-community-plugin-data-desc": "Sync installed community plugins (.js, .css, and manifest.json files) and their settings.", "label-sync-introduction": "Obsidian Sync is Obsidian's add-on sync service with end-to-end encryption and version history.", "label-account-required": "To start syncing, please log in or create a new Obsidian account.", "button-sign-up": "Sign up", "button-log-in": "Log in", "label-manage-excluded-folders": "Manage excluded folders", "label-number-of-folders-excluded": "{{folders}} are currently excluded from being synced.", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "Setup connection", "label-now-connected-to-vault": "You're now connected to \"{{name}}\".", "button-start-syncing": "Start syncing", "label-confirm-merge-vault": "Confirm Merge Vault", "msg-vault-has-notes": "Your local vault already contains some notes.", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "File recovery", "desc": "Let you restore recent snapshots to recover from accidental data loss. Snapshots are only saved for Markdown files.", "action-open": "Open saved snapshots", "option-interval": "Snapshot interval", "option-interval-description": "Minimal interval in minutes between two snapshots.", "option-keep": "History length", "option-keep-description": "Length in days snapshots is kept for.", "option-open-history": "Snapshots", "option-open-history-description": "View and restore saved snapshots.", "button-view-snapshots": "View", "option-clear": "Clear history", "option-clear-description": "Wipe all snapshots.", "button-clear-history": "Clear", "label-clear-warning": "Are you sure you want to delete all snapshots? Note that only snapshots will be removed. All files inside your vault will not be affected.", "msg-clear-complete": "Snapshots cleared.", "label-no-history-found": "No snapshots found.", "placeholder-choose-file": "Choose a file...", "label-select-file": "Please select a file on the left to view snapshots." }, "note-composer": { "name": "Note composer", "desc": "Merge, split, and refactor notes.", "option-confirm-file-merge": "Confirm file merge", "option-confirm-file-merge-description": "Prompt before merge two files.", "option-split-replacement-text": "Text after extraction", "option-split-replacement-text-description": "What to show in place of the selected text after extracting it.", "option-choice-split-replacement-text-link": "Link to new file", "option-choice-split-replacement-text-embed": "Embed new file", "option-choice-split-replacement-text-none": "None", "option-template-file": "Template file location", "option-template-file-description": "Template file to use when merging or extracting. Available variables: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Merge current file with another file...", "action-merge-file": "Merge entire file with...", "label-no-files": "No files found.", "instruction-navigate": "to navigate", "instruction-merge": "to merge", "instruction-create-new": "to create new", "instruction-merge-at-top": "to merge at top", "instruction-dismiss": "to dismiss", "prompt-select-file-to-merge": "Select file to merge into...", "label-merge-file": "Merge file", "label-confirm-file-merge": "Are you sure you want to merge \"{{file}}\" into \"{{destination}}\"? \"{{file}}\" will be deleted.", "button-merge": "Merge", "button-merge-do-not-ask-again": "Merge and don't ask again", "command-split-file": "Extract current selection...", "command-extract-heading": "Extract this heading...", "instruction-append": "to move to bottom", "instruction-prepend": "to move to top", "msg-fail-to-fetch-template": "Failed to fetch template file: \"{{template}}\" not found.", "msg-fail-to-find-heading": "Failed to find heading" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} शब्द", "word-with-count_plural": "{{count}} शब्द", "character-with-count": "{{count}} अक्षर", "character-with-count_plural": "{{count}} अक्षर", "link-with-count": "{{count}} लिंक", "link-with-count_plural": "{{count}} लिंक", "file-with-count": "{{count}} फ़ाइल", "file-with-count_plural": "{{count}} फ़ाइल", "folder-with-count": "{{count}} फ़ोल्डर", "folder-with-count_plural": "{{count}} फ़ोल्डर", "backlink-with-count": "{{count}} बैकलिंक", "backlink-with-count_plural": "{{count}} बैकलिंक", "site-with-count": "{{count}} साइट", "site-with-count_plural": "{{count}} साइट", "plugin-with-count": "{{count}} प्लग-इन", "plugin-with-count_plural": "{{count}} प्लग-इन", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } }{ "setting": { "options": "Pengaturan", "plugin": "Plugin", "builtin-plugins": "Plugin inti", "plugin-options": "Pengaturan plugin", "folder-path-example-placeholder": "Contoh: folder 1/folder 2", "file-path-example-placeholder": "Contoh: folder/berkas", "msg-restart-required": "Mengubah opsi ini memerlukan pemuatan ulang untuk mendapatkan perubahan.", "editor": { "name": "Pengubah", "section-general": "Umum", "section-behavior": "Perilaku", "section-display": "Tampilan", "option-spellcheck": "Pemeriksa ejaan", "option-spellcheck-description": "Aktifkan pemeriksa ejaan. Sementara hanya berfungsi untuk bahasa Inggris Amerika.", "spellcheck-languages": "Bahasa pemeriksa ejaan", "spellcheck-languages-description": "Pilih bahasa untuk menggunakan pemeriksa ejaan.", "spellcheck-languages-mac-description": "Pemeriksa ejaan bawaan akan secara otomatis mendeteksi bahasa yang digunakan jika menggunakan macOS.", "spellcheck-dict": "Kamus pemeriksa ejaan", "spellcheck-dict-empty": "Kamus pemeriksa ejaan tidak tersedia.", "option-show-inline-title": "Tampilkan judul sebaris", "option-show-inline-title-description": "Menampilkan nama file sebagai judul yang dapat diubah sesuai dengan konten file.", "option-readable-line-length": "Panjang baris yang dapat dibaca", "option-readable-line-description": "Batasi panjang maksimum baris teks. Memuat lebih sedikit konten pada layar, tetapi membuat paragraf-paragraf yang panjang lebih mudah dibaca.", "option-strict-line-break": "Pemisah baris ketat", "option-strict-line-break-description": "Spesifikasi Markdown mengabaikan tiap pemisah baris teks dalam mode pratinjau. Matikan untuk menampilkan tiap pemisah baris.", "option-show-frontmatter": "Tampilkan frontmatter", "option-show-frontmatter-description": "Dalam mode pratinjau, Tampilkan frontmatter sebagai blok kode. Matikan untuk menyembunyikan bagian frontmatter.", "option-auto-pair-brackets": "Pasangkan otomatis tanda kurung", "option-auto-pair-brackets-description": "Pasangkan tanda kurung dan tanda kutip secara otomatis.", "option-auto-pair-markdown": "Pasangkan otomatis sintaksis Markdown", "option-auto-pair-markdown-description": "Pasangkan simbol secara otomatis untuk cetak teks tebal, miring, sorot, coret, dan kode", "option-smart-indent-lists": "Indentasi daftar cerdas", "option-smart-indent-lists-description": "Atur secara otomatis indentasi dan menempatkan daftar item dengan benar.", "option-fold-heading": "Lipat judul", "option-fold-heading-description": "Memungkinkan Anda untuk melipat konten di bawah judul.", "option-fold-indent": "Lipat indentasi", "option-fold-indent-description": "Memungkinkan Anda untuk melipat bagian indentasi yang berderet, seperti deret daftar.", "option-default-new-tab-view": "Tampilan bawaan untuk tab baru", "option-default-new-tab-view-description": "Tampilan Bawaan yang tab markdown dapatkan ketika terbuka.", "option-default-new-tab-view-editing": "Tampilan Ubah", "option-default-new-tab-view-reading": "Tampilan Baca", "option-default-editing-mode": "Mode ubah bawaan", "option-default-editing-mode-description": "Mode bawaan pengubah pada saat panel baru dimulai.", "option-default-editing-mode-source": "Mode Sumber", "option-default-editing-mode-live-preview": "Pratinjau Nyata", "option-show-line-number": "Tampilkan nomor baris", "option-show-line-number-description": "Tampilkan nomor baris di sisi.", "option-indentation-guide": "Tampilkan bantuan indentasi", "option-indentation-guide-description": "Tampilkan garis hubungan vertikal di antara titik poin untuk membantu secara visual.", "option-use-tabs": "Gunakan tab", "option-use-tabs-description": "Gunakan tab untuk menginden ketika menekan \"Tab\". Matikan untuk menggunakan spasi.", "option-tab-size": "Ukuran tab", "option-tab-size-description": "Jumlah spasi yang setara dengan tab.", "option-rtl": "Kanan-ke-Kiri (RTL)", "option-rtl-description": "Atur arah teks dari catatan untuk ditampilkan secara kanan-ke-kiri.", "option-auto-convert-html": "Ubah HTML otomatis", "option-auto-convert-html-description": "Secara otomatis mengubah HTML ke Markdown saat menempelkan atau seret-dan-jatuhkan dari laman web. Gunakan Ctrl/Cmd+Shift+V untuk menempelkan tanpa pengubahan.", "option-vim-key-bindings": "key binding Vim", "option-vim-key-bindings-description": "Memungkinkan Anda untuk menggunakan key binding Vim dalam pengubah sumber.", "option-vim-key-bindings-mobile": "Pada perangkat seluler, pengaturan ini akan diatur per-perangkat dan tidak disinkronkan melalui berkas konfigurasi.", "option-emacsy-keys": "Pengikatan kunci bergaya Emacs turunan untuk macOS", "option-emacsy-keys-description": "Mengizinkan Anda untuk menggunakan tambahan kunci navigasi bergaya Emacs, yang mana standar di macOS, tetapi mungkin mempengaruhi beberapa kunci operasi.", "label-confirm-enable-vim": "Konfirmasi memasuki mode Vim", "label-vim-warning": "Mode Vim untuk mengedit teks secara efisien, tetapi bisa cukup kontra-intuitif. Jika Anda tidak familiar dengan Vim, opsi ini mungkin terlihat seperti Obsidian berhenti bekerja.", "label-vim-test": "Untuk memverifikasi bahwa Anda mengetahui Vim, masukkan perintah untuk keluar Vim tanpa menyimpan ini:", "label-vim-your-answer": "Jawaban Anda", "placeholder-enter-command": "Masukkan perintah...", "button-confirm-enable-vim": "Izinkan saya aktifkan Vim", "msg-vim-mode-enabled": "Perintah benar. Mode Vim sekarang aktif.", "msg-vim-mode-not-enabled": "Perintah salah. Mode Vim masih nonaktif untuk melindungi Anda.", "msg-vim-mode-please-enter-command": "Masukkan perintah untuk aktifkan mode Vim", "option-legacy-editor": "Gunakan pengubah lawas", "option-legacy-editor-description2": "Pengubah lawas akan segera ditinggalkan. Saat ini tidak lagi dipertahankan, dan dengan demikian, bug tidak akan lagi ditangani.", "label-legacy-deprecation": "Pengubah baru di sini", "label-legacy-deprecation-1": "Obsidian sekarang memiliki pengubah baru yang lebih kuat dan mudah diakses.", "label-legacy-deprecation-2": "Tampaknya Anda tetap menggunakan pengubah lawas, dan kami pikir Anda akan menikmati pengubah baru.", "label-legacy-deprecation-choice": "Mode mana yang akan Anda gunakan?", "label-live-preview-description": "Pengalaman yang lebih modern, apa yang Anda lihat adalah apa yang Anda dapatkan.", "label-source-mode-description": "Lihat Markdown mentah dengan penyorotan sintaks.", "button-start-new-editor": "Mulai pengubah baru" }, "file": { "name": "Berkas & Tautan", "option-confirm-file-deletion": "Konfirmasi penghapusan berkas", "option-confirm-file-deletion-description": "Peringatkan sebelum penghapusan berkas.", "option-delete-destination": "Berkas terhapus", "option-delete-destination-description": "Apa yang terjadi pada berkas setelah Anda hapus.", "option-choice-system-trash": "Pindahkan ke tempat sampah sistem", "option-choice-vault-trash": "Pindahkan ke tempat sampah Obsidian (folder .trash)", "option-choice-permanent-delete": "Hapus secara permanen", "option-always-update-links": "Secara otomatis perbarui tautan internal", "option-always-update-links-description": "Matikan untuk diperingatkan memperbarui tautan setelah menamai berkas.", "option-new-note-location": "Lokasi bawaan untuk catatan baru", "option-new-note-location-description": "Di mana menaruh setiap catatan yang baru dibuat. Pengaturan plugin akan mengesampingkan ini.", "option-choice-vault-root": "Folder vault", "option-choice-current-folder": "Satu folder dengan berkas sekarang", "option-choice-specified-folder": "Dalam folder yang dikhususkan ini", "option-new-file-folder-path": "Folder untuk membuat catatan baru", "option-new-file-folder-path-description": "Catatan yang baru dibuat akan muncul di dalam folder ini. Pengaturan plugin akan mengesampingkan ini.", "option-use-wiki-links": "Gunakan [[Wikilink]]", "option-use-wiki-links-description": "Buat otomatis Wikilink untuk [[tautan]] dan ![[gambar]] sebagai ganti dari tautan dan gambar Markdown. Nonaktifkan opsi ini untuk membuat tautan Markdown.", "option-show-unsupported-files": "Deteksi semua ekstensi berkas", "option-show-unsupported-files-description": "Tampilkan berkas dengan ekstensi apa pun meski jika Obsidian tidak dapat membuka mereka, jadi Anda dapat menghubungkan ke mereka dan melihat mereka di Penjelajah berkas dan Peralih cepat.", "option-link-autocompleted-format": "Format tautan baru", "option-link-autocompleted-format-description": "Tautan apa yang disisipkan saat pembuatan otomatis tautan internal.", "option-choice-shortest-linktext": "Alur terdekat jika memungkinkan", "option-choice-relative-path": "Alur relatif terhadap berkas", "option-choice-absolute-path": "Alur absolut dalam vault", "option-new-attachment-location": "Lokasi bawaan untuk lampiran baru", "option-new-attachment-location-description": "Dimana lampiran yang baru ditambahkan akan disimpan.", "option-choice-subdirectory": "Di subfolder di bawah folder sekarang", "option-attachment-folder-path": "Lokasi folder lampiran", "option-attachment-folder-path-description": "Menempatkan berkas lampiran yang baru dibuat, seperti gambar yang melalui seret-dan-jatuhkan atau rekaman audio, dalam folder ini.", "option-attachment-subfolder-path": "Nama subfolder", "option-attachment-subfolder-path-description": "Jika berkas Anda di bawah \"vault/folder\", dan Anda mengatur nama subfolder ke \"lampiran\", lampiran akan disimpan ke \"vault/folder/lampiran\".", "option-attachment-subfolder-path-placeholder": "lampiran", "option-excluded-files": "Berkas yang dikecualikan", "option-excluded-files-desc": "Berkas yang dikecualikan merupakan antara tersembunyi atau kurang terlihat di beragam tempat, seperti Peralih Cepat, saran tautan, dan Tampilan Grafik.", "label-no-excluded-filters-applied": "Tidak ada berkas yang dikecualikan saat ini. Tambahkan di bawah.", "label-excluded-filters-applied": "Berkas yang menyesuaikan saringan berikut saat ini dikecualikan:", "label-excluded-filter": "Saring", "placeholder-excluded-filter": "Masukkan alur atau \"/regex/\"..." }, "appearance": { "name": "Tampilan", "option-base-theme": "Tema dasar", "option-base-theme-description": "Pilih skema warna bawaan Obsidian.", "option-accent-color": "Warna aksen", "option-accent-color-description": "Pilih warna aksen yang digunakan pada aplikasi.", "dark-theme": "Gelap", "light-theme": "Terang", "system-theme": "Beradaptasi dengan sistem", "option-font": "Font", "option-advanced": "Lanjutan", "option-interface-font": "Font antarmuka", "option-interface-font-description": "Atur font dasar untuk semua bagian Obsidian.", "option-text-font": "Font teks", "option-text-font-description": "Atur font untuk tampilan pengubah dan baca.", "option-monospace-font": "Font monospace", "option-monospace-font-description": "Atur font untuk tempat-tempat seperti blok kode dan frontmatter.", "label-single-font-currently-in-effect": " Font yang diterapkan saat ini: ", "label-multiple-fonts-currently-in-effect": " Font berikut yang saat ini diterapkan:", "option-font-placeholder": "Masukkan nama font...", "label-no-custom-font-set": "Tidak ada font kustom yang diterapkan saat ini. Tambahkan di bawah.", "label-font-applied": "Font pertama dari daftar ini yang tersedia pada sistem Anda akan diterapkan.", "msg-font-not-found": "Font ini tidak terdeteksi pada sistem Anda.", "msg-font-found": "Font ini terdeteksi pada sistem Anda.", "label-font-name": "Nama font", "option-community-themes": "Buka tema-tema komunitas", "option-community-themes-description": "Tampilkan dan gunakan tema-tema luar biasa yang dibuat oleh komunitas.", "button-browse-community-themes": "Telusuri", "option-font-size": "Ukuran font", "option-font-size-description": "Ukuran font dalam piksel yang mempengaruhi editor dan pratinjau.", "option-font-size-action": "Pengaturan cepat ukuran font", "option-font-size-action-description": "Atur ukuran font menggunakan Ctrl + gulir, atau menggunakan gestur jepit perbesar trackpad.", "option-themes": "Tema", "option-manage-themes-description": "Kelola tema terpasang dan telusuri tema komunitas.", "option-theme-button-manage": "Kelola", "option-choice-none": "Tidak ada", "option-native-menus": "Menu bawaan", "option-native-menus-desc": "Menu pada aplikasi akan menyesuaikan sistem operasi. Mereka tidak akan dipengaruhi oleh tema Anda.", "button-reload-themes": "Muat ulang tema", "msg-reloaded-themes": "Tema CSS kustom termuat ulang.", "button-open-themes-folder": "Buka folder tema", "option-css-snippets": "Cuplikan CSS", "label-no-css-snippets-found": "Cuplikan CSS tidak ditemukan di folder cuplikan.", "no-snippet-description": "Cuplikan CSS tersimpan di \"{{path}}\".", "button-reload-snippets": "Muat ulang cuplikan", "button-open-snippets-folder": "Buka folder cuplikan", "msg-reloaded-snippets": "Cuplikan CSS termuat ulang.", "option-toggle-snippet-description": "Terapkan cuplikan CSS di \"{{path}}\".", "label-installed-themes": "Tema terpasang", "label-screenshot-unavailable": "Tangkapan layar tidak tersedia", "label-default-theme": "Bawaan", "tooltip-click-to-enlarge": "Klik untuk memperbesar", "button-update": "Perbarui", "label-currently-selected": "Terpilih", "option-frame-style": "Gaya bingkai jendela", "option-frame-description": "Tentukan gaya bilah judul dari jendela Obsidian. Memerlukan pemuata ulang secara penuh untuk mendapatkan hasil.", "option-frame-hidden": "Tersembunyi (bawaan)", "option-frame-obsidian": "Bingkai Obsidian", "option-frame-native": "Bingkai bawaan", "option-configure-ribbon": "Menu ribbon", "option-configure-ribbon-desc": "Atur perintah apa yang tampil pada menu ribbon di bilah navigasi.", "option-mobile-quick-ribbon-item": "Akses cepat item ribbon", "option-mobile-quick-ribbon-item-desc": "Mengetuk pada item ribbon di menu navigasi akan mengaktifkan item ribbon ini. Ketuk dan tahan akan tetap menampilkan menu.", "button-configure": "Atur", "label-additional-ribbon-items": "Item ribbon lain", "label-modal-configuration": "Atur Ribbon", "label-modal-configuration-desc": "Pilih item apa saja yang ingin Anda aktifkan pada ribbon. Seret-dan-jatuhkan untuk mengurutkannya.", "option-show-view-header": "Tampilkan tab bilah judul", "option-show-view-header-desc": "Menampilkan judul pada bagian atas setiap tab.", "msg-updates-found": "Ditemukan {{count}} tema untuk pembaruan.", "msg-updates-found_plural": "Ditemukan {{count}} tema untuk pembaruan.", "button-check-for-updates": "Periksa pembaruan", "button-view-updates": "Lihat pembaruan", "button-update-all-themes": "Perbarui semua", "label-current-themes": "Tema komunitas terkini", "label-currently-installed": "Anda saat ini memiliki {{count}} tema terpasang.", "label-currently-installed_plural": "Anda saat ini memiliki {{count}} tema terpasang." }, "hotkeys": { "name": "Pintasan", "prompt-filter": "Saring...", "tooltip-delete-hotkey": "Hapus tombol pintasan", "label-waiting-for-hotkey-press": "Tekan tombol pintasan...", "tooltip-restore-default": "Pulihkan bawaan", "tooltip-customize-command": "Kustomisasi pintasan ini", "tooltip-hotkey-single-conflict": "Pintasan ini konflik dengan \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "Pintasan ini konflik dengan {{count}} perintah lain", "label-blank-hotkey": "Kosong" }, "about": { "name": "Tentang", "label-commercial-license": "Lisensi komersial", "label-license-key": "Kunci lisensi", "license-key-placeholder": "Kunci lisensi Anda...", "label-activate-license": "Aktifkan lisensi", "button-activate": "Aktifkan", "label-unknown-version": "Tidak diketahui", "label-current-version": "Versi sekarang: ", "label-install-version": "(Versi pemasang: {{version}})", "label-up-to-date": "Aplikasi Anda sudah terbaru!", "label-read-changelog": "Baca log perubahan.", "label-manual-update-required": "Untuk mendukung fitur terbaru dan untuk menerima pembaruan keamanan, Obsidian memerlukan pembaruan pemasangan besar. Anda perlu mengunduh dan memasang ulang Obsidian secara manual.", "label-download": "Unduh", "label-new-version-ready": "Versi terbaru siap untuk dipasang. ", "label-relaunch-to-update": "Mulai ulang aplikasi untuk memperbarui.", "label-disabled-updates": "Pembaruan dinonaktifkan.", "label-checking-for-updates": "Memeriksa pembaruan...", "button-relaunch": "Mulai ulang", "button-check-for-updates": "Periksa pembaruan", "option-auto-update": "Perbarui otomatis", "option-auto-update-description": "Matikan ini untuk mencegah aplikasi dari pemeriksaan pembaruan.", "option-get-help": "Dapatkan Bantuan", "option-get-help-description": "Dapatkan bantuan penggunaan Obsidian.", "button-open": "Buka", "option-language": "Bahasa", "option-language-description": "Ubah tampilan bahasa.", "option-insider-build": "Dapatkan versi insider", "option-insider-build-description": "Perbarui otomatis ke versi insider untuk mencoba fitur baru. Perhatikan bahwa versi ini adalah terdepan dan mungkin kurang stabil.", "option-advanced": "Lanjutan", "option-hw-acceleration": "Akselerasi Perangkat Keras", "option-hw-acceleration-description": "Aktifkan Akselerasi Perangkat Keras, menggunakan GPU Anda untuk membuat Obsidian lebih lancar.", "option-hw-acceleration-warning": "Jika Anda menonaktifkan ini, performa aplikasi akan turun drastis.", "option-config-location": "Timpa folder konfigurasi", "option-config-location-description": "Gunakan folder konfigurasi yang berbeda dari bawaan. Harus dimulai dengan titik.", "option-config-location-warning": "Lokasi konfigurasi harus bernama folder yang valid yang mana dimulai dengan titik.", "label-license": "Lisensi", "label-your-commercial-license-key": "Kunci lisensi komersial Anda adalah \"{{key}}\".", "label-commercial-license-info": "Terdaftar atas \"{{company}}\" untuk {{seats}} pengguna. Valid hingga {{expiry}}.", "label-validating-commercial-license": "Memvalidasi...", "label-invalid-commercial-license": "Lisensi tidak valid: ", "button-remove-commercial-license": "Hapus", "option-catalyst": "Lisensi Catalyst", "option-catalyst-desc": "Anda saat ini memiliki lisensi {{tier}} Catalyst. Terima kasih atas dukungan Anda!", "option-catalyst-desc-no-license": "Saat ini Anda tidak memiliki lisensi Catalyst. Lisensi Catalyst merupakan donasi satu kali untuk mendukung pengembangan Obsidian.", "label-app": "Aplikasi" }, "account": { "name": "Akun", "option-your-account": "Akun Anda", "option-your-account-desc": "Anda saat ini masuk sebagai {{name}} ({{email}}).", "option-your-account-desc-no-login": "Saat ini Anda belum masuk. Akun hanya diperlukan untuk Obsidian Sync, Obsidian Publish, dan build Catalyst insider.", "button-manage-settings": "Kelola pengaturan", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Tingkatkan", "option-commercial-license": "Lisensi Komersial", "option-commercial-license-desc": "Jika Anda menggunakan obsidian untuk tujuan komersial, Anda mungkin perlu untuk mendapatkan lisensi komersial.", "button-purchase": "Bayar", "button-log-out": "Keluar", "label-log-in": "Masuk", "label-sign-up": "Daftar", "label-email": "Surel", "placeholder-email": "Surel Anda...", "label-password": "Kata sandi", "placeholder-password": "Kata sandi Anda...", "button-login": "Masuk", "message-empty-email": "Surel tidak boleh kosong.", "message-invalid-email": "Surel tidak valid.", "message-empty-password": "Kata sandi tidak boleh kosong.", "message-login-failed": "Gagal masuk, periksa kembali surel dan kata sandi Anda.", "label-no-account": "Belum memiliki akun? ", "link-sign-up-now": "Daftar sekarang" }, "core-plugin": { "plugin-list": "Daftar Plugin", "option-search-plugin": "Cari plugin ini", "option-search-plugin-description": "Saring plugin berdasarkan nama atau deskripsi.", "placeholder-search-plugin": "Cari plugin..." }, "third-party-plugin": { "name": "Plugin komunitas", "option-restricted-mode": "Mode terbatas", "option-restricted-mode-description": "Mode terbatas sedang mati. Nyalakan untuk menonaktifkan plugin komunitas.", "button-turn-on": "Nyalakan", "option-browse-community-plugins": "Plugin komunitas", "option-browse-community-plugins-description": "Telusuri dan pasang plugin yang dibuat oleh komunitas kami yang menakjubkan.", "button-browse": "Telusuri", "label-exit-restricted-mode": "Keluar Mode Terbatas", "label-exit-restricted-mode-description-1": "Plugin komunitas, seperti halnya aplikasi lain yang Anda pasang, berpotensi menyebabkan masalah integritas dan keamanan data.", "label-exit-restricted-mode-description-2": "Keamanan plugin sangat penting bagi kami. Berikut yang kami lakukan:", "label-exit-restricted-mode-description-3": "Terlepas dari upaya kami, masih ada kemungkinan kecil bahwa plugin komunitas mungkin berperilaku tidak semestinya.", "label-code-review": "Peninjauan awal kode", "label-code-review-desc": "Plugin menjalani peninjauan kode awal oleh tim kami sebelum merka tampil pada toko.", "label-open-source": "Sumber terbuka", "label-open-source-desc": "Kebanyakan plugin merupakan sumber terbuka pada GitHub, sehingga Anda dapat memeriksa kode secara mandiri.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "Kami memiliki komunitas pengembang yang besar yang saling mengawasi satu sama lain.", "label-report-mechanism": "Mekanisme pelaporan", "label-report-mechanism-desc": "Kami menindaklanjuti dan menghapus plugin yang salah setelah laporan pengguna.", "label-exit-restricted-mode-disable-confirmation": "Apakah Anda ingin keluar dari Mode Terbatas untuk mengaktifkan plugin komunitas? Kami sangat merekomendasikan untuk mencadangkan data Anda sebelum melakukannya.", "label-learn-more": "Pelajari lebih lanjut mengenai keamanan plugin", "button-turn-on-community-plugins": "Aktifkan plugin komunitas", "label-trust-author": "Apakah Anda mempercayai pemilik dari vault ini?", "label-trust-author-description-1": "Anda membuka vault ini untuk pertama kalinya, dan terdapat beberapa plugin bersamanya.", "label-trust-author-description-2": "Jika Anda mendapatkan vault ini dari seseorang, harap dicatat bahwa plugin dengan sumber yang tidak diketahui mungkin akan menimbulkan risiko keamanan.", "label-trust-author-description-3": "Jika Anda tidak memepercayai pemilik vault ini secara penuh, kami merekomendasikan untuk tetap pada Mode Terbatas, sehingga plugin pada vault ini tidak akan berjalan.", "button-enable-plugins": "Percayai pemilik dan aktifkan plugin", "button-dont-trust-author": "Jelajahi vault dengan Mode Terbatas", "placeholder-community-plugins": "Cari plugin komunitas...", "msg-failed-load-plugins": "Gagal memuat plugin komunitas.", "label-installed": "Terpasang", "button-install": "Pasang", "button-enable": "Aktifkan", "button-disable": "Matikan", "button-copy-share-link": "Salin tautan berbagi", "button-donate": "Donasi", "label-no-results-found": "Tidak ada hasil.", "msg-failed-to-load-manifest": "Gagal memuat manifes plugin.", "label-version": "Versi: {{version}}", "label-currently-installed-version": " (saat ini terpasang: {{version}})", "label-by-author": "Oleh ", "label-repository": "Repositori: ", "label-last-update": "Pembaruan terakhir: ", "tooltip-view-last-update": "Lihat pembaruan terkini", "label-unsupported": "Plugin ini tidak mendukung perangkat Anda.", "button-update": "Perbarui", "label-no-readme": "Plugin ini tidak menyediakan berkas README.", "msg-installing-plugin": "Memasang plugin \"{{name}}\"...", "msg-failed-to-install-plugin": "Gagal memasang plugin \"{{name}}\".", "msg-successfully-installed-plugin": "Berhasil memasang plugin \"{{name}}\".", "label-installed-plugins": "Plugin terpasang", "button-reload-plugins": "Muat ulang plugin", "msg-reloaded-third-party-plugins": "Plugin komunitas termuat ulang.", "label-uninstall": "Hapus pemasangan", "label-uninstall-plugin": "Hapus plugin", "label-uninstall-plugin-confirmation": "Apa Anda yakin Anda ingin menghapus plugin ini? Ini akan menghapus folder dari plugin.", "button-open-plugins-folder": "Buka folder plugin", "button-check-for-updates": "Cek pembaruan", "button-update-all-plugins": "Perbarui semua", "label-current-plugins": "Plugin saat ini", "label-currently-installed": "Anda saat ini memiliki {{count}} plugin terpasang.", "label-currently-installed_plural": "Anda saat ini memiliki {{count}} plugin terpasang.", "label-debug-startup-time": "Debug waktu mulai", "label-debug-startup-time-description": "Tampilkan pesan dengan seberapa lama waktu yang setiap plugin perlukan untuk memulai ketika membuka aplikasi.", "msg-no-updates-found": "Pembaruan plugin tidak ditemukan.", "msg-updates-found": "Ditemukan {{count}} plugin untuk pembaruan.", "msg-updates-found_plural": "Ditemukan {{count}} plugin untuk pembaruan.", "msg-update-plugin": "Memperbarui ke versi {{version}}", "option-search-installed-plugin": "Cari plugin terpasang", "option-search-installed-plugin-description": "Saring plugin yang terpasang dengan nama atau deskripsi.", "placeholder-search-installed-plugin": "Cari plugin terpasang...", "show-installed-only": "Tampilkan hanya yang terpasang", "label-donate-modal-title": "Donasi untuk mendukung {{name}}", "label-donate-modal-text1": "Pengembang plugin merupakan komunitas yang secara sukarela membuat sesuatu yang luar biasa. Jika anda merasa plugin ini berguna, harap pertimbangkan untuk mendanai pengembangannya.", "label-donate-modal-text2": "100% dari kontribusi anda akan diberikan kepada pengembang plugin; Obsidian tidak meminta potongan. Media pendanaan yang mereka pilih mungkin memerlukan biaya.", "label-donate-modal-text3": "Terima kasih banyak atas kedermawanan anda!", "label-support-this-plugin": "Dukung plugin ini:", "label-search-summary": "Menampilkan {{pluginCount}}:", "label-by-popularity": "Paling banyak diunduh", "label-by-released": "Baru-baru ini dirilis", "label-by-updated": "Baru-baru ini diperbarui", "label-alphabetical": "Secara abjad", "label-last-updated": "DIperbarui {{time}}" }, "mobile-toolbar": { "name": "Bilah alat seluler", "option-configure-quick-action": "Konfigurasikan Aksi Cepat seluler", "option-configure-quick-action-description": "Konfigurasikan perintah yang akan aktif saat menarik ke bawah. Perintah terkini diatur ke \"{{command}}\".", "button-configure": "Konfigurasikan", "placeholder-select-quick-action": "Pilih Aksi Cepat...", "manage-toolbar-options": "Kelola opsi bilah alat", "option-internal-link": "Tambahkan tautan internal", "option-internal-embed": "Tambahkan sematan", "option-tag": "Tambahkan tag", "option-heading": "Masukkan judul", "option-strikethrough": "Coret teks", "option-highlight": "Sorot teks", "option-code": "Masukkan kode", "option-blockquote": "Tambahkan blok kutipan", "option-markdown-link": "Tambahkan tautan Markdown", "option-bullet-list": "Tambahkan daftar poin", "option-numbered-list": "Tambahkan daftar angka", "option-indent-list": "Indentasikan daftar item", "option-unindent-list": "Balikkan indentasi daftar item", "option-undo": "Batalkan", "option-redo": "Kembalikan", "option-move-caret-up": "Pindah caret ke atas", "option-move-caret-down": "Pindah caret ke bawah", "option-move-caret-left": "Pindah caret ke kiri", "option-move-caret-right": "Pindah caret ke kanan", "option-first-line": "Pergi ke baris pertama", "option-last-line": "Pergi ke baris terakhir", "option-toggle-keyboard": "Peralih keyboard", "option-configure-toolbar": "Atur bilah alat seluler", "option-added-options": "Opsi yang ditambahkan", "option-more-toolbar-options": "Opsi bilah alat lainnya", "option-attach": "Sisipkan lampiran", "option-add-command": "Tambahkan perintah umum", "option-add-command-description": "Pilih perintah umum untuk ditambahkan ke bilah alat." } }, "editor": { "search": { "placeholder-find": "Cari", "placeholder-replace": "Ganti", "label-previous": "Sebelumnya", "label-next": "Berikutnya", "label-all": "Semua", "label-exit-search": "Keluar penelusuran", "label-replace": "Ganti", "label-replace-all": "Ganti semua" }, "link-suggestion": { "label-type-hash": "Ketik #", "label-link-heading": "untuk hubungkan ke judul", "label-type-block": "Ketik ^", "label-link-block": "untuk hubungkan ke blok", "label-type-pipe": "Ketik |", "label-change-display-text": "untuk ganti tampilan teks", "label-no-match-found": "Tidak ditemukan kecocokan" }, "spellcheck": { "no-suggestion": "Tidak ada saran...", "add-to-dictionary": "Masukkan ke kamus" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "Tanpa judul", "label-heading-level": "Judul {{level}}" }, "print-modal": { "title": "Ekspor ke PDF", "caption": "Ekspor \"{{filename}}\" ke PDF dengan dengan pengaturan di bawah.", "setting-page-size": "Ukuran halaman", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Masukkan nama berkas sebagai judul", "setting-landscape": "Lanskap", "setting-margin": "Margin", "setting-margin-default": "Bawaan", "setting-margin-minimal": "Minimal", "setting-margin-none": "Tidak ada", "setting-downscale-percent": "Persentase skala", "button-export-to-pdf": "Ekspor ke PDF" }, "link-popover": { "tooltip-follow-link": "Ikuti tautan", "tooltip-open-link": "Buka tautan", "tooltip-search-tag": "Cari tag" } }, "interface": { "embed-cannot-find": "Tidak dapat menemukan:", "embed-open-in-default-app-tooltip": "Buka di aplikasi bawaan", "empty-sidebar": "Bilah sisi kosong, coba seret panel ke sini.", "sidebar-expand": "Buka", "sidebar-collapse": "Tutup", "msg-fail-to-save-file": "Gagal menyimpan berkas \"{{filepath}}\". {{message}}.", "no-file": "Tidak ada berkas", "msg-file-changed": "\"{{file}}\" telah dimodifikasi secara eksternal, menggabungkan perubahan secara otomatis.", "switch-vault": "Buka vault lain", "help": "Bantuan", "settings": "Pengaturan", "drag-to-rearrange": "Seret untuk menata", "msg-switched-to-read": "Beralih mode tampilan bawaan ke tampilan baca.", "msg-switched-to-edit": "Mengganti mode tampilan bawaan ke pengubah.", "msg-upgrade-installer": "Untuk menggunakan fitur ini, pasang ulang dengan pemasang terbaru yang tersedia di situs web kami.", "tooltip-restore-default-settings": "Pulihkan pengaturan bawaan", "label-copy": "Salin ke papan klip", "copied_generic": "Tersalin ke papan klip Anda", "copied": "{{item}} tersalin ke papan klip Anda", "url": "Tautan", "msg-open-file-through-uri": "Berkas \"{{path}}\" terbuka", "msg-file-not-found-through-uri": "Berkas \"{{name}}\" tidak ditemukan.", "delete-action-short-name": "Hapus", "msg-indexing": "Obsidian sedang mengindeks vault Anda...\nIni hanya dilakukan sekali.\nBeberapa fungsi mungkin tidak tersedia hingga ini selesai.", "msg-indexing-complete": "Pengindeksan selesai.", "msg-sandbox-vault": "Ini merupakan vault sandbox.\nPerubahan yang Anda lakukan pada vault ini akan hilang.", "label-enter-to-create": "Enter untuk membuat", "label-update-available": "Pembaruan Tersedia", "label-debug-info": "Info Debug", "button-learn-more": "Pelajari lebih lanjut", "button-not-now": "Tidak sekarang", "button-add": "Tambah", "button-manage": "Kelola", "label-new-tab": "Tab baru", "msg-tab-busy": "Tab ini sedang sibuk, harap coba lagi nanti", "empty-state": { "no-file-open": "Tidak ada berkas terbuka", "create-new-file": "Buat berkas baru", "go-to-file": "Buka berkas", "see-recent-files": "Lihat berkas terakhir", "close": "Tutup", "unknown-pane-title": "Plugin tidak lagi aktif", "unknown-pane-desc": "Plugin yang membuat panel ini ({{type}}) telah hilang" }, "menu": { "edit-view": "Ubah (Ctrl/Cmd+Klik untuk ubah di panel baru)", "read-view": "Tampilan terkini: Membaca", "switch-to-edit-view": "Klik untuk mengubah", "switch-to-read-view": "Klik untuk membaca", "mod-click-open-new-tab": "{{key}}+Klik untuk membuka di tab baru", "find": "Cari...", "replace": "Ganti...", "edit": "Ubah", "preview": "Pratinjau", "more-options": "Opsi lain", "close": "Tutup", "close-others": "Tutup lainnya", "close-right": "Tutub tab ke kanan", "pin": "Semat", "unpin": "Lepas semat", "unlink-tab": "Batalkan tautan tab", "link-tab": "Tautkan dengan tab...", "toggle-source-mode": "Mode Sumber", "toggle-reading-view": "Tampilan Baca", "delete-file": "Hapus berkas", "create-file": "Buat berkas ini", "open-link": "Buka tautan", "open-in-new-tab": "Buka di tab baru", "open-to-the-right": "Buka di kanan", "copy-url": "Salin tautan", "close-current-tab": "Tutup tab terkini", "copy": "Salin", "cut": "Potong", "paste": "Tempel", "paste-as-plain-text": "Tempel sebagai teks biasa", "select-all": "Pilih semua", "rename-heading": "Ubah nama judul ini...", "rename-blockid": "Ubah nama ID blok ini...", "open-in-new-window": "Buka di jendela baru", "move-to-new-window": "Pindah ke jendela baru", "open-in-browser": "Buka di browser", "stack-tabs": "Susun tab", "unstack-tabs": "Batal susun tab" }, "tooltip": { "click-to-expand": "Klik untuk luaskan", "click-to-collapse": "Klik untuk ciutkan", "alias": "Alias", "not-created-yet": "Belum dibuat, pilih untuk buat" }, "start-screen": { "label-version": "Versi", "option-open-folder-as-vault": "Buka folder sebagai vault", "option-open-folder-as-vault-description": "Pilih folder yang berisikan berkas Markdown.", "option-create-vault": "Buat vault baru", "option-create-vault-description": "Buat vault Obsidian baru dalam suatu folder.", "option-connect-obsidian-sync": "Hubungkan ke Obsidian Sync", "option-connect-obsidian-sync-description": "Atur vault yang tersinkronisasi dengan vault remote yang tersedia.", "option-new-vault-name": "Nama vault", "option-new-vault-name-description": "Beri nama untuk vault Anda yang mengagumkan.", "option-new-vault-location": "Lokasi", "option-new-vault-location-description": "Pilih lokasi untuk menaruh vault baru Anda.", "label-new-vault-location-preview": "Vault baru Anda akan ditempatkan di: ", "option-reveal-vault-in-explorer": "Ungkap vault di penjelajah sistem", "option-reveal-vault-in-explorer-mac": "Ungkap vault di Finder", "option-rename-vault": "Ubah nama vault...", "msg-error-rename-exists": "Vault dengan nama ini telah tersedia.", "msg-error-nested": "Tidak dapat memindahkan vault ke subfolder dari dirinya sendiri.", "msg-error-rename-open": "Tidak dapat mengubah nama dari vault yang sedang terbuka.", "msg-rename-failed": "Gagal mengubah nama vault.", "msg-rename-success": "Berhasil mengubah nama vault.", "option-move-vault": "Pindahkan vault...", "msg-move-select-dest": "Pilih folder tujuan", "msg-error-move-exists": "Sudah tersedia vault pada tujuan.", "msg-error-move-open": "Tidak dapat memindahkan vault yang sedang terbuka.", "msg-move-failed": "Gagal memindahkan vault.", "msg-move-success": "Berhasil memindahkan vault.", "option-remove": "Hapus dari daftar", "button-quick-start": "Memulai cepat", "button-open": "Buka", "button-browse": "Telusuri", "button-connect": "Hubungkan", "button-create-vault": "Buat", "button-back": "Kembali", "msg-empty-vault-name": "Nama vault tidak dapat kosong.", "msg-invalid-folder": "Pilih folder yang valid.", "msg-failed-to-create-vault": "Gagal membuat vault.", "msg-failed-to-create-vault-at-location": "Tidak dapat membuat vault di lokasi yang dipilih. Periksa kembali lokasi dan perizinan.", "msg-error-failed-to-open-vault": "Gagal membuka.", "msg-error-remove-current-open-vault": "Tidak dapat menghapus vault yang sekarang terbuka.", "option-get-help": "Dapatkan Bantuan", "option-user-email": "Surel", "placeholder-your-email": "Surel Anda...", "option-user-password": "Kata sandi", "placeholder-your-password": "Kata sandi Anda...", "button-sign-in": "Masuk", "button-setup": "Mengatur", "option-connect-vault-desc": "Buat vault tersinkron pada perangkat ini.", "tooltip-own-vault": "Vault remote ini dimiliki oleh Anda.", "tooltip-shared-vault": "Vault remote ini dibagikan dengan Anda." }, "drag-and-drop": { "insert-link-here": "Sisipkan tautan di sini", "insert-links-here": "Sisipkan tautan di sini", "move-into-folder": "Pindah ke \"{{folder}}\"", "star-this-file": "Beri bintang berkas ini", "star-these-files": "Beri bintang berkas ini", "open-in-this-tab": "Buka pada tab ini", "open-as-tab": "Buka sebagai tab baru" }, "window": { "maximize": "Maksimalkan", "minimize": "Minimalkan", "restore-down": "Kecilkan", "close-window": "Tutup jendela", "go-back": "Sebelumnya", "go-forward": "Sesudahnya" }, "start-up": { "loading-obsidian": "Memuat Obsidian...", "obsidian-load-error": "Terjadi kesalahan ketika memuat Obsidian.", "button-reload-app": "Muat ulang aplikasi", "button-reload-app-in-safe-mode": "Muat ulang aplikasi dalam mode aman", "button-open-another-vault": "Buka vault lain", "loading-components": "Memuat komponen...", "loading-plugins": "Memuat plugin...", "loading-vault": "Memuat vault...", "msg-failed-to-load-vault": "Gagal memuat vault: ", "loading-cache": "Memuat cache...", "loading-workspace": "Memuat ruang kerja..." }, "mobile": { "action-import": "Impor ke vault", "action-choose-file-to-insert": "Pilih berkas untuk dimasukkan", "action-insert-text-into-file": "Masukkan teks ke {{filename}}", "action-insert-link-into-file": "Masukkan tautan ke {{filename}}", "msg-importing": "Mengimpor...", "msg-import-success": "Sukses mengimpor", "msg-failed-to-import-file": "Gagal mengimpor berkas {{filename}}", "msg-back-again-to-exit": "Tekan kembali lagi untuk keluar." }, "help-screen": { "label-official-help-site": "Situs bantuan resmi", "label-official-help-site-desc": "Baca dokumentasi bantuan resmi dari Obsidian, tersedia dalam berbagai bahasa.", "action-visit": "Kunjungi", "label-discord-chat": "Obrolan Discord", "label-discord-chat-desc": "Discord merupakan tempat terbaik untuk mengobrol dengan pengguna Obsidian berpengalaman lainnya dari seluruh dunia.", "action-join": "Gabung", "label-forum": "Forum resmi", "label-forum-desc": "Bantu satu sama lain, posting saran fitur, laporkan masalah, dan dapatkan diskusi mendalam mengenai pengelolaan pengetahuan.", "label-sandbox-vault": "Vault sandbox", "label-sandbox-vault-desc": "Bermain dan menguji coba dengan beragam fitur. Harap dicatat bahwa perubahan Anda tidak akan disimpan." } }, "commands": { "save-file": "Simpan berkas", "follow-cursor-link": "Buka tautan pada kursor", "open-cursor-link-in-new-tab": "Buka tautan pada kursor di tab baru", "open-cursor-link-to-the-right": "Buka tautan pada kursor pada sebelah kanan", "open-cursor-link-in-new-window": "Buka tautan pada kursor di jendela baru", "navigate-tab-above": "Fokus pada grup tab di atas", "navigate-tab-below": "Fokus pada grup tab di bawah", "navigate-tab-left": "Fokus pada grup tab di kiri", "navigate-tab-right": "Fokus pada grup tab di kanan", "toggle-pin": "Aktifkan/Matikan sematan", "split-right": "Pisah ke kanan", "split-down": "Pisah ke bawah", "toggle-stacked-tabs": "Peralih tab tersusun", "navigate-back": "Navigasikan mundur", "navigate-forward": "Navigasikan maju", "use-dark-mode": "Gunakan mode gelap", "use-light-mode": "Gunakan mode terang", "change-theme": "Ubah tema", "search-current-file": "Cari di dalam berkas", "search-replace-current-file": "Cari dan ganti di dalam berkas", "open-settings": "Buka pengaturan", "open-help": "Buka bantuan", "toggle-edit": "Pengalih tampilan ubah/baca", "toggle-source-mode": "Pengalih Pratinjau Nyata/Mode Sumber", "delete-current-file": "Hapus berkas", "new-tab": "Tab baru", "close-all-tabs": "Tutup semua tab", "close-active-tab": "Tutup tab terkini", "close-other-tabs": "Tutup semua tab lain", "toggle-left-sidebar": "Buka/Tutup bilah sisi kiri", "toggle-right-sidebar": "Buka/Tutup bilah sisi kanan", "toggle-default-new-tab-mode": "Peralih mode bawaan untuk tab baru", "focus-editor": "Fokus ke pengubah", "toggle-fold": "Lipat/Bentangkan baris teks", "fold-all": "Lipat semua judul dan daftar", "unfold-all": "Bentangkan semua judul dan daftar", "fold-more": "Lipat lebih", "fold-less": "Lipat kurang", "swap-line-up": "Tukar baris teks ke atas", "swap-line-down": "Tukar baris teks ke bawah", "remove-heading": "Buang judul", "toggle-heading": "Atur sebagai judul {{level}}", "toggle-bold": "Tebalkan teks yang dipilih", "toggle-italics": "Miringkan teks yang dipilih", "toggle-highlight": "Sorot teks yang dipilih", "toggle-comments": "Beri komentar untuk pilihan", "insert-link": "Sisipkan tautan", "toggle-spellcheck": "Aktifkan/Matikan pemeriksa ejaan", "delete-paragraph": "Hapus paragraf", "toggle-checklist": "Centang daftar periksa", "cycle-list-checklist": "Titik bulat/centang", "insert-callout": "Masukkan callout", "edit-file-title": "Ubah judul berkas", "copy-path": "Salin alur berkas", "copy-url": "Salin tautan Obsidian", "export-pdf": "Ekspor ke PDF", "reload": "Muat ulang aplikasi tanpa menyimpan", "undo-close-tab": "Batal tutup tab", "context-menu": "Tampilkan menu konteks di bawah kursor", "show-debug-info": "Tampilkan informasi debug", "always-on-top": "Peralih untuk jendela selalu di atas", "zoom-in": "Perbesar", "zoom-out": "Perkecil", "reset-zoom": "Atur ulang pembesaran", "toggle-preview": "Ubah mode pengubah/pratinjau", "move-to-new-window": "Pindah panel terkini ke jendela baru", "open-in-new-window": "Buka panel terkini ke jendela baru", "rename-current-file": "Ubah nama berkas terkini" }, "dialogue": { "label-link-affected": "Ini akan mempengaruhi {{links}} di {{files}}.", "msg-updated-links": "{{links}} di {{files}} diperbarui.", "label-update-links": "Perbarui tautan", "label-confirm-update-link-to-file": "Apakah Anda ingin memperbarui tautan yang tertaut ke berkas ini?", "button-always-update": "Selalu perbarui", "button-just-once": "Hanya sekali", "button-do-not-update": "Jangan perbarui", "label-confirm-deletion": "Apakah Anda yakin ingin menghapus \"{{filename}}\"?", "label-move-to-system-trash": "Berkas akan dipindahkan ke tempat sampah sistem.", "label-move-to-vault-trash": "Berkas akan dipindahkan ke tempat sampah Obsidian, yang terletak di \".trash\" yang tersembunyi di vault Anda.", "label-permanent-delete": "Berkas akan dihapus permanen.", "label-non-empty-folder": "Folder ini tidak kosong.", "label-delete-folder-warning": "Jika Anda melanjutkan, semua berkas dalam folder ini akan dihapus.", "label-delete-folder": "Hapus folder", "button-delete": "Hapus", "button-delete-do-not-ask-again": "Hapus dan jangan tanyakan lagi", "label-do-not-ask-again": "Jangan tanya lagi", "label-existing-backlink": "Saat ini terdapat {{links}} merujuk ke catatan ini.", "label-existing-backlink_plural": "Saat ini terdapat {{links}} merujuk ke catatan ini.", "label-delete-file": "Hapus berkas", "button-manage": "Kelola", "button-cancel": "Batal", "button-done": "Selesai", "button-save": "Simpan", "button-stop": "Hentikan", "button-continue": "Lanjutkan", "preparing-pdf": "Menyiapkan PDF...", "label-rename-file": "Ubah nama berkas", "label-new-name": "Nama baru", "msg-rename-success": "Berhasil ubah nama berkas.", "label-rename-heading": "Ubah nama judul", "label-rename-blockid": "Ubah nama ID blok" }, "menu-items": { "new-file": "Buat Catatan", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Buka Secara Cepat...", "open-vault": "Buka Vault...", "close-tab": "Tutup Tab", "close-window": "Tutup Jendela", "find": "Cari", "replace": "Ubah", "insert-callout": "Callout", "insert-markdown-link": "Tautan Markdown", "insert-wikilink": "Tautan", "set-heading": "Judul {{level}}", "no-heading": "Tanpa Judul", "insert-quote": "Kutip", "export-pdf": "Ekspor PDF", "toggle-bullet-list": "Daftar Titik", "toggle-numbered-list": "Daftar Angka", "toggle-checklist": "Daftar Tugas", "toggle-bold": "Tebal", "toggle-code": "Kode", "toggle-comment": "Komentar", "toggle-italics": "Miring", "toggle-highlight": "Sorot", "toggle-strikethrough": "Coret", "toggle-comments": "Komentar", "fold-all": "Lipat Semua", "unfold-all": "Batal Lipat Semua", "fold-more": "Lipat Lebih", "fold-less": "Lipat Kurang", "source-mode": "Mode Sumber", "reading-view": "Mode Baca", "show-debug-info": "Tampilkan Informasi Debug", "navigate-back": "Navigasikan Mundur", "navigate-forward": "Navigasikan Maju", "toggle-left-sidebar": "Peralih Bilah Sisi Kiri", "toggle-right-sidebar": "Peralih Bilah Sisi Kanan", "split-right": "Pisah ke kanan", "split-down": "Pisah ke bawah", "release-notes": "Catatan Rilis" }, "plugins": { "name": "Plugin", "file-explorer": { "name": "Penjelajah berkas", "desc": "Lihat berkas dan folder dalam vault Anda.", "action-open": "Buka penjelajah berkas", "action-show": "Tampilkan penjelajah berkas", "action-create-note": "Buat catatan", "action-create-note-to-the-right": "Buat catatan ke sebelah kanan", "action-collapse-all": "Ciutkan Semua", "action-expand-all": "Bentangkan Semua", "action-new-note": "Catatan baru", "action-new-folder": "Folder baru", "action-change-sort": "Ubah urutan sortir", "action-reveal-file": "Tunjukkan berkas di penjelajah berkas", "action-reveal-active-file": "Tunjukkan berkas aktif di penjelajah berkas", "command-move-file": "Pindahkan berkas ke folder lain", "action-move-file": "Pindahkan berkas ke...", "action-move-folder": "Pindahkan folder ke...", "action-move-items": "Pindahkan {{count}} item ke...", "prompt-type-folder": "Ketikkan folder", "label-no-folders": "Folder tidak ditemukan.", "instruction-navigate": "untuk navigasi", "instruction-move": "untuk pindah", "instruction-dismiss": "untuk tutup", "label-sort-a-to-z": "Nama berkas (A ke Z)", "label-sort-z-to-a": "Nama berkas (Z ke A)", "label-sort-new-to-old": "Waktu modifikasi (baru ke lama)", "label-sort-old-to-new": "Waktu modifikasi (lama ke baru)", "label-sort-created-old-to-new": "Waktu pembuatan (lama ke baru)", "label-sort-created-new-to-old": "Waktu pembuatan (baru ke lama)", "menu-opt-new-note": "Catatan baru", "menu-opt-new-folder": "Folder baru", "menu-opt-set-attachment-folder": "Tetapkan sebagai folder lampiran", "menu-opt-rename": "Ubah nama", "menu-opt-delete": "Hapus", "menu-opt-make-copy": "Buat salinan", "msg-invalid-characters": "Nama berkas tidak boleh berisi salah satu diantara karakter berikut: ", "msg-unsafe-characters": "Tautan tidak bekerja dengan nama berkas yang berisi satu di antara karakter ini: ", "msg-file-already-exists": "Sudah ada berkas dengan nama yang sama", "msg-empty-file-name": "Nama berkas tidak boleh kosong.", "msg-bad-dotfile": "Nama berkas tidak boleh diawali dengan titik.", "tooltip-modified-time": "Terakhir diubah pada {{time}}", "tooltip-created-time": "Dibuat pada {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Pindahkan", "label-untitled-file": "Tanpa judul", "label-untitled-folder": "Tanpa judul", "msg-set-attachment-folder": "Mulai sekarang, lampiran akan tersimpan di \"{{path}}\"." }, "search": { "name": "Penelusuran", "desc": "Telusuri kata kunci di semua catatan.", "action-open-search": "Telusuri di semua berkas", "label-collapse-results": "Ciutkan hasil", "label-match-case": "Sesuaikan huruf", "label-explain-search-term": "Jelaskan istilah penelusuran", "label-more-context": "Tampilkan lebih banyak konteks", "prompt-start-search": "Ketik untuk memulai penelusuran...", "label-match-text": "Cocokkan teks: ", "label-match-regex": "Cocokkan regex: ", "label-match-exact-text": "Berisi teks sama persis: ", "label-match-all": "Cocokkan semua dari: ", "label-match-any": "Cocokkan salah satu: ", "label-excluding": "Kecualikan: ", "label-case-sensitive": "Peka huruf besar/kecil", "label-case-insensitive": "Tidak peka huruf besar/kecil", "label-match-file-path": "Cocokkan alur berkas: ", "label-match-file-name": "Cocokkan nama berkas: ", "label-match-content": "Cocokkan konten berkas: ", "label-match-task": "Cocokkan tugas: ", "label-match-task-todo": "Cocokkan tugas (mengerjakan): ", "label-match-task-done": "Cocokkan tugas (selesai): ", "label-match-line": "Cocolkan baris: ", "label-match-block": "Cocokkan blok: ", "label-match-section": "Cocokkan bagian: ", "label-match-tag": "Cocokkan tag: ", "label-no-matches": "Tidak ditemukan kecocokan.", "matches-with-count": "... dan {{count}} kecocokan.", "matches-with-count_plural": "... dan {{count}} kecocokan.", "label-copy-search-results": "Salin hasil penelusuran", "button-copy-results": "Salin hasil", "msg-successfully-copied": "Hasil tersalin ke papan klip Anda.", "option-show-path": "Tampilkan alur", "option-show-path-description": "Tampilkan alur lengkap dari berkas daripada hanya nama berkas.", "option-link-style": "Gaya tautan", "option-link-style-description": "Secara opsional, ubah setiap hasil berkas menjadi tautan.", "option-choice-link-style-none": "Tidak ada", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Tautan Markdown", "option-list-prefix": "Awalan daftar", "option-list-prefix-description": "Secara opsional, tambahkan item awalan untuk setiap hasil berkas.", "option-choice-list-style-none": "Tidak ada", "option-choice-list-style-dash": "Tanda hubung (-)", "option-choice-list-style-asterisk": "Asteriks (*)", "option-choice-list-style-numbered": "Bernomor", "tooltip-clear-search": "Hapus penelusuran", "label-search-options": "Opsi penelusuran", "tooltip-read-more": "Baca selengkapnya", "label-history": "Riwayat", "tooltip-clear-history": "Hapus riwayat penelusuran", "label-path-option-description": "cocokan alur berkas", "label-file-name-option-description": "cocokkan nama berkas", "label-tag-option-description": "telusuri tag", "label-line-option-description": "telusuri kata kunci di baris yang sama", "label-section-option-description": "telusuri kata kunci di bawah judul yang sama", "menu-opt-search-for": "Menelusuri \"{{keyword}}\"" }, "quick-switcher": { "name": "Peralih cepat", "desc": "Tekan Ctrl/Cmd+O untuk beralih ke berkas lain dengan menggunakan keyboard Anda.", "short-name": "Peralih", "action-open": "Buka peralih cepat", "instruction-navigate": "untuk navigasi", "instruction-open": "untuk membuka", "instruction-open-in-new-tab": "untuk membuka di tab baru", "instruction-open-to-the-right": "untuk membuka ke kanan", "instruction-create": "untuk membuat", "instruction-dismiss": "untuk menutup", "label-no-note-create-new": "Catatan tidak ditemukan. Enter untuk buat baru.", "prompt-type-file-name": "Ketik nama berkas untuk beralih atau membuat...", "label-enter-to-create": "Enter untuk buat", "tooltip-not-created-yet": "Belum dibuat, pilih untuk buat", "option-show-existing-only": "Tampilkan yang ada saja", "option-show-existing-only-description": "Apakah menampilkan tautan ke berkas yang belum dibuat.", "option-show-attachments": "Tampilkan lampiran", "option-show-attachments-desc": "Tampilkan berkas lampiran, seperti gambar, video dan PDF.", "option-show-all-file-types": "Tampilkan semua jenis berkas", "option-show-all-file-types-desc": "Tampilkan semua berkas termasuk yang tidak bisa Obsidian buka. Berkas akan dibuka dengan aplikasi bawaan untuk jenis berkas itu." }, "graph-view": { "name": "Tampilan grafik", "desc": "Tampilkan grafik yang menunjukan ketertautan catatan-catatan Anda.", "action-open": "Buka tampilan grafik", "action-open-local": "Buka grafik lokal", "action-copy-screenshot": "Salin cuplikan layar", "tab-title": "Grafik dari {{displayText}}", "label-filters": "Saring", "prompt-filter-nodes": "Cari berkas...", "option-depth": "Kedalaman", "option-depth-description": "Tampilkan titik ini sejauh beberapa tautan", "option-neighbor-links": "Tautan tetangga", "option-neighbor-links-description": "Tampilkan tautan antar catatan yang bertetangga.", "option-forelinks": "Tautan keluar", "option-forelinks-description": "Tampilkan tautan ke berkas lain", "option-backlinks": "Tautan masuk", "option-backlinks-description": "Tampilkan tautan dari berkas lain", "option-show-tags": "Tag", "option-show-tags-description": "Tag dihubungkan ke berkas yang mengandung tag", "option-show-attachments": "Lampiran", "option-show-attachments-description": "Tampilkan lampiran yang disertakan oleh berkas", "option-show-existing-files-only": "Hanya berkas yang ada", "option-show-existing-files-only-description": "Ketika diperiksa, berkas yang tidak ada tidak ditampilkan", "option-show-orphans": "Tanpa induk", "option-show-orphans-description": "Tampilkan berkas yang tidak tertaut ke berkas mana pun", "label-display": "Tampilan", "option-show-arrows": "Panah", "option-show-arrows-description": "Tunjukan panah ketika diperbesar", "option-text-fade": "Ambang pudar teks", "option-node-size": "Ukuran titik", "option-link-thickness": "Ketebalan tautan", "label-forces": "Gaya", "option-center-force": "Gaya pusat", "option-link-force": "Gaya tautan", "option-link-distance": "Jarak tautan", "option-repel-force": "Gaya tolak", "tooltip-open-graph-settings": "Buka pengaturan grafik", "msg-screenshot-copied": "Cuplikan layar disalin ke papan klip.", "label-groups": "Grup", "placeholder-enter-query": "Masukkan kueri...", "tooltip-delete-graph": "Hapus grup", "button-new-group": "Grup baru", "tooltip-click-to-change-drag-to-reorder": "Klik untuk ubah warna\nSeret untuk tata ulang grup", "action-timelapse": "Mulai animasi selang waktu grafik", "tooltip-start-timelapse-animation": "Mulai animasi selang waktu", "button-animate-timelapse": "Animasikan" }, "backlinks": { "name": "Backlink", "desc": "Tampilkan jumlah backlink di bilah status, dan tunjukan backlink dan sebutan yang tidak tertaut di bilah sisi.", "action-open": "Buka backlink", "action-show": "Tampilkan panel backlink", "action-open-for-current": "Buka backlink", "action-toggle-backlinks-in-document": "Aktifkan backlink di dokumen", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "Sebutan yang tertaut", "label-no-backlinks": "Tidak ditemukan backlink.", "label-unlinked-mentions": "Sebutan yang belum tertaut", "label-show-search": "Tampilkan saringan penelusuran", "label-link-button-text": "Hubungkan", "tab-title": "Backlink pada {{displayText}}", "label-no-unlinked-mentions": "Tidak ditemukan sebutan yang belum tertaut.", "ellipsis": "...", "option-backlink-in-document": "Backlink di dokumen", "option-backlink-in-document-desc": "Tampilkan backlink di dokumen secara bawaan saat membuka panel." }, "outgoing-links": { "name": "Tautan Keluar", "desc": "Tampilkan tautan keluar dan deteksi sebutan yang belum tertaut dari catatan lain di catatan sekarang.", "action-open": "Buka tautan keluar", "action-show": "Tampilkan panel tautan keluar", "action-open-for-current": "Buka tautan keluar untuk berkas sekarang", "tab-title": "Tautan keluar dari {{displayText}}", "label-links": "Tautan", "label-no-links": "Tidak ditemukan tautan.", "label-unlinked-mentions": "Sebutan yang belum tertaut", "tooltip-link-file": "Hubungkan berkas ini", "tooltip-not-created": "Belum dibuat" }, "tag-pane": { "name": "Panel tag", "desc": "Tampilkan tag Anda dan jumlah kemunculannya.", "action-show": "Tampilkan panel tag", "label-no-tags": "Tidak ditemukan tag.", "label-sort-by-name-a-to-z": "Nama tag (A ke Z)", "label-sort-by-name-z-to-a": "Nama tag (Z ke A)", "label-sort-by-frequency-high-to-low": "Frekuensi (tinggi ke rendah)", "label-sort-by-frequency-low-to-high": "Frekuensi (rendah ke tinggi)", "action-show-nested-tags": "Tampilkan tag bersarang", "action-collapse-all": "Ciutkan Semua", "action-expand-all": "Bentangkan Semua" }, "page-preview": { "name": "Pratinjau halaman", "desc": "Arahkan kursor pada tautan internal untuk mempratinjau kontennya. Pada mode editor, tekan Ctrl/Cmd sambil mengarahkan kursor.", "label-empty-note": "\"{{linktext}}\" belum dibuat. Klik untuk buat.", "label-source-editor": "Pengubah", "label-source-preview": "Pratinjau", "label-source-search": "Cari, Backlink, dan Tautan keluar", "label-require-mod": "Membutuhkan {{key}} untuk memicu pratinjau halaman saat kursor di atasnya" }, "starred": { "name": "Berbintang", "desc": "Beri bintang pada berkas dan penelusuran yang sering digunakan.", "action-show": "Tampilkan panel berbintang", "action-toggle": "Beri/Hapus bintang pada berkas", "action-toggle-search": "Beri/Hapus bintang pada penelusuran", "action-star": "Beri bintang", "action-unstar": "Hapus bintang", "menu-opt-remove": "Hapus", "msg-successfully-starred": "Berhasil memberi bintang {{type}} \"{{title}}\".", "msg-removed-starred": "Menghapus bintang {{type}} \"{{title}}\".", "msg-cannot-find-path": "Tidak dapat menemukan berkas pada \"{{path}}\"." }, "custom-css": { "name": "CSS kustom", "desc": "Baca dan terapkan \"obsidian.css\" dalam vault.", "setting-community-themes": "Tema komunitas", "msg-fetching-themes": "Mengambil data tema komunitas...", "prompt-filter": "Saring...", "label-dark-theme-only": "Tema gelap saja", "label-light-theme-only": "Tema terang saja", "label-use": "Gunakan", "label-stop-use": "Berhenti menggunakan tema ini", "label-install-and-use": "Pasang dan gunakan", "label-update": "Perbarui", "label-no-readme": "Tema ini tidak menyediakan berkas README.", "tooltip-remove-theme": "Hapus tema", "label-visit-on-github": "Kunjungi ke GitHub", "msg-load-error": "Tidak dapat memuat tema komunitas, periksa koneksi internet Anda.", "msg-now-using-theme": "Anda sekarang menggunakan {{title}} sebagai tema CSS.", "msg-deleted-theme": "Tema {{title}} telah dihapus.", "msg-updated-theme": "Tema {{title}} telah diperbarui.", "label-installed": "Terpasang", "label-legacy": "Lawas", "button-update-all-themes": "Perbarui semua", "msg-failed-load-themes": "Gagal memuat tema komunitas.", "msg-no-updates-found": "Pembaruan tema tidak ditemukan.", "msg-updates-found": "Ditemukan {{count}} tema untuk pembaruan.", "msg-updates-found_plural": "Ditemukan {{count}} tema untuk pembaruan.", "msg-failed-to-install-theme": "Gagal memasang tema \"{{name}}\".", "msg-successfully-installed-theme": "Berhasil memasang tema \"{{name}}\".", "msg-installing-theme": "Memasang tema \"{{name}}\"...", "label-search-summary": "Menampilkan {{themeCount}}:", "label-update-available": "Pembaruan Tersedia" }, "command-palette": { "name": "Palet perintah", "desc": "Gunakan Cmd/Ctrl+P dan mulai mengetik untuk menggunakan perintah.", "action-open": "Buka palet perintah", "instruction-navigate": "untuk navigasi", "instruction-use": "untuk gunakan", "instruction-dismiss": "untuk tutup", "label-no-commands": "Perintah tidak ditemukan.", "prompt-type-command": "Ketik perintah...", "label-pinned-commands": "Perintah tersemat", "option-add-new-pin": "Perintah tersemat baru", "option-add-new-pin-description": "Perintah tersemat akan tampil di atas semua perintah ketika tidak ada kueri penelusuran." }, "markdown-format-importer": { "name": "Importir format Markdown", "desc": "Konversi format Markdown dari aplikasi lain ke format Obsidian.", "action-open": "Buka importir Markdown", "option-roam-tag-fixer": "Perbaikan tag Roam Research", "option-roam-tag-fixer-description": "Konversi \"#tag\" dan \"#[[tag]]\" ke \"[[tag]]\".", "option-roam-highlight-fixer": "Perbaikan sorotan Roam Research", "option-roam-highlight-fixer-description": "Konversi \"^^sorotan^^\" ke \"==sorotan==\".", "option-roam-todo-converter": "Pengkonversian Roam Research TODO", "option-roam-todo-converter-description": "Konversi \"{{[[TODO]]}}\" ke \"[ ]\".", "option-bear-highlight-fixer": "Perbaikan sorotan Bear", "option-bear-highlight-fixer-description": "Konversi \"::sorotan::\" ke \"==sorotan==\".", "zettelkasten-link-fixer": "Perbaikan tautan Zettelkasten", "zettelkasten-link-fixer-description": "Memperbaiki tautan \"[[UID]]\" menjadi \"[[UID Nama Berkas]]\".", "zettelkasten-link-beautifier": "Perindah tautan Zettelkasten", "zettelkasten-link-beautifier-description": "Memperbaiki tautan \"[[UID]]\" dan memperindahnya menjadi \"[[UID Nama Berkas|Nama Berkas]]\".", "msg-all-files-warning": "Peringatan: Importir akan mengkonversi semua berkas dalam vault Anda, tidak hanya berkas yang tampil saja.", "msg-override-files-warning": "Berkas-berkas Anda akan ditimpa. Cadangkan semua berkas Anda sebelum melanjutkan konversi.", "label-start-conversion": "Mulai konversi", "label-stop": "Hentikan", "label-go-back": "Kembali", "label-done": "Selesai", "label-processing": "Memproses...", "label-cancelling": "Membatalkan...", "label-finished": "Selesai!", "label-processed-files": "Berkas yang diproses", "label-modified-files": "Berkas yang dimodifikasi", "label-total-replacements": "Total pergantian" }, "daily-notes": { "name": "Catatan harian", "desc": "Buka catatan harian hari ini, atau buat baru jika belum tersedia.", "short-name": "Hari ini", "action-open": "Buka catatan hari ini", "action-open-previous": "Buka catatan harian sebelumnya", "action-open-next": "Buka catatan harian selanjutnya", "action-insert-text": "Masukkan teks ke catatan harian", "action-insert-link": "Masukkan tautan ke catatan harian", "msg-fail-format": "Gagal membuat catatan harian. \"{{format}}\" adalah format yang tidak valid.", "msg-fail-folder": "Gagal membuat catatan harian. Folder \"{{folderOption}}\" tidak ditemukan.", "msg-fail-template-file": "Gagal membuat catatan harian. Berkas template \"{{template}}\" tidak ditemukan.", "msg-no-previous": "Tidak ada catatan harian sebelum ini.", "msg-no-next": "Tidak ada catatan harian setelah ini.", "option-date-format": "Format tanggal", "label-refer-to-syntax": "Untuk format tanggal lebih lanjut, lihat: ", "label-syntax-link": "referensi format", "label-syntax-live-preview": "Tampilannya akan seperti ini: ", "option-new-file-location": "Lokasi berkas baru", "option-new-file-location-description": "Lokasi folder untuk catatan harian yang baru dibuat.", "option-template": "Lokasi berkas template", "option-template-description": "Lokasi berkas yang digunakan sebagai template.", "option-open-on-start": "Buka catatan harian saat mulai", "option-open-on-start-description": "Buka catatan harian Anda secara otomatis kapanpun Anda buka vault ini." }, "unique-note-creator": { "name": "Pembuat catatan unik", "desc": "Buat catatan dengan awalan tanda waktu unik, untuk alur kerja seperti zettelkasten atau slip box.", "short-name": "Unik", "action-create-note": "Buat catatan unik baru", "option-new-file-location": "Lokasi berkas baru", "option-new-file-location-description": "Alur folder untuk membuat catatan unik baru.", "msg-folder-not-found": "Gagal membuat catatan unik. Folder \"{{folderOption}}\" tidak ditemukan.", "option-template-file": "Lokasi berkas template", "option-template-file-description": "Alur berkas yang digunakan sebagai template.", "option-template-file-placeholder": "Misal: folder1/catatan", "option-id-format": "Format awalan unik", "msg-template-file-not-found": "Gagal membuat catatan unik. berkas Template \"{{template}}\" tidak ditemukan.", "msg-failed-to-generate": "Gagal membuat catatan unik dengan format \"{{format}}" }, "random-note": { "name": "Catatan acak", "desc": "Buka catatan secara acak untuk menemukan atau mengulas ulang.", "short-name": "Acak", "action-open": "Buka catatan secara acak" }, "outline": { "name": "Kerangka", "desc": "Tampilkan kerangka dari catatan saat ini atau dari panel tertaut.", "action-open": "Buka kerangka", "action-show": "Tampilkan panel kerangka", "action-open-for-current": "Buka kerangka dari berkas ini", "tab-title": "Kerangka dari {{displayText}}", "label-no-headings": "Tidak ditemukan judul." }, "word-count": { "name": "Penghitung kata", "desc": "Tampilkan penghitung kata di bilah status." }, "slides": { "name": "Slide", "desc": "Presentasi dari Markdown. Gunakan \"---\" untuk memisahkan slide.", "action-start": "Mulai presentasi" }, "audio-recorder": { "name": "Perekam suara", "desc": "Merekam suara dan menyimpannya sebagai lampiran.", "action-start": "Mulai merekam suara", "action-stop": "Hentikan merekam suara", "action-toggle": "Mulai/hentikan perekaman", "msg-access-denied": "Akses mikrofon ditolak, aktifkan mikrofon dari panel preferensi.", "msg-pending-grant": "Izikan akses mikrofon untuk mulai merekam.", "msg-no-microphone": "Tidak ada mikrofon terhubung." }, "open-with-default-app": { "name": "Buka di aplikasi bawaan", "desc": "Menambahkan tombol untuk membuka berkas di aplikasi bawaan.", "action-open-file": "Buka di aplikasi bawaan", "action-open-file-mobile": "Bagikan", "action-show-in-folder": "Tampilkan dalam folder", "action-show-in-folder-mac": "Tampilkan di Finder" }, "templates": { "name": "Template", "desc": "Masukkan konten template dari folder berkas template.", "action-insert": "Masukkan template", "action-insert-current-date": "Masukkan tanggal sekarang", "action-insert-current-time": "Masukkan waktu sekarang", "option-template-folder-location": "Lokasi folder template", "option-template-folder-location-description": "Berkas-berkas dalam folder ini akan tersedia sebagai template.", "option-template-date-format": "Format tanggal", "option-template-date-format-description": "{{date}} di berkas template akan diganti dengan nilai ini.", "option-template-date-format-description2": "Anda juga bisa menggunakan {{date:YYYY-MM-DD}} untuk menimpa format sekali.", "option-template-time-format": "Format waktu", "option-template-time-format-description": "{{time}} di berkas template akan diganti dengan nilai ini.", "option-template-time-format-description2": "Anda juga bisa menggunakan {{time:HH:mm}} untuk menimpa format sekali.", "instruction-navigate": "untuk navigasi", "instruction-insert": "untuk masukkan template", "instruction-dismiss": "untuk tutup", "msg-no-templates-found": "Tidak ditemukan template", "msg-fail-invalid-folder": "Gagal untuk mencantumkan template. Folder template tidak valid.", "msg-fail-folder-not-found": "Gagal untuk mencantumkan template. Folder \"{{folderOption}}\" tidak ditemukan.", "prompt-type-template": "Ketikkan nama template..." }, "translucency": { "name": "Jendela transparan", "desc": "Aktifkan efek transparan untuk memberi kesan lebih dalam. Paling baik digunakan dengan mode gelap. Tidak didukung di Linux." }, "slash-command": { "name": "Perintah garis miring", "desc": "Aktifkan kemampuan untuk menampikan perintah garis miring di pengubah dengan mengetikkan garis miring." }, "editor-status": { "name": "Status Pengubah", "desc": "Tambahkan item bilah status untuk menampilkan dan mengganti mode pengubah terkini.", "read": "Baca", "edit-source": "Mode Sumber", "edit-live-preview": "Pratinjau Nyata" }, "publish": { "name": "Publikasi", "desc": "Publikasikan catatan Anda melalui Obsidian Publish.", "action-publish-changes": "Publikasikan perubahan", "label-no-internet-access": "Anda butuh akses internet untuk mempublikasikan perubahan.", "label-publish-service-description": "Obsidian Publish adalah layanan berbayar tambahan yang memungkinkan Anda untuk mempublikasikan catatan Anda online secara langsung dari Obsidian.", "label-please-login": "Untuk mulai publikasi, masukkan atau buat akun Obsidian baru.", "label-no-publish-subscription": "Anda belum berlangganan Obsidian Publish.", "button-purchase": "Beli", "label-manage-sites": "Kelola situs", "label-no-sites": "Anda tidak memiliki situs.", "button-choose": "Pilih", "tooltip-edit-site-id": "Ubah ID situs", "tooltip-delete-site": "Hapus situs", "label-delete-site-confirmation": "Anda yakin Anda ingin menghapus situs ini?", "label-delete-site-details": "Ini akan secara permanen menghapus situs Anda segera.", "label-confirm-delete-site": "Konfirmasi hapus situs \"{{site}}\"", "option-site-id": "ID situs", "option-site-id-description": "Situs Anda akan berada di https://publish.obsidian.md/{site id}. Anda dapat mengubah ini nanti. Hanya huruf kecil, angka, dan tanda hubung yang diperbolehkan.", "option-site-id-placeholder": "Pilih ID situs", "button-create": "Buat", "msg-invalid-site-id": "ID situs hanya dapat berisi huruf kecil, angka, dan tanda hubung.", "msg-site-id-in-use": "Situs ID ini sedang digunakan, coba yang lain.", "msg-create-site-issue": "Terdapat masalah ketika membuat situs Anda.", "label-site-options": "Opsi situs", "option-site-general": "Umum", "option-site-components": "Komponen", "option-site-appearance": "Tampilan", "option-site-reading-experience": "Pengalaman membaca", "option-site-misc": "Pengaturan lain situs", "option-site-name": "Nama situs", "option-site-name-description": "Nama dari situs terpublikasi Anda. Itu akan ditampilkan di judul halaman dari situs Anda.", "option-site-name-placeholder": "Nama dari situs Anda", "option-home-page-file": "Berkas laman", "option-home-page-file-description": "Halaman pertama yang pengguna lihat ketika mendarat di situs terpublikasi Anda", "option-home-page-file-placeholder": "Pilih berkas terpublikasi", "option-logo": "Logo", "option-logo-description": "Ambil berkas gambar sebagai logo situs Anda.", "option-logo-placeholder": "Semua gambar yang diunggah dalam vault Anda...", "option-site-collaboration": "Kolaborasi situs", "option-site-collaboration-desc": "Kelola kolaborator untuk situs ini.", "button-manage-collaborators": "Kelola", "option-theme": "Tema", "option-theme-description": "Pilih skema warna bawaan untuk situs Anda.", "option-theme-system": "Mengikuti sistem", "option-show-theme-toggle": "Peralih terang/gelap", "option-show-theme-toggle-description": "Biarkan pengunjung beralih antara tema terang dan gelap sesuai keinginan mereka.", "option-show-navigation": "Tampilkan navigasi", "option-show-navigation-description": "Tampilkan daftar dari semua halaman di sisi kiri dari situs terpublikasi Anda.", "option-show-search": "Tampilkan bilah penelusuran", "option-show-search-description": "Tampilkan bilah penelusuran di atas navigasi yang memungkinkan pengunjung mencari halaman dan judul di situs Anda.", "option-show-graph": "Tampilkan tapilan grafik", "option-show-graph-description": "Tampilkan grafik lokal kecil untuk setiap halaman.", "option-show-outline": "Tampilkan daftar isi", "option-show-outline-description": "Tampilkan kerangka dari judul setiap halaman.", "option-show-backlinks": "Tampilkan backlink", "option-show-backlinks-description": "Tampilkan bagian backlink di setiap akhir halaman.", "option-sliding-window-mode": "Gunakan jendela geser", "option-sliding-window-mode-description": "Buka halaman di panel baru sebelah kanan. Memungkinkan menggulir panel secara horizontal.", "option-hover-preview-file": "Tampilkan pratinjau melayang", "option-hover-preview-file-description": "Tampilkan halaman pratinjau ketika melayang pada tautan.", "option-hide-title": "Sembunyikan judul laman", "option-hide-title-description": "Menyembunyikan judul laman. Berguna ketika Anda memiliki judul tersendiri pada awalan setiap laman.", "option-readable-line-length": "Panjang baris yang dapat dibaca", "option-readable-line-length-description": "Batasi panjang maksimum baris teks. Memuat lebih sedikit konten pada layar, tetapi membuat paragraf-paragraf yang panjang lebih mudah dibaca.", "option-site-password": "Kata sandi", "option-site-password-description": "Batasi akses ke situs anada menggunakan kata sandi.", "option-google-analytics": "Kode pelacakan Google Analytics", "option-google-analytics-description": "Atur Google Analytics untuk situs Anda. Hanya tersedia untuk pengunjung dari Tautan domain kustom Anda. Sebelumnya, periksa hukum dan regulasi setempat Anda.", "button-manage-passwords": "Atur", "button-save-site-settings": "Simpan pengaturan situs", "msg-updated-options": "Pengaturan untuk situs Anda terbarui.", "button-go-back": "Kembali", "label-publishing-to": "Publikasikan ke", "tooltip-switch-site": "Alihkan situs", "button-add-linked": "Tambahkan yang tertaut", "tooltip-add-linked": "Tambahkan semua berkas yang tertaut dengan item yang terpilih saat ini", "msg-added-linked-files": "{{count}} berkas yang tertaut telah ditambahkan.", "msg-added-linked-files_plural": "{{count}} berkas yang tertaut telah ditambahkan.", "tooltip-open-site-options": "Ubah pengaturan situs", "label-no-changes-detected": "Perubahan tidak terdeteksi.", "label-changed-files-to-be-published": "Ubah", "label-unchanged-files-already-published": "Batal ubah (pilih untuk hapus)", "label-file-selected": " Terpilih", "button-select-all-files": "Pilih semua", "button-deselect-all-files": "Batal pilih semua", "label-new-files-to-be-published": "Baru", "button-publish": "Publikasikan", "msg-no-permission-to-publish-to-site": "Anda tidak memiliki izin untuk mempublikasikan ke situs.", "msg-select-at-least-one-file": "Pilih minimal satu berkas.", "label-upload-changes": "Unggah perubahan", "button-done": "Selesai", "button-stop": "Berhenti", "label-status-uploading": "Mengunggah", "label-status-to-publish": "Mempublikasikan", "label-status-to-delete": "Menghapus", "label-status-published": "Terpublikasikan", "label-status-deleted": "Terhapus", "label-status-failed": "Gagal", "label-status-cancelled": "Terbatalkan", "button-change": "Ubah", "label-clear-cache": "Ini membutuhkan beberapa menit agar perubahan tampil di situs Anda. Jika Anda tidak melihat perubahan terakhir Anda, coba hapus cache di browser Anda.", "label-visit-site": "Anda dapat mengunjungi situs Anda di sini: ", "msg-something-went-wrong": "Terjadi kesalahan. Periksa konsol pengembang untuk rincian.", "msg-network-error": "Terjadi kesalahan jaringan. ", "label-manage-passwords": "Kelola kata sandi", "label-add-password": "Tambahkan kata sandi", "action-new-password": "Kata sandi baru", "label-no-password": "Situs Anda sekarang belum memiliki kata sandi. Semua orang dapat mengunjunginya.", "label-have-password": "Situs Anda terproteksi kata sandi. Jika Anda punya beberapa kata sandi, pengunjung dapat mengakses situs Anda dengan memasukan salah satunya.", "option-password-name": "Kata sandi", "option-password-desc": "Hash dari kata sandi Anda akan aman tersimpan. Sekali kata sandi ditetapkan, tidak dapat ditampilkan dalam teks biasa.", "option-password-placeholder": "Kata sandi Anda", "option-nickname-name": "Nama panggilan (opsional)", "option-nickname-desc": "Beri nama panggilan untuk mengingatkan Anda untuk apa atau untuk siapa kata sandi.", "action-add-password": "Tambahkan kata sandi ini", "label-untitled-password": "Kata sandi tanpa judul", "label-password-created-time": "Dibuat {{time}}", "msg-added-new-password": "Tambahkan kata sandi baru.", "option-custom-domain": "Domain kustom", "option-custom-domain-desc": "Gunakan domain Anda sendiri ganti dari Tautan https://publish.obsidian.md/{id situs}.", "option-noindex": "Tidak izinkan mesin cari mengindeks", "option-noindex-desc": "Mencegah mesin cari dari mengindeks situs Anda.", "button-configure": "Konfigurasi", "label-configure-custom-domain": "Konfigurasikan domain kustom", "option-custom-url-name": "Tautan kustom", "option-custom-url-desc": "Tautan yang situs Anda akan berada.", "option-custom-url-placeholder": "www.domainanda.com", "option-custom-url-redirect": "Alihkan ke domain kustom Anda", "option-custom-url-redirect-desc": "Mengalihkan pengunjung ke publish.obsidian.md/id ke kustom domain Anda.", "button-update-custom-domain": "Perbarui pengaturan domain", "label-custom-domain-instructions": "Rujuk ke {{link}} kami pada situs bantuan kami untuk informasi lebih lanjut.", "label-custom-domain-link-name": "panduan penyetelan domain kustom", "label-site-usage": "Anda menggunakan {{site}} melebihi {{limit}} Anda.", "button-add-more-sites": "Beli situs lebih", "label-no-sites-bought": "Anda belum membeli situs apa pun.", "button-get-site": "Dapatkan situs", "label-manage-sharing": "Kelola berbagi untuk \"{{name}}\"", "label-sharing-with-users": "Situs ini sekarang dibagikan dengan orang-orang berikut.", "label-not-sharing": "Situs ini sekarang tidak dibagikan kepada siapa pun.", "label-invite-pending": "Tertunda", "tooltip-remove-user": "Hapus pengguna", "option-invite-user": "Undang pengguna", "placeholder-invite-user": "Masukkan surel mereka..", "error-email-must-be-valid": "Harap masukkan surel yang valid untuk mengundang seseorang.", "msg-enable-publish-plugin": "Harap aktifkan plugin inti Pubikasi di Pengaturan -> Plugin inti untuk melihat situs.", "label-your-sites": "Situs Anda", "label-sites-shared-with-you": "Situs yang dibagikan dengan Anda", "tooltip-leave-site-sharing": "Berhenti berkolaborasi pada situs ini", "label-leave-site-confirmation": "Konfirmasi berhenti berkolaborasi", "label-leave-site-confirmation-details": "Ini akan menghapus situs ini dari daftar situs yang dibagikan dengan Anda. Aksi ini tidak dapat dikembalikan.", "label-leave-site-confirmation-details-2": "Harap hubungi pemilik situs jika Anda ingin berkolaborasi kembali pada situs ini.", "button-leave": "Keluar", "label-compare-with-live": "Bandingkan dengan versi nyata", "button-use-live-version": "Gunakan versi nyata", "label-confirm-override": "Konfirmasi menimpa versi lokal", "label-confirm-override-1": "Apakah Anda yakin ingin menimpa versi lokal?", "label-confirm-override-2": "Versi nyata akan digunakan dan versi lokal Anda akan dibatalkan. Harap lakukan pencadangan jika diperlukan.", "button-proceed": "Proses", "message-successfully-used-live-version": "Berhasil menggunakan versi nyata untuk menimpa versi lokal Anda.", "label-open-file": "Buka berkas", "tooltip-manage-publish-filters": "Kelola filter publikasi", "option-included-folders": "Masukkan folder", "option-included-folders-desc": "Berkas pada folder ini akan secara otomatis terpilih pada saat Anda meninjau perubahan untuk dipublikasikan.", "option-currently-included-folders": " Folder yang saat ini dimasukkan:", "option-excluded-folders": "Kecualikan folder", "option-excluded-folders-desc": "Berkas pada folder ini tidak akan ditampilkan pada saat Anda meninjau perubahan untuk dipublikasikan. Pengaturan ini akan diprioritaskan atas folder yang dimasukkan di atas.", "label-number-of-folders-included": "Obsidian Publish saat ini memasukkan {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish saat ini mengecualikan {{folders}}.", "label-manage-included-folders": "Kelola folder yang dimasukkan", "label-manage-excluded-folders": "Kelola folder yang dikecualikan", "label-add-included-folder": "Masukkan folder", "label-add-included-folder-desc": "Anda dapat memasukkan folder yang tersedia maupun folder yang belum Anda buat sama sekali.", "tooltip-contact-support": "Hubungi dukungan" }, "workspaces": { "name": "Ruang kerja", "desc": "Simpan dan muat tata letak ruang kerja.", "action-load-layout": "Muat tata letak ruang kerja", "action-manage-layouts": "Kelola tata letak ruang kerja", "action-save-and-load-layout": "Simpan dan muat tata letak lain", "placeholder-save-current-layout-as": "Simpat tata letak ruang kerja terkini sebagai...", "button-save": "Simpan", "button-load": "Muat", "tooltip-delete-layout": "Hapus tata letak", "msg-delete-layout-success": "Berhasil menghapus tata letak", "msg-enter-name": "Harap masukkan nama untuk tata letak baru.", "msg-save-layout-success": "Berhasil menyimpan tata letak.", "label-no-layout-found": "Tidak ada tata letak.", "placeholder-type-to-search-layouts": "Ketikkan nama tata letak..." }, "sync": { "name": "Sinkronisasi", "desc": "Sinkronisasi berkas Anda dengan Obsidian Sync.", "action-view-version-history": "Lihat riwayat versi", "label-load-more": "Muat lebih banyak", "label-show-diff": "Tampilkan perbedaan", "label-copy-to-clipboard": "Salin ke papan klip", "label-restore-this-version": "Pulihkan versi ini", "msg-already-latest-version": "Versi ini sudah versi terbaru.", "msg-restored-version": "Berhasil mengembalikan versi dari {{time}}", "label-file-deleted": "Berkas ini telah dihapus", "label-no-earlier-version": "Tidak ada versi yang lebih baru dari berkas ini.", "label-empty-file": "Kosong", "label-setting-files": "Pengaturan berkas", "label-deleted-files": "Berkas yang dihapus", "label-version-history": "Riwayat versi", "label-click-to-see-history": "Klik pada sebuah berkas yang telah terhapus untuk melihat riwayatnya.", "label-create-remote-vault": "Buat vault remote", "msg-please-enter-password": "Silakan masukkan kata sandi", "msg-vault-name-cannot-be-empty": "Nama vault tidak boleh kosong.", "msg-successfully-created-vault": "Berhasil membuat vault remote \"{{name}}\".", "label-remote-vault-explanation": "Vault remote menyinkronkan vault antar perangkat dengan aman.", "option-vault-name": "Nama vault", "option-vault-name-desc": "Membantu Anda mengingat untuk vault ini untuk apa.", "option-vault-name-placeholder": "Vault keren saya", "option-use-custom-encryption-password": "Kustomisasi kata sandi enkripsi ujung-ke-ujung", "option-use-custom-encryption-password-desc": "Jika Anda mematikan ini, kami akan mengelola kunci enkripsi dengan aman untuk Anda.", "option-use-custom-encryption-password-desc-warning": "Opsi ini tidak dapat diubah nanti.", "option-encryption-password": "Kata sandi enkripsi", "option-encryption-password-desc": "Kata sandi ini tidak dapat diubah nanti.", "option-encryption-password-desc-warning": "Jika Anda lupa kata sandi ini, segala data jauh akan tidak dapat digunakan selamanya.", "option-encryption-password-desc-2": "Ini tidak mempengaruhi data lokal Anda.", "option-encryption-password-placeholder": "Kata sandi Anda", "label-enter-encryption-password": "Masukan kata sandi enkripsi", "button-unlock-vault": "Buka vault", "msg-verified-password": "Kata sandi Anda berhasil diverifikasi.", "label-remote-vaults": "Vault remote Anda", "label-vault-created-time": "Dibuat {{time}}", "tooltip-delete-remote-vault": "Hapus", "tooltip-manage-sharing": "Kelola berbagi", "label-confirm-delete-remote-vault": "Konfirmasi hapus vault", "label-confirm-delete-remote-vault-question": "Anda yakin Anda ingin menghapus vault remote ini?", "label-confirm-delete-remote-vault-result": "Semua data pada server kami, termasuk riwayat versi, akan dihapus. Lokal berkas Anda akan tetap utuh.", "label-confirm-delete-remote-vault-warning": "Tindakan ini permanen dan tidak dapat diubah.", "msg-remote-vault-deleted": "{{name}} telah dihapus.", "button-connect-to-remote-vault": "Hubungkan", "button-disconnect-from-remote-vault": "Putuskan", "label-not-remote-vaults": "Anda tidak memiliki vault remote.", "button-create-new-remote-vault": "Buat vault baru", "label-sync-log": "Log sinkronisasi", "options-only-show-errors": "Hanya kesalahan", "options-only-show-errors-desc": "Hanya tampilkan kesalahan dan sembunyikan log item lain.", "button-copy-sync-log": "Salin log sinkronisasi", "msg-successfully-copied-sync-log": "Log sinkronisasi berhasil disalin.", "button-retry": "Coba lagi", "button-purchase-subscription": "Beli", "option-remote-vault": "Vault remote", "button-choose-remote-vault": "Pilih", "button-manage-remote-vault": "Kelola", "option-remote-vault-desc-connected": "Saat ini terhubung dengan vault remote \"{{name}}\".", "option-remote-vault-desc-not-connected": "Saat ini tidak terhubung dengan vault remote mana pun.", "option-sync-status": "Status sinkronisasi", "option-sync-status-desc-paused": "Obsidian Sync sekarang terjeda.", "option-sync-status-desc-running": "Obsidian Sync sekarang berjalan.", "option-device-name": "Nama perangkat", "option-device-name-desc": "Nama ini akan ditampilkan dalam log sinkr. Kosongkan untuk menggunakan nama bawaan.", "button-resume": "Lanjutkan", "button-pause": "Jeda", "option-view-deleted-files": "Berkas terhapus", "option-view-deleted-files-desc": "Tampilkan dan kembalikan berkas yang terhapus.", "option-sync-log": "Aktivitas sinkronisasi", "option-sync-log-desc": "Tampilkan aktivitas sinkronisasi terakhir untuk penelusuran kesalahan.", "button-view": "Tampilkan", "button-bulk-restore": "Pemulihan banyak", "button-restore-selected-files": "Pulihkan berkas terpilih", "msg-restoring": "Memulihkan...", "msg-restoring-complete": "`Pemulihan selesai: {{succeeded}} berhasil dan {{failed}} gagal.`", "option-over-size": "Ukuran vault melebihi batas", "option-over-size-desc": "Vault Anda {{size}} melebihi {{limit}}.", "msg-largest-files": "Tampilkan berkas-berkas terbesar", "msg-largest-files-desc": "Ini adalah berkas jarak jauh yang mengambil banyak ruang. Setelah hapus lampiran, gunakan tombol bersihkan untuk kosongkan ruang vault jarak jauh.", "button-purge-remote": "Bersihkan", "tooltip-purge-remote": "Secara permanen bersihkan lampiran yang dihapus dari vault jarak jauh untuk menghemat ruang.", "msg-purge-complete": "Pembersian selesai.", "option-prevent-sleep": "Cegah perangkat tertidur", "option-prevent-sleep-desc": "Mencegah perangkat dari mode tidur ketika masih terdapat berkas yang disinkronkan.", "option-selective-sync": "Sinkronisasi selektif", "option-excluded-folders": "Folder yang dikecualikan", "option-excluded-folder-desc": "Cegah folder tertentu dari sinkronisasi.", "option-currently-excluded-folders": " Folder ini sekarang dikecualikan:", "button-manage-excluded-folders": "Kelola", "option-sync-image": "Sinkronisasi gambar", "option-sync-image-desc": "Sinkronkan berkas gambar dengan ekstensi ini: {{extensions}}.", "option-sync-audio": "Sinkronisasi audio", "option-sync-audio-desc": "Sinkronkan berkas audio dengan ekstensi ini: {{extensions}}.", "option-sync-video": "Sinkronisasi video", "option-sync-video-desc": "Sync video berkas video dengan ekstensi ini: {{extensions}}.", "option-sync-pdf": "Sinkronisasi PDFs", "option-sync-pdf-desc": "Sinkronkan berkas PDF.", "option-sync-unsupported": "Sinkronkan semua jenis lainnya", "option-sync-unsupported-desc": "Sinkronkan berkas yang tidak didukung.", "option-vault-config-sync": "Sinkronkan konfigurasi vault", "option-view-config-files": "Pengaturan riwayat versi", "option-view-config-files-desc": "Tampilkan dan pulihkan riwayat versi dari pengaturan berkas.", "option-sync-app": "Pengaturan utama", "option-sync-app-desc": "Aktifkan untuk sinkronkan pengaturan editor, pengaturan berkas & tautan, pintasan kustom, dsb.", "option-sync-appearance": "Pengaturan tampilan", "option-sync-appearance-desc": "Sinkronkan pengaturan tampilan seperti mode gelap, tema digunakan, dan cuplikan yang diaktifkan.", "option-sync-appearance-data": "Tema dan cuplikan", "option-sync-appearance-data-desc": "Sinkronkan tema dan cuplikan yang diunduh. Apakah mereka aktif atau tidak, tergantung pengaturan sebelumnya.", "option-sync-hotkey": "Pintasan", "option-sync-hotkey-desc": "Sinkronkan pintasan kustom.", "option-sync-core-plugin": "Daftar plugin inti aktif", "option-sync-core-plugin-desc": "Sinkronkan plugin inti yang diaktifkan.", "option-sync-core-plugin-data": "Pengaturan plugin inti", "option-sync-core-plugin-data-desc": "Sinkronkan pengaturan plugin utama.", "option-sync-community-plugin": "Daftar plugin komunitas aktif", "option-sync-community-plugin-desc": "Sinkronkan plugin komunitas yang diaktifkan.", "option-sync-community-plugin-data": "Plugin komunitas yang terpasang", "option-sync-community-plugin-data-desc": "Sinkronkan plugin komunitas yang terpasang (berkas .js, .css, dan manifest.json) dan pengaturannya.", "label-sync-introduction": "Obsidian Sync adalah layanan sinkronisasi tambahan Obsidian dengan enkripsi ujung-ke-ujung dan riwayat versi.", "label-account-required": "Untuk memulai sinkronisasi, masuk atau buat akun Obsidian.", "button-sign-up": "Daftar", "button-log-in": "Masuk", "label-manage-excluded-folders": "Kelola folder yang dikecualikan", "label-number-of-folders-excluded": "{{folders}} sekarang dikecualikan dari sinkronisasi.", "label-add-excluded-folder": "Kecualikan folder", "label-add-excluded-folder-desc": "Anda dapat mengecualikan folder yang tersedia ataupun folder yang belum dibuat.", "tooltip-remove-excluded-folder": "Hapus dari daftar pengecualian", "label-setup-connection": "Setelan koneksi", "label-now-connected-to-vault": "Anda sekarang terhubung ke \"{{name}}\".", "button-start-syncing": "Mulai menyinkronkan", "label-confirm-merge-vault": "Konfirmasi penggabungan Vault", "msg-vault-has-notes": "Vault lokal Anda telah berisi beberapa catatan.", "msg-vault-merge-warning": "Jika Anda menghubungkan ke vault remote \"{{name}}\", catatan di vault lokal Anda akan digabungkan dengan catatan dari vault remote Anda. Dalam kasus terjadinya konflik, versi terkini dari catatan akan disimpan.", "tooltip-update-setting-on-all-devices": "Harap perbarui opsi ini dan mulai ulang aplikasi pada semua perangkat yang Anda inginkan untuk mendapatkan perubahan.", "label-sharing-with-users": "Vault remote ini sekarang dibagikan dengan orang-orang berikut.", "label-not-sharing": "Vault remote ini sekarang tidak dibagikan kepada siapa pun.", "label-vaults-shared-with-you": "Vault yang dibagikan dengan Anda", "tooltip-leave-vault-sharing": "Berhenti berkolaborasi pada vault ini", "label-leave-vault-confirmation": "Konfirmasi berhenti berkolaborasi", "label-leave-vault-confirmation-details": "Ini akan menghapus vault ini dari daftar vault yang dibagikan dengan Anda. Aksi ini tidak dapat dikembalikan.", "label-leave-vault-confirmation-details-2": "Harap hubungi pemilik vault jika Anda ingin berkolaborasi pada vault ini.", "button-leave": "Keluar", "label-require-subscription-to-connect": "Anda perlu berlangganan Obsidian Sync untuk terhubung dengan vault ini.", "option-contact-support": "Hubungi bantuan", "option-contact-support-desc": "Jika Anda mengalami masalah dengan Obsidian Sync, harap hubungi kami sehingga kami dapat membantu! Anda dapat menggapai kami melalui support@obsidian.md.", "button-email-support": "Surel bantuan" }, "file-recovery": { "name": "Pemulih berkas", "desc": "Memungkinkan Anda mengembalikan riwayat terakhir untuk memulihkan dari kecelakaan data hilang. Snapshot hanya menyimpan berkas Markdown.", "action-open": "Buka riwayat tersimpan", "option-interval": "Rentang waktu riwayat", "option-interval-description": "Rentang waktu minimal menit di antara dua riwayat.", "option-keep": "Panjang riwayat", "option-keep-description": "Panjang hari riwayat disimpan.", "option-open-history": "Snapshot", "option-open-history-description": "Tampilkan dan pulihkan riwayat tersimpan.", "button-view-snapshots": "Tampilkan", "option-clear": "Hapus riwayat", "option-clear-description": "Hapus semua riwayat.", "button-clear-history": "Hapus", "label-clear-warning": "Anda yakin Anda ingin hapus semua riwayat? Perlu dicatat bahwa hanya riwayat yang akan dihapus. Semua berkas dalam vault Anda tidak akan terdampak.", "msg-clear-complete": "Snapshot terhapus.", "label-no-history-found": "Tidak ditemukan riwayat.", "placeholder-choose-file": "Pilih berkas...", "label-select-file": "Pilih berkas di sebelah kiri untuk melihat riwayat." }, "note-composer": { "name": "Komposer catatan", "desc": "Gabung, pisah, dan perbaiki catatan.", "option-confirm-file-merge": "Konfirmasi penggabungan berkas", "option-confirm-file-merge-description": "Tanya sebelum gabungkan dua berkas.", "option-split-replacement-text": "Teks setelah ekstraksi", "option-split-replacement-text-description": "Apa yang ditampilkan di teks yang dipilih setelah mengekstraknya.", "option-choice-split-replacement-text-link": "Hubungkan ke berkas baru", "option-choice-split-replacement-text-embed": "Sematkan berkas baru", "option-choice-split-replacement-text-none": "Tidak ada", "option-template-file": "Lokasi berkas template", "option-template-file-description": "Berkas template digunakan ketika menggabungkan atau mengekstrak. Variabel tersedia: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, cth. {{date:YYYY-MM-DD}}.", "command-merge-file": "Gabungkan berkas ini dengan berkas lain...", "action-merge-file": "Gabungkan kesemua berkas dengan...", "label-no-files": "Tidak ditemukan berkas.", "instruction-navigate": "untuk navigasikan", "instruction-merge": "untuk gabungkan", "instruction-create-new": "untuk buat baru", "instruction-merge-at-top": "untuk gabungkan ke atas", "instruction-dismiss": "untuk tutup", "prompt-select-file-to-merge": "Pilih berkas untuk digabungkan...", "label-merge-file": "Gabungkan berkas", "label-confirm-file-merge": "Apakah Anda yakin Anda ingin gabungkan \"{{file}}\" menjadi \"{{destination}}\"? \"{{file}}\" akan dihapus.", "button-merge": "Gabungkan", "button-merge-do-not-ask-again": "Gabungkan dan jangan tanya lagi", "command-split-file": "Ekstrak seleksi ini...", "command-extract-heading": "Ekstrak judul ini...", "instruction-append": "pindah ke bawah", "instruction-prepend": "pindah ke atas", "msg-fail-to-fetch-template": "Gagal menerapkan berkas template: \"{{template}}\" tidak ditemukan.", "msg-fail-to-find-heading": "Gagal menemukan judul" }, "canvas": { "name": "Kanvas", "desc": "Atur dan hubungkan catatan dalam kanvas yang tak terhingga.", "action-add-note": "Tambah catatan dari vault", "action-add-media": "Tambah media dari vault", "action-add-card": "Tambah kartu", "action-add-website": "Tambah laman web", "action-create-group": "Buat grup", "action-create-with-size": "Buat kartu dengan ukuran spesifik", "action-convert-to-file": "Ubah ke berkas...", "action-drag-to-add-note": "Seret untuk menambah catatan dari vault", "action-drag-to-add-media": "Seret untuk menambah media dari vault", "action-drag-to-add-card": "Seret untuk menambah kartu", "action-enable-grid-snapping": "Aktifkan pengaitan kisi", "action-disable-grid-snapping": "Matikan pengaitan kisi", "action-edit-label": "Ubah label", "action-remove-label": "Hapus label", "action-search-file": "Cari berkas", "action-set-color": "Atur warna", "action-align": "Perata", "action-align-left": "Rata kiri", "action-align-center": "Rata tengah", "action-align-right": "Rata kanan", "action-align-top": "Rata atas", "action-align-middle": "Rata pusat", "action-align-bottom": "Rata bawah", "action-distribute-horizontal-spacing": "Distribusikan secara horizontal", "action-distribute-vertical-spacing": "Distribusikan secara vertikal", "action-justify-horizontally": "Ratakan secara horizontal", "action-justify-vertically": "Ratakan secara vertikal", "action-stack-horizontally": "Susun secara horizontal", "action-stack-vertically": "Susun secara vertikal", "action-stack-grid": "Susun kisi", "action-export-png": "Ekspor sebagai gambar", "label-export-png-desc": "Ekspor \"{{title}}\" sebagai berkas PNG dengan pengaturan di bawah.", "label-export-png-dimensions": "Estimasi dimensi gambar: {{dimensions}}", "option-export-png-show-logo": "Tampilkan logo", "option-export-png-show-logo-desc": "Ini akan menambahkan logo Obsidian pada sisi kiri bawah.", "option-export-png-zoom": "Pembesaran", "option-export-png-zoom-desc": "Pembesaran yang lebih besar akan menghasilkan gambar dengan resolusi lebih tinggi.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Pilih untuk merender seluruh kanvas atau hanya viewport yang tampak saja.", "option-export-png-frame-full": "Kanvas secara penuh", "option-export-png-frame-viewport": "Viewport saja", "action-remove": "Hapus", "action-narrow": "Sempitkan ke seksi...", "action-swap-file": "Tukar berkas...", "action-change-url": "Ubah URL...", "action-zoom-to-fit": "Perbesar untuk paskan", "action-zoom-to-selection": "Perbesar ke seleksi", "action-reload-page": "Muat ulang halaman", "action-go-to-target": "Ke target", "action-go-to-source": "Ke sumber", "command-create-new-canvas": "Buat kanvas baru", "command-new-canvas": "kanvas baru", "instruction-narrow": "untuk memasukkan judul", "prompt-to-narrow": "Ketikkan judul", "label-enter-url": "Ketikkan URL", "label-empty-embed": "\"{{linktext}}\" tidak ditemukan.", "prompt-add-text": "Tambah teks...", "prompt-start-search": "Ketik untuk mencari...", "label-canvas-help": "Bantuan kanvas", "label-no-heading": "Tanpa judul", "label-pan": "Geser", "label-pan-horizontal": "Geser secara horizontal", "label-zoom": "Perbesar", "label-select-all": "Pilih semua", "label-add-remove-selection": "Tbahkan ke / hapus dari pilihan", "label-clone-card": "Gandakan kartu", "label-constrain-movement-axis": "Batasi pergerakan kartu ke sumbu", "label-disable-drag-snapping": "Matikan pengaitan selama menggeser", "label-remove-card": "Hapus kartu", "label-drag-from-below": "Seret dari bawah atau ketuk ganda", "label-space-drag-pan": "Spasi + Geser untuk menggeser", "label-scroll-to-zoom": "Gulir untuk memperbesar", "label-untitled-group": "Grup tanpa judul" } }, "nouns": { "word-with-count": "{{count}} kata", "word-with-count_plural": "{{count}} kata", "character-with-count": "{{count}} karakter", "character-with-count_plural": "{{count}} karakter", "link-with-count": "{{count}} tautan", "link-with-count_plural": "{{count}} tautan", "file-with-count": "{{count}} berkas", "file-with-count_plural": "{{count}} berkas", "folder-with-count": "{{count}} folder", "folder-with-count_plural": "{{count}} folder", "backlink-with-count": "{{count}} backlink", "backlink-with-count_plural": "{{count}} backlink", "site-with-count": "{{count}} situs", "site-with-count_plural": "{{count}} situs", "plugin-with-count": "{{count}} plugin", "plugin-with-count_plural": "{{count}} plugin", "theme-with-count": "{{count}} tema", "theme-with-count_plural": "{{count}} tema" } }{ "setting": { "options": "Opzioni", "plugin": "Plugin", "builtin-plugins": "Plugin principali", "plugin-options": "Opzioni plugin", "folder-path-example-placeholder": "Esempio: cartella 1/cartella 2", "file-path-example-placeholder": "Esempio: cartella/nota", "msg-restart-required": "Per cambiare questa impostazione è necessario il riavvio.", "editor": { "name": "Editor", "section-general": "Generale", "section-behavior": "Comportamento", "section-display": "Visualizzazione", "option-spellcheck": "Controllo ortografico", "option-spellcheck-description": "Attiva il controllo ortografico. Attualmente disponibile solo per l'inglese (Stati Uniti).", "spellcheck-languages": "Lingue del controllo ortografico", "spellcheck-languages-description": "Scegli le lingue del controllo ortografico da usare.", "spellcheck-languages-mac-description": "Il controllo ortografico nativo rileverà automaticamente la lingua da usare su macOS.", "spellcheck-dict": "Dizionario del controllo ortografico", "spellcheck-dict-empty": "Il dizionario del controllo ortografico è vuoto.", "option-show-inline-title": "Mostra titolo in alto", "option-show-inline-title-description": "Mostra nome del file come titolo modificabile insieme al contenuto del file.", "option-readable-line-length": "Migliora leggibilità delle righe", "option-readable-line-description": "Limita la lunghezza massima delle righe. Mostra meno contenuti sullo schermo ma rende i paragrafi lunghi più leggibili.", "option-strict-line-break": "Non mostrare interruzioni di riga singole", "option-strict-line-break-description": "In modalità Anteprima, ignora gli a capo singoli seguendo la specifica Markdown. Disattivare questa opzione per mostrare le interruzioni di riga nell'anteprima.", "option-show-frontmatter": "Mostra frontespizio", "option-show-frontmatter-description": "In modalità Anteprima, mostra il frontespizio come un blocco di codice. Disattivare questa opzione per nascondere il frontespizio.", "option-auto-pair-brackets": "Chiusura automatica delle parentesi", "option-auto-pair-brackets-description": "Chiude le parentesi e le virgolette automaticamente", "option-auto-pair-markdown": "Completamento automatico della sintassi Markdown", "option-auto-pair-markdown-description": "Accoppia automaticamente i simboli per il grassetto e il corsivo.", "option-smart-indent-lists": "Indentazione intelligente delle liste", "option-smart-indent-lists-description": "Gestisce automaticamente l'indentazione e i marcatori delle liste.", "option-fold-heading": "Comprimi intestazioni", "option-fold-heading-description": "Permette di comprimere il contenuto all'interno delle intestazioni.", "option-fold-indent": "Comprimi indentazioni", "option-fold-indent-description": "Permette di comprimere una parte del contenuto con lo stesso livello d'indentazione, come le liste.", "option-default-new-tab-view": "Visualizzazione predefinita per le nuove schede", "option-default-new-tab-view-description": "La vista predefinita con cui aprire le nuove schede.", "option-default-new-tab-view-editing": "Modifica", "option-default-new-tab-view-reading": "Lettura", "option-default-editing-mode": "Modalità di modifica predefinita", "option-default-editing-mode-description": "La modalità di modifica predefinita con cui aprire un nuovo pannello.", "option-default-editing-mode-source": "Codice sorgente", "option-default-editing-mode-live-preview": "Anteprima dinamica", "option-show-line-number": "Mostra numero delle righe", "option-show-line-number-description": "Mostra il numero delle righe sul margine dell'editor.", "option-indentation-guide": "Mostra guide di indentazione", "option-indentation-guide-description": "Mostra linee verticali di collegamento tra gli elenchi come guida visiva.", "option-use-tabs": "Utilizza le tabulazioni", "option-use-tabs-description": "Utilizza le tabulazioni per indentare quando viene premuto il tasto \"Tab\". Disattivare per utilizzare gli spazi.", "option-tab-size": "Dimensione tabulazione", "option-tab-size-description": "Numero di spazi da usare per la tabulazione.", "option-rtl": "Da destra a sinistra (RTL)", "option-rtl-description": "Imposta la direzione del testo delle note da destra a sinistra.", "option-auto-convert-html": "Converti automaticamente HTML", "option-auto-convert-html-description": "Converte automaticamente HTML in Markdown quando si usa copia/incolla o trascina e rilascia da pagine web. Usare Ctrl/Cmd+Shift+V per incollare senza convertire.", "option-vim-key-bindings": "Tasti di scelta rapida Vim", "option-vim-key-bindings-description": "Permette di utilizzare la mappatura dei tasti di Vim nell'editor.", "option-vim-key-bindings-mobile": "Sui dispositivi mobili, questa impostazione è associata al dispositivo e non viene sincronizzata con il file di configurazione.", "option-emacsy-keys": "Tasti di scelta rapida Emacs per macOS", "option-emacsy-keys-description": "Permette di utilizzare i tasti di navigazione aggiuntivi in stile Emacs, che sono standard su macOS, ma che possono interferire con alcune operazioni chiave.", "label-confirm-enable-vim": "Attivazione della modalità Vim", "label-vim-warning": "La mappatura dei tasti di Vim è efficiente ma, se non si ha familiarità con Vim, può risultare contro-intuitiva. Attivare questa opzione potrebbe far sembrare che Obsidian abbia smesso di funzionare.", "label-vim-test": "Per verificare la tua conoscenza di Vim, inserisci il comando per uscire da Vim senza salvare qui sotto:", "label-vim-your-answer": "Risposta", "placeholder-enter-command": "Inserisci comando...", "button-confirm-enable-vim": "Attiva modalità Vim", "msg-vim-mode-enabled": "Il comando è corretto. La modalità Vim è stata attivata.", "msg-vim-mode-not-enabled": "Il comando non è corretto. Per sicurezza, la modalità Vim non è stata attivata.", "msg-vim-mode-please-enter-command": "Inserire il comando per attivare la modalità Vim", "option-legacy-editor": "Usa editor legacy", "option-legacy-editor-description2": "L'editor legacy verrà presto deprecato. Al momento non è più mantenuto e i bug correlati non verranno più risolti.", "label-legacy-deprecation": "Ecco il nuovo editor", "label-legacy-deprecation-1": "Obsidian ora ha un nuovo editor più robusto e accessibile.", "label-legacy-deprecation-2": "Sembra che tu stia utilizzando ancora l'editor legacy e pensiamo potrebbe piacerti il nuovo editor.", "label-legacy-deprecation-choice": "Quale modalità vuoi utilizzare?", "label-live-preview-description": "Un'esperienza ciò-che-vedi-è-ciò-che-ottieni, più moderna.", "label-source-mode-description": "Codice Markdown con sintassi evidenziata.", "button-start-new-editor": "Avvia nuovo editor" }, "file": { "name": "File e link", "option-confirm-file-deletion": "Conferma eliminazione dei file", "option-confirm-file-deletion-description": "Mostra una finestra di conferma durante l'eliminazione dei file.", "option-delete-destination": "File eliminati", "option-delete-destination-description": "Indica cosa fare con i file dopo averli eliminati.", "option-choice-system-trash": "Sposta nel cestino di sistema", "option-choice-vault-trash": "Sposta nel cestino di Obsidian (cartella .trash)", "option-choice-permanent-delete": "Elimina definitivamente", "option-always-update-links": "Aggiorna sempre collegamenti interni", "option-always-update-links-description": "Indica se aggiornare automaticamente i collegamenti dopo aver rinominato un file.", "option-new-note-location": "Posizione predefinita delle note", "option-new-note-location-description": "Indica dove inserire le note appena create. I plugin sovrascriveranno questa impostazione.", "option-choice-vault-root": "Cartella principale del vault", "option-choice-current-folder": "Stessa cartella del file", "option-choice-specified-folder": "Cartella personalizzata", "option-new-file-folder-path": "Cartella personalizzata per le nuove note", "option-new-file-folder-path-description": "Le nuove note verranno inserite nella cartella specificata. I plugin sovrascriveranno questa impostazione.", "option-use-wiki-links": "Usa [[Wikilink]]", "option-use-wiki-links-description": "Crea automaticamente Wikilink per [[collegamenti]] e ![[immagini]] al posto di collegamenti e immagini Markdown. Disabilitare questa opzione per utilizzare il formato Markdown.", "option-show-unsupported-files": "Rileva tutte le estensioni di file", "option-show-unsupported-files-description": "Mostra i file con qualsiasi estensione anche se Obsidian non può aprirli nativamente, in modo da poterli collegare o vedere in Esplora risorse e Selezione rapida.", "option-link-autocompleted-format": "Formato dei nuovi collegamenti", "option-link-autocompleted-format-description": "Formato dei collegamenti da utilizzare quando vengono generati automaticamente i collegamenti interni.", "option-choice-shortest-linktext": "Percorso più breve", "option-choice-relative-path": "Percorso relativo al file", "option-choice-absolute-path": "Percorso assoluto nel vault", "option-new-attachment-location": "Posizione predefinita dei nuovi allegati", "option-new-attachment-location-description": "Indica dove inserire gli allegati appena aggiunti.", "option-choice-subdirectory": "Sottocartella della cartella corrente", "option-attachment-folder-path": "Percorso cartella degli allegati", "option-attachment-folder-path-description": "I nuovi file allegati verranno inseriti nella cartella specificata. Comprende le immagini create tramite drag and drop o copia/incolla e le registrazioni audio.", "option-attachment-subfolder-path": "Nome della sottocartella", "option-attachment-subfolder-path-description": "Se il file si trova in \"vault/cartella\", e il nome della sottocartella è \"allegati\", gli allegati verranno salvati in \"vault/cartella/allegati\".", "option-attachment-subfolder-path-placeholder": "allegati", "option-excluded-files": "File esclusi", "option-excluded-files-desc": "I file esclusi verranno nascosti o saranno meno evidenti in alcuni posti come Selezione rapida, suggerimenti e Vista grafo.", "label-no-excluded-filters-applied": "Non sono presenti filtri di esclusione. Aggiungerne uno qui sotto.", "label-excluded-filters-applied": "I file che corrispondono ai seguenti filtri sono attualmente esclusi:", "label-excluded-filter": "Filtro", "placeholder-excluded-filter": "Inserisci percorso o \"/regex/\"..." }, "appearance": { "name": "Aspetto", "option-base-theme": "Tema di base", "option-base-theme-description": "Combinazione di colori predefinita di Obsidian.", "option-accent-color": "Colore d'accento", "option-accent-color-description": "Scegli un colore d'accento da utilizzare nell'app.", "dark-theme": "Scuro", "light-theme": "Chiaro", "system-theme": "Adatta al sistema", "option-font": "Tipi di carattere", "option-advanced": "Avanzate", "option-interface-font": "Carattere interfaccia", "option-interface-font-description": "Imposta il carattere di base per Obsidian.", "option-text-font": "Carattere testo", "option-text-font-description": "Imposta il carattere per la vista Modifica e la vista Lettura.", "option-monospace-font": "Carattere monospazio", "option-monospace-font-description": "Imposta il carattere per posti come i blocchi di codice o il frontespizio.", "label-single-font-currently-in-effect": " Carattere applicato: ", "label-multiple-fonts-currently-in-effect": " Caratteri applicati:", "option-font-placeholder": "Inserisci nome carattere...", "label-no-custom-font-set": "Nessun carattere personalizzato. Aggiungerne uno qui sotto.", "label-font-applied": "Verrà applicato il primo carattere disponibile sul sistema da questo elenco.", "msg-font-not-found": "Carattere non rilevato sul sistema.", "msg-font-found": "Carattere rilevato sul sistema.", "label-font-name": "Nome carattere", "option-community-themes": "Temi della comunità", "option-community-themes-description": "Visualizza in anteprima e utilizza i temi creati dalla comunità.", "button-browse-community-themes": "Sfoglia", "option-font-size": "Dimensione carattere", "option-font-size-description": "Dimensione del carattere in pixel che ha effetto su editor e anteprima.", "option-font-size-action": "Regolazione rapida carattere", "option-font-size-action-description": "Regola la dimensione del carattere usando Ctrl + Scorr, o usando la modalità zoom indietro/avanti con le dita.", "option-themes": "Temi", "option-manage-themes-description": "Gestisci i temi installati e sfoglia i temi della comunità.", "option-theme-button-manage": "Gestisci", "option-choice-none": "Nessuno", "option-native-menus": "Menu nativi", "option-native-menus-desc": "Rende i menu nell'app come quelli del sistema operativo. Se attivo, i menu non saranno influenzati dal tema dell'app.", "button-reload-themes": "Ricarica temi", "msg-reloaded-themes": "Temi CSS personalizzati ricaricati.", "button-open-themes-folder": "Apri cartella dei temi", "option-css-snippets": "Snippet CSS", "label-no-css-snippets-found": "Nessuno snippet CSS trovato nella cartella degli snippet.", "no-snippet-description": "Gli Snippet CSS sono archiviati in \"{{path}}\".", "button-reload-snippets": "Ricarica snippet", "button-open-snippets-folder": "Apri cartella snippet", "msg-reloaded-snippets": "Snippet CSS ricaricati.", "option-toggle-snippet-description": "Applica snippet CSS a \"{{path}}\".", "label-installed-themes": "Temi installati", "label-screenshot-unavailable": "Screenshot non disponibile", "label-default-theme": "Predefinito", "tooltip-click-to-enlarge": "Fare clic per ingrandire", "button-update": "Aggiorna", "label-currently-selected": "Selezionato", "option-frame-style": "Cornice della finestra", "option-frame-description": "Seleziona lo stile della cornice delle finestre di Obsidian. Riavviare l'app per applicare le modifiche.", "option-frame-hidden": "Nascosta (predefinito)", "option-frame-obsidian": "Cornice Obsidian", "option-frame-native": "Cornice nativa", "option-configure-ribbon": "Barra multifunzione", "option-configure-ribbon-desc": "Configura i pulsanti visualizzati nella barra laterale primaria.", "option-mobile-quick-ribbon-item": "Accesso rapido elemento", "option-mobile-quick-ribbon-item-desc": "Toccare l'elemento nella barra multifunzione lo attiva. Toccare tenendo premuto mostra ancora il menu.", "button-configure": "Configura", "label-additional-ribbon-items": "Altri elementi barra multifunzione", "label-modal-configuration": "Configurazione barra multifunzione", "label-modal-configuration-desc": "Scegli quali elementi attivare nella barra multifunzione. Trascina e rilascia per modificare l'ordine.", "option-show-view-header": "Mostra barra del titolo della scheda", "option-show-view-header-desc": "Visualizza intestazione nella parte superiore di ogni scheda.", "msg-updates-found": "{{count}} tema da aggiornare.", "msg-updates-found_plural": "{{count}} temi da aggiornare.", "button-check-for-updates": "Controlla aggiornamenti", "button-view-updates": "Mostra aggiornamenti", "button-update-all-themes": "Aggiorna tutto", "label-current-themes": "Temi installati", "label-currently-installed": "Hai {{count}} tema installato.", "label-currently-installed_plural": "Hai {{count}} temi installati." }, "hotkeys": { "name": "Tasti di scelta rapida", "prompt-filter": "Filtra...", "tooltip-delete-hotkey": "Elimina combinazione di tasti", "label-waiting-for-hotkey-press": "Premi tasti di scelta rapida...", "tooltip-restore-default": "Ripristina predefinito", "tooltip-customize-command": "Personalizza comando", "tooltip-hotkey-single-conflict": "Questa combinazione è in conflitto con \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "Questa combinazione è in conflitto con {{count}} altri comandi", "label-blank-hotkey": "Vuoto" }, "about": { "name": "Informazioni", "label-commercial-license": "Licenza commerciale", "label-license-key": "Chiave di licenza", "license-key-placeholder": "La tua chiave di licenza...", "label-activate-license": "Attivazione licenza", "button-activate": "Attiva", "label-unknown-version": "Sconosciuto", "label-current-version": "Versione attuale: ", "label-install-version": "(Versione dell'installer: {{version}})", "label-up-to-date": "La tua app è aggiornata!", "label-read-changelog": "Registro delle modifiche.", "label-manual-update-required": "Per supportare le nuove funzionalità e ricevere le ultime patch di sicurezza, è necessario un importante aggiornamento del programma d'installazione. Scarica e reinstalla manualmente Obsidian.", "label-download": "Scarica", "label-new-version-ready": "Una nuova versione è pronta per l'installazione. ", "label-relaunch-to-update": "Riavvia l'app per aggiornare.", "label-disabled-updates": "Gli aggiornamenti sono disattivati.", "label-checking-for-updates": "Controllo degli aggiornamenti...", "button-relaunch": "Riavvia", "button-check-for-updates": "Controlla aggiornamenti", "option-auto-update": "Aggiornamenti automatici", "option-auto-update-description": "Disattivare per impedire il controllo automatico degli aggiornamenti.", "option-get-help": "Informazioni", "option-get-help-description": "Ulteriori informazioni sull'utilizzo di Obsidian.", "button-open": "Apri", "option-language": "Lingua", "option-language-description": "Cambia la lingua utilizzata.", "option-insider-build": "Ricevi versioni insider", "option-insider-build-description": "Aggiorna automaticamente alle versioni insider per provare nuove funzionalità. Attenzione: si tratta di versioni beta che potrebbero essere meno stabili.", "option-advanced": "Avanzate", "option-hw-acceleration": "Accelerazione hardware", "option-hw-acceleration-description": "Attiva l'accelerazione hardware. Utilizza la tua GPU per rendere Obsidian più fluido.", "option-hw-acceleration-warning": "Se si disattiva questa opzione, le prestazioni dell'app saranno notevolmente ridotte.", "option-config-location": "Cambia cartella di configurazione", "option-config-location-description": "Utilizza una cartella di configurazione diversa da quella predefinita. Deve iniziare con un punto.", "option-config-location-warning": "Inserire un nome valido per la cartella di configurazione. Il nome deve iniziare con un punto.", "label-license": "Licenza", "label-your-commercial-license-key": "La chiave di licenza commerciale è \"{{key}}\".", "label-commercial-license-info": "Registrata a nome di \"{{company}}\" per {{seats}} utenti. Valida fino al {{expiry}}.", "label-validating-commercial-license": "Validazione in corso...", "label-invalid-commercial-license": "Licenza non valida: ", "button-remove-commercial-license": "Rimuovi", "option-catalyst": "Licenza Catalyst", "option-catalyst-desc": "Al momento hai una licenza Catalyst da {{tier}}. Grazie per il supporto!", "option-catalyst-desc-no-license": "Al momento non hai una licenza Catalyst. La licenza Catalyst è una donazione una tantum per supportare lo sviluppo di Obsidian.", "label-app": "App" }, "account": { "name": "Account", "option-your-account": "Il tuo account", "option-your-account-desc": "Sei collegato come {{name}} ({{email}}).", "option-your-account-desc-no-login": "Non sei collegato. L'account è necessario solo per ottenere le build insider, per Obsidian Publish e Obsidian Sync.", "button-manage-settings": "Gestisci account", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Passa a un piano superiore", "option-commercial-license": "Licenza commerciale", "option-commercial-license-desc": "Se utilizzi Obsidian per scopi commerciali, potrebbe essere necessaria una licenza commerciale.", "button-purchase": "Acquista", "button-log-out": "Disconnetti", "label-log-in": "Accesso", "label-sign-up": "Iscriviti", "label-email": "Email", "placeholder-email": "Il tuo indirizzo email...", "label-password": "Password", "placeholder-password": "La tua password...", "button-login": "Accedi", "message-empty-email": "L'indirizzo email non può essere vuoto.", "message-invalid-email": "L'indirizzo email non è valido.", "message-empty-password": "La password non può essere vuota.", "message-login-failed": "Accesso non riuscito, verifica i dati e riprova.", "label-no-account": "Non hai un account? ", "link-sign-up-now": "Iscriviti ora" }, "core-plugin": { "plugin-list": "Lista plugin", "option-search-plugin": "Cerca plugin principali", "option-search-plugin-description": "Filtra i plugin per nome o descrizione.", "placeholder-search-plugin": "Cerca plugin..." }, "third-party-plugin": { "name": "Plugin di terze parti", "option-restricted-mode": "Modalità limitata", "option-restricted-mode-description": "La modalità limitata non è attiva. Attivala per disabilitare i plugin della comunità.", "button-turn-on": "Attiva", "option-browse-community-plugins": "Plugin della comunità", "option-browse-community-plugins-description": "Sfoglia e installa plugin di terze parti creati dalla nostra straordinaria comunità.", "button-browse": "Sfoglia", "label-exit-restricted-mode": "Esci dalla modalità limitata", "label-exit-restricted-mode-description-1": "I plugin della comunità, come ogni altro software installato, potrebbero causare problemi di integrità e sicurezza dei dati.", "label-exit-restricted-mode-description-2": "La sicurezza dei plugin è importante per noi. Ecco cosa facciamo:", "label-exit-restricted-mode-description-3": "Nonostante i nostri sforzi, c'è sempre la possibilità che un plugin della comunità possa essere dannoso.", "label-code-review": "Revisione iniziale del codice", "label-code-review-desc": "I plugin vengono sottoposti a una revisione del codice da parte del nostro team prima di essere mostrati nello store.", "label-open-source": "Open source", "label-open-source-desc": "La maggior parte dei plugin sono open source su GitHub, quindi possono essere personalmente controllati.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "Abbiamo una vasta comunità di sviluppatori che controllano il lavoro degli altri.", "label-report-mechanism": "Meccanismo di segnalazione", "label-report-mechanism-desc": "Controlliamo e rimuoviamo i plugin problematici su segnalazione dell'utente.", "label-exit-restricted-mode-disable-confirmation": "Uscire dalla modalità limitata per abilitare i plugin della comunità? Consigliamo vivamente di eseguire un backup dei dati prima di procedere.", "label-learn-more": "Ulteriori informazioni sulla sicurezza dei plugin", "button-turn-on-community-plugins": "Attiva i plugin della comunità", "label-trust-author": "Considerare attendibili gli autori di questo vault?", "label-trust-author-description-1": "Stai aprendo per la prima volta questo vault che contiene alcuni plugin.", "label-trust-author-description-2": "Se il vault è stato ottenuto da terzi, tenere presente che i plugin di origine sconosciuta possono comportare rischi per la sicurezza.", "label-trust-author-description-3": "Se non è possibile fidarsi completamente dell'autore di questo vault, è consigliabile restare in modalità limitata, in maniera tale che i plugin di questo vault non vengano eseguiti.", "button-enable-plugins": "Mi fido degli autori, abilita i plugin", "button-dont-trust-author": "Esplora il vault in modalità limitata", "placeholder-community-plugins": "Cerca plugin della comunità...", "msg-failed-load-plugins": "Impossibile caricare i plugin della comunità.", "label-installed": "Installato", "button-install": "Installa", "button-enable": "Abilita", "button-disable": "Disabilita", "button-copy-share-link": "Copia link di condivisione", "button-donate": "Dona", "label-no-results-found": "nessun risultato trovato.", "msg-failed-to-load-manifest": "Impossibile caricare il manifesto del plug-in.", "label-version": "Versione: {{version}}", "label-currently-installed-version": " (attualmente installata: {{version}})", "label-by-author": "Di ", "label-repository": "Repository: ", "label-last-update": "Ultimo aggiornamento: ", "tooltip-view-last-update": "Visualizza ultimo aggiornamento", "label-unsupported": "Questo plugin non supporta il tuo dispositivo.", "button-update": "Aggiorna", "label-no-readme": "Questo plugin non ha fornito un file README.", "msg-installing-plugin": "Installazione del plugin \"{{name}}\"...", "msg-failed-to-install-plugin": "Impossibile installare il plugin \"{{name}}\".", "msg-successfully-installed-plugin": "Plugin \"{{name}}\" installato con successo.", "label-installed-plugins": "Plugin installati", "button-reload-plugins": "Ricarica plugin", "msg-reloaded-third-party-plugins": "Plugin di terze parti ricaricati.", "label-uninstall": "Disinstalla", "label-uninstall-plugin": "Disinstallazione plugin", "label-uninstall-plugin-confirmation": "Disinstallare questo plugin? La cartella del plugin verrà cancellata.", "button-open-plugins-folder": "Apri cartella dei plugin", "button-check-for-updates": "Controlla aggiornamenti", "button-update-all-plugins": "Aggiorna tutti", "label-current-plugins": "Plugin installati", "label-currently-installed": "{{count}} plugin attualmente installato.", "label-currently-installed_plural": "{{count}} plugin attualmente installati.", "label-debug-startup-time": "Debug del tempo di avvio", "label-debug-startup-time-description": "Mostra un messaggio all'avvio dell'app che indica il tempo impiegato da ciascun plugin per avviarsi.", "msg-no-updates-found": "Nessun aggiornamento trovato.", "msg-updates-found": "{{count}} plugin da aggiornare.", "msg-updates-found_plural": "{{count}} plugin da aggiornare.", "msg-update-plugin": "Aggiorna alla versione {{version}}", "option-search-installed-plugin": "Cerca plugin installato", "option-search-installed-plugin-description": "Filtra i plugin installati per nome o descrizione.", "placeholder-search-installed-plugin": "Cerca plugin installato...", "show-installed-only": "Mostra solo installati", "label-donate-modal-title": "Dona per sostenere {{name}}", "label-donate-modal-text1": "Gli sviluppatori di plugin sono volontari che creano tante cose incredibili per passione. Se trovi utile questo plugin, considera di finanziarne lo sviluppo.", "label-donate-modal-text2": "Il 100% del contributo andrà allo sviluppatore del plugin; Obsidian non trattiene alcuna percentuale. La piattaforma che gestisce il pagamento potrebbe addebitare una commissione.", "label-donate-modal-text3": "Grazie per il tuo generoso supporto!", "label-support-this-plugin": "Supporta questo plugin:", "label-search-summary": "Visualizzazione di {{pluginCount}}:", "label-by-popularity": "I più scaricati", "label-by-released": "Pubblicati di recente", "label-by-updated": "Aggiornati di recente", "label-alphabetical": "Ordine alfabetico", "label-last-updated": "Aggiornato il {{time}}" }, "mobile-toolbar": { "name": "Strumenti mobile", "option-configure-quick-action": "Configura azione rapida mobile", "option-configure-quick-action-description": "Consente di configurare quale comando attivare quando si trascina dall'alto verso il basso. Il comando corrente è impostato su \"{{command}}\".", "button-configure": "Configura", "placeholder-select-quick-action": "Seleziona azione rapida...", "manage-toolbar-options": "Gestisci opzioni barra degli strumenti", "option-internal-link": "Aggiungi link interno", "option-internal-embed": "Incorpora", "option-tag": "Aggiungi tag", "option-heading": "Imposta intestazione", "option-strikethrough": "Imposta barrato", "option-highlight": "Imposta evidenziato", "option-code": "Imposta codice", "option-blockquote": "Imposta citazione", "option-markdown-link": "Aggiungi link Markdown", "option-bullet-list": "Imposta elenco puntato", "option-numbered-list": "Imposta elenco numerato", "option-indent-list": "Aumenta rientro elenco", "option-unindent-list": "Riduci rientro elenco", "option-undo": "Annulla", "option-redo": "Ripeti", "option-move-caret-up": "Sposta cursore in alto", "option-move-caret-down": "Sposta cursore in basso", "option-move-caret-left": "Sposta cursore a sinistra", "option-move-caret-right": "Sposta cursore a destra", "option-first-line": "Vai alla prima riga", "option-last-line": "Vai all'ultima riga", "option-toggle-keyboard": "Attiva/disattiva tastiera", "option-configure-toolbar": "Configura strumenti mobile", "option-added-options": "Opzioni aggiunte", "option-more-toolbar-options": "Altre opzioni", "option-attach": "Inserisci allegato", "option-add-command": "Aggiungi comando globale", "option-add-command-description": "Selezionare un comando globale da aggiungere alla barra degli strumenti." } }, "editor": { "search": { "placeholder-find": "Trova", "placeholder-replace": "Sostituisci", "label-previous": "Precedente", "label-next": "Successivo", "label-all": "Tutto", "label-exit-search": "Chiudi ricerca", "label-replace": "Sostituisci", "label-replace-all": "Sostituisci tutto" }, "link-suggestion": { "label-type-hash": "Digita #", "label-link-heading": "per collegare un titolo", "label-type-block": "Digita ^", "label-link-block": "per collegare un blocco", "label-type-pipe": "Digita |", "label-change-display-text": "per cambiare il testo mostrato", "label-no-match-found": "Nessuna corrispondenza trovata" }, "spellcheck": { "no-suggestion": "Nessun suggerimento...", "add-to-dictionary": "Aggiungi al dizionario" }, "menu": { "edit-link": "Modifica collegamento" }, "heading-suggestion": { "label-no-heading": "Nessun titolo", "label-heading-level": "Titolo {{level}}" }, "print-modal": { "title": "Esporta in PDF", "caption": "Esporta \"{{filename}}\" in PDF con le seguenti impostazioni.", "setting-page-size": "Dimensione pagina", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legale", "setting-page-size-letter": "Lettera", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Includi nome file come titolo", "setting-landscape": "Orizzontale", "setting-margin": "Margine", "setting-margin-default": "Normale", "setting-margin-minimal": "Stretto", "setting-margin-none": "Nessuno", "setting-downscale-percent": "Riduzione in percentuale", "button-export-to-pdf": "Esporta in PDF" }, "link-popover": { "tooltip-follow-link": "Segui collegamento", "tooltip-open-link": "Apri collegamento", "tooltip-search-tag": "Cerca tag" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Apre con l'app predefinita", "empty-sidebar": "La barra laterale è vuota, prova a trascinare un pannello qui.", "sidebar-expand": "Mostra", "sidebar-collapse": "Nascondi", "msg-fail-to-save-file": "Impossibile salvare \"{{filepath}}\". {{message}}.", "no-file": "Nessun file", "msg-file-changed": "\"{{file}}\" è stato modificato esternamente, unione automatica delle modifiche.", "switch-vault": "Apri un altro vault", "help": "Aiuto", "settings": "Impostazioni", "drag-to-rearrange": "Trascina per riordinare", "msg-switched-to-read": "Modalità Lettura impostata come predefinita.", "msg-switched-to-edit": "Modalità Modifica impostata come predefinita.", "msg-upgrade-installer": "Per usare questa funzionalità, reinstalla con il file d'installazione più recente disponibile sul nostro sito.", "tooltip-restore-default-settings": "Ripristina impostazioni predefinite", "label-copy": "Copia negli Appunti", "copied_generic": "Copiato negli appunti", "copied": "{{item}} copiato negli appunti", "url": "Url", "msg-open-file-through-uri": "File \"{{path}}\" aperto", "msg-file-not-found-through-uri": "File \"{{name}}\" non trovato.", "delete-action-short-name": "Elimina", "msg-indexing": "Obsidian sta indicizzando il vault...\nDovrebbe accadere solo una volta.\nAlcune funzioni potrebbero non essere disponibili finché l'operazione non sarà completata.", "msg-indexing-complete": "Indicizzazione completa.", "msg-sandbox-vault": "Questo è un vault sandbox.\nLe modifiche apportate a questo vault andranno perdute.", "label-enter-to-create": "Invio per creare", "label-update-available": "Aggiornamento disponibile", "label-debug-info": "Informazioni di debug", "button-learn-more": "Scopri di più", "button-not-now": "Non adesso", "button-add": "Aggiungi", "button-manage": "Gestisci", "label-new-tab": "Nuova scheda", "msg-tab-busy": "Questa scheda è occupata, riprova più tardi", "empty-state": { "no-file-open": "Nessun file aperto", "create-new-file": "Crea nuovo file", "go-to-file": "Vai al file", "see-recent-files": "Vedi file recenti", "close": "Chiudi", "unknown-pane-title": "Plugin non più attivo", "unknown-pane-desc": "Il plugin che ha creato questo pannello ({{type}}) non è disponibile" }, "menu": { "edit-view": "Modifica (Ctrl/Cmd+Clic modifica in nuovo pannello)", "read-view": "Vista corrente: lettura", "switch-to-edit-view": "Fare clic per modificare", "switch-to-read-view": "Fare clic per leggere", "mod-click-open-new-tab": "{{key}}+Clic apri in nuova scheda", "find": "Trova...", "replace": "Sostituisci...", "edit": "Modifica", "preview": "Anteprima", "more-options": "Altre opzioni", "close": "Chiudi", "close-others": "Chiudi le altre schede", "close-right": "Chiudi schede a destra", "pin": "Blocca", "unpin": "Sblocca", "unlink-tab": "Scollega scheda", "link-tab": "Collega con scheda...", "toggle-source-mode": "Codice sorgente", "toggle-reading-view": "Lettura", "delete-file": "Elimina file", "create-file": "Crea questo file", "open-link": "Apri collegamento", "open-in-new-tab": "Apri in nuova scheda", "open-to-the-right": "Apri a destra", "copy-url": "Copia URL", "close-current-tab": "Chiudi scheda corrente", "copy": "Copia", "cut": "Taglia", "paste": "Incolla", "paste-as-plain-text": "Incolla come testo normale", "select-all": "Seleziona tutto", "rename-heading": "Rinomina questa intestazione...", "rename-blockid": "Rinomina ID del blocco...", "open-in-new-window": "Apri in nuova finestra", "move-to-new-window": "Sposta in nuova finestra", "open-in-browser": "Apri nel browser", "stack-tabs": "Sovrapponi schede", "unstack-tabs": "Affianca schede" }, "tooltip": { "click-to-expand": "Clicca per espandere", "click-to-collapse": "Clicca per comprimere", "alias": "Alias", "not-created-yet": "Non ancora creato, seleziona per crearlo" }, "start-screen": { "label-version": "Versione", "option-open-folder-as-vault": "Apri cartella come vault", "option-open-folder-as-vault-description": "Scegliere una cartella di file Markdown già esistente.", "option-create-vault": "Crea nuovo vault", "option-create-vault-description": "Crea un nuovo vault Obsidian in una cartella.", "option-connect-obsidian-sync": "Connessione a Obsidian Sync", "option-connect-obsidian-sync-description": "Configura vault sincronizzato con un vault remoto già esistente.", "option-new-vault-name": "Nome vault", "option-new-vault-name-description": "Scegliere un nome per il vault.", "option-new-vault-location": "Posizione", "option-new-vault-location-description": "Scegliere una posizione per il nuovo vault.", "label-new-vault-location-preview": "Il nuovo vault verrà creato in: ", "option-reveal-vault-in-explorer": "Mostra vault in Esplora file", "option-reveal-vault-in-explorer-mac": "Mostra vault in Finder", "option-rename-vault": "Rinomina vault...", "msg-error-rename-exists": "Vault già esistente con questo nome.", "msg-error-nested": "Impossibile spostare il vault in una sua sottocartella.", "msg-error-rename-open": "Impossibile rinominare un vault attualmente aperto.", "msg-rename-failed": "Impossibile rinominare il vault.", "msg-rename-success": "Vault rinominato con successo.", "option-move-vault": "Sposta vault...", "msg-move-select-dest": "Seleziona cartella di destinazione", "msg-error-move-exists": "Vault già esistente nella posizione specificata.", "msg-error-move-open": "Impossibile spostare un vault attualmente aperto.", "msg-move-failed": "Impossibile spostare il vault.", "msg-move-success": "Vault spostato con successo.", "option-remove": "Rimuovi dalla lista", "button-quick-start": "Avvio rapido", "button-open": "Apri", "button-browse": "Sfoglia", "button-connect": "Connetti", "button-create-vault": "Crea", "button-back": "Indietro", "msg-empty-vault-name": "Il nome del vault non può essere vuoto.", "msg-invalid-folder": "Scegliere una cartella valida.", "msg-failed-to-create-vault": "Impossibile creare il vault.", "msg-failed-to-create-vault-at-location": "Impossibile creare il vault nella posizione specificata. Controllare il percorso e i permessi.", "msg-error-failed-to-open-vault": "Apertura non riuscita.", "msg-error-remove-current-open-vault": "Impossibile rimuovere un vault attualmente in uso.", "option-get-help": "Aiuto", "option-user-email": "Email", "placeholder-your-email": "Il tuo indirizzo email...", "option-user-password": "Password", "placeholder-your-password": "La tua password...", "button-sign-in": "Accesso", "button-setup": "Installa", "option-connect-vault-desc": "Crea vault sincronizzato su questo dispositivo.", "tooltip-own-vault": "Questo vault remoto è di tua proprietà.", "tooltip-shared-vault": "Questo vault remoto è condiviso con te." }, "drag-and-drop": { "insert-link-here": "Inserisci collegamento qui", "insert-links-here": "Inserisci collegamenti qui", "move-into-folder": "Sposta in \"{{folder}}\"", "star-this-file": "Aggiungi ai Preferiti", "star-these-files": "Aggiungi ai Preferiti", "open-in-this-tab": "Apri in questa scheda", "open-as-tab": "Apri come nuova scheda" }, "window": { "maximize": "Ingrandisci", "minimize": "Riduci a icona", "restore-down": "Ripristina giù", "close-window": "Chiudi", "go-back": "Torna indietro", "go-forward": "Vai avanti" }, "start-up": { "loading-obsidian": "Caricamento di Obsidian in corso...", "obsidian-load-error": "Si è verificato un errore durante il caricamento di Obsidian.", "button-reload-app": "Ricarica app", "button-reload-app-in-safe-mode": "Ricarica app in modalità provvisoria", "button-open-another-vault": "Apri un altro vault", "loading-components": "Caricamento dei componenti...", "loading-plugins": "Caricamento dei plugin...", "loading-vault": "Caricamento del vault...", "msg-failed-to-load-vault": "Impossibile caricare il vault: ", "loading-cache": "Caricamento cache...", "loading-workspace": "Caricamento area di lavoro..." }, "mobile": { "action-import": "Importa nel vault", "action-choose-file-to-insert": "Scegli un file da inserire", "action-insert-text-into-file": "Inserisci testo in {{filename}}", "action-insert-link-into-file": "Inserisci collegamento in {{filename}}", "msg-importing": "Importazione in corso...", "msg-import-success": "Importazione completata", "msg-failed-to-import-file": "Impossibile importare il file {{filename}}", "msg-back-again-to-exit": "Premi Indietro per uscire." }, "help-screen": { "label-official-help-site": "Sito ufficiale di aiuto", "label-official-help-site-desc": "Leggi la documentazione di aiuto ufficiale di Obsidian, disponibile in più lingue.", "action-visit": "Visita", "label-discord-chat": "Chat Discord", "label-discord-chat-desc": "Discord è il posto migliore per chattare con altri utenti esperti di Obsidian provenienti da tutto il mondo.", "action-join": "Partecipa", "label-forum": "Forum ufficiale", "label-forum-desc": "Per aiutarsi a vicenda, richiedere nuove funzionalità, segnalare bug e discutere sulla gestione della conoscenza.", "label-sandbox-vault": "Vault sandbox", "label-sandbox-vault-desc": "Gioca con Obsidian e sperimenta le sue funzioni. Tutte le modifiche apportate non verranno salvate." } }, "commands": { "save-file": "Salva file corrente", "follow-cursor-link": "Segui collegamento sotto il cursore", "open-cursor-link-in-new-tab": "Apri collegamento sotto il cursore in nuova scheda", "open-cursor-link-to-the-right": "Apri collegamento sotto il cursore a destra", "open-cursor-link-in-new-window": "Apri collegamento sotto il cursore in nuova finestra", "navigate-tab-above": "Stato attivo su gruppo di schede sopra", "navigate-tab-below": "Stato attivo su gruppo di schede sotto", "navigate-tab-left": "Stato attivo su gruppo di schede a sinistra", "navigate-tab-right": "Stato attivo su gruppo di schede a destra", "toggle-pin": "Blocca/sblocca nota", "split-right": "Dividi a destra", "split-down": "Dividi sotto", "toggle-stacked-tabs": "Attiva/disattiva sovrapposizione schede", "navigate-back": "Vai indietro", "navigate-forward": "Vai avanti", "use-dark-mode": "Usa tema scuro", "use-light-mode": "Usa tema chiaro", "change-theme": "Modifica tema", "search-current-file": "Cerca nel file corrente", "search-replace-current-file": "Cerca e sostituisci nel file corrente", "open-settings": "Apri impostazioni", "open-help": "Apri aiuto", "toggle-edit": "Passa a vista Modifica/Lettura", "toggle-source-mode": "Passa a modalità Anteprima/Codice sorgente", "delete-current-file": "Elimina file corrente", "new-tab": "Nuova scheda", "close-all-tabs": "Chiudi tutte le schede", "close-active-tab": "Chiudi scheda corrente", "close-other-tabs": "Chiudi le altre schede", "toggle-left-sidebar": "Mostra/nascondi barra laterale sinistra", "toggle-right-sidebar": "Mostra/nascondi barra laterale destra", "toggle-default-new-tab-mode": "Attiva/disattiva modalità predefinita per le nuove schede", "focus-editor": "Stato attivo su editor", "toggle-fold": "Espandi/comprimi la riga corrente", "fold-all": "Comprimi tutte le intestazioni e le liste", "unfold-all": "Espandi tutte le intestazioni e le liste", "fold-more": "Piega di più", "fold-less": "Piega di meno", "swap-line-up": "Scambia con la linea di sopra", "swap-line-down": "Scambia con la linea di sotto", "remove-heading": "Rimuovi intestazione", "toggle-heading": "Imposta intestazione {{level}}", "toggle-bold": "Imposta il grassetto per la selezione", "toggle-italics": "Imposta il corsivo per la selezione", "toggle-highlight": "Evidenzia la selezione", "toggle-comments": "Imposta commento per la selezione", "insert-link": "Inserisci collegamento", "toggle-spellcheck": "Attiva/disattiva controllo ortografico", "delete-paragraph": "Cancella paragrafo", "toggle-checklist": "Attiva/disattiva stato dell'attività", "cycle-list-checklist": "Passa a elenco/attività", "insert-callout": "Inserisci callout", "edit-file-title": "Modifica titolo del file", "copy-path": "Copia percorso del file", "copy-url": "Copia URL obsidian", "export-pdf": "Esporta in PDF", "reload": "Ricarica l'app senza salvare", "undo-close-tab": "Ripristina scheda chiusa", "context-menu": "Mostra menu contestuale sotto il cursore", "show-debug-info": "Mostra informazioni di debug", "always-on-top": "Attiva/disattiva finestra sempre in primo piano", "zoom-in": "Aumenta zoom", "zoom-out": "Riduci zoom", "reset-zoom": "Reimposta zoom", "toggle-preview": "Passa a modalità Modifica/Lettura", "move-to-new-window": "Sposta pannello in nuova finestra", "open-in-new-window": "Apri pannello in una nuova finestra", "rename-current-file": "Rinomina file corrente" }, "dialogue": { "label-link-affected": "Questa operazione influirà su {{links}} in {{files}}.", "msg-updated-links": "Sono stati aggiornati {{links}} in {{files}}.", "label-update-links": "Aggiornamento collegamenti", "label-confirm-update-link-to-file": "Aggiornare i collegamenti interni collegati a questo file?", "button-always-update": "Aggiorna sempre", "button-just-once": "Solo una volta", "button-do-not-update": "Non aggiornare", "label-confirm-deletion": "Eliminare \"{{filename}}\"?", "label-move-to-system-trash": "Verrà spostato nel cestino di sistema.", "label-move-to-vault-trash": "Verrà spostato nel cestino di Obsidian, nella cartella nascosta \".trash\" del tuo vault.", "label-permanent-delete": "Il file verrà eliminato definitivamente.", "label-non-empty-folder": "La cartella non è vuota.", "label-delete-folder-warning": "Tutti i file nella cartella verranno eliminati.", "label-delete-folder": "Eliminazione cartella", "button-delete": "Elimina", "button-delete-do-not-ask-again": "Elimina e non chiedere più", "label-do-not-ask-again": "Non chiedere più", "label-existing-backlink": "C'è {{links}} che punta a questa nota.", "label-existing-backlink_plural": "Ci sono {{links}} che puntano a questa nota.", "label-delete-file": "Eliminazione file", "button-manage": "Gestisci", "button-cancel": "Annulla", "button-done": "Fatto", "button-save": "Salva", "button-stop": "Ferma", "button-continue": "Continua", "preparing-pdf": "Preparazione del PDF...", "label-rename-file": "Rinomina file", "label-new-name": "Nuovo nome", "msg-rename-success": "File rinominato con successo.", "label-rename-heading": "Rinomina intestazione", "label-rename-blockid": "Rinomina ID del blocco" }, "menu-items": { "new-file": "Crea nota", "new-file-to-the-right": "Nuova nota a destra", "new-window": "Nuova finestra", "open-switcher": "Apri selettore...", "open-vault": "Apri vault...", "close-tab": "Chiudi scheda", "close-window": "Chiudi finestra", "find": "Trova", "replace": "Sostituisci", "insert-callout": "Callout", "insert-markdown-link": "Collegamento Markdown", "insert-wikilink": "Collegamento", "set-heading": "Intestazione {{level}}", "no-heading": "Nessuna intestazione", "insert-quote": "Citazione", "export-pdf": "Esporta PDF", "toggle-bullet-list": "Elenco puntato", "toggle-numbered-list": "Elenco numerato", "toggle-checklist": "Elenco attività", "toggle-bold": "Grassetto", "toggle-code": "Codice", "toggle-comment": "Commento", "toggle-italics": "Corsivo", "toggle-highlight": "Evidenziato", "toggle-strikethrough": "Barrato", "toggle-comments": "Commenti", "fold-all": "Comprimi tutto", "unfold-all": "Espandi tutto", "fold-more": "Piega di più", "fold-less": "Piega di meno", "source-mode": "Codice sorgente", "reading-view": "Vista lettura", "show-debug-info": "Mostra informazioni di debug", "navigate-back": "Vai indietro", "navigate-forward": "Vai avanti", "toggle-left-sidebar": "Mostra/nascondi barra laterale sinistra", "toggle-right-sidebar": "Mostra/nascondi barra laterale destra", "split-right": "Dividi a destra", "split-down": "Dividi sotto", "release-notes": "Note di rilascio" }, "plugins": { "name": "Plugin", "file-explorer": { "name": "Esplora risorse", "desc": "Visualizza tutti i file nel tuo vault.", "action-open": "Apri Esplora risorse", "action-show": "Mostra Esplora risorse", "action-create-note": "Crea nuova nota", "action-create-note-to-the-right": "Crea nota a destra", "action-collapse-all": "Comprimi tutto", "action-expand-all": "Espandi tutto", "action-new-note": "Nuova nota", "action-new-folder": "Nuova cartella", "action-change-sort": "Ordinamento", "action-reveal-file": "Mostra in Esplora risorse", "action-reveal-active-file": "Mostra file attivo in Esplora risorse", "command-move-file": "Sposta file in un'altra cartella", "action-move-file": "Sposta file in...", "action-move-folder": "Sposta cartella in...", "action-move-items": "Sposta {{count}} oggetti in...", "prompt-type-folder": "Digita una cartella", "label-no-folders": "Nessuna cartella trovata.", "instruction-navigate": "seleziona", "instruction-move": "sposta", "instruction-dismiss": "annulla", "label-sort-a-to-z": "Nome file (dalla A alla Z)", "label-sort-z-to-a": "Nome file (dalla Z alla A)", "label-sort-new-to-old": "Data di modifica (più recente)", "label-sort-old-to-new": "Data di modifica (meno recente)", "label-sort-created-old-to-new": "Data di creazione (meno recente)", "label-sort-created-new-to-old": "Data di creazione (più recente)", "menu-opt-new-note": "Nuova nota", "menu-opt-new-folder": "Nuova cartella", "menu-opt-set-attachment-folder": "Imposta come cartella allegati", "menu-opt-rename": "Rinomina", "menu-opt-delete": "Elimina", "menu-opt-make-copy": "Crea una copia", "msg-invalid-characters": "Il nome del file non può contenere i seguenti caratteri: ", "msg-unsafe-characters": "I collegamenti non funzioneranno se i nomi dei file contengono uno di questi caratteri: ", "msg-file-already-exists": "Esiste già un file con lo stesso nome", "msg-empty-file-name": "Il nome del file non può essere vuoto.", "msg-bad-dotfile": "Il nome del file non deve iniziare con un punto.", "tooltip-modified-time": "Ultima modifica il {{time}}", "tooltip-created-time": "Creato il {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Sposta", "label-untitled-file": "Senza nome", "label-untitled-folder": "Senza nome", "msg-set-attachment-folder": "Gli allegati verranno salvati in \"{{path}}\"." }, "search": { "name": "Ricerca", "desc": "Cerca per parole chiave in tutte le note.", "action-open-search": "Cerca in tutti i file", "label-collapse-results": "Comprimi risultati", "label-match-case": "Maiuscole/minuscole", "label-explain-search-term": "Descrizione ricerca", "label-more-context": "Mostra più contesto", "prompt-start-search": "Digita per iniziare la ricerca...", "label-match-text": "Corrispondenza testo: ", "label-match-regex": "Corrispondenza regex: ", "label-match-exact-text": "Contiene il testo esatto: ", "label-match-all": "Corrispondenze a tutti: ", "label-match-any": "Corrispondenze a qualsiasi: ", "label-excluding": "Escluso: ", "label-case-sensitive": "Distinzione maiuscole/minuscole", "label-case-insensitive": "Senza distinzione maiuscole/minuscole", "label-match-file-path": "Corrispondenza percorso file: ", "label-match-file-name": "Corrispondenza nome file: ", "label-match-content": "Corrispondenza contenuto file: ", "label-match-task": "Corrispondenza attività: ", "label-match-task-todo": "Corrispondenza attività (da fare): ", "label-match-task-done": "Corrispondenza attività (fatto): ", "label-match-line": "Corrispondenza riga: ", "label-match-block": "Corrispondenza blocco: ", "label-match-section": "Corrispondenza sezione: ", "label-match-tag": "Corrispondenza tag: ", "label-no-matches": "Nessun risultato trovato.", "matches-with-count": "... e {{count}} altra corrispondenza.", "matches-with-count_plural": "... e altre {{count}} corrispondenze.", "label-copy-search-results": "Copia risultati della ricerca", "button-copy-results": "Copia risultati", "msg-successfully-copied": "Risultati copiati negli appunti.", "option-show-path": "Mostra percorso", "option-show-path-description": "Mostra il percorso completo del file al posto del nome.", "option-link-style": "Stile collegamento", "option-link-style-description": "Trasforma ogni risultato in un collegamento.", "option-choice-link-style-none": "Nessuno", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Link Markdown", "option-list-prefix": "Prefisso elenco", "option-list-prefix-description": "Aggiunge un prefisso elenco a ogni risultato.", "option-choice-list-style-none": "Nessuno", "option-choice-list-style-dash": "Trattino (-)", "option-choice-list-style-asterisk": "Asterisco (*)", "option-choice-list-style-numbered": "Numerato", "tooltip-clear-search": "Cancella ricerca", "label-search-options": "Opzioni di ricerca", "tooltip-read-more": "Maggiori informazioni", "label-history": "Cronologia", "tooltip-clear-history": "Cancella cronologia", "label-path-option-description": "corrispondenze al percorso del file", "label-file-name-option-description": "corrispondenze al nome del file", "label-tag-option-description": "ricerca tag", "label-line-option-description": "ricerca parole nella stessa riga", "label-section-option-description": "ricerca parole nella stessa intestazione", "menu-opt-search-for": "Ricerca per \"{{keyword}}\"" }, "quick-switcher": { "name": "Selezione rapida", "desc": "Passa a un file senza lasciare la tastiera. Ctrl/Cmd+O per attivare.", "short-name": "Selezione", "action-open": "Apri selezione rapida", "instruction-navigate": "seleziona", "instruction-open": "apri", "instruction-open-in-new-tab": "per aprire in nuova scheda", "instruction-open-to-the-right": "per aprire a destra", "instruction-create": "crea", "instruction-dismiss": "annulla", "label-no-note-create-new": "Nessuna nota trovata. Premere Invio per crearne una nuova.", "prompt-type-file-name": "Digita il file a cui passare o da creare...", "label-enter-to-create": "Premi Invio per creare", "tooltip-not-created-yet": "Non ancora creato, seleziona per crearlo", "option-show-existing-only": "Mostra solo esistenti", "option-show-existing-only-description": "Indica se mostrare collegamenti a file che non sono ancora stati creati.", "option-show-attachments": "Mostra allegati", "option-show-attachments-desc": "Mostra file allegati come immagini, video e PDF.", "option-show-all-file-types": "Mostra tutti i tipi di file", "option-show-all-file-types-desc": "Mostra tutti i file, compresi quelli che Obsidian non può aprire. Ogni file verrà aperto con l'app predefinita per quel tipo di file." }, "graph-view": { "name": "Vista grafo", "desc": "Visualizza una panoramica a grafo dei collegamenti tra le note.", "action-open": "Apri vista grafo", "action-open-local": "Apri grafo locale", "action-copy-screenshot": "Copia schermata", "tab-title": "Grafo di {{displayText}}", "label-filters": "Filtri", "prompt-filter-nodes": "Cerca file...", "option-depth": "Profondità", "option-depth-description": "Mostra i nodi distanti questo numero di collegamenti", "option-neighbor-links": "Collegamenti adiacenti", "option-neighbor-links-description": "Mostra i collegamenti adiacenti.", "option-forelinks": "Collegamenti in uscita", "option-forelinks-description": "Mostra i collegamenti verso altri file", "option-backlinks": "Collegamenti in entrata", "option-backlinks-description": "Mostra i collegamenti da altri file", "option-show-tags": "Tag", "option-show-tags-description": "Tag che sono collegati ai file che li contengono", "option-show-attachments": "Allegati", "option-show-attachments-description": "Mostra gli allegati inclusi nei file", "option-show-existing-files-only": "Solo file esistenti", "option-show-existing-files-only-description": "Se attivato, i collegamenti a file inesistenti non vengono visualizzati", "option-show-orphans": "Orfani", "option-show-orphans-description": "Mostra file che non sono collegati a nessun altro file", "label-display": "Aspetto", "option-show-arrows": "Frecce", "option-show-arrows-description": "Mostra le frecce quando la visuale viene ingrandita", "option-text-fade": "Soglia dissolvenza testo", "option-node-size": "Dimensione nodo", "option-link-thickness": "Spessore linea", "label-forces": "Forze", "option-center-force": "Forza di centratura", "option-link-force": "Forza collegamenti", "option-link-distance": "Distanza collegamenti", "option-repel-force": "Forza di repulsione", "tooltip-open-graph-settings": "Apri impostazioni grafo", "msg-screenshot-copied": "Schermata copiata negli appunti.", "label-groups": "Gruppi", "placeholder-enter-query": "Inserisci query...", "tooltip-delete-graph": "Elimina gruppo", "button-new-group": "Nuovo gruppo", "tooltip-click-to-change-drag-to-reorder": "Fare clic per cambiare colore\nTrascinare per riordinare", "action-timelapse": "Avvia animazione timelapse", "tooltip-start-timelapse-animation": "Avvia animazione timelapse", "button-animate-timelapse": "Animazione" }, "backlinks": { "name": "Riferimenti", "desc": "Mostra il numero dei riferimenti sulla barra di stato.", "action-open": "Apri riferimenti", "action-show": "Mostra pannello riferimenti", "action-open-for-current": "Apri riferimenti per il file corrente", "action-toggle-backlinks-in-document": "Attiva/disattiva riferimenti nel documento", "menu-opt-backlinks-in-document": "Riferimenti nel documento", "label-linked-mentions": "Menzioni collegate", "label-no-backlinks": "Nessun riferimento.", "label-unlinked-mentions": "Menzioni scollegate", "label-show-search": "Mostra filtro di ricerca", "label-link-button-text": "Collegamento", "tab-title": "Riferimenti a {{displayText}}", "label-no-unlinked-mentions": "Nessuna menzione scollegata.", "ellipsis": "...", "option-backlink-in-document": "Riferimenti nel documento", "option-backlink-in-document-desc": "Mostra i riferimenti nel documento per impostazione predefinita quando si aprono nuovi pannelli." }, "outgoing-links": { "name": "Collegamenti in uscita", "desc": "Mostra collegamenti in uscita e rileva menzioni scollegate di altre note nella nota corrente.", "action-open": "Apri collegamenti in uscita", "action-show": "Mostra pannello Collegamenti in uscita", "action-open-for-current": "Apri collegamenti in uscita per il file corrente", "tab-title": "Collegamenti in uscita da {{displayText}}", "label-links": "Collegamenti", "label-no-links": "Nessun collegamento trovato.", "label-unlinked-mentions": "Menzioni scollegate", "tooltip-link-file": "Collega questo file", "tooltip-not-created": "Non ancora creato" }, "tag-pane": { "name": "Pannello dei tag", "desc": "Mostra tutti i tag insieme al loro numero di occorrenze.", "action-show": "Mostra pannello tag", "label-no-tags": "Nessun tag trovato.", "label-sort-by-name-a-to-z": "Nome tag (dalla A alla Z)", "label-sort-by-name-z-to-a": "Nome tag (dalla Z alla A)", "label-sort-by-frequency-high-to-low": "Frequenza (decrescente)", "label-sort-by-frequency-low-to-high": "Frequenza (crescente)", "action-show-nested-tags": "Mostra tag annidati", "action-collapse-all": "Comprimi tutto", "action-expand-all": "Espandi tutto" }, "page-preview": { "name": "Anteprima pagina", "desc": "Mostra l'anteprima di una nota quando si passa il mouse su un collegamento interno. Ctrl/Cmd + passa sopra con il mouse in modalità Modifica.", "label-empty-note": "\"{{linktext}}\" non è ancora stato creato. Clicca per crearlo.", "label-source-editor": "Modifica", "label-source-preview": "Anteprima", "label-source-search": "Ricerca, riferimenti e collegamenti in uscita", "label-require-mod": "Premere {{key}} per aprire l'anteprima al passaggio del mouse" }, "starred": { "name": "Preferiti", "desc": "Aggiunge ai Preferiti file e ricerche utilizzate di frequente.", "action-show": "Mostra pannello Preferiti", "action-toggle": "Aggiungi/rimuovi file corrente dai Preferiti.", "action-toggle-search": "Aggiungi/rimuovi ricerca corrente dai Preferiti", "action-star": "Aggiungi ai Preferiti", "action-unstar": "Rimuovi dai Preferiti", "menu-opt-remove": "Rimuovi", "msg-successfully-starred": "{{type}} \"{{title}}\" aggiunto ai Preferiti.", "msg-removed-starred": "{{type}} \"{{title}}\" rimosso dai Preferiti.", "msg-cannot-find-path": "Impossibile trovare il file in \"{{path}}\"." }, "custom-css": { "name": "CSS personalizzati", "desc": "Legge il file \"obsidian.css\" nel vault e lo applica.", "setting-community-themes": "Temi della comunità", "msg-fetching-themes": "Recupero temi della comunità in corso...", "prompt-filter": "Filtra...", "label-dark-theme-only": "Solo temi scuri", "label-light-theme-only": "Solo temi chiari", "label-use": "Applica", "label-stop-use": "Smetti di usare questo tema", "label-install-and-use": "Installa e attiva", "label-update": "Aggiorna", "label-no-readme": "Questo tema non ha fornito un file README.", "tooltip-remove-theme": "Rimuovi tema", "label-visit-on-github": "Vedi su GitHub", "msg-load-error": "Impossibile caricare i temi della comunità, controllare la connessione di rete.", "msg-now-using-theme": "{{title}} impostato come tema CSS.", "msg-deleted-theme": "Il tema {{title}} è stato eliminato.", "msg-updated-theme": "Il tema {{title}} è stato aggiornato.", "label-installed": "Installato", "label-legacy": "Legacy", "button-update-all-themes": "Aggiorna tutto", "msg-failed-load-themes": "Impossibile caricare i temi della comunità.", "msg-no-updates-found": "Nessun tema da aggiornare.", "msg-updates-found": "{{count}} tema da aggiornare.", "msg-updates-found_plural": "{{count}} temi da aggiornare.", "msg-failed-to-install-theme": "Impossibile installare il tema \"{{name}}\".", "msg-successfully-installed-theme": "Tema \"{{name}}\" installato con successo.", "msg-installing-theme": "Installazione del tema \"{{name}}\"...", "label-search-summary": "Visualizzazione di {{themeCount}}:", "label-update-available": "Aggiornamento disponibile" }, "command-palette": { "name": "Riquadro comandi", "desc": "Digita un comando per eseguirlo. Non è necessario usare l'interfaccia utente o ricordare le scorciatoie da tastiera.", "action-open": "Apri riquadro comandi", "instruction-navigate": "seleziona", "instruction-use": "esegui", "instruction-dismiss": "annulla", "label-no-commands": "Nessun comando trovato.", "prompt-type-command": "Digita un comando...", "label-pinned-commands": "Comandi in evidenza", "option-add-new-pin": "Nuovo comando in evidenza", "option-add-new-pin-description": "I comandi in evidenza verranno mostrati nella parte superiore del riquadro comandi quando non è presente una query di ricerca." }, "markdown-format-importer": { "name": "Strumento importazione Markdown", "desc": "Converte Markdown da altre app al formato di Obsidian.", "action-open": "Apri importazione Markdown", "option-roam-tag-fixer": "Conversione tag di Roam Research", "option-roam-tag-fixer-description": "Converte \"#tag\" e \"#[[tag]]\" in \"[[tag]]\".", "option-roam-highlight-fixer": "Conversione evidenziazioni di Roam Research", "option-roam-highlight-fixer-description": "Converte \"^^highlight^^\" in \"==highlight==\".", "option-roam-todo-converter": "Conversione TODO di Roam Research", "option-roam-todo-converter-description": "Converte \"{{[[TODO]]}}\" in \"[ ]\".", "option-bear-highlight-fixer": "Conversione evidenziazioni di Bear", "option-bear-highlight-fixer-description": "Converte \"::highlight::\" in \"==highlight==\".", "zettelkasten-link-fixer": "Conversione collegamenti Zettelkasten", "zettelkasten-link-fixer-description": "Converte i collegamenti \"[[UID]]\" in \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Abbellimento collegamenti Zettelkasten", "zettelkasten-link-beautifier-description": "Converte i collegamenti \"[[UID]]\" e li abbellisce in \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Attenzione: lo strumento convertirà tutti i file nel vault, non solo il file corrente.", "msg-override-files-warning": "I file verranno sovrascritti. Eseguire il backup prima di avviare la conversione.", "label-start-conversion": "Avvia conversione", "label-stop": "Ferma", "label-go-back": "Indietro", "label-done": "Fatto", "label-processing": "Elaborazione in corso...", "label-cancelling": "Annullamento in corso...", "label-finished": "Operazione completata", "label-processed-files": "File processati", "label-modified-files": "File modificati", "label-total-replacements": "Sostituzioni totali" }, "daily-notes": { "name": "Note del giorno", "desc": "Apre la nota del giorno o ne crea una se non è presente.", "short-name": "Oggi", "action-open": "Apri nota del giorno", "action-open-previous": "Apri nota del giorno precedente", "action-open-next": "Apri nota del giorno successiva", "action-insert-text": "Inserisci testo nella nota del giorno", "action-insert-link": "Inserisci collegamento nella nota del giorno", "msg-fail-format": "Impossibile creare la nota del giorno. \"{{format}}\" non è un formato valido.", "msg-fail-folder": "Impossibile creare la nota del giorno. Cartella \"{{folderOption}}\" non trovata.", "msg-fail-template-file": "Impossibile creare la nota del giorno. Modello \"{{template}}\" non trovato.", "msg-no-previous": "Nessuna nota del giorno prima di questa.", "msg-no-next": "Nessuna nota del giorno dopo di questa.", "option-date-format": "Formato data", "label-refer-to-syntax": "Per maggiori informazioni, vedere: ", "label-syntax-link": "formato di riferimento", "label-syntax-live-preview": "Apparirà così: ", "option-new-file-location": "Posizione dei nuovi file", "option-new-file-location-description": "Percorso della cartella per le nuove note del giorno.", "option-template": "Posizione file modello", "option-template-description": "Il percorso del file da usare come modello.", "option-open-on-start": "Apri nota del giorno all'avvio", "option-open-on-start-description": "Apre automaticamente la nota del giorno ogni volta che si apre questo vault." }, "unique-note-creator": { "name": "Note univoche", "desc": "Crea note con prefissi timestamp univoci, per flussi di lavoro tipo Zettelkasten.", "short-name": "Univoche", "action-create-note": "Nuova nota univoca", "option-new-file-location": "Posizione dei nuovi file", "option-new-file-location-description": "Percorso della cartella per le nuove note univoche.", "msg-folder-not-found": "Impossibile creare la nota univoca. Cartella \"{{folderOption}}\" non trovata.", "option-template-file": "Posizione file modello", "option-template-file-description": "Percorso del file da usare come modello.", "option-template-file-placeholder": "Esempio: cartella1/nota", "option-id-format": "Formato del prefisso univoco", "msg-template-file-not-found": "Impossibile creare la nota univoca. Modello \"{{template}}\" non trovato.", "msg-failed-to-generate": "Impossibile generare una nota univoca con il formato \"{{format}}" }, "random-note": { "name": "Note casuali", "desc": "Apre una nota casuale. Utile per riesaminare e ritrovare note.", "short-name": "Casuale", "action-open": "Apri nota casuale" }, "outline": { "name": "Struttura", "desc": "Visualizza la struttura del file corrente o del pannello collegato.", "action-open": "Apri struttura", "action-show": "Mostra pannello struttura", "action-open-for-current": "Apri struttura del file corrente", "tab-title": "Struttura di {{displayText}}", "label-no-headings": "Nessuna intestazione trovata." }, "word-count": { "name": "Conteggio parole", "desc": "Visualizza il numero delle parole nella barra di stato." }, "slides": { "name": "Diapositive", "desc": "Presentazioni da Markdown. Usare \"---\" per separare le diapositive.", "action-start": "Avvia presentazione" }, "audio-recorder": { "name": "Registratore audio", "desc": "Registra audio e lo salva come allegato.", "action-start": "Avvia registrazione audio", "action-stop": "Ferma registrazione audio", "action-toggle": "Avvia/ferma registrazione", "msg-access-denied": "L'accesso al microfono è stato negato, abilitarlo dal pannello preferenze.", "msg-pending-grant": "Concedere l'autorizzazione al microfono per avviare la registrazione.", "msg-no-microphone": "Nessun microfono collegato." }, "open-with-default-app": { "name": "Apri con app predefinita", "desc": "Aggiunge un pulsante per aprire il file corrente con l'app predefinita.", "action-open-file": "Apri con app predefinita", "action-open-file-mobile": "Condivisione", "action-show-in-folder": "Mostra nella cartella", "action-show-in-folder-mac": "Mostra in Finder" }, "templates": { "name": "Modelli", "desc": "Inserisci modello da una cartella di file modello.", "action-insert": "Inserisci modello", "action-insert-current-date": "Inserisci data corrente", "action-insert-current-time": "Inserisci ora corrente", "option-template-folder-location": "Posizione cartella dei modelli", "option-template-folder-location-description": "I file in questa cartella saranno disponibili come modelli.", "option-template-date-format": "Formato data", "option-template-date-format-description": "Nel modello, {{date}} verrà sostituito con questo valore.", "option-template-date-format-description2": "È possibile usare {{date:YYYY-MM-DD}} per sovrascrivere il formato.", "option-template-time-format": "Formato ora", "option-template-time-format-description": "Nel modello, {{time}} verrà sostituito con questo valore.", "option-template-time-format-description2": "È possibile usare {{time:HH:mm}} per sovrascrivere il formato.", "instruction-navigate": "seleziona", "instruction-insert": "inserisci modello", "instruction-dismiss": "annulla", "msg-no-templates-found": "Nessun modello trovato", "msg-fail-invalid-folder": "Impossibile visualizzare i modelli. Cartella dei modelli non valida.", "msg-fail-folder-not-found": "Impossibile visualizzare i modelli. Cartella \"{{folderOption}}\" non trovata.", "prompt-type-template": "Digita nome modello..." }, "translucency": { "name": "Finestra Traslucida", "desc": "Attiva l'effetto di traslucenza per aumentare il senso di profondità. Rende meglio in modalità scura. Non supportato su Linux." }, "slash-command": { "name": "Comandi Slash", "desc": "Abilita la possibilità di inviare comandi slash nell'editor digitando la 'barra avanti'." }, "editor-status": { "name": "Stato dell'editor", "desc": "Aggiunge un elemento alla barra di stato per visualizzare e modificare la modalità corrente dell'editor.", "read": "Lettura", "edit-source": "Codice sorgente", "edit-live-preview": "Anteprima dinamica" }, "publish": { "name": "Publish", "desc": "Pubblica i tuoi appunti con Obsidian Publish.", "action-publish-changes": "Pubblica modifiche", "label-no-internet-access": "È necessario accedere a Internet per pubblicare le modifiche.", "label-publish-service-description": "Obsidian Publish è un servizio aggiuntivo a pagamento che consente di pubblicare appunti online direttamente da Obsidian.", "label-please-login": "Per iniziare a pubblicare, effettuare il login o creare un nuovo account Obsidian.", "label-no-publish-subscription": "Non sei ancora abbonato a Obsidian Publish.", "button-purchase": "Acquista", "label-manage-sites": "Gestione siti", "label-no-sites": "Non sono presenti siti.", "button-choose": "Scegli", "tooltip-edit-site-id": "Modifica l'ID del sito", "tooltip-delete-site": "Elimina sito", "label-delete-site-confirmation": "Eliminare questo sito?", "label-delete-site-details": "Il sito verrà cancellato immediatamente e in modo permanente.", "label-confirm-delete-site": "Conferma eliminazione sito \"{{site}}\"", "option-site-id": "ID sito", "option-site-id-description": "Il sito sarà pubblicato su https://publish.obsidian.md/{site id}. È possibile modificarlo in seguito. Sono consentite solo lettere minuscole, numeri e trattini.", "option-site-id-placeholder": "ID del sito", "button-create": "Crea", "msg-invalid-site-id": "L'ID del sito può contenere solo lettere minuscole, numeri e trattini.", "msg-site-id-in-use": "Questo ID è già in uso, riprovare con un altro.", "msg-create-site-issue": "C'è stato un problema durante la creazione del sito.", "label-site-options": "Opzioni sito", "option-site-general": "Generale", "option-site-components": "Componenti", "option-site-appearance": "Aspetto", "option-site-reading-experience": "Esperienza di lettura", "option-site-misc": "Altre impostazioni", "option-site-name": "Nome sito", "option-site-name-description": "Nome del sito pubblicato. Apparirà nel titolo della pagina del sito.", "option-site-name-placeholder": "Nome del sito", "option-home-page-file": "File homepage", "option-home-page-file-description": "La prima pagina che l'utente vede quando accede al sito pubblicato", "option-home-page-file-placeholder": "Scegli un file pubblicato", "option-logo": "Logo", "option-logo-description": "Scegli un file immagine come logo del sito.", "option-logo-placeholder": "Qualsiasi immagine caricata nel vault...", "option-site-collaboration": "Collaboratori sito", "option-site-collaboration-desc": "Gestisci i collaboratori per questo sito.", "button-manage-collaborators": "Gestisci", "option-theme": "Tema", "option-theme-description": "Scegli la combinazione di colori predefinita per il sito.", "option-theme-system": "Adatta al sistema", "option-show-theme-toggle": "Selettore chiaro/scuro", "option-show-theme-toggle-description": "Consente al visitatore di scegliere autonomamente il tema chiaro o quello scuro.", "option-show-navigation": "Mostra navigazione", "option-show-navigation-description": "Visualizza un elenco di tutte le pagine pubblicate sul lato sinistro del sito.", "option-show-search": "Mostra barra di ricerca", "option-show-search-description": "Mostra una barra di ricerca nella parte superiore della navigazione che consente ai visitatori di cercare pagine e titoli nel sito.", "option-show-graph": "Mostra grafo", "option-show-graph-description": "Visualizza un piccolo grafo locale su ogni pagina.", "option-show-outline": "Mostra indice", "option-show-outline-description": "Visualizza la struttura dei titoli su ogni pagina.", "option-show-backlinks": "Mostra riferimenti", "option-show-backlinks-description": "Mostra la sezione dei riferimenti alla fine di ogni pagina.", "option-sliding-window-mode": "Usa finestre scorrevoli", "option-sliding-window-mode-description": "Apre le pagine in nuovi riquadri a destra. Consente lo scorrimento orizzontale tra i riquadri.", "option-hover-preview-file": "Mostra anteprima al passaggio del mouse", "option-hover-preview-file-description": "Visualizza l'anteprima della pagina quando si passa il mouse sui link.", "option-hide-title": "Nascondi titolo della pagina", "option-hide-title-description": "Nascondi l'intestazione del titolo della pagina. Utile se le intestazioni sono già presenti all'inizio di ogni pagina.", "option-readable-line-length": "Migliora leggibilità delle righe", "option-readable-line-length-description": "Limita la lunghezza massima delle righe. Mostra meno contenuti sullo schermo ma rende i paragrafi lunghi più leggibili.", "option-site-password": "Password", "option-site-password-description": "Limita l'accesso al sito con password.", "option-google-analytics": "Codice di monitoraggio Google Analytics", "option-google-analytics-description": "Configura Google Analytics per il sito. Disponibile solo per i visitatori del dominio personalizzato. Controllare la compatibilità con leggi e regolamenti locali.", "button-manage-passwords": "Gestisci", "button-save-site-settings": "Salva opzioni sito", "msg-updated-options": "Le impostazioni del sito sono state aggiornate.", "button-go-back": "Indietro", "label-publishing-to": "Pubblicazione su", "tooltip-switch-site": "Cambia sito", "button-add-linked": "Aggiungi collegamenti", "tooltip-add-linked": "Aggiungi tutti i file collegati dagli elementi attualmente selezionati", "msg-added-linked-files": "{{count}} file collegato è stato aggiunto.", "msg-added-linked-files_plural": "{{count}} file collegati sono stati aggiunti.", "tooltip-open-site-options": "Modifica le opzioni del sito", "label-no-changes-detected": "Non sono state rilevate modifiche.", "label-changed-files-to-be-published": "Modifiche", "label-unchanged-files-already-published": "Invariato (seleziona per eliminare)", "label-file-selected": " selezionato", "button-select-all-files": "Seleziona tutto", "button-deselect-all-files": "Deseleziona tutto", "label-new-files-to-be-published": "Nuovo", "button-publish": "Pubblica", "msg-no-permission-to-publish-to-site": "Non si dispone delle autorizzazioni per pubblicare nel sito corrente.", "msg-select-at-least-one-file": "Selezionare almeno un file.", "label-upload-changes": "Carica le modifiche", "button-done": "Fatto", "button-stop": "Ferma", "label-status-uploading": "Caricamento in corso", "label-status-to-publish": "Da pubblicare", "label-status-to-delete": "Da eliminare", "label-status-published": "Pubblicato", "label-status-deleted": "Eliminato", "label-status-failed": "Non riuscito", "label-status-cancelled": "Annullato", "button-change": "Modifica", "label-clear-cache": "Sono necessari alcuni minuti prima che le modifiche vengano visualizzate sul sito. Se le modifiche non vengono visualizzate, provare a svuotare la cache del browser.", "label-visit-site": "Visita il sito qui: ", "msg-something-went-wrong": "Si è verificato un errore. Per informazioni dettagliate controllare la console sviluppatori.", "msg-network-error": "Si è verificato un errore di rete. ", "label-manage-passwords": "Gestione password", "label-add-password": "Aggiungi password", "action-new-password": "Nuova password", "label-no-password": "Non sono presenti password per il sito. Chiunque può visitarlo.", "label-have-password": "Il sito è protetto da password. Quando sono presenti più password, i visitatori possono accedere usandone una qualsiasi.", "option-password-name": "Password", "option-password-desc": "Un hash della password verrà archiviato in modo sicuro. Una volta impostata, la password non potrà essere rivelata in chiaro.", "option-password-placeholder": "Password", "option-nickname-name": "Alias (opzionale)", "option-nickname-desc": "Impostare un alias per ricordare per cosa o per chi è destinata la password.", "action-add-password": "Aggiungi questa password", "label-untitled-password": "Password senza titolo", "label-password-created-time": "Creata il {{time}}", "msg-added-new-password": "Nuova password aggiunta.", "option-custom-domain": "Dominio personalizzato", "option-custom-domain-desc": "Usa un dominio personale anziché l'URL https://publish.obsidian.md/{site id}.", "option-noindex": "Non consentire l'indicizzazione nei motore di ricerca", "option-noindex-desc": "Impedisce ai motori di ricerca di indicizzare il sito.", "button-configure": "Configura", "label-configure-custom-domain": "Configura dominio personalizzato", "option-custom-url-name": "URL personalizzato", "option-custom-url-desc": "Indirizzo in cui si trova il sito.", "option-custom-url-placeholder": "www.tuosito.com", "option-custom-url-redirect": "Reindirizza a dominio personalizzato", "option-custom-url-redirect-desc": "Reindirizza i visitatori da publish.obsidian.md/id verso il dominio personalizzato.", "button-update-custom-domain": "Aggiorna impostazioni dominio", "label-custom-domain-instructions": "Per maggiori informazioni vedere la {{link}} sul nostro sito di aiuto.", "label-custom-domain-link-name": "guida alla configurazione del dominio personalizzato", "label-site-usage": "Stai utilizzando {{site}} su {{limit}}.", "button-add-more-sites": "Acquista altri siti", "label-no-sites-bought": "Non hai acquistato alcun sito.", "button-get-site": "Ottieni un sito", "label-manage-sharing": "Gestisci condivisione per \"{{name}}\"", "label-sharing-with-users": "Questo sito è attualmente condiviso con le seguenti persone.", "label-not-sharing": "Questo sito non è attualmente condiviso con nessuno.", "label-invite-pending": "In attesa", "tooltip-remove-user": "Rimuovi utente", "option-invite-user": "Invita utente", "placeholder-invite-user": "Inserisci la loro email...", "error-email-must-be-valid": "Per invitare qualcuno è necessario inserire un'email valida.", "msg-enable-publish-plugin": "Per visualizzare i siti, abilitare il plugin Publish in Impostazioni -> Plugin principali.", "label-your-sites": "I tuoi siti", "label-sites-shared-with-you": "Siti condivisi con te", "tooltip-leave-site-sharing": "Smetti di collaborare a questo sito", "label-leave-site-confirmation": "Conferma interruzione della collaborazione", "label-leave-site-confirmation-details": "Rimuovere il sito dall'elenco dei siti condivisi con te? Questa azione non può essere annullata.", "label-leave-site-confirmation-details-2": "Contattare il proprietario se si desidera collaborare nuovamente a questo sito.", "button-leave": "Abbandona", "label-compare-with-live": "Confronta con la versione live", "button-use-live-version": "Usa versione live", "label-confirm-override": "Conferma sovrascrittura della versione locale", "label-confirm-override-1": "Sovrascrivere la versione locale?", "label-confirm-override-2": "Verrà utilizzata la versione live e la versione locale verrà eliminata. Eseguire un backup se necessario.", "button-proceed": "Conferma", "message-successfully-used-live-version": "La versione locale è stata rimpiazzata con successo dalla versione live.", "label-open-file": "Apri file", "tooltip-manage-publish-filters": "Gestisci filtri di pubblicazione", "option-included-folders": "Cartelle incluse", "option-included-folders-desc": "I file in queste cartelle verranno automaticamente selezionati durante la revisione delle modifiche da pubblicare.", "option-currently-included-folders": " Queste cartelle sono attualmente incluse:", "option-excluded-folders": "Cartelle escluse", "option-excluded-folders-desc": "I file in queste cartelle non verranno visualizzati durante la revisione delle modifiche da pubblicare. Questa impostazione ha la priorità sulle cartelle incluse.", "label-number-of-folders-included": "Obsidian Publish sta includendo {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish sta escludendo {{folders}}.", "label-manage-included-folders": "Gestisci cartelle incluse", "label-manage-excluded-folders": "Gestisci cartelle escluse", "label-add-included-folder": "Includi una cartella", "label-add-included-folder-desc": "Possono essere incluse sia cartelle già esistenti che cartelle non ancora create.", "tooltip-contact-support": "Contatta il supporto" }, "workspaces": { "name": "Aree di lavoro", "desc": "Salva e carica il layout dell'area di lavoro.", "action-load-layout": "Carica layout dell'area di lavoro", "action-manage-layouts": "Gestisci layout delle aree di lavoro", "action-save-and-load-layout": "Salva e carica un altro layout", "placeholder-save-current-layout-as": "Salva layout dell'area di lavoro corrente come...", "button-save": "Salva", "button-load": "Carica", "tooltip-delete-layout": "Cancella layout", "msg-delete-layout-success": "Layout cancellato con successo.", "msg-enter-name": "Inserire un nome per il nuovo layout.", "msg-save-layout-success": "Layout salvato con successo.", "label-no-layout-found": "Nessun layout salvato trovato.", "placeholder-type-to-search-layouts": "Digita nome del layout..." }, "sync": { "name": "Sync", "desc": "Sincronizza i file con Obsidian Sync.", "action-view-version-history": "Visualizza cronologia delle versioni", "label-load-more": "Carica altro", "label-show-diff": "Mostra differenze", "label-copy-to-clipboard": "Copia negli Appunti", "label-restore-this-version": "Ripristina questa versione", "msg-already-latest-version": "Questa versione è già la più recente.", "msg-restored-version": "Versione {{time}} ripristinata con successo", "label-file-deleted": "Questo file è stato eliminato", "label-no-earlier-version": "Non sono presenti versioni precedenti del file.", "label-empty-file": "Vuoto", "label-setting-files": "Impostazione file", "label-deleted-files": "File eliminati", "label-version-history": "Cronologia versioni", "label-click-to-see-history": "Fare clic su un file eliminato per vedere la sua cronologia.", "label-create-remote-vault": "Crea vault remoto", "msg-please-enter-password": "Immettere una password.", "msg-vault-name-cannot-be-empty": "Il nome del vault non può essere vuoto.", "msg-successfully-created-vault": "Vault remoto \"{{name}}\" creato con successo.", "label-remote-vault-explanation": "I vault remoti permettono di sincronizzare in modo sicuro un vault tra dispositivi.", "option-vault-name": "Nome vault", "option-vault-name-desc": "Consente di ricordare a cosa serve questo vault.", "option-vault-name-placeholder": "Il mio vault", "option-use-custom-encryption-password": "Personalizza password di crittografia end-to-end", "option-use-custom-encryption-password-desc": "Se si disattiva questa opzione, la chiave di criptazione viene gestita automaticamente.", "option-use-custom-encryption-password-desc-warning": "Non sarà possibile modificarla in seguito.", "option-encryption-password": "Password di crittografia", "option-encryption-password-desc": "Non sarà possibile modificarla in seguito.", "option-encryption-password-desc-warning": "Se si dimentica la password, i dati remoti rimarranno inutilizzabili per sempre.", "option-encryption-password-desc-2": "Ciò non influisce sui dati locali.", "option-encryption-password-placeholder": "La tua password", "label-enter-encryption-password": "Immettere password di crittografia", "button-unlock-vault": "Sblocca vault", "msg-verified-password": "Password verificata con successo.", "label-remote-vaults": "Vault remoti", "label-vault-created-time": "Creato il {{time}}", "tooltip-delete-remote-vault": "Elimina", "tooltip-manage-sharing": "Gestisci condivisione", "label-confirm-delete-remote-vault": "Conferma eliminazione vault", "label-confirm-delete-remote-vault-question": "Eliminare questo vault remoto?", "label-confirm-delete-remote-vault-result": "Tutti i dati sul server, inclusa la cronologia delle versioni, verranno eliminati. I file locali rimarranno intatti.", "label-confirm-delete-remote-vault-warning": "Questa azione è definitiva e irreversibile.", "msg-remote-vault-deleted": "{{name}} è stato eliminato.", "button-connect-to-remote-vault": "Connetti", "button-disconnect-from-remote-vault": "Disconnetti", "label-not-remote-vaults": "Non sono presenti vault remoti.", "button-create-new-remote-vault": "Crea nuovo vault", "label-sync-log": "Registro di Sync", "options-only-show-errors": "Solo errori", "options-only-show-errors-desc": "Mostra solo errori e nasconde altri elementi di registro.", "button-copy-sync-log": "Copia registro di Sync", "msg-successfully-copied-sync-log": "Registro di Sync copiato con successo.", "button-retry": "Riprova", "button-purchase-subscription": "Acquista", "option-remote-vault": "Vault remoto", "button-choose-remote-vault": "Scegli", "button-manage-remote-vault": "Gestisci", "option-remote-vault-desc-connected": "Attualmente collegato al vault remoto \"{{name}}\".", "option-remote-vault-desc-not-connected": "Attualmente non connesso a nessun vault remoto.", "option-sync-status": "Stato di Sync", "option-sync-status-desc-paused": "Obsidian Sync è in pausa.", "option-sync-status-desc-running": "Obsidian Sync è in esecuzione.", "option-device-name": "Nome dispositivo", "option-device-name-desc": "Il nome verrà visualizzato nel registro di sincronizzazione. Lasciare vuoto per utilizzare il nome predefinito.", "button-resume": "Riprendi", "button-pause": "Pausa", "option-view-deleted-files": "File eliminati", "option-view-deleted-files-desc": "Visualizza e ripristina i file eliminati.", "option-sync-log": "Attività di Sync", "option-sync-log-desc": "Mostra le attività recenti di Sync per il debug.", "button-view": "Mostra", "button-bulk-restore": "Ripristino di massa", "button-restore-selected-files": "Ripristina file selezionati", "msg-restoring": "Ripristino in corso...", "msg-restoring-complete": "`Ripristino completato: {{succeeded}} con successo e {{failed}} falliti.`", "option-over-size": "Limite di spazio del vault superato", "option-over-size-desc": "Il vault occupa {{size}} su {{limit}}.", "msg-largest-files": "Mostra i file più grandi", "msg-largest-files-desc": "Questi sono i file remoti che occupano più spazio. Elimina gli allegati e usa il tasto Ripulisci per liberare spazio nel vault remoto.", "button-purge-remote": "Ripulisci", "tooltip-purge-remote": "Elimina definitivamente gli allegati rimossi dal vault remoto per risparmiare spazio.", "msg-purge-complete": "Pulizia completata.", "option-prevent-sleep": "Impedisci sospensione del dispositivo", "option-prevent-sleep-desc": "Blocca la sospensione del dispositivo quando sono ancora presenti file da sincronizzare.", "option-selective-sync": "Sincronizzazione selettiva", "option-excluded-folders": "Cartelle escluse", "option-excluded-folder-desc": "Impedisce la sincronizzazione di determinate cartelle.", "option-currently-excluded-folders": " Queste cartelle attualmente escluse:", "button-manage-excluded-folders": "Gestisci", "option-sync-image": "Sincronizza immagini", "option-sync-image-desc": "Sincronizza le immagini con queste estensioni: {{extensions}}.", "option-sync-audio": "Sincronizza audio", "option-sync-audio-desc": "Sincronizza file audio con queste estensioni: {{extensions}}.", "option-sync-video": "Sincronizza video", "option-sync-video-desc": "Sincronizza file video con queste estensioni: {{extensions}}.", "option-sync-pdf": "Sincronizza PDF", "option-sync-pdf-desc": "Sincronizza i file PDF.", "option-sync-unsupported": "Sincronizza tutti gli altri tipi", "option-sync-unsupported-desc": "Sincronizza tipi di file non supportati.", "option-vault-config-sync": "Configurazione sincronizzazione del Vault", "option-view-config-files": "Impostazioni cronologia delle versioni", "option-view-config-files-desc": "Visualizza e ripristina la cronologia delle versioni dei file d'impostazione.", "option-sync-app": "Impostazioni principali", "option-sync-app-desc": "Sincronizza le impostazioni di editor, file e collegamenti, tasti di scelta rapida, etc.", "option-sync-appearance": "Impostazioni aspetto", "option-sync-appearance-desc": "Sincronizza le impostazioni relative all'aspetto come tema Scuro, tema attivo e snippet attivi.", "option-sync-appearance-data": "Temi e snippet", "option-sync-appearance-data-desc": "Sincronizzazione temi e snippet. La loro abilitazione dipende dall'impostazione precedente.", "option-sync-hotkey": "Tasti di scelta rapida", "option-sync-hotkey-desc": "Sincronizza tasti di scelta rapida personalizzati.", "option-sync-core-plugin": "Lista plugin principali attivi", "option-sync-core-plugin-desc": "Sincronizza i plugin principali che sono stati attivati.", "option-sync-core-plugin-data": "Impostazioni plugin principali", "option-sync-core-plugin-data-desc": "Sincronizza le impostazioni dei plugin principali.", "option-sync-community-plugin": "Lista plugin della comunità attivi", "option-sync-community-plugin-desc": "Sincronizza i plugin della comunità che sono stati attivati.", "option-sync-community-plugin-data": "Plugin della comunità installati", "option-sync-community-plugin-data-desc": "Sincronizza i plugin della comunità installati (file .js, .css e manifest.json) e le loro impostazioni.", "label-sync-introduction": "Obsidian Sync è un servizio aggiuntivo di Obsidian con crittografia end-to-end e cronologia delle versioni.", "label-account-required": "Per iniziare a sincronizzare, effettuare il login o creare un nuovo account Obsidian.", "button-sign-up": "Iscrizione", "button-log-in": "Accesso", "label-manage-excluded-folders": "Gestisci cartelle escluse", "label-number-of-folders-excluded": "{{folders}} sono escluse dalla sincronizzazione.", "label-add-excluded-folder": "Escludi una cartella", "label-add-excluded-folder-desc": "È possibile escludere sia le cartelle già esistenti che quelle non ancora create.", "tooltip-remove-excluded-folder": "Rimuovi dall'elenco di esclusione", "label-setup-connection": "Configura connessione", "label-now-connected-to-vault": "Sei connesso a \"{{name}}\".", "button-start-syncing": "Avvia sincronizzazione", "label-confirm-merge-vault": "Conferma unione dei vault", "msg-vault-has-notes": "Il vault locale contiene già alcune note.", "msg-vault-merge-warning": "Connettendosi al vault remoto \"{{name}}\", le note nel vault locale verranno unite alle note del vault remoto. In caso di conflitti, verrà conservata la versione più recente della nota.", "tooltip-update-setting-on-all-devices": "Aggiorna questa opzione e riavvia l'app su tutti i dispositivi su cui desideri che abbia effetto.", "label-sharing-with-users": "Questo vault remoto è attualmente condiviso con le seguenti persone.", "label-not-sharing": "Questo vault remoto non è attualmente condiviso con nessuno.", "label-vaults-shared-with-you": "Vault condivisi con te", "tooltip-leave-vault-sharing": "Smetti di collaborare a questo vault", "label-leave-vault-confirmation": "Conferma fine della collaborazione con il vault", "label-leave-vault-confirmation-details": "Rimuovere il vault dall'elenco dei vault condivisi con te? Questa azione non può essere annullata.", "label-leave-vault-confirmation-details-2": "Contattare il proprietario se si desidera collaborare nuovamente a questo vault.", "button-leave": "Abbandona", "label-require-subscription-to-connect": "È necessario un abbonamento a Obsidian Sync per connettersi a questo vault.", "option-contact-support": "Contatta il supporto", "option-contact-support-desc": "Se stai riscontrando problemi con Obsidian Sync, contattaci per un aiuto! Puoi raggiungerci a support@obsidian.md.", "button-email-support": "Email di supporto" }, "file-recovery": { "name": "Recupero file", "desc": "Consente di ripristinare istantanee recenti per recuperare una perdita di dati accidentale. Le istantanee vengono salvate solo per i file Markdown.", "action-open": "Apri istantanee salvate", "option-interval": "Intervallo istantanee", "option-interval-description": "Intervallo minimo in minuti tra due istantanee.", "option-keep": "Durata cronologia", "option-keep-description": "Durata in giorni per cui vengono conservate le istantanee.", "option-open-history": "Istantanee", "option-open-history-description": "Visualizza e ripristina le istantanee salvate.", "button-view-snapshots": "Visualizza", "option-clear": "Cancella cronologia", "option-clear-description": "Cancella tutte le istantanee.", "button-clear-history": "Cancella", "label-clear-warning": "Eliminare tutte le istantanee? Verranno rimosse solo le istantanee. Tutti i file all'interno del vault rimarranno intatti.", "msg-clear-complete": "Istantanee cancellate.", "label-no-history-found": "Nessuna istantanea trovata.", "placeholder-choose-file": "Scegli un file...", "label-select-file": "Selezionare un file a sinistra per visualizzare le istantanee." }, "note-composer": { "name": "Gestione note", "desc": "Unisce, divide e riformatta le note.", "option-confirm-file-merge": "Conferma unione file", "option-confirm-file-merge-description": "Chiedere una conferma prima di unire due file.", "option-split-replacement-text": "Testo dopo l'estrazione", "option-split-replacement-text-description": "Indica cosa mostrare al posto del testo selezionato dopo averlo estratto.", "option-choice-split-replacement-text-link": "Collegamento al nuovo file", "option-choice-split-replacement-text-embed": "Nuovo file incorporato", "option-choice-split-replacement-text-none": "Nessuno", "option-template-file": "Posizione file modello", "option-template-file-description": "File modello da usare per l'unione o l'estrazione. Variabili disponibili: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Unisci file corrente con un altro file...", "action-merge-file": "Unisci intero file con...", "label-no-files": "Nessun file trovato.", "instruction-navigate": "seleziona", "instruction-merge": "unisci", "instruction-create-new": "crea nuovo", "instruction-merge-at-top": "unisci in alto", "instruction-dismiss": "annulla", "prompt-select-file-to-merge": "Seleziona file da unire...", "label-merge-file": "Unisci file", "label-confirm-file-merge": "Unire il file \"{{file}}\" con \"{{destination}}\"? \"{{file}}\" verrà eliminato.", "button-merge": "Unisci", "button-merge-do-not-ask-again": "Unisci e non chiedere più", "command-split-file": "Estrai selezione corrente...", "command-extract-heading": "Estrai questa intestazione...", "instruction-append": "per spostare in basso", "instruction-prepend": "per spostare in alto", "msg-fail-to-fetch-template": "Impossibile caricare il modello: \"{{template}}\" non trovato.", "msg-fail-to-find-heading": "Impossibile trovare l'intestazione" }, "canvas": { "name": "Lavagna", "desc": "Disponi e collega le note su un'area di disegno infinita.", "action-add-note": "Aggiungi nota dal vault", "action-add-media": "Aggiungi file multimediale dal vault", "action-add-card": "Aggiungi annotazione", "action-add-website": "Aggiungi pagina web", "action-create-group": "Crea gruppo", "action-create-with-size": "Crea annotazione di dimensioni specifiche", "action-convert-to-file": "Converti in file...", "action-drag-to-add-note": "Trascina per aggiungere una nota dal vault", "action-drag-to-add-media": "Trascina per aggiungere un file multimediale dal vault", "action-drag-to-add-card": "Trascina per aggiungere un'annotazione", "action-enable-grid-snapping": "Attiva aggancio alla griglia", "action-disable-grid-snapping": "Disattiva aggancio alla griglia", "action-edit-label": "Modifica etichetta", "action-remove-label": "Rimuovi etichetta", "action-search-file": "Cerca file", "action-set-color": "Imposta colore", "action-align": "Allinea", "action-align-left": "Allinea a sinistra", "action-align-center": "Allinea al centro", "action-align-right": "Allinea a destra", "action-align-top": "Allinea in alto", "action-align-middle": "Allinea in mezzo", "action-align-bottom": "Allinea in basso", "action-distribute-horizontal-spacing": "Distribuisci in orizzontale", "action-distribute-vertical-spacing": "Distribuisci in verticale", "action-justify-horizontally": "Giustifica in orizzontale", "action-justify-vertically": "Giustifica in verticale", "action-stack-horizontally": "Sovrapponi in orizzontale", "action-stack-vertically": "Sovrapponi in verticale", "action-stack-grid": "Sovrapponi griglia", "action-export-png": "Esporta come immagine", "label-export-png-desc": "Esporta \"{{title}}\" in un file PNG con le seguenti impostazioni.", "label-export-png-dimensions": "Dimensioni stimate: {{dimensions}}", "option-export-png-show-logo": "Mostra logo", "option-export-png-show-logo-desc": "Aggiunge il logo di Obsidian in basso a sinistra.", "option-export-png-zoom": "Ingrandimento", "option-export-png-zoom-desc": "Un ingrandimento maggiore genera un'immagine con risoluzione più alta.", "option-export-png-frame": "Area visibile", "option-export-png-frame-desc": "Scegli se salvare l'intera lavagna o solo l'area visibile attualmente.", "option-export-png-frame-full": "Tutta la lavagna", "option-export-png-frame-viewport": "Solo area visibile", "action-remove": "Rimuovi", "action-narrow": "Scegli sezione...", "action-swap-file": "Cambia file...", "action-change-url": "Cambia URL...", "action-zoom-to-fit": "Adatta alla finestra", "action-zoom-to-selection": "Zoom selezione", "action-reload-page": "Ricarica pagina", "action-go-to-target": "Vai a destinazione", "action-go-to-source": "Vai a origine", "command-create-new-canvas": "Crea nuova lavagna", "command-new-canvas": "Nuova lavagna", "instruction-narrow": "scegli intestazione", "prompt-to-narrow": "Digita il nome dell'intestazione", "label-enter-url": "Inserisci URL", "label-empty-embed": "Impossibile trovare \"{{linktext}}\".", "prompt-add-text": "Aggiungi testo...", "prompt-start-search": "Digita per cercare...", "label-canvas-help": "Aiuto lavagna", "label-no-heading": "Nessuna intestazione", "label-pan": "Panoramica", "label-pan-horizontal": "Panoramica orizzontale", "label-zoom": "Zoom", "label-select-all": "Seleziona tutto", "label-add-remove-selection": "Aggiungi/rimuovi dalla selezione", "label-clone-card": "Duplica annotazione", "label-constrain-movement-axis": "Sposta annotazioni in asse", "label-disable-drag-snapping": "Disabilita aggancio durante il trascinamento", "label-remove-card": "Rimuovi annotazione", "label-drag-from-below": "Trascina dal basso o fai doppio clic", "label-space-drag-pan": "Spazio + trascinamento per la panoramica", "label-scroll-to-zoom": "scorrimento per lo zoom", "label-untitled-group": "Gruppo senza titolo" } }, "nouns": { "word-with-count": "{{count}} parola", "word-with-count_plural": "{{count}} parole", "character-with-count": "{{count}} carattere", "character-with-count_plural": "{{count}} caratteri", "link-with-count": "{{count}} collegamento", "link-with-count_plural": "{{count}} collegamenti", "file-with-count": "{{count}} file", "file-with-count_plural": "{{count}} file", "folder-with-count": "{{count}} cartella", "folder-with-count_plural": "{{count}} cartelle", "backlink-with-count": "{{count}} riferimento", "backlink-with-count_plural": "{{count}} riferimenti", "site-with-count": "{{count}} sito", "site-with-count_plural": "{{count}} siti", "plugin-with-count": "{{count}} plugin", "plugin-with-count_plural": "{{count}} plugin", "theme-with-count": "{{count}} tema", "theme-with-count_plural": "{{count}} temi" } }{ "setting": { "options": "オプション", "plugin": "プラグイン", "builtin-plugins": "コアプラグイン", "plugin-options": "プラグインオプション", "folder-path-example-placeholder": "例: フォルダ1/フォルダ2", "file-path-example-placeholder": "例: フォルダ/ノート", "msg-restart-required": "このオプションを変更した後、変更した設定を適用するには再起動する必要があります。", "editor": { "name": "エディタ", "section-general": "一般", "section-behavior": "挙動", "section-display": "表示", "option-spellcheck": "スペルチェック", "option-spellcheck-description": "スペルチェッカーを有効にします。現在はアメリカ英語でのみ機能します。", "spellcheck-languages": "スペルチェックの言語", "spellcheck-languages-description": "スペルチェッカーに使用する言語を選択してください。", "spellcheck-languages-mac-description": "ネイティブスペルチェッカーがmacOS上で使用されている言語を自動的に検知します。", "spellcheck-dict": "スペルチェック辞書", "spellcheck-dict-empty": "スペルチェック辞書が指定されていません。", "option-show-inline-title": "インラインタイトルの表示", "option-show-inline-title-description": "ファイル名をファイル内容と共に編集可能なインラインのタイトルとして表示します。", "option-readable-line-length": "読みやすい行の長さ", "option-readable-line-description": "最大行長を制限します。 画面に収まるコンテンツは少なくなりますが、長い段落が読みやすくなります。", "option-strict-line-break": "厳密な改行", "option-strict-line-break-description": "プレビューモードでは、マークダウンの仕様に従って単一の改行を無視します。プレビューモードで改行させる場合には無効にしてください。", "option-show-frontmatter": "フロントマターを表示", "option-show-frontmatter-description": "プレビューモードでフロントマターをコードブロックとして表示します。フロントマターを隠したい場合には無効にしてください。", "option-auto-pair-brackets": "括弧を自動的にペアリング", "option-auto-pair-brackets-description": "括弧や引用符を自動的にペアにします。", "option-auto-pair-markdown": "マークダウン記法を自動的にペアリング", "option-auto-pair-markdown-description": "太字やイタリック体の記号を自動でペアにします。", "option-smart-indent-lists": "スマートインデント", "option-smart-indent-lists-description": "インデントやリスト記号を自動的に処理します。", "option-fold-heading": "見出しのフォールド", "option-fold-heading-description": "見出しの下の全テキストをフォールドします。", "option-fold-indent": "インデントのフォールド", "option-fold-indent-description": "リストのような同レベルのインデントの一部をフォールドできるようにします。", "option-default-new-tab-view": "新規タブのデフォルトビュー", "option-default-new-tab-view-description": "新規マークダウンタブを開いた際のデフォルトビューを選択してください。", "option-default-new-tab-view-editing": "編集ビュー", "option-default-new-tab-view-reading": "リーディングビュー", "option-default-editing-mode": "デフォルト編集モード", "option-default-editing-mode-description": "新規ペインが開始するデフォルトの編集モードを選択してください。", "option-default-editing-mode-source": "ソースモード", "option-default-editing-mode-live-preview": "ライブプレビュー", "option-show-line-number": "行番号の表示", "option-show-line-number-description": "ガターに行番号を表示します。", "option-indentation-guide": "インデントガイドの表示", "option-indentation-guide-description": "バレットポイント間の関係性を視覚的ガイドとして表現する垂直ラインを表示します。", "option-use-tabs": "タブの使用", "option-use-tabs-description": "\"Tab\" キーを押した際に、タブを使ってインデントできるようにします。スペースを使うにはこの設定を無効にしてください。", "option-tab-size": "タブの間隔", "option-tab-size-description": "タブを表すスペースの個数を決定します。", "option-rtl": "右横書き表示 (RTL)", "option-rtl-description": "テキストを右横書きに表示するように設定します。", "option-auto-convert-html": "HTMLの自動変換", "option-auto-convert-html-description": "ウェブページからのペーストとドラッグ&ドロップの際にHTMLをマークダウンへと自動的に変換します。変換せずにペーストするにはCtrl/Cmd+Shift+Vを使用してください。", "option-vim-key-bindings": "Vimのキー設定", "option-vim-key-bindings-description": "ソースエディタでVimのキーバインディングを使用できるようにします。", "option-vim-key-bindings-mobile": "モバイルデバイスにおいて、この設定はデバイス毎のものとなり、設定ファイルを介して同期されることはありません。", "option-emacsy-keys": "レガシーEmacsスタイルキーバインド(macOS)", "option-emacsy-keys-description": "Emacsスタイルのナビゲーションキーを追加します。macOSでは標準的なものですが、いくつかのキー操作と干渉する可能性があります。", "label-confirm-enable-vim": "Vimモードの起動確認", "label-vim-warning": "Vimモードは効率的なテキスト編集のためのものですが、直感に反した操作に感じられる場合があります。Vimについて不慣れな場合にはこのオプションによってObsidianが動作しないように見えるかもしれません。", "label-vim-test": "Vimの使い方を知っていることを確認するため、保存せずにVimを終了するコマンドを入力してください。", "label-vim-your-answer": "答え", "placeholder-enter-command": "コマンドを入力…", "button-confirm-enable-vim": "Vimモードを有効化", "msg-vim-mode-enabled": "正しいコマンドです。Vimモードが有効化されました。", "msg-vim-mode-not-enabled": "コマンドが間違っています。保護のためVimモードは無効化されたままです。", "msg-vim-mode-please-enter-command": "Vimモードを有効化するコマンドを入力してください。", "option-legacy-editor": "レガシーエディタの使用", "option-legacy-editor-description2": "レガシーエディタはまもなく非推奨となります。現在メンテナンスは行わてれておらず、バグ修正などの取り組みは今後行われません。", "label-legacy-deprecation": "新しいエディタが利用可能です", "label-legacy-deprecation-1": "Obsidianはより堅牢で利用しやすい新しいエディタを開発しました。", "label-legacy-deprecation-2": "現在レガシーエディタを使用されているようです。是非、新しいエディタを試してみてください。", "label-legacy-deprecation-choice": "どのモードを使用しますか?", "label-live-preview-description": "よりモダンなWYSIWYG(見たままが得られる)体験を得ることができます。", "label-source-mode-description": "元々のマークダウンをシンタックスハイライトで確認することができます。", "button-start-new-editor": "新しいエディタを使い始める" }, "file": { "name": "ファイルとリンク", "option-confirm-file-deletion": "ファイル削除の確認", "option-confirm-file-deletion-description": "ファイルを削除する際に確認メッセージを表示するかどうかを決めます。", "option-delete-destination": "削除済みファイル", "option-delete-destination-description": "削除したファイルをどう処理するかを決めます。", "option-choice-system-trash": "システムのゴミ箱に移動する", "option-choice-vault-trash": "Obsidianのゴミ箱(.trashフォルダ)に移動する", "option-choice-permanent-delete": "完全に削除する", "option-always-update-links": "内部リンクを毎回更新する", "option-always-update-links-description": "ファイルやプロンプトの名前を変更する際に、自動的にリンクを更新するかどうかを決めます。", "option-new-note-location": "新規ノートの作成場所", "option-new-note-location-description": "新規作成したノートをどこに置くかを決めます。プラグインの設定によって上書きされます。", "option-choice-vault-root": "保管庫直下", "option-choice-current-folder": "現在のファイルと同じフォルダ", "option-choice-specified-folder": "以下で指定されたフォルダ", "option-new-file-folder-path": "新規ノートを作成するフォルダ", "option-new-file-folder-path-description": "新規作成したノートはこのフォルダに置かれます。プラグインの設定によって上書きされます。", "option-use-wiki-links": "[[ウィキリンク]]を使用", "option-use-wiki-links-description": "マークダウン形式のリンクやイメージではなく、[[リンク]]および![[イメージ]]形式のウィキリンクを自動生成します。このオプションを無効にすると、マークダウン形式のリンクを生成します。", "option-show-unsupported-files": "すべてのファイル拡張子を認識", "option-show-unsupported-files-description": "あらゆる拡張子のファイルを表示します。Obsidianがネイティブに開けない場合でもファイルへのリンクと可能となります。ファイルエクスプローラとクイックスイッチャーでの表示も可能になります。", "option-link-autocompleted-format": "新規作成するリンクの形式", "option-link-autocompleted-format-description": "内部リンクを自動生成する際に、どの形式でリンクを作成するか決めます。", "option-choice-shortest-linktext": "可能であれば最短経路", "option-choice-relative-path": "ファイルに対する相対パス", "option-choice-absolute-path": "保管庫内での絶対パス", "option-new-attachment-location": "新規添付ファイルの作成場所", "option-new-attachment-location-description": "新規作成した添付ファイルはこのフォルダに置かれます。", "option-choice-subdirectory": "現在のフォルダのサブフォルダ", "option-attachment-folder-path": "添付ファイルフォルダのパス", "option-attachment-folder-path-description": "新規作成された添付ファイルはこのフォルダに置かれます。ドラッグ&ドロップとペーストで作成された画像や音声の録音ファイルなどが含まれます。", "option-attachment-subfolder-path": "サブフォルダの名称", "option-attachment-subfolder-path-description": "現在のファイルが \"vault/folder\" にあり、サブフォルダの名前を \"attachments\" に設定している場合、添付ファイルは \"vault/folder/attachments\" に保存されます。", "option-attachment-subfolder-path-placeholder": "添付ファイル", "option-excluded-files": "除外ファイル", "option-excluded-files-desc": "除外ファイルに設定したファイルはクイックスイッチャーやリンクサジェスト、グラフビューなどの様々な場所において非表示になるか、候補に挙がりづらくなります。", "label-no-excluded-filters-applied": "現在、除外フィルターは適用されていません。以下に追加してください。", "label-excluded-filters-applied": "現在、以下のフィルターにマッチするファイルが除外されています:", "label-excluded-filter": "フィルター", "placeholder-excluded-filter": "ファイルパスまたは \"/regex/\" を入力…" }, "appearance": { "name": "外観", "option-base-theme": "ベーステーマ", "option-base-theme-description": "Obsidianのデフォルトのカラースキームを選んでください。", "option-accent-color": "アクセントカラー", "option-accent-color-description": "アプリ全体で使用されるアクセントカラーを選択してください。", "dark-theme": "ダーク", "light-theme": "ライト", "system-theme": "システムテーマを適用", "option-font": "フォント", "option-advanced": "高度な設定", "option-interface-font": "インターフェースフォント", "option-interface-font-description": "Obsidianのすべての機能で使用するベースフォントを設定します。", "option-text-font": "テキストフォント", "option-text-font-description": "編集ビューやリーディングビューで使用するフォントを設定します。", "option-monospace-font": "モノスペースフォント", "option-monospace-font-description": "コードブロックやフロントマターといった場所で使用するフォントを設定します。", "label-single-font-currently-in-effect": " 現在適用中のフォント: ", "label-multiple-fonts-currently-in-effect": " 現在、次のフォントが適用されています:", "option-font-placeholder": "フォント名を入力…", "label-no-custom-font-set": "現在、カスタムフォントは適用されていません。以下に追加してください。", "label-font-applied": "このリスト内のシステムで利用可能な最初のフォントが適用されます。", "msg-font-not-found": "このフォントはシステムで検知されませんでした。", "msg-font-found": "このフォントはシステムで検知されました。", "label-font-name": "フォント名", "option-community-themes": "コミュニティテーマを開く", "option-community-themes-description": "コミュニティによって開発されたテーマの閲覧と使用が可能です。", "button-browse-community-themes": "閲覧", "option-font-size": "フォントサイズ", "option-font-size-description": "フォントサイズはピクセル単位であり、エディタとプレビューの表示に影響を与えます。", "option-font-size-action": "フォントサイズのクイック調整", "option-font-size-action-description": "Ctrl+Scroll、もしくはトラックパッド上でピンチ&ズームのジェスチャによってフォントサイズを調整できます。", "option-themes": "テーマ", "option-manage-themes-description": "コミュニティテーマを閲覧とインストールされたテーマの管理を行います。", "option-theme-button-manage": "管理", "option-choice-none": "なし", "option-native-menus": "ネイティブメニュー", "option-native-menus-desc": "アプリ全体で使用されるメニューはOSのスタイルに合致します。この設定はテーマによる影響を受けません。", "button-reload-themes": "テーマをリロード", "msg-reloaded-themes": "カスタムCSSテーマをリロードしました。", "button-open-themes-folder": "テーマフォルダを開く", "option-css-snippets": "CSSスニペット", "label-no-css-snippets-found": "スニペットフォルダにCSSスニペットが見つかりません。", "no-snippet-description": "CSSスニペットは \"{{path}}\" に保存されています。", "button-reload-snippets": "スニペットをリロード", "button-open-snippets-folder": "スニペットフォルダを開く", "msg-reloaded-snippets": "CSSスニペットをリロードしました。", "option-toggle-snippet-description": "\"{{path}}\" のCSSスニペットを適用します。", "label-installed-themes": "インストールされたテーマ", "label-screenshot-unavailable": "スクリーンショットが取得できません。", "label-default-theme": "デフォルト", "tooltip-click-to-enlarge": "クリックで拡大", "button-update": "アップデート", "label-currently-selected": "選択中", "option-frame-style": "ウィンドウフレームのスタイル", "option-frame-description": "ウィンドウタイトルバーのスタイリングを選択してください。変更した設定を適用するには再起動する必要があります。", "option-frame-hidden": "非表示(デフォルト)", "option-frame-obsidian": "Obsidianフレーム", "option-frame-native": "ネイテイブフレーム", "option-configure-ribbon": "リボンメニュー", "option-configure-ribbon-desc": "ナビゲーションバーのリボンメニューに表示するコマンドを設定します。", "option-mobile-quick-ribbon-item": "リボンアイテムへのクイックアクセス", "option-mobile-quick-ribbon-item-desc": "ナビゲーションメニューのリボンアイテムをタップすることでそのアイテムをアクティブにします。タップしてからホールドしてもメニューが表示されます。", "button-configure": "設定", "label-additional-ribbon-items": "他のリボンアイテム", "label-modal-configuration": "リボンの設定", "label-modal-configuration-desc": "リボンでアクティブにしたいアイテムを選択してください。ドラッグ&ドロップで順番を変更します。", "option-show-view-header": "タブタイトルバーを表示", "option-show-view-header-desc": "すべてのタブ上にヘッダーを表示します。", "msg-updates-found": "{{count}}個のテーマが更新可能です。", "msg-updates-found_plural": "{{count}}個のプラグインが更新可能です。", "button-check-for-updates": "更新を確認", "button-view-updates": "更新を閲覧", "button-update-all-themes": "すべてをアップデート", "label-current-themes": "現在のコミュニティテーマ", "label-currently-installed": "現在、{{count}}個のテーマがインストールされています。", "label-currently-installed_plural": "現在、{{count}}個のテーマがインストールされています。" }, "hotkeys": { "name": "ホットキー", "prompt-filter": "フィルタ…", "tooltip-delete-hotkey": "ホットキーを削除", "label-waiting-for-hotkey-press": "キーを押してください", "tooltip-restore-default": "デフォルトに戻す", "tooltip-customize-command": "コマンドをカスタマイズ", "tooltip-hotkey-single-conflict": "このホットキーは \"{{command}}\" と衝突しています", "tooltip-hotkey-multiple-conflicts": "このホットキーは{{count}}個のコマンドと衝突しています", "label-blank-hotkey": "ブランク" }, "about": { "name": "Obsidianについて", "label-commercial-license": "商用ライセンス", "label-license-key": "ライセンスキー", "license-key-placeholder": "ここにライセンスキーを入力", "label-activate-license": "ライセンス認証する", "button-activate": "認証", "label-unknown-version": "バージョン不明", "label-current-version": "現在のバージョン: ", "label-install-version": "(インストーラーのバージョン: {{version}})", "label-up-to-date": "アプリは最新版です!", "label-read-changelog": "変更履歴を閲覧する。", "label-manual-update-required": "最新機能のサポートと最新のセキュリティパッチを受け取るためには Obsidian インストーラーのメジャーアップデートが必要となります。新しい Obsidian を手動ダウンロードした上で再インストールしてください。", "label-download": "ダウンロード", "label-new-version-ready": "最新バージョンがインストールできます。", "label-relaunch-to-update": "更新のために再起動してください。", "label-disabled-updates": "更新は無効になっています。", "label-checking-for-updates": "更新を確認しています…", "button-relaunch": "再起動", "button-check-for-updates": "更新を確認", "option-auto-update": "自動更新", "option-auto-update-description": "アプリに更新を確認させないようにするには、このオプションを無効にしてください。", "option-get-help": "ヘルプを取得", "option-get-help-description": "Obsidianを使うためのヘルプを取得します。", "button-open": "開く", "option-language": "言語", "option-language-description": "表示言語を変更する。", "option-insider-build": "インサイダービルドを取得", "option-insider-build-description": "新機能を試すにはインサイダービルドへの自動更新を有効にしてください。ビルドは最先端のものであり、不安定である可能性があります。", "option-advanced": "高度な設定", "option-hw-acceleration": "ハードウェアアクセラレーション", "option-hw-acceleration-description": "ハードウェアアクセラレーションを有効化し、Obisdianの動作をより軽快にするためにGPUを利用します。", "option-hw-acceleration-warning": "このオプションを無効化するとアプリパフォーマンスが大幅に低下します。", "option-config-location": "設定フォルダの優先を切り替える", "option-config-location-description": "デフォルトの設定フォルダではなく別の設定フォルダを使用します。フォルダ名はドットで始まる必要があります。", "option-config-location-warning": "設定フォルダはドットから始まる有効な名前である必要があります。", "label-license": "ライセンス", "label-your-commercial-license-key": "あなたの商用ライセンスのキーは \"{{key}}\" です。", "label-commercial-license-info": "\"{{company}}\" によって{{seats}}人が登録されています。{{expiry}}まで有効です。", "label-validating-commercial-license": "検証しています…", "label-invalid-commercial-license": "このライセンスは無効です: ", "button-remove-commercial-license": "削除", "option-catalyst": "カタリストライセンス", "option-catalyst-desc": "現在、{{tier}}カタリストライセンスを使用しています。Obsidianへのサポートありがとうございます!", "option-catalyst-desc-no-license": "現在、カタリストライセンスを所持していません。カタリストライセンスはObsidianの開発をサポートする買い切り版のワンタイムドネーションです。", "label-app": "アプリ" }, "account": { "name": "アカウント", "option-your-account": "あなたのアカウント", "option-your-account-desc": "現在、次のアカウントでサインインしています: {{name}} ({{email}})", "option-your-account-desc-no-login": "あなたは現在ログインしていません。アカウントはObsidian Sync、Obsidian Publish、およびカタリストインサイダービルドにのみ必要となります。", "button-manage-settings": "設定の管理", "label-insider": "インサイダー", "label-supporter": "サポーター", "label-vip": "VIP", "button-upgrade-catalyst": "アップグレード", "option-commercial-license": "商用ライセンス", "option-commercial-license-desc": "商用目的でObsidianを使用する場合には、商用ライセンスが必要となる場合があります。", "button-purchase": "購入", "button-log-out": "ログアウト", "label-log-in": "ログイン", "label-sign-up": "サインアップ", "label-email": "メールアドレス", "placeholder-email": "メールアドレスは…", "label-password": "パスワード", "placeholder-password": "パスワードは…", "button-login": "ログイン", "message-empty-email": "メールアドレス欄に入力が必要です。", "message-invalid-email": "このメールアドレスは無効です。", "message-empty-password": "パスワード欄に入力が必要です。", "message-login-failed": "ログインに失敗しました、メールアドレスとパスワードを確認してください。", "label-no-account": "アカウントを未取得ですか?", "link-sign-up-now": "登録してください" }, "core-plugin": { "plugin-list": "プラグインリスト", "option-search-plugin": "コアプラグインを検索", "option-search-plugin-description": "プラグイン名または説明文でプラグインを検索します。", "placeholder-search-plugin": "プラグインを検索…" }, "third-party-plugin": { "name": "コミュニティプラグイン", "option-restricted-mode": "制限モード", "option-restricted-mode-description": "制限モードが無効になっています。コミュニティプラグインを無効化するにはこの設定を有効にしてください。", "button-turn-on": "有効化", "option-browse-community-plugins": "コミュニティプラグイン", "option-browse-community-plugins-description": "最高のコミュニティによって開発されたサードパーティプラグインを閲覧してインストールします。", "button-browse": "閲覧", "label-exit-restricted-mode": "制限モードを終了する", "label-exit-restricted-mode-description-1": "コミュニティプラグインは、インストールした他のソフトウェアのように、潜在的にデータ完全性やセキュリティ上の問題を引き起こす可能性があります。", "label-exit-restricted-mode-description-2": "プラグインセキュリティは私達にとって重要なものであるため、以下の事柄を実行しています。", "label-exit-restricted-mode-description-3": "努力に関わらず、コミュニティプラグインが不正を行う可能性が依然としてわずかに存在しています。", "label-code-review": "初期コードレビュー", "label-code-review-desc": "プラグインはストアに登場する前に私達のチームによって初期コードレビューを受けます。", "label-open-source": "オープンソース", "label-open-source-desc": "大半のプラグインはGithub上でオープンソースとして公開されており、コードについてユーザー自身で検証することができます。", "label-peer-audit": "コミュニティによる監査", "label-peer-audit-desc": "お互いに目を配りあう大きな開発者コミュニティがあります。", "label-report-mechanism": "報告の仕組み", "label-report-mechanism-desc": "ユーザーの報告に応じて欠陥のあるプラグインについての追跡調査を行い、削除します。", "label-exit-restricted-mode-disable-confirmation": "制限モードを終了してコミュニティプラグインを有効化しますか?制限モードを終了する前にデータのバックアップを作成することを強く推奨しています。", "label-learn-more": "プラグインセキュリティについての詳細を確認", "button-turn-on-community-plugins": "コミュニティプラグインを有効化", "label-trust-author": "この保管庫の作成者を信頼しますか?", "label-trust-author-description-1": "初めて開くこの保管庫にはいくつかのプラグインが含まれています。", "label-trust-author-description-2": "この保管庫が他人から入手されたものである場合には、開発元の不明なプラグインがセキュリティ上のリスクを引き起こす可能性があることに注意してください。", "label-trust-author-description-3": "この保管庫の作成者を完全には信頼しない場合、制限モードの状態を維持し、この保管庫でプラグインが実行されないようにすることを推奨します。", "button-enable-plugins": "作成者を信頼しプラグインを有効化", "button-dont-trust-author": "保管庫を制限モードで閲覧", "placeholder-community-plugins": "プラグインを検索…", "msg-failed-load-plugins": "コミュニティプラグインがロードできませんでした。", "label-installed": "インストール済み", "button-install": "インストール", "button-enable": "有効化", "button-disable": "無効化", "button-copy-share-link": "共有リンクをコピー", "button-donate": "寄付", "label-no-results-found": "結果が見つかりません。", "msg-failed-to-load-manifest": "プラグインマニフェストの読み込みに失敗しました。", "label-version": "バージョン: {{version}}", "label-currently-installed-version": " (現在のインストールバージョン: {{version}})", "label-by-author": "開発者 ", "label-repository": "リポジトリ: ", "label-last-update": "最終更新: ", "tooltip-view-last-update": "最新の更新を閲覧", "label-unsupported": "このプラグインはお使いのデバイスをサポートしていません。", "button-update": "アップデート", "label-no-readme": "このプラグインにはREADMEファイルがありません。", "msg-installing-plugin": "プラグイン \"{{name}}\" をインストールしています…", "msg-failed-to-install-plugin": "プラグイン \"{{name}}\" のインストールに失敗しました。", "msg-successfully-installed-plugin": "プラグイン \"{{name}}\" を正常にインストールしました。", "label-installed-plugins": "インストールされたプラグイン", "button-reload-plugins": "プラグインの再読み込み", "msg-reloaded-third-party-plugins": "サードパーティプラグインが再読み込みされました。", "label-uninstall": "アンインストール", "label-uninstall-plugin": "プラグインのアンインストール", "label-uninstall-plugin-confirmation": "このプラグインをアンインストールしても良いですか? プラグインのフォルダは削除されます。", "button-open-plugins-folder": "プラグインのフォルダを開く", "button-check-for-updates": "アップデートを確認", "button-update-all-plugins": "すべてをアップデート", "label-current-plugins": "現在インストールされているプラグイン", "label-currently-installed": "現在、{{count}}個のプラグインがインストールされています。", "label-currently-installed_plural": "現在、{{count}}個のプラグインがインストールされています。", "label-debug-startup-time": "スタートアップ時デバッグ", "label-debug-startup-time-description": "アプリを起動した時に各プラグインの初期化に要する時間をメッセージで表示します。", "msg-no-updates-found": "アップデートできるものは見つかりませんでした。", "msg-updates-found": "{{count}}個のプラグインにアップデートが見つかりました。", "msg-updates-found_plural": "{{count}}個のプラグインにアップデートが見つかりました。", "msg-update-plugin": "バージョン {{version}} にアップデートします。", "option-search-installed-plugin": "インストール済みのプラグインを検索", "option-search-installed-plugin-description": "インストール済みのプラグインを名前や説明でフィルターします。", "placeholder-search-installed-plugin": "プラグインを検索…", "show-installed-only": "インストール済みのみを表示", "label-donate-modal-title": "{{name}}を支援するために寄付する", "label-donate-modal-text1": "プラグイン開発者達は情熱から素晴らしいプラグインを開発しているコミュニティのボランティアです。このプラグインが役立つと感じた場合には開発を支援することを検討してください。", "label-donate-modal-text2": "Obsidianは手数料を一切取らず、あなたの寄付の100%がプラグイン開発者に渡されます。ただし、開発者が選択した寄付プラットフォームによっては手数料が取られる可能性があります。", "label-donate-modal-text3": "あなたの寛大なサポートに感謝致します!", "label-support-this-plugin": "このプラグインを支援:", "label-search-summary": "{{pluginCount}}を表示中:", "label-by-popularity": "ダウンロード順", "label-by-released": "最近のリリース順", "label-by-updated": "最近の更新順", "label-alphabetical": "アルファベット順", "label-last-updated": "{{time}}に更新" }, "mobile-toolbar": { "name": "モバイルツールバー", "option-configure-quick-action": "モバイルクイックアクションの設定", "option-configure-quick-action-description": "画面上からプルダウンしたときに起動するコマンドを設定します。現在のコマンドは \"{{command}}\" にセットされています。", "button-configure": "設定", "placeholder-select-quick-action": "クイックアクションを選択…", "manage-toolbar-options": "ツールバーオプションを管理", "option-internal-link": "内部リンクを追加", "option-internal-embed": "埋め込みを追加", "option-tag": "タグを追加", "option-heading": "見出しをトグル", "option-strikethrough": "取り消し線をトグル", "option-highlight": "ハイライトをトグル", "option-code": "コードをトグル", "option-blockquote": "ブロッククォートをトグル", "option-markdown-link": "マークダウンリンクを追加", "option-bullet-list": "バレットリストをトグル", "option-numbered-list": "順序付きリストをトグル", "option-indent-list": "インデント", "option-unindent-list": "アンインデント", "option-undo": "取り消し", "option-redo": "再実行", "option-move-caret-up": "上に移動", "option-move-caret-down": "下に移動", "option-move-caret-left": "左に移動", "option-move-caret-right": "右に移動", "option-first-line": "開始行に移動", "option-last-line": "最終行に移動", "option-toggle-keyboard": "キーボードをトグル", "option-configure-toolbar": "モバイルツールバーの設定を開く", "option-added-options": "追加のオプション", "option-more-toolbar-options": "他のツールバーオプション", "option-attach": "添付ファイルを追加", "option-add-command": "グローバルコマンドを追加", "option-add-command-description": "ツールバーに追加するグローバルコマンドを選択してください。" } }, "editor": { "search": { "placeholder-find": "検索", "placeholder-replace": "置換", "label-previous": "前へ", "label-next": "次へ", "label-all": "全体を検索", "label-exit-search": "検索を終了", "label-replace": "置換", "label-replace-all": "すべて置換" }, "link-suggestion": { "label-type-hash": "#を入力すると", "label-link-heading": "見出しにリンクできます", "label-type-block": "^を入力すると", "label-link-block": "ブロックにリンクできます", "label-type-pipe": "|を入力すると", "label-change-display-text": "表示テキストを変更できます", "label-no-match-found": "一致するものが見つかりません" }, "spellcheck": { "no-suggestion": "サジェスチョンがありません…", "add-to-dictionary": "辞書に追加" }, "menu": { "edit-link": "リンクを編集" }, "heading-suggestion": { "label-no-heading": "見出しが見つかりません", "label-heading-level": "見出しレベル {{level}}" }, "print-modal": { "title": "PDFにエクスポート", "caption": "\"{{filename}}\" を以下の設定でPDFにエクスポートします。", "setting-page-size": "ページサイズ", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "リーガル", "setting-page-size-letter": "レター", "setting-page-size-tabloid": "タブロイド", "setting-include-file-name": "ファイル名をタイトルとして含める", "setting-landscape": "横向き", "setting-margin": "余白", "setting-margin-default": "デフォルト", "setting-margin-minimal": "最小", "setting-margin-none": "なし", "setting-downscale-percent": "倍率", "button-export-to-pdf": "PDFにエクスポート" }, "link-popover": { "tooltip-follow-link": "リンクをたどる", "tooltip-open-link": "リンクを開く", "tooltip-search-tag": "タグを検索" } }, "interface": { "embed-cannot-find": "見つかりませんでした:", "embed-open-in-default-app-tooltip": "規定のアプリケーションで開く", "empty-sidebar": "サイドバーが空です。ペインをこちらに移動してください。", "sidebar-expand": "展開", "sidebar-collapse": "折りたたむ", "msg-fail-to-save-file": "ファイル \"{{filepath}}\" の保存に失敗しました。{{message}}。", "no-file": "ファイルがありません", "msg-file-changed": "\"{{file}}\" が外部で修正されています。自動的に変更をマージします。", "switch-vault": "別の保管庫を開く", "help": "ヘルプ", "settings": "設定", "drag-to-rearrange": "ドラッグして順番を変更", "msg-switched-to-read": "デフォルトビューモードをリーディングビューに切り替えました。", "msg-switched-to-edit": "デフォルトの閲覧モードをエディタに変更しました。", "msg-upgrade-installer": "この機能を使用するには、Obsidianのウェブサイトから入手できる最新のインストーラを使用して再インストールしてください。", "tooltip-restore-default-settings": "デフォルト設定に戻す", "label-copy": "クリップボードにコピー", "copied_generic": "クリップボードにコピーしました", "copied": "{{item}} をクリップボードにコピーしました", "url": "URL", "msg-open-file-through-uri": "ファイル \"{{path}}\" を開きました。", "msg-file-not-found-through-uri": "ファイル \"{{name}}\" が見つかりません。", "delete-action-short-name": "削除", "msg-indexing": "Obsidianが保管庫のインデックスを作成しています…\nこれは一度だけ実行されます。\nいくつかの機能はこれが完了するまで利用できない可能性があります。", "msg-indexing-complete": "インデックス作成が完了しました。", "msg-sandbox-vault": "これはサンドボックス保管庫です。\nこの保管庫での変更は失われます。", "label-enter-to-create": "Enterキーで作成", "label-update-available": "アップデートが利用可能", "label-debug-info": "デバッグ情報", "button-learn-more": "詳細を確認", "button-not-now": "今は行わない", "button-add": "追加", "button-manage": "管理", "label-new-tab": "新規タブ", "msg-tab-busy": "このタブは現在利用できません。しばらくしてから再試行してください。", "empty-state": { "no-file-open": "ファイルが開かれていません", "create-new-file": "新規ファイルを作成", "go-to-file": "ファイルに移動する", "see-recent-files": "最近のファイルを見る", "close": "閉じる", "unknown-pane-title": "アクティブでなくなったプラグイン", "unknown-pane-desc": "このペイン({{type}})を作成したプラグインはなくなりました" }, "menu": { "edit-view": "編集(Ctrl/Cmd+クリックで新規ペインで編集)", "read-view": "現在のビュー: リーディング", "switch-to-edit-view": "クリックして編集", "switch-to-read-view": "クリックして閲覧", "mod-click-open-new-tab": "{{key}}+クリックで新規タブに開く", "find": "検索…", "replace": "置換…", "edit": "編集", "preview": "プレビュー", "more-options": "オプション", "close": "閉じる", "close-others": "他を閉じる", "close-right": "右側のタブを閉じる", "pin": "ピン", "unpin": "ピンの解除", "unlink-tab": "タブのリンクを解除", "link-tab": "タブをリンク…", "toggle-source-mode": "ソースモード", "toggle-reading-view": "リーディングビュー", "delete-file": "ファイルを削除", "create-file": "このファイルを作成する", "open-link": "リンクを開く", "open-in-new-tab": "新規タブに開く", "open-to-the-right": "右側に開く", "copy-url": "URLをコピー", "close-current-tab": "現在のタブを閉じる", "copy": "コピー", "cut": "カット", "paste": "ペースト", "paste-as-plain-text": "プレーンテキストとしてペースト", "select-all": "すべてを選択", "rename-heading": "この見出しをリネーム…", "rename-blockid": "このブロックIDをリネーム…", "open-in-new-window": "新規ウィンドウで開く", "move-to-new-window": "新規ウィンドウに移動", "open-in-browser": "ブラウザで開く", "stack-tabs": "タブをスタック", "unstack-tabs": "タブのスタックを解除" }, "tooltip": { "click-to-expand": "クリックして展開", "click-to-collapse": "クリックして折りたたむ", "alias": "エイリアス", "not-created-yet": "まだ作成されていません、作成するには選択してください" }, "start-screen": { "label-version": "バージョン", "option-open-folder-as-vault": "保管庫としてフォルダを開く", "option-open-folder-as-vault-description": "マークダウンファイルのフォルダを選択します。", "option-create-vault": "保管庫を新規作成する", "option-create-vault-description": "Obisidianの保管庫をフォルダに新規作成します。", "option-connect-obsidian-sync": "Obsidian Syncから保管庫を開く", "option-connect-obsidian-sync-description": "リモート保管庫への同期設定を行います。", "option-new-vault-name": "保管庫の名称", "option-new-vault-name-description": "保管庫に名前を付けてください。", "option-new-vault-location": "ロケーション", "option-new-vault-location-description": "新規保管庫の作成場所を指定してください。", "label-new-vault-location-preview": "新規保管庫は以下の場所に配置されます: ", "option-reveal-vault-in-explorer": "システムのエクスプローラで表示", "option-reveal-vault-in-explorer-mac": "保管庫をFinderに表示", "option-rename-vault": "保管庫の名前を変更…", "msg-error-rename-exists": "同じ名前の保管庫がすでに存在しています。", "msg-error-nested": "自身のサブフォルダに移動することはできません。", "msg-error-rename-open": "現在開いている保管庫の名前を変更することはできません。", "msg-rename-failed": "保管庫の名前の変更に失敗しました。", "msg-rename-success": "保管庫の名前の変更に成功しました。", "option-move-vault": "保管庫を移動…", "msg-move-select-dest": "対象のフォルダを選択してください。", "msg-error-move-exists": "対象のフォルダにはすでに保管庫が存在しています。", "msg-error-move-open": "現在開いている保管庫を移動することはできません。", "msg-move-failed": "保管庫の移動に失敗しました。", "msg-move-success": "保管庫の移動に成功しました。", "option-remove": "リストから取り除く", "button-quick-start": "クイックスタート", "button-open": "開く", "button-browse": "閲覧", "button-connect": "接続", "button-create-vault": "作成", "button-back": "前に戻る", "msg-empty-vault-name": "保管庫に名前をつけてください。", "msg-invalid-folder": "フォルダを指定してください。", "msg-failed-to-create-vault": "保管庫が作成できませんでした。", "msg-failed-to-create-vault-at-location": "指定の場所に保管庫を作成できませんでした。もういちど場所とパーミッションを確認してください。", "msg-error-failed-to-open-vault": "開けませんでした。", "msg-error-remove-current-open-vault": "現在開いている保管庫は削除できません。", "option-get-help": "ヘルプを得る", "option-user-email": "Eメール", "placeholder-your-email": "Eメールアドレスを入力…", "option-user-password": "パスワード", "placeholder-your-password": "パスワードを入力…", "button-sign-in": "サインイン", "button-setup": "設定", "option-connect-vault-desc": "同期された保管庫をデバイスに作成します。", "tooltip-own-vault": "これはあなたが所有するリモート保管庫です。", "tooltip-shared-vault": "これはあなたに共有されているリモート保管庫です。" }, "drag-and-drop": { "insert-link-here": "ここにリンクを挿入する", "insert-links-here": "ここにリンクを挿入する", "move-into-folder": "\"{{folder}}\" に移動させる", "star-this-file": "このファイルにスターを付ける", "star-these-files": "これらのファイルにスターを付ける", "open-in-this-tab": "このタブで開く", "open-as-tab": "新規タブで開く" }, "window": { "maximize": "最大化", "minimize": "最小化", "restore-down": "元のサイズに戻す", "close-window": "ウィンドウを閉じる", "go-back": "戻る", "go-forward": "進む" }, "start-up": { "loading-obsidian": "Obsidianをロードしています…", "obsidian-load-error": "Obsidianのロード中にエラーが発生しました。", "button-reload-app": "アプリをリロード", "button-reload-app-in-safe-mode": "セーフモードでアプリをリロード", "button-open-another-vault": "他の保管庫を開く", "loading-components": "コンポーネントをロードしています…", "loading-plugins": "プラグインをロードしています…", "loading-vault": "保管庫をロードしています…", "msg-failed-to-load-vault": "保管庫のロードに失敗しました: ", "loading-cache": "キャッシュをロードしています…", "loading-workspace": "ワークスペースをロードしています…" }, "mobile": { "action-import": "保管庫へインポート", "action-choose-file-to-insert": "挿入するファイルを選択", "action-insert-text-into-file": "{{filename}}にテキストを挿入", "action-insert-link-into-file": "{{filename}}にリンクを挿入", "msg-importing": "インポートしています…", "msg-import-success": "インポートが成功しました。", "msg-failed-to-import-file": "ファイル{{filename}}のインポートに失敗しました。", "msg-back-again-to-exit": "終了するには再度戻るを押してください。" }, "help-screen": { "label-official-help-site": "公式ヘルプサイト", "label-official-help-site-desc": "Obsidian公式のヘルプドキュメントを読むことができます。ドキュメントは多言語での利用が可能です。", "action-visit": "訪問", "label-discord-chat": "Discord チャット", "label-discord-chat-desc": "Discord は世界中から集まる卓越した Obsidian ユーザーたちとチャットするためのベストな場所です。", "action-join": "参加", "label-forum": "公式フォーラム", "label-forum-desc": "ユーザー同士の助け合いや機能リクエスト、バグレポート、ナレッジマネジメントについての議論などを行うことができます。", "label-sandbox-vault": "サンドボックス保管庫", "label-sandbox-vault-desc": "様々な機能について試すことができます。この保管庫での変更は保存されないことに注意してください。" } }, "commands": { "save-file": "現在のファイルを保存", "follow-cursor-link": "カーソル下のリンクをたどる", "open-cursor-link-in-new-tab": "カーソル下のリンクを新規タブに開く", "open-cursor-link-to-the-right": "カーソル下のリンクを右側に開く", "open-cursor-link-in-new-window": "カーソル下のリンクを新規ウィンドウに開く", "navigate-tab-above": "上のタブグループにフォーカス", "navigate-tab-below": "下のタブグループにフォーカス", "navigate-tab-left": "左のタブグループにフォーカス", "navigate-tab-right": "右のタブグループにフォーカス", "toggle-pin": "ピンをトグル", "split-right": "右に分割", "split-down": "下に分割", "toggle-stacked-tabs": "スタックタブをトグル", "navigate-back": "戻る", "navigate-forward": "進む", "use-dark-mode": "ダークモードを使用", "use-light-mode": "ライトモードを使用", "change-theme": "テーマの変更", "search-current-file": "現在のファイルを検索", "search-replace-current-file": "現在のファイルを検索し置換", "open-settings": "設定を開く", "open-help": "ヘルプを開く", "toggle-edit": "編集ビュー/リーディングビューを切り替える", "toggle-source-mode": "ライブプレビュー/ソースモードを切り替える", "delete-current-file": "現在のファイルを削除", "new-tab": "新規タブ", "close-all-tabs": "すべてのタブを閉じる", "close-active-tab": "現在のタブを閉じる", "close-other-tabs": "他のタブをすべて閉じる", "toggle-left-sidebar": "左のサイドバーを開閉", "toggle-right-sidebar": "右のサイドバーを開閉", "toggle-default-new-tab-mode": "新規タブのデフォルトモードを切り替える", "focus-editor": "エディタにフォーカス", "toggle-fold": "現在の行のフォールドを開閉", "fold-all": "すべての見出しとリストをフォールド", "unfold-all": "すべての見出しとリストのフォールドを解除", "fold-more": "更にフォールド", "fold-less": "フォールドを減らす", "swap-line-up": "上の行と入れ替える", "swap-line-down": "下の行と入れ替える", "remove-heading": "見出しを除去", "toggle-heading": "見出し {{level}} に設定", "toggle-bold": "選択範囲のボールドをトグル", "toggle-italics": "選択範囲のイタリックをトグル", "toggle-highlight": "選択範囲のハイライトをトグル", "toggle-comments": "選択範囲のコメントをトグル", "insert-link": "リンクを挿入", "toggle-spellcheck": "スペルチェックをトグル", "delete-paragraph": "パラグラフを削除", "toggle-checklist": "チェックリストをトグル", "cycle-list-checklist": "バレット/チェックボックスをサイクル", "insert-callout": "コールアウトを挿入", "edit-file-title": "ファイルタイトルの編集", "copy-path": "ファイルパスをコピー", "copy-url": "Obsidian URIをコピー", "export-pdf": "PDFにエクスポート", "reload": "保存せずにアプリをリロード", "undo-close-tab": "タブを開き直す", "context-menu": "コンテキストメニューをカーソルの下に表示", "show-debug-info": "デバッグ情報を表示", "always-on-top": "ウィンドウの常時トップ表示をトグル", "zoom-in": "ズームイン", "zoom-out": "ズームアウト", "reset-zoom": "ズームをリセット", "toggle-preview": "編集モードとプレビューモードを切り替える", "move-to-new-window": "現在のペインを新規ウィンドウに移動", "open-in-new-window": "現在のペインを新規ウィンドウで開く", "rename-current-file": "現在のファイルをリネーム" }, "dialogue": { "label-link-affected": "{{files}}の{{links}}に影響があります。", "msg-updated-links": "{{files}}の{{links}}を更新しました。", "label-update-links": "リンクを更新", "label-confirm-update-link-to-file": "このファイルにリンクしている内部リンクを更新しますが良いですか?", "button-always-update": "常に更新", "button-just-once": "1回だけ更新", "button-do-not-update": "更新しない", "label-confirm-deletion": "\"{{filename}}\" を削除しても良いですか?", "label-move-to-system-trash": "システムのゴミ箱に移動します。", "label-move-to-vault-trash": "Obsidianのゴミ箱に移動します。ゴミ箱は保管庫の隠しフォルダ \".trash\" にあります。", "label-permanent-delete": "ファイルはただちに削除されます。", "label-non-empty-folder": "このフォルダは空ではありません。", "label-delete-folder-warning": "フォルダを削除すると、フォルダ内のすべてのファイルも削除されます。", "label-delete-folder": "フォルダの削除", "button-delete": "削除", "button-delete-do-not-ask-again": "削除して次からは確認しない", "label-do-not-ask-again": "次からは確認しない", "label-existing-backlink": "このノートへのリンクが{{links}}存在しています。", "label-existing-backlink_plural": "このノートへのリンクが{{links}}存在しています。", "label-delete-file": "ファイルの削除", "button-manage": "管理", "button-cancel": "キャンセル", "button-done": "完了", "button-save": "保存", "button-stop": "停止", "button-continue": "継続", "preparing-pdf": "PDFを準備…", "label-rename-file": "ファイル名を変更", "label-new-name": "新規名称", "msg-rename-success": "ファイル名の変更に成功しました。", "label-rename-heading": "見出しのリネーム", "label-rename-blockid": "ブロックIDをリネーム" }, "menu-items": { "new-file": "ノートを作成", "new-file-to-the-right": "右側に新規ノートを作成", "new-window": "新規ウィンドウ", "open-switcher": "クイックスイッチャーを開く…", "open-vault": "保管庫を開く…", "close-tab": "タブを閉じる", "close-window": "ウィンドウを閉じる", "find": "検索", "replace": "置換", "insert-callout": "コールアウト", "insert-markdown-link": "マークダウンリンク", "insert-wikilink": "リンク", "set-heading": "見出し {{level}}", "no-heading": "見出し解除", "insert-quote": "引用", "export-pdf": "PDFとしてエクスポート", "toggle-bullet-list": "バレットリスト", "toggle-numbered-list": "順序付きリスト", "toggle-checklist": "タスクリスト", "toggle-bold": "ボールド", "toggle-code": "コード", "toggle-comment": "コメント", "toggle-italics": "イタリック", "toggle-highlight": "ハイライト", "toggle-strikethrough": "取り消し線", "toggle-comments": "コメント", "fold-all": "すべてフォールド", "unfold-all": "すべてのフォールドを解除", "fold-more": "更にフォールド", "fold-less": "フォールドを減らす", "source-mode": "ソースモード", "reading-view": "リーディングビュー", "show-debug-info": "デバッグ情報を表示", "navigate-back": "戻る", "navigate-forward": "進む", "toggle-left-sidebar": "左サイドバーに切り替える", "toggle-right-sidebar": "右サイドバーに切り替える", "split-right": "右に分割", "split-down": "下に分割", "release-notes": "リリースノート" }, "plugins": { "name": "プラグイン", "file-explorer": { "name": "ファイルエクスプローラ", "desc": "保管庫内のすべてのファイルを閲覧できます。", "action-open": "ファイルエクスプローラを開く", "action-show": "ファイルエクスプローラを表示", "action-create-note": "新規ノートの作成", "action-create-note-to-the-right": "ノートを右側に作成", "action-collapse-all": "すべて折りたたむ", "action-expand-all": "すべて展開", "action-new-note": "新規ノート", "action-new-folder": "新規フォルダ", "action-change-sort": "ソート順の変更", "action-reveal-file": "ファイルエクスプローラでファイルを表示", "action-reveal-active-file": "ファイルエクスプローラでアクティブなファイルを表示", "command-move-file": "ファイルを別のフォルダに移動", "action-move-file": "ファイルを移動", "action-move-folder": "フォルダを移動", "action-move-items": "{{count}}個のアイテムを移動…", "prompt-type-folder": "フォルダを入力…", "label-no-folders": "フォルダが見つかりません。", "instruction-navigate": "選択", "instruction-move": "移動", "instruction-dismiss": "閉じる", "label-sort-a-to-z": "ファイル名 (アルファベット順)", "label-sort-z-to-a": "ファイル名 (アルファベット逆順)", "label-sort-new-to-old": "更新日 (新しい順)", "label-sort-old-to-new": "更新日 (古い順)", "label-sort-created-old-to-new": "作成日 (古い順)", "label-sort-created-new-to-old": "作成日 (新しい順)", "menu-opt-new-note": "新規ノート", "menu-opt-new-folder": "新規フォルダ", "menu-opt-set-attachment-folder": "添付書類のフォルダに設定", "menu-opt-rename": "名前を変更", "menu-opt-delete": "削除", "menu-opt-make-copy": "コピーを作成", "msg-invalid-characters": "ファイル名には次の文字を使えません: ", "msg-unsafe-characters": "次の文字を含むファイル名ではリンクが正常に作動しません: ", "msg-file-already-exists": "同じ名前のファイルがあります。", "msg-empty-file-name": "ファイル名を空にはできません。", "msg-bad-dotfile": "ファイル名をドットから始めることはできません。", "tooltip-modified-time": "更新日時 {{time}}", "tooltip-created-time": "作成日時 {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "移動", "label-untitled-file": "無題のファイル", "label-untitled-folder": "無題のフォルダ", "msg-set-attachment-folder": "添付ファイルは今後 \"{{path}}\" に保存されます。" }, "search": { "name": "検索", "desc": "すべてのノートでキーワードを検索します。", "action-open-search": "すべてのファイルを検索", "label-collapse-results": "検索結果を折りたたむ", "label-match-case": "大文字/小文字を区別", "label-explain-search-term": "検索ワードを表示", "label-more-context": "前後を表示", "prompt-start-search": "入力して検索を開始…", "label-match-text": "テキストに一致: ", "label-match-regex": "正規表現に一致: ", "label-match-exact-text": "正確なテキストを含む: ", "label-match-all": "次の全てに一致: ", "label-match-any": "次のいずれかに一致: ", "label-excluding": "除外: ", "label-case-sensitive": "大文字/小文字を区別", "label-case-insensitive": "大文字/小文字を区別しない", "label-match-file-path": "ファイルパスに一致: ", "label-match-file-name": "ファイル名に一致: ", "label-match-content": "ファイルの内容に一致: ", "label-match-task": "タスクに一致: ", "label-match-task-todo": "タスクに一致 (todo): ", "label-match-task-done": "タスクに一致 (done): ", "label-match-line": "行に一致: ", "label-match-block": "ブロックに一致: ", "label-match-section": "セクションに一致: ", "label-match-tag": "タグに一致: ", "label-no-matches": "一致する箇所は見つかりませんでした。", "matches-with-count": "… さらに {{count}} 箇所で一致。", "matches-with-count_plural": "… さらに {{count}} 箇所で一致。", "label-copy-search-results": "検索結果をコピー", "button-copy-results": "結果をコピー", "msg-successfully-copied": "結果がクリップボードにコピーされました。", "option-show-path": "パスを表示", "option-show-path-description": "ファイル名称に加え、ファイルのフルパスを表示します。", "option-link-style": "リンクのスタイル", "option-link-style-description": "結果をリンクに変更することもできます。", "option-choice-link-style-none": "なし", "option-choice-link-style-wikilink": "ウィキリンク", "option-choice-link-style-markdown-link": "マークダウンリンク", "option-list-prefix": "リストの行頭文字", "option-list-prefix-description": "結果にリストの行頭文字を加えることもできます。", "option-choice-list-style-none": "なし", "option-choice-list-style-dash": "ダッシュ(-)", "option-choice-list-style-asterisk": "アスタリスク(*)", "option-choice-list-style-numbered": "番号付き", "tooltip-clear-search": "検索を消去", "label-search-options": "検索オプション", "tooltip-read-more": "更に読み込む", "label-history": "履歴", "tooltip-clear-history": "検索履歴をクリア", "label-path-option-description": "ファイルへのパスに一致", "label-file-name-option-description": "ファイル名に一致", "label-tag-option-description": "タグを検索", "label-line-option-description": "同一の行でキーワードを検索", "label-section-option-description": "同一の見出しでキーワードを検索", "menu-opt-search-for": "\"{{keyword}}\" を検索" }, "quick-switcher": { "name": "クイックスイッチャー", "desc": "キーボードから指を離すことなくファイルに移動できます。Ctrl/Cmd+Oで開始します。", "short-name": "Switcher", "action-open": "クイックスイッチャーを開く", "instruction-navigate": "選択", "instruction-open": "開く", "instruction-open-in-new-tab": "新規タブに開く", "instruction-open-to-the-right": "右側に開く", "instruction-create": "作成", "instruction-dismiss": "スイッチャーを閉じる", "label-no-note-create-new": "ノートが見つかりません。Enterキーで新規ノートを作成します。", "prompt-type-file-name": "移動/作成したいファイル名を入力…", "label-enter-to-create": "Enterキーで作成", "tooltip-not-created-yet": "まだ作成されていません、作成するには選択してください", "option-show-existing-only": "存在するファイルだけ表示", "option-show-existing-only-description": "作成されていないファイルを表示するかどうかを決めます。", "option-show-attachments": "添付ファイルを表示", "option-show-attachments-desc": "画像や動画、PDFなどの添付ファイルを表示するかどうかを決めます。", "option-show-all-file-types": "すべての種類のファイルを表示", "option-show-all-file-types-desc": "Obsidian内で開くことのできないタイプのものを含むあらゆるファイルを表示するかどうかを決めます。そのタイプのファイルはデフォルトのアプリで開かれます。" }, "graph-view": { "name": "グラフビュー", "desc": "ノートがどのようにリンクしているかグラフ化します。", "action-open": "グラフビューを開く", "action-open-local": "ローカルグラフを開く", "action-copy-screenshot": "スクリーンショットをコピー", "tab-title": "{{displayText}}のグラフ", "label-filters": "フィルタ", "prompt-filter-nodes": "ファイルを検索…", "option-depth": "深さ", "option-depth-description": "ノードを表示するためにリンクをたどる回数", "option-neighbor-links": "ネイバーリンク", "option-neighbor-links-description": "ネイバー間のリンクを表示", "option-forelinks": "出ていくリンク", "option-forelinks-description": "他のファイルへのリンクを表示", "option-backlinks": "入ってくるリンク", "option-backlinks-description": "他のファイルからのリンクを表示", "option-show-tags": "タグ", "option-show-tags-description": "タグが含まれるファイルにリンクされます", "option-show-attachments": "添付書類", "option-show-attachments-description": "ファイルに含まれる添付書類を表示", "option-show-existing-files-only": "存在するファイルのみ表示", "option-show-existing-files-only-description": "チェックすると、存在しないファイルへのリンクは表示しません", "option-show-orphans": "オーファン", "option-show-orphans-description": "他のファイルからリンクされていないファイルも表示", "label-display": "表示", "option-show-arrows": "矢印", "option-show-arrows-description": "ズームインしたとき矢印を表示", "option-text-fade": "テキストフェードの閾値", "option-node-size": "ノードの大きさ", "option-link-thickness": "リンクの太さ", "label-forces": "力の強さ", "option-center-force": "中心力", "option-link-force": "リンクする力", "option-link-distance": "リンクの距離", "option-repel-force": "反発力", "tooltip-open-graph-settings": "グラフ設定を開く", "msg-screenshot-copied": "スクリーンショットがクリップボードにコピーされました。", "label-groups": "グループ", "placeholder-enter-query": "クエリを入力…", "tooltip-delete-graph": "グループを削除", "button-new-group": "新規グループ", "tooltip-click-to-change-drag-to-reorder": "クリックで色を変更\nドラッグでグループを並び替え", "action-timelapse": "グラフのタイムラプスアニメーションを開始", "tooltip-start-timelapse-animation": "タイムラプスアニメーションの開始", "button-animate-timelapse": "アニメーション開始" }, "backlinks": { "name": "バックリンク", "desc": "バックリンク(他のノートからのリンク)を表示し、他のノートから現在のノートへのリンクされていないメンションを検知します。また、ステータスバーにバックリンクの数を表示します。", "action-open": "バックリンクを開く", "action-show": "バックリンクペインを表示", "action-open-for-current": "現在のファイルのバックリンクを開く", "action-toggle-backlinks-in-document": "ドキュメント内バックリンクをトグル", "menu-opt-backlinks-in-document": "ドキュメント内バックリンクを表示", "label-linked-mentions": "リンクされたメンション", "label-no-backlinks": "バックリンクは見つかりません。", "label-unlinked-mentions": "リンクされていないメンション", "label-show-search": "検索フィルターを表示", "label-link-button-text": "リンク", "tab-title": "{{displayText}}へのバックリンク", "label-no-unlinked-mentions": "リンクされていないメンションは見つかりません。", "ellipsis": "…", "option-backlink-in-document": "ドキュメント内バックリンク", "option-backlink-in-document-desc": "新規ペインを開いた際にデフォルトでドキュメント内にバックリンクを表示します。" }, "outgoing-links": { "name": "アウトゴーイングリンク", "desc": "アウトゴーイングリンク(他のノートへのリンク)を表示し、現在のノートから他のノートへのリンクされていないメンションを検知します。", "action-open": "アウトゴーイングリンクを開く", "action-show": "アウトゴーイングリンクのペインを開く", "action-open-for-current": "現在のファイルのアウトゴーイングリンクを開く", "tab-title": "{{displayText}}からのアウトゴーイングリンク", "label-links": "リンク", "label-no-links": "リンクが見つかりません", "label-unlinked-mentions": "リンクされていないメンション", "tooltip-link-file": "このファイルをリンク", "tooltip-not-created": "まだ作成されていません" }, "tag-pane": { "name": "タグペイン", "desc": "すべてのタグと、その使用頻度を表示します。", "action-show": "タグペインを表示", "label-no-tags": "タグはありません。", "label-sort-by-name-a-to-z": "タグ名称 (アルファベット順)", "label-sort-by-name-z-to-a": "タグ名称 (アルファベット逆順)", "label-sort-by-frequency-high-to-low": "頻度 (多い順)", "label-sort-by-frequency-low-to-high": "頻度 (少ない順)", "action-show-nested-tags": "ネストされたタグを表示", "action-collapse-all": "すべて折りたたむ", "action-expand-all": "すべて展開" }, "page-preview": { "name": "ページプレビュー", "desc": "マウスホバーでノートのプレビューを表示します。編集モードではCtrl/Cmdを押してください。", "label-empty-note": "\"{{linktext}}\" は作成されていません。クリックで作成します。", "label-source-editor": "エディタ", "label-source-preview": "プレビュー", "label-source-search": "検索、バックリンク、アウトゴーイングリンク", "label-require-mod": "ページプレビューを表示するには{{key}}キーを押しながらホバーします" }, "starred": { "name": "スター", "desc": "よく使うファイルや検索にスターを付けます。", "action-show": "スターペインを表示", "action-toggle": "現在のファイルにスターを付ける/外す", "action-toggle-search": "現在の検索にスターを付ける/外す", "action-star": "スターを付ける", "action-unstar": "スターを外す", "menu-opt-remove": "外す", "msg-successfully-starred": "{{type}} \"{{title}}\" にスターを付けました。", "msg-removed-starred": "{{type}} \"{{title}}\" からスターを外しました。", "msg-cannot-find-path": "\"{{path}}\" にファイルが見つかりません。" }, "custom-css": { "name": "カスタムCSS", "desc": "保管庫にある \"obsidian.css\" を読み込み、適用します。", "setting-community-themes": "コミュニティテーマ", "msg-fetching-themes": "コミュニティテーマのデータを取得しています…", "prompt-filter": "フィルタ…", "label-dark-theme-only": "ダークテーマのみ", "label-light-theme-only": "ライトテーマのみ", "label-use": "使用", "label-stop-use": "このテーマの使用を停止", "label-install-and-use": "インストールして使用", "label-update": "アップデート", "label-no-readme": "このテーマではREADMEファイルが提供されていません。", "tooltip-remove-theme": "テーマを削除", "label-visit-on-github": "GitHubで見る", "msg-load-error": "コミュニティテーマを読み込めませんでした。ネットワークの状態を確認してください。", "msg-now-using-theme": "{{title}}を新規CSSテーマにしました。", "msg-deleted-theme": "{{title}}テーマが削除されました。", "msg-updated-theme": "{{title}}テーマがアップデートされました。", "label-installed": "インストール済み", "label-legacy": "レガシー", "button-update-all-themes": "すべてをアップデート", "msg-failed-load-themes": "コミュニティテーマのロードに失敗しました。", "msg-no-updates-found": "更新されたテーマは見つかりませんでした。", "msg-updates-found": "{{count}}テーマの更新が見つかりました。", "msg-updates-found_plural": "{{count}}テーマの更新が見つかりました。", "msg-failed-to-install-theme": "\"{{name}}\"テーマのインストールに失敗しました。", "msg-successfully-installed-theme": "\"{{name}}\"テーマのインストールに成功しました。", "msg-installing-theme": "\"{{name}}\" テーマをインストール中…", "label-search-summary": "{{themeCount}}テーマを表示中:", "label-update-available": "アップデートが利用可能です。" }, "command-palette": { "name": "コマンドパレット", "desc": "コマンドを入力して機能を呼び出します。UIを使用したりショートカットを覚えることなくコマンドを使用できます。", "action-open": "コマンドパレットを開く", "instruction-navigate": "選択", "instruction-use": "使用", "instruction-dismiss": "パレットを閉じる", "label-no-commands": "コマンドが見つかりません。", "prompt-type-command": "コマンドを入力…", "label-pinned-commands": "ピン留めされたコマンド", "option-add-new-pin": "コマンドの新規ピン留め", "option-add-new-pin-description": "検索クエリが入力されていない場合、ピン留めされたコマンドはすべてのコマンドのトップに表示されます。" }, "markdown-format-importer": { "name": "Markdownフォーマットインポーター", "desc": "他のアプリのマークダウンをObsidianの形式に変換します。", "action-open": "Markdownインポーターを開く", "option-roam-tag-fixer": "Roam Researchタグフィクサー", "option-roam-tag-fixer-description": "\"#tag\" と \"#[[tag]]\" を \"[[tag]]\" に変換します。", "option-roam-highlight-fixer": "Roam Researchハイライトフィクサー", "option-roam-highlight-fixer-description": "\"^^highlight^^\" を \"==highlight==\" に変換します。", "option-roam-todo-converter": "Roam Research TODOコンバータ", "option-roam-todo-converter-description": "\"{{[[TODO]]}}\" を \"[ ]\" に変換します。", "option-bear-highlight-fixer": "Bearハイライトフィクサー", "option-bear-highlight-fixer-description": "\"::highlight::\" を \"==highlight==\" に変換します。", "zettelkasten-link-fixer": "Zettelkastenリンクフィクサー", "zettelkasten-link-fixer-description": "\"[[UID]]\" リンクを完全な \"[[UID File Name]]\" に変換します。", "zettelkasten-link-beautifier": "Zettelkastenリンクビューティファイア", "zettelkasten-link-beautifier-description": "\"[[UID]]\" リンクを変換し \"[[UID File Name|File Name]]\" に美化します。", "msg-all-files-warning": "警告: インポーターは現在のファイルだけでなく、保管庫内のすべてのファイルを変換します。", "msg-override-files-warning": "ファイルは上書きされます。変換する前にすべてのファイルをバックアップしてください。", "label-start-conversion": "変換を開始する", "label-stop": "停止", "label-go-back": "戻る", "label-done": "完了", "label-processing": "処理中…", "label-cancelling": "キャンセル中…", "label-finished": "完了しました!", "label-processed-files": "処理されたファイル", "label-modified-files": "変更されたファイル", "label-total-replacements": "総置換" }, "daily-notes": { "name": "デイリーノート", "desc": "デイリーノートを開きます。ファイルが存在しない場合には作成します。", "short-name": "Today", "action-open": "今日のデイリーノートを開く", "action-open-previous": "前日のデイリーノートを開く", "action-open-next": "翌日のデイリーノートを開く", "action-insert-text": "デイリーノートにテキストを挿入", "action-insert-link": "デイリーノートにリンクを挿入", "msg-fail-format": "デイリーノートが作成できませんでした。\"{{format}}\" が有効な形式ではありません。", "msg-fail-folder": "デイリーノートが作成できませんでした。\"{{folderOption}}\" フォルダが見つかりません。", "msg-fail-template-file": "デイリーノートが作成できませんでした。テンプレートファイル \"{{template}}\" が見つかりません。", "msg-no-previous": "この日より前のデイリーノートがありません。", "msg-no-next": "この日より後のデイリーノートがありません。", "option-date-format": "日付の書式", "label-refer-to-syntax": "その他の構文については、以下を参照してください: ", "label-syntax-link": "フォーマットリファレンス", "label-syntax-live-preview": "このように表示されます: ", "option-new-file-location": "新規ファイルの場所", "option-new-file-location-description": "新規デイリーノートを作成するフォルダのパス。", "option-template": "テンプレートファイルの場所", "option-template-description": "テンプレートとして使用するファイルのパス。", "option-open-on-start": "起動時にデイリーノートを開く", "option-open-on-start-description": "この保管庫を開いた時、常にデイリーノートを自動的に開くように設定します。" }, "unique-note-creator": { "name": "ユニークノートクリエイター", "desc": "ZettelkastenやSlip boxといったワークフロー用にファイル名に一意なタイムスタンププレフィックスをつけてノートを作成できます。", "short-name": "ユニーク", "action-create-note": "新規ユニークノートの作成", "option-new-file-location": "新規ファイルの場所", "option-new-file-location-description": "新規ユニークノートを作成するフォルダのパス。", "msg-folder-not-found": "ユニークノートが作成できませんでした。\"{{folderOption}}\" フォルダが見つかりません。", "option-template-file": "テンプレートファイルの場所", "option-template-file-description": "テンプレートとして使用するファイルのパス。", "option-template-file-placeholder": "例: フォルダ1/ノート", "option-id-format": "ユニークなプレフィックスのフォーマット", "msg-template-file-not-found": "ユニークノートが作成できませんでした。テンプレートファイル \"{{template}}\" が見つかりません。", "msg-failed-to-generate": "フォーマット \"{{format}}\" でのユニークノートの生成に失敗しました。" }, "random-note": { "name": "ランダムノート", "desc": "ランダムにノートを1つ開きます。振返りと発見に役立ちます。", "short-name": "ランダム", "action-open": "ランダムノートを開く" }, "outline": { "name": "アウトライン", "desc": "現在のファイルやリンクされたペインのアウトラインを表示します。", "action-open": "アウトラインを開く", "action-show": "アウトラインペインを表示", "action-open-for-current": "現在のファイルのアウトラインを開く", "tab-title": "{{displayText}}のアウトライン", "label-no-headings": "見出しが見つかりません。" }, "word-count": { "name": "ワードカウント", "desc": "ステータスバーにワード数を表示します。" }, "slides": { "name": "スライド", "desc": "マークダウンからスライドを作成します。\"---\" で区切った部分がスライドとして分割されます。", "action-start": "スライドプレゼンテーションを開始" }, "audio-recorder": { "name": "オーディオレコーダー", "desc": "音声を録音し、添付ファイルとして保存します。", "action-start": "音声の録音を開始します", "action-stop": "音声の録音を停止します", "action-toggle": "録音の開始/停止", "msg-access-denied": "マイクアクセスが拒否されました。環境設定パネルで有効化してください。", "msg-pending-grant": "マイクに録音を開始する許可を与えてください。", "msg-no-microphone": "マイクが接続されていません。" }, "open-with-default-app": { "name": "デフォルトアプリで開く", "desc": "現在のファイルをデフォルトのアプリで開くためのボタンを追加します。", "action-open-file": "デフォルトアプリで開く", "action-open-file-mobile": "共有", "action-show-in-folder": "フォルダで表示", "action-show-in-folder-mac": "Finderに表示" }, "templates": { "name": "テンプレート", "desc": "テンプレートファイルのフォルダからテンプレートの内容を挿入します。", "action-insert": "テンプレートを挿入", "action-insert-current-date": "現在の日付を挿入", "action-insert-current-time": "現在の時間を挿入", "option-template-folder-location": "テンプレートフォルダの場所", "option-template-folder-location-description": "このフォルダ内のファイルをテンプレートとして利用できるようになります。", "option-template-date-format": "日付の書式", "option-template-date-format-description": "テンプレートファイルの{{date}}はこの値に置き換えられます。", "option-template-date-format-description2": "{{date:YYYY-MM-DD}}を使用して、書式を上書きすることもできます。", "option-template-time-format": "時刻の書式", "option-template-time-format-description": "テンプレートファイルの{{time}}はこの値に置き換えられます。", "option-template-time-format-description2": "{{time:HH:mm}}を使用して、書式を上書きすることもできます。", "instruction-navigate": "選択", "instruction-insert": "テンプレートを挿入", "instruction-dismiss": "閉じる", "msg-no-templates-found": "テンプレートが見つかりません", "msg-fail-invalid-folder": "テンプレートリストを表示できません。テンプレートフォルダが無効です。", "msg-fail-folder-not-found": "テンプレートリストを表示できません。フォルダ \"{{folderOption}}\" が見つかりません。", "prompt-type-template": "テンプレートの名前を入力…" }, "translucency": { "name": "半透明ウィンドウ", "desc": "半透明効果を有効にして奥行き感を高めます。ダークモードでの使用に最適です。Linuxではサポートされていません。" }, "slash-command": { "name": "スラッシュコマンド", "desc": "編集中にスラッシュを入力することで、エディタ内でスラッシュコマンドを起動できるようになります。" }, "editor-status": { "name": "エディタステータス", "desc": "ステータスバーに現在のエディタモードを表示します。クリックしてモードの変更が可能です。", "read": "リーディング", "edit-source": "ソースモード", "edit-live-preview": "ライブプレビュー" }, "publish": { "name": "パブリッシュ", "desc": "Obsidian Publishを用いてインターネット上にノートを公開します。", "action-publish-changes": "パブリッシュによる変更の公開", "label-no-internet-access": "変更を公開するにはインターネットにアクセスする必要があります。", "label-publish-service-description": "Obsidian Publishは、Obsidianから直接オンラインでノートを公開できるアドオン有料サービスです。", "label-please-login": "公開を開始するには、ログインするか、Obsidianアカウントを新規作成してください。", "label-no-publish-subscription": "Obsidian Publishのサブスクリプションをまだお持ちでありません。", "button-purchase": "購入", "label-manage-sites": "サイトを管理する", "label-no-sites": "サイトを持っていません。", "button-choose": "選択", "tooltip-edit-site-id": "サイトIDを編集", "tooltip-delete-site": "サイトを削除", "label-delete-site-confirmation": "このサイトを削除してもよろしいですか?", "label-delete-site-details": "サイトは即座かつ完全に削除されます。", "label-confirm-delete-site": "サイト \"{{site}}\" を削除することを確認してください", "option-site-id": "サイトID", "option-site-id-description": "あなたのサイトは https://publish.obsidian.md/{site id} です。これは後で変更できます。小文字、数字、ダッシュのみが使用できます。", "option-site-id-placeholder": "サイトIDを選択してください", "button-create": "作成", "msg-invalid-site-id": "サイトIDには、小文字、数字、ダッシュのみを含めることができます。", "msg-site-id-in-use": "このサイトIDは使用中です。別のサイトIDを試してください。", "msg-create-site-issue": "サイト作成時に問題が発生しています。", "label-site-options": "サイトオプション", "option-site-general": "一般", "option-site-components": "コンポーネント", "option-site-appearance": "外観", "option-site-reading-experience": "リーディングエクスペリエンス", "option-site-misc": "他のサイト設定", "option-site-name": "サイト名称", "option-site-name-description": "公開サイトの名前。あなたのサイトのページタイトルに表示されます。", "option-site-name-placeholder": "あなたのサイトの名称", "option-home-page-file": "ホームページファイル", "option-home-page-file-description": "公開サイトにアクセスした際にユーザーに表示される最初のページ。", "option-home-page-file-placeholder": "公開ファイルを選択", "option-logo": "ロゴ", "option-logo-description": "サイトのロゴとして使用する画像ファイルを選択してください。", "option-logo-placeholder": "保管庫内の画像…", "option-site-collaboration": "サイトコラボレーション", "option-site-collaboration-desc": "このサイトのコラボレーターを管理します。", "button-manage-collaborators": "管理", "option-theme": "テーマ", "option-theme-description": "サイトのデフォルトの配色を選択します。", "option-theme-system": "システムテーマを適用", "option-show-theme-toggle": "ライトテーマとダークテーマの切り替え", "option-show-theme-toggle-description": "サイト訪問者が自分でライトテーマとダークテーマを切り替えられるようにします。", "option-show-navigation": "ナビゲーションを表示", "option-show-navigation-description": "公開サイトの左側に、公開されているすべてのページのリストを表示します。", "option-show-search": "検索バーを表示", "option-show-search-description": "訪問者がサイト上のページと見出しを検索できるようにナビゲーションのトップに検索バーを表示します。", "option-show-graph": "グラフビューを表示", "option-show-graph-description": "各ページに小さなローカルグラフを表示します。", "option-show-outline": "目次を表示", "option-show-outline-description": "各ページの見出しをアウトライン表示します。", "option-show-backlinks": "バックリンクを表示", "option-show-backlinks-description": "各ページの最後にバックリンクセクションを表示します。", "option-sliding-window-mode": "スライディングウィンドウを使用", "option-sliding-window-mode-description": "右側の新規ペインでページを開きます。ペインを水平方向にスクロールできます。", "option-hover-preview-file": "プレビューをホバー表示", "option-hover-preview-file-description": "リンクにカーソルを合わせると、ページのプレビューが表示されます。", "option-hide-title": "ページタイトルを非表示にする", "option-hide-title-description": "ページタイトルの見出しを非表示にします。各ページのはじめに独自の見出しがある場合に役立ちます。", "option-readable-line-length": "読みやすい行の長さ", "option-readable-line-length-description": "最大行長を制限します。 画面に収まるコンテンツは少なくなりますが、長い段落が読みやすくなります。", "option-site-password": "パスワード", "option-site-password-description": "パスワードと共にサイトへのアクセスを制限します。", "option-google-analytics": "Googleアナリティクスのトラッキングコード", "option-google-analytics-description": "サイトにGoogleアナリティクスを設定します。Googleアナリティクスはカスタムドメインからの訪問者のみが利用できることに注意してください。まずは自身の居住する地域の法律と制限によって許可されていることを確認してください。", "button-manage-passwords": "管理", "button-save-site-settings": "サイト設定を保存", "msg-updated-options": "サイトのオプションを更新しました。", "button-go-back": "戻る", "label-publishing-to": "パブリッシュ: ", "tooltip-switch-site": "サイトの切り替え", "button-add-linked": "リンクされているファイルを追加", "tooltip-add-linked": "現在選択されているアイテムがリンクしているすべてのファイルを追加します", "msg-added-linked-files": "{{count}} のリンクされているファイルが追加されました。", "msg-added-linked-files_plural": "{{count}} のリンクされているファイルが追加されました。", "tooltip-open-site-options": "サイトオプションの変更", "label-no-changes-detected": "変更は検出されませんでした。", "label-changed-files-to-be-published": "変更あり", "label-unchanged-files-already-published": "変更なし(選択して削除)", "label-file-selected": " 選択されました", "button-select-all-files": "すべてを選択", "button-deselect-all-files": "すべてを選択解除", "label-new-files-to-be-published": "新規", "button-publish": "パブリッシュ", "msg-no-permission-to-publish-to-site": "現在のサイトに公開する権限がありません。", "msg-select-at-least-one-file": "少なくとも1つのファイルを選択してください。", "label-upload-changes": "変更をアップロードする", "button-done": "完了", "button-stop": "停止", "label-status-uploading": "アップロード中", "label-status-to-publish": "公開する", "label-status-to-delete": "削除する", "label-status-published": "公開しました", "label-status-deleted": "削除しました", "label-status-failed": "失敗しました", "label-status-cancelled": "キャンセルしました", "button-change": "変更", "label-clear-cache": "変更がサイトに反映されるまでに最大数分かかります。 最新の変更が表示されない場合は、ブラウザのキャッシュをクリアしてみてください。", "label-visit-site": "こちらからあなたのサイトに訪問できます: ", "msg-something-went-wrong": "エラーが発生しました。詳細は開発者コンソールを確認してください。", "msg-network-error": "ネットワークエラーが発生しました。 ", "label-manage-passwords": "パスワードの管理", "label-add-password": "パスワードの追加", "action-new-password": "新規パスワード", "label-no-password": "現在、サイトにはパスワードが存在しません。誰でも閲覧することができる状態です。", "label-have-password": "あなたのサイトはパスワードで保護されています。複数のパスワードを設定している場合には、訪問者はいずれかのパスワードを入力することでサイトにアクセスできます。", "option-password-name": "パスワード", "option-password-desc": "パスワードのハッシュは安全に保存されます。パスワードは一度設定されるとプレーンテキストで表示することができなくなります。", "option-password-placeholder": "サイトのパスワード", "option-nickname-name": "ニックネーム (オプション)", "option-nickname-desc": "パスワードの用途や使用者を思い出せるようにニックネームを設定してください。", "action-add-password": "このパスワードを追加する", "label-untitled-password": "タイトルの無いパスワード", "label-password-created-time": "{{time}}に作成", "msg-added-new-password": "新規パスワードを追加しました。", "option-custom-domain": "カスタムドメイン", "option-custom-domain-desc": "https://publish.obsidian.md/{site id} URLの代わりに独自のドメインを利用します。", "option-noindex": "検索エンジンによるインデックス化を無効", "option-noindex-desc": "検索エンジンによってサイトがインデックス化されるのを防ぎます。", "button-configure": "設定", "label-configure-custom-domain": "カスタムドメインの設定", "option-custom-url-name": "カスタムURL", "option-custom-url-desc": "サイトが位置しているURL", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "カスタムドメインへのリダイレクト", "option-custom-url-redirect-desc": "publish.obsidian.md/idの訪問者を設定したカスタムドメインにリダイレクトします。", "button-update-custom-domain": "ドメイン設定を更新", "label-custom-domain-instructions": "更に多くの情報が必要な場合にはヘルプサイトの{{link}}を確認してください。", "label-custom-domain-link-name": "カスタムドメインの設定ガイド", "label-site-usage": "現在、{{limit}}中の{{site}}個を利用しています。", "button-add-more-sites": "更にサイトを購入する", "label-no-sites-bought": "まだサイトを購入していません。", "button-get-site": "サイトを取得", "label-manage-sharing": "\"{{name}}\" の共有を管理", "label-sharing-with-users": "このサイトは現在以下のユーザーに共有されています。", "label-not-sharing": "このサイトは現在誰にも共有されていません。", "label-invite-pending": "待機中", "tooltip-remove-user": "ユーザーを取り除く", "option-invite-user": "ユーザーを招待する", "placeholder-invite-user": "ユーザーのEメールアドレスを入力…", "error-email-must-be-valid": "ユーザーを招待するための有効なEメールアドレスを入力してください。", "msg-enable-publish-plugin": "サイトを閲覧するには、「設定」 -> 「コアプラグイン」の項目からパブリッシュのコアプラグインを有効にしてください。", "label-your-sites": "あなたのサイト", "label-sites-shared-with-you": "あなたに共有されているサイト", "tooltip-leave-site-sharing": "このサイト上のコラボレーションを停止", "label-leave-site-confirmation": "サイトコラボレーションの停止を確認", "label-leave-site-confirmation-details": "共有されているサイトリストからこのサイトを取り除きます。このアクションは元に戻すことができません。", "label-leave-site-confirmation-details-2": "このサイトとのコラボレーションを再開したい場合にはサイト所有者にコンタクトを取ってください。", "button-leave": "離れる", "label-compare-with-live": "ライブバージョンと比較", "button-use-live-version": "ライブバージョンを使用", "label-confirm-override": "ローカルバージョンへの上書きを確認", "label-confirm-override-1": "ローカルバージョンへの上書きを許可しますか?", "label-confirm-override-2": "ライブバージョンが使用され、ローカルバージョンは破棄されます。必要な場合にはバックアップの作成をしてください。", "button-proceed": "実行", "message-successfully-used-live-version": "ローカルバージョンが正常に上書きされました。ライブバージョンを使用することができます。", "label-open-file": "ファイルを開く", "tooltip-manage-publish-filters": "公開フィルターを管理", "option-included-folders": "含まれるフォルダ", "option-included-folders-desc": "これらのフォルダ内のファイルは公開の変更をプレビューする際に自動的に選択されます。", "option-currently-included-folders": " これらのフォルダが現在含まれています:", "option-excluded-folders": "除外フォルダ", "option-excluded-folders-desc": "これらのフォルダ内のファイルは公開の変更をプレビューする際に表示されません。この設定は上記の含まれるフォルダよりも優先されます。", "label-number-of-folders-included": "現在、Obsidian Publishは{{folders}}を含みます。", "label-number-of-folders-excluded": "現在、Obsidian Publishは{{folders}}を除外しています。", "label-manage-included-folders": "含めるフォルダを管理", "label-manage-excluded-folders": "除外フォルダを管理", "label-add-included-folder": "フォルダを含める", "label-add-included-folder-desc": "既存のフォルダと未作成のフォルダの両方を含めることができます。", "tooltip-contact-support": "サポートにコンタクトを取る" }, "workspaces": { "name": "ワークスペース", "desc": "ワークスペースレイアウトを保存してロードします。", "action-load-layout": "ワークスペースレイアウトをロード", "action-manage-layouts": "ワークスペースレイアウトを管理", "action-save-and-load-layout": "保存して別のワークスペースレイアウトをロード", "placeholder-save-current-layout-as": "現在のワークスペースレイアウトを保存…", "button-save": "保存", "button-load": "ロード", "tooltip-delete-layout": "レイアウトを削除", "msg-delete-layout-success": "レイアウトが正常に削除されました。", "msg-enter-name": "新規レイアウトの名前を入力してください。", "msg-save-layout-success": "レイアウトが正常に保存されました。", "label-no-layout-found": "保存されたレイアウトが見つかりません。", "placeholder-type-to-search-layouts": "レイアウト名を入力…" }, "sync": { "name": "同期", "desc": "Obsidian Syncを介してファイルを同期します。", "action-view-version-history": "バージョン履歴を閲覧", "label-load-more": "更にロード", "label-show-diff": "差分の表示", "label-copy-to-clipboard": "クリップボードにコピー", "label-restore-this-version": "このバージョンを復元", "msg-already-latest-version": "このバージョンはすでに最新です。", "msg-restored-version": "{{time}}から正常にバージョンを復元しました。", "label-file-deleted": "このファイルは削除されました", "label-no-earlier-version": "このファイルには以前のバージョンが存在しません。", "label-empty-file": "ファイルがありません", "label-setting-files": "設定ファイル", "label-deleted-files": "削除されたファイル", "label-version-history": "バージョン履歴", "label-click-to-see-history": "削除されたファイルのバージョン履歴を閲覧するにはファイルをクリックしてください。", "label-create-remote-vault": "リモート保管庫の作成", "msg-please-enter-password": "パスワードを入力してください。", "msg-vault-name-cannot-be-empty": "保管庫名を空にはできません。", "msg-successfully-created-vault": "リモート保管庫 \"{{name}}\" を作成しました。", "label-remote-vault-explanation": "リモート保管庫によってデバイス間で保管庫の同期を安全に行います。", "option-vault-name": "保管庫の名称", "option-vault-name-desc": "保管庫の用途を覚えやすい名前をつけてください。", "option-vault-name-placeholder": "私の保管庫", "option-use-custom-encryption-password": "エンドツーエンド暗号化のパスワードをカスタマイズ", "option-use-custom-encryption-password-desc": "このオプションを有効化した場合、私達が安全に暗号化キーを管理することになります。", "option-use-custom-encryption-password-desc-warning": "このオプションは後から変更できません。", "option-encryption-password": "暗号化のパスワード", "option-encryption-password-desc": "このパスワードは後から変更できません。", "option-encryption-password-desc-warning": "このパスワードを忘れてしまった場合、あらゆるリモートデータが永遠に使用不可となります。", "option-encryption-password-desc-2": "これはローカルデータに一切影響を及ぼしません。", "option-encryption-password-placeholder": "パスワード", "label-enter-encryption-password": "暗号化のパスワードを入力", "button-unlock-vault": "保管庫をアンロック", "msg-verified-password": "パスワードの確認に成功しました。", "label-remote-vaults": "リモート保管庫", "label-vault-created-time": "作成日時 {{time}}", "tooltip-delete-remote-vault": "削除", "tooltip-manage-sharing": "共有を管理", "label-confirm-delete-remote-vault": "削除された保管庫の確認", "label-confirm-delete-remote-vault-question": "このリモート保管庫の削除を行いますか?", "label-confirm-delete-remote-vault-result": "サーバー内のバージョン履歴を含むすべてのデータが削除されます。ローカルファイルに影響はありません。", "label-confirm-delete-remote-vault-warning": "この実行は永続的であり、元に戻すことはできません。", "msg-remote-vault-deleted": "{{name}}は削除されています。", "button-connect-to-remote-vault": "接続", "button-disconnect-from-remote-vault": "接続を切る", "label-not-remote-vaults": "リモート保管庫を所有していません。", "button-create-new-remote-vault": "保管庫を新規作成", "label-sync-log": "同期ログ", "options-only-show-errors": "エラーのみ表示", "options-only-show-errors-desc": "エラーのみを表示し、他のログ項目を隠します。", "button-copy-sync-log": "同期ログをコピー", "msg-successfully-copied-sync-log": "同期ログのコピーに成功しました。", "button-retry": "リトライ", "button-purchase-subscription": "購入", "option-remote-vault": "リモート保管庫", "button-choose-remote-vault": "選択", "button-manage-remote-vault": "管理", "option-remote-vault-desc-connected": "現在、\"{{name}}\" のリモート保管庫に接続されています。", "option-remote-vault-desc-not-connected": "現在、どのリモート保管庫にも接続されていません。", "option-sync-status": "同期ステータス", "option-sync-status-desc-paused": "現在、Obsidian Syncは停止しています。", "option-sync-status-desc-running": "現在、Obsidian Syncは実行中です。", "option-device-name": "デバイス名", "option-device-name-desc": "この名前は同期ログに表示されます。デフォルトの名前を使用する場合には空白のままにしてください。", "button-resume": "再開", "button-pause": "停止", "option-view-deleted-files": "削除されたファイル", "option-view-deleted-files-desc": "削除されたファイルの閲覧と復元を行います。", "option-sync-log": "同期アクティビティ", "option-sync-log-desc": "デバッグのために最近の同期アクティビティを閲覧します。", "button-view": "閲覧", "button-bulk-restore": "一括復元", "button-restore-selected-files": "選択したファイルを復元する", "msg-restoring": "復元しています…", "msg-restoring-complete": "`復元が完了しました: {{succeeded}} が成功し、 {{failed}} が失敗しました。`", "option-over-size": "保管庫の許容サイズ", "option-over-size-desc": "保管庫は{{limit}}中の{{size}}です。", "msg-largest-files": "最大サイズのファイルを確認してください。", "msg-largest-files-desc": "これらは最もスペースを取っているリモートファイルです。添付ファイルを削除した後、リモート保管庫のスペース開放のためにパージボタンを使用してください。", "button-purge-remote": "パージ", "tooltip-purge-remote": "スペース確保のためにリモート保管庫から削除された添付ファイルを永続的にパージします。", "msg-purge-complete": "パージが完了しました。", "option-prevent-sleep": "デバイスのスリープを防ぐ", "option-prevent-sleep-desc": "未同期のファイルが残されている場合にデバイスがスリープするのを防ぎます。", "option-selective-sync": "選択的同期", "option-excluded-folders": "除外フォルダ", "option-excluded-folder-desc": "特定のフォルダが同期されるのを防ぎます。", "option-currently-excluded-folders": "現在、次のフォルダが除外されています。", "button-manage-excluded-folders": "管理", "option-sync-image": "画像を同期", "option-sync-image-desc": "次の拡張子の画像ファイルを同期します: {{extensions}}", "option-sync-audio": "音声を同期", "option-sync-audio-desc": "次の拡張子の音声ファイルを同期します: {{extensions}}", "option-sync-video": "動画を同期", "option-sync-video-desc": "次の拡張子の動画ファイルを同期します: {{extensions}}", "option-sync-pdf": "PDFを同期", "option-sync-pdf-desc": "PDFファイルを同期します。", "option-sync-unsupported": "他のすべてのタイプのファイルを同期", "option-sync-unsupported-desc": "サポートされていないファイルタイプを同期します。", "option-vault-config-sync": "保管庫の設定を同期", "option-view-config-files": "設定のバージョン履歴", "option-view-config-files-desc": "設定ファイルのバージョンの閲覧と復元を行います。", "option-sync-app": "メイン設定", "option-sync-app-desc": "エディタ設定、ファイルとリンクの設定、カスタムホットキー等の同期を有効化します。", "option-sync-appearance": "外観設定", "option-sync-appearance-desc": "ダークモード、アクティブテーマ、有効化されているスニペットなどの外観の設定を同期するかどうかを決めます。", "option-sync-appearance-data": "テーマとスニペット", "option-sync-appearance-data-desc": "ダウンロードされたテーマとスニペットを同期するかどうかを決めます。有効化されているかどうかは外観の同期設定に依存します。", "option-sync-hotkey": "ホットキー", "option-sync-hotkey-desc": "カスタムホットキーを同期するかどうかを決めます。", "option-sync-core-plugin": "アクティブなコアプラグインのリスト", "option-sync-core-plugin-desc": "有効化されているコアプラグインを同期するかどうかを決めます。", "option-sync-core-plugin-data": "コアプラグイン設定", "option-sync-core-plugin-data-desc": "コアプラグインの設定を同期するかどうかを決めます。", "option-sync-community-plugin": "アクティブなコミュニティプラグインのリスト", "option-sync-community-plugin-desc": "有効化されているコミュニティプラグインを同期するかどうかを決めます。", "option-sync-community-plugin-data": "インストールされているコミュニティプラグイン", "option-sync-community-plugin-data-desc": "インストールされているコミュニティプラグイン(.jsファイル、.cssファイルとmanifest.jsonファイル)とプラグイン設定を同期するかどうかを決めます。", "label-sync-introduction": "Obsidian Syncはエンドツーエンド暗号化とバージョン履歴のためのアドオン同期サービスです。", "label-account-required": "同期を開始するには、ログインするかObsidianの新規アカウントを作成してください。", "button-sign-up": "サインアップ", "button-log-in": "ログイン", "label-manage-excluded-folders": "除外フォルダの管理", "label-number-of-folders-excluded": "現在、{{folders}}が同期から除外されています。", "label-add-excluded-folder": "フォルダを除外する", "label-add-excluded-folder-desc": "既存のフォルダと未作成のフォルダの両方を除外することができます。", "tooltip-remove-excluded-folder": "除外リストから取り除く", "label-setup-connection": "接続の設定", "label-now-connected-to-vault": "現在、\"{{name}}\" に接続されています。", "button-start-syncing": "同期を開始", "label-confirm-merge-vault": "保管庫の統合を確認", "msg-vault-has-notes": "ローカル保管庫にはすでにいくつかのノートが存在しています。", "msg-vault-merge-warning": "リモート保管庫 \"{{name}}\" に接続している場合には、ローカル保管庫内のノートはリモート保管庫からのノートと統合されます。競合が起きた場合には、最新バージョンのノートが維持されます。", "tooltip-update-setting-on-all-devices": "このオプションを適用したいすべてのデバイスでこのオプションを更新した上で、アプリを再起動してください。", "label-sharing-with-users": "このリモート保管庫は現在以下のユーザーに共有されています。", "label-not-sharing": "このリモート保管庫は現在誰にも共有されていません。", "label-vaults-shared-with-you": "あなたに共有されている保管庫", "tooltip-leave-vault-sharing": "この保管庫のコラボレーションを停止", "label-leave-vault-confirmation": "保管庫コラボレーションの停止を確認", "label-leave-vault-confirmation-details": "共有されている保管庫リストからこの保管庫を取り除きます。このアクションは元に戻すことができません。", "label-leave-vault-confirmation-details-2": "この保管庫とのコラボレーションを再開したい場合には保管庫所有者にコンタクトを取ってください。", "button-leave": "離れる", "label-require-subscription-to-connect": "この保管庫に接続するにはObsidian Syncのサブスクリプションが必要です。", "option-contact-support": "サポートにコンタクトを取る", "option-contact-support-desc": "Obsidian Syncで何からの問題が発生した場合には、ご連絡をいただければサポートすることができます。その場合には support@obsidian.md 宛にメールを送信してください。", "button-email-support": "Eメールサポート" }, "file-recovery": { "name": "ファイルリカバリー", "desc": "予期しないデータ損失から復旧するために最近のスナップショットを復元可能にします。スナップショットはマークダウンファイルでのみ保存されます。", "action-open": "保存されたスナップショットを開く", "option-interval": "スナップショットの間隔", "option-interval-description": "2つのスナップショット間における分単位の最小間隔。", "option-keep": "履歴の期間", "option-keep-description": "スナップショットが保持される日数。", "option-open-history": "スナップショット", "option-open-history-description": "保存されたスナップショットの閲覧と復元を行います。", "button-view-snapshots": "閲覧", "option-clear": "履歴をクリア", "option-clear-description": "すべてのスナップショットを消去します。", "button-clear-history": "クリア", "label-clear-warning": "すべてのスナップショットを削除しますか?スナップショットのみが除去されることに注意してください。保管庫内のファイルに影響はありません。", "msg-clear-complete": "スナップショットがクリアされました。", "label-no-history-found": "スナップショットが見つかりません。", "placeholder-choose-file": "ファイルを選択…", "label-select-file": "スナップショットを閲覧するには左からファイルを選択してください。" }, "note-composer": { "name": "ノートコンポーザー", "desc": "ノートの統合と分割、リファクタリングを行います。", "option-confirm-file-merge": "ファイルの統合を確認", "option-confirm-file-merge-description": "2つのファイルを統合する前に確認のプロンプトを表示します。", "option-split-replacement-text": "移動後のテキスト", "option-split-replacement-text-description": "選択テキストの抽出の操作後に、そのテキストの元々あった場所に表示するものを決めます。", "option-choice-split-replacement-text-link": "新規ファイルにリンク", "option-choice-split-replacement-text-embed": "新規ファイルを埋め込む", "option-choice-split-replacement-text-none": "なし", "option-template-file": "テンプレートファイルの場所", "option-template-file-description": "統合や抽出の際に使用するテンプレートファイルを選択してください。利用可能な変数: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}} (例: {{date:YYYY-MM-DD}})", "command-merge-file": "現在のファイルを別のファイルに統合…", "action-merge-file": "ファイル全体を別ファイルに統合…", "label-no-files": "ファイルが見つかりませんでした。", "instruction-navigate": "選択", "instruction-merge": "統合", "instruction-create-new": "新規作成", "instruction-merge-at-top": "ノート上部に統合", "instruction-dismiss": "ノートコンポーザーを閉じる", "prompt-select-file-to-merge": "統合先のファイルを選択…", "label-merge-file": "ファイルを統合", "label-confirm-file-merge": "\"{{file}}\" を \"{{destination}}\" に統合しますか? \"{{file}}\" は削除されます。", "button-merge": "統合", "button-merge-do-not-ask-again": "統合して次からは確認しない", "command-split-file": "現在の選択範囲を抽出…", "command-extract-heading": "この見出しを抽出…", "instruction-append": "ノート下部に移動", "instruction-prepend": "ノート上部に移動", "msg-fail-to-fetch-template": "テンプレートファイルの取得に失敗しました: \"{{template}}\" が見つかりません。", "msg-fail-to-find-heading": "見出しの発見に失敗しました。" }, "canvas": { "name": "キャンバス", "desc": "無限キャンバス上でのノートの配置と接続が可能です。", "action-add-note": "保管庫からノートを追加", "action-add-media": "保管庫からメディアを追加", "action-add-card": "カードを追加", "action-add-website": "ウェブページを追加", "action-create-group": "グループを作成", "action-create-with-size": "特定サイズでカードを作成", "action-convert-to-file": "ファイルを変換…", "action-drag-to-add-note": "ドラッグで保管庫からノートを追加", "action-drag-to-add-media": "ドラッグで保管庫からメディアを追加", "action-drag-to-add-card": "ドラッグでカードを追加", "action-enable-grid-snapping": "グリッドスナップを有効化", "action-disable-grid-snapping": "グリッドスナップを無効化", "action-edit-label": "ラベルを編集", "action-remove-label": "ラベルを削除", "action-search-file": "ファイルを検索", "action-set-color": "色をセット", "action-align": "整列", "action-align-left": "水平方向左に整列", "action-align-center": "水平方向中央に整列", "action-align-right": "水平方向右に整列", "action-align-top": "垂直方向上に整列", "action-align-middle": "垂直方向中央に整列", "action-align-bottom": "垂直方向下に整列", "action-distribute-horizontal-spacing": "水平方向等間隔に分布", "action-distribute-vertical-spacing": "垂直方向等間隔に分布", "action-justify-horizontally": "水平方向に揃える", "action-justify-vertically": "垂直方向に揃える", "action-stack-horizontally": "水平方向にスタック", "action-stack-vertically": "垂直方向にスタック", "action-stack-grid": "グリッド状にスタック", "action-export-png": "画像としてエクスポート", "label-export-png-desc": "以下の設定で \"{{title}}\" をPNGファイルとしてエクスポートします。", "label-export-png-dimensions": "推定画像サイズ: {{dimensions}}", "option-export-png-show-logo": "ロゴの表示", "option-export-png-show-logo-desc": "この設定を有効化すると画像左下に Obsidianロゴを表示します。", "option-export-png-zoom": "ズーム", "option-export-png-zoom-desc": "値を大きくすることでより高解像の画像を生成します。", "option-export-png-frame": "ビューポート", "option-export-png-frame-desc": "キャンバス全体と現在表示中のビューポートのどちらをレンダーするか選択してください。", "option-export-png-frame-full": "キャンバス全体", "option-export-png-frame-viewport": "ビューポートのみ", "action-remove": "削除", "action-narrow": "セクションに絞り込む…", "action-swap-file": "ファイルを入れ替える…", "action-change-url": "URLを変更…", "action-zoom-to-fit": "フィットするようにズーム", "action-zoom-to-selection": "選択対象にズーム", "action-reload-page": "ページを再読み込み", "action-go-to-target": "ターゲットに移動", "action-go-to-source": "ソースに移動", "command-create-new-canvas": "新規キャンバスを作成", "command-new-canvas": "新規キャンバス", "instruction-narrow": "見出しを埋め込む", "prompt-to-narrow": "見出し名を入力", "label-enter-url": "URLを入力", "label-empty-embed": "\"{{linktext}}\" が見つかりません。", "prompt-add-text": "テキストを追加…", "prompt-start-search": "入力して検索…", "label-canvas-help": "キャンバスのヘルプ", "label-no-heading": "見出し無し", "label-pan": "パン", "label-pan-horizontal": "水平方向にパン", "label-zoom": "ズーム", "label-select-all": "すべてを選択", "label-add-remove-selection": "選択への追加/選択からの削除", "label-clone-card": "カードを複製", "label-constrain-movement-axis": "カードの動きを座標軸に制約", "label-disable-drag-snapping": "ドラッグ中のスナップを無効化", "label-remove-card": "カードを削除", "label-drag-from-below": "下からドラッグまたはダブルクリック", "label-space-drag-pan": "スペース + ドラッグでパン", "label-scroll-to-zoom": "スクロールでズーム", "label-untitled-group": "無題のグループ" } }, "nouns": { "word-with-count": "{{count}} ワード", "word-with-count_plural": "{{count}} ワード", "character-with-count": "{{count}} 文字", "character-with-count_plural": "{{count}} 文字", "link-with-count": "{{count}} リンク", "link-with-count_plural": "{{count}} リンク", "file-with-count": "{{count}} ファイル", "file-with-count_plural": "{{count}} ファイル", "folder-with-count": "{{count}} フォルダ", "folder-with-count_plural": "{{count}} フォルダ", "backlink-with-count": "{{count}} バックリンク", "backlink-with-count_plural": "{{count}} バックリンク", "site-with-count": "{{count}} サイト", "site-with-count_plural": "{{count}} サイト", "plugin-with-count": "{{count}} プラグイン", "plugin-with-count_plural": "{{count}} プラグイン", "theme-with-count": "{{count}} テーマ", "theme-with-count_plural": "{{count}} テーマ" } } { "setting": { "options": "옵션", "plugin": "플러그인", "builtin-plugins": "코어 플러그인", "plugin-options": "플러그인 옵션", "folder-path-example-placeholder": "예: 폴더 1/폴더 2", "file-path-example-placeholder": "예: 폴더/노트", "msg-restart-required": "해당 옵션을 변경 후 적용하려면 앱을 다시 시작해야 합니다.", "editor": { "name": "편집기", "section-general": "일반", "section-behavior": "행동", "section-display": "보기", "option-spellcheck": "철자 검사", "option-spellcheck-description": "철자 검사기를 사용하도록 설정합니다. 현재는 미국 영어로만 동작합니다.", "spellcheck-languages": "철자 검사 언어", "spellcheck-languages-description": "철자 검사기에 사용할 언어를 선택하세요.", "spellcheck-languages-mac-description": "네이티브 맞춤법 검사기가 macOS에서 사용되는 언어를 자동으로 감지합니다.", "spellcheck-dict": "철자 검사 사전", "spellcheck-dict-empty": "철자 검사 사전이 지정되지 않았습니다.", "option-show-inline-title": "인라인 제목 보기", "option-show-inline-title-description": "파일 내용과 함께 인라인으로 파일 이름을 편집 가능한 제목으로 보여줍니다.", "option-readable-line-length": "읽기 쉬운 행 길이", "option-readable-line-description": "최대 줄 길이를 제한합니다. 화면에 맞는 콘텐츠는 줄어들지만 긴 단락을 읽을 수 있습니다.", "option-strict-line-break": "엄격한 줄 바꿈", "option-strict-line-break-description": "미리 보기 모드에서는 마크다운 사양에 따라 단일 줄 바꿈을 무시합니다. 미리 보기 모드에서 줄 바꿈을 사용하려면 사용하지 않도록 설정하세요.", "option-show-frontmatter": "프론트 매터 보기", "option-show-frontmatter-description": "프리뷰 모드에서 프론트 매터를 코드 블록으로 표시합니다. 프론트 매터를 숨기려면 비활성화하세요.", "option-auto-pair-brackets": "괄호를 자동으로 페어링", "option-auto-pair-brackets-description": "괄호와 따옴표를 자동으로 쌍으로 만듭니다.", "option-auto-pair-markdown": "마크다운 표기법을 자동으로 페어링", "option-auto-pair-markdown-description": "굵게 또는 기울임꼴 기호를 자동으로 쌍으로 만듭니다.", "option-smart-indent-lists": "스마트 들여쓰기", "option-smart-indent-lists-description": "들여쓰기 및 목록 기호를 자동으로 처리합니다.", "option-fold-heading": "제목 접기", "option-fold-heading-description": "제목 아래의 모든 텍스트를 폴드합니다.", "option-fold-indent": "들여쓰기 접기", "option-fold-indent-description": "목록과 같은 동일한 수준의 들여쓰기 부분을 접을 수 있습니다.", "option-default-new-tab-view": "새 탭을 위한 기본 화면", "option-default-new-tab-view-description": "새로운 마크다운 탭을 열때 기본 화면", "option-default-new-tab-view-editing": "편집 화면", "option-default-new-tab-view-reading": "읽기 화면", "option-default-editing-mode": "기본 편집 모드", "option-default-editing-mode-description": "새 창이 시작되는 기본 편집 모드를 선택하세요.", "option-default-editing-mode-source": "소스 모드", "option-default-editing-mode-live-preview": "라이브 미리 보기", "option-show-line-number": "행 번호 표시", "option-show-line-number-description": "여백에 줄 번호를 표시합니다.", "option-indentation-guide": "들여쓰기 가이드 보기", "option-indentation-guide-description": "시각적 안내를 위해 글머리 기호 사이의 수직 관계선을 표시합니다.", "option-use-tabs": "탭 사용", "option-use-tabs-description": "\"Tab\" 키를 누를 때 탭을 사용하여 들여쓰기를 허용합니다. 공백을 사용하려면 이 설정을 사용하지 않도록 설정하세요.", "option-tab-size": "탭 크기", "option-tab-size-description": "탭을 나타내는 공백 수를 결정합니다.", "option-rtl": "오른쪽 -> 왼쪽 (RTL)", "option-rtl-description": "텍스트를 오른쪽 가로로 표시하도록 설정합니다.", "option-auto-convert-html": "HTML 자동 변환", "option-auto-convert-html-description": "웹페이지에서 붙여넣기 및 드래그&드롭할 때 HTML을 마크다운으로 자동 변환합니다. 변환하지 않고 붙여넣으려면 Ctrl/Cmd+ Shift+V를 사용하세요.", "option-vim-key-bindings": "Vim 키 설정", "option-vim-key-bindings-description": "소스 편집기에서 Vim의 키 바인딩을 사용할 수 있습니다.", "option-vim-key-bindings-mobile": "모바일 기기에서 이 설정은 기기별로 설정되며 구성 파일을 통해 동기화되지 않습니다.", "option-emacsy-keys": "레거시 Emacs 스타일 키 바인딩(macOS)", "option-emacsy-keys-description": "Emacs 스타일의 탐색 키를 추가합니다. macOS에서는 표준이지만 일부 키 조작과 간섭할 수 있습니다.", "label-confirm-enable-vim": "Vim 모드 시작 확인", "label-vim-warning": "Vim 모드는 효율적인 텍스트 편집을 위한 것이지만 직관적이지 못할 수가 있습니다. Vim에 익숙하시지 않다면, Obsidian이 제대로 작동하지 않는다고 느끼실 수도 있습니다.", "label-vim-test": "Vim 사용법을 알고 있는지 확인하려면 저장하지 않고 Vim을 종료하는 명령을 입력하세요.", "label-vim-your-answer": "정답:", "placeholder-enter-command": "명령 입력…", "button-confirm-enable-vim": "Vim 모드 사용", "msg-vim-mode-enabled": "올바른 명령입니다. Vim 모드가 활성화되었습니다.", "msg-vim-mode-not-enabled": "명령이 잘못되었습니다. 보호를 위해 Vim 모드는 비활성화된 상태로 유지됩니다.", "msg-vim-mode-please-enter-command": "Vim 모드를 활성화하는 명령을 입력합니다.", "option-legacy-editor": "레거시 편집기 사용", "option-legacy-editor-description2": "레거시 편집기는 곧 더 이상 사용되지 않습니다. 현재 유지 보수가 진행 중이 아니며 버그 수정과 같은 노력은 향후 진행되지 않습니다.", "label-legacy-deprecation": "새 편집기 사용 가능", "label-legacy-deprecation-1": "Obsidian은 더 강력하고 사용하기 쉬운 새로운 편집기를 개발했습니다.", "label-legacy-deprecation-2": "현재 레거시 편집기를 사용하고 있는 것 같습니다. 꼭 새 편집기를 사용해 보세요.", "label-legacy-deprecation-choice": "어떤 모드를 사용합니까?", "label-live-preview-description": "더 현대적인 WYSIWYG 경험을 얻으세요.", "label-source-mode-description": "원래 마크다운을 구문 강조표시로 확인할 수 있습니다.", "button-start-new-editor": "새로운 편집기로 시작" }, "file": { "name": "파일 및 링크", "option-confirm-file-deletion": "파일 삭제 확인", "option-confirm-file-deletion-description": "파일을 삭제할 때 확인 메시지를 표시할지 여부를 결정합니다.", "option-delete-destination": "삭제된 파일", "option-delete-destination-description": "삭제한 파일을 처리하는 방법을 결정합니다.", "option-choice-system-trash": "시스템 휴지통으로 이동", "option-choice-vault-trash": "Obsidian 휴지통(.trash 폴더)으로 이동", "option-choice-permanent-delete": "영구 삭제", "option-always-update-links": "내부 링크를 항상 업데이트", "option-always-update-links-description": "파일 및 프롬프트의 이름을 바꿀 때 링크를 자동으로 업데이트할지 여부를 결정합니다.", "option-new-note-location": "새 노트를 만들 위치", "option-new-note-location-description": "새로 만든 노트를 넣을 위치를 결정합니다. 플러그인 설정으로 덮어씁니다.", "option-choice-vault-root": "보관소의 최상위 폴더", "option-choice-current-folder": "현재 파일과 동일한 폴더", "option-choice-specified-folder": "아래에 지정된 폴더", "option-new-file-folder-path": "새 노트를 만들 폴더", "option-new-file-folder-path-description": "새로 만든 노트는 이 폴더에 저장됩니다. 플러그인 설정으로 덮어씁니다.", "option-use-wiki-links": "[[wikilink]] 사용", "option-use-wiki-links-description": "마크다운 형식의 링크나 이미지 대신 [[링크]] 및![[이미지]] 형식의 위키링크를 자동으로 생성합니다. 이 옵션을 사용하지 않도록 설정 그러면 마크다운 형식의 링크가 생성됩니다.", "option-show-unsupported-files": "모든 파일 확장명 인식", "option-show-unsupported-files-description": "모든 확장명의 파일 표시 됩니다.", "option-link-autocompleted-format": "새로 만드는 링크 형식", "option-link-autocompleted-format-description": "내부 링크를 자동으로 생성할 때 어떤 형식으로 링크를 만들지 결정합니다.", "option-choice-shortest-linktext": "가능하면 최단 경로", "option-choice-relative-path": "파일에 대한 상대 경로", "option-choice-absolute-path": "보관소의 절대 경로", "option-new-attachment-location": "새 첨부 파일을 만들 위치", "option-new-attachment-location-description": "새로 만든 첨부 파일은 이 폴더에 저장됩니다.", "option-choice-subdirectory": "현재 폴더의 하위 폴더", "option-attachment-folder-path": "첨부 파일 폴더 경로", "option-attachment-folder-path-description": "새로 만든 첨부 파일은 이 폴더에 저장됩니다. 드래그 앤 드롭 및 붙여넣기로 만든 이미지와 오디오 녹음 파일 등이 포함됩니다.", "option-attachment-subfolder-path": "하위 폴더 이름", "option-attachment-subfolder-path-description": "현재 파일이 \"vault/folder\"에 있고 하위 폴더의 이름을 \"attachments\"로 설정한 경우 첨부 파일은 \"vault/ folder/attachments\"에 저장됩니다.", "option-attachment-subfolder-path-placeholder": "첨부 파일", "option-excluded-files": "제외 파일", "option-excluded-files-desc": "제외 파일에 설정한 파일은 빠른 스위처, 링크 서제스트, 그래프 보기 등의 다양한 위치에서 숨겨지거나 후보로 어려워집니다.", "label-no-excluded-filters-applied": "현재 제외 필터가 적용되지 않았습니다. 아래에 추가하세요.", "label-excluded-filters-applied": "현재 다음 필터와 일치하는 파일이 제외되었습니다.", "label-excluded-filter": "필터", "placeholder-excluded-filter": "파일 경로 또는 \"/regex/\" 입력…" }, "appearance": { "name": "테마", "option-base-theme": "기본 테마", "option-base-theme-description": "Obsidian의 기본 테마를 골라주세요.", "option-accent-color": "강조 색상", "option-accent-color-description": "앱 전체에 사용되는 강조 색상을 선택합니다.", "dark-theme": "다크", "light-theme": "라이트", "system-theme": "시스템 테마 적용", "option-font": "글꼴", "option-advanced": "고급 옵션", "option-interface-font": "인터페이스 글꼴", "option-interface-font-description": "Obsidian의 모든 기능에 사용할 기본 글꼴을 설정합니다.", "option-text-font": "텍스트 글꼴", "option-text-font-description": "편집 및 읽기 보기에 사용할 글꼴을 설정합니다.", "option-monospace-font": "모노스페이스 글꼴", "option-monospace-font-description": "코드 블록이나 프론트 매터와 같은 장소에서 사용할 글꼴을 설정합니다.", "label-single-font-currently-in-effect": " 현재 적용 중인 글꼴:", "label-multiple-fonts-currently-in-effect": "현재 다음 글꼴이 적용되었습니다.", "option-font-placeholder": "글꼴 이름 입력…", "label-no-custom-font-set": "현재 맞춤 글꼴이 적용되지 않았습니다. 아래에 추가하세요.", "label-font-applied": "해당 목록은 시스템에서 사용 가능한 첫 번째 글꼴이 적용됩니다.", "msg-font-not-found": "해당 글꼴은 시스템에서 감지되지 않았습니다.", "msg-font-found": "해당 글꼴은 시스템에서 감지되었습니다.", "label-font-name": "글꼴 이름", "option-community-themes": "커뮤니티 테마 열기", "option-community-themes-description": "커뮤니티에서 개발한 테마를 탐색하고 사용할 수 있습니다.", "button-browse-community-themes": "탐색", "option-font-size": "글꼴 크기", "option-font-size-description": "글꼴 크기는 픽셀 단위이며 편집기 및 미리 보기 표시에 영향을 줍니다.", "option-font-size-action": "글꼴 크기 빠른 조정", "option-font-size-action-description": "Ctrl+Scroll 또는 트랙패드에서 핀치 및 줌 제스처를 사용하여 글꼴 크기를 조정할 수 있습니다.", "option-themes": "테마", "option-manage-themes-description": "커뮤니티 테마를 탐색하고 설치된 테마를 관리합니다.", "option-theme-button-manage": "관리", "option-choice-none": "없음", "option-native-menus": "네티티브 메뉴", "option-native-menus-desc": "앱 전체의 메뉴는 운영 체제와 일치합니다. 테마의 영향을 받지 않습니다.", "button-reload-themes": "테마 다시 불러오기", "msg-reloaded-themes": "맞춤 CSS 테마를 다시 불러오기했습니다.", "button-open-themes-folder": "테마 폴더 열기", "option-css-snippets": "CSS 스니펫", "label-no-css-snippets-found": "스니펫 폴더에서 CSS 스니펫을 찾을 수 없습니다.", "no-snippet-description": "CSS 스니펫은 \"{{path}}\"에 저장됩니다.", "button-reload-snippets": "스니펫 다시 불러오기", "button-open-snippets-folder": "스니펫 폴더 열기", "msg-reloaded-snippets": "CSS 스니펫을 다시 불러오기했습니다.", "option-toggle-snippet-description": "\"{{path}}\" CSS 스니펫을 적용합니다.", "label-installed-themes": "설치된 테마", "label-screenshot-unavailable": "스크린샷을 가져올 수 없습니다.", "label-default-theme": "기본값", "tooltip-click-to-enlarge": "확대하려면 클릭", "button-update": "업데이트", "label-currently-selected": "선택 중", "option-frame-style": "창 프레임 스타일", "option-frame-description": "Obsidian 창의 제목 표시줄 스타일을 결정합니다. 적용하려면 완전히 다시 시작해야 합니다.", "option-frame-hidden": "숨김 (기본)", "option-frame-obsidian": "Obsidian 프레임", "option-frame-native": "네이티브 프레임", "option-configure-ribbon": "리본 메뉴", "option-configure-ribbon-desc": "내비게이션 바에 있는 리본 메뉴에 어떤 명령이 보일지 설정합니다", "option-mobile-quick-ribbon-item": "리본 아이템으로 빠른 접근", "option-mobile-quick-ribbon-item-desc": "내비게이션 메뉴의 리본 아이템을 터치 시에 리본 아이템이 활성화 됩니다. 터치 후 홀드하면 메뉴가 표시됩니다.", "button-configure": "설정", "label-additional-ribbon-items": "다른 리본 아이템", "label-modal-configuration": "리본 설정", "label-modal-configuration-desc": "리본에 나타날 아이템을 선택하세요. 드래그로 순서를 변경할 수 있습니다.", "option-show-view-header": "탭 타이틀바 표시", "option-show-view-header-desc": "모든 탭의 상단에 헤더를 표시합니다.", "msg-updates-found": "{{count}}개의 테마를 업데이트할 수 있습니다.", "msg-updates-found_plural": "{{count}}개의 플러그인을 업데이트할 수 있습니다.", "button-check-for-updates": "업데이트 확인", "button-view-updates": "화면 업데이트", "button-update-all-themes": "모든 테마 업데이트", "label-current-themes": "현재 커뮤니티 테마", "label-currently-installed": "현재 {{count}}개의 테마가 설치되어 있습니다.", "label-currently-installed_plural": "현재 {{count}}개의 테마가 설치되어 있습니다." }, "hotkeys": { "name": "단축키", "prompt-filter": "필터…", "tooltip-delete-hotkey": "단축키 삭제", "label-waiting-for-hotkey-press": "키를 누르십시오", "tooltip-restore-default": "기본값 복원", "tooltip-customize-command": "명령 사용자 지정", "tooltip-hotkey-single-conflict": "해당 단축키는 \"{{command}}\"와 충돌합니다", "tooltip-hotkey-multiple-conflicts": "해당 단축키는 {{count}}개의 명령과 충돌합니다", "label-blank-hotkey": "공백" }, "about": { "name": "Obsidian 정보", "label-commercial-license": "상용 라이센스", "label-license-key": "라이센스 키", "license-key-placeholder": "여기에 라이센스 키 입력", "label-activate-license": "정품 인증", "button-activate": "인증", "label-unknown-version": "버전 알 수 없음", "label-current-version": "현재 버전:", "label-install-version": "(설치 프로그램 버전: {{version}})", "label-up-to-date": "앱은 최신 버전입니다!", "label-read-changelog": "변경 내역 보기.", "label-manual-update-required": "최신 기능 지원 및 최신 보안 패치를 받으려면 Obsidian 설치 관리자의 주요 업데이트가 필요합니다. 새 Obsidian을 수동으로 다운로드한 후 다시 설치하십시오.", "label-download": "다운로드", "label-new-version-ready": "최신 버전을 설치할 수 있습니다.", "label-relaunch-to-update": "업데이트를 위해 다시 시작하세요.", "label-disabled-updates": "업데이트가 사용 중지되었습니다.", "label-checking-for-updates": "업데이트 확인 중…", "button-relaunch": "재부팅", "button-check-for-updates": "업데이트 확인", "option-auto-update": "자동 업데이트", "option-auto-update-description": "앱이 업데이트를 확인하지 못하도록 하려면 이 옵션을 사용 중지하세요.", "option-get-help": "도움말 가져오기", "option-get-help-description": "Obsidian 사용에 대한 도움말을 가져옵니다.", "button-open": "열기", "option-language": "언어", "option-language-description": "표시 언어 변경.", "option-insider-build": "내부자 빌드 가져오기", "option-insider-build-description": "새로운 기능을 사용하려면 내부자 빌드로 자동 업데이트를 사용하도록 설정하세요. 빌드는 최첨단이며 불안정할 수 있습니다.", "option-advanced": "고급 설정", "option-hw-acceleration": "하드웨어 가속", "option-hw-acceleration-description": "하드웨어 가속을 활성화하고 Obisdian의 동작을 더욱 가볍게 하기 위해 GPU를 사용합니다.", "option-hw-acceleration-warning": "해당 옵션을 사용 중지시 앱 성능이 크게 저하됩니다.", "option-config-location": "설정 폴더 우선순위 전환", "option-config-location-description": "기본 설정 폴더 대신 다른 설정 폴더를 사용합니다. 폴더 이름은 점으로 시작해야 합니다.", "option-config-location-warning": "설정 폴더는 점으로 시작하는 유효한 이름이어야 합니다.", "label-license": "라이센스", "label-your-commercial-license-key": "당신의 상용 라이센스 키는 \"{{key}}\"입니다.", "label-commercial-license-info": "\"{{company}}\"에서 {{seats}}명을 등록했습니다. {{expiry}}까지 유효합니다.", "label-validating-commercial-license": "검증 중…", "label-invalid-commercial-license": "해당 라이센스는 유효하지 않습니다:", "button-remove-commercial-license": "삭제", "option-catalyst": "카탈리스트 라이센스", "option-catalyst-desc": "현재 {{tier}}카탈리스트 라이선스를 사용하고 있습니다. Obsidian에 지원해 주셔서 감사합니다!", "option-catalyst-desc-no-license": "현재 카탈리스트 라이선스를 보유하고 있지 않습니다. 카탈리스트 라이선스는 Obsidian 개발 지원을 위한 일회성 기부입니다.", "label-app": "앱" }, "account": { "name": "계정", "option-your-account": "내 계정", "option-your-account-desc": "현재 다음 계정으로 로그인되어 있습니다. {{name}} ({{email}})", "option-your-account-desc-no-login": "현재 로그인하지 않았습니다. 계정은 Obsidian Sync, Obsidian 퍼블리시 및 Catalyst insider 빌드에만 필요합니다.", "button-manage-settings": "설정 관리", "label-insider": "내부자(insider)", "label-supporter": "서포터(supporter)", "label-vip": "VIP", "button-upgrade-catalyst": "업그레이드", "option-commercial-license": "상용 라이센스", "option-commercial-license-desc": "상업 목적으로 Obsidian을 사용하는 경우 상용 라이센스가 필요할 수 있습니다.", "button-purchase": "구매", "button-log-out": "로그아웃", "label-log-in": "로그인", "label-sign-up": "회원가입", "label-email": "이메일 주소", "placeholder-email": "이메일 주소는…", "label-password": "비밀번호", "placeholder-password": "비밀번호는…", "button-login": "로그인", "message-empty-email": "이메일을 입력해주세요.", "message-invalid-email": "이메일을 확인해주세요.", "message-empty-password": "비밀번호를 입력해주세요.", "message-login-failed": "로그인에 실패했습니다. 이메일과 비밀번호를 다시 확인해주세요.", "label-no-account": "계정을 없으신가요?", "link-sign-up-now": "회원가입" }, "core-plugin": { "plugin-list": "플러그인 목록", "option-search-plugin": "코어 플러그인 검색", "option-search-plugin-description": "플러그인 이름이나 설명문으로 플러그인을 찾습니다.", "placeholder-search-plugin": "플러그인 검색…" }, "third-party-plugin": { "name": "커뮤니티 플러그인", "option-restricted-mode": "제한 모드", "option-restricted-mode-description": "제한 모드가 사용 중지되었습니다. 커뮤니티 플러그인을 사용 중지하려면 이 설정을 사용 설정하세요.", "button-turn-on": "활성화", "option-browse-community-plugins": "커뮤니티 플러그인", "option-browse-community-plugins-description": "최고의 커뮤니티에서 개발한 타사 플러그인을 찾아서 설치합니다.", "button-browse": "탐색", "label-exit-restricted-mode": "제한 모드 종료", "label-exit-restricted-mode-description-1": "커뮤니티 플러그인은 설치한 다른 소프트웨어와 같이 잠재적으로 데이터 무결성 및 보안 문제를 일으킬 수 있습니다.", "label-exit-restricted-mode-description-2": "플러그인 보안은 우리에게 중요하기 때문에 다음을 수행하고 있습니다.", "label-exit-restricted-mode-description-3": "노력에 관계없이 커뮤니티 플러그인이 악용될 가능성이 여전히 약간 있습니다.", "label-code-review": "초기 코드 검토", "label-code-review-desc": "플러그인은 상점에 등장하기 전에 Google 팀에서 초기 코드 검토를 받습니다.", "label-open-source": "오픈 소스", "label-open-source-desc": "대부분의 플러그인은 Github에서 오픈 소스로 게시되며 코드를 사용자가 직접 확인할 수 있습니다.", "label-peer-audit": "동료 감사", "label-peer-audit-desc": "우리는 서로를 살펴보는 대규모 개발자 커뮤니티가 있습니다.", "label-report-mechanism": "리포트 체계", "label-report-mechanism-desc": "사용자 리포트에 따라 결함이 있는 플러그인에 대해 살펴보고 삭제합니다.", "label-exit-restricted-mode-disable-confirmation": "제한 모드를 종료하고 커뮤니티 플러그인을 활성화하시겠습니까? 제한 모드를 종료하기 전에 데이터 백업을 만드는 것이 좋습니다.", "label-learn-more": "플러그인 보안에 대해 자세히 알아보기", "button-turn-on-community-plugins": "커뮤니티 플러그인 사용", "label-trust-author": "해당 보관소의 작성자를 신뢰하시겠습니까?", "label-trust-author-description-1": "해당 보관소를 처음 여는 데 일부 플러그인이 함께 제공됩니다.", "label-trust-author-description-2": "해당 보관소가 다른 사람으로부터 얻은 경우 개발자의 알 수없는 플러그인이 보안 위험을 초래할 수 있음을 유의하십시오.", "label-trust-author-description-3": "해당 보관소의 작성자를 완전히 신뢰하지 않는 경우 제한 모드 상태를 유지하고 이 보관소에서 플러그인이 실행되지 않도록 하는 것이 좋습니다.", "button-enable-plugins": "작성자를 신뢰하고 플러그인 사용", "button-dont-trust-author": "보관소를 제한 모드로 탐색", "placeholder-community-plugins": "플러그인 검색…", "msg-failed-load-plugins": "커뮤니티 플러그인을 불러올 수 없습니다.", "label-installed": "설치됨", "button-install": "설치", "button-enable": "활성화", "button-disable": "비활성화", "button-copy-share-link": "공유 링크 복사", "button-donate": "기부하기", "label-no-results-found": "결과를 찾을 수 없습니다.", "msg-failed-to-load-manifest": "플러그인 매니페스트를 불러오지 못했습니다.", "label-version": "버전: {{version}}", "label-currently-installed-version": "(현재 설치 버전: {{version}})", "label-by-author": "개발자", "label-repository": "리포지토리:", "label-last-update": "최근 업데이트: ", "tooltip-view-last-update": "최근 업데이트 보기", "label-unsupported": "해당 플러그인은 사용 중인 기기를 지원하지 않습니다.", "button-update": "업데이트", "label-no-readme": "해당 플러그인에는 README 파일이 없습니다.", "msg-installing-plugin": "플러그인 \"{{name}}\" 설치 중...", "msg-failed-to-install-plugin": "플러그인 \"{{name}}\" 설치에 실패했습니다.", "msg-successfully-installed-plugin": "플러그인 \"{{name}}\"을(를) 설치했습니다.", "label-installed-plugins": "설치된 플러그인", "button-reload-plugins": "플러그인 다시 불러오기", "msg-reloaded-third-party-plugins": "서드파티 플러그인을 다시 로드했습니다.", "label-uninstall": "제거", "label-uninstall-plugin": "플러그인 제거", "label-uninstall-plugin-confirmation": "해당 플러그인을 제거하시겟습니까? 제거 시 플러그인의 폴더가 삭제됩니다.", "button-open-plugins-folder": "플러그인 폴더 열기", "button-check-for-updates": "업데이트 확인", "button-update-all-plugins": "모두 업데이트", "label-current-plugins": "현재 설치된 플러그인", "label-currently-installed": "현재 {{count}}개의 플러그인이 설치되어 있습니다.", "label-currently-installed_plural": "현재 {{count}}개의 플러그인이 설치되어 있습니다.", "label-debug-startup-time": "시작 시 디버그", "label-debug-startup-time-description": "앱을 시작할 때 각 플러그인을 초기화시 걸리는 시간을 메시지로 표시합니다.", "msg-no-updates-found": "업데이트할 항목이 없습니다.", "msg-updates-found": "{{count}}개의 플러그인에서 업데이트를 찾았습니다.", "msg-updates-found_plural": "{{count}}개의 플러그인에서 업데이트를 찾았습니다.", "msg-update-plugin": "버전 {{version}}으로 업데이트합니다.", "option-search-installed-plugin": "설치된 플러그인 찾기", "option-search-installed-plugin-description": "설치된 플러그인을 이름이나 설명문으로 필터링합니다.", "placeholder-search-installed-plugin": "플러그인 검색…", "show-installed-only": "설치된 항목만 보기", "label-donate-modal-title": "{{name}}를 지원하기 위해 기부하세요", "label-donate-modal-text1": "플러그인 개발자는 열정으로 놀라운 것들을 만들어내는 커뮤니티 봉사자입니다. 이 플러그인이 유용하다고 생각하면 개발을 지원해주세요.", "label-donate-modal-text2": "여러분의 기부금은 100% 플러그인 개발자에게 전달됩니다. Obsidian은 수수료를 부과하지 않습니다. 그러나 개발자가 선택한 플랫폼에서 수수료를 부과할 수 있습니다.", "label-donate-modal-text3": "당신의 자비로운 지원에 감사드립니다!", "label-support-this-plugin": "이 플러그인을 지원하세요:", "label-search-summary": "{{pluginCount}}개의 플러그인:", "label-by-popularity": "다운로드 순", "label-by-released": "최근 출시 순", "label-by-updated": "최근 업데이트 순", "label-alphabetical": "알파벳 순", "label-last-updated": "{{time}}에 업데이트됨" }, "mobile-toolbar": { "name": "모바일 툴바", "option-configure-quick-action": "모바일 빠른 작업 설정", "option-configure-quick-action-description": "위에서 풀다운할 때 트리거할 명령을 구성합니다. 현재 명령은 \"{{command}}\"로 설정되어 있습니다.", "button-configure": "설정", "placeholder-select-quick-action": "빠른 작업 선택…", "manage-toolbar-options": "도구 모음 옵션 관리", "option-internal-link": "내부 링크 추가", "option-internal-embed": "내장 추가", "option-tag": "태그 추가", "option-heading": "제목 전환", "option-strikethrough": "취소선 전환", "option-highlight": "하이라이트 전환", "option-code": "코드 전환", "option-blockquote": "블록 인용구 전환", "option-markdown-link": "마크다운 링크 추가", "option-bullet-list": "불릿 목록 전환", "option-numbered-list": "순서 목록 전환", "option-indent-list": "들여쓰기", "option-unindent-list": "내어쓰기", "option-undo": "실행 취소", "option-redo": "다시 실행", "option-move-caret-up": "위로 이동", "option-move-caret-down": "아래로 이동", "option-move-caret-left": "왼쪽으로 이동", "option-move-caret-right": "오른쪽으로 이동", "option-first-line": "시작 행으로 이동", "option-last-line": "마지막 줄로 이동", "option-toggle-keyboard": "키보드 전환", "option-configure-toolbar": "모바일 툴바 설정 열기", "option-added-options": "추가 옵션", "option-more-toolbar-options": "다른 툴바 옵션", "option-attach": "첨부 파일 추가", "option-add-command": "전역 명령 추가", "option-add-command-description": "도구 모음에 추가할 전역 명령을 선택합니다." } }, "editor": { "search": { "placeholder-find": "검색", "placeholder-replace": "바꾸기", "label-previous": "이전", "label-next": "다음", "label-all": "전체 검색", "label-exit-search": "검색 종료", "label-replace": "바꾸기", "label-replace-all": "모두 바꾸기" }, "link-suggestion": { "label-type-hash": "#을 입력하면", "label-link-heading": "제목에 연결할 수 있습니다", "label-type-block": "^를 입력하면", "label-link-block": "블록에 연결할 수 있습니다", "label-type-pipe": "|를 입력하면", "label-change-display-text": "보이는 텍스트를 변경할 수 있습니다", "label-no-match-found": "일치하는 것을 찾을 수 없습니다" }, "spellcheck": { "no-suggestion": "사제스천이 없습니다…", "add-to-dictionary": "사전에 추가" }, "menu": { "edit-link": "편집 링크" }, "heading-suggestion": { "label-no-heading": "제목을 찾을 수 없습니다", "label-heading-level": "제목 {{level}}" }, "print-modal": { "title": "PDF로 내보내기", "caption": "\"{{filename}}\"을 다음 설정으로 PDF로 내보냅니다.", "setting-page-size": "페이지 크기", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "파일이름에 제목 포함", "setting-landscape": "가로", "setting-margin": "여백", "setting-margin-default": "기본값", "setting-margin-minimal": "최소", "setting-margin-none": "없음", "setting-downscale-percent": "배율", "button-export-to-pdf": "PDF로 내보내기" }, "link-popover": { "tooltip-follow-link": "링크를 따라가기", "tooltip-open-link": "링크 열기", "tooltip-search-tag": "태그 찾기" } }, "interface": { "embed-cannot-find": "찾을 수 없습니다:", "embed-open-in-default-app-tooltip": "기본 앱으로 열기", "empty-sidebar": "사이드바가 비었습니다, 창을 여기로 끌어주세요.", "sidebar-expand": "펴기", "sidebar-collapse": "접기", "msg-fail-to-save-file": "파일 \"{{filepath}}\"을(를) 저장하지 못했습니다.{{message}}.", "no-file": "파일 없음", "msg-file-changed": "\"{{file}}\"이(가) 외부에서 수정되었습니다. 변경 사항을 자동으로 병합합니다.", "switch-vault": "다른 보관소 열기", "help": "도움말", "settings": "설정", "drag-to-rearrange": "드래그하여 순서 변경", "msg-switched-to-read": "기본 보기 모드를 읽기 보기로 전환했습니다.", "msg-switched-to-edit": "기본 탐색 모드를 편집기로 변경했습니다.", "msg-upgrade-installer": "해당 기능을 사용하려면 Obsidian 웹 사이트에서 제공하는 최신 설치 프로그램을 사용하여 다시 설치하세요.", "tooltip-restore-default-settings": "기본 설정으로 되돌리기", "label-copy": "클립보드에 복사하기", "copied_generic": "클립보드에 복사됨", "copied": "{{item}}을 클립보드에 복사했습니다.", "url": "URL", "msg-open-file-through-uri": "파일 \"{{path}}\"을(를) 열었습니다.", "msg-file-not-found-through-uri": "파일 \"{{name}}\"을(를) 찾을 수 없습니다.", "delete-action-short-name": "삭제", "msg-indexing": "Obsidian이 보관소의 색인을 생성 중입니다.\n이 작업은 한 번만 수행됩니다.\n일부 기능은 이 작업이 완료될 때까지 사용할 수 없습니다.", "msg-indexing-complete": "인덱싱이 완료되었습니다.", "msg-sandbox-vault": "이것은 샌드박스 보관소입니다.\n이 보관소의 변경 내용은 손실됩니다.", "label-enter-to-create": "Enter 키로 생성", "label-update-available": "업데이트 사용 가능", "label-debug-info": "디버그 정보", "button-learn-more": "자세히 알아보기", "button-not-now": "지금은 하지 마세요", "button-add": "추가", "button-manage": "관리", "label-new-tab": "새 탭", "msg-tab-busy": "해당 탭은 현재 사용 중입니다. 나중에 다시 시도해 주세요", "empty-state": { "no-file-open": "열린 파일이 없습니다.", "create-new-file": "새 파일 생성", "go-to-file": "파일로 이동", "see-recent-files": "최근 파일 보기", "close": "닫기", "unknown-pane-title": "플러그인이 더 이상 활성화되지 않음", "unknown-pane-desc": "해당 창({{type}})을(를) 생성한 플러그인이 더 이상 없습니다." }, "menu": { "edit-view": "편집(Ctrl/Cmd+클릭으로 새 창에서 편집)", "read-view": "현재 보기: 읽기", "switch-to-edit-view": "수정하려면 클", "switch-to-read-view": "읽으려면 클릭", "mod-click-open-new-tab": "{{key}}+클릭하여 새 탭에서 열기", "find": "검색…", "replace": "바꾸기…", "edit": "편집", "preview": "미리 보기", "more-options": "옵션", "close": "닫기", "close-others": "다른 탭 닫기", "close-right": "오른쪽 탭 닫기", "pin": "핀", "unpin": "핀 해제", "unlink-tab": "탭 링크 해제", "link-tab": "탭으로 링크...", "toggle-source-mode": "보안 모드", "toggle-reading-view": "읽기 화면", "delete-file": "파일 삭제", "create-file": "파일 생성", "open-link": "링크 열기", "open-in-new-tab": "새 탭으로 열기", "open-to-the-right": "오른쪽에 열기", "copy-url": "URL 복사", "close-current-tab": "현재 탭 닫기", "copy": "복사", "cut": "잘라내기", "paste": "붙여넣기", "paste-as-plain-text": "일반 텍스트로 붙여넣기", "select-all": "모두 선택", "rename-heading": "제목 이름 바꾸기…", "rename-blockid": "블록 ID를 이름 바꾸기…", "open-in-new-window": "새 창에서 열기", "move-to-new-window": "새 창으로 이동", "open-in-browser": "브라우저에서 열기", "stack-tabs": "스택 탭", "unstack-tabs": "탭 스택 해제" }, "tooltip": { "click-to-expand": "펼치려면 클릭", "click-to-collapse": "접으려면 클릭", "alias": "별칭", "not-created-yet": "아직 작성되지 않았습니다. 작성하려면 선택하십시오" }, "start-screen": { "label-version": "버전", "option-open-folder-as-vault": "보관소 폴더 열기", "option-open-folder-as-vault-description": "마크다운 파일의 폴더를 선택합니다.", "option-create-vault": "새 보관소 생성", "option-create-vault-description": "폴더에 새로운 Obsidian 보관소를 만듭니다.", "option-connect-obsidian-sync": "Obsidian Sync 보관소 열기", "option-connect-obsidian-sync-description": "원격 보관소에 동기화를 설정합니다.", "option-new-vault-name": "보관소 이름", "option-new-vault-name-description": "보관소 이름을 지정합니다.", "option-new-vault-location": "위치", "option-new-vault-location-description": "새 보관소 위치를 지정합니다.", "label-new-vault-location-preview": "새 보관소는 다음 위치에 있습니다.", "option-reveal-vault-in-explorer": "시스템 탐색기에서 보기", "option-reveal-vault-in-explorer-mac": "파인더에서 보기", "option-rename-vault": "보관소 이름 바꾸기…", "msg-error-rename-exists": "동일한 이름의 보관소가 이미 있습니다.", "msg-error-nested": "자신의 하위 폴더로 이동할 수 없습니다.", "msg-error-rename-open": "현재 열려 있는 보관소의 이름을 바꿀 수 없습니다.", "msg-rename-failed": "보관소의 이름을 바꾸지 못했습니다.", "msg-rename-success": "보관소의 이름을 변경했습니다.", "option-move-vault": "보관소 이동…", "msg-move-select-dest": "대상 폴더를 선택하세요.", "msg-error-move-exists": "대상 폴더에 이미 보관소가 있습니다.", "msg-error-move-open": "현재 열려 있는 보관소를 이동할 수 없습니다.", "msg-move-failed": "보관소를 이동하지 못했습니다.", "msg-move-success": "보관소 이동에 성공했습니다.", "option-remove": "목록에서 제거", "button-quick-start": "빠른 시작", "button-open": "열기", "button-browse": "탐색", "button-connect": "연결", "button-create-vault": "생성", "button-back": "이전으로 돌아가기", "msg-empty-vault-name": "보관소 이름을 정하세요.", "msg-invalid-folder": "폴더를 지정하세요.", "msg-failed-to-create-vault": "보관소를 만들 수 없습니다.", "msg-failed-to-create-vault-at-location": "해당 위치에 보관소를 만들 수 없습니다. 다른 위치와 사용 권한을 확인하세요.", "msg-error-failed-to-open-vault": "열 수 없습니다.", "msg-error-remove-current-open-vault": "현재 열려 있는 보관소를 삭제할 수 없습니다.", "option-get-help": "도움말 얻기", "option-user-email": "이메일", "placeholder-your-email": "이메일 주소 입력…", "option-user-password": "비밀번호", "placeholder-your-password": "비밀번호 입력…", "button-sign-in": "로그인", "button-setup": "설정", "option-connect-vault-desc": "사용 중인 기기에 동기화된 보관소를 만듭니다.", "tooltip-own-vault": "사용자 소유 원격 보관소입니다.", "tooltip-shared-vault": "공유된 원격 보관소입니다." }, "drag-and-drop": { "insert-link-here": "여기에 링크 삽입", "insert-links-here": "여기에 링크 삽입", "move-into-folder": "\"{{folder}}\"로 이동", "star-this-file": "해당 파일 즐겨찾기 추가", "star-these-files": "해당 파일 즐겨찾기 추가", "open-in-this-tab": "해당 탭에서 열기", "open-as-tab": "새 탭으로 열기" }, "window": { "maximize": "최대화", "minimize": "최소화", "restore-down": "원본 크기로 되돌리기", "close-window": "창 닫기", "go-back": "뒤로", "go-forward": "앞으로" }, "start-up": { "loading-obsidian": "Obsidian 불러오는 중…", "obsidian-load-error": "Obsidian을 불러오는 중에 오류가 발생했습니다.", "button-reload-app": "앱 다시 불러오기", "button-reload-app-in-safe-mode": "안전 모드로 앱 다시 불러오기", "button-open-another-vault": "다른 보관소 열기", "loading-components": "구성 요소 불러오기 중…", "loading-plugins": "플러그인 불러오는 중…", "loading-vault": "보관소 불러오는 중…", "msg-failed-to-load-vault": "보관소를 불러오지 못했습니다.", "loading-cache": "캐시를 불러오는 중…", "loading-workspace": "작업 공간 불러오는 중…" }, "mobile": { "action-import": "보관소로 가져오기", "action-choose-file-to-insert": "삽입할 파일 선택", "action-insert-text-into-file": "{{filename}}에 텍스트 삽입", "action-insert-link-into-file": "{{filename}}에 링크 삽입", "msg-importing": "가져오는 중…", "msg-import-success": "가져오기가 성공했습니다.", "msg-failed-to-import-file": "{{filename}} 파일을 가져오지 못했습니다.", "msg-back-again-to-exit": "종료하려면 뒤로를 다시 누르십시오." }, "help-screen": { "label-official-help-site": "공식 도움말 사이트", "label-official-help-site-desc": "Obsidian 공식 도움말 문서를 읽을 수 있습니다. 문서는 다국어로 사용할 수 있습니다.", "action-visit": "방문", "label-discord-chat": "Discord 채팅", "label-discord-chat-desc": "Discord는 전세계에서 모이는 탁월한 Obsidian 사용자들과 채팅할 수 있는 최고의 장소입니다.", "action-join": "참가", "label-forum": "공식 포럼", "label-forum-desc": "사용자 간의 도움이나 기능 요청, 버그 보고서, 지식 관리에 대한 토론 등을 할 수 있습니다.", "label-sandbox-vault": "샌드박스 보관소", "label-sandbox-vault-desc": "다양한 기능을 사용해 볼 수 있습니다. 이 보관소의 변경사항은 저장되지 않습니다." } }, "commands": { "save-file": "현재 파일 저장", "follow-cursor-link": "커서 아래 링크를 따라가기", "open-cursor-link-in-new-tab": "새 탭에서 커서 아래 링크 열기", "open-cursor-link-to-the-right": "오른쪽 커서 아래 링크 열기", "open-cursor-link-in-new-window": "새 창에서 커서 아래 링크 열기", "navigate-tab-above": "상단 탭 그룹으로 이동", "navigate-tab-below": "하단 탭 그룹으로 이동", "navigate-tab-left": "좌측 탭 그룹으로 이동", "navigate-tab-right": "우측 탭 그룹으로 이동", "toggle-pin": "고정핀 켜기/끄기", "split-right": "오른쪽 분할", "split-down": "아래쪽 분할", "toggle-stacked-tabs": "스탭 탭 전환", "navigate-back": "뒤로", "navigate-forward": "앞으로", "use-dark-mode": "다크 모드 사용", "use-light-mode": "라이트 모드 사용", "change-theme": "테마 변경", "search-current-file": "현재 파일 검색", "search-replace-current-file": "현재 파일 찾기 및 바꾸기", "open-settings": "설정 열기", "open-help": "도움말 열기", "toggle-edit": "편집/읽기 보기 전환", "toggle-source-mode": "라이브 미리보기/소스 모드 전환", "delete-current-file": "현재 파일 삭제", "new-tab": "새 탭", "close-all-tabs": "모든 탭 닫기", "close-active-tab": "활성 탭 닫기", "close-other-tabs": "다른 탭 닫기", "toggle-left-sidebar": "왼쪽 사이드바 열기/닫기", "toggle-right-sidebar": "오른쪽 사이드바 열기/닫기", "toggle-default-new-tab-mode": "새 탭의 기본 모드 전환", "focus-editor": "에디터에 포커스", "toggle-fold": "현재 행의 펴기/접기", "fold-all": "모든 제목 및 목록 접기", "unfold-all": "모든 제목 및 목록 펼치기", "fold-more": "접기", "fold-less": "펼치기", "swap-line-up": "윗줄과 바꾸기", "swap-line-down": "아랫줄 바꾸기", "remove-heading": "제목 제거", "toggle-heading": "제목 {{level}} 설정", "toggle-bold": "선택된 텍스트 굵게 표시/해제", "toggle-italics": "선택된 텍스트 기울이기/해제", "toggle-highlight": "선택된 텍스트 하이라이트 전환", "toggle-comments": "댓글 켜기/끄기", "insert-link": "링크 삽입", "toggle-spellcheck": "맞춤법 검사 전환", "delete-paragraph": "단락 삭제", "toggle-checklist": "작업 목록 상태 (체크/해제)", "cycle-list-checklist": "글머리 기호/체크박스 순환", "insert-callout": "콜아웃 삽입", "edit-file-title": "파일 제목 편집", "copy-path": "파일 경로 복사", "copy-url": "Obsidian URI 복사", "export-pdf": "PDF로 내보내기", "reload": "저장하지 않고 앱 새로고침", "undo-close-tab": "탭 닫기 실행 취소", "context-menu": "컨텍스트 메뉴를 커서 아래에 보기", "show-debug-info": "디버그 정보 보기", "always-on-top": "창을 항상 맨 위로 보기 토글", "zoom-in": "확대", "zoom-out": "축소", "reset-zoom": "확대 초기화", "toggle-preview": "편집/미리보기 모드 전환", "move-to-new-window": "현재 탭을 새 창으로 이동", "open-in-new-window": "현재 탭을 새 창에서 열기", "rename-current-file": "현재 파일 이름 바꾸기" }, "dialogue": { "label-link-affected": "{{files}}의 {{links}}에 영향이 있습니다.", "msg-updated-links": "{{files}}의 {{links}}을(를) 업데이트했습니다.", "label-update-links": "링크 업데이트", "label-confirm-update-link-to-file": "해당 파일로 연결되는 링크들을 업데이트하시겠습니까?", "button-always-update": "항상 업데이트", "button-just-once": "한 번만 업데이트", "button-do-not-update": "업데이트하지 않음", "label-confirm-deletion": "\"{{filename}}\"을(를) 삭제할 수 있습니까?", "label-move-to-system-trash": "시스템 휴지통으로 이동합니다.", "label-move-to-vault-trash": "Obsidian의 휴지통으로 이동합니다. 휴지통은 보관소의 숨겨진 폴더 \".trash\"에 있습니다.", "label-permanent-delete": "파일은 영구삭제 됩니다.", "label-non-empty-folder": "해당 폴더는 비어 있지 않습니다.", "label-delete-folder-warning": "폴더를 삭제하면 폴더의 모든 파일도 삭제됩니다.", "label-delete-folder": "폴더 삭제", "button-delete": "삭제", "button-delete-do-not-ask-again": "삭제하고 다시 묻지 않음", "label-do-not-ask-again": "다시 묻지 않기", "label-existing-backlink": "현재 노트를 가리키는 {{link}}이(가) 있습니다", "label-existing-backlink_plural": "현재 이 노트를 가르키는 {{links}} 가 있습니다.", "label-delete-file": "파일 삭제", "button-manage": "관리", "button-cancel": "취소", "button-done": "완료", "button-save": "저장", "button-stop": "멈춤", "button-continue": "계속", "preparing-pdf": "PDF 준비…", "label-rename-file": "파일 이름 변경", "label-new-name": "새 이름", "msg-rename-success": "파일 이름을 변경했습니다.", "label-rename-heading": "제목 이름 바꾸기", "label-rename-blockid": "블록 ID 이름 바꾸기" }, "menu-items": { "new-file": "노트 생성", "new-file-to-the-right": "오른쪽에 노트 생성", "new-window": "New Window", "open-switcher": "빠르게 열기…", "open-vault": "보관소 열기…", "close-tab": "탭 닫기", "close-window": "창 닫기", "find": "찾기", "replace": "바꾸기", "insert-callout": "콜아웃", "insert-markdown-link": "마크다운 링크", "insert-wikilink": "링크", "set-heading": "제목 {{level}}", "no-heading": "제목 포맷 해제", "insert-quote": "인용", "export-pdf": "PDF로 내보내기", "toggle-bullet-list": "글머리 기호 목록", "toggle-numbered-list": "번호 매기기 목록", "toggle-checklist": "작업 목록", "toggle-bold": "굵기", "toggle-code": "코드", "toggle-comment": "댓글", "toggle-italics": "기울기", "toggle-highlight": "하이라이트", "toggle-strikethrough": "취소선", "toggle-comments": "댓글", "fold-all": "모두 접기", "unfold-all": "모두 펼치기", "fold-more": "접기", "fold-less": "펼치기", "source-mode": "소스 모드", "reading-view": "읽기 화면", "show-debug-info": "디버그 정보 표시", "navigate-back": "뒤로가기", "navigate-forward": "앞으로가기", "toggle-left-sidebar": "왼쪽 사이드바 열기/닫기", "toggle-right-sidebar": "오른쪽 사이드바 열기/닫기", "split-right": "오른쪽 분할", "split-down": "아래쪽 분할", "release-notes": "노트 리릴즈" }, "plugins": { "name": "플러그인", "file-explorer": { "name": "파일 탐색기", "desc": "보관소의 모든 파일을 볼 수 있습니다.", "action-open": "파일 탐색기 열기", "action-show": "파일 탐색기 보기", "action-create-note": "새 노트 생성", "action-create-note-to-the-right": "오른쪽에 노트 생성", "action-collapse-all": "모두 접기", "action-expand-all": "모두 펼치기", "action-new-note": "새 노트", "action-new-folder": "새 폴더", "action-change-sort": "정렬 순서 변경", "action-reveal-file": "파일 탐색기에서 파일 보기", "action-reveal-active-file": "파일 탐색기에서 활성 파일 보기", "command-move-file": "파일을 다른 폴더로 이동", "action-move-file": "파일 이동", "action-move-folder": "폴더 이동", "action-move-items": "{{count}}개의 항목 이동…", "prompt-type-folder": "폴더 입력…", "label-no-folders": "폴더를 찾을 수 없습니다.", "instruction-navigate": "이동하기", "instruction-move": "옮기기", "instruction-dismiss": "닫기", "label-sort-a-to-z": "파일 이름(알파벳순)", "label-sort-z-to-a": "파일 이름(알파벳 역순)", "label-sort-new-to-old": "업데이트 날짜(최신순)", "label-sort-old-to-new": "업데이트 날짜(오래된 순)", "label-sort-created-old-to-new": "작성일(오래된 순)", "label-sort-created-new-to-old": "작성일(최신순)", "menu-opt-new-note": "새 노트", "menu-opt-new-folder": "새 폴더", "menu-opt-set-attachment-folder": "첨부 문서 폴더로 설정", "menu-opt-rename": "이름 바꾸기", "menu-opt-delete": "삭제", "menu-opt-make-copy": "복사본 생성", "msg-invalid-characters": "파일 이름에는 다음 문자를 사용할 수 없습니다.", "msg-unsafe-characters": "다음 문자가 포함된 파일 이름에서 링크가 제대로 작동하지 않습니다:", "msg-file-already-exists": "동일한 이름의 파일이 있습니다.", "msg-empty-file-name": "파일 이름을 비울 수 없습니다.", "msg-bad-dotfile": "점에서 파일 이름을 시작할 수 없습니다.", "tooltip-modified-time": "업데이트 날짜 및 시간 {{time}}", "tooltip-created-time": "생성 날짜 및 시간 {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "이동", "label-untitled-file": "무제 파일", "label-untitled-folder": "무제 폴더", "msg-set-attachment-folder": "첨부 파일은 앞으로 \"{{path}}\"에 저장됩니다." }, "search": { "name": "검색", "desc": "모든 노트에서 키워드를 찾습니다.", "action-open-search": "모든 파일 찾기", "label-collapse-results": "검색 결과 축소", "label-match-case": "대소문자 구분", "label-explain-search-term": "검색 단어 표시", "label-more-context": "앞뒤로 표시", "prompt-start-search": "입력하여 검색 시작…", "label-match-text": "텍스트 일치:", "label-match-regex": "정규 표현식 일치:", "label-match-exact-text": "정확한 텍스트 포함:", "label-match-all": "다음 모두 일치:", "label-match-any": "다음 중 하나와 일치:", "label-excluding": "제외:", "label-case-sensitive": "대소문자 구분", "label-case-insensitive": "대소문자를 구분 없이", "label-match-file-path": "파일 경로 일치:", "label-match-file-name": "파일 이름 일치:", "label-match-content": "파일 내용 일치:", "label-match-task": "작업과 일치:", "label-match-task-todo": "작업 일치 (todo):", "label-match-task-done": "작업 일치 (done):", "label-match-line": "행과 일치:", "label-match-block": "블록 일치:", "label-match-section": "섹션 일치:", "label-match-tag": "태그와 일치:", "label-no-matches": "일치하는 결과가 없습니다.", "matches-with-count": "… {{count}} 추가 위치에서 일치.", "matches-with-count_plural": "… {{count}} 추가 위치에서 일치.", "label-copy-search-results": "검색 결과 복사", "button-copy-results": "결과 복사", "msg-successfully-copied": "결과가 클립보드에 복사되었습니다.", "option-show-path": "경로 표시", "option-show-path-description": "파일 이름 외에도 파일의 전체 경로를 표시합니다.", "option-link-style": "링크 스타일", "option-link-style-description": "결과를 링크로 변경할 수도 있습니다.", "option-choice-link-style-none": "없음", "option-choice-link-style-wikilink": "위키링크", "option-choice-link-style-markdown-link": "마크 다운링크", "option-list-prefix": "목록의 글머리 기호", "option-list-prefix-description": "결과에 목록의 글머리 기호를 추가할 수도 있습니다.", "option-choice-list-style-none": "없음", "option-choice-list-style-dash": "대시(-)", "option-choice-list-style-asterisk": "별표(*)", "option-choice-list-style-numbered": "번호 포함", "tooltip-clear-search": "검색어 지우기", "label-search-options": "검색 옵션", "tooltip-read-more": "더보기", "label-history": "기록", "tooltip-clear-history": "검색 기록 지우기", "label-path-option-description": "파일 경로 일치", "label-file-name-option-description": "파일 이름과 일치", "label-tag-option-description": "태그 검색", "label-line-option-description": "동일한 행에서 키워드 검색", "label-section-option-description": "동일한 제목으로 키워드 검색", "menu-opt-search-for": "\"{{keyword}}\" 찾기" }, "quick-switcher": { "name": "퀵 스위처", "desc": "키보드에서 손가락을 떼지 않고 파일로 이동할 수 있습니다. Ctrl/Cmd+O로 시작합니다.", "short-name": "스위처", "action-open": "퀵 스위처 열기", "instruction-navigate": "파일 선택", "instruction-open": "파일 열기", "instruction-open-in-new-tab": "새 탭으로 열기", "instruction-open-to-the-right": "오른쪽에 열기", "instruction-create": "생성", "instruction-dismiss": "닫기", "label-no-note-create-new": "노트를 찾을 수 없습니다. Enter 키를 사용하여 새 노트를 만듭니다.", "prompt-type-file-name": "이동/생성하려는 파일 이름 입력…", "label-enter-to-create": "Enter 키로 생성", "tooltip-not-created-yet": "아직 만들지 않았습니다. 만들려면 선택하세요.", "option-show-existing-only": "존재하는 파일만 표시", "option-show-existing-only-description": "작성되지 않은 파일을 표시할지 여부를 결정합니다.", "option-show-attachments": "첨부 파일 보기", "option-show-attachments-desc": "이미지, 동영상, PDF 등의 첨부 파일을 표시할지 여부를 결정합니다.", "option-show-all-file-types": "모든 파일 형식 보기", "option-show-all-file-types-desc": "Obsidian 내에서 열 수 없는 유형의 파일을 포함하여 모든 파일을 표시할지 여부를 결정합니다. 이 파일 유형은 기본 앱에서 열립니다. ." }, "graph-view": { "name": "그래프 뷰", "desc": "노트가 어떻게 연결되어 있는지 그래프로 표시합니다.", "action-open": "그래프 뷰 열기", "action-open-local": "로컬 그래프 열기", "action-copy-screenshot": "스크린샷 복사", "tab-title": "{{displayText}} 그래프", "label-filters": "필터", "prompt-filter-nodes": "파일 찾기…", "option-depth": "깊이", "option-depth-description": "노드를 표시하기 위해 링크를 추적하는 횟수", "option-neighbor-links": "이웃 링크", "option-neighbor-links-description": "노트 사이 링크 전부 보여주기.", "option-forelinks": "나가는 링크", "option-forelinks-description": "다른 파일로 나가는 링크 표시", "option-backlinks": "들어오는 링크", "option-backlinks-description": "다른 파일에서 들어오는 표시", "option-show-tags": "태그", "option-show-tags-description": "태그가 포함된 파일에 연결됨", "option-show-attachments": "첨부파일", "option-show-attachments-description": "파일에 포함된 첨부파일 보기", "option-show-existing-files-only": "존재하는 파일만 표시", "option-show-existing-files-only-description": "선택하면 존재하지 않는 파일에 대한 링크가 표시되지 않습니다", "option-show-orphans": "미연결 노트", "option-show-orphans-description": "다른 파일에서 링크되지 않은 파일도 표시", "label-display": "보기", "option-show-arrows": "화살표", "option-show-arrows-description": "확대했을 때 화살표 표시", "option-text-fade": "텍스트 표시 시작점", "option-node-size": "노드 크기", "option-link-thickness": "링크 두께", "label-forces": "그래프 조절", "option-center-force": "그래피 중력", "option-link-force": "링크 인력", "option-link-distance": "링크 거리", "option-repel-force": "반발력", "tooltip-open-graph-settings": "그래프 설정 열기", "msg-screenshot-copied": "스크린샷이 클립보드에 복사되었습니다.", "label-groups": "그룹", "placeholder-enter-query": "쿼리 입력…", "tooltip-delete-graph": "그룹 삭제", "button-new-group": "새 그룹", "tooltip-click-to-change-drag-to-reorder": "색상을 변경하려면 클릭하세요.\n그룹을 재정렬하려면 드래그하세요", "action-timelapse": "그래프 타임랩스 애니메이션 시작", "tooltip-start-timelapse-animation": "타임랩스 애니메이션 시작", "button-animate-timelapse": "애니메이션 시작" }, "backlinks": { "name": "백링크", "desc": "백링크 (다른 노트의 링크)를 표시하고 다른 노트에서 현재 노트에 연결되지 않은 멘션을 감지하고 상태 표시 줄에 백링크 수를 표시합니다.", "action-open": "백링크 열기", "action-show": "백링크 창 표시", "action-open-for-current": "현재 파일의 백링크 열기", "action-toggle-backlinks-in-document": "문서 내 백링크 전환", "menu-opt-backlinks-in-document": "문서 내 백링크", "label-linked-mentions": "연결된 멘션", "label-no-backlinks": "백링크를 찾을 수 없습니다.", "label-unlinked-mentions": "연결되지 않은 멘션", "label-show-search": "검색 필터 보기", "label-link-button-text": "링크", "tab-title": "{{displayText}}의 백링크", "label-no-unlinked-mentions": "연결되지 않은 멘션을 찾을 수 없습니다.", "ellipsis": "...", "option-backlink-in-document": "문서 내 백링크", "option-backlink-in-document-desc": "새 창을 열 때 기본적으로 문서에 백링크를 표시합니다." }, "outgoing-links": { "name": "나가는 링크", "desc": "나가는 링크(다른 노트에 대한 링크)를 표시하여 현재 노트에서 다른 노트에 연결되지 않은 멘션을 감지합니다.", "action-open": "나가는 링크 열기", "action-show": "나가는 링크 창 열기", "action-open-for-current": "현재 파일의 나가는 링크 열기", "tab-title": "{{displayText}}의 나가는 링크", "label-links": "링크", "label-no-links": "링크를 찾을 수 없습니다", "label-unlinked-mentions": "연결되지 않은 멘션", "tooltip-link-file": "해당 파일 연결", "tooltip-not-created": "아직 생성되지 않았습니다" }, "tag-pane": { "name": "태그 창", "desc": "모든 태그와 사용 빈도를 표시합니다.", "action-show": "태그 창 표시", "label-no-tags": "태그가 없습니다.", "label-sort-by-name-a-to-z": "태그 이름(알파벳순)", "label-sort-by-name-z-to-a": "태그 이름(알파벳 역순)", "label-sort-by-frequency-high-to-low": "빈도(많은 순서)", "label-sort-by-frequency-low-to-high": "빈도(작은 순서)", "action-show-nested-tags": "중첩된 태그 표시", "action-collapse-all": "모두 접기", "action-expand-all": "모두 펼치기" }, "page-preview": { "name": "페이지 미리보기", "desc": "링크에 마우스를 올려놓으면 메모 미리보기를 표시합니다. 편집 모드에서 Ctrl/Cmd를 누른 상태에서 마우스를 올리시면 볼수 있습니다.", "label-empty-note": "\"{{linktext}}\"이(가) 생성되지 않았습니다. 클릭하여 생성합니다.", "label-source-editor": "편집기", "label-source-preview": "미리 보기", "label-source-search": "검색, 백링크, 나가는 링크", "label-require-mod": "페이지 미리보기를 보려면 {{key}} 키를 누른 상태에서 마우스를 올려야 합니다." }, "starred": { "name": "즐겨찾기", "desc": "자주 사용하는 파일과 검색어를 즐겨찾기에 등록합니다.", "action-show": "즐겨찾기 표시", "action-toggle": "현재 파일에 즐겨찾기 추가/제거", "action-toggle-search": "현재 검색에 즐겨찾기 추가/제거", "action-star": "즐겨찾기 등록", "action-unstar": "즐겨찾기 해제", "menu-opt-remove": "해제", "msg-successfully-starred": "{{type}} \"{{title}}\"을 즐겨찾기에 등록했습니다.", "msg-removed-starred": "{{type}} \"{{title}}\"을 즐겨찾기에서 해제했습니다.", "msg-cannot-find-path": "\"{{path}}\"에서 파일을 찾을 수 없습니다." }, "custom-css": { "name": "사용자 정의 CSS", "desc": "보관소에 있는 \"obsidian.css\"를 블러오고 적용합니다.", "setting-community-themes": "커뮤니티 테마", "msg-fetching-themes": "커뮤니티 테마의 데이터를 가져오는 중…", "prompt-filter": "필터…", "label-dark-theme-only": "다크 테마 전용", "label-light-theme-only": "라이트 테마 전용", "label-use": "사용", "label-stop-use": "테마 사용 정지", "label-install-and-use": "설치 및 사용", "label-update": "업데이트", "label-no-readme": "해당 테마는 README 파일을 제공하지 않습니다.", "tooltip-remove-theme": "테마 삭제", "label-visit-on-github": "GitHub에서 보기", "msg-load-error": "커뮤니티 테마를 불러올 수 없습니다. 네트워크 상태를 확인하세요.", "msg-now-using-theme": "{{title}}을 새 CSS 테마로 만들었습니다.", "msg-deleted-theme": "{{title}} 테마가 삭제되었습니다.", "msg-updated-theme": "{{title}} 테마가 업데이트되었습니다.", "label-installed": "설치됨", "label-legacy": "레거시", "button-update-all-themes": "모두 업데이트", "msg-failed-load-themes": "커뮤니티 테마를 불러오지 못했습니다.", "msg-no-updates-found": "테마 업데이트를 찾을 수 없습니다.", "msg-updates-found": "업데이트할 테마 {{count}}개를 찾았습니다.", "msg-updates-found_plural": "업데이트할 테마 {{count}}개를 찾았습니다.", "msg-failed-to-install-theme": "\"{{name}}\" 테마를 설치하지 못했습니다.", "msg-successfully-installed-theme": "\"{{name}}\" 테마를 설치했습니다.", "msg-installing-theme": "\"{{name}}\" 테마를 설치 중 ...", "label-search-summary": "{{themeCount}}개의 테마:", "label-update-available": "업데이트 가능" }, "command-palette": { "name": "명령어 팔레트", "desc": "명령어를 입력하여 기능을 호출합니다. UI를 사용하거나 바로 가기를 기억하지 않고 명령을 사용할 수 있습니다.", "action-open": "명령어 팔레트 열기", "instruction-navigate": "선택", "instruction-use": "사용", "instruction-dismiss": "팔레트 닫기", "label-no-commands": "명령을 찾을 수 없습니다.", "prompt-type-command": "명령 입력…", "label-pinned-commands": "즐겨찾는 명령어", "option-add-new-pin": "즐겨찾기에 새로 추가된 명령어", "option-add-new-pin-description": "검색 쿼리가 입력되지 않은 경우 즐겨찾는 명령어가 맨 위에 표시됩니다." }, "markdown-format-importer": { "name": "마크다운 형식 가져오기", "desc": "다른 앱의 마크다운을 Obsidian 형식으로 변환합니다.", "action-open": "마크다운 형식 가져오기 열기", "option-roam-tag-fixer": "Roam Research 태그 고치기", "option-roam-tag-fixer-description": "\"#tag\" 및 \"#[[tag]]\"을 \"[[tag]]\"로 변환합니다.", "option-roam-highlight-fixer": "Roam Research 하이라이트 고치기", "option-roam-highlight-fixer-description": "\"^^highlight^^\"을 \"==highlight==\"로 변환합니다.", "option-roam-todo-converter": "Roam Research TODO 컨버터", "option-roam-todo-converter-description": "\"{{[[TODO]]}}\"을 \"[ ]\"로 변환합니다.", "option-bear-highlight-fixer": "Bear 하이라이트 고치기", "option-bear-highlight-fixer-description": "\"::highlight::\" 을 \"==highlight==\" 로 변환합니다.", "zettelkasten-link-fixer": "Zettelkasten 링크 고치기", "zettelkasten-link-fixer-description": "\"[[UID]]\" 링크를 전체 \"[[UID File Name]]\"로 변환합니다.", "zettelkasten-link-beautifier": "Zettelkasten 링크 꾸미기", "zettelkasten-link-beautifier-description": "\"[[UID]]\" 링크를 변환하여 \"[[UID File Name|File Name]]\"로 미화합니다.", "msg-all-files-warning": "경고: 가져오기는 현재 파일뿐만 아니라 보관소의 모든 파일을 변환합니다.", "msg-override-files-warning": "파일을 덮어씁니다. 변환하기 전에 모든 파일을 백업하십시오.", "label-start-conversion": "변환 시작", "label-stop": "중지", "label-go-back": "뒤로", "label-done": "완료", "label-processing": "처리 중…", "label-cancelling": "취소 중…", "label-finished": "완료되었습니다!", "label-processed-files": "처리된 파일", "label-modified-files": "변경된 파일", "label-total-replacements": "총 대체" }, "daily-notes": { "name": "데일리 노트", "desc": "데일리 노트를 엽니다. 파일이 없으면 만들 수 있습니다.", "short-name": "데일리", "action-open": "오늘의 데일리 노트 열기", "action-open-previous": "전날 데일리 노트 열기", "action-open-next": "다음날 데일리 노트 열기", "action-insert-text": "데일리 노트에 텍스트 삽입", "action-insert-link": "데일리 노트에 링크 삽입", "msg-fail-format": "데일리 노트를 만들 수 없습니다.\"{{format}}\"해당 올바른 형식이 아닙니다.", "msg-fail-folder": "데일리 노트를 만들 수 없습니다.\"{{folderOption}}\" 폴더를 찾을 수 없습니다.", "msg-fail-template-file": "데일리 노트를 만들 수 없습니다. 템플릿 파일 \"{{template}}\"을(를) 찾을 수 없습니다.", "msg-no-previous": "해당 날짜 이전의 데일리 노트가 없습니다.", "msg-no-next": "해당 날짜 이후의 데일리 노트가 없습니다.", "option-date-format": "날짜 형식", "label-refer-to-syntax": "기타 구문은 다음을 참조하세요.", "label-syntax-link": "포맷 참조", "label-syntax-live-preview": "이런 식으로 표시됩니다.", "option-new-file-location": "새 파일 경로", "option-new-file-location-description": "새로운 데일리 노트를 만들 폴더의 경로입니다.", "option-template": "템플릿 파일 경로", "option-template-description": "템플릿으로 사용할 파일 경로입니다.", "option-open-on-start": "시작 시 데일리 노트 열기", "option-open-on-start-description": "해당 보관소를 열 때 항상 매일 노트를 자동으로 열도록 설정합니다." }, "unique-note-creator": { "name": "유니크 노트 생성자", "desc": "Zettelkasten 및 Slip box와 같은 워크플로에 대해 파일 이름에 고유한 타임스탬프 접두사를 붙여 메모를 만들 수 있습니다.", "short-name": "유니크", "action-create-note": "새로운 유니크 노트 생성", "option-new-file-location": "새 파일 위치", "option-new-file-location-description": "새 유니크 노트를 만들 폴더의 경로입니다.", "msg-folder-not-found": "유니크 노트를 만들 수 없습니다.\"{{folderOption}}\" 폴더를 찾을 수 없습니다.", "option-template-file": "템플릿 파일 위치", "option-template-file-description": "템플릿으로 사용할 파일의 경로입니다.", "option-template-file-placeholder": "예: 폴더 1/노트", "option-id-format": "유니크 접두사 형식", "msg-template-file-not-found": "유니크 노트를 만들 수 없습니다. 템플릿 파일 \"{{template}}\"을(를) 찾을 수 없습니다.", "msg-failed-to-generate": "\"{{format}} 포맷으로 유니크 노트를 만드는데 실패하였습니다" }, "random-note": { "name": "랜덤 노트", "desc": "무작위로 하나의 노트를 엽니다. 되돌아보고 발견할 수 있습니다.", "short-name": "랜덤", "action-open": "랜덤 노트 열기" }, "outline": { "name": "개요", "desc": "현재 파일 및 연결된 창의 개요를 표시합니다.", "action-open": "개요 열기", "action-show": "개요 창 표시", "action-open-for-current": "현재 파일의 개요 열기", "tab-title": "{{displayText}} 개요", "label-no-headings": "제목를 찾을 수 없습니다." }, "word-count": { "name": "단어 갯수", "desc": "상태 표시줄에 단어 갯수를 표시합니다." }, "slides": { "name": "슬라이드", "desc": "마크다운에서 슬라이드를 만듭니다.\"---\"로 구분된 부분이 슬라이드로 분할됩니다.", "action-start": "슬라이드 프레젠테이션 시작" }, "audio-recorder": { "name": "오디오 레코더", "desc": "오디오를 녹음하여 첨부 파일로 저장합니다.", "action-start": "오디오 녹음 시작", "action-stop": "음성 녹음 중지", "action-toggle": "녹음 시작/중지", "msg-access-denied": "마이크 액세스가 거부되었습니다. 환경설정 패널에서 사용하도록 설정하세요.", "msg-pending-grant": "마이크에 녹음을 시작할 수 있는 권한을 부여합니다.", "msg-no-microphone": "마이크가 연결되어 있지 않습니다." }, "open-with-default-app": { "name": "기본 앱에서 열기", "desc": "기본 앱에서 현재 파일을 열 수 있는 버튼을 추가합니다.", "action-open-file": "기본 앱에서 열기", "action-open-file-mobile": "공유", "action-show-in-folder": "폴더에서 보기", "action-show-in-folder-mac": "파인더에서 보기" }, "templates": { "name": "템플릿", "desc": "템플릿 파일 폴더에서 템플릿 내용을 삽입합니다.", "action-insert": "템플릿 삽입", "action-insert-current-date": "현재 날짜 삽입", "action-insert-current-time": "현재 시간 삽입", "option-template-folder-location": "템플릿 폴더 경로", "option-template-folder-location-description": "해당 폴더의 파일을 템플릿으로 사용할 수 있습니다.", "option-template-date-format": "날짜 서식", "option-template-date-format-description": "템플릿 파일의 {{date}}가 다음으로 변환됩니다.", "option-template-date-format-description2": "{{date:YYYY-MM-DD}}를 사용하여 서식을 재정의할 수도 있습니다.", "option-template-time-format": "시간 서식", "option-template-time-format-description": "템플릿 파일의 {{time}}이(가) 다음으로 변환됩니다.", "option-template-time-format-description2": "{{time:HH:mm}}을 사용하여 서식을 덮어쓸 수도 있습니다.", "instruction-navigate": "선택", "instruction-insert": "템플릿 삽입", "instruction-dismiss": "닫기", "msg-no-templates-found": "템플릿을 찾을 수 없습니다", "msg-fail-invalid-folder": "템플릿 목록을 볼 수 없습니다. 템플릿 폴더가 잘못되었습니다.", "msg-fail-folder-not-found": "템플릿 목록을 볼 수 없습니다. 폴더 \"{{folderOption}}\"을 찾을 수 없습니다.", "prompt-type-template": "템플릿 이름 입력…" }, "translucency": { "name": "반투명 창", "desc": "반투명 효과를 사용하여 깊이감을 높입니다. 다크 모드에서 사용하기에 이상적입니다. Linux에서는 지원되지 않습니다." }, "slash-command": { "name": "슬래시 명령", "desc": "편집하는 동안 슬래시를 입력하면 편집기에서 슬래시 명령을 실행할 수 있습니다." }, "editor-status": { "name": "편집기 상태", "desc": "상태 표시줄에 현재 편집기 모드를 표시합니다. 클릭하여 모드를 변경할 수 있습니다.", "read": "독서", "edit-source": "소스 모드", "edit-live-preview": "라이브 미리보기" }, "publish": { "name": "출판", "desc": "Obsidian Publish를 사용하여 인터넷에 노트를 출판합니다.", "action-publish-changes": "변경사항 출판", "label-no-internet-access": "변경사항을 출판하려면 인터넷 접속이 필요합니다.", "label-publish-service-description": "Obsidian Publish는 Obsidian에서 직접 온라인으로 노트를 출판하게 해주는 추가 유료 서비스입니다.", "label-please-login": "출판을 시작하려면 로그인하거나 새 Obsidian 계정을 만드세요.", "label-no-publish-subscription": "Obsidian Publish 구독이 아직 없습니다.", "button-purchase": "구매", "label-manage-sites": "사이트 관리", "label-no-sites": "소유하신 사이트가 없습니다.", "button-choose": "선택", "tooltip-edit-site-id": "사이트 ID 편집", "tooltip-delete-site": "사이트 삭제", "label-delete-site-confirmation": "해당 사이트를 삭제하시겠습니까?", "label-delete-site-details": "사이트는 즉시 및 영구적으로 삭제됩니다.", "label-confirm-delete-site": "삭제될 사이트: \"{{site}}\"", "option-site-id": "사이트 ID", "option-site-id-description": "당신의 사이트는 https://publish.obsidian.md/{site id}입니다. 나중에 변경 가능하며, 소문자, 숫자 및 줄표만 사용할 수 있습니다.", "option-site-id-placeholder": "사이트 ID 선택", "button-create": "생성", "msg-invalid-site-id": "사이트 ID에는 소문자, 숫자 및 줄표만 포함할 수 있습니다.", "msg-site-id-in-use": "해당 사이트 ID가 사용 중입니다. 다른 사이트 ID를 사용해 보세요.", "msg-create-site-issue": "사이트를 만들 때 문제가 발생했습니다.", "label-site-options": "사이트 옵션", "option-site-general": "일반", "option-site-components": "구성 요소", "option-site-appearance": "외형", "option-site-reading-experience": "읽는 방식", "option-site-misc": "다른 사이트 설정", "option-site-name": "사이트 이름", "option-site-name-description": "출판된 사이트 이름. 사이트의 페이지 제목에 표시됩니다.", "option-site-name-placeholder": "귀하의 사이트 이름", "option-home-page-file": "홈페이지 파일", "option-home-page-file-description": "사이트에 처음 방문시 보여지는 페이지입니다.", "option-home-page-file-placeholder": "출판된 파일 선택", "option-logo": "로고", "option-logo-description": "사이트 로고로 사용할 이미지 파일을 선택하세요.", "option-logo-placeholder": "보관소의 이미지…", "option-site-collaboration": "사이트 협업", "option-site-collaboration-desc": "해당 사이트의 공동 작업자를 관리합니다.", "button-manage-collaborators": "관리", "option-theme": "테마", "option-theme-description": "사이트의 기본 색상을 선택합니다.", "option-theme-system": "시스템 테마 적용", "option-show-theme-toggle": "라이트/다크 테마 전환", "option-show-theme-toggle-description": "사이트 방문자가 직접 라이트 테마와 어두운 테마를 전환할 수 있도록 허용합니다.", "option-show-navigation": "네비게이션 표시", "option-show-navigation-description": "공개 사이트의 왼쪽에 출판된 모든 페이지의 목록을 표시합니다.", "option-show-search": "검색바 표시", "option-show-search-description": "방문자가 사이트의 페이지와 제목을 검색할 수 있도록 탐색 상단에 검색창을 표시합니다.", "option-show-graph": "그래프 보기 표시", "option-show-graph-description": "각 페이지에 작은 로컬 그래프를 표시합니다.", "option-show-outline": "목차 표시", "option-show-outline-description": "각 페이지의 제목을 개요로 표시합니다.", "option-show-backlinks": "백링크 보기", "option-show-backlinks-description": "각 페이지 끝에 백링크 섹션을 표시합니다.", "option-sliding-window-mode": "슬라이딩 창 사용", "option-sliding-window-mode-description": "오른쪽의 새 창에서 페이지를 엽니다. 창을 가로로 스크롤할 수 있습니다.", "option-hover-preview-file": "미리보기 표시", "option-hover-preview-file-description": "링크에 커서를 올리면 페이지 미리보기가 표시됩니다.", "option-hide-title": "페이지 제목 숨기기", "option-hide-title-description": "페이지 제목 제목을 숨깁니다. 각 페이지의 시작 부분에 고유한 제목이 있는 경우 유용합니다.", "option-readable-line-length": "읽기 쉬운 행 길이", "option-readable-line-length-description": "최대 줄 길이를 제한합니다. 화면에 표시되는 글은 제한되지만, 긴 문단을 읽기 편해집니다.", "option-site-password": "비밀번호", "option-site-password-description": "사이트 접속을 비밀번호로 제한합니다.", "option-google-analytics": "Google Analytics 추적 코드", "option-google-analytics-description": "사이트에 Google Analytics를 설정합니다. Google Analytics는 맞춤 도메인의 방문자만 사용할 수 있습니다. 허용되는지 확인하세요.", "button-manage-passwords": "관리", "button-save-site-settings": "사이트 설정 저장", "msg-updated-options": "사이트 옵션둘을 업데이트했습니다.", "button-go-back": "뒤로", "label-publishing-to": "출판:", "tooltip-switch-site": "사이트 전환", "button-add-linked": "링크된 파일 추가", "tooltip-add-linked": "현재 선택한 항목이 링크된 모든 파일을 추가합니다.", "msg-added-linked-files": "{{count}개의 링크된 파일이 추가되었습니다.", "msg-added-linked-files_plural": "{{count}}개의 링크된 파일이 추가되었습니다.", "tooltip-open-site-options": "사이트 옵션 변경", "label-no-changes-detected": "변경이 감지되지 않았습니다.", "label-changed-files-to-be-published": "변경점", "label-unchanged-files-already-published": "변경 없음(선택 및 삭제)", "label-file-selected": "선택됨", "button-select-all-files": "모두 선택", "button-deselect-all-files": "모두 선택 취소", "label-new-files-to-be-published": "신규", "button-publish": "출판", "msg-no-permission-to-publish-to-site": "현재 사이트에 출판할 권한이 없습니다.", "msg-select-at-least-one-file": "적어도 하나의 파일을 선택하세요.", "label-upload-changes": "바뀐점 업로드", "button-done": "완료", "button-stop": "중지", "label-status-uploading": "업로드 중", "label-status-to-publish": "출판", "label-status-to-delete": "삭제", "label-status-published": "출판 완료", "label-status-deleted": "삭제됨", "label-status-failed": "실패", "label-status-cancelled": "취소됨", "button-change": "변경", "label-clear-cache": "변경 사항이 사이트에 반영되기까지 최대 몇 분이 걸립니다. 최신 변경사항이 표시되지 않으면 브라우저 캐시를 지워 보세요.", "label-visit-site": "여기에서 사이트를 방문할 수 있습니다:", "msg-something-went-wrong": "오류가 발생했습니다. 자세한 내용은 개발자 콘솔을 확인하세요.", "msg-network-error": "네트워크 오류가 발생했습니다.", "label-manage-passwords": "비밀번호 관리", "label-add-password": "비밀번호 추가", "action-new-password": "새 비밀번호", "label-no-password": "현재 사이트에 비밀번호가 없습니다. 누구나 볼 수 있는 상태입니다.", "label-have-password": "사이트는 비밀번호로 보호됩니다. 여러 비밀번호를 설정한 경우 방문자는 비밀번호 중 하나를 입력하여 사이트에 액세스할 수 있습니다.", "option-password-name": "비밀번호", "option-password-desc": "비밀번호 해시가 안전하게 저장됩니다. 비밀번호를 한 번 설정하면 텍스트로 표시할 수 없습니다.", "option-password-placeholder": "비민번호", "option-nickname-name": "닉네임(선택 사항)", "option-nickname-desc": "비밀번호 사용 및 사용자를 기억할 수 있도록 닉네임을 설정하세요.", "action-add-password": "비밀번호 추가", "label-untitled-password": "타이틀 없는 비밀번호", "label-password-created-time": "{{time}}에 생성", "msg-added-new-password": "새 비밀번호를 추가했습니다.", "option-custom-domain": "사용자 지정 도메인", "option-custom-domain-desc": "https://publish.obsidian.md/{site id} URL 대신 자신의 도메인을 사용합니다.", "option-noindex": "검색 엔진에서 인덱싱을 사용하지 않음", "option-noindex-desc": "검색 엔진이 사이트를 인덱싱하는 것을 방지합니다.", "button-configure": "설정", "label-configure-custom-domain": "사용자 지정 도메인 설정", "option-custom-url-name": "사용자 지정 URL", "option-custom-url-desc": "사이트가 위치될 URL 입니다.", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "사용자 지정 도메인으로 리디렉션", "option-custom-url-redirect-desc": "publish.obsidian.md/id 방문자들을 사용자 지정 도메인으로 자동연결 합니다.", "button-update-custom-domain": "도메인 설정 업데이트", "label-custom-domain-instructions": "더 많은 정보가 필요한 경우 {{link}}을 확인하세요.", "label-custom-domain-link-name": "사용자 지정 도메인 설정 가이드", "label-site-usage": "현재 {{limit}}개의 사이트 중 {{site}}개를 사용중입니다.", "button-add-more-sites": "더 많은 사이트 구매", "label-no-sites-bought": "아직 사이트를 구입하지 않았습니다.", "button-get-site": "사이트 가져오기", "label-manage-sharing": "\"{{name}}\" 공유 관리", "label-sharing-with-users": "해당 사이트는 현재 다음 사용자에게 공유됩니다.", "label-not-sharing": "해당 사이트는 현재 누구에게나 공유되지 않습니다.", "label-invite-pending": "대기 중", "tooltip-remove-user": "사용자 제거", "option-invite-user": "사용자 초대", "placeholder-invite-user": "사용자의 이메일 주소 입력…", "error-email-must-be-valid": "사용자 초대를 위한 유효한 이메일 주소를 입력하세요.", "msg-enable-publish-plugin": "사이트를 탐색하려면 설정 -> 코어 플러그인 항목에서 출판 코어 플러그인을 활성화하십시오.", "label-your-sites": "귀하의 사이트", "label-sites-shared-with-you": "내가 공유한 사이트", "tooltip-leave-site-sharing": "해당 사이트에서 협업 중지", "label-leave-site-confirmation": "협업 중단 확인", "label-leave-site-confirmation-details": "공유된 사이트 목록에서 제거합니다. 이 작업을 실행취소할 수 없습니다.", "label-leave-site-confirmation-details-2": "해당 사이트와의 협업을 다시 시작하려면 사이트 소유자에게 문의하세요.", "button-leave": "떠나다", "label-compare-with-live": "라이브 버전과 비교", "button-use-live-version": "라이브 버전 사용", "label-confirm-override": "로컬 버전 덮어쓰기 확인", "label-confirm-override-1": "로컬 버전을 덮어쓸 수 있습니까?", "label-confirm-override-2": "라이브 버전이 사용되고 로컬 버전이 삭제됩니다. 필요한 경우 백업을 만듭니다.", "button-proceed": "실행", "message-successfully-used-live-version": "로컬 버전을 성공적으로 덮어썼습니다. 라이브 버전을 사용할 수 있습니다.", "label-open-file": "파일 열기", "tooltip-manage-publish-filters": "공개 필터 관리", "option-included-folders": "포함된 폴더", "option-included-folders-desc": "해당 폴더의 파일은 출판 변경사항을 미리 볼 때 자동으로 선택됩니다.", "option-currently-included-folders": "현재 포함된 폴더들:", "option-excluded-folders": "제외 폴더", "option-excluded-folders-desc": "해당 폴더의 파일은 출판 변경사항을 미리 볼 때 표시되지 않습니다. 이 설정은 위에 나열된 폴더보다 우선합니다.", "label-number-of-folders-included": "현재 Obsidian 퍼블리시에는 {{folders}}가 포함되어 있습니다.", "label-number-of-folders-excluded": "현재 Obsidian 퍼블리시가 {{folders}}를 제외하고 있습니다.", "label-manage-included-folders": "포함할 폴더 관리", "label-manage-excluded-folders": "제외 폴더 관리", "label-add-included-folder": "폴더 포함", "label-add-included-folder-desc": "기존 폴더와 생성되지 않은 폴더를 모두 포함할 수 있습니다.", "tooltip-contact-support": "지원팀에 문의하기" }, "workspaces": { "name": "작업 공간", "desc": "작업 공간 레이아웃을 저장하고 불러옵니다.", "action-load-layout": "작업 공간 레이아웃 불러오기", "action-manage-layouts": "작업 공간 레이아웃 관리", "action-save-and-load-layout": "저장하고 다른 작업공간 레이아웃 불러오기", "placeholder-save-current-layout-as": "현재 작업 공간 레이아웃 저장…", "button-save": "저장", "button-load": "불러오기", "tooltip-delete-layout": "레이아웃 삭제", "msg-delete-layout-success": "레이아웃이 성공적으로 삭제되었습니다.", "msg-enter-name": "새 레이아웃의 이름을 입력하세요.", "msg-save-layout-success": "레이아웃이 성공적으로 저장되었습니다.", "label-no-layout-found": "저장된 레이아웃을 찾을 수 없습니다.", "placeholder-type-to-search-layouts": "레이아웃 이름 입력…" }, "sync": { "name": "동기화", "desc": "Obsidian Sync를 통해 파일을 동기화합니다.", "action-view-version-history": "버전 내역 보기", "label-load-more": "더 불러오기", "label-show-diff": "차이점 보기", "label-copy-to-clipboard": "클립보드에 복사", "label-restore-this-version": "해당 버전 복원", "msg-already-latest-version": "현재 버전은 이미 최신입니다.", "msg-restored-version": "{{time}}에서 버전을 성공적으로 복원했습니다.", "label-file-deleted": "해당 파일이 삭제되었습니다", "label-no-earlier-version": "해당 파일에는 이전 버전이 없습니다.", "label-empty-file": "파일 없음", "label-setting-files": "구성 파일", "label-deleted-files": "삭제된 파일", "label-version-history": "버전 기록", "label-click-to-see-history": "삭제된 파일의 버전 기록을 보려면 파일을 클릭하세요.", "label-create-remote-vault": "원격 보관소 생성", "msg-please-enter-password": "비밀번호를 입력하세요.", "msg-vault-name-cannot-be-empty": "보관소 이름을 비울 수 없습니다.", "msg-successfully-created-vault": "원격 보관소 \"{{name}}\"을(를) 만들었습니다.", "label-remote-vault-explanation": "원격 보관소가 장치 간에 보관소를 안전하게 동기화합니다.", "option-vault-name": "보관소 이름", "option-vault-name-desc": "보관소 사용을 기억하기 쉬운 이름을 정하십시오.", "option-vault-name-placeholder": "나의 보관소", "option-use-custom-encryption-password": "엔드 투 엔드 암호화 비밀번호 맞춤설정", "option-use-custom-encryption-password-desc": "해당 옵션을 사용하면 암호화 키를 안전하게 관리할 수 있습니다.", "option-use-custom-encryption-password-desc-warning": "해당 옵션은 나중에 변경할 수 없습니다.", "option-encryption-password": "암호화 암호", "option-encryption-password-desc": "해당 암호는 나중에 변경할 수 없습니다.", "option-encryption-password-desc-warning": "해당 암호를 잊어버리면 모든 원격 데이터를 영원히 사용할 수 없습니다.", "option-encryption-password-desc-2": "이것은 로컬 데이터에 영향을 미치지 않습니다.", "option-encryption-password-placeholder": "비밀번호", "label-enter-encryption-password": "암호화 암호 입력", "button-unlock-vault": "보관소 잠금 해제", "msg-verified-password": "비밀번호 확인에 성공했습니다.", "label-remote-vaults": "원격 보관소", "label-vault-created-time": "작성 날짜 및 시간 {{time}}", "tooltip-delete-remote-vault": "삭제", "tooltip-manage-sharing": "공유 관리", "label-confirm-delete-remote-vault": "삭제된 보관소 확인", "label-confirm-delete-remote-vault-question": "해당 원격 보관소를 삭제하시겠습니까?", "label-confirm-delete-remote-vault-result": "서버의 버전 기록을 포함한 모든 데이터가 삭제됩니다. 로컬 파일에는 영향을 주지 않습니다.", "label-confirm-delete-remote-vault-warning": "해당 실행은 영구적이며 되돌릴 수 없습니다.", "msg-remote-vault-deleted": "{{name}}이(가) 삭제되었습니다.", "button-connect-to-remote-vault": "연결", "button-disconnect-from-remote-vault": "연결 끄기", "label-not-remote-vaults": "원격 보관소를 소유하지 않았습니다.", "button-create-new-remote-vault": "새로운 원격 보관소 만들기", "label-sync-log": "동기 로그", "options-only-show-errors": "오류만 표시", "options-only-show-errors-desc": "오류만 표시하고 다른 로그 항목을 숨깁니다.", "button-copy-sync-log": "동기 로그 복사", "msg-successfully-copied-sync-log": "동기 로그 복사에 성공했습니다.", "button-retry": "재시도", "button-purchase-subscription": "구매", "option-remote-vault": "원격 보관소", "button-choose-remote-vault": "선택", "button-manage-remote-vault": "관리", "option-remote-vault-desc-connected": "현재 \"{{name}}\"의 원격 보관소에 연결되어 있습니다.", "option-remote-vault-desc-not-connected": "현재 어떤 원격 보관소에 연결되어 있지 않습니다.", "option-sync-status": "동기화 상태", "option-sync-status-desc-paused": "현재 Obsidian Sync가 중지되었습니다.", "option-sync-status-desc-running": "현재 Obsidian Sync가 실행 중입니다.", "option-device-name": "장치 이름", "option-device-name-desc": "해당 이름은 동기화 로그에 표시됩니다. 기본 이름을 사용하려면 공백으로 두십시오.", "button-resume": "재개", "button-pause": "중지", "option-view-deleted-files": "삭제된 파일", "option-view-deleted-files-desc": "삭제된 파일을 보고 복원합니다.", "option-sync-log": "동기화 활동", "option-sync-log-desc": "디버깅을 위해 최근 동기화 활동을 탐색합니다.", "button-view": "열람", "button-bulk-restore": "일괄 복원", "button-restore-selected-files": "선택한 파일 복원", "msg-restoring": "복원 중…", "msg-restoring-complete": "`복원이 완료되었습니다. {{succeeded}}에 성공했고 {{failed}}에 실패했습니다.`", "option-over-size": "보관소의 허용 크기", "option-over-size-desc": "보관소는 {{limit}}의 {{size}}입니다.", "msg-largest-files": "최대 크기의 파일을 확인하세요.", "msg-largest-files-desc": "이것은 가장 공백이 있는 원격 파일입니다. 첨부 파일을 삭제한 후 원격 보관소의 공간을 열기 위해 제거 버튼을 사용하세요.", "button-purge-remote": "퍼지", "tooltip-purge-remote": "공간 확보를 위해 원격 보관소에서 삭제된 첨부 파일을 영구적으로 제거합니다.", "msg-purge-complete": "퍼지가 완료되었습니다.", "option-prevent-sleep": "기기의 절전 모드 방지", "option-prevent-sleep-desc": "동기화되지 않은 파일이 남아 있는 경우 기기가 잠자기 상태가 되는 것을 방지합니다.", "option-selective-sync": "선택적 동기화", "option-excluded-folders": "제외 폴더", "option-excluded-folder-desc": "특정 폴더가 동기화되는 것을 방지합니다.", "option-currently-excluded-folders": "현재 다음 폴더가 제외되었습니다.", "button-manage-excluded-folders": "관리", "option-sync-image": "이미지 동기화", "option-sync-image-desc": "다음 확장명의 이미지 파일을 동기화합니다. {{extensions}}", "option-sync-audio": "음성 동기화", "option-sync-audio-desc": "다음 확장자의 오디오 파일을 동기화합니다. {{extensions}}", "option-sync-video": "동영상 동기화", "option-sync-video-desc": "다음 확장명의 동영상 파일을 동기화합니다. {{extensions}}", "option-sync-pdf": "PDF 동기화", "option-sync-pdf-desc": "PDF 파일을 동기화합니다.", "option-sync-unsupported": "다른 모든 유형의 파일 동기화", "option-sync-unsupported-desc": "지원되지 않는 파일 형식을 동기화합니다.", "option-vault-config-sync": "보관소 설정 동기화", "option-view-config-files": "설정 버전 기록", "option-view-config-files-desc": "설정 파일 버전을 보고 복원합니다.", "option-sync-app": "기본 설정", "option-sync-app-desc": "편집기 설정, 파일 및 링크 설정, 사용자 지정 단축키 등의 동기화를 사용하도록 설정합니다.", "option-sync-appearance": "외관 설정", "option-sync-appearance-desc": "다크 모드, 활성 테마, 사용 가능한 스니펫 등의 모양 설정을 동기화할지 여부를 결정합니다.", "option-sync-appearance-data": "테마 및 스니펫", "option-sync-appearance-data-desc": "다운로드된 테마와 스니펫을 동기화할지 여부를 결정합니다. 사용 설정되어 있는지 여부는 모양의 동기화 설정에 따라 다릅니다.", "option-sync-hotkey": "단축키", "option-sync-hotkey-desc": "사용자 지정 단축키를 동기화할지 여부를 결정합니다.", "option-sync-core-plugin": "활성 코어 플러그인 목록", "option-sync-core-plugin-desc": "활성화된 코어 플러그인을 동기화할지 여부를 결정합니다.", "option-sync-core-plugin-data": "코어 플러그인 설정", "option-sync-core-plugin-data-desc": "코어 플러그인 설정을 동기화할지 여부를 결정합니다.", "option-sync-community-plugin": "활성 커뮤니티 플러그인 목록", "option-sync-community-plugin-desc": "활성화된 커뮤니티 플러그인을 동기화할지 여부를 결정합니다.", "option-sync-community-plugin-data": "설치된 커뮤니티 플러그인", "option-sync-community-plugin-data-desc": "설치된 커뮤니티 플러그인(.js 파일, .css 및 manifest.json 파일)과 플러그인 설정을 동기화할지 여부를 결정합니다.", "label-sync-introduction": "Obsidian Sync는 엔드 투 엔드 암호화(E2EE) 및 버전 기록을 위한 애드온 동기화 서비스입니다.", "label-account-required": "동기화를 시작하려면 로그인하거나 Obsidian의 새 계정을 만드세요.", "button-sign-up": "구독", "button-log-in": "로그인", "label-manage-excluded-folders": "제외 폴더 관리", "label-number-of-folders-excluded": "현재 {{folders}}이 동기화에서 제외되었습니다.", "label-add-excluded-folder": "폴더 제외", "label-add-excluded-folder-desc": "기존 폴더와 생성되지 않은 폴더를 모두 제외할 수 있습니다.", "tooltip-remove-excluded-folder": "제외 목록에서 제거", "label-setup-connection": "연결 설정", "label-now-connected-to-vault": "현재 \"{{name}}\"에 연결되어 있습니다.", "button-start-syncing": "동기화 시작", "label-confirm-merge-vault": "보관소 통합 확인", "msg-vault-has-notes": "로컬 보관소에 이미 몇 개의 노트가 있습니다.", "msg-vault-merge-warning": "원격 보관소 \"{{name}}\"에 연결되어 있으면 로컬 보관소의 노트가 원격 보관소의 노트와 통합됩니다. 충돌이 발생하면 최신 버전의 노트가 유지됩니다.", "tooltip-update-setting-on-all-devices": "해당 옵션을 적용하려는 모든 기기에서 이 옵션을 업데이트한 후 앱을 다시 시작하세요.", "label-sharing-with-users": "해당 원격 보관소는 현재 다음 사용자에게 공유됩니다.", "label-not-sharing": "해당 원격 보관소는 현재 누구에게나 공유되지 않습니다.", "label-vaults-shared-with-you": "공유된 보관소", "tooltip-leave-vault-sharing": "해당 보관소에서 공동 작업 중지", "label-leave-vault-confirmation": "보관소 공동 작업 중지 확인", "label-leave-vault-confirmation-details": "나와 공유된 보관소 목록에서 이 보관소가 제거됩니다. 이 작업은 되돌릴 수 없습니다.", "label-leave-vault-confirmation-details-2": "해당 보관소에서 다시 공동 작업을 하려면 보관소 소유자에게 문의하십시오.", "button-leave": "떠나기", "label-require-subscription-to-connect": "해당 보관소에 연결하려면 Obsidian Sync 구독이 필요합니다.", "option-contact-support": "지원팀에 문의하기", "option-contact-support-desc": "Obsidian Sync에서 어떤 문제가 발생시 지원을 받으시려면 support@obsidian.md로 이메일을 보내주십시오. 제출해 주세요.", "button-email-support": "이메일 지원" }, "file-recovery": { "name": "파일 복구", "desc": "예기치 않은 데이터 손실에서 복구하기 위해 최근 스냅샷을 복원할 수 있습니다. 스냅샷은 마크다운 파일에만 저장됩니다.", "action-open": "저장된 스냅샷 열기", "option-interval": "스냅샷 간격", "option-interval-description": "두 개의 스냅샷 사이의 분 단위의 최소 간격.", "option-keep": "기록 기간", "option-keep-description": "스냅샷이 보존되는 일 수입니다.", "option-open-history": "스냅샷", "option-open-history-description": "저장된 스냅샷을 보고 복원합니다.", "button-view-snapshots": "열람", "option-clear": "기록 지우기", "option-clear-description": "모든 스냅샷을 삭제합니다.", "button-clear-history": "클리어", "label-clear-warning": "모든 스냅샷을 삭제하시겠습니까? 스냅샷만 제거됩니다. 보관소의 파일에는 영향을 주지 않습니다.", "msg-clear-complete": "스냅샷이 지워졌습니다.", "label-no-history-found": "스냅샷을 찾을 수 없습니다.", "placeholder-choose-file": "파일 선택…", "label-select-file": "스냅샷을 보려면 왼쪽에서 파일을 선택하세요." }, "note-composer": { "name": "노트 작성기", "desc": "노트를 통합하고 분할하고 리팩토링합니다.", "option-confirm-file-merge": "파일 통합 확인", "option-confirm-file-merge-description": "두 개의 파일을 통합하기 전에 확인 프롬프트를 표시합니다.", "option-split-replacement-text": "이동 후 텍스트", "option-split-replacement-text-description": "선택 텍스트 추출 작업 후 텍스트의 원래 위치에 표시할 내용을 결정합니다.", "option-choice-split-replacement-text-link": "새 파일에 링크", "option-choice-split-replacement-text-embed": "새 파일 포함", "option-choice-split-replacement-text-none": "없음", "option-template-file": "템플릿 파일 위치", "option-template-file-description": "통합 및 추출에 사용할 템플릿 파일을 선택하세요. 사용 가능한 변수: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}} (예: {{date:YYYY-MM-DD}})", "command-merge-file": "현재 파일을 다른 파일로 통합…", "action-merge-file": "전체 파일을 다른 파일로 통합…", "label-no-files": "파일을 찾을 수 없습니다.", "instruction-navigate": "선택", "instruction-merge": "통합", "instruction-create-new": "새로 생성", "instruction-merge-at-top": "노트 상단에 통합", "instruction-dismiss": "노트 작성기 닫기", "prompt-select-file-to-merge": "통합할 파일 선택…", "label-merge-file": "파일 통합", "label-confirm-file-merge": "\"{{file}}\"을 \"{{destination}}\"에 통합하시겠습니까? \"{{file}}\"이(가) 삭제됩니다.", "button-merge": "통합", "button-merge-do-not-ask-again": "통합하여 다음부터 확인하지 않음", "command-split-file": "현재 선택 범위 추출…", "command-extract-heading": "현재 제목을 추출…", "instruction-append": "노트 하단으로 이동", "instruction-prepend": "노트 상단으로 이동", "msg-fail-to-fetch-template": "템플릿 파일을 가져오지 못했습니다. \"{{template}}\"을(를) 찾을 수 없습니다.", "msg-fail-to-find-heading": "제목을 찾지 못했습니다." }, "canvas": { "name": "캔버스", "desc": "무한한 캔버스에서 노트를 배치하고 연결하세요.", "action-add-note": "보관소의 노트 추가", "action-add-media": "보관소의 미디어 추가", "action-add-card": "카드 추가", "action-add-website": "웹페이지 추가", "action-create-group": "그룹 생성", "action-create-with-size": "특정 사이즈로 카드 생성", "action-convert-to-file": "파일로 변환...", "action-drag-to-add-note": "드래그로 보관소의 노트 추가", "action-drag-to-add-media": "드래그로 보관소의 미디어 추가", "action-drag-to-add-card": "드래그로 카드 추가", "action-enable-grid-snapping": "격자 맞춤 활성화", "action-disable-grid-snapping": "격자 맞춤 비활성화", "action-edit-label": "라벨 수정", "action-remove-label": "라벨 제거", "action-search-file": "파일 찾기", "action-set-color": "색상 설정", "action-align": "정렬", "action-align-left": "왼쪽으로 맞춤", "action-align-center": "가로 가운데 맞춤", "action-align-right": "오른쪽으로 맞춤", "action-align-top": "위로 맞춤", "action-align-middle": "세로 가운데 맞춤", "action-align-bottom": "아래로 맞춤", "action-distribute-horizontal-spacing": "가로 균등 배치", "action-distribute-vertical-spacing": "세로 균등 배치", "action-justify-horizontally": "가로 끝 맞춤", "action-justify-vertically": "세로 끝 맞춤", "action-stack-horizontally": "가로로 쌓기", "action-stack-vertically": "세로로 쌓기", "action-stack-grid": "격자 쌓기", "action-export-png": "이미지로 내보내기", "label-export-png-desc": "아래 세팅으로 \"{{title}}\" 라는 이름의 PNG파일을 내보냅니다.", "label-export-png-dimensions": "추정 이미지 크기: {{dimensions}}", "option-export-png-show-logo": "로고 보이기", "option-export-png-show-logo-desc": "옵시디언의 로고가 좌측 하단에 추가됩니다", "option-export-png-zoom": "크기", "option-export-png-zoom-desc": "확대될수록 이미지의 해상도가 높아집니다", "option-export-png-frame": "뷰포트", "option-export-png-frame-desc": "캔버스 전체와 현재 보이는 화면 중 렌더링 할 영역을 선택하세요.", "option-export-png-frame-full": "캔버스 전체", "option-export-png-frame-viewport": "현재 화면", "action-remove": "삭제", "action-narrow": "부분 섹션 선택...", "action-swap-file": "파일 변경...", "action-change-url": "URL 변경...", "action-zoom-to-fit": "화면 맞춤 확대", "action-zoom-to-selection": "선택 맞춤 확대", "action-reload-page": "페이지 다시불러오기", "action-go-to-target": "도착지로 이동", "action-go-to-source": "출발지로 이동", "command-create-new-canvas": "새 캔버스 만들기", "command-new-canvas": "새 캔버스", "instruction-narrow": "제목 선택", "prompt-to-narrow": "제목을 입력하세요", "label-enter-url": "URL을 입력하세요", "label-empty-embed": "\"{{linktext}}\" 를 찾을 수 없습니다.", "prompt-add-text": "텍스트 추가...", "prompt-start-search": "찾기 위해 검색하세요...", "label-canvas-help": "캔버스 도움말", "label-no-heading": "제목 없음 (전체)", "label-pan": "이동", "label-pan-horizontal": "수평 이동", "label-zoom": "확대/축소", "label-select-all": "전체 선택", "label-add-remove-selection": "선택 추가 및 삭제", "label-clone-card": "카드 복제", "label-constrain-movement-axis": "이동 축 제한", "label-disable-drag-snapping": "드래그 중 스내핑 비활성화", "label-remove-card": "카드 삭제", "label-drag-from-below": "아래에서 드래그하거나 더블클릭", "label-space-drag-pan": "스페이스 + 드래그로 이동하세요", "label-scroll-to-zoom": "스크롤로 확대/축소", "label-untitled-group": "무제 그룹" } }, "nouns": { "word-with-count": "{{count}} 단어", "word-with-count_plural": "{{count}} 단어", "character-with-count": "{{count}} 문자", "character-with-count_plural": "{{count}} 문자", "link-with-count": "{{count}} 링크", "link-with-count_plural": "{{count}} 링크", "file-with-count": "{{count}} 파일", "file-with-count_plural": "{{count}} 파일", "folder-with-count": "{{count}} 폴더", "folder-with-count_plural": "{{count}} 폴더", "backlink-with-count": "{{count}} 백링크", "backlink-with-count_plural": "{{count}} 백링크", "site-with-count": "{{count}} 사이트", "site-with-count_plural": "{{count}} 사이트", "plugin-with-count": "{{count}} 플러그인", "plugin-with-count_plural": "{{count}} 플러그인", "theme-with-count": "{{count}} 테마", "theme-with-count_plural": "{{count}} 테마" } }{ "setting": { "options": "ഓപ്ഷൻസ്", "plugin": "പ്ലഗ്-ഇൻ ", "builtin-plugins": "Core plugins", "plugin-options": "Plugin options", "folder-path-example-placeholder": "Example: folder 1/folder 2", "file-path-example-placeholder": "Example: folder/note", "msg-restart-required": "Changing this option requires a restart to take effect.", "editor": { "name": "Editor", "section-general": "General", "section-behavior": "Behavior", "section-display": "Display", "option-spellcheck": "Spell check", "option-spellcheck-description": "Turns on the spell checker. Currently only works for English (US).", "spellcheck-languages": "Spellcheck languages", "spellcheck-languages-description": "Choose the languages for the spellchecker to use.", "spellcheck-languages-mac-description": "The native spellchecker will automatically detect the language being used for you on macOS.", "spellcheck-dict": "Spellcheck dictionary", "spellcheck-dict-empty": "The spellcheck dictionary is empty.", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "Readable line length", "option-readable-line-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-strict-line-break": "Strict line breaks", "option-strict-line-break-description": "In preview mode, ignore single line breaks according to the Markdown specs. Turn this off for single line breaks to show in preview.", "option-show-frontmatter": "Show frontmatter", "option-show-frontmatter-description": "In preview mode, show frontmatter as a code block. Turn off to hide frontmatter section.", "option-auto-pair-brackets": "Auto pair brackets", "option-auto-pair-brackets-description": "Pair brackets and quotes automatically.", "option-auto-pair-markdown": "Auto pair Markdown syntax", "option-auto-pair-markdown-description": "Pair symbols automatically for bold and italics.", "option-smart-indent-lists": "Smart indent lists", "option-smart-indent-lists-description": "Take care of indentation and list marker for you.", "option-fold-heading": "Fold heading", "option-fold-heading-description": "Let you fold everything under a heading.", "option-fold-indent": "Fold indent", "option-fold-indent-description": "Let you fold a portion of the same indentation, such as lists.", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Editing view", "option-default-new-tab-view-reading": "Reading view", "option-default-editing-mode": "Default editing mode", "option-default-editing-mode-description": "The default editing mode a new pane will start with.", "option-default-editing-mode-source": "Source mode", "option-default-editing-mode-live-preview": "Live Preview", "option-show-line-number": "Show line number", "option-show-line-number-description": "Show line number in the gutter.", "option-indentation-guide": "Show indentation guides", "option-indentation-guide-description": "Show vertical relationship lines between bullet points for visual guidance.", "option-use-tabs": "Use tabs", "option-use-tabs-description": "Use tabs to indent when pressing the \"Tab\" key. Set this to off to use spaces.", "option-tab-size": "Tab size", "option-tab-size-description": "Number of spaces a tab is equivalent to.", "option-rtl": "Right-to-left (RTL)", "option-rtl-description": "Sets the text direction of notes to display in right-to-left.", "option-auto-convert-html": "Auto convert HTML", "option-auto-convert-html-description": "Automatically convert HTML to Markdown when pasting and drag-and-drop from webpages. Use Ctrl/Cmd+Shift+V to paste without conversion.", "option-vim-key-bindings": "Vim key bindings", "option-vim-key-bindings-description": "Let you use Vim key bindings in the source editor.", "option-vim-key-bindings-mobile": "On mobile devices, this setting is per-device and is not synchronized through the config file.", "option-emacsy-keys": "Legacy Emacs-style key bindings for macOS", "option-emacsy-keys-description": "Allows you to use the additional Emacs-style navigation keys, which are standard on macOS, but may interfere with some key operations.", "label-confirm-enable-vim": "Confirm entering Vim mode", "label-vim-warning": "Vim mode is for efficient text editing but can be quite counter-intuitive. If you're not familiar with Vim, this option might make it look like Obsidian has stopped working.", "label-vim-test": "To verify that you know your way around Vim, please enter the command to quit Vim without saving below:", "label-vim-your-answer": "Your answer", "placeholder-enter-command": "Enter command...", "button-confirm-enable-vim": "Let me enable Vim", "msg-vim-mode-enabled": "Command is correct. Vim mode now enabled.", "msg-vim-mode-not-enabled": "Command is incorrect. Vim mode remains disabled to protect you.", "msg-vim-mode-please-enter-command": "Please enter the command to enable Vim mode", "option-legacy-editor": "Use legacy editor", "option-legacy-editor-description2": "The legacy editor will be deprecated soon. It is currently no longer maintained, and as such, bugs will no longer be addressed.", "label-legacy-deprecation": "New editor is here", "label-legacy-deprecation-1": "Obsidian now has a brand new editor that's more robust and accessible.", "label-legacy-deprecation-2": "It seems you're still using the legacy editor, and we think you'll enjoy the new editor.", "label-legacy-deprecation-choice": "Which mode would you like to use?", "label-live-preview-description": "A more modern, what-you-see-is-what-you-get experience.", "label-source-mode-description": "See raw Markdown with syntax highlighting.", "button-start-new-editor": "Start new editor" }, "file": { "name": "File", "option-confirm-file-deletion": "Confirm file deletion", "option-confirm-file-deletion-description": "Whether you want to get prompted to confirm file deletion.", "option-delete-destination": "Deleted files", "option-delete-destination-description": "What to do with files after you delete them.", "option-choice-system-trash": "Move to system trash", "option-choice-vault-trash": "Move to Obsidian trash (.trash folder)", "option-choice-permanent-delete": "Permanent delete", "option-always-update-links": "Always update internal links", "option-always-update-links-description": "Whether to automatically update links after renaming a file or prompt.", "option-new-note-location": "New note default location", "option-new-note-location-description": "Where to put newly created notes. Plugin settings will override this.", "option-choice-vault-root": "Vault root", "option-choice-current-folder": "Same folder as the file is in", "option-choice-specified-folder": "In the folder specified below", "option-new-file-folder-path": "Folder to create new notes in", "option-new-file-folder-path-description": "Newly created notes will appear under this folder. Plugin settings will override this.", "option-use-wiki-links": "Use [[Wikilinks]]", "option-use-wiki-links-description": "Auto-generate Wikilinks for [[links]] and ![[images]] instead of Markdown links and images. Disable this option to generate Markdown links instead.", "option-show-unsupported-files": "Detect all file extensions", "option-show-unsupported-files-description": "Show files with any extension even if Obsidian can't open them natively, so that you can link to them and see them in File Explorer and Quick Switcher.", "option-link-autocompleted-format": "New link format", "option-link-autocompleted-format-description": "What links to insert when auto generating internal links.", "option-choice-shortest-linktext": "Shortest path when possible", "option-choice-relative-path": "Relative path to file", "option-choice-absolute-path": "Absolute path in vault", "option-new-attachment-location": "Default location for new attachments", "option-new-attachment-location-description": "Where newly added attachments are placed.", "option-choice-subdirectory": "In subfolder under current folder", "option-attachment-folder-path": "Attachment folder path", "option-attachment-folder-path-description": "Newly created attachment files will appear here. That includes images created via drag and drop or pasting, and audio recordings.", "option-attachment-subfolder-path": "Subfolder name", "option-attachment-subfolder-path-description": "If your file is under \"vault/folder\", and you set subfolder name to \"attachments\", attachments will be saved to \"vault/folder/attachments\".", "option-attachment-subfolder-path-placeholder": "attachments", "option-excluded-files": "Excluded files", "option-excluded-files-desc": "Excluded files will be either hidden or less noticeable in various places, such as Quick Switcher, link suggestion, and Graph View.", "label-no-excluded-filters-applied": "No excluded filter is applied right now. Add one below.", "label-excluded-filters-applied": "Files matching the following filters are currently excluded:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Enter path or \"/regex/\"..." }, "appearance": { "name": "Appearance", "option-base-theme": "Base theme", "option-base-theme-description": "Choose Obsidian’s default color scheme.", "option-accent-color": "Accent color", "option-accent-color-description": "Choose the accent color used throughout the app.", "dark-theme": "Dark", "light-theme": "Light", "system-theme": "Adapt to system", "option-font": "Font", "option-advanced": "Advanced", "option-interface-font": "Interface font", "option-interface-font-description": "Set base font for all of Obsidian.", "option-text-font": "Text font", "option-text-font-description": "Set font for editing and reading views.", "option-monospace-font": "Monospace font", "option-monospace-font-description": "Set font for places like code blocks and frontmatter.", "label-single-font-currently-in-effect": " Currently applied font: ", "label-multiple-fonts-currently-in-effect": " The following fonts are currently applied:", "option-font-placeholder": "Enter font name...", "label-no-custom-font-set": "No custom font is applied right now. Add one below.", "label-font-applied": "The first font from this list that is available on your system will be applied.", "msg-font-not-found": "This font is not detected on your system.", "msg-font-found": "This font is detected on your system.", "label-font-name": "Font name", "option-community-themes": "Open community themes", "option-community-themes-description": "Preview and use amazing themes created by the community.", "button-browse-community-themes": "Browse", "option-font-size": "Font size", "option-font-size-description": "Font size in pixels that affects editor and preview.", "option-font-size-action": "Quick font size adjustment", "option-font-size-action-description": "Adjust the font size using Ctrl + Scroll, or using the trackpad pinch-zoom gesture.", "option-themes": "Themes", "option-manage-themes-description": "Manage installed themes and browse community themes.", "option-theme-button-manage": "Manage", "option-choice-none": "None", "option-native-menus": "Native menus", "option-native-menus-desc": "Menus throughout the app will match the operating system. They will not be affected by your theme.", "button-reload-themes": "Reload themes", "msg-reloaded-themes": "Reloaded custom CSS themes.", "button-open-themes-folder": "Open themes folder", "option-css-snippets": "CSS snippets", "label-no-css-snippets-found": "No CSS snippets found.", "no-snippet-description": "CSS Snippets are stored in \"{{path}}\".", "button-reload-snippets": "Reload snippets", "button-open-snippets-folder": "Open snippets folder", "msg-reloaded-snippets": "Reloaded CSS snippets.", "option-toggle-snippet-description": "Apply CSS snippet at \"{{path}}\".", "label-installed-themes": "Installed themes", "label-screenshot-unavailable": "Screenshot unavailable", "label-default-theme": "Default", "tooltip-click-to-enlarge": "Click to enlarge", "button-update": "Update", "label-currently-selected": "Selected", "option-frame-style": "Window frame style", "option-frame-description": "Determines the styling of the title bar of Obsidian windows. Requires a full restart to take effect.", "option-frame-hidden": "Hidden (default)", "option-frame-obsidian": "Obsidian frame", "option-frame-native": "Native frame", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Show tab title bar", "option-show-view-header-desc": "Display the header at the top of every tab.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "button-check-for-updates": "Check for updates", "button-view-updates": "View updates", "button-update-all-themes": "Update all", "label-current-themes": "Current community themes", "label-currently-installed": "You currently have {{count}} theme installed.", "label-currently-installed_plural": "You currently have {{count}} themes installed." }, "hotkeys": { "name": "Hotkeys", "prompt-filter": "Filter...", "tooltip-delete-hotkey": "Delete hotkey", "label-waiting-for-hotkey-press": "Press hotkey...", "tooltip-restore-default": "Restore default", "tooltip-customize-command": "Customize this command", "tooltip-hotkey-single-conflict": "This hotkey conflicts with \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "This hotkey conflicts with {{count}} other commands", "label-blank-hotkey": "Blank" }, "about": { "name": "About", "label-commercial-license": "Commercial license", "label-license-key": "License key", "license-key-placeholder": "Your license key...", "label-activate-license": "Activate license", "button-activate": "Activate", "label-unknown-version": "Unknown", "label-current-version": "Current version: ", "label-install-version": "(Installer version: {{version}})", "label-up-to-date": "Your app is up to date!", "label-read-changelog": "Read the changelog.", "label-manual-update-required": "To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.", "label-download": "Download", "label-new-version-ready": "A new version is ready to be installed. ", "label-relaunch-to-update": "Relaunch the app to update.", "label-disabled-updates": "Updates are disabled.", "label-checking-for-updates": "Checking for updates...", "button-relaunch": "Relaunch", "button-check-for-updates": "Check for updates", "option-auto-update": "Automatic updates", "option-auto-update-description": "Turn this off to prevent the app from checking for updates.", "option-get-help": "Get help", "option-get-help-description": "Get help on using Obsidian.", "button-open": "Open", "option-language": "Language", "option-language-description": "Change the display language.", "option-insider-build": "Receive insider builds", "option-insider-build-description": "Auto-update to insider builds to try out new features. Note that these builds are bleeding edge and might be less stable.", "option-advanced": "Advanced", "option-hw-acceleration": "Hardware Acceleration", "option-hw-acceleration-description": "Turns on Hardware Acceleration, which uses your GPU to make Obsidian smoother.", "option-hw-acceleration-warning": "If you turn this off, app performance will be severely degraded.", "option-config-location": "Override config folder", "option-config-location-description": "Use a different config folder than the default one. Must start with a dot.", "option-config-location-warning": "Config location must be a valid folder name that starts with a dot.", "label-license": "License", "label-your-commercial-license-key": "Your commercial license key is \"{{key}}\".", "label-commercial-license-info": "Registered to \"{{company}}\" for {{seats}} users. Valid until {{expiry}}.", "label-validating-commercial-license": "Validating...", "label-invalid-commercial-license": "License invalid: ", "button-remove-commercial-license": "Remove", "option-catalyst": "Catalyst license", "option-catalyst-desc": "You currently have the {{tier}} Catalyst license. Thanks for your support!", "option-catalyst-desc-no-license": "You don't have a Catalyst license right now. Catalyst license is a one-time donation to support Obsidian development.", "label-app": "App" }, "account": { "name": "Account", "option-your-account": "Your account", "option-your-account-desc": "You're currently signed in {{name}} ({{email}}).", "option-your-account-desc-no-login": "You're not logged in right now. An account is only needed for Obsidian Sync, Obsidian Publish, and Catalyst insider builds.", "button-manage-settings": "Manage settings", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Commercial license", "option-commercial-license-desc": "If you use Obsidian for commercial purpose, you may need to get a commercial license.", "button-purchase": "Purchase", "button-log-out": "Log out", "label-log-in": "Log in", "label-sign-up": "Sign up", "label-email": "Email", "placeholder-email": "Your email...", "label-password": "Password", "placeholder-password": "Your password...", "button-login": "Login", "message-empty-email": "Email cannot be empty.", "message-invalid-email": "Email is not valid.", "message-empty-password": "Password cannot be empty.", "message-login-failed": "Login failed, please double check your email and password.", "label-no-account": "Don't have an account? ", "link-sign-up-now": "Sign up now" }, "core-plugin": { "plugin-list": "Plugin list", "option-search-plugin": "Search core plugins", "option-search-plugin-description": "Filter plugins by name or description.", "placeholder-search-plugin": "Search plugins..." }, "third-party-plugin": { "name": "Community plugins", "option-restricted-mode": "Restricted mode", "option-restricted-mode-description": "Restricted mode is off. Turn on to disable community plugins.", "button-turn-on": "Turn on", "option-browse-community-plugins": "Community plugins", "option-browse-community-plugins-description": "Browse and install third-party plugins made by our amazing community.", "button-browse": "Browse", "label-exit-restricted-mode": "Exit Restricted Mode", "label-exit-restricted-mode-description-1": "Community plugins, like any other software you install, could potentially cause data integrity and security issues.", "label-exit-restricted-mode-description-2": "Plugin security is important to us. Here's what we do:", "label-exit-restricted-mode-description-3": "Despite our efforts, there is still a small chance that a community plugin might misbehave.", "label-code-review": "Initial code review", "label-code-review-desc": "Plugins undergo an initial code review by our team before they appear in the store.", "label-open-source": "Open source", "label-open-source-desc": "Most plugins are open source on GitHub, so you can inspect the code yourself.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We have a large community of developers who watch out for each other.", "label-report-mechanism": "Report mechanism", "label-report-mechanism-desc": "We follow up and remove faulty plugins upon user report.", "label-exit-restricted-mode-disable-confirmation": "Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.", "label-learn-more": "Learn more about plugin security", "button-turn-on-community-plugins": "Turn on community plugins", "label-trust-author": "Do you trust the author of this vault?", "label-trust-author-description-1": "You're opening this vault for the first time, and it comes with some plugins.", "label-trust-author-description-2": "If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.", "label-trust-author-description-3": "If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.", "button-enable-plugins": "Trust author and enable plugins", "button-dont-trust-author": "Browse vault in Restricted Mode", "placeholder-community-plugins": "Search community plugins...", "msg-failed-load-plugins": "Failed to load community plugins.", "label-installed": "Installed", "button-install": "Install", "button-enable": "Enable", "button-disable": "Disable", "button-copy-share-link": "Copy share link", "button-donate": "Donate", "label-no-results-found": "No results found.", "msg-failed-to-load-manifest": "Failed to load plugin manifest.", "label-version": "Version: {{version}}", "label-currently-installed-version": " (currently installed: {{version}})", "label-by-author": "By ", "label-repository": "Repository: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "This plugin does not support your device.", "button-update": "Update", "label-no-readme": "This plugin did not provide a README file.", "msg-installing-plugin": "Installing plugin \"{{name}}\"...", "msg-failed-to-install-plugin": "Failed to install plugin \"{{name}}\".", "msg-successfully-installed-plugin": "Successfully installed plugin \"{{name}}\".", "label-installed-plugins": "Installed plugins", "button-reload-plugins": "Reload plugins", "msg-reloaded-third-party-plugins": "Reloaded third-party plugins.", "label-uninstall": "Uninstall", "label-uninstall-plugin": "Uninstall plugin", "label-uninstall-plugin-confirmation": "Are you sure you want to uninstall this plugin? This will delete the folder of the plugin.", "button-open-plugins-folder": "Open plugins folder", "button-check-for-updates": "Check for updates", "button-update-all-plugins": "Update all", "label-current-plugins": "Current plugins", "label-currently-installed": "You currently have {{count}} plugin installed.", "label-currently-installed_plural": "You currently have {{count}} plugins installed.", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Show a message with how long each plugin took to initialize when starting the app.", "msg-no-updates-found": "No plugin updates found.", "msg-updates-found": "Found {{count}} plugin to update.", "msg-updates-found_plural": "Found {{count}} plugins to update.", "msg-update-plugin": "Update to version {{version}}", "option-search-installed-plugin": "Search installed plugins", "option-search-installed-plugin-description": "Filter installed plugins by name or description.", "placeholder-search-installed-plugin": "Search installed plugins...", "show-installed-only": "Show installed only", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "Showing {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Mobile toolbar", "option-configure-quick-action": "Configure mobile Quick Action", "option-configure-quick-action-description": "Configure which command to trigger when pull down from the top. The current command is set to \"{{command}}\".", "button-configure": "Configure", "placeholder-select-quick-action": "Select Quick Action...", "manage-toolbar-options": "Manage toolbar options", "option-internal-link": "Add internal link", "option-internal-embed": "Add embed", "option-tag": "Add tag", "option-heading": "Toggle heading", "option-strikethrough": "Toggle strikethrough", "option-highlight": "Toggle highlight", "option-code": "Toggle code", "option-blockquote": "Toggle blockquote", "option-markdown-link": "Add Markdown link", "option-bullet-list": "Toggle bullet list", "option-numbered-list": "Toggle numbered list", "option-indent-list": "Indent list item", "option-unindent-list": "Unindent list item", "option-undo": "Undo", "option-redo": "Redo", "option-move-caret-up": "Move caret up", "option-move-caret-down": "Move caret down", "option-move-caret-left": "Move caret left", "option-move-caret-right": "Move caret right", "option-first-line": "Go to first line", "option-last-line": "Go to last line", "option-toggle-keyboard": "Toggle keyboard", "option-configure-toolbar": "Configure mobile toolbar", "option-added-options": "Added options", "option-more-toolbar-options": "More toolbar options", "option-attach": "Insert attachment", "option-add-command": "Add global command", "option-add-command-description": "Select any global command to add to the toolbar." } }, "editor": { "search": { "placeholder-find": "Find", "placeholder-replace": "Replace", "label-previous": "Prev", "label-next": "Next", "label-all": "All", "label-exit-search": "Exit search", "label-replace": "Replace", "label-replace-all": "Replace all" }, "link-suggestion": { "label-type-hash": "Type #", "label-link-heading": "to link heading", "label-type-block": "Type ^", "label-link-block": "to link blocks", "label-type-pipe": "Type |", "label-change-display-text": "to change display text", "label-no-match-found": "No match found" }, "spellcheck": { "no-suggestion": "No suggestions...", "add-to-dictionary": "Add to dictionary" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "No heading", "label-heading-level": "Heading {{level}}" }, "print-modal": { "title": "Export to PDF", "caption": "Export \"{{filename}}\" to PDF with the settings below.", "setting-page-size": "Page size", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Include file name as title", "setting-landscape": "Landscape", "setting-margin": "Margin", "setting-margin-default": "Default", "setting-margin-minimal": "Minimal", "setting-margin-none": "None", "setting-downscale-percent": "Downscale percent", "button-export-to-pdf": "Export to PDF" }, "link-popover": { "tooltip-follow-link": "Follow link", "tooltip-open-link": "Open link", "tooltip-search-tag": "Search tag" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Open in default app", "empty-sidebar": "The sidebar is empty, try dragging a pane here.", "sidebar-expand": "Expand", "sidebar-collapse": "Collapse", "msg-fail-to-save-file": "Failed to save file \"{{filepath}}\". {{message}}.", "no-file": "No file", "msg-file-changed": "\"{{file}}\" has been modified externally, merging changes automatically.", "switch-vault": "Open another vault", "help": "Help", "settings": "Settings", "drag-to-rearrange": "Drag to rearrange", "msg-switched-to-read": "Switched default view mode to reading view.", "msg-switched-to-edit": "Switched default view mode to editor.", "msg-upgrade-installer": "To use this feature, please re-install with latest installer available from our website.", "tooltip-restore-default-settings": "Restore default settings", "label-copy": "Copy to clipboard", "copied_generic": "Copied to your clipboard", "copied": "{{item}} copied to your clipboard", "url": "Url", "msg-open-file-through-uri": "Opened file \"{{path}}\"", "msg-file-not-found-through-uri": "File \"{{name}}\" not found.", "delete-action-short-name": "Delete", "msg-indexing": "Obsidian is indexing your vault...\nThis should only happen once.\nSome functionality may not be available until this is complete.", "msg-indexing-complete": "Indexing complete.", "msg-sandbox-vault": "This is a sandbox vault.\nChanges you make in this vault will be lost.", "label-enter-to-create": "Enter to create", "label-update-available": "Update Available", "label-debug-info": "Debug info", "button-learn-more": "Learn more", "button-not-now": "Not now", "button-add": "Add", "button-manage": "Manage", "label-new-tab": "New tab", "msg-tab-busy": "This tab is currently busy, please try again later", "empty-state": { "no-file-open": "No file is open", "create-new-file": "Create new file", "go-to-file": "Go to file", "see-recent-files": "See recent files", "close": "Close", "unknown-pane-title": "Plugin no longer active", "unknown-pane-desc": "The plugin that created this pane ({{type}}) has gone away" }, "menu": { "edit-view": "Edit (Ctrl/Cmd+Click to edit in new pane)", "read-view": "Current view: reading", "switch-to-edit-view": "Click to edit", "switch-to-read-view": "Click to read", "mod-click-open-new-tab": "{{key}}+Click to open in new tab", "find": "Find...", "replace": "Replace...", "edit": "Edit", "preview": "Preview", "more-options": "More options", "close": "Close", "close-others": "Close others", "close-right": "Close tabs to the right", "pin": "Pin", "unpin": "Unpin", "unlink-tab": "Unlink tab", "link-tab": "Link with tab...", "toggle-source-mode": "Source mode", "toggle-reading-view": "Reading view", "delete-file": "Delete file", "create-file": "Create this file", "open-link": "Open link", "open-in-new-tab": "Open in new tab", "open-to-the-right": "Open to the right", "copy-url": "Copy url", "close-current-tab": "Close current tab", "copy": "Copy", "cut": "Cut", "paste": "Paste", "paste-as-plain-text": "Paste as plain text", "select-all": "Select all", "rename-heading": "Rename this heading...", "rename-blockid": "Rename this block ID...", "open-in-new-window": "Open in new window", "move-to-new-window": "Move to new window", "open-in-browser": "Open in browser", "stack-tabs": "Stack tabs", "unstack-tabs": "Unstack tabs" }, "tooltip": { "click-to-expand": "Click to expand", "click-to-collapse": "Click to collapse", "alias": "Alias", "not-created-yet": "Not created yet, select to create" }, "start-screen": { "label-version": "Version", "option-open-folder-as-vault": "Open folder as vault", "option-open-folder-as-vault-description": "Choose an existing folder of Markdown files.", "option-create-vault": "Create new vault", "option-create-vault-description": "Create a new Obsidian vault under a folder.", "option-connect-obsidian-sync": "Connect to Obsidian Sync", "option-connect-obsidian-sync-description": "Set up a synced vault with existing remote vault.", "option-new-vault-name": "Vault name", "option-new-vault-name-description": "Pick a name for your awesome vault.", "option-new-vault-location": "Location", "option-new-vault-location-description": "Pick a place to put your new vault.", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Reveal vault in system explorer", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "Rename vault...", "msg-error-rename-exists": "There is already a vault with this name.", "msg-error-nested": "Cannot move vault into a subfolder of itself.", "msg-error-rename-open": "Can't rename a currently open vault.", "msg-rename-failed": "Failed to rename vault.", "msg-rename-success": "Successfully renamed vault.", "option-move-vault": "Move vault...", "msg-move-select-dest": "Select destination folder", "msg-error-move-exists": "There is already a vault at the destination.", "msg-error-move-open": "Can't move a currently open vault.", "msg-move-failed": "Failed to move vault.", "msg-move-success": "Successfully moved vault.", "option-remove": "Remove from list", "button-quick-start": "Quick start", "button-open": "Open", "button-browse": "Browse", "button-connect": "Connect", "button-create-vault": "Create", "button-back": "Back", "msg-empty-vault-name": "Vault name cannot be empty.", "msg-invalid-folder": "Please pick a valid folder.", "msg-failed-to-create-vault": "Failed to create vault.", "msg-failed-to-create-vault-at-location": "Could not create vault at the given location. Please double check the location and permission.", "msg-error-failed-to-open-vault": "Failed to open.", "msg-error-remove-current-open-vault": "Can't remove a currently open vault.", "option-get-help": "Get Help", "option-user-email": "Email", "placeholder-your-email": "Your email...", "option-user-password": "Password", "placeholder-your-password": "Your password...", "button-sign-in": "Sign in", "button-setup": "Setup", "option-connect-vault-desc": "Create a synced vault on this device.", "tooltip-own-vault": "This is a remote vault owned by you.", "tooltip-shared-vault": "This is a remote vault shared with you." }, "drag-and-drop": { "insert-link-here": "Insert link here", "insert-links-here": "Insert links here", "move-into-folder": "Move into \"{{folder}}\"", "star-this-file": "Star this file", "star-these-files": "Star these files", "open-in-this-tab": "Open in this tab", "open-as-tab": "Open as new tab" }, "window": { "maximize": "Maximize", "minimize": "Minimize", "restore-down": "Restore down", "close-window": "Close window", "go-back": "Go back", "go-forward": "Go forward" }, "start-up": { "loading-obsidian": "Loading Obsidian...", "obsidian-load-error": "An error occurred while loading Obsidian.", "button-reload-app": "Reload app", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "Open another vault", "loading-components": "Loading components...", "loading-plugins": "Loading plugins...", "loading-vault": "Loading vault...", "msg-failed-to-load-vault": "Failed to load vault: ", "loading-cache": "Loading cache...", "loading-workspace": "Loading workspace..." }, "mobile": { "action-import": "Import into vault", "action-choose-file-to-insert": "Choose a file to insert", "action-insert-text-into-file": "Insert text into {{filename}}", "action-insert-link-into-file": "Insert link into {{filename}}", "msg-importing": "Importing...", "msg-import-success": "Import success", "msg-failed-to-import-file": "Failed to import file {{filename}}", "msg-back-again-to-exit": "Press back again to exit." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "Save current file", "follow-cursor-link": "Follow link under cursor", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "Toggle pin", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "Navigate back", "navigate-forward": "Navigate forward", "use-dark-mode": "Use dark mode", "use-light-mode": "Use light mode", "change-theme": "Change theme", "search-current-file": "Search current file", "search-replace-current-file": "Search & replace in current file", "open-settings": "Open settings", "open-help": "Open help", "toggle-edit": "Toggle editing/reading view", "toggle-source-mode": "Toggle Live Preview/Source mode", "delete-current-file": "Delete current file", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "Toggle left sidebar", "toggle-right-sidebar": "Toggle right sidebar", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "Focus on editor", "toggle-fold": "Toggle fold on the current line", "fold-all": "Fold all headings and lists", "unfold-all": "Unfold all headings and lists", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "Swap line up", "swap-line-down": "Swap line down", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "Toggle bold for selection", "toggle-italics": "Toggle italics for selection", "toggle-highlight": "Toggle highlight for selection", "toggle-comments": "Toggle comments for selection", "insert-link": "Insert link", "toggle-spellcheck": "Toggle spellcheck", "delete-paragraph": "Delete paragraph", "toggle-checklist": "Toggle checklist status", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "Edit file title", "copy-path": "Copy file path", "copy-url": "Copy obsidian url", "export-pdf": "Export to PDF", "reload": "Reload app without saving", "undo-close-tab": "Undo close tab", "context-menu": "Show context menu under cursor", "show-debug-info": "Show debug info", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "Toggle edit/preview mode", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "This will affect {{links}} in {{files}}.", "msg-updated-links": "Updated {{links}} in {{files}}.", "label-update-links": "Update links", "label-confirm-update-link-to-file": "Do you want to update internal links that link to this file?", "button-always-update": "Always update", "button-just-once": "Just once", "button-do-not-update": "Do not update", "label-confirm-deletion": "Are you sure you want to delete \"{{filename}}\"?", "label-move-to-system-trash": "It will be moved to your system trash.", "label-move-to-vault-trash": "It will be moved to your Obsidian trash, which is located in the \".trash\" hidden folder in your vault.", "label-permanent-delete": "The file will be permanent deleted.", "label-non-empty-folder": "This folder is not empty.", "label-delete-folder-warning": "If you continue, all files inside this folder will be deleted.", "label-delete-folder": "Delete folder", "button-delete": "Delete", "button-delete-do-not-ask-again": "Delete and don't ask again", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "There are currently {{links}} pointing to this note.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "Delete file", "button-manage": "Manage", "button-cancel": "Cancel", "button-done": "Done", "button-save": "Save", "button-stop": "Stop", "button-continue": "Continue", "preparing-pdf": "Preparing PDF...", "label-rename-file": "Rename file", "label-new-name": "New name", "msg-rename-success": "Successfully renamed file.", "label-rename-heading": "Rename heading", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "Plugins", "file-explorer": { "name": "File explorer", "desc": "See all the files in your vault.", "action-open": "Open file explorer", "action-show": "Show file explorer", "action-create-note": "Create new note", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "New note", "action-new-folder": "New folder", "action-change-sort": "Change sort order", "action-reveal-file": "Reveal file in file explorer", "action-reveal-active-file": "Reveal active file in file explorer", "command-move-file": "Move file to another folder", "action-move-file": "Move file to...", "action-move-folder": "Move folder to...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "Type a folder", "label-no-folders": "No folders found.", "instruction-navigate": "to navigate", "instruction-move": "to move", "instruction-dismiss": "to dismiss", "label-sort-a-to-z": "Sort by file name (A to Z)", "label-sort-z-to-a": "Sort by file name (Z to A)", "label-sort-new-to-old": "Sort by edit time (new to old)", "label-sort-old-to-new": "Sort by edit time (old to new)", "label-sort-created-old-to-new": "Created time (old to new)", "label-sort-created-new-to-old": "Created time (new to old)", "menu-opt-new-note": "New note", "menu-opt-new-folder": "New folder", "menu-opt-set-attachment-folder": "Set as attachment folder", "menu-opt-rename": "Rename", "menu-opt-delete": "Delete", "menu-opt-make-copy": "Make a copy", "msg-invalid-characters": "File name cannot contain any of the following characters: ", "msg-unsafe-characters": "Links will not work with file names containing any of these characters: ", "msg-file-already-exists": "There's already a file with the same name", "msg-empty-file-name": "File name cannot be empty.", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "Last modified at {{time}}", "tooltip-created-time": "Created at {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Move", "label-untitled-file": "Untitled", "label-untitled-folder": "Untitled", "msg-set-attachment-folder": "Attachments will be saved to \"{{path}}\" from now on." }, "search": { "name": "Search", "desc": "Search for keyword in all the notes.", "action-open-search": "Search in all files", "label-collapse-results": "Collapse results", "label-match-case": "Match case", "label-explain-search-term": "Explain search term", "label-more-context": "Show more context", "prompt-start-search": "Type to start search...", "label-match-text": "Matches text: ", "label-match-regex": "Matches regex: ", "label-match-exact-text": "Contains exact text: ", "label-match-all": "Match all of: ", "label-match-any": "Match any of: ", "label-excluding": "Excluding: ", "label-case-sensitive": "Case sensitive", "label-case-insensitive": "Case insensitive", "label-match-file-path": "Match file path: ", "label-match-file-name": "Match file name: ", "label-match-content": "Match file content: ", "label-match-task": "Match task: ", "label-match-task-todo": "Match task (todo): ", "label-match-task-done": "Match task (done): ", "label-match-line": "Match line: ", "label-match-block": "Match block: ", "label-match-section": "Match section: ", "label-match-tag": "Match tag: ", "label-no-matches": "No matches found.", "matches-with-count": "... and {{count}} more match.", "matches-with-count_plural": "... and {{count}} more matches.", "label-copy-search-results": "Copy search results", "button-copy-results": "Copy results", "msg-successfully-copied": "Results copied to your clipboard.", "option-show-path": "Show path", "option-show-path-description": "Display full path of the file rather than just the file name.", "option-link-style": "Link style", "option-link-style-description": "Optionally turn each file result in to a link.", "option-choice-link-style-none": "None", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Markdown link", "option-list-prefix": "List prefix", "option-list-prefix-description": "Optionally add a list item prefix to each file result.", "option-choice-list-style-none": "None", "option-choice-list-style-dash": "Dash (-)", "option-choice-list-style-asterisk": "Asterisk (*)", "option-choice-list-style-numbered": "Numbered", "tooltip-clear-search": "Clear search", "label-search-options": "Search options", "tooltip-read-more": "Read more", "label-history": "History", "tooltip-clear-history": "Clear search history", "label-path-option-description": "match path of the file", "label-file-name-option-description": "match file name", "label-tag-option-description": "search for tags", "label-line-option-description": "search keywords on same line", "label-section-option-description": "search keywords under same heading", "menu-opt-search-for": "Search for \"{{keyword}}\"" }, "quick-switcher": { "name": "Quick switcher", "desc": "Jump to any files without leaving your keyboard. Ctrl/Cmd+O to activate.", "short-name": "Switcher", "action-open": "Open quick switcher", "instruction-navigate": "to navigate", "instruction-open": "to open", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "to create", "instruction-dismiss": "to dismiss", "label-no-note-create-new": "No notes found. Enter to create a new one.", "prompt-type-file-name": "Type file to switch to or create...", "label-enter-to-create": "Enter to create", "tooltip-not-created-yet": "Not created yet, select to create", "option-show-existing-only": "Show existing only", "option-show-existing-only-description": "Only show results from existing files. Links to files that are not yet created will be hidden.", "option-show-attachments": "Show attachments", "option-show-attachments-desc": "Show attachment files like images, videos, and PDFs.", "option-show-all-file-types": "Show all file types", "option-show-all-file-types-desc": "Show all files including ones that Obsidian can't open. The file will be opened with the default app for that file type." }, "graph-view": { "name": "Graph view", "desc": "See a graph overview of which notes link to which.", "action-open": "Open graph view", "action-open-local": "Open local graph", "action-copy-screenshot": "Copy screenshot", "tab-title": "Graph of {{displayText}}", "label-filters": "Filters", "prompt-filter-nodes": "Search files...", "option-depth": "Depth", "option-depth-description": "Show nodes this number of links away", "option-neighbor-links": "Neighbor links", "option-neighbor-links-description": "Show links between neighbors.", "option-forelinks": "Outgoing links", "option-forelinks-description": "Show links to other files", "option-backlinks": "Incoming links", "option-backlinks-description": "Show links from other files", "option-show-tags": "Tags", "option-show-tags-description": "Tags are linked to the files that contain them", "option-show-attachments": "Attachments", "option-show-attachments-description": "Show attachments included by files", "option-show-existing-files-only": "Existing files only", "option-show-existing-files-only-description": "When checked, links to nonexistent files are not shown", "option-show-orphans": "Orphans", "option-show-orphans-description": "Show files that are not linked to any other file", "label-display": "Display", "option-show-arrows": "Arrows", "option-show-arrows-description": "Show arrows when zoomed in", "option-text-fade": "Text fade threshold", "option-node-size": "Node size", "option-link-thickness": "Link thickness", "label-forces": "Forces", "option-center-force": "Center force", "option-link-force": "Link force", "option-link-distance": "Link distance", "option-repel-force": "Repel force", "tooltip-open-graph-settings": "Open graph settings", "msg-screenshot-copied": "Screenshot copied to the clipboard.", "label-groups": "Groups", "placeholder-enter-query": "Enter query...", "tooltip-delete-graph": "Delete group", "button-new-group": "New group", "tooltip-click-to-change-drag-to-reorder": "Click to change color\nDrag to reorder groups", "action-timelapse": "Start graph timelapse animation", "tooltip-start-timelapse-animation": "Start timelapse animation", "button-animate-timelapse": "Animate" }, "backlinks": { "name": "Backlinks", "desc": "Show number of backlinks in the status bar.", "action-open": "Open backlinks", "action-show": "Show backlinks pane", "action-open-for-current": "Open backlinks for the current file", "action-toggle-backlinks-in-document": "Toggle backlinks in document", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "Linked mentions", "label-no-backlinks": "No backlinks found.", "label-unlinked-mentions": "Unlinked mentions", "label-show-search": "Show search filter", "label-link-button-text": "Link", "tab-title": "Backlinks for {{displayText}}", "label-no-unlinked-mentions": "No unlinked mentions found.", "ellipsis": "...", "option-backlink-in-document": "Backlink in document", "option-backlink-in-document-desc": "Show backlinks in document by default when opening new panes." }, "outgoing-links": { "name": "Outgoing Links", "desc": "Show outgoing links and detect unlinked mentions of other notes in the current note.", "action-open": "Open outgoing links", "action-show": "Show outgoing links pane", "action-open-for-current": "Open outgoing links for the current file", "tab-title": "Outgoing links from {{displayText}}", "label-links": "Links", "label-no-links": "No links found.", "label-unlinked-mentions": "Unlinked mentions", "tooltip-link-file": "Link this file", "tooltip-not-created": "Not created yet" }, "tag-pane": { "name": "Tag pane", "desc": "Displays all your tags and along with their number of occurrences.", "action-show": "Show tag pane", "label-no-tags": "No tags found.", "label-sort-by-name-a-to-z": "Tag name (A to Z)", "label-sort-by-name-z-to-a": "Tag name (Z to A)", "label-sort-by-frequency-high-to-low": "Frequency (high to low)", "label-sort-by-frequency-low-to-high": "Frequency (low to high)", "action-show-nested-tags": "Show nested tags", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "Page preview", "desc": "Preview a note when hovering an internal link. Ctrl/Cmd + hover in editor mode.", "label-empty-note": "\"{{linktext}}\" is not created yet. Click to create.", "label-source-editor": "Editor", "label-source-preview": "Preview", "label-source-search": "Search, Backlinks, and Outgoing links", "label-require-mod": "Require {{key}} to trigger page preview on hover" }, "starred": { "name": "Starred", "desc": "Star frequently used files and searches.", "action-show": "Show starred pane", "action-toggle": "Star/unstar current file", "action-toggle-search": "Star/unstar current search", "action-star": "Star", "action-unstar": "Unstar", "menu-opt-remove": "Remove", "msg-successfully-starred": "Successfully starred {{type}} \"{{title}}\".", "msg-removed-starred": "Removed starred {{type}} \"{{title}}\".", "msg-cannot-find-path": "Cannot find file at \"{{path}}\"." }, "custom-css": { "name": "Custom CSS", "desc": "Reads \"obsidian.css\" in the vault and applies it.", "setting-community-themes": "Community themes", "msg-fetching-themes": "Fetching community theme data...", "prompt-filter": "Filter...", "label-dark-theme-only": "Dark themes only", "label-light-theme-only": "Light themes only", "label-use": "Use", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "Update", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "Remove theme", "label-visit-on-github": "Visit on GitHub", "msg-load-error": "Could not load community themes, please check your network.", "msg-now-using-theme": "You're now using {{title}} as your CSS theme.", "msg-deleted-theme": "The theme {{title}} has been deleted.", "msg-updated-theme": "The theme {{title}} has been updated.", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "Command palette", "desc": "Type a command to invoke it. No need to use the UI or remember the shortcut.", "action-open": "Open command palette", "instruction-navigate": "to navigate", "instruction-use": "to use", "instruction-dismiss": "to dismiss", "label-no-commands": "No commands found.", "prompt-type-command": "Type a command...", "label-pinned-commands": "Pinned commands", "option-add-new-pin": "New pinned command", "option-add-new-pin-description": "Pinned commands will appear at the top of all commands when no search query is present." }, "markdown-format-importer": { "name": "Markdown format importer", "desc": "Convert Markdown from other apps to Obsidian format.", "action-open": "Open Markdown importer", "option-roam-tag-fixer": "Roam Research tag fixer", "option-roam-tag-fixer-description": "Converts \"#tag\" and \"#[[tag]]\" to \"[[tag]]\".", "option-roam-highlight-fixer": "Roam Research highlight fixer", "option-roam-highlight-fixer-description": "Converts \"^^highlight^^\" to \"==highlight==\".", "option-roam-todo-converter": "Roam Research TODO converter", "option-roam-todo-converter-description": "Converts \"{{[[TODO]]}}\" to \"[ ]\".", "option-bear-highlight-fixer": "Bear highlight fixer", "option-bear-highlight-fixer-description": "Converts \"::highlight::\" to \"==highlight==\".", "zettelkasten-link-fixer": "Zettelkasten link fixer", "zettelkasten-link-fixer-description": "Fixes \"[[UID]]\" links to full \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Zettelkasten link beautifier", "zettelkasten-link-beautifier-description": "Fixes \"[[UID]]\" links and also beautify them \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Warning: the importer will convert all the files in your vault, not just the current file.", "msg-override-files-warning": "Your files will be overwritten. Back up all your files before attempting conversion.", "label-start-conversion": "Start Conversion", "label-stop": "Stop", "label-go-back": "Go back", "label-done": "Done", "label-processing": "Processing...", "label-cancelling": "Cancelling...", "label-finished": "Finished!", "label-processed-files": "Processed files", "label-modified-files": "Modified files", "label-total-replacements": "Total replacements" }, "daily-notes": { "name": "Daily notes", "desc": "Open today's daily note, or create one if not present.", "short-name": "Today", "action-open": "Open today's note", "action-open-previous": "Open previous daily note", "action-open-next": "Open next daily note", "action-insert-text": "Insert text into daily note", "action-insert-link": "Insert link into daily note", "msg-fail-format": "Failed to create daily note. \"{{format}}\" is not a valid format.", "msg-fail-folder": "Failed to create daily note. Folder \"{{folderOption}}\" not found.", "msg-fail-template-file": "Failed to create daily note. Template file \"{{template}}\" not found.", "msg-no-previous": "There's no daily note before this one.", "msg-no-next": "There's no daily note after this one.", "option-date-format": "Date format", "label-refer-to-syntax": "For more syntax, refer to: ", "label-syntax-link": "format reference", "label-syntax-live-preview": "Here is what it will look like: ", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new daily note.", "option-template": "Template file location", "option-template-description": "The file path to use as template.", "option-open-on-start": "Open daily note on startup", "option-open-on-start-description": "Open your daily note automatically whenever you open this vault." }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Random note", "desc": "Opens a random note. Useful for reviewing and discovering.", "short-name": "Random", "action-open": "Open random note" }, "outline": { "name": "Outline", "desc": "Displays the outline of the current file or linked pane.", "action-open": "Open outline", "action-show": "Show outline pane", "action-open-for-current": "Open outline of the current file", "tab-title": "Outline of {{displayText}}", "label-no-headings": "No headings found." }, "word-count": { "name": "Word count", "desc": "Show word count in the status bar." }, "slides": { "name": "Slides", "desc": "Present from Markdown. Use \"---\" to separate slides.", "action-start": "Start presentation" }, "audio-recorder": { "name": "Audio recorder", "desc": "Record audio and save as attachment.", "action-start": "Start recording audio", "action-stop": "Stop recording audio", "action-toggle": "Start/stop recording", "msg-access-denied": "Microphone access was denied, please enable it from the preference pane.", "msg-pending-grant": "Please grant microphone permission to start recording.", "msg-no-microphone": "No microphone is connected." }, "open-with-default-app": { "name": "Open in default app", "desc": "Add button to open current file in the default app.", "action-open-file": "Open in default app", "action-open-file-mobile": "Share", "action-show-in-folder": "Show in folder", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "Templates", "desc": "Insert template content from a folder of template files.", "action-insert": "Insert template", "action-insert-current-date": "Insert current date", "action-insert-current-time": "Insert current time", "option-template-folder-location": "Template folder location", "option-template-folder-location-description": "Files in this folder will be available as templates.", "option-template-date-format": "Date format", "option-template-date-format-description": "{{date}} in the template file will be replaced with this value.", "option-template-date-format-description2": "You can also use {{date:YYYY-MM-DD}} to override the format once.", "option-template-time-format": "Time format", "option-template-time-format-description": "{{time}} in the template file will be replaced with this value.", "option-template-time-format-description2": "You can also use {{time:HH:mm}} to override the format once.", "instruction-navigate": "to navigate", "instruction-insert": "to insert template", "instruction-dismiss": "to dismiss", "msg-no-templates-found": "No templates found", "msg-fail-invalid-folder": "Failed to list templates. Template folder is invalid.", "msg-fail-folder-not-found": "Failed to list templates. Folder \"{{folderOption}}\" not found.", "prompt-type-template": "Type name of a template..." }, "translucency": { "name": "Translucent window", "desc": "Turn on translucency effect to enhance a sense of depth. Best used with dark mode. Not supported on Linux." }, "slash-command": { "name": "Slash commands", "desc": "Enable the ability to trigger slash commands in the editor by typing the forward slash." }, "editor-status": { "name": "Editor status", "desc": "Adds a status bar item to show and change the current editor mode.", "read": "Reading", "edit-source": "Source mode", "edit-live-preview": "Live Preview" }, "publish": { "name": "Publish", "desc": "Publish your notes through Obsidian Publish.", "action-publish-changes": "Publish changes", "label-no-internet-access": "You need access to the internet to publish changes.", "label-publish-service-description": "Obsidian Publish is an add-on paid service that lets you publish your notes online directly from Obsidian.", "label-please-login": "To start publishing, please log in or create a new Obsidian account.", "label-no-publish-subscription": "You do not have an Obsidian Publish subscription yet.", "button-purchase": "Purchase", "label-manage-sites": "Manage sites", "label-no-sites": "You don't have any sites.", "button-choose": "Choose", "tooltip-edit-site-id": "Edit site ID", "tooltip-delete-site": "Delete site", "label-delete-site-confirmation": "Are you sure you want to delete this site?", "label-delete-site-details": "This will immediately and permanently delete your site.", "label-confirm-delete-site": "Confirm delete site \"{{site}}\"", "option-site-id": "Site ID", "option-site-id-description": "Your site will be at https://publish.obsidian.md/{site id}. You can change this later. Only lower case letters, numbers, and dashes are allowed.", "option-site-id-placeholder": "Pick a site ID", "button-create": "Create", "msg-invalid-site-id": "Site ID can only contain lowercase letters, numbers, and dashes.", "msg-site-id-in-use": "This site ID is in use, please try another one.", "msg-create-site-issue": "That was an issue when creating your site.", "label-site-options": "Site options", "option-site-general": "General", "option-site-components": "Components", "option-site-appearance": "Appearance", "option-site-reading-experience": "Reading experience", "option-site-misc": "Other site settings", "option-site-name": "Site name", "option-site-name-description": "Name of your published site. It will show up in the page title of your site.", "option-site-name-placeholder": "Name of your site", "option-home-page-file": "Homepage file", "option-home-page-file-description": "The first page the user sees when landing on your published site", "option-home-page-file-placeholder": "Pick a published file", "option-logo": "Logo", "option-logo-description": "Pick an image file as your site logo.", "option-logo-placeholder": "Any any uploaded image in your vault...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "Theme", "option-theme-description": "Choose default color scheme for your site.", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "Show navigation", "option-show-navigation-description": "Display a list of all published pages on the left side of your published site.", "option-show-search": "Show search bar", "option-show-search-description": "Display a search bar at top of the navigation that lets the visitors search pages and headings on your site.", "option-show-graph": "Show graph view", "option-show-graph-description": "Display a small local graph on each page.", "option-show-outline": "Show table of contents", "option-show-outline-description": "Display the outline of headings on each page.", "option-show-backlinks": "Show backlinks", "option-show-backlinks-description": "Show backlink section at the end of each page.", "option-sliding-window-mode": "Use sliding windows", "option-sliding-window-mode-description": "Open pages in new panes to the right. Allows scrolling through panes horizontally.", "option-hover-preview-file": "Show hover preview", "option-hover-preview-file-description": "Display page preview when hovering links.", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "Readable line length", "option-readable-line-length-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-site-password": "Passwords", "option-site-password-description": "Restrict access to your site with passwords.", "option-google-analytics": "Google Analytics tracking code", "option-google-analytics-description": "Configure Google Analytics for your site. Only available for visitors from your custom domain URL. Please check with your local laws and regulations first.", "button-manage-passwords": "Manage", "button-save-site-settings": "Save site settings", "msg-updated-options": "Updated options for your site.", "button-go-back": "Back", "label-publishing-to": "Publishing to", "tooltip-switch-site": "Switch site", "button-add-linked": "Add linked", "tooltip-add-linked": "Add all files that are linked by currently selected items", "msg-added-linked-files": "{{count}} linked file has been added.", "msg-added-linked-files_plural": "{{count}} linked files have been added.", "tooltip-open-site-options": "Change site options", "label-no-changes-detected": "No changes were detected.", "label-changed-files-to-be-published": "Changes", "label-unchanged-files-already-published": "Unchanged (select to unpublish)", "label-file-selected": " selected", "button-select-all-files": "Select all", "button-deselect-all-files": "Deselect all", "label-new-files-to-be-published": "New", "button-publish": "Publish", "msg-no-permission-to-publish-to-site": "You do not have permissions to publish to the current site.", "msg-select-at-least-one-file": "Please select at least one file.", "label-upload-changes": "Upload changes", "button-done": "Done", "button-stop": "Stop", "label-status-uploading": "Uploading", "label-status-to-publish": "To publish", "label-status-to-delete": "To delete", "label-status-published": "Published", "label-status-deleted": "Deleted", "label-status-failed": "Failed", "label-status-cancelled": "Cancelled", "button-change": "Change", "label-clear-cache": "It takes up to a few minutes for the changes to show up on your site. If you do not see your latest changes, try clearing the cache in your browser.", "label-visit-site": "You can visit your site here: ", "msg-something-went-wrong": "Something went wrong. Please check the developer console for details.", "msg-network-error": "A network error occurred. ", "label-manage-passwords": "Manage passwords", "label-add-password": "Add password", "action-new-password": "New password", "label-no-password": "Your site currently does not have any passwords. Anyone can visit it.", "label-have-password": "Your site is password protected. If you have multiple passwords, visitors can access your site by entering any of them.", "option-password-name": "Password", "option-password-desc": "A hash of your password will be stored securely. Once the password is set, it cannot be revealed in plaintext.", "option-password-placeholder": "Your password", "option-nickname-name": "Nickname (optional)", "option-nickname-desc": "Set a nickname to remind yourself what or who the password is for.", "action-add-password": "Add this password", "label-untitled-password": "Untitled password", "label-password-created-time": "Created {{time}}", "msg-added-new-password": "Added new password.", "option-custom-domain": "Custom domain", "option-custom-domain-desc": "Use your own domain rather than the https://publish.obsidian.md/{site id} URL.", "option-noindex": "Disallow search engine indexing", "option-noindex-desc": "Prevent search engines from indexing your site.", "button-configure": "Configure", "label-configure-custom-domain": "Configure custom domain", "option-custom-url-name": "Custom URL", "option-custom-url-desc": "The URL that your site will be located at.", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "Redirect to your custom domain", "option-custom-url-redirect-desc": "Redirect visitors on publish.obsidian.md/id to your custom domain.", "button-update-custom-domain": "Update domain setting", "label-custom-domain-instructions": "Please refer to our {{link}} on our help site for more information.", "label-custom-domain-link-name": "custom domain setup guide", "label-site-usage": "You're using {{site}} out of your {{limit}}.", "button-add-more-sites": "Buy more sites", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "Workspaces", "desc": "Save and load workspace layout.", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "Save", "button-load": "Load", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "Sync", "desc": "Synchronize your files through Obsidian Sync.", "action-view-version-history": "View version history", "label-load-more": "Load more", "label-show-diff": "Show diff", "label-copy-to-clipboard": "Copy to clipboard", "label-restore-this-version": "Restore this version", "msg-already-latest-version": "This version is already the latest version.", "msg-restored-version": "Successfully restored version from {{time}}", "label-file-deleted": "This file was deleted", "label-no-earlier-version": "There was no earlier versions of this file.", "label-empty-file": "Empty", "label-setting-files": "Setting files", "label-deleted-files": "Deleted files", "label-version-history": "Version history", "label-click-to-see-history": "Click on a deleted file to see its history.", "label-create-remote-vault": "Create remote vault", "msg-please-enter-password": "Please enter a password.", "msg-vault-name-cannot-be-empty": "Vault name cannot be empty.", "msg-successfully-created-vault": "Successfully create remote vault \"{{name}}\".", "label-remote-vault-explanation": "Remote vaults securely synchronize your vault between devices.", "option-vault-name": "Vault name", "option-vault-name-desc": "Helps you remember what this vault is for.", "option-vault-name-placeholder": "My awesome vault", "option-use-custom-encryption-password": "Customize end-to-end encryption password", "option-use-custom-encryption-password-desc": "If you turn this off, we will securely manage an encryption key for you.", "option-use-custom-encryption-password-desc-warning": "This option cannot be changed later.", "option-encryption-password": "Encryption password", "option-encryption-password-desc": "This password cannot be changed later.", "option-encryption-password-desc-warning": "If you forget this password, any remote data will remain unusable forever.", "option-encryption-password-desc-2": "This does not affect your local data.", "option-encryption-password-placeholder": "Your password", "label-enter-encryption-password": "Enter encryption password", "button-unlock-vault": "Unlock vault", "msg-verified-password": "Successfully verified your password.", "label-remote-vaults": "Your remote vaults", "label-vault-created-time": "Created {{time}}", "tooltip-delete-remote-vault": "Delete", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "Confirm delete vault", "label-confirm-delete-remote-vault-question": "Are you sure you want to delete this remote vault?", "label-confirm-delete-remote-vault-result": "All data on our server, including version history, will be deleted. Your local files will stay intact.", "label-confirm-delete-remote-vault-warning": "This action is permanent and irreversible.", "msg-remote-vault-deleted": "{{name}} has been deleted.", "button-connect-to-remote-vault": "Connect", "button-disconnect-from-remote-vault": "Disconnect", "label-not-remote-vaults": "You don't have any remote vaults.", "button-create-new-remote-vault": "Create new vault", "label-sync-log": "Sync log", "options-only-show-errors": "Errors only", "options-only-show-errors-desc": "Only show errors and hide other log items.", "button-copy-sync-log": "Copy sync log", "msg-successfully-copied-sync-log": "Successfully copied sync log.", "button-retry": "Retry", "button-purchase-subscription": "Purchase", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "Choose", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "Sync status", "option-sync-status-desc-paused": "Obsidian Sync is currently paused.", "option-sync-status-desc-running": "Obsidian Sync is currently running.", "option-device-name": "Device name", "option-device-name-desc": "This name will be displayed in the sync log. Leave empty to use the default name.", "button-resume": "Resume", "button-pause": "Pause", "option-view-deleted-files": "Deleted files", "option-view-deleted-files-desc": "View and restore deleted files.", "option-sync-log": "Sync activity", "option-sync-log-desc": "View recent sync activities for debugging.", "button-view": "View", "button-bulk-restore": "Bulk restore", "button-restore-selected-files": "Restore selected files", "msg-restoring": "Restoring...", "msg-restoring-complete": "Restore complete: {{succeeded}} succeeded and {{failed}} failed.", "option-over-size": "Vault size over limit", "option-over-size-desc": "Your vault is at {{size}} out of {{limit}}.", "msg-largest-files": "View largest files", "msg-largest-files-desc": "These are the remote files that are taking the most space. After deleting attachments, use the purge button to free up remote vault space.", "button-purge-remote": "Purge", "tooltip-purge-remote": "Permanently purge deleted attachments from remote vault to save space.", "msg-purge-complete": "Purge complete.", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "Selective sync", "option-excluded-folders": "Excluded folders", "option-excluded-folder-desc": "Prevent certain folders from being synced.", "option-currently-excluded-folders": " These folders currently excluded:", "button-manage-excluded-folders": "Manage", "option-sync-image": "Sync images", "option-sync-image-desc": "Sync image files with these extensions: {{extensions}}.", "option-sync-audio": "Sync audio", "option-sync-audio-desc": "Sync audio files with these extensions: {{extensions}}.", "option-sync-video": "Sync videos", "option-sync-video-desc": "Sync video files with these extensions: {{extensions}}.", "option-sync-pdf": "Sync PDFs", "option-sync-pdf-desc": "Sync PDF files.", "option-sync-unsupported": "Sync all other types", "option-sync-unsupported-desc": "Sync unsupported file types.", "option-vault-config-sync": "Vault configuration sync", "option-view-config-files": "Settings version history", "option-view-config-files-desc": "View and restore version history of setting files.", "option-sync-app": "Main settings", "option-sync-app-desc": "Enable to sync editor settings, files & links settings, custom hotkeys, etc.", "option-sync-appearance": "Appearance settings", "option-sync-appearance-desc": "Sync appearance settings like dark mode, active theme, and enabled snippets.", "option-sync-appearance-data": "Themes and snippets", "option-sync-appearance-data-desc": "Sync downloaded themes and snippets. Whether they are enabled depends on the previous setting.", "option-sync-hotkey": "Hotkeys", "option-sync-hotkey-desc": "Sync custom hotkeys.", "option-sync-core-plugin": "Active core plugin list", "option-sync-core-plugin-desc": "Sync which core plugins are enabled.", "option-sync-core-plugin-data": "Core plugin settings", "option-sync-core-plugin-data-desc": "Sync core plugin settings.", "option-sync-community-plugin": "Active community plugin list", "option-sync-community-plugin-desc": "Sync which community plugins are enabled.", "option-sync-community-plugin-data": "Installed community plugins", "option-sync-community-plugin-data-desc": "Sync installed community plugins (.js, .css, and manifest.json files) and their settings.", "label-sync-introduction": "Obsidian Sync is Obsidian's add-on sync service with end-to-end encryption and version history.", "label-account-required": "To start syncing, please log in or create a new Obsidian account.", "button-sign-up": "Sign up", "button-log-in": "Log in", "label-manage-excluded-folders": "Manage excluded folders", "label-number-of-folders-excluded": "{{folders}} are currently excluded from being synced.", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "Setup connection", "label-now-connected-to-vault": "You're now connected to \"{{name}}\".", "button-start-syncing": "Start syncing", "label-confirm-merge-vault": "Confirm Merge Vault", "msg-vault-has-notes": "Your local vault already contains some notes.", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "File recovery", "desc": "Let you restore recent snapshots to recover from accidental data loss. Snapshots are only saved for Markdown files.", "action-open": "Open saved snapshots", "option-interval": "Snapshot interval", "option-interval-description": "Minimal interval in minutes between two snapshots.", "option-keep": "History length", "option-keep-description": "Length in days snapshots is kept for.", "option-open-history": "Snapshots", "option-open-history-description": "View and restore saved snapshots.", "button-view-snapshots": "View", "option-clear": "Clear history", "option-clear-description": "Wipe all snapshots.", "button-clear-history": "Clear", "label-clear-warning": "Are you sure you want to delete all snapshots? Note that only snapshots will be removed. All files inside your vault will not be affected.", "msg-clear-complete": "Snapshots cleared.", "label-no-history-found": "No snapshots found.", "placeholder-choose-file": "Choose a file...", "label-select-file": "Please select a file on the left to view snapshots." }, "note-composer": { "name": "Note composer", "desc": "Merge, split, and refactor notes.", "option-confirm-file-merge": "Confirm file merge", "option-confirm-file-merge-description": "Prompt before merge two files.", "option-split-replacement-text": "Text after extraction", "option-split-replacement-text-description": "What to show in place of the selected text after extracting it.", "option-choice-split-replacement-text-link": "Link to new file", "option-choice-split-replacement-text-embed": "Embed new file", "option-choice-split-replacement-text-none": "None", "option-template-file": "Template file location", "option-template-file-description": "Template file to use when merging or extracting. Available variables: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Merge current file with another file...", "action-merge-file": "Merge entire file with...", "label-no-files": "No files found.", "instruction-navigate": "to navigate", "instruction-merge": "to merge", "instruction-create-new": "to create new", "instruction-merge-at-top": "to merge at top", "instruction-dismiss": "to dismiss", "prompt-select-file-to-merge": "Select file to merge into...", "label-merge-file": "Merge file", "label-confirm-file-merge": "Are you sure you want to merge \"{{file}}\" into \"{{destination}}\"? \"{{file}}\" will be deleted.", "button-merge": "Merge", "button-merge-do-not-ask-again": "Merge and don't ask again", "command-split-file": "Extract current selection...", "command-extract-heading": "Extract this heading...", "instruction-append": "to move to bottom", "instruction-prepend": "to move to top", "msg-fail-to-fetch-template": "Failed to fetch template file: \"{{template}}\" not found.", "msg-fail-to-find-heading": "Failed to find heading" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} word", "word-with-count_plural": "{{count}} words", "character-with-count": "{{count}} character", "character-with-count_plural": "{{count}} characters", "link-with-count": "{{count}} link", "link-with-count_plural": "{{count}} links", "file-with-count": "{{count}} file", "file-with-count_plural": "{{count}} file", "folder-with-count": "{{count}} folder", "folder-with-count_plural": "{{count}} folders", "backlink-with-count": "{{count}} backlink", "backlink-with-count_plural": "{{count}} backlinks", "site-with-count": "{{count}} site", "site-with-count_plural": "{{count}} sites", "plugin-with-count": "{{count}} plugin", "plugin-with-count_plural": "{{count}} plugins", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } }{ "setting": { "options": "Tetapan", "plugin": "Plugin", "builtin-plugins": "Plugin teras", "plugin-options": "Tetapan plugin", "folder-path-example-placeholder": "Contoh: folder 1/folder 2", "file-path-example-placeholder": "Contoh: folder/nota", "editor": { "name": "Penyuntingan", "option-spellcheck": "Semak ejaan", "option-spellcheck-description": "Pasang penyemak ejaan. Sekarang hanya menyokong bahasa Inggeris (US).", "spellcheck-dict": "Kamus penyemak ejaan", "spellcheck-dict-empty": "Kamus penyemak ejaan kini kosong.", "option-readable-line-length": "Panjang baris mudah baca", "option-readable-line-description": "Hadkan panjang baris maksima. Ia mengurangkan jumlah isi pada skrin, tapi perenggan panjang jadi lebih mudah dibaca.", "option-strict-line-break": "Pemenggalan baris tegas", "option-strict-line-break-description": "Dalam mod pralihat, abaikan pemenggalan baris tunggal yang menepati spesifikasi Markdown. Padam ciri ini untuk tunjukkan pemenggalan baris tunggal dalam pralihat.", "option-show-frontmatter": "Tunjuk frontmatter", "option-show-frontmatter-description": "Dalam mod pralihat, tunjukkan frontmatter sebagai satu bongkah kod. Padam ciri ini untuk hilangkan bahagian frontmatter.", "option-auto-pair-brackets": "Munculkan sepasang kurungan", "option-auto-pair-brackets-description": "Kurungan dan pemetik kata dimunculkan secara automatik.", "option-auto-pair-markdown": "Munculkan pasangan sintaksis Markdown", "option-auto-pair-markdown-description": "Simbol untuk kata tebal, kata condong, kata tumpu, palang kata, dan kod.", "option-smart-indent-lists": "Inden pintar untuk senarai", "option-smart-indent-lists-description": "Uruskan inden dan penanda senarai secara automatik.", "option-fold-heading": "Lipat pengepala", "option-fold-heading-description": "Membolehkan isi-isi bawah pengepala dilipat.", "option-fold-indent": "Lipat inden", "option-fold-indent-description": "Membolehkan isi-isi bawah inden yang sama dilipat, seperti dalam senarai.", "option-default-new-pane-mode": "Mod lalai tetingkap baharu", "option-default-new-pane-mode-description": "Tetingkap nota akan sentiasa dibuka dalam mod ini.", "option-default-new-pane-mode-source": "Penyuntingan", "option-default-new-pane-mode-preview": "Pralihatan", "option-show-line-number": "Tunjuk nombor baris", "option-show-line-number-description": "Nombor setiap baris akan ditunjukkan di sisi tetingkap.", "option-use-tabs": "Gunakan Tab", "option-use-tabs-description": "Menghasilkan inden baris menggunakan kekunci \"Tab\". Padamkannya jika mahu guna kekunci jarak.", "option-tab-size": "Saiz Tab", "option-tab-size-description": "Satu kekunci Tab bersamaan berapa jarak.", "option-line-wrap": "Pembalutan baris", "option-line-wrap-description": "Balut baris-baris panjang supaya muat dalam tetingkap tanpa perlu belek ke kiri atau ke kanan.", "option-auto-convert-html": "Auto tukar dari HTML", "option-auto-convert-html-description": "Menukarkan format HTML menjadi Markdown apabila menampal atau ditarik dari laman web. Gunakan Ctrl/Cmd+Shift+V untuk menampal tanpa penukaran.", "option-vim-key-bindings": "Pemadanan kekunci Vim", "option-vim-key-bindings-description": "Membolehkan anda menggunakan papan kekunci Vim dalam mod suntingan.", "option-emacsy-keys": "Pemadanan kekucni gaya Emacs lama untuk macOS", "option-emacsy-keys-description": "Membolehkan anda menggunakan kekunci tambahan gaya Emacs yang lazim dalam macOS tetapi boleh ganggu beberapa arahan papan kekunci.", "label-confirm-enable-vim": "Pengesahan masuk mod Vim", "label-vim-warning": "Mod Vim melancarkan penyuntingan teks tetapi agak mencabar untuk difahami. Jika anda tidak biasa dengan Vim, mod ini akan kelihatan seperti Obsidian sudah tidak lagi berfungsi.", "label-vim-test": "Untuk mengesahkan kefahaman Vim anda, letakkan arahan untuk keluar Vim tanpa simpan fail di bawah:", "label-vim-your-answer": "Jawapan anda", "placeholder-enter-command": "Letakkan arahan...", "button-confirm-enable-vim": "Benarkan saya masuk mod Vim", "msg-vim-mode-enabled": "Arahan adalah tepat. Mod Vim telah dipasangkan.", "msg-vim-mode-not-enabled": "Arahan adalah salah. Mod Vim tidak dipasangkan demi maslahat anda.", "msg-vim-mode-please-enter-command": "Diminta letakkan arahan tersebut untuk masuk mod Vim" }, "file": { "name": "Fail & Pautan", "option-confirm-file-deletion": "Sahkan penghapusan fail", "option-confirm-file-deletion-description": "Pilih sama ada ingin diminta mengesahkan penghapusan fail.", "option-delete-destination": "Fail yang telah dihapuskan", "option-delete-destination-description": "Apa yang perlu dilakukan dengan fail yang dihapuskan.", "option-choice-system-trash": "Pindah ke tong sampah sistem", "option-choice-vault-trash": "Pindah ke tong sampah Obsidian (folder .trash)", "option-choice-permanent-delete": "Penghapusan kekal", "option-always-update-links": "Sentiasa kemas kini pautan dalaman", "option-always-update-links-description": "Pilih sama ada pautan dalaman ingin dikemas kini secara automatik ataupun minta pengesahan setiap kali.", "option-new-note-location": "Tempat letak nota baharu", "option-new-note-location-description": "Pilih tempat letak nota yang baru dibuat. Tetapan plugin akan ambil alih tetapan ini jika ada.", "option-choice-vault-root": "Direktori akar peti", "option-choice-current-folder": "Folder yang sama dengan nota yang dipaparkan", "option-choice-specified-folder": "Dalam folder yang ditetapkan di bawah", "option-new-file-folder-path": "Folder untuk nota-nota baharu", "option-new-file-folder-path-description": "Nota yang baru dibuat akan muncul dalam folder ini. Tetapan plugin akan ambil alih tetapan ini jika ada.", "option-use-wiki-links": "Gunakan [[Wikipautan]]", "option-use-wiki-links-description": "Menghasilkan pautan gaya wiki untuk [[pautan]] dan ![[gambar]] dan bukan pautan serta gambar gaya piawaian Markdown. Tutup pilihan ini untuk jika mahukan pautan gaya Markdown.", "option-show-unsupported-files": "Tunjuk semua jenis fail", "option-show-unsupported-files-description": "Tunjukkan semua jenis fail walaupun fail tersebut tidak disokong oleh Obsidian teras supaya boleh dipautkan dan boleh dilihat dalam peneroka fail dan penukaran pantas.", "option-link-autocompleted-format": "Format untuk pautan baharu", "option-link-autocompleted-format-description": "Tentukan rupa pautan yang dihasilkan secara automatik", "option-choice-shortest-linktext": "Laluan terpendek sekiranya boleh", "option-choice-relative-path": "Laluan relatif kepada fail", "option-choice-absolute-path": "Laluan mutlak dalam peti", "option-new-attachment-location": "Tempat letak lampiran baharu", "option-new-attachment-location-description": "Pilih tempat letak lampiran yang baru dibuat.", "option-choice-subdirectory": "Dalam subfolder dalam folder yang aktif", "option-attachment-folder-path": "Laluan untuk folder lampiran", "option-attachment-folder-path-description": "Semua lampiran baharu akan diletakkan di sini iaitu gambar atau rakaman audio yang dihasilkan sama ada melalui tarik masuk ataupun melalui salin dan tampal.", "option-attachment-subfolder-path": "Nama subfolder", "option-attachment-subfolder-path-description": "Jika fail sekarang ini ialah \"akar peti/folder\", lalu subfolder ini dinamakan \"lampiran\", maka lampiran-lampiran akan diletakkan dalam folder \"akar peti/folder/lampiran\".", "option-attachment-subfolder-path-placeholder": "lampiran" }, "appearance": { "name": "Penampilan", "option-base-theme": "Tema asal", "option-base-theme-description": "Gunakan tema asal Obsidian.", "dark-theme": "Gelap", "light-theme": "Cerah", "option-use-obsidian-css": "Gunakan CSS sendiri", "option-use-obsidian-css-description": "Gunakan penampilan yang ditulis dalam fail “obsidian.css” dalam folder peti. Ini adalah tetapan lama, anda digalakkan memindahkan fail CSS sendiri ke dalam folder snippet yang dinyatakan di bawah.", "option-community-themes": "Buka tema-tema komuniti", "option-community-themes-description": "Pralihat dan gunakan tema-tema mengagumkan yang dihasilkan oleh komuniti.", "button-browse-community-themes": "Cari", "option-font-size": "Saiz huruf", "option-font-size-description": "Saiz huruf dalam ukuran piksel yang akan mempengaruhi mod suntingan dan pralihat.", "option-font-size-action": "Ubah saiz huruf dengan pantas", "option-font-size-action-description": "Ubah saiz huruf menggunakan CTRL + Tatal atau gunakan kawalan zum pada pad sesentuh.", "option-themes": "Tema", "option-theme": "Tema", "option-theme-description": "Pilih tema komuniti yang ingin digunakan. Tema-tema disimpan dalam \"akar peti/.obsidian/themes/\".", "option-choice-none": "Tiada", "button-reload-themes": "Muat semula tema", "msg-reloaded-themes": "Tema CSS sendiri sudah dimuatkan semula.", "button-open-themes-folder": "Buka folder tema", "option-css-snippets": "Snippet CSS", "label-no-css-snippets-found": "Tiada snippet CSS dijumpai dalam folder snippet.", "no-snippet-description": "Snippet CSS disimpan dalam \"{{path}}\".", "button-reload-snippets": "Muat semula snippet", "button-open-snippets-folder": "Buka folder snippet", "msg-reloaded-snippets": "Snippet CSS sudah dimuatkan semula.", "option-toggle-snippet-description": "Gunakan snippet CSS dari \"{{path}}\"." }, "hotkeys": { "name": "Kekunci Pintasan", "prompt-filter": "Tapis...", "tooltip-delete-hotkey": "Hapuskan kekunci pintasan", "label-waiting-for-hotkey-press": "Tekan kekunci pintasan...", "tooltip-restore-default": "Balik ke tetapan asal", "tooltip-customize-command": "Tetapkan kekunci untuk arahan", "tooltip-hotkey-single-conflict": "Kekunci pintasan ini bercanggah dengan \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "Kekunci pintasan ini bercangan dengan {{count}} arahan lain", "label-blank-hotkey": "Kosong" }, "about": { "name": "Perisian", "label-license-key": "Kunci lesen", "license-key-placeholder": "Kunci lesen anda...", "label-enter-commercial-license": "Letakkan kunci lesen anda:", "label-activate-license": "Hidupkan lesen", "button-activate": "Hidupkan", "label-unknown-version": "Tidak diketahui", "label-current-version": "Versi terkini: ", "label-install-version": "(Versi pemasang: {{version}})", "label-up-to-date": "Aplikasi anda sudah dikemas kini!", "label-read-changelog": "Baca log perubahan.", "label-manual-install-required": "Anda perlu pasang versi terkini secara manual.", "label-download-link": "Muat turun di sini.", "label-new-version-ready": "Versi terbaharu sedia untuk dipasang.", "label-relaunch-to-update": "Buka semula aplikasi untuk kemas kini.", "label-disabled-updates": "Proses pengemaskinian ditutup.", "label-checking-for-updates": "Menyemak kemas kini terbaharu...", "button-relaunch": "Buka semula", "button-check-for-updates": "Semak kemas kini terbaharu", "option-auto-update": "Kemas kini secara automatik", "option-auto-update-description": "Tutup pilihan ini jika tidak ingin aplikasi menyemak kemas kini.", "option-open-help": "Bantuan Obsidian", "option-open-help-description": "Buka panduan pengguna.", "button-open": "Buka", "option-language": "Bahasa", "option-language-description": "Tukar bahasa paparan", "option-insider-build": "Dapatkan versi ujian insider", "option-insider-build-description": "Mendapatkan kemas kini daripada versi insider untuk menguji ciri-ciri baharu. Ambil maklum bahawa versi ini adalah yang paling terkehadapan dan mungkin kurang stabil.", "option-advanced": "Lanjutan", "option-hw-acceleration": "Pemecutan perkakas", "option-hw-acceleration-description": "Menghidupkan ciri pemecutan perkakas yang menggunakan GPU untuk melancarkan Obsidian.", "option-hw-acceleration-warning": "Jika pilihan ini ditutup, prestasi aplikasi akan merosot dengan banyak.", "option-config-location": "Ambil alih folder konfigurasi", "option-config-location-description": "Pilih folder konfigurasi selain yang ditetapkan. Nama folder perlu bermula dengan titik.", "option-config-location-warning": "Tempat letak konfigurasi mestilah menggunakan nama folder yang sah serta bermula dengan titik.", "label-license": "Lesen", "label-your-commercial-license": "Kunci komersial anda ialah ", "label-commercial-license-info": "Didaftarkan bawah nama \"{{company}}\" untuk {{seats}} orang pengguna. Sah sehingga {{expiry}}.", "label-validating-commercial-license": "Mengesahkan...", "label-invalid-commercial-license": "Lesen tidak sah: ", "button-activate-commercial-license": "Hidupkan lesen komersial", "label-personal-license": " lesen periadi. ", "label-thank-you-for-support": "Terima kasih atas sokongan anda!", "label-free-personal-license": "Lesen peribadi: percuma untuk penggunaan peribadi." }, "account": { "name": "Akaun", "label-welcome": "Selamat datang, {{name}}!", "label-your-account-email": "Akaun anda ialah ", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "label-role-text": "Anda ialah seorang {{- role}}!", "label-insider-build-access": "Terima kasih atas sokongan anda. Anda diberi kebenaran mengakses versi insider.", "label-action-suggestion": "Anda mungkin berminat mahu...", "button-get-commercial-license": "Dapatkan lesen komersial", "button-get-catalyst-license": "Menyokong Obsidian menggunakan Obsidian Catalyst", "button-check-for-catalyst-license": "Menyemak Obsidian Catalyst", "button-upgrade-catalyst-license": "Menaik taraf jenis sokongan", "button-log-out": "Daftar keluar", "label-log-in": "Daftar masuk", "label-email": "Emel", "placeholder-email": "Emel anda...", "label-password": "Kata laluan", "placeholder-password": "Kata laluan anda...", "button-login": "Daftar masuk", "message-empty-email": "Emel tidak boleh dibiarkan kosong.", "message-invalid-email": "Emel yang dimasukkan tidak sah.", "message-empty-password": "Kata laluan tidak boleh dibiarkan kosong.", "message-login-failed": "Gagal mendaftar masuk, pastikan emel dan kata laluan adalah betul.", "label-no-account": "Tiada akaun? ", "link-sign-up-now": "Daftar akaun", "message-get-community-badges": "Untuk dapatkan lencana komuniti, hantarkan emel ke support@obsidian.md sekiranya anda masih belum menerimanya dalam masa 24 jam selepas memperoleh lesen.", "message-obtain-commercial-license": "Untuk dapatkan lesen komersial, lawati {{pricingPageLink}}." }, "third-party-plugin": { "name": "Plugin pihak ketiga", "option-safe-mode": "Mod selamat", "option-safe-mode-description-on": "Mod Selamat DIHIDUPKAN. Semua plugin komuniti telah dimatikan.", "option-safe-mode-description-off": "Mod Selamat DIMATIKAN. Plugin komuniti kini boleh dihidupkan.", "option-browse-community-plugins": "Plugin komuniti", "option-browse-community-plugins-description": "Gelintar dan pasang plugin pihak ketiga yang dihasilkan oleh komuniti kami yang hebat-hebat belaka.", "button-browse": "Gelintar", "label-third-party-plugin-warning": "Plugin pihak ketiga boleh mengakses fail dalam komputer, menyambung talian internet, dan juga memasang program tambahan.", "label-disable-safe-mode-confirmation": "Adakah anda ingin mematikan Mod Selamat untuk membenarkan plugin-plugin ini dipasang?", "button-keep-safe-mode": "Kekal dalam Mod Selamat", "button-disable-safe-mode": "Matikan Mod Selamat", "label-select-a-plugin": "Pilih satu plugin untuk dipasang atau belajar lanjut mengenainya.", "placeholder-community-plugins": "Cari plugin komuniti...", "msg-failed-load-plugins": "Gagal memuatkan plugin komuniti.", "label-installed": "Dipasang", "tooltip-downloaded-times": "Dimuat turun sebanyak {{count}} kali", "tooltip-downloaded-times_plural": "Dimuat turun sebanyak {{count}} kali", "button-install": "Pasang", "button-enable": "Hidupkan", "button-disable": "Matikan", "label-no-results-found": "Tiada hasil carian.", "msg-failed-to-load-manifest": "Gagal memuatkan 'manifest' plugin.", "label-version": "Versi: {{version}}", "label-currently-installed-version": " (versi yang dipasang sekarang: {{version}})", "label-by-author": "Oleh ", "label-repository": "Repositori: ", "label-unsupported": "Plugin ini tidak menyokong peranti anda.", "button-update": "Kemas kini", "label-no-readme": "Plugin ini tidak menyediakan fail README.", "msg-installing-plugin": "Memasang plugin \"{{name}}\"...", "msg-failed-to-install-plugin": "Gagal memasang plugin \"{{name}}\".", "msg-successfully-installed-plugin": "Berjaya memasang plugin \"{{name}}\".", "label-installed-plugins": "Plugin yang sudah dipasang", "button-reload-plugins": "Muat semula plugin", "msg-reloaded-third-party-plugins": "Sudah memuat semula plugin pihak ketiga.", "label-uninstall": "Buang", "label-uninstall-plugin": "Buang plugin", "label-uninstall-plugin-confirmation": "Adakah anda yakin ingin membuang plugin ini? Perbuatan ini akan memadam folder yang menempatkan plugin ini.", "button-open-plugins-folder": "Buka folder plugin", "button-check-for-updates": "Semak pengemaskinian", "button-update-all-plugins": "Kemas kini semua", "label-current-plugins": "Plugin yang ada", "label-currently-installed": "Sekarang ini ada {{count}} plugin yang dipasang.", "label-currently-installed_plural": "Sekarang ini ada {{count}} plugin yang dipasang.", "msg-no-updates-found": "Tiada kemas kini plugin yang dijumpai.", "msg-updates-found": "Terdapat {{count}} plugin yang ada kemas kini.", "msg-updates-found_plural": "Terdapat {{count}} plugin yang ada kemas kini.", "msg-update-plugin": "Kemas kini menjadi versi {{version}}", "option-search-installed-plugin": "Cari plugin yang dipasang", "option-search-installed-plugin-description": "Tapis plugin yang dipasang mengikut nama atau keterangan.", "placeholder-search-installed-plugin": "Cari plugin yang dipasang...", "label-sort-downloads-high-to-low": "Jumlah muat turun (tinggi ke rendah)", "label-sort-downloads-low-to-high": "Jumlah muat turun (rendah ke tinggi)", "label-sort-release-date-new-to-old": "Tarikh mula dikeluarkan (baharu ke lama)", "label-sort-release-date-old-to-new": "Tarikh mula dikeluarkan (lama ke baharu)", "label-sort-alphabetical": "Nama plugin (A ke Z)", "label-sort-alphabetical-reverse": "Nama plugin (Z ke A)", "label-search-summary": "Terdapat {{pluginCount}} plugin:" }, "mobile-toolbar": { "name": "Jalur alat untuk peranti mudah alih", "option-configure-quick-action": "Tetapan untuk Tindakan Pantas mudah alih", "option-configure-quick-action-description": "Tetapkan arahan apa yang ingin dilaksanakan ketika skrin dileret dari atas ke bawah. Arahan yang sekarang ialah \"{{command}}\".", "button-configure": "Penetapan", "placeholder-select-quick-action": "Pilih Tindakan Pantas...", "manage-toolbar-options": "Uruskan pilihan jalur alat", "option-internal-link": "Tambah pautan dalaman", "option-internal-embed": "Selitkan media atau sebahagian nota", "option-tag": "Tambah tag", "option-heading": "Jadikan pengepala", "option-bold": "Silih ganti tulisan tebal", "option-italics": "Silih ganti tulisan miring", "option-strikethrough": "Silih ganti tulisan berpalang", "option-highlight": "Silih ganti tulisan tumpuan", "option-code": "Silih ganti kod", "option-blockquote": "Silih ganti bongkah petua", "option-comment": "Silih ganti komen", "option-markdown-link": "Tambah pautan gaya Markdown", "option-bullet-list": "Silih ganti senarai bertitik", "option-numbered-list": "Silih ganti senarai bernombor", "option-checklist": "Silih ganti senarai semak", "option-indent-list": "Inden masuk item senarai", "option-unindent-list": "Inden keluar item senarai", "option-undo": "Undur kerja", "option-redo": "Maju kerja", "option-move-caret-up": "Pindah karet ke atas", "option-move-caret-down": "Pindah karet ke bawah", "option-move-caret-left": "Pindah karet ke kiri", "option-move-caret-right": "Pindah karet ke kanan", "option-first-line": "Pergi ke baris pertama", "option-last-line": "Pergi ke baris terakhir", "option-toggle-keyboard": "Buka/Tutup papan kekunci", "option-configure-toolbar": "Tetapan untuk jalur alat mudah alih", "option-added-options": "Pilihan yang dimasukkan", "option-more-toolbar-options": "Pilihan lanjut untuk jalur alat", "option-attach": "Masukkan lampiran", "option-add-command": "Tambah arahan global", "option-add-command-description": "Pilih arahan global untuk ditambahkan ke jalur alat." } }, "editor": { "search": { "label-previous": "Sebelumnya", "label-next": "Seterusnya", "label-all": "Semua", "label-exit-search": "Keluar carian", "label-replace": "Ganti masuk", "label-replace-all": "Ganti semua", "key-enter": "Enter", "key-shift-f3": "Shift + F3", "key-enter-or-f3": "Enter atau F3" }, "link-suggestion": { "label-type-hash": "Letak #", "label-link-heading": "untuk pautkan ke pengepala", "label-type-block": "Letak ^", "label-link-block": "untuk pautkan ke bongkah", "label-type-pipe": "Letak |", "label-change-display-text": "untuk ubah tulisan yang dipaparkan", "label-no-match-found": "Tiada padanan yang dijumpai" }, "spellcheck": { "no-suggestion": "Tiada saranan...", "add-to-dictionary": "Tambahkan ke kamus" }, "print-modal": { "title": "Eksport ke PDF", "caption": "Eksport \"{{filename}}\" ke PDF dengan tetapan berikut.", "setting-page-size": "Saiz muka surat", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-landscape": "Landscape", "setting-margin": "Margin", "setting-margin-default": "Default", "setting-margin-minimal": "Minimal", "setting-margin-none": "Tiada", "setting-downscale-percent": "Peratusan pengecilan", "button-export-to-pdf": "Eksport ke PDF" }, "link-popover": { "tooltip-follow-link": "Ikuti pautan", "tooltip-open-link": "Buka pautan", "tooltip-search-tag": "Cari tag" } }, "interface": { "embed-open-in-default-app-tooltip": "Buka dalam aplikasi default", "empty-sidebar": "Papan sisi adalah kosong, cuba tarik masuk satu tetingkap ke sini.", "sidebar-expand": "Kembangkan", "sidebar-collapse": "Tutup", "msg-fail-to-save-file": "Gagal menyimpan fail \"{{filepath}}\". {{message}}.", "no-file": "Tiada fail", "msg-file-changed": "\"{{file}}\" telah diubah suai di luar, sedang menyepadukan perubahan secara automatik.", "switch-vault": "Buka peti nota lain", "help": "Bantuan", "settings": "Tetapan", "drag-to-rearrange": "Tarik untuk tukar susunan", "msg-switched-to-preview": "Sudah tetapkan pralihat sebagai mod pertama.", "msg-switched-to-edit": "Sudah tetapkan penyuntingan sebagai mod pertama.", "msg-upgrade-installer": "Jika mahu gunakan ciri ini, sila pasang semula aplikasi menggunakan pemasang terkini daripada laman kami.", "tooltip-restore-default-settings": "Balik ke tetapan asal", "label-copy": "Salin ke papan klip", "copied": "{{item}} sudah disalin ke papan klip", "url": "Url", "msg-open-file-through-uri": "Sudah buka fail \"{{path}}\"", "msg-file-not-found-through-uri": "Fail \"{{name}}\" tidak dijumpai.", "delete-action-short-name": "Hapus", "msg-indexing": "Obsidian sedang mengindeks nota-nota...\nPerkara ini sepatutnya dilakukan sekali sahaja.\nBeberapa fungsi mungkin tidak ada buat seketika sehinggalah pengindeksan selesai.", "msg-indexing-complete": "Selesai mengindeks nota.", "empty-state": { "no-file-open": "Tiada fail yang dibuka", "create-new-file": "Buat fail baharu", "go-to-file": "Buka fail", "see-recent-files": "Lihat fail-fail terkini", "close": "Tutup" }, "menu": { "edit-view": "Sunting (Ctrl/Cmd+Click untuk sunting di tetingkap baharu)", "preview-view": "Pralihat (Ctrl/Cmd+Click untuk buka dalam tetingkap baharu)", "find": "Cari...", "replace": "Ganti...", "edit": "Sunting", "preview": "Pralihat", "more-options": "Pilihan lain", "close": "Tutup", "pin": "Semat", "unlink-pane": "Putuskan hubungan tetingkap", "link-pane": "Hubungkan tetingkap...", "delete-file": "Hapuskan fail", "open-in-new-pane": "Buka dalam tetingkap baharu", "copy-url": "Salin url", "close-current-pane": "Tutup tetingkap ini" }, "tooltip": { "click-to-expand": "Tekan untuk kembangkan", "click-to-collapse": "Tekan untuk tutup", "alias": "Alias" }, "start-screen": { "label-beta-version": "Versi beta", "option-open-folder-as-vault": "Buka folder sebagai Peti Nota", "option-open-folder-as-vault-description": "Pilih salah satu folder sedia ada yang mengandungi fail-fail Markdown.", "option-create-vault": "Buat Peti Nota baharu", "option-create-vault-description": "Buat satu folder baharu sebagai Peti Nota untuk Obsidian.", "option-open-help-vault": "Buka Peti Nota bantuan", "option-open-help-vault-description": "Buka Peti Nota \"Demo & Help\".", "option-new-vault-name": "Nama Peti Nota", "option-new-vault-name-description": "Pilih nama untuk Peti Nota anda yang gempak.", "option-new-vault-location": "Tempat", "option-new-vault-location-description": "Pilih tempat untuk meletakkan Peti Nota.", "button-open": "Buka", "button-help": "Bantuan", "button-browse": "Cari folder", "button-create-vault": "Buat Peti Nota", "button-back": "Balik", "msg-empty-vault-name": "Nama Peti Nota tidak boleh kosong.", "msg-invalid-folder": "Diminta pilih folder yang sah.", "msg-failed-to-create-vault": "Gagal membuat Peti Nota.", "msg-failed-to-create-vault-at-location": "Peti Nota gagal dibuat di tempat yang diberikan. Diminta semak semula tempat dan keizinan.", "msg-error-failed-to-open-vault": "Gagal membuka Peti Nota.", "msg-error-remove-current-open-vault": "Peti Nota yang sedang digunakan tidak boleh dibuang." }, "drag-and-drop": { "insert-link-here": "Masukkan pautan di sini", "insert-links-here": "Masukkan pautan di sini", "move-into-folder": "Pindah ke folder \"{{folder}}\"", "star-this-file": "Bintangkan fail ini", "star-these-files": "Bintangkan fail ini", "open-in-this-pane": "Buka dalam tetingkap ini" }, "window": { "maximize": "Maksimumkan", "minimize": "Minimumkan", "restore-down": "Kecilkan", "close-window": "Tutup", "go-back": "Ke belakang", "go-forward": "Ke hadapan" }, "start-up": { "loading-obsidian": "Memuatkan Obsidian...", "obsidian-load-error": "Berlaku ralat ketika memuatkan Obsidian.", "button-reload-app": "Muat semula aplikasi", "button-open-another-vault": "Buka Peti Nota baharu", "loading-components": "Memuatkan komponen...", "loading-plugins": "Memuatkan plugin...", "loading-vault": "Memuatkan Peti Nota...", "msg-failed-to-load-vault": "Gagal memuatkan Peti Nota: ", "loading-cache": "Memuatkan cache...", "loading-workspace": "Memuatkan tempat kerja..." } }, "commands": { "save-file": "Simpan fail ini", "follow-cursor-link": "Ikuti pautan pada penunjuk", "open-cursor-link-in-new-pane": "Buka pautan pada penunjuk dalam tetingkap baharu", "navigate-pane-above": "Tumpu pada tetingkap atas", "navigate-pane-below": "Tumpu pada tetingkap bawah", "navigate-pane-left": "Tumpu pada tetingkap kiri", "navigate-pane-right": "Tumpu pada tetingkap kanan", "toggle-pin": "Letak/Buang semat", "split-vertically": "Pisahkan secara menegak", "split-horizontally": "Pisahkan secara sisi", "navigate-back": "Ke belakang", "navigate-forward": "Ke hadapan", "use-dark-mode": "Gunakan mod gelap", "use-light-mode": "Gunakan mod cerah", "search-current-file": "Cari dalam fail", "search-replace-current-file": "Cari & ganti dalam fail", "open-settings": "Buka tetapan", "open-help": "Buka bantuan", "toggle-preview": "Tukar mod sunting/pralihat", "delete-current-file": "Hapuskan fail", "close-active-pane": "Tutup tetingkap", "close-other-panes": "Tutup semua tetingkap lain", "toggle-left-sidebar": "Buka/Tutup papan kiri", "toggle-right-sidebar": "Buka/Tutup papan kanan", "toggle-default-new-pane-mode": "Tukar mod pertama tetingkap", "toggle-fold": "Buka/Tutup lipatan dalam baris", "fold-all": "Lipat semua pengepala dan senarai", "unfold-all": "Buka lipatan semua pengepala dan senarai", "swap-line-up": "Pindah ke baris atas", "swap-line-down": "Pindah ke baris bawah", "toggle-bold": "Silih ganti tulisan tebal yang dipilih", "toggle-italics": "Silih ganti tulisan miring yang dipilih", "toggle-highlight": "Silih ganti tulisan tumpu yang dipilih", "toggle-comments": "Silih ganti format komen yang dipilih", "insert-link": "Masukkan pautan", "toggle-spellcheck": "Hidupkan/Matikan penyemak ejaan", "delete-paragraph": "Padam perenggan", "toggle-checklist": "Silih ganti status senarai semak", "edit-file-title": "Sunting tajuk fail", "copy-path": "Salin laluan ke fail", "copy-url": "Salin url Obsidian", "export-pdf": "Eksport ke PDF", "reload": "Muat semula aplikasi tanpa menyimpan" }, "dialogue": { "label-link-affected": "Ini akan memberi kesan kepada {{links}} dalam {{files}}.", "msg-updated-links": "Selesai mengemas kini {{links}} dalam {{files}}.", "label-update-links": "Kemas kini pautan", "label-confirm-update-link-to-file": "Adakah anda ingin mengemas kini pautan dalaman yang memaut ke fail ini?", "button-always-update": "Sentiasa kemas kini", "button-just-once": "Hanya sekali", "button-do-not-update": "Jangan kemas kini", "label-confirm-deletion": "Adakah anda pasti ingin memadam \"{{filename}}\"?", "label-move-to-system-trash": "Ia akan dipindahkan ke tong sampah sistem anda.", "label-move-to-vault-trash": "Ia akan dipindahkan ke tong sampah Obsidian, yang terletak pada folder tersembunyi \".trash\" dalam Peti Nota anda.", "label-permanent-delete": "Fail akan dihapuskan secara kekal.", "label-non-empty-folder": "Folder ini tidak kosong.", "label-delete-folder-warning": "Jika anda meneruskan, semua fail di dalam folder ini akan dihapuskan.", "label-delete-folder": "Hapuskan folder", "button-delete": "Hapus", "button-delete-do-not-ask-again": "Hapus dan jangan tanya lagi.", "label-existing-backlink": "Terdapat {{links}} menuju ke nota ini.", "label-delete-file": "Hapus fail", "button-cancel": "Batal", "button-done": "Selesai", "preparing-pdf": "Menyediakan PDF...", "label-rename-file": "Namakan semula fail", "label-new-name": "Nama baharu", "msg-rename-success": "Fail berjaya dinamakan semula." }, "plugins": { "name": "Plugin", "file-explorer": { "name": "Peneroka fail", "desc": "Lihat semua fail dalam peti nota anda.", "action-open": "Buka peneroka fail", "action-show": "Tunjuk peneroka fail", "action-create-note": "Buat nota baharu", "action-create-note-in-new-pane": "Buat nota baharu dalam tetingkap baharu", "action-new-note": "Nota baharu", "action-new-folder": "Folder baharu", "action-change-sort": "Tukar kaedah pengisihan", "action-reveal-file": "Tunjuk fail dalam peneroka fail", "action-reveal-active-file": "Tunjukkan fail terkini di peneroka fail", "command-move-file": "Pindah fail ke folder lain", "action-move-file": "Pindahkan fail ke...", "action-move-folder": "Pindahkan folder ke...", "prompt-type-folder": "Taip nama folder", "label-no-folders": "Tiada folder ditemui.", "instruction-navigate": "untuk navigasi", "instruction-move": "untuk pergerakan", "instruction-dismiss": "untuk abaikan", "label-sort-a-to-z": "Pengisihan mengikut nama (A ke Z)", "label-sort-z-to-a": "Pengisihan mengikut nama (Z ke A)", "label-sort-new-to-old": "Pengisihan mengikut waktu suntingan (baharu ke lama)", "label-sort-old-to-new": "Pengisihan mengikut waktu suntingan (baharu ke lama)", "label-sort-created-old-to-new": "Masa dibuat (baharu ke lama)", "label-sort-created-new-to-old": "Masa dibuat (lama ke baharu)", "menu-opt-new-note": "Nota baharu", "menu-opt-new-folder": "Folder baharu", "menu-opt-set-attachment-folder": "Tetapkan sebagai folder lampiran", "menu-opt-rename": "Tukar nama", "menu-opt-delete": "Hapus", "menu-opt-make-copy": "Buat satu salinan", "msg-invalid-characters": "Nama fail tidak boleh mengandungi mana-mana aksara berikut: ", "msg-unsafe-characters": "Pautan tidak akan berfungsi dengan nama yang mengandungi aksara berikut: ", "msg-file-already-exists": "Sudah ada fail dengan nama yang sama", "msg-empty-file-name": "Nama fail tidak boleh kosong.", "tooltip-modified-time": "Kali terakhir disunting {{time}}", "tooltip-created-time": "Dibuat pada {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Pindah", "label-untitled-file": "Tak bertajuk", "label-untitled-folder": "Tak bertajuk", "msg-set-attachment-folder": "Lampiran akan disimpan di \"{{path}}\" mulai sekarang." }, "search": { "name": "Carian", "desc": "Cari kata kunci di semua nota.", "action-open-search": "Cari dalam semua fail", "label-collapse-results": "Mampatkan hasil carian", "label-match-case": "Padankan huruf besar atau kecil dengan tepat", "label-explain-search-term": "Jelaskan hasil carian", "label-more-context": "Kembangkan konteks lanjut", "prompt-start-search": "Taip untuk mulakan carian...", "label-match-text": "Memadankan teks: ", "label-match-regex": "Memadankan regex: ", "label-match-exact-text": "Mengandungi teks sebiji-sebiji: ", "label-match-all": "Memadankan semua: ", "label-match-any": "Memadankan sebahagian: ", "label-excluding": "Mengecualikan: ", "label-case-sensitive": "Menepati carian huruf besar atau kecil", "label-case-insensitive": "Mengabaikan ketepatan huruf besar atau kecil", "label-match-file-path": "Memadankan laluan folder: ", "label-match-file-name": "Memadankan nama fail: ", "label-match-content": "Memadankan isi fail: ", "label-match-task": "Memadankan tugasan: ", "label-match-task-todo": "Memadankan tugasan (belum): ", "label-match-task-done": "Memadankan tugasan (siap): ", "label-match-line": "Memadankan barisan: ", "label-match-tag": "Memadankan tag: ", "label-no-matches": "Tiada padanan dijumpai.", "matches-with-count": "... dan {{count}} lagi padanan.", "matches-with-count_plural": "... dan {{count}} lagi padanan.", "label-copy-search-results": "Salin hasil carian", "button-copy-results": "Salin hasil", "msg-successfully-copied": "Berjaya menyalin hasil carian.", "option-show-path": "Tunjukkan laluan", "option-show-path-description": "Tunjukkan laluan penuh ke fail berbanding hanya nama fail.", "option-link-style": "Gaya pautan", "option-link-style-description": "Pilih sama ada mahu menukarkan setiap hasil fail menjadi pautan.", "option-choice-link-style-none": "Tiada", "option-choice-link-style-wikilink": "Wikipautan", "option-choice-link-style-markdown-link": "Pautan Markdown", "option-list-prefix": "Imbuhan senarai", "option-list-prefix-description": "Pilih sama ada mahu mengimbuhkan item senarai pada setiap hasil fail.", "option-choice-list-style-none": "Tiada", "option-choice-list-style-dash": "Dash (-)", "option-choice-list-style-asterisk": "Asterisk (*)", "option-choice-list-style-numbered": "Bernombor", "tooltip-clear-search": "Kosongkan carian", "label-search-options": "Tetapan carian", "tooltip-read-more": "Baca lanjut", "label-history": "Sejarah", "tooltip-clear-history": "Kosongkan sejarah carian", "label-path-option-description": "padankan laluan ke fail", "label-file-name-option-description": "padankan nama fail", "label-tag-option-description": "cari tag", "label-line-option-description": "cari kata kunci dalam barisan yang sama", "label-section-option-description": "cari kata kunci bawah pengepala yang sama" }, "quick-switcher": { "name": "Penukaran pantas", "desc": "Tukar ke fail lain tanpa meninggalkan papan kekunci. Gunakan Ctrl/Cmd+O untuk aktifkan.", "short-name": "Penukar fail", "action-open": "Aktifkan penukaran pantas", "instruction-navigate": "untuk navigasi", "instruction-open": "untuk buka", "instruction-open-in-new-pane": "untuk buka di tetingkap baharu", "instruction-create": "untuk wujudkan", "instruction-dismiss": "untuk tutup", "label-no-note-create-new": "Tiada nota dijumpai. Tekan Enter untuk wujudkan yang baharu.", "prompt-type-file-name": "Taip fail yang ingin dibuka atau diwujudkan...", "label-enter-to-create": "Tekan Enter untuk buat" }, "graph-view": { "name": "Paparan graf", "desc": "Lihat graf yang menggambarkan pautan antara nota.", "action-open": "Buka paparan graf", "action-open-local": "Buka graf tempatan", "action-copy-screenshot": "Salin tangkap layar", "tab-title": "Graf {{displayText}}", "label-filters": "Tapisan", "prompt-filter-nodes": "Cari fail...", "option-depth": "Kedalaman", "option-depth-description": "Tunjukkan nota yang dihubungkan sedalam jumlah pautan ini", "option-neighbor-links": "Pautan jiran", "option-neighbor-links-description": "Tunjukkan pautan antara jiran.", "option-forelinks": "Pautan keluar", "option-forelinks-description": "Tunjukkan pautan ke fail lain", "option-backlinks": "Pautan balik", "option-backlinks-description": "Tunjukkan pautan dari fail lain", "option-show-tags": "Tag", "option-show-tags-description": "Tag dipautkan dengan fail yang menyebut tag tersebut", "option-show-attachments": "Lampiran", "option-show-attachments-description": "Tunjukkan lampiran yang dimasukkan dalam fail", "option-show-existing-files-only": "Fail yang wujud sahaja", "option-show-existing-files-only-description": "Kalau ya, maka fail yang tidak wujud tidak ditunjukkan", "option-show-orphans": "Nota terpencil", "option-show-orphans-description": "Tunjukkan nota yang tidak dipautkan oleh mana-mana fail lain", "label-display": "Penampilan", "option-show-arrows": "Anak panah", "option-show-arrows-description": "Tunjukkan anak panah apabila dizum masuk", "option-text-fade": "Bila pudarnya teks", "option-node-size": "Saiz titik", "option-link-thickness": "Ketebalan pautan", "label-forces": "Daya", "option-center-force": "Daya pusat", "option-link-force": "Daya pautan", "option-link-distance": "Jarak pautan", "option-repel-force": "Daya menolak", "tooltip-open-graph-settings": "Buka tetapan graf", "msg-screenshot-copied": "Tangkap layar sudah disalin ke papan klip.", "label-groups": "Kumpulan", "placeholder-enter-query": "Masukkan carian...", "tooltip-delete-graph": "Padam kumpulan", "button-new-group": "Kumpulan baharu", "tooltip-click-to-change-drag-to-reorder": "Tekan untuk ubah warna\nTarik untuk ubah susunan", "action-timelapse": "Mulakan animasi susur masa perkembangan peti", "tooltip-start-timelapse-animation": "Mulakan animasi", "button-animate-timelapse": "Animasikan" }, "backlinks": { "name": "Pautan balik", "desc": "Tunjukkan jumlah pautan balik dalam jalur status.", "action-open": "Buka pautan balik", "action-show": "Buka tetingkap pautan balik", "action-open-for-current": "Buka pautan balik untuk fail ini", "action-toggle-backlinks-in-document": "Letak/Buang pautan balik dalam dokuman", "label-linked-mentions": "Sebutan yang dipautkan", "label-no-backlinks": "Tiada pautan balik yang dijumpai.", "label-unlinked-mentions": "Sebutan yang tidak dipautkan", "label-show-search": "Tunjukkan tapisan carian", "label-link-button-text": "Pautan", "tab-title": "Pautan balik untuk {{displayText}}", "label-no-unlinked-mentions": "Tiada sebutan tidak dipautkan yang dijumpai.", "ellipsis": "..." }, "tag-pane": { "name": "Tetingkap Tag", "desc": "Tunjukkan semua tag yang ada serta jumpa kemunculannya.", "action-show": "Tunjukkan tetingkap tag", "label-no-tags": "Tiada tag dijumpai.", "label-sort-by-name-a-to-z": "Nama tag (A ke Z)", "label-sort-by-name-z-to-a": "Nama tag (Z ke A)", "label-sort-by-frequency-high-to-low": "Kekerapan (selalu ke jarang)", "label-sort-by-frequency-low-to-high": "Kekerapan (jarang ke selalu)", "action-show-nested-tags": "Tunjukkan tag bertingkat" }, "page-preview": { "name": "Pratonton pautan", "desc": "Tunjukkan nota yang dipautkan apabila penunjuk dihalakan atas pautan. Kalau dalam mod suntingan, Ctrl/Cmd + halakan penunjuk.", "label-empty-note": "\"{{linktext}}\" belum wujud. Tekan untuk wujudkan.", "label-source-editor": "Suntingan", "label-source-preview": "Pratontonan", "label-source-search-backlinks": "Carian dan pautan balik", "label-require-mod": "Perlu tekan {{key}} untuk aktifkan ciri pratontonan pautan" }, "starred": { "name": "Bintang", "desc": "Bintangkan fail dan carian yang paling kerap dikunjungi.", "action-show": "Buka tetingkap bintang", "action-toggle": "Letak/Buang bintang di fail ini", "action-toggle-search": "Letak/Buang bintang untuk carian ini", "action-star": "Letak bintang", "action-unstar": "Buang bintang", "menu-opt-remove": "Buang", "msg-successfully-starred": "{{type}} \"{{title}}\" berjaya dibintangkan.", "msg-removed-starred": "{{type}} \"{{title}}\" berjaya dibuang bintang.", "msg-cannot-find-path": "Tidak jumpa fail pada \"{{path}}\"." }, "custom-css": { "name": "CSS Sendiri", "desc": "Menghiasi peti ini dengan CSS yang ditulis sendiri dalam \"obsidian.css\".", "setting-community-themes": "Tema komuniti", "msg-fetching-themes": "Sedang mendapatkan data tema komuniti...", "prompt-filter": "Tapisan...", "label-dark-theme-only": "Tema gelap sahaja", "label-light-theme-only": "Tema terang sahaja", "label-preview": "Cuba pakai", "label-stop-preview": "Hentikan cubaan", "label-use": "Guna", "label-override": "Override", "label-visit-on-github": "Lawati GitHub", "msg-fetching-css": "Mendapatkan CSS...", "theme-title": "\"{{name}}\" oleh {{author}}", "msg-override-theme": "Override CSS terkini", "msg-existing-theme": "Anda sudah ada fail \"obsidian.css\" tersendiri.", "msg-confirm-override": "Adakah anda pasti ingin overridekan CSS sendiri? Anda akan hilang fail CSS anda yang asal. Buat fail sandaran jika perlu.", "msg-load-error": "Tidak boleh mendapatkan data tema. Mungkin internet anda bermasalah.", "msg-now-using-theme": "Sekarang anda sedang gunakan tema {{title}}." }, "command-palette": { "name": "Palet arahan", "desc": "Taipkan arahan untuk laksanakannya dengan pantas tanpa mengingati pintasan.", "action-open": "Buka palet arahan", "instruction-navigate": "untuk navigasi", "instruction-use": "untuk guna", "instruction-dismiss": "untuk tutup", "label-no-commands": "Tiada arahan ditemui.", "prompt-type-command": "Taipkan arahan...", "label-pinned-commands": "Arahan tersemat", "option-add-new-pin": "Arahan tersemat baharu", "option-add-new-pin-description": "Arahan tersemat akan diutamakan di tempat paling atas sewaktu tiada apa yang ditaipkan." }, "markdown-format-importer": { "name": "Pengimport format Markdown", "desc": "Tukar fail Markdown dari aplikasi lain menjadi format Markdown Obsidian.", "action-open": "Buka pengimport Markdown", "option-roam-tag-fixer": "Baiki tag Roam Research", "option-roam-tag-fixer-description": "Menukar \"#tag\" dan \"#[[tag]]\" menjadi \"[[tag]]\".", "option-roam-highlight-fixer": "Baiki teks tumpu Roam Research", "option-roam-highlight-fixer-description": "Menukar \"^^tumpuan^^\" menjadi \"==tumpuan==\".", "option-roam-todo-converter": "Tukar TODO Roam Research", "option-roam-todo-converter-description": "Menukar \"{{[[TODO]]}}\" menjadi \"[ ]\".", "option-bear-highlight-fixer": "Baiki teks tumpu Bear", "option-bear-highlight-fixer-description": "Menukar \"::tumpuan::\" menjadi \"==tumpuan==\".", "zettelkasten-link-fixer": "Baiki pautan Zettelkasten", "zettelkasten-link-fixer-description": "Membaiki pautan \"[[UID]]\" menjadi pautan dengan nama penuh \"[[UID Nama Fail]]\".", "zettelkasten-link-beautifier": "Perkemas pautan Zettelkasten", "zettelkasten-link-beautifier-description": "Membaiki pautan \"[[UID]]\" dan perkemaskannya menjadi \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Peringatan: Pengimport akan mengubah format semua fail dalam peti anda, bukan untuk fail yang terbuka sahaja.", "msg-override-files-warning": "Fail-fail anda akan dipaksa ubah. Dinasihatkan agar semua fail disandarkan sebelum cuba mengubah format.", "label-start-conversion": "Mula tukar format", "label-stop": "Berhenti", "label-go-back": "Patah balik", "label-done": "Selesai", "label-processing": "Sedang diproses...", "label-cancelling": "Sedang dibatalkan...", "label-finished": "Sudah habis!", "label-processed-files": "Fail yang diproses", "label-modified-files": "Fail yang diubah suai", "label-total-replacements": "Total replacements" }, "daily-notes": { "name": "Nota harian", "desc": "Buka hari ini punya nota harian, atau wujudkan kalau tiada.", "short-name": "Hari ini", "action-open": "Buka nota hari ini", "action-open-previous": "Buka nota hari sebelumnya", "action-open-next": "Buka nota hari seterusnya", "msg-fail-format": "Gagal mewujudkan nota harian. \"{{format}}\" bukanlah format yang sah.", "msg-fail-folder": "Gagal mewujudkan nota harian. Folder \"{{folderOption}}\" tidak dijumpai.", "msg-fail-template-file": "Gagal mewujudkan nota harian. Fail templat \"{{template}}\" tidak dijumpai.", "msg-no-previous": "Tiada nota harian untuk hari sebelum ini.", "msg-no-next": "Tiada nota harian untuk hari selepas ini.", "option-date-format": "Format tarikh", "label-refer-to-syntax": "Untuk sintaksis lanjut, lawat: ", "label-syntax-link": "rujukan format", "label-syntax-live-preview": "Inilah rupa tarikhnya: ", "option-new-file-location": "Tempat letak fail baharu", "option-new-file-location-description": "Laluan folder untuk membuat nota harian.", "option-template": "Tempat letak fail templat", "option-template-description": "Laluan fail yang akan digunakan sebagai templat.", "option-open-on-start": "Buka nota harian bila buka aplikasi", "option-open-on-start-description": "Buka nota harian secara automatik setiap kali anda membuka peti ini." }, "zettelkasten-prefixer": { "name": "Pengimbuh Zettelkasten", "desc": "Buat nota baharu dengan imbuhan format ID Zettelkasten 12 digit YYYYMMDDHHII (Contoh 202001010000).", "short-name": "Nota ZK", "action-create-note": "Buat nota Zettelkasten baharu", "option-new-file-location": "Tempat letak fail baharu", "option-new-file-location-description": "Laluan folder untuk membuat nota Zettelkasten baharu.", "msg-folder-not-found": "Gagal mewujudkan nota Zettelkasten. Folder \"{{folderOption}}\" tidak dijumpai.", "option-template-file": "Tempat letak fail templat", "option-template-file-description": "Fail yang akan digunakan sebagai templat.", "option-template-file-placeholder": "Contoh: folder1/note", "option-id-format": "Format ID Zettel", "msg-template-file-not-found": "Gagal mewujudkan nota Zettelkasten. Fail templat \"{{template}}\" tidak dijumpai." }, "random-note": { "name": "Nota rawak", "desc": "Buka suatu nota rawak. Berguna untuk mengkaji dan menemui nota.", "short-name": "Rawak", "action-open": "Buka nota secara rawak" }, "outline": { "name": "Kerangka", "desc": "Tunjukkan setiap pengepala sebagai kerangka untuk nota ini atau nota yang terpaut.", "action-open": "Buka kerangka", "action-show": "Buka tetingkap kerangka", "action-open-for-current": "Buka kerangka nota ini", "tab-title": "Kerangka {{displayText}}", "label-no-headings": "Tiada pengepala dijumpai." }, "word-count": { "name": "Jumlah kata", "desc": "Tunjukkan jumlah perkataan dalam jalur status." }, "slides": { "name": "Slaid", "desc": "Buat pembentangan guna Markdown. Gunakan \"---\" untuk pisahkan slaid.", "action-start": "Mula pembentangan" }, "audio-recorder": { "name": "Perakam audio", "desc": "Rakam audio dan simpan sebagai lampiran.", "action-start": "Mula rakam audio", "action-stop": "Henti rakam audio", "action-toggle": "Mula/Henti rakaman", "msg-access-denied": "Akses ke mikrofon dinafikan, tolong berikan akses melalui preference pane.", "msg-pending-grant": "Tolong berikan akses ke mikrofon untuk merakam audio.", "msg-no-microphone": "Tiada mikrofon yang tersambung." }, "open-with-default-app": { "name": "Buka dalam aplikasi lalai", "desc": "Tambah butang untuk membuka fail semasa dalam aplikasi lalai.", "action-open-file": "Buka dalam aplikasi lalai", "action-show-in-folder": "Tunjuk dalam folder" }, "templates": { "name": "Templat", "desc": "Masukkan kandungan bertemplat yang diambil dari folder berisi fail-fail templat.", "action-insert": "Masukkan templat", "option-template-folder-location": "Templat letak folder templat", "option-template-folder-location-description": "Fail-fail dalam folder ini akan dijadikan templat.", "option-template-date-format": "Format tarikh", "option-template-date-format-description": "{{date}} dalam templat akan digantikan dengan nilai ini.", "option-template-date-format-description2": "Anda juga boleh guna {{date:YYYY-MM-DD}} untuk memaksa format untuk templat terpilih.", "option-template-time-format": "Format masa", "option-template-time-format-description": "{{time}} dalam templat akan digantikan dengan nilai ini.", "option-template-time-format-description2": "Anda juga boleh guna {{time:HH:mm}} untuk memaksa format untuk templat terpilih.", "instruction-navigate": "untuk navigasi", "instruction-insert": "untuk masukkan templat", "instruction-dismiss": "untuk tutup", "msg-no-templates-found": "Tiada templat ditemui", "msg-fail-invalid-folder": "Gagal menemui senarai templat. Folder templat tidak sah.", "msg-fail-folder-not-found": "Gagal menemui senarai templat. Folder \"{{folderOption}}\" tidak dijumpai.", "prompt-type-template": "Taip nama templat..." }, "translucency": { "name": "Latar lut cahaya", "desc": "Hidupkan latar belakang lut cahaya untuk nampak berlapis-lapis. Disarankan dipasang bersama mod gelap. Tidak disokong dalam Linux." }, "publish": { "name": "Publish", "desc": "Terbitkan nota-nota melalui Obsidian Publish.", "action-publish-changes": "Terbitkan perubahan...", "label-no-internet-access": "Anda perlu capaian internet untuk menerbitkan perubahan.", "label-publish-service-description": "Obsidian Publish ialah perkhidmatan tambahan berbayar yang membolehkan anda menerbitkan nota dalam talian melalui Obsidian.", "label-please-login": "Untuk mula menerbit, diminta daftar masuk atau buat akaun Obsidian baharu.", "label-no-publish-subscription": "Anda belum lagi melanggan khidmat Obsidian Publish.", "button-purchase": "Beli", "label-manage-sites": "Uruskan laman web", "label-no-sites": "Anda tiada laman web.", "button-choose": "Pilih", "tooltip-edit-site-id": "Sunting ID laman", "tooltip-delete-site": "Hapus laman", "label-delete-site-confirmation": "Anda yakin anda ingin menghapuskan laman ini?", "label-delete-site-details": "Perkara ini akan menghapuskan laman serta-merta buat selama-lamanya.", "label-confirm-delete-site": "Sahkan penghapusan laman \"{{site}}\"", "option-site-id": "ID laman", "option-site-id-description": "Laman anda akan disiarkan di https://publish.obsidian.md/{site id}. Anda boleh mengubahnya kemudian. Hanya huruf kecil, nombor, dan sengkang sahaja dibenarkan.", "option-site-id-placeholder": "Pilih ID laman", "button-create": "Buat", "msg-invalid-site-id": "ID laman hanya boleh ada huruf kecil, nombor dan sengkang.", "msg-site-id-in-use": "ID laman ini sedang digunakan orang lain. Pilih ID yang lain.", "msg-create-site-issue": "Ada masalah membuat laman anda.", "label-site-options": "Tetapan laman", "option-site-metadata": "Metadata", "option-site-components": "Komponen", "option-site-appearance": "Penampilan", "option-site-reading-experience": "Reading experience", "option-site-misc": "Tetapan lanjut laman", "option-site-name": "Nama laman", "option-site-name-description": "Nama laman yang anda terbitkan. Ini yang akan muncul sebagai tajuk laman anda.", "option-site-name-placeholder": "Nama laman anda", "option-home-page-file": "Fail halaman induk", "option-home-page-file-description": "Halaman pertama yang akan dilihat oleh pelawat ketika sampai ke laman anda", "option-home-page-file-placeholder": "Pilih dari fail yang terbit", "option-logo": "Logo", "option-logo-description": "Pilih fail gambar yang akan dijadikan logo laman anda.", "option-logo-placeholder": "Mana-mana gambar yang dimuat naik dari peti...", "option-theme": "Tema", "option-theme-description": "Pilih tema warna untuk laman anda.", "option-show-navigation": "Tunjukkan navigasi", "option-show-navigation-description": "Tunjukkan senarai halaman yang sudah terbit di sebelah kiri laman.", "option-show-search": "Tunjukkan jalur carian", "option-show-search-description": "Tunjukkan jalur carian di bahagian atas navigasi yang membolehkan halaman dan pengepala-pengepalanya dicari oleh pelawat.", "option-show-graph": "Tunjukkan paparan graf", "option-show-graph-description": "Tunjukkan graf tempatan yang kecil di setiap halaman.", "option-show-outline": "Tunjukkan senarai kandungan", "option-show-outline-description": "Tunjukkan kerangka pengepala di setiap halaman.", "option-show-backlinks": "Tunjukkan pautan balik", "option-show-backlinks-description": "Tunjukkan bahagian pautan balik di hujung setiap halaman.", "option-sliding-window-mode": "Guna tetingkap boleh gelungsur", "option-sliding-window-mode-description": "Buka halaman baharu di hujung belah kanan dan boleh menggelungsur tetingkap ke kiri dan ke kanan.", "option-hover-preview-file": "Tunjuk pratontonan terapung", "option-hover-preview-file-description": "Paparkan pratontonan halaman bila penunjuk dihalakan ke pautan.", "option-readable-line-length": "Panjang baris boleh dibaca", "option-readable-line-length-description": "Hadkan panjang baris maksimum. Tak banyak yang akan muat dalam skrin, tapi perenggan panjang lebih mudah dibaca.", "option-site-password": "Kata laluan", "option-site-password-description": "Hadkan akses ke laman menggunakan kata laluan.", "option-google-analytics": "Kod penjejak Google Analytics", "option-google-analytics-description": "Gunakan Google Analytics untuk laman anda. Hanya boleh digunakan kalau anda gunakan domain URL sendiri. Disarankan ambil maklum berkaitan undang-undang tempatan terlebih dahulu.", "button-manage-passwords": "Urus", "button-save-site-settings": "Simpan tetapan laman", "msg-updated-options": "Tetapan laman sudah dikemas kini.", "button-go-back": "Balik", "label-publishing-to": "Diterbit ke", "tooltip-switch-site": "Tukar laman", "button-add-linked": "Tambah yang terpaut", "tooltip-add-linked": "Tambah masuk semua fail yang dipautkan dari item yang dipilih", "msg-added-linked-files": "{{count}} fail terpaut sudah ditambah.", "msg-added-linked-files_plural": "{{count}} fail terpaut sudah ditambah.", "tooltip-open-site-options": "Tukar tetapan laman", "label-no-changes-detected": "Tiada perubahan yang ditemui.", "label-changed-files-to-be-published": "Perubahan", "label-unchanged-files-already-published": "Tiada perubahan (pilih untuk buang)", "label-file-selected": " dipilih", "button-select-all-files": "Pilih semua", "button-deselect-all-files": "Batalkan semua pilihan", "label-new-files-to-be-published": "Baharu", "button-publish": "Terbit", "msg-no-permission-to-publish-to-site": "Anda tiada keizinan untuk terbit ke laman tersebut.", "msg-select-at-least-one-file": "Sila pilih sekurang-kurangnya satu fail.", "label-upload-changes": "Muat naik perubahan", "button-done": "Selesai", "button-stop": "Henti", "label-status-uploading": "Memuat naik", "label-status-to-publish": "Untuk terbit", "label-status-to-delete": "Untuk hapus", "label-status-published": "Sudah terbit", "label-status-deleted": "Sudah hapus", "label-status-failed": "Gagal", "label-status-cancelled": "Dibatalkan", "button-change": "Ubah", "label-clear-cache": "Perubahan pada laman mengambil masa beberapa minit. Kalau anda tidak nampak perubahan terbaharu, cuba buang cache pelayar anda.", "label-visit-site": "Laman anda boleh dilawati di sini: ", "msg-something-went-wrong": "Ada masalah timbul. Lihat konsol untuk maklumat lanjut.", "msg-network-error": "Ralat mencapai internet. ", "label-manage-passwords": "Uruskan kata laluan", "label-add-password": "Tambah kata laluan", "action-new-password": "Kata laluan baharu", "label-no-password": "Laman anda tiada kata laluan. Sesiapa sahaja boleh melawatnya.", "label-have-password": "Laman anda dikunci oleh kata laluan. Jika anda mempunyai banyak kata laluan, pelawat boleh masuk menggunakan mana-mana kata laluan tersebut.", "option-password-name": "Kata laluan", "option-password-desc": "Kata laluan dalam bentuk hash akan disimpan dengan selamat. Setelah kata laluan ditetapkan, ia tidak boleh didedahkan sebagai teks boleh dibaca.", "option-password-placeholder": "Kata laluan anda", "option-nickname-name": "Nama panggilan (pilihan)", "option-nickname-desc": "Letak nama panggilan untuk ingatkan diri kata laluan itu untuk siapa.", "action-add-password": "Tambah kata laluan ini", "label-untitled-password": "Kata laluan tanpa nama", "label-password-created-time": "Dibuat {{time}}", "msg-added-new-password": "Kata laluan baharu selesai dibuat.", "option-custom-domain": "Domain kustom", "option-custom-domain-desc": "Guna domain sendiri berbanding https://publish.obsidian.md/{site id} yang disediakan.", "option-noindex": "Jangan indeks laman ini", "option-noindex-desc": "Mencegah enjin carian mengindeks laman anda.", "button-configure": "Tetapkan", "label-configure-custom-domain": "Tetapkan domain kustom", "option-custom-url-name": "URL kustom", "option-custom-url-desc": "URL tempat letak laman anda.", "option-custom-url-placeholder": "www.domainanda.com", "option-custom-url-redirect": "Halakan pelawat ke domain kustom", "option-custom-url-redirect-desc": "Bawa pelawat yang melawat publish.obsidian.md/id ke domain anda.", "button-update-custom-domain": "Kemas kini tetapan domain", "label-custom-domain-instructions": "Sila rujuk pautan bantuan kami di {{link}} untuk maklumat lanjut.", "label-custom-domain-link-name": "panduan pengurusan domain kustom", "label-site-usage": "Anda sedang gunakan {{site}} daripada {{limit}} laman.", "button-add-more-sites": "Bila laman lagi" }, "workspaces": { "name": "Tempat kerja", "desc": "Simpan dan muat susun atur ruang tempat kerja.", "action-load": "Muat susun tempat kerja", "action-manage-workspaces": "Urus tempat kerja", "action-save-and-load": "Simpan dan muat susun tempat kerja lain", "placeholder-save-current-workspace-as": "Simpan tempat kerja semasa sebagai...", "button-save": "Simpan", "button-load": "Muat susun", "tooltip-delete-workspace": "Hapuskan tempat kerja", "msg-delete-workspace-success": "Tempat kerja berjaya dihapuskan.", "msg-please-enter-name": "Sila masukkan nama untuk tempat kerja baru.", "msg-save-workspace-success": "Tempat kerja berjaya disimpan.", "label-no-workspaces-found": "Tiada tempat kerja disimpan yang dijumpai.", "placeholder-type-to-search-workspaces": "Taipkan nama tempat kerja..." }, "sync": { "name": "Sync", "desc": "Segerakkan fail-fail anda melalui Obsidian Sync.", "action-view-version-history": "Lihat sejarah versi", "label-load-more": "Papar lagi", "label-copy-to-clipboard": "Salin ke papan klip", "label-restore-this-version": "Pulihkan versi ini", "msg-already-latest-version": "Versi ini adalah sama dengan versi yang terkini.", "msg-restored-version": "Berjaya memulihkan versi dari {{time}}", "label-file-deleted": "Fail ini telah dihapus", "label-no-earlier-version": "Fail ini tiada versi awal.", "label-empty-file": "Kosong", "label-deleted-files": "Fail terhapus", "label-click-to-see-history": "Tekan pada fail terhapus untuk lihat sejarahnya.", "label-create-remote-vault": "Wujudkan peti dalam awan", "msg-please-enter-password": "Sila letak kata laluan.", "msg-vault-name-cannot-be-empty": "Nama peti tidak boleh kosong.", "msg-successfully-created-vault": "Berjaya mewujudkan peti awan bernama \"{{name}}\".", "label-remote-vault-explanation": "Peti awan menyegerakkan peti-peti dari peranti berbeza secara selamat.", "option-vault-name": "Nama peti", "option-vault-name-desc": "Bantu anda mengingati tujuan peti ini dibuat.", "option-vault-name-placeholder": "Peti gempak saya", "option-use-custom-encryption-password": "Tetapkan kata laluan penyulitan hujung-ke-hujung", "option-use-custom-encryption-password-desc": "Jika anda biarkan benda ini, kami akan uruskan kunci penyulitan untuk anda secara selamat.", "option-use-custom-encryption-password-desc-warning": "Pilihan ini tidak boleh diubah kemudian.", "option-encryption-password": "Kata laluan penyulitan", "option-encryption-password-desc": "Kata laluan ini tidak boleh diubah kemudian.", "option-encryption-password-desc-warning": "Jika anda lupa kata laluan ini, mana-mana data dalam awan tidak boleh digunakan selama-lamanya.", "option-encryption-password-desc-2": "Perkara ini tidak memberi kesan pada data tempatan anda.", "option-encryption-password-placeholder": "Kata laluan anda", "label-enter-encryption-password": "Letak kata laluan penyulitan", "button-unlock-vault": "Buka kunci peti", "msg-verified-password": "Berjaya mengesahkan kata laluan anda.", "label-remote-vaults": "Peti awan anda", "label-connected-vault": "Tersambung", "label-vault-created-time": "Dibuat {{time}}", "tooltip-delete-remote-vault": "Hapus", "label-confirm-delete-remote-vault": "Sah hapus peti", "label-confirm-delete-remote-vault-question": "Anda yakin anda ingin menghapuskan peti awan ini?", "label-confirm-delete-remote-vault-result": "Semua data dalam pelayan kami, termasuklah sejarah versi, akan dihapuskan. Data-data dalam komputer anda tidak disentuh.", "label-confirm-delete-remote-vault-warning": "Perbuatan ini akan kekal dan tidak boleh berpatah balik.", "msg-remote-vault-deleted": "{{name}} sudah dihapuskan.", "button-connect-to-remote-vault": "Sambungkan", "button-disconnect-from-remote-vault": "Putuskan", "label-not-remote-vaults": "Anda tiada peti awan.", "button-create-new-remote-vault": "Wujudkan peti awan baharu", "label-sync-log": "Log penyegerakan", "options-only-show-errors": "Ralat sahaja", "options-only-show-errors-desc": "Tunjukkan ralat sahaja dan sembunyikan log-log lain.", "button-copy-sync-log": "Salin log penyegerakan", "msg-successfully-copied-sync-log": "Berjaya menyalin log penyegerakan.", "button-retry": "Cuba lagi", "label-no-sync-subscription": "Anda belum melanggan Obsidian Sync.", "button-purchase-subscription": "Beli", "option-pick-remote-vault": "Pilih peti awan", "button-choose-remote-vault": "Pilih", "option-pick-remote-vault-desc-connected": "Sekarang ini bersambung dengan peti awan bernama \"{{name}}\".", "option-pick-remote-vault-desc-not-connected": "Sekarang ini tidak bersambung dengan mana-mana peti awan.", "option-sync-status": "Status Sync", "option-sync-status-desc-paused": "Obsidian Sync sedang jeda.", "option-sync-status-desc-running": "Obsidian Sync sedang bergerak.", "option-device-name": "Nama peranti", "option-device-name-desc": "Nama ini akan ditunjukkan dalam log penyegerakan. Biarkan kosong untuk nama default.", "button-resume": "Teruskan", "button-pause": "Jeda", "option-view-deleted-files": "Fail terhapus", "option-view-deleted-files-desc": "Lihat dan pulihkan fail terhapus.", "option-sync-log": "Aktiviti Sync", "option-sync-log-desc": "Lihat aktiviti terkini Sync untuk tujuan nyahpepijat.", "button-view": "Lihat", "option-over-size": "Saiz peti melebihi had", "option-over-size-desc": "Peti anda bersaiz {{size}} berbanding had {{limit}}.", "msg-largest-files": "Lihat fail-fail terbesar", "msg-largest-files-desc": "Ini adalah fail-fail yang memakan paling banyak ruang. Setelah menghapuskan lampiran, tekan butang 'bersihkan' untuk kemaskan ruang peti awan.", "button-purge-remote": "Bersihkan", "tooltip-purge-remote": "Buang lampiran-lampiran yang terhapus dari peti awan untuk menjimatkan ruang.", "msg-purge-complete": "Pembersihan selesai.", "option-selective-sync": "Penyegerakan berpilihan", "option-excluded-folders": "Abaikan folder", "option-excluded-folder-desc": "Pilih mana folder yang ingin diabaikan oleh Obsidian Sync.", "option-currently-excluded-folders": " Folder-folder yang diabaikan:", "button-manage-excluded-folders": "Uruskan", "option-sync-images": "Segerakkan gambar", "option-sync-image-desc": "Segerakkan fail-fail gambar dengan ekstension berikut: {{extensions}}.", "option-sync-audio": "Segerakkan audio", "option-sync-audio-desc": "Segerakkan fail-fail audio dengan ekstension berikut: {{extensions}}.", "option-sync-video": "Segerakkan video", "option-sync-video-desc": "Segerakkan fail-fail video dengan ekstension berikut: {{extensions}}.", "option-sync-pdf": "Segerakkan PDF", "option-sync-pdf-desc": "Segerakkan fail-fail PDF.", "label-sync-introduction": "Obsidian Sync ialah perkhidmatan tambahan berbayar untuk penyegrakan berserta penyulitan hujung-ke-hujung dan sejarah versi.", "label-account-required": "Untuk mula menyegerak, sila daftar masuk atau buat akaun Obsidian baharu.", "button-sign-up": "Daftar akaun", "button-log-in": "Daftar masuk", "label-manage-excluded-folders": "Uruskan folder yang diabaikan", "label-number-of-folders-excluded": "{{folders}} sedang diabaikan oleh Obsidian Sync.", "label-setup-connection": "Capai sambungan", "label-now-connected-to-vault": "Anda sudah bersambung dengan \"{{name}}\".", "button-start-syncing": "Mula penyegerakan" }, "file-recovery": { "name": "Pemulihan fail", "desc": "Membolehkan anda mengembalikan snapshot-snapshot paling baharu untuk pulih dari kehilangan data yang tidak disengajakan. Snapshot hanya disimpan untuk fail Markdown.", "action-open": "Buka simpanan snapshot", "option-interval": "Sela masa snapshot", "option-interval-description": "Sela masa paling pendek antara dua snapshot dalam minit.", "option-keep": "Panjang sejarah", "option-keep-description": "Sejauh mana snapshot akan disimpan dalam hari.", "option-open-history": "Snapshot", "option-open-history-description": "Lihat dan kembalikan snapshot yang disimpan.", "button-view-snapshots": "Lihar", "option-clear": "Buang sejarah", "option-clear-description": "Hapus semua snapshot.", "button-clear-history": "Buang", "label-clear-warning": "Anda yakin ingin menghapuskan semua snapshot? Ambil maklum hanya snapshot sahaja yang akan dipadam. Semua fail dalam peti tidak disentuh.", "msg-clear-complete": "Snapshot dihapuskan.", "label-no-history-found": "Tiada snapshot ditemui.", "placeholder-choose-file": "Pilih fail...", "label-select-file": "Sila pilih fail dari sebelah kiri untuk lihat snapshot." } }, "nouns": { "word-with-count": "{{count}} patah kata", "word-with-count_plural": "{{count}} patah kata", "character-with-count": "{{count}} aksara", "character-with-count_plural": "{{count}} aksara", "link-with-count": "{{count}} pautan", "link-with-count_plural": "{{count}} pautan", "file-with-count": "{{count}} fail", "file-with-count_plural": "{{count}} fail", "folder-with-count": "{{count}} folder", "folder-with-count_plural": "{{count}} folder", "backlink-with-count": "{{count}} pautan balik", "backlink-with-count_plural": "{{count}} pautan balik", "site-with-count": "{{count}} laman", "site-with-count_plural": "{{count}} laman", "plugin-with-count": "{{count}} plugin", "plugin-with-count_plural": "{{count}} plugin" } } { "setting": { "options": "Opties", "plugin": "Plug-in", "builtin-plugins": "Ingebouwde plug-ins", "plugin-options": "Plug-inopties", "folder-path-example-placeholder": "Voorbeeld: map 1/map 2", "file-path-example-placeholder": "Voorbeeld: map/notitie", "msg-restart-required": "Deze optie aanpassen vereist een herstart om effect te hebben..", "editor": { "name": "Editor", "section-general": "Algemeen", "section-behavior": "Gedrag", "section-display": "Scherm", "option-spellcheck": "Spellingscontrole", "option-spellcheck-description": "Activeert spellingscontrole. Dit werkt momenteel alleen voor Amerikaans Engels.", "spellcheck-languages": "Spellingscontroletalen", "spellcheck-languages-description": "Kies de talen die de spellingscontrole controleert.", "spellcheck-languages-mac-description": "De standaard spellingscontrole detecteert automatisch de taal die gebruikt wordt op macOS.", "spellcheck-dict": "Woordenboek spellingscontrole", "spellcheck-dict-empty": "Het woordenboek voor spellingscontrole is momenteel leeg.", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "Leesbare regellengte", "option-readable-line-description": "Beperk maximale regellengte. Hierdoor past er minder op het scherm, maar het maakt langere alinea's leesbaarder.", "option-strict-line-break": "Strikt regeleinde", "option-strict-line-break-description": "Negeer in voorbeeldmodus enkele regeleindes als volgens de Markdownspecificaties. Zet dit af om enkele regeleindes te tonen in het voorbeeld.", "option-show-frontmatter": "Laat voorblad zien", "option-show-frontmatter-description": "Toon voorblad in de voorbeeldmodus als een codeblok. Schakel uit om het voorwerk-gedeelte te verbergen.", "option-auto-pair-brackets": "Automatisch haakjes toevoegen", "option-auto-pair-brackets-description": "Haakjes en aanhalingstekens automatisch toevoegen.", "option-auto-pair-markdown": "Automatisch Markdownsyntaxis toevoegen", "option-auto-pair-markdown-description": "Automatisch symbolen voor vet- en cursief drukken toevoegen.", "option-smart-indent-lists": "Slim lijsten inspringen", "option-smart-indent-lists-description": "Automatisch inspringen en opmaken van lijsten.", "option-fold-heading": "Koppen opvouwen", "option-fold-heading-description": "Alles onder een kop kan opgevouwen worden.", "option-fold-indent": "Opvouwen van inspringing", "option-fold-indent-description": "Laat je een deel van hetzelfde ingesprongen stuk opvouwen, zoals een lijst.", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Editing view", "option-default-new-tab-view-reading": "Reading view", "option-default-editing-mode": "Standaard bewerkingsmodus", "option-default-editing-mode-description": "De standaard bewerkingsmodus waarin een nieuw venster begint.", "option-default-editing-mode-source": "Bronmodus", "option-default-editing-mode-live-preview": "Live-voorbeeld", "option-show-line-number": "Toon regelnummer", "option-show-line-number-description": "Toon regelnummer in de kantlijn.", "option-indentation-guide": "Show indentation guides", "option-indentation-guide-description": "Show vertical relationship lines between bullet points for visual guidance.", "option-use-tabs": "Gebruik inspringen", "option-use-tabs-description": "Gebruik inspringen om in te springen wanneer de\"Tab\"-toets gebruikt wordt. Schakel dit uit om spaties te gebruiken.", "option-tab-size": "Tab-breedte", "option-tab-size-description": "Het aantal spaties dat een tab breed is.", "option-rtl": "Rechts-naar-links", "option-rtl-description": "Stelt de tekstrichting van de te tonen notities in van rechts naar links.", "option-auto-convert-html": "Automatisch HTML omzetten", "option-auto-convert-html-description": "Zet automatisch HTML naar Markdown om wanneer inhoud van een website via drag-and-drop ingevoegd wordt. Gebruik Ctrl/Cmd+Shift+V om te plakken zonder het om te zetten.", "option-vim-key-bindings": "Vim-sneltoetsen", "option-vim-key-bindings-description": "Hiermee gebruikt u Vim-sneltoetsen bij het bewerken van het bronbestand..", "option-vim-key-bindings-mobile": "On mobile devices, this setting is per-device and is not synchronized through the config file.", "option-emacsy-keys": "Legacy Emacs-stijl sneltoetsen voor macOS", "option-emacsy-keys-description": "Laat je extra Emacs-stijl navigatietoetsen gebruiken, die standaard zijn op macOS, maar voor problemen kunnen zorgen met andere sneltoetsen.", "label-confirm-enable-vim": "Bevestig vim-modus invoeren", "label-vim-warning": "Vim-modus is efficiënt voor tekstbewerking maar kan verwarrend zijn. Als je niet bekend bent met Vim, kan deze optie ervoor zorgen dat het lijkt alsof Obsidian niet meer werkt", "label-vim-test": "Om te bevestigen dat je weet hoe Vim werkt, voer hieronder de opdracht in om Vim te sluiten zonder op te slaan:", "label-vim-your-answer": "Jouw antwoord", "placeholder-enter-command": "Voer opdracht in...", "button-confirm-enable-vim": "Laat me Vim aanzetten", "msg-vim-mode-enabled": "Opdracht is correct. Vim-modus is nu aan.", "msg-vim-mode-not-enabled": "Opdracht is incorrect. Vim-mode blijft uit om jou te beschermen.", "msg-vim-mode-please-enter-command": "Voer de opdracht in om Vim-modus aan te zetten", "option-legacy-editor": "Gebruik oude editor", "option-legacy-editor-description2": "The legacy editor will be deprecated soon. It is currently no longer maintained, and as such, bugs will no longer be addressed.", "label-legacy-deprecation": "New editor is here", "label-legacy-deprecation-1": "Obsidian now has a brand new editor that's more robust and accessible.", "label-legacy-deprecation-2": "It seems you're still using the legacy editor, and we think you'll enjoy the new editor.", "label-legacy-deprecation-choice": "Which mode would you like to use?", "label-live-preview-description": "A more modern, what-you-see-is-what-you-get experience.", "label-source-mode-description": "See raw Markdown with syntax highlighting.", "button-start-new-editor": "Start new editor" }, "file": { "name": "Bestanden & Links", "option-confirm-file-deletion": "Bevestig verwijderen bestand", "option-confirm-file-deletion-description": "Wilt u gevraagd worden of het bestand moet worden verwijderd?", "option-delete-destination": "Verwijderde bestanden", "option-delete-destination-description": "Wat te doen met bestanden nadat ze zijn verwijderd.", "option-choice-system-trash": "Verplaatsen naar de systeemprullenbak", "option-choice-vault-trash": "Verplaatsen naar de Obsidian-prullenbak (.trash map)", "option-choice-permanent-delete": "Permanent verwijderen", "option-always-update-links": "Altijd interne links bijwerken", "option-always-update-links-description": "Of links automatisch moeten worden bijgewerkt na het hernoemen van een bestand of prompt.", "option-new-note-location": "Standaardlocatie voor nieuwe notitie", "option-new-note-location-description": "Locatie waar nieuwe notities moeten bewaard. Plugin-instellingen zullen dit overschrijven.", "option-choice-vault-root": "Kluis root", "option-choice-current-folder": "Dezelfde map waarin het bestand zich bevindt", "option-choice-specified-folder": "In de onderstaande map", "option-new-file-folder-path": "Map om nieuwe notities in te maken", "option-new-file-folder-path-description": "Nieuwe notities verschijnen in deze map. Plugin-instellingen zullen dit overschrijven.", "option-use-wiki-links": "Gebruik [[Wikilinks]]", "option-use-wiki-links-description": "Automatisch genereren van Wikilinks voor [[links]] en ![[images]] in plaats van Markdown links en afbeeldingen. Schakel deze optie uit om daarvoor in de plaats Markdown links te genereren.", "option-show-unsupported-files": "Toon alle bestandsextenties", "option-show-unsupported-files-description": "Toon bestanden met alle extensies zelfs als Obsidian ze niet standaard ondersteund, zodat je er een link naar kunt maken en kunt openen in Verkenner en Snel wisselen", "option-link-autocompleted-format": "Notatie van een nieuwe link", "option-link-autocompleted-format-description": "Welke links moeten worden ingevoegd bij het automatisch genereren van interne links.", "option-choice-shortest-linktext": "Kortste pad indien mogelijk", "option-choice-relative-path": "Relatief pad naar bestand", "option-choice-absolute-path": "Absoluut pad in kluis", "option-new-attachment-location": "Standaard locatie voor nieuwe bijlagen", "option-new-attachment-location-description": "Waar nieuwe bijlagen geplaatst worden.", "option-choice-subdirectory": "In een submap in de huidige map", "option-attachment-folder-path": "Mappad voor bijlagen", "option-attachment-folder-path-description": "Nieuwe bijlages verschijnen hier. Deze omvatten oa afbeeldingen die zijn gemaakt via slepen en plaatsen of plakken, en audio-opnamen.", "option-attachment-subfolder-path": "Naam van submap", "option-attachment-subfolder-path-description": "Als je bestand in \"vault/folder\" staat, en je submapnaam is \"attachments\", dan worden bijlagen opgeslagen in \"vault/folder/attachments\".", "option-attachment-subfolder-path-placeholder": "bijlagen", "option-excluded-files": "Excluded files", "option-excluded-files-desc": "Excluded files will be either hidden or less noticeable in various places, such as Quick Switcher, link suggestion, and Graph View.", "label-no-excluded-filters-applied": "No excluded filter is applied right now. Add one below.", "label-excluded-filters-applied": "Files matching the following filters are currently excluded:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Enter path or \"/regex/\"..." }, "appearance": { "name": "Uiterlijk", "option-base-theme": "Basis thema", "option-base-theme-description": "Kies het standaard kleurenschema voor Obsidian.", "option-accent-color": "Accent color", "option-accent-color-description": "Choose the accent color used throughout the app.", "dark-theme": "Donker", "light-theme": "Licht", "system-theme": "Adapt to system", "option-font": "Font", "option-advanced": "Advanced", "option-interface-font": "Interface font", "option-interface-font-description": "Set base font for all of Obsidian.", "option-text-font": "Text font", "option-text-font-description": "Set font for editing and reading views.", "option-monospace-font": "Monospace font", "option-monospace-font-description": "Set font for places like code blocks and frontmatter.", "label-single-font-currently-in-effect": " Currently applied font: ", "label-multiple-fonts-currently-in-effect": " The following fonts are currently applied:", "option-font-placeholder": "Enter font name...", "label-no-custom-font-set": "No custom font is applied right now. Add one below.", "label-font-applied": "The first font from this list that is available on your system will be applied.", "msg-font-not-found": "This font is not detected on your system.", "msg-font-found": "This font is detected on your system.", "label-font-name": "Font name", "option-community-themes": "Openen communitythema's", "option-community-themes-description": "Bekijk en gebruik geweldige thema's die door de community zijn gemaakt.", "button-browse-community-themes": "Bladeren", "option-font-size": "Lettertypegrootte", "option-font-size-description": "Lettertypegrootte in pixels voor de bewerk- en voorbeeldmodus.", "option-font-size-action": "Snelle lettertypegrootte aanpassing", "option-font-size-action-description": "Pas de lettertypegrootte aan met Ctrl + Scroll, or door de trackpad zoombeweging", "option-themes": "Thema's", "option-manage-themes-description": "Beheer geïnstalleerde thema's en doorzoek cummunitythema's.", "option-theme-button-manage": "Beheer", "option-choice-none": "Geen", "option-native-menus": "Native menus", "option-native-menus-desc": "Menus throughout the app will match the operating system. They will not be affected by your theme.", "button-reload-themes": "Laad thema's opnieuw", "msg-reloaded-themes": "Aangepaste CSS-thema's opnieuw geladen.", "button-open-themes-folder": "Open de themamap", "option-css-snippets": "CSS-fragmenten", "label-no-css-snippets-found": "Geen CSS-fragmenten gevonden in de fragmentenmap.", "no-snippet-description": "CSS-fragmenten worden opgeslagen in \"{{path}}\".", "button-reload-snippets": "Herlaad fragmenten", "button-open-snippets-folder": "Open de map met fragmenten", "msg-reloaded-snippets": "Herladen CSS-fragmenten.", "option-toggle-snippet-description": "Pas het CSS-fragment toe op \"{{path}}\".", "label-installed-themes": "Geïnstalleerde thema's", "label-screenshot-unavailable": "Schermopname niet beschikbaar", "label-default-theme": "Standaard", "tooltip-click-to-enlarge": "Klik om te vergroten", "button-update": "Bijwerken", "label-currently-selected": "Geselecteerd", "option-frame-style": "Titelbalk stijl", "option-frame-description": "Bepaalt de vormgeving van de titelbalk van Obsidian Vensters. Vereist een volledige herstart om van kracht te worden.", "option-frame-hidden": "Verborgen (standaard)", "option-frame-obsidian": "Obsidian titelbalk", "option-frame-native": "Oorspronkelijk frame", "option-configure-ribbon": "Lint-menu", "option-configure-ribbon-desc": "Configureer welke opdrachten verschijnen in het lintmenu in die navigatiebalk.", "option-mobile-quick-ribbon-item": "Lintitem voor snelle toegang", "option-mobile-quick-ribbon-item-desc": "Door op het lintitem in het navigatiemenu te tikken, wordt dit lintitem geactiveerd. Tikken en vasthouden geeft nog steeds het menu weer.", "button-configure": "Configureer", "label-additional-ribbon-items": "Andere lintitems", "label-modal-configuration": "Lint Configuratie", "label-modal-configuration-desc": "Kies welke items u actief wilt hebben in het lint. Slepen en neerzetten om de volgorde te wijzigen.", "option-show-view-header": "Toon tab titelbalk", "option-show-view-header-desc": "Toon de kop bovenaan elk tabblad.", "msg-updates-found": "Gevonden {{count}} thema om te updaten.", "msg-updates-found_plural": "Gevonden {{count}} thema's om te updaten.", "button-check-for-updates": "Controleer op updates", "button-view-updates": "Toon updates", "button-update-all-themes": "Update alles", "label-current-themes": "Huidige community thema's", "label-currently-installed": "U heeft momenteel {{count}} thema geinstalleerd.", "label-currently-installed_plural": "YU heeft momenteel {{count}} thema's geinstalleerd." }, "hotkeys": { "name": "Sneltoetsen", "prompt-filter": "Filter...", "tooltip-delete-hotkey": "Wissen sneltoets", "label-waiting-for-hotkey-press": "Druk sneltoets...", "tooltip-restore-default": "Herstel standaard", "tooltip-customize-command": "Pas deze opdracht aan", "tooltip-hotkey-single-conflict": "Deze sneltoets conflicteert met \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "Deze sneltoets conflicteer met {{count}} andere opdrachten.", "label-blank-hotkey": "Blanco" }, "about": { "name": "Over", "label-commercial-license": "Commerciële licentie", "label-license-key": "Licentiesleutel", "license-key-placeholder": "Uw licentiesleutel...", "label-activate-license": "Activeer licentie", "button-activate": "Activeer", "label-unknown-version": "Onbekend", "label-current-version": "Huidige versie: ", "label-install-version": "(Installatie-versie: {{version}})", "label-up-to-date": "Je applicatie is bijgewerkt!", "label-read-changelog": "Lees het wijzigingslogboek.", "label-manual-update-required": "Om de nieuwste functies te ondersteunen en de nieuwste beveiligingspatches te ontvangen, heeft Obsidian een grote update van het installatieprogramma nodig. U moet Obsidian handmatig downloaden en opnieuw installeren.", "label-download": "Downloaden", "label-new-version-ready": "Een nieuwe versie is klaar om te worden geïnstalleerd. ", "label-relaunch-to-update": "Herstart de applicatie om bij te werken.", "label-disabled-updates": "Updates zijn uitgeschakeld.", "label-checking-for-updates": "Controleren op updates...", "button-relaunch": "Herstart", "button-check-for-updates": "Controleer op updates", "option-auto-update": "Automatisch bijwerken", "option-auto-update-description": "Schakel dit uit om te voorkomen dat de applicatie automatisch bijwerkt.", "option-get-help": "Ontvang hulp", "option-get-help-description": "Ontvang hulp bij het gebruik van Obsidian.", "button-open": "Open", "option-language": "Taal", "option-language-description": "Wijzig de weergavetaal.", "option-insider-build": "Ontvang insider-builds", "option-insider-build-description": "Automatisch bijwerken naar insider-builds om nieuwe functies uit te proberen. Merk op dat deze builds geavanceerd en mogelijk minder stabiel zijn.", "option-advanced": "Geavanceerd", "option-hw-acceleration": "Hardwareversnelling", "option-hw-acceleration-description": "Schakelt harwardversnelling in, dit gebruikt je grafische kaart om Obsidian een gladder uiterlijk te geven.", "option-hw-acceleration-warning": "Als je dit uitschakelt, neemt de prestatie van de app significant af.", "option-config-location": "Configuratiemap overschrijven", "option-config-location-description": "Gebruik een andere configuratiemap dan de standaard. Moet met een punt beginnen.", "option-config-location-warning": "Configuratielocatie moet een geldige mapnaam zijn die met een punt begint,", "label-license": "Licentie", "label-your-commercial-license-key": "Uw commerciële licentiesleutel is \"{{key}}\".", "label-commercial-license-info": "Geregistreerd door \"{{company}}\" voor {{seats}} gebruikers. Geldig tot {{expiry}}.", "label-validating-commercial-license": "Valideren...", "label-invalid-commercial-license": "Licentie ongeldig: ", "button-remove-commercial-license": "Verwijderen", "option-catalyst": "Catalyst licentie", "option-catalyst-desc": "U heeft momenteel de {{tier}} Catalyst licensie. Bedankt voor uw!", "option-catalyst-desc-no-license": "U heeft op dit moment geen Catalyst licenstie. Een Catalyst licensie is een eenmalige donatie om de ontwikkeling van Obsidian te ondersteunen.", "label-app": "App" }, "account": { "name": "Account", "option-your-account": "Uw account", "option-your-account-desc": "U bent momenteel ingelogd {{name}} ({{email}}).", "option-your-account-desc-no-login": "U bent momenteel niet ingelogd. Een account is alleen nodig voor Obsidian Sync, Obsidian Publish en Catalyst insider-builds.", "button-manage-settings": "Beheer instellingen", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Commerciële licentie", "option-commercial-license-desc": "Als u Obsidian voor commerciële doeleinden gebruikt, heeft u mogelijk een commerciële licentie nodig.", "button-purchase": "Aankoop", "button-log-out": "Uitloggen", "label-log-in": "Inloggen", "label-sign-up": "Aanmelden", "label-email": "Email", "placeholder-email": "Uw email...", "label-password": "Wachtwoord", "placeholder-password": "Uw wachtwoord...", "button-login": "Inloggen", "message-empty-email": "E-mail mag niet leeg zijn.", "message-invalid-email": "E-mail is niet geldig.", "message-empty-password": "Wachtwoord mag niet leeg zijn.", "message-login-failed": "Inloggen mislukt, controleer uw e-mail en wachtwoord nogmaals.", "label-no-account": "Heeft u geen account? ", "link-sign-up-now": "Schrijf je nu in" }, "core-plugin": { "plugin-list": "Plug-in lijst", "option-search-plugin": "Doorzoek kern plug-ins", "option-search-plugin-description": "Filter plug-ins op naam of beschrijving.", "placeholder-search-plugin": "Doorzoek plug-ins..." }, "third-party-plugin": { "name": "Externe plug-in", "option-restricted-mode": "Beperkte modus", "option-restricted-mode-description": "Beperkte Modus staat uit. Zet deze aan om het gebruik van community plugins uit te schakelen.", "button-turn-on": "Zet aan", "option-browse-community-plugins": "Community-plug-ins", "option-browse-community-plugins-description": "Blader door en installeer plug-ins van derden die zijn gemaakt door onze geweldige community.", "button-browse": "Doorbladeren", "label-exit-restricted-mode": "Verlaat beperkte modus", "label-exit-restricted-mode-description-1": "Community plugins, zoals elke andere software die u installeert, kan mogelijk gegevensintegriteit en beveiligingsproblemen veroorzaken.", "label-exit-restricted-mode-description-2": "Beveiliging van plug-ins is belangrijk voor ons. Dit is wat we doen:", "label-exit-restricted-mode-description-3": "Ondanks onze inspanningen is er nog steeds een kleine kans dat een community-plug-in zich misdraagt.", "label-code-review": "Eerste codebeoordeling", "label-code-review-desc": "Plugins ondergaan een eerste codebeoordeling door ons team voordat ze in de winkel verschijnen..", "label-open-source": "Open source", "label-open-source-desc": "De meeste plugins zijn open source op GitHub, dus kunt u de code zelf op GitHub inspecteren.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We hebben een grote gemeenschap van ontwikkelaars die op elkaar letten.", "label-report-mechanism": "Meldingsmechanisme", "label-report-mechanism-desc": "We volgen en verwijderen defecte plug-ins na gebruikersmelding.", "label-exit-restricted-mode-disable-confirmation": "Wilt u de beperkte modus afsluiten om community-plug-ins in te schakelen? We raden ten zeerste aan om back-ups van uw gegevens te maken voordat u dit doet.", "label-learn-more": "Meer informatie over plug-inbeveiliging", "button-turn-on-community-plugins": "Schakel community-plug-ins in", "label-trust-author": "Vertrouw je de auteur van deze kluis?", "label-trust-author-description-1": "e opent deze kluis voor de eerste keer en er worden enkele plug-ins meegeleverd.", "label-trust-author-description-2": "Als u deze kluis van iemand anders heeft verkregen, houd er dan rekening mee dat plug-ins van onbekende oorsprong beveiligingsrisico's kunnen vormen.", "label-trust-author-description-3": "Als u de auteur van deze kluis niet volledig vertrouwt, raden we u aan in de beperkte modus te blijven, zodat de plug-ins in deze kluis niet worden uitgevoerd.", "button-enable-plugins": "Auteur vertrouwen en plug-ins inschakelen", "button-dont-trust-author": "Blader door de kluis in de beperkte modus", "placeholder-community-plugins": "Vindt community-plug-ins...", "msg-failed-load-plugins": "Het laden van communityplug-ins is mislukt.", "label-installed": "Geinstalleerd", "button-install": "Installeren", "button-enable": "Activeer", "button-disable": "Deactiveer", "button-copy-share-link": "Kopieer link om te delen", "button-donate": "Donate", "label-no-results-found": "Geen resultaten gevonden.", "msg-failed-to-load-manifest": "Kan het plug-in-overzicht niet laden.", "label-version": "Versie: {{version}}", "label-currently-installed-version": " (momenteel geïnstalleerd: {{version}})", "label-by-author": "Door ", "label-repository": "Opslagplaats: ", "label-last-update": "Laatste update: ", "tooltip-view-last-update": "Toon de laatst update", "label-unsupported": "Deze plug-in ondersteund jouw apparaat niet.", "button-update": "Bijwerken", "label-no-readme": "Deze plug-in heeft geen README-bestand.", "msg-installing-plugin": "Plug-in installeren \"{{name}}\"...", "msg-failed-to-install-plugin": "Kan plug-in niet installeren \"{{name}}\".", "msg-successfully-installed-plugin": "Plug-in geïnstalleerd \"{{name}}\".", "label-installed-plugins": "Geïnstalleerde plug-ins", "button-reload-plugins": "Laad plug-ins opnieuw", "msg-reloaded-third-party-plugins": "Opnieuw laden vam plug-ins van derden.", "label-uninstall": "Installatie verwijderen", "label-uninstall-plugin": "Verwijder de geinstalleerde plug-in", "label-uninstall-plugin-confirmation": "Weet u zeker dat u deze plug-in wilt verwijderen? Hierdoor wordt de map van de plug-in ook verwijderd.", "button-open-plugins-folder": "Open plug-inmap", "button-check-for-updates": "Controleer op updates", "button-update-all-plugins": "Alles updaten", "label-current-plugins": "Huidige plug-ins", "label-currently-installed": "Je hebt op dit moment {{count}} plug-in geïnstalleerd.", "label-currently-installed_plural": "Je hebt op dit moment {{count}} plug-ins geïnstalleerd.", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Toon een bericht met hoe lang elke plug-in nodig had om te initialiseren bij het starten van de app.", "msg-no-updates-found": "Geen updates voor plug-ins gevonden.", "msg-updates-found": "{{count}} plug-in met beschikbare update gevonden.", "msg-updates-found_plural": "{{count}} plug-ins met beschikbare updates gevonden.", "msg-update-plugin": "Update naar versie {{version}}", "option-search-installed-plugin": "Doorzoek geïnstalleerde plug-ins", "option-search-installed-plugin-description": "Filter geïnstalleerde plug-ins op naam of beschrijving.", "placeholder-search-installed-plugin": "Doorzoek geïnstalleerde plug-ins...", "show-installed-only": "Toon alleen geïnstalleerde", "label-donate-modal-title": "Doneer aan support {{name}}", "label-donate-modal-text1": "Plug-in-ontwikkelaars zijn vrijwilligers uit de gemeenschap die geweldige dingen maken uit passie. Als u deze plug-in nuttig vindt, overweeg dan om de ontwikkeling ervan te financieren.", "label-donate-modal-text2": "100% van uw bijdrage gaat naar de ontwikkelaar van de plug-in; Obsidiaan snijdt niet. Het financieringsplatform dat ze kiezen, kan kosten in rekening brengen.", "label-donate-modal-text3": "Bedankt voor uw gulle steun!", "label-support-this-plugin": "Steun deze plugin:", "label-search-summary": "{{pluginCount}} weergegeven:", "label-by-popularity": "Meest downloaded", "label-by-released": "Recent uitgebracht", "label-by-updated": "Recent geupdated", "label-alphabetical": "Alfabetisch", "label-last-updated": "Geupdate {{time}}" }, "mobile-toolbar": { "name": "Mobiele werkbalk", "option-configure-quick-action": "Configureer mobiele Snelle Actie", "option-configure-quick-action-description": "Configureer welke opdracht uitgevoerd wordt wanneer men van boven naar beneden veegt. De huidig ingestelde opdracht is \"{{command}}\".", "button-configure": "Configureer", "placeholder-select-quick-action": "Selecteer Snelle Actie...", "manage-toolbar-options": "Beheer werkbalk opties", "option-internal-link": "Voeg interne link toe", "option-internal-embed": "Voeg ingeloten link toe.", "option-tag": "Voeg een tag toe", "option-heading": "Koppen aan-/uitzetten", "option-strikethrough": "Doorstreping aan-/uitzetten", "option-highlight": "Markering aan-/uitzetten", "option-code": "Code aan-/uitzetten", "option-blockquote": "Blokcitaat aan-/uitzetten", "option-markdown-link": "Voeg Markdown link toe", "option-bullet-list": "Ongenummerde lijst aan-/uitzetten", "option-numbered-list": "Genummerde lijst aan-/uitzetten", "option-indent-list": "Lijst laten inspringen", "option-unindent-list": "Lijst niet laten inspringen", "option-undo": "Ongedaan maken", "option-redo": "Opnieuw uitvoeren", "option-move-caret-up": "Verplaats inlasteken naar boven", "option-move-caret-down": "Verplaats inlasteken naar beneden", "option-move-caret-left": "Verplaats inlasteken naar links", "option-move-caret-right": "Verplaats inlasteken naar rechts", "option-first-line": "Ga naar de eerste regel", "option-last-line": "Ga naar de laatste regel", "option-toggle-keyboard": "Schakel toetsenbord aan/uit", "option-configure-toolbar": "Cofigureer mobiele werkbalk", "option-added-options": "Toegevoegde opties", "option-more-toolbar-options": "Meer werkbalk opties", "option-attach": "Bijlage invoegen", "option-add-command": "Voeg algemene opdracht toe", "option-add-command-description": "Selecteer een algemene opdracht om aan de werkbalk toe te voegen." } }, "editor": { "search": { "placeholder-find": "Zoek", "placeholder-replace": "Vervang", "label-previous": "Vorige", "label-next": "Volgende", "label-all": "Alles", "label-exit-search": "Sluit het zoeken af", "label-replace": "Vervangen", "label-replace-all": "Vervang alles" }, "link-suggestion": { "label-type-hash": "Typ #", "label-link-heading": "linken van kop", "label-type-block": "Typ ^", "label-link-block": "linken van blok", "label-type-pipe": "Typ |", "label-change-display-text": "om de weergavetekst te wijzigen", "label-no-match-found": "geen overeenkomst gevonden" }, "spellcheck": { "no-suggestion": "Geen suggesties...", "add-to-dictionary": "Toevoegen aan woordenboek" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "No heading", "label-heading-level": "Heading {{level}}" }, "print-modal": { "title": "Exporteer naar PDF", "caption": "Exporteer \"{{filename}}\" naar PDF met de instelling hierbeneden.", "setting-page-size": "Paginagrootte", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Include file name as title", "setting-landscape": "Landschap", "setting-margin": "Marge", "setting-margin-default": "Standaard", "setting-margin-minimal": "Minimaal", "setting-margin-none": "Geen", "setting-downscale-percent": "Verklein percentage", "button-export-to-pdf": "Exporteer naar PDF" }, "link-popover": { "tooltip-follow-link": "Volg link", "tooltip-open-link": "Open link", "tooltip-search-tag": "Zoek tag" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Open in standaard app", "empty-sidebar": "De zijbalk is leeg, probeer hier een venster naartoe te slepen.", "sidebar-expand": "Uitbreiden", "sidebar-collapse": "Inklappen", "msg-fail-to-save-file": "Bestand opslaan mislukt \"{{filepath}}\". {{message}}.", "no-file": "Geen bestand", "msg-file-changed": "\"{{file}}\" is ergens anders gewijzigd, automatisch veranderingen samenvoegen.", "switch-vault": "Open een andere kluis", "help": "Help", "settings": "Instellingen", "drag-to-rearrange": "Sleep om te herschikken", "msg-switched-to-read": "Standaard weergavemodus ingesteld op leesmodus.", "msg-switched-to-edit": "Standaard weergavemodus ingesteld op editor.", "msg-upgrade-installer": "Om deze functie te gebruiken, moet u deze opnieuw installeren met het nieuwste installatieprogramma dat beschikbaar is op onze website.", "tooltip-restore-default-settings": "Standaard instellingen terugzetten", "label-copy": "Kopieer naar klembord", "copied_generic": "Copied to your clipboard", "copied": "{{item}} gekopieerd naar je klembord", "url": "URL", "msg-open-file-through-uri": "Bestand \"{{path}}\" geopend", "msg-file-not-found-through-uri": "Bestand \"{{name}}\" niet gevonden.", "delete-action-short-name": "Verwijderen", "msg-indexing": "Obsidian indexeert de kluis...\nDit gebeurt maar één keer.\nBepaalde functies zijn nog niet beschikbaar tot dat dit afgerond is.", "msg-indexing-complete": "Indexering afgerond.", "msg-sandbox-vault": "Dit is een sandbox-kluis.\nWijzigingen die u in deze kluis aanbrengt, gaan verloren.", "label-enter-to-create": "Enter om te creëren", "label-update-available": "Recentere versie beschikbaar", "label-debug-info": "Info voor het debuggen", "button-learn-more": "Meer informatie", "button-not-now": "Niet nu", "button-add": "Add", "button-manage": "Beheer", "label-new-tab": "New tab", "msg-tab-busy": "Dit tabblad is momenteel bezet, probeer het later opnieuw", "empty-state": { "no-file-open": "Er is geen bestand geopend", "create-new-file": "Maak een nieuw bestand", "go-to-file": "Ga naar Bestand", "see-recent-files": "Zie recente bestanden", "close": "Sluiten", "unknown-pane-title": "Plug-in niet meer actief", "unknown-pane-desc": "De plug-in die dit venster ({{type}}) heeft geopend is weg." }, "menu": { "edit-view": "Huidige modus: bewerken", "read-view": "Huidige modus: lezen", "switch-to-edit-view": "Klik om te bewerken", "switch-to-read-view": "Klik om te lezen", "mod-click-open-new-tab": "{{key}}+Click to open in new tab", "find": "Vinden...", "replace": "Vervangen...", "edit": "Bewerken", "preview": "Voorbeschouwen", "more-options": "Meer opties", "close": "Sluiten", "close-others": "Sluit alle anderen", "close-right": "Sluit alle tabs aan de rechterkant", "pin": "Vastzetten", "unpin": "Unpin", "unlink-tab": "Unlink tab", "link-tab": "Link with tab...", "toggle-source-mode": "Bronmodus", "toggle-reading-view": "Leesmodus", "delete-file": "Wissen bestand", "create-file": "Maak dit bestand aan", "open-link": "Open link", "open-in-new-tab": "Open in nieuw tabblad", "open-to-the-right": "Open aan de rechterkand", "copy-url": "Kopieer URL", "close-current-tab": "Sluit huidig tabblad", "copy": "Kopiëren", "cut": "Knippen", "paste": "Plakken", "paste-as-plain-text": "Plak als platte tekst", "select-all": "Selecteer alles", "rename-heading": "Kop hernoemen...", "rename-blockid": "Hernoem dit blok ID...", "open-in-new-window": "Open in nieuw venster", "move-to-new-window": "Verplaats naar nieuw venster", "open-in-browser": "Open in browser", "stack-tabs": "Stapel tabbladen", "unstack-tabs": "Losmaken stapel tabbladen" }, "tooltip": { "click-to-expand": "Klik om uit te breiden", "click-to-collapse": "Klik om in te klappen", "alias": "Alias", "not-created-yet": "Nog niet aangemaakt, selecteer om te aan te maken" }, "start-screen": { "label-version": "Versie", "option-open-folder-as-vault": "Open map als kluis", "option-open-folder-as-vault-description": "Kies een bestaande map met Markdown-bestanden.", "option-create-vault": "Maak een nieuwe kluis aan", "option-create-vault-description": "Maak een nieuwe Obsidian-kluis aan in een map.", "option-connect-obsidian-sync": "Connect to Obsidian Sync", "option-connect-obsidian-sync-description": "Set up a synced vault with existing remote vault.", "option-new-vault-name": "Kluisnaam", "option-new-vault-name-description": "Kies een naam voor je geweldige kluis.", "option-new-vault-location": "Locatie", "option-new-vault-location-description": "Selecteer een plek voor je nieuwe kluis.", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Reveal vault in system explorer", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "Rename vault...", "msg-error-rename-exists": "There is already a vault with this name.", "msg-error-nested": "Cannot move vault into a subfolder of itself.", "msg-error-rename-open": "Can't rename a currently open vault.", "msg-rename-failed": "Failed to rename vault.", "msg-rename-success": "Successfully renamed vault.", "option-move-vault": "Move vault...", "msg-move-select-dest": "Select destination folder", "msg-error-move-exists": "There is already a vault at the destination.", "msg-error-move-open": "Can't move a currently open vault.", "msg-move-failed": "Failed to move vault.", "msg-move-success": "Successfully moved vault.", "option-remove": "Remove from list", "button-quick-start": "Quick start", "button-open": "Open", "button-browse": "Bladeren", "button-connect": "Connect", "button-create-vault": "Aanmaken", "button-back": "Terug", "msg-empty-vault-name": "Naam van de kluis mag niet leeg zijn.", "msg-invalid-folder": "Kies alstublief een geldige map.", "msg-failed-to-create-vault": "Kluis creëren mislukt.", "msg-failed-to-create-vault-at-location": "Kon geen kluis maken op de opgegeven locatie. Controleer de locatie en de machtigingen.", "msg-error-failed-to-open-vault": "Openen mislukt.", "msg-error-remove-current-open-vault": "Een open kluis kan niet worden verwijderd.", "option-get-help": "Get Help", "option-user-email": "Email", "placeholder-your-email": "Your email...", "option-user-password": "Password", "placeholder-your-password": "Your password...", "button-sign-in": "Sign in", "button-setup": "Setup", "option-connect-vault-desc": "Create a synced vault on this device.", "tooltip-own-vault": "This is a remote vault owned by you.", "tooltip-shared-vault": "This is a remote vault shared with you." }, "drag-and-drop": { "insert-link-here": "Voeg link hier in", "insert-links-here": "Voeg links hier in", "move-into-folder": "Verplaats naar \"{{folder}}\"", "star-this-file": "Geef bestand een ster", "star-these-files": "Geef bestanden een ster", "open-in-this-tab": "Open in this tab", "open-as-tab": "Open as new tab" }, "window": { "maximize": "Maximaliseren", "minimize": "Minimaliseren", "restore-down": "Formaat van venster herstellen", "close-window": "Venster sluiten", "go-back": "Ga terug", "go-forward": "Ga verder" }, "start-up": { "loading-obsidian": "Obsidian laden...", "obsidian-load-error": "Er is een error opgetreden tijdens het laden van Obsidian.", "button-reload-app": "App herladen", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "Een andere kluis openen", "loading-components": "Onderdelen laden...", "loading-plugins": "Plug-ins laden...", "loading-vault": "Kluis laden...", "msg-failed-to-load-vault": "Kluis laden mislukt: ", "loading-cache": "Cachegeheugen laden...", "loading-workspace": "Werkblad laden..." }, "mobile": { "action-import": "Importeren naar kluis", "action-choose-file-to-insert": "Kies een bestand om in te voegen", "action-insert-text-into-file": "Tekst invoegen in {{filename}}", "action-insert-link-into-file": "Link invoegen in {{filename}}", "msg-importing": "Importeren...", "msg-import-success": "Importeren geslaagd", "msg-failed-to-import-file": "Importeren van bestand {{filename}} is mislukt", "msg-back-again-to-exit": "Press back again to exit." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "Sla huidig bestand op", "follow-cursor-link": "Volg link onder de cursor", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "Speld aan-/uitzetten", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "Navigeer terug", "navigate-forward": "Navigeer vooruit", "use-dark-mode": "Gebruik donkere modus", "use-light-mode": "Gebruik lichte modus", "change-theme": "Change theme", "search-current-file": "Doorzoek huidig bestand", "search-replace-current-file": "Doorzoek & vervang in huidig bestand", "open-settings": "Open instellingen", "open-help": "Open help", "toggle-edit": "Wissel bewerk- en leesmodus", "toggle-source-mode": "Wissel live-voorbeeld- en bronmodus", "delete-current-file": "Verwijder huidig bestand", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "Linker zijbalk openen/sluiten", "toggle-right-sidebar": "Rechter zijbalk openen/sluiten", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "Focus op de editor", "toggle-fold": "In-/uitvouwen van de huidge regel", "fold-all": "Alle koppen en lijsten invouwen", "unfold-all": "Alle koppen en lijsten uitvouwen", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "Omwisselen met regel boven", "swap-line-down": "Omwisselen met regel beneden", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "Selectie vet maken", "toggle-italics": "Selectie cursief maken", "toggle-highlight": "Selectie markeren", "toggle-comments": "Opmerking plaatsen bij selectie", "insert-link": "Link invoegen", "toggle-spellcheck": "Spellingscontrole aan-/uitzetten", "delete-paragraph": "Alinea verwijderen", "toggle-checklist": "Checklist status wisselen", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "Titel van het bestand bewerken", "copy-path": "Kopieer bestandspad", "copy-url": "Kopieer obsidian URL", "export-pdf": "Exporteer naar PDF", "reload": "App herladen zonder op te slaan", "undo-close-tab": "Undo close tab", "context-menu": "Contextmenu laten zien onder de cursor", "show-debug-info": "Info voor debuggen laten zien", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "Wissel bewerk- en voorbeeldmodus", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "Dit heeft betrekking op {{links}} in {{files}}.", "msg-updated-links": "{{links}} in {{files}} bijgewerkt.", "label-update-links": "Links bijwerken", "label-confirm-update-link-to-file": "Wil je de interne links die naar dit bestand verwijzen bijwerken?", "button-always-update": "Altijd bijwerken", "button-just-once": "Slechts eenmaal", "button-do-not-update": "Niet bijwerken", "label-confirm-deletion": "Weet je zeker dat je \"{{filename}}\" wilt verwijderen?", "label-move-to-system-trash": "Het wordt verplaatst naar de systeemprullenbak", "label-move-to-vault-trash": "Het wordt verplaatst naar de Obsidian-prullenbak. Deze bevindt zich in de verborgen \".trash\" map in je kluis.", "label-permanent-delete": "Het bestand wordt permanent verwijderd.", "label-non-empty-folder": "Deze map is niet leeg.", "label-delete-folder-warning": "Als je doorgaat worden alle bestanden in deze map verwijderd.", "label-delete-folder": "Map verwijderen", "button-delete": "Verwijderen", "button-delete-do-not-ask-again": "Verwijderen en niet opnieuw vragen", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "Er verwijzen op dit moment {{links}} naar deze notitie.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "Bestand verwijderen", "button-manage": "Manage", "button-cancel": "Annuleren", "button-done": "Voltooid", "button-save": "Save", "button-stop": "Stop", "button-continue": "Doorgaan", "preparing-pdf": "PDF vervaardigen...", "label-rename-file": "Bestand hernoemen", "label-new-name": "Nieuwe naam", "msg-rename-success": "Bestand hernoemen geslaagd.", "label-rename-heading": "Kop hernoemen", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "Plug-ins", "file-explorer": { "name": "Verkenner", "desc": "Zie alle bestanden in je kluis.", "action-open": "Open verkenner", "action-show": "Toon verkenner", "action-create-note": "Maak nieuwe notitie aan", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "Nieuwe notitie", "action-new-folder": "Nieuwe map", "action-change-sort": "Sorteervolgorde aanpassen", "action-reveal-file": "Toon bestand in verkenner", "action-reveal-active-file": "Toon het actieve bestand in verkenner", "command-move-file": "Verplaats bestand naar een andere map", "action-move-file": "Verplaats bestand naar ...", "action-move-folder": "Verplaats map naar ...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "Type een map", "label-no-folders": "Geen mappen gevonden.", "instruction-navigate": "navigeren", "instruction-move": "verplaatsen", "instruction-dismiss": "afwijzen", "label-sort-a-to-z": "Sorteer op bestandsnaam (A tot Z)", "label-sort-z-to-a": "Sorteer op bestandsnaam (Z tot A)", "label-sort-new-to-old": "Sorteer op recente wijziging (nieuw naar oud)", "label-sort-old-to-new": "Sorteer op recente wijziging (oud naar nieuw)", "label-sort-created-old-to-new": "Aangemaakt (oud naar nieuw)", "label-sort-created-new-to-old": "Aangemaakt (nieuw naar oud)", "menu-opt-new-note": "Nieuwe notitie", "menu-opt-new-folder": "Nieuwe map", "menu-opt-set-attachment-folder": "Stel in als bijlagemap", "menu-opt-rename": "Hernoemen", "menu-opt-delete": "Verwijderen", "menu-opt-make-copy": "Dupliceren", "msg-invalid-characters": "Bestandsnaam mag de volgende tekens niet bevatten: ", "msg-unsafe-characters": "Links werken niet met bestandsnamen die de volgende tekens bevatten: ", "msg-file-already-exists": "Er is al een bestand met deze naam", "msg-empty-file-name": "Bestandsnaam mag niet leeg zijn.", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "Laatste wijziging om {{time}}", "tooltip-created-time": "Aangemaakt om {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Verplaats", "label-untitled-file": "Naamloos", "label-untitled-folder": "Naamloos", "msg-set-attachment-folder": "Bijlagen worden vanaf nu opgeslagen in \"{{path}}\"." }, "search": { "name": "Zoeken", "desc": "Zoeken naar trefwoord in alle notities.", "action-open-search": "In alle bestanden zoeken", "label-collapse-results": "Resultaten samenvouwen", "label-match-case": "Hoofdletters moeten matchen", "label-explain-search-term": "Leg zoekterm uit", "label-more-context": "Toon meer context", "prompt-start-search": "Typ om te beginnen met zoeken...", "label-match-text": "Match tekst: ", "label-match-regex": "Match regex: ", "label-match-exact-text": "Bevat exacte tekst: ", "label-match-all": "Match alle: ", "label-match-any": "Match één van: ", "label-excluding": "Exclusief: ", "label-case-sensitive": "Hoofdlettergevoelig", "label-case-insensitive": "Niet hoofdlettergevoelig", "label-match-file-path": "Match bestandspad: ", "label-match-file-name": "Match bestandsnaam: ", "label-match-content": "Match bestandsinhoud: ", "label-match-task": "Match taak: ", "label-match-task-todo": "Match taak (onvoltooid): ", "label-match-task-done": "Match taak (voltooid): ", "label-match-line": "Match regel: ", "label-match-block": "Match blok: ", "label-match-section": "Match sectie: ", "label-match-tag": "Match tag: ", "label-no-matches": "Geen match gevonden.", "matches-with-count": "... en {{count}} verdere match.", "matches-with-count_plural": "... en {{count}} verdere matches.", "label-copy-search-results": "Zoekresultaten kopiëren", "button-copy-results": "Resultaten kopiëren", "msg-successfully-copied": "Resultaten naar het klembord gekopieerd.", "option-show-path": "Toon bestandspad", "option-show-path-description": "Toon volledig bestandspad in plaats van slechts de bestandsnaam.", "option-link-style": "Stijl van de link", "option-link-style-description": "Verander elk bestandsresultaat in een link (optioneel).", "option-choice-link-style-none": "Geen", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Markdown link", "option-list-prefix": "Lijstvoorvoegsel", "option-list-prefix-description": "Voeg een lijstvoorvoegsel toe aan elk bestandsresultaat (optioneel).", "option-choice-list-style-none": "Geen", "option-choice-list-style-dash": "Liggend streepje (-)", "option-choice-list-style-asterisk": "Asterisk (*)", "option-choice-list-style-numbered": "Genummerd", "tooltip-clear-search": "Zoekterm verwijderen", "label-search-options": "Zoekopties", "tooltip-read-more": "Meer lezen", "label-history": "Geschiedenis", "tooltip-clear-history": "Zoekgeschiedenis verwijderen", "label-path-option-description": "match bestandspad", "label-file-name-option-description": "match bestandsnaam", "label-tag-option-description": "zoek naar tags", "label-line-option-description": "zoek trefwoorden op dezelfde regel", "label-section-option-description": "zoek trefwoorden in dezelfde sectie.", "menu-opt-search-for": "Zoeken naar \"{{keyword}}\"" }, "quick-switcher": { "name": "Snel wisselen", "desc": "Spring naar elk bestand zonder je toetsenbord lost te laten. Ctrl/Cmd+O om te activeren.", "short-name": "Wisselen", "action-open": "Open snel wisselen", "instruction-navigate": "navigeren", "instruction-open": "openen", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "aanmaken", "instruction-dismiss": "afwijzen", "label-no-note-create-new": "Geen notities gevonden. Druk op Enter om een nieuwe te maken.", "prompt-type-file-name": "Type de bestandsnaam om ernaar te wisselen of te creëren...", "label-enter-to-create": "Druk op Enter om te creëren", "tooltip-not-created-yet": "Nog niet aangemaakt, selecteer om aan te maken", "option-show-existing-only": "Toon alleen bestaande", "option-show-existing-only-description": "Toon links naar bestanden die nog niet zijn aangemaakt wel of niet.", "option-show-attachments": "Toon bijlagen", "option-show-attachments-desc": "Toon bijlagebestanden als afbeeldingen, video's en PDF's.", "option-show-all-file-types": "Toon alle bestandsextenties", "option-show-all-file-types-desc": "Toon alle bestanden, inclusief degene die Obsidian niet kan openen. Het bestand wordt geopend in de standaard applicatie voor de bestandsextensie." }, "graph-view": { "name": "Grafiek weergave", "desc": "Zie een grafische weergave van de links tussen de notities.", "action-open": "Open grafiek weergave", "action-open-local": "Open locale grafiek", "action-copy-screenshot": "Kopieer schermopname", "tab-title": "Grafiek van {{displayText}}", "label-filters": "Filters", "prompt-filter-nodes": "Doorzoek bestanden...", "option-depth": "Diepte", "option-depth-description": "Toon nodes zoveel links verwijderd", "option-neighbor-links": "Buur-links", "option-neighbor-links-description": "Toon links tussen buren.", "option-forelinks": "Uitgaande links", "option-forelinks-description": "Toon links naar andere bestanden", "option-backlinks": "Ingaande links", "option-backlinks-description": "Toon links van andere bestanden", "option-show-tags": "Tags", "option-show-tags-description": "Tags zijn gelinkt aan de bestanden die de tags bevatten", "option-show-attachments": "Bijlagen", "option-show-attachments-description": "Toon bijlagen in bestanden besloten", "option-show-existing-files-only": "Alleen bestaande bestanden", "option-show-existing-files-only-description": "Wanneer actief worden links naar niet-bestaande bestanden niet getoond", "option-show-orphans": "Wezen", "option-show-orphans-description": "Toon bestanden zonder links naar andere bestanden", "label-display": "Weergave", "option-show-arrows": "Pijlen", "option-show-arrows-description": "Toon pijlen indien ingezoomd.", "option-text-fade": "Tekstvervagingsdrempel", "option-node-size": "Node grootte", "option-link-thickness": "Link dikte", "label-forces": "Krachten", "option-center-force": "Centrale kracht", "option-link-force": "Link kracht", "option-link-distance": "Link afstand", "option-repel-force": "Weerstandskracht", "tooltip-open-graph-settings": "Open grafiekinstellingen", "msg-screenshot-copied": "Schermopname naar het klembord gekopieerd.", "label-groups": "Groepen", "placeholder-enter-query": "Voer vraag in...", "tooltip-delete-graph": "Groep verwijderen", "button-new-group": "Nieuwe groep", "tooltip-click-to-change-drag-to-reorder": "Klik om de kleur te veranderen\nSleep om groepen te ordenen", "action-timelapse": "Start grafiek time-lapse animatie", "tooltip-start-timelapse-animation": "Start time-lapse animatie", "button-animate-timelapse": "Animeer" }, "backlinks": { "name": "Terugverwijzing", "desc": "Toon aantal terugverwijzingen in de statusbalk.", "action-open": "Open terugverwijzingen", "action-show": "Toon het terugverwijzingenvenster", "action-open-for-current": "Open terugverwijzingen naar het huidige bestand", "action-toggle-backlinks-in-document": "Terugverwijzingen in het document aan-/uitzetten", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "Gelinkte vermeldingen", "label-no-backlinks": "Geen terugverwijzingen gevonden.", "label-unlinked-mentions": "Ongelinkte vermeldingen", "label-show-search": "Toon zoekfilter", "label-link-button-text": "Link", "tab-title": "Terugverwijzingen voor {{displayText}}", "label-no-unlinked-mentions": "Geen ongelinkte vermeldingen gevonden.", "ellipsis": "...", "option-backlink-in-document": "Terugverwijzing in document", "option-backlink-in-document-desc": "Toon terugverwijzingen in document standaard wanneer nieuwe vensters geopend worden." }, "outgoing-links": { "name": "Uitgaande verwijzingen", "desc": "Toon uitgaande verwijzingen en detecteer ongelinkte vermeldingen van andere notities in de huidige notitie.", "action-open": "Open uitgaande verwijzingen", "action-show": "Toon uitgaande verwijzingen venster", "action-open-for-current": "Uigaande verwijzingen van het huidige bestand openen", "tab-title": "Uitgaande verwijzingen van {{displayText}}", "label-links": "Links", "label-no-links": "Geen verwijzingen gevonden.", "label-unlinked-mentions": "Ongelinkte vermeldingen", "tooltip-link-file": "Verwijs naar dit bestand", "tooltip-not-created": "Nog niet aangemaakt" }, "tag-pane": { "name": "Tagvenster", "desc": "Toont al je tags en hoe vaak ze voorkomen.", "action-show": "Toon tagvenset", "label-no-tags": "Geen tags gevonden.", "label-sort-by-name-a-to-z": "Tagnaam (A tot Z)", "label-sort-by-name-z-to-a": "Tagnaam (Z tot A)", "label-sort-by-frequency-high-to-low": "Aantal vermeldingen (hoog naar laag)", "label-sort-by-frequency-low-to-high": "Aantal vermeldingen (laag naar hoog)", "action-show-nested-tags": "Toon ingebedde tags", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "Paginavoorbeeld", "desc": "Bekijk een voorbeeld van een notitie wanneer de cursor boven een interne link zweeft. Ctrl/Cmd + zweven in editor-modus.", "label-empty-note": "\"{{linktext}}\" is nog niet aangemaakt. Klik om aan te maken.", "label-source-editor": "Editor", "label-source-preview": "Voorbeschouwing", "label-source-search": "Zoeken, terugverwijzingen, en uitgaande verwijzingen", "label-require-mod": "Vereis {{key}} om het paginavoorbeeld te tonen wanneer de cursor boven een link zweeft." }, "starred": { "name": "Bestanden met ster", "desc": "Geef veelgebruikte bestanden en zoekopdrachten een ster.", "action-show": "Toon ster-venster", "action-toggle": "Geef/ontneem het huidig bestand een ster", "action-toggle-search": "Geef/ontneem de huidige zoekopdracht een ster", "action-star": "Geef een ster", "action-unstar": "Ontneem een ster", "menu-opt-remove": "Verwijderen", "msg-successfully-starred": "Ster gegeven aan {{type}} \"{{title}}\".", "msg-removed-starred": "Ster verwijderd van {{type}} \"{{title}}\".", "msg-cannot-find-path": "Kan het bestand niet vinden op \"{{path}}\"." }, "custom-css": { "name": "Aangepaste CSS", "desc": "Leest \"obsidian.css\" in de kluis en past het toe.", "setting-community-themes": "Community-thema's", "msg-fetching-themes": "Data van het community-thema ophalen...", "prompt-filter": "Filter...", "label-dark-theme-only": "Alleen donkere thema's", "label-light-theme-only": "Alleen lichte thema's", "label-use": "Gebruik", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "Bijwerken", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "Thema verwijderen", "label-visit-on-github": "Op GitHub bekijken", "msg-load-error": "Kon community-thema's niet laden, controleer je netwerkverbinding.", "msg-now-using-theme": "Je gebruikt nu {{title}} als je CSS-thema.", "msg-deleted-theme": "Het thema {{title}} is verwijderd.", "msg-updated-theme": "Het thema {{title}} is bijgewerkt.", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "Opdrachtenpaneel", "desc": "Typ een opdracht om het te gebruiken. De gebruikersinterface gebruiken of de sneltoets onthouden is niet nodig.", "action-open": "Open opdrachtenpaneel", "instruction-navigate": "navigeren", "instruction-use": "gebruiken", "instruction-dismiss": "afwijzen", "label-no-commands": "Geen opdrachten gevonden.", "prompt-type-command": "Typ een opdracht...", "label-pinned-commands": "Bewaarde opdrachten", "option-add-new-pin": "Nieuwe bewaarde opdracht", "option-add-new-pin-description": "Bewaarde opdrachten verschijnen bovenaan de opdrachtenlijst als er geen zoekterm is ingevoerd." }, "markdown-format-importer": { "name": "Markdown-indeling importeren", "desc": "Converteer Markdown van andere apps naar de Obsidian indeling.", "action-open": "Open Markdown importeur", "option-roam-tag-fixer": "Roam Research tag correctie", "option-roam-tag-fixer-description": "Converteert \"#tag\" en \"#[[tag]]\" naar \"[[tag]]\".", "option-roam-highlight-fixer": "Roam Research markering correctie", "option-roam-highlight-fixer-description": "Converteert \"^^markering^^\" naar \"==markering==\".", "option-roam-todo-converter": "Roam Research taken correctie", "option-roam-todo-converter-description": "Converteert \"{{[[Taak]]}}\" naar \"[ ]\".", "option-bear-highlight-fixer": "Bear markering correctie", "option-bear-highlight-fixer-description": "Converteert \"::markering::\" naar \"==markering==\".", "zettelkasten-link-fixer": "Zettelkasten verwijzingen correctie", "zettelkasten-link-fixer-description": "Corrigeert \"[[UID]]\" verwijzingen naar de volledige \"[[UID bestandsnaam]]\".", "zettelkasten-link-beautifier": "Zettelkasten verwijzingen mooier maken", "zettelkasten-link-beautifier-description": "Corrigeert \"[[UID]]\" verwijzingen en maakt ze mooier \"[[UID bestandsnaam|bestandsnaam]]\".", "msg-all-files-warning": "Waarschuwing: de import converteer alle bestanden in je kluis, niet alleen het huidige bestand.", "msg-override-files-warning": "Je bestanden worden overschreven. Maak een back-up van al je bestanden voordat je ze converteert.", "label-start-conversion": "Conversie starten", "label-stop": "Stop", "label-go-back": "Ga terug", "label-done": "Klaar", "label-processing": "Verwerken...", "label-cancelling": "Annuleren...", "label-finished": "Voltooid!", "label-processed-files": "Verwerkte bestanden", "label-modified-files": "Aangepaste bestanden", "label-total-replacements": "Totaal aantal vervangingen" }, "daily-notes": { "name": "Dagnotities", "desc": "Open de dagnotitie van vandaag, of maak er een aan als er nog geen is.", "short-name": "Vandaag", "action-open": "Open de notitie van vandaag", "action-open-previous": "Open vorige dagnotitie", "action-open-next": "Open volgende dagnotitie", "action-insert-text": "Voeg tekst in in de dagnotitie", "action-insert-link": "Voeg verwijzing in in de dagnotitie", "msg-fail-format": "Dagnotitie aanmaken mislukt. \"{{format}}\" is geen geldige bestandsextensie.", "msg-fail-folder": "Dagnotitie aanmaken mislukt. Map \"{{folderOption}}\" niet gevonden.", "msg-fail-template-file": "Dagnotitie aanmaken mislukt. Sjabloonbestand \"{{template}}\" niet gevonden.", "msg-no-previous": "Er is geen dagnotitie voor de huidige.", "msg-no-next": "Er is geen dagnotitie na de huidige.", "option-date-format": "Datumindeling", "label-refer-to-syntax": "Voor meer syntaxis, zie: ", "label-syntax-link": "formatteer referentie", "label-syntax-live-preview": "Dit is hoe het eruit zal zien: ", "option-new-file-location": "Nieuwe bestandslocatie", "option-new-file-location-description": "De maplocatie voor de nieuwe dagnotitie.", "option-template": "Sjabloonbestandslocatie", "option-template-description": "De bestandslocatie voor te gebruiken sjablonen.", "option-open-on-start": "Dagnotitie openen als obsidian opstart", "option-open-on-start-description": "Open je dagnotitie automatische als je deze kluis opent." }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Willekeurige notitie", "desc": "Opent een willekeurige notitie. Handig om te herzien en te ontdekken.", "short-name": "Willekeurig", "action-open": "Open een willekeurige notitie" }, "outline": { "name": "Overzicht", "desc": "Toont een overzicht van het huidige bestand of een gelinkt venster.", "action-open": "Open overzicht", "action-show": "Toon overzichtsvenster", "action-open-for-current": "Open het overzicht van het huidige bestand", "tab-title": "Overzicht van {{displayText}}", "label-no-headings": "Geen koppen gevonden." }, "word-count": { "name": "Woordenaantal", "desc": "Toon woordenaantal in de statusbalk" }, "slides": { "name": "Slides", "desc": "Presenteer vanuit Markdown. Gebruik \"---\" om slides te onderscheiden.", "action-start": "Start presentatie" }, "audio-recorder": { "name": "Geluidsrecorder", "desc": "Neem geluid op en sla het op als bijlage.", "action-start": "Start geluidsopname", "action-stop": "Stop geluidsopname", "action-toggle": "Start/stop opname", "msg-access-denied": "Toegang tot de microfoon was ontzegd, schakel dit in vanuit het instellingenvenster.", "msg-pending-grant": "Geef toestemming om de microfoon te bruiken om een opname te starten.", "msg-no-microphone": "Er is geen microfoon aangesloten." }, "open-with-default-app": { "name": "Open in standaardapplicatie", "desc": "Voeg knop toe om het huidge bestand in de standaardapplicatie te openen.", "action-open-file": "Open in standaardapplicatie", "action-open-file-mobile": "Delen", "action-show-in-folder": "Toon in map", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "Sjablonen", "desc": "Voeg sjablooninhoud in vanuit een map met sjabloonbestanden.", "action-insert": "Sjabloon invoegen", "action-insert-current-date": "Voeg huidige datum in", "action-insert-current-time": "Voeg huidige tijd in", "option-template-folder-location": "Sjabloonmaplocatie", "option-template-folder-location-description": "Bestanden in deze map zijn beschikbaar als sjablonen.", "option-template-date-format": "Datumindeling", "option-template-date-format-description": "{{date}} in het sjabloon wordt door deze waarde vervangen.", "option-template-date-format-description2": "Je kunt ook {{date:YYYY-MM-DD}} gebruiken om de indeling eenmalig te overschrijven.", "option-template-time-format": "Tijdsindeling", "option-template-time-format-description": "{{time}} in het sjabloon wordt door deze waarde vervangen.", "option-template-time-format-description2": "Je kunt ook {{time:HH:mm}} gebruiken om de indeling eenmalig te overschrijven.", "instruction-navigate": "navigeren", "instruction-insert": "sjabloon invoegen", "instruction-dismiss": "afwijzen", "msg-no-templates-found": "Geen sjablonen gevonden", "msg-fail-invalid-folder": "Sjablonen ophalen mislukt. Sjabloon map is ongeldig.", "msg-fail-folder-not-found": "Sjablonen ophalen mislukt. Map \"{{folderOption}}\" werd niet gevonden.", "prompt-type-template": "Typ de naam van een sjabloon..." }, "translucency": { "name": "Doorzichtig venster", "desc": "Schakel een doorzichtig effect in om het gevoel van diepte te verbeteren. Werkt het best in de donkere modus. Niet ondersteund op Linux." }, "slash-command": { "name": "Slash-opdrachten", "desc": "Schakel de mogelijkheid in om slash-opdrachten te gebruiken in de editor door de voorwaardse slash te typen." }, "editor-status": { "name": "Editorstatus", "desc": "Voegt een statusbalkonderdeel toe om de huidige editormodus te tonen en veranderen.", "read": "Lezen", "edit-source": "Bronmodus", "edit-live-preview": "Live-voorbeeld" }, "publish": { "name": "Publish", "desc": "Publiceer je notities met Obsidian Publish.", "action-publish-changes": "Publiceer veranderingen", "label-no-internet-access": "Je hebt toegang tot het internet nodig om veranderingen te publiceren.", "label-publish-service-description": "Obsidian Publish is een betaalde uitbereidende service waarmee je je notities rechtstreeks vanuit Obsidian online kunt publiceren.", "label-please-login": "Log in of maak een nieuw Obsidian account aan om te beginnen met publiceren.", "label-no-publish-subscription": "Je hebt nog geen Obsidian Publish abonnement.", "button-purchase": "Kopen", "label-manage-sites": "Sites beheren", "label-no-sites": "Je hebt geen sites.", "button-choose": "Kiezen", "tooltip-edit-site-id": "Site-ID aanpassen", "tooltip-delete-site": "Site verwijderen", "label-delete-site-confirmation": "Weet je zeker dat je deze site wilt veranderen?", "label-delete-site-details": "Dit verwijdert je site direct en voor altijd.", "label-confirm-delete-site": "Site \"{{site}}\" verwijderen bevestigen", "option-site-id": "Site-ID", "option-site-id-description": "Je site is te vinden via https://publish.obsidian.md/{site id}. Dit kan je later aanpassen. Alleen kleine letters, nummers en streepjes zijn toegestaan.", "option-site-id-placeholder": "Kies een site-id", "button-create": "Aanmaken", "msg-invalid-site-id": "Site-ID mag alleen kleine letters, nummers en streepjes bevatten.", "msg-site-id-in-use": "Deze site-ID is in gebruik, probeer een andere.", "msg-create-site-issue": "Dat was een probleem voor het aanmaken van je site.", "label-site-options": "Site options", "option-site-general": "General", "option-site-components": "Onderdelen", "option-site-appearance": "Uiterlijk", "option-site-reading-experience": "Leeservaring", "option-site-misc": "Andere site-instellingen", "option-site-name": "Site-naam", "option-site-name-description": "Naam van je gepubliceerde site. Dit wordt getoon in de pagina titel van je site.", "option-site-name-placeholder": "Naam van je site.", "option-home-page-file": "Homepage van je site", "option-home-page-file-description": "De eerste pagina de gebruiker ziet als je op je gepubliceerde site beland", "option-home-page-file-placeholder": "Kies een gepubliceerd bestand", "option-logo": "Logo", "option-logo-description": "Kies een afbeeldingsbestand als het logo voor je site.", "option-logo-placeholder": "Een geüploade afbeelding in je bestand...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "Thema", "option-theme-description": "Kies het standaard kleurenschema voor je site.", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "Toon navigatie", "option-show-navigation-description": "Toon een list van alle gepubliceerde pagina's aan de linker kant van je gepubliceerde site.", "option-show-search": "Toon zoekbalk", "option-show-search-description": "Toon een zoekbalk bovenaan de navigatie waarmee bezoekers naar pagina's en koppen op je site kunnen zoeken.", "option-show-graph": "Toon grafiekweergave", "option-show-graph-description": "Toon een kleine, locale grafiek op elke pagina.", "option-show-outline": "Toon inhoudstabel", "option-show-outline-description": "Toon het koppenoverzicht op elke pagina.", "option-show-backlinks": "Toon terugverwijzingen", "option-show-backlinks-description": "Toon terugverwzingensectie onderaan elke pagina.", "option-sliding-window-mode": "Gebruik schuivende vensters", "option-sliding-window-mode-description": "Open pagina's in nieuwe vensters rechts. Maakt horizontaal scrollen door vensters mogelijk.", "option-hover-preview-file": "Toon zwevend voorbeeld", "option-hover-preview-file-description": "Toon pagina voorbeeld wanneer de cursor over links zweeft.", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "Leesbaare regellengte", "option-readable-line-length-description": "Limiteer de maximale regellengte. Er past minder inhoud op het scherm, maar het maakt lange paragrafen beter leesbaar.", "option-site-password": "Wachtwoorden", "option-site-password-description": "Beperk toegang tot je site met wachtwoorden.", "option-google-analytics": "Google Analytics traceringscode", "option-google-analytics-description": "Configureer Google Analytics voor je site. Alleen beschikbaar voor bezoekers vanaf jouw aangepaste domein URL. Controleer alsjeblieft eerst de plaatselijke wetten en regelingen.", "button-manage-passwords": "Beheren", "button-save-site-settings": "Site-instellingen opslaan", "msg-updated-options": "Bijgewerkte opties voor jouw site.", "button-go-back": "Terug", "label-publishing-to": "Publiceren naar", "tooltip-switch-site": "Site veranderen", "button-add-linked": "Voeg gelinkte toe", "tooltip-add-linked": "Voeg alle bestanden toe waarnaar verwezen wordt door de huidige selectie bestanden", "msg-added-linked-files": "{{count}} gelinkte bestand is toegevoegd.", "msg-added-linked-files_plural": "{{count}} gelinkte bestanden zijn toegevoegd.", "tooltip-open-site-options": "Verander site-opties", "label-no-changes-detected": "Er werden geen veranderingen gevonden.", "label-changed-files-to-be-published": "Veranderingen", "label-unchanged-files-already-published": "Onveranderd (selecteer om te veranderen)", "label-file-selected": " geselecteerd", "button-select-all-files": "Selecteer alles", "button-deselect-all-files": "Alles deselecteren", "label-new-files-to-be-published": "Nieuw", "button-publish": "Publiceren", "msg-no-permission-to-publish-to-site": "Je hebt geen toestemmingen om naar de huidge site te publiceren.", "msg-select-at-least-one-file": "Selecteer op z'n minst één bestand alsjeblieft.", "label-upload-changes": "Veranderingen uploaden", "button-done": "Klaar", "button-stop": "Stop", "label-status-uploading": "Aan het uploaden", "label-status-to-publish": "Te publiceren", "label-status-to-delete": "Te verwijderen", "label-status-published": "Gepubliceerd", "label-status-deleted": "Verwijderd", "label-status-failed": "Mislukt", "label-status-cancelled": "Afgebroken", "button-change": "Veranderen", "label-clear-cache": "Het kan een paar minuten duren voordat de veranderingen getoond worden op je site. Als je je laatste aanpassingen niet kunt zien, probeer dan het cachegeheugen van je browser op te ruimen.", "label-visit-site": "Je kunt site hier bezoeken: ", "msg-something-went-wrong": "Er ging iets fout. Controleer de ontwikkelaarsconsole voor details.", "msg-network-error": "Een netwerkfout heeft plaatsgevonden. ", "label-manage-passwords": "Wachtwoorden beheren", "label-add-password": "Wachtwoord toevoegen", "action-new-password": "Nieuw wachtwoord", "label-no-password": "Je site heeft op dit moment geen wachtwoorden. Iedereen kan het bezoeken.", "label-have-password": "Je website is beveiligd met een wachtwoord. Als je meerdere wachtwoorden hebt, dan kunnen bezoekers je website bezoeken door er één van in te voeren.", "option-password-name": "Wachtwoord", "option-password-desc": "Een hash van je wachtwoord wordt veilig opgeslagen. Als het wachtwoord eenmaal ingesteld is, dan kan het niet ontdekt worden als tekst.", "option-password-placeholder": "Je wachtwoord", "option-nickname-name": "Roepnaam (optional)", "option-nickname-desc": "Stel een naam in als herinnering waarvoor of voor wie het wachtwoord is.", "action-add-password": "Wachtwoord toevoegen", "label-untitled-password": "Wachtwoord zonder naam", "label-password-created-time": "Aangemaakt op {{time}}", "msg-added-new-password": "Nieuw wachtwoord toegevoegd.", "option-custom-domain": "Aangepast domein", "option-custom-domain-desc": "Gebruik je eigen domein in plaats van de https://publish.obsidian.md/{site id} URL.", "option-noindex": "Zoekmachineindexering niet toestaan", "option-noindex-desc": "Voorkom dat zoekmachines je site indexeren.", "button-configure": "Configureren", "label-configure-custom-domain": "Configureer een aangepast domein", "option-custom-url-name": "Aangepaste URL", "option-custom-url-desc": "De URL waar je website zich bevindt.", "option-custom-url-placeholder": "www.jouwdomein.nl", "option-custom-url-redirect": "Doorverwijzen naar je aangepaste domein", "option-custom-url-redirect-desc": "Verwijs bezoekers door op publish.obsidian.md/id naar je aangepaste domein.", "button-update-custom-domain": "Domeininstellingen bijwerken", "label-custom-domain-instructions": "Raadpleeg onze {{link}} op onze help-site voor meer informatie.", "label-custom-domain-link-name": "Handleiding voor het instellen van een aangepast domein", "label-site-usage": "Je gebruikt {{site}} van je {{limit}}.", "button-add-more-sites": "Meer sites aanschaffen", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "Werkbladen", "desc": "Werkbladindeling opslaan en laden.", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "Opslaan", "button-load": "Laden", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "Sync", "desc": "Synchroniseer je bestanden met Obsidian Sync.", "action-view-version-history": "Toon versiegeschiedenis", "label-load-more": "Meer laden", "label-show-diff": "Show diff", "label-copy-to-clipboard": "Naar klembord kopiëren", "label-restore-this-version": "Deze versie terugzetten", "msg-already-latest-version": "Deze versie is al de meest recente.", "msg-restored-version": "Versie van {{time}} succesvol teruggezet", "label-file-deleted": "Dit bestand is verwijderd", "label-no-earlier-version": "Er zijn geen vroegere versies van dit bestand.", "label-empty-file": "Leeg", "label-setting-files": "Configuratiebestanden", "label-deleted-files": "Verwijderde bestanden", "label-version-history": "Version history", "label-click-to-see-history": "Klik op een verwijderd bestand om er de gescheidenis van te zien.", "label-create-remote-vault": "Maak een kluis op afstand aan", "msg-please-enter-password": "Voer een wachtwoord in.", "msg-vault-name-cannot-be-empty": "Kluisnaam mag niet leeg zijn.", "msg-successfully-created-vault": "Kluis op afstand \"{{name}}\" aanmaken geslaagd.", "label-remote-vault-explanation": "Kluizen op afstand synchroniseren je kluis veilig tussen apparaten.", "option-vault-name": "Kluisnaam", "option-vault-name-desc": "Helpt je herinneren waar deze kluis voor is.", "option-vault-name-placeholder": "Mijn geweldige kluis", "option-use-custom-encryption-password": "Wachtwoord voor end-to-end-versleuteling aanpassen", "option-use-custom-encryption-password-desc": "Als je dit uitschakelt beheren wij veilig een verleutelingssleutel voor je.", "option-use-custom-encryption-password-desc-warning": "Deze optie kan niet later aangepast worden.", "option-encryption-password": "Wachtwoord voor versleuteling", "option-encryption-password-desc": "Dit wachtwoord kan later niet aangepast worden.", "option-encryption-password-desc-warning": "Als je dit wachtwoord vergeet is alle data op afstand voor altijd onbruikbaar.", "option-encryption-password-desc-2": "Dit heeft geen invloed op je locale data.", "option-encryption-password-placeholder": "Je wachtwoord", "label-enter-encryption-password": "Voer versleutelingswachtwoord in", "button-unlock-vault": "Kluis ontsluiten", "msg-verified-password": "Wachtwoord verifiëren geslaagd.", "label-remote-vaults": "Je kluizen op afstand", "label-vault-created-time": "Aangemaakt op {{time}}", "tooltip-delete-remote-vault": "Verwijder", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "Kluis verwijderen bevestigen", "label-confirm-delete-remote-vault-question": "Weet je zeker dat je deze kluis op afstand wilt verwijderen?", "label-confirm-delete-remote-vault-result": "Alle data op onze server, inclusief versiegeschiedenis, wordt verwijderd. Je lokale bestanden blijven intact.", "label-confirm-delete-remote-vault-warning": "Deze actie is permanent en niet terug te draaien.", "msg-remote-vault-deleted": "{{name}} is verwijderd.", "button-connect-to-remote-vault": "Verbinden", "button-disconnect-from-remote-vault": "Verbinding verbreken", "label-not-remote-vaults": "Je hebt geen kluizen op afstand.", "button-create-new-remote-vault": "Nieuwe kluis aanmaken", "label-sync-log": "Synchronisatieverslag", "options-only-show-errors": "Alleen fouten", "options-only-show-errors-desc": "Toon alleen fouten en verberg andere verslagonderdelen.", "button-copy-sync-log": "Synchronisatieverslag kopiëren", "msg-successfully-copied-sync-log": "Synchronisatieverslag kopiëren geslaagd.", "button-retry": "Opnieuw proberen", "button-purchase-subscription": "Aanschaffen", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "Kiezen", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "Synchronisatiestatus", "option-sync-status-desc-paused": "Obsidian Sync is momenteel gepauzeerd.", "option-sync-status-desc-running": "Obsidian Sync is momenteel actief.", "option-device-name": "Apparaatnaam", "option-device-name-desc": "Deze naam wordt weergegeven in het Synchronisatieverslag. Leeglaten om de standaardnaam te gebruiken.", "button-resume": "Hervatten", "button-pause": "Pauzeren", "option-view-deleted-files": "Verwijderde bestanden", "option-view-deleted-files-desc": "Toon en herstel verwijderde bestanden.", "option-sync-log": "Synchronisatieactiviteit", "option-sync-log-desc": "Toon recente synchronisatieactiviteit voor het debuggen.", "button-view": "Tonen", "button-bulk-restore": "In bulk terugzetten", "button-restore-selected-files": "Geselecteerde bestanden terugzetten", "msg-restoring": "Terugzetten...", "msg-restoring-complete": "`Terugzetten voltooid: {{succeeded}} geslaagd en {{failed}} mislukt.`", "option-over-size": "Kluisgrootte over de limiet", "option-over-size-desc": "Je kluis is {{size}} van maximaal {{limit}}.", "msg-largest-files": "Toon grootste bestanden", "msg-largest-files-desc": "Dit zijn de bestanden op afstand die het meeste ruimte opnemen. Gebruik na het verwijderen van bijlagen de opruimknop om ruimte vrij te maken in de kluis op afstand.", "button-purge-remote": "Opruimen", "tooltip-purge-remote": "Ruim verwijderde bijlagen permanent op van de kluis op afstand om ruimte te besparen.", "msg-purge-complete": "Opruimen geslaagd.", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "Selectieve synchronisatie", "option-excluded-folders": "Uitgesloten mappen", "option-excluded-folder-desc": "Voorkom dat bepaalde mappen gesynchroniseerd worden.", "option-currently-excluded-folders": " Deze mappen zijn momenteel uitgesloten:", "button-manage-excluded-folders": "Beheren", "option-sync-image": "Afbeeldingen synchroniseren", "option-sync-image-desc": "Synchroniseer afbeeldingsbestanden met deze bestandsextensies: {{extensions}}.", "option-sync-audio": "Audio synchroniseren", "option-sync-audio-desc": "Synchroniseer audiobestanden met deze bestandsextensies: {{extensions}}.", "option-sync-video": "Video's synchroniseren", "option-sync-video-desc": "Synchroniseer videobestanden met deze bestandsextensies: {{extensions}}.", "option-sync-pdf": "PDF's synchroniseren", "option-sync-pdf-desc": "Synchroniseer PDF's.", "option-sync-unsupported": "Alle andere typen synchroniseren", "option-sync-unsupported-desc": "Synchroniseer niet-ondersteunde bestandsindelingen.", "option-vault-config-sync": "Kluisconfiguratiesynchronisatie", "option-view-config-files": "Versiegeschiedenis van instellingen", "option-view-config-files-desc": "Toon en herstel versiegeschiedenis van instellingsbestanden.", "option-sync-app": "Hoofdinstellingen", "option-sync-app-desc": "Inschakelen om editorinstellingen, bestands- en verwijzingsinstellingen, aangepaste sneltoetsen etc. te synchroniseren.", "option-sync-appearance": "Uiterlijke instellingen", "option-sync-appearance-desc": "Synchroniseer uiterlijke instellingen zoals donkere modus, actief thema en ingeschakelde fragmenten.", "option-sync-appearance-data": "Thema's en fragmenten", "option-sync-appearance-data-desc": "Gedownloade thema's en fragmenten synchroniseren. Of ze ingeschakeld zijn is afhankelijk van de vorige optie.", "option-sync-hotkey": "Sneltoetsen", "option-sync-hotkey-desc": "Aangepaste sneltoetsen synchroniseren.", "option-sync-core-plugin": "Actieve kern-plug-in-lijst", "option-sync-core-plugin-desc": "Synchroniseer welke kern-plug-ins ingeschakeld zijn.", "option-sync-core-plugin-data": "Kern-plug-in-instellingen", "option-sync-core-plugin-data-desc": "Synchroniseer kern-plug-in-instellingen.", "option-sync-community-plugin": "Actieve community-plug-in-lijst", "option-sync-community-plugin-desc": "Synchroniseer welke community-plug-ins ingeschakeld zijn.", "option-sync-community-plugin-data": "Geïnstalleerde comminity-plug-ins", "option-sync-community-plugin-data-desc": "Synchroniseer geïnstalleerde community-plug-ins (.js, .css, en manifest.json bestanden) en bijbehorende instellingen.", "label-sync-introduction": "Obsidian Sync is Obsidians uitbereidende synchronisatieservice met end-to-end-versleuteling en versiegeschiedenis.", "label-account-required": "Log in of maak een nieuw Obsidian-account aan om te beginnen met synchroniseren.", "button-sign-up": "Aanmelden", "button-log-in": "Inloggen", "label-manage-excluded-folders": "Uitgesloten mappen beheren", "label-number-of-folders-excluded": "{{folders}} zijn momenteel uitgesloten van synchronisatie.", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "Verbinding instellen", "label-now-connected-to-vault": "Je bent nu verbonden met \"{{name}}\".", "button-start-syncing": "Synchronisatie starten", "label-confirm-merge-vault": "Kluis samenvoegen bevestigen", "msg-vault-has-notes": "Je lokale kluis bevat al enkele notities.", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "Bestanden herstellen", "desc": "Vind recente momentopnames terug om onvoorzien verlies van data te herstellen. Er worden alleen momentopnames gemaakt voor Markdown-bestanden.", "action-open": "Open opgeslagen momentopnames", "option-interval": "Momentopname-interval", "option-interval-description": "Mimimum interval tussen twee momentopnames in minuten.", "option-keep": "Geschiedenisduur", "option-keep-description": "Hoe lang momentopnames bewaard blijven in dagen.", "option-open-history": "Momentopnames", "option-open-history-description": "Opgeslagen momentopnames tonen en herstellen.", "button-view-snapshots": "Toon", "option-clear": "Geschiedenis wissen", "option-clear-description": "Alle momentopnames verwijderen.", "button-clear-history": "Wissen", "label-clear-warning": "Weet je zeker dat je alle momentopnames wilt verwijderen? Alleen de momentopnames worden verwijderd. De bestanden in je kluis blijven onveranderd.", "msg-clear-complete": "Momentopnames gewist.", "label-no-history-found": "Geen momentopnames gevonden.", "placeholder-choose-file": "Kies een bestand...", "label-select-file": "Selecteer links een bestand om momentopnames te tonen." }, "note-composer": { "name": "Notitiesamensteller", "desc": "Splits, refactor en voeg notities samen.", "option-confirm-file-merge": "Samenvoegen van bestanden bevestigen", "option-confirm-file-merge-description": "Vraag voordat twee bestanden worden samengevoegd.", "option-split-replacement-text": "Tekst na extractie", "option-split-replacement-text-description": "Wat te tonen in plaats van de geselecteerde tekst na de extractie.", "option-choice-split-replacement-text-link": "Verwijzing naar nieuw bestand", "option-choice-split-replacement-text-embed": "Nieuw bestand insluiten", "option-choice-split-replacement-text-none": "Geen", "option-template-file": "Sjabloonbestandslocatie", "option-template-file-description": "Gebruik dit sjabloonbestand voor samenvoegen of extraheren. Beschikbare variabelen: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, bijv. {{date:YYYY-MM-DD}}.", "command-merge-file": "Huidige bestand met een ander bestand samenvoegen...", "action-merge-file": "Volledig bestand samenvoegen met...", "label-no-files": "Geen bestanden gevonden.", "instruction-navigate": "Navigeer", "instruction-merge": "Voeg samen", "instruction-create-new": "Nieuwe aanmaken", "instruction-merge-at-top": "bovenaan samenvoegen", "instruction-dismiss": "Wijs af", "prompt-select-file-to-merge": "Selecteer bestand om het huidige in te voegen...", "label-merge-file": "Bestand samenvoegen", "label-confirm-file-merge": "Weet je zeker dat je \"{{file}}\" in \"{{destination}}\" wilt voegen? \"{{file}}\" zal worden verwijderd.", "button-merge": "Samenvoegen", "button-merge-do-not-ask-again": "Samenvoegen en niet opnieuw vragen", "command-split-file": "Huidige selectie extraheren...", "command-extract-heading": "Deze op extraheren...", "instruction-append": "naar bodem verplaatsen", "instruction-prepend": "naar de top verplaatsen", "msg-fail-to-fetch-template": "Sjabloon kon niet worden opgehaald: \"{{template}}\" niet gevonden.", "msg-fail-to-find-heading": "Kop kon niet worden gevonden" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} woord", "word-with-count_plural": "{{count}} woorden", "character-with-count": "{{count}} teken", "character-with-count_plural": "{{count}} tekens", "link-with-count": "{{count}} link", "link-with-count_plural": "{{count}} links", "file-with-count": "{{count}} bestand", "file-with-count_plural": "{{count}} bestanden", "folder-with-count": "{{count}} map", "folder-with-count_plural": "{{count}} mappen", "backlink-with-count": "{{count}} terugverwijzing", "backlink-with-count_plural": "{{count}} terugverwijzingen", "site-with-count": "{{count}} site", "site-with-count_plural": "{{count}} sites", "plugin-with-count": "{{count}} plug-in", "plugin-with-count_plural": "{{count}} plug-ins", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } } { "setting": { "options": "Options", "plugin": "Utvidelse", "builtin-plugins": "Core plugins", "plugin-options": "Plugin options", "folder-path-example-placeholder": "Eksempel: mappe 1/mappe 2", "file-path-example-placeholder": "Eksempel: mappe/notat", "msg-restart-required": "Changing this option requires a restart to take effect.", "editor": { "name": "Editor", "section-general": "General", "section-behavior": "Behavior", "section-display": "Display", "option-spellcheck": "Stavekontroll", "option-spellcheck-description": "Skrur på stavekontroll. Dette funker enn så lenge bare for engelsk (US)", "spellcheck-languages": "Spellcheck languages", "spellcheck-languages-description": "Choose the languages for the spellchecker to use.", "spellcheck-languages-mac-description": "The native spellchecker will automatically detect the language being used for you on macOS.", "spellcheck-dict": "Ordbok for stavekontroll", "spellcheck-dict-empty": "Ordboken er tom.", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "Lesbar lengde på linjene", "option-readable-line-description": "Begrenser lengden på hver linje. Mindre innhold får plass på skjermen, men lange avsnitt blir enklere å lese.", "option-strict-line-break": "Nøye linjeskift", "option-strict-line-break-description": "Krever doble linjeskift, slik som i Markdown-spesifikasjonene. Skru denne av for å vise enkle linjeskift i forhåndsvisningsmodus.", "option-show-frontmatter": "Vis forord", "option-show-frontmatter-description": "I forhåndsvisningsmodus, vis forord formattert som kode. Skru denne av for å skjule forord.", "option-auto-pair-brackets": "Automatiske parenteser", "option-auto-pair-brackets-description": "Lukker parenteser og anførselstegn automatisk.", "option-auto-pair-markdown": "Automatisk Markdown syntaks", "option-auto-pair-markdown-description": "Setter automatisk inn symboler for kursiv og fet skrift.", "option-smart-indent-lists": "Smarte lister", "option-smart-indent-lists-description": "Tar hånd om innrykk og listetegn for deg.", "option-fold-heading": "Skjul under overskrift", "option-fold-heading-description": "Lar deg skjule innholdet under hver overskrift.", "option-fold-indent": "Skjul under innrykk", "option-fold-indent-description": "Lar deg skjule innhold som er innrykket, som for eksempel innhold under en liste.", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Editing view", "option-default-new-tab-view-reading": "Reading view", "option-default-editing-mode": "Default editing mode", "option-default-editing-mode-description": "The default editing mode a new pane will start with.", "option-default-editing-mode-source": "Source mode", "option-default-editing-mode-live-preview": "Live Preview", "option-show-line-number": "Vis linjenummer", "option-show-line-number-description": "Viser linjenummer ved siden av innholdet.", "option-indentation-guide": "Show indentation guides", "option-indentation-guide-description": "Show vertical relationship lines between bullet points for visual guidance.", "option-use-tabs": "Bruk tab-er", "option-use-tabs-description": "Setter inn et tab-tegn når du trykker \"Tab\"-knappen. Skru funksjonen av for å bruke mellomrom-tegn.", "option-tab-size": "Tab size", "option-tab-size-description": "Number of spaces a tab is equivalent to.", "option-rtl": "Right-to-left (RTL)", "option-rtl-description": "Sets the text direction of notes to display in right-to-left.", "option-auto-convert-html": "Auto convert HTML", "option-auto-convert-html-description": "Automatically convert HTML to Markdown when pasting and drag-and-drop from webpages. Use Ctrl/Cmd+Shift+V to paste without conversion.", "option-vim-key-bindings": "Vim-hurtigtaster", "option-vim-key-bindings-description": "Lar deg bruke hurtigtaster som i Vim.", "option-vim-key-bindings-mobile": "On mobile devices, this setting is per-device and is not synchronized through the config file.", "option-emacsy-keys": "Legacy Emacs-style key bindings for macOS", "option-emacsy-keys-description": "Allows you to use the additional Emacs-style navigation keys, which are standard on macOS, but may interfere with some key operations.", "label-confirm-enable-vim": "Confirm entering Vim mode", "label-vim-warning": "Vim mode is for efficient text editing but can be quite counter-intuitive. If you're not familiar with Vim, this option might make it look like Obsidian has stopped working.", "label-vim-test": "To verify that you know your way around Vim, please enter the command to quit Vim without saving below:", "label-vim-your-answer": "Your answer", "placeholder-enter-command": "Enter command...", "button-confirm-enable-vim": "Let me enable Vim", "msg-vim-mode-enabled": "Command is correct. Vim mode now enabled.", "msg-vim-mode-not-enabled": "Command is incorrect. Vim mode remains disabled to protect you.", "msg-vim-mode-please-enter-command": "Please enter the command to enable Vim mode", "option-legacy-editor": "Use legacy editor", "option-legacy-editor-description2": "The legacy editor will be deprecated soon. It is currently no longer maintained, and as such, bugs will no longer be addressed.", "label-legacy-deprecation": "New editor is here", "label-legacy-deprecation-1": "Obsidian now has a brand new editor that's more robust and accessible.", "label-legacy-deprecation-2": "It seems you're still using the legacy editor, and we think you'll enjoy the new editor.", "label-legacy-deprecation-choice": "Which mode would you like to use?", "label-live-preview-description": "A more modern, what-you-see-is-what-you-get experience.", "label-source-mode-description": "See raw Markdown with syntax highlighting.", "button-start-new-editor": "Start new editor" }, "file": { "name": "Files & Links", "option-confirm-file-deletion": "Bekreft sletting", "option-confirm-file-deletion-description": "Hvorvidt du ønsker å bli spurt før du sletter en fil.", "option-delete-destination": "Slettede filer", "option-delete-destination-description": "Hva du ønsker å gjøre med slettede filer.", "option-choice-system-trash": "Flytt til systemets papirkurv", "option-choice-vault-trash": "Flytt til Obsidians papirkurv (.trash-mappen)", "option-choice-permanent-delete": "Slett permanent", "option-always-update-links": "Alltid oppdater lenker", "option-always-update-links-description": "Hvorvidt du vil oppdatere lenker automatisk eller bli spurt hver gang du endrer navn på en fil.", "option-new-note-location": "Standard plassering av nytt notat", "option-new-note-location-description": "Hvor nye notater skal plasseres. Innstillinger for utvidelsene overkjører denne regelen.", "option-choice-vault-root": "Hvelvets rotmappe", "option-choice-current-folder": "Samme mappe som filen er i", "option-choice-specified-folder": "Egendefinert mappe (spesifisert nedenfor)", "option-new-file-folder-path": "Nye notater plasseres i denne mappen:", "option-new-file-folder-path-description": "Innstillinger for utvidelsene overkjører denne regelen.", "option-use-wiki-links": "Use [[Wikilinks]]", "option-use-wiki-links-description": "Auto-generate Wikilinks for [[links]] and ![[images]] instead of Markdown links and images. Disable this option to generate Markdown links instead.", "option-show-unsupported-files": "Detect all file extensions", "option-show-unsupported-files-description": "Show files with any extension even if Obsidian can't open them natively, so that you can link to them and see them in File Explorer and Quick Switcher.", "option-link-autocompleted-format": "Format på nye lenker", "option-link-autocompleted-format-description": "Hvilket format som ønskes på automatisk genererte interne lenker.", "option-choice-shortest-linktext": "Kortest mulig søkesti", "option-choice-relative-path": "Relativ søkesti til filen", "option-choice-absolute-path": "Absolutt søkesti, relativt til hvelvet", "option-new-attachment-location": "Default location for new attachments", "option-new-attachment-location-description": "Where newly added attachments are placed.", "option-choice-subdirectory": "In subfolder under current folder", "option-attachment-folder-path": "Søkesti til vedleggsmappe", "option-attachment-folder-path-description": "Nye vedlegg plasseres her. Dette kan være bilder lagt til via copy-paste eller lydinnspillinger.", "option-attachment-subfolder-path": "Subfolder name", "option-attachment-subfolder-path-description": "If your file is under \"vault/folder\", and your set subfolder name to \"attachments\", attachments will be saved to \"vault/folder/attachments\".", "option-attachment-subfolder-path-placeholder": "attachments", "option-excluded-files": "Excluded files", "option-excluded-files-desc": "Excluded files will be either hidden or less noticeable in various places, such as Quick Switcher, link suggestion, and Graph View.", "label-no-excluded-filters-applied": "No excluded filter is applied right now. Add one below.", "label-excluded-filters-applied": "Files matching the following filters are currently excluded:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Enter path or \"/regex/\"..." }, "appearance": { "name": "Programstil", "option-base-theme": "Base theme", "option-base-theme-description": "Choose Obsidian’s default color scheme.", "option-accent-color": "Accent color", "option-accent-color-description": "Choose the accent color used throughout the app.", "dark-theme": "Dark", "light-theme": "Light", "system-theme": "Adapt to system", "option-font": "Font", "option-advanced": "Advanced", "option-interface-font": "Interface font", "option-interface-font-description": "Set base font for all of Obsidian.", "option-text-font": "Text font", "option-text-font-description": "Set font for editing and reading views.", "option-monospace-font": "Monospace font", "option-monospace-font-description": "Set font for places like code blocks and frontmatter.", "label-single-font-currently-in-effect": " Currently applied font: ", "label-multiple-fonts-currently-in-effect": " The following fonts are currently applied:", "option-font-placeholder": "Enter font name...", "label-no-custom-font-set": "No custom font is applied right now. Add one below.", "label-font-applied": "The first font from this list that is available on your system will be applied.", "msg-font-not-found": "This font is not detected on your system.", "msg-font-found": "This font is detected on your system.", "label-font-name": "Font name", "option-community-themes": "Åpne Brukerstiler", "option-community-themes-description": "Forhåndsvis og bruk stiler lagd av andre brukere.", "button-browse-community-themes": "Browse", "option-font-size": "Font size", "option-font-size-description": "Font size in pixels that affects editor and preview.", "option-font-size-action": "Quick font size adjustment", "option-font-size-action-description": "Adjust the font size using Ctrl + Scroll, or using the trackpad pinch-zoom gesture.", "option-themes": "Themes", "option-manage-themes-description": "Manage installed themes and browse community themes.", "option-theme-button-manage": "Manage", "option-choice-none": "None", "option-native-menus": "Native menus", "option-native-menus-desc": "Menus throughout the app will match the operating system. They will not be affected by your theme.", "button-reload-themes": "Reload themes", "msg-reloaded-themes": "Reloaded custom CSS themes.", "button-open-themes-folder": "Open themes folder", "option-css-snippets": "CSS snippets", "label-no-css-snippets-found": "No CSS snippets found in the snippets folder.", "no-snippet-description": "CSS Snippets are stored in \"{{path}}\".", "button-reload-snippets": "Reload snippets", "button-open-snippets-folder": "Open snippets folder", "msg-reloaded-snippets": "Reloaded CSS snippets.", "option-toggle-snippet-description": "Apply CSS snippet at \"{{path}}\".", "label-installed-themes": "Installed themes", "label-screenshot-unavailable": "Screenshot unavailable", "label-default-theme": "Default", "tooltip-click-to-enlarge": "Click to enlarge", "button-update": "Update", "label-currently-selected": "Selected", "option-frame-style": "Window frame style", "option-frame-description": "Determines the styling of the title bar of Obsidian windows. Requires a full restart to take effect.", "option-frame-hidden": "Hidden (default)", "option-frame-obsidian": "Obsidian frame", "option-frame-native": "Native frame", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Show tab title bar", "option-show-view-header-desc": "Display the header at the top of every tab.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "button-check-for-updates": "Check for updates", "button-view-updates": "View updates", "button-update-all-themes": "Update all", "label-current-themes": "Current community themes", "label-currently-installed": "You currently have {{count}} theme installed.", "label-currently-installed_plural": "You currently have {{count}} themes installed." }, "hotkeys": { "name": "Hurtigtaster", "prompt-filter": "Filtrer...", "tooltip-delete-hotkey": "Slett hurtigtast", "label-waiting-for-hotkey-press": "Trykk hurtigtast...", "tooltip-restore-default": "Tilbake til standard", "tooltip-customize-command": "Endre hurtigtast", "tooltip-hotkey-single-conflict": "This hotkey conflicts with \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "This hotkey conflicts with {{count}} other commands", "label-blank-hotkey": "Blank" }, "about": { "name": "Om", "label-commercial-license": "Commercial license", "label-license-key": "Lisensnøkkel", "license-key-placeholder": "Din lisensnøkkel...", "label-activate-license": "Aktiver lisens", "button-activate": "Aktiver", "label-unknown-version": "Ukjent", "label-current-version": "Gjeldende versjon: ", "label-install-version": "(Versjon av installasjonsprogram: {{version}})", "label-up-to-date": "Obsidian er oppdatert!", "label-read-changelog": "Les endringsloggen.", "label-manual-update-required": "To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.", "label-download": "Download", "label-new-version-ready": "En ny versjon er klar til å bli installert. ", "label-relaunch-to-update": "Start appen på nytt for å installere.", "label-disabled-updates": "Oppdateringer er deaktivert.", "label-checking-for-updates": "Ser etter oppdateringer...", "button-relaunch": "Start på nytt", "button-check-for-updates": "Se etter oppdateringer", "option-auto-update": "Automatiske oppdateringer", "option-auto-update-description": "Skru av for å forhindre Obsidian fra å se etter nye oppdateringer.", "option-get-help": "Get help", "option-get-help-description": "Get help on using Obsidian.", "button-open": "Åpne", "option-language": "Språk", "option-language-description": "Endre språket.", "option-insider-build": "Få Insider-versjoner", "option-insider-build-description": "Oppgrader til Insider-versjoner for å teste de nyeste funksjonene. Vær oppmerksom på at disse versjonene kan være mindre stabile.", "option-advanced": "Advanced", "option-hw-acceleration": "Hardware Acceleration", "option-hw-acceleration-description": "Turns on Hardware Acceleration, which uses your GPU to make Obsidian smoother.", "option-hw-acceleration-warning": "If you turn this off, app performance will be severely degraded.", "option-config-location": "Override config folder", "option-config-location-description": "Use a different config folder than the default one. Must start with a dot.", "option-config-location-warning": "Config location must be a valid folder name that starts with a dot.", "label-license": "Lisens", "label-your-commercial-license-key": "Your commercial license key is \"{{key}}\".", "label-commercial-license-info": "Registrert på \"{{company}}\" for {{seats}} brukere. Gyldig til {{expiry}}.", "label-validating-commercial-license": "Validerer..", "label-invalid-commercial-license": "Ugyldig lisens: ", "button-remove-commercial-license": "Remove", "option-catalyst": "Catalyst license", "option-catalyst-desc": "You currently have the {{tier}} Catalyst license. Thanks for your support!", "option-catalyst-desc-no-license": "You don't have a Catalyst license right now. Catalyst license is a one-time donation to support Obsidian development.", "label-app": "App" }, "account": { "name": "Bruker", "option-your-account": "Your account", "option-your-account-desc": "You're currently signed in {{name}} ({{email}}).", "option-your-account-desc-no-login": "You're not logged in right now. An account is only needed for Obsidian Sync, Obsidian Publish, and Catalyst insider builds.", "button-manage-settings": "Manage settings", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Commercial license", "option-commercial-license-desc": "If you use Obsidian for commercial purpose, you may need to get a commercial license.", "button-purchase": "Purchase", "button-log-out": "Logg ut", "label-log-in": "Logg inn", "label-sign-up": "Sign up", "label-email": "Email", "placeholder-email": "Din email...", "label-password": "Passord", "placeholder-password": "Ditt passord...", "button-login": "Log inn", "message-empty-email": "Du må oppgi en email.", "message-invalid-email": "Ugyldig email.", "message-empty-password": "Du må oppgi et passord.", "message-login-failed": "Innlogging feilet, vennligst sjekk at emailen og passordet er riktig.", "label-no-account": "Har du ikke en bruker? ", "link-sign-up-now": "Registrer deg nå" }, "core-plugin": { "plugin-list": "Plugin list", "option-search-plugin": "Search core plugins", "option-search-plugin-description": "Filter plugins by name or description.", "placeholder-search-plugin": "Search plugins..." }, "third-party-plugin": { "name": "Third-party plugin", "option-restricted-mode": "Restricted mode", "option-restricted-mode-description": "Restricted Mode is off. Turn on to disable community plugins.", "button-turn-on": "Turn on", "option-browse-community-plugins": "Community plugins", "option-browse-community-plugins-description": "Browse and install third-party plugins made by our amazing community.", "button-browse": "Browse", "label-exit-restricted-mode": "Exit Restricted Mode", "label-exit-restricted-mode-description-1": "Community plugins, like any other software you install, could potentially cause data integrity and security issues.", "label-exit-restricted-mode-description-2": "Plugin security is important to us. Here's what we do:", "label-exit-restricted-mode-description-3": "Despite our efforts, there is still a small chance that a community plugin might misbehave.", "label-code-review": "Initial code review", "label-code-review-desc": "Plugins undergo an initial code review by our team before they appear in the store.", "label-open-source": "Open source", "label-open-source-desc": "Most plugins are open source on GitHub, so you can inspect the code yourself.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We have a large community of developers who watch out for each other.", "label-report-mechanism": "Report mechanism", "label-report-mechanism-desc": "We follow up and remove faulty plugins upon user report.", "label-exit-restricted-mode-disable-confirmation": "Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.", "label-learn-more": "Learn more about plugin security", "button-turn-on-community-plugins": "Turn on community plugins", "label-trust-author": "Do you trust the author of this vault?", "label-trust-author-description-1": "You're opening this vault for the first time, and it comes with some plugins.", "label-trust-author-description-2": "If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.", "label-trust-author-description-3": "If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.", "button-enable-plugins": "Trust author and enable plugins", "button-dont-trust-author": "Browse vault in Restricted Mode", "placeholder-community-plugins": "Search community plugins...", "msg-failed-load-plugins": "Failed to load community plugins.", "label-installed": "Installed", "button-install": "Install", "button-enable": "Enable", "button-disable": "Disable", "button-copy-share-link": "Copy share link", "button-donate": "Donate", "label-no-results-found": "No results found.", "msg-failed-to-load-manifest": "Failed to load plugin manifest.", "label-version": "Version: {{version}}", "label-currently-installed-version": " (currently installed: {{version}})", "label-by-author": "By ", "label-repository": "Repository: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "This plugin does not support your device.", "button-update": "Update", "label-no-readme": "This plugin did not provide a README file.", "msg-installing-plugin": "Installing plugin \"{{name}}\"...", "msg-failed-to-install-plugin": "Failed to install plugin \"{{name}}\".", "msg-successfully-installed-plugin": "Successfully installed plugin \"{{name}}\".", "label-installed-plugins": "Installed plugins", "button-reload-plugins": "Reload plugins", "msg-reloaded-third-party-plugins": "Reloaded third-party plugins.", "label-uninstall": "Uninstall", "label-uninstall-plugin": "Uninstall plugin", "label-uninstall-plugin-confirmation": "Are you sure you want to uninstall this plugin? This will delete the folder of the plugin.", "button-open-plugins-folder": "Open plugins folder", "button-check-for-updates": "Check for updates", "button-update-all-plugins": "Update all", "label-current-plugins": "Current plugins", "label-currently-installed": "You currently have {{count}} plugin installed.", "label-currently-installed_plural": "You currently have {{count}} plugins installed.", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Show a message with how long each plugin took to initialize when starting the app.", "msg-no-updates-found": "No plugin updates found.", "msg-updates-found": "Found {{count}} plugin to update.", "msg-updates-found_plural": "Found {{count}} plugins to update.", "msg-update-plugin": "Update to version {{version}}", "option-search-installed-plugin": "Search installed plugins", "option-search-installed-plugin-description": "Filter installed plugins by name or description.", "placeholder-search-installed-plugin": "Search installed plugins...", "show-installed-only": "Show installed only", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "Showing {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Mobile toolbar", "option-configure-quick-action": "Configure mobile Quick Action", "option-configure-quick-action-description": "Configure which command to trigger when pull down from the top. The current command is set to \"{{command}}\".", "button-configure": "Configure", "placeholder-select-quick-action": "Select Quick Action...", "manage-toolbar-options": "Manage toolbar options", "option-internal-link": "Add internal link", "option-internal-embed": "Add embed", "option-tag": "Add tag", "option-heading": "Toggle heading", "option-strikethrough": "Toggle strikethrough", "option-highlight": "Toggle highlight", "option-code": "Toggle code", "option-blockquote": "Toggle blockquote", "option-markdown-link": "Add Markdown link", "option-bullet-list": "Toggle bullet list", "option-numbered-list": "Toggle numbered list", "option-indent-list": "Indent list item", "option-unindent-list": "Unindent list item", "option-undo": "Undo", "option-redo": "Redo", "option-move-caret-up": "Move caret up", "option-move-caret-down": "Move caret down", "option-move-caret-left": "Move caret left", "option-move-caret-right": "Move caret right", "option-first-line": "Go to first line", "option-last-line": "Go to last line", "option-toggle-keyboard": "Toggle keyboard", "option-configure-toolbar": "Configure mobile toolbar", "option-added-options": "Added options", "option-more-toolbar-options": "More toolbar options", "option-attach": "Insert attachment", "option-add-command": "Add global command", "option-add-command-description": "Select any global command to add to the toolbar." } }, "editor": { "search": { "placeholder-find": "Find", "placeholder-replace": "Replace", "label-previous": "Forrige", "label-next": "Neste", "label-all": "Alle", "label-exit-search": "Lukk søk", "label-replace": "Erstatt", "label-replace-all": "Erstatt alle" }, "link-suggestion": { "label-type-hash": "Skriv #", "label-link-heading": "for overskriftslenker", "label-type-block": "Type ^", "label-link-block": "to link blocks", "label-type-pipe": "Skriv |", "label-change-display-text": "for å endre tekst på lenke", "label-no-match-found": "No match found" }, "spellcheck": { "no-suggestion": "Ingen forslag...", "add-to-dictionary": "legg til i ordbok" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "No heading", "label-heading-level": "Heading {{level}}" }, "print-modal": { "title": "Export to PDF", "caption": "Export \"{{filename}}\" to PDF with the setting below.", "setting-page-size": "Page size", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Include file name as title", "setting-landscape": "Landscape", "setting-margin": "Margin", "setting-margin-default": "Default", "setting-margin-minimal": "Minimal", "setting-margin-none": "None", "setting-downscale-percent": "Downscale percent", "button-export-to-pdf": "Export to PDF" }, "link-popover": { "tooltip-follow-link": "Follow link", "tooltip-open-link": "Open link", "tooltip-search-tag": "Search tag" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Åpne i standardapp", "empty-sidebar": "Sidestolpen er tom, prøv å dra et panel hit.", "sidebar-expand": "Utvid", "sidebar-collapse": "Lukk", "msg-fail-to-save-file": "Lagring av \"{{filepath}}\" feilet. {{message}}.", "no-file": "Ingen fil", "msg-file-changed": "\"{{file}}\" has been modified externally, merging changes automatically.", "switch-vault": "Åpne et annet hvelv", "help": "Hjelp", "settings": "Innstillinger", "drag-to-rearrange": "Dra for å omordne", "msg-switched-to-read": "Switched default view mode to reading view.", "msg-switched-to-edit": "Endret standard modus til editor.", "msg-upgrade-installer": "To use this feature, please re-install with latest installer available from our website.", "tooltip-restore-default-settings": "Restore default settings", "label-copy": "Copy to clipboard", "copied_generic": "Copied to your clipboard", "copied": "{{item}} copied to your clipboard", "url": "Url", "msg-open-file-through-uri": "Opened file \"{{path}}\"", "msg-file-not-found-through-uri": "File \"{{name}}\" not found.", "delete-action-short-name": "Delete", "msg-indexing": "Obsidian is indexing your vault...\nThis should only happen once.\nSome functionality may not be available until this is complete.", "msg-indexing-complete": "Indexing complete.", "msg-sandbox-vault": "This is a sandbox vault.\nChanges you make in this vault will be lost.", "label-enter-to-create": "Enter to create", "label-update-available": "Update Available", "label-debug-info": "Debug info", "button-learn-more": "Learn more", "button-not-now": "Not now", "button-add": "Add", "button-manage": "Manage", "label-new-tab": "New tab", "msg-tab-busy": "This tab is currently busy, please try again later", "empty-state": { "no-file-open": "Ingen åpne filer", "create-new-file": "Lag ny fil", "go-to-file": "Gå til fil", "see-recent-files": "Se nylig brukte filer", "close": "Lukk", "unknown-pane-title": "Plugin no longer active", "unknown-pane-desc": "The plugin that created this pane ({{type}}) has gone away" }, "menu": { "edit-view": "Rediger (Ctrl/Cmd+Klikk for å redigere i nytt panel)", "read-view": "Current view: reading", "switch-to-edit-view": "Click to edit", "switch-to-read-view": "Click to read", "mod-click-open-new-tab": "{{key}}+Click to open in new tab", "find": "Finn...", "replace": "Erstatt...", "edit": "Rediger", "preview": "Forhåndsvisning", "more-options": "Flere valg", "close": "Lukk", "close-others": "Close others", "close-right": "Close tabs to the right", "pin": "Fest", "unpin": "Unpin", "unlink-tab": "Unlink tab", "link-tab": "Link with tab...", "toggle-source-mode": "Source mode", "toggle-reading-view": "Reading view", "delete-file": "Slett fil", "create-file": "Create this file", "open-link": "Open link", "open-in-new-tab": "Open in new tab", "open-to-the-right": "Open to the right", "copy-url": "Copy url", "close-current-tab": "Close current tab", "copy": "Copy", "cut": "Cut", "paste": "Paste", "paste-as-plain-text": "Paste as plain text", "select-all": "Select all", "rename-heading": "Rename this heading...", "rename-blockid": "Rename this block ID...", "open-in-new-window": "Open in new window", "move-to-new-window": "Move to new window", "open-in-browser": "Open in browser", "stack-tabs": "Stack tabs", "unstack-tabs": "Unstack tabs" }, "tooltip": { "click-to-expand": "Klikk for å utvide", "click-to-collapse": "Klikk for å lukke", "alias": "Alias", "not-created-yet": "Not created yet, select to create" }, "start-screen": { "label-version": "Version", "option-open-folder-as-vault": "Open folder as vault", "option-open-folder-as-vault-description": "Choose an existing folder of Markdown files.", "option-create-vault": "Create new vault", "option-create-vault-description": "Create a new Obsidian vault under a folder.", "option-connect-obsidian-sync": "Connect to Obsidian Sync", "option-connect-obsidian-sync-description": "Set up a synced vault with existing remote vault.", "option-new-vault-name": "Vault name", "option-new-vault-name-description": "Pick a name for your awesome vault.", "option-new-vault-location": "Location", "option-new-vault-location-description": "Pick a place to put your new vault.", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Reveal vault in system explorer", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "Rename vault...", "msg-error-rename-exists": "There is already a vault with this name.", "msg-error-nested": "Cannot move vault into a subfolder of itself.", "msg-error-rename-open": "Can't rename a currently open vault.", "msg-rename-failed": "Failed to rename vault.", "msg-rename-success": "Successfully renamed vault.", "option-move-vault": "Move vault...", "msg-move-select-dest": "Select destination folder", "msg-error-move-exists": "There is already a vault at the destination.", "msg-error-move-open": "Can't move a currently open vault.", "msg-move-failed": "Failed to move vault.", "msg-move-success": "Successfully moved vault.", "option-remove": "Remove from list", "button-quick-start": "Quick start", "button-open": "Open", "button-browse": "Browse", "button-connect": "Connect", "button-create-vault": "Create", "button-back": "Back", "msg-empty-vault-name": "Vault name cannot be empty.", "msg-invalid-folder": "Please pick a valid folder.", "msg-failed-to-create-vault": "Failed to create vault.", "msg-failed-to-create-vault-at-location": "Could not create vault at the given location. Please double check the location and permission.", "msg-error-failed-to-open-vault": "Failed to open.", "msg-error-remove-current-open-vault": "Can't remove a currently open vault.", "option-get-help": "Get Help", "option-user-email": "Email", "placeholder-your-email": "Your email...", "option-user-password": "Password", "placeholder-your-password": "Your password...", "button-sign-in": "Sign in", "button-setup": "Setup", "option-connect-vault-desc": "Create a synced vault on this device.", "tooltip-own-vault": "This is a remote vault owned by you.", "tooltip-shared-vault": "This is a remote vault shared with you." }, "drag-and-drop": { "insert-link-here": "Insert link here", "insert-links-here": "Insert links here", "move-into-folder": "Move into \"{{folder}}\"", "star-this-file": "Star this file", "star-these-files": "Star these files", "open-in-this-tab": "Open in this tab", "open-as-tab": "Open as new tab" }, "window": { "maximize": "Maximize", "minimize": "Minimize", "restore-down": "Restore down", "close-window": "Close window", "go-back": "Go back", "go-forward": "Go forward" }, "start-up": { "loading-obsidian": "Loading Obsidian...", "obsidian-load-error": "An error occurred while loading Obsidian.", "button-reload-app": "Reload app", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "Open another vault", "loading-components": "Loading components...", "loading-plugins": "Loading plugins...", "loading-vault": "Loading vault...", "msg-failed-to-load-vault": "Failed to load vault: ", "loading-cache": "Loading cache...", "loading-workspace": "Loading workspace..." }, "mobile": { "action-import": "Import into vault", "action-choose-file-to-insert": "Choose a file to insert", "action-insert-text-into-file": "Insert text into {{filename}}", "action-insert-link-into-file": "Insert link into {{filename}}", "msg-importing": "Importing...", "msg-import-success": "Import success", "msg-failed-to-import-file": "Failed to import file {{filename}}", "msg-back-again-to-exit": "Press back again to exit." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "Lagre denne filen", "follow-cursor-link": "Følg denne lenken", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "Veksle feste", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "Naviger tilbake", "navigate-forward": "Naviger fremover", "use-dark-mode": "Bruk mørkt tema", "use-light-mode": "Bruk lyst tema", "change-theme": "Change theme", "search-current-file": "Søk i gjeldende fil", "search-replace-current-file": "Søk og erstatt i gjeldende fil", "open-settings": "Åpne innstillinger", "open-help": "Åpne hjelpetekst", "toggle-edit": "Toggle editing/reading view", "toggle-source-mode": "Toggle Live Preview/Source mode", "delete-current-file": "Slett gjeldende fil", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "Åpne/lukk venstre sidestolpe", "toggle-right-sidebar": "Åpne/lukk høyre sidestolpe", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "Focus on editor", "toggle-fold": "Åpne/skjul innhold på gjeldende linje", "fold-all": "Skjul under alle overskrifter og lister", "unfold-all": "Vis alt under overskrifter og lister", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "Flytt linje oppover", "swap-line-down": "Flytt linje nedover", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "Fet skrift for markert tekst", "toggle-italics": "Kursiv for markert tekst", "toggle-highlight": "Fremhev markert tekst", "toggle-comments": "Toggle comments for selection", "insert-link": "Sett inn lenke", "toggle-spellcheck": "Toggle spellcheck", "delete-paragraph": "Slett avsnitt", "toggle-checklist": "Toggle checklist status", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "Rediger tittel", "copy-path": "Kopier søkesti", "copy-url": "Copy obsidian url", "export-pdf": "Export to PDF", "reload": "Reload app without saving", "undo-close-tab": "Undo close tab", "context-menu": "Show context menu under cursor", "show-debug-info": "Show debug info", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "Veksle mellom redigering- og forhåndsvisningsmodus", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "Dette vil påvirke {{links}} i {{files}}.", "msg-updated-links": "Endret {{links}} i {{files}}.", "label-update-links": "Endre lenker", "label-confirm-update-link-to-file": "Vil du endre lenker som peker til denne filen?", "button-always-update": "Alltid endre", "button-just-once": "Bare denne gangen", "button-do-not-update": "Ikke endre", "label-confirm-deletion": "Er du sikker på at du vil slette \"{{filename}}\"?", "label-move-to-system-trash": "Filen blir flyttet til systemets papirkurv", "label-move-to-vault-trash": "Filen blir flyttet til Obsidians papirkurv, den skjulte mappen \".trash\", plassert i hvelvet ditt.", "label-permanent-delete": "Filen blir slettet permanent.", "label-non-empty-folder": "Denne mappen er ikke tom.", "label-delete-folder-warning": "Hvis du fortsetter, vil alle filer i mappen bli slettet.", "label-delete-folder": "Slett mappe", "button-delete": "Slett", "button-delete-do-not-ask-again": "Slett og ikke spør igjen", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "Det er {{links}} som peker mot denne filen.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "Slett fil", "button-manage": "Manage", "button-cancel": "Cancel", "button-done": "Done", "button-save": "Save", "button-stop": "Stop", "button-continue": "Continue", "preparing-pdf": "Preparing PDF...", "label-rename-file": "Rename file", "label-new-name": "New name", "msg-rename-success": "Successfully renamed file.", "label-rename-heading": "Rename heading", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "Utvidelser", "file-explorer": { "name": "Filutforsker", "desc": "Se alle filene i hvelvet ditt.", "action-open": "Open file explorer", "action-show": "Show file explorer", "action-create-note": "Lag nytt notat", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "Nytt notat", "action-new-folder": "Ny mappe", "action-change-sort": "Endre sorteringsrekkefølge", "action-reveal-file": "Vis fil i filutforsker", "action-reveal-active-file": "Vis aktiv fil i filutforsker", "command-move-file": "Move file to another folder", "action-move-file": "Move file to...", "action-move-folder": "Move folder to...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "Type a folder", "label-no-folders": "No folders found.", "instruction-navigate": "to navigate", "instruction-move": "to move", "instruction-dismiss": "to dismiss", "label-sort-a-to-z": "Sorter etter navn (A til Å)", "label-sort-z-to-a": "Sort etter navn (Å til A)", "label-sort-new-to-old": "Sorter etter redigeringstid (ny til gammel)", "label-sort-old-to-new": "Sorter etter redigeringstid (gammel til ny)", "label-sort-created-old-to-new": "Sorter etter opprettelsesstid (gammel til ny)", "label-sort-created-new-to-old": "Sorter etter opprettelsesstid (ny til gammel)", "menu-opt-new-note": "Nytt notat", "menu-opt-new-folder": "Ny mappe", "menu-opt-set-attachment-folder": "Sett som vedleggsmappe", "menu-opt-rename": "Endre navn", "menu-opt-delete": "Slett", "menu-opt-make-copy": "Lag en kopi", "msg-invalid-characters": "Filnavn kan ikke inneholde noen av de følgende tegnene: ", "msg-unsafe-characters": "Links will not work with file names containing any of these characters: ", "msg-file-already-exists": "Det finnes allerede en fil med det samme navnet", "msg-empty-file-name": "Du må oppgi et filnavn.", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "Last modified at {{time}}", "tooltip-created-time": "Created at {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Move", "label-untitled-file": "Untitled", "label-untitled-folder": "Untitled", "msg-set-attachment-folder": "Attachments will be saved to \"{{path}}\" from now on." }, "search": { "name": "Søk", "desc": "Søk etter nøkkelord i alle notater.", "action-open-search": "Søk i alle filer", "label-collapse-results": "Lukk resultater", "label-match-case": "Skill mellom store og små bokstaver", "label-explain-search-term": "Forklar søkelogikk", "label-more-context": "Vis mer kontekst", "prompt-start-search": "Skriv her for å søke...", "label-match-text": "Søker etter tekst: ", "label-match-regex": "Søker etter regex: ", "label-match-exact-text": "Inneholder nøyaktig tekst: ", "label-match-all": "Matcher alle: ", "label-match-any": "Matcher noen: ", "label-excluding": "Ekskluderer: ", "label-case-sensitive": "Skill mellom store og små bokstaver", "label-case-insensitive": "Ikke skill mellom store og små bokstaver", "label-match-file-path": "Søker etter søkesti: ", "label-match-file-name": "Søker etter filnavn: ", "label-match-content": "Søker etter innhold: ", "label-match-task": "Match task: ", "label-match-task-todo": "Match task (todo): ", "label-match-task-done": "Match task (done): ", "label-match-line": "Match line: ", "label-match-block": "Match block: ", "label-match-section": "Match section: ", "label-match-tag": "Søker etter tag: ", "label-no-matches": "Ingen søkeresultater.", "matches-with-count": "... og {{count}} søkeresultat til.", "matches-with-count_plural": "... og {{count}} flere søkeresultater.", "label-copy-search-results": "Copy search results", "button-copy-results": "Copy results", "msg-successfully-copied": "Results copied to your clipboard.", "option-show-path": "Show path", "option-show-path-description": "Display full path of the file rather than just the file name.", "option-link-style": "Link style", "option-link-style-description": "Optionally turn each file result in to a link.", "option-choice-link-style-none": "None", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Markdown link", "option-list-prefix": "List prefix", "option-list-prefix-description": "Optionally add a list item prefix to each file result.", "option-choice-list-style-none": "None", "option-choice-list-style-dash": "Dash (-)", "option-choice-list-style-asterisk": "Asterisk (*)", "option-choice-list-style-numbered": "Numbered", "tooltip-clear-search": "Clear search", "label-search-options": "Search options", "tooltip-read-more": "Read more", "label-history": "History", "tooltip-clear-history": "Clear search history", "label-path-option-description": "match path of the file", "label-file-name-option-description": "match file name", "label-tag-option-description": "search for tags", "label-line-option-description": "search keywords on same line", "label-section-option-description": "search keywords under same heading", "menu-opt-search-for": "Search for \"{{keyword}}\"" }, "quick-switcher": { "name": "Hurtigåpner", "desc": "Åpne raskt en annen fil uten å forlate tastaturet. Ctrl/Cmd+O for å aktivere.", "short-name": "Switcher", "action-open": "Åpne hurtigåpner", "instruction-navigate": "for å velge", "instruction-open": "for å åpne", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "for å lage nytt notat", "instruction-dismiss": "for å lukke", "label-no-note-create-new": "Ingen notater funnet. Trykk enter for å lage nytt.", "prompt-type-file-name": "Skriv inn notat du vil åpne eller lage...", "label-enter-to-create": "Trykk enter for å lage", "tooltip-not-created-yet": "Not created yet, select to create", "option-show-existing-only": "Show existing only", "option-show-existing-only-description": "Whether to show links to files that are not yet created.", "option-show-attachments": "Show attachments", "option-show-attachments-desc": "Show attachment files like images, videos, and PDFs.", "option-show-all-file-types": "Show all file types", "option-show-all-file-types-desc": "Show all files including ones that Obsidian can't open. The file will be opened with the default app for that file type." }, "graph-view": { "name": "Grafvisnining", "desc": "Se en graf over alle notatene dine, og hvordan de knyttes sammen.", "action-open": "Åpne grafvisning", "action-open-local": "Åpne lokal graf", "action-copy-screenshot": "Kopier skjermbilde", "tab-title": "Graf til {{displayText}}", "label-filters": "Filters", "prompt-filter-nodes": "Search files...", "option-depth": "Depth", "option-depth-description": "Show nodes this number of links away", "option-neighbor-links": "Neighbor links", "option-neighbor-links-description": "Vis koblinger mellom naboer.", "option-forelinks": "Outgoing links", "option-forelinks-description": "Show links to other files", "option-backlinks": "Incoming links", "option-backlinks-description": "Show links from other files", "option-show-tags": "Tags", "option-show-tags-description": "Tags are linked to the files that contain them", "option-show-attachments": "Attachments", "option-show-attachments-description": "Show attachments included by files", "option-show-existing-files-only": "Existing files only", "option-show-existing-files-only-description": "When checked, links to nonexistent files are not shown", "option-show-orphans": "Orphans", "option-show-orphans-description": "Show files that are not linked to any other file", "label-display": "Display", "option-show-arrows": "Arrows", "option-show-arrows-description": "Show arrows when zoomed in", "option-text-fade": "Text fade threshold", "option-node-size": "Node size", "option-link-thickness": "Link thickness", "label-forces": "Forces", "option-center-force": "Center force", "option-link-force": "Link force", "option-link-distance": "Link distance", "option-repel-force": "Repel force", "tooltip-open-graph-settings": "Open graph settings", "msg-screenshot-copied": "Screenshot copied to the clipboard.", "label-groups": "Groups", "placeholder-enter-query": "Enter query...", "tooltip-delete-graph": "Delete group", "button-new-group": "New group", "tooltip-click-to-change-drag-to-reorder": "Click to change color\nDrag to reorder groups", "action-timelapse": "Start graph timelapse animation", "tooltip-start-timelapse-animation": "Start timelapse animation", "button-animate-timelapse": "Animate" }, "backlinks": { "name": "Lenker tilbake", "desc": "Viser antall lenker tilbake til filen på statusbaren.", "action-open": "Vis lenker bakover", "action-show": "Show backlinks pane", "action-open-for-current": "Vis lenker bakover for denne filen", "action-toggle-backlinks-in-document": "Toggle backlinks in document", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "Lenker som fører hit", "label-no-backlinks": "Ingen lenker ble funnet.", "label-unlinked-mentions": "Potensielle lenker", "label-show-search": "Show search filter", "label-link-button-text": "Lenke", "tab-title": "Lenker som fører til {{displayText}}", "label-no-unlinked-mentions": "Ingen potensielle lenker funnet.", "ellipsis": "...", "option-backlink-in-document": "Backlink in document", "option-backlink-in-document-desc": "Show backlinks in document by default when opening new panes." }, "outgoing-links": { "name": "Outgoing Links", "desc": "Show outgoing links and detect unlinked mentions of other notes in the current note.", "action-open": "Open outgoing links", "action-show": "Show outgoing links pane", "action-open-for-current": "Open outgoing links for the current file", "tab-title": "Outgoing links from {{displayText}}", "label-links": "Links", "label-no-links": "No links found.", "label-unlinked-mentions": "Unlinked mentions", "tooltip-link-file": "Link this file", "tooltip-not-created": "Not created yet" }, "tag-pane": { "name": "Tag-panel", "desc": "Viser alle tags og antall ganger de er brukt.", "action-show": "Show tag pane", "label-no-tags": "Ingen tags funnet.", "label-sort-by-name-a-to-z": "Tag name (A to Z)", "label-sort-by-name-z-to-a": "Tag name (Z to A)", "label-sort-by-frequency-high-to-low": "Frequency (high to low)", "label-sort-by-frequency-low-to-high": "Frequency (low to high)", "action-show-nested-tags": "Show nested tags", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "Forhåndsvisning av notat", "desc": "Forhåndsvis notater ved å holde pekeren over en intern lenke. Hold Ctrl/Cmd i redigeringsmodus.", "label-empty-note": "\"{{linktext}}\" er ikke lagd enda. Klikk for å åpne.", "label-source-editor": "Editor", "label-source-preview": "Preview", "label-source-search": "Search, Backlinks, and Outgoing links", "label-require-mod": "Require {{key}} to trigger page preview on hover" }, "starred": { "name": "Favoritter", "desc": "Legg til ofte brukte notater eller søk i favoritter.", "action-show": "Show starred pane", "action-toggle": "Legg til/fjern notat fra favoritter", "action-toggle-search": "Legg til/fjern søk fra favoritter", "action-star": "Legg til i favoritter", "action-unstar": "Fjern fra favoritter", "menu-opt-remove": "Fjern", "msg-successfully-starred": "La til {{type}} \"{{title}}\" i favoritter.", "msg-removed-starred": "Fjernet {{type}} \"{{title}}\" fra favoritter.", "msg-cannot-find-path": "Finner ikke fil med søkesti \"{{path}}\"." }, "custom-css": { "name": "Egen CSS", "desc": "Leser av \"obsidian.css\" i hvelvet.", "setting-community-themes": "Stiler av andre brukere", "msg-fetching-themes": "Henter brukerstiler...", "prompt-filter": "Filtrer...", "label-dark-theme-only": "Dark themes only", "label-light-theme-only": "Light themes only", "label-use": "Bruk", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "Update", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "Remove theme", "label-visit-on-github": "Se på GitHub", "msg-load-error": "Fikk ikke lastet brukerstiler, vennligst sjekk nettverket.", "msg-now-using-theme": "You're now using {{title}} as your CSS theme.", "msg-deleted-theme": "The theme {{title}} has been deleted.", "msg-updated-theme": "The theme {{title}} has been updated.", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "Kommandovelger", "desc": "Skriv inn en kommando for å aktivere den, så trenger du hverken huske den eller bruke menyene.", "action-open": "Åpne kommandovelger", "instruction-navigate": "for å velge", "instruction-use": "for å aktivere", "instruction-dismiss": "for å lukke", "label-no-commands": "Ingen kommandoer funnet.", "prompt-type-command": "Skriv en kommando...", "label-pinned-commands": "Pinned commands", "option-add-new-pin": "New pinned command", "option-add-new-pin-description": "Pinned commands will appear at the top of all commands when no search query is present." }, "markdown-format-importer": { "name": "Markdown-importør", "desc": "Konverter Markdown fra andre apper til Obsidians format.", "action-open": "Åpne Markdown-importør", "option-roam-tag-fixer": "Fiks tags fra Roam Research", "option-roam-tag-fixer-description": "Endrer \"#tag\" og \"#[[tag]]\" til \"[[tag]]\".", "option-roam-highlight-fixer": "Fiks highlights fra Roam Research", "option-roam-highlight-fixer-description": "Endrer \"^^highlight^^\" til \"==highlight==\".", "option-roam-todo-converter": "Fiks TODOs fra Roam Research", "option-roam-todo-converter-description": "Endrer \"{{[[TODO]]}}\" til \"[ ]\".", "option-bear-highlight-fixer": "Bear highlight fixer", "option-bear-highlight-fixer-description": "Converts \"::highlight::\" to \"==highlight==\".", "zettelkasten-link-fixer": "Fiks Zettelkasten-lenker", "zettelkasten-link-fixer-description": "Endrer \"[[UID]]\" til det fulle formatet \"[[UID Filnavn]]\".", "zettelkasten-link-beautifier": "Endre til vakre Zettelkasten-lenker", "zettelkasten-link-beautifier-description": "Endrer \"[[UID]]\" til fullt format og gjør dem mer lesbare \"[[UID Filnavn|Filnavn]]\".", "msg-all-files-warning": "Advarsel: Importøren ender alle filene i hvelvet, ikke bare den aktive.", "msg-override-files-warning": "Filene dine blir endret. Lag en backup for du godkjenner.", "label-start-conversion": "Start konvertering", "label-stop": "Stopp", "label-go-back": "Gå tilbake", "label-done": "Ferdig", "label-processing": "Prosesserer...", "label-cancelling": "Stopper...", "label-finished": "Ferdig!", "label-processed-files": "Prosesserte filer", "label-modified-files": "Endrede filer", "label-total-replacements": "Totalt antall endringer" }, "daily-notes": { "name": "Daglige notater", "desc": "Åpne dagens notat eller lag en hvis den ikke fins fra før.", "short-name": "Today", "action-open": "Åpne dagens notat", "action-open-previous": "Åpne gårsdagens notat", "action-open-next": "Åpne morgendagens notat", "action-insert-text": "Insert text into daily note", "action-insert-link": "Insert link into daily note", "msg-fail-format": "Klarte ikke å lage notat. \"{{format}}\" er ikke et gyldig format.", "msg-fail-folder": "Klarte ikke å lage notat. Mappen \"{{folderOption}}\" finnes ikke.", "msg-fail-template-file": "Klarte ikke å lage notat. Malen \"{{template}}\" finnes ikke.", "msg-no-previous": "Finnes ingen tidligere dagsnotater.", "msg-no-next": "Finnes ingen dagsnotater etter denne.", "option-date-format": "Datoformat", "label-refer-to-syntax": "For mer syntaks, se: ", "label-syntax-link": "formatreferanse", "label-syntax-live-preview": "Slik vil det set ut: ", "option-new-file-location": "Mappe å plassere nye filer", "option-new-file-location-description": "Søkesti til nye dagsnotater.", "option-template": "Søkesti til mal", "option-template-description": "Filen du vil bruke som mal til dagsnotater.", "option-open-on-start": "Open daily note on startup", "option-open-on-start-description": "Open your daily note automatically whenever you open this vault." }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Tilfeldig notat", "desc": "Åpner et tilfeldig notat. Nyttig for å gjenoppdage gamle notater.", "short-name": "Random", "action-open": "Åpne tilfeldig notat" }, "outline": { "name": "Disposisjon", "desc": "Viser en disposisjon av den aktive filen.", "action-open": "Åpne disposisjon", "action-show": "Show outline pane", "action-open-for-current": "Open outline of the current file", "tab-title": "Disposjon til {{displayText}}", "label-no-headings": "Ingen overskrifter funnet." }, "word-count": { "name": "Antall ord", "desc": "Vis antall ord i statusbaren." }, "slides": { "name": "Presentasjonsmodus", "desc": "Lag en presentasjon fra Markdown. Bruk \"---\" for å skille mellom lysbilder.", "action-start": "Start presentasjon" }, "audio-recorder": { "name": "Lydinnspilling", "desc": "Spill inn lyd og lagre som et vedlegg.", "action-start": "Start lydinnspilling", "action-stop": "Stopp lydinnspilling", "action-toggle": "Start/stopp lydinnspilling", "msg-access-denied": "fikk ikke tilgang til mikrofon. Vennligst gi tilgang gjennom Preference-panelet.", "msg-pending-grant": "Vennligst gi tilgang til mikrofonen.", "msg-no-microphone": "Ingen mikrofon tilgjengelig." }, "open-with-default-app": { "name": "Åpne i standardapp", "desc": "Legg til en app som åpner filen i standardappen.", "action-open-file": "Åpne i standardapp", "action-open-file-mobile": "Share", "action-show-in-folder": "Vis i mappe", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "Maler", "desc": "Sett inn innhold fra en mappe med maler.", "action-insert": "Sett inn mal", "action-insert-current-date": "Insert current date", "action-insert-current-time": "Insert current time", "option-template-folder-location": "Søkesti til malmappe", "option-template-folder-location-description": "Filer i denne mappen er tilgjengelige som maler.", "option-template-date-format": "Dato-format", "option-template-date-format-description": "{{date}} i malen blir erstattet med denne verdien.", "option-template-date-format-description2": "Du kan også skrive {{date:YYYY-MM-DD}} for å spesifisere formatet.", "option-template-time-format": "Tidsformat", "option-template-time-format-description": "{{time}} i malen blir erstattet med denne verdien.", "option-template-time-format-description2": "Du kan også skrive {{time:HH:mm}} for å spesifisere formatet.", "instruction-navigate": "for å velge", "instruction-insert": "for å sette inn mal", "instruction-dismiss": "for å lukke", "msg-no-templates-found": "Ingen maler funnet", "msg-fail-invalid-folder": "Klarte ikke å finne maler. Malmappen er ikke gyldig.", "msg-fail-folder-not-found": "Klarte ikke å finne maler. Mappen \"{{folderOption}}\" finnes ikke.", "prompt-type-template": "Skriv inn navnet på en mal..." }, "translucency": { "name": "Gjennomsiktig vindu", "desc": "Skru på gjennomsiktighet for å gi en følelse av dybde. Funker best i mørkt modus. Støttes ikke av Linux." }, "slash-command": { "name": "Slash commands", "desc": "Enable the ability to trigger slash commands in the editor by typing the forward slash." }, "editor-status": { "name": "Editor status", "desc": "Adds a status bar item to show and change the current editor mode.", "read": "Reading", "edit-source": "Source mode", "edit-live-preview": "Live Preview" }, "publish": { "name": "Publish", "desc": "Publish your notes through Obsidian Publish.", "action-publish-changes": "Publish changes", "label-no-internet-access": "You need access to the internet to publish changes.", "label-publish-service-description": "Obsidian Publish is an add-on paid service that lets you publish your notes online directly from Obsidian.", "label-please-login": "To start publishing, please log in or create a new Obsidian account.", "label-no-publish-subscription": "You do not have an Obsidian Publish subscription yet.", "button-purchase": "Purchase", "label-manage-sites": "Manage sites", "label-no-sites": "You don't have any sites.", "button-choose": "Choose", "tooltip-edit-site-id": "Edit site ID", "tooltip-delete-site": "Delete site", "label-delete-site-confirmation": "Are you sure you want to delete this site?", "label-delete-site-details": "This will immediately and permanently delete your site.", "label-confirm-delete-site": "Confirm delete site \"{{site}}\"", "option-site-id": "Site ID", "option-site-id-description": "Your site will be at https://publish.obsidian.md/{site id}. You can change this later. Only lower case letters, numbers, and dashes are allowed.", "option-site-id-placeholder": "Pick a site ID", "button-create": "Create", "msg-invalid-site-id": "Site ID can only contain lowercase letters, numbers, and dashes.", "msg-site-id-in-use": "This site ID is in use, please try another one.", "msg-create-site-issue": "That was an issue when creating your site.", "label-site-options": "Site options", "option-site-general": "General", "option-site-components": "Components", "option-site-appearance": "Appearance", "option-site-reading-experience": "Reading experience", "option-site-misc": "Other site settings", "option-site-name": "Site name", "option-site-name-description": "Name of your published site. It will show up in the page title of your site.", "option-site-name-placeholder": "Name of your site", "option-home-page-file": "Homepage file", "option-home-page-file-description": "The first page the user sees when landing on your published site", "option-home-page-file-placeholder": "Pick a published file", "option-logo": "Logo", "option-logo-description": "Pick an image file as your site logo.", "option-logo-placeholder": "Any any uploaded image in your vault...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "Theme", "option-theme-description": "Choose default color scheme for your site.", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "Show navigation", "option-show-navigation-description": "Display a list of all published pages on the left side of your published site.", "option-show-search": "Show search bar", "option-show-search-description": "Display a search bar at top of the navigation that lets the visitors search pages and headings on your site.", "option-show-graph": "Show graph view", "option-show-graph-description": "Display a small local graph on each page.", "option-show-outline": "Show table of contents", "option-show-outline-description": "Display the outline of headings on each page.", "option-show-backlinks": "Show backlinks", "option-show-backlinks-description": "Show backlink section at the end of each page.", "option-sliding-window-mode": "Use sliding windows", "option-sliding-window-mode-description": "Open pages in new panes to the right. Allows scrolling through panes horizontally.", "option-hover-preview-file": "Show hover preview", "option-hover-preview-file-description": "Display page preview when hovering links.", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "Readable line length", "option-readable-line-length-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-site-password": "Passwords", "option-site-password-description": "Restrict access to your site with passwords.", "option-google-analytics": "Google Analytics tracking code", "option-google-analytics-description": "Configure Google Analytics for your site. Only available for visitors from your custom domain URL. Please check with your local laws and regulations first.", "button-manage-passwords": "Manage", "button-save-site-settings": "Save site settings", "msg-updated-options": "Updated options for your site.", "button-go-back": "Back", "label-publishing-to": "Publishing to", "tooltip-switch-site": "Switch site", "button-add-linked": "Add linked", "tooltip-add-linked": "Add all files that are linked by currently selected items", "msg-added-linked-files": "{{count}} linked file has been added.", "msg-added-linked-files_plural": "{{count}} linked files have been added.", "tooltip-open-site-options": "Change site options", "label-no-changes-detected": "No changes were detected.", "label-changed-files-to-be-published": "Changes", "label-unchanged-files-already-published": "Unchanged (select to delete)", "label-file-selected": " selected", "button-select-all-files": "Select all", "button-deselect-all-files": "Deselect all", "label-new-files-to-be-published": "New", "button-publish": "Publish", "msg-no-permission-to-publish-to-site": "You do not have permissions to publish to the current site.", "msg-select-at-least-one-file": "Please select at least one file.", "label-upload-changes": "Upload changes", "button-done": "Done", "button-stop": "Stop", "label-status-uploading": "Uploading", "label-status-to-publish": "To publish", "label-status-to-delete": "To delete", "label-status-published": "Published", "label-status-deleted": "Deleted", "label-status-failed": "Failed", "label-status-cancelled": "Cancelled", "button-change": "Change", "label-clear-cache": "It takes up to a few minutes for the changes to show up on your site. If you do not see your latest changes, try clearing the cache in your browser.", "label-visit-site": "You can visit your site here: ", "msg-something-went-wrong": "Something went wrong. Please check the developer console for details.", "msg-network-error": "A network error occurred. ", "label-manage-passwords": "Manage passwords", "label-add-password": "Add password", "action-new-password": "New password", "label-no-password": "Your site currently does not have any passwords. Anyone can visit it.", "label-have-password": "Your site is password protected. If you have multiple passwords, visitors can access your site by entering any of them.", "option-password-name": "Password", "option-password-desc": "A hash of your password will be stored securely. Once the password is set, it cannot be revealed in plaintext.", "option-password-placeholder": "Your password", "option-nickname-name": "Nickname (optional)", "option-nickname-desc": "Set a nickname to remind yourself what or who the password is for.", "action-add-password": "Add this password", "label-untitled-password": "Untitled password", "label-password-created-time": "Created {{time}}", "msg-added-new-password": "Added new password.", "option-custom-domain": "Custom domain", "option-custom-domain-desc": "Use your own domain rather than the https://publish.obsidian.md/{site id} URL.", "option-noindex": "Disallow search engine indexing", "option-noindex-desc": "Prevent search engines from indexing your site.", "button-configure": "Configure", "label-configure-custom-domain": "Configure custom domain", "option-custom-url-name": "Custom URL", "option-custom-url-desc": "The URL that your site will be located at.", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "Redirect to your custom domain", "option-custom-url-redirect-desc": "Redirect visitors on publish.obsidian.md/id to your custom domain.", "button-update-custom-domain": "Update domain setting", "label-custom-domain-instructions": "Please refer to our {{link}} on our help site for more information.", "label-custom-domain-link-name": "custom domain setup guide", "label-site-usage": "You're using {{site}} out of your {{limit}}.", "button-add-more-sites": "Buy more sites", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "Workspaces", "desc": "Save and load workspace layout.", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "Save", "button-load": "Load", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "Sync", "desc": "Synchronize your files through Obsidian Sync.", "action-view-version-history": "View version history", "label-load-more": "Load more", "label-show-diff": "Show diff", "label-copy-to-clipboard": "Copy to clipboard", "label-restore-this-version": "Restore this version", "msg-already-latest-version": "This version is already the latest version.", "msg-restored-version": "Successfully restored version from {{time}}", "label-file-deleted": "This file was deleted", "label-no-earlier-version": "There was no earlier versions of this file.", "label-empty-file": "Empty", "label-setting-files": "Setting files", "label-deleted-files": "Deleted files", "label-version-history": "Version history", "label-click-to-see-history": "Click on a deleted file to see its history.", "label-create-remote-vault": "Create remote vault", "msg-please-enter-password": "Please enter a password.", "msg-vault-name-cannot-be-empty": "Vault name cannot be empty.", "msg-successfully-created-vault": "Successfully create remote vault \"{{name}}\".", "label-remote-vault-explanation": "Remote vaults securely synchronize your vault between devices.", "option-vault-name": "Vault name", "option-vault-name-desc": "Helps you remember what this vault is for.", "option-vault-name-placeholder": "My awesome vault", "option-use-custom-encryption-password": "Customize end-to-end encryption password", "option-use-custom-encryption-password-desc": "If you turn this off, we will securely manage an encryption key for you.", "option-use-custom-encryption-password-desc-warning": "This option cannot be changed later.", "option-encryption-password": "Encryption password", "option-encryption-password-desc": "This password cannot be changed later.", "option-encryption-password-desc-warning": "If you forget this password, any remote data will remain unusable forever.", "option-encryption-password-desc-2": "This does not affect your local data.", "option-encryption-password-placeholder": "Your password", "label-enter-encryption-password": "Enter encryption password", "button-unlock-vault": "Unlock vault", "msg-verified-password": "Successfully verified your password.", "label-remote-vaults": "Your remote vaults", "label-vault-created-time": "Created {{time}}", "tooltip-delete-remote-vault": "Delete", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "Confirm delete vault", "label-confirm-delete-remote-vault-question": "Are you sure you want to delete this remote vault?", "label-confirm-delete-remote-vault-result": "All data on our server, including version history, will be deleted. Your local files will stay intact.", "label-confirm-delete-remote-vault-warning": "This action is permanent and irreversible.", "msg-remote-vault-deleted": "{{name}} has been deleted.", "button-connect-to-remote-vault": "Connect", "button-disconnect-from-remote-vault": "Disconnect", "label-not-remote-vaults": "You don't have any remote vaults.", "button-create-new-remote-vault": "Create new vault", "label-sync-log": "Sync log", "options-only-show-errors": "Errors only", "options-only-show-errors-desc": "Only show errors and hide other log items.", "button-copy-sync-log": "Copy sync log", "msg-successfully-copied-sync-log": "Successfully copied sync log.", "button-retry": "Retry", "button-purchase-subscription": "Purchase", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "Choose", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "Sync status", "option-sync-status-desc-paused": "Obsidian Sync is currently paused.", "option-sync-status-desc-running": "Obsidian Sync is currently running.", "option-device-name": "Device name", "option-device-name-desc": "This name will be displayed in the sync log. Leave empty to use the default name.", "button-resume": "Resume", "button-pause": "Pause", "option-view-deleted-files": "Deleted files", "option-view-deleted-files-desc": "View and restore deleted files.", "option-sync-log": "Sync activity", "option-sync-log-desc": "View recent sync activities for debugging.", "button-view": "View", "button-bulk-restore": "Bulk restore", "button-restore-selected-files": "Restore selected files", "msg-restoring": "Restoring...", "msg-restoring-complete": "`Restore complete: {{succeeded}} succeeded and {{failed}} failed.`", "option-over-size": "Vault size over limit", "option-over-size-desc": "Your vault is at {{size}} out of {{limit}}.", "msg-largest-files": "View largest files", "msg-largest-files-desc": "These are the remote files that are taking the most space. After deleting attachments, use the purge button to free up remote vault space.", "button-purge-remote": "Purge", "tooltip-purge-remote": "Permanently purge deleted attachments from remote vault to save space.", "msg-purge-complete": "Purge complete.", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "Selective sync", "option-excluded-folders": "Excluded folders", "option-excluded-folder-desc": "Prevent certain folders from being synced.", "option-currently-excluded-folders": " These folders currently excluded:", "button-manage-excluded-folders": "Manage", "option-sync-image": "Sync images", "option-sync-image-desc": "Sync image files with these extensions: {{extensions}}.", "option-sync-audio": "Sync audio", "option-sync-audio-desc": "Sync audio files with these extensions: {{extensions}}.", "option-sync-video": "Sync videos", "option-sync-video-desc": "Sync video files with these extensions: {{extensions}}.", "option-sync-pdf": "Sync PDFs", "option-sync-pdf-desc": "Sync PDF files.", "option-sync-unsupported": "Sync all other types", "option-sync-unsupported-desc": "Sync unsupported file types.", "option-vault-config-sync": "Vault configuration sync", "option-view-config-files": "Settings version history", "option-view-config-files-desc": "View and restore version history of setting files.", "option-sync-app": "Main settings", "option-sync-app-desc": "Enable to sync editor settings, files & links settings, custom hotkeys, etc.", "option-sync-appearance": "Appearance settings", "option-sync-appearance-desc": "Sync appearance settings like dark mode, active theme, and enabled snippets.", "option-sync-appearance-data": "Themes and snippets", "option-sync-appearance-data-desc": "Sync downloaded themes and snippets. Whether they are enabled depends on the previous setting.", "option-sync-hotkey": "Hotkeys", "option-sync-hotkey-desc": "Sync custom hotkeys.", "option-sync-core-plugin": "Active core plugin list", "option-sync-core-plugin-desc": "Sync which core plugins are enabled.", "option-sync-core-plugin-data": "Core plugin settings", "option-sync-core-plugin-data-desc": "Sync core plugin settings.", "option-sync-community-plugin": "Active community plugin list", "option-sync-community-plugin-desc": "Sync which community plugins are enabled.", "option-sync-community-plugin-data": "Installed community plugins", "option-sync-community-plugin-data-desc": "Sync installed community plugins (.js, .css, and manifest.json files) and their settings.", "label-sync-introduction": "Obsidian Sync is Obsidian's add-on sync service with end-to-end encryption and version history.", "label-account-required": "To start syncing, please log in or create a new Obsidian account.", "button-sign-up": "Sign up", "button-log-in": "Log in", "label-manage-excluded-folders": "Manage excluded folders", "label-number-of-folders-excluded": "{{folders}} are currently excluded from being synced.", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "Setup connection", "label-now-connected-to-vault": "You're now connected to \"{{name}}\".", "button-start-syncing": "Start syncing", "label-confirm-merge-vault": "Confirm Merge Vault", "msg-vault-has-notes": "Your local vault already contains some notes.", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "File recovery", "desc": "Let you restore recent snapshots to recover from accidental data loss. Snapshots are only saved for Markdown files.", "action-open": "Open saved snapshots", "option-interval": "Snapshot interval", "option-interval-description": "Minimal interval in minutes between two snapshots.", "option-keep": "History length", "option-keep-description": "Length in days snapshots is kept for.", "option-open-history": "Snapshots", "option-open-history-description": "View and restore saved snapshots.", "button-view-snapshots": "View", "option-clear": "Clear history", "option-clear-description": "Wipe all snapshots.", "button-clear-history": "Clear", "label-clear-warning": "Are you sure you want to delete all snapshots? Note that only snapshots will be removed. All files inside your vault will not be affected.", "msg-clear-complete": "Snapshots cleared.", "label-no-history-found": "No snapshots found.", "placeholder-choose-file": "Choose a file...", "label-select-file": "Please select a file on the left to view snapshots." }, "note-composer": { "name": "Note composer", "desc": "Merge, split, and refactor notes.", "option-confirm-file-merge": "Confirm file merge", "option-confirm-file-merge-description": "Prompt before merge two files.", "option-split-replacement-text": "Text after extraction", "option-split-replacement-text-description": "What to show in place of the selected text after extracting it.", "option-choice-split-replacement-text-link": "Link to new file", "option-choice-split-replacement-text-embed": "Embed new file", "option-choice-split-replacement-text-none": "None", "option-template-file": "Template file location", "option-template-file-description": "Template file to use when merging or extracting. Available variables: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Merge current file with another file...", "action-merge-file": "Merge entire file with...", "label-no-files": "No files found.", "instruction-navigate": "to navigate", "instruction-merge": "to merge", "instruction-create-new": "to create new", "instruction-merge-at-top": "to merge at top", "instruction-dismiss": "to dismiss", "prompt-select-file-to-merge": "Select file to merge into...", "label-merge-file": "Merge file", "label-confirm-file-merge": "Are you sure you want to merge \"{{file}}\" into \"{{destination}}\"? \"{{file}}\" will be deleted.", "button-merge": "Merge", "button-merge-do-not-ask-again": "Merge and don't ask again", "command-split-file": "Extract current selection...", "command-extract-heading": "Extract this heading...", "instruction-append": "to move to bottom", "instruction-prepend": "to move to top", "msg-fail-to-fetch-template": "Failed to fetch template file: \"{{template}}\" not found.", "msg-fail-to-find-heading": "Failed to find heading" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} ord", "word-with-count_plural": "{{count}} ord", "character-with-count": "{{count}} tegn", "character-with-count_plural": "{{count}} tegn", "link-with-count": "{{count}} lenke", "link-with-count_plural": "{{count}} lenker", "file-with-count": "{{count}} fil", "file-with-count_plural": "{{count}} filer", "folder-with-count": "{{count}} folder", "folder-with-count_plural": "{{count}} folders", "backlink-with-count": "{{count}} lenke tilbake", "backlink-with-count_plural": "{{count}} lenker tilbake", "site-with-count": "{{count}} site", "site-with-count_plural": "{{count}} sites", "plugin-with-count": "{{count}} plugin", "plugin-with-count_plural": "{{count}} plugins", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } }{ "setting": { "options": "Options", "plugin": "Plugin", "builtin-plugins": "Core plugins", "plugin-options": "Plugin options", "folder-path-example-placeholder": "Example: folder 1/folder 2", "file-path-example-placeholder": "Example: folder/note", "msg-restart-required": "Changing this option requires a restart to take effect.", "editor": { "name": "Editor", "section-general": "General", "section-behavior": "Behavior", "section-display": "Display", "option-spellcheck": "Spell check", "option-spellcheck-description": "Turns on the spell checker. Currently only works for English (US).", "spellcheck-languages": "Spellcheck languages", "spellcheck-languages-description": "Choose the languages for the spellchecker to use.", "spellcheck-languages-mac-description": "The native spellchecker will automatically detect the language being used for you on macOS.", "spellcheck-dict": "Spellcheck dictionary", "spellcheck-dict-empty": "The spellcheck dictionary is empty.", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "Readable line length", "option-readable-line-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-strict-line-break": "Strict line breaks", "option-strict-line-break-description": "In preview mode, ignore single line breaks according to the Markdown specs. Turn this off for single line breaks to show in preview.", "option-show-frontmatter": "Show frontmatter", "option-show-frontmatter-description": "In preview mode, show frontmatter as a code block. Turn off to hide frontmatter section.", "option-auto-pair-brackets": "Auto pair brackets", "option-auto-pair-brackets-description": "Pair brackets and quotes automatically.", "option-auto-pair-markdown": "Auto pair Markdown syntax", "option-auto-pair-markdown-description": "Pair symbols automatically for bold, italics, highlight, strikethrough, and code.", "option-smart-indent-lists": "Smart indent lists", "option-smart-indent-lists-description": "Take care of indentation and list marker for you.", "option-fold-heading": "Fold heading", "option-fold-heading-description": "Let you fold everything under a heading.", "option-fold-indent": "Fold indent", "option-fold-indent-description": "Let you fold a portion of the same indentation, such as lists.", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Editing view", "option-default-new-tab-view-reading": "Reading view", "option-default-editing-mode": "Default editing mode", "option-default-editing-mode-description": "The default editing mode a new pane will start with.", "option-default-editing-mode-source": "Source mode", "option-default-editing-mode-live-preview": "Live Preview", "option-show-line-number": "Show line number", "option-show-line-number-description": "Show line number in the gutter.", "option-indentation-guide": "Show indentation guides", "option-indentation-guide-description": "Show vertical relationship lines between bullet points for visual guidance.", "option-use-tabs": "Use tabs", "option-use-tabs-description": "Use tabs to indent when pressing the \"Tab\" key. Set this to off to use spaces.", "option-tab-size": "Tab size", "option-tab-size-description": "Number of spaces a tab is equivalent to.", "option-rtl": "Right-to-left (RTL)", "option-rtl-description": "Sets the text direction of notes to display in right-to-left.", "option-auto-convert-html": "Auto convert HTML", "option-auto-convert-html-description": "Automatically convert HTML to Markdown when pasting and drag-and-drop from webpages. Use Ctrl/Cmd+Shift+V to paste without conversion.", "option-vim-key-bindings": "Vim key bindings", "option-vim-key-bindings-description": "Let you use Vim key bindings in the source editor.", "option-vim-key-bindings-mobile": "On mobile devices, this setting is per-device and is not synchronized through the config file.", "option-emacsy-keys": "Legacy Emacs-style key bindings for macOS", "option-emacsy-keys-description": "Allows you to use the additional Emacs-style navigation keys, which are standard on macOS, but may interfere with some key operations.", "label-confirm-enable-vim": "Confirm entering Vim mode", "label-vim-warning": "Vim mode is for efficient text editing but can be quite counter-intuitive. If you're not familiar with Vim, this option might make it look like Obsidian has stopped working.", "label-vim-test": "To verify that you know your way around Vim, please enter the command to quit Vim without saving below:", "label-vim-your-answer": "Your answer", "placeholder-enter-command": "Enter command...", "button-confirm-enable-vim": "Let me enable Vim", "msg-vim-mode-enabled": "Command is correct. Vim mode now enabled.", "msg-vim-mode-not-enabled": "Command is incorrect. Vim mode remains disabled to protect you.", "msg-vim-mode-please-enter-command": "Please enter the command to enable Vim mode", "option-legacy-editor": "Use legacy editor", "option-legacy-editor-description2": "The legacy editor will be deprecated soon. It is currently no longer maintained, and as such, bugs will no longer be addressed.", "label-legacy-deprecation": "New editor is here", "label-legacy-deprecation-1": "Obsidian now has a brand new editor that's more robust and accessible.", "label-legacy-deprecation-2": "It seems you're still using the legacy editor, and we think you'll enjoy the new editor.", "label-legacy-deprecation-choice": "Which mode would you like to use?", "label-live-preview-description": "A more modern, what-you-see-is-what-you-get experience.", "label-source-mode-description": "See raw Markdown with syntax highlighting.", "button-start-new-editor": "Start new editor" }, "file": { "name": "Files & Links", "option-confirm-file-deletion": "Confirm file deletion", "option-confirm-file-deletion-description": "Whether you want to get prompted to confirm file deletion.", "option-delete-destination": "Deleted files", "option-delete-destination-description": "What to do with files after you delete them.", "option-choice-system-trash": "Move to system trash", "option-choice-vault-trash": "Move to Obsidian trash (.trash folder)", "option-choice-permanent-delete": "Permanent delete", "option-always-update-links": "Always update internal links", "option-always-update-links-description": "Whether to automatically update links after renaming a file or prompt.", "option-new-note-location": "New note default location", "option-new-note-location-description": "Where to put newly created notes. Plugin settings will override this.", "option-choice-vault-root": "Vault root", "option-choice-current-folder": "Same folder as the file is in", "option-choice-specified-folder": "In the folder specified below", "option-new-file-folder-path": "Folder to create new notes in", "option-new-file-folder-path-description": "Newly created notes will appear under this folder. Plugin settings will override this.", "option-use-wiki-links": "Use [[Wikilinks]]", "option-use-wiki-links-description": "Auto-generate Wikilinks for [[links]] and ![[images]] instead of Markdown links and images. Disable this option to generate Markdown links instead.", "option-show-unsupported-files": "Detect all file extensions", "option-show-unsupported-files-description": "Show files with any extension even if Obsidian can't open them natively, so that you can link to them and see them in File Explorer and Quick Switcher.", "option-link-autocompleted-format": "New link format", "option-link-autocompleted-format-description": "What links to insert when auto generating internal links.", "option-choice-shortest-linktext": "Shortest path when possible", "option-choice-relative-path": "Relative path to file", "option-choice-absolute-path": "Absolute path in vault", "option-new-attachment-location": "Default location for new attachments", "option-new-attachment-location-description": "Where newly added attachments are placed.", "option-choice-subdirectory": "In subfolder under current folder", "option-attachment-folder-path": "Attachment folder path", "option-attachment-folder-path-description": "Newly created attachment files will appear here. That includes images created via drag and drop or pasting, and audio recordings.", "option-attachment-subfolder-path": "Subfolder name", "option-attachment-subfolder-path-description": "If your file is under \"vault/folder\", and your set subfolder name to \"attachments\", attachments will be saved to \"vault/folder/attachments\".", "option-attachment-subfolder-path-placeholder": "attachments", "option-excluded-files": "Excluded files", "option-excluded-files-desc": "Excluded files will be either hidden or less noticeable in various places, such as Quick Switcher, link suggestion, and Graph View.", "label-no-excluded-filters-applied": "No excluded filter is applied right now. Add one below.", "label-excluded-filters-applied": "Files matching the following filters are currently excluded:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Enter path or \"/regex/\"..." }, "appearance": { "name": "Appearance", "option-base-theme": "Base theme", "option-base-theme-description": "Choose Obsidian’s default color scheme.", "option-accent-color": "Accent color", "option-accent-color-description": "Choose the accent color used throughout the app.", "dark-theme": "Dark", "light-theme": "Light", "system-theme": "Adapt to system", "option-font": "Font", "option-advanced": "Advanced", "option-interface-font": "Interface font", "option-interface-font-description": "Set base font for all of Obsidian.", "option-text-font": "Text font", "option-text-font-description": "Set font for editing and reading views.", "option-monospace-font": "Monospace font", "option-monospace-font-description": "Set font for places like code blocks and frontmatter.", "label-single-font-currently-in-effect": " Currently applied font: ", "label-multiple-fonts-currently-in-effect": " The following fonts are currently applied:", "option-font-placeholder": "Enter font name...", "label-no-custom-font-set": "No custom font is applied right now. Add one below.", "label-font-applied": "The first font from this list that is available on your system will be applied.", "msg-font-not-found": "This font is not detected on your system.", "msg-font-found": "This font is detected on your system.", "label-font-name": "Font name", "option-community-themes": "Open community themes", "option-community-themes-description": "Preview and use amazing themes created by the community.", "button-browse-community-themes": "Browse", "option-font-size": "Font size", "option-font-size-description": "Font size in pixels that affects editor and preview.", "option-font-size-action": "Quick font size adjustment", "option-font-size-action-description": "Adjust the font size using Ctrl + Scroll, or using the trackpad pinch-zoom gesture.", "option-themes": "Themes", "option-manage-themes-description": "Manage installed themes and browse community themes.", "option-theme-button-manage": "Manage", "option-choice-none": "None", "option-native-menus": "Native menus", "option-native-menus-desc": "Menus throughout the app will match the operating system. They will not be affected by your theme.", "button-reload-themes": "Reload themes", "msg-reloaded-themes": "Reloaded custom CSS themes.", "button-open-themes-folder": "Open themes folder", "option-css-snippets": "CSS snippets", "label-no-css-snippets-found": "No CSS snippets found in the snippets folder.", "no-snippet-description": "CSS Snippets are stored in \"{{path}}\".", "button-reload-snippets": "Reload snippets", "button-open-snippets-folder": "Open snippets folder", "msg-reloaded-snippets": "Reloaded CSS snippets.", "option-toggle-snippet-description": "Apply CSS snippet at \"{{path}}\".", "label-installed-themes": "Installed themes", "label-screenshot-unavailable": "Screenshot unavailable", "label-default-theme": "Default", "tooltip-click-to-enlarge": "Click to enlarge", "button-update": "Update", "label-currently-selected": "Selected", "option-frame-style": "Window frame style", "option-frame-description": "Determines the styling of the title bar of Obsidian windows. Requires a full restart to take effect.", "option-frame-hidden": "Hidden (default)", "option-frame-obsidian": "Obsidian frame", "option-frame-native": "Native frame", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Show tab title bar", "option-show-view-header-desc": "Display the header at the top of every tab.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "button-check-for-updates": "Check for updates", "button-view-updates": "View updates", "button-update-all-themes": "Update all", "label-current-themes": "Current community themes", "label-currently-installed": "You currently have {{count}} theme installed.", "label-currently-installed_plural": "You currently have {{count}} themes installed." }, "hotkeys": { "name": "Hotkeys", "prompt-filter": "Filter...", "tooltip-delete-hotkey": "Delete hotkey", "label-waiting-for-hotkey-press": "Press hotkey...", "tooltip-restore-default": "Restore default", "tooltip-customize-command": "Customize this command", "tooltip-hotkey-single-conflict": "This hotkey conflicts with \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "This hotkey conflicts with {{count}} other commands", "label-blank-hotkey": "Blank" }, "about": { "name": "About", "label-commercial-license": "Commercial license", "label-license-key": "License key", "license-key-placeholder": "Your license key...", "label-activate-license": "Activate license", "button-activate": "Activate", "label-unknown-version": "Unknown", "label-current-version": "Current version: ", "label-install-version": "(Installer version: {{version}})", "label-up-to-date": "Your app is up to date!", "label-read-changelog": "Read the changelog.", "label-manual-update-required": "To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.", "label-download": "Download", "label-new-version-ready": "A new version is ready to be installed. ", "label-relaunch-to-update": "Relaunch the app to update.", "label-disabled-updates": "Updates are disabled.", "label-checking-for-updates": "Checking for updates...", "button-relaunch": "Relaunch", "button-check-for-updates": "Check for updates", "option-auto-update": "Automatic updates", "option-auto-update-description": "Turn this off to prevent the app from checking for updates.", "option-get-help": "Get help", "option-get-help-description": "Get help on using Obsidian.", "button-open": "Open", "option-language": "Language", "option-language-description": "Change the display language.", "option-insider-build": "Receive insider builds", "option-insider-build-description": "Auto-update to insider builds to try out new features. Note that these builds are bleeding edge and might be less stable.", "option-advanced": "Advanced", "option-hw-acceleration": "Hardware Acceleration", "option-hw-acceleration-description": "Turns on Hardware Acceleration, which uses your GPU to make Obsidian smoother.", "option-hw-acceleration-warning": "If you turn this off, app performance will be severely degraded.", "option-config-location": "Override config folder", "option-config-location-description": "Use a different config folder than the default one. Must start with a dot.", "option-config-location-warning": "Config location must be a valid folder name that starts with a dot.", "label-license": "License", "label-your-commercial-license-key": "Your commercial license key is \"{{key}}\".", "label-commercial-license-info": "Registered to \"{{company}}\" for {{seats}} users. Valid until {{expiry}}.", "label-validating-commercial-license": "Validating...", "label-invalid-commercial-license": "License invalid: ", "button-remove-commercial-license": "Remove", "option-catalyst": "Catalyst license", "option-catalyst-desc": "You currently have the {{tier}} Catalyst license. Thanks for your support!", "option-catalyst-desc-no-license": "You don't have a Catalyst license right now. Catalyst license is a one-time donation to support Obsidian development.", "label-app": "App" }, "account": { "name": "Account", "option-your-account": "Your account", "option-your-account-desc": "You're currently signed in {{name}} ({{email}}).", "option-your-account-desc-no-login": "You're not logged in right now. An account is only needed for Obsidian Sync, Obsidian Publish, and Catalyst insider builds.", "button-manage-settings": "Manage settings", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Commercial license", "option-commercial-license-desc": "If you use Obsidian for commercial purpose, you may need to get a commercial license.", "button-purchase": "Purchase", "button-log-out": "Log out", "label-log-in": "Log in", "label-sign-up": "Sign up", "label-email": "Email", "placeholder-email": "Your email...", "label-password": "Password", "placeholder-password": "Your password...", "button-login": "Login", "message-empty-email": "Email cannot be empty.", "message-invalid-email": "Email is not valid.", "message-empty-password": "Password cannot be empty.", "message-login-failed": "Login failed, please double check your email and password.", "label-no-account": "Don't have an account? ", "link-sign-up-now": "Sign up now" }, "core-plugin": { "plugin-list": "Plugin list", "option-search-plugin": "Search core plugins", "option-search-plugin-description": "Filter plugins by name or description.", "placeholder-search-plugin": "Search plugins..." }, "third-party-plugin": { "name": "Third-party plugin", "option-restricted-mode": "Restricted mode", "option-restricted-mode-description": "Restricted mode is off. Turn on to disable community plugins.", "button-turn-on": "Turn on", "option-browse-community-plugins": "Community plugins", "option-browse-community-plugins-description": "Browse and install third-party plugins made by our amazing community.", "button-browse": "Browse", "label-exit-restricted-mode": "Exit Restricted Mode", "label-exit-restricted-mode-description-1": "Community plugins, like any other software you install, could potentially cause data integrity and security issues.", "label-exit-restricted-mode-description-2": "Plugin security is important to us. Here's what we do:", "label-exit-restricted-mode-description-3": "Despite our efforts, there is still a small chance that a community plugin might misbehave.", "label-code-review": "Initial code review", "label-code-review-desc": "Plugins undergo an initial code review by our team before they appear in the store.", "label-open-source": "Open source", "label-open-source-desc": "Most plugins are open source on GitHub, so you can inspect the code yourself.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We have a large community of developers who watch out for each other.", "label-report-mechanism": "Report mechanism", "label-report-mechanism-desc": "We follow up and remove faulty plugins upon user report.", "label-exit-restricted-mode-disable-confirmation": "Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.", "label-learn-more": "Learn more about plugin security", "button-turn-on-community-plugins": "Turn on community plugins", "label-trust-author": "Do you trust the author of this vault?", "label-trust-author-description-1": "You're opening this vault for the first time, and it comes with some plugins.", "label-trust-author-description-2": "If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.", "label-trust-author-description-3": "If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.", "button-enable-plugins": "Trust author and enable plugins", "button-dont-trust-author": "Browse vault in Restricted Mode", "placeholder-community-plugins": "Search community plugins...", "msg-failed-load-plugins": "Failed to load community plugins.", "label-installed": "Installed", "button-install": "Install", "button-enable": "Enable", "button-disable": "Disable", "button-copy-share-link": "Copy share link", "button-donate": "Donate", "label-no-results-found": "No results found.", "msg-failed-to-load-manifest": "Failed to load plugin manifest.", "label-version": "Version: {{version}}", "label-currently-installed-version": " (currently installed: {{version}})", "label-by-author": "By ", "label-repository": "Repository: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "This plugin does not support your device.", "button-update": "Update", "label-no-readme": "This plugin did not provide a README file.", "msg-installing-plugin": "Installing plugin \"{{name}}\"...", "msg-failed-to-install-plugin": "Failed to install plugin \"{{name}}\".", "msg-successfully-installed-plugin": "Successfully installed plugin \"{{name}}\".", "label-installed-plugins": "Installed plugins", "button-reload-plugins": "Reload plugins", "msg-reloaded-third-party-plugins": "Reloaded third-party plugins.", "label-uninstall": "Uninstall", "label-uninstall-plugin": "Uninstall plugin", "label-uninstall-plugin-confirmation": "Are you sure you want to uninstall this plugin? This will delete the folder of the plugin.", "button-open-plugins-folder": "Open plugins folder", "button-check-for-updates": "Check for updates", "button-update-all-plugins": "Update all", "label-current-plugins": "Current plugins", "label-currently-installed": "You currently have {{count}} plugin installed.", "label-currently-installed_plural": "You currently have {{count}} plugins installed.", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Show a message with how long each plugin took to initialize when starting the app.", "msg-no-updates-found": "No plugin updates found.", "msg-updates-found": "Found {{count}} plugin to update.", "msg-updates-found_plural": "Found {{count}} plugins to update.", "msg-update-plugin": "Update to version {{version}}", "option-search-installed-plugin": "Search installed plugins", "option-search-installed-plugin-description": "Filter installed plugins by name or description.", "placeholder-search-installed-plugin": "Search installed plugins...", "show-installed-only": "Show installed only", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "Showing {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Mobile toolbar", "option-configure-quick-action": "Configure mobile Quick Action", "option-configure-quick-action-description": "Configure which command to trigger when pull down from the top. The current command is set to \"{{command}}\".", "button-configure": "Configure", "placeholder-select-quick-action": "Select Quick Action...", "manage-toolbar-options": "Manage toolbar options", "option-internal-link": "Add internal link", "option-internal-embed": "Add embed", "option-tag": "Add tag", "option-heading": "Toggle heading", "option-strikethrough": "Toggle strikethrough", "option-highlight": "Toggle highlight", "option-code": "Toggle code", "option-blockquote": "Toggle blockquote", "option-markdown-link": "Add Markdown link", "option-bullet-list": "Toggle bullet list", "option-numbered-list": "Toggle numbered list", "option-indent-list": "Indent list item", "option-unindent-list": "Unindent list item", "option-undo": "Undo", "option-redo": "Redo", "option-move-caret-up": "Move caret up", "option-move-caret-down": "Move caret down", "option-move-caret-left": "Move caret left", "option-move-caret-right": "Move caret right", "option-first-line": "Go to first line", "option-last-line": "Go to last line", "option-toggle-keyboard": "Toggle keyboard", "option-configure-toolbar": "Configure mobile toolbar", "option-added-options": "Added options", "option-more-toolbar-options": "More toolbar options", "option-attach": "Insert attachment", "option-add-command": "Add global command", "option-add-command-description": "Select any global command to add to the toolbar." } }, "editor": { "search": { "placeholder-find": "Find", "placeholder-replace": "Replace", "label-previous": "Prev", "label-next": "Next", "label-all": "All", "label-exit-search": "Exit search", "label-replace": "Replace", "label-replace-all": "Replace all" }, "link-suggestion": { "label-type-hash": "Type #", "label-link-heading": "to link heading", "label-type-block": "Type ^", "label-link-block": "to link blocks", "label-type-pipe": "Type |", "label-change-display-text": "to change display text", "label-no-match-found": "No match found" }, "spellcheck": { "no-suggestion": "No suggestions...", "add-to-dictionary": "Add to dictionary" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "No heading", "label-heading-level": "Heading {{level}}" }, "print-modal": { "title": "Export to PDF", "caption": "Export \"{{filename}}\" to PDF with the setting below.", "setting-page-size": "Page size", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Include file name as title", "setting-landscape": "Landscape", "setting-margin": "Margin", "setting-margin-default": "Default", "setting-margin-minimal": "Minimal", "setting-margin-none": "None", "setting-downscale-percent": "Downscale percent", "button-export-to-pdf": "Export to PDF" }, "link-popover": { "tooltip-follow-link": "Follow link", "tooltip-open-link": "Open link", "tooltip-search-tag": "Search tag" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Open in default app", "empty-sidebar": "The sidebar is empty, try dragging a pane here.", "sidebar-expand": "Expand", "sidebar-collapse": "Collapse", "msg-fail-to-save-file": "Failed to save file \"{{filepath}}\". {{message}}.", "no-file": "No file", "msg-file-changed": "\"{{file}}\" has been modified externally, merging changes automatically.", "switch-vault": "Open another vault", "help": "Help", "settings": "Settings", "drag-to-rearrange": "Drag to rearrange", "msg-switched-to-read": "Switched default view mode to reading view.", "msg-switched-to-edit": "Switched default view mode to editor.", "msg-upgrade-installer": "To use this feature, please re-install with latest installer available from our website.", "tooltip-restore-default-settings": "Restore default settings", "label-copy": "Copy to clipboard", "copied_generic": "Copied to your clipboard", "copied": "{{item}} copied to your clipboard", "url": "Url", "msg-open-file-through-uri": "Opened file \"{{path}}\"", "msg-file-not-found-through-uri": "File \"{{name}}\" not found.", "delete-action-short-name": "Delete", "msg-indexing": "Obsidian is indexing your vault...\nThis should only happen once.\nSome functionality may not be available until this is complete.", "msg-indexing-complete": "Indexing complete.", "msg-sandbox-vault": "This is a sandbox vault.\nChanges you make in this vault will be lost.", "label-enter-to-create": "Enter to create", "label-update-available": "Update Available", "label-debug-info": "Debug info", "button-learn-more": "Learn more", "button-not-now": "Not now", "button-add": "Add", "button-manage": "Manage", "label-new-tab": "New tab", "msg-tab-busy": "This tab is currently busy, please try again later", "empty-state": { "no-file-open": "No file is open", "create-new-file": "Create new file", "go-to-file": "Go to file", "see-recent-files": "See recent files", "close": "Close", "unknown-pane-title": "Plugin no longer active", "unknown-pane-desc": "The plugin that created this pane ({{type}}) has gone away" }, "menu": { "edit-view": "Edit (Ctrl/Cmd+Click to edit in new pane)", "read-view": "Current view: reading", "switch-to-edit-view": "Click to edit", "switch-to-read-view": "Click to read", "mod-click-open-new-tab": "{{key}}+Click to open in new tab", "find": "Find...", "replace": "Replace...", "edit": "Edit", "preview": "Preview", "more-options": "More options", "close": "Close", "close-others": "Close others", "close-right": "Close tabs to the right", "pin": "Pin", "unpin": "Unpin", "unlink-tab": "Unlink tab", "link-tab": "Link with tab...", "toggle-source-mode": "Source mode", "toggle-reading-view": "Reading view", "delete-file": "Delete file", "create-file": "Create this file", "open-link": "Open link", "open-in-new-tab": "Open in new tab", "open-to-the-right": "Open to the right", "copy-url": "Copy url", "close-current-tab": "Close current tab", "copy": "Copy", "cut": "Cut", "paste": "Paste", "paste-as-plain-text": "Paste as plain text", "select-all": "Select all", "rename-heading": "Rename this heading...", "rename-blockid": "Rename this block ID...", "open-in-new-window": "Open in new window", "move-to-new-window": "Move to new window", "open-in-browser": "Open in browser", "stack-tabs": "Stack tabs", "unstack-tabs": "Unstack tabs" }, "tooltip": { "click-to-expand": "Click to expand", "click-to-collapse": "Click to collapse", "alias": "Alias", "not-created-yet": "Not created yet, select to create" }, "start-screen": { "label-version": "Version", "option-open-folder-as-vault": "Open folder as vault", "option-open-folder-as-vault-description": "Choose an existing folder of Markdown files.", "option-create-vault": "Create new vault", "option-create-vault-description": "Create a new Obsidian vault under a folder.", "option-connect-obsidian-sync": "Connect to Obsidian Sync", "option-connect-obsidian-sync-description": "Set up a synced vault with existing remote vault.", "option-new-vault-name": "Vault name", "option-new-vault-name-description": "Pick a name for your awesome vault.", "option-new-vault-location": "Location", "option-new-vault-location-description": "Pick a place to put your new vault.", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Reveal vault in system explorer", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "Rename vault...", "msg-error-rename-exists": "There is already a vault with this name.", "msg-error-nested": "Cannot move vault into a subfolder of itself.", "msg-error-rename-open": "Can't rename a currently open vault.", "msg-rename-failed": "Failed to rename vault.", "msg-rename-success": "Successfully renamed vault.", "option-move-vault": "Move vault...", "msg-move-select-dest": "Select destination folder", "msg-error-move-exists": "There is already a vault at the destination.", "msg-error-move-open": "Can't move a currently open vault.", "msg-move-failed": "Failed to move vault.", "msg-move-success": "Successfully moved vault.", "option-remove": "Remove from list", "button-quick-start": "Quick start", "button-open": "Open", "button-browse": "Browse", "button-connect": "Connect", "button-create-vault": "Create", "button-back": "Back", "msg-empty-vault-name": "Vault name cannot be empty.", "msg-invalid-folder": "Please pick a valid folder.", "msg-failed-to-create-vault": "Failed to create vault.", "msg-failed-to-create-vault-at-location": "Could not create vault at the given location. Please double check the location and permission.", "msg-error-failed-to-open-vault": "Failed to open.", "msg-error-remove-current-open-vault": "Can't remove a currently open vault.", "option-get-help": "Get Help", "option-user-email": "Email", "placeholder-your-email": "Your email...", "option-user-password": "Password", "placeholder-your-password": "Your password...", "button-sign-in": "Sign in", "button-setup": "Setup", "option-connect-vault-desc": "Create a synced vault on this device.", "tooltip-own-vault": "This is a remote vault owned by you.", "tooltip-shared-vault": "This is a remote vault shared with you." }, "drag-and-drop": { "insert-link-here": "Insert link here", "insert-links-here": "Insert links here", "move-into-folder": "Move into \"{{folder}}\"", "star-this-file": "Star this file", "star-these-files": "Star these files", "open-in-this-tab": "Open in this tab", "open-as-tab": "Open as new tab" }, "window": { "maximize": "Maximize", "minimize": "Minimize", "restore-down": "Restore down", "close-window": "Close window", "go-back": "Go back", "go-forward": "Go forward" }, "start-up": { "loading-obsidian": "Loading Obsidian...", "obsidian-load-error": "An error occurred while loading Obsidian.", "button-reload-app": "Reload app", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "Open another vault", "loading-components": "Loading components...", "loading-plugins": "Loading plugins...", "loading-vault": "Loading vault...", "msg-failed-to-load-vault": "Failed to load vault: ", "loading-cache": "Loading cache...", "loading-workspace": "Loading workspace..." }, "mobile": { "action-import": "Import into vault", "action-choose-file-to-insert": "Choose a file to insert", "action-insert-text-into-file": "Insert text into {{filename}}", "action-insert-link-into-file": "Insert link into {{filename}}", "msg-importing": "Importing...", "msg-import-success": "Import success", "msg-failed-to-import-file": "Failed to import file {{filename}}", "msg-back-again-to-exit": "Press back again to exit." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "Save current file", "follow-cursor-link": "Follow link under cursor", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "Toggle pin", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "Navigate back", "navigate-forward": "Navigate forward", "use-dark-mode": "Use dark mode", "use-light-mode": "Use light mode", "change-theme": "Change theme", "search-current-file": "Search current file", "search-replace-current-file": "Search & replace in current file", "open-settings": "Open settings", "open-help": "Open help", "toggle-edit": "Toggle editing/reading view", "toggle-source-mode": "Toggle Live Preview/Source mode", "delete-current-file": "Delete current file", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "Toggle left sidebar", "toggle-right-sidebar": "Toggle right sidebar", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "Focus on editor", "toggle-fold": "Toggle fold on the current line", "fold-all": "Fold all headings and lists", "unfold-all": "Unfold all headings and lists", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "Swap line up", "swap-line-down": "Swap line down", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "Toggle bold for selection", "toggle-italics": "Toggle italics for selection", "toggle-highlight": "Toggle highlight for selection", "toggle-comments": "Toggle comments for selection", "insert-link": "Insert link", "toggle-spellcheck": "Toggle spellcheck", "delete-paragraph": "Delete paragraph", "toggle-checklist": "Toggle checklist status", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "Edit file title", "copy-path": "Copy file path", "copy-url": "Copy obsidian url", "export-pdf": "Export to PDF", "reload": "Reload app without saving", "undo-close-tab": "Undo close tab", "context-menu": "Show context menu under cursor", "show-debug-info": "Show debug info", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "Toggle edit/preview mode", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "This will affect {{links}} in {{files}}.", "msg-updated-links": "Updated {{links}} in {{files}}.", "label-update-links": "Update links", "label-confirm-update-link-to-file": "Do you want to update internal links that link to this file?", "button-always-update": "Always update", "button-just-once": "Just once", "button-do-not-update": "Do not update", "label-confirm-deletion": "Are you sure you want to delete \"{{filename}}\"?", "label-move-to-system-trash": "It will be moved to your system trash.", "label-move-to-vault-trash": "It will be moved to your Obsidian trash, which is located in the \".trash\" hidden folder in your vault.", "label-permanent-delete": "The file will be permanent deleted.", "label-non-empty-folder": "This folder is not empty.", "label-delete-folder-warning": "If you continue, all files inside this folder will be deleted.", "label-delete-folder": "Delete folder", "button-delete": "Delete", "button-delete-do-not-ask-again": "Delete and don't ask again", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "There are currently {{links}} pointing to this note.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "Delete file", "button-manage": "Manage", "button-cancel": "Cancel", "button-done": "Done", "button-save": "Save", "button-stop": "Stop", "button-continue": "Continue", "preparing-pdf": "Preparing PDF...", "label-rename-file": "Rename file", "label-new-name": "New name", "msg-rename-success": "Successfully renamed file.", "label-rename-heading": "Rename heading", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "Plugins", "file-explorer": { "name": "File explorer", "desc": "See all the files in your vault.", "action-open": "Open file explorer", "action-show": "Show file explorer", "action-create-note": "Create new note", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "New note", "action-new-folder": "New folder", "action-change-sort": "Change sort order", "action-reveal-file": "Reveal file in file explorer", "action-reveal-active-file": "Reveal active file in file explorer", "command-move-file": "Move file to another folder", "action-move-file": "Move file to...", "action-move-folder": "Move folder to...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "Type a folder", "label-no-folders": "No folders found.", "instruction-navigate": "to navigate", "instruction-move": "to move", "instruction-dismiss": "to dismiss", "label-sort-a-to-z": "Sort by file name (A to Z)", "label-sort-z-to-a": "Sort by file name (Z to A)", "label-sort-new-to-old": "Sort by edit time (new to old)", "label-sort-old-to-new": "Sort by edit time (old to new)", "label-sort-created-old-to-new": "Created time (old to new)", "label-sort-created-new-to-old": "Created time (new to old)", "menu-opt-new-note": "New note", "menu-opt-new-folder": "New folder", "menu-opt-set-attachment-folder": "Set as attachment folder", "menu-opt-rename": "Rename", "menu-opt-delete": "Delete", "menu-opt-make-copy": "Make a copy", "msg-invalid-characters": "File name cannot contain any of the following characters: ", "msg-unsafe-characters": "Links will not work with file names containing any of these characters: ", "msg-file-already-exists": "There's already a file with the same name", "msg-empty-file-name": "File name cannot be empty.", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "Last modified at {{time}}", "tooltip-created-time": "Created at {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Move", "label-untitled-file": "Untitled", "label-untitled-folder": "Untitled", "msg-set-attachment-folder": "Attachments will be saved to \"{{path}}\" from now on." }, "search": { "name": "Search", "desc": "Search for keyword in all the notes.", "action-open-search": "Search in all files", "label-collapse-results": "Collapse results", "label-match-case": "Match case", "label-explain-search-term": "Explain search term", "label-more-context": "Show more context", "prompt-start-search": "Type to start search...", "label-match-text": "Matches text: ", "label-match-regex": "Matches regex: ", "label-match-exact-text": "Contains exact text: ", "label-match-all": "Match all of: ", "label-match-any": "Match any of: ", "label-excluding": "Excluding: ", "label-case-sensitive": "Case sensitive", "label-case-insensitive": "Case insensitive", "label-match-file-path": "Match file path: ", "label-match-file-name": "Match file name: ", "label-match-content": "Match file content: ", "label-match-task": "Match task: ", "label-match-task-todo": "Match task (todo): ", "label-match-task-done": "Match task (done): ", "label-match-line": "Match line: ", "label-match-block": "Match block: ", "label-match-section": "Match section: ", "label-match-tag": "Match tag: ", "label-no-matches": "No matches found.", "matches-with-count": "... and {{count}} more match.", "matches-with-count_plural": "... and {{count}} more matches.", "label-copy-search-results": "Copy search results", "button-copy-results": "Copy results", "msg-successfully-copied": "Results copied to your clipboard.", "option-show-path": "Show path", "option-show-path-description": "Display full path of the file rather than just the file name.", "option-link-style": "Link style", "option-link-style-description": "Optionally turn each file result in to a link.", "option-choice-link-style-none": "None", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Markdown link", "option-list-prefix": "List prefix", "option-list-prefix-description": "Optionally add a list item prefix to each file result.", "option-choice-list-style-none": "None", "option-choice-list-style-dash": "Dash (-)", "option-choice-list-style-asterisk": "Asterisk (*)", "option-choice-list-style-numbered": "Numbered", "tooltip-clear-search": "Clear search", "label-search-options": "Search options", "tooltip-read-more": "Read more", "label-history": "History", "tooltip-clear-history": "Clear search history", "label-path-option-description": "match path of the file", "label-file-name-option-description": "match file name", "label-tag-option-description": "search for tags", "label-line-option-description": "search keywords on same line", "label-section-option-description": "search keywords under same heading", "menu-opt-search-for": "Search for \"{{keyword}}\"" }, "quick-switcher": { "name": "Quick switcher", "desc": "Jump to any files without leaving your keyboard. Ctrl/Cmd+O to activate.", "short-name": "Switcher", "action-open": "Open quick switcher", "instruction-navigate": "to navigate", "instruction-open": "to open", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "to create", "instruction-dismiss": "to dismiss", "label-no-note-create-new": "No notes found. Enter to create a new one.", "prompt-type-file-name": "Type file to switch to or create...", "label-enter-to-create": "Enter to create", "tooltip-not-created-yet": "Not created yet, select to create", "option-show-existing-only": "Show existing only", "option-show-existing-only-description": "Whether to show links to files that are not yet created.", "option-show-attachments": "Show attachments", "option-show-attachments-desc": "Show attachment files like images, videos, and PDFs.", "option-show-all-file-types": "Show all file types", "option-show-all-file-types-desc": "Show all files including ones that Obsidian can't open. The file will be opened with the default app for that file type." }, "graph-view": { "name": "Graph view", "desc": "See a graph overview of which notes link to which.", "action-open": "Open graph view", "action-open-local": "Open local graph", "action-copy-screenshot": "Copy screenshot", "tab-title": "Graph of {{displayText}}", "label-filters": "Filters", "prompt-filter-nodes": "Search files...", "option-depth": "Depth", "option-depth-description": "Show nodes this number of links away", "option-neighbor-links": "Neighbor links", "option-neighbor-links-description": "Show links between neighbors.", "option-forelinks": "Outgoing links", "option-forelinks-description": "Show links to other files", "option-backlinks": "Incoming links", "option-backlinks-description": "Show links from other files", "option-show-tags": "Tags", "option-show-tags-description": "Tags are linked to the files that contain them", "option-show-attachments": "Attachments", "option-show-attachments-description": "Show attachments included by files", "option-show-existing-files-only": "Existing files only", "option-show-existing-files-only-description": "When checked, links to nonexistent files are not shown", "option-show-orphans": "Orphans", "option-show-orphans-description": "Show files that are not linked to any other file", "label-display": "Display", "option-show-arrows": "Arrows", "option-show-arrows-description": "Show arrows when zoomed in", "option-text-fade": "Text fade threshold", "option-node-size": "Node size", "option-link-thickness": "Link thickness", "label-forces": "Forces", "option-center-force": "Center force", "option-link-force": "Link force", "option-link-distance": "Link distance", "option-repel-force": "Repel force", "tooltip-open-graph-settings": "Open graph settings", "msg-screenshot-copied": "Screenshot copied to the clipboard.", "label-groups": "Groups", "placeholder-enter-query": "Enter query...", "tooltip-delete-graph": "Delete group", "button-new-group": "New group", "tooltip-click-to-change-drag-to-reorder": "Click to change color\nDrag to reorder groups", "action-timelapse": "Start graph timelapse animation", "tooltip-start-timelapse-animation": "Start timelapse animation", "button-animate-timelapse": "Animate" }, "backlinks": { "name": "Backlinks", "desc": "Show number of backlinks in the status bar.", "action-open": "Open backlinks", "action-show": "Show backlinks pane", "action-open-for-current": "Open backlinks for the current file", "action-toggle-backlinks-in-document": "Toggle backlinks in document", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "Linked mentions", "label-no-backlinks": "No backlinks found.", "label-unlinked-mentions": "Unlinked mentions", "label-show-search": "Show search filter", "label-link-button-text": "Link", "tab-title": "Backlinks for {{displayText}}", "label-no-unlinked-mentions": "No unlinked mentions found.", "ellipsis": "...", "option-backlink-in-document": "Backlink in document", "option-backlink-in-document-desc": "Show backlinks in document by default when opening new panes." }, "outgoing-links": { "name": "Outgoing Links", "desc": "Show outgoing links and detect unlinked mentions of other notes in the current note.", "action-open": "Open outgoing links", "action-show": "Show outgoing links pane", "action-open-for-current": "Open outgoing links for the current file", "tab-title": "Outgoing links from {{displayText}}", "label-links": "Links", "label-no-links": "No links found.", "label-unlinked-mentions": "Unlinked mentions", "tooltip-link-file": "Link this file", "tooltip-not-created": "Not created yet" }, "tag-pane": { "name": "Tag pane", "desc": "Displays all your tags and along with their number of occurrences.", "action-show": "Show tag pane", "label-no-tags": "No tags found.", "label-sort-by-name-a-to-z": "Tag name (A to Z)", "label-sort-by-name-z-to-a": "Tag name (Z to A)", "label-sort-by-frequency-high-to-low": "Frequency (high to low)", "label-sort-by-frequency-low-to-high": "Frequency (low to high)", "action-show-nested-tags": "Show nested tags", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "Page preview", "desc": "Preview a note when hovering an internal link. Ctrl/Cmd + hover in editor mode.", "label-empty-note": "\"{{linktext}}\" is not created yet. Click to create.", "label-source-editor": "Editor", "label-source-preview": "Preview", "label-source-search": "Search, Backlinks, and Outgoing links", "label-require-mod": "Require {{key}} to trigger page preview on hover" }, "starred": { "name": "Starred", "desc": "Star frequently used files and searches.", "action-show": "Show starred pane", "action-toggle": "Star/unstar current file", "action-toggle-search": "Star/unstar current search", "action-star": "Star", "action-unstar": "Unstar", "menu-opt-remove": "Remove", "msg-successfully-starred": "Successfully starred {{type}} \"{{title}}\".", "msg-removed-starred": "Removed starred {{type}} \"{{title}}\".", "msg-cannot-find-path": "Cannot find file at \"{{path}}\"." }, "custom-css": { "name": "Custom CSS", "desc": "Reads \"obsidian.css\" in the vault and applies it.", "setting-community-themes": "Community themes", "msg-fetching-themes": "Fetching community theme data...", "prompt-filter": "Filter...", "label-dark-theme-only": "Dark themes only", "label-light-theme-only": "Light themes only", "label-use": "Use", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "Update", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "Remove theme", "label-visit-on-github": "Visit on GitHub", "msg-load-error": "Could not load community themes, please check your network.", "msg-now-using-theme": "You're now using {{title}} as your CSS theme.", "msg-deleted-theme": "The theme {{title}} has been deleted.", "msg-updated-theme": "The theme {{title}} has been updated.", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "Command palette", "desc": "Type a command to invoke it. No need to use the UI or remember the shortcut.", "action-open": "Open command palette", "instruction-navigate": "to navigate", "instruction-use": "to use", "instruction-dismiss": "to dismiss", "label-no-commands": "No commands found.", "prompt-type-command": "Type a command...", "label-pinned-commands": "Pinned commands", "option-add-new-pin": "New pinned command", "option-add-new-pin-description": "Pinned commands will appear at the top of all commands when no search query is present." }, "markdown-format-importer": { "name": "Markdown format importer", "desc": "Convert Markdown from other apps to Obsidian format.", "action-open": "Open Markdown importer", "option-roam-tag-fixer": "Roam Research tag fixer", "option-roam-tag-fixer-description": "Converts \"#tag\" and \"#[[tag]]\" to \"[[tag]]\".", "option-roam-highlight-fixer": "Roam Research highlight fixer", "option-roam-highlight-fixer-description": "Converts \"^^highlight^^\" to \"==highlight==\".", "option-roam-todo-converter": "Roam Research TODO converter", "option-roam-todo-converter-description": "Converts \"{{[[TODO]]}}\" to \"[ ]\".", "option-bear-highlight-fixer": "Bear highlight fixer", "option-bear-highlight-fixer-description": "Converts \"::highlight::\" to \"==highlight==\".", "zettelkasten-link-fixer": "Zettelkasten link fixer", "zettelkasten-link-fixer-description": "Fixes \"[[UID]]\" links to full \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Zettelkasten link beautifier", "zettelkasten-link-beautifier-description": "Fixes \"[[UID]]\" links and also beautify them \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Warning: the importer will convert all the files in your vault, not just the current file.", "msg-override-files-warning": "Your files will be overwritten. Back up all your files before attempting conversion.", "label-start-conversion": "Start Conversion", "label-stop": "Stop", "label-go-back": "Go back", "label-done": "Done", "label-processing": "Processing...", "label-cancelling": "Cancelling...", "label-finished": "Finished!", "label-processed-files": "Processed files", "label-modified-files": "Modified files", "label-total-replacements": "Total replacements" }, "daily-notes": { "name": "Daily notes", "desc": "Open today's daily note, or create one if not present.", "short-name": "Today", "action-open": "Open today's note", "action-open-previous": "Open previous daily note", "action-open-next": "Open next daily note", "action-insert-text": "Insert text into daily note", "action-insert-link": "Insert link into daily note", "msg-fail-format": "Failed to create daily note. \"{{format}}\" is not a valid format.", "msg-fail-folder": "Failed to create daily note. Folder \"{{folderOption}}\" not found.", "msg-fail-template-file": "Failed to create daily note. Template file \"{{template}}\" not found.", "msg-no-previous": "There's no daily note before this one.", "msg-no-next": "There's no daily note after this one.", "option-date-format": "Date format", "label-refer-to-syntax": "For more syntax, refer to: ", "label-syntax-link": "format reference", "label-syntax-live-preview": "Here is what it will look like: ", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new daily note.", "option-template": "Template file location", "option-template-description": "The file path to use as template.", "option-open-on-start": "Open daily note on startup", "option-open-on-start-description": "Open your daily note automatically whenever you open this vault." }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Random note", "desc": "Opens a random note. Useful for reviewing and discovering.", "short-name": "Random", "action-open": "Open random note" }, "outline": { "name": "Outline", "desc": "Displays the outline of the current file or linked pane.", "action-open": "Open outline", "action-show": "Show outline pane", "action-open-for-current": "Open outline of the current file", "tab-title": "Outline of {{displayText}}", "label-no-headings": "No headings found." }, "word-count": { "name": "Word count", "desc": "Show word count in the status bar." }, "slides": { "name": "Slides", "desc": "Present from Markdown. Use \"---\" to separate slides.", "action-start": "Start presentation" }, "audio-recorder": { "name": "Audio recorder", "desc": "Record audio and save as attachment.", "action-start": "Start recording audio", "action-stop": "Stop recording audio", "action-toggle": "Start/stop recording", "msg-access-denied": "Microphone access was denied, please enable it from the preference pane.", "msg-pending-grant": "Please grant microphone permission to start recording.", "msg-no-microphone": "No microphone is connected." }, "open-with-default-app": { "name": "Open in default app", "desc": "Add button to open current file in the default app.", "action-open-file": "Open in default app", "action-open-file-mobile": "Share", "action-show-in-folder": "Show in folder", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "Templates", "desc": "Insert template content from a folder of template files.", "action-insert": "Insert template", "action-insert-current-date": "Insert current date", "action-insert-current-time": "Insert current time", "option-template-folder-location": "Template folder location", "option-template-folder-location-description": "Files in this folder will be available as templates.", "option-template-date-format": "Date format", "option-template-date-format-description": "{{date}} in the template file will be replaced with this value.", "option-template-date-format-description2": "You can also use {{date:YYYY-MM-DD}} to override the format once.", "option-template-time-format": "Time format", "option-template-time-format-description": "{{time}} in the template file will be replaced with this value.", "option-template-time-format-description2": "You can also use {{time:HH:mm}} to override the format once.", "instruction-navigate": "to navigate", "instruction-insert": "to insert template", "instruction-dismiss": "to dismiss", "msg-no-templates-found": "No templates found", "msg-fail-invalid-folder": "Failed to list templates. Template folder is invalid.", "msg-fail-folder-not-found": "Failed to list templates. Folder \"{{folderOption}}\" not found.", "prompt-type-template": "Type name of a template..." }, "translucency": { "name": "Translucent window", "desc": "Turn on translucency effect to enhance a sense of depth. Best used with dark mode. Not supported on Linux." }, "slash-command": { "name": "Slash commands", "desc": "Enable the ability to trigger slash commands in the editor by typing the forward slash." }, "editor-status": { "name": "Editor status", "desc": "Adds a status bar item to show and change the current editor mode.", "read": "Reading", "edit-source": "Source mode", "edit-live-preview": "Live Preview" }, "publish": { "name": "Publish", "desc": "Publish your notes through Obsidian Publish.", "action-publish-changes": "Publish changes...", "label-no-internet-access": "You need access to the internet to publish changes.", "label-publish-service-description": "Obsidian Publish is an add-on paid service that lets you publish your notes online directly from Obsidian.", "label-please-login": "To start publishing, please log in or create a new Obsidian account.", "label-no-publish-subscription": "You do not have an Obsidian Publish subscription yet.", "button-purchase": "Purchase", "label-manage-sites": "Manage sites", "label-no-sites": "You don't have any sites.", "button-choose": "Choose", "tooltip-edit-site-id": "Edit site ID", "tooltip-delete-site": "Delete site", "label-delete-site-confirmation": "Are you sure you want to delete this site?", "label-delete-site-details": "This will immediately and permanently delete your site.", "label-confirm-delete-site": "Confirm delete site \"{{site}}\"", "option-site-id": "Site ID", "option-site-id-description": "Your site will be at https://publish.obsidian.md/{site id}. You can change this later. Only lower case letters, numbers, and dashes are allowed.", "option-site-id-placeholder": "Pick a site ID", "button-create": "Create", "msg-invalid-site-id": "Site ID can only contain lowercase letters, numbers, and dashes.", "msg-site-id-in-use": "This site ID is in use, please try another one.", "msg-create-site-issue": "That was an issue when creating your site.", "label-site-options": "Site options", "option-site-general": "General", "option-site-components": "Components", "option-site-appearance": "Appearance", "option-site-reading-experience": "Reading experience", "option-site-misc": "Other site settings", "option-site-name": "Site name", "option-site-name-description": "Name of your published site. It will show up in the page title of your site.", "option-site-name-placeholder": "Name of your site", "option-home-page-file": "Homepage file", "option-home-page-file-description": "The first page the user sees when landing on your published site", "option-home-page-file-placeholder": "Pick a published file", "option-logo": "Logo", "option-logo-description": "Pick an image file as your site logo.", "option-logo-placeholder": "Any uploaded image in your vault...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "Theme", "option-theme-description": "Choose default color scheme for your site.", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "Show navigation", "option-show-navigation-description": "Display a list of all published pages on the left side of your published site.", "option-show-search": "Show search bar", "option-show-search-description": "Display a search bar at top of the navigation that lets the visitors search pages and headings on your site.", "option-show-graph": "Show graph view", "option-show-graph-description": "Display a small local graph on each page.", "option-show-outline": "Show table of contents", "option-show-outline-description": "Display the outline of headings on each page.", "option-show-backlinks": "Show backlinks", "option-show-backlinks-description": "Show backlink section at the end of each page.", "option-sliding-window-mode": "Use sliding windows", "option-sliding-window-mode-description": "Open pages in new panes to the right. Allows scrolling through panes horizontally.", "option-hover-preview-file": "Show hover preview", "option-hover-preview-file-description": "Display page preview when hovering links.", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "Readable line length", "option-readable-line-length-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-site-password": "Passwords", "option-site-password-description": "Restrict access to your site with passwords.", "option-google-analytics": "Google Analytics tracking code", "option-google-analytics-description": "Configure Google Analytics for your site. Only available for visitors from your custom domain URL. Please check with your local laws and regulations first.", "button-manage-passwords": "Manage", "button-save-site-settings": "Save site settings", "msg-updated-options": "Updated options for your site.", "button-go-back": "Back", "label-publishing-to": "Publishing to", "tooltip-switch-site": "Switch site", "button-add-linked": "Add linked", "tooltip-add-linked": "Add all files that are linked by currently selected items", "msg-added-linked-files": "{{count}} linked file has been added.", "msg-added-linked-files_plural": "{{count}} linked files have been added.", "tooltip-open-site-options": "Change site options", "label-no-changes-detected": "No changes were detected.", "label-changed-files-to-be-published": "Changes", "label-unchanged-files-already-published": "Unchanged (select to delete)", "label-file-selected": " selected", "button-select-all-files": "Select all", "button-deselect-all-files": "Deselect all", "label-new-files-to-be-published": "New", "button-publish": "Publish", "msg-no-permission-to-publish-to-site": "You do not have permissions to publish to the current site.", "msg-select-at-least-one-file": "Please select at least one file.", "label-upload-changes": "Upload changes", "button-done": "Done", "button-stop": "Stop", "label-status-uploading": "Uploading", "label-status-to-publish": "To publish", "label-status-to-delete": "To delete", "label-status-published": "Published", "label-status-deleted": "Deleted", "label-status-failed": "Failed", "label-status-cancelled": "Cancelled", "button-change": "Change", "label-clear-cache": "It takes up to a few minutes for the changes to show up on your site. If you do not see your latest changes, try clearing the cache in your browser.", "label-visit-site": "You can visit your site here: ", "msg-something-went-wrong": "Something went wrong. Please check the developer console for details.", "msg-network-error": "A network error occurred. ", "label-manage-passwords": "Manage passwords", "label-add-password": "Add password", "action-new-password": "New password", "label-no-password": "Your site currently does not have any passwords. Anyone can visit it.", "label-have-password": "Your site is password protected. If you have multiple passwords, visitors can access your site by entering any of them.", "option-password-name": "Password", "option-password-desc": "A hash of your password will be stored securely. Once the password is set, it cannot be revealed in plaintext.", "option-password-placeholder": "Your password", "option-nickname-name": "Nickname (optional)", "option-nickname-desc": "Set a nickname to remind yourself what or who the password is for.", "action-add-password": "Add this password", "label-untitled-password": "Untitled password", "label-password-created-time": "Created {{time}}", "msg-added-new-password": "Added new password.", "option-custom-domain": "Custom domain", "option-custom-domain-desc": "Use your own domain rather than the https://publish.obsidian.md/{site id} URL.", "option-noindex": "Disallow search engine indexing", "option-noindex-desc": "Prevent search engines from indexing your site.", "button-configure": "Configure", "label-configure-custom-domain": "Configure custom domain", "option-custom-url-name": "Custom URL", "option-custom-url-desc": "The URL that your site will be located at.", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "Redirect to your custom domain", "option-custom-url-redirect-desc": "Redirect visitors on publish.obsidian.md/id to your custom domain.", "button-update-custom-domain": "Update domain setting", "label-custom-domain-instructions": "Please refer to our {{link}} on our help site for more information.", "label-custom-domain-link-name": "custom domain setup guide", "label-site-usage": "You're using {{site}} out of your {{limit}}.", "button-add-more-sites": "Buy more sites", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "Workspaces", "desc": "Save and load workspace layout.", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "Save", "button-load": "Load", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "Sync", "desc": "Synchronize your files through Obsidian Sync.", "action-view-version-history": "View version history", "label-load-more": "Load more", "label-show-diff": "Show diff", "label-copy-to-clipboard": "Copy to clipboard", "label-restore-this-version": "Restore this version", "msg-already-latest-version": "This version is already the latest version.", "msg-restored-version": "Successfully restored version from {{time}}", "label-file-deleted": "This file was deleted", "label-no-earlier-version": "There was no earlier versions of this file.", "label-empty-file": "Empty", "label-setting-files": "Setting files", "label-deleted-files": "Deleted files", "label-version-history": "Version history", "label-click-to-see-history": "Click on a deleted file to see its history.", "label-create-remote-vault": "Create remote vault", "msg-please-enter-password": "Please enter a password.", "msg-vault-name-cannot-be-empty": "Vault name cannot be empty.", "msg-successfully-created-vault": "Successfully create remote vault \"{{name}}\".", "label-remote-vault-explanation": "Remote vaults securely synchronize your vault between devices.", "option-vault-name": "Vault name", "option-vault-name-desc": "Helps you remember what this vault is for.", "option-vault-name-placeholder": "My awesome vault", "option-use-custom-encryption-password": "Customize end-to-end encryption password", "option-use-custom-encryption-password-desc": "If you turn this off, we will securely manage an encryption key for you.", "option-use-custom-encryption-password-desc-warning": "This option cannot be changed later.", "option-encryption-password": "Encryption password", "option-encryption-password-desc": "This password cannot be changed later.", "option-encryption-password-desc-warning": "If you forget this password, any remote data will remain unusable forever.", "option-encryption-password-desc-2": "This does not affect your local data.", "option-encryption-password-placeholder": "Your password", "label-enter-encryption-password": "Enter encryption password", "button-unlock-vault": "Unlock vault", "msg-verified-password": "Successfully verified your password.", "label-remote-vaults": "Your remote vaults", "label-vault-created-time": "Created {{time}}", "tooltip-delete-remote-vault": "Delete", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "Confirm delete vault", "label-confirm-delete-remote-vault-question": "Are you sure you want to delete this remote vault?", "label-confirm-delete-remote-vault-result": "All data on our server, including version history, will be deleted. Your local files will stay intact.", "label-confirm-delete-remote-vault-warning": "This action is permanent and irreversible.", "msg-remote-vault-deleted": "{{name}} has been deleted.", "button-connect-to-remote-vault": "Connect", "button-disconnect-from-remote-vault": "Disconnect", "label-not-remote-vaults": "You don't have any remote vaults.", "button-create-new-remote-vault": "Create new vault", "label-sync-log": "Sync log", "options-only-show-errors": "Errors only", "options-only-show-errors-desc": "Only show errors and hide other log items.", "button-copy-sync-log": "Copy sync log", "msg-successfully-copied-sync-log": "Successfully copied sync log.", "button-retry": "Retry", "button-purchase-subscription": "Purchase", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "Choose", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "Sync status", "option-sync-status-desc-paused": "Obsidian Sync is currently paused.", "option-sync-status-desc-running": "Obsidian Sync is currently running.", "option-device-name": "Device name", "option-device-name-desc": "This name will be displayed in the sync log. Leave empty to use the default name.", "button-resume": "Resume", "button-pause": "Pause", "option-view-deleted-files": "Deleted files", "option-view-deleted-files-desc": "View and restore deleted files.", "option-sync-log": "Sync activity", "option-sync-log-desc": "View recent sync activities for debugging.", "button-view": "View", "button-bulk-restore": "Bulk restore", "button-restore-selected-files": "Restore selected files", "msg-restoring": "Restoring...", "msg-restoring-complete": "`Restore complete: {{succeeded}} succeeded and {{failed}} failed.`", "option-over-size": "Vault size over limit", "option-over-size-desc": "Your vault is at {{size}} out of {{limit}}.", "msg-largest-files": "View largest files", "msg-largest-files-desc": "These are the remote files that are taking the most space. After deleting attachments, use the purge button to free up remote vault space.", "button-purge-remote": "Purge", "tooltip-purge-remote": "Permanently purge deleted attachments from remote vault to save space.", "msg-purge-complete": "Purge complete.", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "Selective sync", "option-excluded-folders": "Excluded folders", "option-excluded-folder-desc": "Prevent certain folders from being synced.", "option-currently-excluded-folders": " These folders currently excluded:", "button-manage-excluded-folders": "Manage", "option-sync-image": "Sync images", "option-sync-image-desc": "Sync image files with these extensions: {{extensions}}.", "option-sync-audio": "Sync audio", "option-sync-audio-desc": "Sync audio files with these extensions: {{extensions}}.", "option-sync-video": "Sync videos", "option-sync-video-desc": "Sync video files with these extensions: {{extensions}}.", "option-sync-pdf": "Sync PDFs", "option-sync-pdf-desc": "Sync PDF files.", "option-sync-unsupported": "Sync all other types", "option-sync-unsupported-desc": "Sync unsupported file types.", "option-vault-config-sync": "Vault configuration sync", "option-view-config-files": "Settings version history", "option-view-config-files-desc": "View and restore version history of setting files.", "option-sync-app": "Main settings", "option-sync-app-desc": "Enable to sync editor settings, files & links settings, custom hotkeys, etc.", "option-sync-appearance": "Appearance settings", "option-sync-appearance-desc": "Sync appearance settings like dark mode, active theme, and enabled snippets.", "option-sync-appearance-data": "Themes and snippets", "option-sync-appearance-data-desc": "Sync downloaded themes and snippets. Whether they are enabled depends on the previous setting.", "option-sync-hotkey": "Hotkeys", "option-sync-hotkey-desc": "Sync custom hotkeys.", "option-sync-core-plugin": "Active core plugin list", "option-sync-core-plugin-desc": "Sync which core plugins are enabled.", "option-sync-core-plugin-data": "Core plugin settings", "option-sync-core-plugin-data-desc": "Sync core plugin settings.", "option-sync-community-plugin": "Active community plugin list", "option-sync-community-plugin-desc": "Sync which community plugins are enabled.", "option-sync-community-plugin-data": "Installed community plugins", "option-sync-community-plugin-data-desc": "Sync installed community plugins (.js, .css, and manifest.json files) and their settings.", "label-sync-introduction": "Obsidian Sync is Obsidian's add-on sync service with end-to-end encryption and version history.", "label-account-required": "To start syncing, please log in or create a new Obsidian account.", "button-sign-up": "Sign up", "button-log-in": "Log in", "label-manage-excluded-folders": "Manage excluded folders", "label-number-of-folders-excluded": "{{folders}} are currently excluded from being synced.", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "Setup connection", "label-now-connected-to-vault": "You're now connected to \"{{name}}\".", "button-start-syncing": "Start syncing", "label-confirm-merge-vault": "Confirm Merge Vault", "msg-vault-has-notes": "Your local vault already contains some notes.", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "File recovery", "desc": "Let you restore recent snapshots to recover from accidental data loss. Snapshots are only saved for Markdown files.", "action-open": "Open saved snapshots", "option-interval": "Snapshot interval", "option-interval-description": "Minimal interval in minutes between two snapshots.", "option-keep": "History length", "option-keep-description": "Length in days snapshots is kept for.", "option-open-history": "Snapshots", "option-open-history-description": "View and restore saved snapshots.", "button-view-snapshots": "View", "option-clear": "Clear history", "option-clear-description": "Wipe all snapshots.", "button-clear-history": "Clear", "label-clear-warning": "Are you sure you want to delete all snapshots? Note that only snapshots will be removed. All files inside your vault will not be affected.", "msg-clear-complete": "Snapshots cleared.", "label-no-history-found": "No snapshots found.", "placeholder-choose-file": "Choose a file...", "label-select-file": "Please select a file on the left to view snapshots." }, "note-composer": { "name": "Note composer", "desc": "Merge, split, and refactor notes.", "option-confirm-file-merge": "Confirm file merge", "option-confirm-file-merge-description": "Prompt before merge two files.", "option-split-replacement-text": "Text after extraction", "option-split-replacement-text-description": "What to show in place of the selected text after extracting it.", "option-choice-split-replacement-text-link": "Link to new file", "option-choice-split-replacement-text-embed": "Embed new file", "option-choice-split-replacement-text-none": "None", "option-template-file": "Template file location", "option-template-file-description": "Template file to use when merging or extracting. Available variables: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Merge current file with another file...", "action-merge-file": "Merge entire file with...", "label-no-files": "No files found.", "instruction-navigate": "to navigate", "instruction-merge": "to merge", "instruction-create-new": "to create new", "instruction-merge-at-top": "to merge at top", "instruction-dismiss": "to dismiss", "prompt-select-file-to-merge": "Select file to merge into...", "label-merge-file": "Merge file", "label-confirm-file-merge": "Are you sure you want to merge \"{{file}}\" into \"{{destination}}\"? \"{{file}}\" will be deleted.", "button-merge": "Merge", "button-merge-do-not-ask-again": "Merge and don't ask again", "command-split-file": "Extract current selection...", "command-extract-heading": "Extract this heading...", "instruction-append": "to move to bottom", "instruction-prepend": "to move to top", "msg-fail-to-fetch-template": "Failed to fetch template file: \"{{template}}\" not found.", "msg-fail-to-find-heading": "Failed to find heading" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} word", "word-with-count_plural": "{{count}} words", "character-with-count": "{{count}} character", "character-with-count_plural": "{{count}} characters", "link-with-count": "{{count}} link", "link-with-count_plural": "{{count}} links", "file-with-count": "{{count}} file", "file-with-count_plural": "{{count}} file", "folder-with-count": "{{count}} folder", "folder-with-count_plural": "{{count}} folders", "backlink-with-count": "{{count}} backlink", "backlink-with-count_plural": "{{count}} backlinks", "site-with-count": "{{count}} site", "site-with-count_plural": "{{count}} sites", "plugin-with-count": "{{count}} plugin", "plugin-with-count_plural": "{{count}} plugins", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } }{ "setting": { "options": "Opcje", "plugin": "Wtyczki", "builtin-plugins": "Wbudowane wtyczki", "plugin-options": "Opcje wtyczek", "folder-path-example-placeholder": "Przykład: folder 1/folder 2", "file-path-example-placeholder": "Przykład: folder/notatka", "msg-restart-required": "Zmiana tej opcji wymaga restartu aby zadziałać.", "editor": { "name": "Edytor", "section-general": "Ustawienia ogólne", "section-behavior": "Funkcje edytora", "section-display": "Wyświetlanie", "option-spellcheck": "Sprawdzanie pisowni", "option-spellcheck-description": "Włącza sprawdzanie pisowni. Obecnie dostępny jest jedynie język angielski (US).", "spellcheck-languages": "Języki sprawdzania pisowni", "spellcheck-languages-description": "Wybierz język do sprawdzania pisowni.", "spellcheck-languages-mac-description": "Na systemie macOS natywny słownik automatycznie wykryje język do sprawdzania pisowni.", "spellcheck-dict": "Słownik sprawdzania pisowni", "spellcheck-dict-empty": "Słownik sprawdzania pisowni jest pusty.", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "Optymalna długość wiersza do czytania", "option-readable-line-description": "Ogranicza maksymalną długość wiersza. Zmniejsza ilość tekstu na ekranie, ale poprawia czytelność długich paragrafów.", "option-strict-line-break": "Ignoruj pojedyncze podziały wierszy", "option-strict-line-break-description": "W trybie podglądu, ignoruj pojedyncze podziały wierszy zgodnie ze specyfikacją Markdown. Wyłącz aby wyświetlać pojedyncze podziały wierszy w trybie podglądu.", "option-show-frontmatter": "Pokaż frontmatter", "option-show-frontmatter-description": "W trybie podglądu, pokaż frontmatter (metadane) jako blok kodu. Wyłącz aby ukryć sekcję frontmatter.", "option-auto-pair-brackets": "Automatyczne parowanie nawiasów", "option-auto-pair-brackets-description": "Automatycznie paruj nawiasy i cudzysłowy.", "option-auto-pair-markdown": "Automatycznie paruj składnię Markdown", "option-auto-pair-markdown-description": "Automatycznie paruj znaczniki pogrubienia i kursywy.", "option-smart-indent-lists": "Inteligentne wcięcia list", "option-smart-indent-lists-description": "Zatroszczy się o wcięcia i znaczniki list za Ciebie.", "option-fold-heading": "Zwijanie nagłówków", "option-fold-heading-description": "Pozwala na zwijanie treści pod nagłówek.", "option-fold-indent": "Zwijanie wcięć", "option-fold-indent-description": "Pozwala na zwijanie wciętych fragmentów tekstu, na przykład list.", "option-default-new-tab-view": "Domyślny widok nowych kart", "option-default-new-tab-view-description": "Domyślny widok, w którym otwiera się nowa karta markdown.", "option-default-new-tab-view-editing": "Widok edycji", "option-default-new-tab-view-reading": "Widok czytania", "option-default-editing-mode": "Domyślny tryb edycji", "option-default-editing-mode-description": "Domyślny tryb edycji, w którym otworzony zostanie nowy panel.", "option-default-editing-mode-source": "Tryb źródłowy", "option-default-editing-mode-live-preview": "Podgląd na żywo (Live Preview)", "option-show-line-number": "Wyświetl numery wierszy", "option-show-line-number-description": "Wyświetl numery wierszy na marginesie.", "option-indentation-guide": "Pokaż prowadnicę wcięć", "option-indentation-guide-description": "Dla poprawienia widoczności pokaż pionową linię zależności między wypunktowaniem tej samej głębokości.", "option-use-tabs": "Użyj klawisza Tab", "option-use-tabs-description": "Użyj klawisza \"Tab\" aby wstawić wcięcie. Wyłącz aby używać spacji.", "option-tab-size": "Wielkość tabulacji", "option-tab-size-description": "Liczba spacji odpowiadająca tabulacji.", "option-rtl": "Pisownia od strony prawej do lewej (Right-to-left (RTL))", "option-rtl-description": "Ustawienia zmiany kierunku tekstu notatek na od prawej do lewej.", "option-auto-convert-html": "Automatyczna konwersja HTML", "option-auto-convert-html-description": "Automatycznie konwertuj HTML do Markdowna podczas wklejania i przeciągania ze stron internetowych. Użyj Ctrl/Cmd+Shift+V żeby wkleić bez konwertowania.", "option-vim-key-bindings": "Skróty klawiszowe Vim", "option-vim-key-bindings-description": "Pozwala na używanie skrótów klawiszowych Vim w trybie edycji.", "option-vim-key-bindings-mobile": "Na urządzeniach mobilnych to ustawienie jest lokalne i nie będzie synchronizowane poprzez plik konfiguracyjny.", "option-emacsy-keys": "Przestarzałe skróty klawiszowe w stylu Emacsa dla macOS", "option-emacsy-keys-description": "Umożliwia korzystanie z dodatkowych klawiszy nawigacyjnych w stylu Emacsa, które są standardem w systemie macOS, ale mogą przeszkadzać w niektórych kluczowych operacjach.", "label-confirm-enable-vim": "Potwierdź wejście do trybu Vim", "label-vim-warning": "Tryb Vim służy do efektywnego edytowania tekstu, ale nie jest intuicyjny. Jeśli nie znasz Vim, ta opcja może sprawić, że Obsidian będzie wyglądał jakby przestał działać.", "label-vim-test": "Żeby zweryfikować, że potrafisz poruszać się w Vim, proszę wpisz poniżej polecenie, żeby zamknąć Vim bez zapisywania:", "label-vim-your-answer": "Twoja odpowiedź", "placeholder-enter-command": "Wpisz polecenie...", "button-confirm-enable-vim": "Pozwól mi uruchomić tryb Vim", "msg-vim-mode-enabled": "Polecenie jest poprawne. Tryb Vim został uruchomiony.", "msg-vim-mode-not-enabled": "Polecenie jest błędne. Tryb Vim nie został uruchomiony.", "msg-vim-mode-please-enter-command": "Proszę wpisz polecenie, żeby uruchomić tryb Vim", "option-legacy-editor": "Użyj poprzedniej wersji edytora", "option-legacy-editor-description2": "Poprzednia wersja edytora będzie wkrótce wycofana i nie jest już wspierana, dlatego błędy nie będą naprawiane.", "label-legacy-deprecation": "Nowy edytor jest tutaj", "label-legacy-deprecation-1": "Obsidian posiada teraz nową wersję edytora, która jest bardziej niezawodna i dostępna", "label-legacy-deprecation-2": "Wygląda na to że używasz starszej wersji edytora, myślimy że spodoba Ci się nowa wersja.", "label-legacy-deprecation-choice": "Którego trybu chciałbyś użyć?", "label-live-preview-description": "Bardziej nowoczesne, \"what-you-see-is-what-you-get\" doświadczenie.", "label-source-mode-description": "Zobacz surowy Markdown z podświetleniem składni.", "button-start-new-editor": "Uruchom nowy edytor" }, "file": { "name": "Pliki i linki", "option-confirm-file-deletion": "Potwierdź usunięcie pliku", "option-confirm-file-deletion-description": "Włącz aby wyświetlać okno dialogowe potwierdzenia usunięcia pliku.", "option-delete-destination": "Usunięte pliki", "option-delete-destination-description": "Co robić z usuniętymi plikami.", "option-choice-system-trash": "Przenieś do systemowego kosza", "option-choice-vault-trash": "Przenieś do kosza aplikacji (folderu .trash)", "option-choice-permanent-delete": "Trwale usuń", "option-always-update-links": "Zawsze aktualizuj linki, gdy", "option-always-update-links-description": "Czy automatycznie aktualizować linki po zmianie nazwy pliku. Wyłącz, aby każdorazowo wyświetlać powiadomienie.", "option-new-note-location": "Domyślna lokalizacja nowej notatki", "option-new-note-location-description": "Gdzie umieszczać nowo tworzone notatki. Ustawienia wtyczek mają pierwszeństwo.", "option-choice-vault-root": "Główny folder sejfu", "option-choice-current-folder": "Folder, w którym znajduje się obecnie otwarty plik", "option-choice-specified-folder": "Folder określony poniżej", "option-new-file-folder-path": "Folder, w którym będą tworzone nowe notatki", "option-new-file-folder-path-description": "Nowe notatki będą pojawiać się w tym folderze. Ustawienia wtyczek mają pierwszeństwo.", "option-use-wiki-links": "Użyj [[Wikilinków]]", "option-use-wiki-links-description": "Automatycznie generuj Wikilinki dla [[linków]] i ![[obrazów]] zamiast używać formatu Markdown. Wyłącz tę opcję aby nadal używać linków w formacie Markdown.", "option-show-unsupported-files": "Wykrywaj wszystkie rozszerzenia plików", "option-show-unsupported-files-description": "Pokaż pliki z dowolnymi rozszerzeniami, nawet jeśli Obsidian nie potrafi wyświetlić ich zawartości, żeby można było linkować do nich i widzieć je w Przeglądarce Plików i Oknie szybkiej zmiany pliku.", "option-link-autocompleted-format": "Format nowych linków", "option-link-autocompleted-format-description": "Jakiego formatu używać dla automatycznie generowanych linków wewnętrznych.", "option-choice-shortest-linktext": "Najkrótsza możliwa ścieżka dostępu", "option-choice-relative-path": "Względna ścieżka dostępu", "option-choice-absolute-path": "Bezwzględna ścieżka dostępu wewnątrz sejfu", "option-new-attachment-location": "Domyślna lokalizacja dla nowych załączników", "option-new-attachment-location-description": "Miejsce, gdzie będą umieszczane nowe załączniki.", "option-choice-subdirectory": "W podfolderze w aktualnie aktywnym folderze", "option-attachment-folder-path": "Ścieżka dostępu do folderu z załącznikami", "option-attachment-folder-path-description": "Nowo dodane załączniki będą pojawiać się w tym folderze. Dotyczy przeciągniętych i wklejonych plików graficznych oraz nagrań audio.", "option-attachment-subfolder-path": "Nazwa podfolderu", "option-attachment-subfolder-path-description": "Jeżeli twój plik znajduje się w \"sejf/folder\", i ustawisz nazwę podfolderu jako \"załączniki\", załączniki będą zapisane w \"sejf/folder/załączniki\".", "option-attachment-subfolder-path-placeholder": "załączniki", "option-excluded-files": "Wykluczone pliki", "option-excluded-files-desc": "Pliki wykluczone będą albo ukryte albo mniej widoczne w różnych miejscach takich jak szybka zmiana pliku, sugerowane linki, widok grafu.", "label-no-excluded-filters-applied": "Brak filtrów wykluczonych plików. Dodaj jeden poniżej.", "label-excluded-filters-applied": "Pliki pasujące do następujących filtrów są wykluczone:", "label-excluded-filter": "Filtr", "placeholder-excluded-filter": "Wprowadź ścieżkę lub wyrażenie regularne (\"/regex/\") ..." }, "appearance": { "name": "Wygląd", "option-base-theme": "Motyw podstawowy", "option-base-theme-description": "Wybierz domyślny schemat kolorów dla aplikacji Obsidian.", "option-accent-color": "Kolor akcentu", "option-accent-color-description": "Wybierz kolor akcentu do użycia w aplikacji.", "dark-theme": "Ciemny", "light-theme": "Jasny", "system-theme": "Dopasuj do systemu", "option-font": "Czcionka", "option-advanced": "Zaawansowane", "option-interface-font": "Czcionka interfejsu użytkownika", "option-interface-font-description": "Wybierz podstawową czcionkę dla programu Obsidian.", "option-text-font": "Czcionka tekstu", "option-text-font-description": "Wybierz czcionkę dla widoków edycji oraz czytania.", "option-monospace-font": "Czcionka stałej szerokości", "option-monospace-font-description": "Wybierz czcionkę dla fragmentów takich jak kod źródłowy oraz metadane (frontmatter).", "label-single-font-currently-in-effect": " Aktualnie zastosowana czcionka: ", "label-multiple-fonts-currently-in-effect": " Następujące czcionki są obecnie zastosowane:", "option-font-placeholder": "Wprowadź nazwę czcionki...", "label-no-custom-font-set": "Nie zastosowano żadnej własnej czcionki. Dodaj czcionkę poniżej.", "label-font-applied": "Zostanie zastosowana pierwsza czcionka z listy dostępna na twoim komputerze.", "msg-font-not-found": "Nie znaleziono tej czcionki na twoim komputerze.", "msg-font-found": "Znaleziono wskazaną czcionkę na twoim komputerze.", "label-font-name": "Nazwa czcionki", "option-community-themes": "Otwórz motywy stworzone przez społeczność", "option-community-themes-description": "Przeglądaj i używaj motywów stworzonych przez społeczność użytkowników.", "button-browse-community-themes": "Przeglądaj", "option-font-size": "Rozmiar czcionki", "option-font-size-description": "Rozmiar czcionki w pikselach, który wpływa na edytor i podgląd.", "option-font-size-action": "Szybka regulacja rozmiaru czcionki", "option-font-size-action-description": "Dostosuj rozmiar czcionki za pomocą Ctrl + Scroll lub użyj gestu szczypania i powiększania na gładziku.", "option-themes": "Motywy", "option-manage-themes-description": "Zarządzaj zainstalowanymi motywami oraz przeglądaj motywy stworzone przez społeczność.", "option-theme-button-manage": "Zarządzaj", "option-choice-none": "Żaden", "option-native-menus": "Menu natywne", "option-native-menus-desc": "Menu w aplikacji będą dopasowane do systemu. Wybrany motyw nie będzie miał na nie wpływu.", "button-reload-themes": "Przeładuj motywy", "msg-reloaded-themes": "Motywy CSS przeładowane.", "button-open-themes-folder": "Otwórz folder z motywami", "option-css-snippets": "Snippety CSS", "label-no-css-snippets-found": "Nie znaleziono żadnych snippetów CSS w folderze.", "no-snippet-description": "Snippety CSS przechowywane są pod ścieżką \"{{path}}\".", "button-reload-snippets": "Przeładuj snippety", "button-open-snippets-folder": "Otwórz folder ze snippetami", "msg-reloaded-snippets": "Snippety CSS przeładowane.", "option-toggle-snippet-description": "Włącz snippet CSS ze ścieżki \"{{path}}\".", "label-installed-themes": "Zainstalowane motywy", "label-screenshot-unavailable": "Zrzut ekranu nie jest dostępny", "label-default-theme": "Domyślny", "tooltip-click-to-enlarge": "Kliknij by powiększyć", "button-update": "Zaktualizuj", "label-currently-selected": "Wybrany", "option-frame-style": "Styl ramki", "option-frame-description": "Określa styl paska tytułu okna Obsidian. Wymaga pełnego restartu aby zmiany były widoczne.", "option-frame-hidden": "Ukryty (domyślne)", "option-frame-obsidian": "Ramka Obsidian", "option-frame-native": "Ramka natywna", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Pokaż belkę z tytułem", "option-show-view-header-desc": "Pokaż nagłowek na górze każdej zakładki.", "msg-updates-found": "Znaleziono {{count}} motyw do aktualizacji.", "msg-updates-found_plural": "Znaleziono {{count}} motywów do aktualizacji.", "button-check-for-updates": "Sprawdź aktualizacje", "button-view-updates": "Zobacz aktualizacje", "button-update-all-themes": "Zaktualizuj wszystkie", "label-current-themes": "Aktualne motywy ze społeczności", "label-currently-installed": "Masz zainstalowany {{count}} motyw.", "label-currently-installed_plural": "Masz zainstalowane {{count}} motywy." }, "hotkeys": { "name": "Klawisze skrótów", "prompt-filter": "Filtruj...", "tooltip-delete-hotkey": "Usuń klawisz skrótu", "label-waiting-for-hotkey-press": "Wciśnij klawisz skrótu...", "tooltip-restore-default": "Przywróć domyślne", "tooltip-customize-command": "Dostosuj to polecenie", "tooltip-hotkey-single-conflict": "Ten klawisz skrótu koliduje z \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "Ten klawisz skrótu koliduje z {{count}} innymi skrótami klawiszowymi", "label-blank-hotkey": "Pusty" }, "about": { "name": "O programie", "label-commercial-license": "Licencja komercyjna", "label-license-key": "Klucz licencyjny", "license-key-placeholder": "Twój klucz licencyjny...", "label-activate-license": "Aktywuj licencję", "button-activate": "Aktywuj", "label-unknown-version": "Nieznana", "label-current-version": "Obecna wersja: ", "label-install-version": "(Wersja instalatora: {{version}})", "label-up-to-date": "Twoja aplikacja jest aktualna!", "label-read-changelog": "Przeczytaj historię zmian.", "label-manual-update-required": "Aby obsłużyć najnowsze funkcje i otrzymać najnowsze poprawki bezpieczeństwa, potrzebna jest duża aktualizacja instalatora. Musisz ręcznie pobrać i ponownie zainstalować Obsidian.", "label-download": "Pobierz", "label-new-version-ready": "Nowa wersja jest gotowa do instalacji. ", "label-relaunch-to-update": "Uruchom aplikację ponownie, aby zaktualizować.", "label-disabled-updates": "Aktualizacje są zablokowane.", "label-checking-for-updates": "Sprawdzanie aktualizacji...", "button-relaunch": "Uruchom ponownie", "button-check-for-updates": "Sprawdź aktualizacje", "option-auto-update": "Automatyczne aktualizacje", "option-auto-update-description": "Wyłącz, aby powstrzymać aplikację przed sprawdzaniem aktualizacji.", "option-get-help": "Uzyskaj pomoc", "option-get-help-description": "Uzyskaj pomoc dotyczącą używania Obsidian.", "button-open": "Otwórz", "option-language": "Język", "option-language-description": "Zmień język programu.", "option-insider-build": "Pobieraj najnowsze wersje programu (dot. wersji insider)", "option-insider-build-description": "Automatycznie aktualizuj do najnowszej wersji programu. Pamiętaj, że te wersje zawierają najnowsze funkcje i mogą być mniej stabilne.", "option-advanced": "Zaawansowane", "option-hw-acceleration": "Przyspieszenie sprzętowe", "option-hw-acceleration-description": "Włącz przyspieszenie sprzętowe, które wykorzysta GPU żeby Obsidian pracował lepiej.", "option-hw-acceleration-warning": "Jeżeli wyłączysz tę opcję, wydajność programu spadnie.", "option-config-location": "Nadpisz folder config", "option-config-location-description": "Użyj innego folderu config niż domyślny. Nazwa musi zaczynać się od kropki.", "option-config-location-warning": "Lokalizacja folderu config musi być nazwą zaczynającą się od kropki.", "label-license": "Licencja", "label-your-commercial-license-key": "Twój klucz licencji komercyjnej to \"{{key}}\".", "label-commercial-license-info": "Zarejestrowana na \"{{company}}\" dla {{seats}} użytkowników. Ważna do {{expiry}}.", "label-validating-commercial-license": "Sprawdzanie...", "label-invalid-commercial-license": "Licencja nieważna: ", "button-remove-commercial-license": "Usuń", "option-catalyst": "Licencja Catalyst", "option-catalyst-desc": "Posiadasz {{tier}} licencję Catalyst. Dziękujemy za twoje wsparcie!", "option-catalyst-desc-no-license": "Obecnie nie posiadasz licencji Catalyst. Licencja Catalyst jest jednorazową donacją przeznaczoną na rozwój Obsidian.", "label-app": "Aplikacja" }, "account": { "name": "Konto", "option-your-account": "Twoje konto", "option-your-account-desc": "Jesteś zalogowany jako {{name}} ({{email}}).", "option-your-account-desc-no-login": "Nie jesteś zalogowany. Konto jest wymagane dla wydań: Obsidian Sync, Obsidian Publish i Catalyst insider.", "button-manage-settings": "Zarządzaj ustawieniami", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Aktualizacja", "option-commercial-license": "Licencja komercyjna", "option-commercial-license-desc": "Jeśli korzystasz z Obsidian do celów komercyjnych, to musisz zakupić licencję komercyjną.", "button-purchase": "Kup", "button-log-out": "Wyloguj się", "label-log-in": "Zaloguj się", "label-sign-up": "Zapisz się", "label-email": "Email", "placeholder-email": "Twój email...", "label-password": "Hasło", "placeholder-password": "Twoje hasło...", "button-login": "Zaloguj się", "message-empty-email": "Email nie może być pusty.", "message-invalid-email": "Niepoprawny Email.", "message-empty-password": "Hasło nie może być puste.", "message-login-failed": "Logowanie nie powiodło się, sprawdź wprowadzony email i hasło.", "label-no-account": "Nie masz konta? ", "link-sign-up-now": "Zarejestruj się teraz" }, "core-plugin": { "plugin-list": "Lista wtyczek", "option-search-plugin": "Szukaj wtyczek", "option-search-plugin-description": "Filtruj wtyczki po nazwie lub opisie.", "placeholder-search-plugin": "Szukaj wtyczek..." }, "third-party-plugin": { "name": "Wtyczki stworzone przez społeczność", "option-restricted-mode": "Tryb zastrzeżony", "option-restricted-mode-description": "Tryb Zastrzeżony jest wyłączony. Włącz aby zdezaktywować wtyczki stworzone przez społeczność.", "button-turn-on": "Włącz", "option-browse-community-plugins": "Wtyczki stworzone przez społeczność", "option-browse-community-plugins-description": "Przeglądaj i instaluj wtyczki stworzone przez społeczność użytkowników Obsidian.", "button-browse": "Przeglądaj", "label-exit-restricted-mode": "Opuść Tryb Zastrzeżony", "label-exit-restricted-mode-description-1": "Wtyczki stworzone przez społeczność, jak każde inne oprogramowanie, potencjalnie mogą powodować problemy z integralnością i bezpieczeństwem danych", "label-exit-restricted-mode-description-2": "Bezpieczeństwo wtyczek jest dla nas ważne. Oto co robimy:", "label-exit-restricted-mode-description-3": "Pomimo naszych wysiłków, istnieje niewielkie prawdopodobieństwo, że wtyczka będzie działać nieprawidłowo.", "label-code-review": "Wstępny przegląd kodu", "label-code-review-desc": "Wtyczki przechodzą wstępny przegląd kodu, wykonywany przez nasz zespół, zanim pojawią się w sklepie.", "label-open-source": "Otwarte źródło", "label-open-source-desc": "Większość wtyczek to oprogramowanie open source, których kod możesz sprawdzić na GitHubie", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "Mamy dużą społeczność programistów, którzy nawzajem sprawdzają swoją pracę.", "label-report-mechanism": "Mechanizm raportowania", "label-report-mechanism-desc": "Śledzimy i usuwamy niewłaściwie działające wtyczki, zgłoszone przez użytkowników", "label-exit-restricted-mode-disable-confirmation": "Czy chciałbyś opuścić Tryb Zastrzeżony, aby aktywować wtyczki stworzone przez społeczność? Zanim to zrobisz, zalecamy zrobienie kopii zapasowej danych", "label-learn-more": "Naucz się więcej o bezpieczeństwie wtyczek", "button-turn-on-community-plugins": "Włącz wtyczki stworzone przez społeczność", "label-trust-author": "Czy ufasz twórcy tego sejfu?", "label-trust-author-description-1": "Sejf, który otwierasz pierwszy raz, zawiera wtyczki.", "label-trust-author-description-2": "Jeśli otrzymałeś ten sejf od kogoś innego, pamiętaj że wtyczki niewiadomego pochodzenia, mogą stanowić zagrożenie dla bezpieczeństwa", "label-trust-author-description-3": "Jeśli nie ufasz w pełni twórcy tego sejfu, polecamy pozostanie w Trybie Zastrzeżonym, aby wtyczki zawarte w tym sejfie pozostały nieaktywne.", "button-enable-plugins": "Zaufaj twórcy i aktywuj wtyczki", "button-dont-trust-author": "Przejrzyj sejf w Trybie Zastrzeżonym", "placeholder-community-plugins": "Szukaj we wtyczkach społeczności...", "msg-failed-load-plugins": "Ładowanie wtyczek stworzonych przez społeczność nie powiodło się.", "label-installed": "Zainstalowane", "button-install": "Instaluj", "button-enable": "Włącz", "button-disable": "Wyłącz", "button-copy-share-link": "Skopiuj link do udostępnienia", "button-donate": "Donate", "label-no-results-found": "Brak wyników wyszukiwania.", "msg-failed-to-load-manifest": "Ładowanie manifestu wtyczki nie powiodło się.", "label-version": "Wersja: {{version}}", "label-currently-installed-version": " (obecnie zainstalowana: {{version}})", "label-by-author": "Autorstwa ", "label-repository": "Repozytorium: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "Ta wtyczka nie jest obsługiwana na twoim urządzeniu.", "button-update": "Aktualizuj", "label-no-readme": "Ta wtyczka nie posiada pliku README.", "msg-installing-plugin": "Instalacja wtyczki \"{{name}}\"...", "msg-failed-to-install-plugin": "Instalacja wtyczki \"{{name}}\" nie powiodła się.", "msg-successfully-installed-plugin": "Zainstalowano wtyczkę \"{{name}}\".", "label-installed-plugins": "Zainstalowane wtyczki", "button-reload-plugins": "Ponownie załaduj wtyczki", "msg-reloaded-third-party-plugins": "Wtyczki załadowano ponownie.", "label-uninstall": "Odinstaluj", "label-uninstall-plugin": "Odinstaluj wtyczkę", "label-uninstall-plugin-confirmation": "Czy na pewno chcesz odinstalować tę wtyczkę? Folder wtyczki zostanie usunięty.", "button-open-plugins-folder": "Otwórz folder z wtyczkami", "button-check-for-updates": "Sprawdź aktualizacje", "button-update-all-plugins": "Zaktualizuj wszystkie", "label-current-plugins": "Aktualne wtyczki", "label-currently-installed": "Liczba aktualnie zainstalowanych wtyczek: {{count}}.", "label-currently-installed_plural": "Liczba aktualnie zainstalowanych wtyczek: {{count}}.", "label-debug-startup-time": "Debuguj czas startu", "label-debug-startup-time-description": "Pokaż komunikat z informacją, ile czasu zajęła inicjacja każdej z wtyczek podczas uruchomienia aplikacji.", "msg-no-updates-found": "Nie znaleziono żadnych aktualizacji dla wtyczek.", "msg-updates-found": "Liczba znalezionych aktualizacji dla wtyczek: {{count}}.", "msg-updates-found_plural": "Liczba znalezionych aktualizacji dla wtyczek: {{count}}.", "msg-update-plugin": "Aktualizuj do wersji {{version}}", "option-search-installed-plugin": "Przeszukaj zainstalowane wtyczki.", "option-search-installed-plugin-description": "Filtruj zainstalowane wtyczki według nazwy lub opisu.", "placeholder-search-installed-plugin": "Przeszukaj zainstalowane wtyczki...", "show-installed-only": "Pokaż tylko zainstalowane", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "Pokazuję {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Mobilny pasek narzędzi", "option-configure-quick-action": "Konfiguruj mobilny Szybki Wybór", "option-configure-quick-action-description": "Skonfiguruj polecenie, która ma być wyzwalana po przeciągnięciu od góry. Bieżące polecenie jest ustawiona na \"{{command}}\".", "button-configure": "Konfiguruj", "placeholder-select-quick-action": "Wybierz Szybki Wybór...", "manage-toolbar-options": "Zarządzaj paskiem narzędzi", "option-internal-link": "Dodaj wewnętrzny link", "option-internal-embed": "Dodaj wewnętrzne osadzenie", "option-tag": "Dodaj tag", "option-heading": "Dodaj nagłówek", "option-strikethrough": "Dodaj przekreślenie", "option-highlight": "Dodaj zakreślenie", "option-code": "Wstaw kod", "option-blockquote": "Wstaw blok kodu", "option-markdown-link": "Dodaj link Markdown", "option-bullet-list": "Dodaj listę punktową", "option-numbered-list": "Dodaj listę numerowaną", "option-indent-list": "Dodaj akapit punktowi", "option-unindent-list": "Usuń akapit punktowi", "option-undo": "Cofnij", "option-redo": "Ponów", "option-move-caret-up": "Przesuń kursor do góry", "option-move-caret-down": "Przesuń kursor na dół", "option-move-caret-left": "Przesuń kursor w lewo", "option-move-caret-right": "Przesuń kursor w prawo", "option-first-line": "Idź do pierwszej linii", "option-last-line": "Idź do ostatniej linii", "option-toggle-keyboard": "Przełącz klawiaturę", "option-configure-toolbar": "Konfiguruj mobilny pasek narzędzi", "option-added-options": "Dodano opcje", "option-more-toolbar-options": "Więcej opcji paska narzędzi", "option-attach": "Dodaj załącznik", "option-add-command": "Dodaj globalne polecenie", "option-add-command-description": "Wybierz jakiekolwiek globalne polecenie, aby dodać ją od paska narzędzi." } }, "editor": { "search": { "placeholder-find": "Znajdź", "placeholder-replace": "Zastąp", "label-previous": "Poprz.", "label-next": "Nast.", "label-all": "Wszystkie", "label-exit-search": "Zakończ wyszukiwanie", "label-replace": "Zamień", "label-replace-all": "Zamień wszystkie" }, "link-suggestion": { "label-type-hash": "Użyj #", "label-link-heading": "aby utworzyć link do nagłówka", "label-type-block": "Użyj ^", "label-link-block": "aby utworzyć link do bloku", "label-type-pipe": "Użyj |", "label-change-display-text": "aby zmienić wyświetlany tekst", "label-no-match-found": "Nie znaleziono" }, "spellcheck": { "no-suggestion": "Brak sugestii...", "add-to-dictionary": "Dodaj do słownika" }, "menu": { "edit-link": "Edytuj link" }, "heading-suggestion": { "label-no-heading": "Bez nagłówka", "label-heading-level": "Nagłówek {{level}}" }, "print-modal": { "title": "Eksportuj do PDF", "caption": "Eksportuj \"{{filename}}\" do PDF z poniższymi ustawieniami.", "setting-page-size": "Wielkość strony", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "List", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Dołącz nazwę pliku jako tytuł", "setting-landscape": "Orientacja pozioma", "setting-margin": "Margines", "setting-margin-default": "Domyślny", "setting-margin-minimal": "Minimalny", "setting-margin-none": "Brak", "setting-downscale-percent": "Skalowanie procentowe", "button-export-to-pdf": "Eksportuj do PDF" }, "link-popover": { "tooltip-follow-link": "Podążaj za linkiem", "tooltip-open-link": "Otwórz link", "tooltip-search-tag": "Wyszukaj tag" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Otwórz za pomocą aplikacji domyślnej", "empty-sidebar": "Pasek boczny jest pusty, spróbuj przeciągnąć tu jedno z okien.", "sidebar-expand": "Rozwiń", "sidebar-collapse": "Zwiń", "msg-fail-to-save-file": "Nie zapisano pliku \"{{filepath}}\". {{message}}.", "no-file": "Brak pliku", "msg-file-changed": "\"{{file}}\" został zmieniony w zewnętrznej aplikacji, automatycznie uwzględniamy zmiany.", "switch-vault": "Otwórz inny sejf", "help": "Pomoc", "settings": "Ustawienia", "drag-to-rearrange": "Przeciągnij aby zmienić położenie", "msg-switched-to-read": "Przełączono domyślny tryb widoku na tryb podglądu.", "msg-switched-to-edit": "Przełączono domyślny tryb widoku na edytor.", "msg-upgrade-installer": "Aby użyć tej funkcji, zainstaluj aplikację na nowo, używając najnowszej wersji instalatora dostępnej na naszej stronie.", "tooltip-restore-default-settings": "Przywróć ustawienia domyślne", "label-copy": "Skopiuj do sejfu", "copied_generic": "Skopiowano do schowka", "copied": "{{item}} skopiowano do sejfu", "url": "Url", "msg-open-file-through-uri": "Otwarty plik \"{{path}}\"", "msg-file-not-found-through-uri": "Nie znaleziono pliku \"{{name}}\".", "delete-action-short-name": "Usuń", "msg-indexing": "Obsidian indeksuje Twój sejf...\nPowinno to nastąpić tylko raz.\nNiektóre funkcje mogą być niedostępne, dopóki proces nie zostanie ukończony.", "msg-indexing-complete": "Indeksowanie zakończone", "msg-sandbox-vault": "Ten sejf jest w trybie testowym.\nZmiany wprowadzone do tego sejfu zostaną utracone.", "label-enter-to-create": "Wprowadź by utworzyć", "label-update-available": "Dostępna jest aktualizacja", "label-debug-info": "Debug info", "button-learn-more": "Dowiedz się więcej", "button-not-now": "Nie teraz", "button-add": "Dodaj", "button-manage": "Zarządzaj", "label-new-tab": "Nowa karta", "msg-tab-busy": "Ta karta jest aktualnie zajęta, spróbuj ponownie później", "empty-state": { "no-file-open": "Żaden plik nie jest otwarty", "create-new-file": "Utwórz nowy plik", "go-to-file": "Idź do pliku", "see-recent-files": "Zobacz ostatnie pliki", "close": "Zamknij", "unknown-pane-title": "Wtyczka już nieaktywna", "unknown-pane-desc": "Wtyczka, która stworzyła ten panel ({{type}}) przestała działać" }, "menu": { "edit-view": "Edytuj (Ctrl/Cmd+Click aby edytować w nowym oknie)", "read-view": "Obecny widok: podgląd", "switch-to-edit-view": "Kliknij by edytować", "switch-to-read-view": "Kliknij by czytać", "mod-click-open-new-tab": "{{key}}+Click aby otworzyć w nowej karcie", "find": "Znajdź...", "replace": "Zamień...", "edit": "Edytuj", "preview": "Podgląd", "more-options": "Więcej opcji", "close": "Zamknij", "close-others": "Zamknij inne", "close-right": "Zamknij karty po prawej", "pin": "Przypnij / odepnij", "unpin": "Odepnij", "unlink-tab": "Usuń link z kartą", "link-tab": "Utwórz link z kartą...", "toggle-source-mode": "Tryb źródłowy", "toggle-reading-view": "Reading view", "delete-file": "Usuń plik", "create-file": "Utwórz ten plik", "open-link": "Otwórz link", "open-in-new-tab": "Otwórz w nowej karcie", "open-to-the-right": "Otwórz po prawej", "copy-url": "Kopiuj url", "close-current-tab": "Zamknij kartę", "copy": "Kopiuj", "cut": "Wytnij", "paste": "Wklej", "paste-as-plain-text": "Wklej jako zwykły tekst.", "select-all": "Zaznacz wszystko", "rename-heading": "Edytuj nagłówek...", "rename-blockid": "Zmień nazwę ID tego bloku...", "open-in-new-window": "Otwórz w nowym oknie", "move-to-new-window": "Przenieś do nowego okna", "open-in-browser": "Open in browser", "stack-tabs": "Ułóż karty w stos", "unstack-tabs": "Zdejmij karty ze stosu" }, "tooltip": { "click-to-expand": "Kliknij aby rozwinąć", "click-to-collapse": "Kliknij aby zwinąć", "alias": "Alias (nazwa zastępcza)", "not-created-yet": "Jeszcze nie utworzono, wybierz, aby utworzyć" }, "start-screen": { "label-version": "Wersja", "option-open-folder-as-vault": "Otwórz folder jako sejf", "option-open-folder-as-vault-description": "Wybierz istniejący folder zawierający pliki Markdown.", "option-create-vault": "Stwórz nowy sejf", "option-create-vault-description": "Stwórz nowy sejf Obsidian w folderze.", "option-connect-obsidian-sync": "Połącz do Obsidian Sync", "option-connect-obsidian-sync-description": "Skonfiguruj zsynchronizowany sejf lokalny z istniejącym sejfem zdalnym.", "option-new-vault-name": "Nazwa sejfu", "option-new-vault-name-description": "Wybierz nazwę dla Twojego sejfu.", "option-new-vault-location": "Lokalizacja", "option-new-vault-location-description": "Określ lokalizację nowego sejfu.", "label-new-vault-location-preview": "Twój nowy sejf zostanie utworzony w: ", "option-reveal-vault-in-explorer": "Otwórz sejf w systemowym eksploratorze plików", "option-reveal-vault-in-explorer-mac": "Otwórz sejf w Finderze", "option-rename-vault": "Zmień nazwę sejfu...", "msg-error-rename-exists": "Już istnieje inny sejf o tej samej nazwie.", "msg-error-nested": "Nie można przenieść sejfu do podkatalogu wewnątrz samego siebie.", "msg-error-rename-open": "Nie można zmienić nazwy sejfu, gdyż jest on obecnie otwarty.", "msg-rename-failed": "Błąd zmiany nazwy sejfu.", "msg-rename-success": "Zmiana nazwy sejfu powiodła się.", "option-move-vault": "Przenieś sejf...", "msg-move-select-dest": "Wybierz docelowy katalog", "msg-error-move-exists": "Już istnieje sejf w wybranym miejscu docelowym.", "msg-error-move-open": "Nie można przenieść sejfu, gdyż jest on obecnie otwarty.", "msg-move-failed": "Błąd przeniesienia sejfu.", "msg-move-success": "Sejf został pomyślnie przeniesiony.", "option-remove": "Usuń z listy", "button-quick-start": "Szybki start", "button-open": "Otwórz", "button-browse": "Przeglądaj", "button-connect": "Połącz", "button-create-vault": "Utwórz", "button-back": "Wstecz", "msg-empty-vault-name": "Nazwa sejfu nie może być pusta.", "msg-invalid-folder": "Wskaż poprawny folder.", "msg-failed-to-create-vault": "Próba utworzenia sejfu nie powiodła się.", "msg-failed-to-create-vault-at-location": "Próba utworzenia sejfu we wskazanej lokalizacji nie powiodła się. Sprawdź lokalizację i uprawnienia dostępu.", "msg-error-failed-to-open-vault": "Próba otwarcia sejfu nie powiodła się.", "msg-error-remove-current-open-vault": "Nie można usunąć obecnie otwartego sejfu.", "option-get-help": "Uzyskaj pomoc", "option-user-email": "Email", "placeholder-your-email": "Twój email...", "option-user-password": "Hasło", "placeholder-your-password": "Twoje hasło...", "button-sign-in": "Zaloguj się", "button-setup": "Konfiguracja", "option-connect-vault-desc": "Utwórz zsynchronizowany sejf na tym urządzeniu.", "tooltip-own-vault": "To jest zdalny sejf należący do ciebie.", "tooltip-shared-vault": "To jest zdalny sejf, który został Ci udostępniony." }, "drag-and-drop": { "insert-link-here": "Wklej link tutaj", "insert-links-here": "Wklej linki tutaj", "move-into-folder": "Przenieś do \"{{folder}}\"", "star-this-file": "Oznacz plik gwiazdką", "star-these-files": "Oznacz pliki gwiazdką", "open-in-this-tab": "Otwórz w tej karcie", "open-as-tab": "Otwórz w nowej karcie" }, "window": { "maximize": "Maksymalizuj", "minimize": "Minimalizuj", "restore-down": "Przywróć", "close-window": "Zamknij", "go-back": "Wstecz", "go-forward": "Do przodu" }, "start-up": { "loading-obsidian": "Ładuję Obsidian...", "obsidian-load-error": "Wystąpił błąd podczas ładowania Obsidian.", "button-reload-app": "Odśwież aplikację", "button-reload-app-in-safe-mode": "Załaduj aplikację ponownie, w trybie bezpiecznym", "button-open-another-vault": "Otwórz inny sejf", "loading-components": "Ładuję komponenty...", "loading-plugins": "Ładuję wtyczki...", "loading-vault": "Ładuję sejf...", "msg-failed-to-load-vault": "Nie udało się wczytać sejfu: ", "loading-cache": "Ładuję pamięć podręczną...", "loading-workspace": "Ładuję obszar roboczy..." }, "mobile": { "action-import": "Importuj", "action-choose-file-to-insert": "Wybierz plik do wstawienia", "action-insert-text-into-file": "Wstaw tekst do {{filename}}", "action-insert-link-into-file": "Wstaw link do {{filename}}", "msg-importing": "Importowanie...", "msg-import-success": "Zaimportowano", "msg-failed-to-import-file": "Nie udało się zaimportować {{filename}}", "msg-back-again-to-exit": "Naciśnij ponownie aby wyjść." }, "help-screen": { "label-official-help-site": "Oficjalna strona z dokumentacją", "label-official-help-site-desc": "Dostęp do dokumentacji programu Obsidian dostępnej w wielu językach.", "action-visit": "Odwiedź", "label-discord-chat": "Czat Discord", "label-discord-chat-desc": "Discord jest najlepszym miejscem na dyskusje z innymi doświadczonymi użytkownikami Obsidian z całego świata.", "action-join": "Dołącz", "label-forum": "Oficjalne forum dyskusyjne", "label-forum-desc": "Wzajemna pomoc, zgłaszanie prośby o nową funkcjonalność, zgłaszanie błędów i dyskusja na temat organizacji baz wiedzy.", "label-sandbox-vault": "Testowy sejf (Sandbox vault)", "label-sandbox-vault-desc": "Testuj i eksperymentuj z różnymi funkcjonalnościami. Pamiętaj, twoje zmiany nie zostaną zapisane." } }, "commands": { "save-file": "Zapisz obecnie otwarty plik", "follow-cursor-link": "Otwórz link wskazany przez kursor", "open-cursor-link-in-new-tab": "Otwórz link wskazany przez kursor w nowej karcie", "open-cursor-link-to-the-right": "Otwórz link wskazany przez kursor po prawej", "open-cursor-link-in-new-window": "Otwórz link wskazany przez kursor w nowym oknie", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "Przypnij / odepnij", "split-right": "Podziel ekran w prawo", "split-down": "Podziel ekran w dół", "toggle-stacked-tabs": "Przełącz nakładanie kart w stos", "navigate-back": "Wstecz", "navigate-forward": "Do przodu", "use-dark-mode": "Włącz ciemny motyw", "use-light-mode": "Włącz jasny motyw", "change-theme": "Zmień motyw", "search-current-file": "Szukaj w obecnie otwartym pliku", "search-replace-current-file": "Szukaj i zamień w obecnie otwartym pliku", "open-settings": "Otwórz ustawienia", "open-help": "Otwórz pomoc", "toggle-edit": "Przełącz widok pomiędzy trybem edycji i podglądu", "toggle-source-mode": "Przełącz pomiędzy podglądem na żywo (Live Preview) i widokiem źródła", "delete-current-file": "Usuń obecnie otwarty plik", "new-tab": "Nowa karta", "close-all-tabs": "Close all tabs", "close-active-tab": "Zamknij obecną kartę", "close-other-tabs": "Zamknij wszystkie inne karty", "toggle-left-sidebar": "Pokaż / ukryj lewy pasek boczny", "toggle-right-sidebar": "Pokaż / ukryj prawy pasek boczny", "toggle-default-new-tab-mode": "Przełącz domyślny widok dla nowych kart", "focus-editor": "Skup na edytorze", "toggle-fold": "Rozwiń / zwiń obecny wiersz", "fold-all": "Zwiń wszystkie nagłówki i listy", "unfold-all": "Rozwiń wszystkie nagłówki i listy", "fold-more": "Zwiń sekcję", "fold-less": "Rozwiń sekcję", "swap-line-up": "Przesuń wiersz w górę", "swap-line-down": "Przesuń wiersz w dół", "remove-heading": "Usuń nagłówek", "toggle-heading": "Ustaw jako nagłówek {{level}}", "toggle-bold": "Pogrubienie", "toggle-italics": "Kursywa", "toggle-highlight": "Zakreślenie", "toggle-comments": "Zamień zaznaczenie na komentarz", "insert-link": "Wstaw link", "toggle-spellcheck": "Włącz/wyłącz sprawdzanie pisowni", "delete-paragraph": "Usuń paragraf", "toggle-checklist": "Zaznacz / odznacz element listy", "cycle-list-checklist": "Przełącz między wypunktowaniem i polem wyboru", "insert-callout": "Wstaw objaśnienie (callout)", "edit-file-title": "Edytuj tytuł pliku", "copy-path": "Skopiuj ścieżkę pliku", "copy-url": "Skopiuj url Obsidian", "export-pdf": "Eksportuj do PDF", "reload": "Zrestartuj aplikację bez zapisywania", "undo-close-tab": "Cofnij zamknięcie karty", "context-menu": "Pokaż menu kontekstowe pod kursorem", "show-debug-info": "Pokaż informacje o usterce (debug info)", "always-on-top": "Przełącz widok zawsze na wierzchu (window always on top)", "zoom-in": "Powiększ", "zoom-out": "Pomniejsz", "reset-zoom": "Zresetuj powiększenie", "toggle-preview": "Przełącz między trybem edycji i podglądu", "move-to-new-window": "Przenieś obecne okno do nowego widoku", "open-in-new-window": "Otwórz obecne okno w nowym widoku", "rename-current-file": "Zmień nazwę tego pliku" }, "dialogue": { "label-link-affected": "Zmianie ulegnie {{links}} w {{files}}.", "msg-updated-links": "Zaktualizowano {{links}} w {{files}}.", "label-update-links": "Zaktualizuj linki", "label-confirm-update-link-to-file": "Czy chcesz zaktualizować linki wewnętrzne do tego pliku?", "button-always-update": "Zawsze aktualizuj", "button-just-once": "Tylko raz", "button-do-not-update": "Nie aktualizuj", "label-confirm-deletion": "Czy na pewno chcesz usunąć \"{{filename}}\"?", "label-move-to-system-trash": "Plik zostanie przeniesiony do systemowego kosza.", "label-move-to-vault-trash": "Plik zostanie przeniesiony do kosza aplikacji Obsidian, zlokalizowanego w ukrytym folderze \".trash\" w sejfie.", "label-permanent-delete": "Plik zostanie bezpowrotnie usunięty.", "label-non-empty-folder": "Ten folder nie jest pusty.", "label-delete-folder-warning": "Jeśli kontynuujesz, wszystkie pliki wewnątrz folderu również zostaną usunięte.", "label-delete-folder": "Usuń folder", "button-delete": "Usuń", "button-delete-do-not-ask-again": "Usuń i nie pytaj ponownie", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "Do tej notatki istnieje {{links}}.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "Usuń plik", "button-manage": "Manage", "button-cancel": "Anuluj", "button-done": "Zakończ", "button-save": "Zapisz", "button-stop": "Stop", "button-continue": "Kontynuuj", "preparing-pdf": "Przygotowywanie PDF...", "label-rename-file": "Zmień nazwę pliku", "label-new-name": "Nowa nazwa", "msg-rename-success": "Zmiana nazwy zakończona sukcesem.", "label-rename-heading": "Edytuj nagłówek", "label-rename-blockid": "Zmień identyfikator sekcji" }, "menu-items": { "new-file": "Nowa Notatka", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Otwórz Sejf...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Znajdź", "replace": "Zamień", "insert-callout": "Objaśnienie (callout)", "insert-markdown-link": "Link Markdown", "insert-wikilink": "Link", "set-heading": "Nagłówek {{level}}", "no-heading": "Bez nagłówka", "insert-quote": "Cytat", "export-pdf": "Eksportuj do PDF", "toggle-bullet-list": "Lista Punktowana", "toggle-numbered-list": "Lista Numerowana", "toggle-checklist": "Lista Zadań", "toggle-bold": "Pogrubienie", "toggle-code": "Kod", "toggle-comment": "Komentarz", "toggle-italics": "Pochylenie", "toggle-highlight": "Wyróżnienie", "toggle-strikethrough": "Przekreślenie", "toggle-comments": "Komentarze", "fold-all": "Zwiń Wszystkie", "unfold-all": "Rozwiń Wszystkie", "fold-more": "Zwiń sekcję", "fold-less": "Rozwiń sekcję", "source-mode": "Tryb Źródłowy", "reading-view": "Widok do czytania", "show-debug-info": "Pokaż informacje do debugowania", "navigate-back": "Do tyłu", "navigate-forward": "Do przodu", "toggle-left-sidebar": "Przełącz lewy pasek boczny", "toggle-right-sidebar": "Przełącz prawy pasek boczny", "split-right": "Podziel ekran w prawo", "split-down": "Podziel ekran w dół", "release-notes": "Informacje o wersji" }, "plugins": { "name": "Wtyczki", "file-explorer": { "name": "Przeglądarka plików", "desc": "Zobacz wszystkie pliki w obecnie otwartym sejfie.", "action-open": "Otwórz przeglądarkę plików", "action-show": "Pokaż przeglądarkę plików", "action-create-note": "Utwórz nową notatkę", "action-create-note-to-the-right": "Stwórz notatkę po prawej stronie", "action-collapse-all": "Zwiń wszystko", "action-expand-all": "Rozwiń wszystko", "action-new-note": "Nowa notatka", "action-new-folder": "Nowy folder", "action-change-sort": "Sortuj", "action-reveal-file": "Pokaż plik w przeglądarce plików", "action-reveal-active-file": "Pokaż obecnie otwarty plik w przeglądarce plików", "command-move-file": "Przenieś plik do innego folderu", "action-move-file": "Przenieś plik do...", "action-move-folder": "Przenieś folder do...", "action-move-items": "Przenieś {{count}} plików do...", "prompt-type-folder": "Wpisz nazwę folderu", "label-no-folders": "Nie znaleziono folderów.", "instruction-navigate": "aby nawigować", "instruction-move": "aby przenieść", "instruction-dismiss": "aby zrezygnować", "label-sort-a-to-z": "Sortuj wg nazwy (A do Z)", "label-sort-z-to-a": "Sortuj wg nazwy (Z do A)", "label-sort-new-to-old": "Sortuj wg czasu edycji (od najnowszych)", "label-sort-old-to-new": "Sortuj wg czasu edycji (od najstarszych)", "label-sort-created-old-to-new": "Sortuj wg czasu utworzenia (od najnowszych)", "label-sort-created-new-to-old": "Sortuj wg czasu utworzenia (od najstarszych)", "menu-opt-new-note": "Nowa notatka", "menu-opt-new-folder": "Nowy folder", "menu-opt-set-attachment-folder": "Ustaw jako folder na załączniki", "menu-opt-rename": "Zmień nazwę", "menu-opt-delete": "Usuń", "menu-opt-make-copy": "Utwórz kopię", "msg-invalid-characters": "Nazwa pliku nie może zawierać żadnego z podanych znaków: ", "msg-unsafe-characters": "Linki nie będą działać z plikami zawierającymi następujące znaki: ", "msg-file-already-exists": "Plik o takiej nazwie już istnieje", "msg-empty-file-name": "Nazwa pliku nie może być pusta.", "msg-bad-dotfile": "Nazwa pliku nie może zaczynać się od znaku kropki.", "tooltip-modified-time": "Data ostatniej modyfikacji: {{time}}", "tooltip-created-time": "Data utworzenia: {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Przenieś", "label-untitled-file": "Bez nazwy", "label-untitled-folder": "Bez nazwy", "msg-set-attachment-folder": "Od teraz załączniki będą zapisywane w \"{{path}}\"." }, "search": { "name": "Szukaj", "desc": "Wyszukaj frazę we wszystkich notatkach.", "action-open-search": "Szukaj we wszystkich plikach", "label-collapse-results": "Zwiń wyniki wyszukiwania", "label-match-case": "Rozróżniaj wielkość liter", "label-explain-search-term": "Objaśnij wyszukiwaną frazę", "label-more-context": "Pokaż dodatkowy kontekst", "prompt-start-search": "Wpisz coś aby rozpocząć wyszukiwanie...", "label-match-text": "Wyszukiwany tekst: ", "label-match-regex": "Wyszukiwane wyrażenie regularne (regex): ", "label-match-exact-text": "Wyszukiwany tekst (dokładne dopasowanie): ", "label-match-all": "Zawiera wszystkie z poniższych: ", "label-match-any": "Zawiera którekolwiek z poniższych: ", "label-excluding": "Z wykluczeniem: ", "label-case-sensitive": "Wielkość liter ma znaczenie", "label-case-insensitive": "Wielkość liter nie ma znaczenia", "label-match-file-path": "Wyszukiwana ścieżka pliku: ", "label-match-file-name": "Wyszukiwana nazwa pliku: ", "label-match-content": "Wyszukiwana treść pliku: ", "label-match-task": "Wyszukiwane zadanie: ", "label-match-task-todo": "Wyszukiwane zadanie (do zrobienia): ", "label-match-task-done": "Wyszukiwane zadanie (ukończone): ", "label-match-line": "Wyszukiwana linia: ", "label-match-block": "Wyszukiwany blok: ", "label-match-section": "Wyszukiwana sekcja: ", "label-match-tag": "Wyszukiwany tag: ", "label-no-matches": "Brak wyników.", "matches-with-count": "... i {{count}} dodatkowych wystąpień.", "matches-with-count_plural": "... i {{count}} dodatkowych wystąpień.", "label-copy-search-results": "Kopiuj wyniki wyszukiwania", "button-copy-results": "Kopiuj wyniki", "msg-successfully-copied": "Wyniki zostały skopiowane do sejfu.", "option-show-path": "Pokaż ścieżkę", "option-show-path-description": "Wyświetl pełną ścieżkę dostępu zamiast tylko nazwy.", "option-link-style": "Styl linków", "option-link-style-description": "Opcjonalnie formatuj wyniki jako linki.", "option-choice-link-style-none": "Brak", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Link Markdown", "option-list-prefix": "Punktor", "option-list-prefix-description": "Opcjonalnie dodaj punktor przed każdym wynikiem.", "option-choice-list-style-none": "Brak", "option-choice-list-style-dash": "Myślnik (-)", "option-choice-list-style-asterisk": "Asterysk (*)", "option-choice-list-style-numbered": "Numeracja", "tooltip-clear-search": "Wyczyść wyszukiwanie", "label-search-options": "Opcje wyszukiwania", "tooltip-read-more": "Więcej", "label-history": "Historia", "tooltip-clear-history": "Usuń historię wyszukiwania", "label-path-option-description": "szukaj w tej lokalizacji", "label-file-name-option-description": "szukaj w nazwie pliku", "label-tag-option-description": "szukaj tagów", "label-line-option-description": "szukaj w tej samej linii", "label-section-option-description": "szukaj pod tym nagłówkiem", "menu-opt-search-for": "Znajdź \"{{keyword}}\"" }, "quick-switcher": { "name": "Szybka zmiana pliku", "desc": "Nawiguj między plikami bez odrywania rąk od klawiatury. Ctrl/Cmd+O aby aktywować.", "short-name": "Switcher", "action-open": "Otwórz okno szybkiej zmiany pliku", "instruction-navigate": "aby wybrać", "instruction-open": "aby otworzyć", "instruction-open-in-new-tab": "aby otworzyć w nowej karcie", "instruction-open-to-the-right": "aby otworzyć po prawej", "instruction-create": "aby utworzyć", "instruction-dismiss": "aby anulować", "label-no-note-create-new": "Nie znaleziono notatek. Wciśnij enter aby utworzyć.", "prompt-type-file-name": "Wprowadź nazwę pliku aby otworzyć lub utworzyć nowy...", "label-enter-to-create": "Wciśnij enter aby utworzyć", "tooltip-not-created-yet": "Jeszcze nie utworzono, wybierz, aby utworzyć", "option-show-existing-only": "Pokaż tylko istniejące", "option-show-existing-only-description": "Czy pokazywać łącza do plików, które nie zostały jeszcze utworzone.", "option-show-attachments": "Pokaż załączniki", "option-show-attachments-desc": "Pokaż pliki załączników, takie jak obrazy, filmy i pliki PDF.", "option-show-all-file-types": "Pokaż wszystkie typy plików", "option-show-all-file-types-desc": "Pokaż wszystkie pliki, w tym te, których Obsidian nie może otworzyć. Plik zostanie otwarty w domyślnej aplikacji dla tego typu pliku." }, "graph-view": { "name": "Pokaż graf", "desc": "Zobacz graf obrazujący połączenia między notatkami.", "action-open": "Otwórz graf", "action-open-local": "Otwórz lokalny graf", "action-copy-screenshot": "Skopiuj zrzut ekranu", "tab-title": "Graf: {{displayText}}", "label-filters": "Filtry", "prompt-filter-nodes": "Szukaj plików...", "option-depth": "Głębokość", "option-depth-description": "Pokazuj wierzchołki oddalone o wskazaną liczbę połączeń.", "option-neighbor-links": "Krawędzie między sąsiadami", "option-neighbor-links-description": "Wyświetlaj krawędzie między sąsiednimi wierzchołkami.", "option-forelinks": "Połączenia wychodzące", "option-forelinks-description": "Pokazuj połączenia do innych plików", "option-backlinks": "Linki przychodzące", "option-backlinks-description": "Pokazuj połączenia z innych plików", "option-show-tags": "Tagi", "option-show-tags-description": "Pokazuj tagi połączone z plikami, w których są zawarte", "option-show-attachments": "Załączniki", "option-show-attachments-description": "Pokazuj załączniki zawarte w plikach", "option-show-existing-files-only": "Tylko istniejące pliki", "option-show-existing-files-only-description": "Jeśli ta opcja jest zaznaczona, nieistniejące pliki nie są wyświetlane", "option-show-orphans": "Sieroty", "option-show-orphans-description": "Pokazuj pliki, które nie mają połączeń z żadnym innym plikiem", "label-display": "Wygląd", "option-show-arrows": "Strzałki", "option-show-arrows-description": "Pokazuj strzałki w widoku powiększonym", "option-text-fade": "Próg zanikania tekstu", "option-node-size": "Rozmiar wierzchołków", "option-link-thickness": "Grubość krawędzi", "label-forces": "Siły", "option-center-force": "Siła przyciągania do środka", "option-link-force": "Siła połączeń", "option-link-distance": "Długość krawędzi", "option-repel-force": "Siła odpychania", "tooltip-open-graph-settings": "Otwórz ustawienia grafu", "msg-screenshot-copied": "Skopiowano zrzut ekranu.", "label-groups": "Grupy", "placeholder-enter-query": "Wpisz zapytanie...", "tooltip-delete-graph": "Usuń grupę", "button-new-group": "Nowa grupa", "tooltip-click-to-change-drag-to-reorder": "Kliknij żeby zmienić kolor\nPrzeciągnij żeby zmienić kolejność", "action-timelapse": "Uruchom animację timelapse grafu", "tooltip-start-timelapse-animation": "Uruchom animację timelapse grafu", "button-animate-timelapse": "Pokaż animację" }, "backlinks": { "name": "Linki zwrotne", "desc": "Pokaż liczbę linków zwrotnych na pasku stanu.", "action-open": "Otwórz linki zwrotne", "action-show": "Pokaż panel linków zwrotnych", "action-open-for-current": "Otwórz linki zwrotne do obecnie otwartego pliku", "action-toggle-backlinks-in-document": "Przełącz linki zwrotne w dokumencie", "menu-opt-backlinks-in-document": "Linki zwrotne w dokumencie", "label-linked-mentions": "Wzmianki z linkiem", "label-no-backlinks": "Nie znaleziono linków zwrotnych.", "label-unlinked-mentions": "Wzmianki bez linku", "label-show-search": "Pokaż filtry wyszukiwania", "label-link-button-text": "Link", "tab-title": "Linki zwrotne do {{displayText}}", "label-no-unlinked-mentions": "Nie znaleziono wzmianek bez linku.", "ellipsis": "...", "option-backlink-in-document": "Linki zwrotne w dokumencie", "option-backlink-in-document-desc": "Przy otwarciu nowego panelu domyślnie pokazuj linki zwrotne w dokumencie." }, "outgoing-links": { "name": "Linki wychodzące", "desc": "Wyświetlaj linki wychodzące i wykrywaj niezlinkowane wzmianki o innych notatkach w bieżącej notatce.", "action-open": "Otwórz linki wychodzące", "action-show": "Pokaż okno linków wychodzących", "action-open-for-current": "Otwórz wychodzące linki do obecnego pliku", "tab-title": "Linki wychodzące z {{displayText}}", "label-links": "Linki", "label-no-links": "Nie znaleziono linków.", "label-unlinked-mentions": "Niezlinkowane wzmianki", "tooltip-link-file": "Stwórz link do tego pliku", "tooltip-not-created": "Jeszcze nie stworzono" }, "tag-pane": { "name": "Tagi", "desc": "Wyświetla wszystkie tagi wraz z liczbą wystąpień.", "action-show": "Pokaż okno tagów", "label-no-tags": "Nie znaleziono tagów.", "label-sort-by-name-a-to-z": "Nazwa tagu (od A do Z)", "label-sort-by-name-z-to-a": "Nazwa tagu (od Z do A)", "label-sort-by-frequency-high-to-low": "Ilość wystąpień (od większej do mniejszej)", "label-sort-by-frequency-low-to-high": "Ilość wystąpień (od mniejszej do większej)", "action-show-nested-tags": "Pokaż zagnieżdzone tagi", "action-collapse-all": "Zwiń wszystko", "action-expand-all": "Rozwiń wszystko" }, "page-preview": { "name": "Podgląd stron", "desc": "Wyświetl podgląd notatki po najechaniu kursorem na link wewnętrzny. Ctrl/Cmd + najechanie kursora w trybie edycji.", "label-empty-note": "\"{{linktext}}\" jeszcze nie istnieje. Kliknij aby utworzyć.", "label-source-editor": "Edytor", "label-source-preview": "Podgląd", "label-source-search": "Wyszukaj, Linki zwrotne i Linki wychodzące", "label-require-mod": "Wymagaj {{key}} żeby wyświetlić podgląd po najechaniu na link" }, "starred": { "name": "Oznaczone gwiazdką", "desc": "Oznacz gwiazdką często używane pliki i wyszukiwane frazy.", "action-show": "Wyświetl okno oznaczonych gwiazdką", "action-toggle": "Oznacz/odznacz bieżący plik", "action-toggle-search": "Oznacz/odznacz bieżące wyszukiwanie", "action-star": "Oznacz gwiazdką", "action-unstar": "Usuń gwiazdkę", "menu-opt-remove": "Usuń z oznaczonych gwiazdką", "msg-successfully-starred": "Oznaczono gwiazdką {{type}} \"{{title}}\".", "msg-removed-starred": "Usunięto {{type}} \"{{title}}\" z oznaczonych.", "msg-cannot-find-path": "Nie odnaleziono pliku w \"{{path}}\"." }, "custom-css": { "name": "Niestandardowy motyw CSS", "desc": "Wczytaj i zastosuj plik \"obsidian.css\" ze sejfu.", "setting-community-themes": "Motywy stworzone przez społeczność", "msg-fetching-themes": "Pobieranie motywów stworzonych przez społeczność...", "prompt-filter": "Filtruj...", "label-dark-theme-only": "Tylko ciemne motywy", "label-light-theme-only": "Tylko jasne motywy", "label-use": "Użyj", "label-stop-use": "Wyłącz", "label-install-and-use": "Zainstaluj i użyj", "label-update": "Aktualizuj", "label-no-readme": "Ten motyw nie ma pliku README.", "tooltip-remove-theme": "Usuń motyw", "label-visit-on-github": "Odwiedź na portalu GitHub", "msg-load-error": "Ładowanie motywów nie powiodło się, sprawdź połączenie z siecią.", "msg-now-using-theme": "Włączyłeś {{title}} jako swój aktualny motyw CSS.", "msg-deleted-theme": "Motyw {{title}} został usunięty.", "msg-updated-theme": "motyw {{title}} został zaktualizowany.", "label-installed": "Zainstalowany", "label-legacy": "Legacy", "button-update-all-themes": "Aktualizuj wszystkie", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "Nie znaleziono żadnych aktualizacji.", "msg-updates-found": "Znaleziono {{count}} motyw do aktualizacji.", "msg-updates-found_plural": "Znaleziono {{count}} motywów do aktualizacji.", "msg-failed-to-install-theme": "Nie udało się zainstalować motywu \"{{name}}\".", "msg-successfully-installed-theme": "Pomyślnie zainstalowano motyw \"{{name}}\".", "msg-installing-theme": "Instalowanie motywu \"{{name}}\"...", "label-search-summary": "Pokazuje {{themeCount}}:", "label-update-available": "Dostępna aktualizacja" }, "command-palette": { "name": "Paleta poleceń", "desc": "Wprowadź polecenie aby je wykonać. Nie musisz używać interfejsu ani pamiętać klawiszy skrótów!", "action-open": "Otwórz paletę poleceń", "instruction-navigate": "aby wybrać", "instruction-use": "aby użyć", "instruction-dismiss": "aby anulować", "label-no-commands": "Nie znaleziono poleceń.", "prompt-type-command": "Wprowadź polecenie...", "label-pinned-commands": "Przypięte polecenia", "option-add-new-pin": "Nowe przypięte polecenie", "option-add-new-pin-description": "Przypięte polecenia pojawią się u góry wszystkich poleceń, gdy nie ma zapytania wyszukiwania. " }, "markdown-format-importer": { "name": "Import formatu Markdown", "desc": "Przekonwertuj Markdown z innych aplikacji do formatu Obsidian.", "action-open": "Otwórz importer Markdown", "option-roam-tag-fixer": "Napraw tagi z aplikacji Roam Research", "option-roam-tag-fixer-description": "Zamienia \"#tag\" i \"#[[tag]]\" na \"[[tag]]\".", "option-roam-highlight-fixer": "Napraw zakreślenia (highlights) z aplikacji Roam Research", "option-roam-highlight-fixer-description": "Zamienia \"^^highlight^^\" na \"==highlight==\".", "option-roam-todo-converter": "Napraw listy TODO z aplikacji Roam Research", "option-roam-todo-converter-description": "Zamienia \"{{[[TODO]]}}\" na \"[ ]\".", "option-bear-highlight-fixer": "Napraw zakreślenia (highlights) z aplikacji Bear", "option-bear-highlight-fixer-description": "Zamienia \"::highlight::\" na \"==highlight==\".", "zettelkasten-link-fixer": "Napraw linki systemu Zettelkasten", "zettelkasten-link-fixer-description": "Zamienia linki \"[[UID]]\" na pełne \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Upiększ linki systemu Zettelkasten", "zettelkasten-link-beautifier-description": "Zamienia i upiększa linki \"[[UID]]\" na \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Uwaga: importer przetworzy wszystkie pliki w Twoim sejfie, nie tylko obecnie otwarty plik.", "msg-override-files-warning": "Twoje pliki zostaną nadpisane. Stwórz kopie zapasowy wszystkich plików zanim podejmiesz się konwersji.", "label-start-conversion": "Rozpocznij konwersję", "label-stop": "Anuluj", "label-go-back": "Wróć", "label-done": "Zakończ", "label-processing": "Przetwarzanie...", "label-cancelling": "Anulowanie...", "label-finished": "Gotowe!", "label-processed-files": "Przetworzone pliki", "label-modified-files": "Zmodyfikowane pliki", "label-total-replacements": "Całkowita liczba zmian" }, "daily-notes": { "name": "Codzienne notatki", "desc": "Otwórz dzisiejszą notatkę, lub stwórz jeśli nie istnieje.", "short-name": "Dzisiaj", "action-open": "Otwórz dzisiejszą notatkę", "action-open-previous": "Otwórz wcześniejszą notatkę", "action-open-next": "Otwórz późniejszą notatkę", "action-insert-text": "Wstaw tekst do dzisiejszej notatki", "action-insert-link": "Wstaw link do dzisiejszej notatki", "msg-fail-format": "Nie utworzono notatki. \"{{format}}\" nie jest poprawnym formatem.", "msg-fail-folder": "Nie utworzono notatki. Folder \"{{folderOption}}\" nie został odnaleziony.", "msg-fail-template-file": "Nie utworzono notatki. Plik szablonu \"{{template}}\" nie został odnaleziony.", "msg-no-previous": "Nie ma wcześniejszej notatki.", "msg-no-next": "Nie ma późniejszej notatki.", "option-date-format": "Format daty", "label-refer-to-syntax": "Aby uzyskać więcej informacji na temat składni, zobacz: ", "label-syntax-link": "dokumentację dot. formatu dat (EN)", "label-syntax-live-preview": "Przykład w wybranym formacie: ", "option-new-file-location": "Lokalizacja dla nowych plików", "option-new-file-location-description": "Ścieżka dostępu do folderu, w którym tworzone będą nowe codzienne notatki.", "option-template": "Lokalizacja szablonu", "option-template-description": "Ścieżka dostępu do pliku, który będzie wykorzystany jako szablon.", "option-open-on-start": "Otwórz dzisiejszą notatkę podczas startu programu", "option-open-on-start-description": "Otwórz dzisiejszą notatkę automatycznie po otwarciu tego sejfu." }, "unique-note-creator": { "name": "Kreator niepowtarzalnych notatek", "desc": "Twórz notatki z prefiksami w formie niepowtarzalnych znaczników czasu, dla systemów organizacji takich jak zettelkasten czy slip box.", "short-name": "Niepowtarzalny", "action-create-note": "Stwórz nową niepowtarzalną notatkę", "option-new-file-location": "Nowa lokalizacja pliku", "option-new-file-location-description": "Ścieżka do folderu, w którym ma być utworzona niepowtarzalna notatka.", "msg-folder-not-found": "Nie udało się utworzyć niepowtarzalnej notatki. Nie znaleziono folderu \"{{folderOption}}\".", "option-template-file": "Lokalizacja pliku z szablonem", "option-template-file-description": "Ścieżka pliku z szablonem.", "option-template-file-placeholder": "Przykład: folder1/note", "option-id-format": "Format niepowtarzalnego prefiksu", "msg-template-file-not-found": "Nie udało się utworzyć niepowtarzalnej notatki. Nie znaleziono szablonu \"{{template}}\".", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Losowa notatka", "desc": "Otwiera losową notatkę. Przydatne przy powtarzaniu i odkrywaniu.", "short-name": "Losuj", "action-open": "Otwórz losową notatkę" }, "outline": { "name": "Zarys", "desc": "Wyświetla zarys bieżącego pliku lub dokumentu w powiązanym oknie.", "action-open": "Otwórz zarys", "action-show": "Pokaż okno zarysu", "action-open-for-current": "Otwórz zarys obecnego dokumentu", "tab-title": "Zarys {{displayText}}", "label-no-headings": "Nie znaleziono nagłówków." }, "word-count": { "name": "Liczba słów", "desc": "Wyświetlaj liczbę słów na pasku stanu." }, "slides": { "name": "Slajdy", "desc": "Prezentuj w formacie Markdown. Użyj \"---\" aby oddzielić slajdy.", "action-start": "Rozpocznij prezentację" }, "audio-recorder": { "name": "Nagrywanie dźwięku", "desc": "Nagraj dźwięk i zapisz jako załącznik.", "action-start": "Rozpocznij nagrywanie dźwięku", "action-stop": "Zakończ nagrywanie dźwięku", "action-toggle": "Rozpocznij/zakończ nagrywanie", "msg-access-denied": "Zablokowano dostęp do mikrofonu, udostępnij go w ustawieniach.", "msg-pending-grant": "Zezwól na dostęp do mikrofonu aby rozpocząć nagrywanie.", "msg-no-microphone": "Nie podłączono mikrofonu." }, "open-with-default-app": { "name": "Otwórz za pomocą aplikacji domyślnej", "desc": "Dodaj przycisk otwierający bieżący plik w aplikacji domyślnej.", "action-open-file": "Otwórz za pomocą aplikacji domyślnej", "action-open-file-mobile": "Udostępnij", "action-show-in-folder": "Pokaż w folderze", "action-show-in-folder-mac": "Pokaż w Finderze" }, "templates": { "name": "Szablony", "desc": "Wstaw szablonową treść z folderu z plikami szablonów.", "action-insert": "Wstaw szablon", "action-insert-current-date": "Wstaw obecną datę", "action-insert-current-time": "Wstaw obecny czas", "option-template-folder-location": "Lokalizacja folderu szablonów", "option-template-folder-location-description": "Pliki w tym folderze będą dostępne jako szablony.", "option-template-date-format": "Format daty", "option-template-date-format-description": "{{date}} w pliku szablonu zostanie zastąpiony tą wartością.", "option-template-date-format-description2": "Możesz także użyć {{date:YYYY-MM-DD}} aby jednorazowo nadpisać format.", "option-template-time-format": "Format czasu", "option-template-time-format-description": "{{time}} w pliku szablonu zostanie zastąpiony tą wartością.", "option-template-time-format-description2": "Możesz także użyć {{time:HH:mm}} aby jednorazowo nadpisać format.", "instruction-navigate": "aby wybrać", "instruction-insert": "aby wstawić szablon", "instruction-dismiss": "aby anulować", "msg-no-templates-found": "Nie znaleziono szablonów", "msg-fail-invalid-folder": "Nie znaleziono szablonów. Folder szablonów jest niepoprawny.", "msg-fail-folder-not-found": "Nie znaleziono szablonów. Folder \"{{folderOption}}\" nie został znaleziony.", "prompt-type-template": "Wprowadź nazwę szablonu..." }, "translucency": { "name": "Przezroczyste okno", "desc": "Włącz przezroczystość aby wzmocnić poczucie głębi. Najlepiej używać w trybie ciemnym. Nie obsługiwane przez system Linux." }, "slash-command": { "name": "Komenda ukośnika (slash)", "desc": "Odblokowuje możliwość uruchamiania komend ukośnika (slash commands) przez wpisanie znaku ukośnika." }, "editor-status": { "name": "Tryb edytora", "desc": "Dodaje do paska statusu aktualny tryb edytora z możliwością jego zmiany.", "read": "Odczyt", "edit-source": "Tryb kodu źródłowego", "edit-live-preview": "podgląd na żywo (Live Preview)" }, "publish": { "name": "Publikuj", "desc": "Opublikuj swoje notatki przez Obsidian Publish.", "action-publish-changes": "Opublikuj zmiany", "label-no-internet-access": "Aby opublikować zmiany, konieczny jest dostęp do internetu.", "label-publish-service-description": "Obsidian Publish to dodatkowa, płatna usługa, pozwalająca na publikację Twoich notatek bezpośrednio z aplikacji Obsidian.", "label-please-login": "Aby publikować, zaloguj się lub utwórz konto Obsidian.", "label-no-publish-subscription": "Jeszcze nie posiadasz subskrypcji Obsidian Publish.", "button-purchase": "Kup", "label-manage-sites": "Zarządzaj stronami", "label-no-sites": "Nie posiadasz żadnej strony.", "button-choose": "Wybierz", "tooltip-edit-site-id": "Edytuj ID strony", "tooltip-delete-site": "Usuń stronę", "label-delete-site-confirmation": "Czy na pewno chcesz usunąć tę stronę?", "label-delete-site-details": "Natychmiastowo i bezpowrotnie usuń stronę.", "label-confirm-delete-site": "Potwierdź usunięcie strony \"{{site}}\"", "option-site-id": "ID strony", "option-site-id-description": "Twoja strona zostanie opublikowana pod adresem https://publish.obsidian.md/{site id}. Będziesz mógł później zmienić ten adres. Dozwolone tylko małe litery, cyfry i myślniki.", "option-site-id-placeholder": "Wprowadź ID strony", "button-create": "Utwórz", "msg-invalid-site-id": "ID strony może zawierać tylko małe litery, cyfry, i myślniki.", "msg-site-id-in-use": "Wybrane ID już jest w użyciu, spróbuj wprowadzić inne.", "msg-create-site-issue": "Tworzenie strony nie powiodło się.", "label-site-options": "Opcje strony", "option-site-general": "Ogólne", "option-site-components": "Komponenty", "option-site-appearance": "Wygląd", "option-site-reading-experience": "Doświadczenia czytania", "option-site-misc": "Inne ustawienia strony", "option-site-name": "Tytuł strony", "option-site-name-description": "Nazwij swoją stronę. Przeglądarki będą wyświetlać ten tekst jako tytuł strony.", "option-site-name-placeholder": "Tytuł strony", "option-home-page-file": "Plik strony głównej", "option-home-page-file-description": "Pierwsza strona, którą użytkownik zobaczy po wejściu na Twoją stronę.", "option-home-page-file-placeholder": "Wybierz opublikowany plik", "option-logo": "Logo", "option-logo-description": "Wybierz plik graficzny jako logo swojej witryny.", "option-logo-placeholder": "Dowolny przesłany obraz w sejfie...", "option-site-collaboration": "Współpracownicy strony", "option-site-collaboration-desc": "Zarządzaj współpracownikami dla tej strony.", "button-manage-collaborators": "Zarządzaj", "option-theme": "Motyw", "option-theme-description": "Wybierz domyślny motyw dla swojej strony.", "option-theme-system": "Dostosuj do systemu", "option-show-theme-toggle": "Przełączanie trybów jasny/ciemny", "option-show-theme-toggle-description": "Pozwól czytelnikowi na samodzielne przełączanie miedzy trybem jasnym i ciemnym.", "option-show-navigation": "Pokaż nawigację", "option-show-navigation-description": "Wyświetlaj listę wszystkich opublikowanych stron po lewej stronie.", "option-show-search": "Pokaż pasek wyszukiwania", "option-show-search-description": "Wyświetlaj pasek wyszukiwania na górze nawigacji do wyszukiwania stron i nagłówków na Twojej stronie.", "option-show-graph": "Pokaż widok grafu", "option-show-graph-description": "Wyświetlaj mały lokalny graf na każdej stronie.", "option-show-outline": "Pokaż spis treści", "option-show-outline-description": "Wyświetlaj spis treści zawierający wszystkie nagłówki na każdej stronie.", "option-show-backlinks": "Pokaż linki zwrotne", "option-show-backlinks-description": "Wyświetlaj sekcję z linkami zwrotnymi na dole każdej strony.", "option-sliding-window-mode": "Aktywuj przesuwne okna", "option-sliding-window-mode-description": "Otwieraj strony w nowych oknach po prawej stronie interfejsu. Pozwala na przewijanie okien w poziomie.", "option-hover-preview-file": "Pokaż podgląd w dymku", "option-hover-preview-file-description": "Wyświetlaj podgląd stron gdy użytkownik najedzie kursorem na link.", "option-hide-title": "Ukryj tytuł strony", "option-hide-title-description": "Ukryj tytuł strony. Przydatne, gdy posiadasz własne nagłówki na początku każdej ze stron.", "option-readable-line-length": "Optymalna długość wiersza do czytania", "option-readable-line-length-description": "Ogranicza maksymalną długość wiersza. Zmniejsza ilość tekstu na ekranie, ale poprawia czytelność długich paragrafów.", "option-site-password": "Hasła", "option-site-password-description": "Ogranicz dostęp do swojej strony za pomocą haseł.", "option-google-analytics": "Kod śledzenia Google Analytics", "option-google-analytics-description": "Skonfiguruj Google Analytics dla swojej strony. Dostępne tylko dla odwiedzających z niestandardowego adresu URL domeny. Proszę najpierw zapoznać się z lokalnymi przepisami prawa i regulacjach.", "button-manage-passwords": "Zarządzaj", "button-save-site-settings": "Zapisz ustawienia strony", "msg-updated-options": "Zaktualizowano ustawienia strony.", "button-go-back": "Wstecz", "label-publishing-to": "Publikuj na", "tooltip-switch-site": "Zmień stronę", "button-add-linked": "Dodaj powiązane", "tooltip-add-linked": "Dodaj wszystkie pliki podlinkowane z obecnie wybranych.", "msg-added-linked-files": "Dodano {{count}} powiązany plik.", "msg-added-linked-files_plural": "Dodano powiązanych plików: {{count}}.", "tooltip-open-site-options": "Zmień ustawienia strony", "label-no-changes-detected": "Nie wykryto żadnych zmian.", "label-changed-files-to-be-published": "Zmiany", "label-unchanged-files-already-published": "Nie zmienione (zaznacz aby usunąć)", "label-file-selected": " zaznaczone", "button-select-all-files": "Zaznacz wszystkie", "button-deselect-all-files": "Odznacz wszystkie", "label-new-files-to-be-published": "Nowe", "button-publish": "Opublikuj", "msg-no-permission-to-publish-to-site": "Nie masz uprawnień aby publikować na tej stronie.", "msg-select-at-least-one-file": "Wybierz co najmniej jeden plik.", "label-upload-changes": "Postęp publikacji", "button-done": "Gotowe", "button-stop": "Przerwij", "label-status-uploading": "Publikowanie", "label-status-to-publish": "Do publikacji", "label-status-to-delete": "Do usunięcia", "label-status-published": "Opublikowano", "label-status-deleted": "Usunięto", "label-status-failed": "Publikacja nie powiodła się", "label-status-cancelled": "Anulowano", "button-change": "Zmień", "label-clear-cache": "Publikacja zmian na Twojej stronie może potrwać kilka minut. Jeśli nadal nie widzisz ostatnich zmian, spróbuj wyczyścić pamięć podręczną (cache) przeglądarki.", "label-visit-site": "Tu możesz zobaczyć swoją stronę: ", "msg-something-went-wrong": "Coś poszło nie tak. Sprawdź konsolę w narzędziach dla programistów aby poznać szczegóły.", "msg-network-error": "Wystąpił błąd sieci. ", "label-manage-passwords": "Zarządzaj hasłami", "label-add-password": "Dodaj hasło", "action-new-password": "Nowe hasło", "label-no-password": "Twoja strona nie ma obecnie żadnych haseł. Każdy może ją odwiedzić.", "label-have-password": "Twoja strona jest chroniona hasłem. Jeśli masz kilka haseł, odwiedzający mogą uzyskać dostęp do Twojej witryny, wprowadzając dowolne z nich.", "option-password-name": "Hasło", "option-password-desc": "Hash Twojego hasła będzie bezpiecznie przechowywany. Po ustawieniu hasła nie można go ujawnić w postaci zwykłego tekstu.", "option-password-placeholder": "Twoje hasło", "option-nickname-name": "Nazwa użytkownika (opcjonalne)", "option-nickname-desc": "Ustaw nazwę użytkownika, aby zapamiętać, po co lub dla kogo jest hasło.", "action-add-password": "Dodaj to hasło", "label-untitled-password": "Hasło bez nazwy", "label-password-created-time": "Stworzono {{time}}", "msg-added-new-password": "Dodano nowe hasło.", "option-custom-domain": "Niestandardowa domena", "option-custom-domain-desc": "Używaj własnej domeny zamiast URL https://publish.obsidian.md/{site id}", "option-noindex": "Nie zezwalaj na indeksowanie w wyszukiwarkach", "option-noindex-desc": "Uniemożliwiaj wyszukiwarkom indeksowanie Twojej witryny.", "button-configure": "Konfiguruj", "label-configure-custom-domain": "Konfiguruj niestandardową domenę", "option-custom-url-name": "Niestandardowe URL", "option-custom-url-desc": "Adres URL, pod którym będzie znajdować się Twoja strona. ", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "Przekieruj do Twojej domeny niestandardowej", "option-custom-url-redirect-desc": "Przekieruj odwiedzających z publish.obsidian.md/id do Twojej domeny niestandardowej", "button-update-custom-domain": "Zaktualizuj ustawienia domeny", "label-custom-domain-instructions": "Aby uzyskać więcej informacji, zapoznaj się z {{link}} na naszej stronie wsparcia.", "label-custom-domain-link-name": "przewodnik po konfiguracji domeny niestandardowej", "label-site-usage": "Używasz {{site}} z {{limit}}.", "button-add-more-sites": "Kup więcej stron", "label-no-sites-bought": "Nie kupiłeś żadnej strony.", "button-get-site": "Zdobądź stronę", "label-manage-sharing": "Zarządzaj udostępnianiem dla \"{{name}}\"", "label-sharing-with-users": "Ta strona jest obecnie udostępniona następującym osobom.", "label-not-sharing": "Ta strona nie jest obecnie nikomu udostępniona.", "label-invite-pending": "Oczekuje", "tooltip-remove-user": "Usuń użytkownika", "option-invite-user": "Zaproś użytkownika", "placeholder-invite-user": "Wpisz ich email...", "error-email-must-be-valid": "Proszę, wprowadź właściwy adres email żeby kogoś zaprosić.", "msg-enable-publish-plugin": "Proszę, włącz plugin \"Publish\" żeby móc oglądać strony. (Ustawienia -> Wbudowane wtyczki)", "label-your-sites": "Twoje strony", "label-sites-shared-with-you": "Strony udostępnione Tobie", "tooltip-leave-site-sharing": "Przestań współpracować przy tej stronie", "label-leave-site-confirmation": "Potwierdź zaprzestanie współpracy przy tej stronie", "label-leave-site-confirmation-details": "Ta akcja usunie tą stronę z listy stron udostępnionych Tobie. Nie można cofnąć tej akcji.", "label-leave-site-confirmation-details-2": "Proszę, skontaktuj się z właścicielem tej strony, jeżeli chcesz ponownie przy niej współpracować.", "button-leave": "Opuść", "label-compare-with-live": "Porównaj z wersją na żywo", "button-use-live-version": "Używaj wersji na żywo", "label-confirm-override": "Potwierdź nadpisanie wersji lokalnej", "label-confirm-override-1": "Czy masz pewność, że chcesz nadpisać lokalną wersję?", "label-confirm-override-2": "Zostanie użyta wersja na żywo, a Twoja werska lokalna zostanie odrzucona. Proszę, stwórz kopie zapasowe jeżeli istnieje taka potrzeba.", "button-proceed": "Kontynuuj", "message-successfully-used-live-version": "Z powodzeniem użyto wersji na żywo żeby nadpisać Twoją lokalną wersję.", "label-open-file": "Otwórz plik", "tooltip-manage-publish-filters": "Zarządzaj filtrami publikacji", "option-included-folders": "Wybrane foldery", "option-included-folders-desc": "Pliki w tych folderach zostaną automatycznie wybrane, gdy będziesz robić przegląd zmian przed ich publikacją.", "option-currently-included-folders": " Aktualnie wybrano następujące foldery:", "option-excluded-folders": "Wyklucz foldery", "option-excluded-folders-desc": "Pliki w tych folderach nie będą zawarte, gdy będziesz robić przegląd zmian przed ich publikacją. Ta opcja ma priorytet nad folderami wybranymi powyżej.", "label-number-of-folders-included": "Obecnie do Obsidian Publish wybrane są foldery {{folders}}.", "label-number-of-folders-excluded": "Obecnie z Obsidian Publish wykluczone są foldery {{folders}}.", "label-manage-included-folders": "Zarządzaj wybranymi folderami", "label-manage-excluded-folders": "Zarządzaj wykluczonymi folderami", "label-add-included-folder": "Wybierz folder", "label-add-included-folder-desc": "Możesz wybrać zarówno istniejące foldery, jak i foldery które jeszcze nie zostały stworzone.", "tooltip-contact-support": "Skontaktuj się ze wsparciem (support)" }, "workspaces": { "name": "Obszary robocze", "desc": "Zapisz / wczytaj układ obszaru roboczego.", "action-load-layout": "Wczytaj układ obszaru roboczego", "action-manage-layouts": "Zarządzaj układami obszaru roboczego", "action-save-and-load-layout": "Zapisz i wczytaj układ obszaru roboczego", "placeholder-save-current-layout-as": "Zapisz obecny układ obszaru roboczego jako...", "button-save": "Zapisz", "button-load": "Wczytaj", "tooltip-delete-layout": "Usuń układ", "msg-delete-layout-success": "Pomyślnie usunięto układ.", "msg-enter-name": "Wybierz nazwę nowego układu.", "msg-save-layout-success": "Pomyślnie zapisano układ.", "label-no-layout-found": "Nie znaleziono zapisanego układu.", "placeholder-type-to-search-layouts": "Wpisz nazwę układu..." }, "sync": { "name": "Synchronizacja", "desc": "Synchronizuj swoje pliki przez Obsidian Sync.", "action-view-version-history": "Wyświetl historię wersji", "label-load-more": "Załaduj więcej", "label-show-diff": "Pokaż zmiany", "label-copy-to-clipboard": "Skopiuj do sejfu", "label-restore-this-version": "Przywróć tę wersję", "msg-already-latest-version": "Ta wersja jest już najnowszą wersją.", "msg-restored-version": "Pomyślnie przywrócono wersję z {{time}}", "label-file-deleted": "Ten plik został usunięty", "label-no-earlier-version": "Nie było wcześniejszych wersji tego pliku.", "label-empty-file": "Pusty", "label-setting-files": "Pliki konfiguracyjne", "label-deleted-files": "Usunięte pliki", "label-version-history": "Historia wersji", "label-click-to-see-history": "Kliknij na usunięty plik, aby zobaczyć jego historię.", "label-create-remote-vault": "Utwórz zdalny sejf", "msg-please-enter-password": "Wprowadź hasło.", "msg-vault-name-cannot-be-empty": "Nazwa sejfu nie może być pusta.", "msg-successfully-created-vault": "Pomyślnie utwórz zdalny sejf \"{{name}}\".", "label-remote-vault-explanation": "Zdalne sejfy bezpiecznie synchronizują sejf między urządzeniami.", "option-vault-name": "Nazwa sejfu", "option-vault-name-desc": "Pomaga zapamiętać, do czego służy ten sejf.", "option-vault-name-placeholder": "Mój wspaniały sejf", "option-use-custom-encryption-password": "Dostosuj hasło szyfrowania end-to-end", "option-use-custom-encryption-password-desc": "Jeśli to wyłączysz, będziemy bezpiecznie zarządzać kluczem szyfrowania.", "option-use-custom-encryption-password-desc-warning": "Tej opcji nie można później zmienić.", "option-encryption-password": "Hasło szyfrowania", "option-encryption-password-desc": "Tego hasła nie można później zmienić.", "option-encryption-password-desc-warning": "Jeśli zapomnisz tego hasła, wszelkie zdalne dane pozostaną bezużyteczne na zawsze.", "option-encryption-password-desc-2": "Nie ma to wpływu na Twoje lokalne dane.", "option-encryption-password-placeholder": "Twoje hasło", "label-enter-encryption-password": "Wprowadź hasło szyfrowania", "button-unlock-vault": "Odblokuj sejf", "msg-verified-password": "Pomyślnie zweryfikowano Twoje hasło.", "label-remote-vaults": "Twoje zdalne sejfy", "label-vault-created-time": "Stworzono {{time}}", "tooltip-delete-remote-vault": "Usuń", "tooltip-manage-sharing": "Zarządzaj udostępnianiem", "label-confirm-delete-remote-vault": "Potwierdź usunięcie sejfu", "label-confirm-delete-remote-vault-question": "Czy na pewno chcesz usunąć ten zdalny sejf?", "label-confirm-delete-remote-vault-result": "Wszystkie dane na naszym serwerze, w tym historia wersji, zostaną usunięte. Twoje lokalne pliki pozostaną nienaruszone.", "label-confirm-delete-remote-vault-warning": "To działanie jest trwałe i nieodwracalne.", "msg-remote-vault-deleted": "{{name}} zostało usunięte", "button-connect-to-remote-vault": "Połącz", "button-disconnect-from-remote-vault": "Rozłącz", "label-not-remote-vaults": "Nie masz żadnych zdalnych sejfów.", "button-create-new-remote-vault": "Stwórz nowy sejf", "label-sync-log": "Dziennik synchronizacji", "options-only-show-errors": "Tylko błędy", "options-only-show-errors-desc": "Pokaż tylko błędy i ukryj inne elementy dziennika.", "button-copy-sync-log": "Skopiuj dziennik synchronizacji", "msg-successfully-copied-sync-log": "Pomyślnie skopiowano dziennik synchronizacji.", "button-retry": "Ponów", "button-purchase-subscription": "Kup", "option-remote-vault": "Zdalny sejf", "button-choose-remote-vault": "Wybierz", "button-manage-remote-vault": "Zarządzaj", "option-remote-vault-desc-connected": "Obecnie połączono do zdalnego sejfu \"{{name}}\".", "option-remote-vault-desc-not-connected": "Obecnie nie połączono do żadnego zdalnego sejfu.", "option-sync-status": "Status synchronizacji", "option-sync-status-desc-paused": "Obsidian Sync jest obecnie wstrzymany.", "option-sync-status-desc-running": "Obsidian Sync jest aktualnie uruchomiony.", "option-device-name": "Nazwa urządzenia", "option-device-name-desc": "Ta nazwa będzie wyświetlana w dzienniku synchronizacji. Pozostaw puste, aby użyć nazwy domyślnej.", "button-resume": "Wznów", "button-pause": "Zatrzymaj", "option-view-deleted-files": "Usunięte pliki", "option-view-deleted-files-desc": "Zobacz i przywróć usunięte pliki.", "option-sync-log": "Działania synchronizacji", "option-sync-log-desc": "Wyświetl ostatnie działania synchronizacji do debugowania.", "button-view": "Wyświetl", "button-bulk-restore": "Masowe odzyskiwanie", "button-restore-selected-files": "Odzyskaj wybrany plik", "msg-restoring": "Odzyskiwanie...", "msg-restoring-complete": "`Odzyskiwanie zakończone: {{succeeded}} udanych i {{failed}} nieudanych.`", "option-over-size": "Rozmiar sejfu przekracza limit", "option-over-size-desc": "Twój sejf wynosi {{size}} z {{limit}}.", "msg-largest-files": "Zobacz największe pliki", "msg-largest-files-desc": "Są to pliki zdalne, które zajmują najwięcej miejsca. Po usunięciu załączników użyj przycisku opróżnienia, aby zwolnić miejsce w zdalnym sejfie.", "button-purge-remote": "Opróżnij", "tooltip-purge-remote": "Trwale opróżnij usunięte załączniki ze skarbca zdalnego, aby zaoszczędzić miejsce.", "msg-purge-complete": "Opróżnianie zakończone.", "option-prevent-sleep": "Zapobiegaj zasypianiu urządzenia", "option-prevent-sleep-desc": "Zapobiega przejściu urządzenia w tryb uśpienia, gdy trwa synchronizacja plików.", "option-selective-sync": "Selektywna synchronizacja", "option-excluded-folders": "Wykluczone foldery", "option-excluded-folder-desc": "Blokuj synchronizację niektórych folderów.", "option-currently-excluded-folders": " Te foldery są obecnie wykluczone:", "button-manage-excluded-folders": "Zarządzaj", "option-sync-image": "Synchronizuj obrazy", "option-sync-image-desc": "Synchronizuj pliki obrazów z tymi rozszerzeniami: {{extensions}}.", "option-sync-audio": "Synchronizuj audio", "option-sync-audio-desc": "Synchronizuj pliki audio z tymi rozszerzeniami: {{extensions}}.", "option-sync-video": "Synchronizuj wideo", "option-sync-video-desc": "Synchronizuj pliki wideo z tymi rozszerzeniami: {{extensions}}.", "option-sync-pdf": "Synchronizuj PDFy", "option-sync-pdf-desc": "Synchronizuj pliki PDF.", "option-sync-unsupported": "Synchronizuj wszystkie inne typy", "option-sync-unsupported-desc": "Synchronizuj nieobsługiwane typy plików.", "option-vault-config-sync": "Konfiguracja synchronizacji sejfu", "option-view-config-files": "Ustawienia historii wersjonowania", "option-view-config-files-desc": "Przeglądaj i odtwórz historię wersji plików konfiguracyjnych.", "option-sync-app": "Główne ustawienia", "option-sync-app-desc": "Włącz synchronizację ustawień edytora, plików i linków, niestandardowych skrótów klawiszowych itp.", "option-sync-appearance": "Ustawienia wyglądu", "option-sync-appearance-desc": "Synchronizuj ustawienia wyglądu, takie jak tryb ciemny, aktywny motyw i włączone snippety.", "option-sync-appearance-data": "Motywy i snippety", "option-sync-appearance-data-desc": "Synchronizuj pobrane motywy i fragmenty. To, czy są włączone, zależy od poprzedniego ustawienia.", "option-sync-hotkey": "Skróty klawiszowe", "option-sync-hotkey-desc": "Synchronizuj skróty klawiszowe.", "option-sync-core-plugin": "Aktywna lista wbudowanych wtyczek", "option-sync-core-plugin-desc": "Synchronizuj które wbudowane wtyczki są włączone.", "option-sync-core-plugin-data": "Ustawienia wbudowanych wtyczek", "option-sync-core-plugin-data-desc": "Synchronizuj ustawienia wbudowanych wtyczek.", "option-sync-community-plugin": "Aktywna lista wtyczek społeczności", "option-sync-community-plugin-desc": "Synchronizuj które wtyczki społeczności są włączone.", "option-sync-community-plugin-data": "Zainstalowane wtyczki społeczności.", "option-sync-community-plugin-data-desc": "Synchronizuj zainstalowane wtyczki społeczności (pliki .js, .css, i manifest.json) i ich ustawienia.", "label-sync-introduction": "Obsidian Sync to dodatkowa usługa synchronizacji Obsidian z szyfrowaniem end-to-end i historią wersji.", "label-account-required": "Aby rozpocząć synchronizację, zaloguj się lub utwórz nowe konto Obsidian.", "button-sign-up": "Zarejestruj się", "button-log-in": "Zaloguj się", "label-manage-excluded-folders": "Zarządzaj wykluczonymi folderami", "label-number-of-folders-excluded": "{{folders}} są obecnie wykluczone z synchronizacji.", "label-add-excluded-folder": "Wyklucz folder", "label-add-excluded-folder-desc": "Możesz wykluczyć zarówno istniejący folder lub folder, który jeszcze nie został utworzony.", "tooltip-remove-excluded-folder": "Usuń z listy wykluczeń", "label-setup-connection": "Ustaw połączenie", "label-now-connected-to-vault": "Jesteś teraz połączony z \"{{name}}\".", "button-start-syncing": "Zacznij synchronizację", "label-confirm-merge-vault": "Potwierdź scalanie sejfu", "msg-vault-has-notes": "Twój lokalny sejf posiada już jakieś notatki.", "msg-vault-merge-warning": "Jeśli podłączysz się do zdalnego sejfu \"{{name}}\", to twoje notatki w lokalnym sejfie zostaną scalone z notatkami z sejfu zdalnego. W przypadku wystąpienia konfliktów, zostaną wybrane najświeższe wersje notatek.", "tooltip-update-setting-on-all-devices": "Zaktualizuj proszę tę opcję i uruchom aplikacje ponownie na wszystkich urządzeniach, na których ma ona zostać wprowadzona.", "label-sharing-with-users": "Ten zdalny sejf jest obecnie dzielony z następującymi osobami.", "label-not-sharing": "Ten zdalny sejf nie jest obecnie z nikim dzielony.", "label-vaults-shared-with-you": "Sejfy udostępnione Tobie", "tooltip-leave-vault-sharing": "Przestań współpracować przy tym sejfie", "label-leave-vault-confirmation": "Potwierdź zaprzestanie ze współpracy przy tym sejfie", "label-leave-vault-confirmation-details": "To usunie ten sejf z listy sejfów Tobie udostępnionych. Tej akcji nie da się cofnąć.", "label-leave-vault-confirmation-details-2": "Proszę, skontaktuj się z właścicielem tego sejfu, jeżeli chcesz znów współpracować przy tym sejfie.", "button-leave": "Opuść", "label-require-subscription-to-connect": "Potrzebujesz subskrypcji Obsidian Sync, żeby połączyć się do tego sejfu.", "option-contact-support": "Kontakt ze wsparciem (support)", "option-contact-support-desc": "Jeżeli spotkają Cię jakiekolwiek problemy podczas używania Obsidian Sync, prosimy, skontaktuj się z nami w celu pomocy! Możesz skontaktować się z nami przez email support@obsidian.md.", "button-email-support": "Wsparcie email" }, "file-recovery": { "name": "Odzyskiwanie plików (recovery)", "desc": "Pozwala przywrócić ostatnie kopie, aby odzyskać dane po przypadkowej utracie. Kopie są zapisywane tylko dla plików Markdown.", "action-open": "Otwórz zapisane kopie zapasowe", "option-interval": "Czas pomiędzy kopiami zapasowymi", "option-interval-description": "Minimalny czas w minutach pomiędzy kolejnymi kopiami zapasowymi.", "option-keep": "Czas przechowywania historii", "option-keep-description": "Liczba dni, przez które przechowywana jest kopia zapasowa.", "option-open-history": "Kopie zapasowe", "option-open-history-description": "Przejrzyj i przywróć kopie zapasowe.", "button-view-snapshots": "Zobacz", "option-clear": "Wyczyść historię", "option-clear-description": "Usuń wszystkie kopie zapasowe.", "button-clear-history": "Usuń", "label-clear-warning": "Czy na pewno chcesz usunąć wszystkie kopie zapasowe? Uwaga: zostaną usunięte tylko kopie zapasowe, żadne pliki w twoim sejfie nie zostaną naruszone.", "msg-clear-complete": "Kopie zapasowe zostały usunięte.", "label-no-history-found": "Nie znaleziono kopii zapasowych.", "placeholder-choose-file": "Wybierz plik...", "label-select-file": "Proszę wybierz plik po lewej stronie żeby zobaczyć kopie zapasowe." }, "note-composer": { "name": "Kompozytor notatek", "desc": "Scal, dziel i refaktoryzuj notatki.", "option-confirm-file-merge": "Potwierdź scalenie pliku.", "option-confirm-file-merge-description": "Pytaj przed scaleniem dwóch plików.", "option-split-replacement-text": "Tekst po wyodrębnieniu", "option-split-replacement-text-description": "Co pokazać w miejscu zaznaczonego tekstu po jego wyodrębnieniu.", "option-choice-split-replacement-text-link": "Link do nowego pliku", "option-choice-split-replacement-text-embed": "Wewnętrzne osadzenie nowego pliku", "option-choice-split-replacement-text-none": "Nic", "option-template-file": "Lokalizacja pliku szablonu", "option-template-file-description": "Plik szablonu podczas scalenia lub wyodrębniania. Dostępne zmienne: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, np. {{date:YYYY-MM-DD}}.", "command-merge-file": "Scal bieżący plik z innym plikiem...", "action-merge-file": "Scal cały plik z...", "label-no-files": "Nie znaleziono plików.", "instruction-navigate": "aby nawigować", "instruction-merge": "aby scalić", "instruction-create-new": "aby stworzyć nowe", "instruction-merge-at-top": "aby scalić na górę", "instruction-dismiss": "aby anulować", "prompt-select-file-to-merge": "Wybierz plik w który scalić...", "label-merge-file": "Scal plik", "label-confirm-file-merge": "Jesteś pewien, że chcesz scalić \"{{file}}\" w \"{{destination}}\"? \"{{file}}\" zostanie usunięte.", "button-merge": "Scal", "button-merge-do-not-ask-again": "Scal i nie pytaj ponownie", "command-split-file": "Wyodrębnij aktualne zaznaczenie", "command-extract-heading": "Wyodrębnij ten nagłówek...", "instruction-append": "aby przesunąć na dół", "instruction-prepend": "aby przesunąć na górę", "msg-fail-to-fetch-template": "Nie udało się pobrać pliku szablonu: \"{{template}}\" nie znaleziony.", "msg-fail-to-find-heading": "Nie udało się znaleźć nagłówka" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} słów", "word-with-count_plural": "słowa: {{count}}", "character-with-count": "{{count}} znak", "character-with-count_plural": "znaki: {{count}}", "link-with-count": "{{count}} link", "link-with-count_plural": "{{count}} linków", "file-with-count": "{{count}} pliku", "file-with-count_plural": "{{count}} plikach", "folder-with-count": "{{count}} folder", "folder-with-count_plural": "{{count}} folderów", "backlink-with-count": "{{count}} link zwrotny", "backlink-with-count_plural": "linki zwrotne: {{count}}", "site-with-count": "{{count}} strona", "site-with-count_plural": "{{count}} stron", "plugin-with-count": "{{count}} wtyczka", "plugin-with-count_plural": "{{count}} wtyczek", "theme-with-count": "{{count}} motyw", "theme-with-count_plural": "{{count}} motywów" } }{ "setting": { "options": "Configurações", "plugin": "Plugin", "builtin-plugins": "Plugins nativos", "plugin-options": "Configurações de plugin", "folder-path-example-placeholder": "Exemplo: pasta 1/pasta 2", "file-path-example-placeholder": "Exemplo: pasta/nota", "msg-restart-required": "É preciso reiniciar para que estas mudanças façam efeito.", "editor": { "name": "Editor", "section-general": "Geral", "section-behavior": "Funcionamento", "section-display": "Exibição", "option-spellcheck": "Verificação ortográfica", "option-spellcheck-description": "Ativa a verificação ortográfica. Atualmente só funciona para o Inglês (EUA).", "spellcheck-languages": "Idiomas para verificação ortográfica", "spellcheck-languages-description": "Escolha os idiomas para o corretor ortográfico usar.", "spellcheck-languages-mac-description": "O corretor ortográfico nativo detectará automaticamente o idioma que está sendo usado para você no macOS.", "spellcheck-dict": "Dicionário de verificação ortográfica", "spellcheck-dict-empty": "O dicionário de verificação ortográfica está vazio.", "option-show-inline-title": "Mostrar título embutido", "option-show-inline-title-description": "Exibe o nome do arquivo como um título editável embutido ao conteúdo do arquivo.", "option-readable-line-length": "Margens de tamanho confortável", "option-readable-line-description": "Limita a largura máxima das margens de uma nota. Cabe menos conteúdo na tela, mas deixa os parágrafos mais legíveis.", "option-strict-line-break": "Quebra de linha estrita", "option-strict-line-break-description": "No modo de visualização, ignora quebras de linha únicas seguindo as especificações Markdown. Desative para que quebras de linha únicas sejam exibidas na visualização.", "option-show-frontmatter": "Mostrar pré-texto", "option-show-frontmatter-description": "No modo de visualização, mostra o pré-texto como um bloco de código. Desative para esconder a seção de pré-texto.", "option-auto-pair-brackets": "Criação em pares de parênteses", "option-auto-pair-brackets-description": "Cria parênteses e aspas em pares.", "option-auto-pair-markdown": "Criação em pares de sintaxe Markdown", "option-auto-pair-markdown-description": "Cria símbolos para negrito e itálico em pares.", "option-smart-indent-lists": "Listas com indentação inteligente", "option-smart-indent-lists-description": "Cuida da indentação e marcadores de lista para você.", "option-fold-heading": "Esconder seção", "option-fold-heading-description": "Permite que você esconda todo o conteúdo de uma seção.", "option-fold-indent": "Esconder indentação", "option-fold-indent-description": "Permite que você esconda uma parte sob a mesma indentação, como listas.", "option-default-new-tab-view": "Visualização padrão para novas abas", "option-default-new-tab-view-description": "A visualização padrão em que uma nova aba markdown é aberto.", "option-default-new-tab-view-editing": "Visualização de edição", "option-default-new-tab-view-reading": "Visualização de leitura", "option-default-editing-mode": "Modo de edição padrão", "option-default-editing-mode-description": "O modo de edição padrão com o qual um novo painel começará.", "option-default-editing-mode-source": "Modo de origem", "option-default-editing-mode-live-preview": "Visualização ao vivo", "option-show-line-number": "Mostrar o número da linha", "option-show-line-number-description": "Mostra os números das linhas.", "option-indentation-guide": "Mostrar guias de recuo", "option-indentation-guide-description": "Mostrar linhas de relacionamento verticais entre marcadores para orientação visual.", "option-use-tabs": "Usar tabulações", "option-use-tabs-description": "Usar tabulações para indentação quando a tecla \"Tab\" é pressionada. Desative para usar espaços.", "option-tab-size": "Tamanho da tabulação", "option-tab-size-description": "O número de espaços ao qual uma tabulação é equivalente.", "option-rtl": "Direita para esquerda (RTL)", "option-rtl-description": "Define a direção do texto das notas a serem exibidas da direita para a esquerda.", "option-auto-convert-html": "Conversor automático de HTML", "option-auto-convert-html-description": "Automaticamente converte HTML para Markdown quando colado ou arrastado de páginas web. Use Ctrl/Cmd+Shift+V para colar sem conversão.", "option-vim-key-bindings": "Atalhos de teclado Vim", "option-vim-key-bindings-description": "Permite utilizar atalhos Vim no editor.", "option-vim-key-bindings-mobile": "Em dispositivos móveis esta configuração é por dispositivo e não é sincronizada através do arquivo de configuração.", "option-emacsy-keys": "Teclas de aderência legado Emacs-style", "option-emacsy-keys-description": "Permite que você use as teclas de navegação adicional Emacs-style que são padrões no macOS mas podem interferir com algumas operações do teclado.", "label-confirm-enable-vim": "Confirme a ativação do modo Vim", "label-vim-warning": "O modo Vim é eficiente para edição de texto, mas não é o mais intuitivo. Se você nunca usou Vim e escolher essa opção, vai parecer que o Obsedian parou de funcionar.", "label-vim-test": "Para varificar que você sabe usar Vim, digite o comando para sair do Vim sem salvar:", "label-vim-your-answer": "Sua resposta", "placeholder-enter-command": "Digite um comando...", "button-confirm-enable-vim": "Ativar modo Vim", "msg-vim-mode-enabled": "Modo Vim ativado.", "msg-vim-mode-not-enabled": "Comando errado. Modo Vim desativado para sua proteção.", "msg-vim-mode-please-enter-command": "Use o comando para entrar no modo Vim.", "option-legacy-editor": "Usar o editor legado", "option-legacy-editor-description2": "O editor legado será descontinuado em breve. Atualmente ele não é mais mantido e, por isso, erros não serão mais resolvidos.", "label-legacy-deprecation": "O novo editor está aqui", "label-legacy-deprecation-1": "Obsidian agora tem um novíssimo editor que é mais robusto e acessível.", "label-legacy-deprecation-2": "Parece que você ainda está usando o editor legado e achamos que você vai gostar do novo editor.", "label-legacy-deprecation-choice": "Qual modo gostaria de usar?", "label-live-preview-description": "Uma experiência o-que-você-vê-é-o-que-você-tem mais moderna.", "label-source-mode-description": "Ver Markdown puro com sintaxe destacada.", "button-start-new-editor": "Iniciar novo editor" }, "file": { "name": "Arquivos & Links", "option-confirm-file-deletion": "Confirmar a exclusão de arquivos", "option-confirm-file-deletion-description": "Determine se você precisa confirmar para excluir arquivos.", "option-delete-destination": "Arquivos excluídos", "option-delete-destination-description": "Determine o que fazer com arquivos após os deletar.", "option-choice-system-trash": "Mover para a lixeira do sistema", "option-choice-vault-trash": "Mover para a lixeira do Obsidian (pasta .trash)", "option-choice-permanent-delete": "Excluir permanentemente", "option-always-update-links": "Sempre atualizar os links internos", "option-always-update-links-description": "Quando ativado, os links para um arquivo renomeado são atualizados automaticamente. Você não será solicitado a confirmar.", "option-new-note-location": "Local padrão para novas notas", "option-new-note-location-description": "Determine onde novas notas serão criadas. Configurações de plugin substituem essa.", "option-choice-vault-root": "Raiz do cofre", "option-choice-current-folder": "Na mesma pasta que o arquivo atual", "option-choice-specified-folder": "Na pasta especificada abaixo", "option-new-file-folder-path": "Pasta onde novas notas serão criadas", "option-new-file-folder-path-description": "Novas notas irão aparecer nessa pasta. Configurações de plugin substituem essa.", "option-use-wiki-links": "Usar [[Wikilinks]]", "option-use-wiki-links-description": "Gera automaticamente wikilinks para [[links]] e ![[imagens]] ao invés de links e imagens Markdown. Desative esta opção para gerar links Markdown.", "option-show-unsupported-files": "Detectar todas as extensões dos arquivos.", "option-show-unsupported-files-description": "Mostre arquivos com extensões, mesmo para arquivos que não possam ser abertos no Obsedian para que eu possa inserir links e abri-los no File Explorer e Quick Switcher.", "option-link-autocompleted-format": "Formato para links novos", "option-link-autocompleted-format-description": "Qual tipo de link será usado ao gerar links internos.", "option-choice-shortest-linktext": "Menor caminho possível", "option-choice-relative-path": "Caminho relativo do arquivo", "option-choice-absolute-path": "Caminho absoluto do arquivo", "option-new-attachment-location": "Pasta padrão para salvar novos arquivos", "option-new-attachment-location-description": "Onde novos arquivos serão salvos.", "option-choice-subdirectory": "Numa subpasta dentro da pasta em uso", "option-attachment-folder-path": "Local da pasta de anexos", "option-attachment-folder-path-description": "Arquivos de anexo recém-criados aparecerão aqui. Isso inclui imagens criadas por colagem, por arrastar e soltar, e gravações de áudio.", "option-attachment-subfolder-path": "Nome da subpasta", "option-attachment-subfolder-path-description": "Se seus arquivos estiverem em \"cofre/pasta\", e você nomear a sua subpasta \"anexos\", seus anexos serão salvos em \"cofre/pasta/anexos\".", "option-attachment-subfolder-path-placeholder": "anexos", "option-excluded-files": "Arquivos excluídos", "option-excluded-files-desc": "Os arquivos excluídos estarão ocultos ou menos perceptíveis em vários lugares como na Navegação Rápida, sugestões de link e Visualização em Gráfico.", "label-no-excluded-filters-applied": "Nenhum filtro de exclusão aplicado. Adicione um abaixo.", "label-excluded-filters-applied": "Os arquivos que correspondem aos seguintes filtros estão atualmente excluídos:", "label-excluded-filter": "Filtrar", "placeholder-excluded-filter": "Digite um caminho ou \"/regex/\"..." }, "appearance": { "name": "Aparência", "option-base-theme": "Tema base", "option-base-theme-description": "Escolha o esquema de cores padrão do Obsidian.", "option-accent-color": "Cor de destaque", "option-accent-color-description": "Escolha a cor de destaque usada em todo o app.", "dark-theme": "Escuro", "light-theme": "Claro", "system-theme": "Adaptar ao sistema", "option-font": "Fonte", "option-advanced": "Avançado", "option-interface-font": "Fonte da interface", "option-interface-font-description": "Definir fonte básica para todo o Obsidian.", "option-text-font": "Fonte do texto", "option-text-font-description": "Definir fonte para os modos de edição e leitura.", "option-monospace-font": "Fonte monoespaçada", "option-monospace-font-description": "Definir fonte para lugares como blocos de código e pré-texto.", "label-single-font-currently-in-effect": " Fonte atualmente aplicada: ", "label-multiple-fonts-currently-in-effect": " As seguintes fontes estão atualmente aplicadas:", "option-font-placeholder": "Digite o nome da fonte...", "label-no-custom-font-set": "Nenhuma fonte personalizada aplicada no momento. Adicione uma abaixo.", "label-font-applied": "A primeira fonte desta lista que estiver disponível no seu sistema será aplicada.", "msg-font-not-found": "Esta fonte não foi detectada no seu sistema.", "msg-font-found": "Esta fonte foi detectada no seu sistema.", "label-font-name": "Nome da fonte", "option-community-themes": "Veja os temas da comunidade", "option-community-themes-description": "Visualize e use os incríveis temas criados pela comunidade.", "button-browse-community-themes": "Procurar", "option-font-size": "Tamanho da fonte", "option-font-size-description": "Tamanho da fonte em pixels que afeta o editor e a pré-visualização", "option-font-size-action": "Ajuste rápido do tamanho da fonte", "option-font-size-action-description": "Ajuste o tamanho da fonte utilizando o Ctrl + Scroll, ou usando o movimento de pinça no trackpad", "option-themes": "Temas", "option-manage-themes-description": "Gerencie os temas instalados e navegue por temas da comunidade", "option-theme-button-manage": "Gerir", "option-choice-none": "Nenhum", "option-native-menus": "Menus nativos", "option-native-menus-desc": "Menus em todo o app corresponderão ao sistema operacional. Eles não serão afetados pelo seu tema.", "button-reload-themes": "Recarregar temas", "msg-reloaded-themes": "Temas CSS personalizados recarregados.", "button-open-themes-folder": "Abrir pasta de temas", "option-css-snippets": "Fragmentos CSS", "label-no-css-snippets-found": "Nenhum fragmento CSS encontrado na pasta de fragmentos.", "no-snippet-description": "Fragmentos CSS são guardados em \"{{path}}\".", "button-reload-snippets": "Recarregar fragmentos", "button-open-snippets-folder": "Abrir pasta de fragmentos", "msg-reloaded-snippets": "Fragmentos CSS recarregados.", "option-toggle-snippet-description": "Aplica fragmento CSS em \"{{path}}\".", "label-installed-themes": "Temas instalados", "label-screenshot-unavailable": "Captura de tela indisponível", "label-default-theme": "Padrão", "tooltip-click-to-enlarge": "Clique para ampliar", "button-update": "Atualizar", "label-currently-selected": "Selecionado", "option-frame-style": "Estilo do quadro da janela", "option-frame-description": "Determina o estilo da barra de título das janelas do Obsidian. Requer uma completa reinicialização para ter efeito.", "option-frame-hidden": "Escondido (padrão)", "option-frame-obsidian": "Quadro do Obsidian", "option-frame-native": "Quadro nativo", "option-configure-ribbon": "Menu", "option-configure-ribbon-desc": "Configure quais comandos aparecem no menu naquela barra de navegação.", "option-mobile-quick-ribbon-item": "Acesso rápido a item do menu", "option-mobile-quick-ribbon-item-desc": "Tocar em um item do menu de navegação irá ativar o item. Tocar e segurar ainda mostrará o menu.", "button-configure": "Configurar", "label-additional-ribbon-items": "Outros itens do menu", "label-modal-configuration": "Configuração da faixa de opções", "label-modal-configuration-desc": "Escolha quais itens você quer ativos na faixa de opções. Arraste e solte para alterar a ordem.", "option-show-view-header": "Mostrar a barra de título da aba", "option-show-view-header-desc": "Exibe o cabeçalho no topo de cada aba.", "msg-updates-found": "Encontrado {{count}} tema para atualizar.", "msg-updates-found_plural": "Encontrados {{count}} temas para atualizar.", "button-check-for-updates": "Verificar por atualizações", "button-view-updates": "Ver atualizações", "button-update-all-themes": "Atualizar tudo", "label-current-themes": "Temas da comunidade atuais", "label-currently-installed": "Você atualmente tem {{count}} tema instalado.", "label-currently-installed_plural": "Você atualmente tem {{count}} temas instalados." }, "hotkeys": { "name": "Atalhos", "prompt-filter": "Filtrar...", "tooltip-delete-hotkey": "Excluir atalho", "label-waiting-for-hotkey-press": "Pressione atalho...", "tooltip-restore-default": "Restaurar ao padrão", "tooltip-customize-command": "Personalizar esse comando", "tooltip-hotkey-single-conflict": "Esse atalho já foi usado com o comando \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "Esse atalho já é usado com {{count}} outros comandos", "label-blank-hotkey": "Vazio" }, "about": { "name": "Sobre", "label-commercial-license": "Licença comercial", "label-license-key": "Chave de licença", "license-key-placeholder": "Sua chave de licença...", "label-activate-license": "Ativar licença", "button-activate": "Ativar", "label-unknown-version": "Desconhecida", "label-current-version": "Versão atual: ", "label-install-version": "(Versão do instalador: {{version}})", "label-up-to-date": "Seu programa está atualizado!", "label-read-changelog": "Leia o que mudou.", "label-manual-update-required": "Para suportar os últimos recursos e receber as últimas atualizações de segurança, Obsidian precisa de uma atualização do instalador principal. Você precisa baixá-lo manualmente e reinstalar o Obsidian.", "label-download": "Download", "label-new-version-ready": "Uma nova versão está pronta para ser instalada. ", "label-relaunch-to-update": "Reiniciar o programa para atualizar.", "label-disabled-updates": "Atualizações estão desativadas.", "label-checking-for-updates": "Procurando por atualizações...", "button-relaunch": "Reiniciar", "button-check-for-updates": "Procurar por atualizações", "option-auto-update": "Atualizar automaticamente", "option-auto-update-description": "Desative esta opção para evitar que o aplicativo verifique se há atualizações.", "option-get-help": "Obter ajuda", "option-get-help-description": "Obter ajuda ao usar Obsidian.", "button-open": "Abrir", "option-language": "Idioma", "option-language-description": "Alterar o idioma de exibição.", "option-insider-build": "Receber compilações internas", "option-insider-build-description": "Atualiza automaticamente para compilações internas para experimentar novos recursos. Observe que essas compilações podem ser instáveis..", "option-advanced": "Avançado", "option-hw-acceleration": "Aceleração de Hardware", "option-hw-acceleration-description": "Ativa a Aceleração de Hardware, que usa sua GPU para deixar o Obsidian mais fluido.", "option-hw-acceleration-warning": "Se você desativar isso, a performance da aplicação vai ser severamente degradada", "option-config-location": "Sobrescrever pasta de configuração", "option-config-location-description": "Use uma pasta de configuração diferente da padrão. Deve começar com um ponto.", "option-config-location-warning": "A localização da pasta de configuração deve ser um nome de pasta válido que começa com um ponto.", "label-license": "Licença", "label-your-commercial-license-key": "Sua licença comercial é \"{{key}}\".", "label-commercial-license-info": "Registrado para \"{{company}}\" para {{seats}} usuários. Válido até {{expiry}}.", "label-validating-commercial-license": "Validando...", "label-invalid-commercial-license": "Licença inválida: ", "button-remove-commercial-license": "Remover", "option-catalyst": "Licença Catalyst", "option-catalyst-desc": "Você atualmente tem a licença Catalyst {{tier}}. Obrigado pelo seu apoio!", "option-catalyst-desc-no-license": "Você não tem uma licença Catalyst no momento. A licença Catalyst é uma doação feita apenas uma vez para apoiar o desenvolvimento do Obsidian.", "label-app": "App" }, "account": { "name": "Conta", "option-your-account": "Sua conta", "option-your-account-desc": "Você está atualmente conectado como {{name}} ({{email}}).", "option-your-account-desc-no-login": "Você não está conectado no momento. Uma conta só é necessária para o Obsidian Sync, Obsidian Publish, e o Catalyst insider builds.", "button-manage-settings": "Gerenciar configurações", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Licença comercial", "option-commercial-license-desc": "Se você usa o Obsidian para propósitos comerciais você pode precisar de uma licença comercial.", "button-purchase": "Comprar", "button-log-out": "Sair", "label-log-in": "Conectar", "label-sign-up": "Inscrever-se", "label-email": "E-mail", "placeholder-email": "Seu e-mail...", "label-password": "Senha", "placeholder-password": "Sua senha...", "button-login": "Entrar", "message-empty-email": "E-mail não pode estar vazio.", "message-invalid-email": "Este e-mail não é válido.", "message-empty-password": "Senha não pode estar vazia.", "message-login-failed": "Login falhou, Verifique se seu e-mail e senha estão corretos.", "label-no-account": "Não tem uma conta? ", "link-sign-up-now": "Crie uma conta agora" }, "core-plugin": { "plugin-list": "Lista de plugins", "option-search-plugin": "Procure plugins principais", "option-search-plugin-description": "Filtre os plugins por nome ou descrição.", "placeholder-search-plugin": "Procurar plugins..." }, "third-party-plugin": { "name": "Plugins não oficiais", "option-restricted-mode": "Modo restrito", "option-restricted-mode-description": "O Modo Restrito está desligado. Ligue-o para desativar os plugins da comunidade.", "button-turn-on": "Ligar", "option-browse-community-plugins": "Plugins da comunidade", "option-browse-community-plugins-description": "Procure e instale plugins não oficiais feitos pela nossa incrível comunidade.", "button-browse": "Procurar", "label-exit-restricted-mode": "Sair do Modo Restrito", "label-exit-restricted-mode-description-1": "Os plugins da comunidade, como qualquer outro software, podem potencialmente causar problemas de integridade dos dados e segurança.", "label-exit-restricted-mode-description-2": "A segurança do plugin é importante para nós. Eis o que fazemos:", "label-exit-restricted-mode-description-3": "Apesar de nossos esforços ainda há uma pequena chance de um plugin da comunidade se comportar mal.", "label-code-review": "Revisão inicial de código", "label-code-review-desc": "Plugins passam por uma revisão inicial de código feita pela nossa equipe antes de aparecerem na loja.", "label-open-source": "Código aberto", "label-open-source-desc": "A maioria dos plugins são de código aberto no GitHub e você pode inspecionar o código por si mesmo.", "label-peer-audit": "Auditoria de colegas", "label-peer-audit-desc": "Temos uma ampla comunidade de desenvolvedores que cuidam uns dos outros.", "label-report-mechanism": "Mecanismo de denúncia", "label-report-mechanism-desc": "Acompanhamos e removemos plugins defeituosos mediante denúncia do usuário.", "label-exit-restricted-mode-disable-confirmation": "Gostaria de sair do Modo Restrito para habilitar plugins da comunidade? Recomendamos fortemente fazer uma cópia de segurança dos seus dados antes de fazer isso.", "label-learn-more": "Aprenda mais sobre segurança de plugins", "button-turn-on-community-plugins": "Ligar os plugins da comunidade", "label-trust-author": "Você confia no autor deste cofre?", "label-trust-author-description-1": "Você está abrindo este cofre pela primeira vez e ele vem com alguns plugins.", "label-trust-author-description-2": "Se você obteve este cofre de outra pessoa, por favor, note que plugins de origem desconhecida podem trazer riscos à segurança.", "label-trust-author-description-3": "Se você não confia plenamente no autor deste cofre, recomendamos permanecer no Modo Restrito, assim os plugins neste cofre não serão executados.", "button-enable-plugins": "Confiar no autor e habilitar plugins", "button-dont-trust-author": "Navegar no cofre no Modo Restrito", "placeholder-community-plugins": "Procurar plugins da comunidade...", "msg-failed-load-plugins": "Falha ao carregar os plugins da comunidade.", "label-installed": "Instalado", "button-install": "Instalar", "button-enable": "Ativar", "button-disable": "Desativar", "button-copy-share-link": "Copiar link de compartilhamento", "button-donate": "Doar", "label-no-results-found": "Nenhum resultado encontrado.", "msg-failed-to-load-manifest": "Falha ao carregar a descrição do plugin.", "label-version": "Versão: {{version}}", "label-currently-installed-version": " (Instalado atualmente: {{version}})", "label-by-author": "Por ", "label-repository": "Repositório: ", "label-last-update": "Última atualização: ", "tooltip-view-last-update": "Ver a última atualização", "label-unsupported": "Esse plugin não é compatível com o seu dispositivo.", "button-update": "Atualizar", "label-no-readme": "Esse plugin não disponibilizou um arquivo README.", "msg-installing-plugin": "Instalando o plugin \"{{name}}\"...", "msg-failed-to-install-plugin": "Falha ao instalar o plugin \"{{name}}\".", "msg-successfully-installed-plugin": "O plugin \"{{name}}\" foi instalado com sucesso.", "label-installed-plugins": "Plugins instalados", "button-reload-plugins": "Recarregar plugins", "msg-reloaded-third-party-plugins": "Recarregar plugins não oficiais.", "label-uninstall": "Desinstalar", "label-uninstall-plugin": "Desinstalar plugin", "label-uninstall-plugin-confirmation": "Você tem certeza de que deseja desinstalar esse plugin? Isso deletará a pasta do plugin.", "button-open-plugins-folder": "Abrir pasta de plugins", "button-check-for-updates": "Verificar por atualizações", "button-update-all-plugins": "Atualizar todos", "label-current-plugins": "Plugins atuais", "label-currently-installed": "Atualmente você tem {{count}} plugin instalado.", "label-currently-installed_plural": "Atualmente você tem {{count}} plugins instalados.", "label-debug-startup-time": "Tempo de inicialização de depuração", "label-debug-startup-time-description": "Mostra uma mensagem com quanto tempo levou para iniciar cada plugin ao iniciar o app.", "msg-no-updates-found": "Nenhuma atualização de plugin encontrada.", "msg-updates-found": "Encontrada atualização para {{count}} plugin.", "msg-updates-found_plural": "Encontrada atualizações para {{count}} plugins.", "msg-update-plugin": "Atualizar para a versão {{version}}", "option-search-installed-plugin": "Procurar nos plugins instalados", "option-search-installed-plugin-description": "Filtrar plugins instalados por nome ou descrição.", "placeholder-search-installed-plugin": "Procurar plugins instalados...", "show-installed-only": "Mostrar apenas instalados", "label-donate-modal-title": "Doe para apoiar {{name}}", "label-donate-modal-text1": "Desenvolvedores de plugin são voluntários da comunidade que fazem coisas incríveis por amor. Se você achou esse plugin útil, por favor, considere financiar seu desenvolvimento.", "label-donate-modal-text2": "100% da sua contribuição irá para o desenvolvedor do plugin; Obsidian não pega uma parte. A plataforma de financiamento escolhida pode cobrar uma taxa.", "label-donate-modal-text3": "Obrigado por seu apoio generoso!", "label-support-this-plugin": "Apoiar este plugin:", "label-search-summary": "Mostrando {{pluginCount}}:", "label-by-popularity": "Mais baixados", "label-by-released": "Lançado recentemente", "label-by-updated": "Atualizado recentemente", "label-alphabetical": "Alfabética", "label-last-updated": "Atualizado {{time}}" }, "mobile-toolbar": { "name": "Barra de ferramentas móvel", "option-configure-quick-action": "Configurar Ação Rápida móvel", "option-configure-quick-action-description": "Configure qual comando acionar quando puxar de cima para baixo. O comando atualmente configurado é \"{{command}}\".", "button-configure": "Configurar", "placeholder-select-quick-action": "Selecionar Ação Rápida...", "manage-toolbar-options": "Gerenciar opções da barra de ferramentas", "option-internal-link": "Adicionar link interno", "option-internal-embed": "Adicionar incorporação", "option-tag": "Adicionar etiqueta", "option-heading": "Alternar cabeçalho", "option-strikethrough": "Alternar riscado", "option-highlight": "Alternar destaque", "option-code": "Alternar código", "option-blockquote": "Alternar citação", "option-markdown-link": "Adicionar link Markdown", "option-bullet-list": "Alternar lista com marcadores", "option-numbered-list": "Alternar lista numerada", "option-indent-list": "Indentar item da lista", "option-unindent-list": "Desindentar item da lista", "option-undo": "Desfazer", "option-redo": "Refazer", "option-move-caret-up": "Mover o cursor para cima", "option-move-caret-down": "Mover o cursor para baixo", "option-move-caret-left": "Mover o cursor para a esquerda", "option-move-caret-right": "Mover o cursor para a direita", "option-first-line": "Ir para a primeira linha", "option-last-line": "Ir para a última linha", "option-toggle-keyboard": "Alternar teclado", "option-configure-toolbar": "Configurar a barra de ferramentas móvel", "option-added-options": "Opções adicionadas", "option-more-toolbar-options": "Mais opções da barra de ferramentas", "option-attach": "Inserir anexo", "option-add-command": "Adicionar comando global", "option-add-command-description": "Selecione qualquer comando global para adicionar à barra de ferramentas." } }, "editor": { "search": { "placeholder-find": "Pesquisar", "placeholder-replace": "Substituir", "label-previous": "Anterior", "label-next": "Próximo", "label-all": "Tudo", "label-exit-search": "Sair da pesquisa", "label-replace": "Substituir", "label-replace-all": "Substituir tudo" }, "link-suggestion": { "label-type-hash": "Digite #", "label-link-heading": "para criar link com a seção", "label-type-block": "Digite ^", "label-link-block": "para criar link com o bloco", "label-type-pipe": "Digite |", "label-change-display-text": "para alterar o texto de exibição", "label-no-match-found": "Nada encontrado" }, "spellcheck": { "no-suggestion": "Sem sugestões...", "add-to-dictionary": "Adicionar ao dicionário" }, "menu": { "edit-link": "Editar link" }, "heading-suggestion": { "label-no-heading": "Sem cabeçalho", "label-heading-level": "Cabeçalho {{level}}" }, "print-modal": { "title": "Exportar para PDF", "caption": "Exporta \"{{filename}}\" para um arquivo PDF de acordo com as configurações abaixo.", "setting-page-size": "Tamanho da página", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Ofício", "setting-page-size-letter": "Carta", "setting-page-size-tabloid": "Tabloide", "setting-include-file-name": "Incluir nome do arquivo como título", "setting-landscape": "Retrato", "setting-margin": "Margem", "setting-margin-default": "Padrão", "setting-margin-minimal": "Mínima", "setting-margin-none": "Nenhuma", "setting-downscale-percent": "Porcentagem de redução em escala", "button-export-to-pdf": "Exportar para PDF" }, "link-popover": { "tooltip-follow-link": "Seguir link", "tooltip-open-link": "Abrir link", "tooltip-search-tag": "Localizar etiqueta" } }, "interface": { "embed-cannot-find": "Não encontrado:", "embed-open-in-default-app-tooltip": "Abrir com o aplicativo padrão", "empty-sidebar": "A barra lateral está vazia, tente arrastar um painel aqui.", "sidebar-expand": "Expandir", "sidebar-collapse": "Recolher", "msg-fail-to-save-file": "Falha ao salvar o arquivo \"{{filepath}}\". {{message}}.", "no-file": "Nenhum arquivo", "msg-file-changed": "Arquivo \"{{file}}\" foi modificado externamente, mesclando mudanças automaticamente.", "switch-vault": "Abrir outro cofre", "help": "Ajuda", "settings": "Configurações", "drag-to-rearrange": "Arraste para reorganizar", "msg-switched-to-read": "Visualização padrão alterada para visualização de leitura.", "msg-switched-to-edit": "Modo de visualização padrão alterado para edição.", "msg-upgrade-installer": "Para usar este recurso, instale novamente com o instalador mais recente disponível em nosso site.", "tooltip-restore-default-settings": "Restaurar configurações padrão", "label-copy": "Copiar para a área de transferência", "copied_generic": "Copiado para a área de transferência", "copied": "{{item}} copiado para a área de transferência", "url": "Url", "msg-open-file-through-uri": "Arquivo aberto \"{{path}}\"", "msg-file-not-found-through-uri": "Arquivo \"{{name}}\" não encontrado.", "delete-action-short-name": "Deletar", "msg-indexing": "Obsidian está indexando seu cofre...\nIsso só acontecerá uma vez.\nAlgumas funcionalidades não estarão disponíveis até isto que esteja completo.", "msg-indexing-complete": "Indexação completa.", "msg-sandbox-vault": "Este é um cofre sandbox.\nAs mudanças que você fizer neste cofre serão perdidas.", "label-enter-to-create": "Clique enter para criar", "label-update-available": "Atualização Disponível", "label-debug-info": "Informações de depuração", "button-learn-more": "Aprenda mais", "button-not-now": "Agora não", "button-add": "Adicionar", "button-manage": "Gerenciar", "label-new-tab": "Nova aba", "msg-tab-busy": "Esta aba está atualmente ocupada, por favor tente novamente mais tarde", "empty-state": { "no-file-open": "Nenhum arquivo está aberto", "create-new-file": "Criar novo arquivo", "go-to-file": "Ir para o arquivo", "see-recent-files": "Ver arquivos recentes", "close": "Fechar", "unknown-pane-title": "Plugin não está mais ativo", "unknown-pane-desc": "O plugin que criou este painel ({{type}}) não existe mais" }, "menu": { "edit-view": "Editar (Ctrl/Cmd+Click para editar em um novo painel)", "read-view": "Visualização atual: leitura", "switch-to-edit-view": "Clique para editar", "switch-to-read-view": "Clique para visualizar", "mod-click-open-new-tab": "{{key}}+Clique para abrir em um novo painel", "find": "Encontrar...", "replace": "Substituir...", "edit": "Editar", "preview": "Visualizar", "more-options": "Mais opções", "close": "Fechar", "close-others": "Fechar as outras", "close-right": "Fechar as abas à direita", "pin": "Fixar", "unpin": "Desafixar", "unlink-tab": "Desvincular aba", "link-tab": "Vincular aba...", "toggle-source-mode": "Modo de origem", "toggle-reading-view": "Visualização de leitura", "delete-file": "Deletar arquivo", "create-file": "Criar este arquivo", "open-link": "Abrir link", "open-in-new-tab": "Abrir em uma nova aba", "open-to-the-right": "Abrir para a direita", "copy-url": "Copiar url", "close-current-tab": "Fechar aba atual", "copy": "Copiar", "cut": "Cortar", "paste": "Colar", "paste-as-plain-text": "Colar como texto simples", "select-all": "Selecionar tudo", "rename-heading": "Renomear esta seção...", "rename-blockid": "Renomear a identificação deste bloco...", "open-in-new-window": "Abrir em uma nova janela", "move-to-new-window": "Mover para uma nova janela", "open-in-browser": "Abrir no navegador", "stack-tabs": "Empilhar abas", "unstack-tabs": "Desempilhar abas" }, "tooltip": { "click-to-expand": "Clique para expandir", "click-to-collapse": "Clique para recolher", "alias": "Apelido", "not-created-yet": "Não foi criado ainda, selecione para criar" }, "start-screen": { "label-version": "Versão", "option-open-folder-as-vault": "Abrir pasta como um cofre", "option-open-folder-as-vault-description": "Abra uma pasta existente com arquivos Markdown.", "option-create-vault": "Criar um novo cofre", "option-create-vault-description": "Cria um novo cofre do Obsidian dentro de uma pasta.", "option-connect-obsidian-sync": "Conectar ao Obsidian Sync", "option-connect-obsidian-sync-description": "Configurar um cofre sincronizado com um cofre remoto existente.", "option-new-vault-name": "Nome do cofre", "option-new-vault-name-description": "Escolha um nome para o seu incrível cofre.", "option-new-vault-location": "Destinação", "option-new-vault-location-description": "Escolha um lugar para armazenar o seu novo cofre.", "label-new-vault-location-preview": "Seu novo cofre será colocado em: ", "option-reveal-vault-in-explorer": "Revelar cofre no explorador de arquivos", "option-reveal-vault-in-explorer-mac": "Revelar cofre no Finder", "option-rename-vault": "Renomear cofre...", "msg-error-rename-exists": "Já existe um cofre com este nome.", "msg-error-nested": "Não é possível mover um cofre para uma sub-pasta de si mesmo.", "msg-error-rename-open": "Não é possível renomear um cofre atualmente aberto.", "msg-rename-failed": "Falhou ao renomear cofre.", "msg-rename-success": "Cofre renomeado com sucesso.", "option-move-vault": "Mover cofre...", "msg-move-select-dest": "Selecionar pasta de destino", "msg-error-move-exists": "Já existe um cofre neste destino.", "msg-error-move-open": "Não é possível mover um cofre atualmente aberto.", "msg-move-failed": "Falhou ao mover o cofre.", "msg-move-success": "Cofre movido com sucesso.", "option-remove": "Remover da lista", "button-quick-start": "Início rápido", "button-open": "Abrir", "button-browse": "Selecionar", "button-connect": "Conectar", "button-create-vault": "Criar", "button-back": "Voltar", "msg-empty-vault-name": "O cofre precisa ser nomeado.", "msg-invalid-folder": "Selecione uma pasta válida.", "msg-failed-to-create-vault": "Falha ao criar cofre.", "msg-failed-to-create-vault-at-location": "Não foi possível criar um cofre no local selecionado. Verifique o local e possíveis permissões.", "msg-error-failed-to-open-vault": "Falha ao abrir.", "msg-error-remove-current-open-vault": "Não é possível remover um cofre aberto.", "option-get-help": "Obter ajuda", "option-user-email": "E-mail", "placeholder-your-email": "Seu e-mail...", "option-user-password": "Senha", "placeholder-your-password": "Sua senha...", "button-sign-in": "Entrar", "button-setup": "Configurar", "option-connect-vault-desc": "Criar um cofre sincronizado neste dispositivo.", "tooltip-own-vault": "Este é um cofre remoto que pertence a você.", "tooltip-shared-vault": "Este é um cofre remoto compartilhado com você." }, "drag-and-drop": { "insert-link-here": "Inserir link aqui", "insert-links-here": "Inserir links aqui", "move-into-folder": "Mover para \"{{folder}}\"", "star-this-file": "Favoritar este arquivo", "star-these-files": "Favoritar estes arquivos", "open-in-this-tab": "Abrir nesta aba", "open-as-tab": "Abrir em uma nova aba" }, "window": { "maximize": "Maximizar", "minimize": "Minimizar", "restore-down": "Restaurar para baixo", "close-window": "Fechar janela", "go-back": "Voltar", "go-forward": "Próximo" }, "start-up": { "loading-obsidian": "Carregando Obsidian...", "obsidian-load-error": "Um erro ocorreu durante o carregamento do Obsidian.", "button-reload-app": "Recarregar o aplicativo", "button-reload-app-in-safe-mode": "Recarregar o aplicativo no modo de segurança", "button-open-another-vault": "Abrir outro cofre", "loading-components": "Carregando componentes...", "loading-plugins": "Carregando plugins...", "loading-vault": "Carregando cofre...", "msg-failed-to-load-vault": "Falha ao carregar cofre: ", "loading-cache": "Carregando cache...", "loading-workspace": "Carregando área de trabalho..." }, "mobile": { "action-import": "Importar para o cofre", "action-choose-file-to-insert": "Escolha um arquivo para inserir", "action-insert-text-into-file": "Inserir texto em {{filename}}", "action-insert-link-into-file": "Inserir link em {{filename}}", "msg-importing": "Importando...", "msg-import-success": "Importado com sucesso", "msg-failed-to-import-file": "Falha ao importar o arquivo {{filename}}", "msg-back-again-to-exit": "Pressione voltar novamente para sair." }, "help-screen": { "label-official-help-site": "Site oficial de ajuda", "label-official-help-site-desc": "Leia a documentação de ajuda oficial do Obsidian, disponível em vários idiomas.", "action-visit": "Visitar", "label-discord-chat": "Chat no Discord", "label-discord-chat-desc": "O Discord é o melhor lugar para conversar com outros usuários experientes do Obsidian de todo o mundo.", "action-join": "Juntar-se", "label-forum": "Fórum Oficial", "label-forum-desc": "Ajudem uns aos outros, poste solicitações de recursos, relate erros e tenha uma discussão profunda sobre gerenciamento de conhecimento.", "label-sandbox-vault": "Cofre sandbox", "label-sandbox-vault-desc": "Brinque e experimente os vários recursos. Lembre-se que suas mudanças não serão salvas." } }, "commands": { "save-file": "Salvar o arquivo atual", "follow-cursor-link": "Seguir o link", "open-cursor-link-in-new-tab": "Abrir o link no cursor em uma nova aba", "open-cursor-link-to-the-right": "Abrir o link no cursor à direita", "open-cursor-link-in-new-window": "Abrir o link no cursor em uma nova janela", "navigate-tab-above": "Focar no grupo de abas acima", "navigate-tab-below": "Focar no grupo de abas abaixo", "navigate-tab-left": "Focar no grupo de abas à esquerda", "navigate-tab-right": "Focar no grupo de abas à direita", "toggle-pin": "Alternar fixação", "split-right": "Dividir para a direita", "split-down": "Dividir para baixo", "toggle-stacked-tabs": "Alternar abas empilhadas", "navigate-back": "Voltar", "navigate-forward": "Avançar", "use-dark-mode": "Usar modo escuro", "use-light-mode": "Usar modo claro", "change-theme": "Alterar tema", "search-current-file": "Localizar no arquivo atual", "search-replace-current-file": "Localizar e substituir no arquivo atual", "open-settings": "Abrir configurações", "open-help": "Abrir ajuda", "toggle-edit": "Alternar visualização de edição/leitura", "toggle-source-mode": "Alternar Visualização ao vivo/Modo de origem", "delete-current-file": "Excluir o arquivo atual", "new-tab": "Nova aba", "close-all-tabs": "Fechar todas as abas", "close-active-tab": "Fechar aba atual", "close-other-tabs": "Fechar todas as outras abas", "toggle-left-sidebar": "Ativar barra lateral à esquerda", "toggle-right-sidebar": "Ativar barra lateral à direita", "toggle-default-new-tab-mode": "Alternar modo padrão para novas abas", "focus-editor": "Focar no editor", "toggle-fold": "Alternar expansão na linha atual", "fold-all": "Esconder todas as seções e listas", "unfold-all": "Expandir todas as seções e listas", "fold-more": "Esconder mais", "fold-less": "Esconder menos", "swap-line-up": "Mover linha para cima", "swap-line-down": "Mover linha para baixo", "remove-heading": "Remover cabeçalho", "toggle-heading": "Definir como cabeçalho {{level}}", "toggle-bold": "Alternar negrito para a seleção", "toggle-italics": "Alternar itálico para a seleção", "toggle-highlight": "Alternar destaque para a seleção", "toggle-comments": "Alternar comentários para seleção", "insert-link": "Inserir link", "toggle-spellcheck": "Alternar verificação ortográfica", "delete-paragraph": "Deletar parágrafo", "toggle-checklist": "Alternar status da caixa de marcação", "cycle-list-checklist": "Alternar marcador/caixa de seleção", "insert-callout": "Inserir frase de destaque", "edit-file-title": "Editar título do arquivo", "copy-path": "Copiar caminho do arquivo", "copy-url": "Copiar url do Obsidian", "export-pdf": "Exportar para PDF", "reload": "Recarregar o app sem salvar", "undo-close-tab": "Desfazer aba fechada", "context-menu": "Mostrar o menu de contexto no cursor", "show-debug-info": "Mostrar informações de depuração", "always-on-top": "Alternar janela sempre no topo", "zoom-in": "Aumentar zoom", "zoom-out": "Diminuir Zoom", "reset-zoom": "Redefinir zoom", "toggle-preview": "Alternar modo de visualização", "move-to-new-window": "Mover painel atual para uma nova janela", "open-in-new-window": "Abrir painel atual em uma nova janela", "rename-current-file": "Renomear o arquivo atual" }, "dialogue": { "label-link-affected": "Isto irá afetar {{links}} em {{files}}.", "msg-updated-links": "{{links}} atualizados em {{files}}.", "label-update-links": "Atualizar links", "label-confirm-update-link-to-file": "Você quer atualizar os links deste arquivo com os demais?", "button-always-update": "Sempre atualizar", "button-just-once": "Apenas uma vez", "button-do-not-update": "Não atualizar", "label-confirm-deletion": "Você tem certeza que deseja excluir \"{{filename}}\"?", "label-move-to-system-trash": "Ele será movido para a lixeira do seu sistema.", "label-move-to-vault-trash": "Ele será movido para a lixeira do Obsidian, que fica localizada na pasta escondida \".trash\" no seu cofre.", "label-permanent-delete": "O arquivo será permanentemente excluído.", "label-non-empty-folder": "Esta pasta não está vazia.", "label-delete-folder-warning": "Caso continue, os arquivos dentro desta pasta serão excluídos.", "label-delete-folder": "Excluir pasta", "button-delete": "Excluir", "button-delete-do-not-ask-again": "Excluir e não perguntar novamente", "label-do-not-ask-again": "Não perguntar novamente", "label-existing-backlink": "Atualmente há {{links}} direcionando a esta nota.", "label-existing-backlink_plural": "Atualmente há {{links}} direcionando a esta nota.", "label-delete-file": "Excluir arquivo", "button-manage": "Gerenciar", "button-cancel": "Cancelar", "button-done": "Pronto", "button-save": "Salvar", "button-stop": "Parar", "button-continue": "Continuar", "preparing-pdf": "Preparando o PDF...", "label-rename-file": "Renomear arquivo", "label-new-name": "Novo nome", "msg-rename-success": "Arquivo renomeado com sucesso.", "label-rename-heading": "Renomear cabeçalho", "label-rename-blockid": "Renomear ID do bloco" }, "menu-items": { "new-file": "Criar Nota", "new-file-to-the-right": "Nova Nota à Direita", "new-window": "Nova Janela", "open-switcher": "Abrir Rapidamente...", "open-vault": "Abrir Cofre...", "close-tab": "Fechar aba", "close-window": "Fechar Janela", "find": "Pesquisar", "replace": "Substituir", "insert-callout": "Frase de Destaque", "insert-markdown-link": "Link Markdown", "insert-wikilink": "Link", "set-heading": "Cabeçalho {{level}}", "no-heading": "Sem cabeçalho", "insert-quote": "Citação", "export-pdf": "Exportar para PDF", "toggle-bullet-list": "Lista com Marcadores", "toggle-numbered-list": "Lista Numerada", "toggle-checklist": "Lista de Tarefas", "toggle-bold": "Negrito", "toggle-code": "Código", "toggle-comment": "Comentar", "toggle-italics": "Itálico", "toggle-highlight": "Destaque", "toggle-strikethrough": "Taxado", "toggle-comments": "Comentários", "fold-all": "Esconder Tudo", "unfold-all": "Revelar Tudo", "fold-more": "Esconder Mais", "fold-less": "Esconder Menos", "source-mode": "Modo de Origem", "reading-view": "Visualização de Leitura", "show-debug-info": "Mostrar Informações de Depuração", "navigate-back": "Navegar para trás", "navigate-forward": "Navegar para frente", "toggle-left-sidebar": "Alternar Barra Lateral Esquerda", "toggle-right-sidebar": "Alterna Barra Lateral Direita", "split-right": "Dividir para a direita", "split-down": "Dividir para baixo", "release-notes": "Notas de Lançamento" }, "plugins": { "name": "Plugins", "file-explorer": { "name": "Explorador de arquivos", "desc": "Veja todos os arquivos do seu cofre.", "action-open": "Abrir explorador de arquivos", "action-show": "Mostrar explorador de arquivos", "action-create-note": "Criar nova nota", "action-create-note-to-the-right": "Criar nota à direita", "action-collapse-all": "Recolher tudo", "action-expand-all": "Expandir tudo", "action-new-note": "Nova nota", "action-new-folder": "Nova pasta", "action-change-sort": "Mudar ordenação", "action-reveal-file": "Mostrar arquivo no explorador de arquivos", "action-reveal-active-file": "Mostrar arquivo atual no explorador de arquivos", "command-move-file": "Mover arquivo para outra pasta", "action-move-file": "Mover arquivo para...", "action-move-folder": "Mover pasta para...", "action-move-items": "Mover {{count}} items para...", "prompt-type-folder": "Digite uma pasta", "label-no-folders": "Nenhuma pasta encontrada.", "instruction-navigate": "para navegar", "instruction-move": "para mover", "instruction-dismiss": "para dispensar", "label-sort-a-to-z": "Ordenar por nome (A - Z)", "label-sort-z-to-a": "Ordenar por nome (Z - A)", "label-sort-new-to-old": "Ordenar por última edição (recentes-antigas)", "label-sort-old-to-new": "Ordenar por última edição (antigas-recentes)", "label-sort-created-old-to-new": "Tempo de criação (antigos-recentes)", "label-sort-created-new-to-old": "Tempo de criação (recentes-antigos)", "menu-opt-new-note": "Nova nota", "menu-opt-new-folder": "Nova pasta", "menu-opt-set-attachment-folder": "Definir como pasta de anexos", "menu-opt-rename": "Renomear", "menu-opt-delete": "Deletar", "menu-opt-make-copy": "Fazer uma cópia", "msg-invalid-characters": "O nome do arquivo não pode conter nenhum desses caracteres: ", "msg-unsafe-characters": "Links não funcionarão com nomes de arquivos contendo os seguinte carateres: ", "msg-file-already-exists": "Já existe um arquivo com este nome", "msg-empty-file-name": "O nome do arquivo não pode estar em branco.", "msg-bad-dotfile": "O nome do arquivo não deve iniciar com um ponto.", "tooltip-modified-time": "Modificado pela última vez em {{time}}", "tooltip-created-time": "Criado em {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Mover", "label-untitled-file": "Sem título", "label-untitled-folder": "Sem título", "msg-set-attachment-folder": "A partir de agora, anexos serão salvos em \"{{path}}\"." }, "search": { "name": "Procurar", "desc": "Procure por palavras-chave em todas as suas notas.", "action-open-search": "Procurar em todos os arquivos", "label-collapse-results": "Esconder resultados", "label-match-case": "Correspondência", "label-explain-search-term": "Explicar termos de pesquisa", "label-more-context": "Mostrar o contexto", "prompt-start-search": "Digite para pesquisar...", "label-match-text": "Resultados encontrados: ", "label-match-regex": "Regex encontrado: ", "label-match-exact-text": "Contém o texto exato: ", "label-match-all": "Todos os resultados de: ", "label-match-any": "Qualquer resultado de: ", "label-excluding": "Ignorando: ", "label-case-sensitive": "Diferencia letras maiúsculas de minúsculas", "label-case-insensitive": "Não diferencia maiúsculas de minúsculas", "label-match-file-path": "Pesquisar pelo caminho do arquivo: ", "label-match-file-name": "Pesquisar pelo nome do arquivo: ", "label-match-content": "Pesquisar pelo conteúdo do arquivo: ", "label-match-task": "Corresponder tarefa: ", "label-match-task-todo": "Corresponder tarefa (a fazer): ", "label-match-task-done": "Corresponder tarefa (feito): ", "label-match-line": "Corresponder linha: ", "label-match-block": "Corresponder bloco: ", "label-match-section": "Corresponder seção: ", "label-match-tag": "Pesquisar por etiqueta: ", "label-no-matches": "Nada foi encontrado.", "matches-with-count": "... e mais {{count}} correspondência.", "matches-with-count_plural": "... e mais {{count}} correspondências.", "label-copy-search-results": "Copiar resultados da pesquisa", "button-copy-results": "Copiar resultados", "msg-successfully-copied": "Resultados copiados para a área de transferência.", "option-show-path": "Mostrar caminho", "option-show-path-description": "Mostrar caminho completo do arquivo ao invés de apenas seu nome.", "option-link-style": "Estilo de Link", "option-link-style-description": "Opcionalmente, torna cada resultado de pesquisa em um link.", "option-choice-link-style-none": "Nenhum", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Link Markdown", "option-list-prefix": "Prefixo de lista", "option-list-prefix-description": "Opcionalmente, adiciona um prefixo de lista para cada resultado de pesquisa.", "option-choice-list-style-none": "Nenhum", "option-choice-list-style-dash": "Traço (-)", "option-choice-list-style-asterisk": "Asterisco (*)", "option-choice-list-style-numbered": "Numerada", "tooltip-clear-search": "Limpar pesquisa", "label-search-options": "Opções de busca", "tooltip-read-more": "Ler mais", "label-history": "Histórico", "tooltip-clear-history": "Apagar histórico de pesquisa", "label-path-option-description": "corresponder caminho do arquivo", "label-file-name-option-description": "corresponder nome do arquivo", "label-tag-option-description": "buscar tags", "label-line-option-description": "pesquisar palavras-chave mesma linha", "label-section-option-description": "pesquisar palavras-chave sob o mesmo título", "menu-opt-search-for": "Buscar por \"{{keyword}}\"" }, "quick-switcher": { "name": "Navegação rápida", "desc": "Vá para qualquer arquivo sem sair do teclado. Ctrl/Cmd+O para ativar.", "short-name": "Switcher", "action-open": "Abrir a troca rápida", "instruction-navigate": "para navegar", "instruction-open": "para abrir", "instruction-open-in-new-tab": "para abrir em uma nova aba", "instruction-open-to-the-right": "para abrir à direita", "instruction-create": "para criar", "instruction-dismiss": "para dispensar", "label-no-note-create-new": "Nenhuma nota encontrada. Pressione Enter para criar uma nova", "prompt-type-file-name": "Digite o nome de um arquivo para alternar ou criar...", "label-enter-to-create": "Enter para criar", "tooltip-not-created-yet": "Ainda não criado, selecione para criar", "option-show-existing-only": "Mostrar apenas existentes", "option-show-existing-only-description": "Se deve mostrar links para arquivos que ainda não foram criados.", "option-show-attachments": "Mostrar anexos", "option-show-attachments-desc": "Mostra arquivos de anexo como imagens, vídeos e PDFs.", "option-show-all-file-types": "Mostrar todos os tipos de arquivos", "option-show-all-file-types-desc": "Mostrar todos os arquivos incluindo aqueles que o Obsidian não pode abrir. O arquivo será aberto com o app padrão para o tipo de arquivo." }, "graph-view": { "name": "Visualização em gráfico", "desc": "Veja um gráfico do panorama dos vínculos entre as notas.", "action-open": "Abrir visualização em gráfico", "action-open-local": "Abrir gráfico local", "action-copy-screenshot": "Copiar captura de tela", "tab-title": "Gráfico de {{displayText}}", "label-filters": "Filtros", "prompt-filter-nodes": "Procurar arquivos...", "option-depth": "Profundidade", "option-depth-description": "Mostrar nódulos a esse número de links de distância", "option-neighbor-links": "Links vizinhos", "option-neighbor-links-description": "Mostrar links entre vizinhos.", "option-forelinks": "Links de saída", "option-forelinks-description": "Mostrar links para outros arquivos", "option-backlinks": "Links de entrada", "option-backlinks-description": "Mostrar links vindos de outros arquivos", "option-show-tags": "Etiquetas", "option-show-tags-description": "Etiquetas são vinculadas aos arquivos que as contêm", "option-show-attachments": "Anexos", "option-show-attachments-description": "Mostrar anexos provenientes de arquivos", "option-show-existing-files-only": "Apenas arquivos existentes", "option-show-existing-files-only-description": "Quando marcada, links para arquivos não existentes não serão mostrados", "option-show-orphans": "Órfãos", "option-show-orphans-description": "Mostrar arquivos que não possuem links com os demais", "label-display": "Tela", "option-show-arrows": "Setas", "option-show-arrows-description": "Mostrar setas quando a tela for ampliada", "option-text-fade": "Limite para a visibilidade textual", "option-node-size": "Tamanho dos nódulos", "option-link-thickness": "Grossura dos links", "label-forces": "Forças", "option-center-force": "Força centrípeta", "option-link-force": "Força dos links", "option-link-distance": "Distância dos links", "option-repel-force": "Força de repulsão", "tooltip-open-graph-settings": "Abrir configurações de gráfico", "msg-screenshot-copied": "Captura de tela copiada para a área de transferência.", "label-groups": "Grupos", "placeholder-enter-query": "Digite a consulta...", "tooltip-delete-graph": "Deletar grupo", "button-new-group": "Criar novo grupo", "tooltip-click-to-change-drag-to-reorder": "Clique para mudar a cor\nArraste para re-ordenar os grupos", "action-timelapse": "Iniciar animação de timelapse do gráfico", "tooltip-start-timelapse-animation": "Iniciar animação de timelapse", "button-animate-timelapse": "Animar" }, "backlinks": { "name": "Backlinks", "desc": "Mostra o número de backlinks na barra de status.", "action-open": "Abrir links inversos", "action-show": "Mostrar painel de backlinks", "action-open-for-current": "Abre links inversos para o arquivo atual", "action-toggle-backlinks-in-document": "Alternar links inversos no documento", "menu-opt-backlinks-in-document": "Links inversos no documento", "label-linked-mentions": "Menções vinculadas", "label-no-backlinks": "Nenhum link inverso encontrado.", "label-unlinked-mentions": "Menções não-vinculadas", "label-show-search": "Mostrar filtro de busca", "label-link-button-text": "Link", "tab-title": "Links inversos para {{displayText}}", "label-no-unlinked-mentions": "Nenhuma menção não-vinculada encontrada.", "ellipsis": "...", "option-backlink-in-document": "Links inversos no documento", "option-backlink-in-document-desc": "Mostrar links inversos no documento por padrão ao abrir novos painéis." }, "outgoing-links": { "name": "Links de saída", "desc": "Mostra links de saída e detecta menções desvinculadas de outras notas na nota atual.", "action-open": "Abrir os links de saída", "action-show": "Mostrar painel dos links de saída", "action-open-for-current": "Abrir os links de saída para o arquivo atual", "tab-title": "Links de saída para {{displayText}}", "label-links": "Links", "label-no-links": "Nenhum link encontrado.", "label-unlinked-mentions": "Menções desvinculadas", "tooltip-link-file": "Link nesse arquivo", "tooltip-not-created": "Ainda não criado" }, "tag-pane": { "name": "Painel de etiquetas", "desc": "Mostra todas suas etiquetas junto com seu número de ocorrências.", "action-show": "Mostrar painel de etiquetas", "label-no-tags": "Nenhuma etiqueta encontrada.", "label-sort-by-name-a-to-z": "Nome da etiqueta (A - Z)", "label-sort-by-name-z-to-a": "Nome da etiqueta (Z - A)", "label-sort-by-frequency-high-to-low": "Frequência (alta para baixa)", "label-sort-by-frequency-low-to-high": "Frequência (baixa para alta)", "action-show-nested-tags": "Mostrar tags aninhadas", "action-collapse-all": "Recolher tudo", "action-expand-all": "Expandir tudo" }, "page-preview": { "name": "Espiar página", "desc": "Espie o conteúdo de uma nota quando passar o cursor sobre um link interno. No modo de edição, Ctrl/Cmd + passar o cursor sobre um link.", "label-empty-note": "\"{{linktext}}\" ainda não foi criada. Clique para criar.", "label-source-editor": "Editor", "label-source-preview": "Visualizar", "label-source-search": "Localizar links inversos e links de saída", "label-require-mod": "Requer {{key}} para acionar a visualização de página ao passar o mouse" }, "starred": { "name": "Favoritos", "desc": "Favorite arquivos e pesquisas frequentes.", "action-show": "Mostrar painel de favoritos", "action-toggle": "Favorita/desfavorita o arquivo atual", "action-toggle-search": "Favorita/desfavorita a pesquisa atual", "action-star": "Favoritar", "action-unstar": "Desfavoritar", "menu-opt-remove": "Remover", "msg-successfully-starred": "{{type}} \"{{title}}\" favoritado com sucesso.", "msg-removed-starred": "{{type}} \"{{title}}\" desfavoritado com sucesso.", "msg-cannot-find-path": "Não foi possível encontrar o arquivo em \"{{path}}\"." }, "custom-css": { "name": "CSS personalizado", "desc": "Utiliza o \"obsidian.css\" presente no cofre.", "setting-community-themes": "Temas da comunidade", "msg-fetching-themes": "Buscando informações dos temas da comunidade...", "prompt-filter": "Filtrar...", "label-dark-theme-only": "Apenas temas escuros", "label-light-theme-only": "Apenas temas claros", "label-use": "Usar", "label-stop-use": "Parar de usar este tema", "label-install-and-use": "Instalar e usar", "label-update": "Atualizar", "label-no-readme": "Este tema não proveu um arquivo README.", "tooltip-remove-theme": "Remover tema", "label-visit-on-github": "Visitar no GitHub", "msg-load-error": "Não foi possível carregar os temas da comunidade, verifique sua conexão à internet.", "msg-now-using-theme": "Agora você está usando {{title}} como seu tema CSS.", "msg-deleted-theme": "O tema {{title}} foi excluído.", "msg-updated-theme": "O tema {{title}} foi atualizado.", "label-installed": "Instalado", "label-legacy": "Legado", "button-update-all-themes": "Atualizar tudo", "msg-failed-load-themes": "Falha ao carregar temas da comunidade.", "msg-no-updates-found": "Nenhuma atualização de temas encontrado.", "msg-updates-found": "Encontrado {{count}} tema para atualizar.", "msg-updates-found_plural": "Encontrados {{count}} temas para atualizar.", "msg-failed-to-install-theme": "Falha ao instalar o tema \"{{name}}\".", "msg-successfully-installed-theme": "Tema \"{{name}}\" instalado com sucesso.", "msg-installing-theme": "Instalando tema \"{{name}}\"...", "label-search-summary": "Mostrando {{themeCount}}:", "label-update-available": "Atualização disponível" }, "command-palette": { "name": "Paleta de comandos", "desc": "Digite um comando para o executar. Não precisa usar a interface de usuário ou lembrar o atalho.", "action-open": "Abrir paleta de comandos", "instruction-navigate": "para navegar", "instruction-use": "para usar", "instruction-dismiss": "para dispensar", "label-no-commands": "Nenhum comando encontrado.", "prompt-type-command": "Digite um comando...", "label-pinned-commands": "Comandos salvos", "option-add-new-pin": "Salvar comando", "option-add-new-pin-description": "Comandos salvos vão aparecer no topo da lista da paleta de comandos." }, "markdown-format-importer": { "name": "Importador de formato Markdown", "desc": "Converte Markdown de outros aplicativos para o formato do Obsidian.", "action-open": "Abrir importador Markdown", "option-roam-tag-fixer": "Conversor de etiquetas do Roam Research", "option-roam-tag-fixer-description": "Converte \"#tag\" e \"#[[tag]]\" para \"[[tag]]\".", "option-roam-highlight-fixer": "Conversor de destaques do Roam Research", "option-roam-highlight-fixer-description": "Converte \"^^highlight^^\" para \"==highlight==\".", "option-roam-todo-converter": "Conversor de TODO do Roam Research", "option-roam-todo-converter-description": "Converte \"{{[[TODO]]}}\" para \"[ ]\".", "option-bear-highlight-fixer": "Conversor de destaques do Bear", "option-bear-highlight-fixer-description": "Converte \"::highlight::\" para \"==highlight==\".", "zettelkasten-link-fixer": "Conversor de links Zettelkasten", "zettelkasten-link-fixer-description": "Converte \"[[UID]]\" links para \"[[UID File Name]]\" completo.", "zettelkasten-link-beautifier": "Embelezador de links Zettelkasten", "zettelkasten-link-beautifier-description": "Converte links \"[[UID]]\" e também os embeleza \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Aviso: o importador converterá todos os arquivos do seu cofre, não apenas o arquivo atual.", "msg-override-files-warning": "Seus arquivos serão sobrescritos. Faça o backup de todos os seus arquivos antes de tentar a conversão.", "label-start-conversion": "Começar conversão", "label-stop": "Parar", "label-go-back": "Voltar", "label-done": "Pronto", "label-processing": "Processando...", "label-cancelling": "Cancelando...", "label-finished": "Concluído!", "label-processed-files": "Arquivos processados", "label-modified-files": "Arquivos modificados", "label-total-replacements": "Substituições totais" }, "daily-notes": { "name": "Notas Diárias", "desc": "Abrir a nota diária de hoje, ou criar uma se não houver.", "short-name": "Hoje", "action-open": "Abrir a nota de hoje", "action-open-previous": "Abrir a nota diária anterior", "action-open-next": "Abrir a próxima nota diária", "action-insert-text": "Inserir texto na nota diária", "action-insert-link": "Inserir link na nota diária", "msg-fail-format": "Falha ao criar nota diária. \"{{format}}\" não é um formato válido.", "msg-fail-folder": "Falha ao criar nota diária. Pasta \"{{folderOption}}\" não encontrada.", "msg-fail-template-file": "Falha ao criar nota diária. Arquivo modelo \"{{template}}\" não encontrado.", "msg-no-previous": "Não há nota diária anterior à esta.", "msg-no-next": "Não há nota diária posterior à esta.", "option-date-format": "Formato de data", "label-refer-to-syntax": "Para mais sintaxe, confira: ", "label-syntax-link": "formato de referência", "label-syntax-live-preview": "Aqui é como vai aparecer: ", "option-new-file-location": "Local para novos arquivos", "option-new-file-location-description": "O caminho da pasta onde serão criadas as notas diárias.", "option-template": "Local do arquivo modelo", "option-template-description": "O caminho do arquivo que será utilizado como modelo.", "option-open-on-start": "Abrir nota diária quando abrir o Obsidian.", "option-open-on-start-description": "Abrir a nota diária automaticamente sempre que abrir esse cofre." }, "unique-note-creator": { "name": "Criador de notas únicas", "desc": "Crie notas com prefixos de carimbo de data/hora únicos, para fluxos de trabalho como zettelkasten ou slip box.", "short-name": "Único", "action-create-note": "Criar nova nota única", "option-new-file-location": "Nova localização do arquivo", "option-new-file-location-description": "O caminho da pasta para criar a nova nota única.", "msg-folder-not-found": "Falha ao criar nota única. A pasta \"{{folderOption}}\" não foi encontrada.", "option-template-file": "Localização do arquivo de modelo", "option-template-file-description": "O caminho do arquivo para usar como modelo.", "option-template-file-placeholder": "Exemplo: pasta1/nota", "option-id-format": "Formato do prefixo único", "msg-template-file-not-found": "Falha ao criar nota única. Arquivo de modelo \"{{template}}\" não encontrado.", "msg-failed-to-generate": "Falha ao gerar uma nota única com o formato \"{{format}}" }, "random-note": { "name": "Nota aleatória", "desc": "Abre uma nota aleatória. Útil para revisar e descobrir.", "short-name": "Aleatório", "action-open": "Abrir nota aleatória" }, "outline": { "name": "Sumário", "desc": "Mostra um sumário do arquivo atual ou do painel vinculado.", "action-open": "Abrir sumário", "action-show": "Mostrar o painel do sumário", "action-open-for-current": "Abrir sumário do arquivo atual", "tab-title": "Sumário de {{displayText}}", "label-no-headings": "Nenhum sumário encontrado." }, "word-count": { "name": "Contador de palavras", "desc": "Mostra a quantidade de palavras na barra de status." }, "slides": { "name": "Slides", "desc": "Apresente a partir de Markdown. Use \"---\" para separar seus slides.", "action-start": "Começar apresentação" }, "audio-recorder": { "name": "Gravador de áudio", "desc": "Grava áudio e salva como anexo.", "action-start": "Começar a gravação de áudio", "action-stop": "Parar a gravação de áudio", "action-toggle": "Começar/parar a gravação de áudio", "msg-access-denied": "Acesso ao microfone negado, habilite-o no painel de preferências.", "msg-pending-grant": "Por favor, forneça permissão ao microfone.", "msg-no-microphone": "Nenhum microfone está conectado." }, "open-with-default-app": { "name": "Abrir com o aplicativo padrão", "desc": "Adiciona um botão para abrir o arquivo atual com o aplicativo padrão.", "action-open-file": "Abrir com o aplicativo padrão", "action-open-file-mobile": "Compartilhar", "action-show-in-folder": "Mostrar na pasta", "action-show-in-folder-mac": "Revelar no Finder" }, "templates": { "name": "Modelos", "desc": "Insira conteúdo padronizado a partir de uma pasta de modelos.", "action-insert": "Inserir modelo", "action-insert-current-date": "Inserir a data atual", "action-insert-current-time": "Inserir a hora atual", "option-template-folder-location": "Localização da pasta de modelos", "option-template-folder-location-description": "Arquivos nesta pasta serão modelos.", "option-template-date-format": "Formato da data", "option-template-date-format-description": "{{date}} no arquivo de modelo será substituído por esse valor.", "option-template-date-format-description2": "Você também pode usar {{date:YYYY-MM-DD}} para sobrescrever o formato.", "option-template-time-format": "Formato do horário", "option-template-time-format-description": "{{time}} no modelo será substituído por esse valor.", "option-template-time-format-description2": "Você também pode usar {{time:HH:mm}} para sobrescrever o formato.", "instruction-navigate": "para navegar", "instruction-insert": "para inserir um modelo", "instruction-dismiss": "para dispensar", "msg-no-templates-found": "Nenhum modelo encontrado", "msg-fail-invalid-folder": "Falha ao listar modelos. Pasta de modelos inválida.", "msg-fail-folder-not-found": "Falha ao listar modelos. A pasta \"{{folderOption}}\" não foi encontrada.", "prompt-type-template": "Digite o nome do modelo..." }, "translucency": { "name": "Janela translúcida", "desc": "Ativa o efeito translúcido para realçar a percepção de profundidade. Aprimorado para o modo escuro. Não suportado no Linux." }, "slash-command": { "name": "Comandos de barra", "desc": "Ativa a habilidade de acionar comandos de barra no editor por digitar a barra para frente." }, "editor-status": { "name": "Status do editor", "desc": "Adiciona um item na barra de status para mostrar qualquer mudança no modo de edição atual.", "read": "Leitura", "edit-source": "Modo de origem", "edit-live-preview": "Visualização ao vivo" }, "publish": { "name": "Publicar", "desc": "Publique suas notas através do Obsidian Publish.", "action-publish-changes": "Publicar mudanças", "label-no-internet-access": "Você precisa de acesso à internet para publicar mudanças.", "label-publish-service-description": "Obsidian Publish é um serviço adicional pago que dá a possibilidade de publicar suas notas na internet, diretamente do Obsidian.", "label-please-login": "Para começar a publicar, se conecte a sua conta ou crie uma nova conta Obsidian.", "label-no-publish-subscription": "Você ainda não possui uma assinatura para o Obsidian Publish.", "button-purchase": "Comprar", "label-manage-sites": "Gerenciar sites", "label-no-sites": "Você não tem nenhum site.", "button-choose": "Escolher", "tooltip-edit-site-id": "Editar identificação do site", "tooltip-delete-site": "Deletar Site", "label-delete-site-confirmation": "Você tem certeza que quer deletar este site?", "label-delete-site-details": "Isso vai deletar seu site imediatamente e permanentemente.", "label-confirm-delete-site": "Confirmar deletar o site \"{{site}}\"", "option-site-id": "Identificação do site", "option-site-id-description": "Seu site estará disponível em https://publish.obsidian.md/{site id}. Você pode alterar isso. Apenas letras minúsculas, números, e traços são permitidos.", "option-site-id-placeholder": "Escolha uma identificação para site", "button-create": "Criar", "msg-invalid-site-id": "A identificação do site apenas permite letras minúsculas, números e traços.", "msg-site-id-in-use": "Essa identificação de site já está em uso, tente outra.", "msg-create-site-issue": "Ocorreu um erro ao criar seu site.", "label-site-options": "Opções do site", "option-site-general": "General", "option-site-components": "Componentes", "option-site-appearance": "Aparência", "option-site-reading-experience": "Experiência de leitura", "option-site-misc": "Outras configurações do site", "option-site-name": "Nome do site", "option-site-name-description": "Nome do seu site publicado. Será exibido no título da página do seu site.", "option-site-name-placeholder": "Nome do seu site", "option-home-page-file": "Arquivo raiz", "option-home-page-file-description": "A primeira página que o usuário irá ver ao visitar o seu site", "option-home-page-file-placeholder": "Escolha um arquivo publicado", "option-logo": "Logo", "option-logo-description": "Escolha uma imagem para ser usada como logo do seu site.", "option-logo-placeholder": "Qualquer imagem salvo no seu cofre...", "option-site-collaboration": "Colaboração do site", "option-site-collaboration-desc": "Gerenciar colaboradores para este site.", "button-manage-collaborators": "Gerenciar", "option-theme": "Tema", "option-theme-description": "Escolha o esquema de cores padrão para o seu site.", "option-theme-system": "Adaptar ao sistema", "option-show-theme-toggle": "Alternar claro/escuro", "option-show-theme-toggle-description": "Permita o visitante alternar entre o tema claro e escuro por conta própria.", "option-show-navigation": "Mostrar navegação", "option-show-navigation-description": "Mostra uma lista de todas as páginas duplicadas no lado esquerdo do seu site.", "option-show-search": "Mostrar barra de pesquisa", "option-show-search-description": "Exibe uma barra de pesquisa no topo da navegação que permite aos visitantes localizarem páginas e cabeçalhos no seu site.", "option-show-graph": "Mostrar visualização em gráfico", "option-show-graph-description": "Mostra um pequeno gráfico local em cada página.", "option-show-outline": "Mostrar índice", "option-show-outline-description": "Mostra um panorama das seções em cada página.", "option-show-backlinks": "Mostrar links inversos", "option-show-backlinks-description": "Mostra uma seção de links inversos ao final de cada página.", "option-sliding-window-mode": "Usar rotação de painéis", "option-sliding-window-mode-description": "Abre páginas no painel à direita. Permite navegar pelos painéis horizontalmente.", "option-hover-preview-file": "Ativar modo espião", "option-hover-preview-file-description": "Mostra uma prévia da página ao passar o cursor sobre links.", "option-hide-title": "Esconder título da página", "option-hide-title-description": "Esconde o cabeçalho do título da página. Útil quando você tem seus próprios cabeçalhos no início de cada página.", "option-readable-line-length": "Margens de tamanho confortável", "option-readable-line-length-description": "Limita a largura máxima das margens na tela. Cabe menos conteúdo, mas deixa os parágrafos mais legíveis.", "option-site-password": "Senhas", "option-site-password-description": "Restringir o acesso ao seu site com senhas.", "option-google-analytics": "Código de rastreamento do Google Analytics", "option-google-analytics-description": "Configure o Google Analytics para o seu site. Apenas disponível para visitantes de sua URL de domínio personalizado. Por favor, consulte as leis e regulações locais primeiro.", "button-manage-passwords": "Gerenciar", "button-save-site-settings": "Salvar configurações de site", "msg-updated-options": "As configurações do seu site foram atualizadas.", "button-go-back": "Voltar", "label-publishing-to": "Publicar em", "tooltip-switch-site": "Trocar site", "button-add-linked": "Adicionar conectados", "tooltip-add-linked": "Adiciona todos os arquivos que estão conectados pelos itens selecionados", "msg-added-linked-files": "{{count}} arquivo conectado foi adicionado.", "msg-added-linked-files_plural": "{{count}} arquivos conectados foram adicionados.", "tooltip-open-site-options": "Alterar configurações do site", "label-no-changes-detected": "Nenhuma mudança detectada.", "label-changed-files-to-be-published": "Mudanças", "label-unchanged-files-already-published": "Inalterado (selecione para deletar)", "label-file-selected": " selecionado", "button-select-all-files": "Selecionar tudo", "button-deselect-all-files": "Deselecionar tudo", "label-new-files-to-be-published": "Novo", "button-publish": "Publicar", "msg-no-permission-to-publish-to-site": "Você não tem permissão para publicar no site atual.", "msg-select-at-least-one-file": "Por favor selecione pelo menos um arquivo.", "label-upload-changes": "Enviar mudanças", "button-done": "Feito", "button-stop": "Parar", "label-status-uploading": "Enviando", "label-status-to-publish": "Para publicar", "label-status-to-delete": "Para deletar", "label-status-published": "Publicado", "label-status-deleted": "Deletado", "label-status-failed": "Falhou", "label-status-cancelled": "Cancelado", "button-change": "Mudar", "label-clear-cache": "Demora alguns minutos para que as mudanças fiquem visíveis no seu site. Caso você não consiga vê-las, tente limpar o cache do seu navegador.", "label-visit-site": "Você pode visitar seu site em: ", "msg-something-went-wrong": "Alguma coisa deu errado. Para detalhes, verifique o console do desenvolvedor.", "msg-network-error": "Ocorreu um erro com a internet. ", "label-manage-passwords": "Gerenciar senhas", "label-add-password": "Adicionar senha", "action-new-password": "Nova senha", "label-no-password": "Seu site atualmente não possui senhas. Qualquer um pode visitá-lo.", "label-have-password": "Seu site é protegido por senha. Se você possuir múltiplas senhas, os visitantes podem acessar seu site por informar qualquer uma delas.", "option-password-name": "Senha", "option-password-desc": "Um hash da sua senha será armazenado com segurança. Uma vez definida ela não pode mais ser exibida como texto.", "option-password-placeholder": "Sua senha", "option-nickname-name": "Apelido (opcional)", "option-nickname-desc": "Defina um apelido para lembrar do que ou para quem é essa senha.", "action-add-password": "Adicionar esta senha", "label-untitled-password": "Senha sem título", "label-password-created-time": "Criado em {{time}}", "msg-added-new-password": "Nova senha adicionada.", "option-custom-domain": "Domínio personalizado", "option-custom-domain-desc": "Usar seu próprio domínio ao invés da URL https://publish.obsidian.md/{site id}.", "option-noindex": "Desabilitar indexação por mecanismos de busca", "option-noindex-desc": "Previne que mecanismos de busca indexem o seu site.", "button-configure": "Configurar", "label-configure-custom-domain": "Configurar domínio personalizado", "option-custom-url-name": "URL personalizada", "option-custom-url-desc": "A URL em que seu site será localizado.", "option-custom-url-placeholder": "www.seudominio.com", "option-custom-url-redirect": "Redirecionar para o seu domínio personalizado", "option-custom-url-redirect-desc": "Redirecionar visitantes em publish.obsidian.md/id para o seu domínio personalizado.", "button-update-custom-domain": "Atualizar configuração do domínio", "label-custom-domain-instructions": "Por favor, consulte nosso {{link}} em nosso site de ajuda para mais informações.", "label-custom-domain-link-name": "guia de configuração de domínio personalizado", "label-site-usage": "Você está usando {{site}} de seus {{limit}}.", "button-add-more-sites": "Comprar mais sites", "label-no-sites-bought": "Você ainda não comprou nenhum site.", "button-get-site": "Obter um site", "label-manage-sharing": "Gerenciar compartilhamento para \"{{name}}\"", "label-sharing-with-users": "Este site está compartilhado com as seguintes pessoas atualmente.", "label-not-sharing": "Este site não está compartilhado com ninguém atualmente.", "label-invite-pending": "Pendente", "tooltip-remove-user": "Remover usuário", "option-invite-user": "Convidar usuário", "placeholder-invite-user": "Digite o e-mail deles...", "error-email-must-be-valid": "Por favor, informe um e-mail válido para convidar alguém.", "msg-enable-publish-plugin": "Por favor, habilite o plugin nativo Publish em Configurações -> Plugins nativos para ver os sites.", "label-your-sites": "Seus sites", "label-sites-shared-with-you": "Sites compartilhados com você", "tooltip-leave-site-sharing": "Parar de colaborar neste site", "label-leave-site-confirmation": "Confirme parar de colaborar neste site", "label-leave-site-confirmation-details": "Isso removerá esse site da lista de sites compartilhados com você. Esta ação não pode ser revertida.", "label-leave-site-confirmation-details-2": "Por favor, contate o dono do site se você desejar colaborar neste site novamente.", "button-leave": "Sair", "label-compare-with-live": "Comparar com a versão ao vivo", "button-use-live-version": "Usar a versão ao vivo", "label-confirm-override": "Confirmar sobrescrever a versão local", "label-confirm-override-1": "Tem certeza que deseja sobrescrever a versão local?", "label-confirm-override-2": "A versão ao vivo será usada e sua versão local será descartada. Por favor, faça cópias de segurança se necessário.", "button-proceed": "Continuar", "message-successfully-used-live-version": "Versão ao vivo usada para sobrescrever a versão local com sucesso.", "label-open-file": "Abrir arquivo", "tooltip-manage-publish-filters": "Gerenciar filtros de publicação", "option-included-folders": "Pastas incluídas", "option-included-folders-desc": "Arquivos nestas pastas serão automaticamente selecionados quando você revisar as mudanças para publicar.", "option-currently-included-folders": " Estas pastas estão atualmente incluídas:", "option-excluded-folders": "Pastas excluídas", "option-excluded-folders-desc": "Arquivos nestas pastas não serão exibidos quando você revisar as mudanças para publicar. Esta configuração tem prioridade sobre as pastas incluídas acima.", "label-number-of-folders-included": "Obsidian Publish está atualmente incluindo {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish está atualmente excluindo {{folders}}.", "label-manage-included-folders": "Gerenciar pastas incluídas", "label-manage-excluded-folders": "Gerenciar pastas excluídas", "label-add-included-folder": "Incluir uma pasta", "label-add-included-folder-desc": "Você pode incluir tanto pastas existentes quanto pastas que ainda não foram criadas.", "tooltip-contact-support": "Contatar suporte" }, "workspaces": { "name": "Áreas de trabalho", "desc": "Salve e carregue a disposição da área de trabalho.", "action-load-layout": "Carregar leiaute da área de trabalho", "action-manage-layouts": "Gerenciar leiautes da área de trabalho", "action-save-and-load-layout": "Salvar e carregar outro leiaute", "placeholder-save-current-layout-as": "Salvar o leiaute atual da área de trabalho como...", "button-save": "Salvar", "button-load": "Carregar", "tooltip-delete-layout": "Excluir leiaute", "msg-delete-layout-success": "Leiaute excluído com sucesso.", "msg-enter-name": "Por favor, digite um nome para o novo leiaute.", "msg-save-layout-success": "Leiaute salvo com sucesso.", "label-no-layout-found": "Nenhum leiaute salvo encontrado.", "placeholder-type-to-search-layouts": "Digite o nome do leiaute..." }, "sync": { "name": "Sincronização", "desc": "Sincronize os seus arquivos por meio do Obsidian Sync", "action-view-version-history": "Ver histórico de versão", "label-load-more": "Carregar mais", "label-show-diff": "Mostrar diferenças", "label-copy-to-clipboard": "Copiar para a área de transferência", "label-restore-this-version": "Restaurar essa versão", "msg-already-latest-version": "Essa versão já é a versão mais recente.", "msg-restored-version": "Versão restaurada com sucesso de {{time}}", "label-file-deleted": "Este arquivo foi excluído", "label-no-earlier-version": "Não há versões anteriores deste arquivo", "label-empty-file": "Vazio", "label-setting-files": "Arquivos de configuração", "label-deleted-files": "Arquivos excluído", "label-version-history": "Histórico de versões", "label-click-to-see-history": "Clique em um arquivo excluído para ver o seu histórico.", "label-create-remote-vault": "Criar um cofre remoto", "msg-please-enter-password": "Por favor, insira uma senha.", "msg-vault-name-cannot-be-empty": "O nome do cofre não pode estar vazio.", "msg-successfully-created-vault": "Criação do cofre remoto \"{{name}}\" feita com sucesso.", "label-remote-vault-explanation": "Os cofres remotos sincronizam com segurança seu cofre local entre dispositivos.", "option-vault-name": "Nome do cofre", "option-vault-name-desc": "Ajuda você a lembrar para que serve este cofre", "option-vault-name-placeholder": "Meu cofre incrível", "option-use-custom-encryption-password": "Personalizar senha da criptografia de ponta a ponta", "option-use-custom-encryption-password-desc": "Se você desativar isso, nós iremos gerenciar uma chave de criptografia de maneira segura para você.", "option-use-custom-encryption-password-desc-warning": "Essa opção não pode ser alterada depois.", "option-encryption-password": "Senha de criptografia", "option-encryption-password-desc": "Essa senha NÃO pode ser alterada depois.", "option-encryption-password-desc-warning": "Se você esquecer essa senha, todos os seus dados remotos ficarão inutilizáveis para sempre.", "option-encryption-password-desc-2": "Isso não afeta dados locais.", "option-encryption-password-placeholder": "Sua senha", "label-enter-encryption-password": "Digite a senha de criptografia", "button-unlock-vault": "Desbloquear cofre", "msg-verified-password": "Sua senha foi verificada com sucesso.", "label-remote-vaults": "Seus cofres remotos", "label-vault-created-time": "Criado em {{time}}", "tooltip-delete-remote-vault": "Deletar", "tooltip-manage-sharing": "Gerenciar compartilhamento", "label-confirm-delete-remote-vault": "Confirme a exclusão do cofre", "label-confirm-delete-remote-vault-question": "Você tem certeza que deseja excluir este cofre remoto?", "label-confirm-delete-remote-vault-result": "Todos os dados em nosso servidor, incluindo o histórico de versão, serão excluídos. Seus arquivos locais permanecerão intactos.", "label-confirm-delete-remote-vault-warning": "Esta ação é permanente e irreversível.", "msg-remote-vault-deleted": "{{name}} foi excluído.", "button-connect-to-remote-vault": "Conectar", "button-disconnect-from-remote-vault": "Desconectar", "label-not-remote-vaults": "Você não tem cofres remotos.", "button-create-new-remote-vault": "Criar novo cofre", "label-sync-log": "Log de sincronização", "options-only-show-errors": "Apenas erros", "options-only-show-errors-desc": "Mostrar apenas erros e ocultar outros itens do log.", "button-copy-sync-log": "Copiar log de sincronização", "msg-successfully-copied-sync-log": "Log de sincronização copiado com sucesso.", "button-retry": "Tentar novamente", "button-purchase-subscription": "Comprar", "option-remote-vault": "Cofre remoto", "button-choose-remote-vault": "Escolher", "button-manage-remote-vault": "Gerenciar", "option-remote-vault-desc-connected": "Atualmente conectado ao cofre remoto \"{{name}}\".", "option-remote-vault-desc-not-connected": "Atualmente não conectado a nenhum cofre remoto.", "option-sync-status": "Status da sincronização", "option-sync-status-desc-paused": "Obsidian Sync está pausado.", "option-sync-status-desc-running": "Obsidian Sync está em execução.", "option-device-name": "Nome do dispositivo", "option-device-name-desc": "Esse nome será exibido no log de sincronização. Deixe em branco para usar o nome padrão.", "button-resume": "Retomar", "button-pause": "Pausar", "option-view-deleted-files": "Arquivos deletados", "option-view-deleted-files-desc": "Visualizar e restaurar arquivos excluídos.", "option-sync-log": "Atividade da sincronização", "option-sync-log-desc": "Ver as recentes atividades de sincronização para depuração.", "button-view": "Ver", "button-bulk-restore": "Restauração em massa", "button-restore-selected-files": "Restaurar os arquivos selecionados", "msg-restoring": "Restaurando...", "msg-restoring-complete": "`Restauração completa: {{succeeded}} com sucesso e {{failed}} com falha.`", "option-over-size": "Tamanho do cofre acima do limite", "option-over-size-desc": "Seu cofre está em {{size}} de {{limit}}.", "msg-largest-files": "Ver os maiores arquivos", "msg-largest-files-desc": "Esses são os arquivos que ocupam mais espaço no cofre remoto. Depois de excluir os anexos, use o botão de limpeza para liberar espaço.", "button-purge-remote": "Limpar", "tooltip-purge-remote": "Limpe permanentemente os anexos excluídos do cofre remoto para economizar espaço.", "msg-purge-complete": "Limpeza completa", "option-prevent-sleep": "Impedir a suspensão do dispositivo", "option-prevent-sleep-desc": "Impede o dispositivo de suspender quando ainda há arquivos para sincronizar.", "option-selective-sync": "Sincronização seletiva", "option-excluded-folders": "Pastas excluídas", "option-excluded-folder-desc": "Previne que certas pastas sejam sincronizadas.", "option-currently-excluded-folders": " Estas pastas estão atualmente excluídas da sincronização:", "button-manage-excluded-folders": "Administrar", "option-sync-image": "Sincronizar imagens", "option-sync-image-desc": "Sincronizar arquivos de imagem com essas extensões: {{extensions}}.", "option-sync-audio": "Sincronizar audios", "option-sync-audio-desc": "Sincronizar arquivos de áudio com essas extensões: {{extensions}}.", "option-sync-video": "Sincronizar vídeos", "option-sync-video-desc": "Sincronizar arquivos de vídeo com essas extensões: {{extensions}}.", "option-sync-pdf": "Sincronizar PDFs", "option-sync-pdf-desc": "Sincronizar arquivos de PDF.", "option-sync-unsupported": "Sincronizar todos os outros tipos", "option-sync-unsupported-desc": "Sincronizar tipos de arquivo não suportados.", "option-vault-config-sync": "Sincronização de configuração do cofre", "option-view-config-files": "Histórico de versões das configurações", "option-view-config-files-desc": "Ver e restaurar o histórico de versões dos arquivos de configuração.", "option-sync-app": "Configurações principais", "option-sync-app-desc": "Habilitar sincronização das configurações do editor, arquivos e links, teclas de atalho customizadas, etc.", "option-sync-appearance": "Configurações de aparência", "option-sync-appearance-desc": "Sincronizar configurações de aparência como modo noturno, tema ativo e fragmentos habilitados.", "option-sync-appearance-data": "Temas e Fragmentos", "option-sync-appearance-data-desc": "Sincronizar temas e fragmentos baixados. Se eles estão habilitados depende da configuração anterior.", "option-sync-hotkey": "Teclas de atalho", "option-sync-hotkey-desc": "Sincronizar teclas de atalho personalizadas.", "option-sync-core-plugin": "Lista de plugins nativos ativos", "option-sync-core-plugin-desc": "Sincronizar quais plugins nativos estão habilitados.", "option-sync-core-plugin-data": "Configurações de plugins nativos", "option-sync-core-plugin-data-desc": "Sincronizar as configurações de plugins nativos.", "option-sync-community-plugin": "Lista de plugins ativos da comunidade", "option-sync-community-plugin-desc": "Sincronizar quais plugins da comunidade estão habilitados.", "option-sync-community-plugin-data": "Plugins da comunidade instalados", "option-sync-community-plugin-data-desc": "Sincronizar plugins da comunidade instalados (arquivos .js, .css, e manifest.json) e suas configurações.", "label-sync-introduction": "Obsidian Sync é o serviço de sincronização de complemento da Obsidian com criptografia ponta a ponta e histórico de versão.", "label-account-required": "Para iniciar a sincronização, faça o login ou crie uma nova conta Obsidian.", "button-sign-up": "Inscrever-se", "button-log-in": "Entrar", "label-manage-excluded-folders": "Gerenciar pastas excluídas", "label-number-of-folders-excluded": "{{folders}} estão atualmente excluídos da sincronização.", "label-add-excluded-folder": "Excluir uma pasta", "label-add-excluded-folder-desc": "Você pode excluir tanto arquivos e pastas existentes quanto os que ainda não foram criados.", "tooltip-remove-excluded-folder": "Remover da lista de excluídos", "label-setup-connection": "Configurar conexão", "label-now-connected-to-vault": "Agora você está conectado em \"{{name}}\".", "button-start-syncing": "Começar a sincronizar", "label-confirm-merge-vault": "Confirme a Mesclagem do Cofre", "msg-vault-has-notes": "Seu cofre local já contem algumas notas.", "msg-vault-merge-warning": "Se você conectar ao cofre remoto \"{{name}}\", as notas no seu cofre local serão mescladas com as notas de seu cofre remoto. Em caso de conflitos, a versão mais recente da nota será preservada.", "tooltip-update-setting-on-all-devices": "Por favor, atualize esta opção e reinicie o app em todos os dispositivos que você deseja que tenha efeito.", "label-sharing-with-users": "Este cofre remoto está atualmente compartilhado com as seguintes pessoas.", "label-not-sharing": "Este cofre remoto não está atualmente compartilhado com ninguém.", "label-vaults-shared-with-you": "Cofres compartilhados com você", "tooltip-leave-vault-sharing": "Parar de colaborar neste cofre", "label-leave-vault-confirmation": "Confirme parar a colaboração do cofre", "label-leave-vault-confirmation-details": "Isso removerá este cofre da lista de cofres compartilhados com você. Esta ação não pode ser revertida.", "label-leave-vault-confirmation-details-2": "Por favor, contate o dono deste cofre se você deseja colaborar neste cofre novamente.", "button-leave": "Sair", "label-require-subscription-to-connect": "Você precisa de uma inscrição Obsidian Sync para conectar a este cofre.", "option-contact-support": "Contatar suporte", "option-contact-support-desc": "Se você tiver algum problema com o Obsidian Sync, por favor, nos contate para que possamos te ajudar! Você pode nos contatar em support@obsidian.md.", "button-email-support": "Suporte por e-mail" }, "file-recovery": { "name": "Recuperação de arquivos", "desc": "Permite você restaurar versões recentes para recuperar perda acidental de dados. Versões são unicamente salvas para arquivos Markdown.", "action-open": "Abrir snapshots salvos", "option-interval": "Intervalo entre snapshots", "option-interval-description": "Intervalo mínimo entre dois snapshots.", "option-keep": "Tamanho do histórico", "option-keep-description": "Por quantos dias snapshots devem ser salvos.", "option-open-history": "Versões", "option-open-history-description": "Abrir e restaurar snapshots.", "button-view-snapshots": "Abrir", "option-clear": "Remover história", "option-clear-description": "Deletar todas os snapshots.", "button-clear-history": "Deletar", "label-clear-warning": "Você tem certeza que quer deletar todos os snapshots? Só snapshots serão removidas. Os seus arquivos não serão afetados.", "msg-clear-complete": "Snapshots deletados.", "label-no-history-found": "Nenhum snapshots salvo.", "placeholder-choose-file": "Escolha um arquivo...", "label-select-file": "Selecione um arquivo para ver seus snapshots." }, "note-composer": { "name": "Compositor de notas", "desc": "Fundir, separar e refatorar notas.", "option-confirm-file-merge": "Confirmar fusão de arquivos", "option-confirm-file-merge-description": "Avisar antes de mesclar dois arquivos.", "option-split-replacement-text": "Texto após a extração", "option-split-replacement-text-description": "O que mostrar no lugar do texto selecionado após o extrair.", "option-choice-split-replacement-text-link": "Link para novo arquivo", "option-choice-split-replacement-text-embed": "Embutir novo arquivo", "option-choice-split-replacement-text-none": "Nenhum", "option-template-file": "Localização do arquivo de modelo", "option-template-file-description": "Arquivo de modelo para usar quando mesclar ou excluir. Variáveis disponíveis: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Mesclar arquivo atual com outro arquivo...", "action-merge-file": "Mesclar o arquivo todo com...", "label-no-files": "Nenhum arquivo encontrado.", "instruction-navigate": "Para navegar", "instruction-merge": "para mesclar", "instruction-create-new": "Para criar novo", "instruction-merge-at-top": "para mesclar no topo", "instruction-dismiss": "para dispensar", "prompt-select-file-to-merge": "Selecione o arquivo para mesclar...", "label-merge-file": "Mesclar arquivo", "label-confirm-file-merge": "Tem certeza que deseja mesclar \"{{file}}\" em \"{{destination}}\"? \"{{file}}\" será excluído.", "button-merge": "Mesclar", "button-merge-do-not-ask-again": "Mesclar e não perguntar novamente", "command-split-file": "Extrair seleção atual...", "command-extract-heading": "Extrair este cabeçalho...", "instruction-append": "para mover para baixo", "instruction-prepend": "para mover para cima", "msg-fail-to-fetch-template": "Falha ao buscar o arquivo de modelo: \"{{template}}\" não encontrado.", "msg-fail-to-find-heading": "Falha ao encontrar cabeçalho" }, "canvas": { "name": "Canvas", "desc": "Organize e conecte notas em uma tela infinita.", "action-add-note": "Adicionar nota do cofre", "action-add-media": "Adicionar mídia do cofre", "action-add-card": "Adicionar cartão", "action-add-website": "Adicionar página web", "action-create-group": "Criar grupo", "action-create-with-size": "Criar cartão com um tamanho específico", "action-convert-to-file": "Converter para arquivo...", "action-drag-to-add-note": "Arraste para adicionar nota do cofre", "action-drag-to-add-media": "Arraste para adicionar mídia do cofre", "action-drag-to-add-card": "Arraste para adicionar cartão", "action-enable-grid-snapping": "Habilitar ajuste de grade", "action-disable-grid-snapping": "Desabilitar ajuste de grade", "action-edit-label": "Editar rótulo", "action-remove-label": "Remover rótulo", "action-search-file": "Localizar por arquivo", "action-set-color": "Definir cor", "action-align": "Alinhar", "action-align-left": "Alinhar à esquerda", "action-align-center": "Alinhar ao centro", "action-align-right": "Alinhar à direita", "action-align-top": "Alinhar ao topo", "action-align-middle": "Alinhar ao meio", "action-align-bottom": "Alinhar abaixo", "action-distribute-horizontal-spacing": "Distribuir espaçamento horizontal", "action-distribute-vertical-spacing": "Distribuir espaçamento vertical", "action-justify-horizontally": "Justificar horizontalmente", "action-justify-vertically": "Justificar verticalmente", "action-stack-horizontally": "Empilhar horizontalmente", "action-stack-vertically": "Empilhar verticalmente", "action-stack-grid": "Empilhar em grade", "action-export-png": "Exportar como imagem", "label-export-png-desc": "Exportar \"{{title}}\" com um arquivo PNG com as configurações abaixo.", "label-export-png-dimensions": "Dimensões estimadas da imagem: {{dimensions}}", "option-export-png-show-logo": "Exibir logo", "option-export-png-show-logo-desc": "Isso irá adicionar um logo do Obsidian abaixo à esquerda.", "option-export-png-zoom": "Ampliar", "option-export-png-zoom-desc": "Uma ampliação maior irá gerar um imagem com maior resolução.", "option-export-png-frame": "Janela de exibição", "option-export-png-frame-desc": "Escolha entre renderizar a tela cheia ou apenas a janela de exibição atual.", "option-export-png-frame-full": "Tela cheia", "option-export-png-frame-viewport": "Apenas a janela de exibição", "action-remove": "Remover", "action-narrow": "Limitar à seção...", "action-swap-file": "Trocar arquivo...", "action-change-url": "Alterar URL...", "action-zoom-to-fit": "Ampliar para caber", "action-zoom-to-selection": "Ampliar na seleção", "action-reload-page": "Recarregar a página", "action-go-to-target": "Ir para o destino", "action-go-to-source": "Ir para a origem", "command-create-new-canvas": "Criar novo canvas", "command-new-canvas": "Novo canvas", "instruction-narrow": "para incorporar cabeçalho", "prompt-to-narrow": "Digite o nome do cabeçalho", "label-enter-url": "Digite a URL", "label-empty-embed": "\"{{linktext}}\" não pôde ser achado.", "prompt-add-text": "Adicionar texto...", "prompt-start-search": "Digite para localizar...", "label-canvas-help": "Ajuda do Canvas", "label-no-heading": "Sem cabeçalho", "label-pan": "Deslocamento", "label-pan-horizontal": "Deslocar horizontalmente", "label-zoom": "Ampliar", "label-select-all": "Selecionar tudo", "label-add-remove-selection": "Adicionar a / remover da seleção", "label-clone-card": "Clonar cartão", "label-constrain-movement-axis": "Restringir o movimento do cartão ao eixo", "label-disable-drag-snapping": "Desativar encaixe ao arrastar", "label-remove-card": "Remover cartão", "label-drag-from-below": "Arraste de baixo ou clique duas vezes", "label-space-drag-pan": "Espaço + Arraste para deslocar", "label-scroll-to-zoom": "Role para ampliar", "label-untitled-group": "Grupo sem título" } }, "nouns": { "word-with-count": "{{count}} palavra", "word-with-count_plural": "{{count}} palavras", "character-with-count": "{{count}} caractere", "character-with-count_plural": "{{count}} caracteres", "link-with-count": "{{count}} link", "link-with-count_plural": "{{count}} links", "file-with-count": "{{count}} arquivo", "file-with-count_plural": "{{count}} arquivos", "folder-with-count": "{{count}} pasta", "folder-with-count_plural": "{{count}} pastas", "backlink-with-count": "{{count}} link inverso", "backlink-with-count_plural": "{{count}} links inversos", "site-with-count": "{{count}} site", "site-with-count_plural": "{{count}} sites", "plugin-with-count": "{{count}} plugin", "plugin-with-count_plural": "{{count}} plugins", "theme-with-count": "{{count}} tema", "theme-with-count_plural": "{{count}} temas" } }{ "setting": { "options": "Opções", "plugin": "Plugin", "builtin-plugins": "Plugins Base", "plugin-options": "Opções de Plugin", "folder-path-example-placeholder": "Exemplos: pasta 1/pasta 2", "file-path-example-placeholder": "Exemplos: pasta/nota", "msg-restart-required": "Modificar esta opção requer reiniciar a aplicação para ter efeito.", "editor": { "name": "Editor", "section-general": "General", "section-behavior": "Comportamento", "section-display": "Gráficos", "option-spellcheck": "Verificação ortográfica", "option-spellcheck-description": "Ativa a verificação ortográfica. Atualmente só funciona para o Inglês (US).", "spellcheck-languages": "Linguagens para a verificação ortográfica", "spellcheck-languages-description": "Escolhe as linguagens que a verificação ortográfica irá usar.", "spellcheck-languages-mac-description": "The native spellchecker will automatically detect the language being used for you on macOS.", "spellcheck-dict": "Dicionário de verificação ortográfica", "spellcheck-dict-empty": "O dicionário de verificação ortográfica está vazio.", "option-show-inline-title": "Mostrar título na mesma linha", "option-show-inline-title-description": "Mostrar o nome do ficheiro como um título editável na mesma linha do conteúdo dos ficheiros.", "option-readable-line-length": "Linhas de tamanho legível", "option-readable-line-description": "Limitar o tamanho máximo da linha. Cabe menos conteúdo no ecrã, mas faz os parágrafos mais fáceis de ler.", "option-strict-line-break": "Quebra de linha estrita", "option-strict-line-break-description": "No modo de visualização, ignore quebras de linha simples de acordo com as especificações Markdown. Desative para mostrar quebras de linha simples na visualização.", "option-show-frontmatter": "Mostrar pré-texto", "option-show-frontmatter-description": "No modo de visualização, mostrar pré-texto como um bloco de código. Desative para esconder a secção de pré-texto.", "option-auto-pair-brackets": "Fecha parênteses automaticamente", "option-auto-pair-brackets-description": "Fecha parênteses e aspas automaticamente.", "option-auto-pair-markdown": "Combinar símbolos Markdown automaticamente", "option-auto-pair-markdown-description": "Fecha símbolos para negrito, itálico, destaque, texto rasurado e código automaticamente.", "option-smart-indent-lists": "Listas com indentação inteligente", "option-smart-indent-lists-description": "Trata da indentação e marcadores de lista por si.", "option-fold-heading": "Fechar títulos", "option-fold-heading-description": "Permite esconder tudo sob um título.", "option-fold-indent": "Fechar indentação", "option-fold-indent-description": "Permite esconder uma parte da mesma indentação, como listas.", "option-default-new-tab-view": "Vista predefinida para novas tabulações", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Vista de edição", "option-default-new-tab-view-reading": "Vista de leitura", "option-default-editing-mode": "Vista de edição predefinida", "option-default-editing-mode-description": "A vista de edição predefinida que um painel novo irá usar.", "option-default-editing-mode-source": "Modo de origem", "option-default-editing-mode-live-preview": "Visualização ao vivo", "option-show-line-number": "Mostrar número da linha", "option-show-line-number-description": "Mostra os números das linhas na goteira.", "option-indentation-guide": "Mostrar guias de identação", "option-indentation-guide-description": "Mostrar linhas de relacionamento verticais entre marcadores para orientação visual.", "option-use-tabs": "Usar tabulações", "option-use-tabs-description": "Usar tabulações para indentar quando a tecla \"Tab\" é pressionada. Desative para usar espaços.", "option-tab-size": "Tamanho da tabulação", "option-tab-size-description": "Número de espaços equivalentes a uma tabulação.", "option-rtl": "Direita para a esquerda (RTL)", "option-rtl-description": "Define a exibição do texto da notas para ser da direita para a esquerda.", "option-auto-convert-html": "Converter HTML automaticamente", "option-auto-convert-html-description": "Converter automaticamente HTML para Markdown quando se cola ou arrasta de páginas da web. Usar Crtl/Cmd+Shift+V para colar sem conversão.", "option-vim-key-bindings": "Atalhos do Vim", "option-vim-key-bindings-description": "Utilize atalhos do Vim no editor.", "option-vim-key-bindings-mobile": "Em dispositivos móveis, esta opção é por dispositivo e não é sincronizada através do ficheiro de configuração.", "option-emacsy-keys": "Atalhos antigos no estilo de Emacs para macOS", "option-emacsy-keys-description": "Permite o uso de atalhos no estilo de Emacs, que são padrão no macOS, mas pode interferir com algumas operações de atalhos.", "label-confirm-enable-vim": "Confirme a ativação do movo Vim", "label-vim-warning": "O modo Vim é para edição eficiente de texto mas pode ser bastante contra-intuitivo. Caso não conheça Vim e escolha esta opção, vai parecer que o Obsidian tenha deixado de funcionar.", "label-vim-test": "Para verificar que sabe usar Vim, por favor digite o comando para sair do Vim sem guardar:", "label-vim-your-answer": "A sua resposta", "placeholder-enter-command": "Digite um comando...", "button-confirm-enable-vim": "Ativar modo Vim", "msg-vim-mode-enabled": "Comando correcto. Modo Vim ativado.", "msg-vim-mode-not-enabled": "Comando incorreto. Modo Vim permanece desativado para sua proteção.", "msg-vim-mode-please-enter-command": "Por favor insira o comando para ativar o Modo Vim", "option-legacy-editor": "Usar o editor legado", "option-legacy-editor-description2": "O editor legado será descontinuado brevemente. Atualmente não é mantido e, por isso, errors encontrados não serão resolvidos.", "label-legacy-deprecation": "O novo editor está aqui", "label-legacy-deprecation-1": "Obsidian tem um novo editor que é mais robusto e acessível.", "label-legacy-deprecation-2": "Parece que ainda está a usar o editor legado e e achamos que vai gostar mais do novo editor.", "label-legacy-deprecation-choice": "Que modo gostaria de usar?", "label-live-preview-description": "Uma experiência o-que-você-vê-é-o-que-você-tem e mais moderna.", "label-source-mode-description": "Ver Markdown puro com sintaxe destacada.", "button-start-new-editor": "Inicia um novo editor" }, "file": { "name": "Ficheiros & Links", "option-confirm-file-deletion": "Confirme o eliminação do ficheiro", "option-confirm-file-deletion-description": "Determine se precisa confirmar o eliminação do ficheiro.", "option-delete-destination": "Ficheiros apagados", "option-delete-destination-description": "O que fazer com os ficheiros depois de os eliminar.", "option-choice-system-trash": "Mover para a reciclagem do sistema", "option-choice-vault-trash": "Mover para a reciclagem do Obsidian (pasta .trash)", "option-choice-permanent-delete": "Eliminar permanentemente", "option-always-update-links": "Atualizar sempre os links internos", "option-always-update-links-description": "Atualizar os links automaticamente depois de renomear um ficheiro ou prompt.", "option-new-note-location": "Local padrão para novas notas", "option-new-note-location-description": "Onde colocar notas recém-criadas. As configurações de Plugin sobrepõem-se a esta opção.", "option-choice-vault-root": "Raíz do vault", "option-choice-current-folder": "Na mesma pasta do ficheiro atual", "option-choice-specified-folder": "Na pasta especificada abaixo", "option-new-file-folder-path": "Pasta em que novas notas serão criadas", "option-new-file-folder-path-description": "Notas recém-criadas irão aparecer nesta pasta. As configurações de Plugin sobrepõem-se a esta opção.", "option-use-wiki-links": "Usar [[Wikilinks]]", "option-use-wiki-links-description": "Autogerar Wikilinks para [[links]] e ![[imagens]] em vez de links e imagens de Markdown. Desativar esta opção para gerar links de Markdown.", "option-show-unsupported-files": "Detetar todas as extensões de ficheiros", "option-show-unsupported-files-description": "Mostrar ficheiros com qualquer extensão mesmo que o Obsidian não os consiga abrir nativamente, para que possam ser vinculados e visualizados no Explorador de Ficheiros e Quick Switcher.", "option-link-autocompleted-format": "Novo formato do link", "option-link-autocompleted-format-description": "Quais links inserir, ao gerar links internos.", "option-choice-shortest-linktext": "Menor caminho, quando possível", "option-choice-relative-path": "Caminho relativo para o ficheiro", "option-choice-absolute-path": "Caminho absoluto para o ficheiro", "option-new-attachment-location": "Localização padrão para novos anexos", "option-new-attachment-location-description": "Onde anexos recém-criados são colocados.", "option-choice-subdirectory": "Numa subpasta na pasta atual", "option-attachment-folder-path": "Local da pasta de anexos", "option-attachment-folder-path-description": "Arquivos de anexo recém-criados aparecerão aqui. Isso inclui imagens criadas por meio de arrastar e soltar ou colar e gravações de áudio.", "option-attachment-subfolder-path": "Nome da subpasta", "option-attachment-subfolder-path-description": "Se o seu ficheiro está sob \"vault/pasta\", e o seu nome de subpasta definido em \"anexos\", os anexos serão guardados em \"vault/pasta/anexos\".", "option-attachment-subfolder-path-placeholder": "anexos", "option-excluded-files": "Ficheiros excluídos", "option-excluded-files-desc": "Ficheiros excluídos serão ocultos ou menos perceptíveis em vários lugares, como na Navegação Rápida, sugestões de links e Visualização em Gráfico.", "label-no-excluded-filters-applied": "Nenhum filtro de exclusão aplicado. Adicione um abaixo.", "label-excluded-filters-applied": "Ficheiros que correspondam aos seguintes filtros estão atualmente excluídos:", "label-excluded-filter": "Filtrar", "placeholder-excluded-filter": "Introduza um caminho ou \"/regex/\"..." }, "appearance": { "name": "Aparência", "option-base-theme": "Tema base", "option-base-theme-description": "Escolher o esquema de cores padrão do Obsidian.", "option-accent-color": "Cor de destaque", "option-accent-color-description": "Escolha uma cor de destaque para ser usada na aplicação.", "dark-theme": "Escuro", "light-theme": "Claro", "system-theme": "Adaptar ao sistema", "option-font": "Fonte", "option-advanced": "Avançado", "option-interface-font": "Fonte da interface", "option-interface-font-description": "Definir fonte base para todo o Obsidian.", "option-text-font": "Fonte do texto", "option-text-font-description": "Definir fonte para as vistas de edição e leitura.", "option-monospace-font": "Fonte monoespaçada", "option-monospace-font-description": "Definir fonte para lugares como blocos de código e pré-texto.", "label-single-font-currently-in-effect": " Fonte atualmente aplicada: ", "label-multiple-fonts-currently-in-effect": " As fontes seguintes estão atualmente aplicadas:", "option-font-placeholder": "Introduza o nome da fonte...", "label-no-custom-font-set": "Nenhuma fonte personalizada está aplicada. Adicione uma abaixo.", "label-font-applied": "A primeira fonte na lista que esteja disponível no seu sistema será aplicada.", "msg-font-not-found": "Esta fonte não foi detectada no seu sistema.", "msg-font-found": "Esta fonte foi detectada no seu sistema.", "label-font-name": "Nome da fonte", "option-community-themes": "Abra os temas da comunidade", "option-community-themes-description": "Visualize e use temas incríveis criados pela comunidade.", "button-browse-community-themes": "Procurar", "option-font-size": "Tamanho da fonte", "option-font-size-description": "Tamanho da fonte em pixels que afeta o editor e a visualização.", "option-font-size-action": "Ajuste rápido do tamanho da fonte", "option-font-size-action-description": "Ajuste o tamanho da fonte usando Ctrl + Scroll, ou usando o gesto 'apertar e fazer zoom' do touchpad.", "option-themes": "Temas", "option-manage-themes-description": "Gerencia os temas instalados e navegue por temas de comunidade.", "option-theme-button-manage": "Gerir", "option-choice-none": "Nenhum", "option-native-menus": "Menus nativos", "option-native-menus-desc": "Os menus da aplicação corresponderão aos do sistema operativo. Não serão afetados pelo seu tema.", "button-reload-themes": "Recarregar temas", "msg-reloaded-themes": "Recarregar temas com CSS customizado.", "button-open-themes-folder": "Abrir pasta de temas", "option-css-snippets": "Fragmentos CSS", "label-no-css-snippets-found": "Nenhum fragmento CSS encontrado na pasta de fragmentos.", "no-snippet-description": "Fragmentos CSS são guardados em \"{{path}}\".", "button-reload-snippets": "Recarregar fragmentos", "button-open-snippets-folder": "Abrir pasta de fragmentos", "msg-reloaded-snippets": "Fragmentos CSS recarregados.", "option-toggle-snippet-description": "Aplicar fragmento CSS em \"{{path}}\".", "label-installed-themes": "Temas instalados", "label-screenshot-unavailable": "Captura de ecrã indisponível", "label-default-theme": "Predefinido", "tooltip-click-to-enlarge": "Carregue para ampliar", "button-update": "Atualizar", "label-currently-selected": "Selecionado", "option-frame-style": "Estilo da moldura da janela", "option-frame-description": "Determina o estilo da barra de título das janelas do Obsidian. Requer uma reinicialização completa para as alterações entrarem em vigor.", "option-frame-hidden": "Escondido (Predefinido)", "option-frame-obsidian": "Moldura do Obsidian", "option-frame-native": "Moldura nativa", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Mostrar barra de título da tabulação", "option-show-view-header-desc": "Mostrar o cabeçalho na parte superior de cada tabulação.", "msg-updates-found": "Encontrado {{count}} tema para atualizar.", "msg-updates-found_plural": "Encontrados {{count}} temas para atualizar.", "button-check-for-updates": "Check for updates", "button-view-updates": "Visualizar atualizações", "button-update-all-themes": "Atualizar todos", "label-current-themes": "Temas da comunidade atuais", "label-currently-installed": "Atualmente tem {{count}} tema instalado.", "label-currently-installed_plural": "Atualmente tem {{count}} temas instalados." }, "hotkeys": { "name": "Atalhos", "prompt-filter": "Filtrar...", "tooltip-delete-hotkey": "Eliminar atalho", "label-waiting-for-hotkey-press": "Pressione atalho...", "tooltip-restore-default": "Restaurar ao padrão", "tooltip-customize-command": "Customize este comando", "tooltip-hotkey-single-conflict": "Este atalho está em conflito com \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "Este atalho está em conflito com {{count}} outros comandos", "label-blank-hotkey": "Em branco" }, "about": { "name": "Sobre", "label-commercial-license": "Commercial license", "label-license-key": "Chave de licença", "license-key-placeholder": "A sua chave de licença...", "label-activate-license": "Ativar licença", "button-activate": "Ativar", "label-unknown-version": "Desconhecida", "label-current-version": "Versão atual: ", "label-install-version": "(Versão do instalador: {{version}})", "label-up-to-date": "A sua app está atualizada!", "label-read-changelog": "Leia o registro de mudanças.", "label-manual-update-required": "To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.", "label-download": "Download", "label-new-version-ready": "Uma nova versão está pronta para ser instalada. ", "label-relaunch-to-update": "Reinicie a app para atualizar.", "label-disabled-updates": "Atualizações estão desativadas.", "label-checking-for-updates": "A procurar por atualizações...", "button-relaunch": "Reiniciar", "button-check-for-updates": "Procurar atualizações", "option-auto-update": "Atualizações automáticas", "option-auto-update-description": "Desative esta opção para evitar que o aplicativo verifique se há atualizações.", "option-get-help": "Obter ajuda", "option-get-help-description": "Obter ajuda sobre usar Obsidian.", "button-open": "Abrir", "option-language": "Idioma", "option-language-description": "Alterar o idioma de exibição.", "option-insider-build": "Receber compilações internas", "option-insider-build-description": "Atualização automática para compilações internas para experimentar novas funcionalidades. Observe que estas compilações podem ser menos estáveis.", "option-advanced": "Avançadas", "option-hw-acceleration": "Aceleração de Hardware", "option-hw-acceleration-description": "Ativa a Aceleração de Hardware, que usa o GPU para fazer o Obsidian mais estável.", "option-hw-acceleration-warning": "Se desativar esta opção, o desempenho do aplicativo será severamente degradado.", "option-config-location": "Substituir a pasta de configuração", "option-config-location-description": "Usa uma pasta de configuração diferente da padrão.Tem que começar com um ponto final.", "option-config-location-warning": "A localização de configuração tem de ter um nome de pasta válido que comece com um ponto final.", "label-license": "Licença", "label-your-commercial-license-key": "A sua chave de licença comercial é \"{{key}}\".", "label-commercial-license-info": "Registado para \"{{company}}\" para {{seats}} utilizadores. Válido até {{expiry}}.", "label-validating-commercial-license": "A validar...", "label-invalid-commercial-license": "Licença inválida: ", "button-remove-commercial-license": "Remover", "option-catalyst": "Licença Catalyst", "option-catalyst-desc": "Atualmente tem a licença Catalyst {{tier}}. Obrigado pelo seu apoio!", "option-catalyst-desc-no-license": "Não tem uma licença Catalyst de momento. A licença Catalyst é uma doação feita apenas uma vez para apoio o desenvolvimento do Obsidian.", "label-app": "App" }, "account": { "name": "Conta", "option-your-account": "A sua conta", "option-your-account-desc": "Está atualmente conectado com {{name}} ({{email}}).", "option-your-account-desc-no-login": "Não está conectado de momento. Uma conta é somente necessário para o Obsidian Sync, Obsidian Publish, e o Catalyst insider builds.", "button-manage-settings": "Gerir configurações", "label-insider": "confidente", "label-supporter": "apoiante", "label-vip": "VIP", "button-upgrade-catalyst": "Atualizar licença", "option-commercial-license": "Licença comercial", "option-commercial-license-desc": "Se usa Obsidian para propósitos comerciais, poderá precisar de uma licença comercial.", "button-purchase": "Comprar", "button-log-out": "Sair", "label-log-in": "Conecte-se", "label-sign-up": "Inscrever-se", "label-email": "E-mail", "placeholder-email": "O seu e-mail...", "label-password": "Senha", "placeholder-password": "A sua senha...", "button-login": "Entrar", "message-empty-email": "E-mail não pode estar vazio.", "message-invalid-email": "E-mail não é valido.", "message-empty-password": "Senha não pode estar vazia.", "message-login-failed": "Login falhou. Verifique se o seu e-mail e senha estão corretos.", "label-no-account": "Não tem uma conta? ", "link-sign-up-now": "Crie uma conta agora" }, "core-plugin": { "plugin-list": "Lista de plugins", "option-search-plugin": "Procure plugins base", "option-search-plugin-description": "Filtre plugins por nome ou descrição.", "placeholder-search-plugin": "Procurar plugins..." }, "third-party-plugin": { "name": "Plugins não oficiais", "option-restricted-mode": "Modo restrito", "option-restricted-mode-description": "Modo restrito desligado. Ligue para desativar plugins da comunidade..", "button-turn-on": "Ligar", "option-browse-community-plugins": "Plugins da comunidade", "option-browse-community-plugins-description": "Procure e instale plugins não oficiais criados pela nossa incrível comunidade.", "button-browse": "Procurar", "label-exit-restricted-mode": "Sair do Modo Restrito", "label-exit-restricted-mode-description-1": "Plugins da comunidade, como qualquer outro software que instale, pode potencialmente causar problemas de integridade de dados e segurança.", "label-exit-restricted-mode-description-2": "A segurança do plugin é importante para nós. Eis o que fazemos:", "label-exit-restricted-mode-description-3": "Apesar dos nossos esforços, existe uma pequena chance de um plugin da comunidade causar problemas.", "label-code-review": "Revisão de código inicial", "label-code-review-desc": "Os plugins passam por uma revisão de código inicial feita pela nossa equipa antes destes aparecerem na loja.", "label-open-source": "Código aberto", "label-open-source-desc": "A maioria dos plugins têm o código aberto no GitHub, podendo ser possível inspecionar o código.", "label-peer-audit": "Auditoria por colegas", "label-peer-audit-desc": "Temos uma grande comunidade de desenvolvedores que cuidam uns dos outros.", "label-report-mechanism": "Mecanismo de denúncia", "label-report-mechanism-desc": "Acompanhamos e removemos plugins defeituosos mediante denúncia do utilizador.", "label-exit-restricted-mode-disable-confirmation": "Gostaria de sair do Modo Restrito para habilitar plugins da comunidade? Recomendamos fortemente fazer uma cópia de segurança dos seus dados antes de o fazer.", "label-learn-more": "Aprenda mais sobre a segurança de plugins", "button-turn-on-community-plugins": "Ligar os plugins da comunidade", "label-trust-author": "Confia no autor deste vault?", "label-trust-author-description-1": "Está a abrir este vault pela primeira vez, e traz alguns plugins.", "label-trust-author-description-2": "Se obteve este vault de outra pessoa, por favor tenha atenção que plugins de origens desconhecidas podem causar riscos de segurança.", "label-trust-author-description-3": "Se não confia no autor deste vault, recomendamos permanecer no Modo Restrito, para que os plugins no vault não sejam executados.", "button-enable-plugins": "Confiar no autor e ativar plugins", "button-dont-trust-author": "Navegar no vault em Modo Restrito", "placeholder-community-plugins": "Procurar plugins da comunidade...", "msg-failed-load-plugins": "Falha ao carregar o plugin da comunidade.", "label-installed": "Instalado", "button-install": "Instalar", "button-enable": "Ativar", "button-disable": "Desativar", "button-copy-share-link": "Copy share link", "button-donate": "Donate", "label-no-results-found": "Nenhum resultado encontrado.", "msg-failed-to-load-manifest": "Falha ao carregar a descrição do plugin.", "label-version": "Versão: {{version}}", "label-currently-installed-version": " (Instalado atualmente: {{version}})", "label-by-author": "Por ", "label-repository": "Repositório: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "Este plugin não é compatível com o seu dispositivo.", "button-update": "Atualizar", "label-no-readme": "Este plugin não disponibilizou um ficheiro README.", "msg-installing-plugin": "A instalar o plugin \"{{name}}\"...", "msg-failed-to-install-plugin": "Falha ao instalar o plugin \"{{name}}\".", "msg-successfully-installed-plugin": "O plugin \"{{name}}\" foi instalado com sucesso.", "label-installed-plugins": "Plugins instalados", "button-reload-plugins": "Recarregar plugins", "msg-reloaded-third-party-plugins": "Recarregar plugins não oficiais.", "label-uninstall": "Desinstalar", "label-uninstall-plugin": "Desinstalar o plugin", "label-uninstall-plugin-confirmation": "Tem a certeza que quer desinstalar este plugin? Isto eliminará a pasta do plugin.", "button-open-plugins-folder": "Abrir pasta de plugins", "button-check-for-updates": "Procurar por atualizações", "button-update-all-plugins": "Atualizar todos", "label-current-plugins": "Plugins atuais", "label-currently-installed": "Atualmente tem {{count}} plugin instalado.", "label-currently-installed_plural": "Atualmente tem {{count}} plugins instalados.", "label-debug-startup-time": "Tempo de inicialização de debug", "label-debug-startup-time-description": "Mostrar uma mensagem com o tempo de inicialização de cada plugin quando a aplicação inicia.", "msg-no-updates-found": "Não foi encontrada nenhuma atualização de plugin.", "msg-updates-found": "Encontrada atualização para {{count}} plugin.", "msg-updates-found_plural": "Encontradas atualizações para {{count}} plugins.", "msg-update-plugin": "Atualizar para a versão {{version}}", "option-search-installed-plugin": "Procurar plugins instalados", "option-search-installed-plugin-description": "Filtrar plugins instalados por nome ou descrição.", "placeholder-search-installed-plugin": "Procurar plugins instalados...", "show-installed-only": "Mostrar só instalados", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "A mostrar {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Barra de ferramentas móvel", "option-configure-quick-action": "Configurar Ações Rápidas", "option-configure-quick-action-description": "Configurar qual o comando a acionar ao deslizar para baixo. O comando atual está definido para \"{{command}}\".", "button-configure": "Configurar", "placeholder-select-quick-action": "Selecione Ação Rápida...", "manage-toolbar-options": "Gerir opções da barra de ferramentas", "option-internal-link": "Adicionar link interno", "option-internal-embed": "Embutir", "option-tag": "Adicionar tag", "option-heading": "Ativar título", "option-strikethrough": "Ativar texto rasurado", "option-highlight": "Ativar destaque", "option-code": "Ativar código", "option-blockquote": "Ativar bloco de citação", "option-markdown-link": "Adicionar link Markdown", "option-bullet-list": "Ativar lista de marcadores", "option-numbered-list": "Ativar lista numerada", "option-indent-list": "Indentar lista de items", "option-unindent-list": "Reverter indentação do item da lista", "option-undo": "Desfazer", "option-redo": "Refazer", "option-move-caret-up": "Subir acento circunflexo", "option-move-caret-down": "Descer acento circunflexo", "option-move-caret-left": "Mover o acento circunflexo para a esquerda", "option-move-caret-right": "Mover o acento circunflexo para a direita", "option-first-line": "Ir par a primeira linha", "option-last-line": "Ir para a última linha", "option-toggle-keyboard": "Ativar teclado", "option-configure-toolbar": "Configurar barra de ferramentas móvel", "option-added-options": "Opções adicionais", "option-more-toolbar-options": "Mais opções da barra de ferramentas", "option-attach": "Inserir anexo", "option-add-command": "Adicionar comando global", "option-add-command-description": "Selecione qualquer comando global para adicionar à barra de ferramentas." } }, "editor": { "search": { "placeholder-find": "Pesquisar", "placeholder-replace": "Substituir", "label-previous": "Anterior", "label-next": "Próximo", "label-all": "Tudo", "label-exit-search": "Sair da pesquisa", "label-replace": "Substituir", "label-replace-all": "Substituir tudo" }, "link-suggestion": { "label-type-hash": "Digite #", "label-link-heading": "para linkar o título", "label-type-block": "Digite ^", "label-link-block": "para linkar blocos", "label-type-pipe": "Digite |", "label-change-display-text": "para alterar o texto de exibição", "label-no-match-found": "Nenhuma correspondência encontrada" }, "spellcheck": { "no-suggestion": "Sem sugestões...", "add-to-dictionary": "Adicionar ao dicionário" }, "menu": { "edit-link": "Editar link" }, "heading-suggestion": { "label-no-heading": "Sem cabeçalho", "label-heading-level": "Cabeçalho {{level}}" }, "print-modal": { "title": "Exportar para PDF", "caption": "Exportar \"{{filename}}\" para PDF com a definição abaixo.", "setting-page-size": "Tamanho de página", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Carta", "setting-page-size-tabloid": "Tablóide", "setting-include-file-name": "Incluir nome do ficheiro como título", "setting-landscape": "Paisagem", "setting-margin": "Margem", "setting-margin-default": "Padrão", "setting-margin-minimal": "Mínima", "setting-margin-none": "Nenhuma", "setting-downscale-percent": "Percentagem de redução", "button-export-to-pdf": "Exportar para PDF" }, "link-popover": { "tooltip-follow-link": "Seguir link", "tooltip-open-link": "Abrir link", "tooltip-search-tag": "Procurar etiqueta" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Abrir no aplicativo padrão", "empty-sidebar": "A barra lateral está vazia, tente arrastar um painel aqui.", "sidebar-expand": "Expandir", "sidebar-collapse": "Recolher", "msg-fail-to-save-file": "Falha ao guardar o ficheiro \"{{filepath}}\". {{message}}.", "no-file": "Nenhum ficheiro", "msg-file-changed": "\"{{file}}\" foi externamente modificado, ao mergir automaticamente as alterações.", "switch-vault": "Abra outro vault", "help": "Ajuda", "settings": "Definições", "drag-to-rearrange": "Arraste para reorganizar", "msg-switched-to-read": "Modo de visualização padrão mudado para leitura.", "msg-switched-to-edit": "Modo de visualização padrão mudado para normal.", "msg-upgrade-installer": "Para usar esta funcionalidade, reinstale com o instalador mais recente, disponível no nosso website.", "tooltip-restore-default-settings": "Restaurar definições padrão", "label-copy": "Copiar para a área de transferência", "copied_generic": "Copied to your clipboard", "copied": "{{item}} copiado para a área de transferência", "url": "Endereço", "msg-open-file-through-uri": "Ficheiro aberto \"{{path}}\"", "msg-file-not-found-through-uri": "Ficheiro \"{{name}}\" não encontrado.", "delete-action-short-name": "Eliminar", "msg-indexing": "O Obsidian está a indexar o seu vault...\nIsto só acontecerá uma vez.\nAlgumas funcionalidades poderão não estar disponíveis até estar completo.", "msg-indexing-complete": "Indexação completada.", "msg-sandbox-vault": "Isto é um vault para testes.\nModificações feitas neste vault serão perdidas.", "label-enter-to-create": "Carregue para criar", "label-update-available": "Atualização Disponível", "label-debug-info": "Informação de debug", "button-learn-more": "Saber mais", "button-not-now": "Agora não", "button-add": "Adicionar", "button-manage": "Gerir", "label-new-tab": "Nova aba", "msg-tab-busy": "Esta aba está atualmente ocupada, por favor tente novamente mais tarde", "empty-state": { "no-file-open": "Nenhum ficheiro está aberto", "create-new-file": "Criar novo ficheiro", "go-to-file": "Ir para o ficheiro", "see-recent-files": "Ver ficheiros recentes", "close": "Fechar", "unknown-pane-title": "O plugin não está mais ativo", "unknown-pane-desc": "O plugin criado para este painel ({{type}}) foi-se embora" }, "menu": { "edit-view": "Editar (Ctrl/Cmd+Click para editar num novo painel)", "read-view": "Vista atual: leitura", "switch-to-edit-view": "Clique para editar", "switch-to-read-view": "Clique para visualizar", "mod-click-open-new-tab": "{{key}}+Clique para abrir numa nova aba", "find": "Encontrar...", "replace": "Substituir...", "edit": "Edição", "preview": "Visualização", "more-options": "Mais opções", "close": "Fechar", "close-others": "Fechar outros", "close-right": "Fechar abas à direita", "pin": "Fixar", "unpin": "Desafixar", "unlink-tab": "Desafixar aba", "link-tab": "Ligar à aba...", "toggle-source-mode": "Modo de origem", "toggle-reading-view": "Modo de leitura", "delete-file": "Eliminar ficheiro", "create-file": "Criar este ficheiro", "open-link": "Abrir link", "open-in-new-tab": "Abrir numa nova aba", "open-to-the-right": "Abrir à direita", "copy-url": "Copiar endereço", "close-current-tab": "Fechar aba atual", "copy": "Copiar", "cut": "Cortar", "paste": "Colar", "paste-as-plain-text": "Colar como texto simples", "select-all": "Selecionar tudo", "rename-heading": "Renomear este cabeçalho...", "rename-blockid": "Renomear o ID deste bloco...", "open-in-new-window": "Abrir numa nova janela", "move-to-new-window": "Mover para uma nova janela", "open-in-browser": "Open in browser", "stack-tabs": "Empilhar abas", "unstack-tabs": "Desempilhar abas" }, "tooltip": { "click-to-expand": "Clique para expandir", "click-to-collapse": "Clique para recolher", "alias": "Pseudónimo", "not-created-yet": "Ainda não foi criado, selecione para criar" }, "start-screen": { "label-version": "Versão", "option-open-folder-as-vault": "Abrir pasta como vault", "option-open-folder-as-vault-description": "Selecione uma pasta existente de ficheiros Markdown.", "option-create-vault": "Criar um novo vault", "option-create-vault-description": "Criar um novo vault do Obsidian sob uma pasta.", "option-connect-obsidian-sync": "Conectar ao Obsidian Sync", "option-connect-obsidian-sync-description": "Configurar um vault sincronizado com um vault remoto existente.", "option-new-vault-name": "Nome do vault", "option-new-vault-name-description": "Selecione um nome para o seu vault incrível.", "option-new-vault-location": "Localização", "option-new-vault-location-description": "Selecione um lugar para o seu novo vault.", "label-new-vault-location-preview": "O seu novo vault será colocado em: ", "option-reveal-vault-in-explorer": "Revelar vault no explorador de ficheiros", "option-reveal-vault-in-explorer-mac": "Revelar vault no Finder", "option-rename-vault": "Renomear vault...", "msg-error-rename-exists": "Já existe um vault com este nome.", "msg-error-nested": "Não é possível mover o vault para uma pasta dele próprio.", "msg-error-rename-open": "Não é possível renomear um vault atualmente aberto.", "msg-rename-failed": "Falha em renomear o vault.", "msg-rename-success": "Sucesso em renomear o vault.", "option-move-vault": "Mover vault...", "msg-move-select-dest": "Selecionar pasta de destino", "msg-error-move-exists": "Já existe um vault no destino escolhido.", "msg-error-move-open": "Não é possível mover um vault atualmente aberto.", "msg-move-failed": "Falha ao mover o vault.", "msg-move-success": "Sucesso ao mover o vault.", "option-remove": "Remover da lista", "button-quick-start": "Começo rápido", "button-open": "Abrir", "button-browse": "Selecionar", "button-connect": "Conectar", "button-create-vault": "Criar", "button-back": "Voltar", "msg-empty-vault-name": "O vault precisa de um nome.", "msg-invalid-folder": "Selecione uma pasta válida.", "msg-failed-to-create-vault": "Falha ao criar vault.", "msg-failed-to-create-vault-at-location": "Não foi possível criar um vault no local selecionado. Confira o local e permissões.", "msg-error-failed-to-open-vault": "Falha ao abrir.", "msg-error-remove-current-open-vault": "Não é possível eliminar um vault aberto.", "option-get-help": "Obter Ajuda", "option-user-email": "Email", "placeholder-your-email": "O seu email...", "option-user-password": "Password", "placeholder-your-password": "A sua password...", "button-sign-in": "Entrar", "button-setup": "Configurar", "option-connect-vault-desc": "Criar um vault sincronizado neste dispositivo.", "tooltip-own-vault": "Este é um vault remoto criado por si.", "tooltip-shared-vault": "Este é um vault remoto partilhado consigo." }, "drag-and-drop": { "insert-link-here": "Inserir link aqui", "insert-links-here": "Inserir links aqui", "move-into-folder": "Mover para \"{{folder}}\"", "star-this-file": "Adicionar aos favoritos", "star-these-files": "Adicionar aos favoritos", "open-in-this-tab": "Abrir nesta aba", "open-as-tab": "Abrir numa nova aba" }, "window": { "maximize": "Maximizar", "minimize": "Minimizar", "restore-down": "Diminuir", "close-window": "Fechar", "go-back": "Voltar", "go-forward": "Avançar" }, "start-up": { "loading-obsidian": "A carregar o Obsidian...", "obsidian-load-error": "Ocorreu um erro a carrevar o Obsidian.", "button-reload-app": "Recarregar app", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "Abrir outro vault", "loading-components": "A carregar componentes...", "loading-plugins": "A carregar plugins...", "loading-vault": "A carregar o vault...", "msg-failed-to-load-vault": "Falha ao carregar o vault: ", "loading-cache": "A carregar a cache...", "loading-workspace": "A carregar a área de trabalho..." }, "mobile": { "action-import": "Importar para o vault", "action-choose-file-to-insert": "Escolha um ficheiro para inserir", "action-insert-text-into-file": "Inserir texto no {{filename}}", "action-insert-link-into-file": "Inserir link no {{filename}}", "msg-importing": "A importar...", "msg-import-success": "Importado com sucesso", "msg-failed-to-import-file": "Falha ao importar ficheiro {{filename}}", "msg-back-again-to-exit": "Pressione novamente para sair." }, "help-screen": { "label-official-help-site": "Site oficial de ajuda", "label-official-help-site-desc": "Leia a documentação oficial de ajuda do Obsidian, disponível em várias linguagens.", "action-visit": "Visite", "label-discord-chat": "Conversação do Discord", "label-discord-chat-desc": "Discord é o melhor sítio para conversar com outros utilizadores experiênciados do Obsedian espalhados pelo mundo.", "action-join": "Junte-se", "label-forum": "Fórum oficial", "label-forum-desc": "Ajudem-se uns aos outros, publiquem pedidos de funcionalidades, reportem bugs, e tenham discussões aprofundadas sobre gestão de conhecimento.", "label-sandbox-vault": "Vault de tests", "label-sandbox-vault-desc": "Brinque e experimente várias funcionalidades. Por favor note que as mudanças feitas não serão guardadas." } }, "commands": { "save-file": "Guardar ficheiro atual", "follow-cursor-link": "Seguir o link", "open-cursor-link-in-new-tab": "Abrir o link debaixo do cursor numa nova aba", "open-cursor-link-to-the-right": "Abrir o link debaixo do cursor à direita", "open-cursor-link-in-new-window": "Abrir o link debaixo do cursor numa nova janela", "navigate-tab-above": "Focar no grupo de abas em cima", "navigate-tab-below": "Focar no grupo de abas em baixo", "navigate-tab-left": "Focar no grupo de abas à esquerda", "navigate-tab-right": "Focar no grupo de abas à direta", "toggle-pin": "Ativar o pino", "split-right": "Dividir à direita", "split-down": "Dividir para baixo", "toggle-stacked-tabs": "Alternar abas empilhadas", "navigate-back": "Voltar", "navigate-forward": "Avançar", "use-dark-mode": "Usar modo escuro", "use-light-mode": "Usar modo claro", "change-theme": "Mudar o tema", "search-current-file": "Localizar no ficheiro atual", "search-replace-current-file": "Localizar e substituir no ficheiro atual", "open-settings": "Abrir definições", "open-help": "Abrir ajuda", "toggle-edit": "Alternar entre visualização de edição/leitura", "toggle-source-mode": "Alterar entre modo de Visualização ao vivo/Origem", "delete-current-file": "Eliminar ficheiro atual", "new-tab": "Nova aba", "close-all-tabs": "Close all tabs", "close-active-tab": "Fechar aba atual", "close-other-tabs": "Fechar todas as outras abas", "toggle-left-sidebar": "Ativar barra lateral esquerda", "toggle-right-sidebar": "Ativar barra lateral direita", "toggle-default-new-tab-mode": "Alternar modo padrão para novas abas", "focus-editor": "Focar no editor", "toggle-fold": "Ativar recolher na linha atual", "fold-all": "Recolher todos os títulos e listas", "unfold-all": "Expandir todos os títulos e listas", "fold-more": "Colapsar mais", "fold-less": "Colapsar menos", "swap-line-up": "Mova a linha para cima", "swap-line-down": "Mova a linha para baixo", "remove-heading": "Remover cabeçalho", "toggle-heading": "Definir como cabeçalho {{level}}", "toggle-bold": "Ativar o negrito para seleção", "toggle-italics": "Ativar o itálico para seleção", "toggle-highlight": "Ativar o destaque para seleção", "toggle-comments": "Ativar comentários para seleção", "insert-link": "Inserir link", "toggle-spellcheck": "Ativar verificação ortográfica", "delete-paragraph": "Remover parágrafo", "toggle-checklist": "Ativar status da lista de controlo", "cycle-list-checklist": "Alternar marcadores/caixas de seleção", "insert-callout": "Inserir chamamento", "edit-file-title": "Editar título do ficheiro", "copy-path": "Copiar caminho do ficheiro", "copy-url": "Copiar endereço do Obsidian", "export-pdf": "Exportar para PDF", "reload": "Recarregar app sem guardar", "undo-close-tab": "Undo close tab", "context-menu": "Mostrar menú de context embaixo do cursor", "show-debug-info": "Mostrar informação de debug", "always-on-top": "Alternar a janela estar sempre em cima", "zoom-in": "Ampliar", "zoom-out": "Reduzir", "reset-zoom": "Restaurar ampliação", "toggle-preview": "Ativar modo de edição/visualização", "move-to-new-window": "Mover painel atual para uma nova janela", "open-in-new-window": "Abrir painel atual numa nova janela", "rename-current-file": "Renomear ficheiro atual" }, "dialogue": { "label-link-affected": "Irá afetar os links {{links}} nos {{files}}.", "msg-updated-links": "{{links}} atualizados em {{files}}.", "label-update-links": "Atualizar links", "label-confirm-update-link-to-file": "Quer atualizar links internos que linkam a este ficheiro?", "button-always-update": "Sempre atualizar", "button-just-once": "Apenas uma vez", "button-do-not-update": "Não atualizar", "label-confirm-deletion": "Tem a certeza que quer eliminar \"{{filename}}\"?", "label-move-to-system-trash": "Será movido para a reciclagem de seu sistema.", "label-move-to-vault-trash": "Será movido para a reciclagem do Obsidian, que está localizada na pasta escondida \".trash\" em seu vault.", "label-permanent-delete": "O ficheiro será permanentemente apagado.", "label-non-empty-folder": "Esta pasta não está vazia.", "label-delete-folder-warning": "Se continuar, todos os ficheiros desta pasta serão apagados.", "label-delete-folder": "Eliminar pasta", "button-delete": "Eliminar", "button-delete-do-not-ask-again": "Apague e não pergunte novamente", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "Existem atualmente {{links}} a direcionar a esta nota.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "Eliminar ficheiro", "button-manage": "Manage", "button-cancel": "Cancelar", "button-done": "Feito", "button-save": "Save", "button-stop": "Stop", "button-continue": "Continue", "preparing-pdf": "A preparar PDF...", "label-rename-file": "Renomear ficheiro", "label-new-name": "Novo nome", "msg-rename-success": "Ficheiro renomeado com sucesso.", "label-rename-heading": "Rename heading", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Criar Nota", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Abrir Rapidamente...", "open-vault": "Abrir Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Encontrar", "replace": "Substituir", "insert-callout": "Chamamento", "insert-markdown-link": "Link de Markdown", "insert-wikilink": "Link", "set-heading": "Cabeçalho {{level}}", "no-heading": "Sem Cabeçalho", "insert-quote": "Citação", "export-pdf": "Exportar PDF", "toggle-bullet-list": "Lista de Marcadores", "toggle-numbered-list": "Lista Numerada", "toggle-checklist": "Lista de Tarefas", "toggle-bold": "Negrito", "toggle-code": "Código", "toggle-comment": "Comentário", "toggle-italics": "Itálico", "toggle-highlight": "Destacar", "toggle-strikethrough": "Tachado", "toggle-comments": "Comentários", "fold-all": "Colapsar Todos", "unfold-all": "Mostrar Todos", "fold-more": "Colapsar Mais", "fold-less": "Colapsar Menos", "source-mode": "Modo Origem", "reading-view": "Vista de Leitura", "show-debug-info": "Mostrar Informação de Debug", "navigate-back": "Navegar para Trás", "navigate-forward": "Navegar para a Frente", "toggle-left-sidebar": "Alternar Barra Lateral da Esquerda", "toggle-right-sidebar": "Alternar Barra Lateral da Direita", "split-right": "Dividir à direita", "split-down": "Dividir para baixo", "release-notes": "Notas de lançamento" }, "plugins": { "name": "Plugins", "file-explorer": { "name": "Explorador de ficheiros", "desc": "Ver todos os ficheiros do seu vault.", "action-open": "Abrir explorador de ficheiros", "action-show": "Mostrar explorador de ficheiros", "action-create-note": "Criar nova nota", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Colapsar todos", "action-expand-all": "Expandir todos", "action-new-note": "Nova nota", "action-new-folder": "Nova pasta", "action-change-sort": "Mudar ordem", "action-reveal-file": "Revelar ficheiro no explorador de ficheiros", "action-reveal-active-file": "Revelar ficheiro ativo no explorador de ficheiros", "command-move-file": "Mover ficheiro para outra pasta", "action-move-file": "Mover ficheiro para...", "action-move-folder": "Mover pasta para...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "Digite o nome de uma pasta", "label-no-folders": "Nenhuma pasta encontrada.", "instruction-navigate": "Navegar", "instruction-move": "Mover", "instruction-dismiss": "Dispensar", "label-sort-a-to-z": "Ordenar por nome (A-Z)", "label-sort-z-to-a": "Ordenar por nome (Z-A)", "label-sort-new-to-old": "Ordenar por última edição (recentes-antigos)", "label-sort-old-to-new": "Ordenar por última edição (antigos-recentes)", "label-sort-created-old-to-new": "Data de criação (antigos-recentes)", "label-sort-created-new-to-old": "Data de criação (recentes-antigos)", "menu-opt-new-note": "Nova nota", "menu-opt-new-folder": "Nova pasta", "menu-opt-set-attachment-folder": "Definir como pasta de anexos", "menu-opt-rename": "Renomear", "menu-opt-delete": "Eliminar", "menu-opt-make-copy": "Fazer uma cópia", "msg-invalid-characters": "O nome do ficheiro não pode ter nenhum destes caracteres: ", "msg-unsafe-characters": "Os links não funcionam com nomes de ficheiro que contenham algum destes caracteres: ", "msg-file-already-exists": "Já existe um ficheiro com esse nome", "msg-empty-file-name": "O nome do ficheiro não pode ficar vazio.", "msg-bad-dotfile": "O nome do ficheiro não pode começar com um ponto final.", "tooltip-modified-time": "Modificado pela última vez a {{time}}", "tooltip-created-time": "Criado a {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Mover", "label-untitled-file": "Sem título", "label-untitled-folder": "Sem título", "msg-set-attachment-folder": "Daqui em diante, os anexos serão guardados em \"{{path}}\"." }, "search": { "name": "Procurar", "desc": "Procurar por palavra-chave em todas as notas.", "action-open-search": "Pesquisar em todos os ficheiros", "label-collapse-results": "Recolher resultados", "label-match-case": "Correspondência", "label-explain-search-term": "Explicar termos de pesquisa", "label-more-context": "Mostrar o contexto", "prompt-start-search": "Digite para pesquisar...", "label-match-text": "Resultados encontrados: ", "label-match-regex": "Regex encontrado: ", "label-match-exact-text": "Contém texto exato: ", "label-match-all": "Todos os resultados de: ", "label-match-any": "Qualquer resultado de: ", "label-excluding": "Excluindo: ", "label-case-sensitive": "Diferencia maiúsculas de minúsculas", "label-case-insensitive": "Não diferencia maiúsculas de minúsculas", "label-match-file-path": "Caminho do ficheiro correspondente: ", "label-match-file-name": "Nome do ficheiro correspondente: ", "label-match-content": "Pesquisar pelo conteúdo do ficheiro: ", "label-match-task": "Pesquisar por tarefa: ", "label-match-task-todo": "Pesquisar tarefa (por fazer): ", "label-match-task-done": "Pesquisar tarefa (concluída): ", "label-match-line": "Pesquisar por linha: ", "label-match-block": "Pesquisar port bloco: ", "label-match-section": "Pesquisar por secção: ", "label-match-tag": "Pesquisar por tag: ", "label-no-matches": "Nenhuma correspondência encontrada.", "matches-with-count": "... e mais {{count}} correspondência.", "matches-with-count_plural": "... e mais {{count}} correspondências.", "label-copy-search-results": "Copiar resultados de pesquisa", "button-copy-results": "Copiar resultados", "msg-successfully-copied": "Resultados copiados para a área de transferência.", "option-show-path": "Mostrar caminho", "option-show-path-description": "Mostrar caminho completo do ficheiro e não apenas o nome.", "option-link-style": "Estilo de link", "option-link-style-description": "Transformar opcionalmente cada resultado de pesquisa num link.", "option-choice-link-style-none": "Nenhum", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Link Markdown", "option-list-prefix": "Prefixo de lista", "option-list-prefix-description": "Adicionar opcionalmente um prefixo de lista de items a cada resultado de pesquisa.", "option-choice-list-style-none": "Nenhum", "option-choice-list-style-dash": "Hífen (-)", "option-choice-list-style-asterisk": "Asterisco (*)", "option-choice-list-style-numbered": "Numerada", "tooltip-clear-search": "Limpar pesquisa", "label-search-options": "Opções de pesquisa", "tooltip-read-more": "Ler mais", "label-history": "Histórico", "tooltip-clear-history": "Apagar histórico de pesquisa", "label-path-option-description": "Pesquisar caminho do ficheiro", "label-file-name-option-description": "Pesquisar nome do ficheiro", "label-tag-option-description": "Pesquisar por tags", "label-line-option-description": "Pesquisar palavras-chave na mesma linha", "label-section-option-description": "Pesquisar palavras-chave sob o mesmo título", "menu-opt-search-for": "Pesquisar por \"{{keyword}}\"" }, "quick-switcher": { "name": "Navegação rápida", "desc": "Saltar para qualquer arquivo sem sair do teclado. Ctrl/Cmd+O para ativar.", "short-name": "Switcher", "action-open": "Abrir Quick Switcher", "instruction-navigate": "Navegar", "instruction-open": "Abrir", "instruction-open-in-new-tab": "para uma nova aba", "instruction-open-to-the-right": "para abrir à direita", "instruction-create": "Criar", "instruction-dismiss": "Dispensar", "label-no-note-create-new": "Nenhuma nota encontrada. Entre para criar uma nova.", "prompt-type-file-name": "Digite nome de um arquivo para alternar ou criar...", "label-enter-to-create": "Enter para criar", "tooltip-not-created-yet": "Ainda não foi criado, selecione para criar", "option-show-existing-only": "Mostrar só existentes", "option-show-existing-only-description": "Se mostrar links para ficheiros que ainda não foram criados.", "option-show-attachments": "Mostrar anexos", "option-show-attachments-desc": "Mostrar anexos como imagens, vídeos e PDFs.", "option-show-all-file-types": "Mostrar todo o tipo de ficheiros", "option-show-all-file-types-desc": "Mostrar todos os ficheiros, mesmo os que o Obsidian não consegue abrir. O ficheiro será aberto com a aplicação padrão para o tipo de ficheiro." }, "graph-view": { "name": "Visualização de diagrama de grafo", "desc": "Tenha um visão diagramática dos links entre as notas.", "action-open": "Abrir Visualização de diagrama de grafo", "action-open-local": "Abrir diagrama de grafo local", "action-copy-screenshot": "Copiar captura de tela", "tab-title": "Diagrama de grafo de {{displayText}}", "label-filters": "Filtros", "prompt-filter-nodes": "Procurar ficheiros...", "option-depth": "Profundidade", "option-depth-description": "Mostrar nódulos a esta distância de links", "option-neighbor-links": "Links vizinhos", "option-neighbor-links-description": "Mostrar links entre vizinhos.", "option-forelinks": "Links de saída", "option-forelinks-description": "Mostrar links para outros ficheiros", "option-backlinks": "Links de entrada", "option-backlinks-description": "Mostrar links para outros ficheiros", "option-show-tags": "Tags", "option-show-tags-description": "Tags estão linkados aos ficheiros que os contêm", "option-show-attachments": "Anexos", "option-show-attachments-description": "Mostrar anexos incluídos nos ficheiros", "option-show-existing-files-only": "Apenas ficheiros existentes", "option-show-existing-files-only-description": "Quando selecionado, links para ficheiros não existentes não serão mostrados", "option-show-orphans": "Órfãos", "option-show-orphans-description": "Mostrar ficheiros que não estão linkados a nenhum outro ficheiro", "label-display": "Tela", "option-show-arrows": "Setas", "option-show-arrows-description": "Mostrar setas quando a tela for ampliada", "option-text-fade": "Limite para a visibilidade do texto", "option-node-size": "Tamanho dos nódulos", "option-link-thickness": "Grossura dos links", "label-forces": "Forças", "option-center-force": "Centro de força", "option-link-force": "Força dos links", "option-link-distance": "Distância entre links", "option-repel-force": "Força de repulsão", "tooltip-open-graph-settings": "Abrir definições do diagrama de grafo", "msg-screenshot-copied": "Captura de tela copiada para a área de transferência.", "label-groups": "Grupos", "placeholder-enter-query": "Inserir query...", "tooltip-delete-graph": "Eliminar grupo", "button-new-group": "Novo grupo", "tooltip-click-to-change-drag-to-reorder": "Clique para mudar a cor\nArraste para reordenar grupos", "action-timelapse": "Começar animação timelapse do diagrama de grafo", "tooltip-start-timelapse-animation": "Começar animação timelapse", "button-animate-timelapse": "Animar" }, "backlinks": { "name": "Backlinks", "desc": "Mostrar o número de backlinks na barra de status.", "action-open": "Abrir backlinks", "action-show": "Mostrar painel de backlinks", "action-open-for-current": "Abrir backlinks para o ficheiro atual", "action-toggle-backlinks-in-document": "Ativar backlinks no document", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "Menções vinculadas", "label-no-backlinks": "Nenhum backlink encontrado.", "label-unlinked-mentions": "Menções desvinculadas", "label-show-search": "Mostrar filtro de pesquisa", "label-link-button-text": "Link", "tab-title": "Backlinks para {{displayText}}", "label-no-unlinked-mentions": "Nenhuma menção desvinculada encontrada.", "ellipsis": "...", "option-backlink-in-document": "Backlink no documento", "option-backlink-in-document-desc": "Mostrar backlinks no document por predefinição quando se abre novos painéis." }, "outgoing-links": { "name": "Links Externos", "desc": "Mostrar links externos e detectar menções de outras notas sem link na nota atual.", "action-open": "Mostrar links externos", "action-show": "Mostrar painel de links externos", "action-open-for-current": "Abrir links externos no ficheiro atual", "tab-title": "Links externos de {{displayText}}", "label-links": "Links", "label-no-links": " Nenhum link encontrado.", "label-unlinked-mentions": "Menções sem link", "tooltip-link-file": "Link este ficheiro", "tooltip-not-created": "Ainda não criado" }, "tag-pane": { "name": "Painel de tags", "desc": "Mostra todas as suas tags com o respetivo número de ocorrências.", "action-show": "Mostrar painel de tags", "label-no-tags": "Nenhuma tag encontrada.", "label-sort-by-name-a-to-z": "Nome de tag (A-Z)", "label-sort-by-name-z-to-a": "Nome de tag (Z-A)", "label-sort-by-frequency-high-to-low": "Frequência (decrescente)", "label-sort-by-frequency-low-to-high": "Frequência (crescente)", "action-show-nested-tags": "Mostrar nested tags", "action-collapse-all": "Colapsar todos", "action-expand-all": "Expandir todos" }, "page-preview": { "name": "Pré-visualização de página", "desc": "Pré-visualize uma nota quando passar com o cursor sobre um link interno. Ctrl/Cmd + passar com o curso no modo de editor.", "label-empty-note": "\"{{linktext}}\" ainda não foi criado. Clique para criar.", "label-source-editor": "Editor", "label-source-preview": "Pré-visualização", "label-source-search": "Pesquisar, Backlinks, e Links externos", "label-require-mod": "É necessário {{key}} para ativar a pré-visualização de página ao passar com o cursor" }, "starred": { "name": "Favoritos", "desc": "Adicione aos favoritos ficheiros e pesquisas frequentes.", "action-show": "Mostrar painel de favoritos", "action-toggle": "Adicionar ou remover dos favoritos", "action-toggle-search": "Adicionar ou remover a pesquisa atual dos favoritos", "action-star": "Adicionar aos favoritos", "action-unstar": "Remover dos favoritos", "menu-opt-remove": "Remover", "msg-successfully-starred": "Adicionado aos favoritos {{type}} \"{{title}}\".", "msg-removed-starred": "Removido dos favoritos {{type}} \"{{title}}\".", "msg-cannot-find-path": "Não foi possível encontrar o ficheiro em \"{{path}}\"." }, "custom-css": { "name": "CSS personalizado", "desc": "Utilize o \"obsidian.css\" disponível no vault.", "setting-community-themes": "Temas da comunidade", "msg-fetching-themes": "A obter informações dos temas da comunidade", "prompt-filter": "Filtrar...", "label-dark-theme-only": "Apenas temas escuros", "label-light-theme-only": "Apenas temas claros", "label-use": "Usar", "label-stop-use": "Pare de usar este tema", "label-install-and-use": "Instalar e usar", "label-update": "Atualizar", "label-no-readme": "Este tema não providenciou um ficheiro README.", "tooltip-remove-theme": "Remover tema", "label-visit-on-github": "Visitar no GitHub", "msg-load-error": "Não foi possível abrir os temas da comunidade, verifique a sua conexão por favor.", "msg-now-using-theme": "Está agora a usar {{title}} como o seu tema de CSS.", "msg-deleted-theme": "O tema {{title}} foi apagado.", "msg-updated-theme": "O tema {{title}} foi atualizado.", "label-installed": "Instalado", "label-legacy": "Legacy", "button-update-all-themes": "Atualizar todos", "msg-failed-load-themes": "Falha no carregamento dos temas da comunidade.", "msg-no-updates-found": "Nenhuma atualização de tema encontrada.", "msg-updates-found": "Encontrado {{count}} tema para atualizar.", "msg-updates-found_plural": "Encontrado {{count}} temas para atualizar.", "msg-failed-to-install-theme": "Falha na instalação do tema \"{{name}}\".", "msg-successfully-installed-theme": "Sucesso na instalação do tema \"{{name}}\".", "msg-installing-theme": "A instalar tema \"{{name}}\"...", "label-search-summary": "A mostrar {{themeCount}}:", "label-update-available": "Atualização disponível" }, "command-palette": { "name": "Paleta de comando", "desc": "Digite um comando para executá-lo. Não precisa usar a interface de utilizador ou lembrar o atalho.", "action-open": "Abrir paleta de comando", "instruction-navigate": "Navegar", "instruction-use": "Usar", "instruction-dismiss": "Ignorar", "label-no-commands": "Nenhum comando encontrado.", "prompt-type-command": "Digite um comando...", "label-pinned-commands": "Comandos fixados", "option-add-new-pin": "Novo comando fixado", "option-add-new-pin-description": "Os comandos fixados irão aparecer no topo da paleta de comandos." }, "markdown-format-importer": { "name": "Importador de formato Markdown", "desc": "Converter Markdown de outros aplicativos para o formato do Obsidian.", "action-open": "Importador de Open Markdown", "option-roam-tag-fixer": "Conversor de tags do Roam Research", "option-roam-tag-fixer-description": "Converte \"#tag\" e \"#[[tag]]\" para \"[[tag]]\".", "option-roam-highlight-fixer": "Conversor de destaques do Roam Research", "option-roam-highlight-fixer-description": "Converte \"^^highlight^^\" para \"==highlight==\".", "option-roam-todo-converter": "Conversor de TODO do Roam Research", "option-roam-todo-converter-description": "Converte \"{{[[TODO]]}}\" para \"[ ]\".", "option-bear-highlight-fixer": "Conversor de destaques do Bear", "option-bear-highlight-fixer-description": "Converte \"::highlight::\" para \"==highlight==\".", "zettelkasten-link-fixer": "Conversor de links de Zettelkasten", "zettelkasten-link-fixer-description": "Converte links \"[[UID]]\" para \"[[UID File Name]]\" completo.", "zettelkasten-link-beautifier": "Embelezador de link de Zettelkasten", "zettelkasten-link-beautifier-description": "Converte links \"[[UID]]\" e também os embeleza \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Aviso: o importador converterá todos os ficheiros do seu vault, não apenas o ficheiro atual.", "msg-override-files-warning": "Os seus ficheiros serão substituídos. Faça backup de todos os seus ficheiros antes de tentar a conversão.", "label-start-conversion": "Começar a conversão", "label-stop": "Parar", "label-go-back": "Voltar", "label-done": "Feito", "label-processing": "Processando...", "label-cancelling": "Cancelando...", "label-finished": "Terminado!", "label-processed-files": "Ficheiros processados", "label-modified-files": "Ficheiros modificados", "label-total-replacements": "Substituição total" }, "daily-notes": { "name": "Notas diárias", "desc": "Abrir a nota diária de hoje, ou criar uma se não houver.", "short-name": "Hoje", "action-open": "Abrir nota de hoje", "action-open-previous": "Abrir a nota diária anterior", "action-open-next": "Abrir a próxima nota diária", "action-insert-text": "Insert text into daily note", "action-insert-link": "Insert link into daily note", "msg-fail-format": "Falha ao criar a nota diária. \"{{format}}\" não é um formato válido.", "msg-fail-folder": "Falha ao criar nota diária. Pasta \"{{folderOption}}\" não encontrada.", "msg-fail-template-file": "Falha ao criar nota diária. Ficheiro modelo \"{{template}}\" não encontrado.", "msg-no-previous": "Não há nota diária anterior a esta.", "msg-no-next": "Nao há nota diária posterior a esta.", "option-date-format": "Formato de data", "label-refer-to-syntax": "Para mais sintaxe, consulte: ", "label-syntax-link": "formato de referência", "label-syntax-live-preview": "Aqui está como vai aparecer: ", "option-new-file-location": "Nova localização do ficheiro", "option-new-file-location-description": "O caminho da pasta para criar a nova nota diária.", "option-template": "Localização do ficheiro modelo", "option-template-description": "O caminho do ficheiro utilizado como modelo.", "option-open-on-start": "Abrir nota diária no arranque", "option-open-on-start-description": "Abra a sua nota diária automaticamente sempre que abrir o vault." }, "unique-note-creator": { "name": "Criador de notas únicas", "desc": "Crie notas com prefixos da data únicos, para workflows como zettelkasten ou slip box.", "short-name": "Único", "action-create-note": "Crie uma nova nota única", "option-new-file-location": "Noca localização do ficheiro", "option-new-file-location-description": "O caminho do ficheiro para criar uma nova nota única.", "msg-folder-not-found": "Falhar na criação de uma nota única. A pasta \"{{folderOption}}\" não foi encontrada.", "option-template-file": "Localização do ficheiro modelo", "option-template-file-description": "O caminho do ficheiro a usar como modelo.", "option-template-file-placeholder": "Exemplo: pasta1/nota", "option-id-format": "Formato do prefixo único", "msg-template-file-not-found": "Falha na criação da nota única. O ficheiro modelo \"{{template}}\" não foi encontrado.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Nota aleatória", "desc": "Abre uma nota aleatória. Útil para revisão e descobrir ideias.", "short-name": "Aleatória", "action-open": "Abrir nota aleatória" }, "outline": { "name": "Índice", "desc": "Mostra o índice do ficheiro atual ou do painel vinculado.", "action-open": "Abrir índice", "action-show": "Mostrar painel do índice", "action-open-for-current": "Abrir índice do ficheiro atual", "tab-title": "Índice de {{displayText}}", "label-no-headings": "Título não encontrado." }, "word-count": { "name": "Contagem de palavras", "desc": "Mostrar o número de palavras na barra de status." }, "slides": { "name": "Slides", "desc": "Apresente a partir de Markdown. Use \"---\" para separar os seus slides.", "action-start": "Começar a apresentação" }, "audio-recorder": { "name": "Gravador de áudio", "desc": "Grava áudio e guarda como anexo.", "action-start": "Começar a gravar áudio", "action-stop": "Parar de gravar áudio", "action-toggle": "Começar/parar gravação", "msg-access-denied": "Acesso ao microfone foi negado. Ative-o no painel de preferências.", "msg-pending-grant": "Por favor conceda permissão para começar a.", "msg-no-microphone": "Nenhum microfone está conectado." }, "open-with-default-app": { "name": "Abrir com aplicativo padrão", "desc": "Adiciona um botão para abrir o ficheiro atual com o aplicativo padrão.", "action-open-file": "Abrir com aplicativo padrão", "action-open-file-mobile": "Share", "action-show-in-folder": "Mostrar na pasta", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "Templates", "desc": "Insira conteúdo padronizado a partir de uma pasta de ficheiros modelo.", "action-insert": "Inserir templates", "action-insert-current-date": "Insert current date", "action-insert-current-time": "Insert current time", "option-template-folder-location": "Localização da pasta de templates", "option-template-folder-location-description": "Ficheiros nesta pasta serão templates.", "option-template-date-format": "Formato da data", "option-template-date-format-description": "{{date}} no ficheiro de template será substituído por este valor.", "option-template-date-format-description2": "Também pode usar {{date:YYYY-MM-DD}} para substituir o formato.", "option-template-time-format": "Formato do horário", "option-template-time-format-description": "{{time}} no template será substituído por este valor.", "option-template-time-format-description2": "Também pode usar {{time:HH:mm}} para substituir o formato.", "instruction-navigate": "Navegar", "instruction-insert": "Inserir um template", "instruction-dismiss": "Dispensar", "msg-no-templates-found": "Nenhum template foi encontrado", "msg-fail-invalid-folder": "Erro ao listar os templates. A sua pasta é inválida.", "msg-fail-folder-not-found": "Erro ao listar os templates. A pasta \"{{folderOption}}\" não foi encontrada.", "prompt-type-template": "Digite o nome do template..." }, "translucency": { "name": "Janela translúcida", "desc": "Ativa o efeito de transparência para realçar a perceção de profundidade. Otimizado para modo escuro. Não é suportado no Linux." }, "slash-command": { "name": "Comandos Slash", "desc": "Ativar a possibilidade de executar comandos slash no editor ao escrever '/'." }, "editor-status": { "name": "Estado do edtior", "desc": "Adiciona um item à status bar para mostrar e permitir mudar o estado atual do editor.", "read": "Leitura", "edit-source": "Modo origem", "edit-live-preview": "Visualização ao vivo" }, "publish": { "name": "Publicar", "desc": "Publica as suas notas através do Obsidian Publish.", "action-publish-changes": "Publicar alterações", "label-no-internet-access": "Precisa de acesso à internet para publicar alterações.", "label-publish-service-description": "O Obsidian Publish é um serviço de add-on pago que permite publicar as suas notas online diretamente do Obsidian.", "label-please-login": "Para começar a publicar, conecte-se ou crie uma conta Obsidian.", "label-no-publish-subscription": "Ainda não é assinante do Obsidian Publish.", "button-purchase": "Comprar", "label-manage-sites": "Gerir sites", "label-no-sites": "Não tem nenhum site.", "button-choose": "Escolher", "tooltip-edit-site-id": "Editar ID do site", "tooltip-delete-site": "Eliminar site", "label-delete-site-confirmation": "Tem a certeza que pretende eliminar este site?", "label-delete-site-details": "Isto irá eliminar o seu site de forma imediata e permanente.", "label-confirm-delete-site": "Confirmar eliminação do site \"{{site}}\"", "option-site-id": "ID do site", "option-site-id-description": "O seu site estará disponível em https://publish.obsidian.md/{site id}. Poderá alterar isto mais tarde. Apenas são permitidas letras minúsculas, números e hífens.", "option-site-id-placeholder": "Escolha um ID para o site", "button-create": "Criar", "msg-invalid-site-id": "O ID do site só poderá conter letras minúsculas, números e hífens.", "msg-site-id-in-use": "O ID deste site já se encontra em uso, tente um diferente.", "msg-create-site-issue": "Ocorreu um erro ao criar o seu site.", "label-site-options": "Opções do site", "option-site-general": "General", "option-site-components": "Componentes", "option-site-appearance": "Aparência", "option-site-reading-experience": "Experiência de leitura", "option-site-misc": "Outras definições do site", "option-site-name": "Nome do site", "option-site-name-description": "Nome do seu site publicado. Aparecerá no título da página do seu site.", "option-site-name-placeholder": "Nome do seu site", "option-home-page-file": "Ficheiro da página inicial", "option-home-page-file-description": "A primeira página que o utilizador vê quando entra no seu site publicado", "option-home-page-file-placeholder": "Escolher um ficheiro publicado", "option-logo": "Logo", "option-logo-description": "Escolher um ficheiro de imagem para o logo do seu site.", "option-logo-placeholder": "Qualquer imagem carregada no seu vault...", "option-site-collaboration": "Colaboradores do site", "option-site-collaboration-desc": "Gerir colaboradores para este site.", "button-manage-collaborators": "Gerir", "option-theme": "Tema", "option-theme-description": "Escolher o esquema de cores padrão para o seu site.", "option-theme-system": "Adaptar ao sistema", "option-show-theme-toggle": "Alternar entre Claro/Escuro", "option-show-theme-toggle-description": "Deixar o visitante alternar entre tema escuro e claro por sua conta.", "option-show-navigation": "Mostrar navegação", "option-show-navigation-description": "Exibir uma lista de todas as páginas publicadas no lado esquerdo do seu site.", "option-show-search": "Mostrar barra de pesquisa", "option-show-search-description": "Exibir a barra de pesquisa no topo da navegação, que permite ao visitante procurar páginas e títulos no seu site.", "option-show-graph": "Mostrar Visualização de diagrama de grafo", "option-show-graph-description": "Exibir um pequeno diagrama de grafo local em cada página.", "option-show-outline": "Mostrar índice", "option-show-outline-description": "Exibir um índice dos títulos em cada página.", "option-show-backlinks": "Mostrar backlinks", "option-show-backlinks-description": "Mostrar a secção de backlinks no fim de cada página.", "option-sliding-window-mode": "Usar rotação de painéis", "option-sliding-window-mode-description": "Abrir páginas em novos painéis à direita. Permite navegar horizontalmente pelos painéis.", "option-hover-preview-file": "Mostrar pré-visualização", "option-hover-preview-file-description": "Exibir uma pré-visualização de página ao passar com o cursor sobre links.", "option-hide-title": "Esconde título da página", "option-hide-title-description": "Esconder o cabeçalho do título da página. É útil quando tem os seus próprios cabeçalhos no ínicio de cada página.", "option-readable-line-length": "Linhas de tamanho legível", "option-readable-line-length-description": "Limitar o tamanho máximo da linha. Cabe menos conteúdo no ecrã, mas faz os parágrafos mais fáceis de ler.", "option-site-password": "Palavras-passe", "option-site-password-description": "Limitar o acesso ao seu site com palavras-passe.", "option-google-analytics": "Código de recolha de dados do Google Analytics", "option-google-analytics-description": "Configurar o Google Analytics para o seu site. Apenas disponível a visitantes a partir do seu domínio personalizado. Verificar a compatibilidade com a lei e regulamentos locais.", "button-manage-passwords": "Gerir", "button-save-site-settings": "Guardar definições do site", "msg-updated-options": "Configurações atualizadas para o seu site.", "button-go-back": "Voltar", "label-publishing-to": "Publicando em", "tooltip-switch-site": "Trocar de site", "button-add-linked": "Adicionar linkado", "tooltip-add-linked": "Adicionar todos os ficheiros linkados pelos items selecionados", "msg-added-linked-files": "Adicionado {{count}} ficheiro linkado.", "msg-added-linked-files_plural": "Adicionados {{count}} ficheiros linkados.", "tooltip-open-site-options": "Mudar configurações do site", "label-no-changes-detected": "Nenhuma alteração detectada.", "label-changed-files-to-be-published": "Alterações", "label-unchanged-files-already-published": "Inalterado (selecione para eliminar)", "label-file-selected": " selecionado", "button-select-all-files": "Selecionar tudo", "button-deselect-all-files": "Desselecionar tudo", "label-new-files-to-be-published": "Novo", "button-publish": "Publicar", "msg-no-permission-to-publish-to-site": "Não tem permissão para publicar no site atual.", "msg-select-at-least-one-file": "Por favor selecione pelo menos um ficheiro.", "label-upload-changes": "Enviar alterações", "button-done": "Feito", "button-stop": "Parar", "label-status-uploading": "A enviar", "label-status-to-publish": "Publicar", "label-status-to-delete": "Eliminar", "label-status-published": "Publicar", "label-status-deleted": "Apagado", "label-status-failed": "Falhou", "label-status-cancelled": "Cancelado", "button-change": "Mudar", "label-clear-cache": "As alterações vão demorar alguns minutos a aparecer no seu site. Caso não consiga ver as alterações, tente limpar a cache do seu navegador.", "label-visit-site": "Pode visitar o seu site em: ", "msg-something-went-wrong": "Ocorreu um erro. Por favor consulte o painel de controlo para mais detalhes.", "msg-network-error": "Ocorreu um erro de ligação. ", "label-manage-passwords": "Gerir palavras-passe", "label-add-password": "Adicioanr palavra-passe", "action-new-password": "Nova palavra-passe", "label-no-password": "Não existem palavras-passe para este site. Qualque um o pode visitar.", "label-have-password": "O site é protegido por palavra-passe. Se tiver várias palavras-passe, os visitantes podem aceder ao seu site digitando qualquer uma delas.", "option-password-name": "Palavra-passe", "option-password-desc": "Um algoritmo da sua palavra-passe será guardado em modo seguro. Uma vez definida, a palavra-passe não poderá ser revelada em texto simples.", "option-password-placeholder": "A sua palavra-passe", "option-nickname-name": "Alcunha (opcional)", "option-nickname-desc": "Definir uma alcunha para lembrar do que ou para quem é a palavra-passe.", "action-add-password": "Adicionar esta palavra-passe", "label-untitled-password": "Palavra-passe sem título", "label-password-created-time": "Criada a {{time}}", "msg-added-new-password": "Nova palavra-passe adicionada.", "option-custom-domain": "Domínio personalizado", "option-custom-domain-desc": "Usar o seu próprio domínio em vez do endereço https://publish.obsidian.md/{site id}.", "option-noindex": "Não permitir indexação do motor de pesquisa", "option-noindex-desc": "Não permitir que motores de pesquisa indexem o seu site.", "button-configure": "Configurar", "label-configure-custom-domain": "Configurar domínio personalizado", "option-custom-url-name": "Endereço personalizado", "option-custom-url-desc": "Endereço onde se localiza o seu site.", "option-custom-url-placeholder": "www.oseuendereço.com", "option-custom-url-redirect": "Redirecionar para o seu endereço personalizado", "option-custom-url-redirect-desc": "Redirecionar visitantes de publish.obsidian.md/id para o seu endereço personalizado.", "button-update-custom-domain": "Atualizar definição de domínio", "label-custom-domain-instructions": "Para mais informação ir a {{link}} no nosso site de ajuda.", "label-custom-domain-link-name": "Guia de configuração de domínio personalizado", "label-site-usage": "Está a usar {{site}} do seu limite {{limit}}.", "button-add-more-sites": "Comprar mais sites", "label-no-sites-bought": "Não comprou nenhum site.", "button-get-site": "Obter um site", "label-manage-sharing": "Gerir partilhas para \"{{name}}\"", "label-sharing-with-users": "Este site está a ser partilhada com os seguintes utilizadores.", "label-not-sharing": "Este site não está a ser partilhado com ninguém.", "label-invite-pending": "Pendente", "tooltip-remove-user": "Remover utilizador", "option-invite-user": "Convidar utilizador", "placeholder-invite-user": "Introduza o seu email...", "error-email-must-be-valid": "Por favor introduza um email válido para convidar alguém.", "msg-enable-publish-plugin": "Por favor ative o plugin principal Publicar nas Configurações -> Plugins Base para ver sites.", "label-your-sites": "Os seus sites", "label-sites-shared-with-you": "Sites partilhados consigo", "tooltip-leave-site-sharing": "Parar de colaborar neste site", "label-leave-site-confirmation": "Confirmar a cessação da colaboração neste site", "label-leave-site-confirmation-details": "Este site será removido da lista de sites partilhados consigo. Esta ação não é reversível.", "label-leave-site-confirmation-details-2": "Por favor contacte o dono do site se deseja colaborar novamente neste site.", "button-leave": "Sair", "label-compare-with-live": "Comparar com a versão ao vivo", "button-use-live-version": "Usar versão ao vivo", "label-confirm-override": "Confirmar a escrita por cima sobre a versão local", "label-confirm-override-1": "Tem a certeza que quer escrever por cima da versão local?", "label-confirm-override-2": "A versão ao vivo irá ser usada e a sua versão local será descartada. Por favor faça um cópia de segurança, se necessário.", "button-proceed": "Continuar", "message-successfully-used-live-version": "Sucesso em usar a versão ao vivo para escrever por cima da sua versão local.", "label-open-file": "Abrir ficheiro", "tooltip-manage-publish-filters": "Gerir filtros de publicação", "option-included-folders": "Pastas incluídas", "option-included-folders-desc": "Ficheiros nestas pastas serão automaticamente selecionados nas revisões feitas antes da publicação.", "option-currently-included-folders": " Estas pastas estão atualmente incluídas:", "option-excluded-folders": "Pastas excluídas", "option-excluded-folders-desc": "Ficheiros nestas pastas não apareceram nas revisões feitas antes da publicação. Esta configuração tem prioridade sobre as pastas incluídas acima.", "label-number-of-folders-included": "Obsidian Publicar está a incluir {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publicar está a excluir {{folders}}.", "label-manage-included-folders": "Gerir pastas incluídas ", "label-manage-excluded-folders": "Gerir pastas excluídas", "label-add-included-folder": "Incluir uma pasta", "label-add-included-folder-desc": "Pode incluir pastas existentes ou pastas que ainda não foram criadas.", "tooltip-contact-support": "Contactar suporte" }, "workspaces": { "name": "Áreas de trabalho", "desc": "Guardar e carregar layout da área de trabalho.", "action-load-layout": "Carregar esquema da área de trabalho", "action-manage-layouts": "Gerir esquema da área de trabalho", "action-save-and-load-layout": "Guardar e carregar outro esquema", "placeholder-save-current-layout-as": "Guardar esquema da área de trabalho atual como...", "button-save": "Guardar", "button-load": "Carregar", "tooltip-delete-layout": "Apagar esquema", "msg-delete-layout-success": "Sucesso em apagar o esquema.", "msg-enter-name": "Por favor introduza um nome para o novo esquema.", "msg-save-layout-success": "Sucesso em gravar o esquema.", "label-no-layout-found": "Nenhum esquema encontrado.", "placeholder-type-to-search-layouts": "Introduza o nome do esquema..." }, "sync": { "name": "Sincronizar", "desc": "Sincronizar os seus ficheiros através do Obsidian Sync.", "action-view-version-history": "Ver histórico de versões", "label-load-more": "Carregar mais", "label-show-diff": "Mostrar diferenças", "label-copy-to-clipboard": "Copiar para a área de transferência", "label-restore-this-version": "Restaurar esta versão", "msg-already-latest-version": "Esta versão é a mais recente.", "msg-restored-version": "Versão {{time}} restaurada com sucesso", "label-file-deleted": "Este ficheiro foi apagado", "label-no-earlier-version": "Não existem versões anteriores deste ficheiro.", "label-empty-file": "Vazio", "label-setting-files": "Ficheiros de configuração", "label-deleted-files": "Ficheiros apagados", "label-version-history": "História de versionamento", "label-click-to-see-history": "Clique num ficheiro apagado para ver o seu histórico.", "label-create-remote-vault": "Criar vault remoto", "msg-please-enter-password": "Insira uma palavra-passe.", "msg-vault-name-cannot-be-empty": "O nome do vault não pode estar vazio.", "msg-successfully-created-vault": "Vault remoto \"{{name}}\" criado com sucesso.", "label-remote-vault-explanation": "O vault remoto permite sincronizar de forma segura o seu vault entre dispositivos.", "option-vault-name": "Nome do vault", "option-vault-name-desc": "Ajuda a lembrar a função do vault.", "option-vault-name-placeholder": "O meu incrível vault", "option-use-custom-encryption-password": "Customizar chave de encriptação end-to-end", "option-use-custom-encryption-password-desc": "Uma vez desativada, gerenciaremos uma chave de encriptação para si.", "option-use-custom-encryption-password-desc-warning": "Esta opção não poderá ser alterada mais tarde.", "option-encryption-password": "Chave de encriptação", "option-encryption-password-desc": "Esta chave não poderá ser alterada mais tarde.", "option-encryption-password-desc-warning": "Caso se esqueça desta chave, todos os seus dados remotos ficarão inutilizáveis.", "option-encryption-password-desc-2": "Isto não afeta os seus dados locais.", "option-encryption-password-placeholder": "A sua chave", "label-enter-encryption-password": "Digitar a chave de encriptação", "button-unlock-vault": "Desbloquear vault", "msg-verified-password": "Chave verificada com sucesso.", "label-remote-vaults": "Os seus vaults remotos", "label-vault-created-time": "Criado em {{time}}", "tooltip-delete-remote-vault": "Eliminar", "tooltip-manage-sharing": "Gerir partilha", "label-confirm-delete-remote-vault": "Confirmar eliminação do vault", "label-confirm-delete-remote-vault-question": "Tem a certeza que deseja eliminar este vault remoto?", "label-confirm-delete-remote-vault-result": "Todos os dados no nosso servidor, incluindo o histórico de versões, serão eliminados. Os seus ficheiros locais permanecerão intactos.", "label-confirm-delete-remote-vault-warning": "Esta ação é permanente e irreversível.", "msg-remote-vault-deleted": "{{name}} foi eliminado.", "button-connect-to-remote-vault": "Conectar", "button-disconnect-from-remote-vault": "Desconectar", "label-not-remote-vaults": "Não existe nenhum vault remoto.", "button-create-new-remote-vault": "Criar novo vault", "label-sync-log": "Registo de sincronização", "options-only-show-errors": "Apenas erros", "options-only-show-errors-desc": "Mostrar apenas erros e ocultar outros items do registo.", "button-copy-sync-log": "Copiar registo de sincronização", "msg-successfully-copied-sync-log": "Registo de sincronização copiado com sucesso.", "button-retry": "Tentar novamente", "button-purchase-subscription": "Comprar", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "Escolher", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Atualmente conectado ao vault remoto \"{{name}}\".", "option-remote-vault-desc-not-connected": "Não está conectado a nenhum vault remoto.", "option-sync-status": "Status da sincronização", "option-sync-status-desc-paused": "O Obsidian Sync está pausado.", "option-sync-status-desc-running": "O Obsidian Sync está em execução.", "option-device-name": "Nome do dispositivo", "option-device-name-desc": "Este nome será exibido no registo de sincronização. Deixe em branco para usar o nome padrão.", "button-resume": "Retomar", "button-pause": "Pausar", "option-view-deleted-files": "Ficheiros eliminados", "option-view-deleted-files-desc": "Ver e restaurar ficheiros eliminados.", "option-sync-log": "Atividade do Sync", "option-sync-log-desc": "Ver atividades recentes de sincronização para resolução de problemas.", "button-view": "Ver", "button-bulk-restore": "Restauração em massa", "button-restore-selected-files": "Restaurar ficheiros selecionados", "msg-restoring": "A restaurar...", "msg-restoring-complete": "`Restauração completa: {{succeeded}} sucedidos e {{failed}} falhados.`", "option-over-size": "Tamanho do vault acima do limite", "option-over-size-desc": "O seu vault ocupa {{size}} de {{limit}}.", "msg-largest-files": "Ver ficheiros maiores", "msg-largest-files-desc": "Estes são so ficheiros remotos que ocupam mais espaço. Após eliminar os anexos, utilize o botão Limpar para libertar espaço do vault remoto.", "button-purge-remote": "Limpar", "tooltip-purge-remote": "Limpa permanentemente os anexos eliminados do vault remoto para libertar espaço.", "msg-purge-complete": "Limpeza completada.", "option-prevent-sleep": "Impedir suspensão do dispositivo", "option-prevent-sleep-desc": "Impede o dispostivo de entrar em suspensão quando ainda existem ficheiros que ainda não foram sincronizados.", "option-selective-sync": "Sincronização seletiva", "option-excluded-folders": "Pastas excluídas", "option-excluded-folder-desc": "Impede que certas pastas sejam sincronizadas.", "option-currently-excluded-folders": " Pastas atualmente excluídas:", "button-manage-excluded-folders": "Gerir", "option-sync-image": "Sincronizar imagens", "option-sync-image-desc": "Sincrozinar ficheiros de imagens com as seguintes extensões: {{extensions}}.", "option-sync-audio": "Sincronizar áudio", "option-sync-audio-desc": "Sincronizar ficheiros de áudio com as seguintes extensões: {{extensions}}.", "option-sync-video": "Sincronizar vídeos", "option-sync-video-desc": "Sincronizar ficheiros de vídeo com as seguintes extensões: {{extensions}}.", "option-sync-pdf": "Sincronizar PDFs", "option-sync-pdf-desc": "Sincronizar ficheiros PDF.", "option-sync-unsupported": "Sincronizar todos os outros tipos", "option-sync-unsupported-desc": "Sincronizar tipos de ficheiros não suportados.", "option-vault-config-sync": "Sincronizar configurações do vault", "option-view-config-files": "História do versionamento das configurações", "option-view-config-files-desc": "Ver e restaurar a história do versionamento dos ficheiros de configuração.", "option-sync-app": "Configurações principais", "option-sync-app-desc": "Ativar a sincronização das configurações do editor, ficheiros & configurações de links, hotkeys personalizadas, etc.", "option-sync-appearance": "Configurações de aparência", "option-sync-appearance-desc": "Sincronizar configurações de aparência como modo escuro, tema ativo, e snippets ativos.", "option-sync-appearance-data": "Temas e snippets", "option-sync-appearance-data-desc": "Sincronizar temas e snippets transferidos. A configuração anterior guarda a informação se estão ativos ou não.", "option-sync-hotkey": "Hotkeys", "option-sync-hotkey-desc": "Sincronizar hotkeys personalizadas.", "option-sync-core-plugin": "Lista de plugins base ativos", "option-sync-core-plugin-desc": "Sincronizar que plugins base estão ativos.", "option-sync-core-plugin-data": "Configurações de plugins base", "option-sync-core-plugin-data-desc": "Sincronizar as configurações de plugins base.", "option-sync-community-plugin": "Lista de plugins da comunidade ativos", "option-sync-community-plugin-desc": "Sincronizar que plugins da comunidade estão ativos.", "option-sync-community-plugin-data": "Plugins da comunidade instalados", "option-sync-community-plugin-data-desc": "Sincronizar plugins da comunidade instalados (.js, .css, e ficheiros manifest.json) e as suas configurações.", "label-sync-introduction": "Obsidian Sync é um serviço add-on do Obsidian com encriptação end-to-end e histórico de versões.", "label-account-required": "Para iniciar a sincronização, efetue o login ou crie uma nova conta Obsidian.", "button-sign-up": "Registar", "button-log-in": "Entrar", "label-manage-excluded-folders": "Gerir pastas excluídas", "label-number-of-folders-excluded": "{{folders}} estão excluídas da sincronização.", "label-add-excluded-folder": "Excluir uma pasta", "label-add-excluded-folder-desc": "Pode excluir pastas existentes ou pastas que ainda não foram criadas.", "tooltip-remove-excluded-folder": "Remover da lista de exclusão", "label-setup-connection": "Configurar conexão", "label-now-connected-to-vault": "Conexão estabelecida para \"{{name}}\".", "button-start-syncing": "Começar sincronização", "label-confirm-merge-vault": "Confirmar Merge Vault", "msg-vault-has-notes": "O seu vault local já contém algumas notas.", "msg-vault-merge-warning": "Se conectar com o vault remoto \"{{name}}\", as notas no seu vault local serão misturadas com as notas no seu vault remoto. No caso de conflitos, a versão mais recente da nota será preservada.", "tooltip-update-setting-on-all-devices": "Por favor atualize esta opção e reinicie a aplicação em todos os dispositivos onde quer que tenha efeito.", "label-sharing-with-users": "Este vault remoto está a ser partilhado com os seguintes utilizadores.", "label-not-sharing": "Este vault remoto não está a ser partilhado com ninguém.", "label-vaults-shared-with-you": "Vaults partilhados consigo", "tooltip-leave-vault-sharing": "Parar de colaborar neste vault", "label-leave-vault-confirmation": "Confirmar a paragem da colaboração neste vault", "label-leave-vault-confirmation-details": "Isto erá remover este vault da lista de vaults partilhados consigo. Esta açõa não é reversível.", "label-leave-vault-confirmation-details-2": "Por favor contacte o dono do vault se deseja colaborar novamente neste vault.", "button-leave": "Sair", "label-require-subscription-to-connect": "Precisa de uma subscrição Obsidian Sync para se conectar a este vault.", "option-contact-support": "Contactar suporte", "option-contact-support-desc": "Se encontrar algum problema com Obsidian Sync, por favor contacte-nos para lhe podermos ajudar! Pode contactar-nos em support@obsidian.md.", "button-email-support": "Suporte de email" }, "file-recovery": { "name": "Recuperação de ficheiros", "desc": "Permite restaurar cópias instantâneas recentes para recuperar de uma perda acidental de dados. As cópias instantâneas são guardadas apenas para ficheiros Markdown.", "action-open": "Abrir cópias instantâneas guardadas", "option-interval": "Intervalo da cópia instantânea", "option-interval-description": "Intervalo mínimo em minutos entre duas cópias instantâneas.", "option-keep": "Duração do histórico", "option-keep-description": "Duração em dias pelos quais as cópias instantâneas são mantidas.", "option-open-history": "Cópias instantâneas", "option-open-history-description": "Ver e restaurar cópias instantâneas guardadas.", "button-view-snapshots": "Ver", "option-clear": "Apagar histórico", "option-clear-description": "Eliminar todas as cópias instantâneas.", "button-clear-history": "Apagar", "label-clear-warning": "Tem a certeza que deseja eliminar todas as cópias instantâneas? Apenas cópias instantâneas serão eliminadas. Os seus ficheiros não serão afetados.", "msg-clear-complete": "Cópias instantâneas eliminadas.", "label-no-history-found": "Não foi encontrada nenhuma cópia instantânea.", "placeholder-choose-file": "Escolher um ficheiro...", "label-select-file": "Escolher um ficheiro à esquerda para visualizar as cópias instantâneas." }, "note-composer": { "name": "Compositor de notas", "desc": "Fundir, separar, e refatorar notas.", "option-confirm-file-merge": "Confirmar fusão do ficheiro", "option-confirm-file-merge-description": "Avisar antes da fusão de dois ficheiros.", "option-split-replacement-text": "Texto depois da extração", "option-split-replacement-text-description": "O que mostrar no lugar do texto depois da sua extração.", "option-choice-split-replacement-text-link": "Link para um novo ficheiro", "option-choice-split-replacement-text-embed": "Embutir um novo ficheiro", "option-choice-split-replacement-text-none": "Nada", "option-template-file": "Localização do ficheiro modelo", "option-template-file-description": "Ficheiro modelo a ser usado na fusão ou extração. Variáveis disponíveis: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Fundir ficheiro atual com outro ficheiro...", "action-merge-file": "Fundir o ficheiro inteiro com...", "label-no-files": "Nenhum ficheiro encontrado.", "instruction-navigate": "para navegar", "instruction-merge": "para fundir", "instruction-create-new": "para criar novo", "instruction-merge-at-top": "para fundir no início", "instruction-dismiss": "para dispensar", "prompt-select-file-to-merge": "Selecionar ficheiro para fundir em...", "label-merge-file": "Fundir ficheiro", "label-confirm-file-merge": "Tem a certeza que quer fundir o ficheiro \"{{file}}\" em \"{{destination}}\"? \"{{file}}\" será apagado.", "button-merge": "Fundir", "button-merge-do-not-ask-again": "Fundir e não pergunte novamente", "command-split-file": "Extrair seleção atual...", "command-extract-heading": "Extrair este cabeçalho...", "instruction-append": "para mover para o fim", "instruction-prepend": "para mover para o início", "msg-fail-to-fetch-template": "Falha na busca do ficheiro modelo : \"{{template}}\" não encontrado.", "msg-fail-to-find-heading": "Falha na procura do cabeçalho" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} palavra", "word-with-count_plural": "{{count}} palavras", "character-with-count": "{{count}} carácter", "character-with-count_plural": "{{count}} caracteres", "link-with-count": "{{count}} link", "link-with-count_plural": "{{count}} links", "file-with-count": "{{count}} ficheiro", "file-with-count_plural": "{{count}} ficheiros", "folder-with-count": "{{count}} pasta", "folder-with-count_plural": "{{count}} pastas", "backlink-with-count": "{{count}} backlink", "backlink-with-count_plural": "{{count}} backlinks", "site-with-count": "{{count}} site", "site-with-count_plural": "{{count}} sites", "plugin-with-count": "{{count}} plugin", "plugin-with-count_plural": "{{count}} plugins", "theme-with-count": "{{count}} tema", "theme-with-count_plural": "{{count}} temas" } }{ "setting": { "options": "Opțiuni", "plugin": "Modul", "builtin-plugins": "Module integrate", "plugin-options": "Opțiuni modul", "folder-path-example-placeholder": "Exemplu: director 1/director 2", "file-path-example-placeholder": "Exemplu: director/notă", "msg-restart-required": "Changing this option requires a restart to take effect.", "editor": { "name": "Editor", "section-general": "General", "section-behavior": "Behavior", "section-display": "Display", "option-spellcheck": "Ortografie", "option-spellcheck-description": "Pornește verificatorul ortografic. Momentan acesta funcționează doar pentru limba engleză (SUA).", "spellcheck-languages": "Spellcheck languages", "spellcheck-languages-description": "Choose the languages for the spellchecker to use.", "spellcheck-languages-mac-description": "The native spellchecker will automatically detect the language being used for you on macOS.", "spellcheck-dict": "Dicționar ortografic", "spellcheck-dict-empty": "Dicționarul ortografic este gol.", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "Lungimea rândului", "option-readable-line-description": "Limitează lungimea maximă a unui rând. Încadrează mai puțin conținut pe ecran, dar face paragrafele lungi mai ușor de citit.", "option-strict-line-break": "Mod strict spații între rânduri", "option-strict-line-break-description": "În modul de previzualizare, ignoră spațiile de un rând conform specificațiilor Markdown. Dezactivează această setare ca spațiile de un rând să apară în previzualizare.", "option-show-frontmatter": "Afișează frontmatter", "option-show-frontmatter-description": "În modul de previzualizare, afișează frontmatter ca un bloc de cod. Dezactivează pentru a ascunde secțiunea frontmatter.", "option-auto-pair-brackets": "Creează automat perechi de paranteze", "option-auto-pair-brackets-description": "Grupează automat parantezele și ghilimelele.", "option-auto-pair-markdown": "Grupează automat elemente de sintaxă Markdown", "option-auto-pair-markdown-description": "Împerechează simboluri pentru text îngroșat și cursiv.", "option-smart-indent-lists": "Indentare inteligentă a listelor", "option-smart-indent-lists-description": "Se ocupă automat de indentare și simbolul de listă.", "option-fold-heading": "Pliere titluri", "option-fold-heading-description": "Îți permite să pliezi tot conținutul aflat sub un titlu.", "option-fold-indent": "Pliere indentare", "option-fold-indent-description": "Permite să pliezi o porțiune cu aceeași indentare, cum ar fi listele.", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Editing view", "option-default-new-tab-view-reading": "Reading view", "option-default-editing-mode": "Default editing mode", "option-default-editing-mode-description": "The default editing mode a new pane will start with.", "option-default-editing-mode-source": "Source mode", "option-default-editing-mode-live-preview": "Live Preview", "option-show-line-number": "Arată numărul liniei", "option-show-line-number-description": "Afișează numărul liniilor de text.", "option-indentation-guide": "Show indentation guides", "option-indentation-guide-description": "Show vertical relationship lines between bullet points for visual guidance.", "option-use-tabs": "Folosește taburi", "option-use-tabs-description": "Folosește taburi pentru a indenta atunci când apeși tasta \"Tab\". Setează pe \"oprit\" pentru a folosi spații.", "option-tab-size": "Tab size", "option-tab-size-description": "Number of spaces a tab is equivalent to.", "option-rtl": "Right-to-left (RTL)", "option-rtl-description": "Sets the text direction of notes to display in right-to-left.", "option-auto-convert-html": "Auto convert HTML", "option-auto-convert-html-description": "Automatically convert HTML to Markdown when pasting and drag-and-drop from webpages. Use Ctrl/Cmd+Shift+V to paste without conversion.", "option-vim-key-bindings": "Scurtături Vim", "option-vim-key-bindings-description": "Îți permite să folosești combinațiile de taste din Vim în editor.", "option-vim-key-bindings-mobile": "On mobile devices, this setting is per-device and is not synchronized through the config file.", "option-emacsy-keys": "Legacy Emacs-style key bindings for macOS", "option-emacsy-keys-description": "Allows you to use the additional Emacs-style navigation keys, which are standard on macOS, but may interfere with some key operations.", "label-confirm-enable-vim": "Confirm entering Vim mode", "label-vim-warning": "Vim mode is for efficient text editing but can be quite counter-intuitive. If you're not familiar with Vim, this option might make it look like Obsidian has stopped working.", "label-vim-test": "To verify that you know your way around Vim, please enter the command to quit Vim without saving below:", "label-vim-your-answer": "Your answer", "placeholder-enter-command": "Enter command...", "button-confirm-enable-vim": "Let me enable Vim", "msg-vim-mode-enabled": "Command is correct. Vim mode now enabled.", "msg-vim-mode-not-enabled": "Command is incorrect. Vim mode remains disabled to protect you.", "msg-vim-mode-please-enter-command": "Please enter the command to enable Vim mode", "option-legacy-editor": "Use legacy editor", "option-legacy-editor-description2": "The legacy editor will be deprecated soon. It is currently no longer maintained, and as such, bugs will no longer be addressed.", "label-legacy-deprecation": "New editor is here", "label-legacy-deprecation-1": "Obsidian now has a brand new editor that's more robust and accessible.", "label-legacy-deprecation-2": "It seems you're still using the legacy editor, and we think you'll enjoy the new editor.", "label-legacy-deprecation-choice": "Which mode would you like to use?", "label-live-preview-description": "A more modern, what-you-see-is-what-you-get experience.", "label-source-mode-description": "See raw Markdown with syntax highlighting.", "button-start-new-editor": "Start new editor" }, "file": { "name": "Fișiere și Legături", "option-confirm-file-deletion": "Confirmă ștergerea fișierelor", "option-confirm-file-deletion-description": "Vei primi o întrebare prin care confirmi ștergerea fișierelor.", "option-delete-destination": "Fișiere șterse", "option-delete-destination-description": "Ce se întâmplă cu fișierele după ce le ștergi.", "option-choice-system-trash": "Mută în coșul de reciclare al sistemului de operare", "option-choice-vault-trash": "Mută în coșul de reciclare al Obsidian (directorul .trash)", "option-choice-permanent-delete": "Ștergere permanentă", "option-always-update-links": "Actualizează întotdeauna legăturile interne", "option-always-update-links-description": "Poți seta aplicația fie să actualizeze automat legăturile după ce redenumești un fișier, fie să afișeze o întrebare.", "option-new-note-location": "Locul implicit al unei note noi", "option-new-note-location-description": "Unde vor fi puse notele nou create. Setările din module vor suprascrie această opțiune. Setările din module vor suprascrie această opțiune.", "option-choice-vault-root": "Directorul rădăcină al seifului", "option-choice-current-folder": "Același director în care se află fișierul", "option-choice-specified-folder": "În directorul menționat mai jos", "option-new-file-folder-path": "Directorul în care vor fi create notele noi", "option-new-file-folder-path-description": "Notele nou create vor apărea sub acest director. Setările din module vor suprascrie această opțiune.", "option-use-wiki-links": "Folosește legături [[Wiki]]", "option-use-wiki-links-description": "Generează automat [[legături]] și ![[imagini]] Wiki în loc de cele Markdown. Dezactivează această opțiunea pentru a genera legături Markdown.", "option-show-unsupported-files": "Detect all file extensions", "option-show-unsupported-files-description": "Show files with any extension even if Obsidian can't open them natively, so that you can link to them and see them in File Explorer and Quick Switcher.", "option-link-autocompleted-format": "Formatul legăturilor noi", "option-link-autocompleted-format-description": "Ce fel de legături să insereze atunci când sunt auto-generate legături interne.", "option-choice-shortest-linktext": "Calea cea mai scurtă atunci când e posibil", "option-choice-relative-path": "Cale relativă la fișier", "option-choice-absolute-path": "Cale absolută în seif", "option-new-attachment-location": "Default location for new attachments", "option-new-attachment-location-description": "Where newly added attachments are placed.", "option-choice-subdirectory": "In subfolder under current folder", "option-attachment-folder-path": "Calea directorului de atașamente", "option-attachment-folder-path-description": "Fișierele de tip atașament noi vor apărea aici. Aceasta include imagini create prin tragere și deplasare sau prin lipire, dar și înregistrări audio.", "option-attachment-subfolder-path": "Subfolder name", "option-attachment-subfolder-path-description": "If your file is under \"vault/folder\", and your set subfolder name to \"attachments\", attachments will be saved to \"vault/folder/attachments\".", "option-attachment-subfolder-path-placeholder": "attachments", "option-excluded-files": "Excluded files", "option-excluded-files-desc": "Excluded files will be either hidden or less noticeable in various places, such as Quick Switcher, link suggestion, and Graph View.", "label-no-excluded-filters-applied": "No excluded filter is applied right now. Add one below.", "label-excluded-filters-applied": "Files matching the following filters are currently excluded:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Enter path or \"/regex/\"..." }, "appearance": { "name": "Aspect", "option-base-theme": "Tema principală", "option-base-theme-description": "Alege schema de culoare implicită a Obsidian.", "option-accent-color": "Accent color", "option-accent-color-description": "Choose the accent color used throughout the app.", "dark-theme": "Întunecată", "light-theme": "Luminoasă", "system-theme": "Adapt to system", "option-font": "Font", "option-advanced": "Advanced", "option-interface-font": "Interface font", "option-interface-font-description": "Set base font for all of Obsidian.", "option-text-font": "Text font", "option-text-font-description": "Set font for editing and reading views.", "option-monospace-font": "Monospace font", "option-monospace-font-description": "Set font for places like code blocks and frontmatter.", "label-single-font-currently-in-effect": " Currently applied font: ", "label-multiple-fonts-currently-in-effect": " The following fonts are currently applied:", "option-font-placeholder": "Enter font name...", "label-no-custom-font-set": "No custom font is applied right now. Add one below.", "label-font-applied": "The first font from this list that is available on your system will be applied.", "msg-font-not-found": "This font is not detected on your system.", "msg-font-found": "This font is detected on your system.", "label-font-name": "Font name", "option-community-themes": "Deschide temele create de comunitate", "option-community-themes-description": "Previzualizează și folosește temele fantastice create de comunitate.", "button-browse-community-themes": "Răsfoiește", "option-font-size": "Font size", "option-font-size-description": "Font size in pixels that affects editor and preview.", "option-font-size-action": "Quick font size adjustment", "option-font-size-action-description": "Adjust the font size using Ctrl + Scroll, or using the trackpad pinch-zoom gesture.", "option-themes": "Teme", "option-manage-themes-description": "Manage installed themes and browse community themes.", "option-theme-button-manage": "Manage", "option-choice-none": "Niciuna", "option-native-menus": "Native menus", "option-native-menus-desc": "Menus throughout the app will match the operating system. They will not be affected by your theme.", "button-reload-themes": "Reîncarcă temele", "msg-reloaded-themes": "Temele CSS personalizate au fost reîncărcate.", "button-open-themes-folder": "Deschide dosarul temelor", "option-css-snippets": " Fragmente CSS", "label-no-css-snippets-found": "Nu am găsit fragmente CSS în dosar.", "no-snippet-description": "Fragmentele CSS sunt în \"{{path}}\".", "button-reload-snippets": "Reîncarcă fragmentele", "button-open-snippets-folder": "Deschide dosarul de fragmente", "msg-reloaded-snippets": "Fragmentele CSS au fost reîncărcate.", "option-toggle-snippet-description": "Aplică fragmentul CSS din \"{{path}}\".", "label-installed-themes": "Installed themes", "label-screenshot-unavailable": "Screenshot unavailable", "label-default-theme": "Default", "tooltip-click-to-enlarge": "Click to enlarge", "button-update": "Update", "label-currently-selected": "Selected", "option-frame-style": "Window frame style", "option-frame-description": "Determines the styling of the title bar of Obsidian windows. Requires a full restart to take effect.", "option-frame-hidden": "Hidden (default)", "option-frame-obsidian": "Obsidian frame", "option-frame-native": "Native frame", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Show tab title bar", "option-show-view-header-desc": "Display the header at the top of every tab.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "button-check-for-updates": "Check for updates", "button-view-updates": "View updates", "button-update-all-themes": "Update all", "label-current-themes": "Current community themes", "label-currently-installed": "You currently have {{count}} theme installed.", "label-currently-installed_plural": "You currently have {{count}} themes installed." }, "hotkeys": { "name": "Combinații de taste", "prompt-filter": "Filtrează...", "tooltip-delete-hotkey": "Șterge combinația", "label-waiting-for-hotkey-press": "Apasă o combinație de taste...", "tooltip-restore-default": "Restaurează varianta implicită", "tooltip-customize-command": "Modifică această comandă", "tooltip-hotkey-single-conflict": "This hotkey conflicts with \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "This hotkey conflicts with {{count}} other commands", "label-blank-hotkey": "Blank" }, "about": { "name": "Despre", "label-commercial-license": "Commercial license", "label-license-key": "Cod de licență", "license-key-placeholder": "Codul tău de licență...", "label-activate-license": "Activează licența", "button-activate": "Activează", "label-unknown-version": "Necunoscut", "label-current-version": "Versiune curentă: ", "label-install-version": "(Versiunea la instalare: {{version}})", "label-up-to-date": "Ai cea mai nouă versiune a aplicației!", "label-read-changelog": "Citește fișierul cu modificări.", "label-manual-update-required": "To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.", "label-download": "Download", "label-new-version-ready": "O nouă versiune e pregătită să fie instalată. ", "label-relaunch-to-update": "Relansează aplicația pentru a o actualiza.", "label-disabled-updates": "Actualizările sunt dezactivate.", "label-checking-for-updates": "Verific actualizările...", "button-relaunch": "Relansează", "button-check-for-updates": "Caută actualizări", "option-auto-update": "Actualizări automate", "option-auto-update-description": "Dezactivează această setare astfel încât aplicația să nu caute actualizări.", "option-get-help": "Get help", "option-get-help-description": "Get help on using Obsidian.", "button-open": "Deschide", "option-language": "Limbă", "option-language-description": "Schimbă limba interfeței.", "option-insider-build": "Descarcă versiuni 'insider'", "option-insider-build-description": "Actualizează automat la versiuni 'insider' pentru a încerca noi funcționalități. Ține minte că aceste versiuni sunt foarte noi și pot fi mai puțin stabile decât cele normale.", "option-advanced": "Advanced", "option-hw-acceleration": "Hardware Acceleration", "option-hw-acceleration-description": "Turns on Hardware Acceleration, which uses your GPU to make Obsidian smoother.", "option-hw-acceleration-warning": "If you turn this off, app performance will be severely degraded.", "option-config-location": "Override config folder", "option-config-location-description": "Use a different config folder than the default one. Must start with a dot.", "option-config-location-warning": "Config location must be a valid folder name that starts with a dot.", "label-license": "Licență", "label-your-commercial-license-key": "Your commercial license key is \"{{key}}\".", "label-commercial-license-info": "Licență înregistrată de \"{{company}}\" pentru {{seats}} utilizatori. Valabilă până la {{expiry}}.", "label-validating-commercial-license": "Validează...", "label-invalid-commercial-license": "Licență nevalidă: ", "button-remove-commercial-license": "Remove", "option-catalyst": "Catalyst license", "option-catalyst-desc": "You currently have the {{tier}} Catalyst license. Thanks for your support!", "option-catalyst-desc-no-license": "You don't have a Catalyst license right now. Catalyst license is a one-time donation to support Obsidian development.", "label-app": "App" }, "account": { "name": "Cont", "option-your-account": "Your account", "option-your-account-desc": "You're currently signed in {{name}} ({{email}}).", "option-your-account-desc-no-login": "You're not logged in right now. An account is only needed for Obsidian Sync, Obsidian Publish, and Catalyst insider builds.", "button-manage-settings": "Manage settings", "label-insider": "insider", "label-supporter": "suporter", "label-vip": "VIP", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Commercial license", "option-commercial-license-desc": "If you use Obsidian for commercial purpose, you may need to get a commercial license.", "button-purchase": "Purchase", "button-log-out": "Deconectare", "label-log-in": "Autentificare", "label-sign-up": "Sign up", "label-email": "Email", "placeholder-email": "Emailul tău...", "label-password": "Parolă", "placeholder-password": "Parola ta...", "button-login": "Autentificare", "message-empty-email": "Câmpul de email nu poate fi gol.", "message-invalid-email": "Emailul nu este valid.", "message-empty-password": "Câmpul de parolă nu poate fi gol.", "message-login-failed": "Autentificare nereușită, te rugăm să verifici emailul și parola.", "label-no-account": "Nu ai un cont? ", "link-sign-up-now": "Înregistrează-te acum" }, "core-plugin": { "plugin-list": "Plugin list", "option-search-plugin": "Search core plugins", "option-search-plugin-description": "Filter plugins by name or description.", "placeholder-search-plugin": "Search plugins..." }, "third-party-plugin": { "name": "Module terțe", "option-restricted-mode": "Restricted mode", "option-restricted-mode-description": "Restricted Mode is off. Turn on to disable community plugins.", "button-turn-on": "Turn on", "option-browse-community-plugins": "Module ale comunității", "option-browse-community-plugins-description": "Răsfoiește și instalează modulele terțe create de comunitatea noastră fantastică.", "button-browse": "Răsfoiește", "label-exit-restricted-mode": "Exit Restricted Mode", "label-exit-restricted-mode-description-1": "Community plugins, like any other software you install, could potentially cause data integrity and security issues.", "label-exit-restricted-mode-description-2": "Plugin security is important to us. Here's what we do:", "label-exit-restricted-mode-description-3": "Despite our efforts, there is still a small chance that a community plugin might misbehave.", "label-code-review": "Initial code review", "label-code-review-desc": "Plugins undergo an initial code review by our team before they appear in the store.", "label-open-source": "Open source", "label-open-source-desc": "Most plugins are open source on GitHub, so you can inspect the code yourself.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We have a large community of developers who watch out for each other.", "label-report-mechanism": "Report mechanism", "label-report-mechanism-desc": "We follow up and remove faulty plugins upon user report.", "label-exit-restricted-mode-disable-confirmation": "Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.", "label-learn-more": "Learn more about plugin security", "button-turn-on-community-plugins": "Turn on community plugins", "label-trust-author": "Do you trust the author of this vault?", "label-trust-author-description-1": "You're opening this vault for the first time, and it comes with some plugins.", "label-trust-author-description-2": "If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.", "label-trust-author-description-3": "If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.", "button-enable-plugins": "Trust author and enable plugins", "button-dont-trust-author": "Browse vault in Restricted Mode", "placeholder-community-plugins": "Caută module ale comunității...", "msg-failed-load-plugins": "Am eșuat să încarc modulele comunității.", "label-installed": "Instalat", "button-install": "Instalează", "button-enable": "Enable", "button-disable": "Disable", "button-copy-share-link": "Copy share link", "button-donate": "Donate", "label-no-results-found": "Nu am găsit niciun rezultat.", "msg-failed-to-load-manifest": "Am eșuat să încarc declarația modulului.", "label-version": "Versiune: {{version}}", "label-currently-installed-version": " (Instalat în: {{version}})", "label-by-author": "De ", "label-repository": "Magazin: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "This plugin does not support your device.", "button-update": "Actualizează", "label-no-readme": "Acest modul nu a furnizat un fișier README.", "msg-installing-plugin": "Instalez modulul \"{{name}}\"...", "msg-failed-to-install-plugin": "Am eșuat să instalez modulul \"{{name}}\".", "msg-successfully-installed-plugin": "Modulul a fost instalat cu succes \"{{name}}\".", "label-installed-plugins": "Module instalate", "button-reload-plugins": "Reîncarcă modulele", "msg-reloaded-third-party-plugins": "Reîncarcă modulele terțe.", "label-uninstall": "Dezinstalează", "label-uninstall-plugin": "Dezinstalează modulul", "label-uninstall-plugin-confirmation": "Sigur dorești să dezinstalezi acest modul? Această acțiune va șterge directorul modulului.", "button-open-plugins-folder": "Deschide dosarul modulelor", "button-check-for-updates": "Caută actualizări", "button-update-all-plugins": "Update all", "label-current-plugins": "Modulele actuale", "label-currently-installed": "Ai {{count}} modul instalat.", "label-currently-installed_plural": "Ai {{count}} module instalate.", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Show a message with how long each plugin took to initialize when starting the app.", "msg-no-updates-found": "Nu sunt actualizări ale modulelor.", "msg-updates-found": "Am găsit actualizări pentru {{count}} modul.", "msg-updates-found_plural": "Am găsit actualizări pentru {{count}} module.", "msg-update-plugin": "Actualizează la versiunea {{version}}", "option-search-installed-plugin": "Search installed plugins", "option-search-installed-plugin-description": "Filter installed plugins by name or description.", "placeholder-search-installed-plugin": "Search installed plugins...", "show-installed-only": "Show installed only", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "Showing {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Mobile toolbar", "option-configure-quick-action": "Configure mobile Quick Action", "option-configure-quick-action-description": "Configure which command to trigger when pull down from the top. The current command is set to \"{{command}}\".", "button-configure": "Configure", "placeholder-select-quick-action": "Select Quick Action...", "manage-toolbar-options": "Manage toolbar options", "option-internal-link": "Add internal link", "option-internal-embed": "Add embed", "option-tag": "Add tag", "option-heading": "Toggle heading", "option-strikethrough": "Toggle strikethrough", "option-highlight": "Toggle highlight", "option-code": "Toggle code", "option-blockquote": "Toggle blockquote", "option-markdown-link": "Add Markdown link", "option-bullet-list": "Toggle bullet list", "option-numbered-list": "Toggle numbered list", "option-indent-list": "Indent list item", "option-unindent-list": "Unindent list item", "option-undo": "Undo", "option-redo": "Redo", "option-move-caret-up": "Move caret up", "option-move-caret-down": "Move caret down", "option-move-caret-left": "Move caret left", "option-move-caret-right": "Move caret right", "option-first-line": "Go to first line", "option-last-line": "Go to last line", "option-toggle-keyboard": "Toggle keyboard", "option-configure-toolbar": "Configure mobile toolbar", "option-added-options": "Added options", "option-more-toolbar-options": "More toolbar options", "option-attach": "Insert attachment", "option-add-command": "Add global command", "option-add-command-description": "Select any global command to add to the toolbar." } }, "editor": { "search": { "placeholder-find": "Find", "placeholder-replace": "Replace", "label-previous": "Anterior", "label-next": "Următorul", "label-all": "Toate", "label-exit-search": "Închide căutarea", "label-replace": "Înlocuiește", "label-replace-all": "Înlocuiește tot" }, "link-suggestion": { "label-type-hash": "Scrie #", "label-link-heading": "pentru a trimite către un titlu", "label-type-block": "Tastează ^", "label-link-block": "pentru a lega blocurile", "label-type-pipe": "Scrie |", "label-change-display-text": "pentru a schimba textul afișat", "label-no-match-found": "No match found" }, "spellcheck": { "no-suggestion": "Nicio sugestie...", "add-to-dictionary": "Adaugă la dicționar" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "No heading", "label-heading-level": "Heading {{level}}" }, "print-modal": { "title": "Export to PDF", "caption": "Export \"{{filename}}\" to PDF with the setting below.", "setting-page-size": "Page size", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Include file name as title", "setting-landscape": "Landscape", "setting-margin": "Margin", "setting-margin-default": "Default", "setting-margin-minimal": "Minimal", "setting-margin-none": "None", "setting-downscale-percent": "Downscale percent", "button-export-to-pdf": "Export to PDF" }, "link-popover": { "tooltip-follow-link": "Follow link", "tooltip-open-link": "Open link", "tooltip-search-tag": "Search tag" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Deschide în aplicația implicită", "empty-sidebar": "Bara laterală este goală, încearcă să muți un panou aici.", "sidebar-expand": "Expandează", "sidebar-collapse": "Restrânge", "msg-fail-to-save-file": "Fișierul nu a putut fi salvat \"{{filepath}}\". {{message}}.", "no-file": "Niciun fișier", "msg-file-changed": "\"{{file}}\" has been modified externally, merging changes automatically.", "switch-vault": "Deschide alt seif", "help": "Ajutor", "settings": "Setări", "drag-to-rearrange": "Trage pentru a rearanja", "msg-switched-to-read": "Switched default view mode to reading view.", "msg-switched-to-edit": "Modul de afișare implicit a fost schimbat pe editor.", "msg-upgrade-installer": "Pentru a folosi această caracteristică, reinstalează Obsidian folosind ultima versiune de pe site..", "tooltip-restore-default-settings": "Restaurează setările implicite", "label-copy": "Copy to clipboard", "copied_generic": "Copied to your clipboard", "copied": "{{item}} copied to your clipboard", "url": "Url", "msg-open-file-through-uri": "Opened file \"{{path}}\"", "msg-file-not-found-through-uri": "File \"{{name}}\" not found.", "delete-action-short-name": "Delete", "msg-indexing": "Obsidian is indexing your vault...\nThis should only happen once.\nSome functionality may not be available until this is complete.", "msg-indexing-complete": "Indexing complete.", "msg-sandbox-vault": "This is a sandbox vault.\nChanges you make in this vault will be lost.", "label-enter-to-create": "Enter to create", "label-update-available": "Update Available", "label-debug-info": "Debug info", "button-learn-more": "Learn more", "button-not-now": "Not now", "button-add": "Add", "button-manage": "Manage", "label-new-tab": "New tab", "msg-tab-busy": "This tab is currently busy, please try again later", "empty-state": { "no-file-open": "Niciun fișier nu este deschis", "create-new-file": "Creează un nou fișier", "go-to-file": "Mergi la fișier", "see-recent-files": "Vezi cele mai recente fișiere", "close": "Închide", "unknown-pane-title": "Plugin no longer active", "unknown-pane-desc": "The plugin that created this pane ({{type}}) has gone away" }, "menu": { "edit-view": "Editează (Ctrl/Cmd+Click pentru a edita într-un nou panou)", "read-view": "Current view: reading", "switch-to-edit-view": "Click to edit", "switch-to-read-view": "Click to read", "mod-click-open-new-tab": "{{key}}+Click to open in new tab", "find": "Caută...", "replace": "Înlocuiește...", "edit": "Editează", "preview": "Previzualizează", "more-options": "Mai multe opțiuni", "close": "Închide", "close-others": "Close others", "close-right": "Close tabs to the right", "pin": "Fixează", "unpin": "Unpin", "unlink-tab": "Unlink tab", "link-tab": "Link with tab...", "toggle-source-mode": "Source mode", "toggle-reading-view": "Reading view", "delete-file": "Șterge fișier", "create-file": "Create this file", "open-link": "Open link", "open-in-new-tab": "Open in new tab", "open-to-the-right": "Open to the right", "copy-url": "Copy url", "close-current-tab": "Close current tab", "copy": "Copy", "cut": "Cut", "paste": "Paste", "paste-as-plain-text": "Paste as plain text", "select-all": "Select all", "rename-heading": "Rename this heading...", "rename-blockid": "Rename this block ID...", "open-in-new-window": "Open in new window", "move-to-new-window": "Move to new window", "open-in-browser": "Open in browser", "stack-tabs": "Stack tabs", "unstack-tabs": "Unstack tabs" }, "tooltip": { "click-to-expand": "Click pentru a extinde", "click-to-collapse": "Click pentru a restrânge", "alias": "Alias", "not-created-yet": "Not created yet, select to create" }, "start-screen": { "label-version": "Version", "option-open-folder-as-vault": "Deschide directorul ca seif", "option-open-folder-as-vault-description": "Alege un director existent cu fișiere Markdown.", "option-create-vault": "Creează un seif nou", "option-create-vault-description": "Creează un seif nou Obsidian în interiorul unui director.", "option-connect-obsidian-sync": "Connect to Obsidian Sync", "option-connect-obsidian-sync-description": "Set up a synced vault with existing remote vault.", "option-new-vault-name": "Numele seifului", "option-new-vault-name-description": "Alege un nume pentru seif.", "option-new-vault-location": "Destinația", "option-new-vault-location-description": "Alege o destinație unde pui noul seif.", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Reveal vault in system explorer", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "Rename vault...", "msg-error-rename-exists": "There is already a vault with this name.", "msg-error-nested": "Cannot move vault into a subfolder of itself.", "msg-error-rename-open": "Can't rename a currently open vault.", "msg-rename-failed": "Failed to rename vault.", "msg-rename-success": "Successfully renamed vault.", "option-move-vault": "Move vault...", "msg-move-select-dest": "Select destination folder", "msg-error-move-exists": "There is already a vault at the destination.", "msg-error-move-open": "Can't move a currently open vault.", "msg-move-failed": "Failed to move vault.", "msg-move-success": "Successfully moved vault.", "option-remove": "Remove from list", "button-quick-start": "Quick start", "button-open": "Deschide", "button-browse": "Navighează", "button-connect": "Connect", "button-create-vault": "Creează", "button-back": "Înapoi", "msg-empty-vault-name": "Numele seifului nu poate rămâne gol.", "msg-invalid-folder": "Te rog să alegi un director valid.", "msg-failed-to-create-vault": "Eroare în creearea seifului.", "msg-failed-to-create-vault-at-location": "Nu s-a putut creea seiful la acea destinație. Te rog verifică de două ori destinația și permisiunea.", "msg-error-failed-to-open-vault": "Eroare la deschidere.", "msg-error-remove-current-open-vault": "Nu se poate elimina un seif deschis.", "option-get-help": "Get Help", "option-user-email": "Email", "placeholder-your-email": "Your email...", "option-user-password": "Password", "placeholder-your-password": "Your password...", "button-sign-in": "Sign in", "button-setup": "Setup", "option-connect-vault-desc": "Create a synced vault on this device.", "tooltip-own-vault": "This is a remote vault owned by you.", "tooltip-shared-vault": "This is a remote vault shared with you." }, "drag-and-drop": { "insert-link-here": "Insert link here", "insert-links-here": "Insert links here", "move-into-folder": "Move into \"{{folder}}\"", "star-this-file": "Star this file", "star-these-files": "Star these files", "open-in-this-tab": "Open in this tab", "open-as-tab": "Open as new tab" }, "window": { "maximize": "Maximize", "minimize": "Minimize", "restore-down": "Restore down", "close-window": "Close window", "go-back": "Go back", "go-forward": "Go forward" }, "start-up": { "loading-obsidian": "Loading Obsidian...", "obsidian-load-error": "An error occurred while loading Obsidian.", "button-reload-app": "Reload app", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "Open another vault", "loading-components": "Loading components...", "loading-plugins": "Loading plugins...", "loading-vault": "Loading vault...", "msg-failed-to-load-vault": "Failed to load vault: ", "loading-cache": "Loading cache...", "loading-workspace": "Loading workspace..." }, "mobile": { "action-import": "Import into vault", "action-choose-file-to-insert": "Choose a file to insert", "action-insert-text-into-file": "Insert text into {{filename}}", "action-insert-link-into-file": "Insert link into {{filename}}", "msg-importing": "Importing...", "msg-import-success": "Import success", "msg-failed-to-import-file": "Failed to import file {{filename}}", "msg-back-again-to-exit": "Press back again to exit." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "Salvează fișierul curent", "follow-cursor-link": "Urmează legătura de sub cursor", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "Comută fixarea", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "Navighează înapoi", "navigate-forward": "Navighează înainte", "use-dark-mode": "Folosește modul întunecat", "use-light-mode": "Folosește modul luminos", "change-theme": "Change theme", "search-current-file": "Caută în fișierul curent", "search-replace-current-file": "Caută și înlocuiește în fișierul curent", "open-settings": "Deschide setările", "open-help": "Deschide ajutor", "toggle-edit": "Toggle editing/reading view", "toggle-source-mode": "Toggle Live Preview/Source mode", "delete-current-file": "Șterge fișierul curent", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "Comută bara laterală din stânga", "toggle-right-sidebar": "Comută bara laterală din dreapta", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "Focus on editor", "toggle-fold": "Comută plierea pe linia curentă", "fold-all": "Pliază toate titlurile și listele", "unfold-all": "Extinde toate titlurile și listele", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "Inversează cu o linie mai sus", "swap-line-down": "Inversează cu o linie mai jos", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "Comută textul îngroșat pentru selecție", "toggle-italics": "Comută textul cursiv pentru selecție", "toggle-highlight": "Comută textul evidențiat pentru selecție", "toggle-comments": "Toggle comments for selection", "insert-link": "Inserează legătură", "toggle-spellcheck": "Toggle spellcheck", "delete-paragraph": "Șterge paragraf", "toggle-checklist": "Comută starea listei DE FĂCUT", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "Editează titlul fișierului", "copy-path": "Copiază calea fișierului", "copy-url": "Copiază URL-ul obsidian", "export-pdf": "Exportă ca fișier PDF", "reload": "Reload app without saving", "undo-close-tab": "Undo close tab", "context-menu": "Show context menu under cursor", "show-debug-info": "Show debug info", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "Comută între mod de editare/previzualizare", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "Aceasta va afecta {{links}} în {{files}}.", "msg-updated-links": "Actualizat {{links}} în {{files}}.", "label-update-links": "Actualizează legături", "label-confirm-update-link-to-file": "Vrei să actualizezi legăturile interne care trimit către acest fișier?", "button-always-update": "Actualizează mereu", "button-just-once": "O singură dată", "button-do-not-update": "Nu actualiza", "label-confirm-deletion": "Sigur vrei să ștergi \"{{filename}}\"?", "label-move-to-system-trash": "Va fi mutat în coșul de reciclare al sistemului de operare.", "label-move-to-vault-trash": "Va fi mutat în coșul de reciclare al Obsidian, localizat în directorul ascuns \".trash\" din seiful tău.", "label-permanent-delete": "Acest fișier va fi șters permanent.", "label-non-empty-folder": "Acest director nu este gol.", "label-delete-folder-warning": "Dacă vei continua, toate fișierele din acest director vor fi șterse.", "label-delete-folder": "Șterge director", "button-delete": "Șterge", "button-delete-do-not-ask-again": "Șterge și nu mai verifica încă o dată", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "În acest moment sunt {{links}} care trimit către această notă.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "Șterge fișier", "button-manage": "Manage", "button-cancel": "Anulează", "button-done": "Gata", "button-save": "Save", "button-stop": "Stop", "button-continue": "Continue", "preparing-pdf": "Pregătesc fișierul PDF...", "label-rename-file": "Rename file", "label-new-name": "New name", "msg-rename-success": "Successfully renamed file.", "label-rename-heading": "Rename heading", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "Module", "file-explorer": { "name": "Explorator de fișiere", "desc": "Vezi toate fișierele din seiful tău.", "action-open": "Open file explorer", "action-show": "Show file explorer", "action-create-note": "Creează notă nouă", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "Notă nouă", "action-new-folder": "Director nou", "action-change-sort": "Schimbă ordinea de sortare", "action-reveal-file": "Arată fișier în explorator", "action-reveal-active-file": "Arată fișierul activ în explorator", "command-move-file": "Mută fișierul în alt dosar", "action-move-file": "Mută fițierul în...", "action-move-folder": "Mută dosarul în...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "Scrie numele dosarului", "label-no-folders": "Nu am găsit dosare.", "instruction-navigate": "pentru a răsfoi", "instruction-move": "pentru a muta", "instruction-dismiss": "pentru a înlătura", "label-sort-a-to-z": "Sortează după numele fișierului (de la A la Z)", "label-sort-z-to-a": "Sortează după numele fișierului (de la Z la A)", "label-sort-new-to-old": "Sortează dupa timpul editării (de la noi la vechi)", "label-sort-old-to-new": "Sortează dupa timpul editării (de la vechi la noi)", "label-sort-created-old-to-new": "Momentul creării (de la vechi la nou)", "label-sort-created-new-to-old": "Momentul creării (de la nou la vechi)", "menu-opt-new-note": "Notă nouă", "menu-opt-new-folder": "Director nou", "menu-opt-set-attachment-folder": "Setează ca director de atașamente", "menu-opt-rename": "Redenumește", "menu-opt-delete": "Șterge", "menu-opt-make-copy": "Creează o copie", "msg-invalid-characters": "Numele fișierului nu poate conține niciunul din următoarele caractere: ", "msg-unsafe-characters": "Links will not work with file names containing any of these characters: ", "msg-file-already-exists": "Există deja un fișier cu același nume", "msg-empty-file-name": "Numele fișierului nu poate rămâne gol.", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "Last modified at {{time}}", "tooltip-created-time": "Created at {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Move", "label-untitled-file": "Untitled", "label-untitled-folder": "Untitled", "msg-set-attachment-folder": "Attachments will be saved to \"{{path}}\" from now on." }, "search": { "name": "Caută", "desc": "Caută după un cuvânt cheie în toate notele.", "action-open-search": "Caută în toate fișierele", "label-collapse-results": "Restrânge rezultatele", "label-match-case": "Căutare exactă după minuscule sau majuscule", "label-explain-search-term": "Explică termenul de căutare", "label-more-context": "Extinde contextul", "prompt-start-search": "Scrie pentru a începe căutarea...", "label-match-text": "Se potrivește cu textul: ", "label-match-regex": "Se potrivește cu formula regex: ", "label-match-exact-text": "Conține textul exact: ", "label-match-all": "Potrivește toate: ", "label-match-any": "Potrivește oricare: ", "label-excluding": "Exclude: ", "label-case-sensitive": "Doar majuscule sau doar minuscule", "label-case-insensitive": "Orice tip de litere (minuscule/majuscule)", "label-match-file-path": "Potrivește calea fișierului: ", "label-match-file-name": "Potrivește numele fișierului: ", "label-match-content": "Potrivește în conținutul fișierului: ", "label-match-task": "Match task: ", "label-match-task-todo": "Match task (todo): ", "label-match-task-done": "Match task (done): ", "label-match-line": "Match line: ", "label-match-block": "Match block: ", "label-match-section": "Match section: ", "label-match-tag": "Potrivește eticheta: ", "label-no-matches": "Nu au fost găsite rezultate.", "matches-with-count": "... și încă {{count}} rezultat.", "matches-with-count_plural": "... și încă {{count}} rezultate.", "label-copy-search-results": "Copiază rezultatele căutării", "button-copy-results": "Copiază rezultatele", "msg-successfully-copied": "Rezultatele au fost copiate în clipboard.", "option-show-path": "Afișează calea", "option-show-path-description": "Prefer să fie afișată calea întreagă decât doar numele fișierului.", "option-link-style": "Stilul legăturii", "option-link-style-description": "Opțional, transformă rezultatul fiecărui fișier într-o legătură.", "option-choice-link-style-none": "Fără", "option-choice-link-style-wikilink": "Legătură Wiki", "option-choice-link-style-markdown-link": "Legătură Markdown", "option-list-prefix": "Listează prefixul", "option-list-prefix-description": "Opțional adaugă la fiecare articol din listă un prefix.", "option-choice-list-style-none": "Fără", "option-choice-list-style-dash": "Cratimă (-)", "option-choice-list-style-asterisk": "Asterisc (*)", "option-choice-list-style-numbered": "Număr", "tooltip-clear-search": "Șterge căutarea", "label-search-options": "Search options", "tooltip-read-more": "Read more", "label-history": "History", "tooltip-clear-history": "Clear search history", "label-path-option-description": "match path of the file", "label-file-name-option-description": "match file name", "label-tag-option-description": "search for tags", "label-line-option-description": "search keywords on same line", "label-section-option-description": "search keywords under same heading", "menu-opt-search-for": "Search for \"{{keyword}}\"" }, "quick-switcher": { "name": "Comutare rapidă", "desc": "Treci de la un fișier la altul direct de pe tastatură. Ctrl/Cmd+O pentru a activa această funcționalitate.", "short-name": "Switcher", "action-open": "Deschide comutarea rapidă", "instruction-navigate": "pentru a naviga", "instruction-open": "pentru a deschide", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "pentru a crea", "instruction-dismiss": "pentru a respinge", "label-no-note-create-new": "Nu au fost găsite note. Apasă Enter pentru a crea o notă nouă.", "prompt-type-file-name": "Introdu numele fișierului la care vrei să comuți sau pe care vrei să-l creezi...", "label-enter-to-create": "Apasă Enter pentru a crea fișierul", "tooltip-not-created-yet": "Not created yet, select to create", "option-show-existing-only": "Show existing only", "option-show-existing-only-description": "Whether to show links to files that are not yet created.", "option-show-attachments": "Show attachments", "option-show-attachments-desc": "Show attachment files like images, videos, and PDFs.", "option-show-all-file-types": "Show all file types", "option-show-all-file-types-desc": "Show all files including ones that Obsidian can't open. The file will be opened with the default app for that file type." }, "graph-view": { "name": "Afișaj grafic", "desc": "Vezi un grafic cu prezentarea generală a legăturilor dintre note.", "action-open": "Deschide graficul", "action-open-local": "Deschide graficul local", "action-copy-screenshot": "Copiază captura de ecran", "tab-title": "Graficul {{displayText}}", "label-filters": "Filtre", "prompt-filter-nodes": "Caută fișiere...", "option-depth": "Adâncime", "option-depth-description": "Show nodes this number of links away", "option-neighbor-links": "Legături vecine", "option-neighbor-links-description": "Afișează legături între vecini.", "option-forelinks": "Legături de ieșire", "option-forelinks-description": "Afișează legăturile către alte fișiere", "option-backlinks": "Legături de intrare", "option-backlinks-description": "Afișează legăturile de la alte fișiere", "option-show-tags": "Etichete", "option-show-tags-description": "Etichetele sunt legate de fișierele care le conțin", "option-show-attachments": "Atașamente", "option-show-attachments-description": "Afișează fișierele care includ atașamente", "option-show-existing-files-only": "Doar fișierele care există", "option-show-existing-files-only-description": "Când este bifat, nu sunt arătate legăturile către fișierele care nu există", "option-show-orphans": "Orfane", "option-show-orphans-description": "Arată fișierele care nu sînt legate de nimic", "label-display": "Afișează", "option-show-arrows": "Săgeți", "option-show-arrows-description": "Afișează săgețile când focalizez în interior", "option-text-fade": "Pragul de estompare a textului", "option-node-size": "Mărimea nodului", "option-link-thickness": "Grosimea legăturii", "label-forces": "Forțele", "option-center-force": "Forța centrului", "option-link-force": "Forța legăturii", "option-link-distance": "Distanța legăturii", "option-repel-force": "Forța de respingere", "tooltip-open-graph-settings": "Deschide setările graficului", "msg-screenshot-copied": "Captura de ecran a fost copiată în clipboard.", "label-groups": "Groups", "placeholder-enter-query": "Enter query...", "tooltip-delete-graph": "Delete group", "button-new-group": "New group", "tooltip-click-to-change-drag-to-reorder": "Click to change color\nDrag to reorder groups", "action-timelapse": "Start graph timelapse animation", "tooltip-start-timelapse-animation": "Start timelapse animation", "button-animate-timelapse": "Animate" }, "backlinks": { "name": "Referințe", "desc": "Afișează numărul de referințe în bara de status.", "action-open": "Deschide referințe", "action-show": "Show backlinks pane", "action-open-for-current": "Deschide referințele pentru fișierul curent", "action-toggle-backlinks-in-document": "Toggle backlinks in document", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "Mențiuni conectate", "label-no-backlinks": "Nu au fost găsite referințe.", "label-unlinked-mentions": "Mențiuni fără legături", "label-show-search": "Show search filter", "label-link-button-text": "Legătură", "tab-title": "Referințe pentru {{displayText}}", "label-no-unlinked-mentions": "Nu au fost găsite mențiuni fără legături.", "ellipsis": "...", "option-backlink-in-document": "Backlink in document", "option-backlink-in-document-desc": "Show backlinks in document by default when opening new panes." }, "outgoing-links": { "name": "Outgoing Links", "desc": "Show outgoing links and detect unlinked mentions of other notes in the current note.", "action-open": "Open outgoing links", "action-show": "Show outgoing links pane", "action-open-for-current": "Open outgoing links for the current file", "tab-title": "Outgoing links from {{displayText}}", "label-links": "Links", "label-no-links": "No links found.", "label-unlinked-mentions": "Unlinked mentions", "tooltip-link-file": "Link this file", "tooltip-not-created": "Not created yet" }, "tag-pane": { "name": "Panoul cu etichete", "desc": "Afișează toate etichetele tale împreună cu ocurența lor.", "action-show": "Show tag pane", "label-no-tags": "Nu au fost găsite etichete.", "label-sort-by-name-a-to-z": "Numele etichetei (A la Z)", "label-sort-by-name-z-to-a": "Numele etichetei (Z la A)", "label-sort-by-frequency-high-to-low": "Frecvența (mare la mică)", "label-sort-by-frequency-low-to-high": "Frecvența (mică la mare)", "action-show-nested-tags": "Show nested tags", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "Previzualizare pagină", "desc": "Previzualizează o notă când este cursorul deasupra unei legături interne. Ctrl/Cmd + cursor deasupra legăturii în modul de editare.", "label-empty-note": "\"{{linktext}}\" nu a fost creată încă. Click pentru a o crea.", "label-source-editor": "Editor", "label-source-preview": "Preview", "label-source-search": "Search, Backlinks, and Outgoing links", "label-require-mod": "Require {{key}} to trigger page preview on hover" }, "starred": { "name": "Favorite", "desc": "Marchează ca favorite fișierele și căutările folosite frecvent.", "action-show": "Show starred pane", "action-toggle": "Marchează fișierul curent", "action-toggle-search": "Marchează căutarea curentă", "action-star": "Adaugă la favorite", "action-unstar": "Scoate de la favorite", "menu-opt-remove": "Șterge", "msg-successfully-starred": "Marcat ca favorit {{type}} \"{{title}}\".", "msg-removed-starred": "Scos de la favorite {{type}} \"{{title}}\".", "msg-cannot-find-path": "Nu poate fi găsit fișierul la \"{{path}}\"." }, "custom-css": { "name": "CSS personalizat", "desc": "Citește \"obsidian.css\" din seif și îl aplică.", "setting-community-themes": "Teme ale comunității", "msg-fetching-themes": "Sunt preluate temele din comunitate...", "prompt-filter": "Filtrează...", "label-dark-theme-only": "Doar teme întunecate", "label-light-theme-only": "Doar teme luminoase", "label-use": "Folosește", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "Update", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "Remove theme", "label-visit-on-github": "Vizitează pe GitHub", "msg-load-error": "Nu au putut fi încărcate temele din comunitate, te rog să verifici conexiunea la internet.", "msg-now-using-theme": "Acum folosești {{title}} ca temă CSS.", "msg-deleted-theme": "The theme {{title}} has been deleted.", "msg-updated-theme": "The theme {{title}} has been updated.", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "Paleta de comenzi", "desc": "Scrie o comandă pentru a o folosi. Nu este nevoie de interfața grafică sau să memorezi scurtătura.", "action-open": "Deschide paleta de comenzi", "instruction-navigate": "pentru a naviga", "instruction-use": "pentru a folosi", "instruction-dismiss": "pentru a respinge", "label-no-commands": "Nu au fost găsite comenzi.", "prompt-type-command": "Scrie o comandă...", "label-pinned-commands": "Pinned commands", "option-add-new-pin": "New pinned command", "option-add-new-pin-description": "Pinned commands will appear at the top of all commands when no search query is present." }, "markdown-format-importer": { "name": "Importator din format Markdown", "desc": "Transformă fișiere Markdown din alte aplicații în formatul din Obsidian.", "action-open": "Deschide importatorul din format Markdown", "option-roam-tag-fixer": "Reparare etichete Roam Research", "option-roam-tag-fixer-description": "Convertește \"#tag\" și \"#[[tag]]\" în \"[[tag]]\".", "option-roam-highlight-fixer": "Reparare text evidențiat Roam Research", "option-roam-highlight-fixer-description": "Convertește \"^^highlight^^\" în \"==highlight==\".", "option-roam-todo-converter": "Convertor Roam Research TODO", "option-roam-todo-converter-description": "Convertește \"{{[[TODO]]}}\" în \"[ ]\".", "option-bear-highlight-fixer": "Convertor de evidențiere a textului", "option-bear-highlight-fixer-description": "Convertește \"::highlight::\" în \"==highlight==\".", "zettelkasten-link-fixer": "Reparare legături Zettelkasten", "zettelkasten-link-fixer-description": "Repară legăturile \"[[UID]]\" și le transformă în \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Îmbunătățire legături Zettelkasten", "zettelkasten-link-beautifier-description": "Repară legăturile \"[[UID]]\" și le formatează \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Atenție: importatorul va converti toate fișierele din seif, nu doar fișierul curent.", "msg-override-files-warning": "Fișierele tale vor fi suprascrise. Creează copii de rezervă înainte să începi conversia.", "label-start-conversion": "Începe conversia", "label-stop": "Stop", "label-go-back": "Mergi înapoi", "label-done": "Gata", "label-processing": "Procesează...", "label-cancelling": "Anulează...", "label-finished": "Terminat!", "label-processed-files": "Fișiere procesate", "label-modified-files": "Fișiere modificate", "label-total-replacements": "Înlocuiri totale" }, "daily-notes": { "name": "Note zilnice", "desc": "Deschide nota de azi sau creează o notă dacă nu există.", "short-name": "Today", "action-open": "Deschide nota de azie", "action-open-previous": "Deschide nota zilnică anterioară", "action-open-next": "Deschide nota zilnică următoare", "action-insert-text": "Insert text into daily note", "action-insert-link": "Insert link into daily note", "msg-fail-format": "Nu am reușit să creez nota zilnică. \"{{format}}\" nu este un format valid.", "msg-fail-folder": "Nu am reușit să creez nota zilnică. Directorul \"{{folderOption}}\" nu a fost găsit.", "msg-fail-template-file": "Nu am reușit să creez nota zilnică. Fișierul șablon \"{{template}}\" nu a fost găsit.", "msg-no-previous": "Nu există nicio notă zilnică înaintea celei curente.", "msg-no-next": "Nu există nicio notă zilnică după cea curentă.", "option-date-format": "Formatul datei", "label-refer-to-syntax": "Pentru mai multe informații despre sintaxă, vezi: ", "label-syntax-link": "referință format", "label-syntax-live-preview": "Iată cum va arăta: ", "option-new-file-location": "Locația fișierelor noi", "option-new-file-location-description": "Calea directorului unde va fi creată noua notă zilnică.", "option-template": "Locația fișierului șablon", "option-template-description": "Calea fișierului pentru șablon.", "option-open-on-start": "Open daily note on startup", "option-open-on-start-description": "Open your daily note automatically whenever you open this vault." }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Notă aleatorie", "desc": "Deschide o notă la întâmplare. Util pentru revizii și descoperiri.", "short-name": "Random", "action-open": "Deschide o notă aleatorie" }, "outline": { "name": "Sumar", "desc": "Afișează sumarul fișierului curent sau al panoului conectat.", "action-open": "Deschide sumar", "action-show": "Show outline pane", "action-open-for-current": "Open outline of the current file", "tab-title": "Sumar {{displayText}}", "label-no-headings": "Nu au fost găsite titluri." }, "word-count": { "name": "Număr de cuvinte", "desc": "Afișează numărul de cuvinte în bara de status." }, "slides": { "name": "Prezentări", "desc": "Prezintă direct din Markdown. Folosește \"---\" pentru a separa paginile prezentării.", "action-start": "Începe prezentarea" }, "audio-recorder": { "name": "Înregistrare audio", "desc": "Înregistrează fișiere audio și le salvează ca atașamente.", "action-start": "Pornește înregistrarea audio", "action-stop": "Oprește înregistrarea audio", "action-toggle": "Începe/oprește înregistrarea", "msg-access-denied": "Accesul la microfon nu a fost permis, te rog să îl pornești din panoul de preferințe.", "msg-pending-grant": "Oferă acces la microfon pentru a putea începe înregistrarea.", "msg-no-microphone": "Nu este conectat niciun microfon." }, "open-with-default-app": { "name": "Deschide în aplicația implicită", "desc": "Adaugă un buton pentru a deschide fișierul curent în aplicația implicită.", "action-open-file": "Deschide în aplicația implicită", "action-open-file-mobile": "Share", "action-show-in-folder": "Arată în director", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "Șabloane", "desc": "Inserează conținutul șablonului dintr-un director de fișiere șablon.", "action-insert": "Inserează șablon", "action-insert-current-date": "Insert current date", "action-insert-current-time": "Insert current time", "option-template-folder-location": "Locul directorului de șabloane", "option-template-folder-location-description": "Fișierele din acest director vor fi disponibile ca șabloane.", "option-template-date-format": "Formatul datei", "option-template-date-format-description": "{{date}} din fișierul șablon va fi înlocuit cu această valoare.", "option-template-date-format-description2": "De asemenea, poți folosi și {{date:YYYY-MM-DD}} pentru a suprascrie formatul o singură dată.", "option-template-time-format": "Formatul orei", "option-template-time-format-description": "{{time}} din fișierul șablon va fi înlocuit cu această valoare.", "option-template-time-format-description2": "De asemenea, poți folosi și {{time:HH:mm}} pentru a suprascrie formatul o singură dată.", "instruction-navigate": "pentru a naviga", "instruction-insert": "pentru a insera șablonul", "instruction-dismiss": "pentru a închide", "msg-no-templates-found": "Nu au fost găsite șabloane", "msg-fail-invalid-folder": "Nu am reușit să afișez șabloanele. Directorul nu este valid.", "msg-fail-folder-not-found": "Nu am reușit să afișez șabloanele. Directorul \"{{folderOption}}\" nu a fost găsit.", "prompt-type-template": "Scrie numele unui șablon..." }, "translucency": { "name": "Fereastră translucidă", "desc": "Pornește efectul de transluciditate pentru a spori sentimentul de profunzime. Funcționează cel mai bine cu modul întunecat. Nu funcționează pe Linux." }, "slash-command": { "name": "Slash commands", "desc": "Enable the ability to trigger slash commands in the editor by typing the forward slash." }, "editor-status": { "name": "Editor status", "desc": "Adds a status bar item to show and change the current editor mode.", "read": "Reading", "edit-source": "Source mode", "edit-live-preview": "Live Preview" }, "publish": { "name": "Publică", "desc": "Publică notele cu ajutorul Obsidian Publish.", "action-publish-changes": "Publică schimbările", "label-no-internet-access": "Ai nevoie de acces la internet pentru a publica schimbările.", "label-publish-service-description": "Obsidian Publish este un modul al unui serviciu plătit care îți permite să-ți publici notele online direct din Obsidian.", "label-please-login": "Pentru a începe să publici, te rog să te autentifici sau să-ți creezi un nou cont Obsidian.", "label-no-publish-subscription": "Deocamdată nu ai nici un abonament Obsidian Publish.", "button-purchase": "Cumpără", "label-manage-sites": "Administrează siteurile", "label-no-sites": "Nu ai nici un site.", "button-choose": "Alege", "tooltip-edit-site-id": "Editeză ID-ul siteului", "tooltip-delete-site": "Șterge siteul", "label-delete-site-confirmation": "Ești sigur că vrei să ștergi acest site?", "label-delete-site-details": "Această acțiune va șterge imediat și definitiv siteul tău.", "label-confirm-delete-site": "Confirmă ștergerea siteului \"{{site}}\"", "option-site-id": "ID-ul siteului", "option-site-id-description": "Siteul tău va fi la adresa https://publish.obsidian.md/{site id}. Poți schimba acest lucru mai târziu. Sunt permise doar literele mici, numerele și cratima.", "option-site-id-placeholder": "Alege un ID pentru site", "button-create": "Creează", "msg-invalid-site-id": "ID-ul siteului poate conține doar literele mici, numerele și cratima.", "msg-site-id-in-use": "Acest ID de site este deja folosit, te rog alege altul.", "msg-create-site-issue": "Am întâmpinat o problemă în crearea siteului tău.", "label-site-options": "Opțiunile siteului", "option-site-general": "General", "option-site-components": "Components", "option-site-appearance": "Appearance", "option-site-reading-experience": "Reading experience", "option-site-misc": "Other site settings", "option-site-name": "Numele siteului", "option-site-name-description": "Numele siteului publicat de tine. Va apărea în pagina de titlu.", "option-site-name-placeholder": "Numele siteului tău", "option-home-page-file": "Pagina principală", "option-home-page-file-description": "Prima pagină pe care un utilizator o vede atunci când intră pe siteul tău publicat", "option-home-page-file-placeholder": "Alege un fișier publicat", "option-logo": "Logo", "option-logo-description": "Pick an image file as your site logo.", "option-logo-placeholder": "Any any uploaded image in your vault...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "Tema", "option-theme-description": "Alege culoarea implicită a siteului.", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "Arată navigarea", "option-show-navigation-description": "Afișează o listă cu toate paginile publicate în partea stângă a siteului.", "option-show-search": "Show search bar", "option-show-search-description": "Display a search bar at top of the navigation that lets the visitors search pages and headings on your site.", "option-show-graph": "Afișează graficul", "option-show-graph-description": "Afișează un grafic local mic pe fiecare pagină.", "option-show-outline": "Afișează cuprinsul", "option-show-outline-description": "Afișează sumarul titlurilor pe fiecare pagină.", "option-show-backlinks": "Afișează mențiunile", "option-show-backlinks-description": "Afișează secțiunea de mențiuni conectate la sfârșitul fiecărei pagini.", "option-sliding-window-mode": "Folosește ferestre glisante", "option-sliding-window-mode-description": "Deschide paginile într-un panel nou, în dreapta. Permite derularea orizonatală a panelurilor.", "option-hover-preview-file": "Afișează previzualizarea plutitoare", "option-hover-preview-file-description": "Afișează previzualizarea plutitoare când întârzii cu mouse-ul pe linkuri.", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "Lungimea rândului", "option-readable-line-length-description": "Limitează lungimea rândului. Încadrează mai puțin conținut pe ecran, dar face paragrafele lungi mai ușor de citit.", "option-site-password": "Passwords", "option-site-password-description": "Restrict access to your site with passwords.", "option-google-analytics": "Google Analytics tracking code", "option-google-analytics-description": "Configure Google Analytics for your site. Only available for visitors from your custom domain URL. Please check with your local laws and regulations first.", "button-manage-passwords": "Manage", "button-save-site-settings": "Salvează setările siteului", "msg-updated-options": "Actualizează opțiunile siteului.", "button-go-back": "Înapoi", "label-publishing-to": "Publică la", "tooltip-switch-site": "Comută la alt site", "button-add-linked": "Adaugă legătură", "tooltip-add-linked": "Adaugă toate fișierele care sunt legate la elementele selectate acum", "msg-added-linked-files": "{{count}} fișierul legătură a fost adăugat.", "msg-added-linked-files_plural": "{{count}} fișierele legătură au fost adăugate.", "tooltip-open-site-options": "Schimbă opțiunile siteului", "label-no-changes-detected": "Nu am înregistrat nici o schimbare.", "label-changed-files-to-be-published": "Schimbări", "label-unchanged-files-already-published": "Neschimbate (selectează pentru a șterge)", "label-file-selected": " selectat(ă)", "button-select-all-files": "Selectează tot", "button-deselect-all-files": "Deselectează tot", "label-new-files-to-be-published": "Nou", "button-publish": "Publică", "msg-no-permission-to-publish-to-site": "Nu ai permisiunea pentru a publica pe siteul curent.", "msg-select-at-least-one-file": "Te rog alege cel puțin un fișier.", "label-upload-changes": "Încarcă schimbările", "button-done": "Gata", "button-stop": "Stop", "label-status-uploading": "Încarc", "label-status-to-publish": "De publicat", "label-status-to-delete": "De șters", "label-status-published": "Publicat", "label-status-deleted": "Șters", "label-status-failed": "Eroare", "label-status-cancelled": "Anulat", "button-change": "Schimbă", "label-clear-cache": "Durează câteva minute pentru ca schimbările să apară pe siteul tău. Dacă nu vezi ultimele schimbări făcute, încearcă să ștergi cache-ul browserului.", "label-visit-site": "Poți vizita siteul aici: ", "msg-something-went-wrong": "Ceva a funcționat rău. Te rog verifică consola dezvltatorului pentru detalii.", "msg-network-error": "Am întâmpinat o eroare de rețea. ", "label-manage-passwords": "Manage passwords", "label-add-password": "Add password", "action-new-password": "New password", "label-no-password": "Your site currently does not have any passwords. Anyone can visit it.", "label-have-password": "Your site is password protected. If you have multiple passwords, visitors can access your site by entering any of them.", "option-password-name": "Password", "option-password-desc": "A hash of your password will be stored securely. Once the password is set, it cannot be revealed in plaintext.", "option-password-placeholder": "Your password", "option-nickname-name": "Nickname (optional)", "option-nickname-desc": "Set a nickname to remind yourself what or who the password is for.", "action-add-password": "Add this password", "label-untitled-password": "Untitled password", "label-password-created-time": "Created {{time}}", "msg-added-new-password": "Added new password.", "option-custom-domain": "Custom domain", "option-custom-domain-desc": "Use your own domain rather than the https://publish.obsidian.md/{site id} URL.", "option-noindex": "Disallow search engine indexing", "option-noindex-desc": "Prevent search engines from indexing your site.", "button-configure": "Configure", "label-configure-custom-domain": "Configure custom domain", "option-custom-url-name": "Custom URL", "option-custom-url-desc": "The URL that your site will be located at.", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "Redirect to your custom domain", "option-custom-url-redirect-desc": "Redirect visitors on publish.obsidian.md/id to your custom domain.", "button-update-custom-domain": "Update domain setting", "label-custom-domain-instructions": "Please refer to our {{link}} on our help site for more information.", "label-custom-domain-link-name": "custom domain setup guide", "label-site-usage": "You're using {{site}} out of your {{limit}}.", "button-add-more-sites": "Buy more sites", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "Spații de lucru", "desc": "Salvează și încarcă aspectul spațiului de lucru.", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "Salvează", "button-load": "Încarcă", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "Sync", "desc": "Synchronize your files through Obsidian Sync.", "action-view-version-history": "View version history", "label-load-more": "Load more", "label-show-diff": "Show diff", "label-copy-to-clipboard": "Copy to clipboard", "label-restore-this-version": "Restore this version", "msg-already-latest-version": "This version is already the latest version.", "msg-restored-version": "Successfully restored version from {{time}}", "label-file-deleted": "This file was deleted", "label-no-earlier-version": "There was no earlier versions of this file.", "label-empty-file": "Empty", "label-setting-files": "Setting files", "label-deleted-files": "Deleted files", "label-version-history": "Version history", "label-click-to-see-history": "Click on a deleted file to see its history.", "label-create-remote-vault": "Create remote vault", "msg-please-enter-password": "Please enter a password.", "msg-vault-name-cannot-be-empty": "Vault name cannot be empty.", "msg-successfully-created-vault": "Successfully create remote vault \"{{name}}\".", "label-remote-vault-explanation": "Remote vaults securely synchronize your vault between devices.", "option-vault-name": "Vault name", "option-vault-name-desc": "Helps you remember what this vault is for.", "option-vault-name-placeholder": "My awesome vault", "option-use-custom-encryption-password": "Customize end-to-end encryption password", "option-use-custom-encryption-password-desc": "If you turn this off, we will securely manage an encryption key for you.", "option-use-custom-encryption-password-desc-warning": "This option cannot be changed later.", "option-encryption-password": "Encryption password", "option-encryption-password-desc": "This password cannot be changed later.", "option-encryption-password-desc-warning": "If you forget this password, any remote data will remain unusable forever.", "option-encryption-password-desc-2": "This does not affect your local data.", "option-encryption-password-placeholder": "Your password", "label-enter-encryption-password": "Enter encryption password", "button-unlock-vault": "Unlock vault", "msg-verified-password": "Successfully verified your password.", "label-remote-vaults": "Your remote vaults", "label-vault-created-time": "Created {{time}}", "tooltip-delete-remote-vault": "Delete", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "Confirm delete vault", "label-confirm-delete-remote-vault-question": "Are you sure you want to delete this remote vault?", "label-confirm-delete-remote-vault-result": "All data on our server, including version history, will be deleted. Your local files will stay intact.", "label-confirm-delete-remote-vault-warning": "This action is permanent and irreversible.", "msg-remote-vault-deleted": "{{name}} has been deleted.", "button-connect-to-remote-vault": "Connect", "button-disconnect-from-remote-vault": "Disconnect", "label-not-remote-vaults": "You don't have any remote vaults.", "button-create-new-remote-vault": "Create new vault", "label-sync-log": "Sync log", "options-only-show-errors": "Errors only", "options-only-show-errors-desc": "Only show errors and hide other log items.", "button-copy-sync-log": "Copy sync log", "msg-successfully-copied-sync-log": "Successfully copied sync log.", "button-retry": "Retry", "button-purchase-subscription": "Purchase", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "Choose", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "Sync status", "option-sync-status-desc-paused": "Obsidian Sync is currently paused.", "option-sync-status-desc-running": "Obsidian Sync is currently running.", "option-device-name": "Device name", "option-device-name-desc": "This name will be displayed in the sync log. Leave empty to use the default name.", "button-resume": "Resume", "button-pause": "Pause", "option-view-deleted-files": "Deleted files", "option-view-deleted-files-desc": "View and restore deleted files.", "option-sync-log": "Sync activity", "option-sync-log-desc": "View recent sync activities for debugging.", "button-view": "View", "button-bulk-restore": "Bulk restore", "button-restore-selected-files": "Restore selected files", "msg-restoring": "Restoring...", "msg-restoring-complete": "`Restore complete: {{succeeded}} succeeded and {{failed}} failed.`", "option-over-size": "Vault size over limit", "option-over-size-desc": "Your vault is at {{size}} out of {{limit}}.", "msg-largest-files": "View largest files", "msg-largest-files-desc": "These are the remote files that are taking the most space. After deleting attachments, use the purge button to free up remote vault space.", "button-purge-remote": "Purge", "tooltip-purge-remote": "Permanently purge deleted attachments from remote vault to save space.", "msg-purge-complete": "Purge complete.", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "Selective sync", "option-excluded-folders": "Excluded folders", "option-excluded-folder-desc": "Prevent certain folders from being synced.", "option-currently-excluded-folders": " These folders currently excluded:", "button-manage-excluded-folders": "Manage", "option-sync-image": "Sync images", "option-sync-image-desc": "Sync image files with these extensions: {{extensions}}.", "option-sync-audio": "Sync audio", "option-sync-audio-desc": "Sync audio files with these extensions: {{extensions}}.", "option-sync-video": "Sync videos", "option-sync-video-desc": "Sync video files with these extensions: {{extensions}}.", "option-sync-pdf": "Sync PDFs", "option-sync-pdf-desc": "Sync PDF files.", "option-sync-unsupported": "Sync all other types", "option-sync-unsupported-desc": "Sync unsupported file types.", "option-vault-config-sync": "Vault configuration sync", "option-view-config-files": "Settings version history", "option-view-config-files-desc": "View and restore version history of setting files.", "option-sync-app": "Main settings", "option-sync-app-desc": "Enable to sync editor settings, files & links settings, custom hotkeys, etc.", "option-sync-appearance": "Appearance settings", "option-sync-appearance-desc": "Sync appearance settings like dark mode, active theme, and enabled snippets.", "option-sync-appearance-data": "Themes and snippets", "option-sync-appearance-data-desc": "Sync downloaded themes and snippets. Whether they are enabled depends on the previous setting.", "option-sync-hotkey": "Hotkeys", "option-sync-hotkey-desc": "Sync custom hotkeys.", "option-sync-core-plugin": "Active core plugin list", "option-sync-core-plugin-desc": "Sync which core plugins are enabled.", "option-sync-core-plugin-data": "Core plugin settings", "option-sync-core-plugin-data-desc": "Sync core plugin settings.", "option-sync-community-plugin": "Active community plugin list", "option-sync-community-plugin-desc": "Sync which community plugins are enabled.", "option-sync-community-plugin-data": "Installed community plugins", "option-sync-community-plugin-data-desc": "Sync installed community plugins (.js, .css, and manifest.json files) and their settings.", "label-sync-introduction": "Obsidian Sync is Obsidian's add-on sync service with end-to-end encryption and version history.", "label-account-required": "To start syncing, please log in or create a new Obsidian account.", "button-sign-up": "Sign up", "button-log-in": "Log in", "label-manage-excluded-folders": "Manage excluded folders", "label-number-of-folders-excluded": "{{folders}} are currently excluded from being synced.", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "Setup connection", "label-now-connected-to-vault": "You're now connected to \"{{name}}\".", "button-start-syncing": "Start syncing", "label-confirm-merge-vault": "Confirm Merge Vault", "msg-vault-has-notes": "Your local vault already contains some notes.", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "File recovery", "desc": "Let you restore recent snapshots to recover from accidental data loss. Snapshots are only saved for Markdown files.", "action-open": "Open saved snapshots", "option-interval": "Snapshot interval", "option-interval-description": "Minimal interval in minutes between two snapshots.", "option-keep": "History length", "option-keep-description": "Length in days snapshots is kept for.", "option-open-history": "Snapshots", "option-open-history-description": "View and restore saved snapshots.", "button-view-snapshots": "View", "option-clear": "Clear history", "option-clear-description": "Wipe all snapshots.", "button-clear-history": "Clear", "label-clear-warning": "Are you sure you want to delete all snapshots? Note that only snapshots will be removed. All files inside your vault will not be affected.", "msg-clear-complete": "Snapshots cleared.", "label-no-history-found": "No snapshots found.", "placeholder-choose-file": "Choose a file...", "label-select-file": "Please select a file on the left to view snapshots." }, "note-composer": { "name": "Note composer", "desc": "Merge, split, and refactor notes.", "option-confirm-file-merge": "Confirm file merge", "option-confirm-file-merge-description": "Prompt before merge two files.", "option-split-replacement-text": "Text after extraction", "option-split-replacement-text-description": "What to show in place of the selected text after extracting it.", "option-choice-split-replacement-text-link": "Link to new file", "option-choice-split-replacement-text-embed": "Embed new file", "option-choice-split-replacement-text-none": "None", "option-template-file": "Template file location", "option-template-file-description": "Template file to use when merging or extracting. Available variables: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Merge current file with another file...", "action-merge-file": "Merge entire file with...", "label-no-files": "No files found.", "instruction-navigate": "to navigate", "instruction-merge": "to merge", "instruction-create-new": "to create new", "instruction-merge-at-top": "to merge at top", "instruction-dismiss": "to dismiss", "prompt-select-file-to-merge": "Select file to merge into...", "label-merge-file": "Merge file", "label-confirm-file-merge": "Are you sure you want to merge \"{{file}}\" into \"{{destination}}\"? \"{{file}}\" will be deleted.", "button-merge": "Merge", "button-merge-do-not-ask-again": "Merge and don't ask again", "command-split-file": "Extract current selection...", "command-extract-heading": "Extract this heading...", "instruction-append": "to move to bottom", "instruction-prepend": "to move to top", "msg-fail-to-fetch-template": "Failed to fetch template file: \"{{template}}\" not found.", "msg-fail-to-find-heading": "Failed to find heading" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} cuvânt", "word-with-count_plural": "{{count}} cuvinte", "character-with-count": "{{count}} caracter", "character-with-count_plural": "{{count}} caractere", "link-with-count": "{{count}} legătură", "link-with-count_plural": "{{count}} legături", "file-with-count": "{{count}} fișier", "file-with-count_plural": "{{count}} fișiere", "folder-with-count": "{{count}} folder", "folder-with-count_plural": "{{count}} folders", "backlink-with-count": "{{count}} referință", "backlink-with-count_plural": "{{count}} referințe", "site-with-count": "{{count}} site", "site-with-count_plural": "{{count}} sites", "plugin-with-count": "{{count}} plugin", "plugin-with-count_plural": "{{count}} plugins", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } }{ "setting": { "options": "Настройки", "plugin": "Плагины", "builtin-plugins": "Встроенные плагины", "plugin-options": "Плагины", "folder-path-example-placeholder": "Пример: папка 1/папка 2", "file-path-example-placeholder": "Пример: папка/заметка", "msg-restart-required": "Изменение данного параметра потребует перезапуск приложения.", "editor": { "name": "Редактор", "section-general": "Общие", "section-behavior": "Режим работы", "section-display": "Отображение", "option-spellcheck": "Проверять орфографию", "option-spellcheck-description": "На данный момент работает только с американским английским.", "spellcheck-languages": "Выбрать языки", "spellcheck-languages-description": "Выбрать языки для проверки орфографии.", "spellcheck-languages-mac-description": "Встроенная программа проверки орфографии автоматически определит используемый язык в macOS.", "spellcheck-dict": "Словарь", "spellcheck-dict-empty": "Словарь пуст.", "option-show-inline-title": "Встроенный заголовок", "option-show-inline-title-description": "Отображать имя файла в виде редактируемого заголовка в теле файла.", "option-readable-line-length": "Ограничить максимальную длину строки", "option-readable-line-description": "Повышает удобство чтения длинных абзацев, но уменьшает количество помещающейся на экране информации.", "option-strict-line-break": "Двойной разделитель строк", "option-strict-line-break-description": "Игнорировать одиночные разделители строк в режиме просмотра в соответствии со стандартом Markdown. Отключите, чтобы одиночные разделители отображались в режиме просмотра.", "option-show-frontmatter": "Отображать frontmatter", "option-show-frontmatter-description": "В режиме просмотра отображать frontmatter как блок кода. Отключение скроет раздел frontmatter.", "option-auto-pair-brackets": "Закрывать скобки", "option-auto-pair-brackets-description": "Автоматически закрывает скобки и кавычки.", "option-auto-pair-markdown": "Закрывать теги Markdown", "option-auto-pair-markdown-description": "Автоматически закрывает теги для жирного и курсивного начертаний.", "option-smart-indent-lists": "Отступ для списков", "option-smart-indent-lists-description": "Автоматически добавляет отступы и теги для списков.", "option-fold-heading": "Сворачивать заголовки", "option-fold-heading-description": "Сворачивает весь текст под заголовками.", "option-fold-indent": "Сворачивать отступы", "option-fold-indent-description": "Сворачивает текст с одинаковыми отступами, например списки.", "option-default-new-tab-view": "Режим открытия новых табов", "option-default-new-tab-view-description": "По умолчанию новый таб откроется в выбранном режиме.", "option-default-new-tab-view-editing": "Редактор", "option-default-new-tab-view-reading": "Просмотр", "option-default-editing-mode": "Режим редактора по умолчанию", "option-default-editing-mode-description": "По умолчанию редактор откроется в выбранном режиме.", "option-default-editing-mode-source": "Просмотр исходного кода", "option-default-editing-mode-live-preview": "Динамический просмотр", "option-show-line-number": "Отображать номера строк", "option-show-line-number-description": "Добавляет нумерацию строк на полях.", "option-indentation-guide": "Отображать направляющие в списках", "option-indentation-guide-description": "Добавляет вертикальные линии между пунктами одного уровня в списках.", "option-use-tabs": "Использовать табуляцию", "option-use-tabs-description": "Использовать табуляцию для отступов при нажатии клавиши \"Tab\". Отключите, чтобы вместо табуляции использовались символы пробела.", "option-tab-size": "Ширина табуляции", "option-tab-size-description": "Количество пробелов, которому соответствует табуляция.", "option-rtl": "Направления письма (RTL)", "option-rtl-description": "Установить отображение направления письма заметок справа налево.", "option-auto-convert-html": "Конвертировать HTML", "option-auto-convert-html-description": "Автоматически преобразовывать HTML в Markdown при вставке и перетаскивании веб-ссылок. Используйте с Ctrl/Cmd+Shift+V для вставки без конвертации.", "option-vim-key-bindings": "Использовать сочетания клавиш Vim", "option-vim-key-bindings-description": "Позволяет использовать сочетания клавиш Vim в режиме редактирования.", "option-vim-key-bindings-mobile": "На мобильных устройствах этот параметр настраивается для каждого устройства и не синхронизируется через конфигурационный файл.", "option-emacsy-keys": "Использовать сочетания клавиш старого Emacs-стиля для macOS", "option-emacsy-keys-description": "Позволяет использовать дополнительные клавиши навигации в Emacs-стиле, но может нарушить работу некоторых сочетаний.", "label-confirm-enable-vim": "Подтвердите выбор Vim режима", "label-vim-warning": "Режим Vim эффективен для редактирования текста, но может быть контринтуитивен. Если вы не знакомы с Vim, эта опция может создать ощущение, что Obsidian не работает.", "label-vim-test": "Подтвердите навыки владения Vim, введя команду выхода из Vim без сохранения:", "label-vim-your-answer": "Ваш ответ", "placeholder-enter-command": "Введите команду...", "button-confirm-enable-vim": "Позвольте включить Vim", "msg-vim-mode-enabled": "Верная команда. Режим Vim активирован.", "msg-vim-mode-not-enabled": "Команда не верна. Режим Vim остается отключен для вашего удобства.", "msg-vim-mode-please-enter-command": "Для включения режима Vim введите команду", "option-legacy-editor": "Использовать старый редактор", "option-legacy-editor-description2": "Устаревший редактор скоро будет удален. В настоящее время он больше не поддерживается, и поэтому ошибки в нем больше не будут исправляться.", "label-legacy-deprecation": "Встречайте новый редактор", "label-legacy-deprecation-1": "Obsidian теперь имеет совершенно новый редактор, более удобный и надежный.", "label-legacy-deprecation-2": "Похоже, что вы все еще используете старый редактор, и мы думаем, что вам понравится новый редактор.", "label-legacy-deprecation-choice": "Какой режим вы хотели бы использовать?", "label-live-preview-description": "Динамический просмотр с WYSIWYG.", "label-source-mode-description": "Просмотр исходного кода с подсветкой синтаксиса Markdown.", "button-start-new-editor": "Запустить новый редактор" }, "file": { "name": "Файлы и ссылки", "option-confirm-file-deletion": "Подтверждать удаление файла", "option-confirm-file-deletion-description": "Отображает окно с подтверждением удаления файла.", "option-delete-destination": "Удаленные файлы", "option-delete-destination-description": "Что делать с файлами после удаления.", "option-choice-system-trash": "Перемещать в системную корзину", "option-choice-vault-trash": "Перемещать в корзину Obsidian (папка .trash)", "option-choice-permanent-delete": "Удалять безвозвратно", "option-always-update-links": "Всегда обновлять внутренние ссылки", "option-always-update-links-description": "Обновляет ссылки автоматически после переименования файла.", "option-new-note-location": "Место по умолчанию для новой заметки", "option-new-note-location-description": "Где создавать новую заметку. Настройки плагинов могут переопределить это значение.", "option-choice-vault-root": "В корне хранилища", "option-choice-current-folder": "В той же папке, где расположен файл", "option-choice-specified-folder": "В папке, указанной ниже", "option-new-file-folder-path": "Папка, в которой создавать новые заметки", "option-new-file-folder-path-description": "Новые заметки будут создаваться в этой папке. Настройки плагинов могут переопределить это значение.", "option-use-wiki-links": "Использовать [[Wiki-ссылки]]", "option-use-wiki-links-description": "Автоматически создавать Wiki-ссылки для [[ссылок]] и ![[изображений]] вместо Markdown-ссылок.", "option-show-unsupported-files": "Обнаружение файлов всех расширений", "option-show-unsupported-files-description": "Показывать файлы с любым расширением, даже если Obsidian не может открыть их самостоятельно. Вы сможете их видеть и ссылаться на них в Файловом менеджере и Быстром переходе.", "option-link-autocompleted-format": "Формат новой ссылки", "option-link-autocompleted-format-description": "Какой формат использовать при создании внутренних ссылок.", "option-choice-shortest-linktext": "Самый короткий путь к файлу из возможных", "option-choice-relative-path": "Относительный путь к файлу", "option-choice-absolute-path": "Абсолютный путь относительно хранилища", "option-new-attachment-location": "Место для вложенных файлов по умолчанию", "option-new-attachment-location-description": "Куда будут добавляться новые вложенные файлы.", "option-choice-subdirectory": "В подпапке в текущей папке", "option-attachment-folder-path": "Путь к папке для вложенных файлов", "option-attachment-folder-path-description": "Новые вложенные файлы будут сохраняться в этой папке. В том числе любые вставленные изображения и аудиозаписи.", "option-attachment-subfolder-path": "Имя подпапки", "option-attachment-subfolder-path-description": "Если заметка находится в \"vault/folder\", а имя подпапки \"attachments\", то вложенные файлы будут сохраняться в \"vault/folder/attachments\".", "option-attachment-subfolder-path-placeholder": "attachments", "option-excluded-files": "Исключенные файлы и папки", "option-excluded-files-desc": "Исключенные файлы и папки будут скрыты или менее заметны в результатах поиска, в автозаполнении ссылок, в Быстром переключении и на Графе.", "label-no-excluded-filters-applied": "Исключение на данный момент не используется. Добавьте фильтр ниже.", "label-excluded-filters-applied": "Файлы и папки, соответствующие следующим фильтрам, в настоящее время исключены:", "label-excluded-filter": "Фильтр", "placeholder-excluded-filter": "Введите имя, путь или \"/regex/\"..." }, "appearance": { "name": "Оформление", "option-base-theme": "Основная тема", "option-base-theme-description": "Выбор основной цветовой схемы оформления Obsidian.", "option-accent-color": "Акцентный цвет", "option-accent-color-description": "Выбор акцентного цвета, используемого во всем приложении.", "dark-theme": "Темная", "light-theme": "Светлая", "system-theme": "Системная", "option-font": "Шрифт", "option-advanced": "Расширенные настройки", "option-interface-font": "Шрифт интерфейса", "option-interface-font-description": "Выбор основного шрифта интерфейса в Obsidian.", "option-text-font": "Шрифт текста", "option-text-font-description": "Выбор шрифта для областей редактирования и просмотра.", "option-monospace-font": "Моноширинный шрифт", "option-monospace-font-description": "Выбор шрифта для блоков с кодом и для frontmatter.", "label-single-font-currently-in-effect": " В настоящее время используется следующий шрифт: ", "label-multiple-fonts-currently-in-effect": " В настоящее время используются следующие шрифты:", "option-font-placeholder": "Введите имя шрифта...", "label-no-custom-font-set": "В данный момент пользовательский шрифт не применяется. Добавьте его ниже.", "label-font-applied": "Будет использоваться первый шрифт из этого списка, который доступен в вашей системе.", "msg-font-not-found": "Этот шрифт не обнаружен в вашей системе.", "msg-font-found": "Этот шрифт обнаружен в вашей системе.", "label-font-name": "Имя шрифта", "option-community-themes": "Посмотреть темы сообщества", "option-community-themes-description": "Предпросмотр и использование тем, созданных сообществом.", "button-browse-community-themes": "Обзор", "option-font-size": "Размер шрифта", "option-font-size-description": "Размер шрифта в пикселях в области редактирования и предварительного просмотра.", "option-font-size-action": "Быстрое изменение размера шрифта", "option-font-size-action-description": "Позволяет изменить размер шрифта используя Ctrl + колесо прокрутки мыши или жест масштабирования на тачпаде.", "option-themes": "Темы", "option-manage-themes-description": "Управление установленными темами и просмотр тем сообщества.", "option-theme-button-manage": "Настроить", "option-choice-none": "Стандартная", "option-native-menus": "Системное контекстное меню", "option-native-menus-desc": "Отображение контекстных меню приложения в соответствии с операционной системой, независимо от выбранной темы оформления.", "button-reload-themes": "Обновить темы", "msg-reloaded-themes": "Обновлен список CSS-тем.", "button-open-themes-folder": "Открыть папку с темами", "option-css-snippets": "Фрагменты CSS кода", "label-no-css-snippets-found": "В папке фрагментов CSS кода ничего не обнаружено.", "no-snippet-description": "Фрагменты CSS кода хранятся в папке \"{{path}}\".", "button-reload-snippets": "Обновить список фрагментов", "button-open-snippets-folder": "Открыть папку с фрагментами", "msg-reloaded-snippets": "Обновлен список CSS фрагментов.", "option-toggle-snippet-description": "Применить CSS фрагмент к \"{{path}}\".", "label-installed-themes": "Установленные темы", "label-screenshot-unavailable": "Снимок экрана недоступен", "label-default-theme": "Тема по умолчанию", "tooltip-click-to-enlarge": "Нажмите, чтобы увеличить", "button-update": "Обновить", "label-currently-selected": "Выбранная", "option-frame-style": "Заголовок окна", "option-frame-description": "Выбор оформления заголовка окна Obsidian. Изменение данного параметра потребует перезапуск приложения.", "option-frame-hidden": "Скрытый (по умолчанию)", "option-frame-obsidian": "Obsidian", "option-frame-native": "Системный", "option-configure-ribbon": "Ленточное меню", "option-configure-ribbon-desc": "Выбор команд для отображения в ленточном меню панели навигации.", "option-mobile-quick-ribbon-item": "Быстрый доступ к ленточному меню", "option-mobile-quick-ribbon-item-desc": "Нажатие активирует команду. При нажатии и удержании отображается меню.", "button-configure": "Настроить", "label-additional-ribbon-items": "Скрытые команды", "label-modal-configuration": "Ленточное меню", "label-modal-configuration-desc": "Выбрать команды для отображения в ленточном меню. Порядок отображения команд задается перетаскиванием.", "option-show-view-header": "Строка заголовка", "option-show-view-header-desc": "Отображать строку заголовка для каждой вкладки.", "msg-updates-found": "Найдено обновлений для тем: {{count}}", "msg-updates-found_plural": "Найдено обновлений для тем: {{count}}", "button-check-for-updates": "Проверить обновления", "button-view-updates": "Посмотреть обновления", "button-update-all-themes": "Обновить все", "label-current-themes": "Текущие темы сообщества", "label-currently-installed": "Установлено тем: {{count}}", "label-currently-installed_plural": "Установлено тем: {{count}}" }, "hotkeys": { "name": "Сочетания клавиш", "prompt-filter": "Фильтр...", "tooltip-delete-hotkey": "Удалить сочетание клавиш", "label-waiting-for-hotkey-press": "Нажмите сочетание клавиш...", "tooltip-restore-default": "Восстановить значение по умолчанию", "tooltip-customize-command": "Настроить эту команду", "tooltip-hotkey-single-conflict": "Это сочетание конфликтует с командой \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "Количество конфликтов этого сочетания с другими командами: {{count}}", "label-blank-hotkey": "Не назначено" }, "about": { "name": "О программе", "label-commercial-license": "Коммерческая лицензия", "label-license-key": "Лицензионный ключ", "license-key-placeholder": "Ваш лицензионный ключ...", "label-activate-license": "Активировать лицензию", "button-activate": "Активировать", "label-unknown-version": "Неизвестна", "label-current-version": "Текущая версия: ", "label-install-version": "(Версия установщика: {{version}})", "label-up-to-date": "Установлена актуальная версия!", "label-read-changelog": "Список изменений", "label-manual-update-required": "Для работы с новейшими функциями и получения исправлений безопасности требуется обновить версию установщика Obsidian. Вам необходимо вручную загрузить файл установки и переустановить Obsidian.", "label-download": "Скачать", "label-new-version-ready": "Новая версия доступна для установки.", "label-relaunch-to-update": "Перезапустить для обновления.", "label-disabled-updates": "Обновления отключены.", "label-checking-for-updates": "Проверяю обновления...", "button-relaunch": "Перезапустить", "button-check-for-updates": "Проверить обновления", "option-auto-update": "Автоматические обновления", "option-auto-update-description": "Проверять и скачивать доступные обновления автоматически.", "option-get-help": "Получить помощь", "option-get-help-description": "Получить помощь по использованию Obsidian.", "button-open": "Открыть", "option-language": "Язык", "option-language-description": "Изменяет язык интерфейса.", "option-insider-build": "Получать ранние сборки", "option-insider-build-description": "Автоматически обновляться до ранних сборок, чтобы попробовать новые возможности. Обратите внимание, что эти сборки могут быть менее стабильными.", "option-advanced": "Расширенные настройки", "option-hw-acceleration": "Аппаратное ускорение", "option-hw-acceleration-description": "Включает Аппаратное ускорение, использующее GPU, для более плавной работы Obsidian.", "option-hw-acceleration-warning": "Если вы отключите эту функцию, производительность приложения сильно снизится.", "option-config-location": "Место хранения конфигурации хранилища", "option-config-location-description": "Использовать папку конфигурации отличную от папки конфигурации по умолчанию. Название папки должно начинаться с точки.", "option-config-location-warning": "Имя папки конфигурации должно быть свободно и начинаться с точки.", "label-license": "Лицензия", "label-your-commercial-license-key": "Ключ вашей коммерческой лицензии \"{{key}}\".", "label-commercial-license-info": "Зарегистрирована на \"{{company}}\" для {{seats}} пользователей. Действительна до {{expiry}}.", "label-validating-commercial-license": "Проверка...", "label-invalid-commercial-license": "Лицензия недействительна: ", "button-remove-commercial-license": "Удалить", "option-catalyst": "Лицензия Catalyst", "option-catalyst-desc": "У вас лицензия Catalyst уровня {{tier}}. Спасибо за поддержку!", "option-catalyst-desc-no-license": "У вас ещё нет лицензии Catalyst. Лицензия Catalyst является единовременным пожертвованием на поддержку разработки Obsidian.", "label-app": "О программе" }, "account": { "name": "Учетная запись", "option-your-account": "Ваша учетная запись", "option-your-account-desc": "Вы вошли как {{name}} ({{email}}).", "option-your-account-desc-no-login": "Вы не вошли в систему. Учетная запись необходима только для работы Obsidian Sync, Obsidian Publish и доступа к ранним сборкам Catalyst.", "button-manage-settings": "Настроить", "label-insider": "Insider", "label-supporter": "Supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Повысить уровень", "option-commercial-license": "Коммерческая лицензия", "option-commercial-license-desc": "Если вы используете Obsidian в коммерческих целях, вам необходимо приобрести коммерческую лицензию.", "button-purchase": "Приобрести", "button-log-out": "Выйти", "label-log-in": "Войти", "label-sign-up": "Зарегистрироваться", "label-email": "Почта", "placeholder-email": "Ваш эл. адрес...", "label-password": "Пароль", "placeholder-password": "Ваш пароль...", "button-login": "Войти", "message-empty-email": "Электронный адрес не может быть пустым.", "message-invalid-email": "Неверный формат адреса электронной почты.", "message-empty-password": "Пароль не может быть пустым.", "message-login-failed": "Неправильный адрес электронной почты или пароль.", "label-no-account": "Нет аккаунта? ", "link-sign-up-now": "Зарегистрироваться" }, "core-plugin": { "plugin-list": "Управление плагинами", "option-search-plugin": "Поиск встроенных плагинов", "option-search-plugin-description": "Поиск встроенных плагинов по наименованию или описанию.", "placeholder-search-plugin": "Поиск встроенных плагинов..." }, "third-party-plugin": { "name": "Сторонние плагины", "option-restricted-mode": "Безопасный режим", "option-restricted-mode-description": "Безопасный режим выключен. Включите, чтобы отключить плагины сообщества.", "button-turn-on": "Включить", "option-browse-community-plugins": "Плагины сообщества", "option-browse-community-plugins-description": "Обзор и установка сторонних плагинов, созданных нашим потрясающим сообществом.", "button-browse": "Обзор", "label-exit-restricted-mode": "Выход из Безопасного режима", "label-exit-restricted-mode-description-1": "Плагины сообщества, как и любое другое установленное вами программное обеспечение, потенциально может вызвать проблемы с сохранностью и безопасностью данных.", "label-exit-restricted-mode-description-2": "Безопасность плагинов очень важна для нас. Вот что мы делаем:", "label-exit-restricted-mode-description-3": "Несмотря на наши усилия, все еще существует небольшая вероятность того, что плагин сообщества может работать ненадлежащим образом.", "label-code-review": "Первичная проверка кода", "label-code-review-desc": "Плагины проходят первоначальную проверку кода нашей командой, прежде чем они появляются в каталоге.", "label-open-source": "Открытый исходный код", "label-open-source-desc": "Большинство плагинов имеют открытый исходный код на GitHub, поэтому вы можете самостоятельно проверить код.", "label-peer-audit": "Совместный аудит", "label-peer-audit-desc": "У нас большое сообщество разработчиков, которые проверяют друг друга.", "label-report-mechanism": "Механизм отчетности", "label-report-mechanism-desc": "Мы отслеживаем и удаляем неисправные плагины, основываясь на отзывах пользователей.", "label-exit-restricted-mode-disable-confirmation": "Вы хотите выйти из Безопасного режима, чтобы включить плагины сообщества? Мы настоятельно рекомендуем перед этим сделать резервные копии ваших данных.", "label-learn-more": "Узнайте больше о безопасности плагинов", "button-turn-on-community-plugins": "Включите плагины сообщества", "label-trust-author": "Доверяете ли вы автору этого хранилища?", "label-trust-author-description-1": "Вы впервые открываете это хранилище, и оно поставляется с несколькими плагинами.", "label-trust-author-description-2": "Если вы получили это хранилище от кого-то другого, обратите внимание, что плагины неизвестного происхождения могут представлять угрозу безопасности.", "label-trust-author-description-3": "Если вы не полностью доверяете автору этого хранилища, мы рекомендуем оставаться в Безопасном режиме, чтобы плагины из этого хранилища не запускались.", "button-enable-plugins": "Довериться автору и включить плагины", "button-dont-trust-author": "Просмотр хранилища в Безопасном режиме", "placeholder-community-plugins": "Поиск плагина...", "msg-failed-load-plugins": "Не удалось загрузить список плагинов.", "label-installed": "Установлен", "button-install": "Установить", "button-enable": "Включить", "button-disable": "Выключить", "button-copy-share-link": "Поделиться ссылкой", "button-donate": "Поблагодарить", "label-no-results-found": "Ничего не найдено.", "msg-failed-to-load-manifest": "Не удалось загрузить описание плагина.", "label-version": "Версия: {{version}}", "label-currently-installed-version": " (установлена: {{version}})", "label-by-author": "Автор: ", "label-repository": "Репозиторий: ", "label-last-update": "Последнее обновление: ", "tooltip-view-last-update": "Показать последнее обновление", "label-unsupported": "Этот плагин не поддерживает ваше устройство.", "button-update": "Обновить", "label-no-readme": "Плагин не предоставил README-файл.", "msg-installing-plugin": "Устанавливается плагин \"{{name}}\"...", "msg-failed-to-install-plugin": "Не удалось установить плагин \"{{name}}\".", "msg-successfully-installed-plugin": "Установлен плагин \"{{name}}\".", "label-installed-plugins": "Управление плагинами", "button-reload-plugins": "Перезагрузить плагины", "msg-reloaded-third-party-plugins": "Сторонние плагины перезагружены.", "label-uninstall": "Удалить", "label-uninstall-plugin": "Удалить плагин", "label-uninstall-plugin-confirmation": "Вы точно хотите удалить плагин? Это действие удалит папку плагина.", "button-open-plugins-folder": "Открыть папку с плагинами", "button-check-for-updates": "Проверить обновления", "button-update-all-plugins": "Обновить все", "label-current-plugins": "Установленные плагины", "label-currently-installed": "Количество установленных плагинов: {{count}}", "label-currently-installed_plural": "Количество установленных плагинов: {{count}}", "label-debug-startup-time": "Отладка времени запуска", "label-debug-startup-time-description": "Показывает сообщение о том, сколько времени потребовалось каждому плагину на инициализацию при запуске приложения.", "msg-no-updates-found": "Обновления не найдены.", "msg-updates-found": "Найдено обновлений для плагинов: {{count}}", "msg-updates-found_plural": "Найдено обновлений для плагинов: {{count}}", "msg-update-plugin": "Обновить до версии {{version}}", "option-search-installed-plugin": "Поиск установленных плагинов", "option-search-installed-plugin-description": "Поиск установленных плагинов по наименованию или описанию.", "placeholder-search-installed-plugin": "Поиск установленных плагинов...", "show-installed-only": "Показать только установленные", "label-donate-modal-title": "Поддержать разработку плагина {{name}}", "label-donate-modal-text1": "Разработка плагина ведется на добровольной основе. Если вы считаете этот плагин полезным, пожалуйста, рассмотрите возможность финансовой поддержки его разработки.", "label-donate-modal-text2": "100% взноса пойдет разработчику плагина. Платформа для сбора средств, выбранная разработчиком, может взимать дополнительную плату.", "label-donate-modal-text3": "Спасибо за поддержку!", "label-support-this-plugin": "Поблагодарить:", "label-search-summary": "Отображается {{pluginCount}}", "label-by-popularity": "По количеству скачиваний", "label-by-released": "По дате выхода", "label-by-updated": "По дате последнего обновления", "label-alphabetical": "По названию", "label-last-updated": "Обновление {{time}}" }, "mobile-toolbar": { "name": "Мобильный инструментарий", "option-configure-quick-action": "Настроить быстрое действие", "option-configure-quick-action-description": "Определите какую команду вызвать, потянув экран сверху вниз. Текущий выбор: \"{{command}}\".", "button-configure": "Настроить", "placeholder-select-quick-action": "Выберите быстрое действие...", "manage-toolbar-options": "Инструментарий", "option-internal-link": "Добавить внутреннюю ссылку", "option-internal-embed": "Добавить вставку", "option-tag": "Добавить тег", "option-heading": "Заголовок", "option-strikethrough": "Зачеркивание", "option-highlight": "Выделение", "option-code": "Блок кода", "option-blockquote": "Цитата", "option-markdown-link": "Добавить Markdown-ссылку", "option-bullet-list": "Список", "option-numbered-list": "Нумерованный список", "option-indent-list": "Добавить отступ", "option-unindent-list": "Убрать отступ", "option-undo": "Отменить", "option-redo": "Применить", "option-move-caret-up": "Каретка вверх", "option-move-caret-down": "Каретка вниз", "option-move-caret-left": "Каретка влево", "option-move-caret-right": "Каретка вправо", "option-first-line": "К первой строке", "option-last-line": "К последней строке", "option-toggle-keyboard": "Клавиатура", "option-configure-toolbar": "Настройка инструментария", "option-added-options": "Добавленные опции", "option-more-toolbar-options": "Другие настройки", "option-attach": "Вложение", "option-add-command": "Добавить глобальную команду", "option-add-command-description": "Выберите любую глобальную команду для добавления в инструментарий." } }, "editor": { "search": { "placeholder-find": "Найти", "placeholder-replace": "Заменить", "label-previous": "Назад", "label-next": "Далее", "label-all": "Все", "label-exit-search": "Закрыть поиск", "label-replace": "Заменить", "label-replace-all": "Заменить все" }, "link-suggestion": { "label-type-hash": "Введите #", "label-link-heading": ", чтобы сослаться на заголовок", "label-type-block": "Введите ^", "label-link-block": ", чтобы сослаться на блок", "label-type-pipe": "Введите |", "label-change-display-text": ", чтобы изменить отображаемый текст", "label-no-match-found": "Совпадений не найдено" }, "spellcheck": { "no-suggestion": "Нет предложений...", "add-to-dictionary": "Добавить в словарь" }, "menu": { "edit-link": "Редактировать ссылку" }, "heading-suggestion": { "label-no-heading": "Без заголовка", "label-heading-level": "Заголовок {{level}}" }, "print-modal": { "title": "Экспорт в PDF", "caption": "Экспорт \"{{filename}}\" в PDF со следующими параметрами", "setting-page-size": "Размер страницы", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Использовать имя файла в заголовке", "setting-landscape": "Альбомная", "setting-margin": "Отступ", "setting-margin-default": "Обычный", "setting-margin-minimal": "Минимальный", "setting-margin-none": "Без отступа", "setting-downscale-percent": "Масштабирование", "button-export-to-pdf": "Экспорт в PDF" }, "link-popover": { "tooltip-follow-link": "Перейти по ссылке", "tooltip-open-link": "Открыть ссылку", "tooltip-search-tag": "Искать тег" } }, "interface": { "embed-cannot-find": "Не удалось найти:", "embed-open-in-default-app-tooltip": "Открыть в программе по умолчанию", "empty-sidebar": "Передвиньте панель, чтобы расположить ее в другом месте.", "sidebar-expand": "Развернуть", "sidebar-collapse": "Свернуть", "msg-fail-to-save-file": "Не удалось сохранить файл \"{{filepath}}\". {{message}}.", "no-file": "Нет файла", "msg-file-changed": "Файл \"{{file}}\" был изменен извне, автоматическое слияние изменений.", "switch-vault": "Другое хранилище", "help": "Справка", "settings": "Настройки", "drag-to-rearrange": "Перетащить", "msg-switched-to-read": "Режим просмотра включен по умолчанию.", "msg-switched-to-edit": "Режим редактирования включен по умолчанию.", "msg-upgrade-installer": "Скачайте актуальную версию с сайта и переустановите Obsidian, чтобы включить эту функцию.", "tooltip-restore-default-settings": "Восстановить настройки по умолчанию", "label-copy": "Скопировать в буфер обмена", "copied_generic": "Скопировано в буфер обмена", "copied": "{{item}} в буфере обмена", "url": "Url", "msg-open-file-through-uri": "Открыт файл \"{{path}}\"", "msg-file-not-found-through-uri": "Файл \"{{name}}\" не найден.", "delete-action-short-name": "Удалить", "msg-indexing": "Obsidian индексирует хранилище...\nЭто должно произойти лишь единожды.\nНекоторый функционал может быть недоступен пока процесс не закончен.", "msg-indexing-complete": "Индексация завершена.", "msg-sandbox-vault": "Это хранилище-песочница.\nИзменения, сделанные вами в этом хранилище, будут потеряны.", "label-enter-to-create": "Enter чтобы создать новый файл", "label-update-available": "Доступно обновление", "label-debug-info": "Отладочная информация", "button-learn-more": "Подробнее", "button-not-now": "Не сейчас", "button-add": "Добавить", "button-manage": "Настроить", "label-new-tab": "Новая вкладка", "msg-tab-busy": "В настоящее время эта вкладка занята, повторите попытку позже", "empty-state": { "no-file-open": "Ни один файл не открыт", "create-new-file": "Создать новый файл", "go-to-file": "Перейти к файлу", "see-recent-files": "Просмотреть недавние файлы", "close": "Закрыть", "unknown-pane-title": "Плагин больше не активен", "unknown-pane-desc": "Плагин, который создал эту панель ({{type}}) исчез" }, "menu": { "edit-view": "Текущий режим: редактор", "read-view": "Текущий режим: просмотр", "switch-to-edit-view": "Нажмите для редактирования", "switch-to-read-view": "Нажмите для просмотра", "mod-click-open-new-tab": "{{key}}+Click чтобы открыть в новой вкладке", "find": "Найти...", "replace": "Заменить...", "edit": "Редактировать", "preview": "Просмотр", "more-options": "Еще", "close": "Закрыть", "close-others": "Закрыть остальные вкладки", "close-right": "Закрыть вкладки справа", "pin": "Закрепить", "unpin": "Открепить", "unlink-tab": "Отвязать вкладку", "link-tab": "Связать со вкладкой...", "toggle-source-mode": "Просмотр исходного кода", "toggle-reading-view": "Просмотр", "delete-file": "Удалить файл", "create-file": "Создать этот файл", "open-link": "Открыть ссылку", "open-in-new-tab": "Открыть в новой вкладке", "open-to-the-right": "Открыть в области справа", "copy-url": "Копировать ссылку", "close-current-tab": "Закрыть текущую вкладку", "copy": "Копировать", "cut": "Вырезать", "paste": "Вставить", "paste-as-plain-text": "Вставить как обычный текст", "select-all": "Выделить все", "rename-heading": "Переименовать заголовок...", "rename-blockid": "Переименовать ID блока...", "open-in-new-window": "Открыть в новом окне", "move-to-new-window": "Переместить в новое окно", "open-in-browser": "Открыть в браузере", "stack-tabs": "Сложить вкладки", "unstack-tabs": "Разложить вкладки" }, "tooltip": { "click-to-expand": "Развернуть", "click-to-collapse": "Свернуть", "alias": "Псевдоним", "not-created-yet": "Еще не создан, выбрать чтобы создать" }, "start-screen": { "label-version": "Версия", "option-open-folder-as-vault": "Открыть папку как хранилище", "option-open-folder-as-vault-description": "Выберите папку, содержащую Markdown-файлы.", "option-create-vault": "Создать новое хранилище", "option-create-vault-description": "Создайте новое хранилище Obsidian внутри указанной папки.", "option-connect-obsidian-sync": "Подключить к Obsidian Sync", "option-connect-obsidian-sync-description": "Настройте синхронизацию с облачным хранилищем.", "option-new-vault-name": "Имя хранилища", "option-new-vault-name-description": "Укажите имя нового хранилища.", "option-new-vault-location": "Расположение", "option-new-vault-location-description": "Укажите расположение нового хранилища.", "label-new-vault-location-preview": "Ваше новое хранилище будет расположено в: ", "option-reveal-vault-in-explorer": "Показать содержащую папку", "option-reveal-vault-in-explorer-mac": "Показать в Finder", "option-rename-vault": "Переименовать хранилище...", "msg-error-rename-exists": "Хранилище с таким именем уже существует.", "msg-error-nested": "Не удается переместить хранилище в собственную подпапку.", "msg-error-rename-open": "Не удается переименовать хранилище открытое в данный момент.", "msg-rename-failed": "Не удалось переименовать хранилище.", "msg-rename-success": "Хранилище переименовано успешно.", "option-move-vault": "Переместить хранилище...", "msg-move-select-dest": "Выберите папку назначения", "msg-error-move-exists": "В папке назначения уже есть хранилище.", "msg-error-move-open": "Не удается переместить хранилище открытое в данный момент..", "msg-move-failed": "Не удалось переместить хранилище.", "msg-move-success": "Хранилище перемещено успешно.", "option-remove": "Убрать из списка", "button-quick-start": "Быстрый старт", "button-open": "Открыть", "button-browse": "Просмотр", "button-connect": "Подключить", "button-create-vault": "Создать", "button-back": "Назад", "msg-empty-vault-name": "Имя хранилища не может быть пустым.", "msg-invalid-folder": "Пожалуйста, выберите существующую папку.", "msg-failed-to-create-vault": "Не удалось создать хранилище.", "msg-failed-to-create-vault-at-location": "Не удалось создать хранилище в указанном местоположении. Перепроверьте пути и права доступа.", "msg-error-failed-to-open-vault": "Не удалось открыть.", "msg-error-remove-current-open-vault": "Невозможно удалить открытое хранилище.", "option-get-help": "Получить помощь", "option-user-email": "Email", "placeholder-your-email": "Ваш адрес электронной почты...", "option-user-password": "Пароль", "placeholder-your-password": "Ваш пароль...", "button-sign-in": "Войти", "button-setup": "Настроить", "option-connect-vault-desc": "Создать синхронизированное хранилище на этом устройстве.", "tooltip-own-vault": "Это внешнее хранилище, принадлежащее вам.", "tooltip-shared-vault": "Это внешнее хранилище, доступ к которому вам предоставлен." }, "drag-and-drop": { "insert-link-here": "Вставить ссылку", "insert-links-here": "Вставить ссылки", "move-into-folder": "Переместить в \"{{folder}}\"", "star-this-file": "Пометить этот файл", "star-these-files": "Пометить эти файлы", "open-in-this-tab": "Открыть в этой вкладке", "open-as-tab": "Открыть в новой вкладке" }, "window": { "maximize": "Развернуть", "minimize": "Свернуть", "restore-down": "Восстановить", "close-window": "Закрыть окно", "go-back": "Назад", "go-forward": "Вперед" }, "start-up": { "loading-obsidian": "Obsidian загружается...", "obsidian-load-error": "При загрузке Obsidian произошла ошибка.", "button-reload-app": "Перезапустить", "button-reload-app-in-safe-mode": "Перезапустить в безопасном режиме", "button-open-another-vault": "Открыть хранилище", "loading-components": "Компоненты загружаются...", "loading-plugins": "Плагины загружаются...", "loading-vault": "Хранилище загружается...", "msg-failed-to-load-vault": "Ошибка при загрузке хранилища: ", "loading-cache": "Кэш загружается...", "loading-workspace": "Рабочее пространство загружается..." }, "mobile": { "action-import": "Импортировать в хранилище", "action-choose-file-to-insert": "Выберите файл для вставки", "action-insert-text-into-file": "Вставить текст в {{filename}}", "action-insert-link-into-file": "Вставить ссылку в {{filename}}", "msg-importing": "Импортирование...", "msg-import-success": "Импорт успешно завершен", "msg-failed-to-import-file": "Не удалось импортировать файл {{filename}}", "msg-back-again-to-exit": "Нажмите назад еще раз для выхода." }, "help-screen": { "label-official-help-site": "Официальный справочный сайт", "label-official-help-site-desc": "Читайте официальную справочную документацию Obsidian, доступную на нескольких языках.", "action-visit": "Посетить", "label-discord-chat": "Чат Discord", "label-discord-chat-desc": "Discord — лучшее место для общения с другими опытными пользователями Obsidian со всего мира.", "action-join": "Присоединиться", "label-forum": "Официальный форум", "label-forum-desc": "Помогайте друг другу, публикуйте запросы на функции, сообщайте об ошибках и проводите содержательные дискуссии об управлении знаниями.", "label-sandbox-vault": "Хранилище-песочница", "label-sandbox-vault-desc": "Играйте и экспериментируйте с различными функциями. Обратите внимание, что ваши изменения не будут сохранены." } }, "commands": { "save-file": "Сохранить текущий файл", "follow-cursor-link": "Перейти по ссылке под курсором", "open-cursor-link-in-new-tab": "Открыть ссылку под курсором в новой вкладке", "open-cursor-link-to-the-right": "Открыть ссылку под курсором в области справа", "open-cursor-link-in-new-window": "Открыть ссылку под курсором в новом окне", "navigate-tab-above": "Перейти к группе вкладок выше", "navigate-tab-below": "Перейти к группе вкладок ниже", "navigate-tab-left": "Перейти к группе вкладок слева", "navigate-tab-right": "Перейти к группе вкладок справа", "toggle-pin": "Включить/выключить закрепление области", "split-right": "Разделить вправо", "split-down": "Разделить вниз", "toggle-stacked-tabs": "Сложить/разложить вкладки", "navigate-back": "Вернуться назад", "navigate-forward": "Перейти вперед", "use-dark-mode": "Использовать темную тему", "use-light-mode": "Использовать светлую тему", "change-theme": "Сменить тему", "search-current-file": "Поиск в текущем файле", "search-replace-current-file": "Поиск и замена в текущем файле", "open-settings": "Открыть настройки", "open-help": "Открыть справку", "toggle-edit": "Переключиться между режимами редактирования и просмотра", "toggle-source-mode": "Переключиться между режимами Динамический просмотр/Исходный код", "delete-current-file": "Удалить текущий файл", "new-tab": "Новая вкладка", "close-all-tabs": "Закрыть все вкладки", "close-active-tab": "Закрыть текущую вкладку", "close-other-tabs": "Закрыть все остальные вкладки", "toggle-left-sidebar": "Свернуть/развернуть левую панель", "toggle-right-sidebar": "Свернуть/развернуть правую панель", "toggle-default-new-tab-mode": "Поменять исходный режим новой вкладки редактор/просмотр", "focus-editor": "Вернуться в редактор", "toggle-fold": "Свернуть/развернуть текущий заголовок/список", "fold-all": "Свернуть все заголовки и списки", "unfold-all": "Развернуть все заголовки и списки", "fold-more": "Свернуть больше", "fold-less": "Свернуть меньше", "swap-line-up": "Поменять местами с верхней строкой", "swap-line-down": "Поменять местами с нижней строкой", "remove-heading": "Убрать заголовок", "toggle-heading": "Установить заголовок уровня {{level}}", "toggle-bold": "Включить/выключить жирное начертание для выделения", "toggle-italics": "Включить/выключить курсивное начертание для выделения", "toggle-highlight": "Включить/выключить тег подсветки для выделения", "toggle-comments": "Включить/выключить комментарии для выделения", "insert-link": "Вставить ссылку", "toggle-spellcheck": "Включить/выключить проверку орфографии", "delete-paragraph": "Удалить абзац", "toggle-checklist": "Переключить состояние флажка", "cycle-list-checklist": "Переключить состояние маркер/флажок", "insert-callout": "Вставить выносной блок", "edit-file-title": "Редактировать заголовок файла", "copy-path": "Скопировать путь к файлу", "copy-url": "Скопировать Obsidian URL", "export-pdf": "Экспортировать в PDF", "reload": "Перезагрузить приложение без сохранения", "undo-close-tab": "Отменить закрытие вкладки", "context-menu": "Показать контекстное меню под курсором", "show-debug-info": "Показать отладочную информацию", "always-on-top": "Включить/выключить отображение поверх всех окон", "zoom-in": "Увеличить", "zoom-out": "Уменьшить", "reset-zoom": "Исходный размер", "toggle-preview": "Переключиться между режимами редактирования и просмотра", "move-to-new-window": "Переместить область в новое окно", "open-in-new-window": "Открыть область в новом окне", "rename-current-file": "Переименовать текущий файл" }, "dialogue": { "label-link-affected": "Это повлияет на {{links}} в {{files}}.", "msg-updated-links": "Обновлено {{links}} в {{files}}.", "label-update-links": "Обновить ссылки", "label-confirm-update-link-to-file": "Хотите ли вы обновлять внутренние ссылки, которые указывают на этот файл?", "button-always-update": "Обновлять всегда", "button-just-once": "Только сейчас", "button-do-not-update": "Не обновлять", "label-confirm-deletion": "Вы уверены, что хотите удалить \"{{filename}}\"?", "label-move-to-system-trash": "Будет перемещен в системную Корзину.", "label-move-to-vault-trash": "Будет перемещен в корзину Obsidian, которая находится в скрытой папке \".trash\" вашего хранилища.", "label-permanent-delete": "Файл будет удален безвозвратно.", "label-non-empty-folder": "Эта папка не пуста.", "label-delete-folder-warning": "Если вы продолжите, все файлы внутри этой папки будут удалены.", "label-delete-folder": "Удалить папку", "button-delete": "Удалить", "button-delete-do-not-ask-again": "Удалить и больше не спрашивать", "label-do-not-ask-again": "Больше не спрашивать", "label-existing-backlink": "Количество обратных ссылок к данной заметке: {{links}}", "label-existing-backlink_plural": "Количество обратных ссылок к данной заметке: {{links}}", "label-delete-file": "Удалить файл", "button-manage": "Настроить", "button-cancel": "Отмена", "button-done": "Готово", "button-save": "Сохранить", "button-stop": "Остановить", "button-continue": "Продолжить", "preparing-pdf": "Подготовка PDF...", "label-rename-file": "Переименовать файл", "label-new-name": "Новое имя", "msg-rename-success": "Файл успешно переименован.", "label-rename-heading": "Переименовать заголовок", "label-rename-blockid": "Переименовать ID блока" }, "menu-items": { "new-file": "Создать заметку", "new-file-to-the-right": "Создать заметку в области справа", "new-window": "Открыть в новом окне", "open-switcher": "Открыть быстрый переход", "open-vault": "Открыть хранилище...", "close-tab": "Закрыть вкладку", "close-window": "Закрыть окно", "find": "Найти", "replace": "Заменить", "insert-callout": "Вставить выносной блок", "insert-markdown-link": "Вставить Markdown-ссылку", "insert-wikilink": "Вставить Wiki-ссылку", "set-heading": "Заголовок уровня {{level}}", "no-heading": "Убрать заголовок", "insert-quote": "Вставить цитату", "export-pdf": "Экспорт в PDF", "toggle-bullet-list": "Список", "toggle-numbered-list": "Нумерованный список", "toggle-checklist": "Список задач", "toggle-bold": "Жирный", "toggle-code": "Код", "toggle-comment": "Комментарий", "toggle-italics": "Курсив", "toggle-highlight": "Подсветка", "toggle-strikethrough": "Зачеркивание", "toggle-comments": "Комментарий", "fold-all": "Свернуть все", "unfold-all": "Развернуть все", "fold-more": "Свернуть больше", "fold-less": "Свернуть меньше", "source-mode": "Просмотр исходного кода", "reading-view": "Просмотр", "show-debug-info": "Показать отладочную информацию", "navigate-back": "Вернуться назад", "navigate-forward": "Перейти вперед", "toggle-left-sidebar": "Свернуть/развернуть левую панель", "toggle-right-sidebar": "Свернуть/развернуть правую панель", "split-right": "Разделить вправо", "split-down": "Разделить вниз", "release-notes": "Примечания к выпуску" }, "plugins": { "name": "Плагины", "file-explorer": { "name": "Файловый менеджер", "desc": "Показывает все файлы вашего хранилища.", "action-open": "Открыть файловый менеджер", "action-show": "Показать файловый менеджер", "action-create-note": "Создать новую заметку", "action-create-note-to-the-right": "Создать заметку в области справа", "action-collapse-all": "Свернуть все", "action-expand-all": "Развернуть все", "action-new-note": "Новая заметка", "action-new-folder": "Новая папка", "action-change-sort": "Порядок сортировки", "action-reveal-file": "Показать в файловом менеджере", "action-reveal-active-file": "Показать текущий файл в файловом менеджере", "command-move-file": "Переместить файл в другую папку", "action-move-file": "Переместить файл в...", "action-move-folder": "Переместить папку в...", "action-move-items": "Переместить {{count}} в...", "prompt-type-folder": "Введите название папки", "label-no-folders": "Папка с таким названием не найдена.", "instruction-navigate": "навигация", "instruction-move": "переместить", "instruction-dismiss": "отмена", "label-sort-a-to-z": "По имени файла (A -> Z)", "label-sort-z-to-a": "По имени файла (Z -> A)", "label-sort-new-to-old": "По времени последнего изменения (от новых к старым)", "label-sort-old-to-new": "По времени последнего изменения (от старых к новым)", "label-sort-created-old-to-new": "По времени создания (от старых к новым)", "label-sort-created-new-to-old": "По времени создания (от новых к старым)", "menu-opt-new-note": "Новая заметка", "menu-opt-new-folder": "Новая папка", "menu-opt-set-attachment-folder": "Установить как папку для вложенных файлов", "menu-opt-rename": "Переименовать", "menu-opt-delete": "Удалить", "menu-opt-make-copy": "Создать копию", "msg-invalid-characters": "Имя файла не должно содержать следующие символы: ", "msg-unsafe-characters": "Ссылки не будут работать при наличии в наименовании файлов любого из этих символов: ", "msg-file-already-exists": "Файл с таким именем уже есть", "msg-empty-file-name": "Имя файла не может оставаться пустым.", "msg-bad-dotfile": "Имя файла не должно начинаться с точки.", "tooltip-modified-time": "Время последнего изменения {{time}}", "tooltip-created-time": "Время создания {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Перемещение", "label-untitled-file": "Без названия", "label-untitled-folder": "Без названия", "msg-set-attachment-folder": "С этого момента вложения сохраняются в \"{{path}}\"" }, "search": { "name": "Поиск", "desc": "Искать по ключевым словам во всех заметках.", "action-open-search": "Искать во всех файлах", "label-collapse-results": "Свернуть результаты", "label-match-case": "Учитывать регистр", "label-explain-search-term": "Объяснить поисковую строку", "label-more-context": "Развернуть контекст", "prompt-start-search": "Введите поисковый запрос...", "label-match-text": "Соответствует тексту: ", "label-match-regex": "Соответствует регулярному выражению: ", "label-match-exact-text": "Содержит точное совпадение: ", "label-match-all": "Совпадает со всеми подстроками: ", "label-match-any": "Совпадает с любой подстрокой: ", "label-excluding": "Исключая: ", "label-case-sensitive": "Учитывая регистр", "label-case-insensitive": "Не учитывая регистр", "label-match-file-path": "Совпадает с путем файла: ", "label-match-file-name": "Совпадает с именем файла: ", "label-match-content": "В содержимом файла: ", "label-match-task": "Совпадает с задачей: ", "label-match-task-todo": "Совпадает с незавершенной задачей: ", "label-match-task-done": "Совпадает с завершенной задачей: ", "label-match-line": "Совпадение в строке: ", "label-match-block": "Совпадает с блоком: ", "label-match-section": "Совпадает с заголовком: ", "label-match-tag": "Совпадает с тегом: ", "label-no-matches": "Совпадений не найдено.", "matches-with-count": "... и еще {{count}} совпадения.", "matches-with-count_plural": "... и еще {{count}} совпадений.", "label-copy-search-results": "Скопировать результаты поиска", "button-copy-results": "Скопировать результаты", "msg-successfully-copied": "Результаты скопированы в буфер обмена.", "option-show-path": "Отображать путь", "option-show-path-description": "Отображать полный путь к файлу вместо имени файла.", "option-link-style": "Стиль ссылок", "option-link-style-description": "Оформлять результаты в виде ссылок.", "option-choice-link-style-none": "Без ссылки", "option-choice-link-style-wikilink": "Wiki-ссылка", "option-choice-link-style-markdown-link": "Markdown-ссылка", "option-list-prefix": "Префикс списка", "option-list-prefix-description": "Добавлять префикс к каждому имени файла в списке.", "option-choice-list-style-none": "Без префикса", "option-choice-list-style-dash": "Тире (-)", "option-choice-list-style-asterisk": "Звездочка (*)", "option-choice-list-style-numbered": "Нумерация", "tooltip-clear-search": "Очистить", "label-search-options": "Настройки поиска", "tooltip-read-more": "Дополнительно", "label-history": "История", "tooltip-clear-history": "Очистить историю поиска", "label-path-option-description": "совпадение в пути к файлу", "label-file-name-option-description": "совпадение в имени файла", "label-tag-option-description": "совпадение в тегах", "label-line-option-description": "ключевые слова на одной строке", "label-section-option-description": "ключевые слова под одним заголовком", "menu-opt-search-for": "Искать \"{{keyword}}\"" }, "quick-switcher": { "name": "Быстрый переход", "desc": "Быстро переходите к любому файлу, не отрывая рук от клавиатуры. Вызывается по сочетанию клавиш Ctrl/Cmd+O.", "short-name": "Switcher", "action-open": "Меню быстрого перехода", "instruction-navigate": "навигация", "instruction-open": "открыть", "instruction-open-in-new-tab": "открыть в новой вкладке", "instruction-open-to-the-right": "открыть в области справа", "instruction-create": "создать", "instruction-dismiss": "отмена", "label-no-note-create-new": "Такой заметки не найдено. Нажмите Enter, чтобы создать новую.", "prompt-type-file-name": "Наберите имя файла для создания или перехода...", "label-enter-to-create": "Нажмите Enter для создания", "tooltip-not-created-yet": "Пока не создан, выберите для создания", "option-show-existing-only": "Отображать только существующие файлы", "option-show-existing-only-description": "Отображать ли ссылки на файлы, которые пока не созданы.", "option-show-attachments": "Отображать вложенные файлы", "option-show-attachments-desc": "Отображать вложенные файлы, такие как изображения, видеофайлы и PDF-файлы.", "option-show-all-file-types": "Отображать все типы файлов", "option-show-all-file-types-desc": "Показывать файлы с любым расширением, даже если Obsidian не может открыть их самостоятельно. Файл будет открыт в приложении по умолчанию для этого типа файлов." }, "graph-view": { "name": "Граф", "desc": "Графическое представление связей между заметками.", "action-open": "Граф", "action-open-local": "Открыть локальный граф", "action-copy-screenshot": "Скопировать скриншот", "tab-title": "Граф {{displayText}}", "label-filters": "Фильтры", "prompt-filter-nodes": "Искать в...", "option-depth": "Глубина", "option-depth-description": "Глубина отображения связей", "option-neighbor-links": "Связи с соседними заметками", "option-neighbor-links-description": "Показывать связи с соседними заметками", "option-forelinks": "Исходящие связи", "option-forelinks-description": "Показывать ссылки на другие файлы", "option-backlinks": "Входящие связи", "option-backlinks-description": "Показывать ссылки из других файлов", "option-show-tags": "Теги", "option-show-tags-description": "Теги привязаны к содержащим их заметкам", "option-show-attachments": "Вложения", "option-show-attachments-description": "Показывать содержащиеся в заметках вложения", "option-show-existing-files-only": "Только созданные заметки", "option-show-existing-files-only-description": "Исключает отображение ссылок на еще не созданные заметки", "option-show-orphans": "Объекты без связей", "option-show-orphans-description": "Отображать объекты, у которых нет связей", "label-display": "Отображение", "option-show-arrows": "Направление связей", "option-show-arrows-description": "Показывать направление при приближении", "option-text-fade": "Порог исчезания текста", "option-node-size": "Размер узла", "option-link-thickness": "Толщина линий", "label-forces": "Силы", "option-center-force": "Сила притяжения", "option-link-force": "Сила связи", "option-link-distance": "Расстояние между узлами", "option-repel-force": "Сила отталкивания", "tooltip-open-graph-settings": "Открыть настройки графа", "msg-screenshot-copied": "Снимок экрана скопирован в буфер обмена.", "label-groups": "Группировка", "placeholder-enter-query": "Поисковый запрос...", "tooltip-delete-graph": "Удалить группу", "button-new-group": "Новая группа", "tooltip-click-to-change-drag-to-reorder": "Смена цвета\nУпорядочивание перетаскиванием", "action-timelapse": "Запустить анимацию графа во времени", "tooltip-start-timelapse-animation": "Запустить анимацию графа", "button-animate-timelapse": "Запустить анимацию" }, "backlinks": { "name": "Обратные ссылки", "desc": "Показывает количество обратных ссылок в статусной строке.", "action-open": "Показать обратные ссылки", "action-show": "Показать панель с обратными ссылками", "action-open-for-current": "Показать обратные ссылки для текущего файла", "action-toggle-backlinks-in-document": "Включить/выключить обратные ссылки в документе", "menu-opt-backlinks-in-document": "Показавать обратные ссылки", "label-linked-mentions": "Упоминания со ссылкой", "label-no-backlinks": "Обратных ссылок не найдено.", "label-unlinked-mentions": "Упоминания без ссылки", "label-show-search": "Показать фильтр поиска", "label-link-button-text": "Ссылка", "tab-title": "Обратные ссылки для {{displayText}}", "label-no-unlinked-mentions": "Упоминаний без ссылки не найдено.", "ellipsis": "...", "option-backlink-in-document": "Обратные ссылки в документе", "option-backlink-in-document-desc": "Показать обратные ссылки в документе при открытии в новой области по умолчанию." }, "outgoing-links": { "name": "Исходящие ссылки", "desc": "Показывает исходящие ссылки и обнаруживает в заметке упоминания, не связанные с другими заметками.", "action-open": "Открыть исходящие ссылки", "action-show": "Показать панель с исходящими ссылками", "action-open-for-current": "Открыть исходящие ссылки для текущего файла", "tab-title": "Исходящие ссылки из {{displayText}}", "label-links": "Ссылки", "label-no-links": "Ссылок не найдено.", "label-unlinked-mentions": "Упоминания без ссылки", "tooltip-link-file": "Связать с этим файлом", "tooltip-not-created": "Еще не создан" }, "tag-pane": { "name": "Панель тегов", "desc": "Показывает все теги и количество их упоминаний.", "action-show": "Показать панель с тегами", "label-no-tags": "Не найдено ни одного тега.", "label-sort-by-name-a-to-z": "По тегу (А -> Я)", "label-sort-by-name-z-to-a": "По тегу (Я -> А)", "label-sort-by-frequency-high-to-low": "По частоте (часто -> редко)", "label-sort-by-frequency-low-to-high": "По частоте (редко -> часто)", "action-show-nested-tags": "Отображать вложенные теги", "action-collapse-all": "Свернуть все", "action-expand-all": "Развернуть все" }, "page-preview": { "name": "Предпросмотр страницы", "desc": "Предварительный просмотр заметки при наведении курсора на внутреннюю ссылку. Наведение + Ctrl/Cmd в режиме редактирования.", "label-empty-note": "\"{{linktext}}\" еще не создана. Нажмите, чтобы создать.", "label-source-editor": "Редактор", "label-source-preview": "Просмотр", "label-source-search": "Поиск, Обратные и Исходящие ссылки", "label-require-mod": "Требуется нажать {{key}} для предварительного просмотра заметки при наведении курсора" }, "starred": { "name": "Избранное", "desc": "Добавляйте в избранное часто используемые файлы и поисковые запросы.", "action-show": "Показать панель избранного", "action-toggle": "Добавить/удалить из избранного текущий файл", "action-toggle-search": "Добавить/удалить из избранного текущий поиск", "action-star": "Добавить в избранное", "action-unstar": "Удалить из избранного", "menu-opt-remove": "Удалить", "msg-successfully-starred": "{{type}} \"{{title}}\" добавлен в избранное", "msg-removed-starred": "{{type}} \"{{title}}\" удален из избранного", "msg-cannot-find-path": "Не удалось найти файл в \"{{path}}\"." }, "custom-css": { "name": "Пользовательский CSS", "desc": "Читает \"obsidian.css\" из вашего хранилища и применяет его.", "setting-community-themes": "Темы сообщества", "msg-fetching-themes": "Загружаются данные о темах сообщества...", "prompt-filter": "Фильтр...", "label-dark-theme-only": "Только темные", "label-light-theme-only": "Только светлые", "label-use": "Применить", "label-stop-use": "Выключить", "label-install-and-use": "Установить и применить", "label-update": "Обновить", "label-no-readme": "Эта тема не содержит файл с описанием.", "tooltip-remove-theme": "Удалить тему", "label-visit-on-github": "Перейти на GitHub", "msg-load-error": "Не удалось загрузить темы сообщества. Пожалуйста, проверьте соединение с интернетом.", "msg-now-using-theme": "Применена CSS-тема {{title}}.", "msg-deleted-theme": "Тема {{title}} была удалена.", "msg-updated-theme": "Тема {{title}} была обновлена.", "label-installed": "Установлена", "label-legacy": "Устарела", "button-update-all-themes": "Обновить все", "msg-failed-load-themes": "Не удалось загрузить темы сообщества.", "msg-no-updates-found": "Обновления не найдены.", "msg-updates-found": "Найдено обновлений для тем: {{count}}", "msg-updates-found_plural": "Найдено обновлений для тем: {{count}}", "msg-failed-to-install-theme": "Не удалось установить тему \"{{name}}\".", "msg-successfully-installed-theme": "Установлена тема \"{{name}}\".", "msg-installing-theme": "Устанавливается тема \"{{name}}\"...", "label-search-summary": "Отображается {{themeCount}}", "label-update-available": "Доступно обновление" }, "command-palette": { "name": "Палитра команд", "desc": "Введите команду, которую хотите запустить. Позволяет обращаться к функциям Obsidian без взаимодействия с интерфейсом и запоминания сочетаний клавиш.", "action-open": "Открыть палитру команд", "instruction-navigate": "навигация", "instruction-use": "использовать", "instruction-dismiss": "отмена", "label-no-commands": "Команда не найдена.", "prompt-type-command": "Введите название команды...", "label-pinned-commands": "Закрепленные команды", "option-add-new-pin": "Добавить новую команду", "option-add-new-pin-description": "Закрепленные команды будут отображаться в верхней части списка команд при пустом поисковом запросе." }, "markdown-format-importer": { "name": "Импорт Markdown-файлов", "desc": "Конвертирует Markdown-файлы из других приложений в формат Obsidian.", "action-open": "Импорт Markdown-файлов", "option-roam-tag-fixer": "Исправить формат тегов из Roam Research", "option-roam-tag-fixer-description": "Сконвертирует \"#tag\" и \"#[[tag]]\" в \"[[tag]]\".", "option-roam-highlight-fixer": "Исправить формат выделения текста из Roam Research", "option-roam-highlight-fixer-description": "Сконвертирует \"^^highlight^^\" в \"==highlight==\".", "option-roam-todo-converter": "Исправить чекбоксы из Roam Research", "option-roam-todo-converter-description": "Сконвертирует \"{{[[TODO]]}}\" в \"[ ]\".", "option-bear-highlight-fixer": "Исправить формат выделения текста из Bear", "option-bear-highlight-fixer-description": "Сконвертирует \"::highlight::\" в \"==highlight==\".", "zettelkasten-link-fixer": "Исправить ссылки на Zettelkasten-заметки", "zettelkasten-link-fixer-description": "Сконвертирует ссылки \"[[UID]]\" в \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Исправить и отформатировать ссылки на Zettelkasten-заметки", "zettelkasten-link-beautifier-description": "Сконвертирует ссылки \"[[UID]]\", а также приведет их к формату \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Внимание: плагин преобразует все файлы в вашем хранилище, а не только текущий открытый файл.", "msg-override-files-warning": "Ваши файлы будут перезаписаны. Сделайте бекап всех файлов перед тем, как начать конвертацию.", "label-start-conversion": "Начать конвертацию", "label-stop": "Остановить", "label-go-back": "Назад", "label-done": "Закрыть", "label-processing": "Обработка...", "label-cancelling": "Отмена...", "label-finished": "Готово!", "label-processed-files": "Обработано", "label-modified-files": "Изменено", "label-total-replacements": "Всего замен" }, "daily-notes": { "name": "Ежедневные заметки", "desc": "Открывает сегодняшнюю ежедневную заметку либо создает ее впервые.", "short-name": "Today", "action-open": "Сегодняшняя заметка", "action-open-previous": "Открыть предыдущую ежедневную заметку", "action-open-next": "Открыть следующую ежедневную заметку", "action-insert-text": "Вставить текст в ежедневную заметку", "action-insert-link": "Вставить ссылку в ежедневную заметку", "msg-fail-format": "Не удалось создать ежедневную заметку. Неверный формат \"{{format}}\".", "msg-fail-folder": "Не удалось создать ежедневную заметку. Папка \"{{folderOption}}\" не найдена.", "msg-fail-template-file": "Не удалось создать ежедневную заметку. Файл шаблона \"{{template}}\" не найден.", "msg-no-previous": "Более ранние ежедневные заметки отсутствуют.", "msg-no-next": "Более поздние ежедневные заметки отсутствуют.", "option-date-format": "Формат даты", "label-refer-to-syntax": "Для более подробной информации о синтаксисе перейдите по ", "label-syntax-link": "ссылке", "label-syntax-live-preview": "Пример: ", "option-new-file-location": "Расположение нового файла", "option-new-file-location-description": "Путь к папке, в которой будет создаваться новая ежедневная заметка.", "option-template": "Расположение шаблона", "option-template-description": "Путь к файлу, который будет использоваться как шаблон.", "option-open-on-start": "Открывать заметку на сегодня", "option-open-on-start-description": "Автоматически открывать сегодняшнюю заметку при открытии хранилища." }, "unique-note-creator": { "name": "Уникальный идентификатор", "desc": "Создание заметок с уникальными идентификаторами в виде временных меток, как в Zettelkasten и других картотеках.", "short-name": "Unique", "action-create-note": "Создать заметку с уникальным идентификатором", "option-new-file-location": "Расположение нового файла", "option-new-file-location-description": "Путь к папке, в которой будет создаваться новая заметка с уникальным идентификатором.", "msg-folder-not-found": "Не удалось создать заметку с уникальным идентификатором. Папка \"{{folderOption}}\" не найдена.", "option-template-file": "Расположение шаблона", "option-template-file-description": "Путь к файлу, который будет использоваться как шаблон.", "option-template-file-placeholder": "Пример: папка/заметка", "option-id-format": "Формат уникального идентификатора", "msg-template-file-not-found": "Не удалось создать заметку с уникальным идентификатором. Файл шаблона \"{{template}}\" не найден.", "msg-failed-to-generate": "Не удалось создать заметку с уникальным идентификатором. Неверный формат \"{{format}}" }, "random-note": { "name": "Случайная заметка", "desc": "Открывает случайную заметку. Может пригодиться для повторного чтения и неожиданных открытий.", "short-name": "Random", "action-open": "Открыть случайную заметку" }, "outline": { "name": "Структура", "desc": "Показывает структуру текущего файла или связанной области.", "action-open": "Открыть структуру", "action-show": "Показать панель структуры", "action-open-for-current": "Открыть панель структуры текущего файла", "tab-title": "Структура {{displayText}}", "label-no-headings": "Не найдено ни одного заголовка." }, "word-count": { "name": "Счетчик слов", "desc": "Показывает количество слов в строке состояния." }, "slides": { "name": "Слайды", "desc": "Приятный сюрприз от Мarkdown. Чтобы разделить слайды, используйте \"---\".", "action-start": "Начать презентацию" }, "audio-recorder": { "name": "Диктофон", "desc": "Записывает аудио и сохраняет его как вложение.", "action-start": "Начать запись аудио", "action-stop": "Остановить запись аудио", "action-toggle": "Начать/остановить запись", "msg-access-denied": "Доступ к микрофону был отклонен. Пожалуйста, разрешите доступ из панели настроек вашей системы.", "msg-pending-grant": "Дайте разрешение на доступ к микрофону, чтобы начать запись.", "msg-no-microphone": "Не удалось обнаружить микрофон." }, "open-with-default-app": { "name": "Открыть в приложении по умолчанию", "desc": "Добавляет возможность открывать текущий файл в приложении по умолчанию.", "action-open-file": "Открыть в приложении по умолчанию", "action-open-file-mobile": "Поделиться", "action-show-in-folder": "Показать содержащую папку", "action-show-in-folder-mac": "Показать в Finder" }, "templates": { "name": "Шаблоны", "desc": "Вставить содержимое шаблона из папки шаблонных файлов.", "action-insert": "Вставить шаблон", "action-insert-current-date": "Вставить текущую дату", "action-insert-current-time": "Вставить текущее время", "option-template-folder-location": "Путь к папке с шаблонами", "option-template-folder-location-description": "Файлы из этой папки будут доступны как шаблоны.", "option-template-date-format": "Формат даты", "option-template-date-format-description": "{{date}} в файле шаблона заменится на это значение.", "option-template-date-format-description2": "Используйте конструкцию {{date:YYYY-MM-DD}}, чтобы задать формат прямо в шаблоне.", "option-template-time-format": "Формат времени", "option-template-time-format-description": "{{time}} в файле шаблона заменится на это значение.", "option-template-time-format-description2": "Используйте конструкцию {{time:HH:mm}}, чтобы задать формат прямо в шаблоне.", "instruction-navigate": "навигация", "instruction-insert": "вставить шаблон", "instruction-dismiss": "отмена", "msg-no-templates-found": "Шаблоны не найдены", "msg-fail-invalid-folder": "Не удалось отобразить шаблоны. Недопустимое имя папки шаблонов.", "msg-fail-folder-not-found": "Не удалось отобразить шаблоны. Папка \"{{folderOption}}\" не найдена.", "prompt-type-template": "Введите имя шаблона..." }, "translucency": { "name": "Полупрозрачное окно", "desc": "Добавляет интерфейсу ощущения глубины, особенно в темном режиме. Не работает под Linux." }, "slash-command": { "name": "Слэш-команды", "desc": "Включить выбор команд в редакторе при наборе косой черты." }, "editor-status": { "name": "Статус редактора", "desc": "Добавить в строку состояния элемент отображающий текущий режим редактора.", "read": "Просмотр", "edit-source": "Просмотр исходного кода", "edit-live-preview": "Динамический просмотр" }, "publish": { "name": "Публикация", "desc": "Публикуйте свои заметки с помощью Obsidian Publish.", "action-publish-changes": "Публикация изменений", "label-no-internet-access": "Для публикации изменений требуется доступ к интернету", "label-publish-service-description": "Obsidian Publish это дополнительный платный сервис для публикации заметок в интернет напрямую из Obsidian.", "label-please-login": "Перед началом публикации войдите в свой аккаунт Obsidian или зарегистрируйте новый.", "label-no-publish-subscription": "Вы не подписаны на сервис Obsidian Publish.", "button-purchase": "Приобрести", "label-manage-sites": "Управление сайтами", "label-no-sites": "У вас нет сайтов.", "button-choose": "Выбрать", "tooltip-edit-site-id": "Изменить ID сайта", "tooltip-delete-site": "Удалить сайт", "label-delete-site-confirmation": "Вы действительно хотите удалить этот сайт?", "label-delete-site-details": "Сайт будет незамедлительно и навсегда удален.", "label-confirm-delete-site": "Подтвердите удаление сайта \"{{site}}\"", "option-site-id": "ID сайта", "option-site-id-description": "Сайт будет доступен по адресу https://publish.obsidian.md/{site id}. Его можно изменить позднее. Допускаются только строчные буквы, цифры и тире.", "option-site-id-placeholder": "Выберите ID сайта", "button-create": "Создать", "msg-invalid-site-id": "В ID сайта допускаются только строчные буквы, цифры и тире.", "msg-site-id-in-use": "Такой ID сайта уже занят, попробуйте другой.", "msg-create-site-issue": "При создании сайта произошла ошибка.", "label-site-options": "Настройки сайта", "option-site-general": "Общие", "option-site-components": "Компоненты", "option-site-appearance": "Оформление", "option-site-reading-experience": "Удобство чтения", "option-site-misc": "Прочие настройки сайта", "option-site-name": "Название", "option-site-name-description": "Название публикуемого сайта. Оно будет отображаться в заголовках страниц.", "option-site-name-placeholder": "Название сайта", "option-home-page-file": "Домашняя страница", "option-home-page-file-description": "Первая страница, которую увидит посетитель опубликованного сайта.", "option-home-page-file-placeholder": "Выберите опубликованный файл", "option-logo": "Логотип", "option-logo-description": "Выберите изображение в качестве логотипа.", "option-logo-placeholder": "Любое загруженное изображение из хранилища...", "option-site-collaboration": "Совместная работа", "option-site-collaboration-desc": "Управление участниками для этого сайта.", "button-manage-collaborators": "Настроить", "option-theme": "Тема", "option-theme-description": "Выберите цветовую тему оформления сайта.", "option-theme-system": "Адаптация к системной теме", "option-show-theme-toggle": "Переключатель Светлая/Темная тема", "option-show-theme-toggle-description": "Позволить посетителю самостоятельно переключать светлую и темную тему.", "option-show-navigation": "Отображение навигации", "option-show-navigation-description": "Отображать в левой части список всех опубликованных страниц.", "option-show-search": "Отображение строки поиска", "option-show-search-description": "Отображать строку поиска над навигацией, чтобы посетители могли искать по содержимому и заголовкам вашего сайта.", "option-show-graph": "Отображение графа", "option-show-graph-description": "Отображать маленький граф на каждой странице.", "option-show-outline": "Отображение оглавления", "option-show-outline-description": "Отображать структуру заголовков на каждой странице.", "option-show-backlinks": "Отображение обратных ссылок", "option-show-backlinks-description": "Отображать раздел с обратными ссылками в конце каждой страницы.", "option-sliding-window-mode": "Использование сдвижных окон", "option-sliding-window-mode-description": "Открывать страницы в новых областях справа. Позволяет передвигаться по областям горизонтально.", "option-hover-preview-file": "Отображение предпросмотра", "option-hover-preview-file-description": "Отображать предпросмотр при наведении курсора на ссылки.", "option-hide-title": "Скрыть заголовок страницы", "option-hide-title-description": "Скрыть заголовок названия страницы. Полезно, если в начале каждой страницы есть собственные заголовки.", "option-readable-line-length": "Ограничить максимальную длину строки", "option-readable-line-length-description": "Повышает удобство чтения длинных абзацев, но уменьшает количество помещающейся на экране информации.", "option-site-password": "Пароли", "option-site-password-description": "Ограничить доступ к сайту с помощью паролей.", "option-google-analytics": "Код слежения Google Analytics", "option-google-analytics-description": "Настроить Google Analytics для сайта. Доступно только для посетителей с вашего личного доменного URL. Предварительно сверьтесь с местными законами и требованиями регулятора.", "button-manage-passwords": "Настроить", "button-save-site-settings": "Сохранить", "msg-updated-options": "Настройки для сайта сохранены.", "button-go-back": "Назад", "label-publishing-to": "Публикация на", "tooltip-switch-site": "Выбрать другой сайт", "button-add-linked": "Добавить связанные", "tooltip-add-linked": "Добавить все файлы, связанные с выделенными объектами", "msg-added-linked-files": "Добавлено связанных файлов: {{count}}.", "msg-added-linked-files_plural": "Добавлено связанных файлов: {{count}}.", "tooltip-open-site-options": "Настройки сайта", "label-no-changes-detected": "Изменения не обнаружены.", "label-changed-files-to-be-published": "Изменен", "label-unchanged-files-already-published": "Без изменений (выделите для удаления)", "label-file-selected": " выделено", "button-select-all-files": "Выделить всe", "button-deselect-all-files": "Снять выделение", "label-new-files-to-be-published": "Новый", "button-publish": "Опубликовать", "msg-no-permission-to-publish-to-site": "У вас недостаточно прав для публикации на выбранный сайт.", "msg-select-at-least-one-file": "Пожалуйста, выделите файл.", "label-upload-changes": "Загрузить изменения", "button-done": "Готово", "button-stop": "Стоп", "label-status-uploading": "Загружается", "label-status-to-publish": "К публикации", "label-status-to-delete": "К удалению", "label-status-published": "Опубликовано", "label-status-deleted": "Удалено", "label-status-failed": "Не удалось", "label-status-cancelled": "Отменено", "button-change": "Изменить", "label-clear-cache": "Изменения отобразятся на сайте в течении нескольких минут. Попробуйте очистить кэш браузера, если изменения не видны.", "label-visit-site": "Ваш сайт доступен по адресу ", "msg-something-went-wrong": "Что-то пошло не так. Подробности в консоли для разработчиков.", "msg-network-error": "Произошла сетевая ошибка. ", "label-manage-passwords": "Управление паролями", "label-add-password": "Добавление пароля", "action-new-password": "Новый пароль", "label-no-password": "Ваш сайт не защищен паролем и виден всем.", "label-have-password": "Ваш сайт защищен паролем. Если вы установили несколько паролей, посетили могут получить доступ к сайту с любым из них.", "option-password-name": "Пароль", "option-password-desc": "Пароль хэшируется и не хранится в виде обычного текста.", "option-password-placeholder": "Ваш пароль", "option-nickname-name": "Псевдоним (опционально)", "option-nickname-desc": "Установите псевдоним, чтобы запомнить, для чего или для кого данный пароль.", "action-add-password": "Сохранить", "label-untitled-password": "Пароль без названия", "label-password-created-time": "Создан {{time}}", "msg-added-new-password": "Новый пароль сохранен.", "option-custom-domain": "Личный домен", "option-custom-domain-desc": "Используйте свой собственный домен вместо https://publish.obsidian.md/{site id}.", "option-noindex": "Запретить индексацию поисковикам", "option-noindex-desc": "Предотвратить индексацию сайта поисковыми машинами.", "button-configure": "Настроить", "label-configure-custom-domain": "Настройки личного домена", "option-custom-url-name": "Личный URL", "option-custom-url-desc": "URL-адрес по которому будет доступен ваш сайт.", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "Перенаправлять на личный домен", "option-custom-url-redirect-desc": "Перенаправлять посетителей publish.obsidian.md/id на ваш личный домен.", "button-update-custom-domain": "Сохранить", "label-custom-domain-instructions": "Больше информации по настройке личного домена доступно в {{link}}.", "label-custom-domain-link-name": "документации Obsidian", "label-site-usage": "Вы используете {{site}} из {{limit}}.", "button-add-more-sites": "Купить еще сайт", "label-no-sites-bought": "Вы не купили ни одного сайта.", "button-get-site": "Приобрести", "label-manage-sharing": "Настроить доступ для \"{{name}}\"", "label-sharing-with-users": "Сейчас общий доступ к этому сайту есть у следующих людей.", "label-not-sharing": "Сейчас ни у кого нет общего доступа к этому сайту.", "label-invite-pending": "Ожидание приглашения", "tooltip-remove-user": "Удалить пользователя", "option-invite-user": "Пригласить пользователя", "placeholder-invite-user": "Ввести адрес электронной почты для отправки приглашения...", "error-email-must-be-valid": "Пожалуйста, введите действующий адрес электронной почты, чтобы пригласить кого-либо.", "msg-enable-publish-plugin": "Пожалуйста, включите плагин Публикация в разделе Настройки -> Встроенные плагины для просмотра сайтов.", "label-your-sites": "Ваши сайты", "label-sites-shared-with-you": "Сайты к которым у вас есть общий доступ", "tooltip-leave-site-sharing": "Прекратить совместную работу на этом сайте", "label-leave-site-confirmation": "Подтвердить прекращение совместной работы на сайте", "label-leave-site-confirmation-details": "Это приведет к удалению этого сайта из списка сайтов, к которым у вас есть общий доступ. Это действие не может быть отменено.", "label-leave-site-confirmation-details-2": "Пожалуйста, свяжитесь с владельцем сайта, если вы хотите снова получить доступ к этому сайту.", "button-leave": "Покинуть", "label-compare-with-live": "Сравнить с публичной версией", "button-use-live-version": "Использовать публичную версию", "label-confirm-override": "Подтвердите перезапись локальной версии", "label-confirm-override-1": "Вы уверены, что хотите перезаписать локальную версию?", "label-confirm-override-2": "Будет использоваться публичная версия, а ваша локальная версия будет удалена. Пожалуйста, сделайте резервные копии, если это необходимо.", "button-proceed": "Продолжить", "message-successfully-used-live-version": "Публичная версия использована для перезаписи вашей локальной версии.", "label-open-file": "Открыть файл", "tooltip-manage-publish-filters": "Настроить фильтры публикации", "option-included-folders": "Включенные папки", "option-included-folders-desc": "Файлы в этих папках будут автоматически выбраны при просмотре изменений перед публикацией.", "option-currently-included-folders": "Папки включенные в данный момент:", "option-excluded-folders": "Исключенные папки", "option-excluded-folders-desc": "Файлы в этих папках не будут отображаться при просмотре изменений перед публикацией. Эта настройка имеет приоритет над включенными папками.", "label-number-of-folders-included": "Obsidian Publish включает {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish исключает {{folders}}.", "label-manage-included-folders": "Настроить включенные папки", "label-manage-excluded-folders": "Настроить исключенные папки", "label-add-included-folder": "Включить папку", "label-add-included-folder-desc": "Вы можете включить как существующие папки, так и папки, которые еще не были созданы.", "tooltip-contact-support": "Связаться со службой поддержки" }, "workspaces": { "name": "Пространства", "desc": "Сохраняйте и загружайте собственные варианты компоновки рабочего пространства.", "action-load-layout": "Загрузить пространство", "action-manage-layouts": "Пространства", "action-save-and-load-layout": "Сохранить и загрузить другое пространство", "placeholder-save-current-layout-as": "Сохранить пространство как...", "button-save": "Сохранить", "button-load": "Загрузить", "tooltip-delete-layout": "Удалить пространство", "msg-delete-layout-success": "Пространство удалено.", "msg-enter-name": "Введите имя нового пространства.", "msg-save-layout-success": "Пространство сохранено.", "label-no-layout-found": "Нет сохраненных пространств.", "placeholder-type-to-search-layouts": "Введите имя пространства..." }, "sync": { "name": "Синхронизация", "desc": "Синхронизируйте файлы с помощью Obsidian Sync.", "action-view-version-history": "Показать историю версий", "label-load-more": "Загрузить еще", "label-show-diff": "Показать отличия", "label-copy-to-clipboard": "Скопировать в буфер обмена", "label-restore-this-version": "Восстановить эту версию", "msg-already-latest-version": "Текущая версия самая последняя.", "msg-restored-version": "Версия от {{time}} восстановлена", "label-file-deleted": "Этот файл был удален", "label-no-earlier-version": "Более ранние версии данного файла отсутствуют.", "label-empty-file": "Пусто", "label-setting-files": "Файлы настроек", "label-deleted-files": "Удаленные файлы", "label-version-history": "Историю версий", "label-click-to-see-history": "Нажмите на удаленный файл, чтобы просмотреть его историю.", "label-create-remote-vault": "Создание хранилища", "msg-please-enter-password": "Пожалуйста, введите пароль.", "msg-vault-name-cannot-be-empty": "Название хранилища не может быть пустым.", "msg-successfully-created-vault": "Хранилище \"{{name}}\" создано.", "label-remote-vault-explanation": "Хранилища в Obsidian Sync безопасно синхронизируют ваши данные между устройствами.", "option-vault-name": "Название", "option-vault-name-desc": "Поможет запомнить предназначение хранилища.", "option-vault-name-placeholder": "Мое хранилище", "option-use-custom-encryption-password": "Включить сквозное шифрование", "option-use-custom-encryption-password-desc": "Если опция выключена, мы берем безопасное хранение ключа шифрования на себя.", "option-use-custom-encryption-password-desc-warning": "Эта настройка не может быть изменена позже.", "option-encryption-password": "Пароль шифрования", "option-encryption-password-desc": "Этот пароль будет будет изменить.", "option-encryption-password-desc-warning": "Если вы забудете пароль, доступ к синхронизированным данным будет утерян навсегда.", "option-encryption-password-desc-2": "Эта настройка никак не влияет на ваши локальные данные.", "option-encryption-password-placeholder": "Ваш пароль", "label-enter-encryption-password": "Введите пароль шифрования", "button-unlock-vault": "Открыть", "msg-verified-password": "Пароль шифрования подтвержден.", "label-remote-vaults": "Хранилища в Obsidian Sync", "label-vault-created-time": "Создано {{time}}", "tooltip-delete-remote-vault": "Удалить", "tooltip-manage-sharing": "Настроить общий доступ", "label-confirm-delete-remote-vault": "Подтвердите удаление хранилища", "label-confirm-delete-remote-vault-question": "Вы уверены, что хотите удалить это хранилище из Obsidian Sync?", "label-confirm-delete-remote-vault-result": "Все данные на нашем сервере, включая историю версий, будут удалены. Ваши локальные файлы останутся нетронутыми.", "label-confirm-delete-remote-vault-warning": "Это действие нельзя отменить.", "msg-remote-vault-deleted": "Хранилище {{name}} удалено из Obsidian Sync.", "button-connect-to-remote-vault": "Подключить", "button-disconnect-from-remote-vault": "Отключить", "label-not-remote-vaults": "У вас нет синхронизированных хранилищ.", "button-create-new-remote-vault": "Новое хранилище", "label-sync-log": "История синхронизации", "options-only-show-errors": "Только ошибки", "options-only-show-errors-desc": "Показать только ошибки, скрыв остальные события.", "button-copy-sync-log": "Скопировать", "msg-successfully-copied-sync-log": "История синхронизации скопирована.", "button-retry": "Повторить", "button-purchase-subscription": "Приобрести", "option-remote-vault": "Внешнее хранилище", "button-choose-remote-vault": "Выбрать", "button-manage-remote-vault": "Настроить", "option-remote-vault-desc-connected": "Установлено соединение с внешним хранилищем \"{{name}}\".", "option-remote-vault-desc-not-connected": "Нет соединения ни с одним внешним хранилищем.", "option-sync-status": "Статус синхронизации", "option-sync-status-desc-paused": "Синхронизация приостановлена.", "option-sync-status-desc-running": "Синхронизация включена.", "option-device-name": "Имя устройства", "option-device-name-desc": "Это имя будет отображаться в журнале синхронизации. Оставьте пустым для использования имени по умолчанию.", "button-resume": "Возобновить", "button-pause": "Приостановить", "option-view-deleted-files": "Удаленные файлы", "option-view-deleted-files-desc": "Просмотр и восстановление удаленных файлов.", "option-sync-log": "История", "option-sync-log-desc": "Просмотр истории синхронизации.", "button-view": "Открыть", "button-bulk-restore": "Массовое восстановление", "button-restore-selected-files": "Восстановить выбранные файлы", "msg-restoring": "Восстановление...", "msg-restoring-complete": "`Восстановление завершено: {{succeeded}} успешно и {{failed}} неудачно.`", "option-over-size": "Размер хранилища превышает лимит", "option-over-size-desc": "Объем хранилища {{size}} из {{limit}}.", "msg-largest-files": "Большие файлы", "msg-largest-files-desc": "Это файлы, занимающие наибольшее количество места. После удаления вложений нажмите Очистить для освобождения места в связанных хранилищах.", "button-purge-remote": "Очистить", "tooltip-purge-remote": "Безвозвратно удалить стёртые вложения из связанных хранилищ для освобождения места.", "msg-purge-complete": "Очистка выполнена.", "option-prevent-sleep": "Предотвращение засыпания устройства", "option-prevent-sleep-desc": "Предотвращает переход устройства в спящий режим, когда еще есть файлы, которые необходимо синхронизировать.", "option-selective-sync": "Выборочная синхронизация", "option-excluded-folders": "Исключения", "option-excluded-folder-desc": "Выберите папки, которые не будут синхронизированы.", "option-currently-excluded-folders": " Текущий список исключений:", "button-manage-excluded-folders": "Настроить", "option-sync-image": "Синхронизировать изображения", "option-sync-image-desc": "Поддерживаемые расширения изображений: {{extensions}}.", "option-sync-audio": "Аудио", "option-sync-audio-desc": "Поддерживаемые расширения аудио: {{extensions}}.", "option-sync-video": "Видео", "option-sync-video-desc": "Поддерживаемые расширения видео: {{extensions}}.", "option-sync-pdf": "PDF", "option-sync-pdf-desc": "Синхронизировать PDF-файлы.", "option-sync-unsupported": "Синхронизировать все остальные типы файлов", "option-sync-unsupported-desc": "Синхронизировать неподдерживаемые типы файлов.", "option-vault-config-sync": "Настройка синхронизации хранилища", "option-view-config-files": "История файлов настроек", "option-view-config-files-desc": "Просмотр и восстановление файлов настроек.", "option-sync-app": "Основные настройки", "option-sync-app-desc": "Включить синхронизацию настроек из разделов Редактор, Файлы и ссылки, Сочетания клавиш и т.д.", "option-sync-appearance": "Настройки оформления", "option-sync-appearance-desc": "Синхронизировать настройки оформления, такие как ночной режим, активная тема и включенные CSS-фрагменты.", "option-sync-appearance-data": "Темы и CSS-фрагменты", "option-sync-appearance-data-desc": "Синхронизировать загруженные темы и CSS-фрагменты. Какие из них будут включены, зависит от предыдущих настроек.", "option-sync-hotkey": "Сочетания клавиш", "option-sync-hotkey-desc": "Синхронизировать пользовательские сочетания клавиш.", "option-sync-core-plugin": "Список встроенных плагинов, активных на данный момент", "option-sync-core-plugin-desc": "Синхронизировать встроенные плагины, которые активны.", "option-sync-core-plugin-data": "Настройки встроенных плагинов", "option-sync-core-plugin-data-desc": "Синхронизировать настройки встроенных плагинов.", "option-sync-community-plugin": "Список сторонних плагинов, активных на данный момент", "option-sync-community-plugin-desc": "Синхронизировать сторонние плагины, которые активны.", "option-sync-community-plugin-data": "Установленные сторонние плагины", "option-sync-community-plugin-data-desc": "Синхронизировать установленные сторонние плагины (.js, .css, и manifest.json файлы) и их настройки.", "label-sync-introduction": "Obsidian Sync — сервис для синхронизации хранилищ с поддержкой сквозного шифрования и версионности.", "label-account-required": "Войдите или создайте аккаунт, чтобы начать пользоваться синхронизацией.", "button-sign-up": "Зарегистрироваться", "button-log-in": "Войти", "label-manage-excluded-folders": "Настройки исключений", "label-number-of-folders-excluded": "{{folders}} не будут синхронизированы.", "label-add-excluded-folder": "Исключить папку", "label-add-excluded-folder-desc": "Вы можете исключить как существующие папки, так и папки, которые еще не были созданы.", "tooltip-remove-excluded-folder": "Удалить из списка исключенных", "label-setup-connection": "Настройки соединения", "label-now-connected-to-vault": "Установлено соединение с хранилищем \"{{name}}\".", "button-start-syncing": "Начать синхронизацию", "label-confirm-merge-vault": "Подтвердить объединение хранилищ", "msg-vault-has-notes": "Ваше локальное хранилище уже содержит некоторые заметки.", "msg-vault-merge-warning": "Если вы подключитесь к облачному хранилищу \"{{name}}\", заметки в вашем локальном хранилище будут объединены с заметками из вашего внешнего хранилища. В случае конфликтов будет сохранена самая последняя версия заметки.", "tooltip-update-setting-on-all-devices": "Пожалуйста, обновите данный параметр и перезапустите приложение на устройствах чтобы изменения вступили в силу.", "label-sharing-with-users": "Сейчас общий доступ к этому внешнему хранилищу есть у следующих людей.", "label-not-sharing": "Сейчас ни у кого нет общего доступа к этому внешнему хранилищу.", "label-vaults-shared-with-you": "Хранилища к которым у вас есть общий доступ", "tooltip-leave-vault-sharing": "Прекратить совместную работу с этим хранилищем", "label-leave-vault-confirmation": "Подтвердить прекращение совместной работы с хранилищем", "label-leave-vault-confirmation-details": "Это приведет к удалению этого хранилища из списка хранилищ, к которым у вас есть общий доступ. Это действие не может быть отменено.", "label-leave-vault-confirmation-details-2": "Пожалуйста, свяжитесь с владельцем хранилища, если вы хотите снова получить доступ к этому хранилищу.", "button-leave": "Покинуть", "label-require-subscription-to-connect": "Вам необходимо иметь подписку Obsidian Sync для подключения к этому хранилищу.", "option-contact-support": "Связаться со службой поддержки", "option-contact-support-desc": "Если у вас возникнут какие-либо проблемы с Obsidian Sync, пожалуйста, свяжитесь с нами, чтобы мы могли вам помочь! Вы можете связаться с нами по адресу support@obsidian.md.", "button-email-support": "Отправить сообщение" }, "file-recovery": { "name": "Восстановление файлов", "desc": "Позволяет восстанавливать недавние снимки файлов после случайной потери данных. Снимки делаются только для Markdown-файлов.", "action-open": "Открыть сохраненные снимки", "option-interval": "Интервал создания снимков", "option-interval-description": "Минимальный интервал между созданием снимков в минутах.", "option-keep": "История хранения снимков", "option-keep-description": "Длительность хранения снимков в днях.", "option-open-history": "Снимки", "option-open-history-description": "Просмотр и восстановление снимков.", "button-view-snapshots": "Обзор", "option-clear": "Очистка истории снимков", "option-clear-description": "Стирание всех снимков.", "button-clear-history": "Очистить", "label-clear-warning": "Вы уверены что хотите удалить все снимки? Обратите внимание, что будут удалены только снимки. Файлы в вашем хранилище не будут затронуты.", "msg-clear-complete": "Снимки удалены.", "label-no-history-found": "Снимки не найдены.", "placeholder-choose-file": "Выберите файл...", "label-select-file": "Пожалуйста выберите файл снимка слева для просмотра его содержимого." }, "note-composer": { "name": "Компоновщик заметок", "desc": "Объединяет, извлекает или преобразовывает заметки.", "option-confirm-file-merge": "Подтверждать объединение файлов", "option-confirm-file-merge-description": "Отображать окно с подтверждением объединения файлов.", "option-split-replacement-text": "Текст после извлечения", "option-split-replacement-text-description": "Что оставить на месте выделенного текста после его извлечения.", "option-choice-split-replacement-text-link": "Ссылка на новый файл", "option-choice-split-replacement-text-embed": "Вложение нового файла", "option-choice-split-replacement-text-none": "Ничего не оставлять", "option-template-file": "Расположение шаблона", "option-template-file-description": "Шаблон, используемый при объединении или извлечении. Доступные переменные: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}. Например, {{date:YYYY-MM-DD}}.", "command-merge-file": "Объединить текущий файл с другим файлом...", "action-merge-file": "Объединить весь файл с...", "label-no-files": "Файлы не найдены.", "instruction-navigate": "навигация", "instruction-merge": "объединить", "instruction-create-new": "создать новый", "instruction-merge-at-top": "поместить в начало", "instruction-dismiss": "отмена", "prompt-select-file-to-merge": "Выберите файл для объединения...", "label-merge-file": "Объединение файла", "label-confirm-file-merge": "Вы уверены что хотите объединить \"{{file}}\" с \"{{destination}}\"? Файл \"{{file}}\" будет удален.", "button-merge": "Объединить", "button-merge-do-not-ask-again": "Объединить и больше не спрашивать", "command-split-file": "Извлечь текущее выделение...", "command-extract-heading": "Извлечь этот заголовок...", "instruction-append": "поместить в конец", "instruction-prepend": "поместить в начало", "msg-fail-to-fetch-template": "Не удалось вызвать шаблон: \"{{template}}\" не найден.", "msg-fail-to-find-heading": "Не удалось найти заголовок" }, "canvas": { "name": "Холст", "desc": "Упорядочивайте и соединяйте заметки на бесконечном холсте.", "action-add-note": "Добавить заметку из хранилища", "action-add-media": "Добавить медиафайл из хранилища", "action-add-card": "Добавить карточку", "action-add-website": "Добавить веб-страницу", "action-create-group": "Создать группу", "action-create-with-size": "Создать карточку с определенным размером", "action-convert-to-file": "Конвертировать в заметку...", "action-drag-to-add-note": "Перетащить, чтобы добавить заметку из хранилища", "action-drag-to-add-media": "Перетащить, чтобы добавить медиафайл из хранилища", "action-drag-to-add-card": "Перетащить, чтобы добавить карточку", "action-enable-grid-snapping": "Включить привязку к сетке", "action-disable-grid-snapping": "Отключить привязку к сетке", "action-edit-label": "Редактировать подпись", "action-remove-label": "Убрать подпись", "action-search-file": "Поиск файла", "action-set-color": "Задать цвет", "action-align": "Выровнять", "action-align-left": "Выровнять по левому краю", "action-align-center": "Выровнять по центру", "action-align-right": "Выровнять по правому краю", "action-align-top": "Выровнять по верхнему краю", "action-align-middle": "Выровнять по середине", "action-align-bottom": "Выровнять по нижнему краю", "action-distribute-horizontal-spacing": "Выровнять интервалы по горизонтали", "action-distribute-vertical-spacing": "Выровнять интервалы по вертикали", "action-justify-horizontally": "Растянуть по горизонтали", "action-justify-vertically": "Растянуть по вертикали", "action-stack-horizontally": "Распределить по горизонтали", "action-stack-vertically": "Распределить по вертикали", "action-stack-grid": "Распределить по сетке", "action-export-png": "Экспорт в изображение", "label-export-png-desc": "Экспорт \"{{title}}\" в PNG-файл со следующими параметрами:", "label-export-png-dimensions": "Расчетные размеры изображения: {{dimensions}}", "option-export-png-show-logo": "Отображать лого", "option-export-png-show-logo-desc": "Добавить логотип Obsidian в левый нижний угол.", "option-export-png-zoom": "Масштабирование", "option-export-png-zoom-desc": "При большем увеличении будет создано изображение с более высоким разрешением.", "option-export-png-frame": "Область просмотра", "option-export-png-frame-desc": "Выберите для вывода весь холст или только видимую область просмотра.", "option-export-png-frame-full": "Весь холст", "option-export-png-frame-viewport": "Область просмотра", "action-remove": "Убрать", "action-narrow": "Сузить до секции...", "action-swap-file": "Заменить файл...", "action-change-url": "Изменить ссылку...", "action-zoom-to-fit": "Масштабировать все", "action-zoom-to-selection": "Масштабировать выделенное", "action-reload-page": "Перезагрузить страницу", "action-go-to-target": "Перейти к целевому", "action-go-to-source": "Перейти к исходному", "command-create-new-canvas": "Создать новый холст", "command-new-canvas": "Новый холст", "instruction-narrow": "Выбрать", "prompt-to-narrow": "Ввести имя заголовка", "label-enter-url": "Ввести ссылку", "label-empty-embed": "\"{{linktext}}\" не может быть найдена.", "prompt-add-text": "Добавить текст...", "prompt-start-search": "Введите поисковый запрос...", "label-canvas-help": "Справка", "label-no-heading": "Без заголовка", "label-pan": "Позиционировать по вертикали", "label-pan-horizontal": "Позиционировать по горизонтали", "label-zoom": "Масштабировать", "label-select-all": "Выбрать все", "label-add-remove-selection": "Добавить/снять выделение", "label-clone-card": "Скопировать карточку", "label-constrain-movement-axis": "Перемещать по направлениям", "label-disable-drag-snapping": "Отключить привязку при перетаскивании", "label-remove-card": "Убрать карточку", "label-drag-from-below": "Перетащите снизу или дважды щелкните", "label-space-drag-pan": "Пробел + перетаскивание для позиционирования", "label-scroll-to-zoom": "Прокрутка для масштабирования", "label-untitled-group": "Группа без названия" } }, "nouns": { "word-with-count": "Слов: {{count}}", "word-with-count_plural": "Слов: {{count}}", "character-with-count": "Символов: {{count}}", "character-with-count_plural": "Символов: {{count}}", "link-with-count": "{{count}} ссылка", "link-with-count_plural": "{{count}} ссылок", "file-with-count": "{{count}} файл", "file-with-count_plural": "{{count}} файлов", "folder-with-count": "{{count}} папка", "folder-with-count_plural": "{{count}} папки", "backlink-with-count": "Обратных ссылок: {{count}}", "backlink-with-count_plural": "Обратных ссылок: {{count}}", "site-with-count": "сайтов: {{count}}", "site-with-count_plural": "сайтов: {{count}}", "plugin-with-count": "плагинов: {{count}}", "plugin-with-count_plural": "плагинов: {{count}}", "theme-with-count": "тем: {{count}}", "theme-with-count_plural": "тем: {{count}}" } }{ "setting": { "options": "Inställningar", "plugin": "Plugin", "builtin-plugins": "Kärnplugin", "plugin-options": "Plugin inställningar", "folder-path-example-placeholder": "Exempel: mapp 1/mapp 2", "file-path-example-placeholder": "Exempel: mapp/anteckning", "msg-restart-required": "Om du ändrar inställningen måste du starta om", "editor": { "name": "Ändrare", "section-general": "Allmänt", "section-behavior": "Beteende", "section-display": "Skärm", "option-spellcheck": "Stavningskontroll", "option-spellcheck-description": "Sätter på stavningskontrollen. Funkar bara med amerikansk engelska.", "spellcheck-languages": "Stavningskontrollsspråk", "spellcheck-languages-description": "Välj språk för att använda med stavningskontroll.", "spellcheck-languages-mac-description": "Stavningskontrollen som redan finns kommer automatiskt märka vilket språk som används av macOS.", "spellcheck-dict": "Stavningskontrollsordbok", "spellcheck-dict-empty": "Stavningskontrollsordboken är tom.", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "Läsbar radlängd", "option-readable-line-description": "Begränsa radlängd. Mindre får plats på skärmen, men långa stycken blir mer läsbara.", "option-strict-line-break": "Stränga radbyten", "option-strict-line-break-description": "Ignorerar enstaka radbyten som i Markdown specifikationerna. Stäng av för att visa enstaka radbyten i läsläget.", "option-show-frontmatter": "Visa inledning", "option-show-frontmatter-description": "Visa inledning i läsläget som ett stycke av kod. Stäng av för att inte visa inledning.", "option-auto-pair-brackets": "Para ihop paranteser automatiskt", "option-auto-pair-brackets-description": "Para ihop paranteser och citattecken automatiskt.", "option-auto-pair-markdown": "Para ihop Markdown syntax", "option-auto-pair-markdown-description": "Para ihop Markdownsyboler (t.ex. fet stil, kursiv stil och sånt)", "option-smart-indent-lists": "Flytta fram listpunkter på ett smart sätt", "option-smart-indent-lists-description": "Ta hand om förskjutningar och listmarkörer åt dig.", "option-fold-heading": "Vik in rubrik", "option-fold-heading-description": "Låter dig vika in allting under en rubrik.", "option-fold-indent": "Vik in förskjuningar", "option-fold-indent-description": "Låter dig vika in en del av samma förflyttning (t.ex en lista).", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Editing view", "option-default-new-tab-view-reading": "Reading view", "option-default-editing-mode": "Normala skrivläget", "option-default-editing-mode-description": "Normala läget som en ny panel börjar med.", "option-default-editing-mode-source": "Käll läge", "option-default-editing-mode-live-preview": "Förhandstitt", "option-show-line-number": "Visa radnummer", "option-show-line-number-description": "Visa radnummer i marginalen.", "option-indentation-guide": "Visa förskjutningsmarkörer", "option-indentation-guide-description": "Visa vertikala linjer mellan punkter som markörer ", "option-use-tabs": "Använd tabbar", "option-use-tabs-description": "Använd tabbar för att förskjuta text när man trycker på \"Tab\" tangenten. Stäng av för att använda mellanslag.", "option-tab-size": "Tabbstorlek", "option-tab-size-description": "Antal mellanslag som en tabb motsvarar.", "option-rtl": "Skriv högerifrån (RTL)", "option-rtl-description": "Gör så att texten går från höger till vänster.", "option-auto-convert-html": "Konvertera HTML automatiskt", "option-auto-convert-html-description": "Konverterar HTML till Markdown när man kopierar in från hemsidor. Använd Ctrl/Cmd+Shift+V för att klista in utan någon konvertering.", "option-vim-key-bindings": "Vim tangentbindningar", "option-vim-key-bindings-description": "Gör så att du använder vim tangentbindningar i källskrivläget.", "option-vim-key-bindings-mobile": "På mobila enheter synkroniseras denna inställningen inte genom konfigurationsfilen utan sparas bara lokalt på enheten.", "option-emacsy-keys": "Gammla Emacs tangentbiningar för macOS", "option-emacsy-keys-description": "Låter dig använda Emacs kontroller för att navigera på sidan, vilket är normalt på macOS, men kan störa andra kommandon.", "label-confirm-enable-vim": "Bekräfta att du går in i Vim läget", "label-vim-warning": "Vim läget är för snabbare textskrivning men om du inte känner till Vim så bra kan denna inställningen göra så att det verkar som att Obsidian har slutat fungera.", "label-vim-test": "För att bevisa att du känner till Vim, skriv in Vim kommandot för att avsluta utan att spara:", "label-vim-your-answer": "Ditt svar", "placeholder-enter-command": "Skriv in kommandot...", "button-confirm-enable-vim": "Låt mig sätta på Vim", "msg-vim-mode-enabled": "Rätt komando. Du är nu i Vim läget.", "msg-vim-mode-not-enabled": "Fel kommando. Vimläget har inte aktiverats.", "msg-vim-mode-please-enter-command": "Skriv in kommandot för att sätta på vim läget", "option-legacy-editor": "Använd gammla ändraren", "option-legacy-editor-description2": "Den gammla ändraren kommer att tas bort snart. Den utvecklas inte och buggar kommer inte att fixas.", "label-legacy-deprecation": "Nya ändraren har kommit hit", "label-legacy-deprecation-1": "Obsidian har en helt ny ändrare som är mer tålig och mer tillgänglig.", "label-legacy-deprecation-2": "Det verkar som att du fortfarande använder den gammla ändraren, och vi tror att du kommer gilla den nya ändraren mer.", "label-legacy-deprecation-choice": "Vilket läga vill du använda?", "label-live-preview-description": "En mer modern, du-får-vad-du-ser upplevelse.", "label-source-mode-description": "Titta på rå, oändrad Markdown fast med syntaxbelysning.", "button-start-new-editor": "Starta nya ändraren" }, "file": { "name": "Filer och länkar", "option-confirm-file-deletion": "Bekrefta borttagning av fil", "option-confirm-file-deletion-description": "Du måste bekräfta att du vill ta bort en fil innan den tas bort.", "option-delete-destination": "Borttagna filer", "option-delete-destination-description": "Vad händer med filer efter att de tas bort.", "option-choice-system-trash": "Flytta till operativsystemets papperskorg", "option-choice-vault-trash": "Flytta till Obsidian papperskorgen (.trash mappen)", "option-choice-permanent-delete": "Ta bort permanent", "option-always-update-links": "Uppdattera interna länkar", "option-always-update-links-description": "Om länkar ska uppdateras efter att man byter namn på en fil.", "option-new-note-location": "Stället där nya anteckningar hamnar", "option-new-note-location-description": "Var nya anteckningar hamnar. Plugin kan sätta sig över det här.", "option-choice-vault-root": "Valvbas", "option-choice-current-folder": "Samma mapp som filen ligger i", "option-choice-specified-folder": "I mappen som visas nedan", "option-new-file-folder-path": "Mapp för att skapa nya anteckningar inuti", "option-new-file-folder-path-description": "Nya filer kommer hamna under den här mappen. Plugin kan sätta sig över det här.", "option-use-wiki-links": "Använd [[Wikilänkar]]", "option-use-wiki-links-description": "Autogenerera Wikilänkar för [[länkar]] och ![[bilder]] istället för Markdown länkar och bilder. Stäng av inställningen för att generera Markdown länkar istället.", "option-show-unsupported-files": "Titta på alla filändelser", "option-show-unsupported-files-description": "Visa filer med alla filändelser även om Obsidian inte kan öppna dem. Detta gör så att du kan länka till dem i anteckningar.", "option-link-autocompleted-format": "Nytt länkformat", "option-link-autocompleted-format-description": "Vilka länkar ska sättas in när man automatiskt genererar interna länkar.", "option-choice-shortest-linktext": "Kortaste vägen när det går", "option-choice-relative-path": "Relativa filvägar", "option-choice-absolute-path": "Absoluta filvägar", "option-new-attachment-location": "Stället där nya bilagor hamnar.", "option-new-attachment-location-description": "Där nya bilagor hamnar.", "option-choice-subdirectory": "I undermappen under nuvarande mappen", "option-attachment-folder-path": "Bilagans mapps filväg", "option-attachment-folder-path-description": "Nya bilagor kommer hamna här. Med detta inkluderas bilder som man har dragit in och ljudinspelningar.", "option-attachment-subfolder-path": "Undermappens namn", "option-attachment-subfolder-path-description": "Om en fil är under /valv/mapp\", och du lägger in bilagor kommer bilagorna saparas i \"valv/mapp/bilagor\".", "option-attachment-subfolder-path-placeholder": "bilagor", "option-excluded-files": "Exkluderade filer", "option-excluded-files-desc": "Exkluderade filer kommer att gömmas eller vara mindre synliga, t.ex. snabbnavigatorn och länkförslag.", "label-no-excluded-filters-applied": "Inga exkluderade fileter används just nu. Lägg till ett nedan.", "label-excluded-filters-applied": "Filter som matchar följande filter är exkluderade:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Mata in väg eller \"/regex/\"..." }, "appearance": { "name": "Utseende", "option-base-theme": "Bastema", "option-base-theme-description": "Använd Obsidians normala färger", "option-accent-color": "Accent color", "option-accent-color-description": "Choose the accent color used throughout the app.", "dark-theme": "Mörk", "light-theme": "Ljus", "system-theme": "Anpassa efter operativsystem", "option-font": "Typsnitt", "option-advanced": "Advanced", "option-interface-font": "Typsnitt för det man använder", "option-interface-font-description": "Använd samma bastypsnitt för hela Obsidian.", "option-text-font": "Texttypsnitt", "option-text-font-description": "Välj typsnitt för skrivläget och läsläget.", "option-monospace-font": "Typsnitt där alla bokstäver är lika breda", "option-monospace-font-description": "Välj typsnitt för kodblock och inledning.", "label-single-font-currently-in-effect": " Nuvarande typsnitt:", "label-multiple-fonts-currently-in-effect": " Följande typsnitt används nu:", "option-font-placeholder": "Skriv in namnet av ett typsnitt...", "label-no-custom-font-set": "Inget speciellt typsnitt används. Lägg till ett nedan.", "label-font-applied": "Första typsnittet som finns på listan och är installerat kommer att användas.", "msg-font-not-found": "Typsnittet är inte installerat eller hittas inte på ditt operativsystem.", "msg-font-found": "Typsnittet hittades.", "label-font-name": "Namnet av typsnittet", "option-community-themes": "Fria teman av andra personer", "option-community-themes-description": "Prova fantastiska teman av andra personer.", "button-browse-community-themes": "Bläddra", "option-font-size": "Typsnittsstorlek", "option-font-size-description": "Typsnittsstorlek i pixlar som påverkar skrivläget och läsläget.", "option-font-size-action": "Snabb typsnittsstorleksändring", "option-font-size-action-description": "Adjust the font size using Ctrl + Scroll, or using the trackpad pinch-zoom gesture.", "option-themes": "Themes", "option-manage-themes-description": "Manage installed themes and browse community themes.", "option-theme-button-manage": "Manage", "option-choice-none": "None", "option-native-menus": "Native menus", "option-native-menus-desc": "Menus throughout the app will match the operating system. They will not be affected by your theme.", "button-reload-themes": "Reload themes", "msg-reloaded-themes": "Reloaded custom CSS themes.", "button-open-themes-folder": "Open themes folder", "option-css-snippets": "CSS snippets", "label-no-css-snippets-found": "No CSS snippets found in the snippets folder.", "no-snippet-description": "CSS Snippets are stored in \"{{path}}\".", "button-reload-snippets": "Reload snippets", "button-open-snippets-folder": "Open snippets folder", "msg-reloaded-snippets": "Reloaded CSS snippets.", "option-toggle-snippet-description": "Apply CSS snippet at \"{{path}}\".", "label-installed-themes": "Installerade teman", "label-screenshot-unavailable": "Screenshot unavailable", "label-default-theme": "Default", "tooltip-click-to-enlarge": "Click to enlarge", "button-update": "Update", "label-currently-selected": "Selected", "option-frame-style": "Window frame style", "option-frame-description": "Determines the styling of the title bar of Obsidian windows. Requires a full restart to take effect.", "option-frame-hidden": "Hidden (default)", "option-frame-obsidian": "Obsidian frame", "option-frame-native": "Native frame", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Show tab title bar", "option-show-view-header-desc": "Display the header at the top of every tab.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "button-check-for-updates": "Check for updates", "button-view-updates": "View updates", "button-update-all-themes": "Update all", "label-current-themes": "Current community themes", "label-currently-installed": "You currently have {{count}} theme installed.", "label-currently-installed_plural": "You currently have {{count}} themes installed." }, "hotkeys": { "name": "Hotkeys", "prompt-filter": "Filter...", "tooltip-delete-hotkey": "Delete hotkey", "label-waiting-for-hotkey-press": "Press hotkey...", "tooltip-restore-default": "Restore default", "tooltip-customize-command": "Customize this command", "tooltip-hotkey-single-conflict": "This hotkey conflicts with \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "This hotkey conflicts with {{count}} other commands", "label-blank-hotkey": "Blank" }, "about": { "name": "About", "label-commercial-license": "Commercial license", "label-license-key": "License key", "license-key-placeholder": "Your license key...", "label-activate-license": "Activate license", "button-activate": "Activate", "label-unknown-version": "Unknown", "label-current-version": "Current version: ", "label-install-version": "(Installer version: {{version}})", "label-up-to-date": "Your app is up to date!", "label-read-changelog": "Read the changelog.", "label-manual-update-required": "To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.", "label-download": "Download", "label-new-version-ready": "A new version is ready to be installed. ", "label-relaunch-to-update": "Relaunch the app to update.", "label-disabled-updates": "Updates are disabled.", "label-checking-for-updates": "Checking for updates...", "button-relaunch": "Relaunch", "button-check-for-updates": "Check for updates", "option-auto-update": "Automatic updates", "option-auto-update-description": "Turn this off to prevent the app from checking for updates.", "option-get-help": "Get help", "option-get-help-description": "Get help on using Obsidian.", "button-open": "Open", "option-language": "Language", "option-language-description": "Change the display language.", "option-insider-build": "Receive insider builds", "option-insider-build-description": "Auto-update to insider builds to try out new features. Note that these builds are bleeding edge and might be less stable.", "option-advanced": "Advanced", "option-hw-acceleration": "Hardware Acceleration", "option-hw-acceleration-description": "Turns on Hardware Acceleration, which uses your GPU to make Obsidian smoother.", "option-hw-acceleration-warning": "If you turn this off, app performance will be severely degraded.", "option-config-location": "Override config folder", "option-config-location-description": "Use a different config folder than the default one. Must start with a dot.", "option-config-location-warning": "Config location must be a valid folder name that starts with a dot.", "label-license": "License", "label-your-commercial-license-key": "Your commercial license key is \"{{key}}\".", "label-commercial-license-info": "Registered to \"{{company}}\" for {{seats}} users. Valid until {{expiry}}.", "label-validating-commercial-license": "Validating...", "label-invalid-commercial-license": "License invalid: ", "button-remove-commercial-license": "Remove", "option-catalyst": "Catalyst license", "option-catalyst-desc": "You currently have the {{tier}} Catalyst license. Thanks for your support!", "option-catalyst-desc-no-license": "You don't have a Catalyst license right now. Catalyst license is a one-time donation to support Obsidian development.", "label-app": "App" }, "account": { "name": "Account", "option-your-account": "Your account", "option-your-account-desc": "You're currently signed in {{name}} ({{email}}).", "option-your-account-desc-no-login": "You're not logged in right now. An account is only needed for Obsidian Sync, Obsidian Publish, and Catalyst insider builds.", "button-manage-settings": "Manage settings", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Commercial license", "option-commercial-license-desc": "If you use Obsidian for commercial purpose, you may need to get a commercial license.", "button-purchase": "Purchase", "button-log-out": "Log out", "label-log-in": "Log in", "label-sign-up": "Sign up", "label-email": "Email", "placeholder-email": "Your email...", "label-password": "Password", "placeholder-password": "Your password...", "button-login": "Login", "message-empty-email": "Email cannot be empty.", "message-invalid-email": "Email is not valid.", "message-empty-password": "Password cannot be empty.", "message-login-failed": "Login failed, please double check your email and password.", "label-no-account": "Don't have an account? ", "link-sign-up-now": "Sign up now" }, "core-plugin": { "plugin-list": "Plugin list", "option-search-plugin": "Search core plugins", "option-search-plugin-description": "Filter plugins by name or description.", "placeholder-search-plugin": "Search plugins..." }, "third-party-plugin": { "name": "Third-party plugin", "option-restricted-mode": "Restricted mode", "option-restricted-mode-description": "Restricted Mode is off. Turn on to disable community plugins.", "button-turn-on": "Turn on", "option-browse-community-plugins": "Community plugins", "option-browse-community-plugins-description": "Browse and install third-party plugins made by our amazing community.", "button-browse": "Browse", "label-exit-restricted-mode": "Exit Restricted Mode", "label-exit-restricted-mode-description-1": "Community plugins, like any other software you install, could potentially cause data integrity and security issues.", "label-exit-restricted-mode-description-2": "Plugin security is important to us. Here's what we do:", "label-exit-restricted-mode-description-3": "Despite our efforts, there is still a small chance that a community plugin might misbehave.", "label-code-review": "Initial code review", "label-code-review-desc": "Plugins undergo an initial code review by our team before they appear in the store.", "label-open-source": "Open source", "label-open-source-desc": "Most plugins are open source on GitHub, so you can inspect the code yourself.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We have a large community of developers who watch out for each other.", "label-report-mechanism": "Report mechanism", "label-report-mechanism-desc": "We follow up and remove faulty plugins upon user report.", "label-exit-restricted-mode-disable-confirmation": "Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.", "label-learn-more": "Learn more about plugin security", "button-turn-on-community-plugins": "Turn on community plugins", "label-trust-author": "Do you trust the author of this vault?", "label-trust-author-description-1": "You're opening this vault for the first time, and it comes with some plugins.", "label-trust-author-description-2": "If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.", "label-trust-author-description-3": "If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.", "button-enable-plugins": "Trust author and enable plugins", "button-dont-trust-author": "Browse vault in Restricted Mode", "placeholder-community-plugins": "Search community plugins...", "msg-failed-load-plugins": "Failed to load community plugins.", "label-installed": "Installed", "button-install": "Install", "button-enable": "Enable", "button-disable": "Disable", "button-copy-share-link": "Copy share link", "button-donate": "Donate", "label-no-results-found": "No results found.", "msg-failed-to-load-manifest": "Failed to load plugin manifest.", "label-version": "Version: {{version}}", "label-currently-installed-version": " (currently installed: {{version}})", "label-by-author": "By ", "label-repository": "Repository: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "This plugin does not support your device.", "button-update": "Update", "label-no-readme": "This plugin did not provide a README file.", "msg-installing-plugin": "Installing plugin \"{{name}}\"...", "msg-failed-to-install-plugin": "Failed to install plugin \"{{name}}\".", "msg-successfully-installed-plugin": "Successfully installed plugin \"{{name}}\".", "label-installed-plugins": "Installed plugins", "button-reload-plugins": "Reload plugins", "msg-reloaded-third-party-plugins": "Reloaded third-party plugins.", "label-uninstall": "Uninstall", "label-uninstall-plugin": "Uninstall plugin", "label-uninstall-plugin-confirmation": "Are you sure you want to uninstall this plugin? This will delete the folder of the plugin.", "button-open-plugins-folder": "Open plugins folder", "button-check-for-updates": "Check for updates", "button-update-all-plugins": "Update all", "label-current-plugins": "Current plugins", "label-currently-installed": "You currently have {{count}} plugin installed.", "label-currently-installed_plural": "You currently have {{count}} plugins installed.", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Show a message with how long each plugin took to initialize when starting the app.", "msg-no-updates-found": "No plugin updates found.", "msg-updates-found": "Found {{count}} plugin to update.", "msg-updates-found_plural": "Found {{count}} plugins to update.", "msg-update-plugin": "Update to version {{version}}", "option-search-installed-plugin": "Search installed plugins", "option-search-installed-plugin-description": "Filter installed plugins by name or description.", "placeholder-search-installed-plugin": "Search installed plugins...", "show-installed-only": "Show installed only", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "Showing {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Mobile toolbar", "option-configure-quick-action": "Configure mobile Quick Action", "option-configure-quick-action-description": "Configure which command to trigger when pull down from the top. The current command is set to \"{{command}}\".", "button-configure": "Configure", "placeholder-select-quick-action": "Select Quick Action...", "manage-toolbar-options": "Manage toolbar options", "option-internal-link": "Add internal link", "option-internal-embed": "Add embed", "option-tag": "Add tag", "option-heading": "Toggle heading", "option-strikethrough": "Toggle strikethrough", "option-highlight": "Toggle highlight", "option-code": "Toggle code", "option-blockquote": "Toggle blockquote", "option-markdown-link": "Add Markdown link", "option-bullet-list": "Toggle bullet list", "option-numbered-list": "Toggle numbered list", "option-indent-list": "Indent list item", "option-unindent-list": "Unindent list item", "option-undo": "Undo", "option-redo": "Redo", "option-move-caret-up": "Move caret up", "option-move-caret-down": "Move caret down", "option-move-caret-left": "Move caret left", "option-move-caret-right": "Move caret right", "option-first-line": "Go to first line", "option-last-line": "Go to last line", "option-toggle-keyboard": "Toggle keyboard", "option-configure-toolbar": "Configure mobile toolbar", "option-added-options": "Added options", "option-more-toolbar-options": "More toolbar options", "option-attach": "Insert attachment", "option-add-command": "Add global command", "option-add-command-description": "Select any global command to add to the toolbar." } }, "editor": { "search": { "placeholder-find": "Find", "placeholder-replace": "Replace", "label-previous": "Prev", "label-next": "Next", "label-all": "All", "label-exit-search": "Exit search", "label-replace": "Replace", "label-replace-all": "Replace all" }, "link-suggestion": { "label-type-hash": "Type #", "label-link-heading": "to link heading", "label-type-block": "Type ^", "label-link-block": "to link blocks", "label-type-pipe": "Type |", "label-change-display-text": "to change display text", "label-no-match-found": "No match found" }, "spellcheck": { "no-suggestion": "No suggestions...", "add-to-dictionary": "Add to dictionary" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "No heading", "label-heading-level": "Heading {{level}}" }, "print-modal": { "title": "Export to PDF", "caption": "Export \"{{filename}}\" to PDF with the setting below.", "setting-page-size": "Page size", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Include file name as title", "setting-landscape": "Landscape", "setting-margin": "Margin", "setting-margin-default": "Default", "setting-margin-minimal": "Minimal", "setting-margin-none": "None", "setting-downscale-percent": "Downscale percent", "button-export-to-pdf": "Export to PDF" }, "link-popover": { "tooltip-follow-link": "Follow link", "tooltip-open-link": "Open link", "tooltip-search-tag": "Search tag" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Open in default app", "empty-sidebar": "The sidebar is empty, try dragging a pane here.", "sidebar-expand": "Expand", "sidebar-collapse": "Collapse", "msg-fail-to-save-file": "Failed to save file \"{{filepath}}\". {{message}}.", "no-file": "No file", "msg-file-changed": "\"{{file}}\" has been modified externally, merging changes automatically.", "switch-vault": "Open another vault", "help": "Help", "settings": "Settings", "drag-to-rearrange": "Drag to rearrange", "msg-switched-to-read": "Switched default view mode to reading view.", "msg-switched-to-edit": "Switched default view mode to editor.", "msg-upgrade-installer": "To use this feature, please re-install with latest installer available from our website.", "tooltip-restore-default-settings": "Restore default settings", "label-copy": "Copy to clipboard", "copied_generic": "Copied to your clipboard", "copied": "{{item}} copied to your clipboard", "url": "Url", "msg-open-file-through-uri": "Opened file \"{{path}}\"", "msg-file-not-found-through-uri": "File \"{{name}}\" not found.", "delete-action-short-name": "Delete", "msg-indexing": "Obsidian is indexing your vault...\nThis should only happen once.\nSome functionality may not be available until this is complete.", "msg-indexing-complete": "Indexing complete.", "msg-sandbox-vault": "This is a sandbox vault.\nChanges you make in this vault will be lost.", "label-enter-to-create": "Enter to create", "label-update-available": "Update Available", "label-debug-info": "Debug info", "button-learn-more": "Learn more", "button-not-now": "Not now", "button-add": "Add", "button-manage": "Manage", "label-new-tab": "New tab", "msg-tab-busy": "This tab is currently busy, please try again later", "empty-state": { "no-file-open": "No file is open", "create-new-file": "Create new file", "go-to-file": "Go to file", "see-recent-files": "See recent files", "close": "Close", "unknown-pane-title": "Plugin no longer active", "unknown-pane-desc": "The plugin that created this pane ({{type}}) has gone away" }, "menu": { "edit-view": "Edit (Ctrl/Cmd+Click to edit in new pane)", "read-view": "Current view: reading", "switch-to-edit-view": "Click to edit", "switch-to-read-view": "Click to read", "mod-click-open-new-tab": "{{key}}+Click to open in new tab", "find": "Find...", "replace": "Replace...", "edit": "Edit", "preview": "Preview", "more-options": "More options", "close": "Close", "close-others": "Close others", "close-right": "Close tabs to the right", "pin": "Pin", "unpin": "Unpin", "unlink-tab": "Unlink tab", "link-tab": "Link with tab...", "toggle-source-mode": "Source mode", "toggle-reading-view": "Reading view", "delete-file": "Delete file", "create-file": "Create this file", "open-link": "Open link", "open-in-new-tab": "Open in new tab", "open-to-the-right": "Open to the right", "copy-url": "Copy url", "close-current-tab": "Close current tab", "copy": "Copy", "cut": "Cut", "paste": "Paste", "paste-as-plain-text": "Paste as plain text", "select-all": "Select all", "rename-heading": "Rename this heading...", "rename-blockid": "Rename this block ID...", "open-in-new-window": "Open in new window", "move-to-new-window": "Move to new window", "open-in-browser": "Open in browser", "stack-tabs": "Stack tabs", "unstack-tabs": "Unstack tabs" }, "tooltip": { "click-to-expand": "Click to expand", "click-to-collapse": "Click to collapse", "alias": "Alias", "not-created-yet": "Not created yet, select to create" }, "start-screen": { "label-version": "Version", "option-open-folder-as-vault": "Open folder as vault", "option-open-folder-as-vault-description": "Choose an existing folder of Markdown files.", "option-create-vault": "Create new vault", "option-create-vault-description": "Create a new Obsidian vault under a folder.", "option-connect-obsidian-sync": "Connect to Obsidian Sync", "option-connect-obsidian-sync-description": "Set up a synced vault with existing remote vault.", "option-new-vault-name": "Vault name", "option-new-vault-name-description": "Pick a name for your awesome vault.", "option-new-vault-location": "Location", "option-new-vault-location-description": "Pick a place to put your new vault.", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Reveal vault in system explorer", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "Rename vault...", "msg-error-rename-exists": "There is already a vault with this name.", "msg-error-nested": "Cannot move vault into a subfolder of itself.", "msg-error-rename-open": "Can't rename a currently open vault.", "msg-rename-failed": "Failed to rename vault.", "msg-rename-success": "Successfully renamed vault.", "option-move-vault": "Move vault...", "msg-move-select-dest": "Select destination folder", "msg-error-move-exists": "There is already a vault at the destination.", "msg-error-move-open": "Can't move a currently open vault.", "msg-move-failed": "Failed to move vault.", "msg-move-success": "Successfully moved vault.", "option-remove": "Remove from list", "button-quick-start": "Quick start", "button-open": "Open", "button-browse": "Browse", "button-connect": "Connect", "button-create-vault": "Create", "button-back": "Back", "msg-empty-vault-name": "Vault name cannot be empty.", "msg-invalid-folder": "Please pick a valid folder.", "msg-failed-to-create-vault": "Failed to create vault.", "msg-failed-to-create-vault-at-location": "Could not create vault at the given location. Please double check the location and permission.", "msg-error-failed-to-open-vault": "Failed to open.", "msg-error-remove-current-open-vault": "Can't remove a currently open vault.", "option-get-help": "Get Help", "option-user-email": "Email", "placeholder-your-email": "Your email...", "option-user-password": "Password", "placeholder-your-password": "Your password...", "button-sign-in": "Sign in", "button-setup": "Setup", "option-connect-vault-desc": "Create a synced vault on this device.", "tooltip-own-vault": "This is a remote vault owned by you.", "tooltip-shared-vault": "This is a remote vault shared with you." }, "drag-and-drop": { "insert-link-here": "Insert link here", "insert-links-here": "Insert links here", "move-into-folder": "Move into \"{{folder}}\"", "star-this-file": "Star this file", "star-these-files": "Star these files", "open-in-this-tab": "Open in this tab", "open-as-tab": "Open as new tab" }, "window": { "maximize": "Maximize", "minimize": "Minimize", "restore-down": "Restore down", "close-window": "Close window", "go-back": "Go back", "go-forward": "Go forward" }, "start-up": { "loading-obsidian": "Loading Obsidian...", "obsidian-load-error": "An error occurred while loading Obsidian.", "button-reload-app": "Reload app", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "Open another vault", "loading-components": "Loading components...", "loading-plugins": "Loading plugins...", "loading-vault": "Loading vault...", "msg-failed-to-load-vault": "Failed to load vault: ", "loading-cache": "Loading cache...", "loading-workspace": "Loading workspace..." }, "mobile": { "action-import": "Import into vault", "action-choose-file-to-insert": "Choose a file to insert", "action-insert-text-into-file": "Insert text into {{filename}}", "action-insert-link-into-file": "Insert link into {{filename}}", "msg-importing": "Importing...", "msg-import-success": "Import success", "msg-failed-to-import-file": "Failed to import file {{filename}}", "msg-back-again-to-exit": "Press back again to exit." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "Save current file", "follow-cursor-link": "Follow link under cursor", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "Toggle pin", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "Navigate back", "navigate-forward": "Navigate forward", "use-dark-mode": "Use dark mode", "use-light-mode": "Use light mode", "change-theme": "Change theme", "search-current-file": "Search current file", "search-replace-current-file": "Search & replace in current file", "open-settings": "Open settings", "open-help": "Open help", "toggle-edit": "Toggle editing/reading view", "toggle-source-mode": "Toggle Live Preview/Source mode", "delete-current-file": "Delete current file", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "Toggle left sidebar", "toggle-right-sidebar": "Toggle right sidebar", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "Focus on editor", "toggle-fold": "Toggle fold on the current line", "fold-all": "Fold all headings and lists", "unfold-all": "Unfold all headings and lists", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "Swap line up", "swap-line-down": "Swap line down", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "Toggle bold for selection", "toggle-italics": "Toggle italics for selection", "toggle-highlight": "Toggle highlight for selection", "toggle-comments": "Toggle comments for selection", "insert-link": "Insert link", "toggle-spellcheck": "Toggle spellcheck", "delete-paragraph": "Delete paragraph", "toggle-checklist": "Toggle checklist status", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "Edit file title", "copy-path": "Copy file path", "copy-url": "Copy obsidian url", "export-pdf": "Export to PDF", "reload": "Reload app without saving", "undo-close-tab": "Undo close tab", "context-menu": "Show context menu under cursor", "show-debug-info": "Show debug info", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "Toggle edit/preview mode", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "This will affect {{links}} in {{files}}.", "msg-updated-links": "Updated {{links}} in {{files}}.", "label-update-links": "Update links", "label-confirm-update-link-to-file": "Do you want to update internal links that link to this file?", "button-always-update": "Always update", "button-just-once": "Just once", "button-do-not-update": "Do not update", "label-confirm-deletion": "Are you sure you want to delete \"{{filename}}\"?", "label-move-to-system-trash": "It will be moved to your system trash.", "label-move-to-vault-trash": "It will be moved to your Obsidian trash, which is located in the \".trash\" hidden folder in your vault.", "label-permanent-delete": "The file will be permanent deleted.", "label-non-empty-folder": "This folder is not empty.", "label-delete-folder-warning": "If you continue, all files inside this folder will be deleted.", "label-delete-folder": "Delete folder", "button-delete": "Delete", "button-delete-do-not-ask-again": "Delete and don't ask again", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "There are currently {{links}} pointing to this note.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "Delete file", "button-manage": "Manage", "button-cancel": "Cancel", "button-done": "Done", "button-save": "Save", "button-stop": "Stop", "button-continue": "Continue", "preparing-pdf": "Preparing PDF...", "label-rename-file": "Rename file", "label-new-name": "New name", "msg-rename-success": "Successfully renamed file.", "label-rename-heading": "Rename heading", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "Plugins", "file-explorer": { "name": "File explorer", "desc": "See all the files in your vault.", "action-open": "Open file explorer", "action-show": "Show file explorer", "action-create-note": "Create new note", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "New note", "action-new-folder": "New folder", "action-change-sort": "Change sort order", "action-reveal-file": "Reveal file in file explorer", "action-reveal-active-file": "Reveal active file in file explorer", "command-move-file": "Move file to another folder", "action-move-file": "Move file to...", "action-move-folder": "Move folder to...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "Type a folder", "label-no-folders": "No folders found.", "instruction-navigate": "to navigate", "instruction-move": "to move", "instruction-dismiss": "to dismiss", "label-sort-a-to-z": "Sort by file name (A to Z)", "label-sort-z-to-a": "Sort by file name (Z to A)", "label-sort-new-to-old": "Sort by edit time (new to old)", "label-sort-old-to-new": "Sort by edit time (old to new)", "label-sort-created-old-to-new": "Created time (old to new)", "label-sort-created-new-to-old": "Created time (new to old)", "menu-opt-new-note": "New note", "menu-opt-new-folder": "New folder", "menu-opt-set-attachment-folder": "Set as attachment folder", "menu-opt-rename": "Rename", "menu-opt-delete": "Delete", "menu-opt-make-copy": "Make a copy", "msg-invalid-characters": "File name cannot contain any of the following characters: ", "msg-unsafe-characters": "Links will not work with file names containing any of these characters: ", "msg-file-already-exists": "There's already a file with the same name", "msg-empty-file-name": "File name cannot be empty.", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "Last modified at {{time}}", "tooltip-created-time": "Created at {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Move", "label-untitled-file": "Untitled", "label-untitled-folder": "Untitled", "msg-set-attachment-folder": "Attachments will be saved to \"{{path}}\" from now on." }, "search": { "name": "Search", "desc": "Search for keyword in all the notes.", "action-open-search": "Search in all files", "label-collapse-results": "Collapse results", "label-match-case": "Match case", "label-explain-search-term": "Explain search term", "label-more-context": "Show more context", "prompt-start-search": "Type to start search...", "label-match-text": "Matches text: ", "label-match-regex": "Matches regex: ", "label-match-exact-text": "Contains exact text: ", "label-match-all": "Match all of: ", "label-match-any": "Match any of: ", "label-excluding": "Excluding: ", "label-case-sensitive": "Case sensitive", "label-case-insensitive": "Case insensitive", "label-match-file-path": "Match file path: ", "label-match-file-name": "Match file name: ", "label-match-content": "Match file content: ", "label-match-task": "Match task: ", "label-match-task-todo": "Match task (todo): ", "label-match-task-done": "Match task (done): ", "label-match-line": "Match line: ", "label-match-block": "Match block: ", "label-match-section": "Match section: ", "label-match-tag": "Match tag: ", "label-no-matches": "No matches found.", "matches-with-count": "... and {{count}} more match.", "matches-with-count_plural": "... and {{count}} more matches.", "label-copy-search-results": "Copy search results", "button-copy-results": "Copy results", "msg-successfully-copied": "Results copied to your clipboard.", "option-show-path": "Show path", "option-show-path-description": "Display full path of the file rather than just the file name.", "option-link-style": "Link style", "option-link-style-description": "Optionally turn each file result in to a link.", "option-choice-link-style-none": "None", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Markdown link", "option-list-prefix": "List prefix", "option-list-prefix-description": "Optionally add a list item prefix to each file result.", "option-choice-list-style-none": "None", "option-choice-list-style-dash": "Dash (-)", "option-choice-list-style-asterisk": "Asterisk (*)", "option-choice-list-style-numbered": "Numbered", "tooltip-clear-search": "Clear search", "label-search-options": "Search options", "tooltip-read-more": "Read more", "label-history": "History", "tooltip-clear-history": "Clear search history", "label-path-option-description": "match path of the file", "label-file-name-option-description": "match file name", "label-tag-option-description": "search for tags", "label-line-option-description": "search keywords on same line", "label-section-option-description": "search keywords under same heading", "menu-opt-search-for": "Search for \"{{keyword}}\"" }, "quick-switcher": { "name": "Quick switcher", "desc": "Jump to any files without leaving your keyboard. Ctrl/Cmd+O to activate.", "short-name": "Switcher", "action-open": "Open quick switcher", "instruction-navigate": "to navigate", "instruction-open": "to open", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "to create", "instruction-dismiss": "to dismiss", "label-no-note-create-new": "No notes found. Enter to create a new one.", "prompt-type-file-name": "Type file to switch to or create...", "label-enter-to-create": "Enter to create", "tooltip-not-created-yet": "Not created yet, select to create", "option-show-existing-only": "Show existing only", "option-show-existing-only-description": "Whether to show links to files that are not yet created.", "option-show-attachments": "Show attachments", "option-show-attachments-desc": "Show attachment files like images, videos, and PDFs.", "option-show-all-file-types": "Show all file types", "option-show-all-file-types-desc": "Show all files including ones that Obsidian can't open. The file will be opened with the default app for that file type." }, "graph-view": { "name": "Graph view", "desc": "See a graph overview of which notes link to which.", "action-open": "Open graph view", "action-open-local": "Open local graph", "action-copy-screenshot": "Copy screenshot", "tab-title": "Graph of {{displayText}}", "label-filters": "Filters", "prompt-filter-nodes": "Search files...", "option-depth": "Depth", "option-depth-description": "Show nodes this number of links away", "option-neighbor-links": "Neighbor links", "option-neighbor-links-description": "Show links between neighbors.", "option-forelinks": "Outgoing links", "option-forelinks-description": "Show links to other files", "option-backlinks": "Incoming links", "option-backlinks-description": "Show links from other files", "option-show-tags": "Tags", "option-show-tags-description": "Tags are linked to the files that contain them", "option-show-attachments": "Attachments", "option-show-attachments-description": "Show attachments included by files", "option-show-existing-files-only": "Existing files only", "option-show-existing-files-only-description": "When checked, links to nonexistent files are not shown", "option-show-orphans": "Orphans", "option-show-orphans-description": "Show files that are not linked to any other file", "label-display": "Display", "option-show-arrows": "Arrows", "option-show-arrows-description": "Show arrows when zoomed in", "option-text-fade": "Text fade threshold", "option-node-size": "Node size", "option-link-thickness": "Link thickness", "label-forces": "Forces", "option-center-force": "Center force", "option-link-force": "Link force", "option-link-distance": "Link distance", "option-repel-force": "Repel force", "tooltip-open-graph-settings": "Open graph settings", "msg-screenshot-copied": "Screenshot copied to the clipboard.", "label-groups": "Groups", "placeholder-enter-query": "Enter query...", "tooltip-delete-graph": "Delete group", "button-new-group": "New group", "tooltip-click-to-change-drag-to-reorder": "Click to change color\nDrag to reorder groups", "action-timelapse": "Start graph timelapse animation", "tooltip-start-timelapse-animation": "Start timelapse animation", "button-animate-timelapse": "Animate" }, "backlinks": { "name": "Backlinks", "desc": "Show number of backlinks in the status bar.", "action-open": "Open backlinks", "action-show": "Show backlinks pane", "action-open-for-current": "Open backlinks for the current file", "action-toggle-backlinks-in-document": "Toggle backlinks in document", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "Linked mentions", "label-no-backlinks": "No backlinks found.", "label-unlinked-mentions": "Unlinked mentions", "label-show-search": "Show search filter", "label-link-button-text": "Link", "tab-title": "Backlinks for {{displayText}}", "label-no-unlinked-mentions": "No unlinked mentions found.", "ellipsis": "...", "option-backlink-in-document": "Backlink in document", "option-backlink-in-document-desc": "Show backlinks in document by default when opening new panes." }, "outgoing-links": { "name": "Outgoing Links", "desc": "Show outgoing links and detect unlinked mentions of other notes in the current note.", "action-open": "Open outgoing links", "action-show": "Show outgoing links pane", "action-open-for-current": "Open outgoing links for the current file", "tab-title": "Outgoing links from {{displayText}}", "label-links": "Links", "label-no-links": "No links found.", "label-unlinked-mentions": "Unlinked mentions", "tooltip-link-file": "Link this file", "tooltip-not-created": "Not created yet" }, "tag-pane": { "name": "Tag pane", "desc": "Displays all your tags and along with their number of occurrences.", "action-show": "Show tag pane", "label-no-tags": "No tags found.", "label-sort-by-name-a-to-z": "Tag name (A to Z)", "label-sort-by-name-z-to-a": "Tag name (Z to A)", "label-sort-by-frequency-high-to-low": "Frequency (high to low)", "label-sort-by-frequency-low-to-high": "Frequency (low to high)", "action-show-nested-tags": "Show nested tags", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "Page preview", "desc": "Preview a note when hovering an internal link. Ctrl/Cmd + hover in editor mode.", "label-empty-note": "\"{{linktext}}\" is not created yet. Click to create.", "label-source-editor": "Editor", "label-source-preview": "Preview", "label-source-search": "Search, Backlinks, and Outgoing links", "label-require-mod": "Require {{key}} to trigger page preview on hover" }, "starred": { "name": "Starred", "desc": "Star frequently used files and searches.", "action-show": "Show starred pane", "action-toggle": "Star/unstar current file", "action-toggle-search": "Star/unstar current search", "action-star": "Star", "action-unstar": "Unstar", "menu-opt-remove": "Remove", "msg-successfully-starred": "Successfully starred {{type}} \"{{title}}\".", "msg-removed-starred": "Removed starred {{type}} \"{{title}}\".", "msg-cannot-find-path": "Cannot find file at \"{{path}}\"." }, "custom-css": { "name": "Custom CSS", "desc": "Reads \"obsidian.css\" in the vault and applies it.", "setting-community-themes": "Community themes", "msg-fetching-themes": "Fetching community theme data...", "prompt-filter": "Filter...", "label-dark-theme-only": "Dark themes only", "label-light-theme-only": "Light themes only", "label-use": "Use", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "Update", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "Remove theme", "label-visit-on-github": "Visit on GitHub", "msg-load-error": "Could not load community themes, please check your network.", "msg-now-using-theme": "You're now using {{title}} as your CSS theme.", "msg-deleted-theme": "The theme {{title}} has been deleted.", "msg-updated-theme": "The theme {{title}} has been updated.", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "Command palette", "desc": "Type a command to invoke it. No need to use the UI or remember the shortcut.", "action-open": "Open command palette", "instruction-navigate": "to navigate", "instruction-use": "to use", "instruction-dismiss": "to dismiss", "label-no-commands": "No commands found.", "prompt-type-command": "Type a command...", "label-pinned-commands": "Pinned commands", "option-add-new-pin": "New pinned command", "option-add-new-pin-description": "Pinned commands will appear at the top of all commands when no search query is present." }, "markdown-format-importer": { "name": "Markdown format importer", "desc": "Convert Markdown from other apps to Obsidian format.", "action-open": "Open Markdown importer", "option-roam-tag-fixer": "Roam Research tag fixer", "option-roam-tag-fixer-description": "Converts \"#tag\" and \"#[[tag]]\" to \"[[tag]]\".", "option-roam-highlight-fixer": "Roam Research highlight fixer", "option-roam-highlight-fixer-description": "Converts \"^^highlight^^\" to \"==highlight==\".", "option-roam-todo-converter": "Roam Research TODO converter", "option-roam-todo-converter-description": "Converts \"{{[[TODO]]}}\" to \"[ ]\".", "option-bear-highlight-fixer": "Bear highlight fixer", "option-bear-highlight-fixer-description": "Converts \"::highlight::\" to \"==highlight==\".", "zettelkasten-link-fixer": "Zettelkasten link fixer", "zettelkasten-link-fixer-description": "Fixes \"[[UID]]\" links to full \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Zettelkasten link beautifier", "zettelkasten-link-beautifier-description": "Fixes \"[[UID]]\" links and also beautify them \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Warning: the importer will convert all the files in your vault, not just the current file.", "msg-override-files-warning": "Your files will be overwritten. Back up all your files before attempting conversion.", "label-start-conversion": "Start Conversion", "label-stop": "Stop", "label-go-back": "Go back", "label-done": "Done", "label-processing": "Processing...", "label-cancelling": "Cancelling...", "label-finished": "Finished!", "label-processed-files": "Processed files", "label-modified-files": "Modified files", "label-total-replacements": "Total replacements" }, "daily-notes": { "name": "Daily notes", "desc": "Open today's daily note, or create one if not present.", "short-name": "Today", "action-open": "Open today's note", "action-open-previous": "Open previous daily note", "action-open-next": "Open next daily note", "action-insert-text": "Insert text into daily note", "action-insert-link": "Insert link into daily note", "msg-fail-format": "Failed to create daily note. \"{{format}}\" is not a valid format.", "msg-fail-folder": "Failed to create daily note. Folder \"{{folderOption}}\" not found.", "msg-fail-template-file": "Failed to create daily note. Template file \"{{template}}\" not found.", "msg-no-previous": "There's no daily note before this one.", "msg-no-next": "There's no daily note after this one.", "option-date-format": "Date format", "label-refer-to-syntax": "For more syntax, refer to: ", "label-syntax-link": "format reference", "label-syntax-live-preview": "Here is what it will look like: ", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new daily note.", "option-template": "Template file location", "option-template-description": "The file path to use as template.", "option-open-on-start": "Open daily note on startup", "option-open-on-start-description": "Open your daily note automatically whenever you open this vault." }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Random note", "desc": "Opens a random note. Useful for reviewing and discovering.", "short-name": "Random", "action-open": "Open random note" }, "outline": { "name": "Outline", "desc": "Displays the outline of the current file or linked pane.", "action-open": "Open outline", "action-show": "Show outline pane", "action-open-for-current": "Open outline of the current file", "tab-title": "Outline of {{displayText}}", "label-no-headings": "No headings found." }, "word-count": { "name": "Word count", "desc": "Show word count in the status bar." }, "slides": { "name": "Slides", "desc": "Present from Markdown. Use \"---\" to separate slides.", "action-start": "Start presentation" }, "audio-recorder": { "name": "Audio recorder", "desc": "Record audio and save as attachment.", "action-start": "Start recording audio", "action-stop": "Stop recording audio", "action-toggle": "Start/stop recording", "msg-access-denied": "Microphone access was denied, please enable it from the preference pane.", "msg-pending-grant": "Please grant microphone permission to start recording.", "msg-no-microphone": "No microphone is connected." }, "open-with-default-app": { "name": "Open in default app", "desc": "Add button to open current file in the default app.", "action-open-file": "Open in default app", "action-open-file-mobile": "Share", "action-show-in-folder": "Show in folder", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "Templates", "desc": "Insert template content from a folder of template files.", "action-insert": "Insert template", "action-insert-current-date": "Insert current date", "action-insert-current-time": "Insert current time", "option-template-folder-location": "Template folder location", "option-template-folder-location-description": "Files in this folder will be available as templates.", "option-template-date-format": "Date format", "option-template-date-format-description": "{{date}} in the template file will be replaced with this value.", "option-template-date-format-description2": "You can also use {{date:YYYY-MM-DD}} to override the format once.", "option-template-time-format": "Time format", "option-template-time-format-description": "{{time}} in the template file will be replaced with this value.", "option-template-time-format-description2": "You can also use {{time:HH:mm}} to override the format once.", "instruction-navigate": "to navigate", "instruction-insert": "to insert template", "instruction-dismiss": "to dismiss", "msg-no-templates-found": "No templates found", "msg-fail-invalid-folder": "Failed to list templates. Template folder is invalid.", "msg-fail-folder-not-found": "Failed to list templates. Folder \"{{folderOption}}\" not found.", "prompt-type-template": "Type name of a template..." }, "translucency": { "name": "Translucent window", "desc": "Turn on translucency effect to enhance a sense of depth. Best used with dark mode. Not supported on Linux." }, "slash-command": { "name": "Slash commands", "desc": "Enable the ability to trigger slash commands in the editor by typing the forward slash." }, "editor-status": { "name": "Editor status", "desc": "Adds a status bar item to show and change the current editor mode.", "read": "Reading", "edit-source": "Source mode", "edit-live-preview": "Live Preview" }, "publish": { "name": "Publish", "desc": "Publish your notes through Obsidian Publish.", "action-publish-changes": "Publish changes...", "label-no-internet-access": "You need access to the internet to publish changes.", "label-publish-service-description": "Obsidian Publish is an add-on paid service that lets you publish your notes online directly from Obsidian.", "label-please-login": "To start publishing, please log in or create a new Obsidian account.", "label-no-publish-subscription": "You do not have an Obsidian Publish subscription yet.", "button-purchase": "Purchase", "label-manage-sites": "Manage sites", "label-no-sites": "You don't have any sites.", "button-choose": "Choose", "tooltip-edit-site-id": "Edit site ID", "tooltip-delete-site": "Delete site", "label-delete-site-confirmation": "Are you sure you want to delete this site?", "label-delete-site-details": "This will immediately and permanently delete your site.", "label-confirm-delete-site": "Confirm delete site \"{{site}}\"", "option-site-id": "Site ID", "option-site-id-description": "Your site will be at https://publish.obsidian.md/{site id}. You can change this later. Only lower case letters, numbers, and dashes are allowed.", "option-site-id-placeholder": "Pick a site ID", "button-create": "Create", "msg-invalid-site-id": "Site ID can only contain lowercase letters, numbers, and dashes.", "msg-site-id-in-use": "This site ID is in use, please try another one.", "msg-create-site-issue": "That was an issue when creating your site.", "label-site-options": "Site options", "option-site-general": "General", "option-site-components": "Components", "option-site-appearance": "Appearance", "option-site-reading-experience": "Reading experience", "option-site-misc": "Other site settings", "option-site-name": "Site name", "option-site-name-description": "Name of your published site. It will show up in the page title of your site.", "option-site-name-placeholder": "Name of your site", "option-home-page-file": "Homepage file", "option-home-page-file-description": "The first page the user sees when landing on your published site", "option-home-page-file-placeholder": "Pick a published file", "option-logo": "Logo", "option-logo-description": "Pick an image file as your site logo.", "option-logo-placeholder": "Any uploaded image in your vault...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "Theme", "option-theme-description": "Choose default color scheme for your site.", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "Show navigation", "option-show-navigation-description": "Display a list of all published pages on the left side of your published site.", "option-show-search": "Show search bar", "option-show-search-description": "Display a search bar at top of the navigation that lets the visitors search pages and headings on your site.", "option-show-graph": "Show graph view", "option-show-graph-description": "Display a small local graph on each page.", "option-show-outline": "Show table of contents", "option-show-outline-description": "Display the outline of headings on each page.", "option-show-backlinks": "Show backlinks", "option-show-backlinks-description": "Show backlink section at the end of each page.", "option-sliding-window-mode": "Use sliding windows", "option-sliding-window-mode-description": "Open pages in new panes to the right. Allows scrolling through panes horizontally.", "option-hover-preview-file": "Show hover preview", "option-hover-preview-file-description": "Display page preview when hovering links.", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "Readable line length", "option-readable-line-length-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-site-password": "Passwords", "option-site-password-description": "Restrict access to your site with passwords.", "option-google-analytics": "Google Analytics tracking code", "option-google-analytics-description": "Configure Google Analytics for your site. Only available for visitors from your custom domain URL. Please check with your local laws and regulations first.", "button-manage-passwords": "Manage", "button-save-site-settings": "Save site settings", "msg-updated-options": "Updated options for your site.", "button-go-back": "Back", "label-publishing-to": "Publishing to", "tooltip-switch-site": "Switch site", "button-add-linked": "Add linked", "tooltip-add-linked": "Add all files that are linked by currently selected items", "msg-added-linked-files": "{{count}} linked file has been added.", "msg-added-linked-files_plural": "{{count}} linked files have been added.", "tooltip-open-site-options": "Change site options", "label-no-changes-detected": "No changes were detected.", "label-changed-files-to-be-published": "Changes", "label-unchanged-files-already-published": "Unchanged (select to delete)", "label-file-selected": " selected", "button-select-all-files": "Select all", "button-deselect-all-files": "Deselect all", "label-new-files-to-be-published": "New", "button-publish": "Publish", "msg-no-permission-to-publish-to-site": "You do not have permissions to publish to the current site.", "msg-select-at-least-one-file": "Please select at least one file.", "label-upload-changes": "Upload changes", "button-done": "Done", "button-stop": "Stop", "label-status-uploading": "Uploading", "label-status-to-publish": "To publish", "label-status-to-delete": "To delete", "label-status-published": "Published", "label-status-deleted": "Deleted", "label-status-failed": "Failed", "label-status-cancelled": "Cancelled", "button-change": "Change", "label-clear-cache": "It takes up to a few minutes for the changes to show up on your site. If you do not see your latest changes, try clearing the cache in your browser.", "label-visit-site": "You can visit your site here: ", "msg-something-went-wrong": "Something went wrong. Please check the developer console for details.", "msg-network-error": "A network error occurred. ", "label-manage-passwords": "Manage passwords", "label-add-password": "Add password", "action-new-password": "New password", "label-no-password": "Your site currently does not have any passwords. Anyone can visit it.", "label-have-password": "Your site is password protected. If you have multiple passwords, visitors can access your site by entering any of them.", "option-password-name": "Password", "option-password-desc": "A hash of your password will be stored securely. Once the password is set, it cannot be revealed in plaintext.", "option-password-placeholder": "Your password", "option-nickname-name": "Nickname (optional)", "option-nickname-desc": "Set a nickname to remind yourself what or who the password is for.", "action-add-password": "Add this password", "label-untitled-password": "Untitled password", "label-password-created-time": "Created {{time}}", "msg-added-new-password": "Added new password.", "option-custom-domain": "Custom domain", "option-custom-domain-desc": "Use your own domain rather than the https://publish.obsidian.md/{site id} URL.", "option-noindex": "Disallow search engine indexing", "option-noindex-desc": "Prevent search engines from indexing your site.", "button-configure": "Configure", "label-configure-custom-domain": "Configure custom domain", "option-custom-url-name": "Custom URL", "option-custom-url-desc": "The URL that your site will be located at.", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "Redirect to your custom domain", "option-custom-url-redirect-desc": "Redirect visitors on publish.obsidian.md/id to your custom domain.", "button-update-custom-domain": "Update domain setting", "label-custom-domain-instructions": "Please refer to our {{link}} on our help site for more information.", "label-custom-domain-link-name": "custom domain setup guide", "label-site-usage": "You're using {{site}} out of your {{limit}}.", "button-add-more-sites": "Buy more sites", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "Workspaces", "desc": "Save and load workspace layout.", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "Save", "button-load": "Load", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "Sync", "desc": "Synchronize your files through Obsidian Sync.", "action-view-version-history": "View version history", "label-load-more": "Load more", "label-show-diff": "Show diff", "label-copy-to-clipboard": "Copy to clipboard", "label-restore-this-version": "Restore this version", "msg-already-latest-version": "This version is already the latest version.", "msg-restored-version": "Successfully restored version from {{time}}", "label-file-deleted": "This file was deleted", "label-no-earlier-version": "There was no earlier versions of this file.", "label-empty-file": "Empty", "label-setting-files": "Setting files", "label-deleted-files": "Deleted files", "label-version-history": "Version history", "label-click-to-see-history": "Click on a deleted file to see its history.", "label-create-remote-vault": "Create remote vault", "msg-please-enter-password": "Please enter a password.", "msg-vault-name-cannot-be-empty": "Vault name cannot be empty.", "msg-successfully-created-vault": "Successfully create remote vault \"{{name}}\".", "label-remote-vault-explanation": "Remote vaults securely synchronize your vault between devices.", "option-vault-name": "Vault name", "option-vault-name-desc": "Helps you remember what this vault is for.", "option-vault-name-placeholder": "My awesome vault", "option-use-custom-encryption-password": "Customize end-to-end encryption password", "option-use-custom-encryption-password-desc": "If you turn this off, we will securely manage an encryption key for you.", "option-use-custom-encryption-password-desc-warning": "This option cannot be changed later.", "option-encryption-password": "Encryption password", "option-encryption-password-desc": "This password cannot be changed later.", "option-encryption-password-desc-warning": "If you forget this password, any remote data will remain unusable forever.", "option-encryption-password-desc-2": "This does not affect your local data.", "option-encryption-password-placeholder": "Your password", "label-enter-encryption-password": "Enter encryption password", "button-unlock-vault": "Unlock vault", "msg-verified-password": "Successfully verified your password.", "label-remote-vaults": "Your remote vaults", "label-vault-created-time": "Created {{time}}", "tooltip-delete-remote-vault": "Delete", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "Confirm delete vault", "label-confirm-delete-remote-vault-question": "Are you sure you want to delete this remote vault?", "label-confirm-delete-remote-vault-result": "All data on our server, including version history, will be deleted. Your local files will stay intact.", "label-confirm-delete-remote-vault-warning": "This action is permanent and irreversible.", "msg-remote-vault-deleted": "{{name}} has been deleted.", "button-connect-to-remote-vault": "Connect", "button-disconnect-from-remote-vault": "Disconnect", "label-not-remote-vaults": "You don't have any remote vaults.", "button-create-new-remote-vault": "Create new vault", "label-sync-log": "Sync log", "options-only-show-errors": "Errors only", "options-only-show-errors-desc": "Only show errors and hide other log items.", "button-copy-sync-log": "Copy sync log", "msg-successfully-copied-sync-log": "Successfully copied sync log.", "button-retry": "Retry", "button-purchase-subscription": "Purchase", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "Choose", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "Sync status", "option-sync-status-desc-paused": "Obsidian Sync is currently paused.", "option-sync-status-desc-running": "Obsidian Sync is currently running.", "option-device-name": "Device name", "option-device-name-desc": "This name will be displayed in the sync log. Leave empty to use the default name.", "button-resume": "Resume", "button-pause": "Pause", "option-view-deleted-files": "Deleted files", "option-view-deleted-files-desc": "View and restore deleted files.", "option-sync-log": "Sync activity", "option-sync-log-desc": "View recent sync activities for debugging.", "button-view": "View", "button-bulk-restore": "Bulk restore", "button-restore-selected-files": "Restore selected files", "msg-restoring": "Restoring...", "msg-restoring-complete": "`Restore complete: {{succeeded}} succeeded and {{failed}} failed.`", "option-over-size": "Vault size over limit", "option-over-size-desc": "Your vault is at {{size}} out of {{limit}}.", "msg-largest-files": "View largest files", "msg-largest-files-desc": "These are the remote files that are taking the most space. After deleting attachments, use the purge button to free up remote vault space.", "button-purge-remote": "Purge", "tooltip-purge-remote": "Permanently purge deleted attachments from remote vault to save space.", "msg-purge-complete": "Purge complete.", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "Selective sync", "option-excluded-folders": "Excluded folders", "option-excluded-folder-desc": "Prevent certain folders from being synced.", "option-currently-excluded-folders": " These folders currently excluded:", "button-manage-excluded-folders": "Manage", "option-sync-image": "Sync images", "option-sync-image-desc": "Sync image files with these extensions: {{extensions}}.", "option-sync-audio": "Sync audio", "option-sync-audio-desc": "Sync audio files with these extensions: {{extensions}}.", "option-sync-video": "Sync videos", "option-sync-video-desc": "Sync video files with these extensions: {{extensions}}.", "option-sync-pdf": "Sync PDFs", "option-sync-pdf-desc": "Sync PDF files.", "option-sync-unsupported": "Sync all other types", "option-sync-unsupported-desc": "Sync unsupported file types.", "option-vault-config-sync": "Vault configuration sync", "option-view-config-files": "Settings version history", "option-view-config-files-desc": "View and restore version history of setting files.", "option-sync-app": "Main settings", "option-sync-app-desc": "Enable to sync editor settings, files & links settings, custom hotkeys, etc.", "option-sync-appearance": "Appearance settings", "option-sync-appearance-desc": "Sync appearance settings like dark mode, active theme, and enabled snippets.", "option-sync-appearance-data": "Themes and snippets", "option-sync-appearance-data-desc": "Sync downloaded themes and snippets. Whether they are enabled depends on the previous setting.", "option-sync-hotkey": "Hotkeys", "option-sync-hotkey-desc": "Sync custom hotkeys.", "option-sync-core-plugin": "Active core plugin list", "option-sync-core-plugin-desc": "Sync which core plugins are enabled.", "option-sync-core-plugin-data": "Core plugin settings", "option-sync-core-plugin-data-desc": "Sync core plugin settings.", "option-sync-community-plugin": "Active community plugin list", "option-sync-community-plugin-desc": "Sync which community plugins are enabled.", "option-sync-community-plugin-data": "Installed community plugins", "option-sync-community-plugin-data-desc": "Sync installed community plugins (.js, .css, and manifest.json files) and their settings.", "label-sync-introduction": "Obsidian Sync is Obsidian's add-on sync service with end-to-end encryption and version history.", "label-account-required": "To start syncing, please log in or create a new Obsidian account.", "button-sign-up": "Sign up", "button-log-in": "Log in", "label-manage-excluded-folders": "Manage excluded folders", "label-number-of-folders-excluded": "{{folders}} are currently excluded from being synced.", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "Setup connection", "label-now-connected-to-vault": "You're now connected to \"{{name}}\".", "button-start-syncing": "Start syncing", "label-confirm-merge-vault": "Confirm Merge Vault", "msg-vault-has-notes": "Your local vault already contains some notes.", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "File recovery", "desc": "Let you restore recent snapshots to recover from accidental data loss. Snapshots are only saved for Markdown files.", "action-open": "Open saved snapshots", "option-interval": "Snapshot interval", "option-interval-description": "Minimal interval in minutes between two snapshots.", "option-keep": "History length", "option-keep-description": "Length in days snapshots is kept for.", "option-open-history": "Snapshots", "option-open-history-description": "View and restore saved snapshots.", "button-view-snapshots": "View", "option-clear": "Clear history", "option-clear-description": "Wipe all snapshots.", "button-clear-history": "Clear", "label-clear-warning": "Are you sure you want to delete all snapshots? Note that only snapshots will be removed. All files inside your vault will not be affected.", "msg-clear-complete": "Snapshots cleared.", "label-no-history-found": "No snapshots found.", "placeholder-choose-file": "Choose a file...", "label-select-file": "Please select a file on the left to view snapshots." }, "note-composer": { "name": "Note composer", "desc": "Merge, split, and refactor notes.", "option-confirm-file-merge": "Confirm file merge", "option-confirm-file-merge-description": "Prompt before merge two files.", "option-split-replacement-text": "Text after extraction", "option-split-replacement-text-description": "What to show in place of the selected text after extracting it.", "option-choice-split-replacement-text-link": "Link to new file", "option-choice-split-replacement-text-embed": "Embed new file", "option-choice-split-replacement-text-none": "None", "option-template-file": "Template file location", "option-template-file-description": "Template file to use when merging or extracting. Available variables: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Merge current file with another file...", "action-merge-file": "Merge entire file with...", "label-no-files": "No files found.", "instruction-navigate": "to navigate", "instruction-merge": "to merge", "instruction-create-new": "to create new", "instruction-merge-at-top": "to merge at top", "instruction-dismiss": "to dismiss", "prompt-select-file-to-merge": "Select file to merge into...", "label-merge-file": "Merge file", "label-confirm-file-merge": "Are you sure you want to merge \"{{file}}\" into \"{{destination}}\"? \"{{file}}\" will be deleted.", "button-merge": "Merge", "button-merge-do-not-ask-again": "Merge and don't ask again", "command-split-file": "Extract current selection...", "command-extract-heading": "Extract this heading...", "instruction-append": "to move to bottom", "instruction-prepend": "to move to top", "msg-fail-to-fetch-template": "Failed to fetch template file: \"{{template}}\" not found.", "msg-fail-to-find-heading": "Failed to find heading" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} word", "word-with-count_plural": "{{count}} words", "character-with-count": "{{count}} character", "character-with-count_plural": "{{count}} characters", "link-with-count": "{{count}} link", "link-with-count_plural": "{{count}} links", "file-with-count": "{{count}} file", "file-with-count_plural": "{{count}} file", "folder-with-count": "{{count}} folder", "folder-with-count_plural": "{{count}} folders", "backlink-with-count": "{{count}} backlink", "backlink-with-count_plural": "{{count}} backlinks", "site-with-count": "{{count}} site", "site-with-count_plural": "{{count}} sites", "plugin-with-count": "{{count}} plugin", "plugin-with-count_plural": "{{count}} plugins", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } }{ "setting": { "options": "Options", "plugin": "Plugin", "builtin-plugins": "Core plugins", "plugin-options": "Plugin options", "folder-path-example-placeholder": "Example: folder 1/folder 2", "file-path-example-placeholder": "Example: folder/note", "msg-restart-required": "Changing this option requires a restart to take effect.", "editor": { "name": "Editor", "section-general": "General", "section-behavior": "Behavior", "section-display": "Display", "option-spellcheck": "Spell check", "option-spellcheck-description": "Turns on the spell checker. Currently only works for English (US).", "spellcheck-languages": "Spellcheck languages", "spellcheck-languages-description": "Choose the languages for the spellchecker to use.", "spellcheck-languages-mac-description": "The native spellchecker will automatically detect the language being used for you on macOS.", "spellcheck-dict": "Spellcheck dictionary", "spellcheck-dict-empty": "The spellcheck dictionary is empty.", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "Readable line length", "option-readable-line-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-strict-line-break": "Strict line breaks", "option-strict-line-break-description": "In preview mode, ignore single line breaks according to the Markdown specs. Turn this off for single line breaks to show in preview.", "option-show-frontmatter": "Show frontmatter", "option-show-frontmatter-description": "In preview mode, show frontmatter as a code block. Turn off to hide frontmatter section.", "option-auto-pair-brackets": "Auto pair brackets", "option-auto-pair-brackets-description": "Pair brackets and quotes automatically.", "option-auto-pair-markdown": "Auto pair Markdown syntax", "option-auto-pair-markdown-description": "Pair symbols automatically for bold, italics, highlight, strikethrough, and code.", "option-smart-indent-lists": "Smart indent lists", "option-smart-indent-lists-description": "Take care of indentation and list marker for you.", "option-fold-heading": "Fold heading", "option-fold-heading-description": "Let you fold everything under a heading.", "option-fold-indent": "Fold indent", "option-fold-indent-description": "Let you fold a portion of the same indentation, such as lists.", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Editing view", "option-default-new-tab-view-reading": "Reading view", "option-default-editing-mode": "Default editing mode", "option-default-editing-mode-description": "The default editing mode a new pane will start with.", "option-default-editing-mode-source": "Source mode", "option-default-editing-mode-live-preview": "Live Preview", "option-show-line-number": "Show line number", "option-show-line-number-description": "Show line number in the gutter.", "option-indentation-guide": "Show indentation guides", "option-indentation-guide-description": "Show vertical relationship lines between bullet points for visual guidance.", "option-use-tabs": "Use tabs", "option-use-tabs-description": "Use tabs to indent when pressing the \"Tab\" key. Set this to off to use spaces.", "option-tab-size": "Tab size", "option-tab-size-description": "Number of spaces a tab is equivalent to.", "option-rtl": "Right-to-left (RTL)", "option-rtl-description": "Sets the text direction of notes to display in right-to-left.", "option-auto-convert-html": "Auto convert HTML", "option-auto-convert-html-description": "Automatically convert HTML to Markdown when pasting and drag-and-drop from webpages. Use Ctrl/Cmd+Shift+V to paste without conversion.", "option-vim-key-bindings": "Vim key bindings", "option-vim-key-bindings-description": "Let you use Vim key bindings in the source editor.", "option-vim-key-bindings-mobile": "On mobile devices, this setting is per-device and is not synchronized through the config file.", "option-emacsy-keys": "Legacy Emacs-style key bindings for macOS", "option-emacsy-keys-description": "Allows you to use the additional Emacs-style navigation keys, which are standard on macOS, but may interfere with some key operations.", "label-confirm-enable-vim": "Confirm entering Vim mode", "label-vim-warning": "Vim mode is for efficient text editing but can be quite counter-intuitive. If you're not familiar with Vim, this option might make it look like Obsidian has stopped working.", "label-vim-test": "To verify that you know your way around Vim, please enter the command to quit Vim without saving below:", "label-vim-your-answer": "Your answer", "placeholder-enter-command": "Enter command...", "button-confirm-enable-vim": "Let me enable Vim", "msg-vim-mode-enabled": "Command is correct. Vim mode now enabled.", "msg-vim-mode-not-enabled": "Command is incorrect. Vim mode remains disabled to protect you.", "msg-vim-mode-please-enter-command": "Please enter the command to enable Vim mode", "option-legacy-editor": "Use legacy editor", "option-legacy-editor-description2": "The legacy editor will be deprecated soon. It is currently no longer maintained, and as such, bugs will no longer be addressed.", "label-legacy-deprecation": "New editor is here", "label-legacy-deprecation-1": "Obsidian now has a brand new editor that's more robust and accessible.", "label-legacy-deprecation-2": "It seems you're still using the legacy editor, and we think you'll enjoy the new editor.", "label-legacy-deprecation-choice": "Which mode would you like to use?", "label-live-preview-description": "A more modern, what-you-see-is-what-you-get experience.", "label-source-mode-description": "See raw Markdown with syntax highlighting.", "button-start-new-editor": "Start new editor" }, "file": { "name": "Files & Links", "option-confirm-file-deletion": "Confirm file deletion", "option-confirm-file-deletion-description": "Whether you want to get prompted to confirm file deletion.", "option-delete-destination": "Deleted files", "option-delete-destination-description": "What to do with files after you delete them.", "option-choice-system-trash": "Move to system trash", "option-choice-vault-trash": "Move to Obsidian trash (.trash folder)", "option-choice-permanent-delete": "Permanent delete", "option-always-update-links": "Always update internal links", "option-always-update-links-description": "Whether to automatically update links after renaming a file or prompt.", "option-new-note-location": "New note default location", "option-new-note-location-description": "Where to put newly created notes. Plugin settings will override this.", "option-choice-vault-root": "Vault root", "option-choice-current-folder": "Same folder as the file is in", "option-choice-specified-folder": "In the folder specified below", "option-new-file-folder-path": "Folder to create new notes in", "option-new-file-folder-path-description": "Newly created notes will appear under this folder. Plugin settings will override this.", "option-use-wiki-links": "Use [[Wikilinks]]", "option-use-wiki-links-description": "Auto-generate Wikilinks for [[links]] and ![[images]] instead of Markdown links and images. Disable this option to generate Markdown links instead.", "option-show-unsupported-files": "Detect all file extensions", "option-show-unsupported-files-description": "Show files with any extension even if Obsidian can't open them natively, so that you can link to them and see them in File Explorer and Quick Switcher.", "option-link-autocompleted-format": "New link format", "option-link-autocompleted-format-description": "What links to insert when auto generating internal links.", "option-choice-shortest-linktext": "Shortest path when possible", "option-choice-relative-path": "Relative path to file", "option-choice-absolute-path": "Absolute path in vault", "option-new-attachment-location": "Default location for new attachments", "option-new-attachment-location-description": "Where newly added attachments are placed.", "option-choice-subdirectory": "In subfolder under current folder", "option-attachment-folder-path": "Attachment folder path", "option-attachment-folder-path-description": "Newly created attachment files will appear here. That includes images created via drag and drop or pasting, and audio recordings.", "option-attachment-subfolder-path": "Subfolder name", "option-attachment-subfolder-path-description": "If your file is under \"vault/folder\", and your set subfolder name to \"attachments\", attachments will be saved to \"vault/folder/attachments\".", "option-attachment-subfolder-path-placeholder": "attachments", "option-excluded-files": "Excluded files", "option-excluded-files-desc": "Excluded files will be either hidden or less noticeable in various places, such as Quick Switcher, link suggestion, and Graph View.", "label-no-excluded-filters-applied": "No excluded filter is applied right now. Add one below.", "label-excluded-filters-applied": "Files matching the following filters are currently excluded:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Enter path or \"/regex/\"..." }, "appearance": { "name": "Appearance", "option-base-theme": "Base theme", "option-base-theme-description": "Choose Obsidian’s default color scheme.", "option-accent-color": "Accent color", "option-accent-color-description": "Choose the accent color used throughout the app.", "dark-theme": "Dark", "light-theme": "Light", "system-theme": "Adapt to system", "option-font": "Font", "option-advanced": "Advanced", "option-interface-font": "Interface font", "option-interface-font-description": "Set base font for all of Obsidian.", "option-text-font": "Text font", "option-text-font-description": "Set font for editing and reading views.", "option-monospace-font": "Monospace font", "option-monospace-font-description": "Set font for places like code blocks and frontmatter.", "label-single-font-currently-in-effect": " Currently applied font: ", "label-multiple-fonts-currently-in-effect": " The following fonts are currently applied:", "option-font-placeholder": "Enter font name...", "label-no-custom-font-set": "No custom font is applied right now. Add one below.", "label-font-applied": "The first font from this list that is available on your system will be applied.", "msg-font-not-found": "This font is not detected on your system.", "msg-font-found": "This font is detected on your system.", "label-font-name": "Font name", "option-community-themes": "Open community themes", "option-community-themes-description": "Preview and use amazing themes created by the community.", "button-browse-community-themes": "Browse", "option-font-size": "Font size", "option-font-size-description": "Font size in pixels that affects editor and preview.", "option-font-size-action": "Quick font size adjustment", "option-font-size-action-description": "Adjust the font size using Ctrl + Scroll, or using the trackpad pinch-zoom gesture.", "option-themes": "Themes", "option-manage-themes-description": "Manage installed themes and browse community themes.", "option-theme-button-manage": "Manage", "option-choice-none": "None", "option-native-menus": "Native menus", "option-native-menus-desc": "Menus throughout the app will match the operating system. They will not be affected by your theme.", "button-reload-themes": "Reload themes", "msg-reloaded-themes": "Reloaded custom CSS themes.", "button-open-themes-folder": "Open themes folder", "option-css-snippets": "CSS snippets", "label-no-css-snippets-found": "No CSS snippets found in the snippets folder.", "no-snippet-description": "CSS Snippets are stored in \"{{path}}\".", "button-reload-snippets": "Reload snippets", "button-open-snippets-folder": "Open snippets folder", "msg-reloaded-snippets": "Reloaded CSS snippets.", "option-toggle-snippet-description": "Apply CSS snippet at \"{{path}}\".", "label-installed-themes": "Installed themes", "label-screenshot-unavailable": "Screenshot unavailable", "label-default-theme": "Default", "tooltip-click-to-enlarge": "Click to enlarge", "button-update": "Update", "label-currently-selected": "Selected", "option-frame-style": "Window frame style", "option-frame-description": "Determines the styling of the title bar of Obsidian windows. Requires a full restart to take effect.", "option-frame-hidden": "Hidden (default)", "option-frame-obsidian": "Obsidian frame", "option-frame-native": "Native frame", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Show tab title bar", "option-show-view-header-desc": "Display the header at the top of every tab.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "button-check-for-updates": "Check for updates", "button-view-updates": "View updates", "button-update-all-themes": "Update all", "label-current-themes": "Current community themes", "label-currently-installed": "You currently have {{count}} theme installed.", "label-currently-installed_plural": "You currently have {{count}} themes installed." }, "hotkeys": { "name": "Hotkeys", "prompt-filter": "Filter...", "tooltip-delete-hotkey": "Delete hotkey", "label-waiting-for-hotkey-press": "Press hotkey...", "tooltip-restore-default": "Restore default", "tooltip-customize-command": "Customize this command", "tooltip-hotkey-single-conflict": "This hotkey conflicts with \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "This hotkey conflicts with {{count}} other commands", "label-blank-hotkey": "Blank" }, "about": { "name": "About", "label-commercial-license": "Commercial license", "label-license-key": "License key", "license-key-placeholder": "Your license key...", "label-activate-license": "Activate license", "button-activate": "Activate", "label-unknown-version": "Unknown", "label-current-version": "Current version: ", "label-install-version": "(Installer version: {{version}})", "label-up-to-date": "Your app is up to date!", "label-read-changelog": "Read the changelog.", "label-manual-update-required": "To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.", "label-download": "Download", "label-new-version-ready": "A new version is ready to be installed. ", "label-relaunch-to-update": "Relaunch the app to update.", "label-disabled-updates": "Updates are disabled.", "label-checking-for-updates": "Checking for updates...", "button-relaunch": "Relaunch", "button-check-for-updates": "Check for updates", "option-auto-update": "Automatic updates", "option-auto-update-description": "Turn this off to prevent the app from checking for updates.", "option-get-help": "Get help", "option-get-help-description": "Get help on using Obsidian.", "button-open": "Open", "option-language": "Language", "option-language-description": "Change the display language.", "option-insider-build": "Receive insider builds", "option-insider-build-description": "Auto-update to insider builds to try out new features. Note that these builds are bleeding edge and might be less stable.", "option-advanced": "Advanced", "option-hw-acceleration": "Hardware Acceleration", "option-hw-acceleration-description": "Turns on Hardware Acceleration, which uses your GPU to make Obsidian smoother.", "option-hw-acceleration-warning": "If you turn this off, app performance will be severely degraded.", "option-config-location": "Override config folder", "option-config-location-description": "Use a different config folder than the default one. Must start with a dot.", "option-config-location-warning": "Config location must be a valid folder name that starts with a dot.", "label-license": "License", "label-your-commercial-license-key": "Your commercial license key is \"{{key}}\".", "label-commercial-license-info": "Registered to \"{{company}}\" for {{seats}} users. Valid until {{expiry}}.", "label-validating-commercial-license": "Validating...", "label-invalid-commercial-license": "License invalid: ", "button-remove-commercial-license": "Remove", "option-catalyst": "Catalyst license", "option-catalyst-desc": "You currently have the {{tier}} Catalyst license. Thanks for your support!", "option-catalyst-desc-no-license": "You don't have a Catalyst license right now. Catalyst license is a one-time donation to support Obsidian development.", "label-app": "App" }, "account": { "name": "Account", "option-your-account": "Your account", "option-your-account-desc": "You're currently signed in {{name}} ({{email}}).", "option-your-account-desc-no-login": "You're not logged in right now. An account is only needed for Obsidian Sync, Obsidian Publish, and Catalyst insider builds.", "button-manage-settings": "Manage settings", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Commercial license", "option-commercial-license-desc": "If you use Obsidian for commercial purpose, you may need to get a commercial license.", "button-purchase": "Purchase", "button-log-out": "Log out", "label-log-in": "Log in", "label-sign-up": "Sign up", "label-email": "Email", "placeholder-email": "Your email...", "label-password": "Password", "placeholder-password": "Your password...", "button-login": "Login", "message-empty-email": "Email cannot be empty.", "message-invalid-email": "Email is not valid.", "message-empty-password": "Password cannot be empty.", "message-login-failed": "Login failed, please double check your email and password.", "label-no-account": "Don't have an account? ", "link-sign-up-now": "Sign up now" }, "core-plugin": { "plugin-list": "Plugin list", "option-search-plugin": "Search core plugins", "option-search-plugin-description": "Filter plugins by name or description.", "placeholder-search-plugin": "Search plugins..." }, "third-party-plugin": { "name": "Third-party plugin", "option-restricted-mode": "Restricted mode", "option-restricted-mode-description": "Restricted mode is off. Turn on to disable community plugins.", "button-turn-on": "Turn on", "option-browse-community-plugins": "Community plugins", "option-browse-community-plugins-description": "Browse and install third-party plugins made by our amazing community.", "button-browse": "Browse", "label-exit-restricted-mode": "Exit Restricted Mode", "label-exit-restricted-mode-description-1": "Community plugins, like any other software you install, could potentially cause data integrity and security issues.", "label-exit-restricted-mode-description-2": "Plugin security is important to us. Here's what we do:", "label-exit-restricted-mode-description-3": "Despite our efforts, there is still a small chance that a community plugin might misbehave.", "label-code-review": "Initial code review", "label-code-review-desc": "Plugins undergo an initial code review by our team before they appear in the store.", "label-open-source": "Open source", "label-open-source-desc": "Most plugins are open source on GitHub, so you can inspect the code yourself.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We have a large community of developers who watch out for each other.", "label-report-mechanism": "Report mechanism", "label-report-mechanism-desc": "We follow up and remove faulty plugins upon user report.", "label-exit-restricted-mode-disable-confirmation": "Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.", "label-learn-more": "Learn more about plugin security", "button-turn-on-community-plugins": "Turn on community plugins", "label-trust-author": "Do you trust the author of this vault?", "label-trust-author-description-1": "You're opening this vault for the first time, and it comes with some plugins.", "label-trust-author-description-2": "If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.", "label-trust-author-description-3": "If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.", "button-enable-plugins": "Trust author and enable plugins", "button-dont-trust-author": "Browse vault in Restricted Mode", "placeholder-community-plugins": "Search community plugins...", "msg-failed-load-plugins": "Failed to load community plugins.", "label-installed": "Installed", "button-install": "Install", "button-enable": "Enable", "button-disable": "Disable", "button-copy-share-link": "Copy share link", "button-donate": "Donate", "label-no-results-found": "No results found.", "msg-failed-to-load-manifest": "Failed to load plugin manifest.", "label-version": "Version: {{version}}", "label-currently-installed-version": " (currently installed: {{version}})", "label-by-author": "By ", "label-repository": "Repository: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "This plugin does not support your device.", "button-update": "Update", "label-no-readme": "This plugin did not provide a README file.", "msg-installing-plugin": "Installing plugin \"{{name}}\"...", "msg-failed-to-install-plugin": "Failed to install plugin \"{{name}}\".", "msg-successfully-installed-plugin": "Successfully installed plugin \"{{name}}\".", "label-installed-plugins": "Installed plugins", "button-reload-plugins": "Reload plugins", "msg-reloaded-third-party-plugins": "Reloaded third-party plugins.", "label-uninstall": "Uninstall", "label-uninstall-plugin": "Uninstall plugin", "label-uninstall-plugin-confirmation": "Are you sure you want to uninstall this plugin? This will delete the folder of the plugin.", "button-open-plugins-folder": "Open plugins folder", "button-check-for-updates": "Check for updates", "button-update-all-plugins": "Update all", "label-current-plugins": "Current plugins", "label-currently-installed": "You currently have {{count}} plugin installed.", "label-currently-installed_plural": "You currently have {{count}} plugins installed.", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Show a message with how long each plugin took to initialize when starting the app.", "msg-no-updates-found": "No plugin updates found.", "msg-updates-found": "Found {{count}} plugin to update.", "msg-updates-found_plural": "Found {{count}} plugins to update.", "msg-update-plugin": "Update to version {{version}}", "option-search-installed-plugin": "Search installed plugins", "option-search-installed-plugin-description": "Filter installed plugins by name or description.", "placeholder-search-installed-plugin": "Search installed plugins...", "show-installed-only": "Show installed only", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "Showing {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Mobile toolbar", "option-configure-quick-action": "Configure mobile Quick Action", "option-configure-quick-action-description": "Configure which command to trigger when pull down from the top. The current command is set to \"{{command}}\".", "button-configure": "Configure", "placeholder-select-quick-action": "Select Quick Action...", "manage-toolbar-options": "Manage toolbar options", "option-internal-link": "Add internal link", "option-internal-embed": "Add embed", "option-tag": "Add tag", "option-heading": "Toggle heading", "option-strikethrough": "Toggle strikethrough", "option-highlight": "Toggle highlight", "option-code": "Toggle code", "option-blockquote": "Toggle blockquote", "option-markdown-link": "Add Markdown link", "option-bullet-list": "Toggle bullet list", "option-numbered-list": "Toggle numbered list", "option-indent-list": "Indent list item", "option-unindent-list": "Unindent list item", "option-undo": "Undo", "option-redo": "Redo", "option-move-caret-up": "Move caret up", "option-move-caret-down": "Move caret down", "option-move-caret-left": "Move caret left", "option-move-caret-right": "Move caret right", "option-first-line": "Go to first line", "option-last-line": "Go to last line", "option-toggle-keyboard": "Toggle keyboard", "option-configure-toolbar": "Configure mobile toolbar", "option-added-options": "Added options", "option-more-toolbar-options": "More toolbar options", "option-attach": "Insert attachment", "option-add-command": "Add global command", "option-add-command-description": "Select any global command to add to the toolbar." } }, "editor": { "search": { "placeholder-find": "Find", "placeholder-replace": "Replace", "label-previous": "Prev", "label-next": "Next", "label-all": "All", "label-exit-search": "Exit search", "label-replace": "Replace", "label-replace-all": "Replace all" }, "link-suggestion": { "label-type-hash": "Type #", "label-link-heading": "to link heading", "label-type-block": "Type ^", "label-link-block": "to link blocks", "label-type-pipe": "Type |", "label-change-display-text": "to change display text", "label-no-match-found": "No match found" }, "spellcheck": { "no-suggestion": "No suggestions...", "add-to-dictionary": "Add to dictionary" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "No heading", "label-heading-level": "Heading {{level}}" }, "print-modal": { "title": "Export to PDF", "caption": "Export \"{{filename}}\" to PDF with the setting below.", "setting-page-size": "Page size", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Include file name as title", "setting-landscape": "Landscape", "setting-margin": "Margin", "setting-margin-default": "Default", "setting-margin-minimal": "Minimal", "setting-margin-none": "None", "setting-downscale-percent": "Downscale percent", "button-export-to-pdf": "Export to PDF" }, "link-popover": { "tooltip-follow-link": "Follow link", "tooltip-open-link": "Open link", "tooltip-search-tag": "Search tag" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Open in default app", "empty-sidebar": "The sidebar is empty, try dragging a pane here.", "sidebar-expand": "Expand", "sidebar-collapse": "Collapse", "msg-fail-to-save-file": "Failed to save file \"{{filepath}}\". {{message}}.", "no-file": "No file", "msg-file-changed": "\"{{file}}\" has been modified externally, merging changes automatically.", "switch-vault": "Open another vault", "help": "Help", "settings": "Settings", "drag-to-rearrange": "Drag to rearrange", "msg-switched-to-read": "Switched default view mode to reading view.", "msg-switched-to-edit": "Switched default view mode to editor.", "msg-upgrade-installer": "To use this feature, please re-install with latest installer available from our website.", "tooltip-restore-default-settings": "Restore default settings", "label-copy": "Copy to clipboard", "copied_generic": "Copied to your clipboard", "copied": "{{item}} copied to your clipboard", "url": "Url", "msg-open-file-through-uri": "Opened file \"{{path}}\"", "msg-file-not-found-through-uri": "File \"{{name}}\" not found.", "delete-action-short-name": "Delete", "msg-indexing": "Obsidian is indexing your vault...\nThis should only happen once.\nSome functionality may not be available until this is complete.", "msg-indexing-complete": "Indexing complete.", "msg-sandbox-vault": "This is a sandbox vault.\nChanges you make in this vault will be lost.", "label-enter-to-create": "Enter to create", "label-update-available": "Update Available", "label-debug-info": "Debug info", "button-learn-more": "Learn more", "button-not-now": "Not now", "button-add": "Add", "button-manage": "Manage", "label-new-tab": "New tab", "msg-tab-busy": "This tab is currently busy, please try again later", "empty-state": { "no-file-open": "No file is open", "create-new-file": "Create new file", "go-to-file": "Go to file", "see-recent-files": "See recent files", "close": "Close", "unknown-pane-title": "Plugin no longer active", "unknown-pane-desc": "The plugin that created this pane ({{type}}) has gone away" }, "menu": { "edit-view": "Edit (Ctrl/Cmd+Click to edit in new pane)", "read-view": "Current view: reading", "switch-to-edit-view": "Click to edit", "switch-to-read-view": "Click to read", "mod-click-open-new-tab": "{{key}}+Click to open in new tab", "find": "Find...", "replace": "Replace...", "edit": "Edit", "preview": "Preview", "more-options": "More options", "close": "Close", "close-others": "Close others", "close-right": "Close tabs to the right", "pin": "Pin", "unpin": "Unpin", "unlink-tab": "Unlink tab", "link-tab": "Link with tab...", "toggle-source-mode": "Source mode", "toggle-reading-view": "Reading view", "delete-file": "Delete file", "create-file": "Create this file", "open-link": "Open link", "open-in-new-tab": "Open in new tab", "open-to-the-right": "Open to the right", "copy-url": "Copy url", "close-current-tab": "Close current tab", "copy": "Copy", "cut": "Cut", "paste": "Paste", "paste-as-plain-text": "Paste as plain text", "select-all": "Select all", "rename-heading": "Rename this heading...", "rename-blockid": "Rename this block ID...", "open-in-new-window": "Open in new window", "move-to-new-window": "Move to new window", "open-in-browser": "Open in browser", "stack-tabs": "Stack tabs", "unstack-tabs": "Unstack tabs" }, "tooltip": { "click-to-expand": "Click to expand", "click-to-collapse": "Click to collapse", "alias": "Alias", "not-created-yet": "Not created yet, select to create" }, "start-screen": { "label-version": "Version", "option-open-folder-as-vault": "Open folder as vault", "option-open-folder-as-vault-description": "Choose an existing folder of Markdown files.", "option-create-vault": "Create new vault", "option-create-vault-description": "Create a new Obsidian vault under a folder.", "option-connect-obsidian-sync": "Connect to Obsidian Sync", "option-connect-obsidian-sync-description": "Set up a synced vault with existing remote vault.", "option-new-vault-name": "Vault name", "option-new-vault-name-description": "Pick a name for your awesome vault.", "option-new-vault-location": "Location", "option-new-vault-location-description": "Pick a place to put your new vault.", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Reveal vault in system explorer", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "Rename vault...", "msg-error-rename-exists": "There is already a vault with this name.", "msg-error-nested": "Cannot move vault into a subfolder of itself.", "msg-error-rename-open": "Can't rename a currently open vault.", "msg-rename-failed": "Failed to rename vault.", "msg-rename-success": "Successfully renamed vault.", "option-move-vault": "Move vault...", "msg-move-select-dest": "Select destination folder", "msg-error-move-exists": "There is already a vault at the destination.", "msg-error-move-open": "Can't move a currently open vault.", "msg-move-failed": "Failed to move vault.", "msg-move-success": "Successfully moved vault.", "option-remove": "Remove from list", "button-quick-start": "Quick start", "button-open": "Open", "button-browse": "Browse", "button-connect": "Connect", "button-create-vault": "Create", "button-back": "Back", "msg-empty-vault-name": "Vault name cannot be empty.", "msg-invalid-folder": "Please pick a valid folder.", "msg-failed-to-create-vault": "Failed to create vault.", "msg-failed-to-create-vault-at-location": "Could not create vault at the given location. Please double check the location and permission.", "msg-error-failed-to-open-vault": "Failed to open.", "msg-error-remove-current-open-vault": "Can't remove a currently open vault.", "option-get-help": "Get Help", "option-user-email": "Email", "placeholder-your-email": "Your email...", "option-user-password": "Password", "placeholder-your-password": "Your password...", "button-sign-in": "Sign in", "button-setup": "Setup", "option-connect-vault-desc": "Create a synced vault on this device.", "tooltip-own-vault": "This is a remote vault owned by you.", "tooltip-shared-vault": "This is a remote vault shared with you." }, "drag-and-drop": { "insert-link-here": "Insert link here", "insert-links-here": "Insert links here", "move-into-folder": "Move into \"{{folder}}\"", "star-this-file": "Star this file", "star-these-files": "Star these files", "open-in-this-tab": "Open in this tab", "open-as-tab": "Open as new tab" }, "window": { "maximize": "Maximize", "minimize": "Minimize", "restore-down": "Restore down", "close-window": "Close window", "go-back": "Go back", "go-forward": "Go forward" }, "start-up": { "loading-obsidian": "Loading Obsidian...", "obsidian-load-error": "An error occurred while loading Obsidian.", "button-reload-app": "Reload app", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "Open another vault", "loading-components": "Loading components...", "loading-plugins": "Loading plugins...", "loading-vault": "Loading vault...", "msg-failed-to-load-vault": "Failed to load vault: ", "loading-cache": "Loading cache...", "loading-workspace": "Loading workspace..." }, "mobile": { "action-import": "Import into vault", "action-choose-file-to-insert": "Choose a file to insert", "action-insert-text-into-file": "Insert text into {{filename}}", "action-insert-link-into-file": "Insert link into {{filename}}", "msg-importing": "Importing...", "msg-import-success": "Import success", "msg-failed-to-import-file": "Failed to import file {{filename}}", "msg-back-again-to-exit": "Press back again to exit." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "Save current file", "follow-cursor-link": "Follow link under cursor", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "Toggle pin", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "Navigate back", "navigate-forward": "Navigate forward", "use-dark-mode": "Use dark mode", "use-light-mode": "Use light mode", "change-theme": "Change theme", "search-current-file": "Search current file", "search-replace-current-file": "Search & replace in current file", "open-settings": "Open settings", "open-help": "Open help", "toggle-edit": "Toggle editing/reading view", "toggle-source-mode": "Toggle Live Preview/Source mode", "delete-current-file": "Delete current file", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "Toggle left sidebar", "toggle-right-sidebar": "Toggle right sidebar", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "Focus on editor", "toggle-fold": "Toggle fold on the current line", "fold-all": "Fold all headings and lists", "unfold-all": "Unfold all headings and lists", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "Swap line up", "swap-line-down": "Swap line down", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "Toggle bold for selection", "toggle-italics": "Toggle italics for selection", "toggle-highlight": "Toggle highlight for selection", "toggle-comments": "Toggle comments for selection", "insert-link": "Insert link", "toggle-spellcheck": "Toggle spellcheck", "delete-paragraph": "Delete paragraph", "toggle-checklist": "Toggle checklist status", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "Edit file title", "copy-path": "Copy file path", "copy-url": "Copy obsidian url", "export-pdf": "Export to PDF", "reload": "Reload app without saving", "undo-close-tab": "Undo close tab", "context-menu": "Show context menu under cursor", "show-debug-info": "Show debug info", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "Toggle edit/preview mode", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "This will affect {{links}} in {{files}}.", "msg-updated-links": "Updated {{links}} in {{files}}.", "label-update-links": "Update links", "label-confirm-update-link-to-file": "Do you want to update internal links that link to this file?", "button-always-update": "Always update", "button-just-once": "Just once", "button-do-not-update": "Do not update", "label-confirm-deletion": "Are you sure you want to delete \"{{filename}}\"?", "label-move-to-system-trash": "It will be moved to your system trash.", "label-move-to-vault-trash": "It will be moved to your Obsidian trash, which is located in the \".trash\" hidden folder in your vault.", "label-permanent-delete": "The file will be permanent deleted.", "label-non-empty-folder": "This folder is not empty.", "label-delete-folder-warning": "If you continue, all files inside this folder will be deleted.", "label-delete-folder": "Delete folder", "button-delete": "Delete", "button-delete-do-not-ask-again": "Delete and don't ask again", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "There are currently {{links}} pointing to this note.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "Delete file", "button-manage": "Manage", "button-cancel": "Cancel", "button-done": "Done", "button-save": "Save", "button-stop": "Stop", "button-continue": "Continue", "preparing-pdf": "Preparing PDF...", "label-rename-file": "Rename file", "label-new-name": "New name", "msg-rename-success": "Successfully renamed file.", "label-rename-heading": "Rename heading", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "Plugins", "file-explorer": { "name": "File explorer", "desc": "See all the files in your vault.", "action-open": "Open file explorer", "action-show": "Show file explorer", "action-create-note": "Create new note", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "New note", "action-new-folder": "New folder", "action-change-sort": "Change sort order", "action-reveal-file": "Reveal file in file explorer", "action-reveal-active-file": "Reveal active file in file explorer", "command-move-file": "Move file to another folder", "action-move-file": "Move file to...", "action-move-folder": "Move folder to...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "Type a folder", "label-no-folders": "No folders found.", "instruction-navigate": "to navigate", "instruction-move": "to move", "instruction-dismiss": "to dismiss", "label-sort-a-to-z": "Sort by file name (A to Z)", "label-sort-z-to-a": "Sort by file name (Z to A)", "label-sort-new-to-old": "Sort by edit time (new to old)", "label-sort-old-to-new": "Sort by edit time (old to new)", "label-sort-created-old-to-new": "Created time (old to new)", "label-sort-created-new-to-old": "Created time (new to old)", "menu-opt-new-note": "New note", "menu-opt-new-folder": "New folder", "menu-opt-set-attachment-folder": "Set as attachment folder", "menu-opt-rename": "Rename", "menu-opt-delete": "Delete", "menu-opt-make-copy": "Make a copy", "msg-invalid-characters": "File name cannot contain any of the following characters: ", "msg-unsafe-characters": "Links will not work with file names containing any of these characters: ", "msg-file-already-exists": "There's already a file with the same name", "msg-empty-file-name": "File name cannot be empty.", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "Last modified at {{time}}", "tooltip-created-time": "Created at {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Move", "label-untitled-file": "Untitled", "label-untitled-folder": "Untitled", "msg-set-attachment-folder": "Attachments will be saved to \"{{path}}\" from now on." }, "search": { "name": "Search", "desc": "Search for keyword in all the notes.", "action-open-search": "Search in all files", "label-collapse-results": "Collapse results", "label-match-case": "Match case", "label-explain-search-term": "Explain search term", "label-more-context": "Show more context", "prompt-start-search": "Type to start search...", "label-match-text": "Matches text: ", "label-match-regex": "Matches regex: ", "label-match-exact-text": "Contains exact text: ", "label-match-all": "Match all of: ", "label-match-any": "Match any of: ", "label-excluding": "Excluding: ", "label-case-sensitive": "Case sensitive", "label-case-insensitive": "Case insensitive", "label-match-file-path": "Match file path: ", "label-match-file-name": "Match file name: ", "label-match-content": "Match file content: ", "label-match-task": "Match task: ", "label-match-task-todo": "Match task (todo): ", "label-match-task-done": "Match task (done): ", "label-match-line": "Match line: ", "label-match-block": "Match block: ", "label-match-section": "Match section: ", "label-match-tag": "Match tag: ", "label-no-matches": "No matches found.", "matches-with-count": "... and {{count}} more match.", "matches-with-count_plural": "... and {{count}} more matches.", "label-copy-search-results": "Copy search results", "button-copy-results": "Copy results", "msg-successfully-copied": "Results copied to your clipboard.", "option-show-path": "Show path", "option-show-path-description": "Display full path of the file rather than just the file name.", "option-link-style": "Link style", "option-link-style-description": "Optionally turn each file result in to a link.", "option-choice-link-style-none": "None", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Markdown link", "option-list-prefix": "List prefix", "option-list-prefix-description": "Optionally add a list item prefix to each file result.", "option-choice-list-style-none": "None", "option-choice-list-style-dash": "Dash (-)", "option-choice-list-style-asterisk": "Asterisk (*)", "option-choice-list-style-numbered": "Numbered", "tooltip-clear-search": "Clear search", "label-search-options": "Search options", "tooltip-read-more": "Read more", "label-history": "History", "tooltip-clear-history": "Clear search history", "label-path-option-description": "match path of the file", "label-file-name-option-description": "match file name", "label-tag-option-description": "search for tags", "label-line-option-description": "search keywords on same line", "label-section-option-description": "search keywords under same heading", "menu-opt-search-for": "Search for \"{{keyword}}\"" }, "quick-switcher": { "name": "Quick switcher", "desc": "Jump to any files without leaving your keyboard. Ctrl/Cmd+O to activate.", "short-name": "Switcher", "action-open": "Open quick switcher", "instruction-navigate": "to navigate", "instruction-open": "to open", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "to create", "instruction-dismiss": "to dismiss", "label-no-note-create-new": "No notes found. Enter to create a new one.", "prompt-type-file-name": "Type file to switch to or create...", "label-enter-to-create": "Enter to create", "tooltip-not-created-yet": "Not created yet, select to create", "option-show-existing-only": "Show existing only", "option-show-existing-only-description": "Only show results from existing files. Links to files that are not yet created will be hidden.", "option-show-attachments": "Show attachments", "option-show-attachments-desc": "Show attachment files like images, videos, and PDFs.", "option-show-all-file-types": "Show all file types", "option-show-all-file-types-desc": "Show all files including ones that Obsidian can't open. The file will be opened with the default app for that file type." }, "graph-view": { "name": "Graph view", "desc": "See a graph overview of which notes link to which.", "action-open": "Open graph view", "action-open-local": "Open local graph", "action-copy-screenshot": "Copy screenshot", "tab-title": "Graph of {{displayText}}", "label-filters": "Filters", "prompt-filter-nodes": "Search files...", "option-depth": "Depth", "option-depth-description": "Show nodes this number of links away", "option-neighbor-links": "Neighbor links", "option-neighbor-links-description": "Show links between neighbors.", "option-forelinks": "Outgoing links", "option-forelinks-description": "Show links to other files", "option-backlinks": "Incoming links", "option-backlinks-description": "Show links from other files", "option-show-tags": "Tags", "option-show-tags-description": "Tags are linked to the files that contain them", "option-show-attachments": "Attachments", "option-show-attachments-description": "Show attachments included by files", "option-show-existing-files-only": "Existing files only", "option-show-existing-files-only-description": "When checked, links to nonexistent files are not shown", "option-show-orphans": "Orphans", "option-show-orphans-description": "Show files that are not linked to any other file", "label-display": "Display", "option-show-arrows": "Arrows", "option-show-arrows-description": "Show arrows when zoomed in", "option-text-fade": "Text fade threshold", "option-node-size": "Node size", "option-link-thickness": "Link thickness", "label-forces": "Forces", "option-center-force": "Center force", "option-link-force": "Link force", "option-link-distance": "Link distance", "option-repel-force": "Repel force", "tooltip-open-graph-settings": "Open graph settings", "msg-screenshot-copied": "Screenshot copied to the clipboard.", "label-groups": "Groups", "placeholder-enter-query": "Enter query...", "tooltip-delete-graph": "Delete group", "button-new-group": "New group", "tooltip-click-to-change-drag-to-reorder": "Click to change color\nDrag to reorder groups", "action-timelapse": "Start graph timelapse animation", "tooltip-start-timelapse-animation": "Start timelapse animation", "button-animate-timelapse": "Animate" }, "backlinks": { "name": "Backlinks", "desc": "Show number of backlinks in the status bar.", "action-open": "Open backlinks", "action-show": "Show backlinks pane", "action-open-for-current": "Open backlinks for the current file", "action-toggle-backlinks-in-document": "Toggle backlinks in document", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "Linked mentions", "label-no-backlinks": "No backlinks found.", "label-unlinked-mentions": "Unlinked mentions", "label-show-search": "Show search filter", "label-link-button-text": "Link", "tab-title": "Backlinks for {{displayText}}", "label-no-unlinked-mentions": "No unlinked mentions found.", "ellipsis": "...", "option-backlink-in-document": "Backlink in document", "option-backlink-in-document-desc": "Show backlinks in document by default when opening new panes." }, "outgoing-links": { "name": "Outgoing Links", "desc": "Show outgoing links and detect unlinked mentions of other notes in the current note.", "action-open": "Open outgoing links", "action-show": "Show outgoing links pane", "action-open-for-current": "Open outgoing links for the current file", "tab-title": "Outgoing links from {{displayText}}", "label-links": "Links", "label-no-links": "No links found.", "label-unlinked-mentions": "Unlinked mentions", "tooltip-link-file": "Link this file", "tooltip-not-created": "Not created yet" }, "tag-pane": { "name": "Tag pane", "desc": "Displays all your tags and along with their number of occurrences.", "action-show": "Show tag pane", "label-no-tags": "No tags found.", "label-sort-by-name-a-to-z": "Tag name (A to Z)", "label-sort-by-name-z-to-a": "Tag name (Z to A)", "label-sort-by-frequency-high-to-low": "Frequency (high to low)", "label-sort-by-frequency-low-to-high": "Frequency (low to high)", "action-show-nested-tags": "Show nested tags", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "Page preview", "desc": "Preview a note when hovering an internal link. Ctrl/Cmd + hover in editor mode.", "label-empty-note": "\"{{linktext}}\" is not created yet. Click to create.", "label-source-editor": "Editor", "label-source-preview": "Preview", "label-source-search": "Search, Backlinks, and Outgoing links", "label-require-mod": "Require {{key}} to trigger page preview on hover" }, "starred": { "name": "Starred", "desc": "Star frequently used files and searches.", "action-show": "Show starred pane", "action-toggle": "Star/unstar current file", "action-toggle-search": "Star/unstar current search", "action-star": "Star", "action-unstar": "Unstar", "menu-opt-remove": "Remove", "msg-successfully-starred": "Successfully starred {{type}} \"{{title}}\".", "msg-removed-starred": "Removed starred {{type}} \"{{title}}\".", "msg-cannot-find-path": "Cannot find file at \"{{path}}\"." }, "custom-css": { "name": "Custom CSS", "desc": "Reads \"obsidian.css\" in the vault and applies it.", "setting-community-themes": "Community themes", "msg-fetching-themes": "Fetching community theme data...", "prompt-filter": "Filter...", "label-dark-theme-only": "Dark themes only", "label-light-theme-only": "Light themes only", "label-use": "Use", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "Update", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "Remove theme", "label-visit-on-github": "Visit on GitHub", "msg-load-error": "Could not load community themes, please check your network.", "msg-now-using-theme": "You're now using {{title}} as your CSS theme.", "msg-deleted-theme": "The theme {{title}} has been deleted.", "msg-updated-theme": "The theme {{title}} has been updated.", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "Command palette", "desc": "Type a command to invoke it. No need to use the UI or remember the shortcut.", "action-open": "Open command palette", "instruction-navigate": "to navigate", "instruction-use": "to use", "instruction-dismiss": "to dismiss", "label-no-commands": "No commands found.", "prompt-type-command": "Type a command...", "label-pinned-commands": "Pinned commands", "option-add-new-pin": "New pinned command", "option-add-new-pin-description": "Pinned commands will appear at the top of all commands when no search query is present." }, "markdown-format-importer": { "name": "Markdown format importer", "desc": "Convert Markdown from other apps to Obsidian format.", "action-open": "Open Markdown importer", "option-roam-tag-fixer": "Roam Research tag fixer", "option-roam-tag-fixer-description": "Converts \"#tag\" and \"#[[tag]]\" to \"[[tag]]\".", "option-roam-highlight-fixer": "Roam Research highlight fixer", "option-roam-highlight-fixer-description": "Converts \"^^highlight^^\" to \"==highlight==\".", "option-roam-todo-converter": "Roam Research TODO converter", "option-roam-todo-converter-description": "Converts \"{{[[TODO]]}}\" to \"[ ]\".", "option-bear-highlight-fixer": "Bear highlight fixer", "option-bear-highlight-fixer-description": "Converts \"::highlight::\" to \"==highlight==\".", "zettelkasten-link-fixer": "Zettelkasten link fixer", "zettelkasten-link-fixer-description": "Fixes \"[[UID]]\" links to full \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Zettelkasten link beautifier", "zettelkasten-link-beautifier-description": "Fixes \"[[UID]]\" links and also beautify them \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Warning: the importer will convert all the files in your vault, not just the current file.", "msg-override-files-warning": "Your files will be overwritten. Back up all your files before attempting conversion.", "label-start-conversion": "Start Conversion", "label-stop": "Stop", "label-go-back": "Go back", "label-done": "Done", "label-processing": "Processing...", "label-cancelling": "Cancelling...", "label-finished": "Finished!", "label-processed-files": "Processed files", "label-modified-files": "Modified files", "label-total-replacements": "Total replacements" }, "daily-notes": { "name": "Daily notes", "desc": "Open today's daily note, or create one if not present.", "short-name": "Today", "action-open": "Open today's note", "action-open-previous": "Open previous daily note", "action-open-next": "Open next daily note", "action-insert-text": "Insert text into daily note", "action-insert-link": "Insert link into daily note", "msg-fail-format": "Failed to create daily note. \"{{format}}\" is not a valid format.", "msg-fail-folder": "Failed to create daily note. Folder \"{{folderOption}}\" not found.", "msg-fail-template-file": "Failed to create daily note. Template file \"{{template}}\" not found.", "msg-no-previous": "There's no daily note before this one.", "msg-no-next": "There's no daily note after this one.", "option-date-format": "Date format", "label-refer-to-syntax": "For more syntax, refer to: ", "label-syntax-link": "format reference", "label-syntax-live-preview": "Here is what it will look like: ", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new daily note.", "option-template": "Template file location", "option-template-description": "The file path to use as template.", "option-open-on-start": "Open daily note on startup", "option-open-on-start-description": "Open your daily note automatically whenever you open this vault." }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Random note", "desc": "Opens a random note. Useful for reviewing and discovering.", "short-name": "Random", "action-open": "Open random note" }, "outline": { "name": "Outline", "desc": "Displays the outline of the current file or linked pane.", "action-open": "Open outline", "action-show": "Show outline pane", "action-open-for-current": "Open outline of the current file", "tab-title": "Outline of {{displayText}}", "label-no-headings": "No headings found." }, "word-count": { "name": "Word count", "desc": "Show word count in the status bar." }, "slides": { "name": "Slides", "desc": "Present from Markdown. Use \"---\" to separate slides.", "action-start": "Start presentation" }, "audio-recorder": { "name": "Audio recorder", "desc": "Record audio and save as attachment.", "action-start": "Start recording audio", "action-stop": "Stop recording audio", "action-toggle": "Start/stop recording", "msg-access-denied": "Microphone access was denied, please enable it from the preference pane.", "msg-pending-grant": "Please grant microphone permission to start recording.", "msg-no-microphone": "No microphone is connected." }, "open-with-default-app": { "name": "Open in default app", "desc": "Add button to open current file in the default app.", "action-open-file": "Open in default app", "action-open-file-mobile": "Share", "action-show-in-folder": "Show in folder", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "Templates", "desc": "Insert template content from a folder of template files.", "action-insert": "Insert template", "action-insert-current-date": "Insert current date", "action-insert-current-time": "Insert current time", "option-template-folder-location": "Template folder location", "option-template-folder-location-description": "Files in this folder will be available as templates.", "option-template-date-format": "Date format", "option-template-date-format-description": "{{date}} in the template file will be replaced with this value.", "option-template-date-format-description2": "You can also use {{date:YYYY-MM-DD}} to override the format once.", "option-template-time-format": "Time format", "option-template-time-format-description": "{{time}} in the template file will be replaced with this value.", "option-template-time-format-description2": "You can also use {{time:HH:mm}} to override the format once.", "instruction-navigate": "to navigate", "instruction-insert": "to insert template", "instruction-dismiss": "to dismiss", "msg-no-templates-found": "No templates found", "msg-fail-invalid-folder": "Failed to list templates. Template folder is invalid.", "msg-fail-folder-not-found": "Failed to list templates. Folder \"{{folderOption}}\" not found.", "prompt-type-template": "Type name of a template..." }, "translucency": { "name": "Translucent window", "desc": "Turn on translucency effect to enhance a sense of depth. Best used with dark mode. Not supported on Linux." }, "slash-command": { "name": "Slash commands", "desc": "Enable the ability to trigger slash commands in the editor by typing the forward slash." }, "editor-status": { "name": "Editor status", "desc": "Adds a status bar item to show and change the current editor mode.", "read": "Reading", "edit-source": "Source mode", "edit-live-preview": "Live Preview" }, "publish": { "name": "Publish", "desc": "Publish your notes through Obsidian Publish.", "action-publish-changes": "Publish changes", "label-no-internet-access": "You need access to the internet to publish changes.", "label-publish-service-description": "Obsidian Publish is an add-on paid service that lets you publish your notes online directly from Obsidian.", "label-please-login": "To start publishing, please log in or create a new Obsidian account.", "label-no-publish-subscription": "You do not have an Obsidian Publish subscription yet.", "button-purchase": "Purchase", "label-manage-sites": "Manage sites", "label-no-sites": "You don't have any sites.", "button-choose": "Choose", "tooltip-edit-site-id": "Edit site ID", "tooltip-delete-site": "Delete site", "label-delete-site-confirmation": "Are you sure you want to delete this site?", "label-delete-site-details": "This will immediately and permanently delete your site.", "label-confirm-delete-site": "Confirm delete site \"{{site}}\"", "option-site-id": "Site ID", "option-site-id-description": "Your site will be at https://publish.obsidian.md/{site id}. You can change this later. Only lower case letters, numbers, and dashes are allowed.", "option-site-id-placeholder": "Pick a site ID", "button-create": "Create", "msg-invalid-site-id": "Site ID can only contain lowercase letters, numbers, and dashes.", "msg-site-id-in-use": "This site ID is in use, please try another one.", "msg-create-site-issue": "That was an issue when creating your site.", "label-site-options": "Site options", "option-site-general": "General", "option-site-components": "Components", "option-site-appearance": "Appearance", "option-site-reading-experience": "Reading experience", "option-site-misc": "Other site settings", "option-site-name": "Site name", "option-site-name-description": "Name of your published site. It will show up in the page title of your site.", "option-site-name-placeholder": "Name of your site", "option-home-page-file": "Homepage file", "option-home-page-file-description": "The first page the user sees when landing on your published site", "option-home-page-file-placeholder": "Pick a published file", "option-logo": "Logo", "option-logo-description": "Pick an image file as your site logo.", "option-logo-placeholder": "Any any uploaded image in your vault...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "Theme", "option-theme-description": "Choose default color scheme for your site.", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "Show navigation", "option-show-navigation-description": "Display a list of all published pages on the left side of your published site.", "option-show-search": "Show search bar", "option-show-search-description": "Display a search bar at top of the navigation that lets the visitors search pages and headings on your site.", "option-show-graph": "Show graph view", "option-show-graph-description": "Display a small local graph on each page.", "option-show-outline": "Show table of contents", "option-show-outline-description": "Display the outline of headings on each page.", "option-show-backlinks": "Show backlinks", "option-show-backlinks-description": "Show backlink section at the end of each page.", "option-sliding-window-mode": "Use sliding windows", "option-sliding-window-mode-description": "Open pages in new panes to the right. Allows scrolling through panes horizontally.", "option-hover-preview-file": "Show hover preview", "option-hover-preview-file-description": "Display page preview when hovering links.", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "Readable line length", "option-readable-line-length-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-site-password": "Passwords", "option-site-password-description": "Restrict access to your site with passwords.", "option-google-analytics": "Google Analytics tracking code", "option-google-analytics-description": "Configure Google Analytics for your site. Only available for visitors from your custom domain URL. Please check with your local laws and regulations first.", "button-manage-passwords": "Manage", "button-save-site-settings": "Save site settings", "msg-updated-options": "Updated options for your site.", "button-go-back": "Back", "label-publishing-to": "Publishing to", "tooltip-switch-site": "Switch site", "button-add-linked": "Add linked", "tooltip-add-linked": "Add all files that are linked by currently selected items", "msg-added-linked-files": "{{count}} linked file has been added.", "msg-added-linked-files_plural": "{{count}} linked files have been added.", "tooltip-open-site-options": "Change site options", "label-no-changes-detected": "No changes were detected.", "label-changed-files-to-be-published": "Changes", "label-unchanged-files-already-published": "Unchanged (select to delete)", "label-file-selected": " selected", "button-select-all-files": "Select all", "button-deselect-all-files": "Deselect all", "label-new-files-to-be-published": "New", "button-publish": "Publish", "msg-no-permission-to-publish-to-site": "You do not have permissions to publish to the current site.", "msg-select-at-least-one-file": "Please select at least one file.", "label-upload-changes": "Upload changes", "button-done": "Done", "button-stop": "Stop", "label-status-uploading": "Uploading", "label-status-to-publish": "To publish", "label-status-to-delete": "To delete", "label-status-published": "Published", "label-status-deleted": "Deleted", "label-status-failed": "Failed", "label-status-cancelled": "Cancelled", "button-change": "Change", "label-clear-cache": "It takes up to a few minutes for the changes to show up on your site. If you do not see your latest changes, try clearing the cache in your browser.", "label-visit-site": "You can visit your site here: ", "msg-something-went-wrong": "Something went wrong. Please check the developer console for details.", "msg-network-error": "A network error occurred. ", "label-manage-passwords": "Manage passwords", "label-add-password": "Add password", "action-new-password": "New password", "label-no-password": "Your site currently does not have any passwords. Anyone can visit it.", "label-have-password": "Your site is password protected. If you have multiple passwords, visitors can access your site by entering any of them.", "option-password-name": "Password", "option-password-desc": "A hash of your password will be stored securely. Once the password is set, it cannot be revealed in plaintext.", "option-password-placeholder": "Your password", "option-nickname-name": "Nickname (optional)", "option-nickname-desc": "Set a nickname to remind yourself what or who the password is for.", "action-add-password": "Add this password", "label-untitled-password": "Untitled password", "label-password-created-time": "Created {{time}}", "msg-added-new-password": "Added new password.", "option-custom-domain": "Custom domain", "option-custom-domain-desc": "Use your own domain rather than the https://publish.obsidian.md/{site id} URL.", "option-noindex": "Disallow search engine indexing", "option-noindex-desc": "Prevent search engines from indexing your site.", "button-configure": "Configure", "label-configure-custom-domain": "Configure custom domain", "option-custom-url-name": "Custom URL", "option-custom-url-desc": "The URL that your site will be located at.", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "Redirect to your custom domain", "option-custom-url-redirect-desc": "Redirect visitors on publish.obsidian.md/id to your custom domain.", "button-update-custom-domain": "Update domain setting", "label-custom-domain-instructions": "Please refer to our {{link}} on our help site for more information.", "label-custom-domain-link-name": "custom domain setup guide", "label-site-usage": "You're using {{site}} out of your {{limit}}.", "button-add-more-sites": "Buy more sites", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "Workspaces", "desc": "Save and load workspace layout.", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "Save", "button-load": "Load", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "Sync", "desc": "Synchronize your files through Obsidian Sync.", "action-view-version-history": "View version history", "label-load-more": "Load more", "label-show-diff": "Show diff", "label-copy-to-clipboard": "Copy to clipboard", "label-restore-this-version": "Restore this version", "msg-already-latest-version": "This version is already the latest version.", "msg-restored-version": "Successfully restored version from {{time}}", "label-file-deleted": "This file was deleted", "label-no-earlier-version": "There was no earlier versions of this file.", "label-empty-file": "Empty", "label-setting-files": "Setting files", "label-deleted-files": "Deleted files", "label-version-history": "Version history", "label-click-to-see-history": "Click on a deleted file to see its history.", "label-create-remote-vault": "Create remote vault", "msg-please-enter-password": "Please enter a password.", "msg-vault-name-cannot-be-empty": "Vault name cannot be empty.", "msg-successfully-created-vault": "Successfully create remote vault \"{{name}}\".", "label-remote-vault-explanation": "Remote vaults securely synchronize your vault between devices.", "option-vault-name": "Vault name", "option-vault-name-desc": "Helps you remember what this vault is for.", "option-vault-name-placeholder": "My awesome vault", "option-use-custom-encryption-password": "Customize end-to-end encryption password", "option-use-custom-encryption-password-desc": "If you turn this off, we will securely manage an encryption key for you.", "option-use-custom-encryption-password-desc-warning": "This option cannot be changed later.", "option-encryption-password": "Encryption password", "option-encryption-password-desc": "This password cannot be changed later.", "option-encryption-password-desc-warning": "If you forget this password, any remote data will remain unusable forever.", "option-encryption-password-desc-2": "This does not affect your local data.", "option-encryption-password-placeholder": "Your password", "label-enter-encryption-password": "Enter encryption password", "button-unlock-vault": "Unlock vault", "msg-verified-password": "Successfully verified your password.", "label-remote-vaults": "Your remote vaults", "label-vault-created-time": "Created {{time}}", "tooltip-delete-remote-vault": "Delete", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "Confirm delete vault", "label-confirm-delete-remote-vault-question": "Are you sure you want to delete this remote vault?", "label-confirm-delete-remote-vault-result": "All data on our server, including version history, will be deleted. Your local files will stay intact.", "label-confirm-delete-remote-vault-warning": "This action is permanent and irreversible.", "msg-remote-vault-deleted": "{{name}} has been deleted.", "button-connect-to-remote-vault": "Connect", "button-disconnect-from-remote-vault": "Disconnect", "label-not-remote-vaults": "You don't have any remote vaults.", "button-create-new-remote-vault": "Create new vault", "label-sync-log": "Sync log", "options-only-show-errors": "Errors only", "options-only-show-errors-desc": "Only show errors and hide other log items.", "button-copy-sync-log": "Copy sync log", "msg-successfully-copied-sync-log": "Successfully copied sync log.", "button-retry": "Retry", "button-purchase-subscription": "Purchase", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "Choose", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "Sync status", "option-sync-status-desc-paused": "Obsidian Sync is currently paused.", "option-sync-status-desc-running": "Obsidian Sync is currently running.", "option-device-name": "Device name", "option-device-name-desc": "This name will be displayed in the sync log. Leave empty to use the default name.", "button-resume": "Resume", "button-pause": "Pause", "option-view-deleted-files": "Deleted files", "option-view-deleted-files-desc": "View and restore deleted files.", "option-sync-log": "Sync activity", "option-sync-log-desc": "View recent sync activities for debugging.", "button-view": "View", "button-bulk-restore": "Bulk restore", "button-restore-selected-files": "Restore selected files", "msg-restoring": "Restoring...", "msg-restoring-complete": "Restore complete: {{succeeded}} succeeded and {{failed}} failed.", "option-over-size": "Vault size over limit", "option-over-size-desc": "Your vault is at {{size}} out of {{limit}}.", "msg-largest-files": "View largest files", "msg-largest-files-desc": "These are the remote files that are taking the most space. After deleting attachments, use the purge button to free up remote vault space.", "button-purge-remote": "Purge", "tooltip-purge-remote": "Permanently purge deleted attachments from remote vault to save space.", "msg-purge-complete": "Purge complete.", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "Selective sync", "option-excluded-folders": "Excluded folders", "option-excluded-folder-desc": "Prevent certain folders from being synced.", "option-currently-excluded-folders": " These folders currently excluded:", "button-manage-excluded-folders": "Manage", "option-sync-image": "Sync images", "option-sync-image-desc": "Sync image files with these extensions: {{extensions}}.", "option-sync-audio": "Sync audio", "option-sync-audio-desc": "Sync audio files with these extensions: {{extensions}}.", "option-sync-video": "Sync videos", "option-sync-video-desc": "Sync video files with these extensions: {{extensions}}.", "option-sync-pdf": "Sync PDFs", "option-sync-pdf-desc": "Sync PDF files.", "option-sync-unsupported": "Sync all other types", "option-sync-unsupported-desc": "Sync unsupported file types.", "option-vault-config-sync": "Vault configuration sync", "option-view-config-files": "Settings version history", "option-view-config-files-desc": "View and restore version history of setting files.", "option-sync-app": "Main settings", "option-sync-app-desc": "Enable to sync editor settings, files & links settings, custom hotkeys, etc.", "option-sync-appearance": "Appearance settings", "option-sync-appearance-desc": "Sync appearance settings like dark mode, active theme, and enabled snippets.", "option-sync-appearance-data": "Themes and snippets", "option-sync-appearance-data-desc": "Sync downloaded themes and snippets. Whether they are enabled depends on the previous setting.", "option-sync-hotkey": "Hotkeys", "option-sync-hotkey-desc": "Sync custom hotkeys.", "option-sync-core-plugin": "Active core plugin list", "option-sync-core-plugin-desc": "Sync which core plugins are enabled.", "option-sync-core-plugin-data": "Core plugin settings", "option-sync-core-plugin-data-desc": "Sync core plugin settings.", "option-sync-community-plugin": "Active community plugin list", "option-sync-community-plugin-desc": "Sync which community plugins are enabled.", "option-sync-community-plugin-data": "Installed community plugins", "option-sync-community-plugin-data-desc": "Sync installed community plugins (.js, .css, and manifest.json files) and their settings.", "label-sync-introduction": "Obsidian Sync is Obsidian's add-on sync service with end-to-end encryption and version history.", "label-account-required": "To start syncing, please log in or create a new Obsidian account.", "button-sign-up": "Sign up", "button-log-in": "Log in", "label-manage-excluded-folders": "Manage excluded folders", "label-number-of-folders-excluded": "{{folders}} are currently excluded from being synced.", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "Setup connection", "label-now-connected-to-vault": "You're now connected to \"{{name}}\".", "button-start-syncing": "Start syncing", "label-confirm-merge-vault": "Confirm Merge Vault", "msg-vault-has-notes": "Your local vault already contains some notes.", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "File recovery", "desc": "Let you restore recent snapshots to recover from accidental data loss. Snapshots are only saved for Markdown files.", "action-open": "Open saved snapshots", "option-interval": "Snapshot interval", "option-interval-description": "Minimal interval in minutes between two snapshots.", "option-keep": "History length", "option-keep-description": "Length in days snapshots is kept for.", "option-open-history": "Snapshots", "option-open-history-description": "View and restore saved snapshots.", "button-view-snapshots": "View", "option-clear": "Clear history", "option-clear-description": "Wipe all snapshots.", "button-clear-history": "Clear", "label-clear-warning": "Are you sure you want to delete all snapshots? Note that only snapshots will be removed. All files inside your vault will not be affected.", "msg-clear-complete": "Snapshots cleared.", "label-no-history-found": "No snapshots found.", "placeholder-choose-file": "Choose a file...", "label-select-file": "Please select a file on the left to view snapshots." }, "note-composer": { "name": "Note composer", "desc": "Merge, split, and refactor notes.", "option-confirm-file-merge": "Confirm file merge", "option-confirm-file-merge-description": "Prompt before merge two files.", "option-split-replacement-text": "Text after extraction", "option-split-replacement-text-description": "What to show in place of the selected text after extracting it.", "option-choice-split-replacement-text-link": "Link to new file", "option-choice-split-replacement-text-embed": "Embed new file", "option-choice-split-replacement-text-none": "None", "option-template-file": "Template file location", "option-template-file-description": "Template file to use when merging or extracting. Available variables: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Merge current file with another file...", "action-merge-file": "Merge entire file with...", "label-no-files": "No files found.", "instruction-navigate": "to navigate", "instruction-merge": "to merge", "instruction-create-new": "to create new", "instruction-merge-at-top": "to merge at top", "instruction-dismiss": "to dismiss", "prompt-select-file-to-merge": "Select file to merge into...", "label-merge-file": "Merge file", "label-confirm-file-merge": "Are you sure you want to merge \"{{file}}\" into \"{{destination}}\"? \"{{file}}\" will be deleted.", "button-merge": "Merge", "button-merge-do-not-ask-again": "Merge and don't ask again", "command-split-file": "Extract current selection...", "command-extract-heading": "Extract this heading...", "instruction-append": "to move to bottom", "instruction-prepend": "to move to top", "msg-fail-to-fetch-template": "Failed to fetch template file: \"{{template}}\" not found.", "msg-fail-to-find-heading": "Failed to find heading" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} word", "word-with-count_plural": "{{count}} words", "character-with-count": "{{count}} character", "character-with-count_plural": "{{count}} characters", "link-with-count": "{{count}} link", "link-with-count_plural": "{{count}} links", "file-with-count": "{{count}} file", "file-with-count_plural": "{{count}} file", "folder-with-count": "{{count}} folder", "folder-with-count_plural": "{{count}} folders", "backlink-with-count": "{{count}} backlink", "backlink-with-count_plural": "{{count}} backlinks", "site-with-count": "{{count}} site", "site-with-count_plural": "{{count}} sites", "plugin-with-count": "{{count}} plugin", "plugin-with-count_plural": "{{count}} plugins", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } }{ "setting": { "options": "Preferenca", "plugin": "Shtojcë", "builtin-plugins": "Shtojca të integruara", "plugin-options": "Preferenca për shtojcat", "folder-path-example-placeholder": "Shembull: dosja 1/dosja 2", "file-path-example-placeholder": "Shembull: dosja/faqja-me-shënime", "msg-restart-required": "Changing this option requires a restart to take effect.", "editor": { "name": "Përpunimi i tekstit", "section-general": "General", "section-behavior": "Behavior", "section-display": "Display", "option-spellcheck": "Kontrolli i shqiptimit", "option-spellcheck-description": "Aktivizon kontrollin e shqiptimit. Për momentin funksionon vetëm për Anglishten (US).", "spellcheck-languages": "Spellcheck languages", "spellcheck-languages-description": "Choose the languages for the spellchecker to use.", "spellcheck-languages-mac-description": "The native spellchecker will automatically detect the language being used for you on macOS.", "spellcheck-dict": "Fjalor për kontrollin e shqiptimit", "spellcheck-dict-empty": "Fjalori i shqiptimeve është bosh.", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "Gjatësia e lexueshme e rreshtit", "option-readable-line-description": "Kufizon gjatësinë maksimale të rreshtit. Shfaq më pak përmbajtje në ekran, por i bën paragrafët më të lexueshëm.", "option-strict-line-break": "Kryerradhë strikte", "option-strict-line-break-description": "Në afishimin paraprak, injoron kryerradhën e rreshtave të vetëm sipas specifikimeve \"Markdown\". Çaktivizojeni këtë opsion për t'i shfaqur kryerradhat e ketyre rreshtave në afishimin paraprak të faqes.", "option-show-frontmatter": "Shfaq të dhënat mbi shënimet (frontmatter) në faqe", "option-show-frontmatter-description": "Në pamjen paraprake, shfaq të dhënat mbi shënimet si një bllok kodi. Çaktivizojeni këtë opsion për t'i fshehur këto të dhëna.", "option-auto-pair-brackets": "Mbyllje automatike e kllapave", "option-auto-pair-brackets-description": "Mbyll kllapat dhe citimet automatikisht.", "option-auto-pair-markdown": "Mbyllja e elementeve të sintaksës Markdown", "option-auto-pair-markdown-description": "Mbyll automatikisht simbolet hapëse për formatimet \"bold\", \"italics\", \"strikethrough\", nënvizimet dhe pjesët e kodit.", "option-smart-indent-lists": "Dhëmbëzim (indentim) i zgjuar i listave", "option-smart-indent-lists-description": "Saktëson vendosjen dhe shenjimin e elementeve të listave për ju.", "option-fold-heading": "Përmbyllje (folding) e një titulli", "option-fold-heading-description": "Ju lejon të përmbyllni elementet nën një titull apo nëntitull.", "option-fold-indent": "Përmbyllje (folding) sipas dhëmbëzimit (indentation)", "option-fold-indent-description": "Ju lejon të përmbyllni elemente që kanë të njëjtin nivel dhëmbëzimi.", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Editing view", "option-default-new-tab-view-reading": "Reading view", "option-default-editing-mode": "Default editing mode", "option-default-editing-mode-description": "The default editing mode a new pane will start with.", "option-default-editing-mode-source": "Source mode", "option-default-editing-mode-live-preview": "Live Preview", "option-show-line-number": "Shfaqje e numrave të rreshtave", "option-show-line-number-description": "Shfaq numrat e rreshtave në anë të faqes.", "option-indentation-guide": "Show indentation guides", "option-indentation-guide-description": "Show vertical relationship lines between bullet points for visual guidance.", "option-use-tabs": "Dhëmbëzim (indentim) me \"tabs\"", "option-use-tabs-description": "Përdor tabs për të dhëmbëzuar tekstin, duke shtypur tastin \"Tab\". Çaktivizojeni këtë opsion për të perdorur hapësira, duke shtypur \"Space\".", "option-tab-size": "Përmasa e \"Tab\"", "option-tab-size-description": "Numri i hapësirave të cilat përbëjnë një \"tab\".", "option-rtl": "Right-to-left (RTL)", "option-rtl-description": "Sets the text direction of notes to display in right-to-left.", "option-auto-convert-html": "Konvertim automatik i HTML", "option-auto-convert-html-description": "Konverton automatikisht HTML në Markdown në çastin e kopjimit apo \"drag-and-drop\" nga faqe Web-i. Përdorni Ctrl/Cmd+Shift+V për të kopjuar pa këtë konvertim.", "option-vim-key-bindings": "Lidhjet e tastierës për Vim", "option-vim-key-bindings-description": "Ju lejon të përdorni komanda Vim me anë të tastieres, gjatë përpunimit të tekstit.", "option-vim-key-bindings-mobile": "On mobile devices, this setting is per-device and is not synchronized through the config file.", "option-emacsy-keys": "Lidhje të vjetra \"Emacs-style\" të tastierës, për macOS", "option-emacsy-keys-description": "Ju lejon përdorimin e disa tastave te navigimit, të cilat janë standarte ne macOS, por të cilat mund të interferojne me komandat e tastave të tjera.", "label-confirm-enable-vim": "Konfirmo hyrjen ne \"Vim mode\"", "label-vim-warning": "\"Vim mode\" përdoret për përpunim të tekstit, por mund të jetë goxha jo-intuitiv. Nëse nuk njiheni me përdorimin e \"Vim\", ky opsion mund t'ju bëjë të mendoni se Obsidian ka ndaluar së funksionuari.", "label-vim-test": "Për të verifikuar që e njihni platformën \"Vim\", ju lutemi të shtypni më poshtë komandën që përdoret për të dalë nga \"Vim mode\" pa ruajtur ndryshimet.", "label-vim-your-answer": "Përgjigja juaj", "placeholder-enter-command": "Shtypni komandën...", "button-confirm-enable-vim": "Aktivizo Vim", "msg-vim-mode-enabled": "Komanda është e saktë. \"Vim mode\" është tani aktiv.", "msg-vim-mode-not-enabled": "Komanda është e pasaktë. \"Vim mode\" mbetet jo-aktiv për të mirën tuaj.", "msg-vim-mode-please-enter-command": "Ju lutemi të shtypni komandën e kërkuar për të aktivizuar \"Vim mode\"", "option-legacy-editor": "Use legacy editor", "option-legacy-editor-description2": "The legacy editor will be deprecated soon. It is currently no longer maintained, and as such, bugs will no longer be addressed.", "label-legacy-deprecation": "New editor is here", "label-legacy-deprecation-1": "Obsidian now has a brand new editor that's more robust and accessible.", "label-legacy-deprecation-2": "It seems you're still using the legacy editor, and we think you'll enjoy the new editor.", "label-legacy-deprecation-choice": "Which mode would you like to use?", "label-live-preview-description": "A more modern, what-you-see-is-what-you-get experience.", "label-source-mode-description": "See raw Markdown with syntax highlighting.", "button-start-new-editor": "Start new editor" }, "file": { "name": "Shënimet dhe linqet", "option-confirm-file-deletion": "Konfirmo fshirjen e faqes", "option-confirm-file-deletion-description": "Përcakton nëse kërkohet konfirmim para fshirjes së një faqeje", "option-delete-destination": "Faqet e fshira", "option-delete-destination-description": "Ajo çfarë ndodh me faqet pas fshirjes", "option-choice-system-trash": "Dërgo në mbeturinat e sistemit", "option-choice-vault-trash": "Dërgo ne mbeturinat e Obsidian (dosja .trash)", "option-choice-permanent-delete": "Fshi përgjithmonë", "option-always-update-links": "Përditëso gjithmonë linqet e brendshme", "option-always-update-links-description": "Përcakton nëse linqet përditësohen pas riemërtimit të një faqeje apo nëse ju kërkohet konfirmim.", "option-new-note-location": "Vendodhje e re \"default\" për një faqe të re.", "option-new-note-location-description": "Vendodhja e faqeve të reja. Opsionet e shtojcave mund t'i mbivendosen kësaj përzgjedhjeje.", "option-choice-vault-root": "Kasaforta (Vault root)", "option-choice-current-folder": "Dosja ku ndodhet aktualisht faqja", "option-choice-specified-folder": "Dosja e specifikuar mëposhtë", "option-new-file-folder-path": "Dosja për faqet e reja", "option-new-file-folder-path-description": "Faqet e reja të shënimeve do ruhen në këtë dosje. Opsionet e shtojcave mund t'i mbivendosen kësaj përzgjedhjeje.", "option-use-wiki-links": "Përdor [[Wikilinks]]", "option-use-wiki-links-description": "Gjenero automatikisht Wikilinks për [[links]] dhe ![[images]] në vend të linqeve dhe imazheve Markdown. Në të kundërt, çaktivizojeni këtë opsion për të gjeneruar linqe Markdown.", "option-show-unsupported-files": "Zbulo të gjithë llojet e materialeve", "option-show-unsupported-files-description": "Shfaq materiale të çdo lloj formati, edhe nëse Obsidian nuk i hap dot vetvetiu, në mënyrë që të mund t'i ndërlidhni me shënimet tuaja ose t'i shihni në eksploruesin e shënimeve apo në Përzgjedhesin e shpejtë.", "option-link-autocompleted-format": "Format i ri i linqeve", "option-link-autocompleted-format-description": "Përcakton cilat linqe përdoren kur linqet e brendshme gjenerohen automatikisht.", "option-choice-shortest-linktext": "Vendndodhja më e shkurtër e faqes, kur është e mundur", "option-choice-relative-path": "Vendndodhja relative e faqes", "option-choice-absolute-path": "Vendndodhja absolute e faqes në kasafortë", "option-new-attachment-location": "Venndodhja \"default\" për materialet e bashkangjitura", "option-new-attachment-location-description": "Përcakton ku ruhen materialet e bashkangjitura të shtuara rishtazi.", "option-choice-subdirectory": "Në një nëndosje brenda dosjes aktuale", "option-attachment-folder-path": "Vendndodhja e dosjes së materialeve të bashkangjitura", "option-attachment-folder-path-description": "Materialet e bashkangjitura të krijuara rishtazi do shfaqen në këtë vend. Kjo përfshin imazhet e krijuara nëpërmjet \"Dran and Drop\" dhe ato të kopjuara, si dhe regjistrime audio.", "option-attachment-subfolder-path": "Emri i nëndosjes", "option-attachment-subfolder-path-description": "Nëse faqja juaj është në \"vault/folder\", dhe nëndosja juaj quhet \"attachments\", materialet e bashkangjitura do të ruhen në \"vault/folder/attachments\".", "option-attachment-subfolder-path-placeholder": "Materiale të bashkangjitura", "option-excluded-files": "Excluded files", "option-excluded-files-desc": "Excluded files will be either hidden or less noticeable in various places, such as Quick Switcher, link suggestion, and Graph View.", "label-no-excluded-filters-applied": "No excluded filter is applied right now. Add one below.", "label-excluded-filters-applied": "Files matching the following filters are currently excluded:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Enter path or \"/regex/\"..." }, "appearance": { "name": "Pamja", "option-base-theme": "Motivi bazë", "option-base-theme-description": "Përzgjedh skemën \"default\" të ngjyrave Obisidian.", "option-accent-color": "Accent color", "option-accent-color-description": "Choose the accent color used throughout the app.", "dark-theme": "I errët", "light-theme": "I ndritur", "system-theme": "Adapt to system", "option-font": "Font", "option-advanced": "Advanced", "option-interface-font": "Interface font", "option-interface-font-description": "Set base font for all of Obsidian.", "option-text-font": "Text font", "option-text-font-description": "Set font for editing and reading views.", "option-monospace-font": "Monospace font", "option-monospace-font-description": "Set font for places like code blocks and frontmatter.", "label-single-font-currently-in-effect": " Currently applied font: ", "label-multiple-fonts-currently-in-effect": " The following fonts are currently applied:", "option-font-placeholder": "Enter font name...", "label-no-custom-font-set": "No custom font is applied right now. Add one below.", "label-font-applied": "The first font from this list that is available on your system will be applied.", "msg-font-not-found": "This font is not detected on your system.", "msg-font-found": "This font is detected on your system.", "label-font-name": "Font name", "option-community-themes": "Hap motifet e komunitetit", "option-community-themes-description": "Shfaq dhe përdor motife mbresëlënëse nga komuniteti.", "button-browse-community-themes": "Kërko", "option-font-size": "Përmasa e gërmave", "option-font-size-description": "Përmasa në piksela që ndikon pamjet e përpunimit dhe afishimit.", "option-font-size-action": "Përshtatje e shpejtë e përmasës së gërmave", "option-font-size-action-description": "Përshtat përmasën e gërmave duke përdorur Ctrl + Scroll, ose duke përdorur gjestet `trackpad pinch-zoom`.", "option-themes": "Motifet", "option-manage-themes-description": "Manage installed themes and browse community themes.", "option-theme-button-manage": "Manage", "option-choice-none": "Asnjë", "option-native-menus": "Native menus", "option-native-menus-desc": "Menus throughout the app will match the operating system. They will not be affected by your theme.", "button-reload-themes": "Ringarko motifet", "msg-reloaded-themes": "Motifet CSS u ringarkuan.", "button-open-themes-folder": "Hap dosjen e motifeve", "option-css-snippets": "Copëza CSS", "label-no-css-snippets-found": "Në dosjen përkatëse nuk gjendet asnjë copëz CSS-je", "no-snippet-description": "Copëzat CSS ruhen në \"{{path}}\".", "button-reload-snippets": "Ringarko copëzat", "button-open-snippets-folder": "Hap dosjen e copëzave", "msg-reloaded-snippets": "Ringarko copëzat CSS.", "option-toggle-snippet-description": "Apliko copëzat CSS nga \"{{path}}\".", "label-installed-themes": "Installed themes", "label-screenshot-unavailable": "Screenshot unavailable", "label-default-theme": "Default", "tooltip-click-to-enlarge": "Click to enlarge", "button-update": "Update", "label-currently-selected": "Selected", "option-frame-style": "Window frame style", "option-frame-description": "Determines the styling of the title bar of Obsidian windows. Requires a full restart to take effect.", "option-frame-hidden": "Hidden (default)", "option-frame-obsidian": "Obsidian frame", "option-frame-native": "Native frame", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Show tab title bar", "option-show-view-header-desc": "Display the header at the top of every tab.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "button-check-for-updates": "Check for updates", "button-view-updates": "View updates", "button-update-all-themes": "Update all", "label-current-themes": "Current community themes", "label-currently-installed": "You currently have {{count}} theme installed.", "label-currently-installed_plural": "You currently have {{count}} themes installed." }, "hotkeys": { "name": "Shkurtime komandash", "prompt-filter": "Filtro...", "tooltip-delete-hotkey": "Hiq kombinimin", "label-waiting-for-hotkey-press": "Shtyp një kombinim...", "tooltip-restore-default": "Rikthe gjëndjen fillestare", "tooltip-customize-command": "Modifiko këtë komandë", "tooltip-hotkey-single-conflict": "Ky kombinim është në konflikt me \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "Ky kombinim është në konflikt me {{count}} komanda të tjera", "label-blank-hotkey": "Bosh" }, "about": { "name": "Rreth produktit", "label-commercial-license": "Commercial license", "label-license-key": "Çelësi i licensës", "license-key-placeholder": "Çelësi juaj i licensës...", "label-activate-license": "Aktivizo licensën komerciale", "button-activate": "Aktivizo", "label-unknown-version": "I panjohur", "label-current-version": "Versioni aktual: ", "label-install-version": "(Versioni i instaluesit: {{version}})", "label-up-to-date": "Aplikacioni juaj është i përditësuar!", "label-read-changelog": "Lexo proçesverbalin e ndryshimeve.", "label-manual-update-required": "To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.", "label-download": "Download", "label-new-version-ready": "Një version i ri është gati për t'u instaluar. ", "label-relaunch-to-update": "Rihap aplikacionin për të kryer përditësimin.", "label-disabled-updates": "Përditësimet janë të çaktivizuara.", "label-checking-for-updates": "Duke kërkuar për përditësime...", "button-relaunch": "Rihap", "button-check-for-updates": "Kërko për përditësime", "option-auto-update": "Përditësime automatike", "option-auto-update-description": "Çaktivizo këtë opsion për të ndaluar kërkimin automatik për përditësime.", "option-get-help": "Get help", "option-get-help-description": "Get help on using Obsidian.", "button-open": "Hap", "option-language": "Gjuha", "option-language-description": "Ndrysho gjuhën e aplikacionit.", "option-insider-build": "Receive insider builds", "option-insider-build-description": "Auto-update to insider builds to try out new features. Note that these builds are bleeding edge and might be less stable.", "option-advanced": "Opsione të avancuara", "option-hw-acceleration": "Përshpejtimi i hardware", "option-hw-acceleration-description": "Aktivizon përshpejtimin e hardware, i cili perdor GPU tuaj për t'a bërë Obsidian më të këndshëm në përdorim.", "option-hw-acceleration-warning": "Nëse e çaktivizoni këtë opsion, performanca e aplikaciont do të bjerë ndjeshëm.", "option-config-location": "Mbishkruaj dosjen e konfigurimeve", "option-config-location-description": "Përdor një dosje tjetër konfigurimesh nga ai i parashikuar. Emri i dosjes duhet të fillojë me një pikë.", "option-config-location-warning": "Vendndodhja e dosjes duhet të përkojë me një dosje aktuale në sistemin tuaj, emri i të cilës fillon me një pikë.", "label-license": "Licensa", "label-your-commercial-license-key": "Your commercial license key is \"{{key}}\".", "label-commercial-license-info": "Regjistruar nën \"{{company}}\" për {{seats}} përdorues. E vlefshme deri më {{expiry}}.", "label-validating-commercial-license": "Duke verifikuar...", "label-invalid-commercial-license": "Licensa nuk është e vlefshme: ", "button-remove-commercial-license": "Remove", "option-catalyst": "Catalyst license", "option-catalyst-desc": "You currently have the {{tier}} Catalyst license. Thanks for your support!", "option-catalyst-desc-no-license": "You don't have a Catalyst license right now. Catalyst license is a one-time donation to support Obsidian development.", "label-app": "App" }, "account": { "name": "Llogaria", "option-your-account": "Your account", "option-your-account-desc": "You're currently signed in {{name}} ({{email}}).", "option-your-account-desc-no-login": "You're not logged in right now. An account is only needed for Obsidian Sync, Obsidian Publish, and Catalyst insider builds.", "button-manage-settings": "Manage settings", "label-insider": "i brendshëm", "label-supporter": "mbështetës", "label-vip": "VIP", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Commercial license", "option-commercial-license-desc": "If you use Obsidian for commercial purpose, you may need to get a commercial license.", "button-purchase": "Purchase", "button-log-out": "Dil", "label-log-in": "Kyçu", "label-sign-up": "Sign up", "label-email": "Email-i", "placeholder-email": "Email-i juaj...", "label-password": "Fjalëkalimi", "placeholder-password": "Fjalëkalimi juaj...", "button-login": "Hyr", "message-empty-email": "Email-i nuk mund të jetë bosh.", "message-invalid-email": "Email-i nuk është i vlefshëm.", "message-empty-password": "Password nuk mund të jetë bosh.", "message-login-failed": "Hyrja dështoi, ju lutem kontrolloni përsëri email-in dhe fjalëkalimin", "label-no-account": "Nuk keni një llogari? ", "link-sign-up-now": "Regjistrohu tani" }, "core-plugin": { "plugin-list": "Plugin list", "option-search-plugin": "Search core plugins", "option-search-plugin-description": "Filter plugins by name or description.", "placeholder-search-plugin": "Search plugins..." }, "third-party-plugin": { "name": "Shtojca të treta", "option-restricted-mode": "Restricted mode", "option-restricted-mode-description": "Restricted Mode is off. Turn on to disable community plugins.", "button-turn-on": "Turn on", "option-browse-community-plugins": "Shtojcat e komunitetit", "option-browse-community-plugins-description": "Kërko dhe instalo shtojca të treta të krijuara nga komuniteti ynë i mrekullueshëm.", "button-browse": "Kërko", "label-exit-restricted-mode": "Exit Restricted Mode", "label-exit-restricted-mode-description-1": "Community plugins, like any other software you install, could potentially cause data integrity and security issues.", "label-exit-restricted-mode-description-2": "Plugin security is important to us. Here's what we do:", "label-exit-restricted-mode-description-3": "Despite our efforts, there is still a small chance that a community plugin might misbehave.", "label-code-review": "Initial code review", "label-code-review-desc": "Plugins undergo an initial code review by our team before they appear in the store.", "label-open-source": "Open source", "label-open-source-desc": "Most plugins are open source on GitHub, so you can inspect the code yourself.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We have a large community of developers who watch out for each other.", "label-report-mechanism": "Report mechanism", "label-report-mechanism-desc": "We follow up and remove faulty plugins upon user report.", "label-exit-restricted-mode-disable-confirmation": "Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.", "label-learn-more": "Learn more about plugin security", "button-turn-on-community-plugins": "Turn on community plugins", "label-trust-author": "Do you trust the author of this vault?", "label-trust-author-description-1": "You're opening this vault for the first time, and it comes with some plugins.", "label-trust-author-description-2": "If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.", "label-trust-author-description-3": "If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.", "button-enable-plugins": "Trust author and enable plugins", "button-dont-trust-author": "Browse vault in Restricted Mode", "placeholder-community-plugins": "Kërko në shtojcat e komunitetit...", "msg-failed-load-plugins": "Shtojcat e komunitetit nuk arritën të ngarkohen.", "label-installed": "Të instaluara", "button-install": "Instalo", "button-enable": "Aktivizo", "button-disable": "Çaktivizo", "button-copy-share-link": "Copy share link", "button-donate": "Donate", "label-no-results-found": "Nuk ka rezultate.", "msg-failed-to-load-manifest": "Manifesti i shtojcës nuk mund të ngarkohet.", "label-version": "Versioni: {{version}}", "label-currently-installed-version": " (versioni i instaluar: {{version}})", "label-by-author": "Nga ", "label-repository": "Repositori: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "Kjo shtojcë nuk përshtatet me pajisjen tuaj.", "button-update": "Përditëso", "label-no-readme": "Kjo shtojcë nuk ka një dokument README.", "msg-installing-plugin": "Duke instaluar shtojcën \"{{name}}\"...", "msg-failed-to-install-plugin": "Instalimi i shtojcës \"{{name}}\" dështoi.", "msg-successfully-installed-plugin": "Instalimi i shtojcës \"{{name}}\". u krye me sukses", "label-installed-plugins": "Shtojca të instaluara", "button-reload-plugins": "Ringarko shtojcat", "msg-reloaded-third-party-plugins": "Shtojcat e treta u ringarkuan.", "label-uninstall": "Çinstalo", "label-uninstall-plugin": "Çinstalo shtojcën", "label-uninstall-plugin-confirmation": "Jeni të sigurt që doni t'a çinstaloni këtë shtojcë? Ky veprim fshin dosjen e shtojcës.", "button-open-plugins-folder": "Hap dosjen e shtojcave", "button-check-for-updates": "Kërko për përditësime", "button-update-all-plugins": "Përditësoji të gjitha", "label-current-plugins": "Shtojcat aktuale", "label-currently-installed": "Aktualisht ju keni {{count}} shtojcë të instaluar.", "label-currently-installed_plural": "Aktualisht ju keni {{count}} shtojca të instaluara.", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Show a message with how long each plugin took to initialize when starting the app.", "msg-no-updates-found": "Nuk ka përditësime", "msg-updates-found": "U gjet {{count}} shtojcë për përditësim.", "msg-updates-found_plural": "U gjetën {{count}} shtojca për përditësim.", "msg-update-plugin": "Përditëso me versionin {{version}}", "option-search-installed-plugin": "Kërko në shtojcat e instaluara", "option-search-installed-plugin-description": "Filtro shtojcat e instaluara sipas emrit ose përshkrimit.", "placeholder-search-installed-plugin": "Kërko në shtojcat e instaluara...", "show-installed-only": "Show installed only", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "Të shfaqura {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Paneli mobile", "option-configure-quick-action": "Konfiguro Veprimet e Shpejta mobile", "option-configure-quick-action-description": "Konfiguro cilat komanda aktivizohen kur lëvizni gishtin mbi ekran nga lart poshtë. Komanda aktuale është \"{{command}}\".", "button-configure": "Konfiguro", "placeholder-select-quick-action": "Përzgjidh Veprimin e Shpejte...", "manage-toolbar-options": "Menaxho opsionet e panelit", "option-internal-link": "Shto një lidhje të brendshme", "option-internal-embed": "Shto një element të brendësuar", "option-tag": "Shto një etiketim", "option-heading": "Ndërro formatin e titullit", "option-strikethrough": "(Ç)aktivizo shkarravitjen e tekstit", "option-highlight": "(Ç)aktivizo nënvijezimin ose theksimin e tekstit", "option-code": "(Ç)aktivizo formatimin e kodit", "option-blockquote": "(Ç)aktivizo bllokun e citimit", "option-markdown-link": "Shto një lidhje Markdown", "option-bullet-list": "(Ç)aktivizo pikëzimin e listës", "option-numbered-list": "(Ç)aktivizo numërimin e listës", "option-indent-list": "Dhëmbëzo elementin e listës", "option-unindent-list": "Çdhëmbëzo elementin e listës", "option-undo": "Kthe mbrapsht", "option-redo": "Shko përpara", "option-move-caret-up": "Zhvendos karetën (^) më sipër", "option-move-caret-down": "Zhvendos karetën (^) më poshtë", "option-move-caret-left": "Zhvendos karetën (^) majtas", "option-move-caret-right": "Zhvendos karetën (^) djathtas", "option-first-line": "Shko në rreshtin e parë", "option-last-line": "Shko në rreshtin e fundit", "option-toggle-keyboard": "Shfaq/fshih tastierën", "option-configure-toolbar": "Konfiguro panelin mobile", "option-added-options": "Opsione të shtuara", "option-more-toolbar-options": "Opsione të tjera për panelin", "option-attach": "Bashkangjit një material", "option-add-command": "Shto një komandë globale", "option-add-command-description": "Përzgjidh ndonjë komandë globale për t'a shtuar në panel." } }, "editor": { "search": { "placeholder-find": "Find", "placeholder-replace": "Replace", "label-previous": "Para", "label-next": "Pas", "label-all": "Të gjitha", "label-exit-search": "Dil nga kërkimi", "label-replace": "Zëvendëso", "label-replace-all": "Zëvendëso të gjitha" }, "link-suggestion": { "label-type-hash": "Shtyp #", "label-link-heading": "për të lidhur një titull", "label-type-block": "Shtyp ^", "label-link-block": "për të lidhur një bllok", "label-type-pipe": "Shtyp |", "label-change-display-text": "për të ndryshuar pamjen e tekstit", "label-no-match-found": "Nuk ka rezultate" }, "spellcheck": { "no-suggestion": "Nuk ka sugjerime...", "add-to-dictionary": "Shto në fjalor" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "No heading", "label-heading-level": "Heading {{level}}" }, "print-modal": { "title": "Eksporto në PDF", "caption": "Eksporto \"{{filename}}\" në PDF me opsionet e mëposhtme.", "setting-page-size": "Përmasa e faqes", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letër", "setting-page-size-tabloid": "Tablo", "setting-include-file-name": "Include file name as title", "setting-landscape": "Format peisazhi (Landscape)", "setting-margin": "Hapësira anësore", "setting-margin-default": "Përmasë standarde e paracaktuar", "setting-margin-minimal": "Minimale", "setting-margin-none": "Asnjë", "setting-downscale-percent": "Cakto një përqindje zvogëlimi", "button-export-to-pdf": "Eksporto në PDF" }, "link-popover": { "tooltip-follow-link": "Ndiq lidhjen", "tooltip-open-link": "Hap lidhjen", "tooltip-search-tag": "Kërko sipas një etiketimi" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Hap në aplikacionin përkatës të paracaktuar", "empty-sidebar": "Paneli anësor është bosh, provoni të tërhiqni ndonjë element mbi këtë panel.", "sidebar-expand": "Shpalos", "sidebar-collapse": "Palos", "msg-fail-to-save-file": "Ruajtja e dokumentit me shënime \"{{filepath}}\" dështoi. {{message}}.", "no-file": "Nuk ka dokumenta shënimesh", "msg-file-changed": "\"{{file}}\" është modifikuar jashtë këtij programi, ndryshimet bashkohen automatikisht.", "switch-vault": "Hap një kasafortë tjetër", "help": "Ndihmë", "settings": "Konfigurime", "drag-to-rearrange": "Tërhiq për të riorganizuar", "msg-switched-to-read": "Switched default view mode to reading view.", "msg-switched-to-edit": "Pamja standarde u ndryshua në pamjen e përpunimit të tekstit.", "msg-upgrade-installer": "Për t'a përdorur këtë funksionalitet, ju lutemi të ri-instaloni programin me instaluesin më të fundit të disponueshëm në faqen tonë.", "tooltip-restore-default-settings": "Rikthe konfigurimet standarde", "label-copy": "Kopjo në memorien e fragmenteve (clipboard)", "copied_generic": "Copied to your clipboard", "copied": "{{item}} u kupjoa në memorien e fragmenteve", "url": "Url", "msg-open-file-through-uri": "Dokumenti \"{{path}}\" u hap", "msg-file-not-found-through-uri": "Dokumenti \"{{name}}\" nuk u gjend.", "delete-action-short-name": "Fshi", "msg-indexing": "Obsidian po indekson kasafortën tuaj...\nKy proces ndodh normalisht vetëm një herë.\nDisa funksionalitete mund të mos jenë te disponueshme për sa kohë ky proces nuk ka përfunduar.", "msg-indexing-complete": "Indeksimi u krye.", "msg-sandbox-vault": "This is a sandbox vault.\nChanges you make in this vault will be lost.", "label-enter-to-create": "Shtyp Enter për të krijuar një dokument shënimesh", "label-update-available": "Update Available", "label-debug-info": "Debug info", "button-learn-more": "Learn more", "button-not-now": "Not now", "button-add": "Add", "button-manage": "Manage", "label-new-tab": "New tab", "msg-tab-busy": "This tab is currently busy, please try again later", "empty-state": { "no-file-open": "Nuk ka shënime të hapur", "create-new-file": "Krijo një dokument të ri shënimesh", "go-to-file": "Shko te dokumenti", "see-recent-files": "Shiko dokumentat e përdorur së fundmi", "close": "Mbyll", "unknown-pane-title": "Plugin no longer active", "unknown-pane-desc": "The plugin that created this pane ({{type}}) has gone away" }, "menu": { "edit-view": "Përpuno (Ctrl/Cmd+Click për të përpunuar në një panel të ri)", "read-view": "Current view: reading", "switch-to-edit-view": "Click to edit", "switch-to-read-view": "Click to read", "mod-click-open-new-tab": "{{key}}+Click to open in new tab", "find": "Gjej...", "replace": "Zëvendëso...", "edit": "Përpuno", "preview": "Afisho", "more-options": "Opsione të tjera", "close": "Mbyll", "close-others": "Close others", "close-right": "Close tabs to the right", "pin": "Ngulit me thumb", "unpin": "Unpin", "unlink-tab": "Unlink tab", "link-tab": "Link with tab...", "toggle-source-mode": "Source mode", "toggle-reading-view": "Reading view", "delete-file": "Fshi një dokument", "create-file": "Create this file", "open-link": "Open link", "open-in-new-tab": "Open in new tab", "open-to-the-right": "Open to the right", "copy-url": "Kopjo adresën (url)", "close-current-tab": "Close current tab", "copy": "Kopjo", "cut": "Prit (Cut)", "paste": "Ngjit (Paste)", "paste-as-plain-text": "Ngjit si tekst i thjeshtë (plain text)", "select-all": "Përzgjidh të gjitha", "rename-heading": "Rename this heading...", "rename-blockid": "Rename this block ID...", "open-in-new-window": "Open in new window", "move-to-new-window": "Move to new window", "open-in-browser": "Open in browser", "stack-tabs": "Stack tabs", "unstack-tabs": "Unstack tabs" }, "tooltip": { "click-to-expand": "Kliko për të shpalosur", "click-to-collapse": "Kliko për të palosur", "alias": "Pseudonime (Alias)", "not-created-yet": "Nuk ka ndonjë të krijuar, kliko për të krijuar" }, "start-screen": { "label-version": "Versioni", "option-open-folder-as-vault": "Hap dosjen si kasafortë", "option-open-folder-as-vault-description": "Përzgjidh një dosje ekzistuese me dokumenta Markdown.", "option-create-vault": "Krijo një kasafortë të re", "option-create-vault-description": "Krijo një kasafortë Obsidian brenda nje dosjeje.", "option-connect-obsidian-sync": "Connect to Obsidian Sync", "option-connect-obsidian-sync-description": "Set up a synced vault with existing remote vault.", "option-new-vault-name": "Emri i kasafortës", "option-new-vault-name-description": "Zgjidh një emër për dosjen tënde fantastike.", "option-new-vault-location": "Vendndodhja", "option-new-vault-location-description": "Zgjidh një vendndodhje për kasafortën tënde të re.", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Reveal vault in system explorer", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "Rename vault...", "msg-error-rename-exists": "There is already a vault with this name.", "msg-error-nested": "Cannot move vault into a subfolder of itself.", "msg-error-rename-open": "Can't rename a currently open vault.", "msg-rename-failed": "Failed to rename vault.", "msg-rename-success": "Successfully renamed vault.", "option-move-vault": "Move vault...", "msg-move-select-dest": "Select destination folder", "msg-error-move-exists": "There is already a vault at the destination.", "msg-error-move-open": "Can't move a currently open vault.", "msg-move-failed": "Failed to move vault.", "msg-move-success": "Successfully moved vault.", "option-remove": "Remove from list", "button-quick-start": "Quick start", "button-open": "Hap", "button-browse": "Kërko", "button-connect": "Connect", "button-create-vault": "Krijo", "button-back": "Mbrapsht", "msg-empty-vault-name": "Emri i kasafortës nuk mund të jetë bosh.", "msg-invalid-folder": "Ju lutemi, zgjidhni një dosje të vlefshme.", "msg-failed-to-create-vault": "Krijimi i kasafortës dështoi.", "msg-failed-to-create-vault-at-location": "Kasaforta nuk mund të krijohej në vendodhjen e dhënë. Ju lutemi, kontrolloni përsëri vendndodhjen dhe të drejtat e aksesimit të saj.", "msg-error-failed-to-open-vault": "Hapja dështoi.", "msg-error-remove-current-open-vault": "Nuk mund të fshihet një dosje aktualisht e hapur", "option-get-help": "Get Help", "option-user-email": "Email", "placeholder-your-email": "Your email...", "option-user-password": "Password", "placeholder-your-password": "Your password...", "button-sign-in": "Sign in", "button-setup": "Setup", "option-connect-vault-desc": "Create a synced vault on this device.", "tooltip-own-vault": "This is a remote vault owned by you.", "tooltip-shared-vault": "This is a remote vault shared with you." }, "drag-and-drop": { "insert-link-here": "Shto një lidhje këtu", "insert-links-here": "Shto lidhje këtu", "move-into-folder": "Zhvendos në \"{{folder}}\"", "star-this-file": "Shënjo këtë dokument", "star-these-files": "Shënjo këto dokumente", "open-in-this-tab": "Open in this tab", "open-as-tab": "Open as new tab" }, "window": { "maximize": "Maksimizo", "minimize": "Minimizo", "restore-down": "Rikthe në përmasen bazë", "close-window": "Mbyll dritaren", "go-back": "Shko mbrapa", "go-forward": "Shko para" }, "start-up": { "loading-obsidian": "Obsidian po hapet...", "obsidian-load-error": "Obsidian ndeshi një problem gjatë hapjes.", "button-reload-app": "Rihap aplikacionin", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "Hap një kasafortë tjetër", "loading-components": "Duke ngarkuar komponentët...", "loading-plugins": "Duke ngarkuar shtojcat...", "loading-vault": "Duke ngarkuar kasafortën...", "msg-failed-to-load-vault": "Ngarkimi i kasafortës dështoi: ", "loading-cache": "Duke ngarkuar cache-n...", "loading-workspace": "Duke ngarkuar hapësirën e punës (workspace)..." }, "mobile": { "action-import": "Import into vault", "action-choose-file-to-insert": "Choose a file to insert", "action-insert-text-into-file": "Insert text into {{filename}}", "action-insert-link-into-file": "Insert link into {{filename}}", "msg-importing": "Importing...", "msg-import-success": "Import success", "msg-failed-to-import-file": "Failed to import file {{filename}}", "msg-back-again-to-exit": "Press back again to exit." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "Ruaj dokumentin aktual", "follow-cursor-link": "Ndiq lidhjen nën kursor", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "Hiq/vendos thumbin", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "Shko para", "navigate-forward": "Shko pas", "use-dark-mode": "Përdor skemën e errët të ngjyrave", "use-light-mode": "Përdor skemën e ndritur të ngjyrave", "change-theme": "Change theme", "search-current-file": "Kërko në dokumentin aktiv", "search-replace-current-file": "Kërko & zëvendëso në dokumentin aktiv", "open-settings": "Hap konfigurimet", "open-help": "Ndihmë për konfigurimet", "toggle-edit": "Toggle editing/reading view", "toggle-source-mode": "Toggle Live Preview/Source mode", "delete-current-file": "Fshi dokumentin aktiv", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "Hap/mbyll panelin në të majtë", "toggle-right-sidebar": "Hap/mbyll panelin në të djathtë", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "Fokuso përpunuesin e tekstit", "toggle-fold": "Palos/shpalos në rreshtin aktual", "fold-all": "Palos të gjitha titujt dhe listat", "unfold-all": "Shpalos të gjitha titujt dhe listat", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "Swap line up", "swap-line-down": "Swap line down", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "(Ç)Aktivizo trashësimin e tekstit për tekstin e përzgjedhur", "toggle-italics": "(Ç)Aktivizo italizimin e tekstit për tekstin e përzgjedhur", "toggle-highlight": "(Ç)Aktivizo nënvijezimin për tekstin e përzgjedhur", "toggle-comments": "(Ç)Aktivizo komentet për tekstin e përzgjedhur", "insert-link": "Shto një lidhje", "toggle-spellcheck": "(Ç)Aktivizo kontrollin e shqiptimit", "delete-paragraph": "Fshi paragrafin", "toggle-checklist": "(Ç)aktivizo përdorimin e `checklist`", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "Përpuno titullin e dokumentit", "copy-path": "Kopjo vendndodhjen e dokumentit", "copy-url": "Kopjo adresën (url) Obsidian", "export-pdf": "Eksporto në PDF", "reload": "Rihap aplikacionin pa ruajtur ndryshimet", "undo-close-tab": "Undo close tab", "context-menu": "Show context menu under cursor", "show-debug-info": "Show debug info", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "Ndërro mes pamjeve të përpunimit dhe afishimit", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "Kjo ndikon në {{links}} në {{files}}.", "msg-updated-links": "{{links}} në {{files}} u përditësuan.", "label-update-links": "Përditëso lidhjet", "label-confirm-update-link-to-file": "A doni të përditësoni lidhjet e brendshme që i referohen këtij dokumenti?", "button-always-update": "Gjithmonë përditëso", "button-just-once": "Vetëm një herë", "button-do-not-update": "Mos përditëso", "label-confirm-deletion": "A jeni të sigurt për fshirjen e\"{{filename}}\"?", "label-move-to-system-trash": "Objekti do dërgohet në mbeturinat e sistemit", "label-move-to-vault-trash": "Objekti do dërgohet ne mbeturinat e Obsidian, të cilat ndodhen në dosjen e fshehur \".trash\" brenda kasafortës tuaj.", "label-permanent-delete": "Ky objekt do fshihet përgjithmonë.", "label-non-empty-folder": "Kjo dosje nuk është bosh.", "label-delete-folder-warning": "Nëse vazhdoni më tej, të gjitha materialet brenda kësaj dosjeje do fshihen.", "label-delete-folder": "Fshi dosjen", "button-delete": "Fshi", "button-delete-do-not-ask-again": "Fshi dhe mos pyet përsëri", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "Aktualisht ka {{links}} lidhje të cilat i referohen këtij dokumenti", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "Fshi dokumentin", "button-manage": "Manage", "button-cancel": "Anullo", "button-done": "Kryer", "button-save": "Save", "button-stop": "Stop", "button-continue": "Continue", "preparing-pdf": "Duke përgatitur PDF...", "label-rename-file": "Riemërto dokumentin", "label-new-name": "Emri i ri", "msg-rename-success": "Riemërtimi u krye me sukses.", "label-rename-heading": "Rename heading", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "Shtojcat", "file-explorer": { "name": "Eksploruesi i dokumenteve", "desc": "Eksploron të gjitha dokumentet ne dosjen bazë.", "action-open": "Hap eksploruesin e dokumenteve", "action-show": "Shfaq eksploruesin e dokumenteve", "action-create-note": "Krijo një dokument të ri", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "Dokument i ri", "action-new-folder": "Dosje e re", "action-change-sort": "Ndrysho rendin e rradhitjes", "action-reveal-file": "Shfaq dokumentin në eksploruesin e dokumenteve", "action-reveal-active-file": "Shfaq dokumentin aktiv në eksploruesin e dokumenteve", "command-move-file": "Zhvendos dokumentin në një dosje tjetër", "action-move-file": "Zhvendos dokumentin në...", "action-move-folder": "Zhvendos dosjen në...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "Shkruaj emrin e një dosjeje", "label-no-folders": "Nuk u gjet ndonjë dosje.", "instruction-navigate": "për të naviguar", "instruction-move": "për të zhvendosur", "instruction-dismiss": "për të anulluar", "label-sort-a-to-z": "Rendit sipas emërtimit (nga A në Z)", "label-sort-z-to-a": "Rendit sipas emërtimit (nga Z në A)", "label-sort-new-to-old": "Rendit sipas kohës së modifikimit (nga më e reja te më e vjetra)", "label-sort-old-to-new": "Rendit sipas kohës së modifikimit (nga më e vjetra te më e reja)", "label-sort-created-old-to-new": "Rendit sipas kohës së krijimit (nga më e vjetra te më e reja)", "label-sort-created-new-to-old": "Rendit sipas kohës së krijimit (nga më e reja te më e vjetra)", "menu-opt-new-note": "Dokument i ri", "menu-opt-new-folder": "Dosje e re", "menu-opt-set-attachment-folder": "Përcakto si dosjen e materialeve të bashkangjitura", "menu-opt-rename": "Riemërto", "menu-opt-delete": "Fshi", "menu-opt-make-copy": "Krijo një kopje", "msg-invalid-characters": "Emri i dokumentit nuk mund të përmbajë asnjë nga karakteret e mëposhtme", "msg-unsafe-characters": "Lidhjet nuk funksionojne me dokumente emërtimet e të cilëve përmbajne ndonjë nga karakteret e mëposhtme", "msg-file-already-exists": "Një dokument me këtë emër ekziston aktualisht", "msg-empty-file-name": "Emri i dokumentit nuk mund të jetë bosh.", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "Modifikuar së fundmi më {{time}}", "tooltip-created-time": "Krijuar më {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Zhvendos", "label-untitled-file": "I paemërtuar", "label-untitled-folder": "E paemërtuar", "msg-set-attachment-folder": "Materialet e bashkangjitura do ruhen në\"{{path}}\" nga tani e tutje." }, "search": { "name": "Kërko", "desc": "Kërko për fjalë kyçe në të gjitha dokumentet", "action-open-search": "Kërko në të gjitha dokumentet", "label-collapse-results": "Palos rezultatet", "label-match-case": "Përputh rezultatet sipas termit", "label-explain-search-term": "Sqaro mënyrën e kërkimit", "label-more-context": "Jep më shumë kontekst", "prompt-start-search": "Shkruaj për të nisur kërkimin...", "label-match-text": "Përputhet me tekstin: ", "label-match-regex": "Përputhet me shprehjen `regex`: ", "label-match-exact-text": "Përmban ekzaktësisht tekstin: ", "label-match-all": "Përputhet me të gjitha: ", "label-match-any": "Përputhet me cilëndo prej: ", "label-excluding": "Pa përfshirë: ", "label-case-sensitive": "Duke marrë parasysh kapitalizimin", "label-case-insensitive": "Pa marrë parasysh kapitalizimin", "label-match-file-path": "Përputhet me vendndodhjen e dokumentit: ", "label-match-file-name": "Përputhet me emrin e dokumentit: ", "label-match-content": "Përputhet me përmbajtjen e dokumentit: ", "label-match-task": "Përputhet me taskun: ", "label-match-task-todo": "Përputhet me taskun (për të bërë): ", "label-match-task-done": "Përputhet me taskun (kryer): ", "label-match-line": "Përputhet me rreshtin: ", "label-match-block": "Përputhet me bllokun: ", "label-match-section": "Përputhet me seksionin: ", "label-match-tag": "Përputhet me etiketimin: ", "label-no-matches": "Nuk u gjet ndonjë element.", "matches-with-count": "... dhe {{count}} përputhje të tjera.", "matches-with-count_plural": "... dhe {{count}} përputhje të tjera.", "label-copy-search-results": "Kopjo rezultatet e kërkimit", "button-copy-results": "Kopjo rezultatet", "msg-successfully-copied": "Rezultatet u kopjuan në memorien e fragmenteve (clipboard).", "option-show-path": "Shfaq vendndodhjen", "option-show-path-description": "Shfaq vendndodhjen e plotë të dokumentit dhe jo vetëm emrin.", "option-link-style": "Mënyra e lidhjeve", "option-link-style-description": "Shndërro sipas dëshires çdo rezultat kërkimi në një lidhje.", "option-choice-link-style-none": "Asnjë", "option-choice-link-style-wikilink": "Lidhje Wiki", "option-choice-link-style-markdown-link": "Lidhje Markdown", "option-list-prefix": "Prefiksi i listës", "option-list-prefix-description": "Shto në mënyre opsionale një prefiks për rezultatet e listuara të kërkimit të dokumenteve", "option-choice-list-style-none": "Asnjë", "option-choice-list-style-dash": "Vijë në mes (-)", "option-choice-list-style-asterisk": "Yll (*)", "option-choice-list-style-numbered": "Numra", "tooltip-clear-search": "Kërkim i pastër", "label-search-options": "Opsione kërkimi", "tooltip-read-more": "Lexo më shumë", "label-history": "Historiku", "tooltip-clear-history": "Fshi historikun e kërkimeve", "label-path-option-description": "përputh me vendndodhjen e një dokumenti", "label-file-name-option-description": "përputh me emrin e një dokumenti", "label-tag-option-description": "kërko sipas etiketimeve", "label-line-option-description": "kërko fjalë kyç në të njejtin rresht", "label-section-option-description": "kërko fjalë kyç nën të njëjtin titull", "menu-opt-search-for": "Search for \"{{keyword}}\"" }, "quick-switcher": { "name": "Ndërruesi i shpejtë", "desc": "Kalo në çdo dokument pa hequr duart nga tastiera. Shtyp Ctrl/Cmd+0 për t'a aktivizuar.", "short-name": "Ndërruesi", "action-open": "Hap ndërruesin e shpejtë", "instruction-navigate": "për të naviguar", "instruction-open": "për të hapur një dokument", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "për të krijuar diçka", "instruction-dismiss": "për të anulluar", "label-no-note-create-new": "Nuk u gjendën dokumente shënimesh. Shtyp Enter për të krijuar një të ri.", "prompt-type-file-name": "Shtyp `file` për të krijuar ose ndërruar dokumentin...", "label-enter-to-create": "Shtyp Enter për të krijuar", "tooltip-not-created-yet": "Nuk është krijuar akoma, përzgjidh për të krijuar", "option-show-existing-only": "Shfaq vetëm dokumentet që ekzistojnë", "option-show-existing-only-description": "Përcakton nëse shfaqen lidhje që i referohen dokumenteve akoma të pa krijuar.", "option-show-attachments": "Shfaq materialet e bashkangjitura", "option-show-attachments-desc": "Shfaq materiale të bashkangjitura si foto, video dhe PDF.", "option-show-all-file-types": "Shfaq të gjitha llojet e materialeve", "option-show-all-file-types-desc": "Shfaq të gjitha dokumentet, përfshirë ata të cilat Obsidian nuk i hap dot. Dokumenti do hapet me aplikacionin përkatës për llojin e tij." }, "graph-view": { "name": "Pamja me grafik", "desc": "Shiko në një rrjetë grafike një përmbledhje se me cilët dokumenta lidhet secili dokument", "action-open": "Hap rrjetën grafike", "action-open-local": "Hap grafikun aktual", "action-copy-screenshot": "Kopjo një `screenshot`", "tab-title": "Grafiku i {{displayText}}", "label-filters": "Filtra", "prompt-filter-nodes": "Kërko dokumenta...", "option-depth": "Thellësia", "option-depth-description": "Shfaq nyje që janë larg sa kjo vlerë", "option-neighbor-links": "Nyje fqinje", "option-neighbor-links-description": "Shfaq lidhjet mes nyjeve fqinjëve.", "option-forelinks": "Lidhjet për jashtë", "option-forelinks-description": "Shfaq lidhjet që i referohen dokumenteve të tjerë", "option-backlinks": "Lidhje për brenda", "option-backlinks-description": "Shfaq lidhjet nga dokumenta të tjerë", "option-show-tags": "Etiketime", "option-show-tags-description": "Etiketimet lidhen me dokumentet në të cilët përkasin", "option-show-attachments": "Materiale të bashkangjitura", "option-show-attachments-description": "Shfaq materialet e bashkangjitura të përfshira nëpër dokumente", "option-show-existing-files-only": "Vetëm dokumentat ekzistues", "option-show-existing-files-only-description": "Kur i përzgjedhur,ky opsion fsheh lidhjet që i referohen dokumenteve joekzistues", "option-show-orphans": "Dokumentet jetimë", "option-show-orphans-description": "Shfaq dokumentet të cilët nuk lidhen me ndonjë dokument tjetër", "label-display": "Shfaq", "option-show-arrows": "Shigjeta", "option-show-arrows-description": "Shfaq shigjeta kur afrohet pamja", "option-text-fade": "Limiti i zbehjes së tekstit", "option-node-size": "Përmasa e nyjeve", "option-link-thickness": "Trashësia e vijave lidhëse", "label-forces": "Forcat", "option-center-force": "Forca qëndrore", "option-link-force": "Forca e lidhjes", "option-link-distance": "Distanca e lidhjes", "option-repel-force": "Forca shtytëse", "tooltip-open-graph-settings": "Hap opsionet e grafikut", "msg-screenshot-copied": "`Screenshot` u kopjua në memorien e fragmenteve (clipboard).", "label-groups": "Grupimet", "placeholder-enter-query": "Shkruaj një term kërkimi...", "tooltip-delete-graph": "Fshi grupimin", "button-new-group": "Krijo një grupim të ri", "tooltip-click-to-change-drag-to-reorder": "Kliko për të ndryshuar ngjyrën\nTërhiq për të riorganizuar grupimet", "action-timelapse": "Nis animimin `timelapse` të grafikut", "tooltip-start-timelapse-animation": "Start timelapse animation", "button-animate-timelapse": "Animate" }, "backlinks": { "name": "Lidhjet kthyese", "desc": "Shfaq numrin e lidhjeve kthyese në shiritin e gjendjes.", "action-open": "Hap lidhjet kthyese", "action-show": "Shfaq panelin e lidhjeve kthyese", "action-open-for-current": "Hap lidhjet kthyese për dokumentin aktiv", "action-toggle-backlinks-in-document": "Ndërro mes lidhjeve kthyese në dokument", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "Përmendje të referuara", "label-no-backlinks": "Nuk ka lidhje kthyese.", "label-unlinked-mentions": "Përmendje të pa-referuara", "label-show-search": "Shfaq filtrat e kërkimit", "label-link-button-text": "Lidhje", "tab-title": "Lidhje kthyese për {{displayText}}", "label-no-unlinked-mentions": "Nuk ka përmendje të pa referuara.", "ellipsis": "...", "option-backlink-in-document": "Backlink in document", "option-backlink-in-document-desc": "Show backlinks in document by default when opening new panes." }, "outgoing-links": { "name": "Lidhje për jashtë", "desc": "Shfaq lidhjet për jashtë dhe detekto përmendje të pa-referuara të dokumenteve të tjerë në dokumentin aktual.", "action-open": "Hap lidhjet për jashtë", "action-show": "Shfaq panelin e lidhjeve për jashtë", "action-open-for-current": "Hap lidhjet për jashtë për dokumentin aktiv", "tab-title": "Lidhjet për jashtë nga {{displayText}}", "label-links": "Lidhjet", "label-no-links": "Nuk ka lidhje", "label-unlinked-mentions": "Përmendje të pa referuara", "tooltip-link-file": "Lidh këtë dokument", "tooltip-not-created": "Nuk është krijuar akoma" }, "tag-pane": { "name": "Panelin i etiketimeve", "desc": "Shfaq të gjitha etiketimet tuaja bashkë me numrin e herëve që janë përdorur", "action-show": "Shfaq paonelin e etiketimeve", "label-no-tags": "Nuk ka etiketime.", "label-sort-by-name-a-to-z": "Emri i etiketimit (nga A në Z)", "label-sort-by-name-z-to-a": "Emri i etiketimit (nga Z në A)", "label-sort-by-frequency-high-to-low": "Frekuenca (nga e lartë në e ulët)", "label-sort-by-frequency-low-to-high": "Frequency (nga e ulët në e lartë)", "action-show-nested-tags": "Shfaq etiketimet e degëzuara (nested)", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "Afishimi i faqes", "desc": "Afisho një dokument kur kalon mausin mbi një lidhje të brendshme. Ctrl/Cmd + kalo mausin mbi një lidhje në modën e përpunimit.", "label-empty-note": "\"{{linktext}}\" nuk është krijuar akoma. Kliko për t'a krijuar.", "label-source-editor": "Përpunues", "label-source-preview": "Afishim", "label-source-search": "Kërkim, Lidhje kthyese dhe Lidhje për jashtë", "label-require-mod": "Kërko {{key}} për të iniciuar afishimin e faqes gjatë kalimit të mausit nga sipër" }, "starred": { "name": "Të shenjuara", "desc": "Shenjo dokumentat dhe kërkimet e përdorua shpesh.", "action-show": "Shfaq panelin e shenjimeve", "action-toggle": "Shënjo/Hiq shenjimin për dokumentin aktual", "action-toggle-search": "Shënjo/Hiq shenjimin për kërkimin aktual", "action-star": "Shenjo", "action-unstar": "Hiq shënjimin", "menu-opt-remove": "Hiq", "msg-successfully-starred": "{{type}} \"{{title}}\". u shenjua me sukses", "msg-removed-starred": "Shenjimi {{type}} \"{{title}}\" u hoq me sukses.", "msg-cannot-find-path": "Dokumenti nuk gjendet në \"{{path}}\"." }, "custom-css": { "name": "CSS e modifikuar", "desc": "Lexon \"obsidian.css\" në kasafortë dhe e aplikon atë.", "setting-community-themes": "Motifet e komunitetit", "msg-fetching-themes": "Duke marrë motifet nga komuniteti...", "prompt-filter": "Filtro...", "label-dark-theme-only": "Vetëm motife të errëta", "label-light-theme-only": "Vetëm motife të ndritshme", "label-use": "Përdor", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "Update", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "Remove theme", "label-visit-on-github": "Shiko në GitHub", "msg-load-error": "Motifet e komunitetit nuk mund të merreshin, ju lutemi kontrolloni lidhjen me internetin", "msg-now-using-theme": "Tani ju po përdorni {{title}} si motif CSS.", "msg-deleted-theme": "The theme {{title}} has been deleted.", "msg-updated-theme": "The theme {{title}} has been updated.", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "Paleta e komandave", "desc": "Shtypni një komandë për t'a përdorur. Nuk keni nevojë të përdorni ndërfaqen grafike për të përdorur komandat.", "action-open": "Hap paletën e komandavae", "instruction-navigate": "për të naviguar", "instruction-use": "për të përdorur", "instruction-dismiss": "për të anulluar", "label-no-commands": "Nuk ka komanda.", "prompt-type-command": "Shtyp një komandë...", "label-pinned-commands": "Komanda të ngulitura", "option-add-new-pin": "Komandë e ngulitur rishtazi", "option-add-new-pin-description": "Komandat e ngulitura shfaqen në krye të gjithë komandave kur nuk ka ndonjë term kërkimi." }, "markdown-format-importer": { "name": "Importuesi për formatin Markdown", "desc": "Konverto Markdown nga aplikacione të tjera në formatin e Obsidian.", "action-open": "Hap importuesin për Markdown", "option-roam-tag-fixer": "Korrigjuesi i etiketimeve Roam Research ", "option-roam-tag-fixer-description": "Konverton \"#tag\" dhe \"#[[tag]]\" në \"[[tag]]\".", "option-roam-highlight-fixer": "Korrigjuesi i nënvijëzimeve Roam Research", "option-roam-highlight-fixer-description": "Konverton \"^^highlight^^\" në \"==highlight==\".", "option-roam-todo-converter": "Konvertuesi i TODO Roam Research", "option-roam-todo-converter-description": "Konveron \"{{[[TODO]]}}\" në \"[ ]\".", "option-bear-highlight-fixer": "Rregulluesi i nënvijëzimeve Bear", "option-bear-highlight-fixer-description": "Konverton \"::highlight::\" në \"==highlight==\".", "zettelkasten-link-fixer": "Korrigjuesi i lidhjeve Zettelkasten", "zettelkasten-link-fixer-description": "Korrigjon lidhjet \"[[UID]]\" në variantin e plotë \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Zbukuruesi i lidhjeve Zettelkasten", "zettelkasten-link-beautifier-description": "Korrigjon lidhjet \"[[UID]]\" dhe gjithashtu i zbukuron ato \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Kujdes: Ky importues konverton të gjithë dokumentet në kasafortën tuaj, jo vetëm dokumentin aktual.", "msg-override-files-warning": "Dokumentet tuaj do mbishkruhen. Ruajini të gjithë dokumentet para se të tentoni konvertimin.", "label-start-conversion": "Nis Konvertimin", "label-stop": "Ndal", "label-go-back": "Shko mbrapa", "label-done": "Kryer", "label-processing": "Duke përpunuar...", "label-cancelling": "Duke anulluar...", "label-finished": "Kryer!", "label-processed-files": "Dokumentat u përpunuan", "label-modified-files": "Dokumentuat u modifikuan", "label-total-replacements": "Zëvendësime në total" }, "daily-notes": { "name": "Shënime ditore", "desc": "Hap shënimet e sotme, ose krijoji tani nëse nuk ekzistojnë.", "short-name": "Sot", "action-open": "Hap shënimet e sotme", "action-open-previous": "Hap shënimet e djeshme", "action-open-next": "Hap shënimet e nesërme", "action-insert-text": "Insert text into daily note", "action-insert-link": "Insert link into daily note", "msg-fail-format": "Shënimet e sotme nuk u krijuan dot. \"{{format}}\" nuk është format i vlefshëm.", "msg-fail-folder": "Shënimet e sotme nuk u krijuan dot. Dosja \"{{folderOption}}\" nuk u gjend.", "msg-fail-template-file": "Shënimet e sotme nuk u krijuan dot. Dokumenti shabllon(template) \"{{template}}\" nuk u gjend.", "msg-no-previous": "Nuk ka shënime ditore para këtyre.", "msg-no-next": "Nuk ka shënime ditore pas këtyre.", "option-date-format": "Formati i datës", "label-refer-to-syntax": "Për më shume info rreth sintakses, referojuni kësaj: ", "label-syntax-link": "Referenca e formatit", "label-syntax-live-preview": "Kështu do duket: ", "option-new-file-location": "Vendndodhje e re për dokumentin", "option-new-file-location-description": "Vendndodhja e dosjes ku do krijohen shënimet e reja ditore.", "option-template": "Vendndodhja e dokumentit shabllon(template)", "option-template-description": "Vendndodhja e dokumentit që do përdoret si model bazë", "option-open-on-start": "Hap shënimet ditore në hapje te aplikacionit", "option-open-on-start-description": "Hap shënimet ditore autoamatikisht sapo ju hapni këtë kasafortë." }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Shënime të rastit", "desc": "Hap një dokument shënimesh sipas rastit. E përshtatshme për rishikime dhe hulumtime.", "short-name": "Rastësore", "action-open": "Hap shënime sipas rastit" }, "outline": { "name": "Përmbledhja", "desc": "Shfq përmbledhjen e dokumentit aktiv ose panelit të lidhur me të.", "action-open": "Hap përmbledhjen", "action-show": "Shfaq panelin e përmbledhjes", "action-open-for-current": "Hap përmbledhjen e dokumentit aktiv", "tab-title": "Përmbledhja e {{displayText}}", "label-no-headings": "Nuk ka tituj." }, "word-count": { "name": "Numri i fjalëve", "desc": "Shfaq numrin e fjalëve ne shiritin e gjendjes." }, "slides": { "name": "Slide-t", "desc": "Prezanto me Markdown. Përdor \"---\" për të veçuar slide-t.", "action-start": "Nis prezantimin" }, "audio-recorder": { "name": "Regjistruesi audio", "desc": "Regjistro audio dhe ruaji si materiale të bashkangjitura.", "action-start": "Nis regjistrimin audio", "action-stop": "Ndal regjistrimin audio", "action-toggle": "Nis/ndal regjistrimin", "msg-access-denied": "Aksesi i mikrofonit u mohua, ju lutemi lejojeni duke shkuar në panelin e opsioneve.", "msg-pending-grant": "Ju lutemi të jepni lejen e duhur për aksesimin e mikrofonit në mënyre që të bëni regjistrimin.", "msg-no-microphone": "Nuk ka mikrofon të lidhur" }, "open-with-default-app": { "name": "Hap në aplikacionin përkatës", "desc": "Shto një buton për t'a hapur dokumentin aktual në aplikacionin përkatës", "action-open-file": "Hap në aplikacionin përkatës", "action-open-file-mobile": "Ndaj", "action-show-in-folder": "Shfaq në dosje", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "Shabllone (templates)", "desc": "Shto përmbajtje shabllon nga një dosje me dokumenta shabllon.", "action-insert": "Shto një shabllon", "action-insert-current-date": "Shto datën aktuale", "action-insert-current-time": "Shto kohën aktuale", "option-template-folder-location": "Vendndodhja e dosjes së shablloneve", "option-template-folder-location-description": "Dokumentat në këtë dosje do jenë të disponueshme.", "option-template-date-format": "Formati i datës", "option-template-date-format-description": "{{date}} në dokumentin shabllon do zëvendësohet me këtë vlerë.", "option-template-date-format-description2": "Mund të përdorni gjithashtu {{date:YYYY-MM-DD}} për t'a mbishkruar formatin një herë.", "option-template-time-format": "Formati i kohës", "option-template-time-format-description": "{{time}} në dokumentin shabllon do zëvendësohet me këtë vlerë..", "option-template-time-format-description2": "Mund të përdorni gjithashtu {{time:HH:mm}} për t'a mbishkruar formatin një herë.", "instruction-navigate": "për të naviguar", "instruction-insert": "për të shtuar një shabllon", "instruction-dismiss": "për të anulluar", "msg-no-templates-found": "Nuk ka shabllone", "msg-fail-invalid-folder": "Listimi i shablloneve dështoi. Dosja e shablloneve nuk është e vlefshme.", "msg-fail-folder-not-found": "Listimi i shablloneve dështoi. Dosja \"{{folderOption}}\" nuk u gjend.", "prompt-type-template": "Shtyp emrin e një shablloni..." }, "translucency": { "name": "Dritare e tejdukshme", "desc": "Aktivizon tejdukshmërinë për të ofruar. Më e përshtatshme për t'u përdorur me motifin e errët. Nuk ofrohet në Linux." }, "slash-command": { "name": "Slash commands", "desc": "Enable the ability to trigger slash commands in the editor by typing the forward slash." }, "editor-status": { "name": "Editor status", "desc": "Adds a status bar item to show and change the current editor mode.", "read": "Reading", "edit-source": "Source mode", "edit-live-preview": "Live Preview" }, "publish": { "name": "Publiko", "desc": "Publiko shënimet nëpërmjet Obsidian Publish.", "action-publish-changes": "Publiko ndryshimet...", "label-no-internet-access": "Duhet të keni lidhje me internetin për të publikuar ndryshimet.", "label-publish-service-description": "Obsidian Publish është një shërbim i paguar shtojcë që ju lejon të publikoni direkt nga Obsidian shënimet tuaja.", "label-please-login": "Për të nisur publikimin, ju lutemi të kyçeni ose të krijoni një llogari Obsidian.", "label-no-publish-subscription": "Ju nuk keni akoma një abonim Obsidian Publish.", "button-purchase": "Bli", "label-manage-sites": "Menaxho faqet", "label-no-sites": "Ju nuk keni ndonjë faqe.", "button-choose": "Përzgjidh", "tooltip-edit-site-id": "Modifiko ID e faqes", "tooltip-delete-site": "Fshi faqen", "label-delete-site-confirmation": "Jeni të sigurt që doni t'a fshini këtë faqe?", "label-delete-site-details": "Ky veprim do e fshije menjëherë dhe përgjithmonë faqen tuaj.", "label-confirm-delete-site": "Konfirmo fshirjen e faqes \"{{site}}\"", "option-site-id": "ID e faqes", "option-site-id-description": "Faqja juaj do jetë në https://publish.obsidian.md/{site id}. Ju mund t'a ndryshoni këtë më vonë. Vetëm gërma jo-kapitale, numra dhe vija mesore lejohen.", "option-site-id-placeholder": "Zgjidh një ID për faqen", "button-create": "Krijo", "msg-invalid-site-id": "ID e faqes mund të përmbajë vetëm gërma jo-kapitale, numra ose vija mesore.", "msg-site-id-in-use": "Kjo ID është aktualisht e zënë, ju lutemi provoni një tjetër.", "msg-create-site-issue": "Krijimi i faqes tuaj ndeshi një problem.", "label-site-options": "Opsionet e faqes", "option-site-general": "General", "option-site-components": "Komponentët", "option-site-appearance": "Pamja", "option-site-reading-experience": "Eksperienca e leximit", "option-site-misc": "Opsione të tjera të faqes", "option-site-name": "Emri i faqes", "option-site-name-description": "Emri i faqes tuaj të publikuar. Shfaqet në titullin e faqes tuaj.", "option-site-name-placeholder": "Emri i website-t tuaj", "option-home-page-file": "Dokumenti `homepage`", "option-home-page-file-description": "Faqja e parë që dikush sheh sapo hapin website-n tuaj", "option-home-page-file-placeholder": "Zgjidh një dokument të publikuar", "option-logo": "Logo", "option-logo-description": "Përzgjidh një imazh si logo për website-n tuaj.", "option-logo-placeholder": "Ndonjë imazh në kasafortën tuaj...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "Motifi", "option-theme-description": "Përcaktoni një skemë ngjyrash bazë për website-n tuaj.", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "Shfaq navigimin", "option-show-navigation-description": "Shfaq në të majtë një listë të gjithe faqeve të publikuara në website-n tuaj të publikuar.", "option-show-search": "Shfaq shiritin e kërkimit", "option-show-search-description": "Shfaq një shirit kërkimi në krye të navigimit për t'i ndihmuar vizitoret që të kërkojne faqje dhe tituj në website-n tuaj.", "option-show-graph": "Shfaq rrjetën grafike", "option-show-graph-description": "Shfaq një grafik të vogël në secilen faqe.", "option-show-outline": "Shfaq tabelën e përmbajtjes", "option-show-outline-description": "Shfaq përmbajtjen e titujve në secilën faqe.", "option-show-backlinks": "Shfaq lidhjet kthyese", "option-show-backlinks-description": "Shfaq seksionin e lidhjeve kthyese në fund të secilës faqe.", "option-sliding-window-mode": "Përdor dritare lëvizëse", "option-sliding-window-mode-description": "Hap faqet në panele të reja në të djathtë. Lejon `scrolling` horizontalisht përmes paneleve.", "option-hover-preview-file": "Shfaq një `preview` kur kalon mausin sipër", "option-hover-preview-file-description": "Tregon si duket faqja kur vendos mausin mbi një lidhje të asaj faqeje", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "Gjatësia e lexueshme e rreshtit", "option-readable-line-length-description": "Kufizon gjatësine maksimale të rreshtit. Shfaq më pak përmbajtje në ekran, por i bën paragrafët më të lexueshëm", "option-site-password": "Fjalëkalime", "option-site-password-description": "Kufizon aksesin në website-n tuaj nëpërmjet fjalëkalimeve.", "option-google-analytics": "Kodi për Google Analytics", "option-google-analytics-description": "Konfiguron Google Analytics për website-n. I disponueshëm vetëm për vizitorë nga adresa juaj e domeinit (Domain URL). Ju lutemi konsultohuni me ligjet dhe rregullat e vendit tuaj fillimisht.", "button-manage-passwords": "Menaxho", "button-save-site-settings": "Ruaj konfigurimet e faqes", "msg-updated-options": "Konfigurimet e faqes u përditësuan.", "button-go-back": "Shko mbrapa", "label-publishing-to": "Duke publikuar në", "tooltip-switch-site": "Ndërro site-n", "button-add-linked": "Shto të lidhurat", "tooltip-add-linked": "Shton të gjithë dokumentet që lidhen me elementët e përzgjedhur aktualisht", "msg-added-linked-files": "{{count}} dokument i lidhur u shtua.", "msg-added-linked-files_plural": "{{count}} dokumente të lidhur u shtuan.", "tooltip-open-site-options": "Ndrysho konfigurimet e faqes", "label-no-changes-detected": "Nuk ka ndryshiem.", "label-changed-files-to-be-published": "Të ndryshuara", "label-unchanged-files-already-published": "Të pa ndryshuara (përzgjidh për t'i fshire)", "label-file-selected": " të perzgjedhura", "button-select-all-files": "Përzgjidh të gjitha", "button-deselect-all-files": "Hiq përzgjedhjen", "label-new-files-to-be-published": "Të reja", "button-publish": "Publiko", "msg-no-permission-to-publish-to-site": "Ju nuk keni nivelin e duhur të aksesit për të publikuar në site-n aktual.", "msg-select-at-least-one-file": "Ju lutemi përzgjidhni të paktën një dokument.", "label-upload-changes": "Apliko ndryshimet", "button-done": "Kryer", "button-stop": "Ndal", "label-status-uploading": "Duke aplikuar", "label-status-to-publish": "Për të publikuar", "label-status-to-delete": "Për të fshire", "label-status-published": "Publikuar", "label-status-deleted": "Fshirë", "label-status-failed": "Dështuar", "label-status-cancelled": "Anulluar", "button-change": "Ndrysho", "label-clear-cache": "Duhen pak minuta që ndryshimet të shfaqen në website-n tuaj. Nëse nuk i shihni ndryshimet më të fundit, provoni të pastroni cache-n e browser-it.", "label-visit-site": "Mund t'a vizitoni site-n këtu: ", "msg-something-went-wrong": "Diçka shkoi gabim. Ju lutemi shihni konsolën e zhivlluesit (developer console) për më shume detaje", "msg-network-error": "U has një problem me rrjetin. ", "label-manage-passwords": "Menaxho fjalëkalimet", "label-add-password": "Shto një fjalëkalim", "action-new-password": "Fjalëkalim i ri", "label-no-password": "Website-i juaj nuk ka fjalëkalim. Kushdo mund t'a vizitojë atë.", "label-have-password": "Website-i juaj mbrohet me fjalëkalim. Nëse keni disa fjalëkalime, vizitorët mund t'a aksesojnë website-n me cilindo prej tyre.", "option-password-name": "Fjalëkalim", "option-password-desc": "Një hash i fjalëkalimit tuaj do ruhet në mënyrë të sigurt. Sapo të vendosni fjalëkalimin, ai nuk mund të zbulohet më si tekst i thjeshtë.", "option-password-placeholder": "Fjalëkalimi juaj", "option-nickname-name": "Pseudonimi (opsional)", "option-nickname-desc": "Vendosni një pseudonim për t'i rikujtuar vetes për çfarë ose për kë është fjalëkalimi.", "action-add-password": "Shto këtë fjalëkalim", "label-untitled-password": "Fjalim i paemërtuar", "label-password-created-time": "Krijuar më {{time}}", "msg-added-new-password": "Fjalëkalimi i ri u shtua.", "option-custom-domain": "Domein preferencial", "option-custom-domain-desc": "Përdorni domeinin tuaj në vend të https://publish.obsidian.md/{site id}.", "option-noindex": "Mos lejo indeksimin e motorëve të kërkimit", "option-noindex-desc": "Nuk lejon motorët e kërkimit të indeksojne site-n tuaj.", "button-configure": "Konfiguro", "label-configure-custom-domain": "Konfiguro domeinin preferencial", "option-custom-url-name": "URL preferenciale", "option-custom-url-desc": "Adresa URL në të cilën do gjendet site-i juaj.", "option-custom-url-placeholder": "www.domeinijuaj.com", "option-custom-url-redirect": "Riadreso për në domeinin tuaj", "option-custom-url-redirect-desc": "Riadreson vizitorët e publish.obsidian.md/id për në domeinin tuaj.", "button-update-custom-domain": "Përditëso konfigurimet e domeinit", "label-custom-domain-instructions": "Ju lutemi referojuni {{link}} në faqen tonë të ndihmës për më shumë informacion.", "label-custom-domain-link-name": "guida e konfigurimit të domeinit", "label-site-usage": "Ju po përdorni {{site}} jashtë {{limit}} tuaj.", "button-add-more-sites": "Blini më shumë site", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "Hapësira e punës", "desc": "Ruaj dhe ngarko paraqitjen e hapësirës së punës.", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "Ruaj", "button-load": "Ngarko", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "Sinkronizime", "desc": "Sinkronizo dokumentet tuaj nëpërmjet Obsidian Sync.", "action-view-version-history": "Shikoni historikun e versioneve", "label-load-more": "Shfaqni më shumë", "label-show-diff": "Show diff", "label-copy-to-clipboard": "Kopjo në memorien e fragmenteve (Clipboard)", "label-restore-this-version": "Rikthe këtë version", "msg-already-latest-version": "Ky version është aktualisht versioni më i fundit.", "msg-restored-version": "Versioni i {{time}} u rikthye me sukses", "label-file-deleted": "Ky dokument është fshirë", "label-no-earlier-version": "Nuk ka version më të hershëm të ketij dokumenti.", "label-empty-file": "Bosh", "label-setting-files": "Setting files", "label-deleted-files": "Dokumente të fshirë", "label-version-history": "Version history", "label-click-to-see-history": "Kliko në një dokument të fshirë për t'i shikuar historikun.", "label-create-remote-vault": "Krijo një kasafortë të largët (remote)", "msg-please-enter-password": "Ju lutemi jepni një fjalëkalim.", "msg-vault-name-cannot-be-empty": "Emri i kasafortës nuk mund të jetë bosh.", "msg-successfully-created-vault": "Kasaforta \"{{name}}\". u krijua me sukses", "label-remote-vault-explanation": "Kasafortat e largëta (remote_ sinkronizojne në mënyrë të sigurt kasafortën tuaj midis pajisjeve.", "option-vault-name": "Emri i kasafortës", "option-vault-name-desc": "Ju ndihmon të mbani mend për se e përdorni këtë kasafortë.", "option-vault-name-placeholder": "Dosja ime e paparë", "option-use-custom-encryption-password": "Konfiguroni fjalëkalimin e enkriptimit fund-më-fund", "option-use-custom-encryption-password-desc": "Nëse e çaktivizoni këtë, ne do menaxhojme në mënyrë të sigurt një çelës enkriptimi për ju.", "option-use-custom-encryption-password-desc-warning": "Ky opsion nuk mund të ndryshohet përsëri më vonë.", "option-encryption-password": "Fjalëkalimi për enkriptimin", "option-encryption-password-desc": "Ky fjalëkalim nuk mund të ndryshohet më vonë.", "option-encryption-password-desc-warning": "Nëse e harroni këtë fjalëkalim, cdo material i largët do jetë i papërdorshëm përgjithmone.", "option-encryption-password-desc-2": "Kjo nuk ndikon në materialet tuaja lokale.", "option-encryption-password-placeholder": "Fjalëkalimi juaj", "label-enter-encryption-password": "Shkruani fjalëkalimin e enkriptimit", "button-unlock-vault": "Çkyç kasafortën", "msg-verified-password": "Fjalëkalimi juaj u verifikua me sukses.", "label-remote-vaults": "Kasafortat e largëta", "label-vault-created-time": "Krijuar më {{time}}", "tooltip-delete-remote-vault": "Fshi", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "Konfirmo fshirjen e kasafortës", "label-confirm-delete-remote-vault-question": "Jeni të sigurt që doni t'a fshini këtë kasafortë?", "label-confirm-delete-remote-vault-result": "Të gjitha të dhënat në serverat tanë, përfshirë historikun e versioneve, do fshihen. Materialet tuaja lokale nuk do ndikohen.", "label-confirm-delete-remote-vault-warning": "Ky veprim është i përhershëm dhe i pakthyeshëm.", "msg-remote-vault-deleted": "{{name}} është fshirë.", "button-connect-to-remote-vault": "Lidhu", "button-disconnect-from-remote-vault": "Shkëputu", "label-not-remote-vaults": "Ju nuk keni kasaforta të largëta (remote).", "button-create-new-remote-vault": "Krijo një kasafortë të re", "label-sync-log": "Proçesverbali i sinkronizimit", "options-only-show-errors": "Vetëm problemet", "options-only-show-errors-desc": "Shfaq vetëm problemet dhe fsheh të dhënat e tjera të proçesverbalit.", "button-copy-sync-log": "Kopjo proçesverbalin e sinkronizimit", "msg-successfully-copied-sync-log": "Proçesverbali i sinkronizimit u kopjua me sukses.", "button-retry": "Provo përsëri", "button-purchase-subscription": "Bli", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "Përzgjidh", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "Gjëndja e sinkronizimit", "option-sync-status-desc-paused": "Obsidian Sync është aktualisht pezull.", "option-sync-status-desc-running": "Obsidian Sync është aktiv.", "option-device-name": "Emri i pajisjes", "option-device-name-desc": "Ky emër do shfaqet në proçeseverbalin e sinkronizimit. Lijeni bosh për të përdorur emrin standard (default).", "button-resume": "Rifillo", "button-pause": "Pezullo", "option-view-deleted-files": "Dokumente të fshirë", "option-view-deleted-files-desc": "Shiko dhe rikthe dokumentet e fshirë.", "option-sync-log": "Aktiviteti i sinkronizimeve", "option-sync-log-desc": "Shiko sinkronizimet e kohëve të fundit për të kryer rregullime.", "button-view": "Shiko", "button-bulk-restore": "Bulk restore", "button-restore-selected-files": "Restore selected files", "msg-restoring": "Restoring...", "msg-restoring-complete": "`Restore complete: {{succeeded}} succeeded and {{failed}} failed.`", "option-over-size": "Përmasa e kasafortës mbi limit", "option-over-size-desc": "Kasaforta juaj është {{size}} mbi limitin {{limit}}.", "msg-largest-files": "Shfaq dokumentet më të mëdha", "msg-largest-files-desc": "Këto janë ato dokumenta të largëta që zënë më shumë vend. Pasi të fshini disa materiale të bashkangjitura, përdorni butonin e spastrimit për të liruar hapësire në kasafortën e largët.", "button-purge-remote": "Spastro", "tooltip-purge-remote": "Spastron në mënyrë të përhershme materialet e bashkangjitura në kasafortën e largët.", "msg-purge-complete": "Spastrimi u krye.", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "Sinkronizim sipas përzgjedhjes", "option-excluded-folders": "Dosjet e anashkaluara", "option-excluded-folder-desc": "Ndalon sinkronizimin e dosjeve të caktuara.", "option-currently-excluded-folders": " Aktualisht këto dosje anashkalohen:", "button-manage-excluded-folders": "Menaxho", "option-sync-image": "Sinkronizo imazhe", "option-sync-image-desc": "Sinkronizon imazhet me këto mbaresa: {{extensions}}.", "option-sync-audio": "Sinkronizo audio", "option-sync-audio-desc": "Sinkronizon materiale audio me këto mbaresa: {{extensions}}.", "option-sync-video": "Sinkronizo video", "option-sync-video-desc": "Sinkronizon materiale video me këto mbaresa: {{extensions}}.", "option-sync-pdf": "Sinkronizo PDF", "option-sync-pdf-desc": "Sinkronizon materiale PDF.", "option-sync-unsupported": "Sinkronizo gjithë tipet e tjera", "option-sync-unsupported-desc": "Sinkronizon tipe materialesh që nuk suportohen.", "option-vault-config-sync": "Sinkronizimi i konfigurimeve të kasafortës", "option-view-config-files": "Settings version history", "option-view-config-files-desc": "View and restore version history of setting files.", "option-sync-app": "Konfigurimet kryesore", "option-sync-app-desc": "Aktivizo për të sinkronizuar konfigurimet e përpunimit të tekstit, dokumenteve & lidhjeve, komandave të konfiguara, etc.", "option-sync-appearance": "Konfigurimet e pamjes", "option-sync-appearance-desc": "Sinkronizo konfigurimet e pamjes si motifi i errët, motifet aktuale dhe copëzat aktive të stilizimit.", "option-sync-appearance-data": "Motife dhe copëza stilizimi", "option-sync-appearance-data-desc": "Sinkronizon motifet e shkarkuara dhe copëzat e stilizimit. Janë ose jo aktive varet nga opsioni i mëparshëm.", "option-sync-hotkey": "Hotkeys", "option-sync-hotkey-desc": "Sync custom hotkeys.", "option-sync-core-plugin": "Lista e shtojcave aktive bazë", "option-sync-core-plugin-desc": "Sinkronizo cilat shtojca bazë janë aktive", "option-sync-core-plugin-data": "Konfigurimet e shtojcave aktive", "option-sync-core-plugin-data-desc": "Sinkronizo konfigurimet e shtojcave bazë.", "option-sync-community-plugin": "Lista e shtojcave aktive të komunitetit", "option-sync-community-plugin-desc": "Sinkronizo cilat shtojca të komunitetit janë aktive", "option-sync-community-plugin-data": "Shtojcat e instaluara të komunitetit", "option-sync-community-plugin-data-desc": "Sinkronizo shtojcat e instaluara të komunitetit (dokumenta .js, .css, dhe manifest.json) dhe konfigurimet e tyre.", "label-sync-introduction": "Obsidian Sync është shërbimi shtojcë i sinkronizimit në Obsidian me enkriptim fund-më-fund dhe historik versionesh.", "label-account-required": "Për të nisur sinkronizimin, ju lutemi të kyçeni ose të krijoni një llogari Obsidian.", "button-sign-up": "Regjistrohu", "button-log-in": "Kyçu", "label-manage-excluded-folders": "Menaxho dosjet e anashkaluara", "label-number-of-folders-excluded": "{{folders}} aktualisht anashkalohen në sinkronizim.", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "Konfiguro lidhjen", "label-now-connected-to-vault": "Ju tani jeni të lidhur me \"{{name}}\".", "button-start-syncing": "Nis sinkronizimin", "label-confirm-merge-vault": "Confirm Merge Vault", "msg-vault-has-notes": "Your local vault already contains some notes.", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "Rekuperimi i dokumenteve", "desc": "Ju lejon të riktheni pamje të gjendjes (snapshots) së materialeve për t'ju ndihmuar të riktheni të dhëna të humbura aksidentalisht. Pamjet e gjendjes ruhen vetëm për dokumentet Markdown.", "action-open": "Hap pamjet e ruajtura", "option-interval": "Intervali kohor i pamjeve", "option-interval-description": "Intervali më i vogel në minuta mes dy pamjeve.", "option-keep": "Kohëzgjatja e historikut", "option-keep-description": "Numri i ditëve për të cilat ruhet amja e gjendjes.", "option-open-history": "Pamjet e gjendjeve", "option-open-history-description": "Shiko dhe rikthe gjendjet e ruajtura.", "button-view-snapshots": "Shiko", "option-clear": "Fshi historikun", "option-clear-description": "Spastro të gjitha gjendjet e ruajtura.", "button-clear-history": "Fshi", "label-clear-warning": "Jeni të sigurt që doni t'i fshini të gjitha pamjet e gjendjeve? Vini re që vetëm pamjet e gjendjeve do fshihen. Dokumentet brenda kasafortës tuaj nuk do ndikohen.", "msg-clear-complete": "Gjendjet e ruajtura u fshinë.", "label-no-history-found": "Nuk ka pamje gjendjesh të ruajtura.", "placeholder-choose-file": "Zgjidh një dokument...", "label-select-file": "Ju lutemi zgjidhni një dokument në të majtë për të parë pamjet e gjendjeve." }, "note-composer": { "name": "Kompozuesi i shënimeve", "desc": "Bashkoni, ndani dhe ripërpunoni shënimet.", "option-confirm-file-merge": "Konfirmo bashkimin e dokumenteve", "option-confirm-file-merge-description": "Pyet për konfirmim para bashkimit të dy dokumenteve.", "option-split-replacement-text": "Teksti pas ekstraktimit", "option-split-replacement-text-description": "Përcakton çfarë shfaqet në vend të tekstit të përzgjedhur pas ekstraktimit të tij.", "option-choice-split-replacement-text-link": "Lidhje ndaj një dokumenti të ri", "option-choice-split-replacement-text-embed": "Shto një dokument të brendësuar (embed)", "option-choice-split-replacement-text-none": "Asnjë", "option-template-file": "Vendndodhja e dokumentit shabllon", "option-template-file-description": "Dokumenti që përdor si model bazë gjatë bashkimit ose ekstraktimit. Variablat e disponueshme: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, p.sh. {{date:YYYY-MM-DD}}.", "command-merge-file": "Bashko dokumentin aktual me një tjetër...", "action-merge-file": "Bashko të gjithë dokumentin me...", "label-no-files": "Nuk ka dokumente.", "instruction-navigate": "për të naviguar", "instruction-merge": "për të bashkuar", "instruction-create-new": "për të krijuar një të ri", "instruction-merge-at-top": "për të bashkuar në krye", "instruction-dismiss": "për të anulluar", "prompt-select-file-to-merge": "Përzgjidh një dokument për t'ju përbashkuar...", "label-merge-file": "Bashko dokumentet", "label-confirm-file-merge": "Jeni të sigurt që doni të përbashkoni\"{{file}}\" në \"{{destination}}\"? \"{{file}}\" do fshihet.", "button-merge": "Përbashko", "button-merge-do-not-ask-again": "Përbashko dhe mos pyet më", "command-split-file": "Ekstrakto përzgjedhjen aktuale...", "command-extract-heading": "Ekstrakto këtë titull...", "instruction-append": "për t'a vendosur në fund", "instruction-prepend": "për t'a vendosur në krye", "msg-fail-to-fetch-template": "Dokumenti shabllon nuk u mor dot: \"{{template}}\" nuk gjendet.", "msg-fail-to-find-heading": "Failed to find heading" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} fjalë", "word-with-count_plural": "{{count}} fjalë", "character-with-count": "{{count}} karaktere", "character-with-count_plural": "{{count}} karaktere", "link-with-count": "{{count}} lidhje", "link-with-count_plural": "{{count}} lidhje", "file-with-count": "{{count}} dokument", "file-with-count_plural": "{{count}} dokumente", "folder-with-count": "{{count}} dosje", "folder-with-count_plural": "{{count}} dosje", "backlink-with-count": "{{count}} lidhje kthyese", "backlink-with-count_plural": "{{count}} lidhje kthyese", "site-with-count": "{{count}} `website`", "site-with-count_plural": "{{count}} `website`", "plugin-with-count": "{{count}} shtojcë", "plugin-with-count_plural": "{{count}} shtojca", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } }{ "setting": { "options": "Опције", "plugin": "Плагин", "builtin-plugins": "Уграђени плагинови", "plugin-options": "Опције плагина", "folder-path-example-placeholder": "Пример: датотека 1/датотека 2", "file-path-example-placeholder": "Пример: датотека/белешка", "msg-restart-required": "Измене на овом подешавању захтевају поновно покретање како би биле примењене.", "editor": { "name": "Уредник", "section-general": "Општа подешавања", "section-behavior": "Начин рада", "section-display": "Приказ", "option-spellcheck": "Провера правописа", "option-spellcheck-description": "Укључује проверу правописа. Тренутно ради само за енглески (САД).", "spellcheck-languages": "Језици провере правопица", "spellcheck-languages-description": "Изабери језик који се користи за проверу правописа.", "spellcheck-languages-mac-description": "Нативна функција провере правописа ће аутоматски детектовати језик који се користи на Мек ОС-у", "spellcheck-dict": "Речник за проверу правописа", "spellcheck-dict-empty": "Речник за проверу правописа је празан.", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "Видљива дужина линије", "option-readable-line-description": "Ограничити максималну дужину линије. Поставља мање садржаја на екран, али чини дуге пасусе читљивијима.", "option-strict-line-break": "Strict line breaks", "option-strict-line-break-description": "In preview mode, ignore single line breaks according to the Markdown specs. Turn this off for single line breaks to show in preview.", "option-show-frontmatter": "Show frontmatter", "option-show-frontmatter-description": "In preview mode, show frontmatter as a code block. Turn off to hide frontmatter section.", "option-auto-pair-brackets": "Аутоматско упаривање заграда", "option-auto-pair-brackets-description": "Аутоматски упарује заграде и знакове навода.", "option-auto-pair-markdown": "Аутоматско упаривање Маркдаун синтаксе", "option-auto-pair-markdown-description": "Аутоматски упарује симболе за задебљано, италик, наглашено, прецртано и код.", "option-smart-indent-lists": "Паметно увлачење редова за листе", "option-smart-indent-lists-description": "Аутоматски увлачи ред и поставља елементе.", "option-fold-heading": "Fold heading", "option-fold-heading-description": "Let you fold everything under a heading.", "option-fold-indent": "Fold indent", "option-fold-indent-description": "Let you fold a portion of the same indentation, such as lists.", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Editing view", "option-default-new-tab-view-reading": "Reading view", "option-default-editing-mode": "Default editing mode", "option-default-editing-mode-description": "The default editing mode a new pane will start with.", "option-default-editing-mode-source": "Source mode", "option-default-editing-mode-live-preview": "Live Preview", "option-show-line-number": "Прикажи број линије", "option-show-line-number-description": "Show line number in the gutter.", "option-indentation-guide": "Show indentation guides", "option-indentation-guide-description": "Show vertical relationship lines between bullet points for visual guidance.", "option-use-tabs": "Корист tab", "option-use-tabs-description": "Use tabs to indent when pressing the \"Tab\" key. Set this to off to use spaces.", "option-tab-size": "Tab size", "option-tab-size-description": "Number of spaces a tab is equivalent to.", "option-rtl": "Right-to-left (RTL)", "option-rtl-description": "Sets the text direction of notes to display in right-to-left.", "option-auto-convert-html": "Аутоматски конверту ХТМЛ", "option-auto-convert-html-description": "Automatically convert HTML to Markdown when pasting and drag-and-drop from webpages. Use Ctrl/Cmd+Shift+V to paste without conversion.", "option-vim-key-bindings": "Vim key bindings", "option-vim-key-bindings-description": "Let you use Vim key bindings in the source editor.", "option-vim-key-bindings-mobile": "On mobile devices, this setting is per-device and is not synchronized through the config file.", "option-emacsy-keys": "Legacy Emacs-style key bindings for macOS", "option-emacsy-keys-description": "Allows you to use the additional Emacs-style navigation keys, which are standard on macOS, but may interfere with some key operations.", "label-confirm-enable-vim": "Confirm entering Vim mode", "label-vim-warning": "Vim mode is for efficient text editing but can be quite counter-intuitive. If you're not familiar with Vim, this option might make it look like Obsidian has stopped working.", "label-vim-test": "To verify that you know your way around Vim, please enter the command to quit Vim without saving below:", "label-vim-your-answer": "Ваш одговор", "placeholder-enter-command": "Унесите команду...", "button-confirm-enable-vim": "Let me enable Vim", "msg-vim-mode-enabled": "Command is correct. Vim mode now enabled.", "msg-vim-mode-not-enabled": "Command is incorrect. Vim mode remains disabled to protect you.", "msg-vim-mode-please-enter-command": "Please enter the command to enable Vim mode", "option-legacy-editor": "Use legacy editor", "option-legacy-editor-description2": "The legacy editor will be deprecated soon. It is currently no longer maintained, and as such, bugs will no longer be addressed.", "label-legacy-deprecation": "New editor is here", "label-legacy-deprecation-1": "Obsidian now has a brand new editor that's more robust and accessible.", "label-legacy-deprecation-2": "It seems you're still using the legacy editor, and we think you'll enjoy the new editor.", "label-legacy-deprecation-choice": "Which mode would you like to use?", "label-live-preview-description": "A more modern, what-you-see-is-what-you-get experience.", "label-source-mode-description": "See raw Markdown with syntax highlighting.", "button-start-new-editor": "Start new editor" }, "file": { "name": "Files & Links", "option-confirm-file-deletion": "Потврдите брисање датотеке", "option-confirm-file-deletion-description": "Whether you want to get prompted to confirm file deletion.", "option-delete-destination": "Обрисане датотеке", "option-delete-destination-description": "What to do with files after you delete them.", "option-choice-system-trash": "Move to system trash", "option-choice-vault-trash": "Move to Obsidian trash (.trash folder)", "option-choice-permanent-delete": "Трајно брисање", "option-always-update-links": "Always update internal links", "option-always-update-links-description": "Whether to automatically update links after renaming a file or prompt.", "option-new-note-location": "New note default location", "option-new-note-location-description": "Where to put newly created notes. Plugin settings will override this.", "option-choice-vault-root": "Vault root", "option-choice-current-folder": "Same folder as the file is in", "option-choice-specified-folder": "In the folder specified below", "option-new-file-folder-path": "Folder to create new notes in", "option-new-file-folder-path-description": "Newly created notes will appear under this folder. Plugin settings will override this.", "option-use-wiki-links": "Користи [[Wikilinks]]", "option-use-wiki-links-description": "Auto-generate Wikilinks for [[links]] and ![[images]] instead of Markdown links and images. Disable this option to generate Markdown links instead.", "option-show-unsupported-files": "Детектуј све екстензије датотека", "option-show-unsupported-files-description": "Show files with any extension even if Obsidian can't open them natively, so that you can link to them and see them in File Explorer and Quick Switcher.", "option-link-autocompleted-format": "New link format", "option-link-autocompleted-format-description": "What links to insert when auto generating internal links.", "option-choice-shortest-linktext": "Shortest path when possible", "option-choice-relative-path": "Relative path to file", "option-choice-absolute-path": "Absolute path in vault", "option-new-attachment-location": "Default location for new attachments", "option-new-attachment-location-description": "Where newly added attachments are placed.", "option-choice-subdirectory": "In subfolder under current folder", "option-attachment-folder-path": "Attachment folder path", "option-attachment-folder-path-description": "Newly created attachment files will appear here. That includes images created via drag and drop or pasting, and audio recordings.", "option-attachment-subfolder-path": "Subfolder name", "option-attachment-subfolder-path-description": "If your file is under \"vault/folder\", and your set subfolder name to \"attachments\", attachments will be saved to \"vault/folder/attachments\".", "option-attachment-subfolder-path-placeholder": "attachments", "option-excluded-files": "Excluded files", "option-excluded-files-desc": "Excluded files will be either hidden or less noticeable in various places, such as Quick Switcher, link suggestion, and Graph View.", "label-no-excluded-filters-applied": "No excluded filter is applied right now. Add one below.", "label-excluded-filters-applied": "Files matching the following filters are currently excluded:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Enter path or \"/regex/\"..." }, "appearance": { "name": "Appearance", "option-base-theme": "Base theme", "option-base-theme-description": "Choose Obsidian’s default color scheme.", "option-accent-color": "Accent color", "option-accent-color-description": "Choose the accent color used throughout the app.", "dark-theme": "Dark", "light-theme": "Light", "system-theme": "Adapt to system", "option-font": "Font", "option-advanced": "Advanced", "option-interface-font": "Interface font", "option-interface-font-description": "Set base font for all of Obsidian.", "option-text-font": "Text font", "option-text-font-description": "Set font for editing and reading views.", "option-monospace-font": "Monospace font", "option-monospace-font-description": "Set font for places like code blocks and frontmatter.", "label-single-font-currently-in-effect": " Currently applied font: ", "label-multiple-fonts-currently-in-effect": " The following fonts are currently applied:", "option-font-placeholder": "Enter font name...", "label-no-custom-font-set": "No custom font is applied right now. Add one below.", "label-font-applied": "The first font from this list that is available on your system will be applied.", "msg-font-not-found": "This font is not detected on your system.", "msg-font-found": "This font is detected on your system.", "label-font-name": "Font name", "option-community-themes": "Open community themes", "option-community-themes-description": "Preview and use amazing themes created by the community.", "button-browse-community-themes": "Browse", "option-font-size": "Font size", "option-font-size-description": "Font size in pixels that affects editor and preview.", "option-font-size-action": "Quick font size adjustment", "option-font-size-action-description": "Adjust the font size using Ctrl + Scroll, or using the trackpad pinch-zoom gesture.", "option-themes": "Themes", "option-manage-themes-description": "Manage installed themes and browse community themes.", "option-theme-button-manage": "Manage", "option-choice-none": "None", "option-native-menus": "Native menus", "option-native-menus-desc": "Menus throughout the app will match the operating system. They will not be affected by your theme.", "button-reload-themes": "Поново учитајте теме", "msg-reloaded-themes": "Reloaded custom CSS themes.", "button-open-themes-folder": "Open themes folder", "option-css-snippets": "CSS snippets", "label-no-css-snippets-found": "No CSS snippets found in the snippets folder.", "no-snippet-description": "CSS Snippets are stored in \"{{path}}\".", "button-reload-snippets": "Поново учитај исечке", "button-open-snippets-folder": "Отвори датотеку исечака", "msg-reloaded-snippets": "Reloaded CSS snippets.", "option-toggle-snippet-description": "Apply CSS snippet at \"{{path}}\".", "label-installed-themes": "Installed themes", "label-screenshot-unavailable": "Screenshot unavailable", "label-default-theme": "Default", "tooltip-click-to-enlarge": "Click to enlarge", "button-update": "Update", "label-currently-selected": "Selected", "option-frame-style": "Window frame style", "option-frame-description": "Determines the styling of the title bar of Obsidian windows. Requires a full restart to take effect.", "option-frame-hidden": "Hidden (default)", "option-frame-obsidian": "Obsidian frame", "option-frame-native": "Native frame", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Show tab title bar", "option-show-view-header-desc": "Display the header at the top of every tab.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "button-check-for-updates": "Check for updates", "button-view-updates": "View updates", "button-update-all-themes": "Update all", "label-current-themes": "Current community themes", "label-currently-installed": "You currently have {{count}} theme installed.", "label-currently-installed_plural": "You currently have {{count}} themes installed." }, "hotkeys": { "name": "Hotkeys", "prompt-filter": "Filter...", "tooltip-delete-hotkey": "Delete hotkey", "label-waiting-for-hotkey-press": "Press hotkey...", "tooltip-restore-default": "Restore default", "tooltip-customize-command": "Customize this command", "tooltip-hotkey-single-conflict": "This hotkey conflicts with \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "This hotkey conflicts with {{count}} other commands", "label-blank-hotkey": "Blank" }, "about": { "name": "About", "label-commercial-license": "Commercial license", "label-license-key": "License key", "license-key-placeholder": "Your license key...", "label-activate-license": "Activate license", "button-activate": "Активирај", "label-unknown-version": "Незнан", "label-current-version": "Тренутна верзија: ", "label-install-version": "(Верзија инсталатера: {{version}})", "label-up-to-date": "Your app is up to date!", "label-read-changelog": "Read the changelog.", "label-manual-update-required": "To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.", "label-download": "Download", "label-new-version-ready": "Нова верзија је спремна за инсталацију ", "label-relaunch-to-update": "Relaunch the app to update.", "label-disabled-updates": "Updates are disabled.", "label-checking-for-updates": "Checking for updates...", "button-relaunch": "Relaunch", "button-check-for-updates": "Check for updates", "option-auto-update": "Automatic updates", "option-auto-update-description": "Turn this off to prevent the app from checking for updates.", "option-get-help": "Get help", "option-get-help-description": "Get help on using Obsidian.", "button-open": "Отвори", "option-language": "Језик", "option-language-description": "Change the display language.", "option-insider-build": "Receive insider builds", "option-insider-build-description": "Auto-update to insider builds to try out new features. Note that these builds are bleeding edge and might be less stable.", "option-advanced": "Advanced", "option-hw-acceleration": "Hardware Acceleration", "option-hw-acceleration-description": "Turns on Hardware Acceleration, which uses your GPU to make Obsidian smoother.", "option-hw-acceleration-warning": "If you turn this off, app performance will be severely degraded.", "option-config-location": "Override config folder", "option-config-location-description": "Use a different config folder than the default one. Must start with a dot.", "option-config-location-warning": "Config location must be a valid folder name that starts with a dot.", "label-license": "Лиценца", "label-your-commercial-license-key": "Your commercial license key is \"{{key}}\".", "label-commercial-license-info": "Registered to \"{{company}}\" for {{seats}} users. Valid until {{expiry}}.", "label-validating-commercial-license": "Validating...", "label-invalid-commercial-license": "License invalid: ", "button-remove-commercial-license": "Remove", "option-catalyst": "Catalyst license", "option-catalyst-desc": "You currently have the {{tier}} Catalyst license. Thanks for your support!", "option-catalyst-desc-no-license": "You don't have a Catalyst license right now. Catalyst license is a one-time donation to support Obsidian development.", "label-app": "App" }, "account": { "name": "Account", "option-your-account": "Your account", "option-your-account-desc": "You're currently signed in {{name}} ({{email}}).", "option-your-account-desc-no-login": "You're not logged in right now. An account is only needed for Obsidian Sync, Obsidian Publish, and Catalyst insider builds.", "button-manage-settings": "Manage settings", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Commercial license", "option-commercial-license-desc": "If you use Obsidian for commercial purpose, you may need to get a commercial license.", "button-purchase": "Purchase", "button-log-out": "Log out", "label-log-in": "Log in", "label-sign-up": "Sign up", "label-email": "Email", "placeholder-email": "Your email...", "label-password": "Password", "placeholder-password": "Your password...", "button-login": "Login", "message-empty-email": "Email cannot be empty.", "message-invalid-email": "Email is not valid.", "message-empty-password": "Password cannot be empty.", "message-login-failed": "Login failed, please double check your email and password.", "label-no-account": "Don't have an account? ", "link-sign-up-now": "Sign up now" }, "core-plugin": { "plugin-list": "Plugin list", "option-search-plugin": "Search core plugins", "option-search-plugin-description": "Filter plugins by name or description.", "placeholder-search-plugin": "Search plugins..." }, "third-party-plugin": { "name": "Third-party plugin", "option-restricted-mode": "Restricted mode", "option-restricted-mode-description": "Restricted mode is off. Turn on to disable community plugins.", "button-turn-on": "Turn on", "option-browse-community-plugins": "Community plugins", "option-browse-community-plugins-description": "Browse and install third-party plugins made by our amazing community.", "button-browse": "Browse", "label-exit-restricted-mode": "Exit Restricted Mode", "label-exit-restricted-mode-description-1": "Community plugins, like any other software you install, could potentially cause data integrity and security issues.", "label-exit-restricted-mode-description-2": "Plugin security is important to us. Here's what we do:", "label-exit-restricted-mode-description-3": "Despite our efforts, there is still a small chance that a community plugin might misbehave.", "label-code-review": "Initial code review", "label-code-review-desc": "Plugins undergo an initial code review by our team before they appear in the store.", "label-open-source": "Open source", "label-open-source-desc": "Most plugins are open source on GitHub, so you can inspect the code yourself.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We have a large community of developers who watch out for each other.", "label-report-mechanism": "Report mechanism", "label-report-mechanism-desc": "We follow up and remove faulty plugins upon user report.", "label-exit-restricted-mode-disable-confirmation": "Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.", "label-learn-more": "Learn more about plugin security", "button-turn-on-community-plugins": "Turn on community plugins", "label-trust-author": "Do you trust the author of this vault?", "label-trust-author-description-1": "You're opening this vault for the first time, and it comes with some plugins.", "label-trust-author-description-2": "If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.", "label-trust-author-description-3": "If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.", "button-enable-plugins": "Trust author and enable plugins", "button-dont-trust-author": "Browse vault in Restricted Mode", "placeholder-community-plugins": "Search community plugins...", "msg-failed-load-plugins": "Failed to load community plugins.", "label-installed": "Installed", "button-install": "Install", "button-enable": "Enable", "button-disable": "Disable", "button-copy-share-link": "Copy share link", "button-donate": "Donate", "label-no-results-found": "No results found.", "msg-failed-to-load-manifest": "Failed to load plugin manifest.", "label-version": "Version: {{version}}", "label-currently-installed-version": " (currently installed: {{version}})", "label-by-author": "By ", "label-repository": "Repository: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "This plugin does not support your device.", "button-update": "Update", "label-no-readme": "This plugin did not provide a README file.", "msg-installing-plugin": "Installing plugin \"{{name}}\"...", "msg-failed-to-install-plugin": "Failed to install plugin \"{{name}}\".", "msg-successfully-installed-plugin": "Successfully installed plugin \"{{name}}\".", "label-installed-plugins": "Installed plugins", "button-reload-plugins": "Reload plugins", "msg-reloaded-third-party-plugins": "Reloaded third-party plugins.", "label-uninstall": "Uninstall", "label-uninstall-plugin": "Uninstall plugin", "label-uninstall-plugin-confirmation": "Are you sure you want to uninstall this plugin? This will delete the folder of the plugin.", "button-open-plugins-folder": "Open plugins folder", "button-check-for-updates": "Check for updates", "button-update-all-plugins": "Update all", "label-current-plugins": "Current plugins", "label-currently-installed": "You currently have {{count}} plugin installed.", "label-currently-installed_plural": "You currently have {{count}} plugins installed.", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Show a message with how long each plugin took to initialize when starting the app.", "msg-no-updates-found": "No plugin updates found.", "msg-updates-found": "Found {{count}} plugin to update.", "msg-updates-found_plural": "Found {{count}} plugins to update.", "msg-update-plugin": "Update to version {{version}}", "option-search-installed-plugin": "Search installed plugins", "option-search-installed-plugin-description": "Filter installed plugins by name or description.", "placeholder-search-installed-plugin": "Search installed plugins...", "show-installed-only": "Show installed only", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "Showing {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Mobile toolbar", "option-configure-quick-action": "Configure mobile Quick Action", "option-configure-quick-action-description": "Configure which command to trigger when pull down from the top. The current command is set to \"{{command}}\".", "button-configure": "Configure", "placeholder-select-quick-action": "Select Quick Action...", "manage-toolbar-options": "Manage toolbar options", "option-internal-link": "Add internal link", "option-internal-embed": "Add embed", "option-tag": "Add tag", "option-heading": "Toggle heading", "option-strikethrough": "Toggle strikethrough", "option-highlight": "Toggle highlight", "option-code": "Toggle code", "option-blockquote": "Toggle blockquote", "option-markdown-link": "Add Markdown link", "option-bullet-list": "Toggle bullet list", "option-numbered-list": "Toggle numbered list", "option-indent-list": "Indent list item", "option-unindent-list": "Unindent list item", "option-undo": "Undo", "option-redo": "Redo", "option-move-caret-up": "Move caret up", "option-move-caret-down": "Move caret down", "option-move-caret-left": "Move caret left", "option-move-caret-right": "Move caret right", "option-first-line": "Go to first line", "option-last-line": "Go to last line", "option-toggle-keyboard": "Toggle keyboard", "option-configure-toolbar": "Configure mobile toolbar", "option-added-options": "Added options", "option-more-toolbar-options": "More toolbar options", "option-attach": "Insert attachment", "option-add-command": "Add global command", "option-add-command-description": "Select any global command to add to the toolbar." } }, "editor": { "search": { "placeholder-find": "Find", "placeholder-replace": "Replace", "label-previous": "Prev", "label-next": "Next", "label-all": "All", "label-exit-search": "Exit search", "label-replace": "Replace", "label-replace-all": "Replace all" }, "link-suggestion": { "label-type-hash": "Type #", "label-link-heading": "to link heading", "label-type-block": "Type ^", "label-link-block": "to link blocks", "label-type-pipe": "Type |", "label-change-display-text": "to change display text", "label-no-match-found": "No match found" }, "spellcheck": { "no-suggestion": "No suggestions...", "add-to-dictionary": "Add to dictionary" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "No heading", "label-heading-level": "Heading {{level}}" }, "print-modal": { "title": "Export to PDF", "caption": "Export \"{{filename}}\" to PDF with the setting below.", "setting-page-size": "Page size", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Include file name as title", "setting-landscape": "Landscape", "setting-margin": "Margin", "setting-margin-default": "Default", "setting-margin-minimal": "Minimal", "setting-margin-none": "None", "setting-downscale-percent": "Downscale percent", "button-export-to-pdf": "Export to PDF" }, "link-popover": { "tooltip-follow-link": "Follow link", "tooltip-open-link": "Open link", "tooltip-search-tag": "Search tag" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Open in default app", "empty-sidebar": "The sidebar is empty, try dragging a pane here.", "sidebar-expand": "Expand", "sidebar-collapse": "Collapse", "msg-fail-to-save-file": "Failed to save file \"{{filepath}}\". {{message}}.", "no-file": "No file", "msg-file-changed": "\"{{file}}\" has been modified externally, merging changes automatically.", "switch-vault": "Open another vault", "help": "Help", "settings": "Settings", "drag-to-rearrange": "Drag to rearrange", "msg-switched-to-read": "Switched default view mode to reading view.", "msg-switched-to-edit": "Switched default view mode to editor.", "msg-upgrade-installer": "To use this feature, please re-install with latest installer available from our website.", "tooltip-restore-default-settings": "Restore default settings", "label-copy": "Copy to clipboard", "copied_generic": "Copied to your clipboard", "copied": "{{item}} copied to your clipboard", "url": "Url", "msg-open-file-through-uri": "Opened file \"{{path}}\"", "msg-file-not-found-through-uri": "File \"{{name}}\" not found.", "delete-action-short-name": "Delete", "msg-indexing": "Obsidian is indexing your vault...\nThis should only happen once.\nSome functionality may not be available until this is complete.", "msg-indexing-complete": "Indexing complete.", "msg-sandbox-vault": "This is a sandbox vault.\nChanges you make in this vault will be lost.", "label-enter-to-create": "Enter to create", "label-update-available": "Update Available", "label-debug-info": "Debug info", "button-learn-more": "Learn more", "button-not-now": "Not now", "button-add": "Add", "button-manage": "Manage", "label-new-tab": "New tab", "msg-tab-busy": "This tab is currently busy, please try again later", "empty-state": { "no-file-open": "No file is open", "create-new-file": "Create new file", "go-to-file": "Go to file", "see-recent-files": "See recent files", "close": "Close", "unknown-pane-title": "Plugin no longer active", "unknown-pane-desc": "The plugin that created this pane ({{type}}) has gone away" }, "menu": { "edit-view": "Edit (Ctrl/Cmd+Click to edit in new pane)", "read-view": "Current view: reading", "switch-to-edit-view": "Click to edit", "switch-to-read-view": "Click to read", "mod-click-open-new-tab": "{{key}}+Click to open in new tab", "find": "Find...", "replace": "Replace...", "edit": "Edit", "preview": "Preview", "more-options": "More options", "close": "Close", "close-others": "Close others", "close-right": "Close tabs to the right", "pin": "Pin", "unpin": "Unpin", "unlink-tab": "Unlink tab", "link-tab": "Link with tab...", "toggle-source-mode": "Source mode", "toggle-reading-view": "Reading view", "delete-file": "Delete file", "create-file": "Create this file", "open-link": "Open link", "open-in-new-tab": "Open in new tab", "open-to-the-right": "Open to the right", "copy-url": "Copy url", "close-current-tab": "Close current tab", "copy": "Copy", "cut": "Cut", "paste": "Paste", "paste-as-plain-text": "Paste as plain text", "select-all": "Select all", "rename-heading": "Rename this heading...", "rename-blockid": "Rename this block ID...", "open-in-new-window": "Open in new window", "move-to-new-window": "Move to new window", "open-in-browser": "Open in browser", "stack-tabs": "Stack tabs", "unstack-tabs": "Unstack tabs" }, "tooltip": { "click-to-expand": "Click to expand", "click-to-collapse": "Click to collapse", "alias": "Alias", "not-created-yet": "Not created yet, select to create" }, "start-screen": { "label-version": "Version", "option-open-folder-as-vault": "Open folder as vault", "option-open-folder-as-vault-description": "Choose an existing folder of Markdown files.", "option-create-vault": "Create new vault", "option-create-vault-description": "Create a new Obsidian vault under a folder.", "option-connect-obsidian-sync": "Connect to Obsidian Sync", "option-connect-obsidian-sync-description": "Set up a synced vault with existing remote vault.", "option-new-vault-name": "Vault name", "option-new-vault-name-description": "Pick a name for your awesome vault.", "option-new-vault-location": "Location", "option-new-vault-location-description": "Pick a place to put your new vault.", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Reveal vault in system explorer", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "Rename vault...", "msg-error-rename-exists": "There is already a vault with this name.", "msg-error-nested": "Cannot move vault into a subfolder of itself.", "msg-error-rename-open": "Can't rename a currently open vault.", "msg-rename-failed": "Failed to rename vault.", "msg-rename-success": "Successfully renamed vault.", "option-move-vault": "Move vault...", "msg-move-select-dest": "Select destination folder", "msg-error-move-exists": "There is already a vault at the destination.", "msg-error-move-open": "Can't move a currently open vault.", "msg-move-failed": "Failed to move vault.", "msg-move-success": "Successfully moved vault.", "option-remove": "Remove from list", "button-quick-start": "Quick start", "button-open": "Open", "button-browse": "Browse", "button-connect": "Connect", "button-create-vault": "Create", "button-back": "Back", "msg-empty-vault-name": "Vault name cannot be empty.", "msg-invalid-folder": "Please pick a valid folder.", "msg-failed-to-create-vault": "Failed to create vault.", "msg-failed-to-create-vault-at-location": "Could not create vault at the given location. Please double check the location and permission.", "msg-error-failed-to-open-vault": "Failed to open.", "msg-error-remove-current-open-vault": "Can't remove a currently open vault.", "option-get-help": "Get Help", "option-user-email": "Email", "placeholder-your-email": "Your email...", "option-user-password": "Password", "placeholder-your-password": "Your password...", "button-sign-in": "Sign in", "button-setup": "Setup", "option-connect-vault-desc": "Create a synced vault on this device.", "tooltip-own-vault": "This is a remote vault owned by you.", "tooltip-shared-vault": "This is a remote vault shared with you." }, "drag-and-drop": { "insert-link-here": "Insert link here", "insert-links-here": "Insert links here", "move-into-folder": "Move into \"{{folder}}\"", "star-this-file": "Star this file", "star-these-files": "Star these files", "open-in-this-tab": "Open in this tab", "open-as-tab": "Open as new tab" }, "window": { "maximize": "Maximize", "minimize": "Minimize", "restore-down": "Restore down", "close-window": "Close window", "go-back": "Go back", "go-forward": "Go forward" }, "start-up": { "loading-obsidian": "Loading Obsidian...", "obsidian-load-error": "An error occurred while loading Obsidian.", "button-reload-app": "Reload app", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "Open another vault", "loading-components": "Loading components...", "loading-plugins": "Loading plugins...", "loading-vault": "Loading vault...", "msg-failed-to-load-vault": "Failed to load vault: ", "loading-cache": "Loading cache...", "loading-workspace": "Loading workspace..." }, "mobile": { "action-import": "Import into vault", "action-choose-file-to-insert": "Choose a file to insert", "action-insert-text-into-file": "Insert text into {{filename}}", "action-insert-link-into-file": "Insert link into {{filename}}", "msg-importing": "Importing...", "msg-import-success": "Import success", "msg-failed-to-import-file": "Failed to import file {{filename}}", "msg-back-again-to-exit": "Press back again to exit." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "Save current file", "follow-cursor-link": "Follow link under cursor", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "Toggle pin", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "Navigate back", "navigate-forward": "Navigate forward", "use-dark-mode": "Use dark mode", "use-light-mode": "Use light mode", "change-theme": "Change theme", "search-current-file": "Search current file", "search-replace-current-file": "Search & replace in current file", "open-settings": "Open settings", "open-help": "Open help", "toggle-edit": "Toggle editing/reading view", "toggle-source-mode": "Toggle Live Preview/Source mode", "delete-current-file": "Delete current file", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "Toggle left sidebar", "toggle-right-sidebar": "Toggle right sidebar", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "Focus on editor", "toggle-fold": "Toggle fold on the current line", "fold-all": "Fold all headings and lists", "unfold-all": "Unfold all headings and lists", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "Swap line up", "swap-line-down": "Swap line down", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "Toggle bold for selection", "toggle-italics": "Toggle italics for selection", "toggle-highlight": "Toggle highlight for selection", "toggle-comments": "Toggle comments for selection", "insert-link": "Insert link", "toggle-spellcheck": "Toggle spellcheck", "delete-paragraph": "Delete paragraph", "toggle-checklist": "Toggle checklist status", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "Edit file title", "copy-path": "Copy file path", "copy-url": "Copy obsidian url", "export-pdf": "Export to PDF", "reload": "Reload app without saving", "undo-close-tab": "Undo close tab", "context-menu": "Show context menu under cursor", "show-debug-info": "Show debug info", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "Toggle edit/preview mode", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "This will affect {{links}} in {{files}}.", "msg-updated-links": "Updated {{links}} in {{files}}.", "label-update-links": "Update links", "label-confirm-update-link-to-file": "Do you want to update internal links that link to this file?", "button-always-update": "Always update", "button-just-once": "Just once", "button-do-not-update": "Do not update", "label-confirm-deletion": "Are you sure you want to delete \"{{filename}}\"?", "label-move-to-system-trash": "It will be moved to your system trash.", "label-move-to-vault-trash": "It will be moved to your Obsidian trash, which is located in the \".trash\" hidden folder in your vault.", "label-permanent-delete": "The file will be permanent deleted.", "label-non-empty-folder": "This folder is not empty.", "label-delete-folder-warning": "If you continue, all files inside this folder will be deleted.", "label-delete-folder": "Delete folder", "button-delete": "Delete", "button-delete-do-not-ask-again": "Delete and don't ask again", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "There are currently {{links}} pointing to this note.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "Delete file", "button-manage": "Manage", "button-cancel": "Cancel", "button-done": "Done", "button-save": "Save", "button-stop": "Stop", "button-continue": "Continue", "preparing-pdf": "Preparing PDF...", "label-rename-file": "Rename file", "label-new-name": "New name", "msg-rename-success": "Successfully renamed file.", "label-rename-heading": "Rename heading", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "Plugins", "file-explorer": { "name": "File explorer", "desc": "See all the files in your vault.", "action-open": "Open file explorer", "action-show": "Show file explorer", "action-create-note": "Create new note", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "New note", "action-new-folder": "New folder", "action-change-sort": "Change sort order", "action-reveal-file": "Reveal file in file explorer", "action-reveal-active-file": "Reveal active file in file explorer", "command-move-file": "Move file to another folder", "action-move-file": "Move file to...", "action-move-folder": "Move folder to...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "Type a folder", "label-no-folders": "No folders found.", "instruction-navigate": "to navigate", "instruction-move": "to move", "instruction-dismiss": "to dismiss", "label-sort-a-to-z": "Sort by file name (A to Z)", "label-sort-z-to-a": "Sort by file name (Z to A)", "label-sort-new-to-old": "Sort by edit time (new to old)", "label-sort-old-to-new": "Sort by edit time (old to new)", "label-sort-created-old-to-new": "Created time (old to new)", "label-sort-created-new-to-old": "Created time (new to old)", "menu-opt-new-note": "New note", "menu-opt-new-folder": "New folder", "menu-opt-set-attachment-folder": "Set as attachment folder", "menu-opt-rename": "Rename", "menu-opt-delete": "Delete", "menu-opt-make-copy": "Make a copy", "msg-invalid-characters": "File name cannot contain any of the following characters: ", "msg-unsafe-characters": "Links will not work with file names containing any of these characters: ", "msg-file-already-exists": "There's already a file with the same name", "msg-empty-file-name": "File name cannot be empty.", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "Last modified at {{time}}", "tooltip-created-time": "Created at {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Move", "label-untitled-file": "Untitled", "label-untitled-folder": "Untitled", "msg-set-attachment-folder": "Attachments will be saved to \"{{path}}\" from now on." }, "search": { "name": "Search", "desc": "Search for keyword in all the notes.", "action-open-search": "Search in all files", "label-collapse-results": "Collapse results", "label-match-case": "Match case", "label-explain-search-term": "Explain search term", "label-more-context": "Show more context", "prompt-start-search": "Type to start search...", "label-match-text": "Matches text: ", "label-match-regex": "Matches regex: ", "label-match-exact-text": "Contains exact text: ", "label-match-all": "Match all of: ", "label-match-any": "Match any of: ", "label-excluding": "Excluding: ", "label-case-sensitive": "Case sensitive", "label-case-insensitive": "Case insensitive", "label-match-file-path": "Match file path: ", "label-match-file-name": "Match file name: ", "label-match-content": "Match file content: ", "label-match-task": "Match task: ", "label-match-task-todo": "Match task (todo): ", "label-match-task-done": "Match task (done): ", "label-match-line": "Match line: ", "label-match-block": "Match block: ", "label-match-section": "Match section: ", "label-match-tag": "Match tag: ", "label-no-matches": "No matches found.", "matches-with-count": "... and {{count}} more match.", "matches-with-count_plural": "... and {{count}} more matches.", "label-copy-search-results": "Copy search results", "button-copy-results": "Copy results", "msg-successfully-copied": "Results copied to your clipboard.", "option-show-path": "Show path", "option-show-path-description": "Display full path of the file rather than just the file name.", "option-link-style": "Link style", "option-link-style-description": "Optionally turn each file result in to a link.", "option-choice-link-style-none": "None", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Markdown link", "option-list-prefix": "List prefix", "option-list-prefix-description": "Optionally add a list item prefix to each file result.", "option-choice-list-style-none": "None", "option-choice-list-style-dash": "Dash (-)", "option-choice-list-style-asterisk": "Asterisk (*)", "option-choice-list-style-numbered": "Numbered", "tooltip-clear-search": "Clear search", "label-search-options": "Search options", "tooltip-read-more": "Read more", "label-history": "History", "tooltip-clear-history": "Clear search history", "label-path-option-description": "match path of the file", "label-file-name-option-description": "match file name", "label-tag-option-description": "search for tags", "label-line-option-description": "search keywords on same line", "label-section-option-description": "search keywords under same heading", "menu-opt-search-for": "Search for \"{{keyword}}\"" }, "quick-switcher": { "name": "Quick switcher", "desc": "Jump to any files without leaving your keyboard. Ctrl/Cmd+O to activate.", "short-name": "Switcher", "action-open": "Open quick switcher", "instruction-navigate": "to navigate", "instruction-open": "to open", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "to create", "instruction-dismiss": "to dismiss", "label-no-note-create-new": "No notes found. Enter to create a new one.", "prompt-type-file-name": "Type file to switch to or create...", "label-enter-to-create": "Enter to create", "tooltip-not-created-yet": "Not created yet, select to create", "option-show-existing-only": "Show existing only", "option-show-existing-only-description": "Whether to show links to files that are not yet created.", "option-show-attachments": "Show attachments", "option-show-attachments-desc": "Show attachment files like images, videos, and PDFs.", "option-show-all-file-types": "Show all file types", "option-show-all-file-types-desc": "Show all files including ones that Obsidian can't open. The file will be opened with the default app for that file type." }, "graph-view": { "name": "Graph view", "desc": "See a graph overview of which notes link to which.", "action-open": "Open graph view", "action-open-local": "Open local graph", "action-copy-screenshot": "Copy screenshot", "tab-title": "Graph of {{displayText}}", "label-filters": "Filters", "prompt-filter-nodes": "Search files...", "option-depth": "Depth", "option-depth-description": "Show nodes this number of links away", "option-neighbor-links": "Neighbor links", "option-neighbor-links-description": "Show links between neighbors.", "option-forelinks": "Outgoing links", "option-forelinks-description": "Show links to other files", "option-backlinks": "Incoming links", "option-backlinks-description": "Show links from other files", "option-show-tags": "Tags", "option-show-tags-description": "Tags are linked to the files that contain them", "option-show-attachments": "Attachments", "option-show-attachments-description": "Show attachments included by files", "option-show-existing-files-only": "Existing files only", "option-show-existing-files-only-description": "When checked, links to nonexistent files are not shown", "option-show-orphans": "Orphans", "option-show-orphans-description": "Show files that are not linked to any other file", "label-display": "Display", "option-show-arrows": "Arrows", "option-show-arrows-description": "Show arrows when zoomed in", "option-text-fade": "Text fade threshold", "option-node-size": "Node size", "option-link-thickness": "Link thickness", "label-forces": "Forces", "option-center-force": "Center force", "option-link-force": "Link force", "option-link-distance": "Link distance", "option-repel-force": "Repel force", "tooltip-open-graph-settings": "Open graph settings", "msg-screenshot-copied": "Screenshot copied to the clipboard.", "label-groups": "Groups", "placeholder-enter-query": "Enter query...", "tooltip-delete-graph": "Delete group", "button-new-group": "New group", "tooltip-click-to-change-drag-to-reorder": "Click to change color\nDrag to reorder groups", "action-timelapse": "Start graph timelapse animation", "tooltip-start-timelapse-animation": "Start timelapse animation", "button-animate-timelapse": "Animate" }, "backlinks": { "name": "Backlinks", "desc": "Show number of backlinks in the status bar.", "action-open": "Open backlinks", "action-show": "Show backlinks pane", "action-open-for-current": "Open backlinks for the current file", "action-toggle-backlinks-in-document": "Toggle backlinks in document", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "Linked mentions", "label-no-backlinks": "No backlinks found.", "label-unlinked-mentions": "Unlinked mentions", "label-show-search": "Show search filter", "label-link-button-text": "Link", "tab-title": "Backlinks for {{displayText}}", "label-no-unlinked-mentions": "No unlinked mentions found.", "ellipsis": "...", "option-backlink-in-document": "Backlink in document", "option-backlink-in-document-desc": "Show backlinks in document by default when opening new panes." }, "outgoing-links": { "name": "Outgoing Links", "desc": "Show outgoing links and detect unlinked mentions of other notes in the current note.", "action-open": "Open outgoing links", "action-show": "Show outgoing links pane", "action-open-for-current": "Open outgoing links for the current file", "tab-title": "Outgoing links from {{displayText}}", "label-links": "Links", "label-no-links": "No links found.", "label-unlinked-mentions": "Unlinked mentions", "tooltip-link-file": "Link this file", "tooltip-not-created": "Not created yet" }, "tag-pane": { "name": "Tag pane", "desc": "Displays all your tags and along with their number of occurrences.", "action-show": "Show tag pane", "label-no-tags": "No tags found.", "label-sort-by-name-a-to-z": "Tag name (A to Z)", "label-sort-by-name-z-to-a": "Tag name (Z to A)", "label-sort-by-frequency-high-to-low": "Frequency (high to low)", "label-sort-by-frequency-low-to-high": "Frequency (low to high)", "action-show-nested-tags": "Show nested tags", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "Page preview", "desc": "Preview a note when hovering an internal link. Ctrl/Cmd + hover in editor mode.", "label-empty-note": "\"{{linktext}}\" is not created yet. Click to create.", "label-source-editor": "Editor", "label-source-preview": "Preview", "label-source-search": "Search, Backlinks, and Outgoing links", "label-require-mod": "Require {{key}} to trigger page preview on hover" }, "starred": { "name": "Starred", "desc": "Star frequently used files and searches.", "action-show": "Show starred pane", "action-toggle": "Star/unstar current file", "action-toggle-search": "Star/unstar current search", "action-star": "Star", "action-unstar": "Unstar", "menu-opt-remove": "Remove", "msg-successfully-starred": "Successfully starred {{type}} \"{{title}}\".", "msg-removed-starred": "Removed starred {{type}} \"{{title}}\".", "msg-cannot-find-path": "Cannot find file at \"{{path}}\"." }, "custom-css": { "name": "Custom CSS", "desc": "Reads \"obsidian.css\" in the vault and applies it.", "setting-community-themes": "Community themes", "msg-fetching-themes": "Fetching community theme data...", "prompt-filter": "Filter...", "label-dark-theme-only": "Dark themes only", "label-light-theme-only": "Light themes only", "label-use": "Use", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "Update", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "Remove theme", "label-visit-on-github": "Visit on GitHub", "msg-load-error": "Could not load community themes, please check your network.", "msg-now-using-theme": "You're now using {{title}} as your CSS theme.", "msg-deleted-theme": "The theme {{title}} has been deleted.", "msg-updated-theme": "The theme {{title}} has been updated.", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "Command palette", "desc": "Type a command to invoke it. No need to use the UI or remember the shortcut.", "action-open": "Open command palette", "instruction-navigate": "to navigate", "instruction-use": "to use", "instruction-dismiss": "to dismiss", "label-no-commands": "No commands found.", "prompt-type-command": "Type a command...", "label-pinned-commands": "Pinned commands", "option-add-new-pin": "New pinned command", "option-add-new-pin-description": "Pinned commands will appear at the top of all commands when no search query is present." }, "markdown-format-importer": { "name": "Markdown format importer", "desc": "Convert Markdown from other apps to Obsidian format.", "action-open": "Open Markdown importer", "option-roam-tag-fixer": "Roam Research tag fixer", "option-roam-tag-fixer-description": "Converts \"#tag\" and \"#[[tag]]\" to \"[[tag]]\".", "option-roam-highlight-fixer": "Roam Research highlight fixer", "option-roam-highlight-fixer-description": "Converts \"^^highlight^^\" to \"==highlight==\".", "option-roam-todo-converter": "Roam Research TODO converter", "option-roam-todo-converter-description": "Converts \"{{[[TODO]]}}\" to \"[ ]\".", "option-bear-highlight-fixer": "Bear highlight fixer", "option-bear-highlight-fixer-description": "Converts \"::highlight::\" to \"==highlight==\".", "zettelkasten-link-fixer": "Zettelkasten link fixer", "zettelkasten-link-fixer-description": "Fixes \"[[UID]]\" links to full \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Zettelkasten link beautifier", "zettelkasten-link-beautifier-description": "Fixes \"[[UID]]\" links and also beautify them \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Warning: the importer will convert all the files in your vault, not just the current file.", "msg-override-files-warning": "Your files will be overwritten. Back up all your files before attempting conversion.", "label-start-conversion": "Start Conversion", "label-stop": "Stop", "label-go-back": "Go back", "label-done": "Done", "label-processing": "Processing...", "label-cancelling": "Cancelling...", "label-finished": "Finished!", "label-processed-files": "Processed files", "label-modified-files": "Modified files", "label-total-replacements": "Total replacements" }, "daily-notes": { "name": "Daily notes", "desc": "Open today's daily note, or create one if not present.", "short-name": "Today", "action-open": "Open today's note", "action-open-previous": "Open previous daily note", "action-open-next": "Open next daily note", "action-insert-text": "Insert text into daily note", "action-insert-link": "Insert link into daily note", "msg-fail-format": "Failed to create daily note. \"{{format}}\" is not a valid format.", "msg-fail-folder": "Failed to create daily note. Folder \"{{folderOption}}\" not found.", "msg-fail-template-file": "Failed to create daily note. Template file \"{{template}}\" not found.", "msg-no-previous": "There's no daily note before this one.", "msg-no-next": "There's no daily note after this one.", "option-date-format": "Date format", "label-refer-to-syntax": "For more syntax, refer to: ", "label-syntax-link": "format reference", "label-syntax-live-preview": "Here is what it will look like: ", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new daily note.", "option-template": "Template file location", "option-template-description": "The file path to use as template.", "option-open-on-start": "Open daily note on startup", "option-open-on-start-description": "Open your daily note automatically whenever you open this vault." }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Random note", "desc": "Opens a random note. Useful for reviewing and discovering.", "short-name": "Random", "action-open": "Open random note" }, "outline": { "name": "Outline", "desc": "Displays the outline of the current file or linked pane.", "action-open": "Open outline", "action-show": "Show outline pane", "action-open-for-current": "Open outline of the current file", "tab-title": "Outline of {{displayText}}", "label-no-headings": "No headings found." }, "word-count": { "name": "Word count", "desc": "Show word count in the status bar." }, "slides": { "name": "Slides", "desc": "Present from Markdown. Use \"---\" to separate slides.", "action-start": "Start presentation" }, "audio-recorder": { "name": "Audio recorder", "desc": "Record audio and save as attachment.", "action-start": "Start recording audio", "action-stop": "Stop recording audio", "action-toggle": "Start/stop recording", "msg-access-denied": "Microphone access was denied, please enable it from the preference pane.", "msg-pending-grant": "Please grant microphone permission to start recording.", "msg-no-microphone": "No microphone is connected." }, "open-with-default-app": { "name": "Open in default app", "desc": "Add button to open current file in the default app.", "action-open-file": "Open in default app", "action-open-file-mobile": "Share", "action-show-in-folder": "Show in folder", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "Templates", "desc": "Insert template content from a folder of template files.", "action-insert": "Insert template", "action-insert-current-date": "Insert current date", "action-insert-current-time": "Insert current time", "option-template-folder-location": "Template folder location", "option-template-folder-location-description": "Files in this folder will be available as templates.", "option-template-date-format": "Date format", "option-template-date-format-description": "{{date}} in the template file will be replaced with this value.", "option-template-date-format-description2": "You can also use {{date:YYYY-MM-DD}} to override the format once.", "option-template-time-format": "Time format", "option-template-time-format-description": "{{time}} in the template file will be replaced with this value.", "option-template-time-format-description2": "You can also use {{time:HH:mm}} to override the format once.", "instruction-navigate": "to navigate", "instruction-insert": "to insert template", "instruction-dismiss": "to dismiss", "msg-no-templates-found": "No templates found", "msg-fail-invalid-folder": "Failed to list templates. Template folder is invalid.", "msg-fail-folder-not-found": "Failed to list templates. Folder \"{{folderOption}}\" not found.", "prompt-type-template": "Type name of a template..." }, "translucency": { "name": "Translucent window", "desc": "Turn on translucency effect to enhance a sense of depth. Best used with dark mode. Not supported on Linux." }, "slash-command": { "name": "Slash commands", "desc": "Enable the ability to trigger slash commands in the editor by typing the forward slash." }, "editor-status": { "name": "Editor status", "desc": "Adds a status bar item to show and change the current editor mode.", "read": "Reading", "edit-source": "Source mode", "edit-live-preview": "Live Preview" }, "publish": { "name": "Publish", "desc": "Publish your notes through Obsidian Publish.", "action-publish-changes": "Publish changes...", "label-no-internet-access": "You need access to the internet to publish changes.", "label-publish-service-description": "Obsidian Publish is an add-on paid service that lets you publish your notes online directly from Obsidian.", "label-please-login": "To start publishing, please log in or create a new Obsidian account.", "label-no-publish-subscription": "You do not have an Obsidian Publish subscription yet.", "button-purchase": "Purchase", "label-manage-sites": "Manage sites", "label-no-sites": "You don't have any sites.", "button-choose": "Choose", "tooltip-edit-site-id": "Edit site ID", "tooltip-delete-site": "Delete site", "label-delete-site-confirmation": "Are you sure you want to delete this site?", "label-delete-site-details": "This will immediately and permanently delete your site.", "label-confirm-delete-site": "Confirm delete site \"{{site}}\"", "option-site-id": "Site ID", "option-site-id-description": "Your site will be at https://publish.obsidian.md/{site id}. You can change this later. Only lower case letters, numbers, and dashes are allowed.", "option-site-id-placeholder": "Pick a site ID", "button-create": "Create", "msg-invalid-site-id": "Site ID can only contain lowercase letters, numbers, and dashes.", "msg-site-id-in-use": "This site ID is in use, please try another one.", "msg-create-site-issue": "That was an issue when creating your site.", "label-site-options": "Site options", "option-site-general": "General", "option-site-components": "Components", "option-site-appearance": "Appearance", "option-site-reading-experience": "Reading experience", "option-site-misc": "Other site settings", "option-site-name": "Site name", "option-site-name-description": "Name of your published site. It will show up in the page title of your site.", "option-site-name-placeholder": "Name of your site", "option-home-page-file": "Homepage file", "option-home-page-file-description": "The first page the user sees when landing on your published site", "option-home-page-file-placeholder": "Pick a published file", "option-logo": "Logo", "option-logo-description": "Pick an image file as your site logo.", "option-logo-placeholder": "Any uploaded image in your vault...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "Theme", "option-theme-description": "Choose default color scheme for your site.", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "Show navigation", "option-show-navigation-description": "Display a list of all published pages on the left side of your published site.", "option-show-search": "Show search bar", "option-show-search-description": "Display a search bar at top of the navigation that lets the visitors search pages and headings on your site.", "option-show-graph": "Show graph view", "option-show-graph-description": "Display a small local graph on each page.", "option-show-outline": "Show table of contents", "option-show-outline-description": "Display the outline of headings on each page.", "option-show-backlinks": "Show backlinks", "option-show-backlinks-description": "Show backlink section at the end of each page.", "option-sliding-window-mode": "Use sliding windows", "option-sliding-window-mode-description": "Open pages in new panes to the right. Allows scrolling through panes horizontally.", "option-hover-preview-file": "Show hover preview", "option-hover-preview-file-description": "Display page preview when hovering links.", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "Readable line length", "option-readable-line-length-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-site-password": "Passwords", "option-site-password-description": "Restrict access to your site with passwords.", "option-google-analytics": "Google Analytics tracking code", "option-google-analytics-description": "Configure Google Analytics for your site. Only available for visitors from your custom domain URL. Please check with your local laws and regulations first.", "button-manage-passwords": "Manage", "button-save-site-settings": "Save site settings", "msg-updated-options": "Updated options for your site.", "button-go-back": "Back", "label-publishing-to": "Publishing to", "tooltip-switch-site": "Switch site", "button-add-linked": "Add linked", "tooltip-add-linked": "Add all files that are linked by currently selected items", "msg-added-linked-files": "{{count}} linked file has been added.", "msg-added-linked-files_plural": "{{count}} linked files have been added.", "tooltip-open-site-options": "Change site options", "label-no-changes-detected": "No changes were detected.", "label-changed-files-to-be-published": "Changes", "label-unchanged-files-already-published": "Unchanged (select to delete)", "label-file-selected": " selected", "button-select-all-files": "Select all", "button-deselect-all-files": "Deselect all", "label-new-files-to-be-published": "New", "button-publish": "Publish", "msg-no-permission-to-publish-to-site": "You do not have permissions to publish to the current site.", "msg-select-at-least-one-file": "Please select at least one file.", "label-upload-changes": "Upload changes", "button-done": "Done", "button-stop": "Stop", "label-status-uploading": "Uploading", "label-status-to-publish": "To publish", "label-status-to-delete": "To delete", "label-status-published": "Published", "label-status-deleted": "Deleted", "label-status-failed": "Failed", "label-status-cancelled": "Cancelled", "button-change": "Change", "label-clear-cache": "It takes up to a few minutes for the changes to show up on your site. If you do not see your latest changes, try clearing the cache in your browser.", "label-visit-site": "You can visit your site here: ", "msg-something-went-wrong": "Something went wrong. Please check the developer console for details.", "msg-network-error": "A network error occurred. ", "label-manage-passwords": "Manage passwords", "label-add-password": "Add password", "action-new-password": "New password", "label-no-password": "Your site currently does not have any passwords. Anyone can visit it.", "label-have-password": "Your site is password protected. If you have multiple passwords, visitors can access your site by entering any of them.", "option-password-name": "Password", "option-password-desc": "A hash of your password will be stored securely. Once the password is set, it cannot be revealed in plaintext.", "option-password-placeholder": "Your password", "option-nickname-name": "Nickname (optional)", "option-nickname-desc": "Set a nickname to remind yourself what or who the password is for.", "action-add-password": "Add this password", "label-untitled-password": "Untitled password", "label-password-created-time": "Created {{time}}", "msg-added-new-password": "Added new password.", "option-custom-domain": "Custom domain", "option-custom-domain-desc": "Use your own domain rather than the https://publish.obsidian.md/{site id} URL.", "option-noindex": "Disallow search engine indexing", "option-noindex-desc": "Prevent search engines from indexing your site.", "button-configure": "Configure", "label-configure-custom-domain": "Configure custom domain", "option-custom-url-name": "Custom URL", "option-custom-url-desc": "The URL that your site will be located at.", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "Redirect to your custom domain", "option-custom-url-redirect-desc": "Redirect visitors on publish.obsidian.md/id to your custom domain.", "button-update-custom-domain": "Update domain setting", "label-custom-domain-instructions": "Please refer to our {{link}} on our help site for more information.", "label-custom-domain-link-name": "custom domain setup guide", "label-site-usage": "You're using {{site}} out of your {{limit}}.", "button-add-more-sites": "Buy more sites", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "Workspaces", "desc": "Save and load workspace layout.", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "Save", "button-load": "Load", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "Sync", "desc": "Synchronize your files through Obsidian Sync.", "action-view-version-history": "View version history", "label-load-more": "Load more", "label-show-diff": "Show diff", "label-copy-to-clipboard": "Copy to clipboard", "label-restore-this-version": "Restore this version", "msg-already-latest-version": "This version is already the latest version.", "msg-restored-version": "Successfully restored version from {{time}}", "label-file-deleted": "This file was deleted", "label-no-earlier-version": "There was no earlier versions of this file.", "label-empty-file": "Empty", "label-setting-files": "Setting files", "label-deleted-files": "Deleted files", "label-version-history": "Version history", "label-click-to-see-history": "Click on a deleted file to see its history.", "label-create-remote-vault": "Create remote vault", "msg-please-enter-password": "Please enter a password.", "msg-vault-name-cannot-be-empty": "Vault name cannot be empty.", "msg-successfully-created-vault": "Successfully create remote vault \"{{name}}\".", "label-remote-vault-explanation": "Remote vaults securely synchronize your vault between devices.", "option-vault-name": "Vault name", "option-vault-name-desc": "Helps you remember what this vault is for.", "option-vault-name-placeholder": "My awesome vault", "option-use-custom-encryption-password": "Customize end-to-end encryption password", "option-use-custom-encryption-password-desc": "If you turn this off, we will securely manage an encryption key for you.", "option-use-custom-encryption-password-desc-warning": "This option cannot be changed later.", "option-encryption-password": "Encryption password", "option-encryption-password-desc": "This password cannot be changed later.", "option-encryption-password-desc-warning": "If you forget this password, any remote data will remain unusable forever.", "option-encryption-password-desc-2": "This does not affect your local data.", "option-encryption-password-placeholder": "Your password", "label-enter-encryption-password": "Enter encryption password", "button-unlock-vault": "Unlock vault", "msg-verified-password": "Successfully verified your password.", "label-remote-vaults": "Your remote vaults", "label-vault-created-time": "Created {{time}}", "tooltip-delete-remote-vault": "Delete", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "Confirm delete vault", "label-confirm-delete-remote-vault-question": "Are you sure you want to delete this remote vault?", "label-confirm-delete-remote-vault-result": "All data on our server, including version history, will be deleted. Your local files will stay intact.", "label-confirm-delete-remote-vault-warning": "This action is permanent and irreversible.", "msg-remote-vault-deleted": "{{name}} has been deleted.", "button-connect-to-remote-vault": "Connect", "button-disconnect-from-remote-vault": "Disconnect", "label-not-remote-vaults": "You don't have any remote vaults.", "button-create-new-remote-vault": "Create new vault", "label-sync-log": "Sync log", "options-only-show-errors": "Errors only", "options-only-show-errors-desc": "Only show errors and hide other log items.", "button-copy-sync-log": "Copy sync log", "msg-successfully-copied-sync-log": "Successfully copied sync log.", "button-retry": "Retry", "button-purchase-subscription": "Purchase", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "Choose", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "Sync status", "option-sync-status-desc-paused": "Obsidian Sync is currently paused.", "option-sync-status-desc-running": "Obsidian Sync is currently running.", "option-device-name": "Device name", "option-device-name-desc": "This name will be displayed in the sync log. Leave empty to use the default name.", "button-resume": "Resume", "button-pause": "Pause", "option-view-deleted-files": "Deleted files", "option-view-deleted-files-desc": "View and restore deleted files.", "option-sync-log": "Sync activity", "option-sync-log-desc": "View recent sync activities for debugging.", "button-view": "View", "button-bulk-restore": "Bulk restore", "button-restore-selected-files": "Restore selected files", "msg-restoring": "Restoring...", "msg-restoring-complete": "Restore complete: {{succeeded}} succeeded and {{failed}} failed.", "option-over-size": "Vault size over limit", "option-over-size-desc": "Your vault is at {{size}} out of {{limit}}.", "msg-largest-files": "View largest files", "msg-largest-files-desc": "These are the remote files that are taking the most space. After deleting attachments, use the purge button to free up remote vault space.", "button-purge-remote": "Purge", "tooltip-purge-remote": "Permanently purge deleted attachments from remote vault to save space.", "msg-purge-complete": "Purge complete.", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "Selective sync", "option-excluded-folders": "Excluded folders", "option-excluded-folder-desc": "Prevent certain folders from being synced.", "option-currently-excluded-folders": " These folders currently excluded:", "button-manage-excluded-folders": "Manage", "option-sync-image": "Sync images", "option-sync-image-desc": "Sync image files with these extensions: {{extensions}}.", "option-sync-audio": "Sync audio", "option-sync-audio-desc": "Sync audio files with these extensions: {{extensions}}.", "option-sync-video": "Sync videos", "option-sync-video-desc": "Sync video files with these extensions: {{extensions}}.", "option-sync-pdf": "Sync PDFs", "option-sync-pdf-desc": "Sync PDF files.", "option-sync-unsupported": "Sync all other types", "option-sync-unsupported-desc": "Sync unsupported file types.", "option-vault-config-sync": "Vault configuration sync", "option-view-config-files": "Settings version history", "option-view-config-files-desc": "View and restore version history of setting files.", "option-sync-app": "Main settings", "option-sync-app-desc": "Enable to sync editor settings, files & links settings, custom hotkeys, etc.", "option-sync-appearance": "Appearance settings", "option-sync-appearance-desc": "Sync appearance settings like dark mode, active theme, and enabled snippets.", "option-sync-appearance-data": "Themes and snippets", "option-sync-appearance-data-desc": "Sync downloaded themes and snippets. Whether they are enabled depends on the previous setting.", "option-sync-hotkey": "Hotkeys", "option-sync-hotkey-desc": "Sync custom hotkeys.", "option-sync-core-plugin": "Active core plugin list", "option-sync-core-plugin-desc": "Sync which core plugins are enabled.", "option-sync-core-plugin-data": "Core plugin settings", "option-sync-core-plugin-data-desc": "Sync core plugin settings.", "option-sync-community-plugin": "Active community plugin list", "option-sync-community-plugin-desc": "Sync which community plugins are enabled.", "option-sync-community-plugin-data": "Installed community plugins", "option-sync-community-plugin-data-desc": "Sync installed community plugins (.js, .css, and manifest.json files) and their settings.", "label-sync-introduction": "Obsidian Sync is Obsidian's add-on sync service with end-to-end encryption and version history.", "label-account-required": "To start syncing, please log in or create a new Obsidian account.", "button-sign-up": "Sign up", "button-log-in": "Log in", "label-manage-excluded-folders": "Manage excluded folders", "label-number-of-folders-excluded": "{{folders}} are currently excluded from being synced.", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "Setup connection", "label-now-connected-to-vault": "You're now connected to \"{{name}}\".", "button-start-syncing": "Start syncing", "label-confirm-merge-vault": "Confirm Merge Vault", "msg-vault-has-notes": "Your local vault already contains some notes.", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "File recovery", "desc": "Let you restore recent snapshots to recover from accidental data loss. Snapshots are only saved for Markdown files.", "action-open": "Open saved snapshots", "option-interval": "Snapshot interval", "option-interval-description": "Minimal interval in minutes between two snapshots.", "option-keep": "History length", "option-keep-description": "Length in days snapshots is kept for.", "option-open-history": "Snapshots", "option-open-history-description": "View and restore saved snapshots.", "button-view-snapshots": "View", "option-clear": "Clear history", "option-clear-description": "Wipe all snapshots.", "button-clear-history": "Clear", "label-clear-warning": "Are you sure you want to delete all snapshots? Note that only snapshots will be removed. All files inside your vault will not be affected.", "msg-clear-complete": "Snapshots cleared.", "label-no-history-found": "No snapshots found.", "placeholder-choose-file": "Choose a file...", "label-select-file": "Please select a file on the left to view snapshots." }, "note-composer": { "name": "Note composer", "desc": "Merge, split, and refactor notes.", "option-confirm-file-merge": "Confirm file merge", "option-confirm-file-merge-description": "Prompt before merge two files.", "option-split-replacement-text": "Text after extraction", "option-split-replacement-text-description": "What to show in place of the selected text after extracting it.", "option-choice-split-replacement-text-link": "Link to new file", "option-choice-split-replacement-text-embed": "Embed new file", "option-choice-split-replacement-text-none": "None", "option-template-file": "Template file location", "option-template-file-description": "Template file to use when merging or extracting. Available variables: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Merge current file with another file...", "action-merge-file": "Merge entire file with...", "label-no-files": "No files found.", "instruction-navigate": "to navigate", "instruction-merge": "to merge", "instruction-create-new": "to create new", "instruction-merge-at-top": "to merge at top", "instruction-dismiss": "to dismiss", "prompt-select-file-to-merge": "Select file to merge into...", "label-merge-file": "Merge file", "label-confirm-file-merge": "Are you sure you want to merge \"{{file}}\" into \"{{destination}}\"? \"{{file}}\" will be deleted.", "button-merge": "Merge", "button-merge-do-not-ask-again": "Merge and don't ask again", "command-split-file": "Extract current selection...", "command-extract-heading": "Extract this heading...", "instruction-append": "to move to bottom", "instruction-prepend": "to move to top", "msg-fail-to-fetch-template": "Failed to fetch template file: \"{{template}}\" not found.", "msg-fail-to-find-heading": "Failed to find heading" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} word", "word-with-count_plural": "{{count}} words", "character-with-count": "{{count}} character", "character-with-count_plural": "{{count}} characters", "link-with-count": "{{count}} link", "link-with-count_plural": "{{count}} links", "file-with-count": "{{count}} file", "file-with-count_plural": "{{count}} file", "folder-with-count": "{{count}} folder", "folder-with-count_plural": "{{count}} folders", "backlink-with-count": "{{count}} backlink", "backlink-with-count_plural": "{{count}} backlinks", "site-with-count": "{{count}} site", "site-with-count_plural": "{{count}} sites", "plugin-with-count": "{{count}} plugin", "plugin-with-count_plural": "{{count}} plugins", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } }{ "setting": { "options": "Options", "plugin": "சொருகிணைப்பு", "builtin-plugins": "Core plugins", "plugin-options": "Plugin options", "folder-path-example-placeholder": "Example: கோப்புறை 1/கோப்புறை 2", "file-path-example-placeholder": "Example: கோப்புறை/குறிப்பு", "msg-restart-required": "Changing this option requires a restart to take effect.", "editor": { "name": "Editor", "section-general": "General", "section-behavior": "Behavior", "section-display": "Display", "option-spellcheck": "Spell check", "option-spellcheck-description": "Turns on the spell checker. Currently only works for English (US).", "spellcheck-languages": "Spellcheck languages", "spellcheck-languages-description": "Choose the languages for the spellchecker to use.", "spellcheck-languages-mac-description": "The native spellchecker will automatically detect the language being used for you on macOS.", "spellcheck-dict": "Spellcheck dictionary", "spellcheck-dict-empty": "The spellcheck dictionary is empty.", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "Readable line length", "option-readable-line-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-strict-line-break": "Strict line breaks", "option-strict-line-break-description": "In preview mode, ignore single line breaks according to the Markdown specs. Turn this off for single line breaks to show in preview.", "option-show-frontmatter": "Show frontmatter", "option-show-frontmatter-description": "In preview mode, show frontmatter as a code block. Turn off to hide frontmatter section.", "option-auto-pair-brackets": "Auto pair brackets", "option-auto-pair-brackets-description": "Pair brackets and quotes automatically.", "option-auto-pair-markdown": "Auto pair Markdown syntax", "option-auto-pair-markdown-description": "Pair symbols automatically for bold and italics.", "option-smart-indent-lists": "Smart indent lists", "option-smart-indent-lists-description": "Take care of indentation and list marker for you.", "option-fold-heading": "Fold heading", "option-fold-heading-description": "Let you fold everything under a heading.", "option-fold-indent": "Fold indent", "option-fold-indent-description": "Let you fold a portion of the same indentation, such as lists.", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Editing view", "option-default-new-tab-view-reading": "Reading view", "option-default-editing-mode": "Default editing mode", "option-default-editing-mode-description": "The default editing mode a new pane will start with.", "option-default-editing-mode-source": "Source mode", "option-default-editing-mode-live-preview": "Live Preview", "option-show-line-number": "Show line number", "option-show-line-number-description": "Show line number in the gutter.", "option-indentation-guide": "Show indentation guides", "option-indentation-guide-description": "Show vertical relationship lines between bullet points for visual guidance.", "option-use-tabs": "Use tabs", "option-use-tabs-description": "Use tabs to indent when pressing the \"Tab\" key. Set this to off to use spaces.", "option-tab-size": "Tab size", "option-tab-size-description": "Number of spaces a tab is equivalent to.", "option-rtl": "Right-to-left (RTL)", "option-rtl-description": "Sets the text direction of notes to display in right-to-left.", "option-auto-convert-html": "Auto convert HTML", "option-auto-convert-html-description": "Automatically convert HTML to Markdown when pasting and drag-and-drop from webpages. Use Ctrl/Cmd+Shift+V to paste without conversion.", "option-vim-key-bindings": "Vim key bindings", "option-vim-key-bindings-description": "Let you use Vim key bindings in the source editor.", "option-vim-key-bindings-mobile": "On mobile devices, this setting is per-device and is not synchronized through the config file.", "option-emacsy-keys": "Legacy Emacs-style key bindings for macOS", "option-emacsy-keys-description": "Allows you to use the additional Emacs-style navigation keys, which are standard on macOS, but may interfere with some key operations.", "label-confirm-enable-vim": "Confirm entering Vim mode", "label-vim-warning": "Vim mode is for efficient text editing but can be quite counter-intuitive. If you're not familiar with Vim, this option might make it look like Obsidian has stopped working.", "label-vim-test": "To verify that you know your way around Vim, please enter the command to quit Vim without saving below:", "label-vim-your-answer": "Your answer", "placeholder-enter-command": "Enter command...", "button-confirm-enable-vim": "Let me enable Vim", "msg-vim-mode-enabled": "Command is correct. Vim mode now enabled.", "msg-vim-mode-not-enabled": "Command is incorrect. Vim mode remains disabled to protect you.", "msg-vim-mode-please-enter-command": "Please enter the command to enable Vim mode", "option-legacy-editor": "Use legacy editor", "option-legacy-editor-description2": "The legacy editor will be deprecated soon. It is currently no longer maintained, and as such, bugs will no longer be addressed.", "label-legacy-deprecation": "New editor is here", "label-legacy-deprecation-1": "Obsidian now has a brand new editor that's more robust and accessible.", "label-legacy-deprecation-2": "It seems you're still using the legacy editor, and we think you'll enjoy the new editor.", "label-legacy-deprecation-choice": "Which mode would you like to use?", "label-live-preview-description": "A more modern, what-you-see-is-what-you-get experience.", "label-source-mode-description": "See raw Markdown with syntax highlighting.", "button-start-new-editor": "Start new editor" }, "file": { "name": "File", "option-confirm-file-deletion": "Confirm file deletion", "option-confirm-file-deletion-description": "Whether you want to get prompted to confirm file deletion.", "option-delete-destination": "Deleted files", "option-delete-destination-description": "What to do with files after you delete them.", "option-choice-system-trash": "Move to system trash", "option-choice-vault-trash": "Move to Obsidian trash (.trash folder)", "option-choice-permanent-delete": "Permanent delete", "option-always-update-links": "Always update internal links", "option-always-update-links-description": "Whether to automatically update links after renaming a file or prompt.", "option-new-note-location": "New note default location", "option-new-note-location-description": "Where to put newly created notes. Plugin settings will override this.", "option-choice-vault-root": "Vault root", "option-choice-current-folder": "Same folder as the file is in", "option-choice-specified-folder": "In the folder specified below", "option-new-file-folder-path": "Folder to create new notes in", "option-new-file-folder-path-description": "Newly created notes will appear under this folder. Plugin settings will override this.", "option-use-wiki-links": "Use [[Wikilinks]]", "option-use-wiki-links-description": "Auto-generate Wikilinks for [[links]] and ![[images]] instead of Markdown links and images. Disable this option to generate Markdown links instead.", "option-show-unsupported-files": "Detect all file extensions", "option-show-unsupported-files-description": "Show files with any extension even if Obsidian can't open them natively, so that you can link to them and see them in File Explorer and Quick Switcher.", "option-link-autocompleted-format": "New link format", "option-link-autocompleted-format-description": "What links to insert when auto generating internal links.", "option-choice-shortest-linktext": "Shortest path when possible", "option-choice-relative-path": "Relative path to file", "option-choice-absolute-path": "Absolute path in vault", "option-new-attachment-location": "Default location for new attachments", "option-new-attachment-location-description": "Where newly added attachments are placed.", "option-choice-subdirectory": "In subfolder under current folder", "option-attachment-folder-path": "Attachment folder path", "option-attachment-folder-path-description": "Newly created attachment files will appear here. That includes images created via drag and drop or pasting, and audio recordings.", "option-attachment-subfolder-path": "Subfolder name", "option-attachment-subfolder-path-description": "If your file is under \"vault/folder\", and you set subfolder name to \"attachments\", attachments will be saved to \"vault/folder/attachments\".", "option-attachment-subfolder-path-placeholder": "attachments", "option-excluded-files": "Excluded files", "option-excluded-files-desc": "Excluded files will be either hidden or less noticeable in various places, such as Quick Switcher, link suggestion, and Graph View.", "label-no-excluded-filters-applied": "No excluded filter is applied right now. Add one below.", "label-excluded-filters-applied": "Files matching the following filters are currently excluded:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Enter path or \"/regex/\"..." }, "appearance": { "name": "Appearance", "option-base-theme": "Base theme", "option-base-theme-description": "Choose Obsidian’s default color scheme.", "option-accent-color": "Accent color", "option-accent-color-description": "Choose the accent color used throughout the app.", "dark-theme": "Dark", "light-theme": "Light", "system-theme": "Adapt to system", "option-font": "Font", "option-advanced": "Advanced", "option-interface-font": "Interface font", "option-interface-font-description": "Set base font for all of Obsidian.", "option-text-font": "Text font", "option-text-font-description": "Set font for editing and reading views.", "option-monospace-font": "Monospace font", "option-monospace-font-description": "Set font for places like code blocks and frontmatter.", "label-single-font-currently-in-effect": " Currently applied font: ", "label-multiple-fonts-currently-in-effect": " The following fonts are currently applied:", "option-font-placeholder": "Enter font name...", "label-no-custom-font-set": "No custom font is applied right now. Add one below.", "label-font-applied": "The first font from this list that is available on your system will be applied.", "msg-font-not-found": "This font is not detected on your system.", "msg-font-found": "This font is detected on your system.", "label-font-name": "Font name", "option-community-themes": "Open community themes", "option-community-themes-description": "Preview and use amazing themes created by the community.", "button-browse-community-themes": "Browse", "option-font-size": "Font size", "option-font-size-description": "Font size in pixels that affects editor and preview.", "option-font-size-action": "Quick font size adjustment", "option-font-size-action-description": "Adjust the font size using Ctrl + Scroll, or using the trackpad pinch-zoom gesture.", "option-themes": "Themes", "option-manage-themes-description": "Manage installed themes and browse community themes.", "option-theme-button-manage": "Manage", "option-choice-none": "None", "option-native-menus": "Native menus", "option-native-menus-desc": "Menus throughout the app will match the operating system. They will not be affected by your theme.", "button-reload-themes": "Reload themes", "msg-reloaded-themes": "Reloaded custom CSS themes.", "button-open-themes-folder": "Open themes folder", "option-css-snippets": "CSS snippets", "label-no-css-snippets-found": "No CSS snippets found.", "no-snippet-description": "CSS Snippets are stored in \"{{path}}\".", "button-reload-snippets": "Reload snippets", "button-open-snippets-folder": "Open snippets folder", "msg-reloaded-snippets": "Reloaded CSS snippets.", "option-toggle-snippet-description": "Apply CSS snippet at \"{{path}}\".", "label-installed-themes": "Installed themes", "label-screenshot-unavailable": "Screenshot unavailable", "label-default-theme": "Default", "tooltip-click-to-enlarge": "Click to enlarge", "button-update": "Update", "label-currently-selected": "Selected", "option-frame-style": "Window frame style", "option-frame-description": "Determines the styling of the title bar of Obsidian windows. Requires a full restart to take effect.", "option-frame-hidden": "Hidden (default)", "option-frame-obsidian": "Obsidian frame", "option-frame-native": "Native frame", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Show tab title bar", "option-show-view-header-desc": "Display the header at the top of every tab.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "button-check-for-updates": "Check for updates", "button-view-updates": "View updates", "button-update-all-themes": "Update all", "label-current-themes": "Current community themes", "label-currently-installed": "You currently have {{count}} theme installed.", "label-currently-installed_plural": "You currently have {{count}} themes installed." }, "hotkeys": { "name": "Hotkeys", "prompt-filter": "Filter...", "tooltip-delete-hotkey": "Delete hotkey", "label-waiting-for-hotkey-press": "Press hotkey...", "tooltip-restore-default": "Restore default", "tooltip-customize-command": "Customize this command", "tooltip-hotkey-single-conflict": "This hotkey conflicts with \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "This hotkey conflicts with {{count}} other commands", "label-blank-hotkey": "Blank" }, "about": { "name": "About", "label-commercial-license": "Commercial license", "label-license-key": "License key", "license-key-placeholder": "Your license key...", "label-activate-license": "Activate license", "button-activate": "Activate", "label-unknown-version": "Unknown", "label-current-version": "Current version: ", "label-install-version": "(Installer version: {{version}})", "label-up-to-date": "Your app is up to date!", "label-read-changelog": "Read the changelog.", "label-manual-update-required": "To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.", "label-download": "Download", "label-new-version-ready": "A new version is ready to be installed. ", "label-relaunch-to-update": "Relaunch the app to update.", "label-disabled-updates": "Updates are disabled.", "label-checking-for-updates": "Checking for updates...", "button-relaunch": "Relaunch", "button-check-for-updates": "Check for updates", "option-auto-update": "Automatic updates", "option-auto-update-description": "Turn this off to prevent the app from checking for updates.", "option-get-help": "Get help", "option-get-help-description": "Get help on using Obsidian.", "button-open": "Open", "option-language": "Language", "option-language-description": "Change the display language.", "option-insider-build": "Receive insider builds", "option-insider-build-description": "Auto-update to insider builds to try out new features. Note that these builds are bleeding edge and might be less stable.", "option-advanced": "Advanced", "option-hw-acceleration": "Hardware Acceleration", "option-hw-acceleration-description": "Turns on Hardware Acceleration, which uses your GPU to make Obsidian smoother.", "option-hw-acceleration-warning": "If you turn this off, app performance will be severely degraded.", "option-config-location": "Override config folder", "option-config-location-description": "Use a different config folder than the default one. Must start with a dot.", "option-config-location-warning": "Config location must be a valid folder name that starts with a dot.", "label-license": "License", "label-your-commercial-license-key": "Your commercial license key is \"{{key}}\".", "label-commercial-license-info": "Registered to \"{{company}}\" for {{seats}} users. Valid until {{expiry}}.", "label-validating-commercial-license": "Validating...", "label-invalid-commercial-license": "License invalid: ", "button-remove-commercial-license": "Remove", "option-catalyst": "Catalyst license", "option-catalyst-desc": "You currently have the {{tier}} Catalyst license. Thanks for your support!", "option-catalyst-desc-no-license": "You don't have a Catalyst license right now. Catalyst license is a one-time donation to support Obsidian development.", "label-app": "App" }, "account": { "name": "Account", "option-your-account": "Your account", "option-your-account-desc": "You're currently signed in {{name}} ({{email}}).", "option-your-account-desc-no-login": "You're not logged in right now. An account is only needed for Obsidian Sync, Obsidian Publish, and Catalyst insider builds.", "button-manage-settings": "Manage settings", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Commercial license", "option-commercial-license-desc": "If you use Obsidian for commercial purpose, you may need to get a commercial license.", "button-purchase": "Purchase", "button-log-out": "Log out", "label-log-in": "Log in", "label-sign-up": "Sign up", "label-email": "Email", "placeholder-email": "Your email...", "label-password": "Password", "placeholder-password": "Your password...", "button-login": "Login", "message-empty-email": "Email cannot be empty.", "message-invalid-email": "Email is not valid.", "message-empty-password": "Password cannot be empty.", "message-login-failed": "Login failed, please double check your email and password.", "label-no-account": "Don't have an account? ", "link-sign-up-now": "Sign up now" }, "core-plugin": { "plugin-list": "Plugin list", "option-search-plugin": "Search core plugins", "option-search-plugin-description": "Filter plugins by name or description.", "placeholder-search-plugin": "Search plugins..." }, "third-party-plugin": { "name": "Third-party plugin", "option-restricted-mode": "Restricted mode", "option-restricted-mode-description": "Restricted mode is off. Turn on to disable community plugins.", "button-turn-on": "Turn on", "option-browse-community-plugins": "Community plugins", "option-browse-community-plugins-description": "Browse and install third-party plugins made by our amazing community.", "button-browse": "Browse", "label-exit-restricted-mode": "Exit Restricted Mode", "label-exit-restricted-mode-description-1": "Community plugins, like any other software you install, could potentially cause data integrity and security issues.", "label-exit-restricted-mode-description-2": "Plugin security is important to us. Here's what we do:", "label-exit-restricted-mode-description-3": "Despite our efforts, there is still a small chance that a community plugin might misbehave.", "label-code-review": "Initial code review", "label-code-review-desc": "Plugins undergo an initial code review by our team before they appear in the store.", "label-open-source": "Open source", "label-open-source-desc": "Most plugins are open source on GitHub, so you can inspect the code yourself.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We have a large community of developers who watch out for each other.", "label-report-mechanism": "Report mechanism", "label-report-mechanism-desc": "We follow up and remove faulty plugins upon user report.", "label-exit-restricted-mode-disable-confirmation": "Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.", "label-learn-more": "Learn more about plugin security", "button-turn-on-community-plugins": "Turn on community plugins", "label-trust-author": "Do you trust the author of this vault?", "label-trust-author-description-1": "You're opening this vault for the first time, and it comes with some plugins.", "label-trust-author-description-2": "If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.", "label-trust-author-description-3": "If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.", "button-enable-plugins": "Trust author and enable plugins", "button-dont-trust-author": "Browse vault in Restricted Mode", "placeholder-community-plugins": "Search community plugins...", "msg-failed-load-plugins": "Failed to load community plugins.", "label-installed": "Installed", "button-install": "Install", "button-enable": "Enable", "button-disable": "Disable", "button-copy-share-link": "Copy share link", "button-donate": "Donate", "label-no-results-found": "No results found.", "msg-failed-to-load-manifest": "Failed to load plugin manifest.", "label-version": "Version: {{version}}", "label-currently-installed-version": " (currently installed: {{version}})", "label-by-author": "By ", "label-repository": "Repository: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "This plugin does not support your device.", "button-update": "Update", "label-no-readme": "This plugin did not provide a README file.", "msg-installing-plugin": "Installing plugin \"{{name}}\"...", "msg-failed-to-install-plugin": "Failed to install plugin \"{{name}}\".", "msg-successfully-installed-plugin": "Successfully installed plugin \"{{name}}\".", "label-installed-plugins": "Installed plugins", "button-reload-plugins": "Reload plugins", "msg-reloaded-third-party-plugins": "Reloaded third-party plugins.", "label-uninstall": "Uninstall", "label-uninstall-plugin": "Uninstall plugin", "label-uninstall-plugin-confirmation": "Are you sure you want to uninstall this plugin? This will delete the folder of the plugin.", "button-open-plugins-folder": "Open plugins folder", "button-check-for-updates": "Check for updates", "button-update-all-plugins": "Update all", "label-current-plugins": "Current plugins", "label-currently-installed": "You currently have {{count}} plugin installed.", "label-currently-installed_plural": "You currently have {{count}} plugins installed.", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Show a message with how long each plugin took to initialize when starting the app.", "msg-no-updates-found": "No plugin updates found.", "msg-updates-found": "Found {{count}} plugin to update.", "msg-updates-found_plural": "Found {{count}} plugins to update.", "msg-update-plugin": "Update to version {{version}}", "option-search-installed-plugin": "Search installed plugins", "option-search-installed-plugin-description": "Filter installed plugins by name or description.", "placeholder-search-installed-plugin": "Search installed plugins...", "show-installed-only": "Show installed only", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "Showing {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Mobile toolbar", "option-configure-quick-action": "Configure mobile Quick Action", "option-configure-quick-action-description": "Configure which command to trigger when pull down from the top. The current command is set to \"{{command}}\".", "button-configure": "Configure", "placeholder-select-quick-action": "Select Quick Action...", "manage-toolbar-options": "Manage toolbar options", "option-internal-link": "Add internal link", "option-internal-embed": "Add embed", "option-tag": "Add tag", "option-heading": "Toggle heading", "option-strikethrough": "Toggle strikethrough", "option-highlight": "Toggle highlight", "option-code": "Toggle code", "option-blockquote": "Toggle blockquote", "option-markdown-link": "Add Markdown link", "option-bullet-list": "Toggle bullet list", "option-numbered-list": "Toggle numbered list", "option-indent-list": "Indent list item", "option-unindent-list": "Unindent list item", "option-undo": "Undo", "option-redo": "Redo", "option-move-caret-up": "Move caret up", "option-move-caret-down": "Move caret down", "option-move-caret-left": "Move caret left", "option-move-caret-right": "Move caret right", "option-first-line": "Go to first line", "option-last-line": "Go to last line", "option-toggle-keyboard": "Toggle keyboard", "option-configure-toolbar": "Configure mobile toolbar", "option-added-options": "Added options", "option-more-toolbar-options": "More toolbar options", "option-attach": "Insert attachment", "option-add-command": "Add global command", "option-add-command-description": "Select any global command to add to the toolbar." } }, "editor": { "search": { "placeholder-find": "Find", "placeholder-replace": "Replace", "label-previous": "Prev", "label-next": "Next", "label-all": "All", "label-exit-search": "Exit search", "label-replace": "Replace", "label-replace-all": "Replace all" }, "link-suggestion": { "label-type-hash": "Type #", "label-link-heading": "to link heading", "label-type-block": "Type ^", "label-link-block": "to link blocks", "label-type-pipe": "Type |", "label-change-display-text": "to change display text", "label-no-match-found": "No match found" }, "spellcheck": { "no-suggestion": "No suggestions...", "add-to-dictionary": "Add to dictionary" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "No heading", "label-heading-level": "Heading {{level}}" }, "print-modal": { "title": "Export to PDF", "caption": "Export \"{{filename}}\" to PDF with the settings below.", "setting-page-size": "Page size", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Include file name as title", "setting-landscape": "Landscape", "setting-margin": "Margin", "setting-margin-default": "Default", "setting-margin-minimal": "Minimal", "setting-margin-none": "None", "setting-downscale-percent": "Downscale percent", "button-export-to-pdf": "Export to PDF" }, "link-popover": { "tooltip-follow-link": "Follow link", "tooltip-open-link": "Open link", "tooltip-search-tag": "Search tag" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Open in default app", "empty-sidebar": "The sidebar is empty, try dragging a pane here.", "sidebar-expand": "Expand", "sidebar-collapse": "Collapse", "msg-fail-to-save-file": "Failed to save file \"{{filepath}}\". {{message}}.", "no-file": "No file", "msg-file-changed": "\"{{file}}\" has been modified externally, merging changes automatically.", "switch-vault": "Open another vault", "help": "Help", "settings": "Settings", "drag-to-rearrange": "Drag to rearrange", "msg-switched-to-read": "Switched default view mode to reading view.", "msg-switched-to-edit": "Switched default view mode to editor.", "msg-upgrade-installer": "To use this feature, please re-install with latest installer available from our website.", "tooltip-restore-default-settings": "Restore default settings", "label-copy": "Copy to clipboard", "copied_generic": "Copied to your clipboard", "copied": "{{item}} copied to your clipboard", "url": "Url", "msg-open-file-through-uri": "Opened file \"{{path}}\"", "msg-file-not-found-through-uri": "File \"{{name}}\" not found.", "delete-action-short-name": "Delete", "msg-indexing": "Obsidian is indexing your vault...\nThis should only happen once.\nSome functionality may not be available until this is complete.", "msg-indexing-complete": "Indexing complete.", "msg-sandbox-vault": "This is a sandbox vault.\nChanges you make in this vault will be lost.", "label-enter-to-create": "Enter to create", "label-update-available": "Update Available", "label-debug-info": "Debug info", "button-learn-more": "Learn more", "button-not-now": "Not now", "button-add": "Add", "button-manage": "Manage", "label-new-tab": "New tab", "msg-tab-busy": "This tab is currently busy, please try again later", "empty-state": { "no-file-open": "No file is open", "create-new-file": "Create new file", "go-to-file": "Go to file", "see-recent-files": "See recent files", "close": "Close", "unknown-pane-title": "Plugin no longer active", "unknown-pane-desc": "The plugin that created this pane ({{type}}) has gone away" }, "menu": { "edit-view": "Edit (Ctrl/Cmd+Click to edit in new pane)", "read-view": "Current view: reading", "switch-to-edit-view": "Click to edit", "switch-to-read-view": "Click to read", "mod-click-open-new-tab": "{{key}}+Click to open in new tab", "find": "Find...", "replace": "Replace...", "edit": "Edit", "preview": "Preview", "more-options": "More options", "close": "Close", "close-others": "Close others", "close-right": "Close tabs to the right", "pin": "Pin", "unpin": "Unpin", "unlink-tab": "Unlink tab", "link-tab": "Link with tab...", "toggle-source-mode": "Source mode", "toggle-reading-view": "Reading view", "delete-file": "Delete file", "create-file": "Create this file", "open-link": "Open link", "open-in-new-tab": "Open in new tab", "open-to-the-right": "Open to the right", "copy-url": "Copy url", "close-current-tab": "Close current tab", "copy": "Copy", "cut": "Cut", "paste": "Paste", "paste-as-plain-text": "Paste as plain text", "select-all": "Select all", "rename-heading": "Rename this heading...", "rename-blockid": "Rename this block ID...", "open-in-new-window": "Open in new window", "move-to-new-window": "Move to new window", "open-in-browser": "Open in browser", "stack-tabs": "Stack tabs", "unstack-tabs": "Unstack tabs" }, "tooltip": { "click-to-expand": "Click to expand", "click-to-collapse": "Click to collapse", "alias": "Alias", "not-created-yet": "Not created yet, select to create" }, "start-screen": { "label-version": "Version", "option-open-folder-as-vault": "Open folder as vault", "option-open-folder-as-vault-description": "Choose an existing folder of Markdown files.", "option-create-vault": "Create new vault", "option-create-vault-description": "Create a new Obsidian vault under a folder.", "option-connect-obsidian-sync": "Connect to Obsidian Sync", "option-connect-obsidian-sync-description": "Set up a synced vault with existing remote vault.", "option-new-vault-name": "Vault name", "option-new-vault-name-description": "Pick a name for your awesome vault.", "option-new-vault-location": "Location", "option-new-vault-location-description": "Pick a place to put your new vault.", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Reveal vault in system explorer", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "Rename vault...", "msg-error-rename-exists": "There is already a vault with this name.", "msg-error-nested": "Cannot move vault into a subfolder of itself.", "msg-error-rename-open": "Can't rename a currently open vault.", "msg-rename-failed": "Failed to rename vault.", "msg-rename-success": "Successfully renamed vault.", "option-move-vault": "Move vault...", "msg-move-select-dest": "Select destination folder", "msg-error-move-exists": "There is already a vault at the destination.", "msg-error-move-open": "Can't move a currently open vault.", "msg-move-failed": "Failed to move vault.", "msg-move-success": "Successfully moved vault.", "option-remove": "Remove from list", "button-quick-start": "Quick start", "button-open": "Open", "button-browse": "Browse", "button-connect": "Connect", "button-create-vault": "Create", "button-back": "Back", "msg-empty-vault-name": "Vault name cannot be empty.", "msg-invalid-folder": "Please pick a valid folder.", "msg-failed-to-create-vault": "Failed to create vault.", "msg-failed-to-create-vault-at-location": "Could not create vault at the given location. Please double check the location and permission.", "msg-error-failed-to-open-vault": "Failed to open.", "msg-error-remove-current-open-vault": "Can't remove a currently open vault.", "option-get-help": "Get Help", "option-user-email": "Email", "placeholder-your-email": "Your email...", "option-user-password": "Password", "placeholder-your-password": "Your password...", "button-sign-in": "Sign in", "button-setup": "Setup", "option-connect-vault-desc": "Create a synced vault on this device.", "tooltip-own-vault": "This is a remote vault owned by you.", "tooltip-shared-vault": "This is a remote vault shared with you." }, "drag-and-drop": { "insert-link-here": "Insert link here", "insert-links-here": "Insert links here", "move-into-folder": "Move into \"{{folder}}\"", "star-this-file": "Star this file", "star-these-files": "Star these files", "open-in-this-tab": "Open in this tab", "open-as-tab": "Open as new tab" }, "window": { "maximize": "Maximize", "minimize": "Minimize", "restore-down": "Restore down", "close-window": "Close window", "go-back": "Go back", "go-forward": "Go forward" }, "start-up": { "loading-obsidian": "Loading Obsidian...", "obsidian-load-error": "An error occurred while loading Obsidian.", "button-reload-app": "Reload app", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "Open another vault", "loading-components": "Loading components...", "loading-plugins": "Loading plugins...", "loading-vault": "Loading vault...", "msg-failed-to-load-vault": "Failed to load vault: ", "loading-cache": "Loading cache...", "loading-workspace": "Loading workspace..." }, "mobile": { "action-import": "Import into vault", "action-choose-file-to-insert": "Choose a file to insert", "action-insert-text-into-file": "Insert text into {{filename}}", "action-insert-link-into-file": "Insert link into {{filename}}", "msg-importing": "Importing...", "msg-import-success": "Import success", "msg-failed-to-import-file": "Failed to import file {{filename}}", "msg-back-again-to-exit": "Press back again to exit." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "Save current file", "follow-cursor-link": "Follow link under cursor", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "Toggle pin", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "Navigate back", "navigate-forward": "Navigate forward", "use-dark-mode": "Use dark mode", "use-light-mode": "Use light mode", "change-theme": "Change theme", "search-current-file": "Search current file", "search-replace-current-file": "Search & replace in current file", "open-settings": "Open settings", "open-help": "Open help", "toggle-edit": "Toggle editing/reading view", "toggle-source-mode": "Toggle Live Preview/Source mode", "delete-current-file": "Delete current file", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "Toggle left sidebar", "toggle-right-sidebar": "Toggle right sidebar", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "Focus on editor", "toggle-fold": "Toggle fold on the current line", "fold-all": "Fold all headings and lists", "unfold-all": "Unfold all headings and lists", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "Swap line up", "swap-line-down": "Swap line down", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "Toggle bold for selection", "toggle-italics": "Toggle italics for selection", "toggle-highlight": "Toggle highlight for selection", "toggle-comments": "Toggle comments for selection", "insert-link": "Insert link", "toggle-spellcheck": "Toggle spellcheck", "delete-paragraph": "Delete paragraph", "toggle-checklist": "Toggle checklist status", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "Edit file title", "copy-path": "Copy file path", "copy-url": "Copy obsidian url", "export-pdf": "Export to PDF", "reload": "Reload app without saving", "undo-close-tab": "Undo close tab", "context-menu": "Show context menu under cursor", "show-debug-info": "Show debug info", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "Toggle edit/preview mode", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "This will affect {{links}} in {{files}}.", "msg-updated-links": "Updated {{links}} in {{files}}.", "label-update-links": "Update links", "label-confirm-update-link-to-file": "Do you want to update internal links that link to this file?", "button-always-update": "Always update", "button-just-once": "Just once", "button-do-not-update": "Do not update", "label-confirm-deletion": "Are you sure you want to delete \"{{filename}}\"?", "label-move-to-system-trash": "It will be moved to your system trash.", "label-move-to-vault-trash": "It will be moved to your Obsidian trash, which is located in the \".trash\" hidden folder in your vault.", "label-permanent-delete": "The file will be permanent deleted.", "label-non-empty-folder": "This folder is not empty.", "label-delete-folder-warning": "If you continue, all files inside this folder will be deleted.", "label-delete-folder": "Delete folder", "button-delete": "Delete", "button-delete-do-not-ask-again": "Delete and don't ask again", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "There are currently {{links}} pointing to this note.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "Delete file", "button-manage": "Manage", "button-cancel": "Cancel", "button-done": "Done", "button-save": "Save", "button-stop": "Stop", "button-continue": "Continue", "preparing-pdf": "Preparing PDF...", "label-rename-file": "Rename file", "label-new-name": "New name", "msg-rename-success": "Successfully renamed file.", "label-rename-heading": "Rename heading", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "Plugins", "file-explorer": { "name": "File explorer", "desc": "See all the files in your vault.", "action-open": "Open file explorer", "action-show": "Show file explorer", "action-create-note": "Create new note", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "New note", "action-new-folder": "New folder", "action-change-sort": "Change sort order", "action-reveal-file": "Reveal file in file explorer", "action-reveal-active-file": "Reveal active file in file explorer", "command-move-file": "Move file to another folder", "action-move-file": "Move file to...", "action-move-folder": "Move folder to...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "Type a folder", "label-no-folders": "No folders found.", "instruction-navigate": "to navigate", "instruction-move": "to move", "instruction-dismiss": "to dismiss", "label-sort-a-to-z": "Sort by file name (A to Z)", "label-sort-z-to-a": "Sort by file name (Z to A)", "label-sort-new-to-old": "Sort by edit time (new to old)", "label-sort-old-to-new": "Sort by edit time (old to new)", "label-sort-created-old-to-new": "Created time (old to new)", "label-sort-created-new-to-old": "Created time (new to old)", "menu-opt-new-note": "New note", "menu-opt-new-folder": "New folder", "menu-opt-set-attachment-folder": "Set as attachment folder", "menu-opt-rename": "Rename", "menu-opt-delete": "Delete", "menu-opt-make-copy": "Make a copy", "msg-invalid-characters": "File name cannot contain any of the following characters: ", "msg-unsafe-characters": "Links will not work with file names containing any of these characters: ", "msg-file-already-exists": "There's already a file with the same name", "msg-empty-file-name": "File name cannot be empty.", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "Last modified at {{time}}", "tooltip-created-time": "Created at {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Move", "label-untitled-file": "Untitled", "label-untitled-folder": "Untitled", "msg-set-attachment-folder": "Attachments will be saved to \"{{path}}\" from now on." }, "search": { "name": "Search", "desc": "Search for keyword in all the notes.", "action-open-search": "Search in all files", "label-collapse-results": "Collapse results", "label-match-case": "Match case", "label-explain-search-term": "Explain search term", "label-more-context": "Show more context", "prompt-start-search": "Type to start search...", "label-match-text": "Matches text: ", "label-match-regex": "Matches regex: ", "label-match-exact-text": "Contains exact text: ", "label-match-all": "Match all of: ", "label-match-any": "Match any of: ", "label-excluding": "Excluding: ", "label-case-sensitive": "Case sensitive", "label-case-insensitive": "Case insensitive", "label-match-file-path": "Match file path: ", "label-match-file-name": "Match file name: ", "label-match-content": "Match file content: ", "label-match-task": "Match task: ", "label-match-task-todo": "Match task (todo): ", "label-match-task-done": "Match task (done): ", "label-match-line": "Match line: ", "label-match-block": "Match block: ", "label-match-section": "Match section: ", "label-match-tag": "Match tag: ", "label-no-matches": "No matches found.", "matches-with-count": "... and {{count}} more match.", "matches-with-count_plural": "... and {{count}} more matches.", "label-copy-search-results": "Copy search results", "button-copy-results": "Copy results", "msg-successfully-copied": "Results copied to your clipboard.", "option-show-path": "Show path", "option-show-path-description": "Display full path of the file rather than just the file name.", "option-link-style": "Link style", "option-link-style-description": "Optionally turn each file result in to a link.", "option-choice-link-style-none": "None", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Markdown link", "option-list-prefix": "List prefix", "option-list-prefix-description": "Optionally add a list item prefix to each file result.", "option-choice-list-style-none": "None", "option-choice-list-style-dash": "Dash (-)", "option-choice-list-style-asterisk": "Asterisk (*)", "option-choice-list-style-numbered": "Numbered", "tooltip-clear-search": "Clear search", "label-search-options": "Search options", "tooltip-read-more": "Read more", "label-history": "History", "tooltip-clear-history": "Clear search history", "label-path-option-description": "match path of the file", "label-file-name-option-description": "match file name", "label-tag-option-description": "search for tags", "label-line-option-description": "search keywords on same line", "label-section-option-description": "search keywords under same heading", "menu-opt-search-for": "Search for \"{{keyword}}\"" }, "quick-switcher": { "name": "Quick switcher", "desc": "Jump to any files without leaving your keyboard. Ctrl/Cmd+O to activate.", "short-name": "Switcher", "action-open": "Open quick switcher", "instruction-navigate": "to navigate", "instruction-open": "to open", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "to create", "instruction-dismiss": "to dismiss", "label-no-note-create-new": "No notes found. Enter to create a new one.", "prompt-type-file-name": "Type file to switch to or create...", "label-enter-to-create": "Enter to create", "tooltip-not-created-yet": "Not created yet, select to create", "option-show-existing-only": "Show existing only", "option-show-existing-only-description": "Only show results from existing files. Links to files that are not yet created will be hidden.", "option-show-attachments": "Show attachments", "option-show-attachments-desc": "Show attachment files like images, videos, and PDFs.", "option-show-all-file-types": "Show all file types", "option-show-all-file-types-desc": "Show all files including ones that Obsidian can't open. The file will be opened with the default app for that file type." }, "graph-view": { "name": "Graph view", "desc": "See a graph overview of which notes link to which.", "action-open": "Open graph view", "action-open-local": "Open local graph", "action-copy-screenshot": "Copy screenshot", "tab-title": "Graph of {{displayText}}", "label-filters": "Filters", "prompt-filter-nodes": "Search files...", "option-depth": "Depth", "option-depth-description": "Show nodes this number of links away", "option-neighbor-links": "Neighbor links", "option-neighbor-links-description": "Show links between neighbors.", "option-forelinks": "Outgoing links", "option-forelinks-description": "Show links to other files", "option-backlinks": "Incoming links", "option-backlinks-description": "Show links from other files", "option-show-tags": "Tags", "option-show-tags-description": "Tags are linked to the files that contain them", "option-show-attachments": "Attachments", "option-show-attachments-description": "Show attachments included by files", "option-show-existing-files-only": "Existing files only", "option-show-existing-files-only-description": "When checked, links to nonexistent files are not shown", "option-show-orphans": "Orphans", "option-show-orphans-description": "Show files that are not linked to any other file", "label-display": "Display", "option-show-arrows": "Arrows", "option-show-arrows-description": "Show arrows when zoomed in", "option-text-fade": "Text fade threshold", "option-node-size": "Node size", "option-link-thickness": "Link thickness", "label-forces": "Forces", "option-center-force": "Center force", "option-link-force": "Link force", "option-link-distance": "Link distance", "option-repel-force": "Repel force", "tooltip-open-graph-settings": "Open graph settings", "msg-screenshot-copied": "Screenshot copied to the clipboard.", "label-groups": "Groups", "placeholder-enter-query": "Enter query...", "tooltip-delete-graph": "Delete group", "button-new-group": "New group", "tooltip-click-to-change-drag-to-reorder": "Click to change color\nDrag to reorder groups", "action-timelapse": "Start graph timelapse animation", "tooltip-start-timelapse-animation": "Start timelapse animation", "button-animate-timelapse": "Animate" }, "backlinks": { "name": "Backlinks", "desc": "Show number of backlinks in the status bar.", "action-open": "Open backlinks", "action-show": "Show backlinks pane", "action-open-for-current": "Open backlinks for the current file", "action-toggle-backlinks-in-document": "Toggle backlinks in document", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "Linked mentions", "label-no-backlinks": "No backlinks found.", "label-unlinked-mentions": "Unlinked mentions", "label-show-search": "Show search filter", "label-link-button-text": "Link", "tab-title": "Backlinks for {{displayText}}", "label-no-unlinked-mentions": "No unlinked mentions found.", "ellipsis": "...", "option-backlink-in-document": "Backlink in document", "option-backlink-in-document-desc": "Show backlinks in document by default when opening new panes." }, "outgoing-links": { "name": "Outgoing Links", "desc": "Show outgoing links and detect unlinked mentions of other notes in the current note.", "action-open": "Open outgoing links", "action-show": "Show outgoing links pane", "action-open-for-current": "Open outgoing links for the current file", "tab-title": "Outgoing links from {{displayText}}", "label-links": "Links", "label-no-links": "No links found.", "label-unlinked-mentions": "Unlinked mentions", "tooltip-link-file": "Link this file", "tooltip-not-created": "Not created yet" }, "tag-pane": { "name": "Tag pane", "desc": "Displays all your tags and along with their number of occurrences.", "action-show": "Show tag pane", "label-no-tags": "No tags found.", "label-sort-by-name-a-to-z": "Tag name (A to Z)", "label-sort-by-name-z-to-a": "Tag name (Z to A)", "label-sort-by-frequency-high-to-low": "Frequency (high to low)", "label-sort-by-frequency-low-to-high": "Frequency (low to high)", "action-show-nested-tags": "Show nested tags", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "Page preview", "desc": "Preview a note when hovering an internal link. Ctrl/Cmd + hover in editor mode.", "label-empty-note": "\"{{linktext}}\" is not created yet. Click to create.", "label-source-editor": "Editor", "label-source-preview": "Preview", "label-source-search": "Search, Backlinks, and Outgoing links", "label-require-mod": "Require {{key}} to trigger page preview on hover" }, "starred": { "name": "Starred", "desc": "Star frequently used files and searches.", "action-show": "Show starred pane", "action-toggle": "Star/unstar current file", "action-toggle-search": "Star/unstar current search", "action-star": "Star", "action-unstar": "Unstar", "menu-opt-remove": "Remove", "msg-successfully-starred": "Successfully starred {{type}} \"{{title}}\".", "msg-removed-starred": "Removed starred {{type}} \"{{title}}\".", "msg-cannot-find-path": "Cannot find file at \"{{path}}\"." }, "custom-css": { "name": "Custom CSS", "desc": "Reads \"obsidian.css\" in the vault and applies it.", "setting-community-themes": "Community themes", "msg-fetching-themes": "Fetching community theme data...", "prompt-filter": "Filter...", "label-dark-theme-only": "Dark themes only", "label-light-theme-only": "Light themes only", "label-use": "Use", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "Update", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "Remove theme", "label-visit-on-github": "Visit on GitHub", "msg-load-error": "Could not load community themes, please check your network.", "msg-now-using-theme": "You're now using {{title}} as your CSS theme.", "msg-deleted-theme": "The theme {{title}} has been deleted.", "msg-updated-theme": "The theme {{title}} has been updated.", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "Command palette", "desc": "Type a command to invoke it. No need to use the UI or remember the shortcut.", "action-open": "Open command palette", "instruction-navigate": "to navigate", "instruction-use": "to use", "instruction-dismiss": "to dismiss", "label-no-commands": "No commands found.", "prompt-type-command": "Type a command...", "label-pinned-commands": "Pinned commands", "option-add-new-pin": "New pinned command", "option-add-new-pin-description": "Pinned commands will appear at the top of all commands when no search query is present." }, "markdown-format-importer": { "name": "Markdown format importer", "desc": "Convert Markdown from other apps to Obsidian format.", "action-open": "Open Markdown importer", "option-roam-tag-fixer": "Roam Research tag fixer", "option-roam-tag-fixer-description": "Converts \"#tag\" and \"#[[tag]]\" to \"[[tag]]\".", "option-roam-highlight-fixer": "Roam Research highlight fixer", "option-roam-highlight-fixer-description": "Converts \"^^highlight^^\" to \"==highlight==\".", "option-roam-todo-converter": "Roam Research TODO converter", "option-roam-todo-converter-description": "Converts \"{{[[TODO]]}}\" to \"[ ]\".", "option-bear-highlight-fixer": "Bear highlight fixer", "option-bear-highlight-fixer-description": "Converts \"::highlight::\" to \"==highlight==\".", "zettelkasten-link-fixer": "Zettelkasten link fixer", "zettelkasten-link-fixer-description": "Fixes \"[[UID]]\" links to full \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Zettelkasten link beautifier", "zettelkasten-link-beautifier-description": "Fixes \"[[UID]]\" links and also beautify them \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Warning: the importer will convert all the files in your vault, not just the current file.", "msg-override-files-warning": "Your files will be overwritten. Back up all your files before attempting conversion.", "label-start-conversion": "Start Conversion", "label-stop": "Stop", "label-go-back": "Go back", "label-done": "Done", "label-processing": "Processing...", "label-cancelling": "Cancelling...", "label-finished": "Finished!", "label-processed-files": "Processed files", "label-modified-files": "Modified files", "label-total-replacements": "Total replacements" }, "daily-notes": { "name": "Daily notes", "desc": "Open today's daily note, or create one if not present.", "short-name": "Today", "action-open": "Open today's note", "action-open-previous": "Open previous daily note", "action-open-next": "Open next daily note", "action-insert-text": "Insert text into daily note", "action-insert-link": "Insert link into daily note", "msg-fail-format": "Failed to create daily note. \"{{format}}\" is not a valid format.", "msg-fail-folder": "Failed to create daily note. Folder \"{{folderOption}}\" not found.", "msg-fail-template-file": "Failed to create daily note. Template file \"{{template}}\" not found.", "msg-no-previous": "There's no daily note before this one.", "msg-no-next": "There's no daily note after this one.", "option-date-format": "Date format", "label-refer-to-syntax": "For more syntax, refer to: ", "label-syntax-link": "format reference", "label-syntax-live-preview": "Here is what it will look like: ", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new daily note.", "option-template": "Template file location", "option-template-description": "The file path to use as template.", "option-open-on-start": "Open daily note on startup", "option-open-on-start-description": "Open your daily note automatically whenever you open this vault." }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Random note", "desc": "Opens a random note. Useful for reviewing and discovering.", "short-name": "Random", "action-open": "Open random note" }, "outline": { "name": "Outline", "desc": "Displays the outline of the current file or linked pane.", "action-open": "Open outline", "action-show": "Show outline pane", "action-open-for-current": "Open outline of the current file", "tab-title": "Outline of {{displayText}}", "label-no-headings": "No headings found." }, "word-count": { "name": "Word count", "desc": "Show word count in the status bar." }, "slides": { "name": "Slides", "desc": "Present from Markdown. Use \"---\" to separate slides.", "action-start": "Start presentation" }, "audio-recorder": { "name": "Audio recorder", "desc": "Record audio and save as attachment.", "action-start": "Start recording audio", "action-stop": "Stop recording audio", "action-toggle": "Start/stop recording", "msg-access-denied": "Microphone access was denied, please enable it from the preference pane.", "msg-pending-grant": "Please grant microphone permission to start recording.", "msg-no-microphone": "No microphone is connected." }, "open-with-default-app": { "name": "Open in default app", "desc": "Add button to open current file in the default app.", "action-open-file": "Open in default app", "action-open-file-mobile": "Share", "action-show-in-folder": "Show in folder", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "Templates", "desc": "Insert template content from a folder of template files.", "action-insert": "Insert template", "action-insert-current-date": "Insert current date", "action-insert-current-time": "Insert current time", "option-template-folder-location": "Template folder location", "option-template-folder-location-description": "Files in this folder will be available as templates.", "option-template-date-format": "Date format", "option-template-date-format-description": "{{date}} in the template file will be replaced with this value.", "option-template-date-format-description2": "You can also use {{date:YYYY-MM-DD}} to override the format once.", "option-template-time-format": "Time format", "option-template-time-format-description": "{{time}} in the template file will be replaced with this value.", "option-template-time-format-description2": "You can also use {{time:HH:mm}} to override the format once.", "instruction-navigate": "to navigate", "instruction-insert": "to insert template", "instruction-dismiss": "to dismiss", "msg-no-templates-found": "No templates found", "msg-fail-invalid-folder": "Failed to list templates. Template folder is invalid.", "msg-fail-folder-not-found": "Failed to list templates. Folder \"{{folderOption}}\" not found.", "prompt-type-template": "Type name of a template..." }, "translucency": { "name": "Translucent window", "desc": "Turn on translucency effect to enhance a sense of depth. Best used with dark mode. Not supported on Linux." }, "slash-command": { "name": "Slash commands", "desc": "Enable the ability to trigger slash commands in the editor by typing the forward slash." }, "editor-status": { "name": "Editor status", "desc": "Adds a status bar item to show and change the current editor mode.", "read": "Reading", "edit-source": "Source mode", "edit-live-preview": "Live Preview" }, "publish": { "name": "Publish", "desc": "Publish your notes through Obsidian Publish.", "action-publish-changes": "Publish changes", "label-no-internet-access": "You need access to the internet to publish changes.", "label-publish-service-description": "Obsidian Publish is an add-on paid service that lets you publish your notes online directly from Obsidian.", "label-please-login": "To start publishing, please log in or create a new Obsidian account.", "label-no-publish-subscription": "You do not have an Obsidian Publish subscription yet.", "button-purchase": "Purchase", "label-manage-sites": "Manage sites", "label-no-sites": "You don't have any sites.", "button-choose": "Choose", "tooltip-edit-site-id": "Edit site ID", "tooltip-delete-site": "Delete site", "label-delete-site-confirmation": "Are you sure you want to delete this site?", "label-delete-site-details": "This will immediately and permanently delete your site.", "label-confirm-delete-site": "Confirm delete site \"{{site}}\"", "option-site-id": "Site ID", "option-site-id-description": "Your site will be at https://publish.obsidian.md/{site id}. You can change this later. Only lower case letters, numbers, and dashes are allowed.", "option-site-id-placeholder": "Pick a site ID", "button-create": "Create", "msg-invalid-site-id": "Site ID can only contain lowercase letters, numbers, and dashes.", "msg-site-id-in-use": "This site ID is in use, please try another one.", "msg-create-site-issue": "That was an issue when creating your site.", "label-site-options": "Site options", "option-site-general": "General", "option-site-components": "Components", "option-site-appearance": "Appearance", "option-site-reading-experience": "Reading experience", "option-site-misc": "Other site settings", "option-site-name": "Site name", "option-site-name-description": "Name of your published site. It will show up in the page title of your site.", "option-site-name-placeholder": "Name of your site", "option-home-page-file": "Homepage file", "option-home-page-file-description": "The first page the user sees when landing on your published site", "option-home-page-file-placeholder": "Pick a published file", "option-logo": "Logo", "option-logo-description": "Pick an image file as your site logo.", "option-logo-placeholder": "Any any uploaded image in your vault...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "Theme", "option-theme-description": "Choose default color scheme for your site.", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "Show navigation", "option-show-navigation-description": "Display a list of all published pages on the left side of your published site.", "option-show-search": "Show search bar", "option-show-search-description": "Display a search bar at top of the navigation that lets the visitors search pages and headings on your site.", "option-show-graph": "Show graph view", "option-show-graph-description": "Display a small local graph on each page.", "option-show-outline": "Show table of contents", "option-show-outline-description": "Display the outline of headings on each page.", "option-show-backlinks": "Show backlinks", "option-show-backlinks-description": "Show backlink section at the end of each page.", "option-sliding-window-mode": "Use sliding windows", "option-sliding-window-mode-description": "Open pages in new panes to the right. Allows scrolling through panes horizontally.", "option-hover-preview-file": "Show hover preview", "option-hover-preview-file-description": "Display page preview when hovering links.", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "Readable line length", "option-readable-line-length-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-site-password": "Passwords", "option-site-password-description": "Restrict access to your site with passwords.", "option-google-analytics": "Google Analytics tracking code", "option-google-analytics-description": "Configure Google Analytics for your site. Only available for visitors from your custom domain URL. Please check with your local laws and regulations first.", "button-manage-passwords": "Manage", "button-save-site-settings": "Save site settings", "msg-updated-options": "Updated options for your site.", "button-go-back": "Back", "label-publishing-to": "Publishing to", "tooltip-switch-site": "Switch site", "button-add-linked": "Add linked", "tooltip-add-linked": "Add all files that are linked by currently selected items", "msg-added-linked-files": "{{count}} linked file has been added.", "msg-added-linked-files_plural": "{{count}} linked files have been added.", "tooltip-open-site-options": "Change site options", "label-no-changes-detected": "No changes were detected.", "label-changed-files-to-be-published": "Changes", "label-unchanged-files-already-published": "Unchanged (select to delete)", "label-file-selected": " selected", "button-select-all-files": "Select all", "button-deselect-all-files": "Deselect all", "label-new-files-to-be-published": "New", "button-publish": "Publish", "msg-no-permission-to-publish-to-site": "You do not have permissions to publish to the current site.", "msg-select-at-least-one-file": "Please select at least one file.", "label-upload-changes": "Upload changes", "button-done": "Done", "button-stop": "Stop", "label-status-uploading": "Uploading", "label-status-to-publish": "To publish", "label-status-to-delete": "To delete", "label-status-published": "Published", "label-status-deleted": "Deleted", "label-status-failed": "Failed", "label-status-cancelled": "Cancelled", "button-change": "Change", "label-clear-cache": "It takes up to a few minutes for the changes to show up on your site. If you do not see your latest changes, try clearing the cache in your browser.", "label-visit-site": "You can visit your site here: ", "msg-something-went-wrong": "Something went wrong. Please check the developer console for details.", "msg-network-error": "A network error occurred. ", "label-manage-passwords": "Manage passwords", "label-add-password": "Add password", "action-new-password": "New password", "label-no-password": "Your site currently does not have any passwords. Anyone can visit it.", "label-have-password": "Your site is password protected. If you have multiple passwords, visitors can access your site by entering any of them.", "option-password-name": "Password", "option-password-desc": "A hash of your password will be stored securely. Once the password is set, it cannot be revealed in plaintext.", "option-password-placeholder": "Your password", "option-nickname-name": "Nickname (optional)", "option-nickname-desc": "Set a nickname to remind yourself what or who the password is for.", "action-add-password": "Add this password", "label-untitled-password": "Untitled password", "label-password-created-time": "Created {{time}}", "msg-added-new-password": "Added new password.", "option-custom-domain": "Custom domain", "option-custom-domain-desc": "Use your own domain rather than the https://publish.obsidian.md/{site id} URL.", "option-noindex": "Disallow search engine indexing", "option-noindex-desc": "Prevent search engines from indexing your site.", "button-configure": "Configure", "label-configure-custom-domain": "Configure custom domain", "option-custom-url-name": "Custom URL", "option-custom-url-desc": "The URL that your site will be located at.", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "Redirect to your custom domain", "option-custom-url-redirect-desc": "Redirect visitors on publish.obsidian.md/id to your custom domain.", "button-update-custom-domain": "Update domain setting", "label-custom-domain-instructions": "Please refer to our {{link}} on our help site for more information.", "label-custom-domain-link-name": "custom domain setup guide", "label-site-usage": "You're using {{site}} out of your {{limit}}.", "button-add-more-sites": "Buy more sites", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "Workspaces", "desc": "Save and load workspace layout.", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "Save", "button-load": "Load", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "Sync", "desc": "Synchronize your files through Obsidian Sync.", "action-view-version-history": "View version history", "label-load-more": "Load more", "label-show-diff": "Show diff", "label-copy-to-clipboard": "Copy to clipboard", "label-restore-this-version": "Restore this version", "msg-already-latest-version": "This version is already the latest version.", "msg-restored-version": "Successfully restored version from {{time}}", "label-file-deleted": "This file was deleted", "label-no-earlier-version": "There was no earlier versions of this file.", "label-empty-file": "Empty", "label-setting-files": "Setting files", "label-deleted-files": "Deleted files", "label-version-history": "Version history", "label-click-to-see-history": "Click on a deleted file to see its history.", "label-create-remote-vault": "Create remote vault", "msg-please-enter-password": "Please enter a password.", "msg-vault-name-cannot-be-empty": "Vault name cannot be empty.", "msg-successfully-created-vault": "Successfully create remote vault \"{{name}}\".", "label-remote-vault-explanation": "Remote vaults securely synchronize your vault between devices.", "option-vault-name": "Vault name", "option-vault-name-desc": "Helps you remember what this vault is for.", "option-vault-name-placeholder": "My awesome vault", "option-use-custom-encryption-password": "Customize end-to-end encryption password", "option-use-custom-encryption-password-desc": "If you turn this off, we will securely manage an encryption key for you.", "option-use-custom-encryption-password-desc-warning": "This option cannot be changed later.", "option-encryption-password": "Encryption password", "option-encryption-password-desc": "This password cannot be changed later.", "option-encryption-password-desc-warning": "If you forget this password, any remote data will remain unusable forever.", "option-encryption-password-desc-2": "This does not affect your local data.", "option-encryption-password-placeholder": "Your password", "label-enter-encryption-password": "Enter encryption password", "button-unlock-vault": "Unlock vault", "msg-verified-password": "Successfully verified your password.", "label-remote-vaults": "Your remote vaults", "label-vault-created-time": "Created {{time}}", "tooltip-delete-remote-vault": "Delete", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "Confirm delete vault", "label-confirm-delete-remote-vault-question": "Are you sure you want to delete this remote vault?", "label-confirm-delete-remote-vault-result": "All data on our server, including version history, will be deleted. Your local files will stay intact.", "label-confirm-delete-remote-vault-warning": "This action is permanent and irreversible.", "msg-remote-vault-deleted": "{{name}} has been deleted.", "button-connect-to-remote-vault": "Connect", "button-disconnect-from-remote-vault": "Disconnect", "label-not-remote-vaults": "You don't have any remote vaults.", "button-create-new-remote-vault": "Create new vault", "label-sync-log": "Sync log", "options-only-show-errors": "Errors only", "options-only-show-errors-desc": "Only show errors and hide other log items.", "button-copy-sync-log": "Copy sync log", "msg-successfully-copied-sync-log": "Successfully copied sync log.", "button-retry": "Retry", "button-purchase-subscription": "Purchase", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "Choose", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "Sync status", "option-sync-status-desc-paused": "Obsidian Sync is currently paused.", "option-sync-status-desc-running": "Obsidian Sync is currently running.", "option-device-name": "Device name", "option-device-name-desc": "This name will be displayed in the sync log. Leave empty to use the default name.", "button-resume": "Resume", "button-pause": "Pause", "option-view-deleted-files": "Deleted files", "option-view-deleted-files-desc": "View and restore deleted files.", "option-sync-log": "Sync activity", "option-sync-log-desc": "View recent sync activities for debugging.", "button-view": "View", "button-bulk-restore": "Bulk restore", "button-restore-selected-files": "Restore selected files", "msg-restoring": "Restoring...", "msg-restoring-complete": "Restore complete: {{succeeded}} succeeded and {{failed}} failed.", "option-over-size": "Vault size over limit", "option-over-size-desc": "Your vault is at {{size}} out of {{limit}}.", "msg-largest-files": "View largest files", "msg-largest-files-desc": "These are the remote files that are taking the most space. After deleting attachments, use the purge button to free up remote vault space.", "button-purge-remote": "Purge", "tooltip-purge-remote": "Permanently purge deleted attachments from remote vault to save space.", "msg-purge-complete": "Purge complete.", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "Selective sync", "option-excluded-folders": "Excluded folders", "option-excluded-folder-desc": "Prevent certain folders from being synced.", "option-currently-excluded-folders": " These folders currently excluded:", "button-manage-excluded-folders": "Manage", "option-sync-image": "Sync images", "option-sync-image-desc": "Sync image files with these extensions: {{extensions}}.", "option-sync-audio": "Sync audio", "option-sync-audio-desc": "Sync audio files with these extensions: {{extensions}}.", "option-sync-video": "Sync videos", "option-sync-video-desc": "Sync video files with these extensions: {{extensions}}.", "option-sync-pdf": "Sync PDFs", "option-sync-pdf-desc": "Sync PDF files.", "option-sync-unsupported": "Sync all other types", "option-sync-unsupported-desc": "Sync unsupported file types.", "option-vault-config-sync": "Vault configuration sync", "option-view-config-files": "Settings version history", "option-view-config-files-desc": "View and restore version history of setting files.", "option-sync-app": "Main settings", "option-sync-app-desc": "Enable to sync editor settings, files & links settings, custom hotkeys, etc.", "option-sync-appearance": "Appearance settings", "option-sync-appearance-desc": "Sync appearance settings like dark mode, active theme, and enabled snippets.", "option-sync-appearance-data": "Themes and snippets", "option-sync-appearance-data-desc": "Sync downloaded themes and snippets. Whether they are enabled depends on the previous setting.", "option-sync-hotkey": "Hotkeys", "option-sync-hotkey-desc": "Sync custom hotkeys.", "option-sync-core-plugin": "Active core plugin list", "option-sync-core-plugin-desc": "Sync which core plugins are enabled.", "option-sync-core-plugin-data": "Core plugin settings", "option-sync-core-plugin-data-desc": "Sync core plugin settings.", "option-sync-community-plugin": "Active community plugin list", "option-sync-community-plugin-desc": "Sync which community plugins are enabled.", "option-sync-community-plugin-data": "Installed community plugins", "option-sync-community-plugin-data-desc": "Sync installed community plugins (.js, .css, and manifest.json files) and their settings.", "label-sync-introduction": "Obsidian Sync is Obsidian's add-on sync service with end-to-end encryption and version history.", "label-account-required": "To start syncing, please log in or create a new Obsidian account.", "button-sign-up": "Sign up", "button-log-in": "Log in", "label-manage-excluded-folders": "Manage excluded folders", "label-number-of-folders-excluded": "{{folders}} are currently excluded from being synced.", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "Setup connection", "label-now-connected-to-vault": "You're now connected to \"{{name}}\".", "button-start-syncing": "Start syncing", "label-confirm-merge-vault": "Confirm Merge Vault", "msg-vault-has-notes": "Your local vault already contains some notes.", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "File recovery", "desc": "Let you restore recent snapshots to recover from accidental data loss. Snapshots are only saved for Markdown files.", "action-open": "Open saved snapshots", "option-interval": "Snapshot interval", "option-interval-description": "Minimal interval in minutes between two snapshots.", "option-keep": "History length", "option-keep-description": "Length in days snapshots is kept for.", "option-open-history": "Snapshots", "option-open-history-description": "View and restore saved snapshots.", "button-view-snapshots": "View", "option-clear": "Clear history", "option-clear-description": "Wipe all snapshots.", "button-clear-history": "Clear", "label-clear-warning": "Are you sure you want to delete all snapshots? Note that only snapshots will be removed. All files inside your vault will not be affected.", "msg-clear-complete": "Snapshots cleared.", "label-no-history-found": "No snapshots found.", "placeholder-choose-file": "Choose a file...", "label-select-file": "Please select a file on the left to view snapshots." }, "note-composer": { "name": "Note composer", "desc": "Merge, split, and refactor notes.", "option-confirm-file-merge": "Confirm file merge", "option-confirm-file-merge-description": "Prompt before merge two files.", "option-split-replacement-text": "Text after extraction", "option-split-replacement-text-description": "What to show in place of the selected text after extracting it.", "option-choice-split-replacement-text-link": "Link to new file", "option-choice-split-replacement-text-embed": "Embed new file", "option-choice-split-replacement-text-none": "None", "option-template-file": "Template file location", "option-template-file-description": "Template file to use when merging or extracting. Available variables: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Merge current file with another file...", "action-merge-file": "Merge entire file with...", "label-no-files": "No files found.", "instruction-navigate": "to navigate", "instruction-merge": "to merge", "instruction-create-new": "to create new", "instruction-merge-at-top": "to merge at top", "instruction-dismiss": "to dismiss", "prompt-select-file-to-merge": "Select file to merge into...", "label-merge-file": "Merge file", "label-confirm-file-merge": "Are you sure you want to merge \"{{file}}\" into \"{{destination}}\"? \"{{file}}\" will be deleted.", "button-merge": "Merge", "button-merge-do-not-ask-again": "Merge and don't ask again", "command-split-file": "Extract current selection...", "command-extract-heading": "Extract this heading...", "instruction-append": "to move to bottom", "instruction-prepend": "to move to top", "msg-fail-to-fetch-template": "Failed to fetch template file: \"{{template}}\" not found.", "msg-fail-to-find-heading": "Failed to find heading" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} word", "word-with-count_plural": "{{count}} words", "character-with-count": "{{count}} character", "character-with-count_plural": "{{count}} characters", "link-with-count": "{{count}} link", "link-with-count_plural": "{{count}} links", "file-with-count": "{{count}} file", "file-with-count_plural": "{{count}} file", "folder-with-count": "{{count}} folder", "folder-with-count_plural": "{{count}} folders", "backlink-with-count": "{{count}} backlink", "backlink-with-count_plural": "{{count}} backlinks", "site-with-count": "{{count}} site", "site-with-count_plural": "{{count}} sites", "plugin-with-count": "{{count}} plugin", "plugin-with-count_plural": "{{count}} plugins", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } }{ "setting": { "options": "ตัวเลือกปรับแต่ง", "plugin": "ปลั๊กอิน", "builtin-plugins": "ปลั๊กอินหลัก", "plugin-options": "ตัวเลือกปรับแต่งปลั๊กอิน", "folder-path-example-placeholder": "ตัวอย่าง: folder 1/folder 2", "file-path-example-placeholder": "ตัวอย่าง: folder/note", "msg-restart-required": "การปรับแต่งค่าจะมีผลเมื่อรีสตาร์ทโปรแกรม", "editor": { "name": "เอดิเตอร์", "section-general": "ทั่วไป", "section-behavior": "การทำงาน", "section-display": "การแสดงผล", "option-spellcheck": "การพิสูจน์อักษร", "option-spellcheck-description": "เปิดใช้การพิสูจน์อักษร (ขณะนี้ใช้ได้กับภาษาอังกฤษ (US) เท่านั้น)", "spellcheck-languages": "ภาษาการพิสูจน์อักษร", "spellcheck-languages-description": "เลือกภาษาสำหรับการพิสูจน์อักษร", "spellcheck-languages-mac-description": "ระบบการพิสูจน์อักษรของ macOS จะตรวจสอบภาษาให้โดยอัตโนมัติ", "spellcheck-dict": "พจนานุกรมการพิสูจน์อักษร", "spellcheck-dict-empty": "ไม่มีพจนานุกรมการพิสูจน์อักษร", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "ความยาวบรรทัดที่เหมาะกับการอ่าน", "option-readable-line-description": "จำกัดความยาวบรรทัดให้เหมาะกับการอ่าน แต่ละบรรทัดจะสั้นลงและทำให้ย่อหน้ายาวๆ อ่านง่ายขึ้น", "option-strict-line-break": "การตัดบรรทัดแบบเข้มงวด", "option-strict-line-break-description": "ไม่สนใจการเคาะบรรทัดเดี่ยวตามมาตรฐานของภาษา Markdown ในโหมดพรีวิว ปิดใช้ตัวเลือกนี้เพื่อแสดงผลการเคาะบรรทัดเดี่ยวในโหมดพรีวิว", "option-show-frontmatter": "แสดงผล frontmatter", "option-show-frontmatter-description": "แสดงผล frontmatter ในรูปแบบโค้ดบล๊อกในโหมดพรีวิว ปิดใช้ตัวเลือกนี้เพื่อซ่อน frontmatter ในโหมดพรีวิว", "option-auto-pair-brackets": "เติมวงเล็บปิดโดยอัตโนมัติ", "option-auto-pair-brackets-description": "เติมวงเล็บปิดและปิดเครื่องหมายคำพูดโดยอัตโนมัติ", "option-auto-pair-markdown": "เติมไวยากรณ์ภาษา Markdown โดยอัตโนมัติ", "option-auto-pair-markdown-description": "เติมสัญลักษณ์ของไวยากรณ์โดยอัตโนมัติสำหรับตัวหนา ตัวเอียง การเน้นคำ การขีดกลางบรรทัด และโค้ด", "option-smart-indent-lists": "ลิสต์รายการแบบสมาร์ต", "option-smart-indent-lists-description": "สร้างลิสต์รายการโดยเติมย่อหน้าและสัญลักษณ์หน้าข้อรายการโดยอัตโนมัติ", "option-fold-heading": "ยุบหัวข้อ", "option-fold-heading-description": "สามารถยุบหัวข้อเพื่อซ่อนการแสดงผลข้อมูลใต้หัวข้อนั้นทั้งหมด", "option-fold-indent": "ยุบลิสต์รายการ", "option-fold-indent-description": "สามารถยุบลิสต์รายการเพื่อซ่อนการแสดงผลข้อมูลใต้รายการนั้นทั้งหมด", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Editing view", "option-default-new-tab-view-reading": "Reading view", "option-default-editing-mode": "โหมดปรับแก้เริ่มต้น", "option-default-editing-mode-description": "โหมดปรับแก้เริ่มต้นของหน้าต่างใหม่", "option-default-editing-mode-source": "โหมดต้นฉบับ", "option-default-editing-mode-live-preview": "โหมดพรีวิวสด", "option-show-line-number": "แสดงผลหมายเลขบรรทัด", "option-show-line-number-description": "แสดงผลหมายเลขบรรทัดที่หัวบรรทัด", "option-indentation-guide": "Show indentation guides", "option-indentation-guide-description": "Show vertical relationship lines between bullet points for visual guidance.", "option-use-tabs": "ใช้งานย่อหน้า", "option-use-tabs-description": "ใช้ปุ่ม \"tab\" เพื่อตั้งย่อหน้า ปิดใช้ตัวเลือกนี้เพื่อใช้เว้นวรรคแทน", "option-tab-size": "ขนาดย่อหน้า", "option-tab-size-description": "จำนวนเว้นวรรคสำหรับการย่อหน้า", "option-rtl": "อ่าน-เขียนจากขวาไปซ้าย (RTL)", "option-rtl-description": "ตั้งค่าการแสดงผลทิศทางการอ่านและเขียนให้เป็นจากขวาไปซ้าย", "option-auto-convert-html": "แปลงไวยากรณ์ HTML โดยอัตโนมัติ", "option-auto-convert-html-description": "แปลงไวยากรณ์ HTML เป็น Markdown โดยอัตโนมัติเมื่อแปะหรือลากวางข้อมูลจากหน้าเว็บ ใช้คีย์ลัด Ctrl/Cmd + Shift + V เพื่อแปะช้อมูลดิบโดยไม่แปลงไวยากรณ์", "option-vim-key-bindings": "ใช้คีย์ลัดเหมือนโปรแกรม Vim", "option-vim-key-bindings-description": "ใช้คีย์ลัดเหมือนโปรแกรม Vim ในโหมดต้นฉบับ", "option-vim-key-bindings-mobile": "On mobile devices, this setting is per-device and is not synchronized through the config file.", "option-emacsy-keys": "ใช้คีย์ลัดแบบ legacy-Emacs สำหรับ macOS", "option-emacsy-keys-description": "ใช้คีย์ลัดและการนำทางแบบ legacy-Emacs สำหรับ macOS (คีย์ลัดมาตรฐานของ macOS) แต่อาจเกิดปัญหากับคีย์ลัดของโปรแกรมได้", "label-confirm-enable-vim": "การยืนยันก่อนเข้าใช้งานโหมด Vim", "label-vim-warning": "โหมด Vim ทำให้สามารถแก้ไขเนื้อหาข้อความได้อย่างรวดเร็วแต่ใช้งานยาก หากคุณไม่เคยใช้ Vim การเปิดใช้โหมดนี้อาจทำให้ดูเหมือนโปรแกรม Obsidian หยุดทำงานได้", "label-vim-test": "กรุณาป้อนคำสั่งสำหรับหยุดใช้งาน Vim โดยไม่เซฟ เพื่อยืนยันว่าคุณใช้งาน Vim เป็น", "label-vim-your-answer": "ป้อนคำตอบ", "placeholder-enter-command": "ป้อนคำสั่ง...", "button-confirm-enable-vim": "เปิดใช้งาน Vim", "msg-vim-mode-enabled": "คำสั่งถูกต้อง เปิดใช้งานโหมด Vim แล้ว", "msg-vim-mode-not-enabled": "คำสั่งไม่ถูกต้อง โหมด Vim ไม่ถูกเปิดใช้งานเพื่อไม่ให้เกิดความเสียหาย", "msg-vim-mode-please-enter-command": "กรุณาป้อนคำสั่งเพื่อเปิดใช้งานโหมด Vim", "option-legacy-editor": "ใช้เอดิเตอร์รุ่นเก่า", "option-legacy-editor-description2": "The legacy editor will be deprecated soon. It is currently no longer maintained, and as such, bugs will no longer be addressed.", "label-legacy-deprecation": "New editor is here", "label-legacy-deprecation-1": "Obsidian now has a brand new editor that's more robust and accessible.", "label-legacy-deprecation-2": "It seems you're still using the legacy editor, and we think you'll enjoy the new editor.", "label-legacy-deprecation-choice": "Which mode would you like to use?", "label-live-preview-description": "A more modern, what-you-see-is-what-you-get experience.", "label-source-mode-description": "See raw Markdown with syntax highlighting.", "button-start-new-editor": "Start new editor" }, "file": { "name": "ไฟล์และลิงค์", "option-confirm-file-deletion": "ยืนยันการลบไฟล์", "option-confirm-file-deletion-description": "ตัวเลือกเพื่อเปิด-ปิดการยืนยันก่อนการลบไฟล์", "option-delete-destination": "ไฟล์ที่ถูกลบ", "option-delete-destination-description": "สิ่งที่จะเกิดขึ้นเมื่อลบไฟล์", "option-choice-system-trash": "ย้ายไฟล์ไปที่ถังขยะของระบบ", "option-choice-vault-trash": "ย้ายไฟล์ไปที่ถังขยะของ Obsidian (โฟลเดอร์ .trash)", "option-choice-permanent-delete": "ลบไฟล์โดยถาวร", "option-always-update-links": "อัพเดตลิงค์ภายในโดยอัตโนมัติ", "option-always-update-links-description": "ตัวเลือกเพื่ออัพเดตลิงค์ภายในโดยอัตโนมัติเมื่อมีการเปลี่ยนชื่อไฟล์", "option-new-note-location": "ตำแหน่งเริ่มต้นโน้ตใหม่", "option-new-note-location-description": "ตำแหน่งเริ่มต้นของโน้ตที่สร้างขึ้นใหม่ ตัวเลือกนี้จะถูกแทนที่ด้วยการตั้งค่าของปลั๊กอิน", "option-choice-vault-root": "ในโฟลเดอร์เดียวกับห้องนิรภัย", "option-choice-current-folder": "ในโฟลเดอร์เดียวกับไฟล์", "option-choice-specified-folder": "ในโฟลเดอร์ที่กำหนดเอง", "option-new-file-folder-path": "โฟลเดอร์ที่สร้างโน้ตใหม่", "option-new-file-folder-path-description": "โน้ตที่สร้างขึ้นใหม่จะถูกบันทึกไว้ในโฟลเดอร์นี้ ตัวเลือกนี้จะถูกแทนที่ด้วยการตั้งค่าของปลั๊กอิน", "option-use-wiki-links": "ใช้งาน [[วิกิลิงค์]]", "option-use-wiki-links-description": "สร้างวิกิลิงค์โดยอัตโนมัติสำหรับ [[ลิงค์]] และ ![[รูปภาพ]] แทนการใช้ Markdown ปิดการใช้ตัวเลือกนี้เพื่อสร้างลิงค์ด้วย Markdown", "option-show-unsupported-files": "แสดงผลไฟล์ทุกนามสกุล", "option-show-unsupported-files-description": "แสดงผลไฟล์ทุกชนิดแม้ Obsidian จะไม่รองรับ เพื่อสร้างลิงค์และมองเห็นใน File Explorer และ Quick Switcher", "option-link-autocompleted-format": "รูปแบบลิงค์ใหม่", "option-link-autocompleted-format-description": "รูปแบบของลิงค์ภายในที่สร้างขึ้นใหม่", "option-choice-shortest-linktext": "พาธแบบสั้นที่สุด", "option-choice-relative-path": "พาธแบบ relative", "option-choice-absolute-path": "พาธแบบ absolute ภายในห้องนิรภัย", "option-new-attachment-location": "ตำแหน่งเริ่มต้นสำหรับไฟล์แนบใหม่", "option-new-attachment-location-description": "ตำแหน่งเริ่มต้นสำหรับไฟล์แนบใหม่", "option-choice-subdirectory": "ในโฟลเดอร์ย่อยของโฟลเดอร์ปัจจุบัน", "option-attachment-folder-path": "พาธของไฟล์แนบ", "option-attachment-folder-path-description": "ไฟล์แนบที่สร้างขึ้นใหม่รวมถึงไฟล์รูปภาพและไฟล์เสียงที่ถูกลากวางและแปะจะถูกบันทึกไว้ในโฟลเดอร์นี้", "option-attachment-subfolder-path": "ชื่อโฟลเดอร์ย่อย", "option-attachment-subfolder-path-description": "หากตำแหน่งเริ่มต้นของโน้ตใหม่อยู่ที่ \"vault/folder\" และตั้งชื่อโฟลเดอร์ย่อยว่า \"attachments\" ไฟล์แนบจะถูกบันทึกไว้ที่ \"vault/folder/attachments\"", "option-attachment-subfolder-path-placeholder": "ไฟล์แนบ", "option-excluded-files": "Excluded files", "option-excluded-files-desc": "Excluded files will be either hidden or less noticeable in various places, such as Quick Switcher, link suggestion, and Graph View.", "label-no-excluded-filters-applied": "No excluded filter is applied right now. Add one below.", "label-excluded-filters-applied": "Files matching the following filters are currently excluded:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Enter path or \"/regex/\"..." }, "appearance": { "name": "การแสดงผล", "option-base-theme": "ชุดสีหลัก", "option-base-theme-description": "เลือกชุดสีหลักของ Obsidian", "option-accent-color": "Accent color", "option-accent-color-description": "Choose the accent color used throughout the app.", "dark-theme": "สีเข้ม", "light-theme": "สีอ่อน", "system-theme": "Adapt to system", "option-font": "Font", "option-advanced": "Advanced", "option-interface-font": "Interface font", "option-interface-font-description": "Set base font for all of Obsidian.", "option-text-font": "Text font", "option-text-font-description": "Set font for editing and reading views.", "option-monospace-font": "Monospace font", "option-monospace-font-description": "Set font for places like code blocks and frontmatter.", "label-single-font-currently-in-effect": " Currently applied font: ", "label-multiple-fonts-currently-in-effect": " The following fonts are currently applied:", "option-font-placeholder": "Enter font name...", "label-no-custom-font-set": "No custom font is applied right now. Add one below.", "label-font-applied": "The first font from this list that is available on your system will be applied.", "msg-font-not-found": "This font is not detected on your system.", "msg-font-found": "This font is detected on your system.", "label-font-name": "Font name", "option-community-themes": "เปิดดูธีมที่สร้างโดยชุมชน", "option-community-themes-description": "พรีวิวและใช้งานธีมเจ๋งๆ ที่สร้างโดยชุมชน", "button-browse-community-themes": "เลือกดู", "option-font-size": "ขนาดตัวอักษร", "option-font-size-description": "ขนาดตัวอักษรที่ใช้แสดงผลในโหมดปรับแก้และพรีวิว มีขนาดเป็นพิกเซล", "option-font-size-action": "ปรับขนาดตัวอักษรแบบรวดเร็ว", "option-font-size-action-description": "ปรับขนาดตัวอักษรแบบรวดเร็วด้วยคีย์ลัด Ctrl + ลูกกลิ้ง หรือใช้นิ้วขยุ้มซูมบนแทร็คแพด", "option-themes": "ธีม", "option-manage-themes-description": "จัดการธีมที่ติดตั้งไว้แล้ว และเลือกดูธีมที่สร้างโดยชุมชน", "option-theme-button-manage": "จัดการ", "option-choice-none": "ไม่มี", "option-native-menus": "Native menus", "option-native-menus-desc": "Menus throughout the app will match the operating system. They will not be affected by your theme.", "button-reload-themes": "รีโหลดธีม", "msg-reloaded-themes": "ธีมถูกรีโหลดแล้ว", "button-open-themes-folder": "เปิดโฟลเดอร์ธีม", "option-css-snippets": "CSS snippets", "label-no-css-snippets-found": "ไม่พบ CSS snippets ในโฟลเดอร์ snippets", "no-snippet-description": "CSS Snippets ถูกเก็บไวเที่ \"{{path}}\".", "button-reload-snippets": "รีโหลด snippets", "button-open-snippets-folder": "เปิดโฟลเดอร์ snippets", "msg-reloaded-snippets": "CSS snippets ถูกรีโหลดแล้ว", "option-toggle-snippet-description": "ใช้งาน CSS snippet ที่ \"{{path}}\".", "label-installed-themes": "ธีมที่ถูกติดตั้งไว้", "label-screenshot-unavailable": "ไม่พบภาพตัวอย่าง", "label-default-theme": "ธีมเริ่มต้น", "tooltip-click-to-enlarge": "คลิกเพื่อขยาย", "button-update": "อัพเดต", "label-currently-selected": "ถูกใช้งาน", "option-frame-style": "Window frame style", "option-frame-description": "Determines the styling of the title bar of Obsidian windows. Requires a full restart to take effect.", "option-frame-hidden": "Hidden (default)", "option-frame-obsidian": "Obsidian frame", "option-frame-native": "Native frame", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Show tab title bar", "option-show-view-header-desc": "Display the header at the top of every tab.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "button-check-for-updates": "Check for updates", "button-view-updates": "View updates", "button-update-all-themes": "Update all", "label-current-themes": "Current community themes", "label-currently-installed": "You currently have {{count}} theme installed.", "label-currently-installed_plural": "You currently have {{count}} themes installed." }, "hotkeys": { "name": "ฮ็อตคีย์", "prompt-filter": "ตัวกรอง...", "tooltip-delete-hotkey": "ลบฮ็อตคีย์", "label-waiting-for-hotkey-press": "กดฮ็อตคีย์ที่ต้องการ...", "tooltip-restore-default": "เรียกคืนค่าเริ่มต้น", "tooltip-customize-command": "ปรับแต่งคำสั่งนี้", "tooltip-hotkey-single-conflict": "ฮ็อตคีย์นี้ซ้ำซ้อนกับ \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "ฮ็อตคีย์นี้ซ้ำซ้อนกับคำสั่ง {{count}} คำสั่ง", "label-blank-hotkey": "ว่างเปล่า" }, "about": { "name": "เกี่ยวกับ", "label-commercial-license": "ใบอนุญาตการใช้งานในเชิงพาณิชย์Commercial license", "label-license-key": "กุญแจใบอนุญาต", "license-key-placeholder": "กุญแจใบอนุญาตของคุณ...", "label-activate-license": "เปิดใช้งานใบอนุญาต", "button-activate": "เปิดใช้งาน", "label-unknown-version": "ไม่ทราบ", "label-current-version": "รุ่นปัจจุบัน: ", "label-install-version": "(รุ่นตัวติดตั้ง: {{version}})", "label-up-to-date": "โปรแกรมเป็นรุ่นล่าสุดแล้ว!", "label-read-changelog": "อ่านบันทึกความเปลี่ยนแปลง", "label-manual-update-required": "To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.", "label-download": "ดาวน์โหลด", "label-new-version-ready": "มีรุ่นใหม่ให้ติดตั้ง", "label-relaunch-to-update": "เปิดโปรแกรมอีกครั้งเพื่ออัพเดตรุ่น", "label-disabled-updates": "ปิดการอัพเดต", "label-checking-for-updates": "กำลังตรวจสอบการอัพเดต...", "button-relaunch": "เปิดโปรแกรมใหม่", "button-check-for-updates": "ตรวจสอบการอัพเดต", "option-auto-update": "การอัพเดตรุ่นโดยอัตโนมัติ", "option-auto-update-description": "ปิดใช้งานตัวเลือกนี้เพื่อหยุดการตรวจสอบรุ่นโดยอัตโนมัติ", "option-get-help": "Get help", "option-get-help-description": "Get help on using Obsidian.", "button-open": "เปิด", "option-language": "ภาษา", "option-language-description": "เปลี่ยนภาษาการแสดงผล", "option-insider-build": "อัพเดต insider builds", "option-insider-build-description": "อัพเดตเป็น insider builds เพื่อทดลองใช้ลูกเล่นใหม่ๆ โปรดรับทราบว่า insider builds นั้นใหม่มากและอาจทำงานได้ไม่เสถียร", "option-advanced": "ขั้นสูง", "option-hw-acceleration": "Hardware Acceleration", "option-hw-acceleration-description": "เปิดใช้งาน Hardware Acceleration เพื่อใช้กราฟิกการ์ดช่วยประมวลผลใช้งานได้ลื่นไหล", "option-hw-acceleration-warning": "หากปิดการใช้งานตัวเลือกนี้ ประสิทธิภาพของโปรแกรมจะลดลงอย่างมาก", "option-config-location": "โฟลเดอร์การตั้งค่าอื่น", "option-config-location-description": "โฟลเดอร์การตั้งค่าอื่นที่ไม่ใช่โฟลเดอร์เริ่มต้น ชื่อโฟลเดอร์ต้องขึ้นต้นด้วย \"จุด\"", "option-config-location-warning": "ตำแหน่งของไฟล์ตั้งค่าต้องเป็นชื่อโฟลเดอร์ที่ขึ้นต้นด้วย \"จุด\" เสมอ", "label-license": "ใบอนุญาต", "label-your-commercial-license-key": "กุญแจใบอนุญาตใช้งานเชิงพาณิชย์ของคุณคือ \"{{key}}\".", "label-commercial-license-info": "จดทะเบียนโดย \"{{company}}\" สำหรับผู้ใช้ {{seats}} ที่นั่ง. ใช้งานได้จนถึง {{expiry}}.", "label-validating-commercial-license": "กำลังตรวจสอบใบอนุญาต...", "label-invalid-commercial-license": "ใบอนุญาตไม่ถูกต้อง: ", "button-remove-commercial-license": "ถอดถอน", "option-catalyst": "Catalyst license", "option-catalyst-desc": "You currently have the {{tier}} Catalyst license. Thanks for your support!", "option-catalyst-desc-no-license": "You don't have a Catalyst license right now. Catalyst license is a one-time donation to support Obsidian development.", "label-app": "App" }, "account": { "name": "บัญชีผู้ใช้", "option-your-account": "Your account", "option-your-account-desc": "You're currently signed in {{name}} ({{email}}).", "option-your-account-desc-no-login": "You're not logged in right now. An account is only needed for Obsidian Sync, Obsidian Publish, and Catalyst insider builds.", "button-manage-settings": "Manage settings", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Commercial license", "option-commercial-license-desc": "If you use Obsidian for commercial purpose, you may need to get a commercial license.", "button-purchase": "Purchase", "button-log-out": "ล็อกเอาท์", "label-log-in": "ล็อกอิน", "label-sign-up": "Sign up", "label-email": "อีเมล", "placeholder-email": "อีเมลของคุณ...", "label-password": "รหัสผ่าน", "placeholder-password": "รหัสผ่านของคุณ...", "button-login": "ล็อกอิน", "message-empty-email": "Email cannot be empty.", "message-invalid-email": "กรุณากรอกอีเมล", "message-empty-password": "กรุณากรอกพาสเวิร์ด", "message-login-failed": "ล็อกอินไม่สำเร็จ กรุณาตรวจสอบอีเมลหรือรหัสผ่านให้ถูกต้อง", "label-no-account": "ยังไม่มีบัญชี? ", "link-sign-up-now": "สมัครเลย" }, "core-plugin": { "plugin-list": "รายการปลั๊กอิน", "option-search-plugin": "ค้นหาปลั๊กอินหลัก", "option-search-plugin-description": "ค้นหาปลั๊กอินด้วยชื่อหรือคำอธิบาย", "placeholder-search-plugin": "ค้นหาปลั๊กอิน..." }, "third-party-plugin": { "name": "ปลั๊กอินโดยชุมชน", "option-restricted-mode": "Restricted mode", "option-restricted-mode-description": "Restricted Mode is off. Turn on to disable community plugins.", "button-turn-on": "Turn on", "option-browse-community-plugins": "ปลั๊กอินโดยชุมชน", "option-browse-community-plugins-description": "เลือกดูและติดตั้งปลั๊กอินที่สร้างโดยชุมชนที่สุดยอดของเรา", "button-browse": "เลือกดู", "label-exit-restricted-mode": "Exit Restricted Mode", "label-exit-restricted-mode-description-1": "Community plugins, like any other software you install, could potentially cause data integrity and security issues.", "label-exit-restricted-mode-description-2": "Plugin security is important to us. Here's what we do:", "label-exit-restricted-mode-description-3": "Despite our efforts, there is still a small chance that a community plugin might misbehave.", "label-code-review": "Initial code review", "label-code-review-desc": "Plugins undergo an initial code review by our team before they appear in the store.", "label-open-source": "Open source", "label-open-source-desc": "Most plugins are open source on GitHub, so you can inspect the code yourself.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We have a large community of developers who watch out for each other.", "label-report-mechanism": "Report mechanism", "label-report-mechanism-desc": "We follow up and remove faulty plugins upon user report.", "label-exit-restricted-mode-disable-confirmation": "Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.", "label-learn-more": "Learn more about plugin security", "button-turn-on-community-plugins": "Turn on community plugins", "label-trust-author": "Do you trust the author of this vault?", "label-trust-author-description-1": "You're opening this vault for the first time, and it comes with some plugins.", "label-trust-author-description-2": "If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.", "label-trust-author-description-3": "If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.", "button-enable-plugins": "Trust author and enable plugins", "button-dont-trust-author": "Browse vault in Restricted Mode", "placeholder-community-plugins": "ค้นหาปลั๊กอินโดยชุมชน...", "msg-failed-load-plugins": "พบปัญหาในการแสดงผลปลั๊กอินโดยชุมชน", "label-installed": "ติดตั้งแล้ว", "button-install": "ติดตั้ง", "button-enable": "เปิดใช้งาน", "button-disable": "ปิดใช้งาน", "button-copy-share-link": "คัดลอกลิงค์เพื่อแชร์", "button-donate": "Donate", "label-no-results-found": "ไม่พบผลการค้นหา", "msg-failed-to-load-manifest": "พบปัญหาในการโหลดข้อมูลเบื้องต้นของปลั๊กอิน", "label-version": "รุ่น: {{version}}", "label-currently-installed-version": " (รุ่นที่ติดตั้งอยู่: {{version}})", "label-by-author": "โดย ", "label-repository": "Repository: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "อุปกรณ์ของคุณไม่รองรับปลั๊กอินนี้", "button-update": "อัพเดต", "label-no-readme": "ปลั๊กอินนี้ไม่มีไฟล์ README", "msg-installing-plugin": "กำลังติดตั้งปลั๊กอิน \"{{name}}\"...", "msg-failed-to-install-plugin": "ติดตั้งปลั๊กอิน \"{{name}}\" ไม่สำเร็จ", "msg-successfully-installed-plugin": "ติดตั้งปลั๊กอิน \"{{name}}\" สำเร็จ", "label-installed-plugins": "ปลั๊กอินที่ติดตั้งแล้ว", "button-reload-plugins": "รีโหลดปลั๊กอิน", "msg-reloaded-third-party-plugins": "ปลั๊กอินถูกรีโหลดแล้ว", "label-uninstall": "ถอนการติดตั้ง", "label-uninstall-plugin": "ถอนการติดตั้งปลั๊กอิน", "label-uninstall-plugin-confirmation": "คุณต้องการถอนการติดตั้งปลั๊กอินหรือไม่? โฟลเดอร์ของปลั๊กอินจะถูกลบไปด้วย", "button-open-plugins-folder": "เปิดโฟลเดอร์ปลั๊กอิน", "button-check-for-updates": "ตรวจสอบรุ่นเพื่ออัพเดต", "button-update-all-plugins": "อัพเดตทั้งหมด", "label-current-plugins": "ปลั๊กอินปัจจุบัน", "label-currently-installed": "คุณติดตั้งปลั๊กอินไว้ {{count}} ปลั๊กอิน", "label-currently-installed_plural": "คุณติดตั้งปลั๊กอินไว้ {{count}} ปลั๊กอิน", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Show a message with how long each plugin took to initialize when starting the app.", "msg-no-updates-found": "ไม่พบอัพเดตใหม่สำหรับปลั๊กอิน", "msg-updates-found": "พบอัพเดตสำหรับ {{count}} ปลั๊กอิน", "msg-updates-found_plural": "พบอัพเดตสำหรับ {{count}} ปลั๊กอิน", "msg-update-plugin": "อัพเดตเป็นรุ่น {{version}}", "option-search-installed-plugin": "ค้นหาปลั๊กอินที่ติดตั้งไว้", "option-search-installed-plugin-description": "ค้นหาปลั๊กอินที่ติดตั้งไว้ด้วยชื่อหรือคำอธิบาย", "placeholder-search-installed-plugin": "ค้นหาปลั๊กอินที่ติดตั้งไว้...", "show-installed-only": "Show installed only", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "แสดงผล {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "แถบเครื่องมืออุปกรณ์พกพา", "option-configure-quick-action": "ปรับแต่งควิกแอคชั่นบนอุปกรณ์พกพา", "option-configure-quick-action-description": "ปรับแต่งคำสั่งที่จะเรียกใช้เมื่อดึงหน้าจอลงจากด้านบน คำสั่งปัจจุบันคือ \"{{command}}\".", "button-configure": "ปรับแต่ง", "placeholder-select-quick-action": "เลือกควิกแอคชั่น...", "manage-toolbar-options": "จัดการตัวเลือกแถบเครื่องมือ", "option-internal-link": "เพื่มลิงค์ภายใน", "option-internal-embed": "เพิ่มการฝังเนื้อหา", "option-tag": "เพิ่มแท็ก", "option-heading": "ขนาดหัวข้อ", "option-strikethrough": "ขีดกลางบรรทัด", "option-highlight": "เน้น", "option-code": "ใส่โค้ด", "option-blockquote": "ใส่บล็อคโคว้ต", "option-markdown-link": "ใส่ลิงค์ Markdown", "option-bullet-list": "รายการบูลเล็ต", "option-numbered-list": "รายการตัวเลข", "option-indent-list": "ย่อหน้าเข้า", "option-unindent-list": "ย่อหน้าออก", "option-undo": "Undo", "option-redo": "Redo", "option-move-caret-up": "เลื่อนเคอร์เซอร์ไปข้างบน", "option-move-caret-down": "เลื่อนเคอร์เซอร์ไปข้างล่าง", "option-move-caret-left": "เลื่อนเคอร์เซอร์ไปทางซ้าย", "option-move-caret-right": "เลื่อนเคอร์เซอร์ไปทางขวา", "option-first-line": "ไปยังบรรทัดแรก", "option-last-line": "ไปยังบรรทัดสุดท้าย", "option-toggle-keyboard": "เปิดปิดแป้นพิมพ์", "option-configure-toolbar": "ปรับแต่งแถบเครื่องมืออุปกรณ์พกพา", "option-added-options": "ตัวเลือกที่เลือกใช้", "option-more-toolbar-options": "แถบเครื่องมือเพิ่มเติม", "option-attach": "เพิ่มไฟล์แนบ", "option-add-command": "เพิ่มคำสั่ง", "option-add-command-description": "เลือกคำสั่งที่ต้องการเพิ่มลงบนแถบเครื่องมือ" } }, "editor": { "search": { "placeholder-find": "ค้นหา", "placeholder-replace": "แทนที่", "label-previous": "ก่อนหน้า", "label-next": "ถัดไป", "label-all": "ทั้งหมด", "label-exit-search": "ยกเลิกการค้นหา", "label-replace": "แทนที่", "label-replace-all": "แทนที่ทั้งหมด" }, "link-suggestion": { "label-type-hash": "พิมพ์ #", "label-link-heading": "เพื่อลิงค์กับหัวข้อ", "label-type-block": "พิมพ์ ^", "label-link-block": "เพื่อลิงค์กับบล็อคข้อความ", "label-type-pipe": "พิมพ์ |", "label-change-display-text": "เพื่อเปลี่ยนข้อความที่ใช้แสดงผล", "label-no-match-found": "ไม่พบลิงค์" }, "spellcheck": { "no-suggestion": "ไม่มีคำแนะนำการสะกดคำ...", "add-to-dictionary": "เพิ่มเข้าพจนานุกรม" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "No heading", "label-heading-level": "Heading {{level}}" }, "print-modal": { "title": "ส่งออกเป็น PDF", "caption": "ส่งออกไฟล์ \"{{filename}}\" เป็น PDF ด้วยการตั้งค่าต่อไปนี้", "setting-page-size": "ขนาดหน้ากระดาษ", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Include file name as title", "setting-landscape": "แนวนอน", "setting-margin": "การเว้นขอบกระดาษ", "setting-margin-default": "ทั่วไป", "setting-margin-minimal": "น้อย", "setting-margin-none": "ไม่เว้น", "setting-downscale-percent": "เปอร์เซ็นต์การย่อขนาดไฟล์", "button-export-to-pdf": "ส่งออกเป็น PDF" }, "link-popover": { "tooltip-follow-link": "ตามลิงค์ไป", "tooltip-open-link": "เปิดลิงค์", "tooltip-search-tag": "ค้นหาแท็ก" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "เปิดด้วยโปรแกรมมาตรฐาน", "empty-sidebar": "ไซด์บาร์นี้ว่างเปล่า ลองลากหน้าต่างมาที่นี่สิ", "sidebar-expand": "ขยาย", "sidebar-collapse": "ยุบ", "msg-fail-to-save-file": "ไม่สามารถเซฟไฟล์ \"{{filepath}}\" ได้ {{message}}.", "no-file": "ไม่มีไฟล์ดังกล่าว", "msg-file-changed": "ไฟล์ \"{{file}}\" ถูกแก้ไขด้วยโปรแกรมภายนอกและจะถูกรวมข้อมูลโดยอัตโนมัติ", "switch-vault": "เปิดห้องนิรภัยอื่น", "help": "ความช่วยเหลือ", "settings": "การตั้งค่า", "drag-to-rearrange": "ลากเพื่อสลับที่", "msg-switched-to-read": "สลับมุมมองเริ่มต้นเป็นโหมดอ่าน", "msg-switched-to-edit": "สลับมุมมองเริ่มต้นเป็นโหมดเอดิเตอร์", "msg-upgrade-installer": "หากต้องการใช้ความลูกเล่นนี้ กรุณาติดตั้งโปรแกรมใหม่อีกครั้งด้วยตัวติดตั้งรุ่นล่าสุดจากเว็บไซต์ของเรา", "tooltip-restore-default-settings": "คืนค่าการตั้งค่าเริ่มต้น", "label-copy": "คัดลอกลงคลิปบอร์ด", "copied_generic": "Copied to your clipboard", "copied": "{{item}} ถูกคัดลอกลงคลิปบอร์ดแล้ว", "url": "Url", "msg-open-file-through-uri": "เปิดไฟล์ \"{{path}}\"", "msg-file-not-found-through-uri": "ไม่มีไฟล์ \"{{name}}\"", "delete-action-short-name": "ลบ", "msg-indexing": "Obsidian กำลังจัดทำดัชนีห้องนิรภัยของคุณ...\nกระบวนการนี้จะเกิดขึ้นเพียงครั้งเดียวเท่านั้น\nความสามารถบางอย่างอาจใช้งานไม่ได้จนกว่ากระบวนการจะเสร็จสิ้น", "msg-indexing-complete": "การจัดทำดัชนีเสร็จสิ้น", "msg-sandbox-vault": "This is a sandbox vault.\nChanges you make in this vault will be lost.", "label-enter-to-create": "ป้อนข้อมูลเพื่อสร้างใหม่", "label-update-available": "มีอัพเดตใหม่", "label-debug-info": "ข้อมูลการดีบั๊ก", "button-learn-more": "ข้อมูลเพิ่มเติม", "button-not-now": "ยังไม่สนใจ", "button-add": "Add", "button-manage": "Manage", "label-new-tab": "New tab", "msg-tab-busy": "This tab is currently busy, please try again later", "empty-state": { "no-file-open": "ไม่มีไฟล์ที่เปิดอยู่", "create-new-file": "สร้างไฟล์ใหม่", "go-to-file": "ไปยังไฟล์นี้", "see-recent-files": "ดูไฟล์ล่าสุด", "close": "ปิด", "unknown-pane-title": "ปลั๊กอินไม่ถูกใช้งานอีกต่อไป", "unknown-pane-desc": "ไม่พบปลั๊กอินที่สร้างหน้าต่างนี้ ({{type}})" }, "menu": { "edit-view": "แก้ไข (Ctrl/Cmd+Click เพื่อแก้ไขในหน้าต่างใหม่)", "read-view": "มุมมองปัจจุบัน: โหมดอ่าน", "switch-to-edit-view": "คลิกเพื่อแก้ไข", "switch-to-read-view": "คลิกเพื่ออ่าน", "mod-click-open-new-tab": "{{key}}+Click to open in new tab", "find": "ค้นหา...", "replace": "แทนที่...", "edit": "แก้ไข", "preview": "พรีวิว", "more-options": "ตัวเลือกเพิ่มเติม", "close": "ปิด", "close-others": "Close others", "close-right": "Close tabs to the right", "pin": "ปักหมุด", "unpin": "Unpin", "unlink-tab": "Unlink tab", "link-tab": "Link with tab...", "toggle-source-mode": "Source mode", "toggle-reading-view": "Reading view", "delete-file": "ลบไฟล์", "create-file": "Create this file", "open-link": "Open link", "open-in-new-tab": "Open in new tab", "open-to-the-right": "Open to the right", "copy-url": "คัดลอก url", "close-current-tab": "Close current tab", "copy": "คัดลอก", "cut": "ตัด", "paste": "แปะ", "paste-as-plain-text": "แปะเป็นข้อความเปล่าๆ", "select-all": "เลือกทั้งหมด", "rename-heading": "เปลี่ยนชื่อหัวข้อนี้...", "rename-blockid": "Rename this block ID...", "open-in-new-window": "Open in new window", "move-to-new-window": "Move to new window", "open-in-browser": "Open in browser", "stack-tabs": "Stack tabs", "unstack-tabs": "Unstack tabs" }, "tooltip": { "click-to-expand": "คลิกเพื่อขยาย", "click-to-collapse": "คลิกเพื่อยุบ", "alias": "นามแฝง", "not-created-yet": "ยังไม่มีไฟล์นี้ เลือกเพื่อสร้างใหม่" }, "start-screen": { "label-version": "รุ่น", "option-open-folder-as-vault": "เปิดโฟลเดอร์ห้องนิรภัย", "option-open-folder-as-vault-description": "เลือกเปิดโฟลเดอร์ที่มีอยู่แล้ว", "option-create-vault": "สร้างห้องนิรภัยใหม่", "option-create-vault-description": "สร้างห้องนิรภัยใหม่ที่โฟลเดอร์ที่กำหนด", "option-connect-obsidian-sync": "Connect to Obsidian Sync", "option-connect-obsidian-sync-description": "Set up a synced vault with existing remote vault.", "option-new-vault-name": "ชื่อห้องนิรภัย", "option-new-vault-name-description": "ตั้งชื่อสำหรับห้องนิรภัยสุดเจ๋งของคุณ", "option-new-vault-location": "ตำแหน่ง", "option-new-vault-location-description": "เลือกตำแหน่งที่จะบันทึกห้องนิรภัยของคุณ", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Reveal vault in system explorer", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "Rename vault...", "msg-error-rename-exists": "There is already a vault with this name.", "msg-error-nested": "Cannot move vault into a subfolder of itself.", "msg-error-rename-open": "Can't rename a currently open vault.", "msg-rename-failed": "Failed to rename vault.", "msg-rename-success": "Successfully renamed vault.", "option-move-vault": "Move vault...", "msg-move-select-dest": "Select destination folder", "msg-error-move-exists": "There is already a vault at the destination.", "msg-error-move-open": "Can't move a currently open vault.", "msg-move-failed": "Failed to move vault.", "msg-move-success": "Successfully moved vault.", "option-remove": "Remove from list", "button-quick-start": "Quick start", "button-open": "เปิด", "button-browse": "เลือกดู", "button-connect": "Connect", "button-create-vault": "สร้าง", "button-back": "ย้อนกลับ", "msg-empty-vault-name": "กรุณากรอกชื่อห้องนิรภัย", "msg-invalid-folder": "กรุณาเลือกโฟลเดอร์ที่ถูกต้อง", "msg-failed-to-create-vault": "ไม่สามารถสร้างห้องนิรภัยได้", "msg-failed-to-create-vault-at-location": "ไม่สามารถสร้างห้องนิรภัยที่โฟลเดอร์ที่กำหนดได้ กรุณาตรวจสอบตำแหน่งและสิทธิการเข้าถึง", "msg-error-failed-to-open-vault": "ไม่สามารถเปิดห้องนิรภัยได้", "msg-error-remove-current-open-vault": "ไม่สามารถลบห้องนิรภัยที่ถูกเปิดใช้งานอยู่ได้", "option-get-help": "Get Help", "option-user-email": "Email", "placeholder-your-email": "Your email...", "option-user-password": "Password", "placeholder-your-password": "Your password...", "button-sign-in": "Sign in", "button-setup": "Setup", "option-connect-vault-desc": "Create a synced vault on this device.", "tooltip-own-vault": "This is a remote vault owned by you.", "tooltip-shared-vault": "This is a remote vault shared with you." }, "drag-and-drop": { "insert-link-here": "แทรกลิงค์ที่นี่", "insert-links-here": "แทรกลิงค์ที่นี่", "move-into-folder": "ย้ายไปที่ \"{{folder}}\"", "star-this-file": "ติดดาวไฟล์นี้", "star-these-files": "ติดดาวไฟล์นี้", "open-in-this-tab": "Open in this tab", "open-as-tab": "Open as new tab" }, "window": { "maximize": "ขยายหน้าต่าง", "minimize": "ยุบหน้าต่าง", "restore-down": "ย่อหน้าต่าง", "close-window": "ปิดหน้าต่าง", "go-back": "ย้อนกลับ", "go-forward": "ไปข้างหน้า" }, "start-up": { "loading-obsidian": "กำลังโหลด Obsidian...", "obsidian-load-error": "พบปัญญาขณะโหลดโปรแกรม Obsidian", "button-reload-app": "รีโหลดโปรแกรม", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "เปิดห้องนิรภัยอื่น", "loading-components": "กำลังโหลดส่วนประกอบ...", "loading-plugins": "กำลังโหลดปลั๊กอิน...", "loading-vault": "กำลังโหลดห้องนิรภัย...", "msg-failed-to-load-vault": "ไม่สามารถโหลดห้องนิรภัยได้: ", "loading-cache": "กำลังโหลดแคช...", "loading-workspace": "กำลังโหลด workspace..." }, "mobile": { "action-import": "นำเข้าสู่ห้องนิรภัย", "action-choose-file-to-insert": "เลือกไฟล์เพื่อแทรก", "action-insert-text-into-file": "แทรกข้อความเข้าสู่ไฟล์ {{filename}}", "action-insert-link-into-file": "แทรกลิงค์เข้าสู้ไฟล์ {{filename}}", "msg-importing": "กำลังนำเข้า...", "msg-import-success": "การนำเข้าสำเร็จ", "msg-failed-to-import-file": "ไม่สามารถนำเข้าไฟล์ {{filename}} ได้", "msg-back-again-to-exit": "Press back again to exit." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "เซฟไฟล์ปัจจุบัน", "follow-cursor-link": "ตามลิงค์ที่ตำแหน่งเคอร์เซอร์ไป", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "เปิดปิดการปักหมุด", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "ย้อนกลับ", "navigate-forward": "ไปข้างหน้า", "use-dark-mode": "ใช้โหมดสีเข้ม", "use-light-mode": "ใช้โหมดสีอ่อน", "change-theme": "Change theme", "search-current-file": "ค้นหาในไฟล์ปัจจุบัน", "search-replace-current-file": "ค้นหาและแทนที่ในไฟล์ปัจจุบัน", "open-settings": "เปิดหน้าต่างการตั้งค่า", "open-help": "เปิดหน้าต่างความช่วยเหลือ", "toggle-edit": "สลับระหว่างโหมดปรับแก้/โหมดอ่าน", "toggle-source-mode": "สลับระหว่างโหมดพรีวิวสด/โหมดต้นฉบับToggle Live Preview/Source mode", "delete-current-file": "ลบไฟล์ปัจจุบัน", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "เปิดปิดไซด์บาร์ด้านซ้าย", "toggle-right-sidebar": "เปิดปิดไซด์บาร์ด้านขวา", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "โฟกัสที่เอดิเตอร์", "toggle-fold": "ยุบ-ขยายบรรทัดปัจจุบัน", "fold-all": "ยุบหัวข้อและรายการทั้งหมด", "unfold-all": "ขยายหัวข้อและรายการทั้งหมด", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "สลับบรรทัดไปข้างบน", "swap-line-down": "สลับบรรทัดไปข้างล่าง", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "เปิดปิดตัวหนาที่ข้อความที่เลือก", "toggle-italics": "เปิดปิดตัวเอียงที่ข้อความที่เลือก", "toggle-highlight": "เปิดปิดการเน้นที่ข้อความที่เลือก", "toggle-comments": "เปิดปิดคอมเมนท์ที่ข้อความที่เลือก", "insert-link": "แทรกลิงค์", "toggle-spellcheck": "เปิดปิดการพิสูจน์อักษร", "delete-paragraph": "ลบย่อหน้า", "toggle-checklist": "สลับสถานะเช็คลิสต์", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "แก้ไขชื่อไฟล์", "copy-path": "คัดลอกพาธตำแหน่งไฟล์", "copy-url": "คัดลอก obsidian url", "export-pdf": "ส่งออกเป็น PDF", "reload": "รีโหลดโปรแกรมโดยไม่เซฟ", "undo-close-tab": "Undo close tab", "context-menu": "แสดงเมนูที่เกี่ยวข้องที่ตำแหน่งเคอร์เซอร์", "show-debug-info": "แสดงผลข้อมูลการดีบั๊ก", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "สลับโหมดปรับแก้/โหมด", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "การกระทำนี้จะมีผลต่อ {{links}} ลิงค์ ใน {{files}} ไฟล์.", "msg-updated-links": "อัพเดต {{links}} ลิงค์ ใน {{files}} ไฟล์", "label-update-links": "อัพเดตลิงค์", "label-confirm-update-link-to-file": "คุณต้องการอัพเดตลิงค์ภายในที่ลิงค์กับไฟล์นี้หรือไม่?", "button-always-update": "อัพเดตเสมอ", "button-just-once": "อัพเดตครั้งเดียว", "button-do-not-update": "ไม่อัพเดต", "label-confirm-deletion": "คุณต้องการลบ \"{{filename}}\" หรือไม่?", "label-move-to-system-trash": "ไฟล์จะถูกย้ายไปยังถังขยะของระบบ", "label-move-to-vault-trash": "ไฟล์จะถูกย้ายไปยังถังขยะของ Obsidian ซึ่งอยู่ที่โฟลเดอร์ \".trash\" ที่ถูกซ่อนไว้ในห้องนิรภัย", "label-permanent-delete": "ไฟล์นี้จะถูกลบอย่างถาวร", "label-non-empty-folder": "โฟลเดอร์นี้มีไฟล์อยู่ข้างใน", "label-delete-folder-warning": "ถ้าดำเนินการต่อ ไฟล์ทั้งหมดในโฟลเดอร์จะถูกลบ", "label-delete-folder": "ลบโฟลเดอร์", "button-delete": "ลบ", "button-delete-do-not-ask-again": "ลบและไม่ต้องถามอีก", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "ปัจจุบันมี {{links}} ลิงค์ที่ชี้มาที่โน้ตนี้", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "ลบไฟล์", "button-manage": "Manage", "button-cancel": "ยกเลิก", "button-done": "เสร็จสิ้น", "button-save": "Save", "button-stop": "Stop", "button-continue": "ดำเนินการต่อ", "preparing-pdf": "กำลังเตรียมไฟล์ PDF...", "label-rename-file": "เปลี่ยนชื่อไฟล์", "label-new-name": "ชื่อใหม่", "msg-rename-success": "เปลี่ยนชื่อไฟล์สำเร็จ", "label-rename-heading": "เปลี่ยนชื่อหัวข้อ", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "ปลั๊กอิน", "file-explorer": { "name": "File explorer", "desc": "เห็นไฟล์ทั้งหมดในห้องนิรภัย", "action-open": "เปิด file explorer", "action-show": "แสดง file explorer", "action-create-note": "สร้างโน้ตใหม่", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "สร้างโน้ตใหม่", "action-new-folder": "สร้างโฟลเดอร์ใหม่", "action-change-sort": "เปลี่ยนวิธีการเรียงลำดับ", "action-reveal-file": "แสดงไฟล์ทั้งหมดใน file explorer", "action-reveal-active-file": "แสดงไฟล์ปัจจุบันใน file explorer", "command-move-file": "ย้ายไฟล์ไปโฟลเดอร์อื่น", "action-move-file": "ย้ายไฟล์ไปที่...", "action-move-folder": "ย้ายโฟลเดอร์ไปที่...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "พืมพ์ชื่อโฟลเดอร์", "label-no-folders": "ไม่พบโฟลเดอร์", "instruction-navigate": "เพื่อเลื่อน", "instruction-move": "เพื่อย้าย", "instruction-dismiss": "เพื่อยกเลิก", "label-sort-a-to-z": "เรียงตามชื่อไฟล์ (A ไป Z)", "label-sort-z-to-a": "เรียงตามชื่อไฟล์ (Z ไป A)", "label-sort-new-to-old": "เรียงตามเวลาที่แก้ไข (ใหม่ไปเก่า)", "label-sort-old-to-new": "เรียงตามเวลาที่แก้ไข (เก่าไปใหม่)", "label-sort-created-old-to-new": "เรียงตามเวลาที่สร้าง (เก่าไปใหม่)", "label-sort-created-new-to-old": "เรียงตามเวลาที่สร้าง (ใหม่ไปเก่า)", "menu-opt-new-note": "สร้างโน้ตใหม่", "menu-opt-new-folder": "สร้างโฟลเดอร์ใหม่", "menu-opt-set-attachment-folder": "ตั้งให้เป็นโฟลเดอร์สำหรับไฟล์แนบ", "menu-opt-rename": "เปลี่ยนชื่อ", "menu-opt-delete": "ลบ", "menu-opt-make-copy": "ทำซ้ำ", "msg-invalid-characters": "ชื่อไฟล์ไม่สามารถมีตัวอักษรเหล่านี้ได้: ", "msg-unsafe-characters": "ลิงค์จะไม่ทำงานหากชื่อไฟล์มีตัวอักษรเหล่านี้: ", "msg-file-already-exists": "มีไฟล์ชื่อนี้แล้ว", "msg-empty-file-name": "ตรวจสอบชื่อไฟล์อีกครั้ง", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "แก้ไขครั้งสุดท้ายเมื่อ {{time}}", "tooltip-created-time": "สร้างเมื่อ {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "ย้าย", "label-untitled-file": "ยังไม่ได้ตั้งชื่อ", "label-untitled-folder": "ยังไม่ได้ตั้งชื่อ", "msg-set-attachment-folder": "ไฟล์แนบจะถูกบันทึกไว้ที่ \"{{path}}\"" }, "search": { "name": "ค้นหา", "desc": "ค้นหาคีย์เวิร์ดในทุกโน้ต", "action-open-search": "ค้นหาในทุกไฟล์", "label-collapse-results": "ยุบผลการค้นหา", "label-match-case": "ขนาดตัวพิมพ์ต้องตรงกัน", "label-explain-search-term": "อธิบายเงื่อนไขการค้นหา", "label-more-context": "แสดงผลข้อมูลบริบทเพิ่มเติม", "prompt-start-search": "พิมพ์ข้อความเพื่อเริ่มการค้นหา...", "label-match-text": "ตรงกับคำ: ", "label-match-regex": "ตรงกับ regex: ", "label-match-exact-text": "ตรงกับทั้งคำ: ", "label-match-all": "ตรงคำที่ค้นหาทั้งหมด: ", "label-match-any": "ตรงคำที่ค้นหาบางคำ: ", "label-excluding": "คำที่ยกเว้น: ", "label-case-sensitive": "ขนาดตัวพิมพ์ต้องตรงกัน", "label-case-insensitive": "ขนาดตัวพิมพ์ไม่ต้องตรงกัน", "label-match-file-path": "ตำแหน่งไฟล์ตรงกัน: ", "label-match-file-name": "ชื่อไฟล์ตรงกัน: ", "label-match-content": "เนื้อหาไฟล์ตรงกัน: ", "label-match-task": "งานตรงกัน: ", "label-match-task-todo": "งานตรงกัน (ที่ต้องทำ): ", "label-match-task-done": "งานตรงกัน (ทำแล้ว): ", "label-match-line": "บรรทัดตรงกัน: ", "label-match-block": "บล็อคตรงกัน: ", "label-match-section": "สิ่งที่เลือกไว้ตรงกัน: ", "label-match-tag": "แท็กตรงกัน: ", "label-no-matches": "ไม่เจอคำค้นหาที่ตรงกัน", "matches-with-count": "... และอีก {{count}} ผลการค้นหาที่ตรงกัน", "matches-with-count_plural": "... และอีก {{count}} ผลการค้นหาที่ตรงกัน", "label-copy-search-results": "คัดลอกผลการค้นหา", "button-copy-results": "คัดลอกผลการค้นหา", "msg-successfully-copied": "ผลการค้นหาถูกคัดลอกใส่ในคลิปบอร์ดแล้ว", "option-show-path": "แสดงตำแหน่งไฟล์", "option-show-path-description": "แสดงตำแหน่งไฟล์แบบเต็มรูปแบบแทนการแสดงเพียงแค่ชื่อไฟล์", "option-link-style": "สไตล์ของลิงค์", "option-link-style-description": "แปลงผลการค้นหาให้อยู่ในรูปแบบลิงค์", "option-choice-link-style-none": "ไม่แปลง", "option-choice-link-style-wikilink": "วิกิลิงค์", "option-choice-link-style-markdown-link": "ลิงค์ Markdown", "option-list-prefix": "เติมสัญลักษณ์รายการ", "option-list-prefix-description": "เติมสัญลักษณ์รายการด้านหน้าผลการค้นหาแต่ละบรรทัด", "option-choice-list-style-none": "ไม่เติม", "option-choice-list-style-dash": "ขีด (-)", "option-choice-list-style-asterisk": "ดอกจัน (*)", "option-choice-list-style-numbered": "ตัวเลข", "tooltip-clear-search": "ล้างผลการค้นหา", "label-search-options": "ตัวเลือกการค้นหา", "tooltip-read-more": "เพิ่มเติม", "label-history": "ประวัติการค้นหา", "tooltip-clear-history": "ล้างประวัติการค้นหา", "label-path-option-description": "ตรงกับตำแหน่งไฟล์", "label-file-name-option-description": "ตรงกับชื่อไฟล์", "label-tag-option-description": "ค้นหาแท็ก", "label-line-option-description": "ค้นหาคีย์เวิร์ดในบรรทัดเดียวกัน", "label-section-option-description": "ค้นหาคีย์เวิร์ดภายใต้หัวข้อเดียวกัน", "menu-opt-search-for": "ค้นหา \"{{keyword}}\"" }, "quick-switcher": { "name": "Quick switcher", "desc": "เปิดไฟล์ใดก็ได้โดยไม่ต้องยกมือจากแป้นพิมพ์ ใช้งานโดยกด Ctrl/Cmd+O ", "short-name": "Switcher", "action-open": "เปิด quick switcher", "instruction-navigate": "เพื่อเลื่อน", "instruction-open": "เพื่อเปิด", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "เพื่อสร้างใหม่", "instruction-dismiss": "เพื่อยกเลิก", "label-no-note-create-new": "ไม่พบโน้ต กด Enter เพื่อสร้างใหม่", "prompt-type-file-name": "พิมพ์ชื่อไฟล์ที่จะเปิดหรือสร้างใหม่...", "label-enter-to-create": "กด Enter เพื่อสร้างใหม่", "tooltip-not-created-yet": "ยังไม่มีไฟล์นี้ เลือกเพื่อสร้างใหม่", "option-show-existing-only": "แสดงไฟล์ที่มีอยู่แล้วเท่านั้น", "option-show-existing-only-description": "เปิดปิดการแสดงไฟล์ที่มีอยู่แล้วเท่านั้น", "option-show-attachments": "แสดงไฟล์แนบ", "option-show-attachments-desc": "เปิดปิดการแสดงไฟล์แนบเช่นรูปภาพ วิดีโอ และ PDF", "option-show-all-file-types": "แสดงไฟล์ทุกชนิด", "option-show-all-file-types-desc": "แสดงผลไฟล์ทุกชนิดแม้ Obsidian จะไม่รองรับ ไฟล์จะถูกเปิดด้วยโปรแกรมมาตรฐานสำหรับไฟล์ประเภทนั้น" }, "graph-view": { "name": "มุมมองกราฟ", "desc": "ดูกราฟภาพรวมของการลิงค์ระหว่างโน้ต", "action-open": "เปิดมุมมองกราฟ", "action-open-local": "เปิดมุมมองกราฟของไฟล์นี้", "action-copy-screenshot": "คัดลอกภาพกราฟ", "tab-title": "กราฟของ {{displayText}}", "label-filters": "ตัวกรอง", "prompt-filter-nodes": "ค้นหาไฟล์...", "option-depth": "ความลึก", "option-depth-description": "แสดงโหนดห่างจากลิงค์เป็นจำนวนตามระดับความลึกที่เลือก", "option-neighbor-links": "ลิงค์ข้างเคียง", "option-neighbor-links-description": "แสดงลิงค์ระหว่างโหนดข้างเคียง", "option-forelinks": "ลิงค์ขาออก", "option-forelinks-description": "แสดงโหนดลิงค์ขาออกไปสู่ไฟล์อื่น", "option-backlinks": "ลิงค์ขาเข้า", "option-backlinks-description": "แสดงโหนดลิงค์ขาเข้าจากไฟล์อื่น", "option-show-tags": "แท็ก", "option-show-tags-description": "แสดงโหนดของแท็กที่ใช้", "option-show-attachments": "ไฟล์แนบ", "option-show-attachments-description": "แสดงโหนดของไฟล์แนบ", "option-show-existing-files-only": "ไฟล์ที่ถูกสร้างไว้แล้วเท่านั้น", "option-show-existing-files-only-description": "เมื่อใช้ตัวเลือกนี้จะไม่แสดงลิงค์ของไฟล์ที่ยังไม่ถูกสร้าง", "option-show-orphans": "ไฟล์ Orphans", "option-show-orphans-description": "แสดงโหนดไฟล์ที่ไม่มีการลิงค์ไปยังไฟล์อื่น", "label-display": "การแสดงผล", "option-show-arrows": "หัวลูกศร", "option-show-arrows-description": "แสดงหัวลูกศรเมื่อซูมเข้าใกล้", "option-text-fade": "เกณฑ์ขั้นต่ำในการทำให้ตัวอักษรจางลง", "option-node-size": "ขนาดของโหนด", "option-link-thickness": "ความหนาของเส้นกราฟ", "label-forces": "แรวกระทำ", "option-center-force": "แรงกระทำที่สู่ศูนย์กลาง", "option-link-force": "แรงกระทำระหว่างโหนด", "option-link-distance": "ระยะห่างระหว่างโหนด", "option-repel-force": "แรงผลักระหว่างโหนด", "tooltip-open-graph-settings": "เปิดหน้าต่างการตั้งค่ากราฟ", "msg-screenshot-copied": "ภาพกราฟถูกคัดลอกใส่คลิปบอร์ดแล้ว", "label-groups": "กลุ่ม", "placeholder-enter-query": "ใส่คำค้น...", "tooltip-delete-graph": "ลบกลุ่ม", "button-new-group": "สร้างกลุ่มใหม่", "tooltip-click-to-change-drag-to-reorder": "คลิกเพื่อเปลี่ยนสี\nลากเพื่อเปลี่ยนลำดับ", "action-timelapse": "เริ่มการแสดงผล timelapse animation", "tooltip-start-timelapse-animation": "เริ่ม timelapse animation", "button-animate-timelapse": "แสดงผล" }, "backlinks": { "name": "แบ็คลิงค์", "desc": "แสดงจำนวนแบ็คลิงค์บนแถบสถานะ", "action-open": "เปิดดูแบ็คลิงค์", "action-show": "แสดงหน้าต่างแบ็คลิงค์", "action-open-for-current": "เปิดดูแบ็คลิงค์ของไฟล์ปัจจุบัน", "action-toggle-backlinks-in-document": "เปิดปิดแบ็คลิงค์ในเอกสาร", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "การอ้างอิงถึงผ่านลิงค์", "label-no-backlinks": "ไม่พบแบ็คลิงค์", "label-unlinked-mentions": "การอ้างอิงถึงโดยไม่ผ่านลิงค์", "label-show-search": "แสดงตัวกรองการค้นหา", "label-link-button-text": "ลิงค์", "tab-title": "แบ็คลิงค์ของ {{displayText}}", "label-no-unlinked-mentions": "ไม่พบการอ้างอิงถึงโดยไม่ผ่านลิงค์", "ellipsis": "...", "option-backlink-in-document": "แบ็คลิงค์ในเอกสาร", "option-backlink-in-document-desc": "แสดงแบ็คลิงค์ในเอกสารเป็นค่าเริ่มต้นเมื่อสร้างหน้าต่างใหม่" }, "outgoing-links": { "name": "ลิงค์ขาออก", "desc": "แสดงลิงค์ขาออกและการอ้างอิงถึงโดยไม่ผ่านลิงค์จากโน้ตอื่นๆ ในโน้ตปัจจุบัน", "action-open": "เปิดลิงค์ขาออก", "action-show": "แสดงหน้าต่างลิงค์ขาออก", "action-open-for-current": "เปิดลิงค์ขาออกของไฟล์ปัจจุบัน", "tab-title": "ลิงค์ขาออกของ {{displayText}}", "label-links": "ลิงค์", "label-no-links": "ไม่พบลิงค์", "label-unlinked-mentions": "การอ้างอิงถึงโดยไม่ผ่านลิงค์", "tooltip-link-file": "ลิงค์ไฟล์นี้", "tooltip-not-created": "ยังไม่มีลิงค์นี้" }, "tag-pane": { "name": "หน้าต่างแท็ก", "desc": "แสดงผลแท็กพร้อมจำนวนทั้งหมด", "action-show": "แสดงหน้าต่างแท็ก", "label-no-tags": "ไม่พบแท็ก", "label-sort-by-name-a-to-z": "ชื่อแท็ก (A ไป Z)", "label-sort-by-name-z-to-a": "ชื่อแท็ก (Z ไป A)", "label-sort-by-frequency-high-to-low": "ความถี่ (มากไปน้อย)", "label-sort-by-frequency-low-to-high": "ความุี่ (น้อยไปมาก)", "action-show-nested-tags": "แสดงแท็กซ้อน", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "พรีวิวโน้ต", "desc": "แสดงพรีวิวโน้ตเมื่อชี้ที่ลิงค์ภายใน ใช้ Ctrl/Cmd + การชี้ในโหมดปรับแก้", "label-empty-note": "\"{{linktext}}\" ยังไม่ถูกสร้างขึ้น คลิกเพื่อสร้างใหม่", "label-source-editor": "เอดิเตอร์", "label-source-preview": "พรีวิว", "label-source-search": "ค้นหา แบ็คลิงค์ และลิงค์ขาออก", "label-require-mod": "ต้องการ {{key}} เพื่อแสดงพรีวิวโน้ตเมื่อชี้ลิงค์" }, "starred": { "name": "ติดดาว", "desc": "ติดดาวกับไฟล์ที่ใช้งานและค้นหาบ่อยๆ", "action-show": "แสดงหน้าต่างติดดาว", "action-toggle": "ติดดาว/ถอดดาวไฟล์ปัจจุบัน", "action-toggle-search": "ติดดาว/ถอดดาวการค้นหาปัจจุบัน", "action-star": "ติดดาว", "action-unstar": "ถอดดาว", "menu-opt-remove": "ลบ", "msg-successfully-starred": "ติดดาว {{type}} \"{{title}}\" สำเร็จ", "msg-removed-starred": "ถอดดาว {{type}} \"{{title}}\" สำเร็จ", "msg-cannot-find-path": "ไม่พบไฟล์ที่ตำแหน่ง \"{{path}}\"" }, "custom-css": { "name": "Custom CSS", "desc": "เรียกใช้งานไฟล์ \"obsidian.css\" ในห้องนิรภัย", "setting-community-themes": "ธีมโดยชุมชน", "msg-fetching-themes": "กำลังขอข้อมูลธีมโดยชุมชน...", "prompt-filter": "ตัวกรอง...", "label-dark-theme-only": "ธีมสีเข้มเท่านั้น", "label-light-theme-only": "ธีมสีอ่อนเท่านั้น", "label-use": "ใช้", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "อัพเดต", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "ลบธีม", "label-visit-on-github": "ไปยัง GitHub", "msg-load-error": "ไม่สามารถโหลดธีมได้ กรุณาตรวจสอบการเชื่อมต่อ", "msg-now-using-theme": "คุณกำลังใช้ {{title}} เป็นธีมของโปรแกรม.", "msg-deleted-theme": "ธีม {{title}} ได้ถูกลบแล้ว", "msg-updated-theme": "ธีม {{title}} ได้รับการอัพเดตแล้ว", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "กระดานคำสั่ง", "desc": "พิมพ์คำสั่งเพื่อใช้งานโดยไม่จำเป็นต้องใช้เมาส์หรือคีย์ลัด", "action-open": "เปิดกระดานคำสั่ง", "instruction-navigate": "เพื่อเลื่อน", "instruction-use": "เพื่อใช้งาน", "instruction-dismiss": "เพื่อยกเลิก", "label-no-commands": "ไม่พบคำสั่ง", "prompt-type-command": "พิมพ์คำสั่ง...", "label-pinned-commands": "คำสั่งที่ถูกปักหมุดไว้", "option-add-new-pin": "ปักหมุดคำสั่งใหม่", "option-add-new-pin-description": "คำสั่งที่ถูกปักหมุดจะถูกแสดงไว้ลำดับบนสุดเหนือคำสั่งอื่นๆ เสมอ เมื่อไม่มีคำค้นหา" }, "markdown-format-importer": { "name": "นำเข้า Markdown", "desc": "แปลง Markdown จากโปรแกรมอื่นให้อยู่ในฟอร์แมตของ Obsidian", "action-open": "เปิดหน้าต่างนำเข้า Markdown", "option-roam-tag-fixer": "ตัวช่วยแก้ไขแท็กของ Roam Research", "option-roam-tag-fixer-description": "แปลง \"#tag\" และ \"#[[tag]]\" เป็น \"[[tag]]\"", "option-roam-highlight-fixer": "ตัวช่วยแก้ไขการเน้นคำของ Roam Research", "option-roam-highlight-fixer-description": "แปลง \"^^highlight^^\" เป็น \"==highlight==\"", "option-roam-todo-converter": "ตัวแปลง TODO ของ Roam Research", "option-roam-todo-converter-description": "แปลง \"{{[[TODO]]}}\" เป็น \"[ ]\".", "option-bear-highlight-fixer": "ตัวช่วยแก่ไขการเน้นคำของ Bear", "option-bear-highlight-fixer-description": "แปลง \"::highlight::\" เป็น \"==highlight==\".", "zettelkasten-link-fixer": "ตัวช่วยแก้ไขลิงค์ของ Zettelkasten", "zettelkasten-link-fixer-description": "แก้ไขลิงค์ \"[[UID]]\" เป็น \"[[UID File Name]]\" แบบเต็ม", "zettelkasten-link-beautifier": "ตัวช่วยปรับลิงค์ของ Zettelkasten ให้สวยงาม", "zettelkasten-link-beautifier-description": "แก้ไขลิงค์ \"[[UID]]\" ให้สวยงามขึ้นเป็น \"[[UID File Name|File Name]]\"", "msg-all-files-warning": "คำเตือน: ตัวช่วยนำเข้าจะแปลงไฟล์ในห้องนิรภัยนี้ทั้งหมด ไม่ใช่แค่เพียงไฟล์ปัจจุบันเท่านั้น", "msg-override-files-warning": "ไฟล์ทั้งหมดจะถูกเขียนทับ กรุณาสำรองข้อมูลไว้ก่อนทำการแปลงข้อมูล", "label-start-conversion": "เริ่มแปลงข้อมูล", "label-stop": "หยุด", "label-go-back": "กลับไป", "label-done": "เสร็จสิ้น", "label-processing": "กำลังประมวลผล...", "label-cancelling": "กำลังยกเลิก...", "label-finished": "สำเร็จ!", "label-processed-files": "ไฟล์ที่ถูกแปลง", "label-modified-files": "ไฟล์ที่ถูกแก้ไข", "label-total-replacements": "ไฟล์ที่ถูกแทนที่ทั้งหมด" }, "daily-notes": { "name": "โน้ตประจำวัน", "desc": "เปิดโน้ตประจำวัน หรือสร้างโน้ตประจำวันขึ้นใหม่หากยังไม่มี", "short-name": "วันนี้", "action-open": "เปิดโน้ตของวันนี้", "action-open-previous": "เปิดโน้ตของเมื่อวาน", "action-open-next": "เปิดโน้ตของพรุ่งนี้", "action-insert-text": "แทรกข้อความในโน้ตประจำวัน", "action-insert-link": "แทรกลิงค์ในโน้ตประจำวัน", "msg-fail-format": "ไม่สามารถสร้างโน้ตประจำวันได้ เนื่องจาก \"{{format}}\" ไม่ถูกต้อง", "msg-fail-folder": "ไม่สามารถสร้างโน้ตประจำวันได้ เนื่องจากไม่พบโฟลเดอร์ \"{{folderOption}}\"", "msg-fail-template-file": "ไม่สามารถสร้างโน้ตประจำวันได้ เนื่องจากไม่พบเทมเพลต \"{{template}}\"", "msg-no-previous": "ไม่มีโน้ตประจำวันที่เก่ากว่านี้", "msg-no-next": "ไม่มีโน้ตประจำวันที่ใหม่กว่านี้", "option-date-format": "ฟอร์แมตวันที่", "label-refer-to-syntax": "ไวยากรณ์เพิ่มเติมดูที่: ", "label-syntax-link": "เอกสารอ้างอิงฟอร์แมต", "label-syntax-live-preview": "ฟอร์แมตปัจจุบันคือ: ", "option-new-file-location": "ตำแหน่งไฟล์ใหม่", "option-new-file-location-description": "ตำแหน่งโฟลเดอร์สำหรับบันทึกโน้ตประจำวันใหม่", "option-template": "ตำแหน่งไฟล์เทมเพลต", "option-template-description": "ตำแหน่งไฟล์ที่จะใช้เป็นเทมเพลต", "option-open-on-start": "เปิด/สร้างโน้ตประจำวันเมื่อเปิดโปรแกรม", "option-open-on-start-description": "เปิด/สร้างโน้ตประจำวันโดยอัตโนมัติเมื่อเปิดห้องนิรภัยนี้หรือโปรแกรม" }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "สุ่มโน้ค", "desc": "สุ่มเปิดโน้ตอะไรก็ได้ขึ้นมา มีประโยชน์สำหรับการรีวิวโน้ตและค้นหาข้อมูลที่อาจลืมไป", "short-name": "สุ่ม", "action-open": "สุ่มเปิดโน้ต" }, "outline": { "name": "โครงเรื่อง", "desc": "แสดงโครงเรื่องของไฟล์ปัจจุบันหรือหน้าต่างที่ลิงค์ไว้", "action-open": "เปิดดูโครงเรื่อง", "action-show": "แสดงหน้าต่างโครงเรื่อง", "action-open-for-current": "เปิดดูโครงเรื่องของไฟล์ปัจจุบัน", "tab-title": "โครงเรื่องของ {{displayText}}", "label-no-headings": "ไม่พบหัวข้อ" }, "word-count": { "name": "การนับคำ", "desc": "แสดงการนับคำบนแถบสถานะ" }, "slides": { "name": "สไลด์", "desc": "นำเสนอสไลด์จากเอกสาร Markdown ใช้ \"---\" เพื่อแบ่งหน้าสไลด์", "action-start": "เริ่มการนำเสนอ" }, "audio-recorder": { "name": "บันทึกเสียง", "desc": "บันทึกเสียงและเซฟเป็นไฟล์แนบ", "action-start": "เริ่มบันทึกเสียง", "action-stop": "หยุดบันทึกเสียง", "action-toggle": "เริ่ม/หยุดบันทึกเสียง", "msg-access-denied": "ไม่สามารถเข้าถึงไมโครโฟนได้ กรุณาเปิดตัวเลือกในหน้าต่างการตั้งค่า", "msg-pending-grant": "กรุณาให้สิทธิการเข้าถึงไมโครโฟนเพื่อเริ่มบันทึกเสียง", "msg-no-microphone": "ไม่พบไมโครโฟน" }, "open-with-default-app": { "name": "เปิดด้วยโปรแกรมมาตฐาน", "desc": "เพิ่มปุ่มสำหรับเปิดไฟล์ปัจจุบันด้วยโปรแกรมมาตรฐาน", "action-open-file": "เปิดด้วยโปรแกรมมาตฐาน", "action-open-file-mobile": "แชร์", "action-show-in-folder": "แสดงในโฟลเดอร์", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "เทมเพลต", "desc": "แทรกเนื้อหาเทมเพลตจากโฟลเดอร์เทมเพลต", "action-insert": "แทรกเทมเพลต", "action-insert-current-date": "แทรกวันที่ปัจจุบัน", "action-insert-current-time": "แทรกเวลาปัจจุบัน", "option-template-folder-location": "ตำแหน่งโฟลเดอร์เทมเพลต", "option-template-folder-location-description": "ไฟล์ในโฟลเดอร์นี้จะถูกใช้เป็นเทมเพลต", "option-template-date-format": "ฟอร์แมตวันที่", "option-template-date-format-description": "{{date}} ในไฟล์เทมเพลตจะถูกแทนที่ด้วยฟอร์แมตนี้", "option-template-date-format-description2": "คุณสามารถใช้ฟอร์แมต {{date:YYYY-MM-DD}} เพื่อแทนที่ฟอร์แมตที่ตั้งไว้เป็นครั้งๆ ไป", "option-template-time-format": "ฟอร์แมตเวลา", "option-template-time-format-description": "{{time}} ในไฟล์เทมเพลตจะถูกแทนที่ด้วยฟอร์แมตนี้", "option-template-time-format-description2": "คุณสามารถใช้ฟอร์แมต {{time:HH:mm}} เพื่อแทนที่ฟอร์แมตที่ตั้งไว้เป็นครั้งๆ ไป", "instruction-navigate": "เพื่อเลื่อน", "instruction-insert": "เพื่อแทรกเทมเพลต", "instruction-dismiss": "เพื่อยกเลิก", "msg-no-templates-found": "ไม่พบเทมเพลต", "msg-fail-invalid-folder": "ไม่สามารถแสดงรายการเทมเพลตได้ เนื่องจากโฟลเดอร์เทมเพลตไม่ถูกต้อง", "msg-fail-folder-not-found": "ไม่สามารถแสดงรายการเทมเพลตได้ เนื่องจากไม่พบโฟลเดอร์ \"{{folderOption}}\"", "prompt-type-template": "พิมพ์ชื่อเทมเพลต..." }, "translucency": { "name": "หน้าต่างโปร่งแสง", "desc": "เปิดใช้เอฟเฟกต์หน้าต่างโปร่งแสงเพื่อทำให้หน้าต่างโปรแกรมดูลึกขึ้น เหมาะกับโหมดสีเข้ม และไม่รองรับบน Linux" }, "slash-command": { "name": "Slash commands", "desc": "เปิดให้เรียกใช้ slash commands ในเอดิเตอร์เมื่อพิมพ์เครื่องหมาย slash" }, "editor-status": { "name": "สถานะเอดิเตอร์", "desc": "เพิ่มสถานะของเอดิเตอร์บนแถบสถานะ", "read": "โหมดอ่าน", "edit-source": "โหมดต้นฉบับ", "edit-live-preview": "โหมดพรีวิวสด" }, "publish": { "name": "เผยแพร่", "desc": "เผยแพร่โน้ตของคุณผ่าน Obsidian Publish.", "action-publish-changes": "เผยแพร่โน้ตล่าสุด...", "label-no-internet-access": "ต้องการการเชื่อมต่ออินเทอร์เน็ตเพื่อเผยแพร่โน้ตล่าสุด", "label-publish-service-description": "Obsidian Publish คือบริการเสริมแบบเสียเงินที่ช่วยให้คุณเผยแพร่โน้ตแบบออนไลน์ได้โดยตรงจาก Obsidian", "label-please-login": "หากต้องการเผยแพร่โน้ต กรุณาล็อกอินหรือสร้างบัญชีผู้ใช้ใหม่กับ Obsidian", "label-no-publish-subscription": "คุณยังไม่ได้สมัครบริการ Obsidian Publish", "button-purchase": "สมัครบริการ", "label-manage-sites": "จัดการเว็บไซต์", "label-no-sites": "คุณยังไม่มีเว็บไซต์", "button-choose": "เลือก", "tooltip-edit-site-id": "แก้ไข site ID", "tooltip-delete-site": "ลบเว็บไซต์", "label-delete-site-confirmation": "คุณต้องการลบเว็บไซต์นี้หรือไม่?", "label-delete-site-details": "เว็บไซต์จะถูกลบอย่างถาวรโดยทันที", "label-confirm-delete-site": "กรุณายืนยันการลบเว็บไซต์ \"{{site}}\"", "option-site-id": "Site ID", "option-site-id-description": "เว็บไซต์ของคุณจะอยูที่ https://publish.obsidian.md/{site id} คุณสามารถเปลี่ยนแปลง site ID ได้ทุกเมื่อ โดยสามารถใช้ตัวพิมพ์เล็ก ตัวเลข และขีดกลางเท่านั้น", "option-site-id-placeholder": "ตั้งชื่อ site ID", "button-create": "สร้าง", "msg-invalid-site-id": "Site ID ต้องประกอบด้วยตัวพิมพ์เล็ก ตัวเลข และขีดกลางเท่านั้น", "msg-site-id-in-use": "Site ID ซ้ำ กรุณาตั้งชื่อใหม่", "msg-create-site-issue": "พบปัญหาในการสร้างเว็บไซต์", "label-site-options": "ตัวเลือกเว็บไซต์", "option-site-general": "General", "option-site-components": "ส่วนประกอบ", "option-site-appearance": "หน้าตา", "option-site-reading-experience": "ประสบการณ์การอ่าน", "option-site-misc": "เปิดหน้าต่างการตั้งค่าเว็บไซต์", "option-site-name": "ชื่อเว็บไซต์", "option-site-name-description": "ชื่อเว็บไซต์ถูกแสดงที่ด้านบนของเว็บไซต์ของคุณ", "option-site-name-placeholder": "ชื่อเว็บไซต์", "option-home-page-file": "ไฟล์หน้าแรกเว็บไซต์", "option-home-page-file-description": "หน้าแรกสุดของเว็บไซต์ที่ผู้เยี่ยมชมจะมองเห็นเป็นหน้าแรก", "option-home-page-file-placeholder": "เลือกไฟล์เพื่อเผยแพร่", "option-logo": "โลโก้", "option-logo-description": "เลือกรูปภาพเพื่อใช้เป็นโลโก้ของเว็บไซต์", "option-logo-placeholder": "รูปภาพใดๆ ที่ถูกแนบไว้ในห้องนิรภัยของคุณ...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "ธีม", "option-theme-description": "เลือกชุดสีเริ่มต้นสำหรับเว็บไซต์ของคุณ", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "แสดงเมนูนำทาง", "option-show-navigation-description": "แสดงรายการหน้าเว็บทั้งหมดที่เผยเพร่ทางด้านซ้ายของเว็บไซต์", "option-show-search": "แสดงช่องค้นหา", "option-show-search-description": "แสดงช่องค้นหาเหนือเมนูนำทางเพื่อให้ผู้เยี่ยมชมสามารถค้นหาหน้าเว็บและหัวข้อต่างๆ ของเว็บไซต์ได้", "option-show-graph": "แสดงมุมมองกราฟ", "option-show-graph-description": "แสดงมุมมองกราฟสำหรับแต่ละหน้า", "option-show-outline": "แสดงสารบัญเนื้อหา", "option-show-outline-description": "แสดงสารบัญหัวข้อจากแต่ละหน้า", "option-show-backlinks": "แสดงแบ็คลิงค์", "option-show-backlinks-description": "แสดงแบ็คลิงค์ที่ส่วนล่างสุดของแต่ละหน้า", "option-sliding-window-mode": "ใช้การเลื่อนซ้ายขวา", "option-sliding-window-mode-description": "เปิดหน้าใหม่ในหน้าต่างทางขวา สามารถเลื่อนไปมาทางซ้ายขวาได้", "option-hover-preview-file": "แสดงพรีวิวเมื่อชี้ลิงค์", "option-hover-preview-file-description": "แสดงพรีวิวเนื้อหาเมื่อชี้ลิงค์", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "ความยาวบรรทัดที่เหมาะกับการอ่าน", "option-readable-line-length-description": "จำกัดความยาวบรรทัดให้เหมาะกับการอ่าน แต่ละบรรทัดจะสั้นลงและทำให้ย่อหน้ายาวๆ อ่านง่ายขึ้น", "option-site-password": "รหัสผ่าน", "option-site-password-description": "ล็อคเว็บไซต์ไม่ให้เข้าถึงด้วยรหัสผ่าน", "option-google-analytics": "Tracking code ของ Google Analytics", "option-google-analytics-description": "ตั้งค่า Google Analytics สำหรับเว็บไซต์ของคุณ รองรับการใช้งานกับ custom domain URL เท่านั้น อย่าลืมตรวจสอบข้อกำหนดและกฎหมายที่เกี่ยวข้องด้วย", "button-manage-passwords": "จัดการ", "button-save-site-settings": "เซฟการตั้งค่าเว็บไซต์", "msg-updated-options": "การตั้งค่าถูกอัพเดตแล้ว", "button-go-back": "กลับไป", "label-publishing-to": "เผยแพร่ไปยัง", "tooltip-switch-site": "สลับเว็บไซต์", "button-add-linked": "เพิ่มไฟล์ที่ถูกลิงค์", "tooltip-add-linked": "เพิ่มไฟล์ทั้งหมดที่ถูกลิงค์กับไฟล์ที่เลือก", "msg-added-linked-files": "เพิ่มไฟล์ที่ถูกลิงค์จำนวน {{count}} ไฟล์", "msg-added-linked-files_plural": "เพิ่มไฟล์ที่ถูกลิงค์จำนวน {{count}} ไฟล์", "tooltip-open-site-options": "เปลี่ยนการตั้งค่าเว็บไซต์", "label-no-changes-detected": "ไม่พบการเปลี่ยนแปลง", "label-changed-files-to-be-published": "มีการเปลี่ยนแปลง", "label-unchanged-files-already-published": "ไม่มีการเปลี่ยนแปลง (เลือกเพื่อลบ)", "label-file-selected": " ถูกเลือกอยู่", "button-select-all-files": "เลือกทั้งหมด", "button-deselect-all-files": "ยกเลิกการเลือกทั้งหมด", "label-new-files-to-be-published": "ไฟล์ใหม่", "button-publish": "เผยแพร่", "msg-no-permission-to-publish-to-site": "สิทธิ์ในการเผยแพร่ขึ้นสู่เว็บไซต์ไม่เพียงพอ", "msg-select-at-least-one-file": "กรุณาเลือกอย่างน้อยหนึ่งไฟล์", "label-upload-changes": "อัพโหลดความเปลี่ยนแปลง", "button-done": "เสร็จสิ้น", "button-stop": "หยุด", "label-status-uploading": "กำลังอัพโหลด", "label-status-to-publish": "รอการเผยแพร่", "label-status-to-delete": "รอการลบ", "label-status-published": "เผยแพร่แล้ว", "label-status-deleted": "ลบแล้ว", "label-status-failed": "ไม่สำเร็จ", "label-status-cancelled": "ยกเลิกแล้ว", "button-change": "เปลี่ยนแปลง", "label-clear-cache": "กรุณารอสองถึงสามนาทีเพื่อให้ความเปลี่ยนแปลงบนเว็บไซต์มีผล หากไม่เห็นความเปลี่ยนแปลงให้ลองล้างแคชในเบราเซอร์ของคุณ", "label-visit-site": "เยี่ยมชมเว็บไซต์ที่นี่: ", "msg-something-went-wrong": "พบปัญหา กรุณาเปิด developer console เพื่อตรวจสอบรายละเอียด", "msg-network-error": "พบปัญหาการเชื่อมต่อ ", "label-manage-passwords": "จัดการรหัสผ่าน", "label-add-password": "เพิ่มรหัสผ่าน", "action-new-password": "ตั้งรหัสผ่านใหม่", "label-no-password": "ขณะนี้เว็บไซต์ของคุณไม่ถูกล็อกรหัสผ่าน ผู้เยี่ยมชมสามารถเข้าถึงเว็บไซต์ได้โดยอิสระ", "label-have-password": "เว็บไซต์ของคุณถูกล็อกรหัสผ่าน หากคุณสร้างรหัสผ่านไว้หลายอัน ผู้เยี่ยมชมสามารถใช้รหัสผ่านใดก็ได้ในการเข้าเว็บไซต์", "option-password-name": "รหัสผ่าน", "option-password-desc": "Hash ของรหัสผ่านจะถูกเก็บไว้อย่างมิดชิดปลอดภัย เมื่อตั้งรหัสผ่านแล้วจะไม่สามารถเรียกดูรหัสผ่านนั้นได้อีก", "option-password-placeholder": "รหัสผ่านของคุณ", "option-nickname-name": "ชื่อเล่น (ไม่จำเป็น)", "option-nickname-desc": "ตั้งชื่อเล่นเพื่อช่วยเตือนความจำว่ารหัสผ่านไหนเป็นของใคร", "action-add-password": "เพิ่มรหัสผ่านนี้", "label-untitled-password": "รหัสผ่านยังไม่ถูกตั้งชื่อ", "label-password-created-time": "ตั้งเมื่อ {{time}}", "msg-added-new-password": "เพิ่มรหัสผ่านแล้ว", "option-custom-domain": "Custom domain", "option-custom-domain-desc": "ใช้ custom domain ของคุณเองแทนที่จะใช้ URL https://publish.obsidian.md/{site id} ของ Obsidian", "option-noindex": "ไม่อนุญาตให้ search engine ทำการ index", "option-noindex-desc": "ปิดกั้นไม่ให้ search engine ทำการ index เว็บไซต์ของคุณ", "button-configure": "ตั้งค่า", "label-configure-custom-domain": "การตั้งค่า custom domain", "option-custom-url-name": "Custom URL", "option-custom-url-desc": "URL ของเว็บไซต์ที่ต้องการใช้", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "ชี้ทางไปยัง custom domain ของคุณ", "option-custom-url-redirect-desc": "ชี้ทางผู้เยี่ยมชมจาก publish.obsidian.md/id ไปยัง custom domain ของคุณ", "button-update-custom-domain": "อัพเดตการตั้งค่า domain", "label-custom-domain-instructions": "ดูข้อมูลเพิ่มเติมในเว็บไซต์ความช่วยเหลือของเราได้ที่ {{link}}", "label-custom-domain-link-name": "คู่มือการตั้งค่า custom domain", "label-site-usage": "คุณกำลังใช้งาน {{site}} จากทั้งหมด {{limit}}.", "button-add-more-sites": "ซื้อเว็บไซต์เพิ่มเติม", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "พื้นที่ทำงาน", "desc": "เซฟ/โหลดพื้นที่ทำงาน", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "เซฟ", "button-load": "โหลด", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "ซิงค์", "desc": "ซิงค์ไฟล์ผ่าน Obsidian Sync.", "action-view-version-history": "ดูรุ่นก่อนหน้า", "label-load-more": "โหลดเพิ่มเติม", "label-show-diff": "Show diff", "label-copy-to-clipboard": "คัดลอกลงคลิปบอร์ด", "label-restore-this-version": "เรียกคื่นรุ่นนี้", "msg-already-latest-version": "รุ่นนี้เป็นรุ่นล่าสุดแล้ว", "msg-restored-version": "เรียกคืนรุ่น {{time}} สำเร็จ", "label-file-deleted": "ไฟล์นี้ถูกลบแล้ว", "label-no-earlier-version": "ไม่พบรุ่นก่อนหน้าสำหรับไฟล์นี้", "label-empty-file": "ไม่มีข้อมูล", "label-setting-files": "ไฟล์การตั้งค่า", "label-deleted-files": "ไฟล์ที่ถูกลบ", "label-version-history": "Version history", "label-click-to-see-history": "คลิกที่ไฟล์ที่ถูกลบเพื่อดูประวัติ", "label-create-remote-vault": "สร้างห้องนิรภัยบนคลาวด์", "msg-please-enter-password": "กรุณาใส่รหัสผ่าน", "msg-vault-name-cannot-be-empty": "กรุณาตรวจสอบชื่อห้องนิรภัย", "msg-successfully-created-vault": "สร้างห้องนิรภัยบนคลาวด์ \"{{name}}\" สำเร็จ", "label-remote-vault-explanation": "ห้องนิรภัยบนคลาวด์จะซิงค์ข้อมูลระหว่างอุปกรณ์ได้อย่างปลอดภัย", "option-vault-name": "ชื่อห้องนิรภัย", "option-vault-name-desc": "ช่วยเตือนความจำว่าเป็นห้องนิรภัยอะไร", "option-vault-name-placeholder": "ห้องนิรภัยสุดต๊าซของฉัน", "option-use-custom-encryption-password": "ปรับแต่งรหัสผ่านการเข้ารหัสแบบ end-to-end", "option-use-custom-encryption-password-desc": "หากปิดการใช้ตัวเลือกนี้ Obsidian จะจัดการรหัสผ่านการเข้ารหัสให้คุณ", "option-use-custom-encryption-password-desc-warning": "ตัวเลือกนี้ไม่สามารถเปลี่ยนแปลงได้ในอนาคต", "option-encryption-password": "รหัสผ่านการเข้ารหัส", "option-encryption-password-desc": "รหัสผ่านนี้ไม่สามารถเปลี่ยนแปลงได้ในอนาคต", "option-encryption-password-desc-warning": "หากคุณลืมรหัสผ่านนี้ คุณจะไม่สามารถใช้งานข้อมูลใดๆ บนคลาวด์ได้อีกตลอดกาล", "option-encryption-password-desc-2": "ข้อมูลในคอมพิวเตอร์ของคุณจะไม่ได้รับผลกระทบใดๆ", "option-encryption-password-placeholder": "รหัสผ่านของคุณ", "label-enter-encryption-password": "ป้อนรหัสผ่านการเข้ารหัส", "button-unlock-vault": "ปลดล็อคห้องนิรภัย", "msg-verified-password": "ตรวจสอบรหัสผ่านสำเร็จ", "label-remote-vaults": "ห้องนิรภัยบนคลาวด์ของคุณ", "label-vault-created-time": "สร้างเมื่อ {{time}}", "tooltip-delete-remote-vault": "ลบ", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "การยืนยันการลบห้องนิรภัย", "label-confirm-delete-remote-vault-question": "คุณต้องการลบห้องนิรภัยบนคลาวด์นี้หรือไม่?", "label-confirm-delete-remote-vault-result": "ข้อมูลทั้งหมดบนเซิร์ฟเวอร์ของเราซึ่งรวมถึงไฟล์รุ่นก่อนหน้าทั้งหมดจะถูกลบ ข้อมูลในคอมพิวเตอร์ของคุณจะไม่ได้รับผลกระทบใดๆ", "label-confirm-delete-remote-vault-warning": "การลบเป็นการลบแบบถาวรและไม่สามารถย้อนกลับได้", "msg-remote-vault-deleted": "{{name}} ถูกลบแล้ว", "button-connect-to-remote-vault": "เชื่อมต่อ", "button-disconnect-from-remote-vault": "หยุดการเชื่อมต่อ", "label-not-remote-vaults": "ไม่มีห้องนิรภัยบนคลาวด์", "button-create-new-remote-vault": "สร้างห้องนิรภัยบนคลาวด์ใหม่", "label-sync-log": "ซิงค์บันทึกการทำงานของโปรแกรม", "options-only-show-errors": "ข้อผิดพลาดเท่านั้น", "options-only-show-errors-desc": "แสดงข้อผิดพลาดของโปรแกรมเท่านั้น ซ่อนบันทึกชนิดอื่นๆ ทั้งหมด", "button-copy-sync-log": "คัดลอกบันทึกการทำงานของโปรแกรม", "msg-successfully-copied-sync-log": "คัดลอกบันทึกการทำงานของโปรแกรมสำเร็จ", "button-retry": "ลองอีกครั้ง", "button-purchase-subscription": "สมัครบริการ", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "เลือก", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "สถานะการซิงค์", "option-sync-status-desc-paused": "Obsidian Sync หยุดการทำงาน", "option-sync-status-desc-running": "Obsidian Sync กำลังทำงาน", "option-device-name": "ชื่ออุปกรณ์", "option-device-name-desc": "ชื่ออุปกรณ์จะแสดงอยู่ในบันทึกการทำงานของโปรแกรม ปล่อยว่างไว้เพื่อใข้ชื่อมาตรฐาน", "button-resume": "ประมวลผลต่อ", "button-pause": "หยุดชั่วคราว", "option-view-deleted-files": "ไฟล์ที่ถูกลบ", "option-view-deleted-files-desc": "ดูหรือกู้คืนไฟล์ที่ถูกลบไปแล้ว", "option-sync-log": "ดูกิจกรรมการซิงค์", "option-sync-log-desc": "ดูกิจกรรมการซิงค์ล่าสุดเพื่อประโยชน์ในการดีบั๊ก", "button-view": "มุมมอง", "button-bulk-restore": "กู้คืนทีละหลายไฟล์", "button-restore-selected-files": "กู้คืนไฟล์ที่เลือก", "msg-restoring": "กำลังกู้คืน...", "msg-restoring-complete": "`การกู้คืนเสร็จสิ้น: สำเร็จ {{succeeded}} ไฟล์ ไม่สำเร็จ {{failed}} ไฟล์`", "option-over-size": "ห้องนิรภัยใหญ่เกินพื้นที่ที่กำหนด", "option-over-size-desc": "ห้องนิรภัยของคุณใช้พื้นที่ {{size}} จากพื้นที่ทั้งหมด {{limit}}", "msg-largest-files": "ดูไฟล์ที่ใหญ่ที่สุด", "msg-largest-files-desc": "ไฟล์เหล่านี้คือไฟล์บนคลาวด์ที่ใช้พื้นที่มากที่สุด หลังจากลบไฟล์แนบแล้วให้ใช้ปุ่ม purge เพื่อคืนพื้นที่ให้กับห้องนิรภัย", "button-purge-remote": "Purge", "tooltip-purge-remote": "ลบไฟล์แนบจากห้องนิรภัยบนคลาวด์อย่างถาวรเพื่อประหยัดการใช้พื้นที่", "msg-purge-complete": "การ Purge เสร็จสิ้น", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "เลือกซิงค์บางไฟล์", "option-excluded-folders": "โฟลเดอร์ที่ไม่ต้องการ", "option-excluded-folder-desc": "ตั้งค่าโฟลเดอร์ที่ไม่ต้องการซิงค์", "option-currently-excluded-folders": " โฟลเดอร์เหล่นี้จะไม่ถูกซิงค์:", "button-manage-excluded-folders": "จัดการ", "option-sync-image": "ซิงค์รูปภาพ", "option-sync-image-desc": "ซิงค์ไฟล์รูปภาพที่มีนามสกุลดังนี้: {{extensions}}", "option-sync-audio": "ซิงค์ไฟล์เสียง", "option-sync-audio-desc": "ซิงค์ไฟล์เสียงที่มีนามสกุลดังนี้: {{extensions}}", "option-sync-video": "ซิงค์วิดีโอ", "option-sync-video-desc": "ซิงค์ไฟล์วิดีโอที่มีนามสกุลดังนี้: {{extensions}}", "option-sync-pdf": "ซิงค์ PDF", "option-sync-pdf-desc": "ซิงค์ไฟล์ PDF", "option-sync-unsupported": "ซิงค์ไฟล์ทั้งหมด", "option-sync-unsupported-desc": "ซิงค์ไฟล์ชนิดอื่นทั้งหมดแม้ Obsidian จะไม่รองรับ", "option-vault-config-sync": "ซิงค์การตั้งค่าห้องนิรภัย", "option-view-config-files": "การตั้งค่ารุ่นก่อนหน้า", "option-view-config-files-desc": "ดูและกู้คืนไฟล์การตั้งค่ารุ่นเก่า", "option-sync-app": "การตั้งค่าหลัก", "option-sync-app-desc": "เปิดใช้งานตัวเลือกเพื่อซิงค์การตั้งค่าเอดิเตอร์ ไฟล์ ลิงค์ และฮ็อตคีย์ทั้งหมด", "option-sync-appearance": "การตั้งค่าหน้าตาโปรแกรม", "option-sync-appearance-desc": "เปิดใช้งานตัวเลือกเพื่อซิงค์การตั้งค่าหน้าตาโปรแกรมเช่น โหมดสี ธีม และ snippet ที่เปิดใช้งาน", "option-sync-appearance-data": "ธีมและ snippet", "option-sync-appearance-data-desc": "เปิดใช้งานตัวเลือกเพื่อซิงค์ธีมและ snippet ที่ดาวน์โหลดไว้ทั้งหมด โดยจะถูกใช้งานก็ต่อเมื่อเปิดใช้ตัวเลือกในหัวข้อก่อนหน้า", "option-sync-hotkey": "ฮ็อตคีย์", "option-sync-hotkey-desc": "ซิงค์ฮ็อตคีย์ที่ตั้งเอง", "option-sync-core-plugin": "รายการปลั๊กอินหลักที่เปิดใช้งาน", "option-sync-core-plugin-desc": "ซืงค์รายการปลั๊กอินหลักที่เปิดใช้งาน", "option-sync-core-plugin-data": "การตั้งค่าปลั๊กอินหลัก", "option-sync-core-plugin-data-desc": "ซิงค์การตั้งค่าของปลั๊กอินหลัก", "option-sync-community-plugin": "รายการปลั๊กอินโดยชุมชนที่เปิดใช้งาน", "option-sync-community-plugin-desc": "ซิงค์รายการปลั๊กอินโดยชุมชนที่เปิดใช้งาน", "option-sync-community-plugin-data": "ปลั๊กอินโดยชุมชนที่ถูกติดตั้งไว้", "option-sync-community-plugin-data-desc": "ซิงค์ปลั๊กอินโดยชุมชนที่ถูกติดตั้งไว้ (ไฟล์ .js .css และ manifest.json) รวมถึงการตั้งค่าต่างๆ", "label-sync-introduction": "Obsidian Sync เป็นบริการเสริมจาก Obsidian ที่ให้บริการซิงค์ไฟล์แบบเข้ารหัส end-to-end และเก็บประวัติของไฟล์", "label-account-required": "เพื่อเริ่มการซิงค์ กรุณาล็อกอินหรือสร้างบัญชีผู้ใช้ใหม่กับ Obsidian", "button-sign-up": "สมัครใช้งาน", "button-log-in": "ล็อกอิน", "label-manage-excluded-folders": "จัดการโฟลเดอร์ที่ไม่ต้องการซิงค์", "label-number-of-folders-excluded": "มี {{folders}} โฟลเดอร์ที่จะไม่ถูกซิงค์", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "ตั้งค่าการเชื่อมต่อ", "label-now-connected-to-vault": "เชื่อมต่อกับ \"{{name}}\" แล้ว", "button-start-syncing": "เริ่มการซิงค์", "label-confirm-merge-vault": "ยืนยันการรวมห้องนิรภัย", "msg-vault-has-notes": "ห้องนิรภัยในคอมพิวเตอร์ของคุณมีไฟล์อยู่แล้ว", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "การกู้คืนข้อมูล", "desc": "ให้คุณกู้คืนชุดข้อมูลที่เสียหายจากเเหตุการณ์ไม่คาดคิด กู้คืนได้เฉพาะไฟล์ Markdown เท่านั้น", "action-open": "เปิดดูชุดข้อมูลที่สำรองไว้", "option-interval": "รอบการสำรองข้อมูล", "option-interval-description": "ระยะเวลาขั้นต่ำของรอบการสำรองข้อมูล หน่วยนาที", "option-keep": "ระยะเวลาเก็บชุดข้อมูล", "option-keep-description": "ระยะเวลาในการเก็บชุดข้อมูลที่สำรองไว้ หน่วยวัน", "option-open-history": "ชุดข้อมูล", "option-open-history-description": "ดูและกู้คืนชุดข้อมูลที่สำรองไว้", "button-view-snapshots": "ดู", "option-clear": "ล้างประวัติ", "option-clear-description": "ลบชุดข้อมูลทิ้งทั้งหมด", "button-clear-history": "ล้าง", "label-clear-warning": "คุณต้องการลบชุดข้อมูลทั้งหมดหรือไม่? โปรดรับทราบว่าชุดข้อมูลเท่านั้นที่จะถูกลบ ไฟล์อื่นทั้งหมดในห้องนิรภัยของคุณจะไม่ได้รับผลกระทบ", "msg-clear-complete": "ชุดข้อมูลถูกลบแล้ว", "label-no-history-found": "ไม่มีชุดข้อมูล", "placeholder-choose-file": "เลือกไฟล์...", "label-select-file": "กรุณาเลือกไฟล์ทางด้านซ้ายเพื่อดูชุดข้อมูล" }, "note-composer": { "name": "Note composer", "desc": "รวม แยก และปรับปรุงโครงสร้างโน้ต", "option-confirm-file-merge": "ยืนยันการรวมไฟล์", "option-confirm-file-merge-description": "แจ้งเตือนก่อนการรวมไฟล์", "option-split-replacement-text": "ข้อความที่ถูกแยก", "option-split-replacement-text-description": "สิ่งที่จะเกิดขึ้นแทนที่ข้อความที่ถูกแยกออกไป", "option-choice-split-replacement-text-link": "สร้างลิงค์ไปยังไฟล์ใหม่", "option-choice-split-replacement-text-embed": "ฝังไว้ในไฟล์ใหม่", "option-choice-split-replacement-text-none": "ไม่แสดงอะไร", "option-template-file": "ตำแหน่งไฟล์เทมเพลต", "option-template-file-description": "ไฟล์เทมเพลตที่จะใช้เมื่อรวมหรือแยกไฟล์ สามารถใช้ตัวแปรเหล่านี้ได้: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, เช่น {{date:YYYY-MM-DD}}", "command-merge-file": "รวมไฟล์ปัจจุบันกับไฟล์อื่น...", "action-merge-file": "รวมไฟล์ทั้งไฟล์กับ...", "label-no-files": "ไม่พบไฟล์", "instruction-navigate": "เพื่อเลื่อน", "instruction-merge": "เพื่อรวม", "instruction-create-new": "เพื่อสร้างไฟล์ใหม่", "instruction-merge-at-top": "เพื่อรวมทีด้านบนสุด", "instruction-dismiss": "เพื่อยกเลิก", "prompt-select-file-to-merge": "เลือกไฟล์ที่จะรวมเข้าไป...", "label-merge-file": "รวมไฟล์", "label-confirm-file-merge": "คุณต้องการรวมไฟล์ \"{{file}}\" เข้ากับไฟล์ \"{{destination}}\" หรือไม่? ไฟล์\"{{file}}\" จะถูกลบทิ้ง", "button-merge": "รวมไฟล์", "button-merge-do-not-ask-again": "รวมไฟล์และไม่ต้องถามอีก", "command-split-file": "แยกข้อความที่เลือก...", "command-extract-heading": "แยกหัวข้อนี้...", "instruction-append": "เพื่อแทรกด้านล่างสุด", "instruction-prepend": "เพื่อแทรกด้านบนสุด", "msg-fail-to-fetch-template": "ไม่สามารถเรียกใช้เทมเพลต \"{{template}}\" ได้ ไม่พบเทมเพลต", "msg-fail-to-find-heading": "ไม่พบหัวข้อ" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} คำ", "word-with-count_plural": "{{count}} คำ", "character-with-count": "{{count}} ตัวอักษร", "character-with-count_plural": "{{count}} ตัวอักษร", "link-with-count": "{{count}} ลิงค์", "link-with-count_plural": "{{count}} ลิงค์", "file-with-count": "{{count}} ไฟล์", "file-with-count_plural": "{{count}} ไฟล์", "folder-with-count": "{{count}} โฟลเดอร์", "folder-with-count_plural": "{{count}} โฟลเดอร์", "backlink-with-count": "{{count}} แบ็คลิงค์", "backlink-with-count_plural": "{{count}} แบ็คลิงค์", "site-with-count": "{{count}} เว็บไซต์", "site-with-count_plural": "{{count}} เว็บไซต์", "plugin-with-count": "{{count}} ปลั๊กอิน", "plugin-with-count_plural": "{{count}} ปลั๊กอิน", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } }{ "setting": { "options": "Seçenekler", "plugin": "Eklenti", "builtin-plugins": "Yerleşik Eklentiler", "plugin-options": "Eklenti seçenekleri", "folder-path-example-placeholder": "Örnek: klasör 1/klasör 2", "file-path-example-placeholder": "Örnek: klasör/not", "msg-restart-required": "Bu seçeneği değiştirdiğinizde etkisini görmek için yeniden başlatmanız gerekir.", "editor": { "name": "Editör", "section-general": "Genel", "section-behavior": "Davranış", "section-display": "Görünüm", "option-spellcheck": "İmla denetimi", "option-spellcheck-description": "İmla denetimini açar. Şimdilik yalnızca İngilizce(ABD) için çalışıyor.", "spellcheck-languages": "İmla denetimi yapılan diller", "spellcheck-languages-description": "İmla denetimi için kullanılmasını istediğiniz dilleri seçin.", "spellcheck-languages-mac-description": "Yerleşik imla denetimi otomatik olarak macOS'ta kullandığınız dili tespit edecek.", "spellcheck-dict": "İmla denetimi sözlüğü", "spellcheck-dict-empty": "İmla denetimi sözlüğü boş.", "option-show-inline-title": "Satır içi başlığı göster", "option-show-inline-title-description": "Dosya adını, dosya içeriğiyle satır içi düzenlenebilir bir başlık olarak görüntüler.", "option-readable-line-length": "Okunabilir satır uzunluğu", "option-readable-line-description": "Satır uzunluğunu kısıtla. Ekrana daha az yazı sığar ama uzun paragraflar daha okunabilir olur.", "option-strict-line-break": "Katı kurallı yeni satırlar", "option-strict-line-break-description": "Önizleme modunda tekil yeni satırları Markdown tanımlarına göre gözardı et. Önizlemede tekil yeni satırları görmek istiyorsanız bunu kapatın.", "option-show-frontmatter": "Ön bölümü göster", "option-show-frontmatter-description": "Önizleme modunda ön bölümü kod bloğu olarak göster. Ön bölüm kısmını gizlemek için bu ayarı kapatın.", "option-auto-pair-brackets": "Parantezleri otomatik eşle", "option-auto-pair-brackets-description": "Parantez ve tırnak işaretlerini otomatik eşle.", "option-auto-pair-markdown": "Markdown işaretlerini otomatik eşle.", "option-auto-pair-markdown-description": "Kalın ve italik sembollerini otomatik eşle.", "option-smart-indent-lists": "Listeleri akıllıca içerle", "option-smart-indent-lists-description": "İçerleme ve liste işaretçilerini senin için halleder.", "option-fold-heading": "Başlıkları katla", "option-fold-heading-description": "Başlıklar altındaki herşeyi katlayabilmeni sağlar.", "option-fold-indent": "İçerlemeleri katla", "option-fold-indent-description": "Liste vb. çoklu içerliklerin yalnızca bir kısmını katlayabilmeni sağlar.", "option-default-new-tab-view": "Yeni sekmeler için varsayılan görünüm", "option-default-new-tab-view-description": "Yeni bir markdown sekmesinin açıldığı varsayılan görünüm.", "option-default-new-tab-view-editing": "Düzenleme görünümü", "option-default-new-tab-view-reading": "Okuma görünümü", "option-default-editing-mode": "Varsayılan düzenleme modu", "option-default-editing-mode-description": "Yeni pencerenin varsayılan olarak başlayacağı düzenleme modu.", "option-default-editing-mode-source": "Kaynak modu", "option-default-editing-mode-live-preview": "Canlı Önizleme", "option-show-line-number": "Satır numaralarını göster", "option-show-line-number-description": "Satır numaralarını en altta göster.", "option-indentation-guide": "Girinti kılavuzlarını göster", "option-indentation-guide-description": "Görsel rehberlik için madde işaretleri arasındaki dikey ilişki çizgilerini gösterin.", "option-use-tabs": "Boşluklar için tab kullan", "option-use-tabs-description": "\"Tab\" tuşuyla içerleme yaparken tab karakterleri kullan. Boşluk karakterleri kullanmak için bunu kapat.", "option-tab-size": "Tab boyutu", "option-tab-size-description": "Bir Tab tuşunun kaç boşluğa eşit olacağını belirler.", "option-rtl": "Sağdan sola (RTL)", "option-rtl-description": "Notlarda metin yönünü sağdan sola şeklinde ayarlar.", "option-auto-convert-html": "HTML'e otomatik olarak çevir", "option-auto-convert-html-description": "İnternet sitelerinden yapıştırırken ya da sürekle bırak yapılırken otomatik olarak HTML'den Markdown'a dönüştür. Dönüştürmeden kullanmak için Ctrl/Cmd+Shift+V'ı kullan.", "option-vim-key-bindings": "Vim tuş ayarları", "option-vim-key-bindings-description": "Kaynak editöründe Vim tuşlarını kullanabilmenizi sağlar.", "option-vim-key-bindings-mobile": "Mobil cihazlarda bu ayar cihaz başına yapılır ve yapılandırma dosyası aracılığıyla senkronize edilmez.", "option-emacsy-keys": "macOS için Klasik Emacs-tarzı kısayollar", "option-emacsy-keys-description": "Emacs-tarzı navigasyon için klavye kısayollarını da kullanmanızı sağlar. Bunlar macOS içerisinde standart olarak mevcut fakat bazı klavye operasyonları ile çakışabilir.", "label-confirm-enable-vim": "Vim moduna girişi onayla", "label-vim-warning": "Vim modu yazı düzenleme için efektif olsa da sezgisel olmayabilir. Vim'e alışkın değilseniz bu özellik Obsidian'ı bozulmuş gibi gösterebilir.", "label-vim-test": "Vim kullanmayı bildiğinizi onaylamak için, lüffen Vim'den kayıt etmeden çıkış komutunu giriniz:", "label-vim-your-answer": "Cevabınız", "placeholder-enter-command": "Komutu gir...", "button-confirm-enable-vim": "Vim'i açmama izin ver", "msg-vim-mode-enabled": "Komut doğru. Vim modu açıldı.", "msg-vim-mode-not-enabled": "Komut yanlış. Sizi korumak için Vim modu kapatıldı.", "msg-vim-mode-please-enter-command": "Lütfen Vim modunu açmak için komutu giriniz.", "option-legacy-editor": "Eski editörü kullan", "option-legacy-editor-description2": "Eski editör yakında kullanımdan kaldırılacak. Şu anda artık bakımı yapılmamaktadır ve bu nedenle hatalar ele alınmayacaktır.", "label-legacy-deprecation": "Yeni düzenleyiciyi burada", "label-legacy-deprecation-1": "Obsidian artık daha sağlam ve erişilebilir yepyeni bir editöre sahip.", "label-legacy-deprecation-2": "Görünüşe göre hala eski editörü kullanıyorsunuz ve yeni editörü beğeneceğinizi düşünüyoruz.", "label-legacy-deprecation-choice": "Hangi modu kullanmak istersiniz?", "label-live-preview-description": "Daha modern, ne görürsen onu alırsın deneyimi.", "label-source-mode-description": "Sözdizimi vurgulamalı ham Markdown'a bakın.", "button-start-new-editor": "Yeni düzenleyiciyi başlat" }, "file": { "name": "Dosyalar & Linkler", "option-confirm-file-deletion": "Dosyayı silmeyi onaylayın", "option-confirm-file-deletion-description": "Dosya silme işlemi için açılır pencere özelliği", "option-delete-destination": "Silinmiş dosyalar", "option-delete-destination-description": "Sildikten sonra silinmiş dosyalar ile ne yapılacağı", "option-choice-system-trash": "Sistem çöp kutusuna taşı", "option-choice-vault-trash": "Obsidian çöp kutusuna taşı (.trash klasörü)", "option-choice-permanent-delete": "Kalıcı olarak sil", "option-always-update-links": "Bağlantıları hep güncelle", "option-always-update-links-description": "Bir dosyanın adını değiştirdiğinzde gelen bağlantıları otomatik olarak güncelle.", "option-new-note-location": "Yeni notlar için varsayılan yer", "option-new-note-location-description": "Yeni yaratılan notların kaydedileceği yer. Eklenti ayarları bu ayarı değiştirebilir.", "option-choice-vault-root": "Kasa temeli", "option-choice-current-folder": "Dosyayla aynı klasör", "option-choice-specified-folder": "Aşağıda belirtilen klasöre", "option-new-file-folder-path": "Yeni notların kaydedileceği klasör", "option-new-file-folder-path-description": "Yeni notlar bu klasörde yaratılır. Eklenti ayarları bu ayarı değiştirebilir.", "option-use-wiki-links": "[[Wikilinks]]'i kullan", "option-use-wiki-links-description": "[[bağlantılar]] ve ![[görseller]] için Markdown bağlantıları ve görselleri yerine otomatik olarak Wikilink'ler oluştur. Markdown bağlantıları oluşturmak için bu ayarı kapat.", "option-show-unsupported-files": "Tüm dosya uzantılarını bul.", "option-show-unsupported-files-description": "Obsidian'nın normalde açamadığı dosya türlerini de göster.Bu sayede onlara bağlantı verebilir, Dosyalarda ve Hızlı Geçişte görebilirsiniz.", "option-link-autocompleted-format": "Yeni bağlantı formatı", "option-link-autocompleted-format-description": "Otomatik bağlantı yaratırken hangi bağlantıların ekleneceği.", "option-choice-shortest-linktext": "Mümkünse en kısa yol", "option-choice-relative-path": "Dosyaya göre belirli yol", "option-choice-absolute-path": "Kasa içinde belirli yol", "option-new-attachment-location": "Yeni eklentiler için varsayılan klasör", "option-new-attachment-location-description": "Yeni eklenen eklentilerinin hangi klasöre kaydedileceği.", "option-choice-subdirectory": "Aynı klasörün içinde bir alt klasörde", "option-attachment-folder-path": "Eklenti klasörü yolu", "option-attachment-folder-path-description": "Yeni yaratılan eklenti dosyaları bu klasörde yaratılır. Sürükle bırak, kopyala yapıştır ve ses kayıtları gibi dosyaları içerir.", "option-attachment-subfolder-path": "Altklasör adı", "option-attachment-subfolder-path-description": "Eğer dosyalarınız \"kasa/klasör\" klasöründeyse ve altklasör adını \"eklentiler\" seçerseniz, eklentileriniz \"kasa/klasör/eklentiler\" klasörüne kaydedilecek.", "option-attachment-subfolder-path-placeholder": "Eklentiler", "option-excluded-files": "Hariç tutulan dosyalar", "option-excluded-files-desc": "Hariç tutulan dosyalar Hızlı Değiştirici, bağlantı önerisi ve Grafik Görünümü gibi çeşitli yerlerde ya gizlenecek ya da daha az fark edilecektir.", "label-no-excluded-filters-applied": "Şu anda hariç tutulan filtre uygulanmıyor. Aşağıya bir tane ekleyin.", "label-excluded-filters-applied": "Aşağıdaki filtrelerle eşleşen dosyalar şu anda hariç tutulmaktadır:", "label-excluded-filter": "Filtre", "placeholder-excluded-filter": "Yolu girin veya \"/regex/\"..." }, "appearance": { "name": "Görünüm", "option-base-theme": "Temel tema", "option-base-theme-description": "Obsidian'ın varsayılan renk modunu seçin.", "option-accent-color": "Vurgu rengi", "option-accent-color-description": "Uygulama boyunca kullanılan vurgu rengini seçin.", "dark-theme": "Koyu", "light-theme": "Açık", "system-theme": "Sistem ayarını kullan", "option-font": "Yazı Tipi", "option-advanced": "Gelişmiş", "option-interface-font": "Arayüz yazı tipi", "option-interface-font-description": "Tüm Obsidian için temel yazı tipini ayarlayın.", "option-text-font": "Metin yazı tipi", "option-text-font-description": "Görünümleri düzenlemek ve okumak için yazı tipini ayarlayın.", "option-monospace-font": "Tek aralıklı yazı tipi", "option-monospace-font-description": "Kod blokları ve ön madde gibi yerler için yazı tipini ayarlayın.", "label-single-font-currently-in-effect": "Şu anda uygulanan yazı tipi: ", "label-multiple-fonts-currently-in-effect": "Şu anda aşağıdaki yazı tipleri uygulanmaktadır:", "option-font-placeholder": "Yazı tipi adını girin...", "label-no-custom-font-set": "Şu anda özel bir yazı tipi uygulanmıyor. Aşağıya bir tane ekleyin.", "label-font-applied": "Sisteminizde bulunan bu listeden ilk yazı tipi uygulanacaktır.", "msg-font-not-found": "Bu yazı tipi sisteminizde algılanmadı.", "msg-font-found": "Bu yazı tipi sisteminizde algılandı.", "label-font-name": "Yazı tipi adı", "option-community-themes": "Topluluk temalarını aç", "option-community-themes-description": "Topluluk tarafından yaratılmış harika temaları incele veya kullan.", "button-browse-community-themes": "Tara", "option-font-size": "Yazı tipi boyutu", "option-font-size-description": "Editör ve önizleme modundaki fontların piksel olarak boyutunu belirler.", "option-font-size-action": "Hızlı font boyutu ayarlama", "option-font-size-action-description": "Yazı tipi boyutunu Ctrl + Kaydırma ile ya da trackpadin yaklaştırma hareketi ile ayarlayın.", "option-themes": "Temalar", "option-manage-themes-description": "Kurulu temaları yönetin ve topluluk temalarını inceleyin.", "option-theme-button-manage": "Yönet", "option-choice-none": "Hiçbiri", "option-native-menus": "Yerel menüler", "option-native-menus-desc": "Uygulamadaki menüler işletim sistemiyle eşleşecektir. Temanızdan etkilenmeyeceklerdir.", "button-reload-themes": "Temaları yeniden yükle", "msg-reloaded-themes": "Özel CSS temaları tekrar yüklendi.", "button-open-themes-folder": "Tema klasörünü aç", "option-css-snippets": "CSS kod parçaları", "label-no-css-snippets-found": "Kod parçaları klasöründe hiç CSS kod parçası bulunamadı.", "no-snippet-description": "CSS Kod parçaları \"{{path}}\" klasöründe saklanmaktadır.", "button-reload-snippets": "Kod parçalarını tekrar yükle", "button-open-snippets-folder": "Kod parçaları klasörünü aç", "msg-reloaded-snippets": "CSS kod parçaları tekrar yüklendi.", "option-toggle-snippet-description": "\"{{path}}\" konumundaki CSS kod parçalarını uygula.", "label-installed-themes": "Kurulu temalar", "label-screenshot-unavailable": "Ekran görüntüsü mevcut değil.", "label-default-theme": "Varsayılan", "tooltip-click-to-enlarge": "Büyütmek için tıklayın", "button-update": "Güncelle", "label-currently-selected": "Seçili", "option-frame-style": "Pencere çerçevesi stili", "option-frame-description": "Obsidian pencerelerinin başlık çubuğunun stilini belirler. Etkili olması için yeniden başlatma gerektirir.", "option-frame-hidden": "Gizli (varsayılan)", "option-frame-obsidian": "Obsidyen çerçeve", "option-frame-native": "Yerel çerçeve", "option-configure-ribbon": "Şerit menüsü", "option-configure-ribbon-desc": "Bu gezinti çubuğundaki şerit menüsünde hangi komutların görüneceğini yapılandırın.", "option-mobile-quick-ribbon-item": "Hızlı erişim şeridi öğesi", "option-mobile-quick-ribbon-item-desc": "Navigasyon menüsündeki şerit öğesine dokunulduğunda bu şerit öğesi etkinleşir. Dokunup basılı tutmak menüyü göstermeye devam edecektir.", "button-configure": "Yapılandırma", "label-additional-ribbon-items": "Diğer şeritler", "label-modal-configuration": "Şerit Yapılandırması", "label-modal-configuration-desc": "Şeritte hangi öğelerin etkin olmasını istediğinizi seçin. Sırayı değiştirmek için sürükleyip bırakın.", "option-show-view-header": "Sekme başlık çubuğunu göster", "option-show-view-header-desc": "Başlığı her sekmenin en üstünde görüntüleyin.", "msg-updates-found": "{{count}} tema için güncelleme bulundu.", "msg-updates-found_plural": "{{count}} tema için güncelleme bulundu.", "button-check-for-updates": "Güncellemeleri kontrol edin", "button-view-updates": "Güncellemeleri görüntüle", "button-update-all-themes": "Tümünü güncelle", "label-current-themes": "Güncel topluluk temaları", "label-currently-installed": "Şu anda yüklü {{count}} temanız var.", "label-currently-installed_plural": "Şu anda yüklü {{count}} temanız var." }, "hotkeys": { "name": "Kısayollar", "prompt-filter": "Filtrele...", "tooltip-delete-hotkey": "Silme kısayolu", "label-waiting-for-hotkey-press": "Kısayol tuşu bekleniyor...", "tooltip-restore-default": "Varsayılana geri dön", "tooltip-customize-command": "Komutu kişiselleştir", "tooltip-hotkey-single-conflict": "Bu komut \"{{command}}\" ile çakışıyor", "tooltip-hotkey-multiple-conflicts": "Bu komut diğer {{count}} komut ile çakışıyor", "label-blank-hotkey": "Boş" }, "about": { "name": "Hakkında", "label-commercial-license": "Ticari lisans", "label-license-key": "Lisans anahtarı", "license-key-placeholder": "Lisans anahtarın...", "label-activate-license": "Lisansı aktive et", "button-activate": "Aktive et", "label-unknown-version": "Bilinmeyen", "label-current-version": "Anlık sürüm: ", "label-install-version": "(Yükleyici sürümü: {{version}})", "label-up-to-date": "Programınız güncel!", "label-read-changelog": "Değişiklik raporunu oku.", "label-manual-update-required": "En son özellikleri desteklemek ve en son güvenlik yamalarını almak için Obsidian'ın büyük bir yükleyici güncellemesine ihtiyacı vardır. Obsidian'ı manuel olarak indirmeniz ve yeniden yüklemeniz gerekir.", "label-download": "İndir", "label-new-version-ready": "Yeni versiyon yüklemeye hazır.", "label-relaunch-to-update": "Güncellemek için programı yeniden başlat.", "label-disabled-updates": "Güncellemeler kapalı.", "label-checking-for-updates": "Güncellemeler kontrol ediliyor...", "button-relaunch": "Yeniden başlat", "button-check-for-updates": "Güncellemeleri kontrol et", "option-auto-update": "Otomatik güncelle", "option-auto-update-description": "Programın otomatik güncellemeler yapmasını iptal etmek için bunu kapat.", "option-get-help": "Yardım alın", "option-get-help-description": "Obsidian kullanımı hakkında yardım alın.", "button-open": "Aç", "option-language": "Dil", "option-language-description": "Programın dilini değiştirir.", "option-insider-build": "Üye versiyonlarını kabul et.", "option-insider-build-description": "Üyelere özel versiyonları otomatik olarak kullan. Bu versiyonlar yeni özellikler ve güncellemeler içerir ancak normal versiyonlara göre daha fazla hata da içerir.", "option-advanced": "Gelişmiş", "option-hw-acceleration": "Donanım İvmelendirici", "option-hw-acceleration-description": "Donanım İvmelendiriciyi aktifleştirir, bu sayede Obsidian GPU'yu kullanarak daha akıcı bir şekilde çalışır.", "option-hw-acceleration-warning": "Eğer bu özelliği kapatırsanız uygulamanın performansı ciddi bir şekilde etkilenecektir.", "option-config-location": "Konfigürasyon dosyasını değiştir", "option-config-location-description": "Varsayılan dışında bir konfigürasyon klasörü kullanın. Klasör ismi nokta ile başlamalıdır.", "option-config-location-warning": "Konfigürasyon konumu ismi nokta ile başlayan geçerli bir klasör olmalıdır.", "label-license": "Lisans", "label-your-commercial-license-key": "Ticari lisans anahtarınız: \"{{key}}\".", "label-commercial-license-info": "{{seats}} kullanıcı için \"{{company}}\"'e kayıtlı.{{expiry}}'e kadar geçerli.", "label-validating-commercial-license": "Doğrulanıyor...", "label-invalid-commercial-license": "Lisans hatalı: ", "button-remove-commercial-license": "Kaldır", "option-catalyst": "Katalizör lisansı", "option-catalyst-desc": "Şu anda {{tier}} Catalyst lisansına sahipsiniz. Desteğiniz için teşekkürler!", "option-catalyst-desc-no-license": "Şu anda bir Catalyst lisansınız yok. Catalyst lisansı, Obsidian gelişimini desteklemek için tek seferlik bir bağış.", "label-app": "Uygulama" }, "account": { "name": "Hesap", "option-your-account": "Hesabınız", "option-your-account-desc": "Şu anda {{isim}} ile giriş yaptınız ({{email}}).", "option-your-account-desc-no-login": "Şu anda giriş yapmadınız. Bir hesap yalnızca Obsidian Sync, Obsidian Publish ve Catalyst insider derlemeleri için gereklidir.", "button-manage-settings": "Ayarları yönet", "label-insider": "Üye", "label-supporter": "Destekçi", "label-vip": "VIP", "button-upgrade-catalyst": "Yükseltme", "option-commercial-license": "Ticari lisans", "option-commercial-license-desc": "Obsidian'ı ticari amaçla kullanıyorsanız, ticari lisans almanız gerekebilir.", "button-purchase": "Satın alma", "button-log-out": "Çıkış Yap", "label-log-in": "Giriş Yap", "label-sign-up": "Kaydolun", "label-email": "Email", "placeholder-email": "Emailiniz...", "label-password": "Şifre", "placeholder-password": "Şifreniz...", "button-login": "Giriş", "message-empty-email": "E-posta boş olamaz.", "message-invalid-email": "E-posta geçersiz", "message-empty-password": "Şifre boş bırakalımaz.", "message-login-failed": "Giriş başarısız, lütfen e-posta ve şifrenizi kontrol edin.", "label-no-account": "Hesabınız yok mu? ", "link-sign-up-now": "Hemen kaydolun" }, "core-plugin": { "plugin-list": "Eklenti listesi", "option-search-plugin": "Temel eklentiler içinde ara", "option-search-plugin-description": "Eklentileri isim veya açıklamaya göre filtrele.", "placeholder-search-plugin": "Eklenti ara..." }, "third-party-plugin": { "name": "Topluluk Eklentisi", "option-restricted-mode": "Kısıtlı mod", "option-restricted-mode-description": "Kısıtlı Mod kapalı. Topluluk eklentilerini devre dışı bırakmak için açın.", "button-turn-on": "Açın", "option-browse-community-plugins": "Topluluk Eklentileri", "option-browse-community-plugins-description": "Topluluğumuzun yaptığı eklentilere göz at ve Yükle.", "button-browse": "Ara", "label-exit-restricted-mode": "Kısıtlı Moddan Çık", "label-exit-restricted-mode-description-1": "Topluluk eklentileri, yüklediğiniz diğer tüm yazılımlar gibi, potansiyel olarak veri bütünlüğü ve güvenlik sorunlarına neden olabilir.", "label-exit-restricted-mode-description-2": "Eklenti güvenliği bizim için önemlidir. Yaptığımız şey şu:", "label-exit-restricted-mode-description-3": "Çabalarımıza rağmen, bir topluluk eklentisinin hatalı davranma ihtimali hala küçük de olsa vardır.", "label-code-review": "İlk kod incelemesi", "label-code-review-desc": "Eklentiler, mağazada görünmeden önce ekibimiz tarafından ilk kod incelemesinden geçirilir.", "label-open-source": "Açık kaynak", "label-open-source-desc": "Çoğu eklenti GitHub'da açık kaynak kodludur, böylece kodu kendiniz inceleyebilirsiniz.", "label-peer-audit": "Eş denetim", "label-peer-audit-desc": "Birbirini kollayan geniş bir geliştirici topluluğumuz var.", "label-report-mechanism": "Rapor mekanizması", "label-report-mechanism-desc": "Kullanıcı raporu üzerine hatalı eklentileri takip ediyor ve kaldırıyoruz.", "label-exit-restricted-mode-disable-confirmation": "Topluluk eklentilerini etkinleştirmek için Kısıtlı Moddan çıkmak ister misiniz? Bunu yapmadan önce verilerinizi yedeklemenizi şiddetle tavsiye ederiz.", "label-learn-more": "Eklenti güvenliği hakkında daha fazla bilgi edinin", "button-turn-on-community-plugins": "Topluluk eklentilerini açın", "label-trust-author": "Bu kasanın yazarına güveniyor musunuz?", "label-trust-author-description-1": "Bu kasayı ilk kez açıyorsunuz ve bazı eklentilerle birlikte geliyor.", "label-trust-author-description-2": "Bu kasayı başka birinden edindiyseniz, kaynağı bilinmeyen eklentilerin güvenlik riskleri oluşturabileceğini lütfen unutmayın.", "label-trust-author-description-3": "Bu kasanın yazarına tam olarak güvenmiyorsanız, Kısıtlı Modda kalmanızı öneririz, böylece bu kasadaki eklentiler çalışmaz.", "button-enable-plugins": "Yazara güvenin ve eklentileri etkinleştirin", "button-dont-trust-author": "Kısıtlı Modda kasaya göz atın", "placeholder-community-plugins": "Eklenti Ara...", "msg-failed-load-plugins": "Topluluk eklentileri yüklenemedi.", "label-installed": "İndirildi", "button-install": "İndir", "button-enable": "Etkinleştir", "button-disable": "Devre dışı bırak", "button-copy-share-link": "Paylaşma linkini kopyala", "button-donate": "Bağış Yapın", "label-no-results-found": "Sonuç Bulunamadı.", "msg-failed-to-load-manifest": "Eklenti manifest dosyası yüklenemedi.", "label-version": "Versiyon: {{version}}", "label-currently-installed-version": " (mevcut sürüm: {{version}})", "label-by-author": "Sahibi ", "label-repository": "Depo: ", "label-last-update": "Son güncelleme: ", "tooltip-view-last-update": "En son yapılan güncellemeyi görüntüleyin", "label-unsupported": "Bu eklenti cihazınızı desteklemiyor.", "button-update": "Güncelle", "label-no-readme": "Bu eklenti bir beni oku dosyası sağlamadı.", "msg-installing-plugin": "\"{{name}}\" eklentisi indiriliyor...", "msg-failed-to-install-plugin": "Yüklenemedi \"{{name}}\".", "msg-successfully-installed-plugin": "Başarıyla yüklendi \"{{name}}\".", "label-installed-plugins": "Yüklü Eklentiler", "button-reload-plugins": "Eklentileri tekrardan yükle", "msg-reloaded-third-party-plugins": "Eklentiler tekrardan yüklendi", "label-uninstall": "Kaldır", "label-uninstall-plugin": "Eklentiyi kaldır", "label-uninstall-plugin-confirmation": "Bu eklentiyi silmek istediğine emin misin? Bu işlem eklenti klasörünü de siler.", "button-open-plugins-folder": "Eklentiler Klasörünü aç Aç", "button-check-for-updates": "Güncellemeleri Denetle", "button-update-all-plugins": "Hepsini Güncelle", "label-current-plugins": "Yüklü Eklentiler", "label-currently-installed": "Yüklenmiş {{count}} eklentiniz var.", "label-currently-installed_plural": "Yüklenmiş {{count}} eklentiniz var.", "label-debug-startup-time": "Hata ayıklama başlangıç zamanı", "label-debug-startup-time-description": "Uygulamayı başlatırken her eklentinin başlatılmasının ne kadar sürdüğünü gösteren bir mesaj gösterin.", "msg-no-updates-found": "Eklenti Güncellemesi Bulunamadı.", "msg-updates-found": "Güncellenecek {{count}} eklenti bulundu.", "msg-updates-found_plural": "Güncellenecek {{count}} eklenti bulundu.", "msg-update-plugin": "Güncelle {{version}}", "option-search-installed-plugin": "Kurulu eklentiler içinde ara", "option-search-installed-plugin-description": "Kurulu eklentileri isim veya açıklamaya göre filtrele.", "placeholder-search-installed-plugin": "Kurulu eklentiler içinde ara...", "show-installed-only": "Yalnızca kurulu olanları göster", "label-donate-modal-title": "{{name}} desteklemek için bağış yapın", "label-donate-modal-text1": "Eklenti geliştiricileri, tutkularıyla harika şeyler yapan topluluk gönüllüleridir. Bu eklentiyi faydalı buluyorsanız, lütfen geliştirilmesine fon sağlamayı düşünün.", "label-donate-modal-text2": "Katkınızın %100'ü eklenti geliştiricisine gidecektir; Obsidian herhangi bir kesinti yapmayacaktır. Seçtikleri fonlama platformu bir ücret talep edebilir.", "label-donate-modal-text3": "Cömert desteğiniz için teşekkürler!", "label-support-this-plugin": "Bu eklentiyi destekleyin:", "label-search-summary": "{{pluginCount}} eklenti gösteriliyor:", "label-by-popularity": "En çok indirilenler", "label-by-released": "Yakın zamanda yayınlandı", "label-by-updated": "Yakın zamanda güncellendi", "label-alphabetical": "Alfabetik", "label-last-updated": "{{time}} Güncellendi" }, "mobile-toolbar": { "name": "Mobil araç çubuğu", "option-configure-quick-action": "Mobil Hızlı Eylemleri ayarla", "option-configure-quick-action-description": "Yukarıdan aşağı çektiğinizde hangi eylemin gerçekleşeceğini belirleyin. Şu anda seçili olan eylem \"{{command}}\".", "button-configure": "Ayarla", "placeholder-select-quick-action": "Hızlı Eylem seç...", "manage-toolbar-options": "Araç çubuğu seçeneklerini yönet", "option-internal-link": "Dahili link ekle", "option-internal-embed": "Gömülü içerik ekle", "option-tag": "Etiket ekle", "option-heading": "Başlık durumunu değiştir", "option-strikethrough": "Üstünü çiz", "option-highlight": "Altını çiz", "option-code": "Kod formatına dönüştür", "option-blockquote": "Alıntıya dönüştür", "option-markdown-link": "Markdown link ekle", "option-bullet-list": "Noktalı listeye dönüştür", "option-numbered-list": "Sayılı listeye dönüştür", "option-indent-list": "Liste maddesini içe al", "option-unindent-list": "Liste maddesini dışa al", "option-undo": "Geri Al", "option-redo": "İleri Al", "option-move-caret-up": "İmleci yukarı kaydır", "option-move-caret-down": "İmleci aşağı kaydır", "option-move-caret-left": "İmleci sola kaydır", "option-move-caret-right": "İmleci sağa kaydır", "option-first-line": "İlk satıra git", "option-last-line": "Son satıra git", "option-toggle-keyboard": "Klavyeyi kapat", "option-configure-toolbar": "Mobil araç çubuğunu ayarla", "option-added-options": "Ekli seçenekler", "option-more-toolbar-options": "Daha fazla araç çubuğu seçeneği", "option-attach": "Eklenti yükle", "option-add-command": "Genel komut ekle", "option-add-command-description": "Araç çubuğuna eklemek için herhangi bir genel komutu seçin." } }, "editor": { "search": { "placeholder-find": "Bul", "placeholder-replace": "Değiştir", "label-previous": "Önceki", "label-next": "Sonraki", "label-all": "Hepsi", "label-exit-search": "Aramadan çık", "label-replace": "Değiştir", "label-replace-all": "Hepsini değiştir" }, "link-suggestion": { "label-type-hash": "Başlığa bağlantı kurmak için", "label-link-heading": "# yazın", "label-type-block": "^ karakteri", "label-link-block": "blokları birbirine bağlamak için", "label-type-pipe": "| karakteri", "label-change-display-text": "Metin görüntüsünü değiştirmek için", "label-no-match-found": "Eşleşme bulunamadı" }, "spellcheck": { "no-suggestion": "Öneri bulunamadı...", "add-to-dictionary": "Sözlüğe ekle" }, "menu": { "edit-link": "Bağlantıyı düzenle" }, "heading-suggestion": { "label-no-heading": "Başlık yok", "label-heading-level": "Başlık {{level}}" }, "print-modal": { "title": "PDF Olarak Dışa Aktar", "caption": "\"{{filename}}\" dosyasını aşağıdaki ayarlarla PDF olarak dışa aktar.", "setting-page-size": "Sayfa boyutu", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Resmi", "setting-page-size-letter": "Mektup", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Dosya adını başlık olarak ekleyin", "setting-landscape": "Yatay görünüm", "setting-margin": "Sayfa Sınırı", "setting-margin-default": "Varsayılan", "setting-margin-minimal": "Minimal", "setting-margin-none": "Hiçbiri", "setting-downscale-percent": "Küçültme oranı", "button-export-to-pdf": "PDF Olarak Dışa Aktar" }, "link-popover": { "tooltip-follow-link": "Linki takip et", "tooltip-open-link": "Linki aç", "tooltip-search-tag": "Etiket arama" } }, "interface": { "embed-cannot-find": "Bulunamıyor:", "embed-open-in-default-app-tooltip": "Varsayılan programda aç", "empty-sidebar": "Yan pencere boş, buraya bir pencere sürüklemeyi deneyin.", "sidebar-expand": "Göster", "sidebar-collapse": "Sakla", "msg-fail-to-save-file": "\"{{filepath}}\" dosyası kaydedilemedi. {{message}}.", "no-file": "Dosya yok", "msg-file-changed": "\"{{file}}\" başka bir yerde değiştirildi, değişiklikler otomatik olarak birleştiriliyor.", "switch-vault": "Başka bir kasa aç", "help": "Yardım", "settings": "Ayarlar", "drag-to-rearrange": "Düzenlemek için sürükle", "msg-switched-to-read": "Varsayılan görünüm modu okuma moduna çevrildi.", "msg-switched-to-edit": "Varsayılan gösterim şekli editör yapıldı.", "msg-upgrade-installer": "Bu özelliği kullanabilmek için lütfen web sitemizden yeni yükleyiciyi indirin.", "tooltip-restore-default-settings": "Varsayılan ayarları geri yükle", "label-copy": "Kopyala", "copied_generic": "Panonuza kopyalandı", "copied": "{{item}} kopyalandı", "url": "Url", "msg-open-file-through-uri": "\"{{path}}\" dosyası açıldı", "msg-file-not-found-through-uri": "\"{{name}}\" dosyası bulunamadı.", "delete-action-short-name": "Sil", "msg-indexing": "Obsidian kasanızı dizinliyor...\nBu sadece bir kez gerçekleşir.\nBu eylem tamamlanana kadar bazı özellikleri kullanamayabilirsiniz.", "msg-indexing-complete": "İndeksleme işlemi tamamlandı.", "msg-sandbox-vault": "Bu bir sandbox kasasıdır.\nBu kasada yaptığınız değişiklikler kaybolacaktır.", "label-enter-to-create": "Yaratmak için giriş yap", "label-update-available": "Güncellemeler mevcut", "label-debug-info": "Ayıklama bilgileri", "button-learn-more": "Daha fazlasını öğrenin", "button-not-now": "Daha sonra", "button-add": "Ekle", "button-manage": "Yönet", "label-new-tab": "Yeni sekme", "msg-tab-busy": "Bu sekme şu anda meşgul, lütfen daha sonra tekrar deneyin", "empty-state": { "no-file-open": "Açık dosya yok", "create-new-file": "Yeni dosya oluştur", "go-to-file": "Dosyaya git", "see-recent-files": "Son görüntülenen dosyalara git", "close": "Kapat", "unknown-pane-title": "Eklenti artık aktif değil", "unknown-pane-desc": "Bu pencereyi açan eklenti ({{type}}) mevcut değil" }, "menu": { "edit-view": "Değiştir (Yeni pencerede değiştirmek için Ctrl/Cmd+Tık)", "read-view": "Mevcut görünüm: okuma", "switch-to-edit-view": "Düzenlemek için tıklayın", "switch-to-read-view": "Okumak için tıklayın", "mod-click-open-new-tab": "{{key}}+Yeni sekmede açmak için tıklayın", "find": "Bul...", "replace": "Değiştir...", "edit": "Düzenle", "preview": "Önizle", "more-options": "Daha fazla seçenek", "close": "Kapat", "close-others": "Diğerlerini kapatın", "close-right": "Sekmeleri sağa doğru kapatın", "pin": "İğnele", "unpin": "İğneyi kaldır", "unlink-tab": "Sekmenin bağlantısını kaldır", "link-tab": "Sekme ile bağlantı...", "toggle-source-mode": "Kaynak modu", "toggle-reading-view": "Okuma görünümü", "delete-file": "Dosyayı sil", "create-file": "Bu dosyayı oluştur", "open-link": "Linki aç", "open-in-new-tab": "Yeni sekmede aç", "open-to-the-right": "Sağa doğru açın", "copy-url": "Linki kopyala", "close-current-tab": "Geçerli sekmeyi kapat", "copy": "Kopyala", "cut": "Kes", "paste": "Yapıştır", "paste-as-plain-text": "Düz metin olarak yapıştır", "select-all": "Tümünü seç", "rename-heading": "Başlığı yeniden adlandır...", "rename-blockid": "Bu blok kimliğini yeniden adlandırın...", "open-in-new-window": "Yeni pencerede aç", "move-to-new-window": "Yeni pencereye taşı", "open-in-browser": "Tarayıcıda aç", "stack-tabs": "Yığın sekmeleri", "unstack-tabs": "Sekmeleri çözün" }, "tooltip": { "click-to-expand": "Genişlet", "click-to-collapse": "Daralt", "alias": "Rumuz", "not-created-yet": "Henüz oluşturulmadı, oluşturmak için seçiniz" }, "start-screen": { "label-version": "Versiyon", "option-open-folder-as-vault": "Bir klasörü kasa olarak belirle", "option-open-folder-as-vault-description": "Markdown dosyalarının olduğu bir klasörü seç.", "option-create-vault": "Yeni kasa oluştur", "option-create-vault-description": "Bir klasörün altında yeni bir kasa oluştur.", "option-connect-obsidian-sync": "Obsidian Sync'e bağlanın", "option-connect-obsidian-sync-description": "Mevcut uzak kasa ile senkronize edilmiş bir kasa kurun.", "option-new-vault-name": "Kasa Adı", "option-new-vault-name-description": "Yeni kasan için bir isim seç.", "option-new-vault-location": "Gözat", "option-new-vault-location-description": "Yeni kasa için bir klasör seçin", "label-new-vault-location-preview": "Yeni kasanız içine yerleştirilecektir: ", "option-reveal-vault-in-explorer": "Sistem gezgininde kasayı göster", "option-reveal-vault-in-explorer-mac": "Finder'da kasayı göster", "option-rename-vault": "Kasayı yeniden adlandır...", "msg-error-rename-exists": "Bu isimde bir kasa zaten var.", "msg-error-nested": "Kasa kendi alt klasörüne taşınamıyor.", "msg-error-rename-open": "Şu anda açık olan bir kasa yeniden adlandırılamıyor.", "msg-rename-failed": "Kasa yeniden adlandırılamadı.", "msg-rename-success": "Kasa başarıyla yeniden adlandırıldı.", "option-move-vault": "Kasayı taşı...", "msg-move-select-dest": "Hedef klasörü seçin", "msg-error-move-exists": "Hedefte zaten bir kasa var.", "msg-error-move-open": "Şu anda açık olan bir kasa taşınamıyor.", "msg-move-failed": "Kasa taşınamadı.", "msg-move-success": "Kasa başarıyla taşındı.", "option-remove": "Listeden kaldır", "button-quick-start": "Hızlı başlangıç", "button-open": "Aç", "button-browse": "Tara", "button-connect": "Bağlan", "button-create-vault": "Oluştur", "button-back": "Geri", "msg-empty-vault-name": "Kasa adı boş olamaz", "msg-invalid-folder": "Geçerli bir klasör seç.", "msg-failed-to-create-vault": "Yeni kasa oluşturulamadı", "msg-failed-to-create-vault-at-location": "Burada yeni bir kasa oluşturamazsın. İzinleri kontrol et.", "msg-error-failed-to-open-vault": "Kasa açılırken bir hata meydana geldi.", "msg-error-remove-current-open-vault": "Açık bir Kasa'yı kaldıramazsın.", "option-get-help": "Yardım Alın", "option-user-email": "E-posta", "placeholder-your-email": "E-posta adresiniz...", "option-user-password": "Şifre", "placeholder-your-password": "Şifreniz...", "button-sign-in": "Oturum aç", "button-setup": "Kurulum", "option-connect-vault-desc": "Bu cihazda senkronize edilmiş bir kasa oluşturun.", "tooltip-own-vault": "Bu, size ait uzak bir kasadır.", "tooltip-shared-vault": "Bu, sizinle paylaşılan uzak bir kasa." }, "drag-and-drop": { "insert-link-here": "Linki buraya ekle", "insert-links-here": "Linkleri buraya ekle", "move-into-folder": "\"{{folder}}\" klasörüne taşı", "star-this-file": "Bu dosyayı yıldızla", "star-these-files": "Bu dosyaları yıldızla", "open-in-this-tab": "Bu sekmede aç", "open-as-tab": "Yeni sekme olarak aç" }, "window": { "maximize": "Genişlet", "minimize": "Küçült", "restore-down": "Eski hâline küçült", "close-window": "Pencereyi kapa", "go-back": "Geri git", "go-forward": "İleri git" }, "start-up": { "loading-obsidian": "Obsidian yükleniyor...", "obsidian-load-error": "Yüklenirken bir hata meydana geldi.", "button-reload-app": "Uygulamayı yeniden başlat", "button-reload-app-in-safe-mode": "Uygulamayı güvenli modda yeniden yükleyin", "button-open-another-vault": "Başka bir kasa aç", "loading-components": "Parçalar yükleniyor...", "loading-plugins": "Eklentiler yükleniyor...", "loading-vault": "Kasa yükleniyor...", "msg-failed-to-load-vault": "Kasa yükleme başarısız oldu: ", "loading-cache": "Önbellek yükleniyor...", "loading-workspace": "Çalışma alanı yükleniyor..." }, "mobile": { "action-import": "Kasanın içine aktar", "action-choose-file-to-insert": "Eklemek için bir dosya seçin", "action-insert-text-into-file": "Metni {{filename}} dosyasına ekle", "action-insert-link-into-file": "Linki {{filename}} dosyasına ekle", "msg-importing": "İçe aktarıyor...", "msg-import-success": "İçe aktarma başarılı", "msg-failed-to-import-file": "{{filename}} dosyasını içe aktarma başarısız oldu", "msg-back-again-to-exit": "Çıkmak için tekrar geri tuşuna basın." }, "help-screen": { "label-official-help-site": "Resmi yardım sitesi", "label-official-help-site-desc": "Birden çok dilde bulunan Obsidian'ın resmi yardım belgelerini okuyun.", "action-visit": "Ziyaret et", "label-discord-chat": "Discord Sohbet", "label-discord-chat-desc": "Discord, dünyanın dört bir yanından diğer deneyimli Obsidian kullanıcılarıyla sohbet etmek için en iyi yerdir.", "action-join": "Katıl", "label-forum": "Resmi forum", "label-forum-desc": "Birbirinize yardım edin, özellik istekleri gönderin, hataları bildirin ve bilgi yönetimi hakkında derinlemesine tartışmalar yapın.", "label-sandbox-vault": "Sandbox kasası", "label-sandbox-vault-desc": "Oynayın ve çeşitli özelliklerle denemeler yapın. Lütfen değişikliklerinizin kaydedilmeyeceğini unutmayın." } }, "commands": { "save-file": "Dosyayı kaydet", "follow-cursor-link": "İmlecin altındaki bağlantıyı takip et", "open-cursor-link-in-new-tab": "Yeni sekmede imlecin altındaki bağlantıyı aç", "open-cursor-link-to-the-right": "Sağdaki imlecin altındaki bağlantıyı aç", "open-cursor-link-in-new-window": "Yeni pencerede imlecin altındaki bağlantıyı aç", "navigate-tab-above": "Yukarıdaki sekme grubuna odaklan", "navigate-tab-below": "Aşağıdaki sekme grubuna odaklan", "navigate-tab-left": "Soldaki sekme grubuna odaklan", "navigate-tab-right": "Sağdaki sekme grubuna odaklan", "toggle-pin": "İğnele/İğneyi kaldır", "split-right": "Sağa Böl", "split-down": "Aşağı Böl", "toggle-stacked-tabs": "Yığılmış sekmeleri değiştir", "navigate-back": "Geri git", "navigate-forward": "İleri git", "use-dark-mode": "Karanlık moda gec", "use-light-mode": "Aydınlık moda gec", "change-theme": "Temayı değiştir", "search-current-file": "Geçerli dosyada ara", "search-replace-current-file": "Geçerli dosyada ara ve değiştir", "open-settings": "Ayarları aç", "open-help": "Yardımı aç", "toggle-edit": "Düzenleme/okuma modunu değiştir", "toggle-source-mode": "Canlı Önizleme/Kaynak modunu değiştir", "delete-current-file": "Dosyayı sil", "new-tab": "Yeni sekme", "close-all-tabs": "Tüm sekmeleri kapat", "close-active-tab": "Geçerli sekmeyi kapat", "close-other-tabs": "Diğer tüm sekmeleri kapat", "toggle-left-sidebar": "Sol yan pencereyi aç/kapat", "toggle-right-sidebar": "Sağ yan pencereyi aç/kapat", "toggle-default-new-tab-mode": "Yeni sekmeler için varsayılan modu değiştir", "focus-editor": "Editöre odaklan", "toggle-fold": "Satırı katla/göster", "fold-all": "Bütün başlıkları ve listeleri katla", "unfold-all": "Bütün başlıkları ve listeleri göster", "fold-more": "Daha fazla katla", "fold-less": "Daha az katlayın", "swap-line-up": "Üstteki satırla değiştir", "swap-line-down": "Alttaki satırla değiştir", "remove-heading": "Başlığı kaldır", "toggle-heading": "Başlık olarak ayarla {{level}}", "toggle-bold": "Seçileni koyu/normal yap", "toggle-italics": "Seçileni italik/normal yap", "toggle-highlight": "Seçilenin üstünü çiz/çizme", "toggle-comments": "Yorumları seç/seçme", "insert-link": "Linki ekle", "toggle-spellcheck": "İmlâ denetimini aç/kapat", "delete-paragraph": "Paragrafı sil", "toggle-checklist": "Yapılacaklar listesine dönüştür", "cycle-list-checklist": "Döngü maddesi/onay kutusu", "insert-callout": "Belirtme çizgisi ekle", "edit-file-title": "Dosya başlığını düzenle", "copy-path": "Dosya yolunu kopyala", "copy-url": "Obsidian URL'sini kopyala", "export-pdf": "PDF olarak dışa aktar", "reload": "Uygulamayı kaydetmeden yeniden yükle", "undo-close-tab": "Sekmeyi kapat'ı geri al", "context-menu": "Bağlam menüsünü işaretçinin altında göster", "show-debug-info": "Ayıklama bilgilerini göster", "always-on-top": "Pencereyi her zaman üstte aç/kapat", "zoom-in": "Yakınlaştır", "zoom-out": "Uzaklaştır", "reset-zoom": "Yakınlaştırmayı sıfırla", "toggle-preview": "Düzenleme/Önizleme moduna geç", "move-to-new-window": "Geçerli bölmeyi yeni pencereye taşı", "open-in-new-window": "Geçerli bölmeyi yeni pencerede aç", "rename-current-file": "Geçerli dosyayı yeniden adlandır" }, "dialogue": { "label-link-affected": "Bu eylem {{files}} dosyada {{links}} bağlantısını etkileyecek.", "msg-updated-links": "{{files}} dosyada {{links}} bağlantısı güncellendi.", "label-update-links": "Bağlantıları güncelle", "label-confirm-update-link-to-file": "Bu dosyayı gösteren dahili bağlantılar güncellensin mi?", "button-always-update": "Her zaman güncelle", "button-just-once": "Sadece bu sefer güncelle", "button-do-not-update": "Güncelleme yapma", "label-confirm-deletion": "\"{{filename}}\"'i silmek istediğinize emin misiniz?", "label-move-to-system-trash": "Sistem çöpüne taşınacak.", "label-move-to-vault-trash": "Obsidian çöpüne taşınacak. Kasanın içindeki \".trash\" gizli klasöründe.", "label-permanent-delete": "Dosya kalıcı olarak silinecek.", "label-non-empty-folder": "Bu klasör boş değil.", "label-delete-folder-warning": "Devam ederseniz, bu klasör içindeki bütün dosyalar silinecek.", "label-delete-folder": "Klasörü sil", "button-delete": "Sil", "button-delete-do-not-ask-again": "Sil ve bir daha sorma", "label-do-not-ask-again": "Bir daha sorma", "label-existing-backlink": "Bu notu gösteren {{links}} bağlantı var.", "label-existing-backlink_plural": "Şu anda bu nota işaret eden {{links}} tane var.", "label-delete-file": "Dosyayı sil", "button-manage": "Yönet", "button-cancel": "İptal", "button-done": "Tamam", "button-save": "Kaydet", "button-stop": "Durdur", "button-continue": "Devam et", "preparing-pdf": "PDF hazırlanıyor...", "label-rename-file": "Yeniden adlandır", "label-new-name": "Yeni Ad", "msg-rename-success": "Yeniden adlandırıldı.", "label-rename-heading": "Başlığı yeniden adlandır", "label-rename-blockid": "Blok kimliğini yeniden adlandır" }, "menu-items": { "new-file": "Yeni Not Oluştur", "new-file-to-the-right": "Sağa Yeni Not", "new-window": "Yeni Pencere", "open-switcher": "Hızlı Aç...", "open-vault": "Kasa Aç...", "close-tab": "Sekmeyi Kapat", "close-window": "Pencereyi Kapat", "find": "Ara", "replace": "Yer değiştir", "insert-callout": "Belirtme çizgisi ekle", "insert-markdown-link": "Markdown Bağlantı", "insert-wikilink": "Bağlantı", "set-heading": "Başlık {{level}}", "no-heading": "Başlık Yok", "insert-quote": "Alıntı", "export-pdf": "PDF'yi dışa Aktar", "toggle-bullet-list": "Madde İşaretli Liste", "toggle-numbered-list": "Numaralı Liste", "toggle-checklist": "Görev Listesi", "toggle-bold": "Kalın", "toggle-code": "Kod", "toggle-comment": "Yorum", "toggle-italics": "İtalik", "toggle-highlight": "Vurgula", "toggle-strikethrough": "Üstü Çizili", "toggle-comments": "Yorum", "fold-all": "Tümünü Katla", "unfold-all": "Tümünü Aç", "fold-more": "Daha Fazla Katla", "fold-less": "Daha Az Katlayın", "source-mode": "Kaynak Modu", "reading-view": "Okuma Görünümü", "show-debug-info": "Hata Ayıklama Bilgilerini Göster", "navigate-back": "Geri Git", "navigate-forward": "İleri git", "toggle-left-sidebar": "Sol Kenar Çubuğunu Değiştir", "toggle-right-sidebar": "Sağ Kenar Çubuğunu Değiştir", "split-right": "Sağa Böl", "split-down": "Aşağı Böl", "release-notes": "Sürüm Notları" }, "plugins": { "name": "Eklentiler", "file-explorer": { "name": "Dosya Gezgini", "desc": "Kasanızdaki tüm dosyaları gösterir.", "action-open": "Dosya gezginini aç", "action-show": "Dosya gezgininde göster", "action-create-note": "Yeni not oluştur", "action-create-note-to-the-right": "Sağ tarafa not oluşturun", "action-collapse-all": "Tümünü daralt", "action-expand-all": "Tümünü genişlet", "action-new-note": "Yeni not", "action-new-folder": "Yeni klasör", "action-change-sort": "Sıralamayı değiştir", "action-reveal-file": "Dosya gezgininde dosyayı göster", "action-reveal-active-file": "Dosya gezgininde aktif dosyayı göster ", "command-move-file": "Dosyayı başka bir klasöre taşı", "action-move-file": "Dosyayı şuraya taşı...", "action-move-folder": "Klasörü şuraya taşı...", "action-move-items": "{{count}} öğeyi şuraya taşı...", "prompt-type-folder": "Bir klasör yazın", "label-no-folders": "Klasörler bulunamadı", "instruction-navigate": "Yönlendirme", "instruction-move": "Taşıma", "instruction-dismiss": "Reddet", "label-sort-a-to-z": "İsme göre sırala (A'dan Z'ye)", "label-sort-z-to-a": "İsme göre sırala (Z'den A'ya)", "label-sort-new-to-old": "Değiştirilme zamanına göre sırala (yeniden eskiye)", "label-sort-old-to-new": "Değiştirilme zamanına göre sırala (eskiden yeniye)", "label-sort-created-old-to-new": "Oluşturma tarihi (eskiden yeniye)", "label-sort-created-new-to-old": "Oluşturma tarihi(yeniden eskiye)", "menu-opt-new-note": "Yeni not", "menu-opt-new-folder": "Yeni klasör", "menu-opt-set-attachment-folder": "Eklenti klasörü olarak kullan", "menu-opt-rename": "Yeniden adlandır", "menu-opt-delete": "Sil", "menu-opt-make-copy": "Kopyasını oluştur", "msg-invalid-characters": "Dosya adı bu karakterleri içeremez: ", "msg-unsafe-characters": "Bağlantılar, şu karakterlerden herhangi birini içeren dosya adlarıyla çalışmaz: ", "msg-file-already-exists": "Aynı isimde bir dosya zaten var", "msg-empty-file-name": "Dosya adı boş olamaz.", "msg-bad-dotfile": "Dosya adı bir nokta ile başlamamalıdır.", "tooltip-modified-time": "Son Düzenleme {{time}}", "tooltip-created-time": "Oluşturuldu {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Taşı", "label-untitled-file": "Başlıksız", "label-untitled-folder": "Başlıksız", "msg-set-attachment-folder": "Ekler bundan sonra \"{{path}}\" klasörüne kaydedilecek." }, "search": { "name": "Ara", "desc": "Bütün notlar içinde ara.", "action-open-search": "Tüm notları ara", "label-collapse-results": "Sonuçları gizle", "label-match-case": "Harf boyutunu kullan", "label-explain-search-term": "Aramayı anlat", "label-more-context": "Show more context", "prompt-start-search": "Aramak için yazın...", "label-match-text": "Uyan yazı: ", "label-match-regex": "Uyan regex: ", "label-match-exact-text": "Tam uyan yazı: ", "label-match-all": "Tamamına uydur: ", "label-match-any": "Birine uydur: ", "label-excluding": "Hariç: ", "label-case-sensitive": "Büyük-küçük harfe duyarlı", "label-case-insensitive": "Büyük-küçük harfe duyarsız", "label-match-file-path": "Dosya yolunu eşleştir: ", "label-match-file-name": "Dosya adını eşleştir: ", "label-match-content": "Dosya içeriğini eşleştir: ", "label-match-task": "Görevi eşleştir: ", "label-match-task-todo": "Görevi eşleştir (yapılacak): ", "label-match-task-done": "Görevi eşleştir (tamamlandı): ", "label-match-line": "Satırı eşleştir: ", "label-match-block": "Bloğu eşleştir: ", "label-match-section": "Bölümü eşleştir: ", "label-match-tag": "Etiketi eşleştir: ", "label-no-matches": "Eşleşme bulunamadı", "matches-with-count": "... ve {{count}} tane daha sonuç.", "matches-with-count_plural": "... ve {{count}} tane daha sonuç", "label-copy-search-results": "Arama sonuçlarını kopyala", "button-copy-results": "Sonuçları Kopyala", "msg-successfully-copied": "Sonuçlar Kopyalandı.", "option-show-path": "Dosya yolunu göster", "option-show-path-description": "Yalnızca dosya adı yerine dosyanın tam yolunu görüntüleyin.", "option-link-style": "Bağlantı sitili", "option-link-style-description": "İsteğe bağlı olarak her dosya sonucunu bir bağlantıya çevirin.", "option-choice-link-style-none": "Hiç biri", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Markdown Bağlantısı", "option-list-prefix": "Liste öneki", "option-list-prefix-description": "İsteğe bağlı olarak her dosya sonucuna bir liste öğesi öneki ekleyin.", "option-choice-list-style-none": "Hiç biri", "option-choice-list-style-dash": "Çizgi (-)", "option-choice-list-style-asterisk": "Yıldız (*)", "option-choice-list-style-numbered": "Numaralandırılmış", "tooltip-clear-search": "Aramayı Temizle", "label-search-options": "Arama Seçenekleri", "tooltip-read-more": "Daha fazlasını oku", "label-history": "Geçmiş", "tooltip-clear-history": "Arama Geçmişini Temizle", "label-path-option-description": "dosya yolunu eşleştir", "label-file-name-option-description": "dosya adını eşleştir", "label-tag-option-description": "Etiketleri Ara", "label-line-option-description": "Aynı satırdaki kelimelerde ara", "label-section-option-description": "Aynı başlık altındaki kelimelerde ara", "menu-opt-search-for": "Ara \"{{keyword}}\"" }, "quick-switcher": { "name": "Hızlı Geçiş", "desc": "Klavyenizi bırakmadan hızlıca başka bir dosyaya geçin. Ctrl/Cmd+O ile kullanın.", "short-name": "Geçici", "action-open": "Hızlı geçişi aç", "instruction-navigate": "geçmek için", "instruction-open": "açmak için", "instruction-open-in-new-tab": "yeni sekmede açmak için", "instruction-open-to-the-right": "sağa doğru açmak için", "instruction-create": "oluşturmak için", "instruction-dismiss": "vazgeçmek için", "label-no-note-create-new": "Not bulunamadı. Yeni bir tane oluşturmak için Enter.", "prompt-type-file-name": "Geçmek ya da oluşturmak için dosya adını yazın...", "label-enter-to-create": "Oluşturmak için Enter", "tooltip-not-created-yet": "Henüz oluşturulmadı, oluşturmak için seçin", "option-show-existing-only": "Sadece varolanları göster", "option-show-existing-only-description": "Henüz oluşturulmamış dosyalara bağlantıların gösterilip gösterilmeyeceği.", "option-show-attachments": "Ekleri göster", "option-show-attachments-desc": "Resimler, videolar ve PDF'ler gibi ek dosyalarını gösterin.", "option-show-all-file-types": "Tüm dosya tiplerini göster", "option-show-all-file-types-desc": "Obsidian'ın açamadığı dosyalar dahil tüm dosyaları göster. Dosya, o dosya türü için varsayılan uygulama ile açılacaktır." }, "graph-view": { "name": "Grafik Görünümü", "desc": "Hangi notların hangi notlar ile bağlantılı olduğunu bir grafik üzerinden görüntüleyin.", "action-open": "Grafik görünümünü aç", "action-open-local": "Yerel grafiği aç", "action-copy-screenshot": "Ekran görüntüsünü kopyala", "tab-title": "{{displayText}}'in grafiği", "label-filters": "Filtreler", "prompt-filter-nodes": "Klasörlerde ara...", "option-depth": "Derinlik", "option-depth-description": " Düğümlere bu sayıda bağlantıyı göster", "option-neighbor-links": "Komşu bağlantılar", "option-neighbor-links-description": "Aralarında bağlantı olan tüm bağlantıları göster", "option-forelinks": "Giden Bağlantılar", "option-forelinks-description": "Diğer dosyalara olan bağlantıları göster", "option-backlinks": "Gelen Bağlantılar", "option-backlinks-description": "Diğer dosyalardan bağlantıları göster", "option-show-tags": "Etiketler", "option-show-tags-description": "Etiketler, onları içeren dosyalara bağlanır", "option-show-attachments": "Ekler", "option-show-attachments-description": "Dosyaların içerdiği ekleri göster", "option-show-existing-files-only": "Yalnızca mevcut dosyalar", "option-show-existing-files-only-description": "İşaretlendiğinde, var olmayan dosyalara bağlantılar gösterilmez", "option-show-orphans": "Bağlantısızlar", "option-show-orphans-description": "Başka bir dosyaya bağlı olmayan dosyaları göster", "label-display": "Göster", "option-show-arrows": "Oklar", "option-show-arrows-description": "Yakınlaştırıldığında okları göster", "option-text-fade": "Metin solma eşiği", "option-node-size": "Düğüm Boyutu", "option-link-thickness": "Bağlantı kalınlığı", "label-forces": "Güçler", "option-center-force": "Merkez gücü", "option-link-force": "Bağlantı gücü", "option-link-distance": "Bağlantı mesafesi", "option-repel-force": "itme kuvveti", "tooltip-open-graph-settings": "Grafik ayarlarını aç", "msg-screenshot-copied": "Ekran görüntüsü kopyalandı.", "label-groups": "Gruplar", "placeholder-enter-query": "Sorgu girin...", "tooltip-delete-graph": "Grubu sil", "button-new-group": "Yeni grup", "tooltip-click-to-change-drag-to-reorder": "Rengi değiştirmek için tıkla\nGrubu yeniden düzenlemek için sürükle", "action-timelapse": "Hızlandırılmış animasyonunu başlat", "tooltip-start-timelapse-animation": "Hızlandırma nimasyonunu başlat", "button-animate-timelapse": "Hareketlendirmek" }, "backlinks": { "name": "Geri Bağlantılar", "desc": "Durum çubuğunda geri bağlantı sayısını göster.", "action-open": "Arka bağlantıları aç", "action-show": "Arka bağlantılar penceresini aç", "action-open-for-current": "Mevcut dosyanın geri bağlantılarını aç", "action-toggle-backlinks-in-document": "Belgedeki geri bağlantıları aç/kapat", "menu-opt-backlinks-in-document": "Belgedeki geri bağlantılar", "label-linked-mentions": "Bağlantılı bahsetmeler", "label-no-backlinks": "Geri bağlantı bulunamadı.", "label-unlinked-mentions": "Bağlantılı olmayan bahsetmeler", "label-show-search": "Arama filtrelerini göster", "label-link-button-text": "Bağlantı", "tab-title": "{{displayText}} için geri bağlantılar", "label-no-unlinked-mentions": "Bağlantısız bahsetme bulunamadı", "ellipsis": "...", "option-backlink-in-document": "Dökümandaki geri bağlantılar", "option-backlink-in-document-desc": "Yeni bölmeler açarken varsayılan olarak belgede geri bağlantıları göster." }, "outgoing-links": { "name": "Giden bağlantılar", "desc": "Giden bağlantıları gösterin ve mevcut nottaki diğer notların bağlantısız bahsetmelerini tespit edin.", "action-open": "Giden bağlantıları aç", "action-show": "Giden bağlantılar penceresini göster", "action-open-for-current": "Mevcut dosya için giden bağlantıları aç", "tab-title": "{{displayText}}'dan giden bağlantılar", "label-links": "Bağlantılar", "label-no-links": "Bağlantı bulunamadı.", "label-unlinked-mentions": "Bağlantısız bahsetmeler", "tooltip-link-file": "Bu dosyayı bağla", "tooltip-not-created": "Henüz oluşturulmadı" }, "tag-pane": { "name": "Etiket paneli", "desc": "Tüm etiketlerinizi ve oluşum sayılarıyla birlikte görüntüler.", "action-show": "Etiket panelini göster", "label-no-tags": "Etiket bulunamadı.", "label-sort-by-name-a-to-z": "Etiketler (A'dan Z'ye)", "label-sort-by-name-z-to-a": "Etiketler (Z'den to A'ya)", "label-sort-by-frequency-high-to-low": "Sıklık (yüksekten düşüğe)", "label-sort-by-frequency-low-to-high": "Sıklık (düşükten yükseğe)", "action-show-nested-tags": "Alt etiketleri göster", "action-collapse-all": "Tümünü daralt", "action-expand-all": "Tümünü genişlet" }, "page-preview": { "name": "Sayfa Önizlemesi", "desc": "Dahili bir bağlantı üzerinde gezinirken bir notu önizleyin. Editör modunda Ctrl/Cmd + fareyle üzerine gelin.", "label-empty-note": "\"{{linktext}}\" henüz oluşturulmadı. Oluşturmak için tıklayın.", "label-source-editor": "Düzenleyici", "label-source-preview": "Ön İzleme", "label-source-search": "Arama, Arka bağlantılar, Ve giden bağlantılar", "label-require-mod": "Fareyle üzerine gelindiğinde sayfa önizlemesini tetiklemek için {{key}} gerektir" }, "starred": { "name": "Yıldızlanmış", "desc": "Sık kullanılan dosyaları ve aramaları yıldızla.", "action-show": "Yıldızlanmışlar bölümünü göster", "action-toggle": "Şu anki dosya için yıldızla/yıldızı kaldır", "action-toggle-search": "Bu aramayı yıldızla/yıldızı kaldır", "action-star": "Yıldız", "action-unstar": "Yıldızı kaldır", "menu-opt-remove": "Kaldır", "msg-successfully-starred": "Yıldız eklendi {{type}} \"{{title}}\".", "msg-removed-starred": "Yıldız kaldırıldı {{type}} \"{{title}}\".", "msg-cannot-find-path": "Dosya bulunamadı: \"{{path}}\"." }, "custom-css": { "name": "Özel CSS", "desc": "Kasadan \"obsidian.css\" okur ve uygular.", "setting-community-themes": "Topluluk temaları", "msg-fetching-themes": "Topluluk tema verileri getiriliyor...", "prompt-filter": "Filtrele...", "label-dark-theme-only": "Sadece karanlık temalar", "label-light-theme-only": "Sadece aydınlık temalar", "label-use": "Kullan", "label-stop-use": "Bu temayı kullanmayı bırakın", "label-install-and-use": "Kurun ve kullanın", "label-update": "Güncelle", "label-no-readme": "Bu tema bir BENİOKU dosyası sağlamadı.", "tooltip-remove-theme": "Temayı sil", "label-visit-on-github": "GitHub'ı ziyaret et", "msg-load-error": "Topluluk temaları yüklenemedi, lütfen ağınızı kontrol edin.", "msg-now-using-theme": "Artık CSS temanızı {{title}} olarak kullanıyorsunuz.", "msg-deleted-theme": "{{title}} teması silindi.", "msg-updated-theme": "{{title}} teması güncellendi.", "label-installed": "Kurulmuş", "label-legacy": "Miras", "button-update-all-themes": "Tümünü güncelle", "msg-failed-load-themes": "Topluluk temaları yüklenemedi.", "msg-no-updates-found": "Tema güncellemesi bulunamadı.", "msg-updates-found": "Güncellenecek {{count}} teması bulundu.", "msg-updates-found_plural": "Güncellenecek {{count}} temaları bulundu.", "msg-failed-to-install-theme": "\"{{name}}\" teması yüklenemedi.", "msg-successfully-installed-theme": "\"{{name}}\" teması başarıyla yüklendi.", "msg-installing-theme": "\"{{name}}\" temasını yükle...", "label-search-summary": "{{themeCount}} gösteriliyor:", "label-update-available": "Güncelleme mevcut" }, "command-palette": { "name": "Komut Paleti", "desc": "Çağırmak için bir komut yazın. Kullanıcı arayüzünü kullanmanıza veya kısayolu hatırlamanıza gerek yok.", "action-open": "Komut paletini aç", "instruction-navigate": "Yönlendirmek", "instruction-use": "Kullanmak", "instruction-dismiss": "Vazgeçmek", "label-no-commands": "Komut bulunamadı.", "prompt-type-command": "Bir komut yazın...", "label-pinned-commands": "Sabitlenmiş komutlar", "option-add-new-pin": "Yeni komut sabitle", "option-add-new-pin-description": "Sabitlenmiş komutlar, arama sorgusu olmadığında tüm komutların başında görünür." }, "markdown-format-importer": { "name": "Markdown formatı içe aktarıcı", "desc": "Markdown'ı diğer uygulamalardan Obsidian formatına dönüştürün.", "action-open": "Markdown yükleyicisini aç", "option-roam-tag-fixer": "Roam Research etiket düzelticisi", "option-roam-tag-fixer-description": "\"#tag\" ve \"#[[tag]]\" öğelerini \"[[tag]]\" biçimine dönüştürür.", "option-roam-highlight-fixer": "Roam Research vurgulayıcı düzeltici", "option-roam-highlight-fixer-description": "\"^^highlight^^\" ifadesini \"==highlight==\" dönüştürür.", "option-roam-todo-converter": "Roam Research TODO dönüştürücüsü", "option-roam-todo-converter-description": "\"{{[[TODO]]}}\" öğesini \"[ ]\" biçimine dönüştürür.", "option-bear-highlight-fixer": "Bear vurgu düzeltici", "option-bear-highlight-fixer-description": " \"::highlight::\" ifadesini \"==highlight==\" dönüştürür.", "zettelkasten-link-fixer": "Zettelkasten bağlantı düzeltici", "zettelkasten-link-fixer-description": "\"[[UID]]\" bağlantılarını tamamen \"[[UID Dosya Adı]]\" biçimine dönüştürür.", "zettelkasten-link-beautifier": "Zettelkasten bağlantı güzelleştirici", "zettelkasten-link-beautifier-description": "\"[[UID]]\" bağlantılarını düzeltir ve ayrıca onları \"[[UID Dosya Adı|Dosya Adı]]\" biçiminde güzelleştirir.", "msg-all-files-warning": "Uyarı: İçe aktarıcı, yalnızca geçerli dosyayı değil, kasanızdaki tüm dosyaları dönüştürür.", "msg-override-files-warning": "Dosyalarınızın üzerine yazılacak. Dönüştürmeyi başlatmadan önce tüm dosyalarınızı yedekleyin.", "label-start-conversion": "Dönüştürmeyi Başlat", "label-stop": "Dur", "label-go-back": "Geri git", "label-done": "Tamamlandı", "label-processing": "İşleniyor...", "label-cancelling": "İptal ediliyor...", "label-finished": "Bitti!", "label-processed-files": "İşlenmiş Dosyalar", "label-modified-files": "Değiştirilmiş dosyalar", "label-total-replacements": "Toplam değiştirme" }, "daily-notes": { "name": "Günlük Notlar", "desc": "Günün notunu aç, yoksa yenisini oluştur.", "short-name": "Bugün", "action-open": "Bugünün Notunu Aç", "action-open-previous": "Önceki Günün Notu", "action-open-next": "Sonraki Günün Notu", "action-insert-text": "Günün notu için metin girin", "action-insert-link": "Günün notu için bağlantı girin", "msg-fail-format": "Günlük not oluşturulamadı. \"{{format}}\" geçerli bir biçim değil.", "msg-fail-folder": "Günlük not oluşturulamadı. \"{{folderOption}}\" klasörü bulunamadı.", "msg-fail-template-file": "Günlük not oluşturulamadı. Şablon dosyası \"{{template}}\" bulunamadı.", "msg-no-previous": "Bundan öncesinde günlük not yok", "msg-no-next": "Bundan sonrasında günlük not yok.", "option-date-format": "Tarih biçimi", "label-refer-to-syntax": "Daha fazla sözdizimi için bkz. ", "label-syntax-link": "biçim referansı", "label-syntax-live-preview": "İşte nasıl görüneceği: ", "option-new-file-location": "Yeni dosya konumu", "option-new-file-location-description": "Yeni günlük notu oluşturmak için klasör yolu.", "option-template": "Şablon dosya konumu", "option-template-description": "Şablon olarak kullanılacak dosya yolu.", "option-open-on-start": "Başlangıçta günlük notu aç", "option-open-on-start-description": "Bu kasayı her açtığınızda günlük notunuzu otomatik olarak açın." }, "unique-note-creator": { "name": "Benzersiz not oluşturucu", "desc": "Zettelkasten veya slip box gibi iş akışları için benzersiz zaman damgası önekleriyle notlar oluşturun.", "short-name": "Benzersiz", "action-create-note": "Yeni benzersiz not oluştur", "option-new-file-location": "Yeni dosya konumu", "option-new-file-location-description": "Yeni benzersiz notu oluşturmak için klasör yolu.", "msg-folder-not-found": "Benzersiz not oluşturulamadı. \"{{folderOption}}\" klasörü bulunamadı.", "option-template-file": "Şablon dosyası konumu", "option-template-file-description": "Şablon olarak kullanılacak dosya yolu.", "option-template-file-placeholder": "Örnek: klasör1/not", "option-id-format": "Benzersiz önek biçimi", "msg-template-file-not-found": "Benzersiz not oluşturulamadı. Şablon dosyası \"{{template}}\" bulunamadı.", "msg-failed-to-generate": "\"{{format}}\" biçiminde benzersiz bir not oluşturulamadı." }, "random-note": { "name": "Rastgele Not", "desc": "Rastgele bir not aç. Keşfetmek ve Gözden geçirmek için faydalı.", "short-name": "Rastgele", "action-open": "Rastgele not oluştur" }, "outline": { "name": "Anahat", "desc": "Geçerli dosyanın veya bağlantılı pencerenin ana hatlarını görüntüler.", "action-open": "Anahattı aç", "action-show": "Anahat bölmesini göster", "action-open-for-current": "Geçerli dosyanın ana hatlarını aç", "tab-title": "{{displayText}} ana hatları", "label-no-headings": "Başlık bulunamadı." }, "word-count": { "name": "Kelime sayısı", "desc": "Durum barında kelime sayısını göster." }, "slides": { "name": "Slaytlar", "desc": "Markdown aracılığı ile sunum. Slaytları ayırmak için \"---\" kullanın.", "action-start": "Sunuma başla" }, "audio-recorder": { "name": "Ses kaydedicisi", "desc": "Sesi kaydet ve dosyayı ek olarak kaydedin.", "action-start": "Ses kaydetmeye başla", "action-stop": "Ses kaydını durdur", "action-toggle": "Kaydı başlat/durdur", "msg-access-denied": "Mikrofon erişimi reddedildi, lütfen tercih bölmesinden etkinleştirin.", "msg-pending-grant": "Lütfen kaydı başlatmak için mikrofona izin verin.", "msg-no-microphone": "Mikrofon bağlı değil." }, "open-with-default-app": { "name": "Varsayılan uygulamada aç", "desc": "Geçerli dosya için varsayılan uygulama seçme butonu", "action-open-file": "Varsayılan uygulamada aç", "action-open-file-mobile": "Paylaş", "action-show-in-folder": "Klasörde göster", "action-show-in-folder-mac": "Finder'da Göster" }, "templates": { "name": "Şablonlar", "desc": "Şablon dosyalarının bulunduğu bir klasörden şablon içeriği ekleyin.", "action-insert": "Şablon ekle", "action-insert-current-date": "Geçerli tarihi ekle", "action-insert-current-time": "Geçerli saati ekle", "option-template-folder-location": "Şablon klasör konumu", "option-template-folder-location-description": "Bu klasördeki dosyalar şablon olarak mevcut olacak.", "option-template-date-format": "Tarih biçimi", "option-template-date-format-description": "Şablon dosyasındaki {{date}} değeri bu değerle değiştirilecektir.", "option-template-date-format-description2": "Biçimi bir kez geçersiz kılmak için {{tarih:YYYY-MM-DD}} öğesini de kullanabilirsiniz.", "option-template-time-format": "Zaman formatı", "option-template-time-format-description": "Şablon dosyasındaki {{time}} bu değerle değiştirilecektir.", "option-template-time-format-description2": "Biçimi bir kez geçersiz kılmak için {{time:HH:mm}} öğesini de kullanabilirsiniz.", "instruction-navigate": "Yönlendir", "instruction-insert": "Şablon ekle", "instruction-dismiss": "Vazgeç", "msg-no-templates-found": "Şablon bulunamadı", "msg-fail-invalid-folder": "Şablonlar listelenemedi. Şablon klasörü geçersiz.", "msg-fail-folder-not-found": "Şablonlar listelenemedi. \"{{folderOption}}\" klasörü bulunamadı.", "prompt-type-template": "Bir şablonun adını yazın..." }, "translucency": { "name": "yarı saydam pencere", "desc": "Derinlik hissini geliştirmek için yarı saydamlık efektini açın. En iyi karanlık modda kullanılır. Linux'ta desteklenmez." }, "slash-command": { "name": "Eğik çizgi komutları", "desc": "Eğik çizgi yazarak düzenleyicide eğik çizgi komutlarını tetikleme özelliğini etkinleştirin." }, "editor-status": { "name": "Düzenleyici durumu", "desc": "Ageçerli düzenleyici modunu göstermek ve değiştirmek için bir durum çubuğu öğesi ekler.", "read": "Okuma", "edit-source": "Kaynak modu", "edit-live-preview": "Canlı önizleme" }, "publish": { "name": "Yayınla", "desc": "Notlarınızı Obsidian Publish aracılığıyla yayınlayın.", "action-publish-changes": "Değişiklikleri yayınla", "label-no-internet-access": "Değişiklikleri yayınlamak için internete erişmeniz gerekir.", "label-publish-service-description": "Obsidian Publish, notlarınızı doğrudan Obsidian'dan çevrimiçi olarak yayınlamanıza izin veren ek ücretli bir hizmettir.", "label-please-login": "Yayınlamaya başlamak için lütfen giriş yapın veya yeni bir Obsidian hesabı oluşturun.", "label-no-publish-subscription": "Henüz bir Obsidian Publish aboneliğiniz yok.", "button-purchase": "Satın al", "label-manage-sites": "Siteleri yönet", "label-no-sites": "Hiç siteniz yok.", "button-choose": "Seç", "tooltip-edit-site-id": "Site ID'sini düzenle", "tooltip-delete-site": "Siteyi sil", "label-delete-site-confirmation": "Bu siteyi silmek istediğinizden emin misiniz?", "label-delete-site-details": "Bu, sitenizi hemen ve kalıcı olarak siler.", "label-confirm-delete-site": "\"{{site}}\" sitesini silmeyi onaylayın", "option-site-id": "Site ID", "option-site-id-description": "Siteniz https://publish.obsidian.md/{site id} adresinde olacaktır. Bunu daha sonra değiştirebilirsiniz. Yalnızca küçük harflere, sayılara ve tirelere izin verilir.", "option-site-id-placeholder": "Site ID'si seçin", "button-create": "Oluştur", "msg-invalid-site-id": "Site kimliği yalnızca küçük harfler, sayılar ve kısa çizgiler içerebilir.", "msg-site-id-in-use": "Bu site kimliği kullanımda, lütfen başka bir tane deneyin.", "msg-create-site-issue": "Sitenizi oluştururken bu bir sorun oluştu.", "label-site-options": "Site seçenekleri", "option-site-general": "Genel", "option-site-components": "Bileşenler", "option-site-appearance": "Görünüm", "option-site-reading-experience": "Okuma deneyimi", "option-site-misc": "Diğer site ayarları", "option-site-name": "Site adı", "option-site-name-description": "Yayınlanan sitenizin adı. Sitenizin sayfa başlığında görünecektir.", "option-site-name-placeholder": "Sitenizin adı", "option-home-page-file": "Ana sayfa dosyası", "option-home-page-file-description": "Kullanıcının yayınladığınız siteye geldiğinde gördüğü ilk sayfa", "option-home-page-file-placeholder": "Yayınlanmış bir dosya seçin", "option-logo": "Logo", "option-logo-description": "Site logonuz olarak bir resim dosyası seçin.", "option-logo-placeholder": "Kasanıza yüklenen herhangi bir resim...", "option-site-collaboration": "Site işbirliği", "option-site-collaboration-desc": "Bu site için ortak çalışanları yönetin.", "button-manage-collaborators": "Yönetmek", "option-theme": "Tema", "option-theme-description": "Siteniz için varsayılan renk düzenini seçin.", "option-theme-system": "Sisteme uyum sağlayın", "option-show-theme-toggle": "Açık / Koyu geçiş", "option-show-theme-toggle-description": "Ziyaretçinin Açık ve Koyu tema arasında kendi başına geçiş yapmasına izin verin.", "option-show-navigation": "Navigasyonu göster", "option-show-navigation-description": "Yayınlanan sitenizin sol tarafında yayınlanan tüm sayfaların bir listesini görüntüleyin.", "option-show-search": "Arama çubuğunu göster", "option-show-search-description": "Ziyaretçilerin sitenizdeki sayfaları ve başlıkları aramasını sağlayan gezinmenin üst kısmında bir arama çubuğu görüntüleyin.", "option-show-graph": "Grafik görünümünü göster", "option-show-graph-description": "Her sayfada küçük bir yerel grafik görüntüleyin.", "option-show-outline": "İçindekileri göster", "option-show-outline-description": "Her sayfada başlıkların ana hatlarını görüntüleyin.", "option-show-backlinks": "Geri bağlantıları göster", "option-show-backlinks-description": "Her sayfanın sonunda geri bağlantı bölümünü gösterin.", "option-sliding-window-mode": "Sürgülü pencereleri kullanın", "option-sliding-window-mode-description": "Sayfaları sağdaki yeni bölmelerde açın. Bölmeler arasında yatay olarak kaydırmaya izin verir.", "option-hover-preview-file": "Fareyle üzerine gelindiğinde önizlemesini göster", "option-hover-preview-file-description": "Bağlantılar üzerinde gezinirken sayfa önizlemesini görüntüle.", "option-hide-title": "Sayfa başlığını gizle", "option-hide-title-description": "Sayfa başlığı başlığını gizleyin. Her sayfanın başında kendi başlıklarınız olduğunda kullanışlıdır.", "option-readable-line-length": "Okunabilir satır uzunluğu", "option-readable-line-length-description": "Maksimum satır uzunluğunu sınırlayın. Ekrana daha az içerik sığdırır, ancak uzun paragrafları daha okunaklı hale getirir.", "option-site-password": "Şifreler", "option-site-password-description": "Şifrelerle sitenize erişimi kısıtlayın.", "option-google-analytics": "Google Analytics takip kodu", "option-google-analytics-description": "Siteniz için Google Analytics'i yapılandırın. Yalnızca özel alan URL'nizden gelen ziyaretçiler için kullanılabilir. Lütfen önce yerel yasalarınızı ve düzenlemelerinizi kontrol edin.", "button-manage-passwords": "Yönet", "button-save-site-settings": "Site ayarlarını kaydet", "msg-updated-options": "Siteniz için güncellenmiş seçenekler.", "button-go-back": "Geri", "label-publishing-to": "Şuraya yayınlanıyor:", "tooltip-switch-site": "Siteyi değiştir", "button-add-linked": "Bağlantılı ekle", "tooltip-add-linked": "Şu anda seçili öğelerle bağlantılı tüm dosyaları ekle", "msg-added-linked-files": "{{count}} bağlantılı dosya eklendi.", "msg-added-linked-files_plural": "{{count}} bağlantılı dosya eklendi.", "tooltip-open-site-options": "Site seçeneklerini değiştir", "label-no-changes-detected": "Herhangi bir değişiklik tespit edilmedi.", "label-changed-files-to-be-published": "Değişiklikler", "label-unchanged-files-already-published": "Değiştirilmedi (silmek için seçin)", "label-file-selected": "seçilmiş", "button-select-all-files": "Hepsini seç", "button-deselect-all-files": "Hepsini kaldır", "label-new-files-to-be-published": "Yeni", "button-publish": "Yayınla", "msg-no-permission-to-publish-to-site": "Geçerli sitede yayınlama izniniz yok.", "msg-select-at-least-one-file": "Lütfen en az bir dosya seçin.", "label-upload-changes": "Değişiklikleri yükle", "button-done": "Tamamlandı", "button-stop": "Dur", "label-status-uploading": "Yükleniyor", "label-status-to-publish": "Yayımla", "label-status-to-delete": "Sil", "label-status-published": "Yayınlandı", "label-status-deleted": "Silindi", "label-status-failed": "Başarısız oldu", "label-status-cancelled": "İptal edildi", "button-change": "Değiştir", "label-clear-cache": "Değişikliklerin sitenizde görünmesi birkaç dakika kadar sürer. En son değişikliklerinizi görmüyorsanız, tarayıcınızın önbelleğini temizlemeyi deneyin.", "label-visit-site": "Sitenizi buradan ziyaret edebilirsiniz: ", "msg-something-went-wrong": "Bir şeyler yanlış gitti. Ayrıntılar için lütfen geliştirici konsolunu kontrol edin.", "msg-network-error": "Bir ağ hatası oluştu. ", "label-manage-passwords": "Şifreleri yönet", "label-add-password": "Şifre Ekle", "action-new-password": "Yeni şifre", "label-no-password": "Sitenizin şu anda herhangi bir şifresi yok. Herkes ziyaret edebilir.", "label-have-password": "Siteniz şifre korumalıdır. Birden fazla parolanız varsa, ziyaretçiler bunlardan herhangi birini girerek sitenize erişebilir.", "option-password-name": "Şifre", "option-password-desc": "Parolanızın karma güvenlik protokollü hali güvenli bir şekilde saklanacaktır. Parola ayarlandıktan sonra düz metin olarak gösterilemez.", "option-password-placeholder": "Sizin şifreniz", "option-nickname-name": "takma ad (isteğe bağlı)", "option-nickname-desc": "Kendinize parolanın ne veya kime ait olduğunu hatırlatmak için bir takma ad belirleyin.", "action-add-password": "Bu şifreyi ekle", "label-untitled-password": "Adsız şifre", "label-password-created-time": "Oluşturuldu {{time}}", "msg-added-new-password": "Yeni şifre eklendi.", "option-custom-domain": "Özel alan adı", "option-custom-domain-desc": "https://publish.obsidian.md/{site id} URL'si yerine kendi alan adınızı kullanın.", "option-noindex": "Arama motoru indekslemeye izin verme", "option-noindex-desc": "Arama motorlarının sitenizi dizine eklemesini önleyin.", "button-configure": "Yapılandırma", "label-configure-custom-domain": "Özel alan adını yapılandırın", "option-custom-url-name": "Özel URL", "option-custom-url-desc": "Sitenizin bulunacağı URL.", "option-custom-url-placeholder": "www.sizinsiteadınız.com", "option-custom-url-redirect": "Özel alan adınıza yönlendirin", "option-custom-url-redirect-desc": "Publish.obsidian.md/id adresindeki ziyaretçileri özel alan adınıza yönlendirin.", "button-update-custom-domain": "Alan ayarını güncelle", "label-custom-domain-instructions": "Daha fazla bilgi için lütfen yardım sitemizdeki {{link}} sayfamıza bakın.", "label-custom-domain-link-name": "özel alan adı kurulum kılavuzu", "label-site-usage": "{{site}} limitinizin {{limit}} kadar alanını kullanıyorsunuz.", "button-add-more-sites": "Daha fazla site satın alın", "label-no-sites-bought": "Herhangi bir site satın almadınız.", "button-get-site": "Bir site alın", "label-manage-sharing": "\"{{name}}\" için paylaşımı yönetin", "label-sharing-with-users": "Bu site şu anda aşağıdaki kişilerle paylaşılmaktadır.", "label-not-sharing": "Bu site şu anda kimseyle paylaşılmamaktadır.", "label-invite-pending": "Beklemede", "tooltip-remove-user": "Kullanıcıyı kaldır", "option-invite-user": "Kullanıcı davet et", "placeholder-invite-user": "E-postalarını girin...", "error-email-must-be-valid": "Birini davet etmek için lütfen geçerli bir e-posta girin.", "msg-enable-publish-plugin": "Siteleri görüntülemek için lütfen Ayarlar -> Çekirdek eklentiler bölümünden Yayınla çekirdek eklentisini etkinleştirin.", "label-your-sites": "Siteleriniz", "label-sites-shared-with-you": "Sizinle paylaşılan siteler", "tooltip-leave-site-sharing": "Bu sitede işbirliği yapmayı bırakın", "label-leave-site-confirmation": "Durdurma sahası işbirliğini onaylayın", "label-leave-site-confirmation-details": "Bu işlem, bu siteyi sizinle paylaşılan siteler listesinden kaldıracaktır. Bu işlem geri alınamaz.", "label-leave-site-confirmation-details-2": "Bu sitede tekrar işbirliği yapmak istiyorsanız lütfen sitenin sahibiyle iletişime geçin.", "button-leave": "Ayrılmak", "label-compare-with-live": "Canlı versiyon ile karşılaştırın", "button-use-live-version": "Canlı sürümü kullan", "label-confirm-override": "Geçersiz kılınan yerel sürümü onayla", "label-confirm-override-1": "Yerel sürümü geçersiz kılmak istediğinizden emin misiniz?", "label-confirm-override-2": "Canlı sürüm kullanılacak ve yerel sürümünüz atılacaktır. Gerekirse lütfen yedekleme yapın.", "button-proceed": "İlerlemek", "message-successfully-used-live-version": "Yerel sürümünüzü geçersiz kılmak için canlı sürüm başarıyla kullandı.", "label-open-file": "Dosyayı aç", "tooltip-manage-publish-filters": "Yayınlama filtrelerini yönetme", "option-included-folders": "Dahil edilen klasörler", "option-included-folders-desc": "Yayımlanacak değişiklikleri gözden geçirdiğinizde bu klasörlerin altındaki dosyalar otomatik olarak seçilir.", "option-currently-included-folders": " Bu klasörler şu anda dahil edilmiştir:", "option-excluded-folders": "Hariç tutulan klasörler", "option-excluded-folders-desc": "Yayımlanacak değişiklikleri gözden geçirdiğinizde bu klasörlerin altındaki dosyalar görünmez. Bu ayar, yukarıdaki klasörlere göre önceliklidir.", "label-number-of-folders-included": "Obsidian Publish şu anda {{folders}} içeriyor.", "label-number-of-folders-excluded": "Obsidian Publish şu anda {{folders}} hariç tutuluyor.", "label-manage-included-folders": "Dahil edilen klasörleri yönetme", "label-manage-excluded-folders": "Hariç tutulan klasörleri yönetme", "label-add-included-folder": "Bir klasör ekle", "label-add-included-folder-desc": "Hem mevcut klasörleri hem de henüz oluşturulmamış klasörleri ekleyebilirsiniz.", "tooltip-contact-support": "Destek ekibiyle iletişime geçin" }, "workspaces": { "name": "Çalışma Alanları", "desc": "Çalışma alanı düzenini kaydedin ve yükleyin.", "action-load-layout": "Çalışma alanı düzenini yükle", "action-manage-layouts": "Çalışma alanı düzenlerini yönetme", "action-save-and-load-layout": "Başka bir düzeni kaydedin ve yükleyin", "placeholder-save-current-layout-as": "Geçerli çalışma alanı düzenini farklı kaydet...", "button-save": "Kaydet", "button-load": "Yükle", "tooltip-delete-layout": "Düzeni sil", "msg-delete-layout-success": "Düzen başarıyla silindi.", "msg-enter-name": "Lütfen yeni düzen için bir ad girin.", "msg-save-layout-success": "Düzen başarıyla kaydedildi.", "label-no-layout-found": "Kaydedilmiş düzen bulunamadı.", "placeholder-type-to-search-layouts": "Düzen adını yazın..." }, "sync": { "name": "Senkronizasyon", "desc": "Dosyalarınızı Obsidian Sync ile senkronize edin.", "action-view-version-history": "Sürüm geçmişini görüntüle", "label-load-more": "Daha fazla göster", "label-show-diff": "Farkı göster", "label-copy-to-clipboard": "Panoya kopyala", "label-restore-this-version": "Bu sürümü onar", "msg-already-latest-version": "Bu sürüm zaten en son sürümdür.", "msg-restored-version": "{{time}} tarihli sürüm başarıyla geri yüklendi", "label-file-deleted": "Bu dosya silindi", "label-no-earlier-version": "Bu dosyanın önceki sürümleri yoktu.", "label-empty-file": "Boş", "label-setting-files": "Ayarlar klasörü", "label-deleted-files": "Silinenler Klasörü", "label-version-history": "Sürüm geçmişi", "label-click-to-see-history": "Geçmişini görmek için silinen bir dosyaya tıklayın.", "label-create-remote-vault": "Uzak erişim kasası oluştur", "msg-please-enter-password": "Lütfen bir şifre girin.", "msg-vault-name-cannot-be-empty": "Kasa adı boş olamaz.", "msg-successfully-created-vault": "Uzak erişim kasası \"{{name}}\" başarıyla oluşturuldu.", "label-remote-vault-explanation": "Uzak kasalar, kasanızı cihazlar arasında güvenli bir şekilde senkronize eder.", "option-vault-name": "Kasa adı", "option-vault-name-desc": "Bu kasanın ne için olduğunu hatırlamanıza yardımcı olur.", "option-vault-name-placeholder": "benim harika kasam", "option-use-custom-encryption-password": "Uçtan uca şifreleme parolasını özelleştirin", "option-use-custom-encryption-password-desc": "Bun seçeneği kapatırsanız, sizin için bir şifreleme anahtarını güvenli bir şekilde yöneteceğiz.", "option-use-custom-encryption-password-desc-warning": "Bu seçenek daha sonra değiştirilemez.", "option-encryption-password": "Şifreleme şifresi", "option-encryption-password-desc": "Bu şifre daha sonra değiştirilemez.", "option-encryption-password-desc-warning": "Bu parolayı unutursanız, herhangi bir uzak veri sonsuza kadar kullanılamaz kalacaktır.", "option-encryption-password-desc-2": "Bu, yerel verilerinizi etkilemez.", "option-encryption-password-placeholder": "Şifreniz", "label-enter-encryption-password": "Şifreleme şifresini girin", "button-unlock-vault": "Kasanın kilidini aç", "msg-verified-password": "Şifrenizi başarıyla doğrulandı.", "label-remote-vaults": "Uzak kasalarınız", "label-vault-created-time": "{{time}} tarihinde oluşturuldu.", "tooltip-delete-remote-vault": "Sil", "tooltip-manage-sharing": "Paylaşımı yönet", "label-confirm-delete-remote-vault": "Kasayı silme işlemini onayla", "label-confirm-delete-remote-vault-question": "Bu uzaktan erişim kasasını silmek istediğinizden emin misiniz?", "label-confirm-delete-remote-vault-result": "Sürüm Geçmişi dahil olmak üzere sunucumuzdaki tüm veriler silinir. Yerel dosyalarınız bozulmadan kalacaktır.", "label-confirm-delete-remote-vault-warning": "Bu işlem kalıcıdır ve geri alınamaz", "msg-remote-vault-deleted": "{{name}} silindi.", "button-connect-to-remote-vault": "Bağlan", "button-disconnect-from-remote-vault": "Bağlantıyı kes", "label-not-remote-vaults": "Uzaktan bağlantılı kasanız yok.", "button-create-new-remote-vault": "Yeni kasa oluştur.", "label-sync-log": "Senkronizasyon günlüğü", "options-only-show-errors": "Yalnızca hatalar", "options-only-show-errors-desc": "Yalnızca hataları göster ve diğer günlük öğelerini gizle.", "button-copy-sync-log": "Senkronizasyon günlüğünü kopyala", "msg-successfully-copied-sync-log": "Senkronizasyon günlüğü başarıyla kopyalandı.", "button-retry": "Yeniden dene", "button-purchase-subscription": "Satın Al", "option-remote-vault": "Uzak kasa", "button-choose-remote-vault": "Seç", "button-manage-remote-vault": "Yönetmek", "option-remote-vault-desc-connected": "Şu anda \"{{name}}\" uzak kasasına bağlı.", "option-remote-vault-desc-not-connected": "Şu anda herhangi bir uzak kasaya bağlı değil.", "option-sync-status": "Senkronizasyon durumu", "option-sync-status-desc-paused": "Obsidian Sync şu anda duraklatıldı.", "option-sync-status-desc-running": "Obsidian Sync şu anda çalışıyor.", "option-device-name": "Cihaz Adı", "option-device-name-desc": "Bu ad, eşitleme günlüğünde görüntülenecektir. Varsayılan adı kullanmak için boş bırakın.", "button-resume": "Devam et", "button-pause": "Dur", "option-view-deleted-files": "Silinen dosyalar", "option-view-deleted-files-desc": "Silinen dosyaları görüntüleyin ve geri yükleyin.", "option-sync-log": "Senkronizasyon etkinliği", "option-sync-log-desc": "Hata ayıklama için son senkronizasyon etkinliklerini görüntüleyin.", "button-view": "Görüntüleme", "button-bulk-restore": "Toplu geri yükleme", "button-restore-selected-files": "Seçili dosyaları geri yükle", "msg-restoring": "Geri yükleniyor...", "msg-restoring-complete": "Geri yükleme tamamlandı: {{succeeded}} başarılı ve {{failed}} başarısız oldu.`", "option-over-size": "Kasa boyutu limiti aşıyor", "option-over-size-desc": "Kasanız {{limit}} üzerinden {{size}} boyutunda.", "msg-largest-files": "En büyük dosyaları görüntüle", "msg-largest-files-desc": "Bunlar en fazla yer kaplayan uzak dosyalardır. Ekleri sildikten sonra, uzak kasa alanını boşaltmak için temizleme düğmesini kullanın.", "button-purge-remote": "Temizle", "tooltip-purge-remote": "Yer kazanmak için silinen ekleri uzak kasadan kalıcı olarak temizleyin.", "msg-purge-complete": "Temizleme tamamlandı.", "option-prevent-sleep": "Cihaz uykusunu önleyin", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "Seçici senkronizasyon", "option-excluded-folders": "Hariç tutulan klasörler", "option-excluded-folder-desc": "Belirli klasörlerin senkronize edilmesini önleyin.", "option-currently-excluded-folders": " Şu anda hariç tutulan klasörler:", "button-manage-excluded-folders": "Yönet", "option-sync-image": "Resimleri senkronize et", "option-sync-image-desc": "Resim dosyalarını şu uzantılarla senkronize edin: {{extensions}}.", "option-sync-audio": "Sesi senkronize et", "option-sync-audio-desc": "Ses dosyalarını şu uzantılarla senkronize edin: {{extensions}}.", "option-sync-video": "Videoları senkronize et", "option-sync-video-desc": "Video dosyalarını şu uzantılarla senkronize edin: {{extensions}}.", "option-sync-pdf": "PDF dosyalarını senkronize et", "option-sync-pdf-desc": "PDF dosyalarını senkronize edin.", "option-sync-unsupported": "Diğer tüm türleri senkronize et", "option-sync-unsupported-desc": "Desteklenmeyen dosya türlerini senkronize edin.", "option-vault-config-sync": "Kasa ayarları senkronizasyonu", "option-view-config-files": "Ayarlar sürüm geçmişi", "option-view-config-files-desc": "Ayar dosyalarının sürüm geçmişini görüntüleyin ve geri yükleyin.", "option-sync-app": "Ana ayarlar", "option-sync-app-desc": "Düzenleyici ayarlarını, dosyaları & bağlantı ayarlarını, özel kısayol tuşlarını vb. senkronize etmeyi etkinleştirin.", "option-sync-appearance": "Görünüm ayarları", "option-sync-appearance-desc": "Karanlık mod, etkin tema ve etkinleştirilmiş snippet'ler gibi görünüm ayarlarını senkronize edin.", "option-sync-appearance-data": "Temalar ve snippet'ler", "option-sync-appearance-data-desc": "İndirilen temaları ve snippet'leri senkronize edin. Etkin olup olmadıkları önceki ayara bağlıdır.", "option-sync-hotkey": "Kısayol tuşları", "option-sync-hotkey-desc": "Özel kısayol tuşlarını senkronize edin.", "option-sync-core-plugin": "Aktif çekirdek eklenti listesi", "option-sync-core-plugin-desc": "Hangi çekirdek eklentilerin etkinleştirildiğini senkronize edin.", "option-sync-core-plugin-data": "Çekirdek eklenti ayarları", "option-sync-core-plugin-data-desc": "Çekirdek eklenti ayarlarını senkronize edin.", "option-sync-community-plugin": "Aktif topluluk eklenti listesi", "option-sync-community-plugin-desc": "Hangi topluluk eklentilerinin etkinleştirildiğini senkronize edin.", "option-sync-community-plugin-data": "Yüklü topluluk eklentileri", "option-sync-community-plugin-data-desc": "Yüklü topluluk eklentilerini (.js, .css ve manifest.json dosyaları) ve ayarlarını senkronize edin.", "label-sync-introduction": "Obsidian Sync, Obsidian'ın uçtan uca şifreleme ve sürüm geçmişine sahip eklenti senkronizasyon hizmetidir.", "label-account-required": "Senkronizasyonu başlatmak için lütfen giriş yapın veya yeni bir Obsidian hesabı oluşturun.", "button-sign-up": "Üye ol", "button-log-in": "Giriş yap", "label-manage-excluded-folders": "Hariç tutulan klasörleri yönet", "label-number-of-folders-excluded": "{{folders}} şu anda senkronize edilmenin dışında tutuluyor.", "label-add-excluded-folder": "Bir klasörü hariç tut", "label-add-excluded-folder-desc": "Hem mevcut klasörleri hem de henüz oluşturulmamış klasörleri hariç tutabilirsiniz.", "tooltip-remove-excluded-folder": "Hariç tutulanlar listesinden kaldır", "label-setup-connection": "Bağlantı kurulumu", "label-now-connected-to-vault": "Artık \"{{name}}\" adresine bağlısınız.", "button-start-syncing": "Senkronizasyonu başlat", "label-confirm-merge-vault": "Kasayı Birleştirmeyi Onaylayın", "msg-vault-has-notes": "Yerel kasanız zaten bazı notlar içeriyor.", "msg-vault-merge-warning": "Uzak kasaya \"{{name}}\" bağlanırsanız, yerel kasanızdaki notlar uzak kasanızdaki notlarla birleştirilir. Çakışma durumunda, notun en son sürümü korunacaktır.", "tooltip-update-setting-on-all-devices": "Lütfen bu seçeneği güncelleyin ve etkili olmasını istediğiniz tüm cihazlarda uygulamayı yeniden başlatın.", "label-sharing-with-users": "Bu uzak kasa şu anda aşağıdaki kişilerle paylaşılmaktadır.", "label-not-sharing": "Bu uzak kasa şu anda kimseyle paylaşılmıyor.", "label-vaults-shared-with-you": "Sizinle paylaşılan kasalar", "tooltip-leave-vault-sharing": "Bu kasada işbirliği yapmayı bırak", "label-leave-vault-confirmation": "Kasa işbirliğini durdurmayı onayla", "label-leave-vault-confirmation-details": "Bu, bu kasa sizinle paylaşılan kasalar listesinden kaldıracaktır. Bu eylem geri alınamaz.", "label-leave-vault-confirmation-details-2": "Bu kasada tekrar işbirliği yapmak isterseniz lütfen kasanın sahibiyle iletişime geçin.", "button-leave": "Ayrıl", "label-require-subscription-to-connect": "Bu kasaya bağlanmak için Obsidian Sync aboneliğine ihtiyacınız var.", "option-contact-support": "Destek ekibiyle iletişime geçin", "option-contact-support-desc": "Obsidian Sync ile ilgili herhangi bir sorunla karşılaşırsanız, size yardımcı olabilmemiz için lütfen bizimle iletişime geçin! Bize şu adresten ulaşabilirsiniz support@obsidian.md.", "button-email-support": "E-posta desteği" }, "file-recovery": { "name": "Dosya Kurtarma", "desc": "Yanlışlıkla veri kaybından kurtulmak için en son anlık görüntüleri geri yüklemenize izin verin. Anlık görüntüler yalnızca Markdown dosyaları için kaydedilir.", "action-open": "Kaydedilmiş anlık görüntüleri aç", "option-interval": "Anlık görüntü aralığı", "option-interval-description": "İki anlık görüntü arasında dakika cinsinden minimum aralık.", "option-keep": "Geçmiş uzunluğu", "option-keep-description": "Anlık görüntülerin gün cinsinden depolanma uzunluğu.", "option-open-history": "Anlık görüntüler", "option-open-history-description": "Kaydedilen anlık görüntüleri görüntüleyin ve geri yükleyin.", "button-view-snapshots": "Görünüm", "option-clear": "Geçmişi temizle", "option-clear-description": "Tüm anlık görüntüleri silin.", "button-clear-history": "Temizle", "label-clear-warning": "Tüm anlık görüntüleri silmek istediğinizden emin misiniz? Yalnızca anlık görüntülerin kaldırılacağını unutmayın. Kasanızdaki tüm dosyalar etkilenmeyecektir.", "msg-clear-complete": "Anlık görüntüler temizlendi.", "label-no-history-found": "Anlık görüntü bulunamadı.", "placeholder-choose-file": "Bir dosya seçin...", "label-select-file": "Anlık görüntüleri görüntülemek için lütfen soldan bir dosya seçin." }, "note-composer": { "name": "Not Oluşturucu", "desc": "Notları birleştir, böl ve yeniden düzenle", "option-confirm-file-merge": "Dosya birleştirmeyi onaylayın", "option-confirm-file-merge-description": "İki dosyayı birleştirmeden önce sor.", "option-split-replacement-text": "Çıkardıktan sonra metin", "option-split-replacement-text-description": "Seçili metin ayıklandıktan sonra yerine ne gösterilecek.", "option-choice-split-replacement-text-link": "Yeni dosyaya bağlantı", "option-choice-split-replacement-text-embed": "Yeni dosya göm", "option-choice-split-replacement-text-none": "Hiçbir şey", "option-template-file": "Şablon dosya konumu", "option-template-file-description": "Birleştirirken veya ayıklarken kullanılacak şablon dosyası. Kullanılabilir değişkenler: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Geçerli dosyayı başka bir dosyayla birleştir...", "action-merge-file": "Dosyanın tamamını şununla birleştir...", "label-no-files": "Dosya bulunamadı.", "instruction-navigate": "Yönlendirme", "instruction-merge": "Birleştirme", "instruction-create-new": "Yeni bir tane oluştur", "instruction-merge-at-top": "Üstte birleştir", "instruction-dismiss": "Vazgeç", "prompt-select-file-to-merge": "Birleştirilecek dosyayı seçin...", "label-merge-file": "Dosyayı birleştir", "label-confirm-file-merge": "\"{{file}}\" öğesini \"{{destination}}\" ile birleştirmek istediğinizden emin misiniz? \"{{file}}\" silinecek.", "button-merge": "Birleştir", "button-merge-do-not-ask-again": "Birleştir ve bir daha sorma", "command-split-file": "Geçerli seçimi çıkar...", "command-extract-heading": "Bu başlığı çıkartın...", "instruction-append": "aşağıya doğru hareket ettir", "instruction-prepend": "yukarıya doğru hareket ettir", "msg-fail-to-fetch-template": "Şablon dosyası getirilemedi: \"{{template}}\" bulunamadı.", "msg-fail-to-find-heading": "Başlık bulunamadı" }, "canvas": { "name": "Tuval", "desc": "Sonsuz bir tuval üzerinde notları düzenleyin ve bağlayın.", "action-add-note": "Kasadan not ekleyin", "action-add-media": "Kasadan medya ekleme", "action-add-card": "Kart ekle", "action-add-website": "Web sayfası ekle", "action-create-group": "Grup oluştur", "action-create-with-size": "Belirli boyutta bir kart oluşturun", "action-convert-to-file": "Dosyaya dönüştür...", "action-drag-to-add-note": "Kasadan not eklemek için sürükleyin", "action-drag-to-add-media": "Kasadan medya eklemek için sürükleyin", "action-drag-to-add-card": "Kart eklemek için sürükleyin", "action-enable-grid-snapping": "Izgara yaslamayı etkinleştir", "action-disable-grid-snapping": "Izgara yaslamayı devre dışı bırak", "action-edit-label": "Etiketi düzenle", "action-remove-label": "Etiketi çıkarın", "action-search-file": "Dosya arama", "action-set-color": "Renk ayarla", "action-align": "Hizala", "action-align-left": "Sola hizala", "action-align-center": "Merkezi hizala", "action-align-right": "Sağa hizala", "action-align-top": "Üst kısmı hizala", "action-align-middle": "Ortayı hizala", "action-align-bottom": "Alt kısmı hizala", "action-distribute-horizontal-spacing": "Yatay boşlukları dağıtın", "action-distribute-vertical-spacing": "Dikey aralıkları dağıtın", "action-justify-horizontally": "Yatay olarak gerekçelendirin", "action-justify-vertically": "Dikey olarak gerekçelendirin", "action-stack-horizontally": "Yatay olarak istifleyin", "action-stack-vertically": "Dikey olarak istifleyin", "action-stack-grid": "Yığın ızgarası", "action-export-png": "Görüntü olarak dışa aktar", "label-export-png-desc": "\"{{title}}\" aşağıdaki ayarlarla bir PNG dosyası ile dışa aktarın.", "label-export-png-dimensions": "Tahmini görüntü boyutları: {{dimensions}}", "option-export-png-show-logo": "Logoyu göster", "option-export-png-show-logo-desc": "Bu, sol alt kısma bir Obsidian logosu ekleyecektir.", "option-export-png-zoom": "Yakınlaştır", "option-export-png-zoom-desc": "Daha yüksek bir yakınlaştırma daha yüksek çözünürlüklü bir görüntü oluşturacaktır.", "option-export-png-frame": "Görünüm alanı", "option-export-png-frame-desc": "Tüm tuvali veya yalnızca geçerli görünür görünüm alanını oluşturmayı seçin.", "option-export-png-frame-full": "Tam tuval", "option-export-png-frame-viewport": "Yalnızca görüntü alanı", "action-remove": "Kaldır", "action-narrow": "Bölüme daralt...", "action-swap-file": "Dosya değiştir...", "action-change-url": "URL'yi değiştir...", "action-zoom-to-fit": "Sığdırmak için yakınlaştır", "action-zoom-to-selection": "Seçime yakınlaştır", "action-reload-page": "Sayfayı yeniden yükle", "action-go-to-target": "Hedefe git", "action-go-to-source": "Kaynağa git", "command-create-new-canvas": "Yeni tuval oluşturun", "command-new-canvas": "Yeni kanvas", "instruction-narrow": "başlığı yerleştirmek için", "prompt-to-narrow": "Başlığın adını yazın", "label-enter-url": "URL Girin", "label-empty-embed": "\"{{linktext}}\" bulunamadı.", "prompt-add-text": "Metin ekleyin...", "prompt-start-search": "Aramak için yazın...", "label-canvas-help": "Tuval yardım", "label-no-heading": "Başlık yok", "label-pan": "Kaydırma", "label-pan-horizontal": "Yatay kaydırma", "label-zoom": "Yakınlaştır", "label-select-all": "Tümünü seçin", "label-add-remove-selection": "Seçime ekleme / seçimden çıkarma", "label-clone-card": "Klon kartı", "label-constrain-movement-axis": "Kart hareketini eksene kısıtlama", "label-disable-drag-snapping": "Sürükleme sırasında yapışmayı devre dışı bırakma", "label-remove-card": "Kartı çıkarın", "label-drag-from-below": "Aşağıdan sürükleyin veya çift tıklayın", "label-space-drag-pan": "Kaydırmak için Boşluk + Sürükleme", "label-scroll-to-zoom": "Yakınlaştırmak için kaydırın", "label-untitled-group": "İsimsiz grup" } }, "nouns": { "word-with-count": "{{count}} kelime", "word-with-count_plural": "{{count}} kelimeler", "character-with-count": "{{count}} karakter", "character-with-count_plural": "{{count}} karakterler", "link-with-count": "{{count}} bağlantı", "link-with-count_plural": "{{count}} bağlantılar", "file-with-count": "{{count}} dosya", "file-with-count_plural": "{{count}} dosyalar", "folder-with-count": "{{count}} klasör", "folder-with-count_plural": "{{count}} klasörler", "backlink-with-count": "{{count}} geri bağlantı", "backlink-with-count_plural": "{{count}} geri bağlantılar", "site-with-count": "{{count}} site", "site-with-count_plural": "{{count}} siteler", "plugin-with-count": "{{count}} eklenti", "plugin-with-count_plural": "{{count}} eklentiler", "theme-with-count": "{{count}} tema", "theme-with-count_plural": "{{count}} temalar" } } { "setting": { "options": "Налаштування", "plugin": "Плагіни", "builtin-plugins": "Основні плагіни", "plugin-options": "Плагіни", "folder-path-example-placeholder": "Приклад: папка 2/папка 2", "file-path-example-placeholder": "Приклад: папка/нотатка", "msg-restart-required": "Зміна цієї опції потребує перезавантаження.", "editor": { "name": "Редактор", "section-general": "Загальне", "section-behavior": "Поведінка", "section-display": "Відображення", "option-spellcheck": "Перевіряти орфографію", "option-spellcheck-description": "Увімкнути перевірку орфографії. Наразі працює лише з англійською (US).", "spellcheck-languages": "Обрати мови", "spellcheck-languages-description": "Обрати мови для перевірки орфографії.", "spellcheck-languages-mac-description": "Вмонтована програма перевірки орфографії буде автоматично обирати обрану мову в macOS.", "spellcheck-dict": "Словник", "spellcheck-dict-empty": "Словник порожній", "option-show-inline-title": "Показати inline назву", "option-show-inline-title-description": "Відображає ім'я файлу у вигляді заголовка з можливістю редагування в одному рядку з вмістом файлу.", "option-readable-line-length": "Обмежити максимальну довжину рядка", "option-readable-line-description": "Обмежити максимальну довжину рядка. Підвищує зручність читання великих текстів, але зменшує кількість інформації, що вміщає екран.", "option-strict-line-break": "Подвійний дільник рядків", "option-strict-line-break-description": "Ігнорувати одинарні дільники рядків у режимі читання відповідно до стандарту Markdown. Вимкніть для показу одинарних дільників у режимі читання.", "option-show-frontmatter": "Показ frontmatter", "option-show-frontmatter-description": "Показувати frontmatter у режимі читання у вигляді коду. Вимкніть, щоб приховати frontmatter.", "option-auto-pair-brackets": "Створювати дужки попарно", "option-auto-pair-brackets-description": "Автоматично закриває дужки та лапки.", "option-auto-pair-markdown": "Закривати теги Markdown", "option-auto-pair-markdown-description": "Автоматично закриває теги для жирного і курсивного накреслень.", "option-smart-indent-lists": "Відступ для списків", "option-smart-indent-lists-description": "Автоматично додає відступи і теги для списків.", "option-fold-heading": "Згортати заголовки", "option-fold-heading-description": "Згортає весь текст під заголовками", "option-fold-indent": "Згортати відступи", "option-fold-indent-description": "Згортає текст з однаковими відступами, наприклад списки.", "option-default-new-tab-view": "Стандартний вигляд для нових вкладок", "option-default-new-tab-view-description": "Вид за замовчуванням для нової markdown вкладки", "option-default-new-tab-view-editing": "Режим редагування", "option-default-new-tab-view-reading": "Режим перегляду", "option-default-editing-mode": "Режим редагування за замовчуванням", "option-default-editing-mode-description": "За замовчуванням редактор відкриється в обраному режимі.", "option-default-editing-mode-source": "Вихідний код", "option-default-editing-mode-live-preview": "Динамічне відображення", "option-show-line-number": "Відображати номери рядків", "option-show-line-number-description": "Додає нумерацію рядків на полях.", "option-indentation-guide": "Відображати лінії відступу", "option-indentation-guide-description": "Показувати вертикальні лінії між пунктами для візуального орієнтування.", "option-use-tabs": "Використовувати табуляцію", "option-use-tabs-description": "Використовувати табуляцію для відступів при натисканні клавіші \"Tab\". Вимкніть, щоб замість табуляції використовувалися символи пробілу.", "option-tab-size": "Ширина табуляції", "option-tab-size-description": "Кількість пробілів, якому відповідає табуляція.", "option-rtl": "Напрямок письма (RTL)", "option-rtl-description": "Встановлює напрямок письма нотаток справа наліво.", "option-auto-convert-html": "Конвертувати HTML", "option-auto-convert-html-description": "Автоматично перетворювати HTML в Markdown при вставці та перетягуванні вебпосилань. Використовуйте з Ctrl/Cmd+Shift+V для вставки без конвертації.", "option-vim-key-bindings": "Використовувати сполучення клавіш Vim", "option-vim-key-bindings-description": "Дозволяє використовувати поєднання клавіш Vim в режимі редагування.", "option-vim-key-bindings-mobile": "Ця опція налаштовується окремо на різних пристроях та не зберігається у файлі конфігурацій.", "option-emacsy-keys": "Використовувати сполучення клавіш старого Emacs-стилю для macOS", "option-emacsy-keys-description": "Дозволяє використовувати додаткові клавіші навігації в стилі Emacs, але порушує роботу з деякими сполученнями.", "label-confirm-enable-vim": "Підтвердити вибір Vim режиму", "label-vim-warning": "Vim режим ефективний для редагування тексту, але може бути контрінтуїтивним. Якщо ви не знайомі з Vim, ця опція може створити враження, що Obsidian не працює.", "label-vim-test": "Для того, щоб підтвердити свої вміння в Vim, введіть команду виходу з Vim без збереження:", "label-vim-your-answer": "Ваша відповідь", "placeholder-enter-command": "Введіть команду...", "button-confirm-enable-vim": "Дозвольте увімкнути Vim", "msg-vim-mode-enabled": "Команда введена вірно. Режим Vim активовано.", "msg-vim-mode-not-enabled": "Невірна команда. Режим Vim залишається вимкненим, щоб захистити вас.", "msg-vim-mode-please-enter-command": "Будь ласка, введіть команду для переходу у Vim режим", "option-legacy-editor": "Використовувати старий редактор", "option-legacy-editor-description2": "Найближчим часом старий редактор буде виделено, тому всі посилання на нього також будуть видалятися.", "label-legacy-deprecation": "Зустрічайте новий редактор", "label-legacy-deprecation-1": "Тепер Obsidian використовує абсолютно новий, більш стійкий та доступний редактор.", "label-legacy-deprecation-2": "Схоже, що ви досі використовуєте старий редактор, спробуйте новий редактор, він вам сподобається.", "label-legacy-deprecation-choice": "Який режим ви хотіли б обрати?", "label-live-preview-description": "Сучасний та зрозумілий.", "label-source-mode-description": "Markdown код з синтаксичним виділенням.", "button-start-new-editor": "Запустити новий редактор" }, "file": { "name": "Файли та посилання", "option-confirm-file-deletion": "Підтвердьте видалення файлу", "option-confirm-file-deletion-description": "Чи хочете ви отримати запит на підтвердження видалення файлу.", "option-delete-destination": "Видалені файли", "option-delete-destination-description": "Що робити з файлами після їх видалення?", "option-choice-system-trash": "Перейти в системний кошик", "option-choice-vault-trash": "Перейдіть в папку Obsidian trash (.trash)", "option-choice-permanent-delete": "Видаляти безповоротно", "option-always-update-links": "Завжди оновлюйте внутрішні посилання", "option-always-update-links-description": "Оновлює посилання автоматично після перейменування файлу.", "option-new-note-location": "Місце за замовчуванням для нової нотатки", "option-new-note-location-description": "Де створювати нову нотатку. Налаштування плагінів можуть перевизначити це значення.", "option-choice-vault-root": "У корені сховища", "option-choice-current-folder": "У тій же папці, де розташований файл", "option-choice-specified-folder": "У папці, зазначеній нижче", "option-new-file-folder-path": "Папка, в якій створювати нові нотатки", "option-new-file-folder-path-description": "Нові нотатки будуть створюватися в цій папці. Налаштування плагінів можуть перевизначити це значення.", "option-use-wiki-links": "Використовувати [[wiki-посилання]]", "option-use-wiki-links-description": "Автоматично створювати wiki-посилання для [[посилань]] і ![[зображень]] замість Markdown-посилань.", "option-show-unsupported-files": "Виявлення всіх розширень файлів", "option-show-unsupported-files-description": "Показувати файли з будь-яким розширенням, навіть якщо Obsidian не може відкрити їх спочатку, щоб ви могли посилатися на них і бачити їх в Провіднику файлів і швидкому перемикачі.", "option-link-autocompleted-format": "Формат нового посилання", "option-link-autocompleted-format-description": "Який формат використовувати при створенні внутрішніх посилань.", "option-choice-shortest-linktext": "Найкоротший шлях до файлу з можливих", "option-choice-relative-path": "Відносний шлях до файлу", "option-choice-absolute-path": "Абсолютний шлях щодо сховища", "option-new-attachment-location": "Розташування за замовчуванням для нових вкладень", "option-new-attachment-location-description": "Де поміщаються знову додані вкладення.", "option-choice-subdirectory": "У підпапці під поточною папкою", "option-attachment-folder-path": "Шлях до папки для вкладених файлів", "option-attachment-folder-path-description": "Нові вкладені файли будуть зберігатися в цій папці. У тому числі будь-які вставлені зображення та аудіозаписи.", "option-attachment-subfolder-path": "Ім'я підпапки", "option-attachment-subfolder-path-description": "Якщо ваш файл знаходиться в розділі \"vault/folder\", а ім'я підпапки задано як \"attachments\", вкладення будуть збережені в \"vault/folder/attachments\".", "option-attachment-subfolder-path-placeholder": "вкладення", "option-excluded-files": "Виключені файли", "option-excluded-files-desc": "Виключені файли будуть сховані або менш помітними в різних місцях, наприклад у Швидкому Переході, запропонованих посиланнях, або Графі.", "label-no-excluded-filters-applied": "Не засновано жодного фільтра. Додайте його нижче.", "label-excluded-filters-applied": "Файли що задовільняють наступні фільтри наразі виключені:", "label-excluded-filter": "Фільтр", "placeholder-excluded-filter": "Введіть шлях або \"/regex/\"..." }, "appearance": { "name": "Оформлення", "option-base-theme": "Основна тема", "option-base-theme-description": "Вибір основної колірної схеми оформлення.", "option-accent-color": "Основний колір", "option-accent-color-description": "Виберіть основний (акцентний) колір, який буде використовуватися у всьому додатку.", "dark-theme": "Темна", "light-theme": "Світла", "system-theme": "Адаптувати до системи", "option-font": "Шрифт", "option-advanced": "Advanced", "option-interface-font": "Шрифт інтерфейсу", "option-interface-font-description": "Встановлює базовий шрифт для Obsidian.", "option-text-font": "Шрифт тексту", "option-text-font-description": "Встановлює шрифт для режимів редагування та читання.", "option-monospace-font": "Моноширинний шрифт", "option-monospace-font-description": "Встановлює шрифт для блоків коду та frontmatter.", "label-single-font-currently-in-effect": " Встановлений наразі шрифт: ", "label-multiple-fonts-currently-in-effect": " Наступні шрифти наразі встановленні:", "option-font-placeholder": "Введіть назву шрифту...", "label-no-custom-font-set": "Жодного стороннього шрифту не встановлено. Додайте його нижче.", "label-font-applied": "Буде встановлено перший шрифт зі списку, що наявний у системі.", "msg-font-not-found": "Цей шрифт недоступний у вашій системі.", "msg-font-found": "Цей шрифт наявний у вашій системі.", "label-font-name": "Назва шрифту", "option-community-themes": "Переглянути теми спільноти", "option-community-themes-description": "Попередній перегляд і використання тем, створених спільнотою.", "button-browse-community-themes": "Огляд", "option-font-size": "Розмір шрифту", "option-font-size-description": "Розмір шрифту в пікселях для режиму редагування та читання.", "option-font-size-action": "Швидка зміна розміру шрифту", "option-font-size-action-description": "Зміна розміру шрифту за допомогою Ctrl + Колесо миші, або з використанням жестів на трек паді.", "option-themes": "Теми", "option-manage-themes-description": "Керування встановленими темами та перегляд тем спільноти.", "option-theme-button-manage": "Керування", "option-choice-none": "Стандартний", "option-native-menus": "Native menus", "option-native-menus-desc": "Меню в усьому додатку будуть відповідати вашій операційній системі. На них не буде впливати ваша тема.", "button-reload-themes": "Оновити теми", "msg-reloaded-themes": "Оновлено Список CSS-тем.", "button-open-themes-folder": "Відкрити папку з темами", "option-css-snippets": "Фрагменти CSS коду", "label-no-css-snippets-found": "У папці фрагментів CSS коду нічого не виявлено.", "no-snippet-description": "Фрагменти CSS зберігаються в \"{{path}}\".", "button-reload-snippets": "Оновити список фрагментів", "button-open-snippets-folder": "Відкрити папку з фрагментами", "msg-reloaded-snippets": "Оновлено список CSS фрагментів.", "option-toggle-snippet-description": "Застосувати CSS фрагмент до \"{{path}}\".", "label-installed-themes": "Встановлені теми", "label-screenshot-unavailable": "Скриншот недоступний", "label-default-theme": "Тема за замовчуванням", "tooltip-click-to-enlarge": "Натисніть, щоб збільшити", "button-update": "Оновити", "label-currently-selected": "Обрана", "option-frame-style": "Стиль заголовку вікна", "option-frame-description": "Визначає стиль заголовка вікон Obsidian. Потребує повного перезапуску для набуття чинності.", "option-frame-hidden": "Прихований (за замовчуванням)", "option-frame-obsidian": "Obsidian", "option-frame-native": "Вбудований", "option-configure-ribbon": "Стрічкове меню", "option-configure-ribbon-desc": "Налаштуйте, які команди з'являтимуться у стрічковому меню в навігаційній панелі.", "option-mobile-quick-ribbon-item": "Елемент стрічки швидкого доступу", "option-mobile-quick-ribbon-item-desc": "Натискання на елемент стрічки в навігаційному меню активує цей елемент стрічки. Натисніть і утримуйте щоб відобразити меню.", "button-configure": "Налаштувати", "label-additional-ribbon-items": "Інші елементи стрічкового меню", "label-modal-configuration": "Налаштування стрічкового меню", "label-modal-configuration-desc": "Виберіть, які елементи ви хочете зробити активними в стрічці. Перетягніть, щоб змінити порядок.", "option-show-view-header": "Показати заголовок вкладки", "option-show-view-header-desc": "Показує заголовок зверху кожної вкладки.", "msg-updates-found": "Ви можете оновити {{count}} тем.", "msg-updates-found_plural": "Ви можете оновити {{count}} тем.", "button-check-for-updates": "Перевірити наявність оновлень", "button-view-updates": "Переглянути оновлення", "button-update-all-themes": "Оновити всі", "label-current-themes": "Поточні ком'юніті-теми", "label-currently-installed": "У вас встановлено {{count}} тем.", "label-currently-installed_plural": "У вас встановлено {{count}} тем." }, "hotkeys": { "name": "Сполучення клавіш", "prompt-filter": "Фільтр...", "tooltip-delete-hotkey": "Видалити сполучення клавіш", "label-waiting-for-hotkey-press": "Натисніть комбінацію клавіш...", "tooltip-restore-default": "Відновити значення за замовчуванням", "tooltip-customize-command": "Налаштувати цю команду", "tooltip-hotkey-single-conflict": "Це поєднання конфліктує з командою \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "Кількість конфліктів цього поєднання з іншими командами: {{count}}", "label-blank-hotkey": "Не призначено" }, "about": { "name": "Про програму", "label-commercial-license": "Комерційна ліцензія", "label-license-key": "Ліцензійний ключ", "license-key-placeholder": "Ваш ліцензійний ключ...", "label-activate-license": "Активувати ліцензію", "button-activate": "Активувати", "label-unknown-version": "Невідомий", "label-current-version": "Поточна версія: ", "label-install-version": "(Версія інсталятора: {{version}})", "label-up-to-date": "Встановлена актуальна версія!", "label-read-changelog": "Список змін", "label-manual-update-required": "Obsidian потребує оновлення інсталятора для підтримки нових можливостей та отримання останніх патчів безпеки. Ви маєте власноруч завантажити новий інсталятор та перевстановити Obsidian.", "label-download": "Завантажити", "label-new-version-ready": "Нова версія доступна для встановлення. ", "label-relaunch-to-update": "Перезапустити для оновлення.", "label-disabled-updates": "Оновлення вимкнено.", "label-checking-for-updates": "Перевіряю оновлення...", "button-relaunch": "Перезапустити", "button-check-for-updates": "Перевірити оновлення", "option-auto-update": "Автоматичні оновлення", "option-auto-update-description": "Перевіряти та завантажувати доступні оновлення автоматично.", "option-get-help": "Документація Obsidian", "option-get-help-description": "Відкриває довідкову документацію.", "button-open": "Відкрити", "option-language": "Мова", "option-language-description": "Змінює мову інтерфейсу.", "option-insider-build": "Отримувати ранні збірки", "option-insider-build-description": "Автоматично оновлюватися до ранніх збірок, щоб спробувати нові можливості. Зверніть увагу, що ці збірки можуть бути менш стабільними.", "option-advanced": "Розширенні налаштування", "option-hw-acceleration": "Апаратне прискорення", "option-hw-acceleration-description": "Вмикає апаратне прискорення, яке використовує ваш GPU, щоб зробити Obsidian більш плавним.", "option-hw-acceleration-warning": "Якщо ви вимкнете цю функцію, програма стане повільніше.", "option-config-location": "Перезапис місця конфігурації сховища", "option-config-location-description": "Використати інше місце для зберігання конфігурації. Повинне починатися з крапки.", "option-config-location-warning": "Місце конфігурації має бути допустимою назвою папки, що починається з крапки.", "label-license": "Ліцензія", "label-your-commercial-license-key": "Ключ вашої комерційної ліцензії \"{{key}}\".", "label-commercial-license-info": "Зареєстрована на \"{{company}}\" для {{seats}} користувачів. Чинна до {{expiry}}.", "label-validating-commercial-license": "Перевірка...", "label-invalid-commercial-license": "Ліцензія недійсна: ", "button-remove-commercial-license": "Видалити", "option-catalyst": "Ліцензія Catalyst", "option-catalyst-desc": "Наразі ви маєте {{tier}} ліцензію Catalyst. Дякуємо за підтримку!", "option-catalyst-desc-no-license": "Ви не маєте ліцензії Catalyst. Ліцензія Catalyst це одноразове пожертвування на підтримку розробки Obsidian.", "label-app": "Програма" }, "account": { "name": "Обліковий запис", "option-your-account": "Ваш обліковий запис", "option-your-account-desc": "Наразі ви увійшли як {{name}} ({{email}}).", "option-your-account-desc-no-login": "Ви не увійшли до облікового запису. Він необхідний для Obsidian Sync, Obsidian Publish, та ранніх (інсайдер) збірок Catalyst.", "button-manage-settings": "Керування налаштуваннями", "label-insider": "інсайдер", "label-supporter": "саппортер", "label-vip": "VIP", "button-upgrade-catalyst": "Підвищити", "option-commercial-license": "Комерційна ліцензія", "option-commercial-license-desc": "Якщо ви використовуєте Obsidian з комерційних цілей, ви маєте отримати комерційну ліцензію.", "button-purchase": "Придбати", "button-log-out": "Вийти", "label-log-in": "Увійти", "label-sign-up": "Зареєструватися", "label-email": "Пошта", "placeholder-email": "Ваша ел. адреса...", "label-password": "Пароль", "placeholder-password": "Ваш пароль...", "button-login": "Увійти", "message-empty-email": "Електронна адреса не може бути порожньою.", "message-invalid-email": "Невірний формат адреси електронної пошти.", "message-empty-password": "Пароль не може бути порожнім..", "message-login-failed": "Неправильна адреса електронної пошти або пароль.", "label-no-account": "Немає облікового запису? ", "link-sign-up-now": "Зареєструватися" }, "core-plugin": { "plugin-list": "Вмонтовані плагіни", "option-search-plugin": "Шукати вмонтовані плагіни", "option-search-plugin-description": "Пошук плагінів за назвою або описом.", "placeholder-search-plugin": "Пошук плагінів..." }, "third-party-plugin": { "name": "Сторонні плагіни", "option-restricted-mode": "Обмежений режим", "option-restricted-mode-description": "Обмежений режим ВИМКНЕНО. Увімкніть, щоб вимкнути усі сторонні плагіни.", "button-turn-on": "Увімкнути", "option-browse-community-plugins": "Плагіни спільноти", "option-browse-community-plugins-description": "Огляд і встановлення сторонніх плагінів, створених нашим приголомшливою спільнотою.", "button-browse": "Огляд", "label-exit-restricted-mode": "Вийти з Обмеженого режиму", "label-exit-restricted-mode-description-1": "Плагіни спільноти, як будь-які інші застосунки, що ви завантажуєте, потенційно можуть завдати шкоди вашим файлам, та можуть бути небезпечними.", "label-exit-restricted-mode-description-2": "Безпечність плагінів важлива для нас. Ось що ми робимо:", "label-exit-restricted-mode-description-3": "Незважаючи на наші зусилля, існує невелика ймовірність того, що плагін спільноти може працювати неправильно.", "label-code-review": "Початковий огляд коду", "label-code-review-desc": "Плагіни проходять первинну перевірку коду нашою командою, перш ніж вони з’являться в магазині.", "label-open-source": "Відкритий вихідний код", "label-open-source-desc": "Більшість плагінів мають відкритий вихідний код на GitHub, тому ви можете власноруч дослідити код.", "label-peer-audit": "Колективний аудит", "label-peer-audit-desc": "Ми маємо велику спільноту розробників, що допомагають та слідкують один за одним.", "label-report-mechanism": "Механізм скарги", "label-report-mechanism-desc": "Ми відстежуємо та видаляємо несправні плагіни після скарги користувачів.", "label-exit-restricted-mode-disable-confirmation": "Бажаєте вийти з обмеженого режиму, щоб увімкнути плагіни спільноти? Ми наполегливо рекомендуємо зробити резервні копії ваших даних перед цим.", "label-learn-more": "Дізнайтеся більше про безпечність плагінів", "button-turn-on-community-plugins": "Увімкнути плагіни спільноти", "label-trust-author": "Чи ви довіряєте автору цього сховища?", "label-trust-author-description-1": "Ви відкриваєте це сховище вперше, він йде з декількома плагінами.", "label-trust-author-description-2": "Якщо ви отримали це сховище від когось невідомого, зауважте, що плагіни з невідомих джерел є потенційно небезбечними.", "label-trust-author-description-3": "Якщо ви не повністю довіряєте автору цього сховища, ми рекомендуємо залишити Обмежений режим увімкненим, щоб плагіни не працювали.", "button-enable-plugins": "Довіритись автору та увімкнути плагіни", "button-dont-trust-author": "Відкрити сховище в Обмеженому режимі", "placeholder-community-plugins": "Пошук плагіна...", "msg-failed-load-plugins": "Не вдалося завантажити список плагінів.", "label-installed": "Встановлений", "button-install": "Встановити", "button-enable": "Увімкнути", "button-disable": "Вимкнути", "button-copy-share-link": "Скопіювати посилання", "button-donate": "Пожертвувати", "label-no-results-found": "Нічого не знайдено.", "msg-failed-to-load-manifest": "Не вдалося завантажити опис плагіна.", "label-version": "Версія: {{version}}", "label-currently-installed-version": " (встановлено: {{version}})", "label-by-author": "Від ", "label-repository": "Репозиторій: ", "label-last-update": "Останнє оновлення: ", "tooltip-view-last-update": "Переглянути останнє оновлення", "label-unsupported": "Цей плагін не підтримує ваш пристрій.", "button-update": "Оновити", "label-no-readme": "Плагін не надав Readme-файл.", "msg-installing-plugin": "Встановлюється плагін \"{{name}}\"...", "msg-failed-to-install-plugin": "Не вдалося встановити плагін \"{{name}}\".", "msg-successfully-installed-plugin": "Встановлено плагін \"{{name}}\".", "label-installed-plugins": "Керування плагінами", "button-reload-plugins": "Перезавантажити плагіни", "msg-reloaded-third-party-plugins": "Сторонні плагіни перезавантажені.", "label-uninstall": "Видалити", "label-uninstall-plugin": "Видалити плагін", "label-uninstall-plugin-confirmation": "Ви точно хочете видалити плагін? Ця дія видалить папку плагіна.", "button-open-plugins-folder": "Відкрити папку з плагінами", "button-check-for-updates": "Перевірити оновлення", "button-update-all-plugins": "Оновити всі", "label-current-plugins": "Встановлені плагіни", "label-currently-installed": "Кількість встановлених плагінів: {{count}}", "label-currently-installed_plural": "Кількість встановлених плагінів: {{count}}", "label-debug-startup-time": "Показ часу запуску", "label-debug-startup-time-description": "Показує час запуску всіх плагінів під час запуску Obsidian у повідомленні й консолі.", "msg-no-updates-found": "Оновлення не знайдено.", "msg-updates-found": "Знайдено оновлень для плагінів: {{count}}", "msg-updates-found_plural": "Знайдено оновлень для плагінів: {{count}}", "msg-update-plugin": "Оновити до версії {{version}}", "option-search-installed-plugin": "Пошук встановлених плагінів", "option-search-installed-plugin-description": "Пошук встановлених плагінів за назвою або описом.", "placeholder-search-installed-plugin": "Пошук встановлених плагінів...", "show-installed-only": "Показати тільки встановлені", "label-donate-modal-title": "Пожертвувати на підтримку {{name}}", "label-donate-modal-text1": "Розробники плагінів - це волонтери спільноти, які роблять дивовижні речі з пристрасті. Якщо ви вважаєте цей плагін корисним, будь ласка, розгляньте можливість підтримки його розробки.", "label-donate-modal-text2": "100% ваших внесків буде спрямовано розробнику плагіна; Obsidian не отримує жодних відрахувань. Платформа фінансування, яку вони оберуть, може стягувати комісію.", "label-donate-modal-text3": "Дякуємо за вашу щедру підтримку!", "label-support-this-plugin": "Підтримайте цей плагін:", "label-search-summary": "Показується {{pluginCount}}:", "label-by-popularity": "Найбільш завантажувані", "label-by-released": "Нещодавно випущені", "label-by-updated": "Нещодавно оновлені", "label-alphabetical": "В алфавітному порядку", "label-last-updated": "Оновлені {{time}}" }, "mobile-toolbar": { "name": "Мобільний пристрій", "option-configure-quick-action": "Налаштувати Швидку Дію", "option-configure-quick-action-description": "Оберіть команду, що бути спрацьовувати коли ви будете проводити зверху вниз. Наразі це: \"{{command}}\".", "button-configure": "Налаштувати", "placeholder-select-quick-action": "Обрати Швидку Дію...", "manage-toolbar-options": "Керування тулбаром", "option-internal-link": "Додати внутрішнє посилання", "option-internal-embed": "Додати вставку", "option-tag": "Додати тег", "option-heading": "Заголовок", "option-strikethrough": "Викреслення", "option-highlight": "Виділення", "option-code": "Код", "option-blockquote": "Цитата", "option-markdown-link": "Додати Markdown посилання", "option-bullet-list": "Список", "option-numbered-list": "Нумерований список", "option-indent-list": "Додати відступ", "option-unindent-list": "Прибрати відступ", "option-undo": "Скасувати", "option-redo": "Повернути", "option-move-caret-up": "Каретка вверх", "option-move-caret-down": "Каретка вниз", "option-move-caret-left": "Каретка вліво", "option-move-caret-right": "Каретка вправо", "option-first-line": "Перейти до першого рядка", "option-last-line": "Перейти до останнього рядка", "option-toggle-keyboard": "Клавіатура", "option-configure-toolbar": "Налаштувати тулбар", "option-added-options": "Додані опції", "option-more-toolbar-options": "Інші опції", "option-attach": "Прикріплення", "option-add-command": "Додати глобальну команду", "option-add-command-description": "Обрати будь-яку глобальну команду для додавання до тулбару." } }, "editor": { "search": { "placeholder-find": "Знайти", "placeholder-replace": "Замінити", "label-previous": "Назад", "label-next": "Вперед", "label-all": "Усе", "label-exit-search": "Закрити пошук", "label-replace": "Замінити", "label-replace-all": "Замінити все" }, "link-suggestion": { "label-type-hash": "Введіть #", "label-link-heading": "щоб послатися на заголовок", "label-type-block": "Введіть ^", "label-link-block": "щоб послатися на блок", "label-type-pipe": "Введіть |", "label-change-display-text": "щоб змінити текст, що показується", "label-no-match-found": "Збігів не знайдено" }, "spellcheck": { "no-suggestion": "Немає пропозицій...", "add-to-dictionary": "Додати до словника" }, "menu": { "edit-link": "Редагувати посилання" }, "heading-suggestion": { "label-no-heading": "Без заголовка", "label-heading-level": "Заголовок {{level}}" }, "print-modal": { "title": "Експортувати у PDF", "caption": "Експортувати \"{{filename}}\" у PDF з налаштуваннями нижче.", "setting-page-size": "Розмір сторінки", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Юридичний", "setting-page-size-letter": "Лист", "setting-page-size-tabloid": "Таблоїд", "setting-include-file-name": "Включити ім'я файлу в заголовок", "setting-landscape": "Альбомний", "setting-margin": "Поля", "setting-margin-default": "За замовчуванням", "setting-margin-minimal": "Мінімальні", "setting-margin-none": "Немає", "setting-downscale-percent": "Відсоток масштабування", "button-export-to-pdf": "Експортувати у PDF" }, "link-popover": { "tooltip-follow-link": "Перейти за посиланням", "tooltip-open-link": "Відкрити посилання", "tooltip-search-tag": "Шукати тег" } }, "interface": { "embed-cannot-find": "Не знайдено:", "embed-open-in-default-app-tooltip": "Відкрити в застосунку за замовчуванням", "empty-sidebar": "Бічна панель пуста, спробуйте перетягнути сюди область.", "sidebar-expand": "Розгорнути", "sidebar-collapse": "Згорнути", "msg-fail-to-save-file": "Не вдалося зберегти файл \"{{filepath}}\". {{message}}.", "no-file": "Немає файлу", "msg-file-changed": "\"{{file}}\" було модифіковано ззовні, зміни об'єднуються автоматично.", "switch-vault": "Відкрити інше сховище", "help": "Довідка", "settings": "Налаштування", "drag-to-rearrange": "Перетягніть, щоб змінити порядок", "msg-switched-to-read": "Режим читання встановлено за замовчуванням.", "msg-switched-to-edit": "Режим редагування встановлено за замовчуванням.", "msg-upgrade-installer": "Щоб скористатися цією функцією, перевстановіть Obsidian за допомогою останньої програми встановлення, доступної на нашому вебсайті.", "tooltip-restore-default-settings": "Відновити налаштування за замовчуванням", "label-copy": "Скопіювати в буфер обміну", "copied_generic": "Скопійовано в буфер обміну", "copied": "{{item}} скопійовано в буфер обміну", "url": "URL", "msg-open-file-through-uri": "Відкрито файл \"{{path}}\"", "msg-file-not-found-through-uri": "Файл \"{{name}}\" не знайдено.", "delete-action-short-name": "Видалити", "msg-indexing": "Obsidian індексує ваше сховище...\nЦе має відбутися лише раз.\nДеякий функціонал може бути недоступним, поки це не буде завершено.", "msg-indexing-complete": "Індексування завершено.", "msg-sandbox-vault": "Це сховище - пісочниця.\nБудь-які зміни будуть видалені.", "label-enter-to-create": "Enter для створення", "label-update-available": "Доступне оновлення", "label-debug-info": "Інформація для відлагодження", "button-learn-more": "Дізнатися більше", "button-not-now": "Не зараз", "button-add": "Додати", "button-manage": "Керування", "label-new-tab": "Нова вкладка", "msg-tab-busy": "Ця вкладка наразі зайнята, спробуйте пізніше", "empty-state": { "no-file-open": "Жоден файл не відкритий", "create-new-file": "Створити новий файл", "go-to-file": "Перейти до файлу", "see-recent-files": "Переглянути нещодавні файли", "close": "Закрити", "unknown-pane-title": "Плагін більше не активний", "unknown-pane-desc": "Плагін, який створив цю область ({{type}}), зник" }, "menu": { "edit-view": "Поточний режим: редагування", "read-view": "Поточний режим: читання", "switch-to-edit-view": "Натисніть, щоб редагувати", "switch-to-read-view": "Натисніть, щоб переглянути", "mod-click-open-new-tab": "{{key}}+Click щоб відкрити нову вкладку", "find": "Знайти...", "replace": "Замінити...", "edit": "Редагувати", "preview": "Перегляд", "more-options": "Більше", "close": "Закрити", "close-others": "Закрити інші", "close-right": "Закрити вкладки праворуч", "pin": "Закріпити", "unpin": "Відкріпити", "unlink-tab": "Відкріпити вкладку", "link-tab": "Зв'язати з вкладкою'...", "toggle-source-mode": "Source-режим", "toggle-reading-view": "Режим читання", "delete-file": "Видалити файл", "create-file": "Створити цей файл", "open-link": "Відкрити посилання", "open-in-new-tab": "Відкрити в новій вкладці", "open-to-the-right": "Відкрити праворуч", "copy-url": "Скопіювати URL", "close-current-tab": "Закрити поточну вкладку", "copy": "Скопіювати", "cut": "Вирізати", "paste": "Вставити", "paste-as-plain-text": "Вставити як простий текст", "select-all": "Вибрати все", "rename-heading": "Перейменувати цей заголовок...", "rename-blockid": "Перейменувати ID блоку...", "open-in-new-window": "Відкрити в новому вікні", "move-to-new-window": "Перемістити в нове вікно", "open-in-browser": "Відкрити в браузері", "stack-tabs": "Перейти в режим накладання вкладок", "unstack-tabs": "Вийти з режиму накладання вкладок" }, "tooltip": { "click-to-expand": "Натисніть, щоб розгорнути", "click-to-collapse": "Натисніть, щоб згорнути", "alias": "Псевдонім", "not-created-yet": "Ще не створено, виберіть, щоб створити" }, "start-screen": { "label-version": "Версія", "option-open-folder-as-vault": "Відкрити папку як сховище", "option-open-folder-as-vault-description": "Вибрати наявну папку з файлами Markdown.", "option-create-vault": "Створити нове сховище", "option-create-vault-description": "Створіть нове сховище Obsidian в папці.", "option-connect-obsidian-sync": "Під'єднати Obsidian Sync", "option-connect-obsidian-sync-description": "Встановити синхронізацію з віддаленим сховищем.", "option-new-vault-name": "Назва сховища", "option-new-vault-name-description": "Виберіть назву для свого чудового сховища.", "option-new-vault-location": "Розташування", "option-new-vault-location-description": "Виберіть місце для розміщення нового сховища.", "label-new-vault-location-preview": "Ваше нове сховище буде розміщено в: ", "option-reveal-vault-in-explorer": "Відкрити у системному провіднику", "option-reveal-vault-in-explorer-mac": "Відкрити сховище в Finder", "option-rename-vault": "Перейменувати сховище...", "msg-error-rename-exists": "Сховище з такою назвою вже існує.", "msg-error-nested": "Перемістити сховище у власну підпапку неможливо.", "msg-error-rename-open": "Неможливо перейменувати сховище, коли воно відкрите.", "msg-rename-failed": "Помилка перейменування сховища.", "msg-rename-success": "Сховище успішно перейменовано.", "option-move-vault": "Перемістити сховище...", "msg-move-select-dest": "Обрати папку призначення", "msg-error-move-exists": "Сховище за цим шляхом вже існує.", "msg-error-move-open": "Неможливо перемістити сховище, коли воно відкрите.", "msg-move-failed": "Помилка переміщення сховище.", "msg-move-success": "Сховище успішно переміщено.", "option-remove": "Видалити зі списку", "button-quick-start": "Швидкий старт", "button-open": "Відкрити", "button-browse": "Перегляд", "button-connect": "Підключення", "button-create-vault": "Створити", "button-back": "Назад", "msg-empty-vault-name": "Назва сховища не може бути порожньою.", "msg-invalid-folder": "Будь ласка, виберіть дійсну папку.", "msg-failed-to-create-vault": "Не вдалося створити сховище.", "msg-failed-to-create-vault-at-location": "Не вдалося створити сховище в зазначеному місці. Будь ласка, перевірте місце розташування та дозвіл.", "msg-error-failed-to-open-vault": "Не вдалося відкрити.", "msg-error-remove-current-open-vault": "Неможливо видалити відкрите сховище.", "option-get-help": "Отримати Допомогу", "option-user-email": "Електрона адреса", "placeholder-your-email": "Ваша ел. адреса...", "option-user-password": "Пароль", "placeholder-your-password": "Ваш пароль...", "button-sign-in": "Зареєструватися", "button-setup": "Налаштування", "option-connect-vault-desc": "Створити на цьому пристрої сховище, що синхронізується.", "tooltip-own-vault": "Це віддалене сховище яким володієте ви.", "tooltip-shared-vault": "Це віддалене сховище яким з вами поділилися." }, "drag-and-drop": { "insert-link-here": "Вставити посилання", "insert-links-here": "Вставити посилання", "move-into-folder": "Перемістити до \"{{folder}}\"", "star-this-file": "Позначити цей файл", "star-these-files": "Позначити ці файли", "open-in-this-tab": "Відкрити в цій вкладці", "open-as-tab": "Відкрити як нову вкладку" }, "window": { "maximize": "Максимізувати", "minimize": "Мінімізувати", "restore-down": "Відновити вікно", "close-window": "Закрити вікно", "go-back": "Перейти назад", "go-forward": "Перейти вперед" }, "start-up": { "loading-obsidian": "Завантаження Obsidian...", "obsidian-load-error": "Під час завантаження Obsidian сталася помилка.", "button-reload-app": "Перезавантажити застосунок", "button-reload-app-in-safe-mode": "Перезапустити застосунок у безпечному режимі", "button-open-another-vault": "Відкрити інше сховище", "loading-components": "Завантаження компонентів...", "loading-plugins": "Завантаження плагінів...", "loading-vault": "Завантаження сховища...", "msg-failed-to-load-vault": "Не вдалося завантажити сховище: ", "loading-cache": "Завантаження кешу...", "loading-workspace": "Завантаження робочого простору..." }, "mobile": { "action-import": "Імпортувати у сховище", "action-choose-file-to-insert": "Виберіть файл для вставки", "action-insert-text-into-file": "Вставити текст у {{filename}}", "action-insert-link-into-file": "Вставити посилання у {{filename}}", "msg-importing": "Імпортування...", "msg-import-success": "Імпортування успішне", "msg-failed-to-import-file": "Не вдалося імпортувати файл {{filename}}", "msg-back-again-to-exit": "Натисніть клавішу назад ще раз для виходу..." }, "help-screen": { "label-official-help-site": "Офіційна сторінка допомоги", "label-official-help-site-desc": "Читайте офіційну документацію Obsidian доступну на різних мовах.", "action-visit": "Відкрити", "label-discord-chat": "Discord чат", "label-discord-chat-desc": "Discord це найкраще місце для спілкування з досвідченими користувачами Obsidian зі всього світу.", "action-join": "Приєднатися", "label-forum": "Офіційний форум", "label-forum-desc": "Допомагай іншим, пропонуй свої ідеї, докладай про баги, та доєднуйся до глибоких дискусій щодо управління знаннями.", "label-sandbox-vault": "Сховище - пісочниця", "label-sandbox-vault-desc": "Експериментуй та досліди всі можливості застосунку. Зауваж, що всі зміни в цьому сховищі видаляються після закриття." } }, "commands": { "save-file": "Зберегти поточний файл", "follow-cursor-link": "Перейти за посиланням під курсором", "open-cursor-link-in-new-tab": "Відкрити посилання під курсором у новій вкладці", "open-cursor-link-to-the-right": "Відкрити посилання під курсором праворуч", "open-cursor-link-in-new-window": "Відкрити посилання під курсором в новому вікні", "navigate-tab-above": "Фокусуватися на групі вкладок зверху", "navigate-tab-below": "Фокусуватися на групі вкладок знизу", "navigate-tab-left": "Фокусуватися на групі вкладок зліва", "navigate-tab-right": "Фокусуватися на групі вкладок справа", "toggle-pin": "Увімкнути/вимкнути закріплення області", "split-right": "Розділити праворуч", "split-down": "Розділити вниз", "toggle-stacked-tabs": "Скласти/розкласти вкладки", "navigate-back": "Повернутися назад", "navigate-forward": "Перейти вперед", "use-dark-mode": "Використовувати темну тему", "use-light-mode": "Використовувати світлу тему", "change-theme": "Змінити тему", "search-current-file": "Пошук у поточному файлі", "search-replace-current-file": "Пошук і заміна в поточному файлі", "open-settings": "Відкрити налаштування", "open-help": "Відкрити довідку", "toggle-edit": "Змінити режим перегляду (редагування/читання)", "toggle-source-mode": "Змінити режим редагування Динамічне відображення/Вихідний код", "delete-current-file": "Видалити поточний файл", "new-tab": "Нова вкладка", "close-all-tabs": "Закрити усі вкладки", "close-active-tab": "Закрити поточну вкладку", "close-other-tabs": "Закрити усі інші вкладки", "toggle-left-sidebar": "Згорнути/розгорнути ліву панель", "toggle-right-sidebar": "Згорнути/розгорнути праву панель", "toggle-default-new-tab-mode": "Увімкнути/вимкнути стандартний режим для всіх нових вкладок", "focus-editor": "Фокусуватися на редакторі", "toggle-fold": "Згорнути/розгорнути поточний заголовок/список", "fold-all": "Згорнути всі заголовки та списки", "unfold-all": "Розгорнути всі заголовки та списки", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "Поміняти місцями з верхнім рядком", "swap-line-down": "Поміняти місцями з нижнім рядком", "remove-heading": "Видалити заголовок", "toggle-heading": "Встановити як заголовок {{level}}", "toggle-bold": "Включити/виключити жирне накреслення для виділення", "toggle-italics": "Включити/виключити курсивне накреслення для виділення", "toggle-highlight": "Увімкнути/вимкнути тег підсвічування для виділення", "toggle-comments": "Включити/виключити коментарі для виділення", "insert-link": "Вставити посилання", "toggle-spellcheck": "Увімкнути/вимкнути перевірку орфографії", "delete-paragraph": "Вилучити абзац", "toggle-checklist": "Перемикнути стан прапорця", "cycle-list-checklist": "Вставити список/прапорець", "insert-callout": "Вставити виноску", "edit-file-title": "Редагувати заголовок файлу", "copy-path": "Скопіювати шлях до файлу", "copy-url": "Скопіювати Obsidian URL", "export-pdf": "Експортувати в PDF", "reload": "Перезавантажити застосунок без збереження", "undo-close-tab": "Відмінити закриття вкладки", "context-menu": "Показати контекстне меню під курсором", "show-debug-info": "Показати відлагоджувальну інформацію", "always-on-top": "Увімкнути/вимкнути режим вікна always on top", "zoom-in": "Збільшити", "zoom-out": "Зменшити", "reset-zoom": "Стандартний розмір", "toggle-preview": "Перемикнути між режимами редагування і читання", "move-to-new-window": "Перемістити поточну панель у нове вікно", "open-in-new-window": "Відкрити поточну панель у новому вікні", "rename-current-file": "Перейменувати поточний файл" }, "dialogue": { "label-link-affected": "Це вплине на {{links}} у {{files}}.", "msg-updated-links": "Оновлено {{links}} в {{files}}.", "label-update-links": "Оновити посилання", "label-confirm-update-link-to-file": "Чи хочете ви оновлювати внутрішні посилання, які вказують на цей файл?", "button-always-update": "Оновлювати завжди", "button-just-once": "Тільки зараз", "button-do-not-update": "Не оновлювати", "label-confirm-deletion": "Ви впевнені, що хочете видалити \"{{filename}}\"?", "label-move-to-system-trash": "Буде переміщений в системний Кошик.", "label-move-to-vault-trash": "Буде переміщений в кошик Obsidian, яка знаходиться в прихованій папці \".trash\" вашого сховища.", "label-permanent-delete": "Файл буде видалений безповоротно.", "label-non-empty-folder": "Ця папка не порожня.", "label-delete-folder-warning": "Якщо ви продовжите, всі файли всередині цієї папки будуть видалені.", "label-delete-folder": "Видалити папку", "button-delete": "Видалити", "button-delete-do-not-ask-again": "Видалити та більше не питати", "label-do-not-ask-again": "Більше не запитувати", "label-existing-backlink": "Зараз {{links}} вказують на цю нотатку.", "label-existing-backlink_plural": "{{links}} зараз посилаються на цю замітку.", "label-delete-file": "Видалити файл", "button-manage": "Змінити", "button-cancel": "Скасувати", "button-done": "Готово", "button-save": "Зберегти", "button-stop": "Зупинити", "button-continue": "Продовжити", "preparing-pdf": "Підготовка PDF...", "label-rename-file": "Перейменувати файл", "label-new-name": "Нове ім'я", "msg-rename-success": "Файл успішно перейменовано.", "label-rename-heading": "Перейменувати заголовок", "label-rename-blockid": "Перейменувати ID блоку" }, "menu-items": { "new-file": "Створити нотатку", "new-file-to-the-right": "Створити нотатку праворуч", "new-window": "Нове вікно", "open-switcher": "Швидко відкрити...", "open-vault": "Відкрити сховище...", "close-tab": "Закрити вкладку", "close-window": "Закрити вікно", "find": "Знайти", "replace": "Замінити", "insert-callout": "Виноска", "insert-markdown-link": "Markdown посилання", "insert-wikilink": "Посилання", "set-heading": "Заголовок {{level}}", "no-heading": "Без заголовку", "insert-quote": "Цитата", "export-pdf": "Експортувати PDF", "toggle-bullet-list": "Невпорядкований список", "toggle-numbered-list": "Нумерований список", "toggle-checklist": "Список задач", "toggle-bold": "Жирний", "toggle-code": "Код", "toggle-comment": "Коментар", "toggle-italics": "Курсив", "toggle-highlight": "Виділення", "toggle-strikethrough": "Закреслення", "toggle-comments": "Коментар", "fold-all": "Згорнути все", "unfold-all": "Розгорнути все", "fold-more": "Скласти більше", "fold-less": "FСкласти менше", "source-mode": "Режим-Source", "reading-view": "Режим читання", "show-debug-info": "Показати інформацію відлагодження", "navigate-back": "Перейти назад", "navigate-forward": "Перейти вперед", "toggle-left-sidebar": "Увімкнути/вимкнути ліву бокову панель", "toggle-right-sidebar": "Увімкнути/вимкнути праву бокову панель", "split-right": "Розділити праворуч", "split-down": "Розділити знизу", "release-notes": "Примітки до релізу" }, "plugins": { "name": "Плагіни", "file-explorer": { "name": "Файловий менеджер", "desc": "Показує всі файли вашого сховища.", "action-open": "Відкрити файловий менеджер", "action-show": "Показати файловий менеджер", "action-create-note": "Створити нову нотатку", "action-create-note-to-the-right": "Створити нову нотатку справа", "action-collapse-all": "Згорнути все", "action-expand-all": "Розгорнути все", "action-new-note": "Нова нотатка", "action-new-folder": "Нова папка", "action-change-sort": "Порядок сортування", "action-reveal-file": "Показати в файловому менеджері", "action-reveal-active-file": "Показати поточний файл у файловому менеджері", "command-move-file": "Перемістити файл в іншу папку", "action-move-file": "Перемістити файл у...", "action-move-folder": "Перемістити папку в...", "action-move-items": "Перемістити {{count}} об'єктів в...", "prompt-type-folder": "Введіть назву папки", "label-no-folders": "Папка з такою назвою не знайдена.", "instruction-navigate": "навігація", "instruction-move": "перемістити", "instruction-dismiss": "скасування", "label-sort-a-to-z": "За назвою файлу (А -> Я)", "label-sort-z-to-a": "За назвою файлу (Я -> А)", "label-sort-new-to-old": "За часом останньої зміни (від нових до старих)", "label-sort-old-to-new": "За часом останньої зміни (від старих до нових)", "label-sort-created-old-to-new": "За часом створення (від старих до нових)", "label-sort-created-new-to-old": "За часом створення (від нових до старих)", "menu-opt-new-note": "Нова нотатка", "menu-opt-new-folder": "Нова папка", "menu-opt-set-attachment-folder": "Встановити як папку для вкладених файлів", "menu-opt-rename": "Перейменувати", "menu-opt-delete": "Видалити", "menu-opt-make-copy": "Створити копію", "msg-invalid-characters": "Ім'я файлу не повинно містити такі символи: ", "msg-unsafe-characters": "Посилання не працюватимуть при наявності в найменуванні файлів будь-якого з цих символів: ", "msg-file-already-exists": "Файл з таким ім'ям вже є", "msg-empty-file-name": "Ім'я файлу не може залишатися порожнім.", "msg-bad-dotfile": "Ім'я файлу не може починатися з крапки'.", "tooltip-modified-time": "Час останньої зміни {{time}}", "tooltip-created-time": "Час створення {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Перемістити", "label-untitled-file": "Без назви", "label-untitled-folder": "Без назви", "msg-set-attachment-folder": "Вкладення тепер зберігатимуться в \"{{path}}\"." }, "search": { "name": "Пошук", "desc": "Шукати за ключовими словами у всіх нотатках.", "action-open-search": "Шукати у всіх файлах", "label-collapse-results": "Згорнути результати", "label-match-case": "Враховувати регістр", "label-explain-search-term": "Пояснити пошуковий рядок", "label-more-context": "Розгорнути контекст", "prompt-start-search": "Введіть пошуковий запит...", "label-match-text": "Відповідає тексту: ", "label-match-regex": "Відповідає регулярному вираженню: ", "label-match-exact-text": "Містить точний збіг: ", "label-match-all": "Збігається з усіма підрядками: ", "label-match-any": "Збігається з будь-яким підрядком: ", "label-excluding": "Виключаючи: ", "label-case-sensitive": "Враховуючи регістр", "label-case-insensitive": "Не враховуючи регістр", "label-match-file-path": "Збігається зі шляхом файлу: ", "label-match-file-name": "Збігається з ім'ям файлу: ", "label-match-content": "У вмісті файлу: ", "label-match-task": "Збіг задачі: ", "label-match-task-todo": "Збіг у задачі (todo): ", "label-match-task-done": "Збіг у задачі (done): ", "label-match-line": "Збіг у рядку: ", "label-match-block": "Збіг у блоці: ", "label-match-section": "Збіг у секції: ", "label-match-tag": "Збігається з тегом: ", "label-no-matches": "Збігів не знайдено.", "matches-with-count": "... і ще {{count}} збіги.", "matches-with-count_plural": "... і ще {{count}} збігів.", "label-copy-search-results": "Скопіювати результати пошуку", "button-copy-results": "Скопіювати результати", "msg-successfully-copied": "Результати скопійовані в буфер обміну.", "option-show-path": "Відображати шлях", "option-show-path-description": "Показувати повний шлях до файлу замість імені файлу.", "option-link-style": "Стиль посилань", "option-link-style-description": "Оформляти результати у вигляді посилань.", "option-choice-link-style-none": "Без посилання", "option-choice-link-style-wikilink": "Wiki-посилання", "option-choice-link-style-markdown-link": "Markdown-посилання", "option-list-prefix": "Префікс списку", "option-list-prefix-description": "Додавати префікс до кожного імені файлу в списку.", "option-choice-list-style-none": "Без префікса", "option-choice-list-style-dash": "Тире (-)", "option-choice-list-style-asterisk": "Зірочка (*)", "option-choice-list-style-numbered": "Нумерація", "tooltip-clear-search": "Очистити", "label-search-options": "Налаштування пошуку", "tooltip-read-more": "Додатково", "label-history": "Історія", "tooltip-clear-history": "Очистити історію пошуку", "label-path-option-description": "збіг у шляху до файлу", "label-file-name-option-description": "збіг в імені файлу", "label-tag-option-description": "збіг в тегах", "label-line-option-description": "ключові слова на одному рядку", "label-section-option-description": "ключові слова під одним заголовком", "menu-opt-search-for": "Шукати \"{{keyword}}\"" }, "quick-switcher": { "name": "Швидкий перехід", "desc": "Швидко переходьте до будь-якого файлу, не відриваючи рук від клавіатури. Викликається по поєднанню клавіш Ctrl/Cmd+O.", "short-name": "Перехід", "action-open": "Меню швидкого переходу", "instruction-navigate": "навігація", "instruction-open": "відкрити", "instruction-open-in-new-tab": "щоб відкрити нову вкладку", "instruction-open-to-the-right": "щоб відкрити праворуч", "instruction-create": "створити", "instruction-dismiss": "відміна", "label-no-note-create-new": "Такої нотатки не знайдено. Натисніть Enter, щоб створити нову.", "prompt-type-file-name": "Наберіть ім'я файлу для створення або переходу...", "label-enter-to-create": "Натисніть Enter для створення", "tooltip-not-created-yet": "Ще не створено, виберіть, щоб створити", "option-show-existing-only": "Показувати лише нотатки, що існують", "option-show-existing-only-description": "Показувати лише файли, що існують. Посилання на ще не створені файли будуть приховані.", "option-show-attachments": "Показувати вкладення", "option-show-attachments-desc": "Показувати вкладення (наприклад зображення, відео та PDF)", "option-show-all-file-types": "Показувати файли всіх типів", "option-show-all-file-types-desc": "Показувати всі файли, включаючи ті, що Obsidian відкрити не може. Такі файли будуть відкриті у програмі за замовчуванням для цього типу файлу." }, "graph-view": { "name": "Граф", "desc": "Графічне представлення зв'язків між нотатками.", "action-open": "Граф", "action-open-local": "Відкрити граф", "action-copy-screenshot": "Скопіювати скріншот", "tab-title": "Граф {{displayText}}", "label-filters": "Фільтри", "prompt-filter-nodes": "Шукати в...", "option-depth": "Глибина", "option-depth-description": "Глибина показу зв'язків", "option-neighbor-links": "Зв'язки з сусідніми нотатками", "option-neighbor-links-description": "Показувати зв'язки з сусідніми нотатками.", "option-forelinks": "Вихідні зв'язки", "option-forelinks-description": "Показувати посилання на інші файли", "option-backlinks": "Вхідні зв'язки", "option-backlinks-description": "Показувати посилання з інших файлів", "option-show-tags": "Теги", "option-show-tags-description": "Теги прив'язані до нотаток, що містять їх", "option-show-attachments": "Вкладення", "option-show-attachments-description": "Показувати вкладення, що містяться в нотатках", "option-show-existing-files-only": "Тільки створені нотатки", "option-show-existing-files-only-description": "Прибирає з показу посилання на ще не створені нотатки", "option-show-orphans": "Об'єкти без зв'язків", "option-show-orphans-description": "Показувати об'єкти, у яких немає зв'язків", "label-display": "Відображення", "option-show-arrows": "Напрямок зв'язків", "option-show-arrows-description": "Показувати напрямок при наближенні", "option-text-fade": "Поріг зникнення тексту", "option-node-size": "Розмір вузла", "option-link-thickness": "Товщина ліній", "label-forces": "Сили", "option-center-force": "Сила притягання", "option-link-force": "Сила зв'язку", "option-link-distance": "Відстань між вузлами", "option-repel-force": "Сила відштовхування", "tooltip-open-graph-settings": "Відкрити налаштування графа", "msg-screenshot-copied": "Знімок екрана скопійовано в буфер обміну.", "label-groups": "Групування", "placeholder-enter-query": "Пошуковий запит...", "tooltip-delete-graph": "Вилучити групу", "button-new-group": "Нова група", "tooltip-click-to-change-drag-to-reorder": "Зміна кольору\nУпорядкування перетягуванням", "action-timelapse": "Запустити анімацію графа в часі", "tooltip-start-timelapse-animation": "Почати анімацію", "button-animate-timelapse": "Анімувати" }, "backlinks": { "name": "Зворотні посилання", "desc": "Показувати кількість зворотних посилань у статусному рядку.", "action-open": "Показати зворотні посилання.", "action-show": "Показати панель зворотних посилань", "action-open-for-current": "Показати зворотні посилання для поточного файлу", "action-toggle-backlinks-in-document": "Змінити показ зворотних посилань в документі", "menu-opt-backlinks-in-document": "Зворотні посилання в документі", "label-linked-mentions": "Згадки з посиланням", "label-no-backlinks": "Зворотних посилань не знайдено.", "label-unlinked-mentions": "Згадки без посилання", "label-show-search": "Показати пошуковий запит", "label-link-button-text": "Посилання", "tab-title": "Зворотні посилання для {{displayText}}", "label-no-unlinked-mentions": "Згадок без посилання не знайдено.", "ellipsis": "...", "option-backlink-in-document": "Зворотні посилання в документі", "option-backlink-in-document-desc": "Показувати зворотні посилання в документі за замовчуванням для нових відкритих областей." }, "outgoing-links": { "name": "Вихідні посилання", "desc": "Показувати зворотні посилання та знаходити в нотатці згадки, що не пов'язані з іншими нотатками.", "action-open": "Відкрити вихідні посилання", "action-show": "Показати панель вихідних посилань", "action-open-for-current": "Відкрити вихідні посилання для поточного файлу", "tab-title": "Вихідні посилання з {{displayText}}", "label-links": "Посилання", "label-no-links": "Посилань не знайдено.", "label-unlinked-mentions": "Непов'язані згадки", "tooltip-link-file": "Зв'язати з поточним файлом", "tooltip-not-created": "Ще не створено" }, "tag-pane": { "name": "Панель тегів", "desc": "Показує всі теги та кількість їх згадок.", "action-show": "Показати панель тегів", "label-no-tags": "Не знайдено жодного тегу.", "label-sort-by-name-a-to-z": "По тегу (А -> Я)", "label-sort-by-name-z-to-a": "По тегу (Я -> А)", "label-sort-by-frequency-high-to-low": "За частотою (часто -> рідко)", "label-sort-by-frequency-low-to-high": "За частотою (рідко -> часто)", "action-show-nested-tags": "Показ вкладених тегів", "action-collapse-all": "Згорнути всі", "action-expand-all": "Розгорнути всі" }, "page-preview": { "name": "Попередній перегляд сторінки", "desc": "Попередній перегляд нотатки при наведенні курсора на внутрішнє посилання. Наведення + Ctrl/Cmd в режимі редагування..", "label-empty-note": "\"{{linktext}}\" ще не створена. Натисніть, щоб створити.", "label-source-editor": "Редактор", "label-source-preview": "Перегляд", "label-source-search": "Пошук, внутрішні та вихідні посилання", "label-require-mod": "Потребує {{key}} для використання попереднього перегляду" }, "starred": { "name": "Обране", "desc": "Додавайте в обране часто використовувані файли та пошукові запити.", "action-show": "Показати панель обраного", "action-toggle": "Додати/видалити з обраного поточний файл", "action-toggle-search": "Додати/видалити з обраного поточний пошук", "action-star": "Додати в обране", "action-unstar": "Вилучити з вибраного", "menu-opt-remove": "Видалити", "msg-successfully-starred": "{{type}} \"{{title}}\" додано до вибраного", "msg-removed-starred": "{{type}} \"{{title}}\" вилучений з обраного.", "msg-cannot-find-path": "Не вдалося знайти файл у \"{{path}}\"." }, "custom-css": { "name": "Користувальницький CSS", "desc": "Читає \"obsidian.css\" з вашого сховища і застосовує його.", "setting-community-themes": "Теми спільноти", "msg-fetching-themes": "Завантажуються дані про теми спільноти...", "prompt-filter": "Фільтр...", "label-dark-theme-only": "Тільки темні", "label-light-theme-only": "Тільки світлі", "label-use": "Використати", "label-stop-use": "Перестати використовувати тему", "label-install-and-use": "Встановити і використовувати", "label-update": "Оновити", "label-no-readme": "Ця тема не має файлу README.", "tooltip-remove-theme": "Видалити тему", "label-visit-on-github": "Перейти на GitHub", "msg-load-error": "Не вдалося завантажити теми спільноти. Будь ласка, перевірте з'єднання з Інтернетом.", "msg-now-using-theme": "Застосована CSS-тема {{title}}.", "msg-deleted-theme": "Тему {{title}} видалено.", "msg-updated-theme": "Тему {{title}} оновлено.", "label-installed": "Встановлена", "label-legacy": "Застаріла", "button-update-all-themes": "Оновити всі", "msg-failed-load-themes": "Не вдалося завантажити теми спільноти.", "msg-no-updates-found": "Оновлень не знайдено.", "msg-updates-found": "Знайдено {{count}} тем з можливістю оновлення.", "msg-updates-found_plural": "Знайдено {{count}} тем з можливістю оновлення.", "msg-failed-to-install-theme": "Не вдалося встановити тему \"{{name}}\".", "msg-successfully-installed-theme": "Успішно встановлено тему \"{{name}}\".", "msg-installing-theme": "Встановлення теми \"{{name}}\"...", "label-search-summary": "Відображається {{themeCount}}:", "label-update-available": "Доступне оновлення" }, "command-palette": { "name": "Палітра команд", "desc": "Введіть команду, яку хочете запустити. Дозволяє звертатися до функцій Obsidian без взаємодії з інтерфейсом і запам'ятовування поєднань клавіш.", "action-open": "Відкрити палітру команд", "instruction-navigate": "навігація", "instruction-use": "використати", "instruction-dismiss": "скасувати", "label-no-commands": "Команда не знайдена.", "prompt-type-command": "Введіть назву команди...", "label-pinned-commands": "Закріплені команди", "option-add-new-pin": "Закріпити команду", "option-add-new-pin-description": "Закріплені команди будуть показані зверху, коли поле пошуку пустує." }, "markdown-format-importer": { "name": "Імпорт Markdown-файлів", "desc": "Конвертує Markdown-файли з інших застосунків у формат Obsidian.", "action-open": "Імпорт Markdown-файлів", "option-roam-tag-fixer": "Виправити формат тегів з Roam Research", "option-roam-tag-fixer-description": "Конвертує \"#tag\" і \"#[[tag]]\" в \"[[tag]]\".", "option-roam-highlight-fixer": "Виправити формат виділення тексту з Rоam Research", "option-roam-highlight-fixer-description": "Конвертує \"^^highlight^^\" в \"==highlight==\".", "option-roam-todo-converter": "Виправити чекбокси з Roam Research", "option-roam-todo-converter-description": "Конвертує \"{{[[TODO]]}}\" в \"[ ]\".", "option-bear-highlight-fixer": "Виправити формат виділення тексту з Bear", "option-bear-highlight-fixer-description": "Конвертує \"::highlight::\" в \"==highlight==\".", "zettelkasten-link-fixer": "Виправити посилання на zettelkasten-нотатки", "zettelkasten-link-fixer-description": "Конвертує посилання \"[[UID]]\" в \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Виправити та відформатувати посилання на zettelkasten-нотатки", "zettelkasten-link-beautifier-description": "Конвертує посилання \"[[UID]]\" а також приведе їх до формату \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Увага: плагін перетворює всі файли у вашому сховищі, а не тільки поточний відкритий файл.", "msg-override-files-warning": "Ваші файли будуть перезаписані. Зробіть бекап всіх файлів перед тим, як почати конвертацію.", "label-start-conversion": "Почати конвертацію", "label-stop": "Зупинити", "label-go-back": "Назад", "label-done": "Закрити", "label-processing": "Обробка...", "label-cancelling": "Скасування...", "label-finished": "Готово!", "label-processed-files": "Оброблено", "label-modified-files": "Змінено", "label-total-replacements": "Всього замін" }, "daily-notes": { "name": "Щоденні нотатки", "desc": "Відкриває сьогоднішню щоденну нотатку, або створює її вперше.", "short-name": "Щоденник", "action-open": "Сьогоднішня нотатка", "action-open-previous": "Відкрити попередню щоденну нотатку", "action-open-next": "Відкрити наступну щоденну нотатку", "action-insert-text": "Вставити текст у щоденну нотатку", "action-insert-link": "Вставити посилання у щоденну нотатку", "msg-fail-format": "Не вдалося створити щоденну нотатку. Невірний формат \"{{format}}\".", "msg-fail-folder": "Не вдалося створити щоденну нотатку. Папка \"{{Folder Option}}\" не знайдено.", "msg-fail-template-file": "Не вдалося створити щоденну нотатку. Файл шаблону \"{{template}}\" не знайдено.", "msg-no-previous": "Попередні щоденні нотатки відсутні.", "msg-no-next": "Пізніші щоденні нотатки відсутні.", "option-date-format": "Формат дати", "label-refer-to-syntax": "Для більш детальної інформації про синтаксис перейдіть по: ", "label-syntax-link": "посиланню", "label-syntax-live-preview": "Приклад: ", "option-new-file-location": "Розташування нового файлу", "option-new-file-location-description": "Шлях до папки, в якій буде створюватися нова щоденна нотатка.", "option-template": "Розташування шаблону", "option-template-description": "Шлях до файлу, який буде використовуватися як шаблон.", "option-open-on-start": "Відкривати нотатку на сьогодні", "option-open-on-start-description": "Автоматично відкривати сьогоднішню нотатку при відкритті сховища" }, "unique-note-creator": { "name": "Конструктор унікальних нотаток", "desc": "Створює нову нотатку з унікальним часовим префіксом, особливо корисний якщо ви користуєтесь zettelkasten або slip box.", "short-name": "Unique", "action-create-note": "Створити нову унікальну нотатку", "option-new-file-location": "Місцезнаходження нового файлу", "option-new-file-location-description": "Шлях до папки нового нотатку.", "msg-folder-not-found": "Не вдалося створити нову унікальну нотатку. Папку \"{{folderOption}}\" не знайдено.", "option-template-file": "Шлях до файлу шаблону", "option-template-file-description": "Шлях до файлу, який буде використано як шаблон.", "option-template-file-placeholder": "Приклад: папка1/нотаток", "option-id-format": "Формат унікального префіксу", "msg-template-file-not-found": "Не вдалося створити нову унікальну нотатку. Файл шаблону \"{{template}}\" не знайдено.", "msg-failed-to-generate": "Не вдалося згенерувати унікальну нотатку формату \"{{format}}" }, "random-note": { "name": "Випадкова нотатка", "desc": "Відкриває випадкову нотатку. Може стати в пригоді для повторного читання і несподіваних відкриттів.", "short-name": "Випадкова", "action-open": "Відкрити випадкову нотатку" }, "outline": { "name": "Вміст", "desc": "Показує вміст поточного файлу або пов'язаної області.", "action-open": "Відкрити вміст", "action-show": "Показати панель вмісту", "action-open-for-current": "Відкрити вміст для поточного файлу", "tab-title": "Вміст {{displayText}}", "label-no-headings": "Не знайдено жодного заголовка." }, "word-count": { "name": "Лічильник слів", "desc": "Показує кількість слів у рядку стану." }, "slides": { "name": "Слайди", "desc": "Приємний сюрприз від Markdown. Щоб розділити слайди, використовуйте \"---\".", "action-start": "Почати презентацію" }, "audio-recorder": { "name": "Диктофон", "desc": "Записує аудіо і зберігає його як вкладення.", "action-start": "Почати запис аудіо", "action-stop": "Зупинити запис аудіо", "action-toggle": "Почати/зупинити запис", "msg-access-denied": "Доступ до мікрофона був відхилений. Будь ласка, дозвольте доступ з панелі налаштувань вашої системи", "msg-pending-grant": "Дайте дозвіл на доступ до мікрофона, щоб почати запис.", "msg-no-microphone": "Не вдалося виявити мікрофон.." }, "open-with-default-app": { "name": "Відкрити в застосунку за замовчуванням", "desc": "Додає можливість відкривати поточний файл в застосунку за замовчуванням.", "action-open-file": "Відкрити в застосунку за замовчуванням", "action-open-file-mobile": "Поширити", "action-show-in-folder": "Показати папку, що містить", "action-show-in-folder-mac": "Переглянути в Finder" }, "templates": { "name": "Шаблони", "desc": "Вставити вміст шаблону з папки шаблонних файлів.", "action-insert": "Вставити шаблон", "action-insert-current-date": "Вставити поточну дату", "action-insert-current-time": "Вставити поточний час", "option-template-folder-location": "Шлях до папки з шаблонами.", "option-template-folder-location-description": "Файли з цієї папки будуть доступні як шаблони.", "option-template-date-format": "Формат дати", "option-template-date-format-description": "{{date}} у файлі шаблону заміниться на це значення.", "option-template-date-format-description2": "Використовуйте конструкцію {{date: YYYY-MM-DD}}, щоб задати формат прямо в шаблоні.", "option-template-time-format": "Формат часу", "option-template-time-format-description": "{{time}} у файлі шаблону заміниться на це значення..", "option-template-time-format-description2": "Використовуйте конструкцію {{time: HH: mm}}, щоб задати формат прямо в шаблоні.", "instruction-navigate": "навігація", "instruction-insert": "вставити шаблон", "instruction-dismiss": "скасування", "msg-no-templates-found": "Шаблони не знайдені", "msg-fail-invalid-folder": "Не вдалося показати шаблони. Неприпустиме ім'я папки шаблонів.", "msg-fail-folder-not-found": "Не вдалося показати шаблони. Папка \"{{Folder Option}}\" не знайдено.", "prompt-type-template": "Введіть ім'я шаблону..." }, "translucency": { "name": "Напівпрозоре вікно", "desc": "Додає інтерфейсу відчуття глибини, особливо в темному режимі. Не працює під Linux." }, "slash-command": { "name": "Слеш команди", "desc": "Дозволяє використовувати слеш команди під час редагування, якщо набрати \"/\"." }, "editor-status": { "name": "Режим редактору", "desc": "Додає елемент до статус-бару, що показує режим перегляду та дозволяє його змінити", "read": "Читання", "edit-source": "Вихідний код", "edit-live-preview": "Динамічне відображення" }, "publish": { "name": "Публікація", "desc": "Публікуйте свої нотатки за допомогою Obsidian Publish.", "action-publish-changes": "Публікація змін", "label-no-internet-access": "Для публікації змін потрібен доступ до Інтернету.", "label-publish-service-description": "Obsidian Publish це додатковий платний сервіс для публікації нотаток в інтернет безпосередньо з Obsidian", "label-please-login": "Перед початком публікації увійдіть у свій обліковий запис Obsidian або зареєструйте новий.", "label-no-publish-subscription": "Ви не підписані на сервіс Obsidian Publish.", "button-purchase": "Придбати", "label-manage-sites": "Управління сайтами", "label-no-sites": "У вас немає сайтів.", "button-choose": "Вибрати", "tooltip-edit-site-id": "Змінити ID сайту", "tooltip-delete-site": "Видалити сайт", "label-delete-site-confirmation": "Ви дійсно хочете видалити цей сайт?", "label-delete-site-details": "Сайт буде негайно і назавжди видалений.", "label-confirm-delete-site": "Підтвердити видалення сайту \"{{site}}\"", "option-site-id": "ID сайту", "option-site-id-description": "Сайт буде доступний за адресою https://publish.obsidian.md/{site id}. Його можна змінити пізніше. Допускаються тільки малі літери, цифри та тире.", "option-site-id-placeholder": "Виберіть ID сайту", "button-create": "Створити", "msg-invalid-site-id": "В ID сайту допускаються тільки малі літери, цифри та тире.", "msg-site-id-in-use": "Такий ID сайту вже зайнятий, спробуйте інший.", "msg-create-site-issue": "При створенні сайту сталася помилка", "label-site-options": "Налаштування сайту", "option-site-general": "Загальне", "option-site-components": "Компоненти", "option-site-appearance": "Оформлення", "option-site-reading-experience": "Зручність читання", "option-site-misc": "Інші налаштування сайту", "option-site-name": "Назва", "option-site-name-description": "Назва сайту, що публікується. Воно буде показуватися в заголовках сторінок.", "option-site-name-placeholder": "Назва сайту", "option-home-page-file": "Домашня сторінка", "option-home-page-file-description": "Перша сторінка, яку побачить відвідувач опублікованого сайту", "option-home-page-file-placeholder": "Виберіть опублікований файл", "option-logo": "Лого", "option-logo-description": "Оберіть зображення логотипа вашого сайту.", "option-logo-placeholder": "Будь-яке зображення з вашого сховища...", "option-site-collaboration": "Колаборація сайту", "option-site-collaboration-desc": "Керування колаборантами для цього сайту.", "button-manage-collaborators": "Керування", "option-theme": "Тема", "option-theme-description": "Виберіть колірну тему оформлення сайту.", "option-theme-system": "Адаптувати до системи", "option-show-theme-toggle": "Перемикання Світлої/Темної теми", "option-show-theme-toggle-description": "Дозволити користувачам змінювати тему.", "option-show-navigation": "Показ навігації", "option-show-navigation-description": "Показ списку всіх опублікованих сторінок в лівій частині.", "option-show-search": "Показ рядка пошуку", "option-show-search-description": "Показувати рядок пошуку над навігацією, щоб відвідувачі могли шукати по вмісту і заголовкам вашого сайту.", "option-show-graph": "Показ графа", "option-show-graph-description": "Показувати маленький граф на кожній сторінці.", "option-show-outline": "Показ змісту", "option-show-outline-description": "Показувати структуру заголовків на кожній сторінці", "option-show-backlinks": "Показ зворотних посилань", "option-show-backlinks-description": "Показувати розділ зі зворотними посиланнями в кінці кожної сторінки", "option-sliding-window-mode": "Використання зсувних вікон", "option-sliding-window-mode-description": "Відкривати сторінки в нових областях праворуч. Дозволяє пересуватися по областях горизонтально.", "option-hover-preview-file": "Показ попереднього перегляду", "option-hover-preview-file-description": "Показувати попередній перегляд при наведенні курсора на посилання.", "option-hide-title": "Ховати назву сторінки", "option-hide-title-description": "Ховає заголовок з назвою. Може бути корисним якщо ви маєте заголовки з назвами у кожному файлі.", "option-readable-line-length": "Обмежити максимальну довжину рядка", "option-readable-line-length-description": "Підвищує зручність читання довгих абзаців, але зменшує кількість інформації, що поміщається на екрані.", "option-site-password": "Паролі", "option-site-password-description": "Обмежити доступ до сайту за допомогою паролів.", "option-google-analytics": "Трекінг код Google Analytics", "option-google-analytics-description": "Налаштування Google Analytics для вашого сайту. Доступно лише для користувачів з вашого власного домену URL. Якщо закони вашої країни не дозволяють цього, рекомендуємо вимкнути.", "button-manage-passwords": "Налаштувати", "button-save-site-settings": "Зберегти", "msg-updated-options": "Налаштування для сайту збережені.", "button-go-back": "Назад", "label-publishing-to": "Публікація на", "tooltip-switch-site": "Вибрати інший сайт", "button-add-linked": "Додати пов'язані", "tooltip-add-linked": "Додати всі файли, пов'язані з виділеними об'єктами", "msg-added-linked-files": "Додано пов'язаних файлів: {{count}}.", "msg-added-linked-files_plural": "Додано пов'язаних файлів: {{count}}.", "tooltip-open-site-options": "Налаштування сайту", "label-no-changes-detected": "Зміни не виявлені..", "label-changed-files-to-be-published": "Змінений", "label-unchanged-files-already-published": "Без змін (виділіть для видалення)", "label-file-selected": " виділено", "button-select-all-files": "Виділити всі", "button-deselect-all-files": "Зняти виділення", "label-new-files-to-be-published": "Новий", "button-publish": "Опублікувати", "msg-no-permission-to-publish-to-site": "У вас недостатньо прав для публікації на обраний сайт.", "msg-select-at-least-one-file": "Будь ласка, виділіть файл.", "label-upload-changes": "Завантажити зміни", "button-done": "Готово", "button-stop": "Стоп", "label-status-uploading": "Завантажується", "label-status-to-publish": "До публікації", "label-status-to-delete": "До видалення", "label-status-published": "Опубліковано", "label-status-deleted": "Видалено", "label-status-failed": "Не вдалося", "label-status-cancelled": "Скасовано", "button-change": "Змінити", "label-clear-cache": "Зміни покажуться на сайті протягом декількох хвилин. Спробуйте очистити кеш браузера, якщо зміни не видно.", "label-visit-site": "Ваш сайт доступний за адресою: ", "msg-something-went-wrong": "Щось пішло не так. Подробиці в консолі для розробників.", "msg-network-error": "Сталася мережева помилка. ", "label-manage-passwords": "Управління паролями", "label-add-password": "Додавання пароля", "action-new-password": "Новий пароль", "label-no-password": "Ваш сайт не захищений паролем і видно всім.", "label-have-password": "Ваш сайт захищений паролем. Якщо ви встановили кілька паролів, відвідувачі можуть отримати доступ до сайту з будь-яким з них", "option-password-name": "Пароль", "option-password-desc": "Пароль хешується і не зберігається у вигляді звичайного тексту.", "option-password-placeholder": "Ваш пароль", "option-nickname-name": "Псевдонім (опціонально)", "option-nickname-desc": "Встановіть псевдонім, щоб запам'ятати, для чого або для кого даний пароль.", "action-add-password": "Зберегти", "label-untitled-password": "Пароль без назви", "label-password-created-time": "Створений {{time}}", "msg-added-new-password": "Новий пароль збережено.", "option-custom-domain": "Особистий домен", "option-custom-domain-desc": "Використовуйте свій власний домен замість https://publish.obsidian.md/{site id}.", "option-noindex": "Заборонити індексацію пошуковикам", "option-noindex-desc": "Запобігти індексації сайту пошуковими машинами.", "button-configure": "Налаштувати", "label-configure-custom-domain": "Налаштування особистого домену", "option-custom-url-name": "Особистий URL", "option-custom-url-desc": "URL-адреса за якою буде доступний ваш сайт.", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "Пересилати на користувацький домен", "option-custom-url-redirect-desc": "Пересилати користувачів з publish.obsidian.md/id до вашого користувацького домену.", "button-update-custom-domain": "Зберегти", "label-custom-domain-instructions": "Більше інформації щодо налаштування особистого домену доступно в {{link}}.", "label-custom-domain-link-name": "документація Obsidian", "label-site-usage": "Ви використовуєте {{site}} з {{limit}}.", "button-add-more-sites": "Купити ще сайт", "label-no-sites-bought": "Ви не купили жодного сайту.", "button-get-site": "Отримати сайт", "label-manage-sharing": "Керування поширеним для \"{{name}}\"", "label-sharing-with-users": "Цей сайт наразі поширено з наступними людьми.", "label-not-sharing": "Цей сайт наразі ні з ким не поширено.", "label-invite-pending": "Очікується", "tooltip-remove-user": "Видалити користувача", "option-invite-user": "Запросити користувача", "placeholder-invite-user": "Введіть їх ел. пошту...", "error-email-must-be-valid": "Будь ласка, введіть плавильну ел. пошту щоб запросити когось.", "msg-enable-publish-plugin": "Будь ласка, увімкніть вмонтований плагін 'Публікація' в Налаштування -> Вмонтовані плагіни, щоб переглянути сайти.", "label-your-sites": "Ваші сайти", "label-sites-shared-with-you": "Сайти якими поділилися з вами", "tooltip-leave-site-sharing": "Припинити колаборації з цим сайтом", "label-leave-site-confirmation": "Підтвердити зупинку колаборації", "label-leave-site-confirmation-details": "Це видалить сайт зі списку поширених з вами. Повернути сайт буде неможливо.", "label-leave-site-confirmation-details-2": "Будь ласка, зв'яжіться з власником цього сайту, якщо ви знову хочете колаборувати з цим сайтом.", "button-leave": "Вийти", "label-compare-with-live": "Порівняти з версією на сайті", "button-use-live-version": "Використати версію з сайту", "label-confirm-override": "Підтвердити перезапис локальної версії", "label-confirm-override-1": "Ви впевнені, що хочете перезаписати локальну версію?", "label-confirm-override-2": "Буде використана версія з сайту, ваша локальна версія буде замінена. Будь ласка, зробіть резервну копію, якщо це необхідно.", "button-proceed": "Продовжити", "message-successfully-used-live-version": "Версія з сайту використана успішно, вашу локальну версію перезаписано.", "label-open-file": "Відкрити файл", "tooltip-manage-publish-filters": "Керування фільтрами публікації", "option-included-folders": "Включені папки", "option-included-folders-desc": "Файли в цих файлах будуть автоматично обрані, коли ви будете переглядати зміни до публікації.", "option-currently-included-folders": "Наразі ці папки включені:", "option-excluded-folders": "Виключені папки", "option-excluded-folders-desc": "Файли в цих папках не будуть показуватись, коли ви будете переглядати зміни до публікації. Це налаштування більш пріорітетне за попереднє.", "label-number-of-folders-included": "Obsidian Publish наразі включає {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish назарі виключає {{folders}}.", "label-manage-included-folders": "Керування включеними папками", "label-manage-excluded-folders": "Керування виключеними папками", "label-add-included-folder": "Включити папку", "label-add-included-folder-desc": "Ви можете включати як наявні, так і не наявні папки.", "tooltip-contact-support": "Зв'язатись зі службою підтримки" }, "workspaces": { "name": "Простори", "desc": "Зберігайте і завантажуйте власні варіанти компонування робочого простору.", "action-load-layout": "Завантажити простір", "action-manage-layouts": "Керування просторами", "action-save-and-load-layout": "Зберегти або завантажити інший простір", "placeholder-save-current-layout-as": "Зберегти простір як...", "button-save": "Зберегти", "button-load": "Завантажити", "tooltip-delete-layout": "Видалити простір", "msg-delete-layout-success": "Простір видалено.", "msg-enter-name": "Введіть ім'я нового простору.", "msg-save-layout-success": "Простір збережено.", "label-no-layout-found": "Немає збережених просторів.", "placeholder-type-to-search-layouts": "Введіть ім'я простору..." }, "sync": { "name": "Синхронізація", "desc": "Синхронізуйте файли за допомогою Obsidian Sync.", "action-view-version-history": "Показати історію версій", "label-load-more": "Завантажити ще", "label-show-diff": "Показати відмінності", "label-copy-to-clipboard": "Скопіювати в буфер обміну", "label-restore-this-version": "Відновити цю версію", "msg-already-latest-version": "Поточна версія найостанніша.", "msg-restored-version": "Версія від {{time}} відновлена", "label-file-deleted": "Цей файл був видалений", "label-no-earlier-version": "Більш ранні версії даного файлу відсутні.", "label-empty-file": "Порожньо", "label-setting-files": "Налаштувати файли", "label-deleted-files": "Видалені файли", "label-version-history": "Історія версій", "label-click-to-see-history": "Клацніть на віддаленому файлі, щоб переглянути його історію.", "label-create-remote-vault": "Створення сховища", "msg-please-enter-password": "Будь ласка, введіть пароль.", "msg-vault-name-cannot-be-empty": "Назва сховища не може бути порожнім..", "msg-successfully-created-vault": "Сховище \"{{name}}\" створено.", "label-remote-vault-explanation": "Сховища в Obsidian Sync безпечно синхронізують ваші дані між пристроями", "option-vault-name": "Назва", "option-vault-name-desc": "Допоможе запам'ятати призначення сховища.", "option-vault-name-placeholder": "Моє сховище", "option-use-custom-encryption-password": "Увімкнути наскрізне шифрування", "option-use-custom-encryption-password-desc": "Якщо опція вимкнена, ми беремо безпечне зберігання ключа шифрування на себе.", "option-use-custom-encryption-password-desc-warning": "Це налаштування не може бути змінена пізніше.", "option-encryption-password": "Пароль шифрування", "option-encryption-password-desc": "Цей пароль не може бути змінений пізніше.", "option-encryption-password-desc-warning": "Якщо ви забудете пароль, доступ до синхронізованих даних буде втрачено назавжди.", "option-encryption-password-desc-2": "Це налаштування ніяк не впливає на ваші локальні дані.", "option-encryption-password-placeholder": "Ваш пароль", "label-enter-encryption-password": "Введіть пароль шифрування", "button-unlock-vault": "Відкрити", "msg-verified-password": "Пароль шифрування підтверджено.", "label-remote-vaults": "Сховища в Obsidian Sync", "label-vault-created-time": "Створено {{time}}", "tooltip-delete-remote-vault": "Видалити", "tooltip-manage-sharing": "Налаштувати доступ", "label-confirm-delete-remote-vault": "Підтвердьте видалення сховища", "label-confirm-delete-remote-vault-question": "Ви впевнені, що хочете видалити це сховище з Obsidian Sync?", "label-confirm-delete-remote-vault-result": "Всі дані на нашому сервері, включаючи історію версій, будуть видалені. Ваші локальні файли залишаться недоторканими.", "label-confirm-delete-remote-vault-warning": "Цю дію не можна скасувати..", "msg-remote-vault-deleted": "Сховище {{name}} видалено з Obsidian Sync.", "button-connect-to-remote-vault": "Під'єднати", "button-disconnect-from-remote-vault": "Від'єднати", "label-not-remote-vaults": "У вас немає синхронізованих сховищ..", "button-create-new-remote-vault": "Нове сховище", "label-sync-log": "Історія синхронізації", "options-only-show-errors": "Тільки помилки", "options-only-show-errors-desc": "Показати тільки помилки, приховавши інші події", "button-copy-sync-log": "Скопіювати", "msg-successfully-copied-sync-log": "Історія синхронізації скопійована.", "button-retry": "Повторити", "button-purchase-subscription": "Придбати", "option-remote-vault": "Віддалене сховище", "button-choose-remote-vault": "Вибрати", "button-manage-remote-vault": "Налаштувати", "option-remote-vault-desc-connected": "Підключено до \"{{name}}\" віддаленого сховища.", "option-remote-vault-desc-not-connected": "Наразі не підключено до жодного віддаленого сховища.", "option-sync-status": "Статус синхронізації", "option-sync-status-desc-paused": "Синхронізація припинена..", "option-sync-status-desc-running": "Синхронізація включена.", "option-device-name": "Назва пристрою", "option-device-name-desc": "Ця назва буде показана в історії синхронізації. Залишіть поле пустим, щоб використовувати ім'я за замовчуванням.", "button-resume": "Відключити", "button-pause": "Включити", "option-view-deleted-files": "Видалені файли", "option-view-deleted-files-desc": "Перегляд і відновлення вилучених файлів.", "option-sync-log": "Історія", "option-sync-log-desc": "Перегляд історії синхронізації.", "button-view": "Відкрити", "button-bulk-restore": "Масове відновлення", "button-restore-selected-files": "Відновлення обраних файлів", "msg-restoring": "Відновлення...", "msg-restoring-complete": "Відновлення виконано: {{succeeded}} успішно та {{failed}} з помилкою.`", "option-over-size": "Сховище занадто велике", "option-over-size-desc": "Обсяг сховища {{size}} з {{limit}}.", "msg-largest-files": "Великі файли", "msg-largest-files-desc": "Ці файли, що займають найбільшу кількість місця. Після видалення вкладень натисніть Очистити для звільнення місця в пов'язаних сховищах.", "button-purge-remote": "Очистити", "tooltip-purge-remote": "Безповоротно видалити старі вкладення з пов'язаних сховищ для звільнення місця.", "msg-purge-complete": "Очищення виконано.", "option-prevent-sleep": "Заборонити перехід у сон", "option-prevent-sleep-desc": "Залишає програму активною та блокує перехід у режим сну пристрою, щоб синхронізувати файли.", "option-selective-sync": "Вибіркова синхронізація", "option-excluded-folders": "Винятки", "option-excluded-folder-desc": "Виберіть папки, які не будуть синхронізовані.", "option-currently-excluded-folders": " Поточний список винятків:", "button-manage-excluded-folders": "Налаштувати", "option-sync-image": "Синхронізація зображень", "option-sync-image-desc": "Підтримувані розширення зображень: {{extensions}}.", "option-sync-audio": "Аудіо", "option-sync-audio-desc": "Підтримувані розширення аудіо: {{extensions}}.", "option-sync-video": "Відео", "option-sync-video-desc": "Підтримувані розширення відео: {{extensions}}.", "option-sync-pdf": "PDF", "option-sync-pdf-desc": "Синхронізувати PDF-файли..", "option-sync-unsupported": "Синхронізувати всі інші типи файлів", "option-sync-unsupported-desc": "Синхронізація файлів, що не підтримуються.", "option-vault-config-sync": "Синхронізація налаштувань сховища", "option-view-config-files": "Історія версій налаштувань", "option-view-config-files-desc": "Переглядайте та відновлюйте історію версій файлів налаштувань.", "option-sync-app": "Головні налаштування", "option-sync-app-desc": "Увімкніть для синхронізації налаштувань редактора, файлів, посилань, і таке інше.", "option-sync-appearance": "Налаштування оформлення", "option-sync-appearance-desc": "Синхронізувати налаштування оформлення, такі як темний режим, активна тема та увімкнені CSS фрагменти.", "option-sync-appearance-data": "Теми та CSS фрагменти", "option-sync-appearance-data-desc": "Синхронізувати завантажені теми та CSS фрагменти. Увімкнені вони чи ні вирішує попереднє налаштування.", "option-sync-hotkey": "Сполучення клавіш", "option-sync-hotkey-desc": "Синхронізувати власні сполучення клавіш.", "option-sync-core-plugin": "Список активних вмонтованих файлів", "option-sync-core-plugin-desc": "Синхронізувати обрані вмонтовані плагіни.", "option-sync-core-plugin-data": "Налаштування вмонтованих плагінів", "option-sync-core-plugin-data-desc": "Синхронізувати налаштування вмонтованих плагінів.", "option-sync-community-plugin": "Активний список плагінів спільноти", "option-sync-community-plugin-desc": "Синхронізувати обрані плагіни спільноти.", "option-sync-community-plugin-data": "Завантажені плагіни спільноти", "option-sync-community-plugin-data-desc": "Синхронізувати встановленні плагіни спільноти (файли .js, .css, та manifest.json) та їх налаштування.", "label-sync-introduction": "Obsidian Sync-сервіс для синхронізації сховищ з підтримкою наскрізного шифрування і версійності.", "label-account-required": "Увійдіть або створіть обліковий запис, щоб почати користуватися синхронізацією.", "button-sign-up": "Зареєструватися", "button-log-in": "Увійти", "label-manage-excluded-folders": "Налаштування винятків", "label-number-of-folders-excluded": "{{folders}} не будуть синхронізовані.", "label-add-excluded-folder": "Виключити папку", "label-add-excluded-folder-desc": "Ви можете виключити папку, що існує, або ще не створену папку.", "tooltip-remove-excluded-folder": "Видалити зі списку виключення", "label-setup-connection": "Налаштування з'єднання", "label-now-connected-to-vault": "Встановлено з'єднання зі сховищем \"{{name}}\".", "button-start-syncing": "Почати синхронізацію", "label-confirm-merge-vault": "Підтвердити злиття сховища", "msg-vault-has-notes": "Ваше локальне сховище вже містить декілька нотаток.", "msg-vault-merge-warning": "Якщо ви під'єднаєтесь до віддаленого сховища \"{{name}}\", нотатки з локального сховища будуть злиті з нотатками віддаленого сховища. Конфлікти вирішуватимуться на основі дати та зміни.", "tooltip-update-setting-on-all-devices": "Будь ласка, оновіть цю опцію та перезавантажте застосунок на всіх пристроях, де ви хочете отримати зміни.", "label-sharing-with-users": "Це віддалене сховище наразі поширено за наступними людьми.", "label-not-sharing": "Це віддалене сховище ні з ким не поширене.", "label-vaults-shared-with-you": "Сховища поширені з вами", "tooltip-leave-vault-sharing": "Припинити співпрацю над цим сховищем", "label-leave-vault-confirmation": "Підтвердити припинення співпраці", "label-leave-vault-confirmation-details": "Це призведе до видалення цього сховища зі списку сховищ, до яких ви маєте доступ. Ця дія не може бути скасована.", "label-leave-vault-confirmation-details-2": "Якщо ви бажаєте знову співпрацювати над цим сховищем, будь ласка, зв'яжіться з власником сховища.", "button-leave": "Вийти", "label-require-subscription-to-connect": "Вам необхідна підписка Obsidian Sync щоб під'єднатись до цього сховища.", "option-contact-support": "Зв'язатись зі службою підтримки", "option-contact-support-desc": "Якщо у вас є проблеми з послугою Obsidian Sync, будь ласка, зв'яжіться з нами, і ми вам допоможемо! Ви можете писати нам на support@obsidian.md.", "button-email-support": "Підтримка за ел. поштою" }, "file-recovery": { "name": "Відновлення файлів", "desc": "Дозволяє відновити стан файлів базуючись на знімках. Допомагає запобігти випадковій втраті інформації. Знімки працюють лише з Markdown файлами.", "action-open": "Відкрити збережені знімки", "option-interval": "Інтервал знімка", "option-interval-description": "Мінімальний інтервал у хвилинах між двома знімками.", "option-keep": "Довжина історії", "option-keep-description": "Визначає скільки днів потрібно зберігати знімки.", "option-open-history": "Знімки", "option-open-history-description": "Перегляд та відновлення збережених знімків.", "button-view-snapshots": "Перегляд", "option-clear": "Очистити історію", "option-clear-description": "Видаляє всі знімки.", "button-clear-history": "Очистити", "label-clear-warning": "Ви дійсно хочете видалити всі знімки? Зауважте, що видаляються лише знімки. Всі файли у вашому сховищі залишаться недоторканими.", "msg-clear-complete": "Знімки видалено", "label-no-history-found": "Знімків не знайдено.", "placeholder-choose-file": "Оберіть файл...", "label-select-file": "Будь ласка, оберіть файл зліва для того, щоб переглянути його знімки." }, "note-composer": { "name": "Компонування нотаток", "desc": "Об'єднує, витягує та перетворює нотатки.", "option-confirm-file-merge": "Підтвердити об'єднання файлів", "option-confirm-file-merge-description": "Питати перед об'єднанням двох файлів.", "option-split-replacement-text": "Текст після витягування", "option-split-replacement-text-description": "Показ вікна підтвердження об'єднання файлів.", "option-choice-split-replacement-text-link": "Посилання на новий файл", "option-choice-split-replacement-text-embed": "Вкласти новий файл", "option-choice-split-replacement-text-none": "Нічого", "option-template-file": "Шлях до файлу шаблону", "option-template-file-description": "Шаблон файлу, що використовується під час об'єднання або витягування. Доступні змінні: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, напр. {{date:YYYY-MM-DD}}.", "command-merge-file": "Об'єднати поточний файл з іншим файлом...", "action-merge-file": "Об'єднати весь файл з...", "label-no-files": "Файлів не знайдено.", "instruction-navigate": "навігація", "instruction-merge": "об'єднати", "instruction-create-new": "створити новий", "instruction-merge-at-top": "помістити в початок", "instruction-dismiss": "скасування", "prompt-select-file-to-merge": "Оберіть файл для об'єднання...", "label-merge-file": "Об'єднання файлу", "label-confirm-file-merge": "Ви дійсно хочете об'єднати \"{{file}}\" з \"{{destination}}\"? Файл \"{{file}}\" буде видалено.", "button-merge": "Об'єднати", "button-merge-do-not-ask-again": "Об'єднати та більше не питати", "command-split-file": "Витягти поточне виділення...", "command-extract-heading": "Витягти цей заголовок...", "instruction-append": "помістити в кінець", "instruction-prepend": "помістити в початок", "msg-fail-to-fetch-template": "Помилка під час виклику шаблону: \"{{template}}\" не знайдено.", "msg-fail-to-find-heading": "Заголовок не знайдено" }, "canvas": { "name": "Полотно", "desc": "Розташовуйте і з'єднуйте нотатки на нескінченному полотні.", "action-add-note": "Додати нотатку з сховища", "action-add-media": "Додати медіа з сховища", "action-add-card": "Додати картку", "action-add-website": "Додати веб-сторінку", "action-create-group": "Створити групу", "action-create-with-size": "Створити картку з визначеним розміром", "action-convert-to-file": "Конвертувати в файл...", "action-drag-to-add-note": "Перетягніть, щоб додати нотатку зі сховища", "action-drag-to-add-media": "Перетягніть, щоб додати медіа зі сховища", "action-drag-to-add-card": "Перетягніть, щоб додати картку", "action-enable-grid-snapping": "Увімкнути прив'язку до сітки", "action-disable-grid-snapping": "Вимкнути прив'язку до сітки", "action-edit-label": "Редагувати мітку", "action-remove-label": "Видалити мітку", "action-search-file": "Шукати файл", "action-set-color": "Встановити колір", "action-align": "Вирівнювання", "action-align-left": "Вирівнювання ліворуч", "action-align-center": "Вирівнювання по центру", "action-align-right": "Вирівнювання праворуч", "action-align-top": "Вирівнювання угору", "action-align-middle": "Вирівнювання посередині", "action-align-bottom": "Вирівнювання униз", "action-distribute-horizontal-spacing": "Розподілити горизонтальний інтервал", "action-distribute-vertical-spacing": "Розподілити вертикальний інтервал", "action-justify-horizontally": "Вирівняти горизонтально", "action-justify-vertically": "Вирівняти вертикально", "action-stack-horizontally": "Скласти горизонтально", "action-stack-vertically": "Складати вертикально", "action-stack-grid": "Скласти по сітці", "action-export-png": "Експортувати як зображення", "label-export-png-desc": "Експортує \\\"{{title}}\\\" в файл PNG з наведеними нижче налаштуваннями.\"", "label-export-png-dimensions": "Приблизні розміри зображення: {{dimensions}}", "option-export-png-show-logo": "Додати логотип", "option-export-png-show-logo-desc": "Це додасть логотип Obsidian внизу ліворуч.", "option-export-png-zoom": "Масштабування", "option-export-png-zoom-desc": "При більшому масштабуванні буде отримано зображення з вищою роздільною здатністю.", "option-export-png-frame": "Область рендеру", "option-export-png-frame-desc": "Виберіть, чи потрібно рендерити все полотно або тільки поточну видиму область", "option-export-png-frame-full": "Все полотно", "option-export-png-frame-viewport": "Тільки видиме", "action-remove": "Видалити", "action-narrow": "Звузити до розділу...", "action-swap-file": "Замінити файл...", "action-change-url": "Змінити URL...", "action-zoom-to-fit": "Збільшити до потрібного розміру", "action-zoom-to-selection": "Збільшити до виділеного", "action-reload-page": "Оновити сторінку", "action-go-to-target": "Перейти до цілі", "action-go-to-source": "Перейти до джерела", "command-create-new-canvas": "Створити нове полотно", "command-new-canvas": "Нове полотно", "instruction-narrow": "вставити заголовок", "prompt-to-narrow": "Введіть назву заголовка", "label-enter-url": "Введіть URL", "label-empty-embed": "\"{{linktext}}\" не знайдено.", "prompt-add-text": "Додати текст...", "prompt-start-search": "Введіть для пошуку...", "label-canvas-help": "Допомога з полотном", "label-no-heading": "Без заголовка", "label-pan": "Панорамування ", "label-pan-horizontal": "Панорамувати горизонтально", "label-zoom": "Масштаб", "label-select-all": "Вибрати все", "label-add-remove-selection": "Додати/прибрати з виділеного", "label-clone-card": "Клонувати картку", "label-constrain-movement-axis": "Обмеження руху картки по осі", "label-disable-drag-snapping": "Вимкнути фіксацію під час перетягування", "label-remove-card": "Видалити картку", "label-drag-from-below": "Перетягніть знизу або клацніть двічі", "label-space-drag-pan": "Пробіл + Перетягування для панорамування", "label-scroll-to-zoom": "Прокрутка для масштабування", "label-untitled-group": "Група без назви" } }, "nouns": { "word-with-count": "слів: {{count}}", "word-with-count_plural": "слів: {{count}}", "character-with-count": "символів: {{count}}", "character-with-count_plural": "символів: {{count}}", "link-with-count": "посилань: {{count}}", "link-with-count_plural": "посилань: {{count}}", "file-with-count": "файлів: {{count}}", "file-with-count_plural": "файлів: {{count}}", "folder-with-count": "папок: {{count}}", "folder-with-count_plural": "папок: {{count}}", "backlink-with-count": "зворотних посилань: {{count}}", "backlink-with-count_plural": "зворотних посилань: {{count}}", "site-with-count": "сайтів: {{count}}", "site-with-count_plural": "сайтів: {{count}}", "plugin-with-count": "плагінів: {{count}}", "plugin-with-count_plural": "плагінів: {{count}}", "theme-with-count": "{{count}} тем", "theme-with-count_plural": "{{count}} тем" } }{ "setting": { "options": "Options", "plugin": "Plugin", "builtin-plugins": "Core plugins", "plugin-options": "Plugin options", "folder-path-example-placeholder": "Example: folder 1/folder 2", "file-path-example-placeholder": "Example: folder/note", "msg-restart-required": "Changing this option requires a restart to take effect.", "editor": { "name": "Editor", "section-general": "General", "section-behavior": "Behavior", "section-display": "Display", "option-spellcheck": "Spell check", "option-spellcheck-description": "Turns on the spell checker. Currently only works for English (US).", "spellcheck-languages": "Spellcheck languages", "spellcheck-languages-description": "Choose the languages for the spellchecker to use.", "spellcheck-languages-mac-description": "The native spellchecker will automatically detect the language being used for you on macOS.", "spellcheck-dict": "Spellcheck dictionary", "spellcheck-dict-empty": "The spellcheck dictionary is empty.", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "Readable line length", "option-readable-line-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-strict-line-break": "Strict line breaks", "option-strict-line-break-description": "In preview mode, ignore single line breaks according to the Markdown specs. Turn this off for single line breaks to show in preview.", "option-show-frontmatter": "Show frontmatter", "option-show-frontmatter-description": "In preview mode, show frontmatter as a code block. Turn off to hide frontmatter section.", "option-auto-pair-brackets": "Auto pair brackets", "option-auto-pair-brackets-description": "Pair brackets and quotes automatically.", "option-auto-pair-markdown": "Auto pair Markdown syntax", "option-auto-pair-markdown-description": "Pair symbols automatically for bold, italics, highlight, strikethrough, and code.", "option-smart-indent-lists": "Smart indent lists", "option-smart-indent-lists-description": "Take care of indentation and list marker for you.", "option-fold-heading": "Fold heading", "option-fold-heading-description": "Let you fold everything under a heading.", "option-fold-indent": "Fold indent", "option-fold-indent-description": "Let you fold a portion of the same indentation, such as lists.", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Editing view", "option-default-new-tab-view-reading": "Reading view", "option-default-editing-mode": "Default editing mode", "option-default-editing-mode-description": "The default editing mode a new pane will start with.", "option-default-editing-mode-source": "Source mode", "option-default-editing-mode-live-preview": "Live Preview", "option-show-line-number": "Show line number", "option-show-line-number-description": "Show line number in the gutter.", "option-indentation-guide": "Show indentation guides", "option-indentation-guide-description": "Show vertical relationship lines between bullet points for visual guidance.", "option-use-tabs": "Use tabs", "option-use-tabs-description": "Use tabs to indent when pressing the \"Tab\" key. Set this to off to use spaces.", "option-tab-size": "Tab size", "option-tab-size-description": "Number of spaces a tab is equivalent to.", "option-rtl": "Right-to-left (RTL)", "option-rtl-description": "Sets the text direction of notes to display in right-to-left.", "option-auto-convert-html": "Auto convert HTML", "option-auto-convert-html-description": "Automatically convert HTML to Markdown when pasting and drag-and-drop from webpages. Use Ctrl/Cmd+Shift+V to paste without conversion.", "option-vim-key-bindings": "Vim key bindings", "option-vim-key-bindings-description": "Let you use Vim key bindings in the source editor.", "option-vim-key-bindings-mobile": "On mobile devices, this setting is per-device and is not synchronized through the config file.", "option-emacsy-keys": "Legacy Emacs-style key bindings for macOS", "option-emacsy-keys-description": "Allows you to use the additional Emacs-style navigation keys, which are standard on macOS, but may interfere with some key operations.", "label-confirm-enable-vim": "Confirm entering Vim mode", "label-vim-warning": "Vim mode is for efficient text editing but can be quite counter-intuitive. If you're not familiar with Vim, this option might make it look like Obsidian has stopped working.", "label-vim-test": "To verify that you know your way around Vim, please enter the command to quit Vim without saving below:", "label-vim-your-answer": "Your answer", "placeholder-enter-command": "Enter command...", "button-confirm-enable-vim": "Let me enable Vim", "msg-vim-mode-enabled": "Command is correct. Vim mode now enabled.", "msg-vim-mode-not-enabled": "Command is incorrect. Vim mode remains disabled to protect you.", "msg-vim-mode-please-enter-command": "Please enter the command to enable Vim mode", "option-legacy-editor": "Use legacy editor", "option-legacy-editor-description2": "The legacy editor will be deprecated soon. It is currently no longer maintained, and as such, bugs will no longer be addressed.", "label-legacy-deprecation": "New editor is here", "label-legacy-deprecation-1": "Obsidian now has a brand new editor that's more robust and accessible.", "label-legacy-deprecation-2": "It seems you're still using the legacy editor, and we think you'll enjoy the new editor.", "label-legacy-deprecation-choice": "Which mode would you like to use?", "label-live-preview-description": "A more modern, what-you-see-is-what-you-get experience.", "label-source-mode-description": "See raw Markdown with syntax highlighting.", "button-start-new-editor": "Start new editor" }, "file": { "name": "Files & Links", "option-confirm-file-deletion": "Confirm file deletion", "option-confirm-file-deletion-description": "Whether you want to get prompted to confirm file deletion.", "option-delete-destination": "Deleted files", "option-delete-destination-description": "What to do with files after you delete them.", "option-choice-system-trash": "Move to system trash", "option-choice-vault-trash": "Move to Obsidian trash (.trash folder)", "option-choice-permanent-delete": "Permanent delete", "option-always-update-links": "Always update internal links", "option-always-update-links-description": "Whether to automatically update links after renaming a file or prompt.", "option-new-note-location": "New note default location", "option-new-note-location-description": "Where to put newly created notes. Plugin settings will override this.", "option-choice-vault-root": "Vault root", "option-choice-current-folder": "Same folder as the file is in", "option-choice-specified-folder": "In the folder specified below", "option-new-file-folder-path": "Folder to create new notes in", "option-new-file-folder-path-description": "Newly created notes will appear under this folder. Plugin settings will override this.", "option-use-wiki-links": "Use [[Wikilinks]]", "option-use-wiki-links-description": "Auto-generate Wikilinks for [[links]] and ![[images]] instead of Markdown links and images. Disable this option to generate Markdown links instead.", "option-show-unsupported-files": "Detect all file extensions", "option-show-unsupported-files-description": "Show files with any extension even if Obsidian can't open them natively, so that you can link to them and see them in File Explorer and Quick Switcher.", "option-link-autocompleted-format": "New link format", "option-link-autocompleted-format-description": "What links to insert when auto generating internal links.", "option-choice-shortest-linktext": "Shortest path when possible", "option-choice-relative-path": "Relative path to file", "option-choice-absolute-path": "Absolute path in vault", "option-new-attachment-location": "Default location for new attachments", "option-new-attachment-location-description": "Where newly added attachments are placed.", "option-choice-subdirectory": "In subfolder under current folder", "option-attachment-folder-path": "Attachment folder path", "option-attachment-folder-path-description": "Newly created attachment files will appear here. That includes images created via drag and drop or pasting, and audio recordings.", "option-attachment-subfolder-path": "Subfolder name", "option-attachment-subfolder-path-description": "If your file is under \"vault/folder\", and your set subfolder name to \"attachments\", attachments will be saved to \"vault/folder/attachments\".", "option-attachment-subfolder-path-placeholder": "attachments", "option-excluded-files": "Excluded files", "option-excluded-files-desc": "Excluded files will be either hidden or less noticeable in various places, such as Quick Switcher, link suggestion, and Graph View.", "label-no-excluded-filters-applied": "No excluded filter is applied right now. Add one below.", "label-excluded-filters-applied": "Files matching the following filters are currently excluded:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Enter path or \"/regex/\"..." }, "appearance": { "name": "Appearance", "option-base-theme": "Base theme", "option-base-theme-description": "Choose Obsidian’s default color scheme.", "option-accent-color": "Accent color", "option-accent-color-description": "Choose the accent color used throughout the app.", "dark-theme": "Dark", "light-theme": "Light", "system-theme": "Adapt to system", "option-font": "Font", "option-advanced": "Advanced", "option-interface-font": "Interface font", "option-interface-font-description": "Set base font for all of Obsidian.", "option-text-font": "Text font", "option-text-font-description": "Set font for editing and reading views.", "option-monospace-font": "Monospace font", "option-monospace-font-description": "Set font for places like code blocks and frontmatter.", "label-single-font-currently-in-effect": " Currently applied font: ", "label-multiple-fonts-currently-in-effect": " The following fonts are currently applied:", "option-font-placeholder": "Enter font name...", "label-no-custom-font-set": "No custom font is applied right now. Add one below.", "label-font-applied": "The first font from this list that is available on your system will be applied.", "msg-font-not-found": "This font is not detected on your system.", "msg-font-found": "This font is detected on your system.", "label-font-name": "Font name", "option-community-themes": "Open community themes", "option-community-themes-description": "Preview and use amazing themes created by the community.", "button-browse-community-themes": "Browse", "option-font-size": "Font size", "option-font-size-description": "Font size in pixels that affects editor and preview.", "option-font-size-action": "Quick font size adjustment", "option-font-size-action-description": "Adjust the font size using Ctrl + Scroll, or using the trackpad pinch-zoom gesture.", "option-themes": "Themes", "option-manage-themes-description": "Manage installed themes and browse community themes.", "option-theme-button-manage": "Manage", "option-choice-none": "None", "option-native-menus": "Native menus", "option-native-menus-desc": "Menus throughout the app will match the operating system. They will not be affected by your theme.", "button-reload-themes": "Reload themes", "msg-reloaded-themes": "Reloaded custom CSS themes.", "button-open-themes-folder": "Open themes folder", "option-css-snippets": "CSS snippets", "label-no-css-snippets-found": "No CSS snippets found in the snippets folder.", "no-snippet-description": "CSS Snippets are stored in \"{{path}}\".", "button-reload-snippets": "Reload snippets", "button-open-snippets-folder": "Open snippets folder", "msg-reloaded-snippets": "Reloaded CSS snippets.", "option-toggle-snippet-description": "Apply CSS snippet at \"{{path}}\".", "label-installed-themes": "Installed themes", "label-screenshot-unavailable": "Screenshot unavailable", "label-default-theme": "Default", "tooltip-click-to-enlarge": "Click to enlarge", "button-update": "Update", "label-currently-selected": "Selected", "option-frame-style": "Window frame style", "option-frame-description": "Determines the styling of the title bar of Obsidian windows. Requires a full restart to take effect.", "option-frame-hidden": "Hidden (default)", "option-frame-obsidian": "Obsidian frame", "option-frame-native": "Native frame", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Show tab title bar", "option-show-view-header-desc": "Display the header at the top of every tab.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "button-check-for-updates": "Check for updates", "button-view-updates": "View updates", "button-update-all-themes": "Update all", "label-current-themes": "Current community themes", "label-currently-installed": "You currently have {{count}} theme installed.", "label-currently-installed_plural": "You currently have {{count}} themes installed." }, "hotkeys": { "name": "Hotkeys", "prompt-filter": "Filter...", "tooltip-delete-hotkey": "Delete hotkey", "label-waiting-for-hotkey-press": "Press hotkey...", "tooltip-restore-default": "Restore default", "tooltip-customize-command": "Customize this command", "tooltip-hotkey-single-conflict": "This hotkey conflicts with \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "This hotkey conflicts with {{count}} other commands", "label-blank-hotkey": "Blank" }, "about": { "name": "About", "label-commercial-license": "Commercial license", "label-license-key": "License key", "license-key-placeholder": "Your license key...", "label-activate-license": "Activate license", "button-activate": "Activate", "label-unknown-version": "Unknown", "label-current-version": "Current version: ", "label-install-version": "(Installer version: {{version}})", "label-up-to-date": "Your app is up to date!", "label-read-changelog": "Read the changelog.", "label-manual-update-required": "To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.", "label-download": "Download", "label-new-version-ready": "A new version is ready to be installed. ", "label-relaunch-to-update": "Relaunch the app to update.", "label-disabled-updates": "Updates are disabled.", "label-checking-for-updates": "Checking for updates...", "button-relaunch": "Relaunch", "button-check-for-updates": "Check for updates", "option-auto-update": "Automatic updates", "option-auto-update-description": "Turn this off to prevent the app from checking for updates.", "option-get-help": "Get help", "option-get-help-description": "Get help on using Obsidian.", "button-open": "Open", "option-language": "Language", "option-language-description": "Change the display language.", "option-insider-build": "Receive insider builds", "option-insider-build-description": "Auto-update to insider builds to try out new features. Note that these builds are bleeding edge and might be less stable.", "option-advanced": "Advanced", "option-hw-acceleration": "Hardware Acceleration", "option-hw-acceleration-description": "Turns on Hardware Acceleration, which uses your GPU to make Obsidian smoother.", "option-hw-acceleration-warning": "If you turn this off, app performance will be severely degraded.", "option-config-location": "Override config folder", "option-config-location-description": "Use a different config folder than the default one. Must start with a dot.", "option-config-location-warning": "Config location must be a valid folder name that starts with a dot.", "label-license": "License", "label-your-commercial-license-key": "Your commercial license key is \"{{key}}\".", "label-commercial-license-info": "Registered to \"{{company}}\" for {{seats}} users. Valid until {{expiry}}.", "label-validating-commercial-license": "Validating...", "label-invalid-commercial-license": "License invalid: ", "button-remove-commercial-license": "Remove", "option-catalyst": "Catalyst license", "option-catalyst-desc": "You currently have the {{tier}} Catalyst license. Thanks for your support!", "option-catalyst-desc-no-license": "You don't have a Catalyst license right now. Catalyst license is a one-time donation to support Obsidian development.", "label-app": "App" }, "account": { "name": "Account", "option-your-account": "Your account", "option-your-account-desc": "You're currently signed in {{name}} ({{email}}).", "option-your-account-desc-no-login": "You're not logged in right now. An account is only needed for Obsidian Sync, Obsidian Publish, and Catalyst insider builds.", "button-manage-settings": "Manage settings", "label-insider": "insider", "label-supporter": "supporter", "label-vip": "VIP", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Commercial license", "option-commercial-license-desc": "If you use Obsidian for commercial purpose, you may need to get a commercial license.", "button-purchase": "Purchase", "button-log-out": "Log out", "label-log-in": "Log in", "label-sign-up": "Sign up", "label-email": "Email", "placeholder-email": "Your email...", "label-password": "Password", "placeholder-password": "Your password...", "button-login": "Login", "message-empty-email": "Email cannot be empty.", "message-invalid-email": "Email is not valid.", "message-empty-password": "Password cannot be empty.", "message-login-failed": "Login failed, please double check your email and password.", "label-no-account": "Don't have an account? ", "link-sign-up-now": "Sign up now" }, "core-plugin": { "plugin-list": "Plugin list", "option-search-plugin": "Search core plugins", "option-search-plugin-description": "Filter plugins by name or description.", "placeholder-search-plugin": "Search plugins..." }, "third-party-plugin": { "name": "Third-party plugin", "option-restricted-mode": "Restricted mode", "option-restricted-mode-description": "Restricted mode is off. Turn on to disable community plugins.", "button-turn-on": "Turn on", "option-browse-community-plugins": "Community plugins", "option-browse-community-plugins-description": "Browse and install third-party plugins made by our amazing community.", "button-browse": "Browse", "label-exit-restricted-mode": "Exit Restricted Mode", "label-exit-restricted-mode-description-1": "Community plugins, like any other software you install, could potentially cause data integrity and security issues.", "label-exit-restricted-mode-description-2": "Plugin security is important to us. Here's what we do:", "label-exit-restricted-mode-description-3": "Despite our efforts, there is still a small chance that a community plugin might misbehave.", "label-code-review": "Initial code review", "label-code-review-desc": "Plugins undergo an initial code review by our team before they appear in the store.", "label-open-source": "Open source", "label-open-source-desc": "Most plugins are open source on GitHub, so you can inspect the code yourself.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We have a large community of developers who watch out for each other.", "label-report-mechanism": "Report mechanism", "label-report-mechanism-desc": "We follow up and remove faulty plugins upon user report.", "label-exit-restricted-mode-disable-confirmation": "Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.", "label-learn-more": "Learn more about plugin security", "button-turn-on-community-plugins": "Turn on community plugins", "label-trust-author": "Do you trust the author of this vault?", "label-trust-author-description-1": "You're opening this vault for the first time, and it comes with some plugins.", "label-trust-author-description-2": "If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.", "label-trust-author-description-3": "If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.", "button-enable-plugins": "Trust author and enable plugins", "button-dont-trust-author": "Browse vault in Restricted Mode", "placeholder-community-plugins": "Search community plugins...", "msg-failed-load-plugins": "Failed to load community plugins.", "label-installed": "Installed", "button-install": "Install", "button-enable": "Enable", "button-disable": "Disable", "button-copy-share-link": "Copy share link", "button-donate": "Donate", "label-no-results-found": "No results found.", "msg-failed-to-load-manifest": "Failed to load plugin manifest.", "label-version": "Version: {{version}}", "label-currently-installed-version": " (currently installed: {{version}})", "label-by-author": "By ", "label-repository": "Repository: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "This plugin does not support your device.", "button-update": "Update", "label-no-readme": "This plugin did not provide a README file.", "msg-installing-plugin": "Installing plugin \"{{name}}\"...", "msg-failed-to-install-plugin": "Failed to install plugin \"{{name}}\".", "msg-successfully-installed-plugin": "Successfully installed plugin \"{{name}}\".", "label-installed-plugins": "Installed plugins", "button-reload-plugins": "Reload plugins", "msg-reloaded-third-party-plugins": "Reloaded third-party plugins.", "label-uninstall": "Uninstall", "label-uninstall-plugin": "Uninstall plugin", "label-uninstall-plugin-confirmation": "Are you sure you want to uninstall this plugin? This will delete the folder of the plugin.", "button-open-plugins-folder": "Open plugins folder", "button-check-for-updates": "Check for updates", "button-update-all-plugins": "Update all", "label-current-plugins": "Current plugins", "label-currently-installed": "You currently have {{count}} plugin installed.", "label-currently-installed_plural": "You currently have {{count}} plugins installed.", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Show a message with how long each plugin took to initialize when starting the app.", "msg-no-updates-found": "No plugin updates found.", "msg-updates-found": "Found {{count}} plugin to update.", "msg-updates-found_plural": "Found {{count}} plugins to update.", "msg-update-plugin": "Update to version {{version}}", "option-search-installed-plugin": "Search installed plugins", "option-search-installed-plugin-description": "Filter installed plugins by name or description.", "placeholder-search-installed-plugin": "Search installed plugins...", "show-installed-only": "Show installed only", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "Showing {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Mobile toolbar", "option-configure-quick-action": "Configure mobile Quick Action", "option-configure-quick-action-description": "Configure which command to trigger when pull down from the top. The current command is set to \"{{command}}\".", "button-configure": "Configure", "placeholder-select-quick-action": "Select Quick Action...", "manage-toolbar-options": "Manage toolbar options", "option-internal-link": "Add internal link", "option-internal-embed": "Add embed", "option-tag": "Add tag", "option-heading": "Toggle heading", "option-strikethrough": "Toggle strikethrough", "option-highlight": "Toggle highlight", "option-code": "Toggle code", "option-blockquote": "Toggle blockquote", "option-markdown-link": "Add Markdown link", "option-bullet-list": "Toggle bullet list", "option-numbered-list": "Toggle numbered list", "option-indent-list": "Indent list item", "option-unindent-list": "Unindent list item", "option-undo": "Undo", "option-redo": "Redo", "option-move-caret-up": "Move caret up", "option-move-caret-down": "Move caret down", "option-move-caret-left": "Move caret left", "option-move-caret-right": "Move caret right", "option-first-line": "Go to first line", "option-last-line": "Go to last line", "option-toggle-keyboard": "Toggle keyboard", "option-configure-toolbar": "Configure mobile toolbar", "option-added-options": "Added options", "option-more-toolbar-options": "More toolbar options", "option-attach": "Insert attachment", "option-add-command": "Add global command", "option-add-command-description": "Select any global command to add to the toolbar." } }, "editor": { "search": { "placeholder-find": "Find", "placeholder-replace": "Replace", "label-previous": "Prev", "label-next": "Next", "label-all": "All", "label-exit-search": "Exit search", "label-replace": "Replace", "label-replace-all": "Replace all" }, "link-suggestion": { "label-type-hash": "Type #", "label-link-heading": "to link heading", "label-type-block": "Type ^", "label-link-block": "to link blocks", "label-type-pipe": "Type |", "label-change-display-text": "to change display text", "label-no-match-found": "No match found" }, "spellcheck": { "no-suggestion": "No suggestions...", "add-to-dictionary": "Add to dictionary" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "No heading", "label-heading-level": "Heading {{level}}" }, "print-modal": { "title": "Export to PDF", "caption": "Export \"{{filename}}\" to PDF with the setting below.", "setting-page-size": "Page size", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Include file name as title", "setting-landscape": "Landscape", "setting-margin": "Margin", "setting-margin-default": "Default", "setting-margin-minimal": "Minimal", "setting-margin-none": "None", "setting-downscale-percent": "Downscale percent", "button-export-to-pdf": "Export to PDF" }, "link-popover": { "tooltip-follow-link": "Follow link", "tooltip-open-link": "Open link", "tooltip-search-tag": "Search tag" } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Open in default app", "empty-sidebar": "The sidebar is empty, try dragging a pane here.", "sidebar-expand": "Expand", "sidebar-collapse": "Collapse", "msg-fail-to-save-file": "Failed to save file \"{{filepath}}\". {{message}}.", "no-file": "No file", "msg-file-changed": "\"{{file}}\" has been modified externally, merging changes automatically.", "switch-vault": "Open another vault", "help": "Help", "settings": "Settings", "drag-to-rearrange": "Drag to rearrange", "msg-switched-to-read": "Switched default view mode to reading view.", "msg-switched-to-edit": "Switched default view mode to editor.", "msg-upgrade-installer": "To use this feature, please re-install with latest installer available from our website.", "tooltip-restore-default-settings": "Restore default settings", "label-copy": "Copy to clipboard", "copied_generic": "Copied to your clipboard", "copied": "{{item}} copied to your clipboard", "url": "Url", "msg-open-file-through-uri": "Opened file \"{{path}}\"", "msg-file-not-found-through-uri": "File \"{{name}}\" not found.", "delete-action-short-name": "Delete", "msg-indexing": "Obsidian is indexing your vault...\nThis should only happen once.\nSome functionality may not be available until this is complete.", "msg-indexing-complete": "Indexing complete.", "msg-sandbox-vault": "This is a sandbox vault.\nChanges you make in this vault will be lost.", "label-enter-to-create": "Enter to create", "label-update-available": "Update Available", "label-debug-info": "Debug info", "button-learn-more": "Learn more", "button-not-now": "Not now", "button-add": "Add", "button-manage": "Manage", "label-new-tab": "New tab", "msg-tab-busy": "This tab is currently busy, please try again later", "empty-state": { "no-file-open": "No file is open", "create-new-file": "Create new file", "go-to-file": "Go to file", "see-recent-files": "See recent files", "close": "Close", "unknown-pane-title": "Plugin no longer active", "unknown-pane-desc": "The plugin that created this pane ({{type}}) has gone away" }, "menu": { "edit-view": "Edit (Ctrl/Cmd+Click to edit in new pane)", "read-view": "Current view: reading", "switch-to-edit-view": "Click to edit", "switch-to-read-view": "Click to read", "mod-click-open-new-tab": "{{key}}+Click to open in new tab", "find": "Find...", "replace": "Replace...", "edit": "Edit", "preview": "Preview", "more-options": "More options", "close": "Close", "close-others": "Close others", "close-right": "Close tabs to the right", "pin": "Pin", "unpin": "Unpin", "unlink-tab": "Unlink tab", "link-tab": "Link with tab...", "toggle-source-mode": "Source mode", "toggle-reading-view": "Reading view", "delete-file": "Delete file", "create-file": "Create this file", "open-link": "Open link", "open-in-new-tab": "Open in new tab", "open-to-the-right": "Open to the right", "copy-url": "Copy url", "close-current-tab": "Close current tab", "copy": "Copy", "cut": "Cut", "paste": "Paste", "paste-as-plain-text": "Paste as plain text", "select-all": "Select all", "rename-heading": "Rename this heading...", "rename-blockid": "Rename this block ID...", "open-in-new-window": "Open in new window", "move-to-new-window": "Move to new window", "open-in-browser": "Open in browser", "stack-tabs": "Stack tabs", "unstack-tabs": "Unstack tabs" }, "tooltip": { "click-to-expand": "Click to expand", "click-to-collapse": "Click to collapse", "alias": "Alias", "not-created-yet": "Not created yet, select to create" }, "start-screen": { "label-version": "Version", "option-open-folder-as-vault": "Open folder as vault", "option-open-folder-as-vault-description": "Choose an existing folder of Markdown files.", "option-create-vault": "Create new vault", "option-create-vault-description": "Create a new Obsidian vault under a folder.", "option-connect-obsidian-sync": "Connect to Obsidian Sync", "option-connect-obsidian-sync-description": "Set up a synced vault with existing remote vault.", "option-new-vault-name": "Vault name", "option-new-vault-name-description": "Pick a name for your awesome vault.", "option-new-vault-location": "Location", "option-new-vault-location-description": "Pick a place to put your new vault.", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Reveal vault in system explorer", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "Rename vault...", "msg-error-rename-exists": "There is already a vault with this name.", "msg-error-nested": "Cannot move vault into a subfolder of itself.", "msg-error-rename-open": "Can't rename a currently open vault.", "msg-rename-failed": "Failed to rename vault.", "msg-rename-success": "Successfully renamed vault.", "option-move-vault": "Move vault...", "msg-move-select-dest": "Select destination folder", "msg-error-move-exists": "There is already a vault at the destination.", "msg-error-move-open": "Can't move a currently open vault.", "msg-move-failed": "Failed to move vault.", "msg-move-success": "Successfully moved vault.", "option-remove": "Remove from list", "button-quick-start": "Quick start", "button-open": "Open", "button-browse": "Browse", "button-connect": "Connect", "button-create-vault": "Create", "button-back": "Back", "msg-empty-vault-name": "Vault name cannot be empty.", "msg-invalid-folder": "Please pick a valid folder.", "msg-failed-to-create-vault": "Failed to create vault.", "msg-failed-to-create-vault-at-location": "Could not create vault at the given location. Please double check the location and permission.", "msg-error-failed-to-open-vault": "Failed to open.", "msg-error-remove-current-open-vault": "Can't remove a currently open vault.", "option-get-help": "Get Help", "option-user-email": "Email", "placeholder-your-email": "Your email...", "option-user-password": "Password", "placeholder-your-password": "Your password...", "button-sign-in": "Sign in", "button-setup": "Setup", "option-connect-vault-desc": "Create a synced vault on this device.", "tooltip-own-vault": "This is a remote vault owned by you.", "tooltip-shared-vault": "This is a remote vault shared with you." }, "drag-and-drop": { "insert-link-here": "Insert link here", "insert-links-here": "Insert links here", "move-into-folder": "Move into \"{{folder}}\"", "star-this-file": "Star this file", "star-these-files": "Star these files", "open-in-this-tab": "Open in this tab", "open-as-tab": "Open as new tab" }, "window": { "maximize": "Maximize", "minimize": "Minimize", "restore-down": "Restore down", "close-window": "Close window", "go-back": "Go back", "go-forward": "Go forward" }, "start-up": { "loading-obsidian": "Loading Obsidian...", "obsidian-load-error": "An error occurred while loading Obsidian.", "button-reload-app": "Reload app", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "Open another vault", "loading-components": "Loading components...", "loading-plugins": "Loading plugins...", "loading-vault": "Loading vault...", "msg-failed-to-load-vault": "Failed to load vault: ", "loading-cache": "Loading cache...", "loading-workspace": "Loading workspace..." }, "mobile": { "action-import": "Import into vault", "action-choose-file-to-insert": "Choose a file to insert", "action-insert-text-into-file": "Insert text into {{filename}}", "action-insert-link-into-file": "Insert link into {{filename}}", "msg-importing": "Importing...", "msg-import-success": "Import success", "msg-failed-to-import-file": "Failed to import file {{filename}}", "msg-back-again-to-exit": "Press back again to exit." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "Save current file", "follow-cursor-link": "Follow link under cursor", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "Toggle pin", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "Navigate back", "navigate-forward": "Navigate forward", "use-dark-mode": "Use dark mode", "use-light-mode": "Use light mode", "change-theme": "Change theme", "search-current-file": "Search current file", "search-replace-current-file": "Search & replace in current file", "open-settings": "Open settings", "open-help": "Open help", "toggle-edit": "Toggle editing/reading view", "toggle-source-mode": "Toggle Live Preview/Source mode", "delete-current-file": "Delete current file", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "Toggle left sidebar", "toggle-right-sidebar": "Toggle right sidebar", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "Focus on editor", "toggle-fold": "Toggle fold on the current line", "fold-all": "Fold all headings and lists", "unfold-all": "Unfold all headings and lists", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "Swap line up", "swap-line-down": "Swap line down", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "Toggle bold for selection", "toggle-italics": "Toggle italics for selection", "toggle-highlight": "Toggle highlight for selection", "toggle-comments": "Toggle comments for selection", "insert-link": "Insert link", "toggle-spellcheck": "Toggle spellcheck", "delete-paragraph": "Delete paragraph", "toggle-checklist": "Toggle checklist status", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "Edit file title", "copy-path": "Copy file path", "copy-url": "Copy obsidian url", "export-pdf": "Export to PDF", "reload": "Reload app without saving", "undo-close-tab": "Undo close tab", "context-menu": "Show context menu under cursor", "show-debug-info": "Show debug info", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "Toggle edit/preview mode", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "This will affect {{links}} in {{files}}.", "msg-updated-links": "Updated {{links}} in {{files}}.", "label-update-links": "Update links", "label-confirm-update-link-to-file": "Do you want to update internal links that link to this file?", "button-always-update": "Always update", "button-just-once": "Just once", "button-do-not-update": "Do not update", "label-confirm-deletion": "Are you sure you want to delete \"{{filename}}\"?", "label-move-to-system-trash": "It will be moved to your system trash.", "label-move-to-vault-trash": "It will be moved to your Obsidian trash, which is located in the \".trash\" hidden folder in your vault.", "label-permanent-delete": "The file will be permanent deleted.", "label-non-empty-folder": "This folder is not empty.", "label-delete-folder-warning": "If you continue, all files inside this folder will be deleted.", "label-delete-folder": "Delete folder", "button-delete": "Delete", "button-delete-do-not-ask-again": "Delete and don't ask again", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "There are currently {{links}} pointing to this note.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "Delete file", "button-manage": "Manage", "button-cancel": "Cancel", "button-done": "Done", "button-save": "Save", "button-stop": "Stop", "button-continue": "Continue", "preparing-pdf": "Preparing PDF...", "label-rename-file": "Rename file", "label-new-name": "New name", "msg-rename-success": "Successfully renamed file.", "label-rename-heading": "Rename heading", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "Plugins", "file-explorer": { "name": "File explorer", "desc": "See all the files in your vault.", "action-open": "Open file explorer", "action-show": "Show file explorer", "action-create-note": "Create new note", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "New note", "action-new-folder": "New folder", "action-change-sort": "Change sort order", "action-reveal-file": "Reveal file in file explorer", "action-reveal-active-file": "Reveal active file in file explorer", "command-move-file": "Move file to another folder", "action-move-file": "Move file to...", "action-move-folder": "Move folder to...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "Type a folder", "label-no-folders": "No folders found.", "instruction-navigate": "to navigate", "instruction-move": "to move", "instruction-dismiss": "to dismiss", "label-sort-a-to-z": "Sort by file name (A to Z)", "label-sort-z-to-a": "Sort by file name (Z to A)", "label-sort-new-to-old": "Sort by edit time (new to old)", "label-sort-old-to-new": "Sort by edit time (old to new)", "label-sort-created-old-to-new": "Created time (old to new)", "label-sort-created-new-to-old": "Created time (new to old)", "menu-opt-new-note": "New note", "menu-opt-new-folder": "New folder", "menu-opt-set-attachment-folder": "Set as attachment folder", "menu-opt-rename": "Rename", "menu-opt-delete": "Delete", "menu-opt-make-copy": "Make a copy", "msg-invalid-characters": "File name cannot contain any of the following characters: ", "msg-unsafe-characters": "Links will not work with file names containing any of these characters: ", "msg-file-already-exists": "There's already a file with the same name", "msg-empty-file-name": "File name cannot be empty.", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "Last modified at {{time}}", "tooltip-created-time": "Created at {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Move", "label-untitled-file": "Untitled", "label-untitled-folder": "Untitled", "msg-set-attachment-folder": "Attachments will be saved to \"{{path}}\" from now on." }, "search": { "name": "Search", "desc": "Search for keyword in all the notes.", "action-open-search": "Search in all files", "label-collapse-results": "Collapse results", "label-match-case": "Match case", "label-explain-search-term": "Explain search term", "label-more-context": "Show more context", "prompt-start-search": "Type to start search...", "label-match-text": "Matches text: ", "label-match-regex": "Matches regex: ", "label-match-exact-text": "Contains exact text: ", "label-match-all": "Match all of: ", "label-match-any": "Match any of: ", "label-excluding": "Excluding: ", "label-case-sensitive": "Case sensitive", "label-case-insensitive": "Case insensitive", "label-match-file-path": "Match file path: ", "label-match-file-name": "Match file name: ", "label-match-content": "Match file content: ", "label-match-task": "Match task: ", "label-match-task-todo": "Match task (todo): ", "label-match-task-done": "Match task (done): ", "label-match-line": "Match line: ", "label-match-block": "Match block: ", "label-match-section": "Match section: ", "label-match-tag": "Match tag: ", "label-no-matches": "No matches found.", "matches-with-count": "... and {{count}} more match.", "matches-with-count_plural": "... and {{count}} more matches.", "label-copy-search-results": "Copy search results", "button-copy-results": "Copy results", "msg-successfully-copied": "Results copied to your clipboard.", "option-show-path": "Show path", "option-show-path-description": "Display full path of the file rather than just the file name.", "option-link-style": "Link style", "option-link-style-description": "Optionally turn each file result in to a link.", "option-choice-link-style-none": "None", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Markdown link", "option-list-prefix": "List prefix", "option-list-prefix-description": "Optionally add a list item prefix to each file result.", "option-choice-list-style-none": "None", "option-choice-list-style-dash": "Dash (-)", "option-choice-list-style-asterisk": "Asterisk (*)", "option-choice-list-style-numbered": "Numbered", "tooltip-clear-search": "Clear search", "label-search-options": "Search options", "tooltip-read-more": "Read more", "label-history": "History", "tooltip-clear-history": "Clear search history", "label-path-option-description": "match path of the file", "label-file-name-option-description": "match file name", "label-tag-option-description": "search for tags", "label-line-option-description": "search keywords on same line", "label-section-option-description": "search keywords under same heading", "menu-opt-search-for": "Search for \"{{keyword}}\"" }, "quick-switcher": { "name": "Quick switcher", "desc": "Jump to any files without leaving your keyboard. Ctrl/Cmd+O to activate.", "short-name": "Switcher", "action-open": "Open quick switcher", "instruction-navigate": "to navigate", "instruction-open": "to open", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "to create", "instruction-dismiss": "to dismiss", "label-no-note-create-new": "No notes found. Enter to create a new one.", "prompt-type-file-name": "Type file to switch to or create...", "label-enter-to-create": "Enter to create", "tooltip-not-created-yet": "Not created yet, select to create", "option-show-existing-only": "Show existing only", "option-show-existing-only-description": "Only show results from existing files. Links to files that are not yet created will be hidden.", "option-show-attachments": "Show attachments", "option-show-attachments-desc": "Show attachment files like images, videos, and PDFs.", "option-show-all-file-types": "Show all file types", "option-show-all-file-types-desc": "Show all files including ones that Obsidian can't open. The file will be opened with the default app for that file type." }, "graph-view": { "name": "Graph view", "desc": "See a graph overview of which notes link to which.", "action-open": "Open graph view", "action-open-local": "Open local graph", "action-copy-screenshot": "Copy screenshot", "tab-title": "Graph of {{displayText}}", "label-filters": "Filters", "prompt-filter-nodes": "Search files...", "option-depth": "Depth", "option-depth-description": "Show nodes this number of links away", "option-neighbor-links": "Neighbor links", "option-neighbor-links-description": "Show links between neighbors.", "option-forelinks": "Outgoing links", "option-forelinks-description": "Show links to other files", "option-backlinks": "Incoming links", "option-backlinks-description": "Show links from other files", "option-show-tags": "Tags", "option-show-tags-description": "Tags are linked to the files that contain them", "option-show-attachments": "Attachments", "option-show-attachments-description": "Show attachments included by files", "option-show-existing-files-only": "Existing files only", "option-show-existing-files-only-description": "When checked, links to nonexistent files are not shown", "option-show-orphans": "Orphans", "option-show-orphans-description": "Show files that are not linked to any other file", "label-display": "Display", "option-show-arrows": "Arrows", "option-show-arrows-description": "Show arrows when zoomed in", "option-text-fade": "Text fade threshold", "option-node-size": "Node size", "option-link-thickness": "Link thickness", "label-forces": "Forces", "option-center-force": "Center force", "option-link-force": "Link force", "option-link-distance": "Link distance", "option-repel-force": "Repel force", "tooltip-open-graph-settings": "Open graph settings", "msg-screenshot-copied": "Screenshot copied to the clipboard.", "label-groups": "Groups", "placeholder-enter-query": "Enter query...", "tooltip-delete-graph": "Delete group", "button-new-group": "New group", "tooltip-click-to-change-drag-to-reorder": "Click to change color\nDrag to reorder groups", "action-timelapse": "Start graph timelapse animation", "tooltip-start-timelapse-animation": "Start timelapse animation", "button-animate-timelapse": "Animate" }, "backlinks": { "name": "Backlinks", "desc": "Show number of backlinks in the status bar.", "action-open": "Open backlinks", "action-show": "Show backlinks pane", "action-open-for-current": "Open backlinks for the current file", "action-toggle-backlinks-in-document": "Toggle backlinks in document", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "Linked mentions", "label-no-backlinks": "No backlinks found.", "label-unlinked-mentions": "Unlinked mentions", "label-show-search": "Show search filter", "label-link-button-text": "Link", "tab-title": "Backlinks for {{displayText}}", "label-no-unlinked-mentions": "No unlinked mentions found.", "ellipsis": "...", "option-backlink-in-document": "Backlink in document", "option-backlink-in-document-desc": "Show backlinks in document by default when opening new panes." }, "outgoing-links": { "name": "Outgoing Links", "desc": "Show outgoing links and detect unlinked mentions of other notes in the current note.", "action-open": "Open outgoing links", "action-show": "Show outgoing links pane", "action-open-for-current": "Open outgoing links for the current file", "tab-title": "Outgoing links from {{displayText}}", "label-links": "Links", "label-no-links": "No links found.", "label-unlinked-mentions": "Unlinked mentions", "tooltip-link-file": "Link this file", "tooltip-not-created": "Not created yet" }, "tag-pane": { "name": "Tag pane", "desc": "Displays all your tags and along with their number of occurrences.", "action-show": "Show tag pane", "label-no-tags": "No tags found.", "label-sort-by-name-a-to-z": "Tag name (A to Z)", "label-sort-by-name-z-to-a": "Tag name (Z to A)", "label-sort-by-frequency-high-to-low": "Frequency (high to low)", "label-sort-by-frequency-low-to-high": "Frequency (low to high)", "action-show-nested-tags": "Show nested tags", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "Page preview", "desc": "Preview a note when hovering an internal link. Ctrl/Cmd + hover in editor mode.", "label-empty-note": "\"{{linktext}}\" is not created yet. Click to create.", "label-source-editor": "Editor", "label-source-preview": "Preview", "label-source-search": "Search, Backlinks, and Outgoing links", "label-require-mod": "Require {{key}} to trigger page preview on hover" }, "starred": { "name": "Starred", "desc": "Star frequently used files and searches.", "action-show": "Show starred pane", "action-toggle": "Star/unstar current file", "action-toggle-search": "Star/unstar current search", "action-star": "Star", "action-unstar": "Unstar", "menu-opt-remove": "Remove", "msg-successfully-starred": "Successfully starred {{type}} \"{{title}}\".", "msg-removed-starred": "Removed starred {{type}} \"{{title}}\".", "msg-cannot-find-path": "Cannot find file at \"{{path}}\"." }, "custom-css": { "name": "Custom CSS", "desc": "Reads \"obsidian.css\" in the vault and applies it.", "setting-community-themes": "Community themes", "msg-fetching-themes": "Fetching community theme data...", "prompt-filter": "Filter...", "label-dark-theme-only": "Dark themes only", "label-light-theme-only": "Light themes only", "label-use": "Use", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "Update", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "Remove theme", "label-visit-on-github": "Visit on GitHub", "msg-load-error": "Could not load community themes, please check your network.", "msg-now-using-theme": "You're now using {{title}} as your CSS theme.", "msg-deleted-theme": "The theme {{title}} has been deleted.", "msg-updated-theme": "The theme {{title}} has been updated.", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "Command palette", "desc": "Type a command to invoke it. No need to use the UI or remember the shortcut.", "action-open": "Open command palette", "instruction-navigate": "to navigate", "instruction-use": "to use", "instruction-dismiss": "to dismiss", "label-no-commands": "No commands found.", "prompt-type-command": "Type a command...", "label-pinned-commands": "Pinned commands", "option-add-new-pin": "New pinned command", "option-add-new-pin-description": "Pinned commands will appear at the top of all commands when no search query is present." }, "markdown-format-importer": { "name": "Markdown format importer", "desc": "Convert Markdown from other apps to Obsidian format.", "action-open": "Open Markdown importer", "option-roam-tag-fixer": "Roam Research tag fixer", "option-roam-tag-fixer-description": "Converts \"#tag\" and \"#[[tag]]\" to \"[[tag]]\".", "option-roam-highlight-fixer": "Roam Research highlight fixer", "option-roam-highlight-fixer-description": "Converts \"^^highlight^^\" to \"==highlight==\".", "option-roam-todo-converter": "Roam Research TODO converter", "option-roam-todo-converter-description": "Converts \"{{[[TODO]]}}\" to \"[ ]\".", "option-bear-highlight-fixer": "Bear highlight fixer", "option-bear-highlight-fixer-description": "Converts \"::highlight::\" to \"==highlight==\".", "zettelkasten-link-fixer": "Zettelkasten link fixer", "zettelkasten-link-fixer-description": "Fixes \"[[UID]]\" links to full \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Zettelkasten link beautifier", "zettelkasten-link-beautifier-description": "Fixes \"[[UID]]\" links and also beautify them \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Warning: the importer will convert all the files in your vault, not just the current file.", "msg-override-files-warning": "Your files will be overwritten. Back up all your files before attempting conversion.", "label-start-conversion": "Start Conversion", "label-stop": "Stop", "label-go-back": "Go back", "label-done": "Done", "label-processing": "Processing...", "label-cancelling": "Cancelling...", "label-finished": "Finished!", "label-processed-files": "Processed files", "label-modified-files": "Modified files", "label-total-replacements": "Total replacements" }, "daily-notes": { "name": "Daily notes", "desc": "Open today's daily note, or create one if not present.", "short-name": "Today", "action-open": "Open today's note", "action-open-previous": "Open previous daily note", "action-open-next": "Open next daily note", "action-insert-text": "Insert text into daily note", "action-insert-link": "Insert link into daily note", "msg-fail-format": "Failed to create daily note. \"{{format}}\" is not a valid format.", "msg-fail-folder": "Failed to create daily note. Folder \"{{folderOption}}\" not found.", "msg-fail-template-file": "Failed to create daily note. Template file \"{{template}}\" not found.", "msg-no-previous": "There's no daily note before this one.", "msg-no-next": "There's no daily note after this one.", "option-date-format": "Date format", "label-refer-to-syntax": "For more syntax, refer to: ", "label-syntax-link": "format reference", "label-syntax-live-preview": "Here is what it will look like: ", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new daily note.", "option-template": "Template file location", "option-template-description": "The file path to use as template.", "option-open-on-start": "Open daily note on startup", "option-open-on-start-description": "Open your daily note automatically whenever you open this vault." }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Random note", "desc": "Opens a random note. Useful for reviewing and discovering.", "short-name": "Random", "action-open": "Open random note" }, "outline": { "name": "Outline", "desc": "Displays the outline of the current file or linked pane.", "action-open": "Open outline", "action-show": "Show outline pane", "action-open-for-current": "Open outline of the current file", "tab-title": "Outline of {{displayText}}", "label-no-headings": "No headings found." }, "word-count": { "name": "Word count", "desc": "Show word count in the status bar." }, "slides": { "name": "Slides", "desc": "Present from Markdown. Use \"---\" to separate slides.", "action-start": "Start presentation" }, "audio-recorder": { "name": "Audio recorder", "desc": "Record audio and save as attachment.", "action-start": "Start recording audio", "action-stop": "Stop recording audio", "action-toggle": "Start/stop recording", "msg-access-denied": "Microphone access was denied, please enable it from the preference pane.", "msg-pending-grant": "Please grant microphone permission to start recording.", "msg-no-microphone": "No microphone is connected." }, "open-with-default-app": { "name": "Open in default app", "desc": "Add button to open current file in the default app.", "action-open-file": "Open in default app", "action-open-file-mobile": "Share", "action-show-in-folder": "Show in folder", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "Templates", "desc": "Insert template content from a folder of template files.", "action-insert": "Insert template", "action-insert-current-date": "Insert current date", "action-insert-current-time": "Insert current time", "option-template-folder-location": "Template folder location", "option-template-folder-location-description": "Files in this folder will be available as templates.", "option-template-date-format": "Date format", "option-template-date-format-description": "{{date}} in the template file will be replaced with this value.", "option-template-date-format-description2": "You can also use {{date:YYYY-MM-DD}} to override the format once.", "option-template-time-format": "Time format", "option-template-time-format-description": "{{time}} in the template file will be replaced with this value.", "option-template-time-format-description2": "You can also use {{time:HH:mm}} to override the format once.", "instruction-navigate": "to navigate", "instruction-insert": "to insert template", "instruction-dismiss": "to dismiss", "msg-no-templates-found": "No templates found", "msg-fail-invalid-folder": "Failed to list templates. Template folder is invalid.", "msg-fail-folder-not-found": "Failed to list templates. Folder \"{{folderOption}}\" not found.", "prompt-type-template": "Type name of a template..." }, "translucency": { "name": "Translucent window", "desc": "Turn on translucency effect to enhance a sense of depth. Best used with dark mode. Not supported on Linux." }, "slash-command": { "name": "Slash commands", "desc": "Enable the ability to trigger slash commands in the editor by typing the forward slash." }, "editor-status": { "name": "Editor status", "desc": "Adds a status bar item to show and change the current editor mode.", "read": "Reading", "edit-source": "Source mode", "edit-live-preview": "Live Preview" }, "publish": { "name": "Publish", "desc": "Publish your notes through Obsidian Publish.", "action-publish-changes": "Publish changes", "label-no-internet-access": "You need access to the internet to publish changes.", "label-publish-service-description": "Obsidian Publish is an add-on paid service that lets you publish your notes online directly from Obsidian.", "label-please-login": "To start publishing, please log in or create a new Obsidian account.", "label-no-publish-subscription": "You do not have an Obsidian Publish subscription yet.", "button-purchase": "Purchase", "label-manage-sites": "Manage sites", "label-no-sites": "You don't have any sites.", "button-choose": "Choose", "tooltip-edit-site-id": "Edit site ID", "tooltip-delete-site": "Delete site", "label-delete-site-confirmation": "Are you sure you want to delete this site?", "label-delete-site-details": "This will immediately and permanently delete your site.", "label-confirm-delete-site": "Confirm delete site \"{{site}}\"", "option-site-id": "Site ID", "option-site-id-description": "Your site will be at https://publish.obsidian.md/{site id}. You can change this later. Only lower case letters, numbers, and dashes are allowed.", "option-site-id-placeholder": "Pick a site ID", "button-create": "Create", "msg-invalid-site-id": "Site ID can only contain lowercase letters, numbers, and dashes.", "msg-site-id-in-use": "This site ID is in use, please try another one.", "msg-create-site-issue": "That was an issue when creating your site.", "label-site-options": "Site options", "option-site-general": "General", "option-site-components": "Components", "option-site-appearance": "Appearance", "option-site-reading-experience": "Reading experience", "option-site-misc": "Other site settings", "option-site-name": "Site name", "option-site-name-description": "Name of your published site. It will show up in the page title of your site.", "option-site-name-placeholder": "Name of your site", "option-home-page-file": "Homepage file", "option-home-page-file-description": "The first page the user sees when landing on your published site", "option-home-page-file-placeholder": "Pick a published file", "option-logo": "Logo", "option-logo-description": "Pick an image file as your site logo.", "option-logo-placeholder": "Any any uploaded image in your vault...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "Theme", "option-theme-description": "Choose default color scheme for your site.", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "Show navigation", "option-show-navigation-description": "Display a list of all published pages on the left side of your published site.", "option-show-search": "Show search bar", "option-show-search-description": "Display a search bar at top of the navigation that lets the visitors search pages and headings on your site.", "option-show-graph": "Show graph view", "option-show-graph-description": "Display a small local graph on each page.", "option-show-outline": "Show table of contents", "option-show-outline-description": "Display the outline of headings on each page.", "option-show-backlinks": "Show backlinks", "option-show-backlinks-description": "Show backlink section at the end of each page.", "option-sliding-window-mode": "Use sliding windows", "option-sliding-window-mode-description": "Open pages in new panes to the right. Allows scrolling through panes horizontally.", "option-hover-preview-file": "Show hover preview", "option-hover-preview-file-description": "Display page preview when hovering links.", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "Readable line length", "option-readable-line-length-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-site-password": "Passwords", "option-site-password-description": "Restrict access to your site with passwords.", "option-google-analytics": "Google Analytics tracking code", "option-google-analytics-description": "Configure Google Analytics for your site. Only available for visitors from your custom domain URL. Please check with your local laws and regulations first.", "button-manage-passwords": "Manage", "button-save-site-settings": "Save site settings", "msg-updated-options": "Updated options for your site.", "button-go-back": "Back", "label-publishing-to": "Publishing to", "tooltip-switch-site": "Switch site", "button-add-linked": "Add linked", "tooltip-add-linked": "Add all files that are linked by currently selected items", "msg-added-linked-files": "{{count}} linked file has been added.", "msg-added-linked-files_plural": "{{count}} linked files have been added.", "tooltip-open-site-options": "Change site options", "label-no-changes-detected": "No changes were detected.", "label-changed-files-to-be-published": "Changes", "label-unchanged-files-already-published": "Unchanged (select to delete)", "label-file-selected": " selected", "button-select-all-files": "Select all", "button-deselect-all-files": "Deselect all", "label-new-files-to-be-published": "New", "button-publish": "Publish", "msg-no-permission-to-publish-to-site": "You do not have permissions to publish to the current site.", "msg-select-at-least-one-file": "Please select at least one file.", "label-upload-changes": "Upload changes", "button-done": "Done", "button-stop": "Stop", "label-status-uploading": "Uploading", "label-status-to-publish": "To publish", "label-status-to-delete": "To delete", "label-status-published": "Published", "label-status-deleted": "Deleted", "label-status-failed": "Failed", "label-status-cancelled": "Cancelled", "button-change": "Change", "label-clear-cache": "It takes up to a few minutes for the changes to show up on your site. If you do not see your latest changes, try clearing the cache in your browser.", "label-visit-site": "You can visit your site here: ", "msg-something-went-wrong": "Something went wrong. Please check the developer console for details.", "msg-network-error": "A network error occurred. ", "label-manage-passwords": "Manage passwords", "label-add-password": "Add password", "action-new-password": "New password", "label-no-password": "Your site currently does not have any passwords. Anyone can visit it.", "label-have-password": "Your site is password protected. If you have multiple passwords, visitors can access your site by entering any of them.", "option-password-name": "Password", "option-password-desc": "A hash of your password will be stored securely. Once the password is set, it cannot be revealed in plaintext.", "option-password-placeholder": "Your password", "option-nickname-name": "Nickname (optional)", "option-nickname-desc": "Set a nickname to remind yourself what or who the password is for.", "action-add-password": "Add this password", "label-untitled-password": "Untitled password", "label-password-created-time": "Created {{time}}", "msg-added-new-password": "Added new password.", "option-custom-domain": "Custom domain", "option-custom-domain-desc": "Use your own domain rather than the https://publish.obsidian.md/{site id} URL.", "option-noindex": "Disallow search engine indexing", "option-noindex-desc": "Prevent search engines from indexing your site.", "button-configure": "Configure", "label-configure-custom-domain": "Configure custom domain", "option-custom-url-name": "Custom URL", "option-custom-url-desc": "The URL that your site will be located at.", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "Redirect to your custom domain", "option-custom-url-redirect-desc": "Redirect visitors on publish.obsidian.md/id to your custom domain.", "button-update-custom-domain": "Update domain setting", "label-custom-domain-instructions": "Please refer to our {{link}} on our help site for more information.", "label-custom-domain-link-name": "custom domain setup guide", "label-site-usage": "You're using {{site}} out of your {{limit}}.", "button-add-more-sites": "Buy more sites", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "Workspaces", "desc": "Save and load workspace layout.", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "Save", "button-load": "Load", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "Sync", "desc": "Synchronize your files through Obsidian Sync.", "action-view-version-history": "View version history", "label-load-more": "Load more", "label-show-diff": "Show diff", "label-copy-to-clipboard": "Copy to clipboard", "label-restore-this-version": "Restore this version", "msg-already-latest-version": "This version is already the latest version.", "msg-restored-version": "Successfully restored version from {{time}}", "label-file-deleted": "This file was deleted", "label-no-earlier-version": "There was no earlier versions of this file.", "label-empty-file": "Empty", "label-setting-files": "Setting files", "label-deleted-files": "Deleted files", "label-version-history": "Version history", "label-click-to-see-history": "Click on a deleted file to see its history.", "label-create-remote-vault": "Create remote vault", "msg-please-enter-password": "Please enter a password.", "msg-vault-name-cannot-be-empty": "Vault name cannot be empty.", "msg-successfully-created-vault": "Successfully create remote vault \"{{name}}\".", "label-remote-vault-explanation": "Remote vaults securely synchronize your vault between devices.", "option-vault-name": "Vault name", "option-vault-name-desc": "Helps you remember what this vault is for.", "option-vault-name-placeholder": "My awesome vault", "option-use-custom-encryption-password": "Customize end-to-end encryption password", "option-use-custom-encryption-password-desc": "If you turn this off, we will securely manage an encryption key for you.", "option-use-custom-encryption-password-desc-warning": "This option cannot be changed later.", "option-encryption-password": "Encryption password", "option-encryption-password-desc": "This password cannot be changed later.", "option-encryption-password-desc-warning": "If you forget this password, any remote data will remain unusable forever.", "option-encryption-password-desc-2": "This does not affect your local data.", "option-encryption-password-placeholder": "Your password", "label-enter-encryption-password": "Enter encryption password", "button-unlock-vault": "Unlock vault", "msg-verified-password": "Successfully verified your password.", "label-remote-vaults": "Your remote vaults", "label-vault-created-time": "Created {{time}}", "tooltip-delete-remote-vault": "Delete", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "Confirm delete vault", "label-confirm-delete-remote-vault-question": "Are you sure you want to delete this remote vault?", "label-confirm-delete-remote-vault-result": "All data on our server, including version history, will be deleted. Your local files will stay intact.", "label-confirm-delete-remote-vault-warning": "This action is permanent and irreversible.", "msg-remote-vault-deleted": "{{name}} has been deleted.", "button-connect-to-remote-vault": "Connect", "button-disconnect-from-remote-vault": "Disconnect", "label-not-remote-vaults": "You don't have any remote vaults.", "button-create-new-remote-vault": "Create new vault", "label-sync-log": "Sync log", "options-only-show-errors": "Errors only", "options-only-show-errors-desc": "Only show errors and hide other log items.", "button-copy-sync-log": "Copy sync log", "msg-successfully-copied-sync-log": "Successfully copied sync log.", "button-retry": "Retry", "button-purchase-subscription": "Purchase", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "Choose", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "Sync status", "option-sync-status-desc-paused": "Obsidian Sync is currently paused.", "option-sync-status-desc-running": "Obsidian Sync is currently running.", "option-device-name": "Device name", "option-device-name-desc": "This name will be displayed in the sync log. Leave empty to use the default name.", "button-resume": "Resume", "button-pause": "Pause", "option-view-deleted-files": "Deleted files", "option-view-deleted-files-desc": "View and restore deleted files.", "option-sync-log": "Sync activity", "option-sync-log-desc": "View recent sync activities for debugging.", "button-view": "View", "button-bulk-restore": "Bulk restore", "button-restore-selected-files": "Restore selected files", "msg-restoring": "Restoring...", "msg-restoring-complete": "Restore complete: {{succeeded}} succeeded and {{failed}} failed.", "option-over-size": "Vault size over limit", "option-over-size-desc": "Your vault is at {{size}} out of {{limit}}.", "msg-largest-files": "View largest files", "msg-largest-files-desc": "These are the remote files that are taking the most space. After deleting attachments, use the purge button to free up remote vault space.", "button-purge-remote": "Purge", "tooltip-purge-remote": "Permanently purge deleted attachments from remote vault to save space.", "msg-purge-complete": "Purge complete.", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "Selective sync", "option-excluded-folders": "Excluded folders", "option-excluded-folder-desc": "Prevent certain folders from being synced.", "option-currently-excluded-folders": " These folders currently excluded:", "button-manage-excluded-folders": "Manage", "option-sync-image": "Sync images", "option-sync-image-desc": "Sync image files with these extensions: {{extensions}}.", "option-sync-audio": "Sync audio", "option-sync-audio-desc": "Sync audio files with these extensions: {{extensions}}.", "option-sync-video": "Sync videos", "option-sync-video-desc": "Sync video files with these extensions: {{extensions}}.", "option-sync-pdf": "Sync PDFs", "option-sync-pdf-desc": "Sync PDF files.", "option-sync-unsupported": "Sync all other types", "option-sync-unsupported-desc": "Sync unsupported file types.", "option-vault-config-sync": "Vault configuration sync", "option-view-config-files": "Settings version history", "option-view-config-files-desc": "View and restore version history of setting files.", "option-sync-app": "Main settings", "option-sync-app-desc": "Enable to sync editor settings, files & links settings, custom hotkeys, etc.", "option-sync-appearance": "Appearance settings", "option-sync-appearance-desc": "Sync appearance settings like dark mode, active theme, and enabled snippets.", "option-sync-appearance-data": "Themes and snippets", "option-sync-appearance-data-desc": "Sync downloaded themes and snippets. Whether they are enabled depends on the previous setting.", "option-sync-hotkey": "Hotkeys", "option-sync-hotkey-desc": "Sync custom hotkeys.", "option-sync-core-plugin": "Active core plugin list", "option-sync-core-plugin-desc": "Sync which core plugins are enabled.", "option-sync-core-plugin-data": "Core plugin settings", "option-sync-core-plugin-data-desc": "Sync core plugin settings.", "option-sync-community-plugin": "Active community plugin list", "option-sync-community-plugin-desc": "Sync which community plugins are enabled.", "option-sync-community-plugin-data": "Installed community plugins", "option-sync-community-plugin-data-desc": "Sync installed community plugins (.js, .css, and manifest.json files) and their settings.", "label-sync-introduction": "Obsidian Sync is Obsidian's add-on sync service with end-to-end encryption and version history.", "label-account-required": "To start syncing, please log in or create a new Obsidian account.", "button-sign-up": "Sign up", "button-log-in": "Log in", "label-manage-excluded-folders": "Manage excluded folders", "label-number-of-folders-excluded": "{{folders}} are currently excluded from being synced.", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "Setup connection", "label-now-connected-to-vault": "You're now connected to \"{{name}}\".", "button-start-syncing": "Start syncing", "label-confirm-merge-vault": "Confirm Merge Vault", "msg-vault-has-notes": "Your local vault already contains some notes.", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "File recovery", "desc": "Let you restore recent snapshots to recover from accidental data loss. Snapshots are only saved for Markdown files.", "action-open": "Open saved snapshots", "option-interval": "Snapshot interval", "option-interval-description": "Minimal interval in minutes between two snapshots.", "option-keep": "History length", "option-keep-description": "Length in days snapshots is kept for.", "option-open-history": "Snapshots", "option-open-history-description": "View and restore saved snapshots.", "button-view-snapshots": "View", "option-clear": "Clear history", "option-clear-description": "Wipe all snapshots.", "button-clear-history": "Clear", "label-clear-warning": "Are you sure you want to delete all snapshots? Note that only snapshots will be removed. All files inside your vault will not be affected.", "msg-clear-complete": "Snapshots cleared.", "label-no-history-found": "No snapshots found.", "placeholder-choose-file": "Choose a file...", "label-select-file": "Please select a file on the left to view snapshots." }, "note-composer": { "name": "Note composer", "desc": "Merge, split, and refactor notes.", "option-confirm-file-merge": "Confirm file merge", "option-confirm-file-merge-description": "Prompt before merge two files.", "option-split-replacement-text": "Text after extraction", "option-split-replacement-text-description": "What to show in place of the selected text after extracting it.", "option-choice-split-replacement-text-link": "Link to new file", "option-choice-split-replacement-text-embed": "Embed new file", "option-choice-split-replacement-text-none": "None", "option-template-file": "Template file location", "option-template-file-description": "Template file to use when merging or extracting. Available variables: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Merge current file with another file...", "action-merge-file": "Merge entire file with...", "label-no-files": "No files found.", "instruction-navigate": "to navigate", "instruction-merge": "to merge", "instruction-create-new": "to create new", "instruction-merge-at-top": "to merge at top", "instruction-dismiss": "to dismiss", "prompt-select-file-to-merge": "Select file to merge into...", "label-merge-file": "Merge file", "label-confirm-file-merge": "Are you sure you want to merge \"{{file}}\" into \"{{destination}}\"? \"{{file}}\" will be deleted.", "button-merge": "Merge", "button-merge-do-not-ask-again": "Merge and don't ask again", "command-split-file": "Extract current selection...", "command-extract-heading": "Extract this heading...", "instruction-append": "to move to bottom", "instruction-prepend": "to move to top", "msg-fail-to-fetch-template": "Failed to fetch template file: \"{{template}}\" not found.", "msg-fail-to-find-heading": "Failed to find heading" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} word", "word-with-count_plural": "{{count}} words", "character-with-count": "{{count}} character", "character-with-count_plural": "{{count}} characters", "link-with-count": "{{count}} link", "link-with-count_plural": "{{count}} links", "file-with-count": "{{count}} file", "file-with-count_plural": "{{count}} file", "folder-with-count": "{{count}} folder", "folder-with-count_plural": "{{count}} folders", "backlink-with-count": "{{count}} backlink", "backlink-with-count_plural": "{{count}} backlinks", "site-with-count": "{{count}} site", "site-with-count_plural": "{{count}} sites", "plugin-with-count": "{{count}} plugin", "plugin-with-count_plural": "{{count}} plugins", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } }{ "setting": { "options": "Tùy chọn", "plugin": "Plugin", "builtin-plugins": "Các plugin chính", "plugin-options": "Tùy chọn plugin", "folder-path-example-placeholder": "Ví dụ: thư mục 1 / thư mục 2", "file-path-example-placeholder": "Ví dụ: thư mục / ghi chú", "msg-restart-required": "Cần khởi động lại để thay đổi được kích hoạt.", "editor": { "name": "Trình biên tập", "section-general": "Tổng quan", "section-behavior": "Hành vi", "section-display": "Hiển thị", "option-spellcheck": "Kiểm tra chính tả", "option-spellcheck-description": "Bật tính năng kiểm tra chính tả. Hiện chỉ hoạt động với tiếng Anh (Mỹ).", "spellcheck-languages": "Kiểm tra chính tả các ngôn ngữ", "spellcheck-languages-description": "Chọn ngôn ngữ cho trình kiểm tra chính tả.", "spellcheck-languages-mac-description": "Trình kiểm tra chính tả gốc sẽ tự động phát hiện ngôn ngữ đang được sử dụng cho bạn trên macOS.", "spellcheck-dict": "Từ điển kiểm tra chính tả", "spellcheck-dict-empty": "Từ điển kiểm tra chính tả trống..", "option-show-inline-title": "Show inline title", "option-show-inline-title-description": "Displays the filename as an editable title inline with the file contents.", "option-readable-line-length": "Độ dài dòng tối đa", "option-readable-line-description": "Giới hạn số ký tự tối đa trên một dòng. Hiển thị ít nội dung hơn, nhưng khiến các đoạn văn dài dễ đọc hơn.", "option-strict-line-break": "Ngắt dòng nghiêm ngặt", "option-strict-line-break-description": "Ở chế độ xem trước, bỏ qua các ngắt dòng đơn theo thông số Markdown. Tắt tùy chọn này để ngắt dòng đơn hiển thị trong bản xem trước.", "option-show-frontmatter": "Hiển thị frontmatter", "option-show-frontmatter-description": "Ở chế độ xem trước, hiển thị frontmatter dưới dạng một khối mã. Tắt để ẩn phần frontmatter", "option-auto-pair-brackets": "Đóng ngoặc tự động", "option-auto-pair-brackets-description": "Tự động thêm dấu đóng ngoặc vuông hoặc đóng ngoặc kép khi gõ dấu mở ngoặc tương ứng", "option-auto-pair-markdown": "Đóng cú pháp Markdown tự động", "option-auto-pair-markdown-description": "Tự động thêm ký hiệu kết thúc tương ứng khi gõ ký hiệu bắt đầu in đậm, in nghiêng, tô sáng, gạch ngang và mã.", "option-smart-indent-lists": "Tính năng thụt lề thông minh cho danh sách", "option-smart-indent-lists-description": "Tự động thụt lề và sinh ra đánh dấu phù hợp", "option-fold-heading": "Tiêu đề gấp", "option-fold-heading-description": "Cho phép bạn gấp mọi thứ vào trong một tiêu đề", "option-fold-indent": "Gấp thụt lề", "option-fold-indent-description": "Cho phép bạn gấp một phần của cùng một thụt lề, chẳng hạn như danh sách.", "option-default-new-tab-view": "Default view for new tabs", "option-default-new-tab-view-description": "The default view that a new markdown tab gets opened in.", "option-default-new-tab-view-editing": "Editing view", "option-default-new-tab-view-reading": "Reading view", "option-default-editing-mode": "Chế độ chỉnh sửa mặc định", "option-default-editing-mode-description": "Chế độ chỉnh sửa mặc định mà một ngăn mới sẽ bắt đầu.", "option-default-editing-mode-source": "Chế độ nguồn", "option-default-editing-mode-live-preview": "Xem trước trực tiếp", "option-show-line-number": "Hiển thị số dòng", "option-show-line-number-description": "Hiển thị số dòng trên cột gutter.", "option-indentation-guide": "Hiển thị đường dọc chỉ dẫn thụt lề", "option-indentation-guide-description": "Hiển thị tương quan theo cột dọc giữa các mục trong danh sách, giúp dễ quan sát.", "option-use-tabs": "Sử dụng ký tự tab", "option-use-tabs-description": "Sử dụng ký tự tab để thụt lề, khi nhấn phím \" Tab \" . Tắt lựa chọn này để sử dụng ký tự trắng", "option-tab-size": "Kích thước tab", "option-tab-size-description": "Số khoảng trắng tương đương với một tab", "option-rtl": "Từ phải sang trái (RTL)", "option-rtl-description": "Đặt hướng văn bản của ghi chú để hiển thị từ phải sang trái.", "option-auto-convert-html": "Tự động chuyển đổi HTML", "option-auto-convert-html-description": "Tự động chuyển đổi HTML thành Markdown khi dán và kéo thả từ trang web. Sử dụng Ctrl/Cmd+Shift+V để dán mà không có sự chuyển đổi.", "option-vim-key-bindings": "Tổ hợp phím Vim", "option-vim-key-bindings-description": "Cho phép bạn sử dụng tổ hợp phím Vim trong trình biên tập nguồn.", "option-vim-key-bindings-mobile": "On mobile devices, this setting is per-device and is not synchronized through the config file.", "option-emacsy-keys": "Tổ hợp phím cổ kiểu Emacs cho macOS", "option-emacsy-keys-description": "Cho phép bạn sử dụng phím di chuyển kiểu Emacs bổ sung, tiêu chuẩn trên macOS, nhưng có thể gây trở ngại cho một số hoạt động chính.", "label-confirm-enable-vim": "Xác nhận bật chế độ Vim", "label-vim-warning": "Chế độ Vim là để chỉnh sửa văn bản hiệu quả nhưng có thể không trực quan. Nếu bạn không quen với Vim, tùy chọn này có thể làm cho nó giống như Obsidian đã ngừng hoạt động.", "label-vim-test": "Để xác nhận rằng bạn biết cách dùng Vim, vui lòng nhập lệnh để tắt Vim mà không lưu dữ liệu dưới đây:", "label-vim-your-answer": "Câu trả lời của bạn", "placeholder-enter-command": "Nhập lệnh...", "button-confirm-enable-vim": "Cho phép tôi bật Vim", "msg-vim-mode-enabled": "Lệnh đúng. Chế độ Vim đã bật.", "msg-vim-mode-not-enabled": "Lệnh không đúng. Chế độ Vim vẫn tắt để bảo vệ bạn.", "msg-vim-mode-please-enter-command": "Vui lòng nhập dòng lệnh để kích hoạt chế độ Vim", "option-legacy-editor": "Sử dụng trình chỉnh sửa cổ", "option-legacy-editor-description2": "The legacy editor will be deprecated soon. It is currently no longer maintained, and as such, bugs will no longer be addressed.", "label-legacy-deprecation": "New editor is here", "label-legacy-deprecation-1": "Obsidian now has a brand new editor that's more robust and accessible.", "label-legacy-deprecation-2": "It seems you're still using the legacy editor, and we think you'll enjoy the new editor.", "label-legacy-deprecation-choice": "Which mode would you like to use?", "label-live-preview-description": "A more modern, what-you-see-is-what-you-get experience.", "label-source-mode-description": "See raw Markdown with syntax highlighting.", "button-start-new-editor": "Start new editor" }, "file": { "name": "Tệp & Liên kết", "option-confirm-file-deletion": "Xác nhận xóa tệp", "option-confirm-file-deletion-description": "Nếu bạn muốn được nhắc xác nhận xóa tệp.", "option-delete-destination": "Những tệp đã xóa", "option-delete-destination-description": "Phải làm gì với các tệp sau khi bạn xóa chúng.", "option-choice-system-trash": "Chuyển vào thùng rác của máy tính", "option-choice-vault-trash": "Chuyển đến thùng rác của Obsidian (thư mục .trash)", "option-choice-permanent-delete": "Xóa vĩnh viễn", "option-always-update-links": "Luôn cập nhật liên kết nội bộ", "option-always-update-links-description": "Có tự động cập nhật liên kết sau khi đổi tên tệp hoặc lời nhắc hay không.", "option-new-note-location": "Vị trí mặc định của ghi chú mới", "option-new-note-location-description": "Nơi đặt các ghi chú mới tạo. Cài đặt của plugin sẽ ghi đè lên.", "option-choice-vault-root": "Vault gốc", "option-choice-current-folder": "Cùng thư mục với tệp", "option-choice-specified-folder": "Trong thư mục được chỉ định bên dưới", "option-new-file-folder-path": "Thư mục để tạo ghi chú mới bên trong", "option-new-file-folder-path-description": "Các ghi chú mới tạo sẽ xuất hiện trong thư mục này. Plugin settings will override this.", "option-use-wiki-links": "Sử dụng [[những Wikilink]]", "option-use-wiki-links-description": "Tự động tạo những Wikilink cho [[những liên kết]] và ![[những hình ảnh]] thay vì các liên kết và hình ảnh Markdown. Thay vào đó, hãy tắt tùy chọn này để tạo liên kết Markdown.", "option-show-unsupported-files": "Phát hiện tất cả các phần mở rộng của tệp", "option-show-unsupported-files-description": "Hiển thị các tệp có bất kỳ phần mở rộng nào ngay cả khi Obsidian không thể trực tiếp mở chúng, để bạn có thể liên kết với chúng và xem chúng trong File Explorer và Quick Switcher.", "option-link-autocompleted-format": "Định dạng liên kết mới", "option-link-autocompleted-format-description": "Những liên kết nào để chèn khi tự động tạo liên kết nội bộ.", "option-choice-shortest-linktext": "Con đường ngắn nhất khi có thể", "option-choice-relative-path": "Đường dẫn tương đối đến tệp", "option-choice-absolute-path": "Đường dẫn tuyệt đối trong vault", "option-new-attachment-location": "Vị trí mặc định cho các tệp đính kèm mới", "option-new-attachment-location-description": "Nơi các tệp đính kèm mới thêm vào được đặt.", "option-choice-subdirectory": "Trong thư mục con dưới thư mục hiện tại", "option-attachment-folder-path": "Đường dẫn thư mục đính kèm", "option-attachment-folder-path-description": "Các tệp đính kèm mới được tạo sẽ xuất hiện ở đây. Chúng bao gồm các hình ảnh được tạo bằng cách kéo và thả hoặc dán, và các bản ghi âm.", "option-attachment-subfolder-path": "Tên thư mục con", "option-attachment-subfolder-path-description": "Nếu tệp của bạn dưới \"vault/folder\", và bạn đặt tên thư mục con thành \"attachments\", tệp đính kèm sẽ được lưu vào \"vault/folder/attachments\".", "option-attachment-subfolder-path-placeholder": "các tệp đính kèm", "option-excluded-files": "Excluded files", "option-excluded-files-desc": "Excluded files will be either hidden or less noticeable in various places, such as Quick Switcher, link suggestion, and Graph View.", "label-no-excluded-filters-applied": "No excluded filter is applied right now. Add one below.", "label-excluded-filters-applied": "Files matching the following filters are currently excluded:", "label-excluded-filter": "Filter", "placeholder-excluded-filter": "Enter path or \"/regex/\"..." }, "appearance": { "name": "Vẻ ngoài", "option-base-theme": "Chủ đề mặc định", "option-base-theme-description": "Chọn bảng màu mặc định của Obsidian.", "option-accent-color": "Accent color", "option-accent-color-description": "Choose the accent color used throughout the app.", "dark-theme": "Tối", "light-theme": "Sáng", "system-theme": "Adapt to system", "option-font": "Font", "option-advanced": "Advanced", "option-interface-font": "Interface font", "option-interface-font-description": "Set base font for all of Obsidian.", "option-text-font": "Text font", "option-text-font-description": "Set font for editing and reading views.", "option-monospace-font": "Monospace font", "option-monospace-font-description": "Set font for places like code blocks and frontmatter.", "label-single-font-currently-in-effect": " Currently applied font: ", "label-multiple-fonts-currently-in-effect": " The following fonts are currently applied:", "option-font-placeholder": "Enter font name...", "label-no-custom-font-set": "No custom font is applied right now. Add one below.", "label-font-applied": "The first font from this list that is available on your system will be applied.", "msg-font-not-found": "This font is not detected on your system.", "msg-font-found": "This font is detected on your system.", "label-font-name": "Font name", "option-community-themes": "Mở các chủ đề cộng đồng", "option-community-themes-description": "Xem trước và sử dụng các chủ đề tuyệt vời do cộng đồng tạo ra.", "button-browse-community-themes": "Duyệt", "option-font-size": "Cỡ chữ", "option-font-size-description": "Kích thước phông chữ tính bằng pixel ảnh hưởng đến trình chỉnh sửa và xem trước.", "option-font-size-action": "Điều chỉnh kích thước phông chữ nhanh chóng", "option-font-size-action-description": "Điều chỉnh kích thước phông chữ bằng Ctrl + Cuộn Chuột Giữa hoặc sử dụng cử chỉ chụm-thu phóng trên bàn di chuột.", "option-themes": "Các chủ đề", "option-manage-themes-description": "Quản lý các chủ đề đã cài đặt và duyệt các chủ đề cộng đồng.", "option-theme-button-manage": "Quản Lý", "option-choice-none": "Không", "option-native-menus": "Native menus", "option-native-menus-desc": "Menus throughout the app will match the operating system. They will not be affected by your theme.", "button-reload-themes": "Tải lại chủ đề", "msg-reloaded-themes": "Đã tải lại các chủ đề CSS tùy chỉnh.", "button-open-themes-folder": "Mở thư mục chủ đề", "option-css-snippets": "Đoạn mã CSS", "label-no-css-snippets-found": "Không tìm thấy đoạn mã CSS nào trong thư mục đoạn mã.", "no-snippet-description": "Các đoạn mã CSS được lưu trữ trong \"{{path}}\".", "button-reload-snippets": "Tải lại đoạn mã", "button-open-snippets-folder": "Mở thư mục đoạn mã", "msg-reloaded-snippets": "Các đoạn CSS đã tải lại.", "option-toggle-snippet-description": "Áp dụng đoạn mã CSS tại \"{{path}}\".", "label-installed-themes": "Các chủ đề đã cài đặt", "label-screenshot-unavailable": "Ảnh chụp màn hình không khả dụng", "label-default-theme": "Mặc định", "tooltip-click-to-enlarge": "Bấm để phóng to", "button-update": "Cập Nhật", "label-currently-selected": "Đã chọn", "option-frame-style": "Window frame style", "option-frame-description": "Determines the styling of the title bar of Obsidian windows. Requires a full restart to take effect.", "option-frame-hidden": "Hidden (default)", "option-frame-obsidian": "Obsidian frame", "option-frame-native": "Native frame", "option-configure-ribbon": "Ribbon menu", "option-configure-ribbon-desc": "Configure what commands appear in the ribbon menu in that navigation bar.", "option-mobile-quick-ribbon-item": "Quick access ribbon item", "option-mobile-quick-ribbon-item-desc": "Tapping on the ribbon item in the navigation menu will active this ribbon item. Tap and hold will still show the menu.", "button-configure": "Configure", "label-additional-ribbon-items": "Other ribbon items", "label-modal-configuration": "Ribbon Configuration", "label-modal-configuration-desc": "Choose what items you want to be active in the ribbon. Drag and drop to change the order.", "option-show-view-header": "Show tab title bar", "option-show-view-header-desc": "Display the header at the top of every tab.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "button-check-for-updates": "Check for updates", "button-view-updates": "View updates", "button-update-all-themes": "Update all", "label-current-themes": "Current community themes", "label-currently-installed": "You currently have {{count}} theme installed.", "label-currently-installed_plural": "You currently have {{count}} themes installed." }, "hotkeys": { "name": "Các phím tắt", "prompt-filter": "Lọc...", "tooltip-delete-hotkey": "Xóa phím tắt", "label-waiting-for-hotkey-press": "Nhấn phím tắt...", "tooltip-restore-default": "Phục hồi mặc định", "tooltip-customize-command": "Tùy chỉnh lệnh này", "tooltip-hotkey-single-conflict": "Phím tắt này xung đột với \"{{command}}\"", "tooltip-hotkey-multiple-conflicts": "Phím tắt này xung đột với {{count}} lệnh khác", "label-blank-hotkey": "Trống" }, "about": { "name": "Về chúng tôi", "label-commercial-license": "Giấy phép thương mại", "label-license-key": "Mã bản quyền", "license-key-placeholder": "Mã bản quyền của bạn...", "label-activate-license": "Kích hoạt bản quyền", "button-activate": "Kích hoạt", "label-unknown-version": "Không xác định", "label-current-version": "Phiên bản hiện tại: ", "label-install-version": "(Phiên bản trình cài đặt: {{version}})", "label-up-to-date": "Ứng dụng của bạn đã được cập nhật!", "label-read-changelog": "Đọc ghi chú cập nhật.", "label-manual-update-required": "To support the latest features and to receive the latest security patches, Obsidian needs a major installer update. You need to manually download and reinstall Obsidian.", "label-download": "Tải xuống", "label-new-version-ready": "Một phiên bản mới đã sẵn sàng để được cài đặt. ", "label-relaunch-to-update": "Khởi chạy lại ứng dụng để cập nhật.", "label-disabled-updates": "Cập nhật bị vô hiệu hóa.", "label-checking-for-updates": "Kiểm tra các bản cập nhật...", "button-relaunch": "Khởi chạy lại", "button-check-for-updates": "Kiểm tra cập nhật", "option-auto-update": "Cập nhật tự động", "option-auto-update-description": "Tắt tính năng này để ngăn ứng dụng kiểm tra các bản cập nhật.", "option-get-help": "Get help", "option-get-help-description": "Get help on using Obsidian.", "button-open": "Mở", "option-language": "Ngôn ngữ", "option-language-description": "Thay đổi ngôn ngữ hiển thị.", "option-insider-build": "Nhận bản dựng nội bộ", "option-insider-build-description": "Tự động cập nhật các bản dựng nội bộ để thử các tính năng mới. Lưu ý rằng các bản dựng này mới nhất và có thể kém ổn định hơn.", "option-advanced": "Nâng cao", "option-hw-acceleration": "Tăng tốc phần cứng", "option-hw-acceleration-description": "Bật Tăng tốc phần cứng, sử dụng GPU của bạn để làm cho Obsidian mượt mà hơn.", "option-hw-acceleration-warning": "Nếu bạn tắt tính năng này, hiệu suất ứng dụng sẽ bị giảm sút nghiêm trọng.", "option-config-location": "Ghi đè thư mục cấu hình", "option-config-location-description": "Sử dụng thư mục cấu hình khác với thư mục mặc định. Phải bắt đầu bằng dấu chấm.", "option-config-location-warning": "Vị trí cấu hình phải là tên thư mục hợp lệ bắt đầu bằng dấu chấm.", "label-license": "Bản quyền", "label-your-commercial-license-key": "Mã bản quyền thương mại của bạn là \"{{key}}\".", "label-commercial-license-info": "Đã đăng ký với \"{{company}}\" cho {{seats}} người dùng. Có hiệu lực cho đến khi {{expiry}}.", "label-validating-commercial-license": "Đang xác thực...", "label-invalid-commercial-license": "Bản quyền không hợp lệ: ", "button-remove-commercial-license": "Loại bỏ", "option-catalyst": "Catalyst license", "option-catalyst-desc": "You currently have the {{tier}} Catalyst license. Thanks for your support!", "option-catalyst-desc-no-license": "You don't have a Catalyst license right now. Catalyst license is a one-time donation to support Obsidian development.", "label-app": "App" }, "account": { "name": "Tài Khoản", "option-your-account": "Your account", "option-your-account-desc": "You're currently signed in {{name}} ({{email}}).", "option-your-account-desc-no-login": "You're not logged in right now. An account is only needed for Obsidian Sync, Obsidian Publish, and Catalyst insider builds.", "button-manage-settings": "Manage settings", "label-insider": "người dùng nội bộ", "label-supporter": "người ủng hộ", "label-vip": "VIP", "button-upgrade-catalyst": "Upgrade", "option-commercial-license": "Commercial license", "option-commercial-license-desc": "If you use Obsidian for commercial purpose, you may need to get a commercial license.", "button-purchase": "Purchase", "button-log-out": "Đăng xuất", "label-log-in": "Đăng nhập", "label-sign-up": "Sign up", "label-email": "Email", "placeholder-email": "Email của bản...", "label-password": "Mật khẩu", "placeholder-password": "Mật khẩu của bạn...", "button-login": "Đăng nhập", "message-empty-email": "Email không được để trống.", "message-invalid-email": "Email không hợp lệ.", "message-empty-password": "Mật khẩu không được để trống.", "message-login-failed": "Đăng nhập không thành công, vui lòng kiểm tra lại email và mật khẩu của bạn.", "label-no-account": "Không có tài khoản? ", "link-sign-up-now": "Đăng ký ngay" }, "core-plugin": { "plugin-list": "Danh sách plugin", "option-search-plugin": "Tìm kiếm các plugin lõi", "option-search-plugin-description": "Lọc các plugin theo tên hoặc mô tả.", "placeholder-search-plugin": "Tìm kiếm plugin..." }, "third-party-plugin": { "name": "Plugin của bên thứ ba", "option-restricted-mode": "Restricted mode", "option-restricted-mode-description": "Restricted mode is off. Turn on to disable community plugins.", "button-turn-on": "Turn on", "option-browse-community-plugins": "Plugin cộng đồng", "option-browse-community-plugins-description": "Duyệt và cài đặt các plugin của bên thứ ba do cộng đồng tuyệt vời của chúng tôi tạo ra.", "button-browse": "Duyệt", "label-exit-restricted-mode": "Exit Restricted Mode", "label-exit-restricted-mode-description-1": "Community plugins, like any other software you install, could potentially cause data integrity and security issues.", "label-exit-restricted-mode-description-2": "Plugin security is important to us. Here's what we do:", "label-exit-restricted-mode-description-3": "Despite our efforts, there is still a small chance that a community plugin might misbehave.", "label-code-review": "Initial code review", "label-code-review-desc": "Plugins undergo an initial code review by our team before they appear in the store.", "label-open-source": "Open source", "label-open-source-desc": "Most plugins are open source on GitHub, so you can inspect the code yourself.", "label-peer-audit": "Peer audit", "label-peer-audit-desc": "We have a large community of developers who watch out for each other.", "label-report-mechanism": "Report mechanism", "label-report-mechanism-desc": "We follow up and remove faulty plugins upon user report.", "label-exit-restricted-mode-disable-confirmation": "Would you like to exit Restricted Mode to enable community plugins? We strongly recommend making backups of your data before doing so.", "label-learn-more": "Learn more about plugin security", "button-turn-on-community-plugins": "Turn on community plugins", "label-trust-author": "Do you trust the author of this vault?", "label-trust-author-description-1": "You're opening this vault for the first time, and it comes with some plugins.", "label-trust-author-description-2": "If you obtained this vault from someone else, please note that plugins of unknown origin might pose security risks.", "label-trust-author-description-3": "If you do not fully trust the author of this vault, we recommend staying in Restricted Mode, so the plugins in this vault do not run.", "button-enable-plugins": "Trust author and enable plugins", "button-dont-trust-author": "Browse vault in Restricted Mode", "placeholder-community-plugins": "Tìm kiếm plugin cộng đồng...", "msg-failed-load-plugins": "Không tải được plugin cộng đồng.", "label-installed": "Đã cài đặt", "button-install": "Cài đặt", "button-enable": "Bật", "button-disable": "Tắt", "button-copy-share-link": "Sao chép liên kết chia sẻ", "button-donate": "Donate", "label-no-results-found": "Không tìm thấy kết quả.", "msg-failed-to-load-manifest": "Không tải được tệp kê khai plugin.", "label-version": "Phiên bản: {{version}}", "label-currently-installed-version": " (đang cài đặt: {{version}})", "label-by-author": "Bởi ", "label-repository": "Kho: ", "label-last-update": "Last update: ", "tooltip-view-last-update": "View the latest update", "label-unsupported": "Plugin này không hỗ trợ thiết bị của bạn.", "button-update": "Cập nhật", "label-no-readme": "Plugin này không cung cấp tệp README.", "msg-installing-plugin": "Đang cài đặt plugin \"{{name}}\"...", "msg-failed-to-install-plugin": "Không cài đặt được plugin \"{{name}}\".", "msg-successfully-installed-plugin": "Đã cài đặt thành công plugin \"{{name}}\".", "label-installed-plugins": "Plugin đã cài đặt", "button-reload-plugins": "Tải lại plugin", "msg-reloaded-third-party-plugins": "Đã tải lại plugin của bên thứ ba.", "label-uninstall": "Gỡ cài đặt", "label-uninstall-plugin": "Gỡ cài đặt plugin", "label-uninstall-plugin-confirmation": "Bạn có chắc chắn muốn gỡ cài đặt plugin này không? Thao tác này sẽ xóa thư mục của plugin.", "button-open-plugins-folder": "Mở thư mục plugin", "button-check-for-updates": "Kiểm tra các bản cập nhật", "button-update-all-plugins": "Cập nhật tất cả", "label-current-plugins": "Các plugin hiện tại", "label-currently-installed": "Bạn chỉ có {{count}} plugin được cài đặt.", "label-currently-installed_plural": "Bạn đang có {{count}} plugin được cài đặt.", "label-debug-startup-time": "Debug startup time", "label-debug-startup-time-description": "Show a message with how long each plugin took to initialize when starting the app.", "msg-no-updates-found": "Không tìm thấy bản cập nhật plugin nào.", "msg-updates-found": "Chỉ tìm thấy {{count}} plugin để cập nhật.", "msg-updates-found_plural": "Đã tìm thấy {{count}} plugin để cập nhật.", "msg-update-plugin": "Cập nhật lên phiên bản {{version}}", "option-search-installed-plugin": "Tìm kiếm các plugin đã cài đặt", "option-search-installed-plugin-description": "Lọc các plugin đã cài đặt theo tên hoặc mô tả.", "placeholder-search-installed-plugin": "Tìm kiếm các plugin đã cài đặt ...", "show-installed-only": "Show installed only", "label-donate-modal-title": "Donate to support {{name}}", "label-donate-modal-text1": "Plugin developers are community volunteers who make amazing things out of passion. If you find this plugin useful, please consider funding its development.", "label-donate-modal-text2": "100% of your contribution will go to the plugin developer; Obsidian does not take a cut. The funding platform they choose might charge a fee.", "label-donate-modal-text3": "Thanks for your generous support!", "label-support-this-plugin": "Support this plugin:", "label-search-summary": "Đang hiển thị {{pluginCount}}:", "label-by-popularity": "Most downloaded", "label-by-released": "Recently released", "label-by-updated": "Recently updated", "label-alphabetical": "Alphabetical", "label-last-updated": "Updated {{time}}" }, "mobile-toolbar": { "name": "Thanh công cụ di động", "option-configure-quick-action": "Định cấu hình Hành động nhanh trên thiết bị di động", "option-configure-quick-action-description": "Định cấu hình lệnh nào sẽ kích hoạt khi kéo từ trên xuống. Lệnh hiện tại được đặt thành \"{{command}}\".", "button-configure": "Định cấu hình", "placeholder-select-quick-action": "Chọn tác vụ nhanh ...", "manage-toolbar-options": "Quản lý tùy chọn thanh công cụ", "option-internal-link": "Thêm liên kết nội bộ", "option-internal-embed": "Thêm nhúng", "option-tag": "Thêm thẻ", "option-heading": "Chuyển đổi tiêu đề", "option-strikethrough": "Chuyển đổi gạch ngang", "option-highlight": "Chuyển đổi vùng đánh dấu", "option-code": "Chuyển đổi khối mã", "option-blockquote": "Chuyển đổi blockquote", "option-markdown-link": "Thêm liên kết Markdown", "option-bullet-list": "Chuyển đổi danh sách dấu đầu dòng", "option-numbered-list": "Chuyển đổi danh sách được đánh số", "option-indent-list": "Thụt lề mục danh sách", "option-unindent-list": "Không thụt lề mục danh sách", "option-undo": "Hoàn tác", "option-redo": "Làm lại", "option-move-caret-up": "Di chuyển dấu mũ lên trên", "option-move-caret-down": "Di chuyển dấu mũ xuống dưới", "option-move-caret-left": "Di chuyển dấu mũ sang trái", "option-move-caret-right": "Di chuyển dấu mũ sang phải", "option-first-line": "Đi đến dòng đầu tiên", "option-last-line": "Đến dòng cuối cùng", "option-toggle-keyboard": "Chuyển đổi bàn phím", "option-configure-toolbar": "Định cấu hình thanh công cụ di động", "option-added-options": "Đã thêm các tùy chọn", "option-more-toolbar-options": "Các tùy chọn thanh công cụ khác", "option-attach": "Chèn tệp đính kèm", "option-add-command": "Thêm lệnh toàn cục", "option-add-command-description": "Chọn bất kỳ lệnh chung nào để thêm vào thanh công cụ." } }, "editor": { "search": { "placeholder-find": "Tìm", "placeholder-replace": "Thay thế", "label-previous": "Trước", "label-next": "Tiếp", "label-all": "Tất cả", "label-exit-search": "Thoát tìm kiếm", "label-replace": "Thay thế", "label-replace-all": "Thay thế tất cả" }, "link-suggestion": { "label-type-hash": "Nhập #", "label-link-heading": "để liên kết tiêu đề", "label-type-block": "Nhập ^", "label-link-block": "để liên kết các khối", "label-type-pipe": "Nhập |", "label-change-display-text": "để thay đổi các từ hiển thị", "label-no-match-found": "Không tìm thấy kết quả phù hợp" }, "spellcheck": { "no-suggestion": "Không có gợi ý...", "add-to-dictionary": "Thêm vào từ điển" }, "menu": { "edit-link": "Edit link" }, "heading-suggestion": { "label-no-heading": "No heading", "label-heading-level": "Heading {{level}}" }, "print-modal": { "title": "Xuất sang PDF", "caption": "Xuất \"{{filename}}\" sang PDF với cài đặt bên dưới.", "setting-page-size": "Kích thước trang", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "Include file name as title", "setting-landscape": "Ngang", "setting-margin": "Lề", "setting-margin-default": "Mặc định", "setting-margin-minimal": "Tối thiểu", "setting-margin-none": "Không", "setting-downscale-percent": "Giảm tỷ lệ phần trăm", "button-export-to-pdf": "Xuất sang PDF" }, "link-popover": { "tooltip-follow-link": "Theo dõi liên kết", "tooltip-open-link": "Mở liên kết", "tooltip-search-tag": "Tìm kiếm thẻ " } }, "interface": { "embed-cannot-find": "Cannot find:", "embed-open-in-default-app-tooltip": "Mở trong ứng dụng mặc định", "empty-sidebar": "Thanh bên trống, hãy thử kéo ngăn tại đây.", "sidebar-expand": "Mở rộng", "sidebar-collapse": "Thu gọn", "msg-fail-to-save-file": "Không lưu được tệp \"{{filepath}}\". {{message}}.", "no-file": "Không có tập tin", "msg-file-changed": "\"{{file}}\" đã được sửa đổi bên ngoài, tự động hợp nhất các thay đổi.", "switch-vault": "Mở một vault khác", "help": "Trợ giúp", "settings": "Cài đặt", "drag-to-rearrange": "Kéo để sắp xếp lại", "msg-switched-to-read": "Đã chuyển chế độ xem mặc định sang chế độ xem chỉ đọc.", "msg-switched-to-edit": "Đã chuyển chế độ xem mặc định sang chế độ xem chỉnh sửa.", "msg-upgrade-installer": "Để sử dụng tính năng này, vui lòng cài đặt lại bằng trình cài đặt mới nhất có sẵn từ trang web của chúng tôi.", "tooltip-restore-default-settings": "Khôi phục cài đặt mặc định", "label-copy": "Sao chép vào khay nhớ tạm", "copied_generic": "Copied to your clipboard", "copied": "{{item}} được sao chép vào khay nhớ tạm của bạn", "url": "Url", "msg-open-file-through-uri": "Đã mở tệp \"{{path}}\"", "msg-file-not-found-through-uri": "Tệp \"{{name}}\" không tìm thấy.", "delete-action-short-name": "Xóa", "msg-indexing": "Obsidian đang lập chỉ mục cho kho của bạn...\nĐiều này chỉ nên xảy ra một lần.\nMột số chức năng có thể không khả dụng cho đến khi hoàn tất.", "msg-indexing-complete": "Hoàn tất lập chỉ mục.", "msg-sandbox-vault": "This is a sandbox vault.\nChanges you make in this vault will be lost.", "label-enter-to-create": "Nhập để tạo", "label-update-available": "Đã có bản cập nhật", "label-debug-info": "Thông tin gỡ lỗi", "button-learn-more": "Tìm hiểu thêm", "button-not-now": "Không phải bây giờ", "button-add": "Add", "button-manage": "Manage", "label-new-tab": "New tab", "msg-tab-busy": "This tab is currently busy, please try again later", "empty-state": { "no-file-open": "Không có tệp nào được mở", "create-new-file": "Tạo tệp mới", "go-to-file": "Đi tới tệp", "see-recent-files": "Xem các tệp gần đây", "close": "Đóng", "unknown-pane-title": "Plugin không còn hoạt động", "unknown-pane-desc": "Plugin tạo ngăn này ({{type}}) không còn nữa" }, "menu": { "edit-view": "Chỉnh sửa (Ctrl / Cmd + Nhấp để chỉnh sửa trong ngăn mới)", "read-view": "Chế độ xem hiện tại: đang đọc", "switch-to-edit-view": "Nhấp để chỉnh sửa", "switch-to-read-view": "Nhấp để đọc", "mod-click-open-new-tab": "{{key}}+Click to open in new tab", "find": "Tìm ...", "replace": "Thay thế ...", "edit": "Chỉnh sửa", "preview": "Xem trước", "more-options": "Thêm tùy chọn", "close": "Đóng", "close-others": "Close others", "close-right": "Close tabs to the right", "pin": "Ghim", "unpin": "Unpin", "unlink-tab": "Unlink tab", "link-tab": "Link with tab...", "toggle-source-mode": "Source mode", "toggle-reading-view": "Reading view", "delete-file": "Xóa tệp", "create-file": "Create this file", "open-link": "Open link", "open-in-new-tab": "Open in new tab", "open-to-the-right": "Open to the right", "copy-url": "Sao chép url", "close-current-tab": "Close current tab", "copy": "Sao chép", "cut": "Cắt", "paste": "Dán", "paste-as-plain-text": "Dán dưới dạng văn bản thuần túy", "select-all": "Chọn tất cả", "rename-heading": "Đổi tên tiêu đề này ...", "rename-blockid": "Rename this block ID...", "open-in-new-window": "Open in new window", "move-to-new-window": "Move to new window", "open-in-browser": "Open in browser", "stack-tabs": "Stack tabs", "unstack-tabs": "Unstack tabs" }, "tooltip": { "click-to-expand": "Nhấp để mở rộng", "click-to-collapse": "Nhấp để thu gọn", "alias": "Bí danh", "not-created-yet": "Chưa tạo, chọn để tạo" }, "start-screen": { "label-version": "Phiên bản", "option-open-folder-as-vault": "Mở thư mục dưới dạng vault", "option-open-folder-as-vault-description": "Chọn một thư mục hiện có chứa các tệp Markdown.", "option-create-vault": "Tạo vault mới", "option-create-vault-description": "Tạo một kho chứa Obsidian mới trong một thư mục.", "option-connect-obsidian-sync": "Connect to Obsidian Sync", "option-connect-obsidian-sync-description": "Set up a synced vault with existing remote vault.", "option-new-vault-name": "Tên kho", "option-new-vault-name-description": "Chọn tên cho vault tuyệt vời của bạn.", "option-new-vault-location": "Vị trí", "option-new-vault-location-description": "Chọn một nơi để đặt vault mới của bạn.", "label-new-vault-location-preview": "Your new vault will be placed in: ", "option-reveal-vault-in-explorer": "Reveal vault in system explorer", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "Rename vault...", "msg-error-rename-exists": "There is already a vault with this name.", "msg-error-nested": "Cannot move vault into a subfolder of itself.", "msg-error-rename-open": "Can't rename a currently open vault.", "msg-rename-failed": "Failed to rename vault.", "msg-rename-success": "Successfully renamed vault.", "option-move-vault": "Move vault...", "msg-move-select-dest": "Select destination folder", "msg-error-move-exists": "There is already a vault at the destination.", "msg-error-move-open": "Can't move a currently open vault.", "msg-move-failed": "Failed to move vault.", "msg-move-success": "Successfully moved vault.", "option-remove": "Remove from list", "button-quick-start": "Quick start", "button-open": "Mở", "button-browse": "Duyệt", "button-connect": "Connect", "button-create-vault": "Tạo", "button-back": "Quay lại", "msg-empty-vault-name": "Không được để trống tên Vault.", "msg-invalid-folder": "Vui lòng chọn một thư mục hợp lệ.", "msg-failed-to-create-vault": "Không thể tạo vault.", "msg-failed-to-create-vault-at-location": "Không thể tạo vault tại vị trí đã cho. Vui lòng kiểm tra kỹ vị trí và quyền.", "msg-error-failed-to-open-vault": "Không mở được.", "msg-error-remove-current-open-vault": "Không thể xóa một kho hiện đang mở.", "option-get-help": "Get Help", "option-user-email": "Email", "placeholder-your-email": "Your email...", "option-user-password": "Password", "placeholder-your-password": "Your password...", "button-sign-in": "Sign in", "button-setup": "Setup", "option-connect-vault-desc": "Create a synced vault on this device.", "tooltip-own-vault": "This is a remote vault owned by you.", "tooltip-shared-vault": "This is a remote vault shared with you." }, "drag-and-drop": { "insert-link-here": "Chèn liên kết tại đây", "insert-links-here": "Chèn liên kết vào đây", "move-into-folder": "Chuyển vào \"{{folder}}\"", "star-this-file": "Gắn dấu sao tệp này", "star-these-files": "Gắn dấu sao cho các tệp này", "open-in-this-tab": "Open in this tab", "open-as-tab": "Open as new tab" }, "window": { "maximize": "Phóng to", "minimize": "Thu nhỏ", "restore-down": "Khôi phục xuống", "close-window": "Đóng cửa sổ", "go-back": "Quay lại", "go-forward": "Tiếp tục" }, "start-up": { "loading-obsidian": "Đang tải Obsidian ...", "obsidian-load-error": "Đã xảy ra lỗi khi tải Obsidian.", "button-reload-app": "Tải lại ứng dụng", "button-reload-app-in-safe-mode": "Reload app in safe mode", "button-open-another-vault": "Mở một vault khác", "loading-components": "Đang tải thành phần ...", "loading-plugins": "Đang tải plugin ...", "loading-vault": "Đang tải vault ...", "msg-failed-to-load-vault": "Không tải được vault:", "loading-cache": "Đang tải bộ nhớ đệm ...", "loading-workspace": "Đang tải không gian làm việc ..." }, "mobile": { "action-import": "Nhập vào vault", "action-choose-file-to-insert": "Chọn tệp để chèn", "action-insert-text-into-file": "Chèn văn bản vào {{filename}}", "action-insert-link-into-file": "Chèn văn bản vào {{filename}}", "msg-importing": "Đang chèn...", "msg-import-success": "Chèn thành công", "msg-failed-to-import-file": "Nhập không thành công tệp {{filename}}", "msg-back-again-to-exit": "Press back again to exit." }, "help-screen": { "label-official-help-site": "Official help site", "label-official-help-site-desc": "Read the official help documentation of Obsidian, available in multiple languages.", "action-visit": "Visit", "label-discord-chat": "Discord chat", "label-discord-chat-desc": "Discord is the best place to chat with other experienced Obsidian users from around the world.", "action-join": "Join", "label-forum": "Official forum", "label-forum-desc": "Help each other, post feature requests, report bugs, and have in-depth discussions about knowledge management.", "label-sandbox-vault": "Sandbox vault", "label-sandbox-vault-desc": "Play around and experiment with various features. Please note your changes will not be saved." } }, "commands": { "save-file": "Lưu tệp hiện tại", "follow-cursor-link": "Theo liên kết dưới con trỏ", "open-cursor-link-in-new-tab": "Open link under cursor in new tab", "open-cursor-link-to-the-right": "Open link under cursor to the right", "open-cursor-link-in-new-window": "Open link under cursor in new window", "navigate-tab-above": "Focus on tab group above", "navigate-tab-below": "Focus on tab group below", "navigate-tab-left": "Focus on tab group to the left", "navigate-tab-right": "Focus on tab group to the right", "toggle-pin": "Chuyển đổi ghim", "split-right": "Split right", "split-down": "Split down", "toggle-stacked-tabs": "Toggle stacked tabs", "navigate-back": "Điều hướng trở lại", "navigate-forward": "Điều hướng về phía trước", "use-dark-mode": "Sử dụng chế độ tối", "use-light-mode": "Sử dụng chế độ sáng", "change-theme": "Change theme", "search-current-file": "Tìm kiếm tệp hiện tại", "search-replace-current-file": "Tìm kiếm và thay thế trong tệp hiện tại", "open-settings": "Mở cài đặt", "open-help": "Mở trợ giúp", "toggle-edit": "Chuyển đổi chế độ chỉnh sửa/đọc", "toggle-source-mode": "Chuyển đổi chế độ xem trước trực tiếp/Nguồn", "delete-current-file": "Xóa tệp hiện tại", "new-tab": "New tab", "close-all-tabs": "Close all tabs", "close-active-tab": "Close current tab", "close-other-tabs": "Close all other tabs", "toggle-left-sidebar": "Chuyển đổi thanh bên trái", "toggle-right-sidebar": "Chuyển đổi thanh bên phải", "toggle-default-new-tab-mode": "Toggle default mode for new tabs", "focus-editor": "Tiêu điểm trên biên tập viên", "toggle-fold": "Chuyển đổi nếp gấp trên dòng hiện tại", "fold-all": "Gấp tất cả các tiêu đề và danh sách", "unfold-all": "Mở rộng tất cả các đề mục và danh sách", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "Hoán đổi dòng lên", "swap-line-down": "Hoán đổi dòng xuống", "remove-heading": "Remove heading", "toggle-heading": "Set as heading {{level}}", "toggle-bold": "Chuyển sang in đậm để chọn", "toggle-italics": "Chuyển đổi in nghiêng cho lựa chọn", "toggle-highlight": "Chuyển đổi đánh dấu cho lựa chọn", "toggle-comments": "Chuyển đổi nhận xét để lựa chọn", "insert-link": "Chèn liên kết", "toggle-spellcheck": "Chuyển đổi kiểm tra chính tả", "delete-paragraph": "Xóa đoạn", "toggle-checklist": "Chuyển đổi trạng thái danh sách kiểm tra", "cycle-list-checklist": "Cycle bullet/checkbox", "insert-callout": "Insert callout", "edit-file-title": "Chỉnh sửa tiêu đề tệp", "copy-path": "Sao chép đường dẫn tệp", "copy-url": "Sao chép url obsidian", "export-pdf": "Xuất sang PDF", "reload": "Tải lại ứng dụng mà không lưu", "undo-close-tab": "Undo close tab", "context-menu": "Hiển thị menu ngữ cảnh dưới con trỏ ", "show-debug-info": "Hiển thị thông tin gỡ lỗi", "always-on-top": "Toggle window always on top", "zoom-in": "Zoom in", "zoom-out": "Zoom out", "reset-zoom": "Reset zoom", "toggle-preview": "Chuyển đổi chế độ chỉnh sửa/xem trước", "move-to-new-window": "Move current pane to new window", "open-in-new-window": "Open current pane in new window", "rename-current-file": "Rename current file" }, "dialogue": { "label-link-affected": "This will affect {{links}} in {{files}}.", "msg-updated-links": "Updated {{links}} in {{files}}.", "label-update-links": "Update links", "label-confirm-update-link-to-file": "Do you want to update internal links that link to this file?", "button-always-update": "Always update", "button-just-once": "Just once", "button-do-not-update": "Do not update", "label-confirm-deletion": "Are you sure you want to delete \"{{filename}}\"?", "label-move-to-system-trash": "It will be moved to your system trash.", "label-move-to-vault-trash": "It will be moved to your Obsidian trash, which is located in the \".trash\" hidden folder in your vault.", "label-permanent-delete": "The file will be permanent deleted.", "label-non-empty-folder": "This folder is not empty.", "label-delete-folder-warning": "If you continue, all files inside this folder will be deleted.", "label-delete-folder": "Delete folder", "button-delete": "Delete", "button-delete-do-not-ask-again": "Delete and don't ask again", "label-do-not-ask-again": "Don't ask again", "label-existing-backlink": "There are currently {{links}} pointing to this note.", "label-existing-backlink_plural": "There are currently {{links}} pointing to this note.", "label-delete-file": "Delete file", "button-manage": "Manage", "button-cancel": "Cancel", "button-done": "Done", "button-save": "Save", "button-stop": "Stop", "button-continue": "Continue", "preparing-pdf": "Preparing PDF...", "label-rename-file": "Rename file", "label-new-name": "New name", "msg-rename-success": "Successfully renamed file.", "label-rename-heading": "Rename heading", "label-rename-blockid": "Rename block ID" }, "menu-items": { "new-file": "Create Note", "new-file-to-the-right": "New Note to the Right", "new-window": "New Window", "open-switcher": "Open Quickly...", "open-vault": "Open Vault...", "close-tab": "Close Tab", "close-window": "Close Window", "find": "Find", "replace": "Replace", "insert-callout": "Callout", "insert-markdown-link": "Markdown Link", "insert-wikilink": "Link", "set-heading": "Heading {{level}}", "no-heading": "No Heading", "insert-quote": "Quote", "export-pdf": "Export PDF", "toggle-bullet-list": "Bullet List", "toggle-numbered-list": "Numbered List", "toggle-checklist": "Task List", "toggle-bold": "Bold", "toggle-code": "Code", "toggle-comment": "Comment", "toggle-italics": "Italics", "toggle-highlight": "Highlight", "toggle-strikethrough": "Strikethrough", "toggle-comments": "Comment", "fold-all": "Fold All", "unfold-all": "Unfold All", "fold-more": "Fold More", "fold-less": "Fold Less", "source-mode": "Source Mode", "reading-view": "Reading View", "show-debug-info": "Show Debug Info", "navigate-back": "Navigate Back", "navigate-forward": "Navigate Forward", "toggle-left-sidebar": "Toggle Left Sidebar", "toggle-right-sidebar": "Toggle Right Sidebar", "split-right": "Split Right", "split-down": "Split Down", "release-notes": "Release Notes" }, "plugins": { "name": "Plugins", "file-explorer": { "name": "File explorer", "desc": "See all the files in your vault.", "action-open": "Open file explorer", "action-show": "Show file explorer", "action-create-note": "Create new note", "action-create-note-to-the-right": "Create note to the right", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all", "action-new-note": "New note", "action-new-folder": "New folder", "action-change-sort": "Change sort order", "action-reveal-file": "Reveal file in file explorer", "action-reveal-active-file": "Reveal active file in file explorer", "command-move-file": "Move file to another folder", "action-move-file": "Move file to...", "action-move-folder": "Move folder to...", "action-move-items": "Move {{count}} items to...", "prompt-type-folder": "Type a folder", "label-no-folders": "No folders found.", "instruction-navigate": "to navigate", "instruction-move": "to move", "instruction-dismiss": "to dismiss", "label-sort-a-to-z": "Sort by file name (A to Z)", "label-sort-z-to-a": "Sort by file name (Z to A)", "label-sort-new-to-old": "Sort by edit time (new to old)", "label-sort-old-to-new": "Sort by edit time (old to new)", "label-sort-created-old-to-new": "Created time (old to new)", "label-sort-created-new-to-old": "Created time (new to old)", "menu-opt-new-note": "New note", "menu-opt-new-folder": "New folder", "menu-opt-set-attachment-folder": "Set as attachment folder", "menu-opt-rename": "Rename", "menu-opt-delete": "Delete", "menu-opt-make-copy": "Make a copy", "msg-invalid-characters": "File name cannot contain any of the following characters: ", "msg-unsafe-characters": "Links will not work with file names containing any of these characters: ", "msg-file-already-exists": "There's already a file with the same name", "msg-empty-file-name": "File name cannot be empty.", "msg-bad-dotfile": "File name must not start with a dot.", "tooltip-modified-time": "Last modified at {{time}}", "tooltip-created-time": "Created at {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "Move", "label-untitled-file": "Untitled", "label-untitled-folder": "Untitled", "msg-set-attachment-folder": "Attachments will be saved to \"{{path}}\" from now on." }, "search": { "name": "Search", "desc": "Search for keyword in all the notes.", "action-open-search": "Search in all files", "label-collapse-results": "Collapse results", "label-match-case": "Match case", "label-explain-search-term": "Explain search term", "label-more-context": "Show more context", "prompt-start-search": "Type to start search...", "label-match-text": "Matches text: ", "label-match-regex": "Matches regex: ", "label-match-exact-text": "Contains exact text: ", "label-match-all": "Match all of: ", "label-match-any": "Match any of: ", "label-excluding": "Excluding: ", "label-case-sensitive": "Case sensitive", "label-case-insensitive": "Case insensitive", "label-match-file-path": "Match file path: ", "label-match-file-name": "Match file name: ", "label-match-content": "Match file content: ", "label-match-task": "Match task: ", "label-match-task-todo": "Match task (todo): ", "label-match-task-done": "Match task (done): ", "label-match-line": "Match line: ", "label-match-block": "Match block: ", "label-match-section": "Match section: ", "label-match-tag": "Match tag: ", "label-no-matches": "No matches found.", "matches-with-count": "... and {{count}} more match.", "matches-with-count_plural": "... and {{count}} more matches.", "label-copy-search-results": "Copy search results", "button-copy-results": "Copy results", "msg-successfully-copied": "Results copied to your clipboard.", "option-show-path": "Show path", "option-show-path-description": "Display full path of the file rather than just the file name.", "option-link-style": "Link style", "option-link-style-description": "Optionally turn each file result in to a link.", "option-choice-link-style-none": "None", "option-choice-link-style-wikilink": "Wikilink", "option-choice-link-style-markdown-link": "Markdown link", "option-list-prefix": "List prefix", "option-list-prefix-description": "Optionally add a list item prefix to each file result.", "option-choice-list-style-none": "None", "option-choice-list-style-dash": "Dash (-)", "option-choice-list-style-asterisk": "Asterisk (*)", "option-choice-list-style-numbered": "Numbered", "tooltip-clear-search": "Clear search", "label-search-options": "Search options", "tooltip-read-more": "Read more", "label-history": "History", "tooltip-clear-history": "Clear search history", "label-path-option-description": "match path of the file", "label-file-name-option-description": "match file name", "label-tag-option-description": "search for tags", "label-line-option-description": "search keywords on same line", "label-section-option-description": "search keywords under same heading", "menu-opt-search-for": "Search for \"{{keyword}}\"" }, "quick-switcher": { "name": "Quick switcher", "desc": "Jump to any files without leaving your keyboard. Ctrl/Cmd+O to activate.", "short-name": "Switcher", "action-open": "Open quick switcher", "instruction-navigate": "to navigate", "instruction-open": "to open", "instruction-open-in-new-tab": "to open in new tab", "instruction-open-to-the-right": "to open to the right", "instruction-create": "to create", "instruction-dismiss": "to dismiss", "label-no-note-create-new": "No notes found. Enter to create a new one.", "prompt-type-file-name": "Type file to switch to or create...", "label-enter-to-create": "Enter to create", "tooltip-not-created-yet": "Not created yet, select to create", "option-show-existing-only": "Show existing only", "option-show-existing-only-description": "Whether to show links to files that are not yet created.", "option-show-attachments": "Show attachments", "option-show-attachments-desc": "Show attachment files like images, videos, and PDFs.", "option-show-all-file-types": "Show all file types", "option-show-all-file-types-desc": "Show all files including ones that Obsidian can't open. The file will be opened with the default app for that file type." }, "graph-view": { "name": "Graph view", "desc": "See a graph overview of which notes link to which.", "action-open": "Open graph view", "action-open-local": "Open local graph", "action-copy-screenshot": "Copy screenshot", "tab-title": "Graph of {{displayText}}", "label-filters": "Filters", "prompt-filter-nodes": "Search files...", "option-depth": "Depth", "option-depth-description": "Show nodes this number of links away", "option-neighbor-links": "Neighbor links", "option-neighbor-links-description": "Show links between neighbors.", "option-forelinks": "Outgoing links", "option-forelinks-description": "Show links to other files", "option-backlinks": "Incoming links", "option-backlinks-description": "Show links from other files", "option-show-tags": "Tags", "option-show-tags-description": "Tags are linked to the files that contain them", "option-show-attachments": "Attachments", "option-show-attachments-description": "Show attachments included by files", "option-show-existing-files-only": "Existing files only", "option-show-existing-files-only-description": "When checked, links to nonexistent files are not shown", "option-show-orphans": "Orphans", "option-show-orphans-description": "Show files that are not linked to any other file", "label-display": "Display", "option-show-arrows": "Arrows", "option-show-arrows-description": "Show arrows when zoomed in", "option-text-fade": "Text fade threshold", "option-node-size": "Node size", "option-link-thickness": "Link thickness", "label-forces": "Forces", "option-center-force": "Center force", "option-link-force": "Link force", "option-link-distance": "Link distance", "option-repel-force": "Repel force", "tooltip-open-graph-settings": "Open graph settings", "msg-screenshot-copied": "Screenshot copied to the clipboard.", "label-groups": "Groups", "placeholder-enter-query": "Enter query...", "tooltip-delete-graph": "Delete group", "button-new-group": "New group", "tooltip-click-to-change-drag-to-reorder": "Click to change color\nDrag to reorder groups", "action-timelapse": "Start graph timelapse animation", "tooltip-start-timelapse-animation": "Start timelapse animation", "button-animate-timelapse": "Animate" }, "backlinks": { "name": "Backlinks", "desc": "Show number of backlinks in the status bar.", "action-open": "Open backlinks", "action-show": "Show backlinks pane", "action-open-for-current": "Open backlinks for the current file", "action-toggle-backlinks-in-document": "Toggle backlinks in document", "menu-opt-backlinks-in-document": "Backlinks in document", "label-linked-mentions": "Linked mentions", "label-no-backlinks": "No backlinks found.", "label-unlinked-mentions": "Unlinked mentions", "label-show-search": "Show search filter", "label-link-button-text": "Link", "tab-title": "Backlinks for {{displayText}}", "label-no-unlinked-mentions": "No unlinked mentions found.", "ellipsis": "...", "option-backlink-in-document": "Backlink in document", "option-backlink-in-document-desc": "Show backlinks in document by default when opening new panes." }, "outgoing-links": { "name": "Outgoing Links", "desc": "Show outgoing links and detect unlinked mentions of other notes in the current note.", "action-open": "Open outgoing links", "action-show": "Show outgoing links pane", "action-open-for-current": "Open outgoing links for the current file", "tab-title": "Outgoing links from {{displayText}}", "label-links": "Links", "label-no-links": "No links found.", "label-unlinked-mentions": "Unlinked mentions", "tooltip-link-file": "Link this file", "tooltip-not-created": "Not created yet" }, "tag-pane": { "name": "Tag pane", "desc": "Displays all your tags and along with their number of occurrences.", "action-show": "Show tag pane", "label-no-tags": "No tags found.", "label-sort-by-name-a-to-z": "Tag name (A to Z)", "label-sort-by-name-z-to-a": "Tag name (Z to A)", "label-sort-by-frequency-high-to-low": "Frequency (high to low)", "label-sort-by-frequency-low-to-high": "Frequency (low to high)", "action-show-nested-tags": "Show nested tags", "action-collapse-all": "Collapse all", "action-expand-all": "Expand all" }, "page-preview": { "name": "Page preview", "desc": "Preview a note when hovering an internal link. Ctrl/Cmd + hover in editor mode.", "label-empty-note": "\"{{linktext}}\" is not created yet. Click to create.", "label-source-editor": "Editor", "label-source-preview": "Preview", "label-source-search": "Search, Backlinks, and Outgoing links", "label-require-mod": "Require {{key}} to trigger page preview on hover" }, "starred": { "name": "Starred", "desc": "Star frequently used files and searches.", "action-show": "Show starred pane", "action-toggle": "Star/unstar current file", "action-toggle-search": "Star/unstar current search", "action-star": "Star", "action-unstar": "Unstar", "menu-opt-remove": "Remove", "msg-successfully-starred": "Successfully starred {{type}} \"{{title}}\".", "msg-removed-starred": "Removed starred {{type}} \"{{title}}\".", "msg-cannot-find-path": "Cannot find file at \"{{path}}\"." }, "custom-css": { "name": "Custom CSS", "desc": "Reads \"obsidian.css\" in the vault and applies it.", "setting-community-themes": "Community themes", "msg-fetching-themes": "Fetching community theme data...", "prompt-filter": "Filter...", "label-dark-theme-only": "Dark themes only", "label-light-theme-only": "Light themes only", "label-use": "Use", "label-stop-use": "Stop using this theme", "label-install-and-use": "Install and use", "label-update": "Update", "label-no-readme": "This theme did not provide a README file.", "tooltip-remove-theme": "Remove theme", "label-visit-on-github": "Visit on GitHub", "msg-load-error": "Could not load community themes, please check your network.", "msg-now-using-theme": "You're now using {{title}} as your CSS theme.", "msg-deleted-theme": "The theme {{title}} has been deleted.", "msg-updated-theme": "The theme {{title}} has been updated.", "label-installed": "Installed", "label-legacy": "Legacy", "button-update-all-themes": "Update all", "msg-failed-load-themes": "Failed to load community themes.", "msg-no-updates-found": "No theme updates found.", "msg-updates-found": "Found {{count}} theme to update.", "msg-updates-found_plural": "Found {{count}} themes to update.", "msg-failed-to-install-theme": "Failed to install theme \"{{name}}\".", "msg-successfully-installed-theme": "Successfully installed theme \"{{name}}\".", "msg-installing-theme": "Installing theme \"{{name}}\"...", "label-search-summary": "Showing {{themeCount}}:", "label-update-available": "Update available" }, "command-palette": { "name": "Command palette", "desc": "Type a command to invoke it. No need to use the UI or remember the shortcut.", "action-open": "Open command palette", "instruction-navigate": "to navigate", "instruction-use": "to use", "instruction-dismiss": "to dismiss", "label-no-commands": "No commands found.", "prompt-type-command": "Type a command...", "label-pinned-commands": "Pinned commands", "option-add-new-pin": "New pinned command", "option-add-new-pin-description": "Pinned commands will appear at the top of all commands when no search query is present." }, "markdown-format-importer": { "name": "Markdown format importer", "desc": "Convert Markdown from other apps to Obsidian format.", "action-open": "Open Markdown importer", "option-roam-tag-fixer": "Roam Research tag fixer", "option-roam-tag-fixer-description": "Converts \"#tag\" and \"#[[tag]]\" to \"[[tag]]\".", "option-roam-highlight-fixer": "Roam Research highlight fixer", "option-roam-highlight-fixer-description": "Converts \"^^highlight^^\" to \"==highlight==\".", "option-roam-todo-converter": "Roam Research TODO converter", "option-roam-todo-converter-description": "Converts \"{{[[TODO]]}}\" to \"[ ]\".", "option-bear-highlight-fixer": "Bear highlight fixer", "option-bear-highlight-fixer-description": "Converts \"::highlight::\" to \"==highlight==\".", "zettelkasten-link-fixer": "Zettelkasten link fixer", "zettelkasten-link-fixer-description": "Fixes \"[[UID]]\" links to full \"[[UID File Name]]\".", "zettelkasten-link-beautifier": "Zettelkasten link beautifier", "zettelkasten-link-beautifier-description": "Fixes \"[[UID]]\" links and also beautify them \"[[UID File Name|File Name]]\".", "msg-all-files-warning": "Warning: the importer will convert all the files in your vault, not just the current file.", "msg-override-files-warning": "Your files will be overwritten. Back up all your files before attempting conversion.", "label-start-conversion": "Start Conversion", "label-stop": "Stop", "label-go-back": "Go back", "label-done": "Done", "label-processing": "Processing...", "label-cancelling": "Cancelling...", "label-finished": "Finished!", "label-processed-files": "Processed files", "label-modified-files": "Modified files", "label-total-replacements": "Total replacements" }, "daily-notes": { "name": "Daily notes", "desc": "Open today's daily note, or create one if not present.", "short-name": "Today", "action-open": "Open today's note", "action-open-previous": "Open previous daily note", "action-open-next": "Open next daily note", "action-insert-text": "Insert text into daily note", "action-insert-link": "Insert link into daily note", "msg-fail-format": "Failed to create daily note. \"{{format}}\" is not a valid format.", "msg-fail-folder": "Failed to create daily note. Folder \"{{folderOption}}\" not found.", "msg-fail-template-file": "Failed to create daily note. Template file \"{{template}}\" not found.", "msg-no-previous": "There's no daily note before this one.", "msg-no-next": "There's no daily note after this one.", "option-date-format": "Date format", "label-refer-to-syntax": "For more syntax, refer to: ", "label-syntax-link": "format reference", "label-syntax-live-preview": "Here is what it will look like: ", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new daily note.", "option-template": "Template file location", "option-template-description": "The file path to use as template.", "option-open-on-start": "Open daily note on startup", "option-open-on-start-description": "Open your daily note automatically whenever you open this vault." }, "unique-note-creator": { "name": "Unique note creator", "desc": "Create notes with unique timestamp prefixes, for workflows like zettelkasten or slip box.", "short-name": "Unique", "action-create-note": "Create new unique note", "option-new-file-location": "New file location", "option-new-file-location-description": "The folder path to create the new unique note.", "msg-folder-not-found": "Failed to create unique note. Folder \"{{folderOption}}\" not found.", "option-template-file": "Template file location", "option-template-file-description": "The file path to use as template.", "option-template-file-placeholder": "Example: folder1/note", "option-id-format": "Unique prefix format", "msg-template-file-not-found": "Failed to create unique note. Template file \"{{template}}\" not found.", "msg-failed-to-generate": "Failed to generate a unique note with the format \"{{format}}" }, "random-note": { "name": "Random note", "desc": "Opens a random note. Useful for reviewing and discovering.", "short-name": "Random", "action-open": "Open random note" }, "outline": { "name": "Outline", "desc": "Displays the outline of the current file or linked pane.", "action-open": "Open outline", "action-show": "Show outline pane", "action-open-for-current": "Open outline of the current file", "tab-title": "Outline of {{displayText}}", "label-no-headings": "No headings found." }, "word-count": { "name": "Word count", "desc": "Show word count in the status bar." }, "slides": { "name": "Slides", "desc": "Present from Markdown. Use \"---\" to separate slides.", "action-start": "Start presentation" }, "audio-recorder": { "name": "Audio recorder", "desc": "Record audio and save as attachment.", "action-start": "Start recording audio", "action-stop": "Stop recording audio", "action-toggle": "Start/stop recording", "msg-access-denied": "Microphone access was denied, please enable it from the preference pane.", "msg-pending-grant": "Please grant microphone permission to start recording.", "msg-no-microphone": "No microphone is connected." }, "open-with-default-app": { "name": "Open in default app", "desc": "Add button to open current file in the default app.", "action-open-file": "Open in default app", "action-open-file-mobile": "Share", "action-show-in-folder": "Show in folder", "action-show-in-folder-mac": "Reveal in Finder" }, "templates": { "name": "Templates", "desc": "Insert template content from a folder of template files.", "action-insert": "Insert template", "action-insert-current-date": "Insert current date", "action-insert-current-time": "Insert current time", "option-template-folder-location": "Template folder location", "option-template-folder-location-description": "Files in this folder will be available as templates.", "option-template-date-format": "Date format", "option-template-date-format-description": "{{date}} in the template file will be replaced with this value.", "option-template-date-format-description2": "You can also use {{date:YYYY-MM-DD}} to override the format once.", "option-template-time-format": "Time format", "option-template-time-format-description": "{{time}} in the template file will be replaced with this value.", "option-template-time-format-description2": "You can also use {{time:HH:mm}} to override the format once.", "instruction-navigate": "to navigate", "instruction-insert": "to insert template", "instruction-dismiss": "to dismiss", "msg-no-templates-found": "No templates found", "msg-fail-invalid-folder": "Failed to list templates. Template folder is invalid.", "msg-fail-folder-not-found": "Failed to list templates. Folder \"{{folderOption}}\" not found.", "prompt-type-template": "Type name of a template..." }, "translucency": { "name": "Translucent window", "desc": "Turn on translucency effect to enhance a sense of depth. Best used with dark mode. Not supported on Linux." }, "slash-command": { "name": "Slash commands", "desc": "Enable the ability to trigger slash commands in the editor by typing the forward slash." }, "editor-status": { "name": "Editor status", "desc": "Adds a status bar item to show and change the current editor mode.", "read": "Reading", "edit-source": "Source mode", "edit-live-preview": "Live Preview" }, "publish": { "name": "Publish", "desc": "Publish your notes through Obsidian Publish.", "action-publish-changes": "Publish changes...", "label-no-internet-access": "You need access to the internet to publish changes.", "label-publish-service-description": "Obsidian Publish is an add-on paid service that lets you publish your notes online directly from Obsidian.", "label-please-login": "To start publishing, please log in or create a new Obsidian account.", "label-no-publish-subscription": "You do not have an Obsidian Publish subscription yet.", "button-purchase": "Purchase", "label-manage-sites": "Manage sites", "label-no-sites": "You don't have any sites.", "button-choose": "Choose", "tooltip-edit-site-id": "Edit site ID", "tooltip-delete-site": "Delete site", "label-delete-site-confirmation": "Are you sure you want to delete this site?", "label-delete-site-details": "This will immediately and permanently delete your site.", "label-confirm-delete-site": "Confirm delete site \"{{site}}\"", "option-site-id": "Site ID", "option-site-id-description": "Your site will be at https://publish.obsidian.md/{site id}. You can change this later. Only lower case letters, numbers, and dashes are allowed.", "option-site-id-placeholder": "Pick a site ID", "button-create": "Create", "msg-invalid-site-id": "Site ID can only contain lowercase letters, numbers, and dashes.", "msg-site-id-in-use": "This site ID is in use, please try another one.", "msg-create-site-issue": "That was an issue when creating your site.", "label-site-options": "Site options", "option-site-general": "General", "option-site-components": "Components", "option-site-appearance": "Appearance", "option-site-reading-experience": "Reading experience", "option-site-misc": "Other site settings", "option-site-name": "Site name", "option-site-name-description": "Name of your published site. It will show up in the page title of your site.", "option-site-name-placeholder": "Name of your site", "option-home-page-file": "Homepage file", "option-home-page-file-description": "The first page the user sees when landing on your published site", "option-home-page-file-placeholder": "Pick a published file", "option-logo": "Logo", "option-logo-description": "Pick an image file as your site logo.", "option-logo-placeholder": "Any uploaded image in your vault...", "option-site-collaboration": "Site collaboration", "option-site-collaboration-desc": "Manage collaborators for this site.", "button-manage-collaborators": "Manage", "option-theme": "Theme", "option-theme-description": "Choose default color scheme for your site.", "option-theme-system": "Adapt to system", "option-show-theme-toggle": "Light/dark toggle", "option-show-theme-toggle-description": "Let the visitor toggle between light and dark theme on their own.", "option-show-navigation": "Show navigation", "option-show-navigation-description": "Display a list of all published pages on the left side of your published site.", "option-show-search": "Show search bar", "option-show-search-description": "Display a search bar at top of the navigation that lets the visitors search pages and headings on your site.", "option-show-graph": "Show graph view", "option-show-graph-description": "Display a small local graph on each page.", "option-show-outline": "Show table of contents", "option-show-outline-description": "Display the outline of headings on each page.", "option-show-backlinks": "Show backlinks", "option-show-backlinks-description": "Show backlink section at the end of each page.", "option-sliding-window-mode": "Use sliding windows", "option-sliding-window-mode-description": "Open pages in new panes to the right. Allows scrolling through panes horizontally.", "option-hover-preview-file": "Show hover preview", "option-hover-preview-file-description": "Display page preview when hovering links.", "option-hide-title": "Hide page title", "option-hide-title-description": "Hide the page title heading. Useful when you have your own headings at the beginning of each page.", "option-readable-line-length": "Readable line length", "option-readable-line-length-description": "Limit maximum line length. Fits less content on the screen, but makes long paragraphs more readable.", "option-site-password": "Passwords", "option-site-password-description": "Restrict access to your site with passwords.", "option-google-analytics": "Google Analytics tracking code", "option-google-analytics-description": "Configure Google Analytics for your site. Only available for visitors from your custom domain URL. Please check with your local laws and regulations first.", "button-manage-passwords": "Manage", "button-save-site-settings": "Save site settings", "msg-updated-options": "Updated options for your site.", "button-go-back": "Back", "label-publishing-to": "Publishing to", "tooltip-switch-site": "Switch site", "button-add-linked": "Add linked", "tooltip-add-linked": "Add all files that are linked by currently selected items", "msg-added-linked-files": "{{count}} linked file has been added.", "msg-added-linked-files_plural": "{{count}} linked files have been added.", "tooltip-open-site-options": "Change site options", "label-no-changes-detected": "No changes were detected.", "label-changed-files-to-be-published": "Changes", "label-unchanged-files-already-published": "Unchanged (select to delete)", "label-file-selected": " selected", "button-select-all-files": "Select all", "button-deselect-all-files": "Deselect all", "label-new-files-to-be-published": "New", "button-publish": "Publish", "msg-no-permission-to-publish-to-site": "You do not have permissions to publish to the current site.", "msg-select-at-least-one-file": "Please select at least one file.", "label-upload-changes": "Upload changes", "button-done": "Done", "button-stop": "Stop", "label-status-uploading": "Uploading", "label-status-to-publish": "To publish", "label-status-to-delete": "To delete", "label-status-published": "Published", "label-status-deleted": "Deleted", "label-status-failed": "Failed", "label-status-cancelled": "Cancelled", "button-change": "Change", "label-clear-cache": "It takes up to a few minutes for the changes to show up on your site. If you do not see your latest changes, try clearing the cache in your browser.", "label-visit-site": "You can visit your site here: ", "msg-something-went-wrong": "Something went wrong. Please check the developer console for details.", "msg-network-error": "A network error occurred. ", "label-manage-passwords": "Manage passwords", "label-add-password": "Add password", "action-new-password": "New password", "label-no-password": "Your site currently does not have any passwords. Anyone can visit it.", "label-have-password": "Your site is password protected. If you have multiple passwords, visitors can access your site by entering any of them.", "option-password-name": "Password", "option-password-desc": "A hash of your password will be stored securely. Once the password is set, it cannot be revealed in plaintext.", "option-password-placeholder": "Your password", "option-nickname-name": "Nickname (optional)", "option-nickname-desc": "Set a nickname to remind yourself what or who the password is for.", "action-add-password": "Add this password", "label-untitled-password": "Untitled password", "label-password-created-time": "Created {{time}}", "msg-added-new-password": "Added new password.", "option-custom-domain": "Custom domain", "option-custom-domain-desc": "Use your own domain rather than the https://publish.obsidian.md/{site id} URL.", "option-noindex": "Disallow search engine indexing", "option-noindex-desc": "Prevent search engines from indexing your site.", "button-configure": "Configure", "label-configure-custom-domain": "Configure custom domain", "option-custom-url-name": "Custom URL", "option-custom-url-desc": "The URL that your site will be located at.", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "Redirect to your custom domain", "option-custom-url-redirect-desc": "Redirect visitors on publish.obsidian.md/id to your custom domain.", "button-update-custom-domain": "Update domain setting", "label-custom-domain-instructions": "Please refer to our {{link}} on our help site for more information.", "label-custom-domain-link-name": "custom domain setup guide", "label-site-usage": "You're using {{site}} out of your {{limit}}.", "button-add-more-sites": "Buy more sites", "label-no-sites-bought": "You haven't bought any sites.", "button-get-site": "Get a site", "label-manage-sharing": "Manage sharing for \"{{name}}\"", "label-sharing-with-users": "This site is currently shared with the following people.", "label-not-sharing": "This site is not currently shared with anyone.", "label-invite-pending": "Pending", "tooltip-remove-user": "Remove user", "option-invite-user": "Invite user", "placeholder-invite-user": "Enter their email...", "error-email-must-be-valid": "Please enter a valid email to invite someone.", "msg-enable-publish-plugin": "Please enable the Publish core plugin in Settings -> Core plugins to view sites.", "label-your-sites": "Your sites", "label-sites-shared-with-you": "Sites shared with you", "tooltip-leave-site-sharing": "Stop collaborating on this site", "label-leave-site-confirmation": "Confirm stop site collaboration", "label-leave-site-confirmation-details": "This will remove this site from the list of sites shared with you. This action cannot be reverted.", "label-leave-site-confirmation-details-2": "Please contact the owner of the site if you wish to collaborate on this site again.", "button-leave": "Leave", "label-compare-with-live": "Compare with live version", "button-use-live-version": "Use live version", "label-confirm-override": "Confirm overriding local version", "label-confirm-override-1": "Are you sure you want to override the local version?", "label-confirm-override-2": "The live version will be used and your local version will be discarded. Please make backups if necessary.", "button-proceed": "Proceed", "message-successfully-used-live-version": "Successfully used live version to override your local version.", "label-open-file": "Open file", "tooltip-manage-publish-filters": "Manage publish filters", "option-included-folders": "Included folders", "option-included-folders-desc": "Files under these folders will automatically be selected when you review changes to publish.", "option-currently-included-folders": " These folders are currently included:", "option-excluded-folders": "Excluded folders", "option-excluded-folders-desc": "Files under these folders won't show up when you review changes to publish. This setting takes priority over included folders above.", "label-number-of-folders-included": "Obsidian Publish is currently including {{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish is currently excluding {{folders}}.", "label-manage-included-folders": "Manage included folders", "label-manage-excluded-folders": "Manage excluded folders", "label-add-included-folder": "Include a folder", "label-add-included-folder-desc": "You can include both existing folders and folders that have not been created yet.", "tooltip-contact-support": "Contact support" }, "workspaces": { "name": "Workspaces", "desc": "Save and load workspace layout.", "action-load-layout": "Load workspace layout", "action-manage-layouts": "Manage workspace layouts", "action-save-and-load-layout": "Save and load another layout", "placeholder-save-current-layout-as": "Save current workspace layout as...", "button-save": "Save", "button-load": "Load", "tooltip-delete-layout": "Delete layout", "msg-delete-layout-success": "Successfully deleted layout.", "msg-enter-name": "Please enter a name for the new layout.", "msg-save-layout-success": "Successfully saved layout.", "label-no-layout-found": "No saved layout found.", "placeholder-type-to-search-layouts": "Type layout name..." }, "sync": { "name": "Sync", "desc": "Synchronize your files through Obsidian Sync.", "action-view-version-history": "View version history", "label-load-more": "Load more", "label-show-diff": "Show diff", "label-copy-to-clipboard": "Copy to clipboard", "label-restore-this-version": "Restore this version", "msg-already-latest-version": "This version is already the latest version.", "msg-restored-version": "Successfully restored version from {{time}}", "label-file-deleted": "This file was deleted", "label-no-earlier-version": "There was no earlier versions of this file.", "label-empty-file": "Empty", "label-setting-files": "Setting files", "label-deleted-files": "Deleted files", "label-version-history": "Version history", "label-click-to-see-history": "Click on a deleted file to see its history.", "label-create-remote-vault": "Create remote vault", "msg-please-enter-password": "Please enter a password.", "msg-vault-name-cannot-be-empty": "Vault name cannot be empty.", "msg-successfully-created-vault": "Successfully create remote vault \"{{name}}\".", "label-remote-vault-explanation": "Remote vaults securely synchronize your vault between devices.", "option-vault-name": "Vault name", "option-vault-name-desc": "Helps you remember what this vault is for.", "option-vault-name-placeholder": "My awesome vault", "option-use-custom-encryption-password": "Customize end-to-end encryption password", "option-use-custom-encryption-password-desc": "If you turn this off, we will securely manage an encryption key for you.", "option-use-custom-encryption-password-desc-warning": "This option cannot be changed later.", "option-encryption-password": "Encryption password", "option-encryption-password-desc": "This password cannot be changed later.", "option-encryption-password-desc-warning": "If you forget this password, any remote data will remain unusable forever.", "option-encryption-password-desc-2": "This does not affect your local data.", "option-encryption-password-placeholder": "Your password", "label-enter-encryption-password": "Enter encryption password", "button-unlock-vault": "Unlock vault", "msg-verified-password": "Successfully verified your password.", "label-remote-vaults": "Your remote vaults", "label-vault-created-time": "Created {{time}}", "tooltip-delete-remote-vault": "Delete", "tooltip-manage-sharing": "Manage sharing", "label-confirm-delete-remote-vault": "Confirm delete vault", "label-confirm-delete-remote-vault-question": "Are you sure you want to delete this remote vault?", "label-confirm-delete-remote-vault-result": "All data on our server, including version history, will be deleted. Your local files will stay intact.", "label-confirm-delete-remote-vault-warning": "This action is permanent and irreversible.", "msg-remote-vault-deleted": "{{name}} has been deleted.", "button-connect-to-remote-vault": "Connect", "button-disconnect-from-remote-vault": "Disconnect", "label-not-remote-vaults": "You don't have any remote vaults.", "button-create-new-remote-vault": "Create new vault", "label-sync-log": "Sync log", "options-only-show-errors": "Errors only", "options-only-show-errors-desc": "Only show errors and hide other log items.", "button-copy-sync-log": "Copy sync log", "msg-successfully-copied-sync-log": "Successfully copied sync log.", "button-retry": "Retry", "button-purchase-subscription": "Purchase", "option-remote-vault": "Remote vault", "button-choose-remote-vault": "Choose", "button-manage-remote-vault": "Manage", "option-remote-vault-desc-connected": "Currently connected to the \"{{name}}\" remote vault.", "option-remote-vault-desc-not-connected": "Currently not connected to any remote vault.", "option-sync-status": "Sync status", "option-sync-status-desc-paused": "Obsidian Sync is currently paused.", "option-sync-status-desc-running": "Obsidian Sync is currently running.", "option-device-name": "Device name", "option-device-name-desc": "This name will be displayed in the sync log. Leave empty to use the default name.", "button-resume": "Resume", "button-pause": "Pause", "option-view-deleted-files": "Deleted files", "option-view-deleted-files-desc": "View and restore deleted files.", "option-sync-log": "Sync activity", "option-sync-log-desc": "View recent sync activities for debugging.", "button-view": "View", "button-bulk-restore": "Bulk restore", "button-restore-selected-files": "Restore selected files", "msg-restoring": "Restoring...", "msg-restoring-complete": "`Restore complete: {{succeeded}} succeeded and {{failed}} failed.`", "option-over-size": "Vault size over limit", "option-over-size-desc": "Your vault is at {{size}} out of {{limit}}.", "msg-largest-files": "View largest files", "msg-largest-files-desc": "These are the remote files that are taking the most space. After deleting attachments, use the purge button to free up remote vault space.", "button-purge-remote": "Purge", "tooltip-purge-remote": "Permanently purge deleted attachments from remote vault to save space.", "msg-purge-complete": "Purge complete.", "option-prevent-sleep": "Prevent device sleep", "option-prevent-sleep-desc": "Prevents the device from going to sleep when there are still files to be synced.", "option-selective-sync": "Selective sync", "option-excluded-folders": "Excluded folders", "option-excluded-folder-desc": "Prevent certain folders from being synced.", "option-currently-excluded-folders": " These folders currently excluded:", "button-manage-excluded-folders": "Manage", "option-sync-image": "Sync images", "option-sync-image-desc": "Sync image files with these extensions: {{extensions}}.", "option-sync-audio": "Sync audio", "option-sync-audio-desc": "Sync audio files with these extensions: {{extensions}}.", "option-sync-video": "Sync videos", "option-sync-video-desc": "Sync video files with these extensions: {{extensions}}.", "option-sync-pdf": "Sync PDFs", "option-sync-pdf-desc": "Sync PDF files.", "option-sync-unsupported": "Sync all other types", "option-sync-unsupported-desc": "Sync unsupported file types.", "option-vault-config-sync": "Vault configuration sync", "option-view-config-files": "Settings version history", "option-view-config-files-desc": "View and restore version history of setting files.", "option-sync-app": "Main settings", "option-sync-app-desc": "Enable to sync editor settings, files & links settings, custom hotkeys, etc.", "option-sync-appearance": "Appearance settings", "option-sync-appearance-desc": "Sync appearance settings like dark mode, active theme, and enabled snippets.", "option-sync-appearance-data": "Themes and snippets", "option-sync-appearance-data-desc": "Sync downloaded themes and snippets. Whether they are enabled depends on the previous setting.", "option-sync-hotkey": "Hotkeys", "option-sync-hotkey-desc": "Sync custom hotkeys.", "option-sync-core-plugin": "Active core plugin list", "option-sync-core-plugin-desc": "Sync which core plugins are enabled.", "option-sync-core-plugin-data": "Core plugin settings", "option-sync-core-plugin-data-desc": "Sync core plugin settings.", "option-sync-community-plugin": "Active community plugin list", "option-sync-community-plugin-desc": "Sync which community plugins are enabled.", "option-sync-community-plugin-data": "Installed community plugins", "option-sync-community-plugin-data-desc": "Sync installed community plugins (.js, .css, and manifest.json files) and their settings.", "label-sync-introduction": "Obsidian Sync is Obsidian's add-on sync service with end-to-end encryption and version history.", "label-account-required": "To start syncing, please log in or create a new Obsidian account.", "button-sign-up": "Sign up", "button-log-in": "Log in", "label-manage-excluded-folders": "Manage excluded folders", "label-number-of-folders-excluded": "{{folders}} are currently excluded from being synced.", "label-add-excluded-folder": "Exclude a folder", "label-add-excluded-folder-desc": "You can exclude both existing folders and folders that have not been created yet.", "tooltip-remove-excluded-folder": "Remove from excluded list", "label-setup-connection": "Setup connection", "label-now-connected-to-vault": "You're now connected to \"{{name}}\".", "button-start-syncing": "Start syncing", "label-confirm-merge-vault": "Confirm Merge Vault", "msg-vault-has-notes": "Your local vault already contains some notes.", "msg-vault-merge-warning": "If you connect to the remote vault \"{{name}}\", notes in your local vault will be merged with notes from your remote vault. In case of conflicts, the most recent version of the note will be preserved.", "tooltip-update-setting-on-all-devices": "Please update this option and restart app on all the devices where you want it to take effect.", "label-sharing-with-users": "This remote vault is currently shared with the following people.", "label-not-sharing": "This remote vault is not currently shared with anyone.", "label-vaults-shared-with-you": "Vaults shared with you", "tooltip-leave-vault-sharing": "Stop collaborating on this vault", "label-leave-vault-confirmation": "Confirm stop vault collaboration", "label-leave-vault-confirmation-details": "This will remove this vault from the list of vaults shared with you. This action cannot be reverted.", "label-leave-vault-confirmation-details-2": "Please contact the owner of the vault if you wish to collaborate on this vault again.", "button-leave": "Leave", "label-require-subscription-to-connect": "You need an Obsidian Sync subscription to connect to this vault.", "option-contact-support": "Contact support", "option-contact-support-desc": "If you run into any issues with Obsidian Sync, please contact us so we can help you out! You can reach us at support@obsidian.md.", "button-email-support": "Email support" }, "file-recovery": { "name": "File recovery", "desc": "Let you restore recent snapshots to recover from accidental data loss. Snapshots are only saved for Markdown files.", "action-open": "Open saved snapshots", "option-interval": "Snapshot interval", "option-interval-description": "Minimal interval in minutes between two snapshots.", "option-keep": "History length", "option-keep-description": "Length in days snapshots is kept for.", "option-open-history": "Snapshots", "option-open-history-description": "View and restore saved snapshots.", "button-view-snapshots": "View", "option-clear": "Clear history", "option-clear-description": "Wipe all snapshots.", "button-clear-history": "Clear", "label-clear-warning": "Are you sure you want to delete all snapshots? Note that only snapshots will be removed. All files inside your vault will not be affected.", "msg-clear-complete": "Snapshots cleared.", "label-no-history-found": "No snapshots found.", "placeholder-choose-file": "Choose a file...", "label-select-file": "Please select a file on the left to view snapshots." }, "note-composer": { "name": "Note composer", "desc": "Merge, split, and refactor notes.", "option-confirm-file-merge": "Confirm file merge", "option-confirm-file-merge-description": "Prompt before merge two files.", "option-split-replacement-text": "Text after extraction", "option-split-replacement-text-description": "What to show in place of the selected text after extracting it.", "option-choice-split-replacement-text-link": "Link to new file", "option-choice-split-replacement-text-embed": "Embed new file", "option-choice-split-replacement-text-none": "None", "option-template-file": "Template file location", "option-template-file-description": "Template file to use when merging or extracting. Available variables: {{content}}, {{fromTitle}}, {{newTitle}}, {{date:FORMAT}}, e.g. {{date:YYYY-MM-DD}}.", "command-merge-file": "Merge current file with another file...", "action-merge-file": "Merge entire file with...", "label-no-files": "No files found.", "instruction-navigate": "to navigate", "instruction-merge": "to merge", "instruction-create-new": "to create new", "instruction-merge-at-top": "to merge at top", "instruction-dismiss": "to dismiss", "prompt-select-file-to-merge": "Select file to merge into...", "label-merge-file": "Merge file", "label-confirm-file-merge": "Are you sure you want to merge \"{{file}}\" into \"{{destination}}\"? \"{{file}}\" will be deleted.", "button-merge": "Merge", "button-merge-do-not-ask-again": "Merge and don't ask again", "command-split-file": "Extract current selection...", "command-extract-heading": "Extract this heading...", "instruction-append": "to move to bottom", "instruction-prepend": "to move to top", "msg-fail-to-fetch-template": "Failed to fetch template file: \"{{template}}\" not found.", "msg-fail-to-find-heading": "Failed to find heading" }, "canvas": { "name": "Canvas", "desc": "Arrange and connect notes on an infinite canvas.", "action-add-note": "Add note from vault", "action-add-media": "Add media from vault", "action-add-card": "Add card", "action-add-website": "Add web page", "action-create-group": "Create group", "action-create-with-size": "Create a card with specific size", "action-convert-to-file": "Convert to file...", "action-drag-to-add-note": "Drag to add note from vault", "action-drag-to-add-media": "Drag to add media from vault", "action-drag-to-add-card": "Drag to add card", "action-enable-grid-snapping": "Enable grid snapping", "action-disable-grid-snapping": "Disable grid snapping", "action-edit-label": "Edit label", "action-remove-label": "Remove label", "action-search-file": "Search for file", "action-set-color": "Set color", "action-align": "Align", "action-align-left": "Align left", "action-align-center": "Align center", "action-align-right": "Align right", "action-align-top": "Align top", "action-align-middle": "Align middle", "action-align-bottom": "Align bottom", "action-distribute-horizontal-spacing": "Distribute horizontal spacing", "action-distribute-vertical-spacing": "Distribute vertical spacing", "action-justify-horizontally": "Justify horizontally", "action-justify-vertically": "Justify vertically", "action-stack-horizontally": "Stack horizontally", "action-stack-vertically": "Stack vertically", "action-stack-grid": "Stack grid", "action-export-png": "Export as image", "label-export-png-desc": "Export \"{{title}}\" with a PNG file with the settings below.", "label-export-png-dimensions": "Estimated image dimensions: {{dimensions}}", "option-export-png-show-logo": "Show logo", "option-export-png-show-logo-desc": "This will add an Obsidian logo to the bottom left.", "option-export-png-zoom": "Zoom", "option-export-png-zoom-desc": "A higher zoom will generate a higher resolution image.", "option-export-png-frame": "Viewport", "option-export-png-frame-desc": "Choose to render the entire canvas or just the current visible viewport.", "option-export-png-frame-full": "Full canvas", "option-export-png-frame-viewport": "Viewport only", "action-remove": "Remove", "action-narrow": "Narrow to section...", "action-swap-file": "Swap file...", "action-change-url": "Change URL...", "action-zoom-to-fit": "Zoom to fit", "action-zoom-to-selection": "Zoom to selection", "action-reload-page": "Reload page", "action-go-to-target": "Go to target", "action-go-to-source": "Go to source", "command-create-new-canvas": "Create new canvas", "command-new-canvas": "New canvas", "instruction-narrow": "to embed heading", "prompt-to-narrow": "Type name of heading", "label-enter-url": "Enter URL", "label-empty-embed": "\"{{linktext}}\" could not be found.", "prompt-add-text": "Add text...", "prompt-start-search": "Type to search...", "label-canvas-help": "Canvas help", "label-no-heading": "No heading", "label-pan": "Pan", "label-pan-horizontal": "Pan horizontally", "label-zoom": "Zoom", "label-select-all": "Select all", "label-add-remove-selection": "Add to / remove from selection", "label-clone-card": "Clone card", "label-constrain-movement-axis": "Constrain card movement to axis", "label-disable-drag-snapping": "Disable snapping while dragging", "label-remove-card": "Remove card", "label-drag-from-below": "Drag from below or double click", "label-space-drag-pan": "Space + Drag to pan", "label-scroll-to-zoom": "Scroll to zoom", "label-untitled-group": "Untitled group" } }, "nouns": { "word-with-count": "{{count}} word", "word-with-count_plural": "{{count}} words", "character-with-count": "{{count}} character", "character-with-count_plural": "{{count}} characters", "link-with-count": "{{count}} link", "link-with-count_plural": "{{count}} links", "file-with-count": "{{count}} file", "file-with-count_plural": "{{count}} file", "folder-with-count": "{{count}} folder", "folder-with-count_plural": "{{count}} folders", "backlink-with-count": "{{count}} backlink", "backlink-with-count_plural": "{{count}} backlinks", "site-with-count": "{{count}} site", "site-with-count_plural": "{{count}} sites", "plugin-with-count": "{{count}} plugin", "plugin-with-count_plural": "{{count}} plugins", "theme-with-count": "{{count}} theme", "theme-with-count_plural": "{{count}} themes" } }{ "setting": { "options": "選項", "plugin": "外掛程式", "builtin-plugins": "核心外掛程式", "plugin-options": "外掛程式選項", "folder-path-example-placeholder": "例:資料夾1/資料夾2", "file-path-example-placeholder": "例:資料夾/筆記.md", "msg-restart-required": "變更此選項後,必須重新啟動才能讓更動生效。", "editor": { "name": "編輯器", "section-general": "一般", "section-behavior": "行為", "section-display": "顯示", "option-spellcheck": "拼寫檢查", "option-spellcheck-description": "開啟拼寫檢查器。目前只適用於英語(美式)。", "spellcheck-languages": "檢查語言拼字", "spellcheck-languages-description": "選擇拼字檢查工具要檢查的語言。", "spellcheck-languages-mac-description": "原生的拼字檢查工具會自動偵測您在 macOS 使用的語言。", "spellcheck-dict": "拼寫檢查詞典", "spellcheck-dict-empty": "拼寫檢查詞典是空的。", "option-show-inline-title": "顯示內嵌標題", "option-show-inline-title-description": "將檔名顯示為可編輯的標題,與檔案內容並列。", "option-readable-line-length": "縮減行寬", "option-readable-line-description": "開啟後將限制每行字數,使螢幕顯示的內容減少,但使長段落更具可讀性。", "option-strict-line-break": "精確的換行符號", "option-strict-line-break-description": "在預覽模式下,根據 Markdown 語法忽略單行換行符號。將此選項關閉可在預覽中顯示單行換行符號。", "option-show-frontmatter": "顯示正文前頁", "option-show-frontmatter-description": "在預覽狀態時顯示正文前頁。關閉選項則隱藏前頁內容。", "option-auto-pair-brackets": "自動補全雙括號", "option-auto-pair-brackets-description": "自動補全括號和引號。", "option-auto-pair-markdown": "自動補全 Markdown 語法", "option-auto-pair-markdown-description": "自動補全表示粗體和斜體的標記。", "option-smart-indent-lists": "智慧列表", "option-smart-indent-lists-description": "開啟後 Obsidian 將根據換行和縮排情況自動調整列表符號。", "option-fold-heading": "收合標題", "option-fold-heading-description": "將標題行下層所有文字都收合到標題行。", "option-fold-indent": "收合縮排", "option-fold-indent-description": "把相同的縮排內容(如列表)收合起來。", "option-default-new-tab-view": "新分頁的預設檢視模式", "option-default-new-tab-view-description": "開啟新 Markdown 分頁後的預設檢視模式。", "option-default-new-tab-view-editing": "編輯檢視模式", "option-default-new-tab-view-reading": "閱讀檢視模式", "option-default-editing-mode": "預設編輯模式", "option-default-editing-mode-description": "新窗格預設啟動的編輯模式。", "option-default-editing-mode-source": "原始碼模式", "option-default-editing-mode-live-preview": "實際預覽", "option-show-line-number": "顯示行號", "option-show-line-number-description": "在左側顯示行號。", "option-indentation-guide": "顯示縮排指示", "option-indentation-guide-description": "在要點間顯示垂直關聯線,以提供視覺提示。", "option-use-tabs": "使用 Tab 鍵縮排", "option-use-tabs-description": "按下 Tab 鍵可發送定位符來縮排。關閉此項後可發送空格來縮排。", "option-tab-size": "Tab 大小", "option-tab-size-description": "一個 Tab 等於幾個空白。", "option-rtl": "右至左 (RTL)", "option-rtl-description": "設定筆記的文字方向,讓文字能從右至左顯示。", "option-auto-convert-html": "自動轉換 HTML", "option-auto-convert-html-description": "由網頁貼入或拖入時自動轉換 HTML 為 Markdown,使用 Ctrl/Cmd+Shift+V 貼入則不轉換。", "option-vim-key-bindings": "Vim 鍵綁定", "option-vim-key-bindings-description": "允許在編輯器中使用 Vim 鍵綁定。", "option-vim-key-bindings-mobile": "在行動裝置上,此設定不會透過設定檔同步,每部裝置可自行調整。", "option-emacsy-keys": "MacOS 的傳統 Emacs 式按鍵", "option-emacsy-keys-description": "允許您使用額外的 Emacs 式方向鍵,雖是 MacOS 的標準,但可能干擾某些按鍵操作。", "label-confirm-enable-vim": "確認進入 Vim 模式", "label-vim-warning": "Vim 模式可以快速編輯內容,但其操作可能會違反直覺。若您不熟悉 Vim,此選項可能會製造出 Obsidian 似乎停止運作的假象。", "label-vim-test": "為驗證您確實知道如何操作 Vim,請輸入結束且不儲存的命令:", "label-vim-your-answer": "您的答案", "placeholder-enter-command": "輸入命令…", "button-confirm-enable-vim": "讓我啟用 Vim", "msg-vim-mode-enabled": "命令正確,Vim 模式已啟用。", "msg-vim-mode-not-enabled": "命令不正確。為了保護您,Vim 未被啟用。", "msg-vim-mode-please-enter-command": "請輸入命令以啟用 Vim 模式", "option-legacy-editor": "使用舊版編輯器", "option-legacy-editor-description2": "舊版編輯器目前已不再維護,因此錯誤也不會被修正。很快就會被棄用。", "label-legacy-deprecation": "新版編輯器隆重登場", "label-legacy-deprecation-1": "Obsidian 現在有了全新的編輯器,更加強大且易用。", "label-legacy-deprecation-2": "您似乎仍在使用舊版編輯器,我們覺得你會愛上新版的編輯器。", "label-legacy-deprecation-choice": "您想要使用哪種模式?", "label-live-preview-description": "較為現代化,所見即所得的體驗。", "label-source-mode-description": "查看帶語法醒目提示的原始 Markdown。", "button-start-new-editor": "啟用新版編輯器" }, "file": { "name": "檔案與連結", "option-confirm-file-deletion": "確認刪除提示", "option-confirm-file-deletion-description": "是否需要彈出提示對話窗以確認刪除檔案。", "option-delete-destination": "刪除檔案設定", "option-delete-destination-description": "要如何處理已刪除的檔案?", "option-choice-system-trash": "移至資源回收筒", "option-choice-vault-trash": "移至軟體回收筒(.trash 資料夾)", "option-choice-permanent-delete": "永久刪除", "option-always-update-links": "始終更新內部連結", "option-always-update-links-description": "開啟後重新命名檔案時 Obsidian 會自動為您更新內部連結,關閉後則需要您手動確認是否更新", "option-new-note-location": "新建筆記儲存位置", "option-new-note-location-description": "指定新建筆記的儲存位置,外掛程式可能會修改此設定。", "option-choice-vault-root": "儲存庫的根目錄", "option-choice-current-folder": "目前開啟檔案所在的資料夾", "option-choice-specified-folder": "下方指定的資料夾", "option-new-file-folder-path": "儲存新建筆記的資料夾", "option-new-file-folder-path-description": "指定儲存新筆記的資料夾,外掛程式可能會修改此設定。", "option-use-wiki-links": "使用 [[Wikilinks]]", "option-use-wiki-links-description": "自動產生 Wikilinks [[連結]] 與 ![[圖片]] 以取代 Markdown 連結與圖片。關閉本選項則產生 Markdown 格式。", "option-show-unsupported-files": "偵測所有的副檔名", "option-show-unsupported-files-description": "即使 Obsidian 無法開啟,也會顯示所有的副檔名,因此可以連結到它們,並在檔案瀏覽器與快速切換對話窗看到這些檔案。", "option-link-autocompleted-format": "內部連結格式", "option-link-autocompleted-format-description": "設定在筆記中引用其他文件時插入 [[ ]] 中的檔案路徑類型。", "option-choice-shortest-linktext": "以儘可能簡短的形式插入", "option-choice-relative-path": "插入對應目前檔案的相對路徑", "option-choice-absolute-path": "插入對應儲存庫的絕對路徑", "option-new-attachment-location": "新附件的預設位置", "option-new-attachment-location-description": "存放新加入附件的位置。", "option-choice-subdirectory": "目前資料夾內的子目錄", "option-attachment-folder-path": "附件資料夾路徑", "option-attachment-folder-path-description": "指定用於儲存附件的資料夾。新建的附件會儲存於此,如音訊記錄或透過拖曳或貼上建立的影像等。", "option-attachment-subfolder-path": "子目錄名稱", "option-attachment-subfolder-path-description": "若檔案存在「vault/folder」,且子目錄名稱為「attachments」,則附件會被存在「vault/folder/attachments」。", "option-attachment-subfolder-path-placeholder": "附件", "option-excluded-files": "已排除的檔案", "option-excluded-files-desc": "已排除的檔案在不同的地方,如快速切換工具、連結建議,或是圖表檢視,可能會被隱藏或較為隱蔽。", "label-no-excluded-filters-applied": "目前未套用任何篩選器。請在下方新增。", "label-excluded-filters-applied": "目前符合以下篩選器的檔案將被排除:", "label-excluded-filter": "篩選器", "placeholder-excluded-filter": "輸入路徑或 “/regex/”……" }, "appearance": { "name": "外觀", "option-base-theme": "基本佈景主題", "option-base-theme-description": "選擇 Obsidian 預設的配色方案。", "option-accent-color": "輔色", "option-accent-color-description": "選擇整個應用程式使用的輔色。", "dark-theme": "暗黑", "light-theme": "明亮", "system-theme": "與系統相同", "option-font": "字型", "option-advanced": "進階", "option-interface-font": "介面字型", "option-interface-font-description": "設定 Obsidian 的全域字型。", "option-text-font": "文字字型", "option-text-font-description": "設定編輯或閱讀模式的字型。", "option-monospace-font": "等寬字型", "option-monospace-font-description": "設定程式碼區塊及正文前頁等區域的字型。", "label-single-font-currently-in-effect": " 目前套用的字型:", "label-multiple-fonts-currently-in-effect": "目前已套用下列字型:", "option-font-placeholder": "輸入字型名稱……", "label-no-custom-font-set": "目前未套用任何自訂字型。請在下方新增。", "label-font-applied": "將套用此列表中首個您的系統可用的字型。", "msg-font-not-found": "未在您的系統中偵測到此字型。", "msg-font-found": "已在您的系統中偵測到此字型。", "label-font-name": "字型名稱", "option-community-themes": "查看社群主題", "option-community-themes-description": "預覽、使用社群使用者建立的優秀主題。", "button-browse-community-themes": "瀏覽", "option-font-size": "字型大小", "option-font-size-description": "字型大小的像素值會影響編輯器與預覽。", "option-font-size-action": "快速字型大小調整", "option-font-size-action-description": "使用 [Ctrl+捲動] 調整字型大小,或使用觸控板的放大手勢。", "option-themes": "佈景主題", "option-manage-themes-description": "管理已安裝主題及瀏覽社群主題。", "option-theme-button-manage": "管理", "option-choice-none": "無", "option-native-menus": "原生選單", "option-native-menus-desc": "整個應用程式的選單將配合作業系統的風格,不受您的主題影響。", "button-reload-themes": "重新載入佈景主題", "msg-reloaded-themes": "已重新載入自訂 CSS 佈景主題。", "button-open-themes-folder": "開啟佈景主題資料夾", "option-css-snippets": "CSS 片段", "label-no-css-snippets-found": "在 snippets 資料夾裡找不到 CSS 片段。", "no-snippet-description": "CSS 片段存放於 “{{path}}”。", "button-reload-snippets": "重新載入 CSS 片段", "button-open-snippets-folder": "開啟 CSS 片段資料夾", "msg-reloaded-snippets": "已重新載入 CSS 片段。", "option-toggle-snippet-description": "在 “{{path}}” 套用 CSS 片段。", "label-installed-themes": "已安裝主題", "label-screenshot-unavailable": "尚無螢幕截圖", "label-default-theme": "預設主題", "tooltip-click-to-enlarge": "點選放大", "button-update": "更新", "label-currently-selected": "已選取", "option-frame-style": "視窗框架樣式", "option-frame-description": "決定 Obsidian 視窗標題列的樣式。需要完整重新啟動以生效。", "option-frame-hidden": "隱藏 (預設)", "option-frame-obsidian": "Obsidian 框架", "option-frame-native": "原生框架", "option-configure-ribbon": "功能區選單", "option-configure-ribbon-desc": "設定哪些命令要出現在該導覽列的功能區選單中。", "option-mobile-quick-ribbon-item": "快速存取功能區項目", "option-mobile-quick-ribbon-item-desc": "點選導覽選單的功能區項目將啟用該項目。點選並按住仍會顯示選單。", "button-configure": "設定", "label-additional-ribbon-items": "其他功能區項目", "label-modal-configuration": "功能區設定", "label-modal-configuration-desc": "選擇您想要顯示在功能表中的項目。拖曳以調整排序。", "option-show-view-header": "顯示分頁標題列", "option-show-view-header-desc": "在每個分頁的上方顯示標題。", "msg-updates-found": "有 {{count}} 個主題可更新。", "msg-updates-found_plural": "有 {{count}} 個主題可更新。", "button-check-for-updates": "檢查更新", "button-view-updates": "檢視更新", "button-update-all-themes": "全部更新", "label-current-themes": "目前的社群主題", "label-currently-installed": "您目前已安裝了 {{count}} 個主題。", "label-currently-installed_plural": "您目前已安裝了 {{count}} 個主題。" }, "hotkeys": { "name": "快捷鍵", "prompt-filter": "搜尋……", "tooltip-delete-hotkey": "刪除快捷鍵", "label-waiting-for-hotkey-press": "按下快捷鍵……", "tooltip-restore-default": "還原至預設值", "tooltip-customize-command": "自訂快捷鍵", "tooltip-hotkey-single-conflict": "此快速鍵與「{{command}}」發生衝突", "tooltip-hotkey-multiple-conflicts": "此快速鍵與其他 {{count}} 個命令發生衝突", "label-blank-hotkey": "無" }, "about": { "name": "關於", "label-commercial-license": "商業授權", "label-license-key": "授權", "license-key-placeholder": "您的授權金鑰……", "label-activate-license": "啟用授權", "button-activate": "啟用", "label-unknown-version": "無標題", "label-current-version": "目前版本:", "label-install-version": "(安裝程式版本:{{version}})", "label-up-to-date": "您使用的是最新版本!", "label-read-changelog": "閱讀更新日誌", "label-manual-update-required": "Obsidian 需要一次較大的安裝程式更新,方能支援最新功能,以及接收最新的安全性修正。您需要自行下載並重新安裝 Obsidian。", "label-download": "下載", "label-new-version-ready": "準備安裝新版本。 ", "label-relaunch-to-update": "重新啟動應用程式以進行更新。", "label-disabled-updates": "已禁止更新功能。", "label-checking-for-updates": "檢查更新…", "button-relaunch": "重新啟動應用程式", "button-check-for-updates": "檢查更新", "option-auto-update": "自動更新", "option-auto-update-description": "關閉後 Obsidian 將不會自動更新。", "option-get-help": "取得協助", "option-get-help-description": "取得關於使用 Obsidian 的協助。", "button-open": "開啟", "option-language": "語言", "option-language-description": "更改介面語言。", "option-insider-build": "接收內測版本", "option-insider-build-description": "自動更新至內測版本以體驗最新功能。請注意,內測版本可能不太穩定。", "option-advanced": "進階", "option-hw-acceleration": "硬體加速", "option-hw-acceleration-description": "開啟硬體加速,亦即使用 GPU 讓 Obsidian 能執行得更順暢。", "option-hw-acceleration-warning": "若您關閉此選項,應用程式將會嚴重變慢。", "option-config-location": "覆蓋設定資料夾", "option-config-location-description": "用不同資料夾取代預設資料夾。資料夾必須以 . 開頭。", "option-config-location-warning": "設定資料夾必須有效,且以 . 開頭。", "label-license": "授權", "label-your-commercial-license-key": "您的商業授權金鑰為:「{{key}}」。", "label-commercial-license-info": "註冊給使用者:「{{company}}」 - {{seats}} 。有效期至 {{expiry}}。", "label-validating-commercial-license": "正在驗證……", "label-invalid-commercial-license": "授權無效:", "button-remove-commercial-license": "移除", "option-catalyst": "Catalyst 授權", "option-catalyst-desc": "您目前的 Catalyst 授權為層級 {{tier}}。感謝您的支持!", "option-catalyst-desc-no-license": "您目前沒有 Catalyst 授權,Catalyst 授權是一次性的贊助,以支持 Obsidian 的開發。", "label-app": "應用程式" }, "account": { "name": "帳號", "option-your-account": "您的帳號", "option-your-account-desc": "您目前的登入身分:{{name}} ({{email}})。", "option-your-account-desc-no-login": "您尚未登入。僅 Obsidian Sync、Obsidian Publish,和 Catalyst 內測版本會需要您登入帳號。", "button-manage-settings": "管理設定", "label-insider": "內測人士", "label-supporter": "贊助者", "label-vip": "VIP", "button-upgrade-catalyst": "升級", "option-commercial-license": "商業授權", "option-commercial-license-desc": "如果您將 Obsidian 用於商業目的,您可能需要取得商業授權。", "button-purchase": "購買", "button-log-out": "登出", "label-log-in": "登入", "label-sign-up": "註冊", "label-email": "電子郵件地址", "placeholder-email": "您的電子郵件地址……", "label-password": "密碼", "placeholder-password": "您的密碼……", "button-login": "登入", "message-empty-email": "電子郵件地址不能留空。", "message-invalid-email": "電子郵件地址無效。", "message-empty-password": "密碼不能留空。", "message-login-failed": "登入失敗。請檢查您的電子郵件地址與密碼。", "label-no-account": "沒有帳號?", "link-sign-up-now": "現在註冊" }, "core-plugin": { "plugin-list": "外掛程式清單", "option-search-plugin": "搜尋核心外掛程式", "option-search-plugin-description": "以名稱或描述過濾外掛程式。", "placeholder-search-plugin": "搜尋外掛程式……" }, "third-party-plugin": { "name": "第三方外掛程式", "option-restricted-mode": "受限模式", "option-restricted-mode-description": "受限模式已關閉,請開啟以停用社群外掛程式。", "button-turn-on": "開啟", "option-browse-community-plugins": "社群外掛程式", "option-browse-community-plugins-description": "瀏覽並安裝我們令人嘆服的社群所製作的第三方外掛程式。", "button-browse": "瀏覽", "label-exit-restricted-mode": "離開受限模式", "label-exit-restricted-mode-description-1": "如同您安裝的任何其他軟體,社群外掛程式也有可能會導致資料完整性和安全性問題。", "label-exit-restricted-mode-description-2": "我們很重視外掛程式安全性。以下是我們的作法:", "label-exit-restricted-mode-description-3": "儘管我們盡心竭力,社群外掛程式故障仍不無可能。", "label-code-review": "初始程式碼檢閱", "label-code-review-desc": "外掛程式在上架前須先讓我們的團隊進行初始程式碼檢閱。", "label-open-source": "開放原始碼", "label-open-source-desc": "大部分的外掛程式有在 GitHub 上開源,所以您可以自行檢查程式碼。", "label-peer-audit": "同行稽核", "label-peer-audit-desc": "我們有龐大的開發者社群,他們互相監督。", "label-report-mechanism": "回報機制", "label-report-mechanism-desc": "使用者回報後,我們會對有問題的外掛程式進行後續追蹤和移除。", "label-exit-restricted-mode-disable-confirmation": "您要離開受限模式以啟用社群外掛程式嗎?我們強烈建議您在離開前先備份您的資料。", "label-learn-more": "深入了解外掛程式安全性", "button-turn-on-community-plugins": "啟用社群外掛程式", "label-trust-author": "您信任此儲存庫的作者嗎?", "label-trust-author-description-1": "您是第一次開啟此儲存庫,且其附帶了一些外掛程式。", "label-trust-author-description-2": "請注意,如果您是從其他人手中取得此儲存庫,來源不明的外掛程式可能會帶來安全風險。", "label-trust-author-description-3": "如果您不完全信任此儲存庫的作者,我們建議停留在受限模式,以阻止此儲存庫的外掛程式執行。", "button-enable-plugins": "信任作者並啟用外掛程式", "button-dont-trust-author": "在受限模式下瀏覽儲存庫", "placeholder-community-plugins": "搜尋社群外掛程式……", "msg-failed-load-plugins": "載入社群外掛程式失敗。", "label-installed": "已安裝", "button-install": "安裝", "button-enable": "啟用", "button-disable": "停用", "button-copy-share-link": "複製分享連結", "button-donate": "贊助", "label-no-results-found": "無符合結果。", "msg-failed-to-load-manifest": "無法載入外掛程式的設定描述檔。", "label-version": "版本:{{version}}", "label-currently-installed-version": "(目前已安裝:{{version}})", "label-by-author": "作者:", "label-repository": "儲存庫:", "label-last-update": "最近更新:", "tooltip-view-last-update": "檢視最近更新", "label-unsupported": "此外掛程式不支援您的裝置。", "button-update": "更新", "label-no-readme": "此外掛程式未提供 README 檔案。", "msg-installing-plugin": "正在安裝「{{name}}」外掛程式……", "msg-failed-to-install-plugin": "無法安裝「{{name}}」外掛程式。", "msg-successfully-installed-plugin": "已成功安裝「{{name}}」外掛程式。", "label-installed-plugins": "已安裝外掛程式", "button-reload-plugins": "重新載入外掛程式", "msg-reloaded-third-party-plugins": "已重新載入第三方外掛程式。", "label-uninstall": "移除安裝", "label-uninstall-plugin": "移除已安裝外掛程式", "label-uninstall-plugin-confirmation": "確定要移除這個外掛程式嗎?此動作將刪除外掛程式的資料夾。", "button-open-plugins-folder": "開啟外掛程式資料夾", "button-check-for-updates": "檢查更新", "button-update-all-plugins": "全部更新", "label-current-plugins": "目前的外掛程式", "label-currently-installed": "目前已安裝 {{count}} 個外掛程式。", "label-currently-installed_plural": "目前已安裝 {{count}} 個外掛程式。", "label-debug-startup-time": "啟動時間偵錯", "label-debug-startup-time-description": "顯示各個外掛程式初始化過程所耗費的時間。", "msg-no-updates-found": "尚無更新的外掛程式。", "msg-updates-found": "尋獲 {{count}} 個須更新的外掛程式。", "msg-updates-found_plural": "尋獲 {{count}} 個須更新的外掛程式。", "msg-update-plugin": "更新至版本 {{version}}", "option-search-installed-plugin": "搜尋已安裝外掛程式", "option-search-installed-plugin-description": "以名稱或描述過濾已安裝外掛程式。", "placeholder-search-installed-plugin": "搜尋已安裝外掛程式…", "show-installed-only": "僅顯示已安裝", "label-donate-modal-title": "贊助以支持 {{name}}", "label-donate-modal-text1": "外掛程式的開發者為社群的志願者,出於熱情而達成令人嘆服的事情,如果您覺得此外掛程式很好用,請考慮贊助其開發。", "label-donate-modal-text2": "您的贊助將全數給予外掛程式的開發者,Obsidian 不會從中抽成。開發者選擇的贊助平台可能會收取手續費。", "label-donate-modal-text3": "感謝您的慷慨贊助!", "label-support-this-plugin": "支持此外掛程式:", "label-search-summary": "顯示 {{pluginCount}}:", "label-by-popularity": "最多下載次數", "label-by-released": "最近推出", "label-by-updated": "最近更新", "label-alphabetical": "按字母排序", "label-last-updated": "於 {{time}} 更新" }, "mobile-toolbar": { "name": "行動版工具列", "option-configure-quick-action": "設定移動裝置的快速操作", "option-configure-quick-action-description": "設定由頂端往下拖拉時觸發的命令,目前設定的命令是:「{{command}}」。", "button-configure": "設定", "placeholder-select-quick-action": "選擇快速操作…", "manage-toolbar-options": "管理工具列選項", "option-internal-link": "新增內部連結", "option-internal-embed": "新增嵌入", "option-tag": "新增標籤", "option-heading": "切換標題", "option-strikethrough": "切換刪除線", "option-highlight": "切換突顯效果", "option-code": "切換程式碼", "option-blockquote": "切換區塊引用", "option-markdown-link": "新增 Markdown 連結", "option-bullet-list": "切換項目清單", "option-numbered-list": "切換編號清單", "option-indent-list": "內縮清單項目", "option-unindent-list": "取消內縮清單項目", "option-undo": "復原", "option-redo": "重做", "option-move-caret-up": "向上移動游標", "option-move-caret-down": "向下移動游標", "option-move-caret-left": "向左移動游標", "option-move-caret-right": "向右移動游標", "option-first-line": "移動至第一行", "option-last-line": "移動至最後一行", "option-toggle-keyboard": "切換鍵盤", "option-configure-toolbar": "設定行動版工具列", "option-added-options": "已新增選項", "option-more-toolbar-options": "更多工具列選項", "option-attach": "插入附件", "option-add-command": "加入全域命令", "option-add-command-description": "選擇要加入至工具列的全域命令。" } }, "editor": { "search": { "placeholder-find": "尋找", "placeholder-replace": "取代", "label-previous": "上一個", "label-next": "下一個", "label-all": "選擇全部", "label-exit-search": "退出搜尋", "label-replace": "取代", "label-replace-all": "全部取代" }, "link-suggestion": { "label-type-hash": "輸入 #", "label-link-heading": "以連結到標題", "label-type-block": "輸入 ^", "label-link-block": "以連結到區塊", "label-type-pipe": "輸入 |", "label-change-display-text": "指定顯示的文字", "label-no-match-found": "未找到符合結果" }, "spellcheck": { "no-suggestion": "沒有建議……", "add-to-dictionary": "加入詞典" }, "menu": { "edit-link": "編輯連結" }, "heading-suggestion": { "label-no-heading": "沒有標題", "label-heading-level": "標題 {{level}}" }, "print-modal": { "title": "匯出 PDF", "caption": "以下列設定匯出「{{filename}}」為 PDF。", "setting-page-size": "紙張大小", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "將檔名作為標題", "setting-landscape": "橫向", "setting-margin": "邊界", "setting-margin-default": "預設", "setting-margin-minimal": "最小", "setting-margin-none": "無", "setting-downscale-percent": "縮小百分比", "button-export-to-pdf": "匯出 PDF" }, "link-popover": { "tooltip-follow-link": "跟隨連結", "tooltip-open-link": "開啟連結", "tooltip-search-tag": "搜尋標籤" } }, "interface": { "embed-cannot-find": "找不到:", "embed-open-in-default-app-tooltip": "在預設應用程式中開啟", "empty-sidebar": "側邊欄空白,請嘗試將窗格拖曳至此。", "sidebar-expand": "展開", "sidebar-collapse": "收合", "msg-fail-to-save-file": "「{{filepath}}」檔案儲存失敗。{{message}}。", "no-file": "未開啟檔案", "msg-file-changed": "「{{file}}」已被外部修改,自動合併變動。", "switch-vault": "開啟其他儲存庫", "help": "說明", "settings": "設定", "drag-to-rearrange": "拖曳調整配置", "msg-switched-to-read": "已將預設檢視模式切換為閱讀檢視模式。", "msg-switched-to-edit": "切換預設檢視至編輯模式。", "msg-upgrade-installer": "欲使用此功能,請由官網下載,並重新安裝最新版本的應用程式。", "tooltip-restore-default-settings": "還原為預設設定", "label-copy": "複製到系統剪貼簿", "copied_generic": "已複製到剪貼簿", "copied": "{{item}} 已複製到系統剪貼簿", "url": "URL", "msg-open-file-through-uri": "已開啟檔案:「{{path}}」", "msg-file-not-found-through-uri": "找不到檔案「{{name}}」。", "delete-action-short-name": "刪除", "msg-indexing": "Obsidian 正在索引您的儲存庫……\n這個動作應只發生一次,\n在索引完成前,可能會有部分功能無法使用。", "msg-indexing-complete": "索引完成。", "msg-sandbox-vault": "這是沙盒儲存庫。\n在此儲存庫做出的所有更動皆不儲存。", "label-enter-to-create": "輸入以建立", "label-update-available": "有可用更新", "label-debug-info": "除錯資訊", "button-learn-more": "深入了解", "button-not-now": "稍後再說", "button-add": "新增", "button-manage": "管理", "label-new-tab": "新分頁", "msg-tab-busy": "此分頁目前忙碌中,請稍後再試", "empty-state": { "no-file-open": "未開啟檔案", "create-new-file": "建立新檔案", "go-to-file": "開啟檔案", "see-recent-files": "查看近期檔案", "close": "關閉窗格", "unknown-pane-title": "外掛程式已不復活躍", "unknown-pane-desc": "建立本窗格({{type}})的外掛程式已經遠走高飛" }, "menu": { "edit-view": "編輯 (按住 Ctrl/Cmd 開啟新窗格)", "read-view": "目前檢視:閱讀模式", "switch-to-edit-view": "點一下編輯", "switch-to-read-view": "點一下閱讀", "mod-click-open-new-tab": "{{key}}+點一下以在新分頁中開啟", "find": "查詢…", "replace": "取代…", "edit": "編輯", "preview": "預覽", "more-options": "更多選項", "close": "關閉", "close-others": "關閉其他", "close-right": "關閉右側分頁", "pin": "釘選", "unpin": "取消釘選", "unlink-tab": "取消連結分頁", "link-tab": "與分頁連結…", "toggle-source-mode": "原始碼模式", "toggle-reading-view": "閱讀檢視模式", "delete-file": "刪除檔案", "create-file": "建立此檔案", "open-link": "開啟連結", "open-in-new-tab": "在新分頁開啟", "open-to-the-right": "在右側開啟", "copy-url": "複製網址", "close-current-tab": "關閉目前分頁", "copy": "複製", "cut": "剪下", "paste": "貼上", "paste-as-plain-text": "以純文字貼上", "select-all": "全選", "rename-heading": "重新命名標題…", "rename-blockid": "重新命名此區塊 ID…", "open-in-new-window": "在新視窗開啟", "move-to-new-window": "移至新視窗", "open-in-browser": "在瀏覽器開啟", "stack-tabs": "堆疊分頁", "unstack-tabs": "取消堆疊分頁" }, "tooltip": { "click-to-expand": "點選展開", "click-to-collapse": "點選收合", "alias": "別名", "not-created-yet": "尚未建立,選擇以建立" }, "start-screen": { "label-version": "版本", "option-open-folder-as-vault": "開啟資料夾為儲存庫", "option-open-folder-as-vault-description": "選擇已存在的 Markdown 檔案資料夾。", "option-create-vault": "建立新的儲存庫", "option-create-vault-description": "於資料夾內建立新的 Obsidian 儲存庫。", "option-connect-obsidian-sync": "連接至 Obsidian Sync", "option-connect-obsidian-sync-description": "設定與現有遠端儲存庫同步的儲存庫。", "option-new-vault-name": "儲存庫名稱", "option-new-vault-name-description": "選擇適當的儲存庫名稱。", "option-new-vault-location": "位置", "option-new-vault-location-description": "選擇置放儲存庫的位置。", "label-new-vault-location-preview": "您的新儲存庫會放在:", "option-reveal-vault-in-explorer": "在系統檔案總管中開啟儲存庫", "option-reveal-vault-in-explorer-mac": "在 Finder 中顯示儲存庫", "option-rename-vault": "重新命名儲存庫…", "msg-error-rename-exists": "已存在相同名稱的儲存庫。", "msg-error-nested": "無法將儲存庫移至其子資料夾。", "msg-error-rename-open": "無法重新命名目前開啟的儲存庫。", "msg-rename-failed": "無法重新命名儲存庫。", "msg-rename-success": "成功重新命名儲存庫。", "option-move-vault": "移動儲存庫……", "msg-move-select-dest": "選擇目的地資料夾", "msg-error-move-exists": "目的地已有儲存庫。", "msg-error-move-open": "無法移動目前已開啟的儲存庫。", "msg-move-failed": "無法移動儲存庫。", "msg-move-success": "成功移動儲存庫。", "option-remove": "從列表中移除", "button-quick-start": "快速開始", "button-open": "開啟", "button-browse": "瀏覽", "button-connect": "連接", "button-create-vault": "建立", "button-back": "返回", "msg-empty-vault-name": "必須輸入儲存庫名稱。", "msg-invalid-folder": "請選擇適當的資料夾。", "msg-failed-to-create-vault": "建立儲存庫失敗。", "msg-failed-to-create-vault-at-location": "指定的位置無法建立儲存庫,請確認存放位置與資料夾權限。", "msg-error-failed-to-open-vault": "開啟檔案失敗。", "msg-error-remove-current-open-vault": "開啟中的儲存庫無法刪除。", "option-get-help": "取得協助", "option-user-email": "電子郵件地址", "placeholder-your-email": "您的電子郵件地址……", "option-user-password": "密碼", "placeholder-your-password": "您的密碼……", "button-sign-in": "登入", "button-setup": "設置", "option-connect-vault-desc": "在此裝置上建立同步儲存庫。", "tooltip-own-vault": "這是屬於您的遠端儲存庫。", "tooltip-shared-vault": "這是與您共享的遠端儲存庫。" }, "drag-and-drop": { "insert-link-here": "在此插入連結", "insert-links-here": "在此插入連結", "move-into-folder": "搬移至「{{folder}}」", "star-this-file": "收藏本檔案", "star-these-files": "收藏這些檔案", "open-in-this-tab": "在此分頁開啟", "open-as-tab": "以新分頁開啟" }, "window": { "maximize": "最大化", "minimize": "最小化", "restore-down": "還原", "close-window": "關閉視窗", "go-back": "返回", "go-forward": "前往" }, "start-up": { "loading-obsidian": "正在載入 Obsidian……", "obsidian-load-error": "載入 Obsidian 時發生錯誤。", "button-reload-app": "重新載入應用程式", "button-reload-app-in-safe-mode": "重新載入應用程式進安全模式", "button-open-another-vault": "開啟另一個儲存庫", "loading-components": "正在載入元件……", "loading-plugins": "正在載入外掛程式……", "loading-vault": "正在載入儲存庫……", "msg-failed-to-load-vault": "無法載入儲存庫:", "loading-cache": "正在載入快取……", "loading-workspace": "正在載入工作區……" }, "mobile": { "action-import": "匯入至儲存庫", "action-choose-file-to-insert": "選擇檔案以插入", "action-insert-text-into-file": "將文字插入 {{filename}}", "action-insert-link-into-file": "將連結插入 {{filename}}", "msg-importing": "匯入中…", "msg-import-success": "匯入成功", "msg-failed-to-import-file": "匯入 {{filename}} 失敗", "msg-back-again-to-exit": "再按一次返回鍵以離開。" }, "help-screen": { "label-official-help-site": "官方說明網頁", "label-official-help-site-desc": "閱讀 Obsidian 的官方說明文件,提供多語言版本。", "action-visit": "前往", "label-discord-chat": "Discord 聊天室", "label-discord-chat-desc": "Discord 是與世界各地的 Obsidian 老手聊天的好地方。", "action-join": "加入", "label-forum": "官方論壇", "label-forum-desc": "互相協助、發表功能請求、回報問題,或是深入探討知識管理。", "label-sandbox-vault": "沙盒儲存庫", "label-sandbox-vault-desc": "探索並試驗各種功能,不會儲存您的更動。" } }, "commands": { "save-file": "儲存目前檔案", "follow-cursor-link": "跟隨游標處的連結", "open-cursor-link-in-new-tab": "在新分頁中開啟游標下的連結", "open-cursor-link-to-the-right": "在右側開啟游標下的連結", "open-cursor-link-in-new-window": "在新視窗中開啟游標下的連結", "navigate-tab-above": "聚焦到上方的分頁群組", "navigate-tab-below": "聚焦到下方的分頁群組", "navigate-tab-left": "聚焦到左側的分頁群組", "navigate-tab-right": "聚焦到右側的分頁群組", "toggle-pin": "釘選切換", "split-right": "向右分割", "split-down": "向下分割", "toggle-stacked-tabs": "切換堆疊分頁", "navigate-back": "返回", "navigate-forward": "前進", "use-dark-mode": "使用暗黑主題", "use-light-mode": "使用明亮主題", "change-theme": "更改主題", "search-current-file": "在目前筆記中查詢", "search-replace-current-file": "在目前筆記中查詢並取代", "open-settings": "開啟設定", "open-help": "查看說明", "toggle-edit": "切換編輯/閱讀檢視模式", "toggle-source-mode": "切換實際預覽/原始碼模式", "delete-current-file": "刪除目前檔案", "new-tab": "新分頁", "close-all-tabs": "關閉所有分頁", "close-active-tab": "關閉目前分頁", "close-other-tabs": "關閉所有其他分頁", "toggle-left-sidebar": "收合/展開左側邊欄", "toggle-right-sidebar": "收合/展開右側邊欄", "toggle-default-new-tab-mode": "切換新分頁的預設模式", "focus-editor": "移至編輯區", "toggle-fold": "收合/展開目前行", "fold-all": "收合所有標題和列表", "unfold-all": "展開所有標題和列表", "fold-more": "Fold more", "fold-less": "Fold less", "swap-line-up": "與上一行互換", "swap-line-down": "與下一行互換", "remove-heading": "移除標題", "toggle-heading": "設為標題 {{level}}", "toggle-bold": "切換所選文字的粗體效果", "toggle-italics": "切換所選文字的斜體效果", "toggle-highlight": "切換所選文字的突顯效果", "toggle-comments": "切換所選文字的註解", "insert-link": "插入連結", "toggle-spellcheck": "切換拼寫檢查", "delete-paragraph": "刪除段落", "toggle-checklist": "切換待辦事項狀態", "cycle-list-checklist": "切換要點/核取方塊", "insert-callout": "插入註標 (callout)", "edit-file-title": "編輯檔案標題", "copy-path": "複製檔案路徑", "copy-url": "複製 Obsidian 網址", "export-pdf": "匯出 PDF", "reload": "放棄儲存並重新載入程式", "undo-close-tab": "復原已關閉的分頁", "context-menu": "顯示游標下的特色選單", "show-debug-info": "顯示除錯資訊", "always-on-top": "視窗永遠置頂開關", "zoom-in": "放大", "zoom-out": "縮小", "reset-zoom": "重設縮放等級", "toggle-preview": "切換編輯/預覽模式", "move-to-new-window": "移動目前窗格至新視窗", "open-in-new-window": "在新視窗開啟目前窗格", "rename-current-file": "重新命名目前檔案" }, "dialogue": { "label-link-affected": "這將影響 {{files}} 中的 {{links}}。", "msg-updated-links": "更新 {{files}} 中的 {{links}}。", "label-update-links": "更新連結", "label-confirm-update-link-to-file": "您是否需要更新與此檔案關聯的內部連結?", "button-always-update": "總是更新", "button-just-once": "僅此一次", "button-do-not-update": "不更新", "label-confirm-deletion": "您確定要刪除「{{filename}}」嗎?", "label-move-to-system-trash": "會將其移動至資源回收筒。", "label-move-to-vault-trash": "會將其移動至 Obsidian 回收筒(即儲存庫目錄中隱藏的 “.trash” 資料夾)裡。", "label-permanent-delete": "會將其永久刪除。", "label-non-empty-folder": "這不是空資料夾。", "label-delete-folder-warning": "如果繼續,此資料夾內的所有檔案將被刪除。", "label-delete-folder": "刪除資料夾", "button-delete": "刪除", "button-delete-do-not-ask-again": "刪除,且不再過問。", "label-do-not-ask-again": "不再過問", "label-existing-backlink": "目前有 {{links}} 與該文件相關。", "label-existing-backlink_plural": "目前有 {{links}} 個指向此筆記。", "label-delete-file": "刪除檔案", "button-manage": "管理", "button-cancel": "取消", "button-done": "完成", "button-save": "儲存", "button-stop": "停止", "button-continue": "繼續", "preparing-pdf": "正在準備 PDF……", "label-rename-file": "重新命名", "label-new-name": "新名稱", "msg-rename-success": "檔案重新命名成功。", "label-rename-heading": "重新命名標題", "label-rename-blockid": "重新命名區塊 ID" }, "menu-items": { "new-file": "建立筆記", "new-file-to-the-right": "在右側建立筆記", "new-window": "建立視窗", "open-switcher": "快速開啟…", "open-vault": "開啟儲存庫…", "close-tab": "關閉分頁", "close-window": "關閉視窗", "find": "尋找", "replace": "取代", "insert-callout": "註標", "insert-markdown-link": "Markdown 連結", "insert-wikilink": "連結", "set-heading": "標題 {{level}}", "no-heading": "無標題", "insert-quote": "引文", "export-pdf": "匯出 PDF", "toggle-bullet-list": "無序清單", "toggle-numbered-list": "有序清單", "toggle-checklist": "待辦清單", "toggle-bold": "粗體", "toggle-code": "程式碼", "toggle-comment": "註解", "toggle-italics": "斜體", "toggle-highlight": "反白", "toggle-strikethrough": "刪除線", "toggle-comments": "註解", "fold-all": "全部收合", "unfold-all": "全部展開", "fold-more": "收合更多", "fold-less": "收合較少", "source-mode": "原始碼模式", "reading-view": "閱讀檢視模式", "show-debug-info": "顯示除錯資訊", "navigate-back": "向後巡覽", "navigate-forward": "向前巡覽", "toggle-left-sidebar": "切換左側邊欄", "toggle-right-sidebar": "切換右側邊欄", "split-right": "向右分割", "split-down": "向下分割", "release-notes": "更新日誌" }, "plugins": { "name": "外掛程式", "file-explorer": { "name": "檔案瀏覽器", "desc": "查看儲存庫中的所有檔案。", "action-open": "開啟檔案瀏覽器", "action-show": "顯示檔案瀏覽器", "action-create-note": "新增筆記", "action-create-note-to-the-right": "在右側建立筆記", "action-collapse-all": "全部折疊", "action-expand-all": "全部展開", "action-new-note": "新增筆記", "action-new-folder": "新增資料夾", "action-change-sort": "排序", "action-reveal-file": "在檔案瀏覽器顯示本筆記", "action-reveal-active-file": "在檔案瀏覽器顯示目前筆記", "command-move-file": "搬移檔案到其他資料夾", "action-move-file": "搬移檔案到…", "action-move-folder": "搬移資料夾到…", "action-move-items": "將 {{count}} 個項目移動至……", "prompt-type-folder": "輸入資料夾名稱", "label-no-folders": "找不到資料夾。", "instruction-navigate": "導覽", "instruction-move": "搬移", "instruction-dismiss": "退出", "label-sort-a-to-z": "按檔案名升冪排列 (A-Z)", "label-sort-z-to-a": "按檔案名降冪排列 (Z-A)", "label-sort-new-to-old": "按編輯時間排序(從新到舊)", "label-sort-old-to-new": "按編輯時間排序(從舊到新)", "label-sort-created-old-to-new": "按建檔時間排序(從舊到新)", "label-sort-created-new-to-old": "按建檔時間排序(從新到舊)", "menu-opt-new-note": "新增筆記", "menu-opt-new-folder": "新增資料夾", "menu-opt-set-attachment-folder": "將其設定為附件資料夾", "menu-opt-rename": "重新命名", "menu-opt-delete": "刪除", "menu-opt-make-copy": "建立副本", "msg-invalid-characters": "檔案名稱不能包含下列字元:", "msg-unsafe-characters": "檔案名稱含有下列字元時無法形成可用的連結:", "msg-file-already-exists": "已經存在一個同名檔案", "msg-empty-file-name": "檔案名稱不能為空。", "msg-bad-dotfile": "檔案名稱不得以 . 開頭。", "tooltip-modified-time": "最後修改時間:{{time}}", "tooltip-created-time": "建檔時間:{{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "搬移", "label-untitled-file": "未命名", "label-untitled-folder": "未命名", "msg-set-attachment-folder": "附件將會被存入「{{path}}」。" }, "search": { "name": "搜尋", "desc": "在所有筆記中搜尋關鍵字。", "action-open-search": "在所有檔案中搜尋", "label-collapse-results": "收合搜尋結果", "label-match-case": "區分大小寫", "label-explain-search-term": "闡釋搜尋字詞", "label-more-context": "顯示更多內容", "prompt-start-search": "輸入並開始搜尋…", "label-match-text": "符合文字:", "label-match-regex": "符合規則表達式:", "label-match-exact-text": "精確符合文字:", "label-match-all": "符合所有:", "label-match-any": "符合任何:", "label-excluding": "不包括:", "label-case-sensitive": "區分大小寫", "label-case-insensitive": "忽略大小寫", "label-match-file-path": "符合檔案路徑:", "label-match-file-name": "符合檔名:", "label-match-content": "符合檔案內容:", "label-match-task": "符合任務:", "label-match-task-todo": "符合任務 (待辦):", "label-match-task-done": "符合任務 (完成):", "label-match-line": "符合行號:", "label-match-block": "符合區塊:", "label-match-section": "符合段落:", "label-match-tag": "符合標籤:", "label-no-matches": "未找到符合結果。", "matches-with-count": "……文中還有 {{count}} 處符合。", "matches-with-count_plural": "……文中還有 {{count}} 處符合。", "label-copy-search-results": "複製搜尋結果", "button-copy-results": "複製結果", "msg-successfully-copied": "已將結果複製到您的剪貼簿。", "option-show-path": "顯示路徑", "option-show-path-description": "顯示檔案的完整路徑而非檔名。", "option-link-style": "連結樣式", "option-link-style-description": "選擇性的將結果中的每個檔案轉換為連結。", "option-choice-link-style-none": "無", "option-choice-link-style-wikilink": "Wiki 式連結", "option-choice-link-style-markdown-link": "Markdown 連結", "option-list-prefix": "清單開頭符號", "option-list-prefix-description": "選擇性的將結果中每個檔案加上清單項目開頭符號。", "option-choice-list-style-none": "無", "option-choice-list-style-dash": "連接號 (-)", "option-choice-list-style-asterisk": "星號 (*)", "option-choice-list-style-numbered": "數字. ", "tooltip-clear-search": "清除搜尋", "label-search-options": "搜尋選項", "tooltip-read-more": "深入了解", "label-history": "歷史", "tooltip-clear-history": "清除搜尋歷史", "label-path-option-description": "符合的檔案路徑", "label-file-name-option-description": "符合檔案名稱", "label-tag-option-description": "搜尋標籤", "label-line-option-description": "搜尋同行的關鍵字", "label-section-option-description": "搜尋同一標題下的關鍵字", "menu-opt-search-for": "搜尋「{{keyword}}」" }, "quick-switcher": { "name": "快速切換", "desc": "輸入關鍵字即可跳轉到相應檔案(按下 Ctrl/Cmd+O 啟用此功能)。", "short-name": "切換", "action-open": "開啟快速切換", "instruction-navigate": "導覽", "instruction-open": "開啟", "instruction-open-in-new-tab": "以在新分頁開啟", "instruction-open-to-the-right": "以在右側開啟", "instruction-create": "建立", "instruction-dismiss": "退出", "label-no-note-create-new": "找不到本筆記。按下 Enter 鍵以建立該筆記。", "prompt-type-file-name": "輸入以切換或建立檔案……", "label-enter-to-create": "建立該筆記", "tooltip-not-created-yet": "尚未建立,請選擇以建立", "option-show-existing-only": "顯示已存在者", "option-show-existing-only-description": "是否顯示尚未建立的檔案連結。", "option-show-attachments": "顯示附件", "option-show-attachments-desc": "顯示圖片、影片與 PDF 等附件檔。", "option-show-all-file-types": "顯示所有檔案類型", "option-show-all-file-types-desc": "顯示所有檔案(含 Obsidian 無法開啟的檔案)。這種檔案會以檔案類型的預設應用程式開啟。" }, "graph-view": { "name": "關聯圖檢視", "desc": "總覽筆記間的關聯。", "action-open": "查看關聯圖", "action-open-local": "開啟目前筆記關聯圖", "action-copy-screenshot": "複製螢幕截圖", "tab-title": "{{displayText}} 的關聯圖", "label-filters": "過濾設定", "prompt-filter-nodes": "搜尋檔案…", "option-depth": "深度", "option-depth-description": "以此數字顯示連結階層", "option-neighbor-links": "鄰近的連結", "option-neighbor-links-description": "顯示鄰近節點的內部連結。", "option-forelinks": "對外連結", "option-forelinks-description": "顯示指向其他檔案的連結", "option-backlinks": "對內連結", "option-backlinks-description": "顯示來自其他檔案的連結", "option-show-tags": "標籤", "option-show-tags-description": "標籤連結至含有該標籤的檔案", "option-show-attachments": "附件", "option-show-attachments-description": "顯示檔案含有的附件", "option-show-existing-files-only": "只顯示已存在檔案", "option-show-existing-files-only-description": "勾選時,不顯示未存在的檔案連結", "option-show-orphans": "孤立連結", "option-show-orphans-description": "顯示未連結到其他檔案的檔案", "label-display": "外觀設定", "option-show-arrows": "方向箭頭", "option-show-arrows-description": "連接線顯示方向箭頭", "option-text-fade": "文字透明度", "option-node-size": "節點尺寸", "option-link-thickness": "連接線寬度", "label-forces": "強度設定", "option-center-force": "節點集中強度", "option-link-force": "節點間的連結強度", "option-link-distance": "連接線距離", "option-repel-force": "節點間的互斥強度", "tooltip-open-graph-settings": "開啟關聯圖設定", "msg-screenshot-copied": "螢幕截圖複製到剪貼簿。", "label-groups": "群組", "placeholder-enter-query": "輸入查詢……", "tooltip-delete-graph": "刪除群組", "button-new-group": "新群組", "tooltip-click-to-change-drag-to-reorder": "點擊以變更顏色\n拖曳以重排群組順序", "action-timelapse": "開始關聯圖動畫展示", "tooltip-start-timelapse-animation": "開始時間推移動畫", "button-animate-timelapse": "動畫" }, "backlinks": { "name": "反向連結", "desc": "在狀態列中顯示反向連結的數量。", "action-open": "開啟反向連結", "action-show": "顯示反向連結窗格", "action-open-for-current": "顯示目前筆記的相關連結", "action-toggle-backlinks-in-document": "在文件中切換反向連結", "menu-opt-backlinks-in-document": "檔案中的反向連結", "label-linked-mentions": "已連結本筆記的檔案", "label-no-backlinks": "沒有反向連結。", "label-unlinked-mentions": "未連結但提及本筆記的檔案", "label-show-search": "顯示搜尋過濾內容", "label-link-button-text": "連結", "tab-title": "{{displayText}} 的反向連結", "label-no-unlinked-mentions": "未發現文字。", "ellipsis": "……", "option-backlink-in-document": "文件的反向連結", "option-backlink-in-document-desc": "開啟新窗格時,預設顯示文件中的反向連結。" }, "outgoing-links": { "name": "對外連結", "desc": "顯示對外連結,並偵測提及的未連結筆記。", "action-open": "開啟對外連結", "action-show": "顯示對外連結窗格", "action-open-for-current": "開啟目前檔案的對外連結", "tab-title": "{{displayText}} 的對外連結", "label-links": "連結", "label-no-links": "找不到連結。", "label-unlinked-mentions": "提及的未連結", "tooltip-link-file": "連結到本檔案", "tooltip-not-created": "尚未建立" }, "tag-pane": { "name": "標籤窗格", "desc": "顯示所有標籤及其出現的次數。", "action-show": "顯示標籤窗格", "label-no-tags": "未發現標籤。", "label-sort-by-name-a-to-z": "標籤名稱 (A 到 Z)", "label-sort-by-name-z-to-a": "標籤名稱 (Z 到 A)", "label-sort-by-frequency-high-to-low": "使用頻率 (高到低)", "label-sort-by-frequency-low-to-high": "使用頻率 (低到高)", "action-show-nested-tags": "顯示巢狀標籤", "action-collapse-all": "全部折疊", "action-expand-all": "全部展開" }, "page-preview": { "name": "頁面預覽", "desc": "滑鼠懸停在內部連結上顯示預覽視窗。編輯模式時需按住 Ctrl/Cmd 鍵。", "label-empty-note": "「{{linktext}}」未建立成功!請點擊以建立。", "label-source-editor": "編輯器", "label-source-preview": "預覽", "label-source-search": "搜尋,反向連結與對外連結", "label-require-mod": "滑鼠懸停時必須按 {{key}} 才能預覽" }, "starred": { "name": "收藏", "desc": "收藏一些常用的檔案並搜尋。", "action-show": "顯示收藏窗格", "action-toggle": "取消/收藏目前檔案", "action-toggle-search": "取消/收藏目前搜尋結果", "action-star": "收藏", "action-unstar": "取消", "menu-opt-remove": "移除", "msg-successfully-starred": "成功收藏{{type}}「{{title}}」。", "msg-removed-starred": "已取消收藏{{type}}「{{title}}」。", "msg-cannot-find-path": "在「{{path}}」處未找到檔案。" }, "custom-css": { "name": "自訂主題", "desc": "載入並使用「Obsidian.css」佈景主題。", "setting-community-themes": "社群佈景主題", "msg-fetching-themes": "正在取得社群佈景主題資料……", "prompt-filter": "搜尋……", "label-dark-theme-only": "只有暗黑主題", "label-light-theme-only": "只有明亮主題", "label-use": "使用", "label-stop-use": "停止使用此主題", "label-install-and-use": "安裝並使用", "label-update": "更新", "label-no-readme": "此主題未提供 README 檔案。", "tooltip-remove-theme": "移除主題", "label-visit-on-github": "前往 GitHub", "msg-load-error": "無法載入社群主題,請檢查您的網路連線。", "msg-now-using-theme": "您的 CSS 佈景主題已變更為 {{title}}。", "msg-deleted-theme": "已刪除 {{title}} 主題。", "msg-updated-theme": "已更新 {{title}} 主題。", "label-installed": "已安裝", "label-legacy": "舊版", "button-update-all-themes": "全部更新", "msg-failed-load-themes": "無法載入社群主題。", "msg-no-updates-found": "找不到可用的主題更新。", "msg-updates-found": "有 {{count}} 個主題可更新。", "msg-updates-found_plural": "有 {{count}} 個主題可更新。", "msg-failed-to-install-theme": "無法安裝主題「{{name}}」。", "msg-successfully-installed-theme": "成功安裝主題「{{name}}」。", "msg-installing-theme": "正在安裝主題「{{name}}」……", "label-search-summary": "顯示 {{themeCount}}:", "label-update-available": "有可用更新" }, "command-palette": { "name": "命令面板", "desc": "無需介面或快捷鍵操作,輸入一個命令即可完成相應功能。", "action-open": "開啟命令面板", "instruction-navigate": "導覽", "instruction-use": "使用", "instruction-dismiss": "離開", "label-no-commands": "找不到命令。", "prompt-type-command": "輸入命令……", "label-pinned-commands": "已釘選命令", "option-add-new-pin": "新的已釘選命令", "option-add-new-pin-description": "當沒有搜尋結果時,已釘選命令會顯示在所有命令的頂端。" }, "markdown-format-importer": { "name": "Markdown 格式轉換器", "desc": "將其他應用程式中的 Markdown 格式轉換為 Obsidian 支援的格式", "action-open": "開啟 Markdown 格式轉換器", "option-roam-tag-fixer": "Roam Research 標籤轉換", "option-roam-tag-fixer-description": "將 Roam Research 中的「#tag」和「#[[tag]]」轉換為「[[tag]]」。", "option-roam-highlight-fixer": "Roam Research 突顯標籤轉換", "option-roam-highlight-fixer-description": "將 Roam Research 中的「^^highlight^^」轉換為「==highlight==」。", "option-roam-todo-converter": "Roam Research 待辦標籤轉換", "option-roam-todo-converter-description": "將 Roam Research 中的「{{[[TODO]]}}」轉換為「[ ]」。", "option-bear-highlight-fixer": "Bear 高亮度修正", "option-bear-highlight-fixer-description": "轉換「::highlight::」為「==highlight==」。", "zettelkasten-link-fixer": "ZK 卡片連結轉換", "zettelkasten-link-fixer-description": "將 ZK 卡片中使用的「[[UID]]」連結轉換為「[[UID 檔名]]」的形式。", "zettelkasten-link-beautifier": "美化 ZK 卡片連結", "zettelkasten-link-beautifier-description": "將 ZK 卡片中使用的「[[UID]]」連結美化為「[[UID 檔名|檔名]]」的形式。", "msg-all-files-warning": "警告:轉換器將修改儲存庫中所有檔案,而不只是目前檔案。", "msg-override-files-warning": "將修改您的檔案。請在轉換前做好備份。", "label-start-conversion": "開始轉換", "label-stop": "停止", "label-go-back": "返回", "label-done": "完成", "label-processing": "正在處理……", "label-cancelling": "正在取消……", "label-finished": "大功告成!", "label-processed-files": "處理的檔案", "label-modified-files": "修改的檔案", "label-total-replacements": "全部取代" }, "daily-notes": { "name": "每日筆記", "desc": "開啟今天的每日筆記(如果不存在,則建立一個)。", "short-name": "今天", "action-open": "開啟今天的每日筆記", "action-open-previous": "開啟上一個每日筆記", "action-open-next": "開啟下一個每日筆記", "action-insert-text": "插入文字到每日筆記", "action-insert-link": "插入連結到每日筆記", "msg-fail-format": "未成功建立每日筆記。「{{format}}」不是有效的格式。", "msg-fail-folder": "未成功建立每日筆記。找不到「{{folderOption}}」資料夾。", "msg-fail-template-file": "未成功建立每日筆記。找不到「{{template}}」模板檔案。", "msg-no-previous": "在此之前沒有每日筆記。", "msg-no-next": "在此之後沒有每日筆記。", "option-date-format": "日期格式", "label-refer-to-syntax": "有關更多語法,請參閱:", "label-syntax-link": "格式參考", "label-syntax-live-preview": "這是參考樣式:", "option-new-file-location": "新檔案儲存目錄", "option-new-file-location-description": "儲存每日筆記的資料夾路徑。", "option-template": "模板檔案位置", "option-template-description": "模板檔案的儲存路徑。", "option-open-on-start": "啟動時開啟每日筆記", "option-open-on-start-description": "開啟此儲存庫時自動開啟每日筆記。" }, "unique-note-creator": { "name": "唯一筆記建立工具", "desc": "建立帶有唯一時間戳前綴的筆記,用於卡片盒筆記法等工作流。", "short-name": "唯一", "action-create-note": "建立新唯一筆記", "option-new-file-location": "新檔案位置", "option-new-file-location-description": "建立新唯一筆記的資料夾路徑。", "msg-folder-not-found": "無法建立唯一筆記。找不到資料夾 “{{folderOption}}”。", "option-template-file": "範本檔位置", "option-template-file-description": "作為範本的檔案路徑。", "option-template-file-placeholder": "例如:資料夾1/筆記", "option-id-format": "唯一前綴格式", "msg-template-file-not-found": "無法建立唯一筆記。找不到模板檔案 “{{template}}”。", "msg-failed-to-generate": "無法產生格式為 “{{format}}” 的唯一筆記" }, "random-note": { "name": "漫遊筆記", "desc": "隨機開啟一則筆記,協助您回顧和探索。", "short-name": "漫遊", "action-open": "開始漫遊筆記" }, "outline": { "name": "大綱", "desc": "顯示目前檔案或連結窗格的大綱標題。", "action-open": "開啟大綱", "action-show": "顯示大綱窗格", "action-open-for-current": "顯示目前檔案的大綱", "tab-title": "{{displayText}} 的大綱", "label-no-headings": "未發現標題行。" }, "word-count": { "name": "字數統計", "desc": "在狀態列中顯示字數。" }, "slides": { "name": "幻燈片", "desc": "在目前頁面中使用「---」分割出幻燈片頁面內容。", "action-start": "開始示範" }, "audio-recorder": { "name": "錄音機", "desc": "錄製音訊並儲存為附件。", "action-start": "開始錄音", "action-stop": "停止錄音", "action-toggle": "開始/停止錄音", "msg-access-denied": "存取被拒。請前往偏好設定窗格啟用麥克風。", "msg-pending-grant": "請授權麥克風開始錄音。", "msg-no-microphone": "未連接麥克風。" }, "open-with-default-app": { "name": "使用預設應用程式開啟", "desc": "加上一個按鈕,讓您可以用預設應用程式開啟目前檔案。", "action-open-file": "使用預設應用程式開啟", "action-open-file-mobile": "分享", "action-show-in-folder": "在資料夾中顯示", "action-show-in-folder-mac": "在 Finder 中顯示" }, "templates": { "name": "模板", "desc": "在模板資料夾裡選擇要插入的模板檔案。", "action-insert": "插入模板", "action-insert-current-date": "插入目前日期", "action-insert-current-time": "插入目前時間", "option-template-folder-location": "模板資料夾位置", "option-template-folder-location-description": "在這個資料夾裡的所有檔案會被視為模板檔案。", "option-template-date-format": "日期格式", "option-template-date-format-description": "模板檔案內的 {{date}} 會被置換成此值。", "option-template-date-format-description2": "可使用 {{date:YYYY-MM-DD}} 來取代設定的日期格式。", "option-template-time-format": "時間格式", "option-template-time-format-description": "模板檔案內的 {{time}} 會被置換成此值。", "option-template-time-format-description2": "可使用 {{time:HH:mm}} 來取代設定的時間格式。", "instruction-navigate": "導覽", "instruction-insert": "插入模板", "instruction-dismiss": "取消動作", "msg-no-templates-found": "無符合模板", "msg-fail-invalid-folder": "無法列出模板清單。模板資料夾設定錯誤。", "msg-fail-folder-not-found": "無法列出模板清單。無此資料夾:「{{folderOption}}」。", "prompt-type-template": "輸入模板檔名……" }, "translucency": { "name": "半透明視窗", "desc": "啟用半透明特效以加強深度感,最適合使用於暗黑主題。未支援 Linux。" }, "slash-command": { "name": "斜線命令", "desc": "開啟在編輯器輸入斜線 (/) 觸發斜線命令的功能。" }, "editor-status": { "name": "編輯器狀態", "desc": "加入一個狀態列項目,用來顯示和變更目前的編輯器模式。", "read": "閱讀", "edit-source": "原始碼模式", "edit-live-preview": "實際預覽" }, "publish": { "name": "發佈", "desc": "透過 Obsidian Publish 發佈您的筆記。", "action-publish-changes": "發佈變動內容", "label-no-internet-access": "必須連上網際網路才能發佈變動過的內容。", "label-publish-service-description": "Obsidian Publish 是附加的付費服務,讓您可以透過 Obsidian 直接將筆記發佈至網站。", "label-please-login": "要開始發佈,請登入或建立新的 Obsidian 帳戶。", "label-no-publish-subscription": "您尚未訂閱 Obsidian Publish 服務。", "button-purchase": "購買", "label-manage-sites": "管理網站", "label-no-sites": "尚無任何網站。", "button-choose": "選擇", "tooltip-edit-site-id": "編輯網站 ID", "tooltip-delete-site": "刪除網站", "label-delete-site-confirmation": "確定要刪除此網站?", "label-delete-site-details": "此動作會立即且永久地刪除您的網站。", "label-confirm-delete-site": "確認刪除網站「{{site}}」", "option-site-id": "網站 ID", "option-site-id-description": "您的網站網址將會是 https://publish.obsidian.md/{站台ID},稍後可再變更。只允許使用小寫英文字母、數字與連接號。", "option-site-id-placeholder": "挑選網站 ID", "button-create": "建立", "msg-invalid-site-id": "網站 ID 只允許使用小寫英文字母、數字與連接號。", "msg-site-id-in-use": "此網站 ID 已被使用。請試試別的 ID。", "msg-create-site-issue": "建立網站時發生錯誤。", "label-site-options": "網站選項", "option-site-general": "一般", "option-site-components": "元件", "option-site-appearance": "外觀", "option-site-reading-experience": "閱讀體驗", "option-site-misc": "其他網站設定", "option-site-name": "網站名稱", "option-site-name-description": "發佈筆記的網站名稱,將顯示為網站的標題抬頭。", "option-site-name-placeholder": "網站命名", "option-home-page-file": "首頁檔案", "option-home-page-file-description": "您的網站顯示的第一個頁面", "option-home-page-file-placeholder": "挑選一個已發佈的檔案", "option-logo": "商標", "option-logo-description": "挑選圖片以成為您的網站商標。", "option-logo-placeholder": "任何您在儲存庫上傳的圖片……", "option-site-collaboration": "網站協作", "option-site-collaboration-desc": "管理此網站的協作者。", "button-manage-collaborators": "管理", "option-theme": "樣式主題", "option-theme-description": "選擇網站預設的顏色方案。", "option-theme-system": "跟隨作業系統", "option-show-theme-toggle": "切換亮色/暗色主題", "option-show-theme-toggle-description": "讓訪客自行切換明亮或暗黑主題。", "option-show-navigation": "顯示導覽", "option-show-navigation-description": "在網站左側顯示所有已發佈頁面的清單", "option-show-search": "顯示搜尋列", "option-show-search-description": "在導覽上方顯示搜尋列,讓訪客能搜尋您網站的頁面與標題。", "option-show-graph": "顯示關聯圖", "option-show-graph-description": "在每個頁面顯示小型本地關聯圖。", "option-show-outline": "顯示筆記目錄", "option-show-outline-description": "顯示每個頁面的標題大綱。", "option-show-backlinks": "顯示反向連結", "option-show-backlinks-description": "在每頁末端顯示反向連結區。", "option-sliding-window-mode": "使用捲動 (sliding) 視窗", "option-sliding-window-mode-description": "將頁面開啟於窗格右側。允許水平捲動窗格。", "option-hover-preview-file": "顯示懸停預覽", "option-hover-preview-file-description": "當滑鼠懸停於連結上時顯示內容預覽。", "option-hide-title": "隱藏頁面標題", "option-hide-title-description": "隱藏頁面標題。適用於您每個頁面皆有設定標題的場景。", "option-readable-line-length": "縮減行寬", "option-readable-line-length-description": "限制每行字數,使螢幕顯示的內容減少,但使長段落更具可讀性。", "option-site-password": "密碼", "option-site-password-description": "以密碼限制網站存取。", "option-google-analytics": "Google Analytics 追蹤程式碼", "option-google-analytics-description": "為您的網站設定 Google Analytics,只有透過您的自訂網址瀏覽的訪客才有效。請先確認您當地的法規。", "button-manage-passwords": "管理", "button-save-site-settings": "儲存網站設定", "msg-updated-options": "已更新網站選項。", "button-go-back": "返回", "label-publishing-to": "發佈至", "tooltip-switch-site": "切換網站", "button-add-linked": "加入已連結", "tooltip-add-linked": "加入目前被選取項目連結到的所有檔案", "msg-added-linked-files": "已加入 {{count}} 個被連結檔案。", "msg-added-linked-files_plural": "已加入 {{count}} 個被連結檔案。", "tooltip-open-site-options": "變更網站選項", "label-no-changes-detected": "無任何變動。", "label-changed-files-to-be-published": "變更", "label-unchanged-files-already-published": "未變動 (選取以刪除)", "label-file-selected": " 已選取", "button-select-all-files": "全選", "button-deselect-all-files": "取消全選", "label-new-files-to-be-published": "新建", "button-publish": "發佈", "msg-no-permission-to-publish-to-site": "您沒有目前網站的發佈權限。", "msg-select-at-least-one-file": "請至少選擇一個檔案。", "label-upload-changes": "上傳變動", "button-done": "完成", "button-stop": "停止", "label-status-uploading": "上傳中", "label-status-to-publish": "將發佈", "label-status-to-delete": "將刪除", "label-status-published": "已發佈", "label-status-deleted": "已刪除", "label-status-failed": "已失敗", "label-status-cancelled": "已取消", "button-change": "變動", "label-clear-cache": "網站的變動在幾分鐘後才會顯示。倘若看不到最後的變動內容,請試著清除瀏覽器的快取。", "label-visit-site": "可在此參觀您的網站:", "msg-something-went-wrong": "發生錯誤了,請開啟開發者主控台以查看問題細節。", "msg-network-error": "發生了網路錯誤。", "label-manage-passwords": "管理密碼", "label-add-password": "加入密碼", "action-new-password": "新密碼", "label-no-password": "您的網站目錄沒有設定密碼,任何人皆可瀏覽。", "label-have-password": "您的網站已有密碼保護,若有多個密碼,任何一個密碼皆可瀏覽網站。", "option-password-name": "密碼", "option-password-desc": "密碼的雜湊值被安全地儲存,只要密碼設定後,便無法以明文文字形式呈現。", "option-password-placeholder": "您的密碼", "option-nickname-name": "暱稱(選填)", "option-nickname-desc": "設定暱稱,讓您回憶起自己的密碼。", "action-add-password": "加入此密碼", "label-untitled-password": "未命名密碼", "label-password-created-time": "建立時間:{{time}}", "msg-added-new-password": "已加入新密碼。", "option-custom-domain": "自訂網域", "option-custom-domain-desc": "不使用 https://publish.obsidian.md/{站台 ID} 網址而使用自己的域名。", "option-noindex": "禁止搜尋引擎索引", "option-noindex-desc": "防止搜尋引擎對您的網站製作索引。", "button-configure": "設定", "label-configure-custom-domain": "設定自訂網域", "option-custom-url-name": "自訂網址", "option-custom-url-desc": "您網站所在的網址。", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "重新導向至您的自訂網域", "option-custom-url-redirect-desc": "將前往 publish.obsidian.md/id 的使用者重新導向至您的自訂網域", "button-update-custom-domain": "更新網域設定", "label-custom-domain-instructions": "請參考我們說明網站 {{link}} 以深入了解。", "label-custom-domain-link-name": "自訂網域設定指引", "label-site-usage": "網站 {{site}} 已超過限制 {{limit}}。", "button-add-more-sites": "購買更多網站", "label-no-sites-bought": "您尚未購買任何網站。", "button-get-site": "取得網站", "label-manage-sharing": "管理「{{name}}」共享", "label-sharing-with-users": "此網站目前與以下使用者共享。", "label-not-sharing": "此網站目前未與任何人共享。", "label-invite-pending": "待確認", "tooltip-remove-user": "移除使用者", "option-invite-user": "邀請使用者", "placeholder-invite-user": "輸入他們的電子郵件地址……", "error-email-must-be-valid": "請輸入有效的電子郵件地址來邀請其他人。", "msg-enable-publish-plugin": "請在設定 -> 核心外掛程式中啟用 Publish 外掛程式來檢視網站。", "label-your-sites": "您的網站", "label-sites-shared-with-you": "與您共享的網站", "tooltip-leave-site-sharing": "停止此網站的協作", "label-leave-site-confirmation": "確認停止網站協作", "label-leave-site-confirmation-details": "這將從與您共享的網站列表中移除此網站。此操作無法復原。", "label-leave-site-confirmation-details-2": "如果您想再次在此網站協作,請聯絡網站擁有者。", "button-leave": "離開", "label-compare-with-live": "與線上版本比較", "button-use-live-version": "使用線上版本", "label-confirm-override": "確認覆寫本機版本", "label-confirm-override-1": "您確定要覆寫本機版本嗎?", "label-confirm-override-2": "您的本機版本將被捨棄,並使用線上版本。如有需要,請做好備份。", "button-proceed": "繼續", "message-successfully-used-live-version": "成功使用線上版本覆寫您的本機版本。", "label-open-file": "開啟檔案", "tooltip-manage-publish-filters": "管理發布篩選器", "option-included-folders": "包含的資料夾", "option-included-folders-desc": "當您審查要發布的變更時,這些資料夾中的檔案會被自動選取。", "option-currently-included-folders": " 目前包含這些資料夾:", "option-excluded-folders": "排除的資料夾", "option-excluded-folders-desc": "當您審查要發布的變更時,這些資料夾會被隱藏。此設定的優先權大於上述包含的資料夾。", "label-number-of-folders-included": "Obsidian Publish 目前已包含 {{folders}}。", "label-number-of-folders-excluded": "Obsidian Publish 目前已排除 {{folders}}。", "label-manage-included-folders": "管理包含的資料夾", "label-manage-excluded-folders": "管理排除的資料夾", "label-add-included-folder": "包含資料夾", "label-add-included-folder-desc": "您可以包含現有或是尚未建立的資料夾。", "tooltip-contact-support": "連絡客戶支援" }, "workspaces": { "name": "工作區", "desc": "儲存並載入工作區配置。", "action-load-layout": "載入工作區配置", "action-manage-layouts": "管理工作區配置", "action-save-and-load-layout": "儲存並載入其他配置", "placeholder-save-current-layout-as": "另存目前的工作區配置為…", "button-save": "儲存", "button-load": "載入", "tooltip-delete-layout": "刪除配置", "msg-delete-layout-success": "成功刪除配置。", "msg-enter-name": "請輸入新配置的名稱。", "msg-save-layout-success": "成功儲存配置。", "label-no-layout-found": "找不到已儲存的配置。", "placeholder-type-to-search-layouts": "輸入配置名稱……" }, "sync": { "name": "同步", "desc": "透過 Obsidian Sync 以同步您的檔案。", "action-view-version-history": "檢視版本歷史", "label-load-more": "載入更多", "label-show-diff": "顯示差異", "label-copy-to-clipboard": "複製到系統剪貼簿", "label-restore-this-version": "還原至此版本", "msg-already-latest-version": "此版本已是最後的版本。", "msg-restored-version": "成功還原的版本時間:{{time}}", "label-file-deleted": "檔案已被刪除", "label-no-earlier-version": "這個檔案已無更舊版本。", "label-empty-file": "空", "label-setting-files": "設定檔案", "label-deleted-files": "已刪除檔案", "label-version-history": "版本歷史", "label-click-to-see-history": "點選已刪除檔案以檢視其歷史。", "label-create-remote-vault": "建立遠端儲存庫", "msg-please-enter-password": "請輸入密碼。", "msg-vault-name-cannot-be-empty": "儲存庫名稱不可留空。", "msg-successfully-created-vault": "成功建立遠端儲存庫「{{name}}」。", "label-remote-vault-explanation": "在不同裝置間安全同步您的遠端儲存庫。", "option-vault-name": "儲存庫名稱", "option-vault-name-desc": "協助記錄儲存庫的使用目的。", "option-vault-name-placeholder": "超棒的儲存庫", "option-use-custom-encryption-password": "自訂點對點的加密密碼", "option-use-custom-encryption-password-desc": "若您關閉此選項,我們會提供一個安全的加密金鑰給您。", "option-use-custom-encryption-password-desc-warning": "之後無法再變更此選項。", "option-encryption-password": "加密密碼", "option-encryption-password-desc": "之後無法變更此密碼。", "option-encryption-password-desc-warning": "若您遺忘此密碼,任何遠端資料將永遠無法再使用。", "option-encryption-password-desc-2": "此選項並不影響您的本機資料。", "option-encryption-password-placeholder": "您的密碼", "label-enter-encryption-password": "輸入加密密碼", "button-unlock-vault": "儲存庫解鎖", "msg-verified-password": "密碼驗證成功。", "label-remote-vaults": "您的遠端儲存庫", "label-vault-created-time": "建檔時間:{{time}}", "tooltip-delete-remote-vault": "刪除", "tooltip-manage-sharing": "管理共享", "label-confirm-delete-remote-vault": "確認刪除儲存庫", "label-confirm-delete-remote-vault-question": "是否確定要刪除這個遠端儲存庫?", "label-confirm-delete-remote-vault-result": "我們主機內的所有資料(包含版本歷史)皆會被刪除,但您的本機檔案不受影響。", "label-confirm-delete-remote-vault-warning": "此動作是永久且不可逆的。", "msg-remote-vault-deleted": "{{name}} 已被刪除。", "button-connect-to-remote-vault": "連接", "button-disconnect-from-remote-vault": "斷線", "label-not-remote-vaults": "您沒有任何遠端儲存庫。", "button-create-new-remote-vault": "建立新的儲存庫", "label-sync-log": "同步紀錄", "options-only-show-errors": "只有錯誤", "options-only-show-errors-desc": "只顯示錯誤而隱藏其他紀錄項目。", "button-copy-sync-log": "複製同步紀錄", "msg-successfully-copied-sync-log": "同步紀錄已複製成功。", "button-retry": "重試", "button-purchase-subscription": "購買", "option-remote-vault": "遠端儲存庫", "button-choose-remote-vault": "挑選", "button-manage-remote-vault": "管理", "option-remote-vault-desc-connected": "目前已連接至 “{{name}}” 遠端儲存庫。", "option-remote-vault-desc-not-connected": "目前尚未連接至任何遠端儲存庫。", "option-sync-status": "同步狀態", "option-sync-status-desc-paused": "Obsidian Sync 目前已暫停。", "option-sync-status-desc-running": "Obsidian Sync 目前正在執行。", "option-device-name": "裝置名稱", "option-device-name-desc": "此名稱將顯示在同步記錄,若空白則使用預設名稱。", "button-resume": "重新執行", "button-pause": "暫停", "option-view-deleted-files": "已刪除檔案", "option-view-deleted-files-desc": "檢視並還原已刪除檔案。", "option-sync-log": "同步活動", "option-sync-log-desc": "檢視最近的同步活動以除錯。", "button-view": "檢視", "button-bulk-restore": "大量還原", "button-restore-selected-files": "還原選取檔案", "msg-restoring": "正在還原……", "msg-restoring-complete": "`還原程序完成:{{succeeded}} 筆成功,{{failed}} 筆失敗。`", "option-over-size": "儲存庫大小超過限制", "option-over-size-desc": "您的儲存庫為 {{size}},而限制為 {{limit}}。", "msg-largest-files": "檢視最大檔案", "msg-largest-files-desc": "這些是佔用最多容量的遠端檔案,刪除附件後,使用清除按鈕以釋出遠端儲存庫的空間。", "button-purge-remote": "清除", "tooltip-purge-remote": "從遠端儲存庫永久清除已刪除附件以節省空間。", "msg-purge-complete": "清除完成。", "option-prevent-sleep": "阻止裝置進入睡眠模式", "option-prevent-sleep-desc": "同步時,阻止裝置進入睡眠模式。", "option-selective-sync": "選擇性同步", "option-excluded-folders": "已排除資料夾", "option-excluded-folder-desc": "阻止同步特定資料夾。", "option-currently-excluded-folders": " 目前被排除同步的資料夾:", "button-manage-excluded-folders": "管理", "option-sync-image": "同步影像檔案", "option-sync-image-desc": "同步這些副檔名的影像檔案:{{extensions}}。", "option-sync-audio": "同步音訊檔案", "option-sync-audio-desc": "同步這些副檔名的音訊檔案:{{extensions}}。", "option-sync-video": "同步視訊檔案", "option-sync-video-desc": "同步這些副檔名的視訊檔案:{{extensions}}。", "option-sync-pdf": "同步 PDF 檔", "option-sync-pdf-desc": "同步 PDF 檔案。", "option-sync-unsupported": "同步其餘類型", "option-sync-unsupported-desc": "同步未支援的檔案類型。", "option-vault-config-sync": "同步儲存庫設定", "option-view-config-files": "設定版本歷史", "option-view-config-files-desc": "檢視與還原設定檔的版本歷史。", "option-sync-app": "主要設定", "option-sync-app-desc": "啟用同步編輯器設定、檔案與連結設定、自訂快捷鍵等。", "option-sync-appearance": "外觀設定", "option-sync-appearance-desc": "同步外觀設定,例如暗黑模式、使用的主題與啟用的程式碼片段。", "option-sync-appearance-data": "主題及程式碼片段", "option-sync-appearance-data-desc": "同步下載的主題及程式碼片段。是否啟用取決於先前設定。", "option-sync-hotkey": "快速鍵", "option-sync-hotkey-desc": "同步自訂快速鍵。", "option-sync-core-plugin": "啟用的核心外掛程式清單", "option-sync-core-plugin-desc": "同步核心外掛程式的啟用狀態。", "option-sync-core-plugin-data": "核心外掛程式設定", "option-sync-core-plugin-data-desc": "同步核心外掛程式設定。", "option-sync-community-plugin": "啟用的社群外掛程式清單", "option-sync-community-plugin-desc": "同步社群外掛程式的啟用狀態。", "option-sync-community-plugin-data": "已安裝社群外掛程式", "option-sync-community-plugin-data-desc": "同步已安裝社群外掛程式(.js、.css,和 manifest.json 檔案)與其設定。", "label-sync-introduction": "Obsidian Sync 是 Obsidian 的附加同步服務,具備點對點加密與版本歷史等功能。", "label-account-required": "開始同步前,請登入或建立新的 Obsidian 帳號。", "button-sign-up": "建立新帳號", "button-log-in": "登入", "label-manage-excluded-folders": "管理已排除資料夾", "label-number-of-folders-excluded": "{{folders}} 目前不同步。", "label-add-excluded-folder": "排除資料夾", "label-add-excluded-folder-desc": "您可以排除現有資料夾或尚未建立的資料夾。", "tooltip-remove-excluded-folder": "從排除列表中移除", "label-setup-connection": "設定連線", "label-now-connected-to-vault": "您現在已連接到「{{name}}」。", "button-start-syncing": "開始同步", "label-confirm-merge-vault": "確認合併儲存庫", "msg-vault-has-notes": "您的本機儲存庫已經有一些筆記。", "msg-vault-merge-warning": "如果您連接至遠端資料庫「{{name}}」,您本機儲存庫中的筆記將與遠端儲存庫中的筆記合併。若發生衝突,將留存該筆記的最新版本。", "tooltip-update-setting-on-all-devices": "請更新此選項,並在您想要套用的裝置上重新啟動應用程式。", "label-sharing-with-users": "此遠端儲存庫目前與以下使用者共享。", "label-not-sharing": "此遠端儲存庫目前未與任何人共享。", "label-vaults-shared-with-you": "與您共享的儲存庫", "tooltip-leave-vault-sharing": "停止於此儲存庫協作", "label-leave-vault-confirmation": "確認停止儲存庫協作", "label-leave-vault-confirmation-details": "這將從與您共享的儲存庫列表中移除此儲存庫。此操作無法復原。", "label-leave-vault-confirmation-details-2": "若您希望再次於此儲存庫協作,請聯絡儲存庫的擁有者。", "button-leave": "Leave", "label-require-subscription-to-connect": "您需要訂閱 Obsidian Sync 才能連接到此儲存庫。", "option-contact-support": "聯絡客戶支援", "option-contact-support-desc": "如果您在使用 Obsidian Sync 時遇到任何問題,請聯絡我們,好讓我們幫您解決!您可以透過 support@obsidian.md 聯絡我們。", "button-email-support": "電子郵件支援" }, "file-recovery": { "name": "檔案還原", "desc": "讓您還原成最近的快照以挽救意外的資料遺失,只有 Markdown 檔案會儲存快照。", "action-open": "開啟儲存的快照", "option-interval": "快照間隔", "option-interval-description": "兩個快照間的最小間隔分鐘數。", "option-keep": "歷史長度", "option-keep-description": "快照儲存的日數長度。", "option-open-history": "快照", "option-open-history-description": "檢視與還原已儲存快照。", "button-view-snapshots": "檢視", "option-clear": "清空歷史", "option-clear-description": "抹除所有快照。", "button-clear-history": "清空", "label-clear-warning": "確定要刪除全部快照嗎?注意:只有快照會被刪除,儲存庫裡的所有檔案不受影響。", "msg-clear-complete": "快照已清空。", "label-no-history-found": "找不到快照。", "placeholder-choose-file": "選擇檔案…", "label-select-file": "請於左側選擇檔案以檢視快照。" }, "note-composer": { "name": "筆記編排器", "desc": "合併、切割與重構筆記。", "option-confirm-file-merge": "檔案合併確認", "option-confirm-file-merge-description": "合併兩個檔案前提示。", "option-split-replacement-text": "擷取後文字", "option-split-replacement-text-description": "擷取後之選用文字要如何顯示。", "option-choice-split-replacement-text-link": "連結至新檔案", "option-choice-split-replacement-text-embed": "嵌入新檔案", "option-choice-split-replacement-text-none": "無", "option-template-file": "模板檔位置", "option-template-file-description": "當合併或擷取時要使用的模板檔。可使用變數:{{content}}、{{fromTitle}}、{{newTitle}}、{{date:FORMAT}}。例:{{date:YYYY-MM-DD}}。", "command-merge-file": "用目前檔案合併另一個檔案…", "action-merge-file": "合併所有檔案內容…", "label-no-files": "找不到檔案。", "instruction-navigate": "導覽", "instruction-merge": "合併", "instruction-create-new": "建立新檔", "instruction-merge-at-top": "合併至頂端", "instruction-dismiss": "放棄", "prompt-select-file-to-merge": "選擇要併入的檔案……", "label-merge-file": "合併檔案", "label-confirm-file-merge": "確定要將「{{file}}」併入「{{destination}}」?「{{file}}」將被刪除。", "button-merge": "合併", "button-merge-do-not-ask-again": "全部合併且不再詢問", "command-split-file": "擷取目前選取內容到其他檔案…", "command-extract-heading": "擷取目前標題段落到其他檔案…", "instruction-append": "移至底端", "instruction-prepend": "移至頂端", "msg-fail-to-fetch-template": "無法擷取模板檔案:找不到「{{template}}」。", "msg-fail-to-find-heading": "無法找到標題" }, "canvas": { "name": "畫布", "desc": "在無邊界的畫布上排列和連結筆記。", "action-add-note": "從儲存庫新增筆記", "action-add-media": "從儲存庫新增媒體", "action-add-card": "新增卡片", "action-add-website": "新增網頁", "action-create-group": "建立群組", "action-create-with-size": "建立指定大小的卡片", "action-convert-to-file": "轉換成檔案…", "action-drag-to-add-note": "拖曳以從儲存庫新增筆記", "action-drag-to-add-media": "拖曳以從儲存庫新增媒體", "action-drag-to-add-card": "拖曳以新增卡片", "action-enable-grid-snapping": "啟用格線貼齊", "action-disable-grid-snapping": "停用格線貼齊", "action-edit-label": "編輯標籤", "action-remove-label": "移除標籤", "action-search-file": "搜尋檔案", "action-set-color": "設定顏色", "action-align": "對齊", "action-align-left": "靠左對齊", "action-align-center": "水平置中", "action-align-right": "靠右對齊", "action-align-top": "對齊上方", "action-align-middle": "垂直置中", "action-align-bottom": "對齊下方", "action-distribute-horizontal-spacing": "分配水平間隔", "action-distribute-vertical-spacing": "分配垂直間隔", "action-justify-horizontally": "左右對齊", "action-justify-vertically": "上下對齊", "action-stack-horizontally": "水平堆疊", "action-stack-vertically": "垂直堆疊", "action-stack-grid": "堆疊格線", "action-export-png": "匯出成圖片", "label-export-png-desc": "以下方的設定匯出 “{{title}}” 的 PNG 檔。", "label-export-png-dimensions": "預計圖片尺寸:{{dimensions}}", "option-export-png-show-logo": "顯示標誌", "option-export-png-show-logo-desc": " 此選項將在左下角加上 Obsidian 的標誌。", "option-export-png-zoom": "縮放", "option-export-png-zoom-desc": "更高的縮放比例將產生更高解析度的圖片。", "option-export-png-frame": "檢視區", "option-export-png-frame-desc": "選擇要渲染整張畫布或目前的檢視區。", "option-export-png-frame-full": "整張畫布", "option-export-png-frame-viewport": "僅檢視區", "action-remove": "移除", "action-narrow": "縮小至區塊…", "action-swap-file": "交換檔案…", "action-change-url": "更改網址…", "action-zoom-to-fit": "縮放至適當比例", "action-zoom-to-selection": "縮放至選取範圍", "action-reload-page": "重新載入頁面", "action-go-to-target": "移至目標", "action-go-to-source": "移至來源", "command-create-new-canvas": "建立新畫布", "command-new-canvas": "新畫布", "instruction-narrow": "至內嵌標題", "prompt-to-narrow": "輸入標題名稱", "label-enter-url": "輸入網址", "label-empty-embed": "找不到 “{{linktext}}”。", "prompt-add-text": "新增文字……", "prompt-start-search": "輸入以搜尋……", "label-canvas-help": "畫布幫助", "label-no-heading": "無標題", "label-pan": "平移", "label-pan-horizontal": "水平平移", "label-zoom": "縮放", "label-select-all": "全選", "label-add-remove-selection": "選取 / 取消選取", "label-clone-card": "複製卡片", "label-constrain-movement-axis": "限制卡片只能在座標軸上移動", "label-disable-drag-snapping": "拖曳時停用貼齊", "label-remove-card": "移除卡片", "label-drag-from-below": "從下方拖曳或按兩下", "label-space-drag-pan": "空白鍵 + 拖曳以平移", "label-scroll-to-zoom": "滾動以縮放", "label-untitled-group": "未命名的群組" } }, "nouns": { "word-with-count": "{{count}} 個詞", "word-with-count_plural": "{{count}} 個詞", "character-with-count": "{{count}} 個字元", "character-with-count_plural": "{{count}} 個字元", "link-with-count": "{{count}} 個連結", "link-with-count_plural": "{{count}} 個連結", "file-with-count": "{{count}} 個檔案", "file-with-count_plural": "{{count}} 個檔案", "folder-with-count": "{{count}} 個資料夾", "folder-with-count_plural": "{{count}} 個資料夾", "backlink-with-count": "{{count}} 個反向連結", "backlink-with-count_plural": "{{count}} 個反向連結", "site-with-count": "{{count}} 個網站", "site-with-count_plural": "{{count}} 個網站", "plugin-with-count": "{{count}} 個外掛程式", "plugin-with-count_plural": "{{count}} 個外掛程式", "theme-with-count": "{{count}} 個主題", "theme-with-count_plural": "{{count}} 個主題" } }{ "setting": { "options": "选项", "plugin": "插件", "builtin-plugins": "核心插件", "plugin-options": "插件选项", "folder-path-example-placeholder": "例: 文件夹 1/文件夹 2", "file-path-example-placeholder": "例: 文件夹/笔记", "msg-restart-required": "此选项更改需重启后方可生效。", "editor": { "name": "编辑器", "section-general": "通用", "section-behavior": "行为", "section-display": "显示", "option-spellcheck": "拼写检查", "option-spellcheck-description": "打开拼写检查器。", "spellcheck-languages": "拼写检查语言", "spellcheck-languages-description": "选择需要检查拼写的语言。", "spellcheck-languages-mac-description": "本地的拼写检查器将自动检测你当前所使用的语言。", "spellcheck-dict": "拼写检查词典", "spellcheck-dict-empty": "拼写检查词典是空的。", "option-show-inline-title": "显示页内标题", "option-show-inline-title-description": "在笔记页面内显示笔记标题。", "option-readable-line-length": "缩减栏宽", "option-readable-line-description": "开启后将限制每行字数,使屏幕显示的内容减少,但使较长的段落更具可读性。", "option-strict-line-break": "严格换行", "option-strict-line-break-description": "开启后,根据 Markdown 标准,单个换行符在预览模式下不再生效。", "option-show-frontmatter": "显示 Front-matter ", "option-show-frontmatter-description": "在预览模式下,笔记顶部的 Front-matter 将以代码块的方式显示。关闭此设置后,预览模式将不显示 Front-matter 。", "option-auto-pair-brackets": "自动补全英文标点符号", "option-auto-pair-brackets-description": "自动补全英文括号和引号。", "option-auto-pair-markdown": "自动补全 Markdown 语法", "option-auto-pair-markdown-description": "自动补全表示粗体和斜体的标记。", "option-smart-indent-lists": "智能列表", "option-smart-indent-lists-description": "开启后 Obsidian 将根据换行和缩进情况自动调整列表符号。", "option-fold-heading": "折叠标题", "option-fold-heading-description": "开启后可以将正文内容折叠到标题行。", "option-fold-indent": "折叠缩进", "option-fold-indent-description": "开启后可以将缩进内容(如列表)折叠起来。", "option-default-new-tab-view": "新标签页的默认视图", "option-default-new-tab-view-description": "设置新标签页的默认视图模式。", "option-default-new-tab-view-editing": "编辑视图", "option-default-new-tab-view-reading": "阅读视图", "option-default-editing-mode": "默认编辑模式", "option-default-editing-mode-description": "在编辑视图下,新面板默认采用的编辑模式。", "option-default-editing-mode-source": "源码模式", "option-default-editing-mode-live-preview": "实时预览", "option-show-line-number": "显示行号", "option-show-line-number-description": "在左侧显示行号。", "option-indentation-guide": "显示缩进参考线", "option-indentation-guide-description": "在缩进的行之间显示参考线。", "option-use-tabs": "使用制表符", "option-use-tabs-description": "开启后,Tab 键将使用制表符来完成缩进。关闭后 Tab 键将使用空格完成缩进。", "option-tab-size": "制表符宽度", "option-tab-size-description": "设置制表符等同的空格数。", "option-rtl": "文本右对齐", "option-rtl-description": "将文本的默认水平对齐方式修改为右对齐。", "option-auto-convert-html": "自动转换 HTML", "option-auto-convert-html-description": "从网页粘贴或拖拽粘贴内容时自动将 HTML 格式转换为 Markdown 格式。如果不想转换,请使用 Ctrl/Cmd+Shift+V 进行粘贴。", "option-vim-key-bindings": "Vim 模式", "option-vim-key-bindings-description": "允许在编辑器中使用 Vim 模式。", "option-vim-key-bindings-mobile": "在移动设备上,该设置需要单独开启,且开启状态不会同步到其他移动设备上。", "option-emacsy-keys": "Emacs 模式", "option-emacsy-keys-description": "允许你使用附加的 Emacs 风格的导航键,但可能会干扰某些键的操作。", "label-confirm-enable-vim": "确认进入 Vim 模式", "label-vim-warning": "Vim 模式可以实现高效的文本编辑操作,但其使用方法十分复杂。如果你对 Vim 不了解,开启该模式可能会让 Obsidian 难以使用。", "label-vim-test": "为了确保你知道如何使用 Vim,请输入 Vim 中“退出而不保存”对应的命令:", "label-vim-your-answer": "你的答案", "placeholder-enter-command": "请输入命令……", "button-confirm-enable-vim": "让我开启 Vim", "msg-vim-mode-enabled": "命令正确。开启 Vim 模式。", "msg-vim-mode-not-enabled": "命令错误。为保证你的使用体验,暂不开启 Vim 模式。", "msg-vim-mode-please-enter-command": "请输入相应命令开启 Vim 模式。", "option-legacy-editor": "使用旧版编辑器", "option-legacy-editor-description2": "请注意,旧版编辑器即将被移除,目前其已停止维护,存在许多已知 bug。", "label-legacy-deprecation": "新版编辑器在此", "label-legacy-deprecation-1": "新版的编辑器现在更加稳定和易于使用。", "label-legacy-deprecation-2": "来试试新的编辑器?我们认为在使用后你也会习惯它。", "label-legacy-deprecation-choice": "你想使用哪种模式?", "label-live-preview-description": "实时预览编辑效果。", "label-source-mode-description": "始终为 Markdown 源码。", "button-start-new-editor": "开始使用新版编辑器" }, "file": { "name": "文件与链接", "option-confirm-file-deletion": "确认删除提示", "option-confirm-file-deletion-description": "是否需要弹出提示窗口以确认删除文件。", "option-delete-destination": "删除文件设置", "option-delete-destination-description": "要如何处理已删除的文件?", "option-choice-system-trash": "移至系统回收站", "option-choice-vault-trash": "移至软件回收站(.trash 文件夹)", "option-choice-permanent-delete": "永久删除", "option-always-update-links": "始终更新内部链接", "option-always-update-links-description": "开启后重命名文件时 Obsidian 会自动为你更新内部链接,关闭后则需要你手动确认是否更新。", "option-new-note-location": "新建笔记的存放位置", "option-new-note-location-description": "指定新建笔记的存放路径,插件可能会修改此设置。", "option-choice-vault-root": "仓库的根目录", "option-choice-current-folder": "当前文件所在的文件夹", "option-choice-specified-folder": "指定的附件文件夹", "option-new-file-folder-path": "存放新建笔记的文件夹", "option-new-file-folder-path-description": "指定存放新笔记的文件夹,插件可能会修改此设置。", "option-use-wiki-links": "使用 Wiki 链接", "option-use-wiki-links-description": "开启后,在笔记中链接其他笔记或图像时,使用如 [[文件名]] 和 ![[图片名]] 这样的Wiki链接。关闭此选项则默认使用标准的 Markdown 超链接语法,如 []()。", "option-show-unsupported-files": "检测所有类型文件", "option-show-unsupported-files-description": "在文件列表和快速切换中显示所有类型的文件,即使是那些目前 Obsidian 不支持的类型。开启此选项后可以对不支持的文件进行链接。", "option-link-autocompleted-format": "内部链接类型", "option-link-autocompleted-format-description": "设置在笔记中链接其他文件时插入 \"[[ ]]\" 中的文件路径类型。", "option-choice-shortest-linktext": "尽可能简短的形式", "option-choice-relative-path": "基于当前笔记的相对路径", "option-choice-absolute-path": "基于仓库根目录的绝对路径", "option-new-attachment-location": "附件默认存放路径", "option-new-attachment-location-description": "设置新添加附件的存放位置。", "option-choice-subdirectory": "当前文件所在文件夹下指定的子文件夹中", "option-attachment-folder-path": "附件文件夹路径", "option-attachment-folder-path-description": "指定用于存放附件的文件夹。新建的附件会存放于此,如音频记录或通过拖放或粘贴创建的图像等。", "option-attachment-subfolder-path": "子文件夹名称", "option-attachment-subfolder-path-description": "如果当前文件在 \"vault/folder\" 中,而设置子文件夹名称为 \"attachments\",则附件将被保存至 \"vault/folder/attachments\" 路径下。", "option-attachment-subfolder-path-placeholder": "附件", "option-excluded-files": "忽略文件", "option-excluded-files-desc": "符合以下条件的文件将被忽略。忽略是指文件将出现在快速切换、链接补全中队列的末尾,以及不在关系图谱和搜索结果中出现。", "label-no-excluded-filters-applied": "目前没有需要忽略的文件。可以在下方添加需要忽略的文件。", "label-excluded-filters-applied": "符合下方条件的文件将被忽略:", "label-excluded-filter": "条件", "placeholder-excluded-filter": "请输入文件路径或如 \"/regex/\" 这样的正则表达式" }, "appearance": { "name": "外观", "option-base-theme": "基础颜色", "option-base-theme-description": "设置 Obsidian 的基础颜色。", "option-accent-color": "主题色", "option-accent-color-description": "为 Obsidian 选择一个主题色。主题色将影响选中、链接等元素的颜色。", "dark-theme": "深色", "light-theme": "浅色", "system-theme": "跟随系统", "option-font": "字体", "option-advanced": "高级", "option-interface-font": "界面字体", "option-interface-font-description": "设置 Obsidian 界面字体。在不指定其他字体的情况下,该字体将成为 Obsidian 的基础字体。", "option-text-font": "正文字体", "option-text-font-description": "设置编辑视图和阅读视图中笔记正文的字体。", "option-monospace-font": "代码字体", "option-monospace-font-description": "设置代码块、frontmatter 等代码的字体。", "label-single-font-currently-in-effect": "当前使用的字体是:", "label-multiple-fonts-currently-in-effect": "当前使用的字体是:", "option-font-placeholder": "请输入字体名称...", "label-no-custom-font-set": "当前未指定自定义字体。请在下方添加一个。", "label-font-applied": "列表中第一种字体将被应用。若该字体不存在于当前设备上,则顺延至存在于当前设备上的字体。", "msg-font-not-found": "系统中不存在此字体。", "msg-font-found": "系统中存在此字体。", "label-font-name": "字体名称", "option-community-themes": "查看社区主题", "option-community-themes-description": "预览、使用社区用户创建的优秀主题。", "button-browse-community-themes": "浏览", "option-font-size": "字体大小", "option-font-size-description": "调整编辑面板及预览面板中的字体大小(单位为像素)。", "option-font-size-action": "快速调整字体大小", "option-font-size-action-description": "开启后可通过 Ctrl 与鼠标滚轮(或使用触摸板手势)快速调整字体大小。", "option-themes": "主题", "option-manage-themes-description": "管理已安装的主题,或浏览社区主题。", "option-theme-button-manage": "管理", "option-choice-none": "无", "option-native-menus": "原生菜单", "option-native-menus-desc": "Obsidian 中所有的菜单都会匹配操作系统,不会跟随主题样式", "button-reload-themes": "重新加载主题", "msg-reloaded-themes": "重新加载自定义主题", "button-open-themes-folder": "打开主题文件夹", "option-css-snippets": "CSS 代码片段", "label-no-css-snippets-found": "没有在代码段文件夹中发现 CSS 代码片段。", "no-snippet-description": "CSS 代码片段的存放路径为:\"{{path}}\"。", "button-reload-snippets": "重新加载代码段", "button-open-snippets-folder": "打开代码段文件夹", "msg-reloaded-snippets": "重新加载 CSS 代码片段", "option-toggle-snippet-description": "应用当前代码段。该代码段的存放路径为:\"{{path}}\"。", "label-installed-themes": "已安装主题", "label-screenshot-unavailable": "暂无截图", "label-default-theme": "默认", "tooltip-click-to-enlarge": "点击浏览大图", "button-update": "更新", "label-currently-selected": "正在使用", "option-frame-style": "窗口边框样式", "option-frame-description": "更改 Obsidian 窗口边框的样式。该设置重启应用后生效。", "option-frame-hidden": "隐藏(默认)", "option-frame-obsidian": "Obsidian 风格", "option-frame-native": "原生边框", "option-configure-ribbon": "工具栏", "option-configure-ribbon-desc": "设置哪些按钮需要显示在工具栏上。", "option-mobile-quick-ribbon-item": "快速访问工具栏", "option-mobile-quick-ribbon-item-desc": "点击工具栏上的按钮将激活对应功能。长按按钮将激活菜单。", "button-configure": "设置", "label-additional-ribbon-items": "未显示的按钮", "label-modal-configuration": "工具栏设置", "label-modal-configuration-desc": "选择需要在工具栏中显示的按钮。拖动可以重新排序。", "option-show-view-header": "显示标签页标题栏", "option-show-view-header-desc": "在每个标签页上方显示标题栏。", "msg-updates-found": "有 {{count}} 个社区主题需要更新。", "msg-updates-found_plural": "有 {{count}} 个社区主题需要更新。", "button-check-for-updates": "检查更新", "button-view-updates": "查看更新", "button-update-all-themes": "全部更新", "label-current-themes": "已安装主题", "label-currently-installed": "你目前已经安装了 {{count}} 个主题", "label-currently-installed_plural": "你目前安装了 {{count}} 个主题" }, "hotkeys": { "name": "快捷键", "prompt-filter": "搜索……", "tooltip-delete-hotkey": "删除快捷键", "label-waiting-for-hotkey-press": "按下快捷键……", "tooltip-restore-default": "恢复默认", "tooltip-customize-command": "自定义快捷键", "tooltip-hotkey-single-conflict": "该快捷键与 \"{{command}}\" 冲突", "tooltip-hotkey-multiple-conflicts": "该快捷键与其他 {{count}} 个快捷键冲突", "label-blank-hotkey": "未设置" }, "about": { "name": "关于", "label-commercial-license": "商用许可证", "label-license-key": "许可证密钥", "license-key-placeholder": "你的许可证密钥……", "label-activate-license": "激活许可证", "button-activate": "激活", "label-unknown-version": "无标题", "label-current-version": "当前版本: ", "label-install-version": "(安装程序版本: {{version}})", "label-up-to-date": "你使用的是最新版本!", "label-read-changelog": "阅读更新日志", "label-manual-update-required": "Obsidian 需要进行一次较大的更新来获取最新功能和安全补丁。为此,你需要手动下载安装包并重新安装 Obsidian。", "label-download": "下载", "label-new-version-ready": "准备安装新版本。 ", "label-relaunch-to-update": "重新启动应用以进行更新。", "label-disabled-updates": "更新已禁用。", "label-checking-for-updates": "检查更新……", "button-relaunch": "重新启动应用", "button-check-for-updates": "检查更新", "option-auto-update": "自动更新", "option-auto-update-description": "关闭后 Obsidian 将不会自动更新。", "option-get-help": "获取帮助", "option-get-help-description": "获取关于使用 Obsidian 的帮助。", "button-open": "打开", "option-language": "语言", "option-language-description": "更改界面语言。", "option-insider-build": "接收内部版本", "option-insider-build-description": "自动更新至内部版本以体验最新功能。请注意,内部版本可能不太稳定。", "option-advanced": "高级", "option-hw-acceleration": "硬件加速", "option-hw-acceleration-description": "开启硬件加速,即使用 GPU 让 Obsidian 运行更流畅。", "option-hw-acceleration-warning": "如果关闭此选项,Obsidian 的性能将严重下降。", "option-config-location": "切换配置文件夹", "option-config-location-description": "选用另一个配置文件夹而非默认配置文件夹。配置文件夹名称一定要以句点\".\"开头。", "option-config-location-warning": "配置文件夹路径必须是合法的,并且以句点\".\"开头。", "label-license": "许可证", "label-your-commercial-license-key": "你的商用许可证是 \"{{key}}\"。", "label-commercial-license-info": "注册给用户: \"{{company}}\" - {{seats}} 。有效期至 {{expiry}}。", "label-validating-commercial-license": "正在验证……", "label-invalid-commercial-license": "无效的许可证: ", "button-remove-commercial-license": "注销", "option-catalyst": "Catalyst 个人许可证", "option-catalyst-desc": "你已成为 {{tier}},感谢对 Obsidian 的支持!", "option-catalyst-desc-no-license": "你尚未购买 Catalyst 个人许可证。Catalyst 个人许可证是一种支持 Obsidian 开发的捐赠形式。", "label-app": "App" }, "account": { "name": "帐户", "option-your-account": "你的账户", "option-your-account-desc": "当前登录的账户为 {{name}} ({{email}}).", "option-your-account-desc-no-login": "你没有登录。使用 Obsidian 同步服务、发布服务以及获取内部版本都需要你登录账号。", "button-manage-settings": "修改账户设置", "label-insider": "Insider", "label-supporter": "Supporter", "label-vip": "VIP", "button-upgrade-catalyst": "升级", "option-commercial-license": "商用许可证", "option-commercial-license-desc": "如果你希望将 Obsidian 用于商业目的,那么需要购买商用许可证。", "button-purchase": "购买", "button-log-out": "退出登录", "label-log-in": "登录", "label-sign-up": "注册", "label-email": "邮箱", "placeholder-email": "你的邮箱……", "label-password": "密码", "placeholder-password": "你的密码……", "button-login": "登录", "message-empty-email": "邮箱不能为空。", "message-invalid-email": "无效的电子邮箱。", "message-empty-password": "密码不能为空。", "message-login-failed": "登录失败,请检查你的邮箱和密码。", "label-no-account": "没有帐户? ", "link-sign-up-now": "现在注册" }, "core-plugin": { "plugin-list": "插件列表", "option-search-plugin": "搜索核心插件", "option-search-plugin-description": "通过插件名称或描述来寻找插件。", "placeholder-search-plugin": "输入插件名称或描述……" }, "third-party-plugin": { "name": "第三方插件", "option-restricted-mode": "安全模式", "option-restricted-mode-description": "安全模式已关闭。开启以限制第三方插件运行。", "button-turn-on": "开启", "option-browse-community-plugins": "社区插件市场", "option-browse-community-plugins-description": "浏览、安装社区成员制作的第三方插件。", "button-browse": "浏览", "label-exit-restricted-mode": "退出安全模式", "label-exit-restricted-mode-description-1": "和你在电脑上安装的其他软件一样,第三方插件也可能会带来数据和隐私风险。", "label-exit-restricted-mode-description-2": "我们非常重视你的数据安全,所以我们采取了如下做法:", "label-exit-restricted-mode-description-3": "但即便如此,市场中的插件仍有出错的可能。", "label-code-review": "代码审查", "label-code-review-desc": "插件在上架社区插件市场前需要经过我们的代码审查。", "label-open-source": "开源", "label-open-source-desc": "大多数插件都在 GitHub 上开源,这允许你对插件代码进行审查。", "label-peer-audit": "社区监督", "label-peer-audit-desc": "Obsidian 有一个非常庞大且活跃的社区,社区中的开发者们也会对市场中的插件进行监督。", "label-report-mechanism": "用户反馈", "label-report-mechanism-desc": "我们将根据用户的反馈跟进并处理有问题的插件。", "label-exit-restricted-mode-disable-confirmation": "你想要退出安全模式来启用第三方插件吗?在启用插件前,我们建议你备份好笔记。", "label-learn-more": "获取更多关于插件安全的信息", "button-turn-on-community-plugins": "关闭安全模式", "label-trust-author": "你是否信任这个仓库的作者?", "label-trust-author-description-1": "这个仓库内容未知,并且内置了一些插件。", "label-trust-author-description-2": "请注意,未知来源的插件将带来数据和隐私风险。", "label-trust-author-description-3": "如果你不信任该仓库的作者,我们建议你在安全模式中打开该仓库,以防止仓库中插件运行。", "button-enable-plugins": "信任仓库作者并启用插件", "button-dont-trust-author": "在安全模式中打开该仓库", "placeholder-community-plugins": "搜索社区插件……", "msg-failed-load-plugins": "无法加载社区插件", "label-installed": "已安装", "button-install": "安装", "button-enable": "启用", "button-disable": "禁用", "button-copy-share-link": "复制分享链接", "button-donate": "捐赠", "label-no-results-found": "未找到相关插件", "msg-failed-to-load-manifest": "无法加载插件列表", "label-version": "版本: {{version}}", "label-currently-installed-version": " (当前已安装版本: {{version}})", "label-by-author": "作者:", "label-repository": "Github 仓库地址:", "label-last-update": "上次更新: ", "tooltip-view-last-update": "查看最新版本", "label-unsupported": "此插件不支持你的设备。", "button-update": "更新", "label-no-readme": "这个插件没有提供 README 文件。", "msg-installing-plugin": "正在安装插件 \"{{name}}\"……", "msg-failed-to-install-plugin": "无法安装插件 \"{{name}}\" ", "msg-successfully-installed-plugin": "成功安装插件 \"{{name}}\"。", "label-installed-plugins": "已安装插件", "button-reload-plugins": "重新加载插件", "msg-reloaded-third-party-plugins": "重新加载第三方插件", "label-uninstall": "卸载", "label-uninstall-plugin": "卸载插件", "label-uninstall-plugin-confirmation": "你确定要卸载此插件吗?这将删除插件的文件夹。", "button-open-plugins-folder": "打开插件文件夹", "button-check-for-updates": "检查更新", "button-update-all-plugins": "全部更新", "label-current-plugins": "插件安装情况", "label-currently-installed": "你目前已经安装了 {{count}} 个插件。", "label-currently-installed_plural": "你目前已经安装了 {{count}} 个插件。", "label-debug-startup-time": "显示启动时间", "label-debug-startup-time-description": "启动 Obsidian 时,显示各插件初始化所需的时间及其总和。", "msg-no-updates-found": "没有插件需要更新。", "msg-updates-found": "发现 {{count}} 个插件需要更新。", "msg-updates-found_plural": "发现 {{count}} 个插件需要更新。", "msg-update-plugin": "更新至版本 {{version}}", "option-search-installed-plugin": "搜索已安装插件", "option-search-installed-plugin-description": "通过插件名称或描述来筛选已安装的插件。", "placeholder-search-installed-plugin": "搜索已安装的插件……", "show-installed-only": "仅显示已安装插件", "label-donate-modal-title": "捐款支持 {{name}} 插件", "label-donate-modal-text1": "插件开发者为这款插件付出了大量的时间与精力。如果你觉得这个插件很有用,就支持一下开发吧!", "label-donate-modal-text2": "你捐赠的所有金额都将发给插件开发者,Obsidian 不会收取中间费用(但资金交易平台可能需要收取手续费)。", "label-donate-modal-text3": "感谢你对开发的支持!", "label-support-this-plugin": "捐赠网址:", "label-search-summary": "当前显示了 {{pluginCount}}:", "label-by-popularity": "按下载量", "label-by-released": "按发布时间", "label-by-updated": "按更新时间", "label-alphabetical": "按名称顺序", "label-last-updated": "更新于 {{time}}" }, "mobile-toolbar": { "name": "移动端工具栏", "option-configure-quick-action": "快捷命令", "option-configure-quick-action-description": "Obsidian 移动端允许你通过下滑手势快速触发一个命令。当前快捷命令为 \"{{command}}\"。", "button-configure": "设置快捷命令", "placeholder-select-quick-action": "选择一条命令……", "manage-toolbar-options": "管理工具栏", "option-internal-link": "插入内部链接", "option-internal-embed": "嵌入内容", "option-tag": "添加标签", "option-heading": "小标题", "option-strikethrough": "添加删除线", "option-highlight": "高亮", "option-code": "代码块", "option-blockquote": "引用", "option-markdown-link": "添加 Markdown 链接", "option-bullet-list": "无序列表", "option-numbered-list": "有序列表", "option-indent-list": "缩进列表", "option-unindent-list": "取消列表缩进", "option-undo": "撤销", "option-redo": "重做", "option-move-caret-up": "向上移动光标", "option-move-caret-down": "向下移动光标", "option-move-caret-left": "向左移动光标", "option-move-caret-right": "向右移动光标", "option-first-line": "跳至第一行", "option-last-line": "跳至最后一行", "option-toggle-keyboard": "切换键盘", "option-configure-toolbar": "设置移动工具栏", "option-added-options": "已添加的选项", "option-more-toolbar-options": "更多工具栏选项", "option-attach": "插入附件", "option-add-command": "添加命令", "option-add-command-description": "选择需要添加到工具栏的命令。" } }, "editor": { "search": { "placeholder-find": "查找……", "placeholder-replace": "替换……", "label-previous": "前一个", "label-next": "后一个", "label-all": "选择全部", "label-exit-search": "退出搜索", "label-replace": "替换", "label-replace-all": "全部替换" }, "link-suggestion": { "label-type-hash": "输入 #", "label-link-heading": "可以链接到标题", "label-type-block": "输入 ^", "label-link-block": "链接文本块", "label-type-pipe": "输入 |", "label-change-display-text": "指定显示的文本", "label-no-match-found": "未找到匹配结果" }, "spellcheck": { "no-suggestion": "没有建议……", "add-to-dictionary": "添加到词典" }, "menu": { "edit-link": "编辑链接" }, "heading-suggestion": { "label-no-heading": "没有小标题", "label-heading-level": "小标题 {{level}}" }, "print-modal": { "title": "导出为 PDF", "caption": "使用以下设置将 \"{{filename}}\" 导出为 PDF。", "setting-page-size": "页面尺寸", "setting-page-size-a3": "A3", "setting-page-size-a4": "A4", "setting-page-size-a5": "A5", "setting-page-size-legal": "Legal", "setting-page-size-letter": "Letter", "setting-page-size-tabloid": "Tabloid", "setting-include-file-name": "将笔记名作为标题", "setting-landscape": "横向打印", "setting-margin": "页边距", "setting-margin-default": "默认", "setting-margin-minimal": "小", "setting-margin-none": "无", "setting-downscale-percent": "缩放百分比", "button-export-to-pdf": "导出" }, "link-popover": { "tooltip-follow-link": "打开链接", "tooltip-open-link": "打开链接", "tooltip-search-tag": "搜索标签" } }, "interface": { "embed-cannot-find": "未找到:", "embed-open-in-default-app-tooltip": "在默认应用中打开", "empty-sidebar": "侧边栏为空,请尝试拖动一个面板到此处。", "sidebar-expand": "展开", "sidebar-collapse": "收起", "msg-fail-to-save-file": "\"{{filepath}}\" 文件保存失败。 {{message}}。", "no-file": "未打开文件", "msg-file-changed": "\"{{file}}\" 已被外部修改,正在自动合并更改。", "switch-vault": "打开其他仓库", "help": "帮助", "settings": "设置", "drag-to-rearrange": "拖动可调整布局", "msg-switched-to-read": "已将默认视图切换为阅读视图。", "msg-switched-to-edit": "已将默认视图切换为编辑视图。", "msg-upgrade-installer": "若要使用此功能,请到我们的网站上下载并安装 Obsidian 的最新版本。", "tooltip-restore-default-settings": "恢复默认设置", "label-copy": "复制到剪贴板", "copied_generic": "已复制到剪贴板", "copied": "{{item}} 已复制到你的剪贴板", "url": "Url", "msg-open-file-through-uri": "打开文件 \"{{path}}\"", "msg-file-not-found-through-uri": "文件 \"{{name}}\" 未找到。", "delete-action-short-name": "删除", "msg-indexing": "Obsidian 正在为当前仓库创建索引……\n索引只会进行一次。\n索引完成前一些功能可能无法使用。", "msg-indexing-complete": "索引完成。", "msg-sandbox-vault": "这是一个沙箱仓库。\n该仓库中所有修改将不会保存。", "label-enter-to-create": "按下回车以创建", "label-update-available": "可以更新", "label-debug-info": "调试信息", "button-learn-more": "了解更多", "button-not-now": "下次再说", "button-add": "添加", "button-manage": "管理", "label-new-tab": "新标签页", "msg-tab-busy": "当前标签页正忙,请稍后再试", "empty-state": { "no-file-open": "未打开文件", "create-new-file": "创建新文件", "go-to-file": "打开文件", "see-recent-files": "查看近期文件", "close": "关闭标签页", "unknown-pane-title": "插件不再活动", "unknown-pane-desc": "创建此标签页的插件({{type}}) 已不再活动" }, "menu": { "edit-view": "该面板处于编辑视图中", "read-view": "该面板处于阅读视图中", "switch-to-edit-view": "点击此处切换至编辑视图", "switch-to-read-view": "点击此处切换至阅读视图", "mod-click-open-new-tab": "{{key}}+单击以在新标签页中打开", "find": "查找……", "replace": "替换……", "edit": "编辑", "preview": "预览", "more-options": "更多选项", "close": "关闭", "close-others": "关闭其他标签页", "close-right": "关闭右侧所有标签页", "pin": "锁定", "unpin": "取消锁定", "unlink-tab": "取消标签页关联", "link-tab": "关联标签页...", "toggle-source-mode": "源码模式", "toggle-reading-view": "阅读视图", "delete-file": "删除文件", "create-file": "创建此文件", "open-link": "打开链接", "open-in-new-tab": "在新标签页中打开", "open-to-the-right": "在新面板中打开", "copy-url": "复制链接", "close-current-tab": "关闭当前标签页", "copy": "复制", "cut": "剪切", "paste": "粘贴", "paste-as-plain-text": "以纯文本形式粘贴", "select-all": "全选", "rename-heading": "重命名当前小标题……", "rename-blockid": "重命名当前块 ID...", "open-in-new-window": "在新窗口中打开", "move-to-new-window": "移动至新窗口", "open-in-browser": "在浏览器中打开", "stack-tabs": "堆叠标签页", "unstack-tabs": "取消堆叠标签页" }, "tooltip": { "click-to-expand": "点击以展开", "click-to-collapse": "点击以折叠", "alias": "别名", "not-created-yet": "尚未创建,请选择创建" }, "start-screen": { "label-version": "版本", "option-open-folder-as-vault": "打开本地仓库", "option-open-folder-as-vault-description": "将一个本地文件夹作为仓库在 Obsidian 中打开。", "option-create-vault": "新建仓库", "option-create-vault-description": "在指定文件夹下创建一个新的仓库。", "option-connect-obsidian-sync": "同步远程仓库", "option-connect-obsidian-sync-description": "将 Obsidian 同步服务中的远程仓库同步到本地。", "option-new-vault-name": "仓库名称", "option-new-vault-name-description": "给新仓库起一个名字", "option-new-vault-location": "仓库位置", "option-new-vault-location-description": "指定新仓库的存放位置。", "label-new-vault-location-preview": "新仓库将存放于:", "option-reveal-vault-in-explorer": "在系统资源管理器中显示仓库文件夹", "option-reveal-vault-in-explorer-mac": "Reveal vault in Finder", "option-rename-vault": "重命名仓库...", "msg-error-rename-exists": "该名称已被使用。", "msg-error-nested": "不能将仓库移动到其子文件夹下。", "msg-error-rename-open": "不能重命名正在打开的仓库。", "msg-rename-failed": "重命名仓库失败。", "msg-rename-success": "成功重命名仓库。", "option-move-vault": "移动仓库...", "msg-move-select-dest": "选择要移动到的文件夹", "msg-error-move-exists": "当前路径中已存在一个仓库。", "msg-error-move-open": "不能移动正在打开的仓库。", "msg-move-failed": "移动仓库失败。", "msg-move-success": "移动仓库成功。", "option-remove": "从仓库列表中移除", "button-quick-start": "快速开始", "button-open": "打开", "button-browse": "浏览", "button-connect": "连接", "button-create-vault": "创建", "button-back": "返回", "msg-empty-vault-name": "仓库名称不能为空。", "msg-invalid-folder": "请选择一个有效的文件夹。", "msg-failed-to-create-vault": "无法创建仓库文件夹。", "msg-failed-to-create-vault-at-location": "无法在指定位置创建仓库文件夹。请仔细检查位置和权限。", "msg-error-failed-to-open-vault": "无法打开。", "msg-error-remove-current-open-vault": "无法删除当前打开的仓库。", "option-get-help": "获取帮助", "option-user-email": "邮箱", "placeholder-your-email": "你的邮箱...", "option-user-password": "密码", "placeholder-your-password": "你的密码...", "button-sign-in": "登录", "button-setup": "设置", "option-connect-vault-desc": "将该远程仓库同步到当前设备中。", "tooltip-own-vault": "这是你自己的远程仓库。", "tooltip-shared-vault": "这是他人分享给你的远程仓库。" }, "drag-and-drop": { "insert-link-here": "在此处插入链接", "insert-links-here": "在此处插入链接", "move-into-folder": "移动至 \"{{folder}}\"", "star-this-file": "为此文件打上星标", "star-these-files": "为这些文件打上星标", "open-in-this-tab": "在当前标签页中打开", "open-as-tab": "作为新的标签页打开" }, "window": { "maximize": "最大化", "minimize": "最小化", "restore-down": "向下还原", "close-window": "关闭", "go-back": "后退", "go-forward": "前进" }, "start-up": { "loading-obsidian": "正在加载 Obsidian……", "obsidian-load-error": "加载 Obsidian 时发生错误。", "button-reload-app": "重新加载", "button-reload-app-in-safe-mode": "在安全模式下重新启动 Obsidian", "button-open-another-vault": "打开另一个仓库", "loading-components": "加载组件中……", "loading-plugins": "加载插件中……", "loading-vault": "加载仓库中……", "msg-failed-to-load-vault": "加载仓库失败: ", "loading-cache": "加载缓存中……", "loading-workspace": "加载工作区中……" }, "mobile": { "action-import": "导入仓库中", "action-choose-file-to-insert": "选择要插入的文件", "action-insert-text-into-file": "插入文本至文件 {{filename}}", "action-insert-link-into-file": "插入链接至文件 {{filename}}", "msg-importing": "导入中……", "msg-import-success": "导入成功", "msg-failed-to-import-file": "导入文件 {{filename}} 失败", "msg-back-again-to-exit": "再次点击返回以退出" }, "help-screen": { "label-official-help-site": "官方帮助网站", "label-official-help-site-desc": "可阅读不同语言的 Obsidian 官方帮助文档。", "action-visit": "浏览", "label-discord-chat": "Discord 频道", "label-discord-chat-desc": "Discord 是一个与世界上 Obsidian 用户交流的好地方。", "action-join": "加入", "label-forum": "官方论坛", "label-forum-desc": "在官方论坛,你可以发布功能请求,提交 Bug,或是和其他用户互帮互助,就软件使用、知识管理等话题进行深入讨论。", "label-sandbox-vault": "沙箱仓库", "label-sandbox-vault-desc": "尝试各种新功能的好地方。不过请注意,该仓库中所有修改都不会被保存。" } }, "commands": { "save-file": "保存当前文件", "follow-cursor-link": "打开光标处的链接", "open-cursor-link-in-new-tab": "在新标签页中打开光标处链接", "open-cursor-link-to-the-right": "在新面板中打开光标处链接", "open-cursor-link-in-new-window": "在新窗口中打开光标处链接", "navigate-tab-above": "聚焦上方标签页组", "navigate-tab-below": "聚焦下方标签页组", "navigate-tab-left": "聚焦左侧标签页组", "navigate-tab-right": "聚焦右侧标签页组", "toggle-pin": "解锁/锁定", "split-right": "左右分屏", "split-down": "上下分屏", "toggle-stacked-tabs": "堆叠/取消堆叠标签页", "navigate-back": "返回", "navigate-forward": "前进", "use-dark-mode": "使用深色模式", "use-light-mode": "使用浅色模式", "change-theme": "更换主题", "search-current-file": "在当前笔记中查找", "search-replace-current-file": "在当前笔记中查找并替换", "open-settings": "打开设置", "open-help": "查看帮助", "toggle-edit": "切换编辑/阅读视图", "toggle-source-mode": "切换实时阅览/源码模式", "delete-current-file": "删除当前文件", "new-tab": "新标签页", "close-all-tabs": "关闭所有标签页", "close-active-tab": "关闭当前标签页", "close-other-tabs": "关闭其他标签页", "toggle-left-sidebar": "折叠/展开左侧边栏", "toggle-right-sidebar": "折叠/展开右侧边栏", "toggle-default-new-tab-mode": "切换新标签页的默认视图", "focus-editor": "将焦点切换至编辑区", "toggle-fold": "折叠/展开当前行", "fold-all": "折叠所有标题和列表", "unfold-all": "展开所有标题和列表", "fold-more": "折叠", "fold-less": "展开", "swap-line-up": "与上一行互换", "swap-line-down": "与下一行互换", "remove-heading": "移除小标题格式", "toggle-heading": "设为小标题 {{level}}", "toggle-bold": "加粗/取消加粗", "toggle-italics": "倾斜/取消倾斜", "toggle-highlight": "高亮/取消高亮", "toggle-comments": "注释/取消注释", "insert-link": "插入链接", "toggle-spellcheck": "开启/关闭拼写检查", "delete-paragraph": "删除段落", "toggle-checklist": "切换待办事项状态", "cycle-list-checklist": "切换列表/待办事项", "insert-callout": "插入标注", "edit-file-title": "编辑文件名", "copy-path": "复制当前文件的路径", "copy-url": "复制 Obsidian 链接", "export-pdf": "导出为 PDF", "reload": "重新加载 Obsidian(不保存当前编辑内容)", "undo-close-tab": "重新打开标签页", "context-menu": "在光标处显示上下文菜单", "show-debug-info": "显示调试信息", "always-on-top": "将当前窗口置顶", "zoom-in": "放大", "zoom-out": "缩小", "reset-zoom": "重置缩放", "toggle-preview": "切换编辑/预览视图", "move-to-new-window": "将当前面板移动至新窗口", "open-in-new-window": "在新窗口中打开当前面板", "rename-current-file": "重命名当前文件" }, "dialogue": { "label-link-affected": "这将影响 {{files}} 中的 {{links}}。", "msg-updated-links": "更新 {{files}} 中的 {{links}}。", "label-update-links": "更新链接", "label-confirm-update-link-to-file": "你是否需要更新与此文件相关联的内部链接?", "button-always-update": "总是更新", "button-just-once": "仅此一次", "button-do-not-update": "不做更新", "label-confirm-deletion": "你确定要删除 \"{{filename}}\" 吗?", "label-move-to-system-trash": "它将被移动到系统回收站里。", "label-move-to-vault-trash": "它将被移动到软件回收站(即仓库目录中隐藏的 \".trash\" 文件夹)里。", "label-permanent-delete": "它将被永久删除。", "label-non-empty-folder": "这不是空白文件夹。", "label-delete-folder-warning": "如果继续,此文件夹内的所有文件将被删除。", "label-delete-folder": "删除文件夹", "button-delete": "删除", "button-delete-do-not-ask-again": "删除,并且不要再询问。", "label-do-not-ask-again": "不再询问", "label-existing-backlink": "目前有 {{links}}与该文件相关。", "label-existing-backlink_plural": "现在有 {{links}} 指向该笔记。", "label-delete-file": "删除文件", "button-manage": "管理", "button-cancel": "取消", "button-done": "完成", "button-save": "保存", "button-stop": "暂停", "button-continue": "继续", "preparing-pdf": "正在生成 PDF……", "label-rename-file": "重命名文件", "label-new-name": "新文件名", "msg-rename-success": "已重命名该文件。", "label-rename-heading": "重命名小标题", "label-rename-blockid": "重命名块 ID" }, "menu-items": { "new-file": "创建笔记", "new-file-to-the-right": "在右侧新建笔记", "new-window": "新窗口", "open-switcher": "快速切换...", "open-vault": "打开仓库...", "close-tab": "关闭标签页", "close-window": "关闭窗口", "find": "查找", "replace": "替换", "insert-callout": "标注", "insert-markdown-link": "Markdown 链接", "insert-wikilink": "链接", "set-heading": "小标题 {{level}}", "no-heading": "无小标题", "insert-quote": "引用", "export-pdf": "导出 PDF", "toggle-bullet-list": "无序列表", "toggle-numbered-list": "有序列表", "toggle-checklist": "任务列表", "toggle-bold": "加粗", "toggle-code": "代码块", "toggle-comment": "注释", "toggle-italics": "倾斜", "toggle-highlight": "高亮", "toggle-strikethrough": "删除线", "toggle-comments": "注释", "fold-all": "折叠全部", "unfold-all": "展开全部", "fold-more": "折叠", "fold-less": "展开", "source-mode": "源码模式", "reading-view": "阅读视图", "show-debug-info": "显示调试信息", "navigate-back": "后退", "navigate-forward": "前进", "toggle-left-sidebar": "折叠/展开左侧边栏", "toggle-right-sidebar": "折叠/展开右侧边栏", "split-right": "左右分屏", "split-down": "上下分屏", "release-notes": "更新说明" }, "plugins": { "name": "插件", "file-explorer": { "name": "文件列表", "desc": "查看仓库中所有文件。", "action-open": "打开文件列表", "action-show": "显示文件列表", "action-create-note": "新建笔记", "action-create-note-to-the-right": "在右侧创建笔记", "action-collapse-all": "全部折叠", "action-expand-all": "全部展开", "action-new-note": "新建笔记", "action-new-folder": "新建文件夹", "action-change-sort": "排序", "action-reveal-file": "在文件列表中显示当前文件", "action-reveal-active-file": "在文件列表中显示当前文件", "command-move-file": "将文件移动到其他文件夹", "action-move-file": "将文件移动到……", "action-move-folder": "将文件夹移动到……", "action-move-items": "将 {{count}} 个文件移动至...", "prompt-type-folder": "输入文件夹名称", "label-no-folders": "未找到相关文件夹。", "instruction-navigate": "导航", "instruction-move": "移动", "instruction-dismiss": "退出", "label-sort-a-to-z": "文件名 (A-Z)", "label-sort-z-to-a": "文件名 (Z-A)", "label-sort-new-to-old": "编辑时间(从新到旧)", "label-sort-old-to-new": "编辑时间(从旧到新)", "label-sort-created-old-to-new": "创建时间(从旧到新)", "label-sort-created-new-to-old": "创建时间(从新到旧)", "menu-opt-new-note": "新建笔记", "menu-opt-new-folder": "新建文件夹", "menu-opt-set-attachment-folder": "将其设置为附件文件夹", "menu-opt-rename": "重命名", "menu-opt-delete": "删除", "menu-opt-make-copy": "创建副本", "msg-invalid-characters": "文件名不能包含下列字符: ", "msg-unsafe-characters": "如果文件名中包含以下任何一个字符,链接将不起作用:", "msg-file-already-exists": "已经存在一个同名文件", "msg-empty-file-name": "文件名不能为空。", "msg-bad-dotfile": "文件名不能以句点开头。", "tooltip-modified-time": "最后修改于 {{time}}", "tooltip-created-time": "创建于 {{time}}", "tooltip-folders-files-count": "{{fileCount}}, {{folderCount}}", "action-move-file-short-name": "移动", "label-untitled-file": "未命名", "label-untitled-folder": "未命名", "msg-set-attachment-folder": "现在起附件将被保存在 \"{{path}}\" 。" }, "search": { "name": "搜索", "desc": "在所有笔记中搜索关键词。", "action-open-search": "在所有文件中搜索", "label-collapse-results": "折叠搜索结果", "label-match-case": "区分大小写", "label-explain-search-term": "说明搜索含义", "label-more-context": "显示上下文", "prompt-start-search": "输入并开始搜索……", "label-match-text": "匹配文本: ", "label-match-regex": "匹配正则表达式: ", "label-match-exact-text": "精确匹配文本: ", "label-match-all": "匹配所有: ", "label-match-any": "匹配任何: ", "label-excluding": "不包括: ", "label-case-sensitive": "区分大小写", "label-case-insensitive": "忽略大小写", "label-match-file-path": "匹配文件路径: ", "label-match-file-name": "匹配文件名: ", "label-match-content": "匹配文件内容: ", "label-match-task": "匹配任务列表:", "label-match-task-todo": "匹配待办任务:", "label-match-task-done": "匹配已完成任务:", "label-match-line": "匹配行: ", "label-match-block": "匹配块:", "label-match-section": "匹配章节: ", "label-match-tag": "匹配标签: ", "label-no-matches": "未找到匹配结果。", "matches-with-count": "…… 文中还有 {{count}} 处匹配。", "matches-with-count_plural": "…… 文中还有 {{count}} 处匹配。", "label-copy-search-results": "复制搜索结果", "button-copy-results": "复制结果", "msg-successfully-copied": "结果已复制到剪贴板。", "option-show-path": "显示路径", "option-show-path-description": "显示文件的完整路径,而不只是文件名。", "option-link-style": "链接样式", "option-link-style-description": "(可选)将结果中的每个文件转换为链接。", "option-choice-link-style-none": "无", "option-choice-link-style-wikilink": "Wiki 链接", "option-choice-link-style-markdown-link": "Markdown 链接", "option-list-prefix": "列表前缀", "option-list-prefix-description": "(可选)给结果中每个文件添加列表项前缀。", "option-choice-list-style-none": "无", "option-choice-list-style-dash": "无序列表(-)", "option-choice-list-style-asterisk": "无序列表(*)", "option-choice-list-style-numbered": "有序列表", "tooltip-clear-search": "清除搜索", "label-search-options": "搜索选项", "tooltip-read-more": "了解更多", "label-history": "搜索历史", "tooltip-clear-history": "清除搜索历史", "label-path-option-description": "匹配文件路径", "label-file-name-option-description": "匹配文件名", "label-tag-option-description": "搜索标签", "label-line-option-description": "以行为单位搜索关键词", "label-section-option-description": "以章节为单位搜索关键词", "menu-opt-search-for": "查找 \"{{keyword}}\"" }, "quick-switcher": { "name": "快速切换", "desc": "输入关键词即可跳转到相应文件(按下 Ctrl/Cmd+O 激活此功能)。", "short-name": "快速切换", "action-open": "打开快速切换", "instruction-navigate": "导航", "instruction-open": "打开", "instruction-open-in-new-tab": "在新标签页中打开", "instruction-open-to-the-right": "在新面板中打开", "instruction-create": "创建", "instruction-dismiss": "退出", "label-no-note-create-new": "未发现该笔记。按下回车键以创建该笔记。", "prompt-type-file-name": "输入以切换或创建文件……", "label-enter-to-create": "创建该笔记", "tooltip-not-created-yet": "该笔记尚未建立,选择以创建", "option-show-existing-only": "仅显示已创建的笔记", "option-show-existing-only-description": "是否在快速切换中显示那些已赋予名称、但尚未建立的笔记。", "option-show-attachments": "显示附件", "option-show-attachments-desc": "在快速切换中显示如图片、视频、PDF 等附件文件。", "option-show-all-file-types": "显示所有类型文件", "option-show-all-file-types-desc": "显示所有类型文件,即使是那些无法在 Obsidian 中打开的文件。这些文件将使用该文件类型的系统默认应用打开。" }, "graph-view": { "name": "关系图谱", "desc": "总览笔记间的联系。", "action-open": "查看关系图谱", "action-open-local": "打开局部关系图", "action-copy-screenshot": "复制截图", "tab-title": "{{displayText}} 的关系图", "label-filters": "筛选", "prompt-filter-nodes": "搜索文件……", "option-depth": "深度", "option-depth-description": "显示从当前节点出发经 n 段链接可到达的节点,n 为设置值。", "option-neighbor-links": "其他节点间的链接", "option-neighbor-links-description": "显示其他节点之间的链接", "option-forelinks": "正向链接", "option-forelinks-description": "显示图中每个节点的正向链接。", "option-backlinks": "反向链接", "option-backlinks-description": "显示图中每个节点的反向链接。", "option-show-tags": "标签", "option-show-tags-description": "在图谱中显示标签以及与之相关的链接", "option-show-attachments": "附件", "option-show-attachments-description": "在图谱中显示附件以及与之相关的链接", "option-show-existing-files-only": "仅显示已创建的笔记", "option-show-existing-files-only-description": "开启后,图谱中不显示未被创建的笔记以及与之相关的链接。", "option-show-orphans": "孤立文件", "option-show-orphans-description": "开启后,在图谱中显示未链接到任何其他文件的笔记", "label-display": "外观", "option-show-arrows": "箭头", "option-show-arrows-description": "放大后,显示链接的箭头", "option-text-fade": "文本透明度", "option-node-size": "节点大小", "option-link-thickness": "连线粗细", "label-forces": "力度", "option-center-force": "图谱向心力", "option-link-force": "相连节点间的吸引力", "option-link-distance": "连线长度", "option-repel-force": "节点间的排斥力", "tooltip-open-graph-settings": "打开图谱设置", "msg-screenshot-copied": "屏幕截图已复制到剪贴板。", "label-groups": "颜色组", "placeholder-enter-query": "请输入检索式……", "tooltip-delete-graph": "删除组", "button-new-group": "新建颜色组", "tooltip-click-to-change-drag-to-reorder": "点击可更改颜色\n拖动可对颜色组排序", "action-timelapse": "播放关系图谱生长动画", "tooltip-start-timelapse-animation": "播放关系图谱生长动画", "button-animate-timelapse": "播放动画" }, "backlinks": { "name": "反向链接", "desc": "在状态栏中显示指向当前笔记的链接的情况。", "action-open": "打开当前笔记的反向链接面板", "action-show": "显示反向链接标签页", "action-open-for-current": "打开当前笔记的反向链接面板", "action-toggle-backlinks-in-document": "在页面中显示反向链接", "menu-opt-backlinks-in-document": "在页面中显示反向链接", "label-linked-mentions": "链接当前文件", "label-no-backlinks": "没有笔记链接当前文件", "label-unlinked-mentions": "提到当前文件名", "label-show-search": "筛选", "label-link-button-text": "转为链接", "tab-title": "{{displayText}} 的反向链接", "label-no-unlinked-mentions": "没有笔记提到当前文件名", "ellipsis": "……", "option-backlink-in-document": "在页面中显示反向链接", "option-backlink-in-document-desc": "在面板底部显示当前页面的反向链接。" }, "outgoing-links": { "name": "出链", "desc": "显示当前笔记中已存在的链接并检测可能存在的链接。", "action-open": "打开当前笔记的出链面板", "action-show": "显示出链标签页", "action-open-for-current": "打开当前笔记的出链面板", "tab-title": "{{displayText}} 的出链", "label-links": "当前笔记中的链接", "label-no-links": "当前笔记中不存在链接", "label-unlinked-mentions": "当前笔记中潜在的链接", "tooltip-link-file": "链接该文件", "tooltip-not-created": "尚未创建" }, "tag-pane": { "name": "标签列表", "desc": "显示所有标签及其出现的次数。", "action-show": "显示标签列表", "label-no-tags": "未发现标签。", "label-sort-by-name-a-to-z": "标签名称 (A-Z)", "label-sort-by-name-z-to-a": "标签名称 (Z-A)", "label-sort-by-frequency-high-to-low": "使用频次 (从高到低)", "label-sort-by-frequency-low-to-high": "使用频次 (从低到高)", "action-show-nested-tags": "显示嵌套标签", "action-collapse-all": "全部折叠", "action-expand-all": "全部展开" }, "page-preview": { "name": "页面预览", "desc": "开启后鼠标悬停在内部链接上时将显示预览。编辑模式下需要在鼠标悬停的同时按住 Ctrl/Cmd 键才可预览(该设置可调节)。", "label-empty-note": "\"{{linktext}}\" 未创建,点击以创建。", "label-source-editor": "编辑模式", "label-source-preview": "预览模式", "label-source-search": "搜索标签页、反向链接标签页和出链标签页", "label-require-mod": "需要按住 {{key}} 来触发悬停预览的情景" }, "starred": { "name": "星标", "desc": "给常用的文件和搜索结果添加星标。", "action-show": "显示星标标签页", "action-toggle": "为当前文件增加/取消星标", "action-toggle-search": "为当前搜索结果增加/取消星标", "action-star": "星标", "action-unstar": "取消", "menu-opt-remove": "移除", "msg-successfully-starred": "成功星标了 {{type}} \"{{title}}\"。", "msg-removed-starred": "移除了 {{type}} \"{{title}}\" 的星标。", "msg-cannot-find-path": "在 \"{{path}}\" 处未发现文件。" }, "custom-css": { "name": "自定义主题", "desc": "加载并使用 \"obsidian.css\" 主题。", "setting-community-themes": "社区主题", "msg-fetching-themes": "正在获取社区主题数据……", "prompt-filter": "搜索……", "label-dark-theme-only": "仅限有深色配色的主题", "label-light-theme-only": "仅限有浅色配色的主题", "label-use": "使用", "label-stop-use": "禁用该主题", "label-install-and-use": "下载并使用", "label-update": "更新", "label-no-readme": "这个主题没有提供 README 文件", "tooltip-remove-theme": "删除主题", "label-visit-on-github": "访问 GitHub", "msg-load-error": "无法加载社区主题,请检查你的网络。", "msg-now-using-theme": "你正在使用 {{title}} 主题。", "msg-deleted-theme": "主题 {{title}} 已被删除。", "msg-updated-theme": "主题 {{title}} 已更新。", "label-installed": "已下载", "label-legacy": "旧版", "button-update-all-themes": "全部更新", "msg-failed-load-themes": "无法加载社区主题", "msg-no-updates-found": "没有找到任何主题", "msg-updates-found": "找到 {{count}} 个可更新的主题", "msg-updates-found_plural": "找到 {{count}} 可更新的主题", "msg-failed-to-install-theme": "无法安装 \"{{name}}\" 主题", "msg-successfully-installed-theme": "成功安装 \"{{name}}\" 主题", "msg-installing-theme": "正在安装 \"{{name}}\" 主题.", "label-search-summary": "显示 {{themeCount}}:", "label-update-available": "有可用更新" }, "command-palette": { "name": "命令面板", "desc": "无需界面或快捷键操作,输入一个命令即可完成相应功能。", "action-open": "打开命令面板", "instruction-navigate": "导航", "instruction-use": "使用", "instruction-dismiss": "退出", "label-no-commands": "未发现命令。", "prompt-type-command": "输入命令……", "label-pinned-commands": "置顶命令", "option-add-new-pin": "新的置顶命令", "option-add-new-pin-description": "在你未进行检索时,置顶命令将优先出现在命令面板的顶端。" }, "markdown-format-importer": { "name": "Markdown 格式转换器", "desc": "将其他应用中的 Markdown 格式转换为 Obsidian 支持的格式。", "action-open": "打开 Markdown 格式转换器", "option-roam-tag-fixer": "Roam Research 标签转换", "option-roam-tag-fixer-description": "将 Roam Research 中的 \"#tag\" 和 \"#[[tag]]\" 转换为 \"[[tag]]\"。", "option-roam-highlight-fixer": "Roam Research 高亮标签转换", "option-roam-highlight-fixer-description": "将 Roam Research 中的 \"^^highlight^^\" 转换为 \"==highlight==\"。", "option-roam-todo-converter": "Roam Research 待办标签转换", "option-roam-todo-converter-description": "将 Roam Research 中的 \"{{[[TODO]]}}\" 转换为 \"[ ]\"。", "option-bear-highlight-fixer": "Bear 高亮标签转换", "option-bear-highlight-fixer-description": "将 Bear 中的 \"::highlight::\" 转换为 \"==highlight==\"。", "zettelkasten-link-fixer": "ZK 卡片链接转换", "zettelkasten-link-fixer-description": "将 ZK 卡片中使用的 \"[[UID]]\" 链接转换为 \"[[UID 文件名]]\" 的形式。", "zettelkasten-link-beautifier": "美化 ZK 卡片链接", "zettelkasten-link-beautifier-description": "将 ZK 卡片中使用的 \"[[UID]]\" 链接美化为 \"[[UID 文件名|文件名]]\" 的形式。", "msg-all-files-warning": "警告:转换器将对仓库中所有文件进行修改,而不仅是当前文件。", "msg-override-files-warning": "你的文件将被修改。请在转换前做好备份。", "label-start-conversion": "开始转换", "label-stop": "停止", "label-go-back": "返回", "label-done": "完成", "label-processing": "正在处理……", "label-cancelling": "取消……", "label-finished": "完成!", "label-processed-files": "处理的文件", "label-modified-files": "修改的文件", "label-total-replacements": "全部替换" }, "daily-notes": { "name": "日记", "desc": "打开今天的日记。如果该日记不存在,则创建该日记。", "short-name": "日记", "action-open": "打开/创建今天的日记", "action-open-previous": "打开前一天的日记", "action-open-next": "打开后一天的日记", "action-insert-text": "在日记中插入文本", "action-insert-link": "在日记中插入链接", "msg-fail-format": "创建日记未成功。 \"{{format}}\" 不是有效的格式。", "msg-fail-folder": "创建日记未成功。 未找到 \"{{folderOption}}\" 文件夹。", "msg-fail-template-file": "创建日记未成功。未找到 \"{{template}}\" 模板文件。", "msg-no-previous": "没有更旧的日记了。", "msg-no-next": "没有更新的日记了。", "option-date-format": "日期格式", "label-refer-to-syntax": "更多语法,请参阅: ", "label-syntax-link": "时间格式参考", "label-syntax-live-preview": "这是当前所用格式的样例: ", "option-new-file-location": "新建日记的存放位置", "option-new-file-location-description": "指定新建日记的存放路径。", "option-template": "日记模板位置", "option-template-description": "指定日记模板文件的路径。", "option-open-on-start": "启动时打开日记", "option-open-on-start-description": "开启后,每次打开当前仓库时将自动打开日记页面。" }, "unique-note-creator": { "name": "时间戳笔记生成器", "desc": "创建以时间戳为文件名的笔记,常用于 Zettelkasten 等方法中。", "short-name": "时间戳", "action-create-note": "创建时间戳笔记", "option-new-file-location": "新建笔记的存放位置", "option-new-file-location-description": "指定新建时间戳笔记的存放路径。", "msg-folder-not-found": "创建时间戳笔记失败,\"{{folderOption}}\" 文件夹未找到。", "option-template-file": "模板文件位置", "option-template-file-description": "指定用于生成时间戳笔记的模板文件的位置。", "option-template-file-placeholder": "示例:文件夹1/笔记名", "option-id-format": "时间戳格式", "msg-template-file-not-found": "创建时间戳笔记失败,模板文件\"{{template}}\"未找到。", "msg-failed-to-generate": "无法以 \"{{format}} 格式创建时间戳笔记" }, "random-note": { "name": "漫游笔记", "desc": "随机打开一则笔记,以助于回顾和发现。", "short-name": "漫游", "action-open": "开始漫游笔记" }, "outline": { "name": "大纲", "desc": "显示当前笔记或链接笔记的小标题列表。", "action-open": "打开大纲", "action-show": "显示大纲标签页", "action-open-for-current": "打开当前文件的大纲", "tab-title": "{{displayText}} 的大纲", "label-no-headings": "未发现小标题行。" }, "word-count": { "name": "字数统计", "desc": "在状态栏中显示字数。" }, "slides": { "name": "幻灯片", "desc": "演示当前笔记。你可以通过键入 \"---\" 来分隔每一页幻灯片的内容。", "action-start": "开始演示" }, "audio-recorder": { "name": "录音机", "desc": "录制音频并保存为附件。", "action-start": "开始录音", "action-stop": "结束录音", "action-toggle": "开始/结束录音", "msg-access-denied": "访问被拒绝,请从首选项面板启用麦克风。", "msg-pending-grant": "请授权麦克风开始录音。", "msg-no-microphone": "未连接麦克风。" }, "open-with-default-app": { "name": "使用默认应用打开", "desc": "在菜单中添加【使用默认应用打开当前文件】这一选项。", "action-open-file": "使用默认应用打开", "action-open-file-mobile": "共享", "action-show-in-folder": "在系统资源管理器中显示", "action-show-in-folder-mac": "在访达中显示" }, "templates": { "name": "模板", "desc": "插入模板文件夹中的模板文件内容。", "action-insert": "插入模板", "action-insert-current-date": "插入当前日期", "action-insert-current-time": "插入当前时间", "option-template-folder-location": "模板文件夹位置", "option-template-folder-location-description": "该文件夹中的文件都可以作为模板。", "option-template-date-format": "日期格式", "option-template-date-format-description": "模板文件中的 {{date}} 字段将被一个日期值替换。日期值的格式由此项控制。", "option-template-date-format-description2": "你也可以使用 {{date:YYYY-MM-DD}} 字段在模板中直接指定日期值的格式。这将覆盖此项。", "option-template-time-format": "时间格式", "option-template-time-format-description": "模板文件中的 {{time}} 字段将被一个时间值替换。时间值的格式由此项控制。", "option-template-time-format-description2": "你也可以使用 {{time:HH:mm}} 字段在模板中直接指定时间值的格式。这将覆盖此项。", "instruction-navigate": "导航", "instruction-insert": "插入模板", "instruction-dismiss": "退出", "msg-no-templates-found": "未发现模板", "msg-fail-invalid-folder": "插入模板未成功,模板文件夹无效。", "msg-fail-folder-not-found": "插入模板未成功,未找到 \"{{folderOption}}\" 文件夹。", "prompt-type-template": "请输入模板名称……" }, "translucency": { "name": "半透明效果", "desc": "开启半透明效果以增强沉浸感(深色模式下开启效果更佳)。Linux 不支持此效果。" }, "slash-command": { "name": "斜杠命令", "desc": "启用后,在编辑器中输入斜杠即可触发命令。" }, "editor-status": { "name": "视图状态", "desc": "开启后将在状态栏中添加一个显示当前面板视图状态的按钮,点击按钮可切换当前面板视图状态。", "read": "阅读视图", "edit-source": "源码模式", "edit-live-preview": "实时阅览" }, "publish": { "name": "发布", "desc": "通过 Obsidian 发布服务发布你的笔记。", "action-publish-changes": "发布更改", "label-no-internet-access": "你需要联网才能发布更改。", "label-publish-service-description": "【发布】是一项付费服务,可以让你通过 Obsidian 发布在线笔记。", "label-please-login": "要使用发布功能,请登录或创建一个 Obsidian 帐号。", "label-no-publish-subscription": "你还没有购买发布服务。", "button-purchase": "购买", "label-manage-sites": "管理网站", "label-no-sites": "你没有创建任何网站。", "button-choose": "选择", "tooltip-edit-site-id": "编辑网站 ID", "tooltip-delete-site": "删除网站", "label-delete-site-confirmation": "你确定要删除此网站吗?", "label-delete-site-details": "这将会立即删除你的网站。注意:删除是不可恢复的。", "label-confirm-delete-site": "确认删除网站 \"{{site}}\"", "option-site-id": "网站 ID", "option-site-id-description": "你的网站将使用以下地址:https://publish.obsidian.md/{网站 id} 。网站 ID 允许后续修改,但仅允许使用小写字母、数字和破折号。", "option-site-id-placeholder": "请输入一个网站 ID", "button-create": "创建", "msg-invalid-site-id": "网站 ID 只能包含小写字母、数字和破折号。", "msg-site-id-in-use": "此网站 ID 已被使用,请尝试另一个 ID。", "msg-create-site-issue": "创建网站时出现错误。", "label-site-options": "网站设置", "option-site-general": "常规", "option-site-components": "组件", "option-site-appearance": "外观", "option-site-reading-experience": "阅读体验", "option-site-misc": "其他设置", "option-site-name": "网站名称", "option-site-name-description": "设置当前网站的名称。网站名称将显示在当前网站的页面标题中。", "option-site-name-placeholder": "输入网站的名称", "option-home-page-file": "主页文件", "option-home-page-file-description": "设置用户在访问该网站时看到的第一个页面。", "option-home-page-file-placeholder": "选择一个已发布的文件", "option-logo": "图标", "option-logo-description": "选择一个图片文件作为你的网站图标。", "option-logo-placeholder": "选择一张仓库中已上传的图片……", "option-site-collaboration": "协作", "option-site-collaboration-desc": "管理网站的协作者。", "button-manage-collaborators": "管理", "option-theme": "主题", "option-theme-description": "设置当前网站的配色方案。", "option-theme-system": "跟随系统", "option-show-theme-toggle": "切换浅色/深色模式", "option-show-theme-toggle-description": "让读者自行在浅色与深色模式间切换。", "option-show-navigation": "显示导航栏", "option-show-navigation-description": "在网站的左侧显示一个导航列表,列表汇总了所有已发布的页面。", "option-show-search": "显示搜索栏", "option-show-search-description": "在导航栏顶部显示搜索栏,从而让访问者能够搜索页面的标题和小标题。", "option-show-graph": "显示局部关系图", "option-show-graph-description": "在每个页面上显示局部关系图,从而展示当前页面的链接情况。", "option-show-outline": "显示大纲", "option-show-outline-description": "开启后,在每个页面上显示由小标题组成的大纲。", "option-show-backlinks": "显示反向链接", "option-show-backlinks-description": "在每个页面末尾显示反向链接。", "option-sliding-window-mode": "使用滑动面板", "option-sliding-window-mode-description": "开启后,每次点击链接都将创建一个新面板以打开页面。面板允许水平滚动。", "option-hover-preview-file": "悬停预览", "option-hover-preview-file-description": "开启后,当鼠标悬停在链接上时将显示页面预览。", "option-hide-title": "隐藏页面标题", "option-hide-title-description": "隐藏页面标题。这个设置在每个页面开头都有自己的标题时非常有用。", "option-readable-line-length": "缩减栏宽", "option-readable-line-length-description": "开启后将限制每行字数,使屏幕显示的内容减少,但使较长的段落更具可读性。", "option-site-password": "密码", "option-site-password-description": "使用密码限制访问者对网站的访问。", "option-google-analytics": "Google 分析跟踪代码", "option-google-analytics-description": "为你的网站配置 Google 分析跟踪功能。该功能仅限于从自定义域名进行访问的访客。使用该功能前请先查阅当地的法律法规。", "button-manage-passwords": "管理", "button-save-site-settings": "保存网站设置", "msg-updated-options": "已更新该网站的设置。", "button-go-back": "返回", "label-publishing-to": "发布到", "tooltip-switch-site": "切换网站", "button-add-linked": "添加相关文件", "tooltip-add-linked": "添加所有被当前项目链接的文件", "msg-added-linked-files": "已添加 {{count}} 个链接文件", "msg-added-linked-files_plural": "已添加 {{count}} 个链接文件。", "tooltip-open-site-options": "更改网站设置", "label-no-changes-detected": "未检测到更改。", "label-changed-files-to-be-published": "本地有更改", "label-unchanged-files-already-published": "已发布(选中则删除)", "label-file-selected": " 已选择", "button-select-all-files": "全部选中", "button-deselect-all-files": "取消全选", "label-new-files-to-be-published": "未发布", "button-publish": "发布", "msg-no-permission-to-publish-to-site": "你无权发布到当前网站。", "msg-select-at-least-one-file": "请至少选择一个文件。", "label-upload-changes": "上传更改", "button-done": "完成", "button-stop": "停止", "label-status-uploading": "上传中", "label-status-to-publish": "待发布", "label-status-to-delete": "待删除", "label-status-published": "已发布", "label-status-deleted": "已删除", "label-status-failed": "失败", "label-status-cancelled": "已取消", "button-change": "更改", "label-clear-cache": "更改的内容可能需要几分钟才能显示在当前网站上。如果看不到最新更改,请尝试在浏览器中清除缓存。", "label-visit-site": "你可以在这里访问你的网站:", "msg-something-went-wrong": "出现问题。请检查开发者控制台以获取详细信息。", "msg-network-error": "发生网络错误。 ", "label-manage-passwords": "管理密码", "label-add-password": "添加密码", "action-new-password": "新建密码", "label-no-password": "当前网站没有设置任何密码。任何人都可以访问。", "label-have-password": "当前网站已被密码保护。如果你有多个密码,访客可以输入任意一个密码来访问当前网站。", "option-password-name": "密码", "option-password-desc": "密码的哈希值将被 Obsidian 妥善保存。密码一旦设置完成将无法显示为明文。", "option-password-placeholder": "请输入密码", "option-nickname-name": "名称(可选)", "option-nickname-desc": "为密码设置一个名称,以提示密码的用途。", "action-add-password": "添加此密码", "label-untitled-password": "未命名密码", "label-password-created-time": "创建于 {{time}}", "msg-added-new-password": "新密码已添加", "option-custom-domain": "自定义域名", "option-custom-domain-desc": "使用你自己的域名而不是 https://publish.obsidian.md/{网站 id} 链接。", "option-noindex": "禁止搜索引擎索引", "option-noindex-desc": "防止搜索引擎索引你的网站。", "button-configure": "设置", "label-configure-custom-domain": "自定义域名设置", "option-custom-url-name": "自定义 URL", "option-custom-url-desc": "你的网站所在的网址。", "option-custom-url-placeholder": "www.yourdomain.com", "option-custom-url-redirect": "重定向至你的自定义域名", "option-custom-url-redirect-desc": "将 publish.obsidian.md/id 上的访客重定向至你的自定义域名。", "button-update-custom-domain": "更新域名设置", "label-custom-domain-instructions": "更多信息请参考 {{link}}。", "label-custom-domain-link-name": "自定义域名设置指南", "label-site-usage": "你使用的 {{site}} 超出了你的 {{limit}}。", "button-add-more-sites": "购买更多网站", "label-no-sites-bought": "你没有购买任何网站。", "button-get-site": "购买一个。", "label-manage-sharing": "管理 \"{{name}}\" 的共享", "label-sharing-with-users": "这个网站目前已和这些人共享", "label-not-sharing": "这个网站目前没有共享给任何人", "label-invite-pending": "等待中", "tooltip-remove-user": "移除用户", "option-invite-user": "邀请用户", "placeholder-invite-user": "输入他们的邮件地址...", "error-email-must-be-valid": "请输入有效的邮件地址", "msg-enable-publish-plugin": "请在 设置 -> 核心插件 中查看网站", "label-your-sites": "你的网站", "label-sites-shared-with-you": "与你共享的网站", "tooltip-leave-site-sharing": "停止这个网站的协作", "label-leave-site-confirmation": "确认停止这个网站的协作", "label-leave-site-confirmation-details": "该网站将从与你共享的网站中移除,这个操作是永久且不可逆的", "label-leave-site-confirmation-details-2": "如果你想重新加入这个网站的协作,请联系网站的拥有者", "button-leave": "离开", "label-compare-with-live": "与实时版本比较", "button-use-live-version": "使用实时版本", "label-confirm-override": "确认覆盖本地版本", "label-confirm-override-1": "是否确实要覆盖本地版本?", "label-confirm-override-2": "将使用实时版本,您的本地版本将被丢弃。如有必要,请进行备份。", "button-proceed": "继续", "message-successfully-used-live-version": "已成功使用实时版本覆盖本地版本。", "label-open-file": "打开文件", "tooltip-manage-publish-filters": "管理发布筛选器", "option-included-folders": "包含的文件夹", "option-included-folders-desc": "当您查看要发布的更改时,将自动选择这些文件夹下的文件。", "option-currently-included-folders": " 当前包括以下文件夹:", "option-excluded-folders": "排除的文件夹", "option-excluded-folders-desc": "当您查看要发布的更改时,这些文件夹下的文件不会显示。此设置优先于上面包含的文件夹。", "label-number-of-folders-included": "Obsidian Publish目前包括{{folders}}.", "label-number-of-folders-excluded": "Obsidian Publish当前不包括{{folders}}.", "label-manage-included-folders": "管理包含的文件夹", "label-manage-excluded-folders": "管理排除的文件夹", "label-add-included-folder": "包括文件夹", "label-add-included-folder-desc": "您可以包括现有文件夹和尚未创建的文件夹。", "tooltip-contact-support": "联系支持" }, "workspaces": { "name": "工作区", "desc": "保存和加载工作区布局。", "action-load-layout": "加载工作区布局", "action-manage-layouts": "管理工作区布局", "action-save-and-load-layout": "更新工作区布局", "placeholder-save-current-layout-as": "输入名称以保存当前工作区布局...", "button-save": "保存", "button-load": "加载", "tooltip-delete-layout": "删除该布局", "msg-delete-layout-success": "成功删除该布局。", "msg-enter-name": "请输入新布局的名称。", "msg-save-layout-success": "成功保存布局。", "label-no-layout-found": "该布局不存在。", "placeholder-type-to-search-layouts": "输入已有布局名称..." }, "sync": { "name": "同步", "desc": "通过 Obsidian Sync 同步你的文件", "action-view-version-history": "查看版本历史", "label-load-more": "加载更多", "label-show-diff": "显示差异", "label-copy-to-clipboard": "复制到剪贴板", "label-restore-this-version": "恢复此版本", "msg-already-latest-version": "此版本已经是最新版", "msg-restored-version": "成功恢复 {{time}} 的版本", "label-file-deleted": "此文件已被删除", "label-no-earlier-version": "此文件没有更早的版本", "label-empty-file": "无内容", "label-setting-files": "设置文件", "label-deleted-files": "已删除文件", "label-version-history": "版本历史", "label-click-to-see-history": "点击文件查看其历史", "label-create-remote-vault": "创建远程仓库", "msg-please-enter-password": "请输入密码", "msg-vault-name-cannot-be-empty": "仓库名称不能为空", "msg-successfully-created-vault": "成功创建远程仓库 \"{{name}}\"。", "label-remote-vault-explanation": "远程仓库能安全地将库中内容同步到不同设备上。", "option-vault-name": "远程仓库名称", "option-vault-name-desc": "名称最好提示该远程仓库的用途。", "option-vault-name-placeholder": "我超棒的远程仓库", "option-use-custom-encryption-password": "自定义端到端加密密码功能", "option-use-custom-encryption-password-desc": "关闭此功能则采用 Obsidian 内置的加密方案。", "option-use-custom-encryption-password-desc-warning": "此选项设置后不能更改。", "option-encryption-password": "自定义加密密码", "option-encryption-password-desc": "此密码设置后不能更改。", "option-encryption-password-desc-warning": "如果你忘记了自定义加密密码,该远程仓库所有远程数据将永远无法使用。", "option-encryption-password-desc-2": "但这不会影响本地数据。", "option-encryption-password-placeholder": "你的密码", "label-enter-encryption-password": "请输入自定义加密密码", "button-unlock-vault": "解锁", "msg-verified-password": "密码验证成功。", "label-remote-vaults": "现有远程仓库列表", "label-vault-created-time": "创建于 {{time}}", "tooltip-delete-remote-vault": "删除", "tooltip-manage-sharing": "管理共享", "label-confirm-delete-remote-vault": "确认删除该远程仓库", "label-confirm-delete-remote-vault-question": "你确定要删除这个远程仓库吗?", "label-confirm-delete-remote-vault-result": "这将使得该远程仓库中的所有数据,包括版本历史,都被删除。但你的本地文件不受影响。", "label-confirm-delete-remote-vault-warning": "这个操作是永久性的且不可逆的。", "msg-remote-vault-deleted": "远程仓库 {{name}} 已被删除。", "button-connect-to-remote-vault": "同步", "button-disconnect-from-remote-vault": "断开同步", "label-not-remote-vaults": "你没有任何远程仓库。", "button-create-new-remote-vault": "新建远程仓库", "label-sync-log": "同步日志", "options-only-show-errors": "只显示错误部分", "options-only-show-errors-desc": "隐藏日志中的其他部分,只显示与错误相关的部分。", "button-copy-sync-log": "复制同步日志", "msg-successfully-copied-sync-log": "同步日志已复制", "button-retry": "重试", "button-purchase-subscription": "购买", "option-remote-vault": "远程仓库", "button-choose-remote-vault": "选择", "button-manage-remote-vault": "管理", "option-remote-vault-desc-connected": "正在与远程仓库 \"{{name}}\" 同步。", "option-remote-vault-desc-not-connected": "未与任何远程仓库同步。", "option-sync-status": "同步状态", "option-sync-status-desc-paused": "Obsidian 同步功能已暂停。", "option-sync-status-desc-running": "Obsidian 同步功能正在运行。", "option-device-name": "设备名称", "option-device-name-desc": "该名称将在同步日志中使用。留空则使用默认设备名称。", "button-resume": "恢复", "button-pause": "暂停", "option-view-deleted-files": "已删除文件", "option-view-deleted-files-desc": "浏览、恢复已删除的文件。", "option-sync-log": "同步事件", "option-sync-log-desc": "查看最近的同步事件以进行调试。", "button-view": "查看", "button-bulk-restore": "批量恢复", "button-restore-selected-files": "批量恢复所选文件", "msg-restoring": "恢复中...", "msg-restoring-complete": "`恢复完成:{{succeeded}} 个成功,{{failed}} 个失败。`", "option-over-size": "仓库过大", "option-over-size-desc": "当前仓库大小为 {{size}},超过了 {{limit}} 上限。", "msg-largest-files": "查看最大的文件", "msg-largest-files-desc": "这些是远程仓库中最占空间的文件。选中它们后,请按下清除按钮以释放远程仓库空间。", "button-purge-remote": "清除", "tooltip-purge-remote": "在远程仓库中永久清除已删除的文件以节省空间。", "msg-purge-complete": "已清除。", "option-prevent-sleep": "防止设备睡眠", "option-prevent-sleep-desc": "在同步未完成时,防止设备进入睡眠状态。", "option-selective-sync": "选择性同步", "option-excluded-folders": "需要排除的文件夹", "option-excluded-folder-desc": "防止某些文件夹被同步。", "option-currently-excluded-folders": "目前这些文件夹被排除在外:", "button-manage-excluded-folders": "管理", "option-sync-image": "同步图片", "option-sync-image-desc": "同步以下类型的图片文件:{{extensions}}.", "option-sync-audio": "同步音频", "option-sync-audio-desc": "同步以下类型的音频文件:{{extensions}}.", "option-sync-video": "同步视频", "option-sync-video-desc": "同步以下类型的视频文件:{{extensions}}.", "option-sync-pdf": "同步 PDF", "option-sync-pdf-desc": "同步 PDF 文件", "option-sync-unsupported": "同步所有其他类型文件", "option-sync-unsupported-desc": "同步那些无法在 Obsidian 中打开的文件。", "option-vault-config-sync": "同步配置文件", "option-view-config-files": "配置文件的版本历史", "option-view-config-files-desc": "浏览、恢复配置文件。", "option-sync-app": "主要设置", "option-sync-app-desc": "同步编辑器、文件与链接、快捷键等方面的设置。", "option-sync-appearance": "外观设置", "option-sync-appearance-desc": "同步外观设置,比如基础颜色、当前应用的主题、开启的 CSS 代码片段等设置信息。", "option-sync-appearance-data": "主题与 CSS 代码片段", "option-sync-appearance-data-desc": "同步已保存的主题与 CSS 代码片段文件。文件启用情况由上一同步设置决定。", "option-sync-hotkey": "快捷键", "option-sync-hotkey-desc": "同步自定义快捷键.", "option-sync-core-plugin": "核心插件的启用情况", "option-sync-core-plugin-desc": "同步核心插件的启用情况。", "option-sync-core-plugin-data": "核心插件设置", "option-sync-core-plugin-data-desc": "同步核心插件的设置信息", "option-sync-community-plugin": "第三方插件启用情况", "option-sync-community-plugin-desc": "同步社区插件的启用情况。", "option-sync-community-plugin-data": "已安装的第三方插件", "option-sync-community-plugin-data-desc": "同步已安装的社区插件,包括插件中的 `.js`、`.css`、`manifest.json`等文件,以及插件的设置信息。", "label-sync-introduction": "同步是 Obsidian 提供的附加服务,具有端到端加密及版本历史等功能。", "label-account-required": "要使用同步服务,请登陆或注册 Obsidian 账户。", "button-sign-up": "注册", "button-log-in": "登录", "label-manage-excluded-folders": "管理被排除的文件夹", "label-number-of-folders-excluded": "{{folders}} 目前不会被同步。", "label-add-excluded-folder": "需要排除的文件夹", "label-add-excluded-folder-desc": "可以排除已经存在的和未创建的文件夹。", "tooltip-remove-excluded-folder": "从排除列表中删除", "label-setup-connection": "设置连接", "label-now-connected-to-vault": "你现在已连接到 \"{{name}}\"。", "button-start-syncing": "开始同步", "label-confirm-merge-vault": "确认合并仓库", "msg-vault-has-notes": "你的本地仓库中存在一些文件。", "msg-vault-merge-warning": "如果需要将当前本地仓库与远程仓库 \"{{name}}\" 关联,当前本地仓库中的笔记将会与远程仓库中的笔记合并。如果合并时存在冲突,将保留笔记最新的版本。", "tooltip-update-setting-on-all-devices": "请更新此选项,并在希望生效的所有设备上重启软件。", "label-sharing-with-users": "该远程仓库已共享给以下用户。", "label-not-sharing": "该远程仓库未共享给任何用户。", "label-vaults-shared-with-you": "共享给你的仓库", "tooltip-leave-vault-sharing": "停止该仓库的协作", "label-leave-vault-confirmation": "确定停止该仓库协作", "label-leave-vault-confirmation-details": "这将把该仓库从共享给你的仓库中移除,这个操作是永久性的且不可逆的", "label-leave-vault-confirmation-details-2": "如果你想重新加入仓库协作,请和仓库的拥有者联系", "button-leave": "离开", "label-require-subscription-to-connect": "你需要购买 Obsidian 发布服务才能同步该仓库。", "option-contact-support": "获取支持", "option-contact-support-desc": "如果你在使用 Obsidian 同步服务过程中遇到了任何问题,请联系我们。我们的联系方式是 support@obsidian.md 。", "button-email-support": "撰写求助邮件" }, "file-recovery": { "name": "文件恢复", "desc": "通过最近的快照来恢复意外丢失的数据。仅为 Markdown 文件生成快照。", "action-open": "打开快照列表", "option-interval": "快照生成间隔", "option-interval-description": "设置快照的生成周期(分钟)。", "option-keep": "快照保存时长", "option-keep-description": "设置快照的保存时长(天)", "option-open-history": "快照", "option-open-history-description": "浏览、恢复快照。", "button-view-snapshots": "浏览", "option-clear": "删除快照", "option-clear-description": "删除所有快照。", "button-clear-history": "删除", "label-clear-warning": "你确定要删除所有快照吗?该操作仅删除快照,仓库内其他文件将不受影响。", "msg-clear-complete": "快照已删除。", "label-no-history-found": "未发现快照。", "placeholder-choose-file": "请选择文件……", "label-select-file": "请在左侧面板中选择一个文件以浏览其快照。" }, "note-composer": { "name": "笔记重组", "desc": "合并两篇笔记,或将笔记部分内容移动到另一笔记中。", "option-confirm-file-merge": "合并文件提示", "option-confirm-file-merge-description": "在合并两个文件之前通过对话框询问是否合并。", "option-split-replacement-text": "替代原文的方式", "option-split-replacement-text-description": "移动内容后,在原笔记中用于替代原内容的方式。", "option-choice-split-replacement-text-link": "链接存放移动内容的文件", "option-choice-split-replacement-text-embed": "嵌入存放移动内容的文件", "option-choice-split-replacement-text-none": "无", "option-template-file": "模板文件位置", "option-template-file-description": "该选项用于指定合并或提取笔记时使用的模板文件。模板支持的变量为:{{content}}、{{fromTitle}}、{{newTitle}}、{{date:FORMAT}}, 比如 {{date:YYYY-MM-DD}}。", "command-merge-file": "将当前文件合并到其他文件中", "action-merge-file": "将当前文件合并到……", "label-no-files": "未发现相应文件。", "instruction-navigate": "导航", "instruction-merge": "合并到选中文件末尾", "instruction-create-new": "新建文件后合并", "instruction-merge-at-top": "合并到选中文件开头", "instruction-dismiss": "退出", "prompt-select-file-to-merge": "选择需要合并到的文件……", "label-merge-file": "合并文件", "label-confirm-file-merge": "是否要将 \"{{file}}\" 合并到 \"{{destination}}\" 中?合并后 \"{{file}}\" 将会被删除。", "button-merge": "合并", "button-merge-do-not-ask-again": "合并,并不要再询问", "command-split-file": "将当前选中内容移动到其他文件中", "command-extract-heading": "移动当前章节", "instruction-append": "移动到选中文件末尾", "instruction-prepend": "移动到选中文件开头", "msg-fail-to-fetch-template": "调用模板失败:模板文件 \"{{template}}\" 未找到。", "msg-fail-to-find-heading": "未找到小标题" }, "canvas": { "name": "白板", "desc": "在一张无限画布上组织你的笔记。", "action-add-note": "添加笔记", "action-add-media": "添加媒体文件", "action-add-card": "添加卡片", "action-add-website": "添加网页", "action-create-group": "创建组", "action-create-with-size": "创建特定尺寸的卡片", "action-convert-to-file": "转换到文件...", "action-drag-to-add-note": "添加笔记(点击或拖动)", "action-drag-to-add-media": "添加媒体文件(点击或拖动)", "action-drag-to-add-card": "添加卡片(点击或拖动)", "action-enable-grid-snapping": "自动对齐网格", "action-disable-grid-snapping": "关闭对齐网格", "action-edit-label": "编辑文字", "action-remove-label": "移除文字", "action-search-file": "查找文件", "action-set-color": "设置颜色", "action-align": "对齐", "action-align-left": "左对齐", "action-align-center": "水平居中", "action-align-right": "右对齐", "action-align-top": "顶端对齐", "action-align-middle": "垂直居中", "action-align-bottom": "底端对齐", "action-distribute-horizontal-spacing": "横向分布", "action-distribute-vertical-spacing": "纵向分布", "action-justify-horizontally": "水平拉伸对齐", "action-justify-vertically": "纵向拉伸对齐", "action-stack-horizontally": "行排列", "action-stack-vertically": "列排列", "action-stack-grid": "网格排列", "action-export-png": "导出图片", "label-export-png-desc": "用以下设置将白板文件 \"{{title}}\" 导出为 PNG 图片。", "label-export-png-dimensions": "预计图像尺寸为 {{dimensions}}", "option-export-png-show-logo": "显示水印", "option-export-png-show-logo-desc": "在导出图片的左下角显示 Obsidian 的标志。", "option-export-png-zoom": "缩放", "option-export-png-zoom-desc": "缩放程度越大,图片分辨率越大。", "option-export-png-frame": "导出范围", "option-export-png-frame-desc": "选择导出整个白板还是当前可视部分。", "option-export-png-frame-full": "整个白板", "option-export-png-frame-viewport": "仅当前部分", "action-remove": "移除", "action-narrow": "切换至章节...", "action-swap-file": "切换至其他文件...", "action-change-url": "更改网址...", "action-zoom-to-fit": "总览全局", "action-zoom-to-selection": "聚焦所选内容", "action-reload-page": "重新加载网页", "action-go-to-target": "跳转至终点", "action-go-to-source": "跳转至起点", "command-create-new-canvas": "新建白板", "command-new-canvas": "新白板", "instruction-narrow": "切换至所选章节", "prompt-to-narrow": "输入章节名称", "label-enter-url": "输入网址", "label-empty-embed": "未找到 \"{{linktext}}\"。", "prompt-add-text": "添加文字...", "prompt-start-search": "搜索...", "label-canvas-help": "帮助", "label-no-heading": "切换至全文", "label-pan": "移动画布", "label-pan-horizontal": "水平移动画布", "label-zoom": "缩放", "label-select-all": "选中所有元素", "label-add-remove-selection": "选中/移除选中", "label-clone-card": "复制所选元素", "label-constrain-movement-axis": "平移元素", "label-disable-drag-snapping": "临时禁用所有对齐", "label-remove-card": "移除元素", "label-drag-from-below": "从下方拖动或双击", "label-space-drag-pan": "按住空格拖动鼠标以移动画布", "label-scroll-to-zoom": "滚动以缩放", "label-untitled-group": "未命名组" } }, "nouns": { "word-with-count": "{{count}} 个词", "word-with-count_plural": "{{count}} 个词", "character-with-count": "{{count}} 个字符", "character-with-count_plural": "{{count}} 个字符", "link-with-count": "{{count}} 条链接", "link-with-count_plural": "{{count}} 条链接", "file-with-count": "{{count}} 个文件", "file-with-count_plural": "{{count}} 个文件", "folder-with-count": "{{count}} 个文件夹", "folder-with-count_plural": "{{count}} 个文件夹", "backlink-with-count": "{{count}} 条反向链接", "backlink-with-count_plural": "{{count}} 条反向链接", "site-with-count": "{{count}} 个网站", "site-with-count_plural": "{{count}} 个网站", "plugin-with-count": "{{count}} 个插件", "plugin-with-count_plural": "{{count}} 个插件", "theme-with-count": "{{count}} 个主题", "theme-with-count_plural": "{{count}} 个主题" } } PNG  IHDRxtEXtSoftwareAdobe ImageReadyqe<8>IDATxYl\Yzߏj#%MQj)yn'W  [ 潩F5ov–'v<gݱIya?S5@=Q^\b]XUuo,@P./9JK\kƯ}d?\w6Y~옚uOp 8P'K;~RyFv7)7Íf5 ;C#$f\M݊0:_u 722K (_υ)-+""n0лO4 ~gnl]at_߾n\_b.izŸkz<v  pM \_21>scsFϛ?y)v a t,j?uhE^tyO~q'ڄ` #׼t6 uſ&%ֽ2ϟV90)ȤƾIr88{n,S$}onI"Mc ŸWTY p 4I'}^#oE.`L@R?lVv +` .6I~w~+KT/ PwdI ~M2@0z /<Ρo;:$Z7wq{\ 0z Pܹ8/)Ks`S{ ~S~ }Iv #a )s&]'0 Wh 'wաS](N?,yM|oS^e?ڶyv S` ?t֞x7zjX4 Qŵ\vn[йOߴ޺Pk  Snݺwܥw_Q7KK~|,q#pnf@-+T7pa /nBpM~MC.]<?!H+R(TdSf1s- p{ ~lߛ ZiC@v_4qR\ @Y 1KK HǗ"Ox,d@H-?h>.LS' ~A@aA4L$[jwvffnl(Y_t1$oE~$1$=9?D̍-~@¯v&B|Ty@?Qڍl)rNv @hTe9~,K xsޯ)"5z~y7fg͝> $~R!C9ET]S_NrX0ЊLp`\?hta@yVGtGuA`loL|\_,+?gz=5@n\U##MK S?v'R;jPY@^<9! z|7[ۑ3MlY~[6`4A޻/ߊ玩GMb@%0KW? ~/6Q[Wm5zjДi\S _7H/n?\JK:WĉG)0Wg>odS_+f[>\_{ -YX])WTvJ4}чP٠_$ 7> N[ȒO:}\>ﺟآoB?ã; E@V@|8/@rA2 )߫-𷳺@.[i @dF%I4,?6vJŸ0REݻxKqZ .2@_T{wed84i^G*I0FwhcSie_L\[kϯZ#|r?Z'.T+5@*GSie* :c=Nb4ěn~b_G' &K>7 s/@Od?0Tr{X[VŵDO2sc+o7 @R?ڶ38-}?htѷzci@B[ $DH8H[ٻ/6^njE--l6zbF:$ٻa:v(!ReDY} nקاΜ=Y9P_ty+~Ib'!P4v,~OK0\k##7%n~[ B"+~pGrt0iv DFCzC@xGmw~GDZYR7V}1 ^>~p,@ow}{OܾxZEd(ߩ]- X'AFG$oՏ_[Vѱ!5ܱ~/M\4z2['l+/D>~nƑ ` tP#'/kFq}5ur:}Dc`T,1$A$ 2%Zi1Y/>Rrdi05 ?_zLٳ7}?Ї'^PTuu~o*W_ Sq^Rxx7|-Jk{pkG[n;`bĔH[C17R}G*ѫp)~ TA90 /p(P4$b+ԧNZS Af@v>5vz9ǏӧNSc={C>ty:]$L&qQYN@xG-cr-]jl$ԅ) B +sAG-IU6cnB,TԭUuVS@|<ϝ2zFh @R @Czy)+q)~}#?!?3O ȟ>G~sFɅ`i0I0H,zS ZiSN57ʃƴ@˖¹4u##'ة'-u3gO4|)!+;*4)t-rc`R *CzQ.,S!=E6/B ~0#[:N?z%a?ŸnPkr lyON `A#7xqoo3ˍ(lO׶#ߍtO"3q{;_OV btrb-}3-}~0w 4a3G)~+Xʤ7eJw>—O7SCV JSnۍ';IwOᷢ{#Rt9O߂O,t2a}Qka#w%~~>n? XHRkG@)GZq -k V?}ʡ@jP{yҗ"p-)4g(} P@mLpZMU*UuLoS-}?@C +8UoW#x)T t,cҤpp)~+@E?4;i6>9(?O ,bʴNq{;^=kyOZo߾ľϨ+$ERP  ?} 902r>wl9Od$`6F~?|?n¯iO> C"9—ŸRMq~F dL;aVxG) 5`@x~w ?EH`=`n}N6:ԇۧ@ro_>ߎŸZ(qLvy7 nKOS uX'~c퍀2/Kdۧ#`)<J} 0)ۿA_ ?E/' Lu6Ç_xaϋnJO#,a?C,W\&767 O^zגtWZ qo'}@=#> CP~T9ۮ_+`t+"}:t%u,T}d4HD~ Tq0 eɡ?Ax*ݾi:@L  7c&~mݾi1?n@IvO/Sb㭟J`j̏Oܾ$0)jM/4y>Kh$Yi{L i篳sx&-n#bwVkϤ[[3T:~bUy} <ܽF̏ۏ\cr~@!?7(3 `7ԗJ_|̽ ܼy.oZ̏ۏQ[~8'nfS_ѫ+`W\>)хX 3n`t}jZOav/&0:/M+4` `!, ,4s;}{b~kt;[ ¦>,V~F~sd4wypvS+1?n?/`T?sA?pv nC4wyF"| HS_L1?n?n>d46J;)nԗO.! 4uDȦ@@OSM}}#)G[4ԧmOS`4uD)@&n߱OS_:#((ʡ֭ݾc1?n?RaN#П/ґS~lnoYS_X #9'F+4E>n$АOxY__W@&׿'.@NpO|5̟o@gt(l|+pzL dRܾᦾ@h~ ͠?a$(kZi'> hCRa~~>0)ٸ}FvJ3vv~oMNqO<y8ޘ# h)#;n?*v6`$2L2*4+~ܾ'T*)o/@Z1?n?oZ}sOT+Sb~ ݾi1n$ɘUU*i/hdL^ݻ7?oY¡?ѨVF1 ?M}4?G/s5|̏wg>@@?׋{>_;OS_OS`KݛWȃ۷  g" }p6~?%Cݵljl &,4Ӹz5UcV @`5^ĸ۩ օ?U^o_0zU9hKӊ@}vn>ݾ6߃ z$4iZi $Ќ AZI{R 3M}4Нo IW4#lllTqٹ?:B3Jpg^#@@8g XX&`>n_ߧ{@)=vJ} M}{V @+Œ@-S JMS$ @)$I?4gFfllNJ>bq.+Й`JԾ;A#2_Z,--5Vi {} I z$ݾ@A !R7\w~'@A)bI`U <4i@a r^ x{oB !"+4E?L$^ T'4({= `4 ~ܾ?cV N'OYg @|ԧh˦#`A 0tK,n7^O3+`:4j qAq@)bc _*j_۸}b~ܾz|V*~}xiyɸOS_؇G^[V 3zr5:׷{ M3W @4uBèVA3`jMקq~y(E?H<\.kq]S~׷g#BhԔv`R᧩/g@ `Z$PK666oFy`,^Mzc4'@H @O])FMkoZ̏l$+F:JK]Իۯ XU@O$ dWix;z}6c)@A$P[:o G̏z~H"%7nOS_eH$(8/-ES_Œ}$ -Rܾ1n8WSդԗL̟opN ?xȀOԨ{#1S[Rtܾe0@ @ /kkR Шȁ<`S5E}~B7jASY½gS ?M}ݟ1=p'{J$$p&?wXGSiZf})} M}??p mS}c~~E q3")}?Xquc SwJS(4R3t~ ܛ(wcb~ܾMx ,#{ @o$DO++11)@nߴ@`H,M+z} 'Js#Ȩw:>+{yASͭ8"n?NoF.GxJsIW)} ?M}]hKv/_l PP, T{wv~-~옒l 3M}ڹ}@: Rb~~Ь{v `2loG(t~ݾ +Fjf0ߣڵ_e㿇em7)_ @@O`I,6s@@_)@$qoljwc~z'o)46Kz\Y^ ^+'ܾ?e*V5U\O?eN` **Z\Zk5*@@$W4V}?KBOS_U~F)1?n_X Hu!@̟QbMd;X__s@@1ܻ?#ݿ_` r 0]W{)픬ɦ@+4Eo@@, { 0#~C $ N=X]6]Sr߃4~H' UӿRli l'5)@@)@A$VYsZY[6-{LH\bkkSm(inH<H} O jR/.[6t4` d5e}eqm@Hc).&~B h+=DBi}oaϿd @ `X[V;;;ݾSwJ%~H{hK'@Ofy1''3. @S_E?Řr@@*)@RԧGHRTLp~~;ş"Mji}c.~ʊ>~p`c 3ԅ"ǹ~" wSq&kZs$ieQ2?eIb zn@@&)t]?H;ۯ_m̠֊˸.y2ER\Ȧ@km ?M}*L  ;K>]n W]RqnV27Xsx%@_{O2((Çi#-X-M-O5+ڤt?WcK8DŽӏ $~:-)MG@l@VjbIXX5wf @8%<جmiw~&h; S 7#ڦS6 U1OYГ/3St@1),/R*>m>`h{-4Er꽱u 04ZX* 9Tq\I%H6Owo@:C`w <ɻv?X67@>`,Lp P}#Ƥ5ýT+D)>`c CXY]TPbn&L /"~#@N~M~G` dS*S-E.4EvỌ$+F?¿W r!0'Z\h僪VM J%ߍ: $ɬ́@M뫾¯ @ Y|m3,7S׬kMXCXZ`"=هj)~S'$c~+֐z3`L`S5uNO@5)@A11[2}' ΥВRSbGհ$l T HNP`$a=!A@pz B$2-ںw?(o>` Y$Ecyu!;f}6GsIt׭V8(?`,z!07HwSbc #S~Ϙ$ 0@Ÿw@|Sl6ĝRAM!xpK˘_CNg %VqIG[,ݾ1?n_mV8.R@SL nD@\Yp PV)@F1n |`TN]K2+ .7 _Fyr@llRy@tI >\ 0 ~mݾ I_ \̯@bc +Rb*n|SL?8Fu"j>Á@Y7~ ` PP, 4ⲪV+~͛\1aH/E@\1n@@ a)O \{ $I^JʨeE@Xoz B")@J` V5~/7+iF¼`F?Ŧ0'4ڂJ;#c PP!6q Ȧ@/#17X4R)X4y~\ B 0 )֚Kn,S,p @ĐL+N 42xp@V)@Dnt@L~gnG@mnV !+62b r$Ho I=%pTbOJ6} R*C`O `IXS$MJ1?@l뷆@ )Ź@EUZg+{z8 o FR d}c4h. f$H4H/Hpp%(@2M@8YȊK` 2Hfq`f"Y")am}цoRbiHR @{)S cR ?wY8phb>H7<$!Ώ>M>38w:rd$ M!p17Gcje@ dS 3"@'D.bbGDy %LL.9"O5tw@ ép3 p+ pC#jl]n@5Ā})p0BvH7p`.12|Z<Cp q/j)`A=S? 1X  Lp̅}QJ<  |F rkS? 1X X'&E%VkvL &pfe5x2láG3v? y1`H]!zlJp ۊ8B bĀ&H}C#jl? 29V/:xp@ŀP.@"[HpQ HpP [@_<1FG`k+4 @8$FOqH L@X"nEܒhIpp@ "?X`.+(IENDB` Obsidian /** * addon/search/searchcursor.js */ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")) else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod) else // Plain browser env mod(CodeMirror) })(function(CodeMirror) { "use strict" var Pos = CodeMirror.Pos function regexpFlags(regexp) { var flags = regexp.flags return flags != null ? flags : (regexp.ignoreCase ? "i" : "") + (regexp.global ? "g" : "") + (regexp.multiline ? "m" : "") } function ensureFlags(regexp, flags) { var current = regexpFlags(regexp), target = current for (var i = 0; i < flags.length; i++) if (target.indexOf(flags.charAt(i)) == -1) target += flags.charAt(i) return current == target ? regexp : new RegExp(regexp.source, target) } function maybeMultiline(regexp) { return /\\s|\\n|\n|\\W|\\D|\[\^/.test(regexp.source) } function searchRegexpForward(doc, regexp, start) { regexp = ensureFlags(regexp, "g") for (var line = start.line, ch = start.ch, last = doc.lastLine(); line <= last; line++, ch = 0) { regexp.lastIndex = ch var string = doc.getLine(line), match = regexp.exec(string) if (match) return {from: Pos(line, match.index), to: Pos(line, match.index + match[0].length), match: match} } } function searchRegexpForwardMultiline(doc, regexp, start) { if (!maybeMultiline(regexp)) return searchRegexpForward(doc, regexp, start) regexp = ensureFlags(regexp, "gm") var string, chunk = 1 for (var line = start.line, last = doc.lastLine(); line <= last;) { // This grows the search buffer in exponentially-sized chunks // between matches, so that nearby matches are fast and don't // require concatenating the whole document (in case we're // searching for something that has tons of matches), but at the // same time, the amount of retries is limited. for (var i = 0; i < chunk; i++) { if (line > last) break var curLine = doc.getLine(line++) string = string == null ? curLine : string + "\n" + curLine } chunk = chunk * 2 regexp.lastIndex = start.ch var match = regexp.exec(string) if (match) { var before = string.slice(0, match.index).split("\n"), inside = match[0].split("\n") var startLine = start.line + before.length - 1, startCh = before[before.length - 1].length return {from: Pos(startLine, startCh), to: Pos(startLine + inside.length - 1, inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length), match: match} } } } function lastMatchIn(string, regexp, endMargin) { var match, from = 0 while (from <= string.length) { regexp.lastIndex = from var newMatch = regexp.exec(string) if (!newMatch) break var end = newMatch.index + newMatch[0].length if (end > string.length - endMargin) break if (!match || end > match.index + match[0].length) match = newMatch from = newMatch.index + 1 } return match } function searchRegexpBackward(doc, regexp, start) { regexp = ensureFlags(regexp, "g") for (var line = start.line, ch = start.ch, first = doc.firstLine(); line >= first; line--, ch = -1) { var string = doc.getLine(line) var match = lastMatchIn(string, regexp, ch < 0 ? 0 : string.length - ch) if (match) return {from: Pos(line, match.index), to: Pos(line, match.index + match[0].length), match: match} } } function searchRegexpBackwardMultiline(doc, regexp, start) { if (!maybeMultiline(regexp)) return searchRegexpBackward(doc, regexp, start) regexp = ensureFlags(regexp, "gm") var string, chunkSize = 1, endMargin = doc.getLine(start.line).length - start.ch for (var line = start.line, first = doc.firstLine(); line >= first;) { for (var i = 0; i < chunkSize && line >= first; i++) { var curLine = doc.getLine(line--) string = string == null ? curLine : curLine + "\n" + string } chunkSize *= 2 var match = lastMatchIn(string, regexp, endMargin) if (match) { var before = string.slice(0, match.index).split("\n"), inside = match[0].split("\n") var startLine = line + before.length, startCh = before[before.length - 1].length return {from: Pos(startLine, startCh), to: Pos(startLine + inside.length - 1, inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length), match: match} } } } var doFold, noFold if (String.prototype.normalize) { doFold = function(str) { return str.normalize("NFD").toLowerCase() } noFold = function(str) { return str.normalize("NFD") } } else { doFold = function(str) { return str.toLowerCase() } noFold = function(str) { return str } } // Maps a position in a case-folded line back to a position in the original line // (compensating for codepoints increasing in number during folding) function adjustPos(orig, folded, pos, foldFunc) { if (orig.length == folded.length) return pos for (var min = 0, max = pos + Math.max(0, orig.length - folded.length);;) { if (min == max) return min var mid = (min + max) >> 1 var len = foldFunc(orig.slice(0, mid)).length if (len == pos) return mid else if (len > pos) max = mid else min = mid + 1 } } function searchStringForward(doc, query, start, caseFold) { // Empty string would match anything and never progress, so we // define it to match nothing instead. if (!query.length) return null var fold = caseFold ? doFold : noFold var lines = fold(query).split(/\r|\n\r?/) search: for (var line = start.line, ch = start.ch, last = doc.lastLine() + 1 - lines.length; line <= last; line++, ch = 0) { var orig = doc.getLine(line).slice(ch), string = fold(orig) if (lines.length == 1) { var found = string.indexOf(lines[0]) if (found == -1) continue search var start = adjustPos(orig, string, found, fold) + ch return {from: Pos(line, adjustPos(orig, string, found, fold) + ch), to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold) + ch)} } else { var cutFrom = string.length - lines[0].length if (string.slice(cutFrom) != lines[0]) continue search for (var i = 1; i < lines.length - 1; i++) if (fold(doc.getLine(line + i)) != lines[i]) continue search var end = doc.getLine(line + lines.length - 1), endString = fold(end), lastLine = lines[lines.length - 1] if (endString.slice(0, lastLine.length) != lastLine) continue search return {from: Pos(line, adjustPos(orig, string, cutFrom, fold) + ch), to: Pos(line + lines.length - 1, adjustPos(end, endString, lastLine.length, fold))} } } } function searchStringBackward(doc, query, start, caseFold) { if (!query.length) return null var fold = caseFold ? doFold : noFold var lines = fold(query).split(/\r|\n\r?/) search: for (var line = start.line, ch = start.ch, first = doc.firstLine() - 1 + lines.length; line >= first; line--, ch = -1) { var orig = doc.getLine(line) if (ch > -1) orig = orig.slice(0, ch) var string = fold(orig) if (lines.length == 1) { var found = string.lastIndexOf(lines[0]) if (found == -1) continue search return {from: Pos(line, adjustPos(orig, string, found, fold)), to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold))} } else { var lastLine = lines[lines.length - 1] if (string.slice(0, lastLine.length) != lastLine) continue search for (var i = 1, start = line - lines.length + 1; i < lines.length - 1; i++) if (fold(doc.getLine(start + i)) != lines[i]) continue search var top = doc.getLine(line + 1 - lines.length), topString = fold(top) if (topString.slice(topString.length - lines[0].length) != lines[0]) continue search return {from: Pos(line + 1 - lines.length, adjustPos(top, topString, top.length - lines[0].length, fold)), to: Pos(line, adjustPos(orig, string, lastLine.length, fold))} } } } function SearchCursor(doc, query, pos, options) { this.atOccurrence = false this.doc = doc pos = pos ? doc.clipPos(pos) : Pos(0, 0) this.pos = {from: pos, to: pos} var caseFold if (typeof options == "object") { caseFold = options.caseFold } else { // Backwards compat for when caseFold was the 4th argument caseFold = options options = null } if (typeof query == "string") { if (caseFold == null) caseFold = false this.matches = function(reverse, pos) { return (reverse ? searchStringBackward : searchStringForward)(doc, query, pos, caseFold) } } else { query = ensureFlags(query, "gm") if (!options || options.multiline !== false) this.matches = function(reverse, pos) { return (reverse ? searchRegexpBackwardMultiline : searchRegexpForwardMultiline)(doc, query, pos) } else this.matches = function(reverse, pos) { return (reverse ? searchRegexpBackward : searchRegexpForward)(doc, query, pos) } } } SearchCursor.prototype = { findNext: function() {return this.find(false)}, findPrevious: function() {return this.find(true)}, find: function(reverse) { var result = this.matches(reverse, this.doc.clipPos(reverse ? this.pos.from : this.pos.to)) // Implements weird auto-growing behavior on null-matches for // backwards-compatibility with the vim code (unfortunately) while (result && CodeMirror.cmpPos(result.from, result.to) == 0) { if (reverse) { if (result.from.ch) result.from = Pos(result.from.line, result.from.ch - 1) else if (result.from.line == this.doc.firstLine()) result = null else result = this.matches(reverse, this.doc.clipPos(Pos(result.from.line - 1))) } else { if (result.to.ch < this.doc.getLine(result.to.line).length) result.to = Pos(result.to.line, result.to.ch + 1) else if (result.to.line == this.doc.lastLine()) result = null else result = this.matches(reverse, Pos(result.to.line + 1, 0)) } } if (result) { this.pos = result this.atOccurrence = true return this.pos.match || true } else { var end = Pos(reverse ? this.doc.firstLine() : this.doc.lastLine() + 1, 0) this.pos = {from: end, to: end} return this.atOccurrence = false } }, from: function() {if (this.atOccurrence) return this.pos.from}, to: function() {if (this.atOccurrence) return this.pos.to}, replace: function(newText, origin) { if (!this.atOccurrence) return var lines = CodeMirror.splitLines(newText) this.doc.replaceRange(lines, this.pos.from, this.pos.to, origin) this.pos.to = Pos(this.pos.from.line + lines.length - 1, lines[lines.length - 1].length + (lines.length == 1 ? this.pos.from.ch : 0)) } } CodeMirror.defineExtension("getSearchCursor", function(query, pos, caseFold) { return new SearchCursor(this.doc, query, pos, caseFold) }) CodeMirror.defineDocExtension("getSearchCursor", function(query, pos, caseFold) { return new SearchCursor(this, query, pos, caseFold) }) CodeMirror.defineExtension("selectMatches", function(query, caseFold) { var ranges = [] var cur = this.getSearchCursor(query, this.getCursor("from"), caseFold) while (cur.findNext()) { if (CodeMirror.cmpPos(cur.to(), this.getCursor("to")) > 0) break ranges.push({anchor: cur.from(), head: cur.to()}) } if (ranges.length) this.setSelections(ranges, 0) }) }); /** * Modified from addon/edit/closebrackets.js to add surroundOnly. */ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); }) (function(CodeMirror) { var defaults = { pairs: "()[]{}''\"\"", closeBefore: ")]}'\":;>", triples: "", explode: "[]{}", surroundOnly: "", }; var Pos = CodeMirror.Pos; CodeMirror.defineOption("autoCloseBrackets", false, function(cm, val, old) { if (old && old != CodeMirror.Init) { cm.removeKeyMap(keyMap); cm.state.closeBrackets = null; } if (val) { ensureBound(getOption(val, "pairs")) cm.state.closeBrackets = val; cm.addKeyMap(keyMap); } }); function getOption(conf, name) { if (name == "pairs" && typeof conf == "string") return conf; if (typeof conf == "object" && conf[name] != null) return conf[name]; return defaults[name]; } var keyMap = {Backspace: handleBackspace, Enter: handleEnter}; function ensureBound(chars) { for (var i = 0; i < chars.length; i++) { var ch = chars.charAt(i), key = "'" + ch + "'" if (!keyMap[key]) keyMap[key] = handler(ch) } } ensureBound(defaults.pairs + "`") function handler(ch) { return function(cm) { return handleChar(cm, ch); }; } function getConfig(cm) { var deflt = cm.state.closeBrackets; if (!deflt || deflt.override) return deflt; var mode = cm.getModeAt(cm.getCursor()); return mode.closeBrackets || deflt; } function handleBackspace(cm) { var conf = getConfig(cm); if (!conf || cm.getOption("disableInput")) return CodeMirror.Pass; var pairs = getOption(conf, "pairs"); var ranges = cm.listSelections(); for (var i = 0; i < ranges.length; i++) { if (!ranges[i].empty()) return CodeMirror.Pass; var around = charsAround(cm, ranges[i].head); if (!around || pairs.indexOf(around) % 2 != 0) return CodeMirror.Pass; } for (var i = ranges.length - 1; i >= 0; i--) { var cur = ranges[i].head; cm.replaceRange("", Pos(cur.line, cur.ch - 1), Pos(cur.line, cur.ch + 1), "+delete"); } } function handleEnter(cm) { var conf = getConfig(cm); var explode = conf && getOption(conf, "explode"); if (!explode || cm.getOption("disableInput")) return CodeMirror.Pass; var ranges = cm.listSelections(); for (var i = 0; i < ranges.length; i++) { if (!ranges[i].empty()) return CodeMirror.Pass; var around = charsAround(cm, ranges[i].head); if (!around || explode.indexOf(around) % 2 != 0) return CodeMirror.Pass; } cm.operation(function() { var linesep = cm.lineSeparator() || "\n"; cm.replaceSelection(linesep + linesep, null); moveSel(cm, -1) ranges = cm.listSelections(); for (var i = 0; i < ranges.length; i++) { var line = ranges[i].head.line; cm.indentLine(line, null, true); cm.indentLine(line + 1, null, true); } }); } function moveSel(cm, dir) { var newRanges = [], ranges = cm.listSelections(), primary = 0 for (var i = 0; i < ranges.length; i++) { var range = ranges[i] if (range.head == cm.getCursor()) primary = i var pos = range.head.ch || dir > 0 ? {line: range.head.line, ch: range.head.ch + dir} : {line: range.head.line - 1} newRanges.push({anchor: pos, head: pos}) } cm.setSelections(newRanges, primary) } function contractSelection(sel) { var inverted = CodeMirror.cmpPos(sel.anchor, sel.head) > 0; return {anchor: new Pos(sel.anchor.line, sel.anchor.ch + (inverted ? -1 : 1)), head: new Pos(sel.head.line, sel.head.ch + (inverted ? 1 : -1))}; } function handleChar(cm, ch) { var conf = getConfig(cm); if (!conf || cm.getOption("disableInput")) return CodeMirror.Pass; var pairs = getOption(conf, "pairs"); var pos = pairs.indexOf(ch); if (pos == -1) return CodeMirror.Pass; var closeBefore = getOption(conf,"closeBefore"); var triples = getOption(conf, "triples"); var surroundOnly = getOption(conf, "surroundOnly"); var identical = pairs.charAt(pos + 1) == ch; var ranges = cm.listSelections(); var opening = pos % 2 == 0; var type; for (var i = 0; i < ranges.length; i++) { var range = ranges[i], cur = range.head, curType; var next = cm.getRange(cur, Pos(cur.line, cur.ch + 1)); if (opening && !range.empty()) { curType = "surround"; } else if ((identical || !opening) && next == ch) { if (identical && stringStartsAfter(cm, cur)) curType = "both"; else if (triples.indexOf(ch) >= 0 && cm.getRange(cur, Pos(cur.line, cur.ch + 3)) == ch + ch + ch) curType = "skipThree"; else curType = "skip"; } else if (identical && cur.ch > 1 && triples.indexOf(ch) >= 0 && cm.getRange(Pos(cur.line, cur.ch - 2), cur) == ch + ch) { if (cur.ch > 2 && /\bstring/.test(cm.getTokenTypeAt(Pos(cur.line, cur.ch - 2)))) return CodeMirror.Pass; curType = "addFour"; } else if (identical) { var prev = cur.ch == 0 ? " " : cm.getRange(Pos(cur.line, cur.ch - 1), cur) if (!CodeMirror.isWordChar(next) && prev != ch && !CodeMirror.isWordChar(prev)) curType = "both"; else return CodeMirror.Pass; } else if (opening && (next.length === 0 || /\s/.test(next) || closeBefore.indexOf(next) > -1)) { curType = "both"; } else { return CodeMirror.Pass; } if (!type) type = curType; else if (type != curType) return CodeMirror.Pass; } if (curType !== "surround" && surroundOnly.indexOf(ch) >= 0) return CodeMirror.Pass; var left = pos % 2 ? pairs.charAt(pos - 1) : ch; var right = pos % 2 ? ch : pairs.charAt(pos + 1); cm.operation(function() { if (type == "skip") { moveSel(cm, 1) } else if (type == "skipThree") { moveSel(cm, 3) } else if (type == "surround") { var sels = cm.getSelections(); for (var i = 0; i < sels.length; i++) sels[i] = left + sels[i] + right; cm.replaceSelections(sels, "around"); sels = cm.listSelections().slice(); for (var i = 0; i < sels.length; i++) sels[i] = contractSelection(sels[i]); cm.setSelections(sels); } else if (type == "both") { cm.replaceSelection(left + right, null); cm.triggerElectric(left + right); moveSel(cm, -1) } else if (type == "addFour") { cm.replaceSelection(left + left + left + left, "before"); moveSel(cm, 1) } }); } function charsAround(cm, pos) { var str = cm.getRange(Pos(pos.line, pos.ch - 1), Pos(pos.line, pos.ch + 1)); return str.length == 2 ? str : null; } function stringStartsAfter(cm, pos) { var token = cm.getTokenAt(Pos(pos.line, pos.ch + 1)) return /\bstring/.test(token.type) && token.start == pos.ch && (pos.ch == 0 || !/\bstring/.test(cm.getTokenTypeAt(pos))) } }); // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); }) (function(CodeMirror) { var ie_lt8 = /MSIE \d/.test(navigator.userAgent) && (document.documentMode == null || document.documentMode < 8); var Pos = CodeMirror.Pos; var matching = {"(": ")>", ")": "(<", "[": "]>", "]": "[<", "{": "}>", "}": "{<", "<": ">>", ">": "<<"}; function bracketRegex(config) { return config && config.bracketRegex || /[(){}[\]]/ } function findMatchingBracket(cm, where, config) { var line = cm.getLineHandle(where.line), pos = where.ch - 1; var afterCursor = config && config.afterCursor if (afterCursor == null) afterCursor = /(^| )cm-fat-cursor($| )/.test(cm.getWrapperElement().className) var re = bracketRegex(config) // A cursor is defined as between two characters, but in in vim command mode // (i.e. not insert mode), the cursor is visually represented as a // highlighted box on top of the 2nd character. Otherwise, we allow matches // from before or after the cursor. var match = (!afterCursor && pos >= 0 && re.test(line.text.charAt(pos)) && matching[line.text.charAt(pos)]) || re.test(line.text.charAt(pos + 1)) && matching[line.text.charAt(++pos)]; if (!match) return null; var dir = match.charAt(1) == ">" ? 1 : -1; if (config && config.strict && (dir > 0) != (pos == where.ch)) return null; var style = cm.getTokenTypeAt(Pos(where.line, pos + 1)); var found = scanForBracket(cm, Pos(where.line, pos + (dir > 0 ? 1 : 0)), dir, style, config); if (found == null) return null; return {from: Pos(where.line, pos), to: found && found.pos, match: found && found.ch == match.charAt(0), forward: dir > 0}; } // bracketRegex is used to specify which type of bracket to scan // should be a regexp, e.g. /[[\]]/ // // Note: If "where" is on an open bracket, then this bracket is ignored. // // Returns false when no bracket was found, null when it reached // maxScanLines and gave up function scanForBracket(cm, where, dir, style, config) { var maxScanLen = (config && config.maxScanLineLength) || 10000; var maxScanLines = (config && config.maxScanLines) || 1000; var stack = []; var re = bracketRegex(config) var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1) : Math.max(cm.firstLine() - 1, where.line - maxScanLines); for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) { var line = cm.getLine(lineNo); if (!line) continue; var pos = dir > 0 ? 0 : line.length - 1, end = dir > 0 ? line.length : -1; if (line.length > maxScanLen) continue; if (lineNo == where.line) pos = where.ch - (dir < 0 ? 1 : 0); for (; pos != end; pos += dir) { var ch = line.charAt(pos); if (re.test(ch) && (style === undefined || (cm.getTokenTypeAt(Pos(lineNo, pos + 1)) || "") == (style || ""))) { var match = matching[ch]; if (match && (match.charAt(1) == ">") == (dir > 0)) stack.push(ch); else if (!stack.length) return {pos: Pos(lineNo, pos), ch: ch}; else stack.pop(); } } } return lineNo - dir == (dir > 0 ? cm.lastLine() : cm.firstLine()) ? false : null; } function matchBrackets(cm, autoclear, config) { // Disable brace matching in long lines, since it'll cause hugely slow updates var maxHighlightLen = cm.state.matchBrackets.maxHighlightLineLength || 1000, highlightNonMatching = config && config.highlightNonMatching; var marks = [], ranges = cm.listSelections(); for (var i = 0; i < ranges.length; i++) { var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, config); if (match && (match.match || highlightNonMatching !== false) && cm.getLine(match.from.line).length <= maxHighlightLen) { var style = match.match ? "CodeMirror-matchingbracket" : "CodeMirror-nonmatchingbracket"; marks.push(cm.markText(match.from, Pos(match.from.line, match.from.ch + 1), {className: style})); if (match.to && cm.getLine(match.to.line).length <= maxHighlightLen) marks.push(cm.markText(match.to, Pos(match.to.line, match.to.ch + 1), {className: style})); } } if (marks.length) { // Kludge to work around the IE bug from issue #1193, where text // input stops going to the textarea whenever this fires. if (ie_lt8 && cm.state.focused) cm.focus(); var clear = function() { cm.operation(function() { for (var i = 0; i < marks.length; i++) marks[i].clear(); }); }; if (autoclear) setTimeout(clear, 800); else return clear; } } function doMatchBrackets(cm) { cm.operation(function() { if (cm.state.matchBrackets.currentlyHighlighted) { cm.state.matchBrackets.currentlyHighlighted(); cm.state.matchBrackets.currentlyHighlighted = null; } cm.state.matchBrackets.currentlyHighlighted = matchBrackets(cm, false, cm.state.matchBrackets); }); } function clearHighlighted(cm) { if (cm.state.matchBrackets && cm.state.matchBrackets.currentlyHighlighted) { cm.state.matchBrackets.currentlyHighlighted(); cm.state.matchBrackets.currentlyHighlighted = null; } } CodeMirror.defineOption("matchBrackets", false, function(cm, val, old) { if (old && old != CodeMirror.Init) { cm.off("cursorActivity", doMatchBrackets); cm.off("focus", doMatchBrackets) cm.off("blur", clearHighlighted) clearHighlighted(cm); } if (val) { cm.state.matchBrackets = typeof val == "object" ? val : {}; cm.on("cursorActivity", doMatchBrackets); cm.on("focus", doMatchBrackets) cm.on("blur", clearHighlighted) } }); CodeMirror.defineExtension("matchBrackets", function() {matchBrackets(this, true);}); CodeMirror.defineExtension("findMatchingBracket", function(pos, config, oldConfig){ // Backwards-compatibility kludge if (oldConfig || typeof config == "boolean") { if (!oldConfig) { config = config ? {strict: true} : null } else { oldConfig.strict = config config = oldConfig } } return findMatchingBracket(this, pos, config) }); CodeMirror.defineExtension("scanForBracket", function(pos, dir, style, config){ return scanForBracket(this, pos, dir, style, config); }); }); /** * addon/fold/foldcode.js */ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); }) (function(CodeMirror) { "use strict"; function doFold(cm, pos, options, force) { if (options && options.call) { var finder = options; options = null; } else { var finder = getOption(cm, options, "rangeFinder"); } if (typeof pos == "number") pos = CodeMirror.Pos(pos, 0); var minSize = getOption(cm, options, "minFoldSize"); function getRange(allowFolded) { var range = finder(cm, pos); if (!range || range.to.line - range.from.line < minSize) return null; var marks = cm.findMarksAt(range.from); for (var i = 0; i < marks.length; ++i) { if (marks[i].__isFold && force !== "fold") { if (!allowFolded) return null; range.cleared = true; marks[i].clear(); } } return range; } var range = getRange(true); if (getOption(cm, options, "scanUp")) while (!range && pos.line > cm.firstLine()) { pos = CodeMirror.Pos(pos.line - 1, 0); range = getRange(false); } if (!range || range.cleared || force === "unfold") return; var myWidget = makeWidget(cm, options, range); CodeMirror.on(myWidget, "mousedown", function(e) { myRange.clear(); CodeMirror.e_preventDefault(e); }); var myRange = cm.markText(range.from, range.to, { replacedWith: myWidget, clearOnEnter: getOption(cm, options, "clearOnEnter"), __isFold: true }); myRange.on("clear", function(from, to) { CodeMirror.signal(cm, "unfold", cm, from, to); }); CodeMirror.signal(cm, "fold", cm, range.from, range.to); } function makeWidget(cm, options, range) { var widget = getOption(cm, options, "widget"); if (typeof widget == "function") { widget = widget(range.from, range.to); } if (typeof widget == "string") { var text = document.createTextNode(widget); widget = document.createElement("span"); widget.appendChild(text); widget.className = "CodeMirror-foldmarker"; } else if (widget) { widget = widget.cloneNode(true) } return widget; } // Clumsy backwards-compatible interface CodeMirror.newFoldFunction = function(rangeFinder, widget) { return function(cm, pos) { doFold(cm, pos, {rangeFinder: rangeFinder, widget: widget}); }; }; // New-style interface CodeMirror.defineExtension("foldCode", function(pos, options, force) { doFold(this, pos, options, force); }); CodeMirror.defineExtension("isFolded", function(pos) { var marks = this.findMarksAt(pos); for (var i = 0; i < marks.length; ++i) if (marks[i].__isFold) return true; }); CodeMirror.commands.toggleFold = function(cm) { cm.foldCode(cm.getCursor()); }; CodeMirror.commands.fold = function(cm) { cm.foldCode(cm.getCursor(), null, "fold"); }; CodeMirror.commands.unfold = function(cm) { cm.foldCode(cm.getCursor(), null, "unfold"); }; CodeMirror.commands.foldAll = function(cm) { cm.operation(function() { for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++) cm.foldCode(CodeMirror.Pos(i, 0), null, "fold"); }); }; CodeMirror.commands.unfoldAll = function(cm) { cm.operation(function() { for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++) cm.foldCode(CodeMirror.Pos(i, 0), null, "unfold"); }); }; CodeMirror.registerHelper("fold", "combine", function() { var funcs = Array.prototype.slice.call(arguments, 0); return function(cm, start) { for (var i = 0; i < funcs.length; ++i) { var found = funcs[i](cm, start); if (found) return found; } }; }); CodeMirror.registerHelper("fold", "auto", function(cm, start) { var helpers = cm.getHelpers(start, "fold"); for (var i = 0; i < helpers.length; i++) { var cur = helpers[i](cm, start); if (cur) return cur; } }); var defaultOptions = { rangeFinder: CodeMirror.fold.auto, widget: "...", minFoldSize: 0, scanUp: false, clearOnEnter: true }; CodeMirror.defineOption("foldOptions", null); function getOption(cm, options, name) { if (options && options[name] !== undefined) return options[name]; var editorOptions = cm.options.foldOptions; if (editorOptions && editorOptions[name] !== undefined) return editorOptions[name]; return defaultOptions[name]; } CodeMirror.defineExtension("foldOption", function(options, name) { return getOption(this, options, name); }); }); /** * addon/fold/foldgutter.js */ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("./foldcode")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "./foldcode"], mod); else // Plain browser env mod(CodeMirror); }) (function(CodeMirror) { "use strict"; CodeMirror.defineOption("foldGutter", false, function(cm, val, old) { if (old && old != CodeMirror.Init) { cm.clearGutter(cm.state.foldGutter.options.gutter); cm.state.foldGutter = null; cm.off("gutterClick", onGutterClick); cm.off("changes", onChange); cm.off("viewportChange", onViewportChange); cm.off("fold", onFold); cm.off("unfold", onFold); cm.off("swapDoc", onChange); } if (val) { cm.state.foldGutter = new State(parseOptions(val)); updateInViewport(cm); cm.on("gutterClick", onGutterClick); cm.on("changes", onChange); cm.on("viewportChange", onViewportChange); cm.on("fold", onFold); cm.on("unfold", onFold); cm.on("swapDoc", onChange); } }); var Pos = CodeMirror.Pos; function State(options) { this.options = options; this.from = this.to = 0; } function parseOptions(opts) { if (opts === true) opts = {}; if (opts.gutter == null) opts.gutter = "CodeMirror-foldgutter"; if (opts.indicatorOpen == null) opts.indicatorOpen = "CodeMirror-foldgutter-open"; if (opts.indicatorFolded == null) opts.indicatorFolded = "CodeMirror-foldgutter-folded"; return opts; } function isFolded(cm, line) { var marks = cm.findMarks(Pos(line, 0), Pos(line + 1, 0)); for (var i = 0; i < marks.length; ++i) { if (marks[i].__isFold) { var fromPos = marks[i].find(-1); if (fromPos && fromPos.line === line) return marks[i]; } } } function marker(spec) { if (typeof spec == "string") { var elt = document.createElement("div"); elt.className = spec + " CodeMirror-guttermarker-subtle"; return elt; } else { return spec.cloneNode(true); } } function updateFoldInfo(cm, from, to) { var opts = cm.state.foldGutter.options, cur = from - 1; var minSize = cm.foldOption(opts, "minFoldSize"); var func = cm.foldOption(opts, "rangeFinder"); // we can reuse the built-in indicator element if its className matches the new state var clsFolded = typeof opts.indicatorFolded == "string" && classTest(opts.indicatorFolded); var clsOpen = typeof opts.indicatorOpen == "string" && classTest(opts.indicatorOpen); cm.eachLine(from, to, function(line) { ++cur; var mark = null; var old = line.gutterMarkers; if (old) old = old[opts.gutter]; if (isFolded(cm, cur)) { if (clsFolded && old && clsFolded.test(old.className)) return; mark = marker(opts.indicatorFolded); } else { var pos = Pos(cur, 0); var range = func && func(cm, pos); if (range && range.to.line - range.from.line >= minSize) { if (clsOpen && old && clsOpen.test(old.className)) return; mark = marker(opts.indicatorOpen); } } if (!mark && !old) return; cm.setGutterMarker(line, opts.gutter, mark); }); } // copied from CodeMirror/src/util/dom.js function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*") } function updateInViewport(cm) { var vp = cm.getViewport(), state = cm.state.foldGutter; if (!state) return; cm.operation(function() { updateFoldInfo(cm, vp.from, vp.to); }); state.from = vp.from; state.to = vp.to; } function onGutterClick(cm, line, gutter) { var state = cm.state.foldGutter; if (!state) return; var opts = state.options; if (gutter != opts.gutter) return; var folded = isFolded(cm, line); if (folded) folded.clear(); else cm.foldCode(Pos(line, 0), opts); } function onChange(cm) { var state = cm.state.foldGutter; if (!state) return; var opts = state.options; state.from = state.to = 0; clearTimeout(state.changeUpdate); state.changeUpdate = setTimeout(function() { updateInViewport(cm); }, opts.foldOnChangeTimeSpan || 600); } function onViewportChange(cm) { var state = cm.state.foldGutter; if (!state) return; var opts = state.options; clearTimeout(state.changeUpdate); state.changeUpdate = setTimeout(function() { var vp = cm.getViewport(); if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) { updateInViewport(cm); } else { cm.operation(function() { if (vp.from < state.from) { updateFoldInfo(cm, vp.from, state.from); state.from = vp.from; } if (vp.to > state.to) { updateFoldInfo(cm, state.to, vp.to); state.to = vp.to; } }); } }, opts.updateViewportTimeSpan || 400); } function onFold(cm, from) { var state = cm.state.foldGutter; if (!state) return; var line = from.line; if (line >= state.from && line < state.to) updateFoldInfo(cm, line, line + 1); } }); /** * addon/fold/markdown-fold.js */ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); }) (function(CodeMirror) { "use strict"; CodeMirror.registerHelper("fold", "markdown", function(cm, start) { var maxDepth = 100; function isHeader(lineNo) { var tokentype = cm.getTokenTypeAt(CodeMirror.Pos(lineNo, 0)); return tokentype && /\bheader\b/.test(tokentype); } function headerLevel(lineNo, line, nextLine) { var match = line && line.match(/^#+/); if (match && isHeader(lineNo)) return match[0].length; match = nextLine && nextLine.match(/^[=\-]+\s*$/); if (match && isHeader(lineNo + 1)) return nextLine[0] == "=" ? 1 : 2; return maxDepth; } var firstLine = cm.getLine(start.line), nextLine = cm.getLine(start.line + 1); var level = headerLevel(start.line, firstLine, nextLine); if (level === maxDepth) return undefined; var lastLineNo = cm.lastLine(); var end = start.line, nextNextLine = cm.getLine(end + 2); while (end < lastLineNo) { if (headerLevel(end + 1, nextLine, nextNextLine) <= level) break; ++end; nextLine = nextNextLine; nextNextLine = cm.getLine(end + 2); } return { from: CodeMirror.Pos(start.line, firstLine.length), to: CodeMirror.Pos(end, cm.getLine(end).length) }; }); }); /** * addon/fold/indent-fold.js */ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); }) (function(CodeMirror) { "use strict"; function lineIndent(cm, lineNo) { var text = cm.getLine(lineNo) var spaceTo = text.search(/\S/) if (spaceTo == -1 || /\bcomment\b/.test(cm.getTokenTypeAt(CodeMirror.Pos(lineNo, spaceTo + 1)))) return -1 return CodeMirror.countColumn(text, null, cm.getOption("tabSize")) } CodeMirror.registerHelper("fold", "indent", function(cm, start) { var myIndent = lineIndent(cm, start.line) if (myIndent < 0) return var lastLineInFold = null // Go through lines until we find a line that definitely doesn't belong in // the block we're folding, or to the end. for (var i = start.line + 1, end = cm.lastLine(); i <= end; ++i) { var indent = lineIndent(cm, i) if (indent == -1) { } else if (indent > myIndent) { // Lines with a greater indent are considered part of the block. lastLineInFold = i; } else { // If this line has non-space, non-comment content, and is // indented less or equal to the start line, it is the start of // another block. break; } } if (lastLineInFold) return { from: CodeMirror.Pos(start.line, cm.getLine(start.line).length), to: CodeMirror.Pos(lastLineInFold, cm.getLine(lastLineInFold).length) }; }); }); /** * addon/edit/continuelist.js */ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); }) (function(CodeMirror) { "use strict"; var listRE = /^(\s*)(>[> ]*|[*+-] \[.\]\s|[*+-]\s|(\d+)([.)]\s))(\s*)/, emptyListRE = /^(\s*)(>[> ]*|[*+-] \[.\]|[*+-]|(\d+)[.)]\s)(\s*)$/, unorderedListRE = /[*+-]\s/; CodeMirror.commands.newlineAndIndentContinueMarkdownList = function(cm) { if (cm.getOption("disableInput")) return CodeMirror.Pass; var ranges = cm.listSelections(), replacements = []; for (var i = 0; i < ranges.length; i++) { var pos = ranges[i].head; // If we're not in Markdown mode, fall back to normal newlineAndIndent var eolState = cm.getStateAfter(pos.line); var inner = CodeMirror.innerMode(cm.getMode(), eolState); if (inner.mode.name !== "markdown") { cm.execCommand("newlineAndIndent"); return; } else { eolState = inner.state; } var inList = eolState.list !== false; var inQuote = eolState.quote !== 0; var line = cm.getLine(pos.line), match = listRE.exec(line); var cursorBeforeBullet = /^\s*$/.test(line.slice(0, pos.ch)); if (!ranges[i].empty() || (!inList && !inQuote) || !match || cursorBeforeBullet) { cm.execCommand("newlineAndIndent"); return; } if (emptyListRE.test(line)) { var endOfQuote = inQuote && />\s*$/.test(line) var endOfList = !/>\s*$/.test(line) if (endOfQuote || endOfList) cm.replaceRange("", { line: pos.line, ch: 0 }, { line: pos.line, ch: pos.ch + 1 }); replacements[i] = "\n"; } else { var indent = match[1], after = match[5]; var numbered = !(unorderedListRE.test(match[2]) || match[2].indexOf(">") >= 0); var bullet = numbered ? (parseInt(match[3], 10) + 1) + match[4] : match[2].replace("x", " "); replacements[i] = "\n" + indent + bullet + after; if (numbered) incrementRemainingMarkdownListNumbers(cm, pos); } } cm.replaceSelections(replacements); }; CodeMirror.commands.indentUnindentContinueMarkdownList = function (cm) { if (cm.getOption("disableInput")) { return CodeMirror.Pass; } var ranges = cm.listSelections(), replacements = []; for (var i = 0; i < ranges.length; i++) { var pos = ranges[i].head; fixMarkdownListNumbers(cm, pos.line, false); fixMarkdownListNumbers(cm, pos.line + 1, true); } }; function fixMarkdownListNumbers(cm, lineNum, rest) { var eolState = cm.getStateAfter(lineNum); var inner = CodeMirror.innerMode(cm.getMode(), eolState); if (inner.mode.name !== "markdown") { return; } else { eolState = inner.state; } var inList = eolState.list !== false; var inQuote = eolState.quote !== 0; if (!inList && !inQuote) { return; } var thisLine = cm.getLine(lineNum), thisItem = listRE.exec(thisLine); if (!thisLine || !thisItem) { return; } var numbered = !(unorderedListRE.test(thisItem[2]) || thisItem[2].indexOf(">") >= 0); if (numbered) { var thisIndent = thisItem[1]; // Look for a previous item of the same indent var prevLineNum = lineNum - 1; var lastNumber = 0; var lastList = null; while (prevLineNum >= 0) { let prevLineText = cm.getLine(prevLineNum); var prevItem = listRE.exec(prevLineText); if (!prevItem) { break; } var prevIndent = prevItem[1]; if (prevIndent === thisIndent) { if (unorderedListRE.test(prevItem[2]) || prevItem[2].indexOf(">") >= 0) { lastList = prevItem[2]; } else { lastNumber = parseInt(prevItem[3], 10); } break; } if (prevIndent.length < thisIndent.length) { break; } prevLineNum--; } // Keep previous list if (lastList) { cm.replaceRange( thisLine.replace(listRE, thisIndent + lastList + thisItem[5]), {line: lineNum, ch: 0}, {line: lineNum, ch: thisLine.length} ); return; } lastNumber++; cm.replaceRange( thisLine.replace(listRE, thisIndent + lastNumber + thisItem[4] + thisItem[5]), {line: lineNum, ch: 0}, {line: lineNum, ch: thisLine.length} ); var nextLineNum = lineNum + 1; while (true) { var nextLine = cm.getLine(nextLineNum), nextItem = listRE.exec(nextLine); if (!nextItem) { break; } var nextIndent = nextItem[1]; var isNumber = !(unorderedListRE.test(nextItem[2]) || nextItem[2].indexOf(">") >= 0); if (nextIndent === thisIndent && isNumber) { lastNumber++; cm.replaceRange( nextLine.replace(listRE, nextIndent + lastNumber + nextItem[4] + nextItem[5]), {line: nextLineNum, ch: 0}, {line: nextLineNum, ch: nextLine.length} ); } if (nextIndent.length < thisIndent.length) { break; } nextLineNum++; } } } // Auto-updating Markdown list numbers when a new item is added to the // middle of a list function incrementRemainingMarkdownListNumbers(cm, pos) { var startLine = pos.line, lookAhead = 0, skipCount = 0; var startItem = listRE.exec(cm.getLine(startLine)), startIndent = startItem[1]; do { lookAhead += 1; var nextLineNumber = startLine + lookAhead; var nextLine = cm.getLine(nextLineNumber), nextItem = listRE.exec(nextLine); if (nextItem) { var nextIndent = nextItem[1]; var newNumber = (parseInt(startItem[3], 10) + lookAhead - skipCount); var nextNumber = (parseInt(nextItem[3], 10)), itemNumber = nextNumber; var isNumber = !(unorderedListRE.test(nextItem[2]) || nextItem[2].indexOf(">") >= 0); if (startIndent === nextIndent && !isNaN(nextNumber) && isNumber) { if (newNumber === nextNumber) itemNumber = nextNumber + 1; if (newNumber > nextNumber) itemNumber = newNumber + 1; cm.replaceRange( nextLine.replace(listRE, nextIndent + itemNumber + nextItem[4] + nextItem[5]), { line: nextLineNumber, ch: 0 }, { line: nextLineNumber, ch: nextLine.length }); } else { if (startIndent.length > nextIndent.length) return; // This doesn't run if the next line immediatley indents, as it is // not clear of the users intention (new indented item or same level) if ((startIndent.length < nextIndent.length) && (lookAhead === 1)) return; skipCount += 1; } } } while (nextItem); } }); /** * Modified version of addon/edit/indentlist.js from https://github.com/joel-porquet/CodeMirror-markdown-list-autoindent */ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); }) (function(CodeMirror) { "use strict"; var Pos = CodeMirror.Pos; var listTokenRE = /^(\s*)(>[> ]*|[*+-] \[[x ]\]|[*+-]|(\d+)[.)])(\s*)$/; var spaceRE = /^\s*$/; function matchListToken(pos, cm) { /* Get some info about the current state */ var eolState = cm.getStateAfter(pos.line); var inList = eolState.list !== false; var inQuote = eolState.quote !== 0; /* Get the line from the start to where the cursor currently is */ var lineStart = cm.getRange(Pos(pos.line, 0), pos); /* Matches the beginning of the list line with the list token RE */ var match = listTokenRE.exec(lineStart); /* Not being in a list, or being in a list but not right after the list * token, are both not considered a match */ if ((!inList && !inQuote) || !match) return false else return true } CodeMirror.commands.autoIndentMarkdownList = function(cm) { if (cm.getOption("disableInput")) return CodeMirror.Pass; var ranges = cm.listSelections(); for (var i = 0; i < ranges.length; i++) { var pos = ranges[i].head; if (!ranges[i].empty() || !matchListToken(pos, cm)) { /* If no match, call regular Tab handler */ cm.execCommand("defaultTab"); cm.execCommand("indentUnindentContinueMarkdownList"); return; } /* Select the whole list line and indent it by one unit */ cm.indentLine(pos.line, "add"); cm.execCommand("indentUnindentContinueMarkdownList"); } }; CodeMirror.commands.autoUnindentMarkdownList = function(cm) { if (cm.getOption("disableInput")) return CodeMirror.Pass; var ranges = cm.listSelections(); for (var i = 0; i < ranges.length; i++) { var pos = ranges[i].head; if (!ranges[i].empty() || !matchListToken(pos, cm)) { /* If no match, call regular Shift-Tab handler */ cm.execCommand("indentLess"); cm.execCommand("indentUnindentContinueMarkdownList"); return; } /* Select the whole list line and unindent it by one unit */ cm.indentLine(pos.line, "subtract"); cm.execCommand("indentUnindentContinueMarkdownList"); } }; }); /** * addon/selection/active-line.js */ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); }) (function(CodeMirror) { "use strict"; var WRAP_CLASS = "CodeMirror-activeline"; var BACK_CLASS = "CodeMirror-activeline-background"; var GUTT_CLASS = "CodeMirror-activeline-gutter"; CodeMirror.defineOption("styleActiveLine", false, function(cm, val, old) { var prev = old == CodeMirror.Init ? false : old; if (val == prev) return if (prev) { cm.off("beforeSelectionChange", selectionChange); clearActiveLines(cm); delete cm.state.activeLines; } if (val) { cm.state.activeLines = []; updateActiveLines(cm, cm.listSelections()); cm.on("beforeSelectionChange", selectionChange); } }); function clearActiveLines(cm) { for (var i = 0; i < cm.state.activeLines.length; i++) { cm.removeLineClass(cm.state.activeLines[i], "wrap", WRAP_CLASS); cm.removeLineClass(cm.state.activeLines[i], "background", BACK_CLASS); cm.removeLineClass(cm.state.activeLines[i], "gutter", GUTT_CLASS); } } function sameArray(a, b) { if (a.length != b.length) return false; for (var i = 0; i < a.length; i++) if (a[i] != b[i]) return false; return true; } function updateActiveLines(cm, ranges) { var active = []; for (var i = 0; i < ranges.length; i++) { var range = ranges[i]; var option = cm.getOption("styleActiveLine"); if (typeof option == "object" && option.nonEmpty ? range.anchor.line != range.head.line : !range.empty()) continue var line = cm.getLineHandleVisualStart(range.head.line); if (active[active.length - 1] != line) active.push(line); } if (sameArray(cm.state.activeLines, active)) return; cm.operation(function() { clearActiveLines(cm); for (var i = 0; i < active.length; i++) { cm.addLineClass(active[i], "wrap", WRAP_CLASS); cm.addLineClass(active[i], "background", BACK_CLASS); cm.addLineClass(active[i], "gutter", GUTT_CLASS); } cm.state.activeLines = active; }); } function selectionChange(cm, sel) { updateActiveLines(cm, sel.ranges); } }); /** * addon/scroll/scrollpastend.js */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); }) (function(CodeMirror) { "use strict"; CodeMirror.defineOption("scrollPastEnd", false, function(cm, val, old) { if (old && old != CodeMirror.Init) { cm.off("change", onChange); cm.off("refresh", updateBottomMargin); cm.display.lineSpace.parentNode.style.paddingBottom = ""; cm.state.scrollPastEndPadding = null; } if (val) { cm.on("change", onChange); cm.on("refresh", updateBottomMargin); updateBottomMargin(cm); } }); function onChange(cm, change) { if (CodeMirror.changeEnd(change).line == cm.lastLine()) updateBottomMargin(cm); } function updateBottomMargin(cm) { var padding = ""; if (cm.lineCount() > 1) { var totalH = cm.display.scroller.clientHeight - 30, lastLineH = cm.getLineHandle(cm.lastLine()).height; padding = (totalH / 2 - lastLineH) + "px"; } if (cm.state.scrollPastEndPadding != padding) { cm.state.scrollPastEndPadding = padding; cm.display.lineSpace.parentNode.style.paddingBottom = padding; cm.off("refresh", updateBottomMargin); cm.setSize(); cm.on("refresh", updateBottomMargin); } } }); /** * addon/dialog/dialog.js */ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE // Open simple dialogs on top of an editor. Relies on dialog.css. (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); }) (function(CodeMirror) { function dialogDiv(cm, template, bottom) { var wrap = cm.getWrapperElement(); var dialog; dialog = wrap.appendChild(document.createElement("div")); if (bottom) dialog.className = "CodeMirror-dialog CodeMirror-dialog-bottom"; else dialog.className = "CodeMirror-dialog CodeMirror-dialog-top"; if (typeof template == "string") { dialog.innerHTML = template; } else { // Assuming it's a detached DOM element. dialog.appendChild(template); } CodeMirror.addClass(wrap, 'dialog-opened'); return dialog; } function closeNotification(cm, newVal) { if (cm.state.currentNotificationClose) cm.state.currentNotificationClose(); cm.state.currentNotificationClose = newVal; } CodeMirror.defineExtension("openDialog", function(template, callback, options) { if (!options) options = {}; closeNotification(this, null); var dialog = dialogDiv(this, template, options.bottom); var closed = false, me = this; function close(newVal) { if (typeof newVal == 'string') { inp.value = newVal; } else { if (closed) return; closed = true; CodeMirror.rmClass(dialog.parentNode, 'dialog-opened'); dialog.parentNode.removeChild(dialog); me.focus(); if (options.onClose) options.onClose(dialog); } } var inp = dialog.getElementsByTagName("input")[0], button; if (inp) { inp.focus(); if (options.value) { inp.value = options.value; if (options.selectValueOnOpen !== false) { inp.select(); } } if (options.onInput) CodeMirror.on(inp, "input", function(e) { options.onInput(e, inp.value, close);}); if (options.onKeyUp) CodeMirror.on(inp, "keyup", function(e) {options.onKeyUp(e, inp.value, close);}); CodeMirror.on(inp, "keydown", function(e) { if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { return; } if (e.keyCode == 27 || (options.closeOnEnter !== false && e.keyCode == 13)) { inp.blur(); CodeMirror.e_stop(e); close(); } if (e.keyCode == 13) callback(inp.value, e); }); if (options.closeOnBlur !== false) CodeMirror.on(dialog, "focusout", function (evt) { if (evt.relatedTarget !== null) close(); }); } else if (button = dialog.getElementsByTagName("button")[0]) { CodeMirror.on(button, "click", function() { close(); me.focus(); }); if (options.closeOnBlur !== false) CodeMirror.on(button, "blur", close); button.focus(); } return close; }); CodeMirror.defineExtension("openConfirm", function(template, callbacks, options) { closeNotification(this, null); var dialog = dialogDiv(this, template, options && options.bottom); var buttons = dialog.getElementsByTagName("button"); var closed = false, me = this, blurring = 1; function close() { if (closed) return; closed = true; CodeMirror.rmClass(dialog.parentNode, 'dialog-opened'); dialog.parentNode.removeChild(dialog); me.focus(); } buttons[0].focus(); for (var i = 0; i < buttons.length; ++i) { var b = buttons[i]; (function(callback) { CodeMirror.on(b, "click", function(e) { CodeMirror.e_preventDefault(e); close(); if (callback) callback(me); }); })(callbacks[i]); CodeMirror.on(b, "blur", function() { --blurring; setTimeout(function() { if (blurring <= 0) close(); }, 200); }); CodeMirror.on(b, "focus", function() { ++blurring; }); } }); /* * openNotification * Opens a notification, that can be closed with an optional timer * (default 5000ms timer) and always closes on click. * * If a notification is opened while another is opened, it will close the * currently opened one and open the new one immediately. */ CodeMirror.defineExtension("openNotification", function(template, options) { closeNotification(this, close); var dialog = dialogDiv(this, template, options && options.bottom); var closed = false, doneTimer; var duration = options && typeof options.duration !== "undefined" ? options.duration : 5000; function close() { if (closed) return; closed = true; clearTimeout(doneTimer); CodeMirror.rmClass(dialog.parentNode, 'dialog-opened'); dialog.parentNode.removeChild(dialog); } CodeMirror.on(dialog, 'click', function(e) { CodeMirror.e_preventDefault(e); close(); }); if (duration) doneTimer = setTimeout(close, duration); return close; }); }); // OBSIDIAN CUSTOM BEHAVIOR // ALWAYS KEEP AT THE BOTTOM let Pos = CodeMirror.Pos; // from https://codemirror.net/keymap/sublime.js CodeMirror.commands.swapLineUp = function(cm) { if (cm.isReadOnly()) return CodeMirror.Pass var ranges = cm.listSelections(), linesToMove = [], at = cm.firstLine() - 1, newSels = []; for (var i = 0; i < ranges.length; i++) { var range = ranges[i], from = range.from().line - 1, to = range.to().line; newSels.push({anchor: Pos(range.anchor.line - 1, range.anchor.ch), head: Pos(range.head.line - 1, range.head.ch)}); if (range.to().ch == 0 && !range.empty()) --to; if (from > at) linesToMove.push(from, to); else if (linesToMove.length) linesToMove[linesToMove.length - 1] = to; at = to; } cm.operation(function() { for (var i = 0; i < linesToMove.length; i += 2) { var from = linesToMove[i], to = linesToMove[i + 1]; var line = cm.getLine(from); cm.replaceRange("", Pos(from, 0), Pos(from + 1, 0), "+swapLine"); if (to > cm.lastLine()) cm.replaceRange("\n" + line, Pos(cm.lastLine()), null, "+swapLine"); else cm.replaceRange(line + "\n", Pos(to, 0), null, "+swapLine"); } cm.setSelections(newSels); cm.scrollIntoView(); }); }; // from https://codemirror.net/keymap/sublime.js CodeMirror.commands.swapLineDown = function(cm) { if (cm.isReadOnly()) return CodeMirror.Pass var ranges = cm.listSelections(), linesToMove = [], at = cm.lastLine() + 1; for (var i = ranges.length - 1; i >= 0; i--) { var range = ranges[i], from = range.to().line + 1, to = range.from().line; if (range.to().ch == 0 && !range.empty()) from--; if (from < at) linesToMove.push(from, to); else if (linesToMove.length) linesToMove[linesToMove.length - 1] = to; at = to; } cm.operation(function() { for (var i = linesToMove.length - 2; i >= 0; i -= 2) { var from = linesToMove[i], to = linesToMove[i + 1]; var line = cm.getLine(from); if (from == cm.lastLine()) cm.replaceRange("", Pos(from - 1), Pos(from), "+swapLine"); else cm.replaceRange("", Pos(from, 0), Pos(from + 1, 0), "+swapLine"); cm.replaceRange(line + "\n", Pos(to, 0), null, "+swapLine"); } cm.scrollIntoView(); }); }; CodeMirror.registerHelper('fold', 'frontmatter', function (cm, start) { if (cm.getLine(start.line) !== '---') { return undefined; } for (let prevLine = start.line - 1; prevLine >= 0; prevLine--) { if (cm.getLine(prevLine).trim()) { return undefined; } } var lastLineNo = cm.lastLine(); var end = start.line + 1; while (end < lastLineNo) { if (cm.getLine(end) === '---') { break; } end++; } return { from: CodeMirror.Pos(start.line, 3), to: CodeMirror.Pos(end, 3) }; }); CodeMirror.commands.defaultTab = function (cm) { if (cm.somethingSelected()) { cm.execCommand('indentMore'); } else { if (cm.getOption('indentWithTabs')) { cm.execCommand('insertTab'); } else { cm.execCommand('insertSoftTab'); } } } // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE // This is CodeMirror (https://codemirror.net), a code editor // implemented in JavaScript on top of the browser's DOM. // // You can find some technical background for some of the code below // at http://marijnhaverbeke.nl/blog/#cm-internals . (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.CodeMirror = factory()); }(this, (function () { 'use strict'; // Kludges for bugs and behavior differences that can't be feature // detected are enabled based on userAgent etc sniffing. var userAgent = navigator.userAgent; var platform = navigator.platform; var gecko = /gecko\/\d/i.test(userAgent); var ie_upto10 = /MSIE \d/.test(userAgent); var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent); var edge = /Edge\/(\d+)/.exec(userAgent); var ie = ie_upto10 || ie_11up || edge; var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]); var webkit = !edge && /WebKit\//.test(userAgent); var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent); var chrome = !edge && /Chrome\//.test(userAgent); var presto = /Opera\//.test(userAgent); var safari = /Apple Computer/.test(navigator.vendor); var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent); var phantom = /PhantomJS/.test(userAgent); var ios = safari && (/Mobile\/\w+/.test(userAgent) || navigator.maxTouchPoints > 2); var android = /Android/.test(userAgent); // This is woefully incomplete. Suggestions for alternative methods welcome. var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent); var mac = ios || /Mac/.test(platform); var chromeOS = /\bCrOS\b/.test(userAgent); var windows = /win/i.test(platform); var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/); if (presto_version) { presto_version = Number(presto_version[1]); } if (presto_version && presto_version >= 15) { presto = false; webkit = true; } // Some browsers use the wrong event properties to signal cmd/ctrl on OS X var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)); var captureRightClick = gecko || (ie && ie_version >= 9); function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*") } var rmClass = function(node, cls) { var current = node.className; var match = classTest(cls).exec(current); if (match) { var after = current.slice(match.index + match[0].length); node.className = current.slice(0, match.index) + (after ? match[1] + after : ""); } }; function removeChildren(e) { for (var count = e.childNodes.length; count > 0; --count) { e.removeChild(e.firstChild); } return e } function removeChildrenAndAdd(parent, e) { return removeChildren(parent).appendChild(e) } function elt(tag, content, className, style) { var e = document.createElement(tag); if (className) { e.className = className; } if (style) { e.style.cssText = style; } if (typeof content == "string") { e.appendChild(document.createTextNode(content)); } else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } } return e } // wrapper for elt, which removes the elt from the accessibility tree function eltP(tag, content, className, style) { var e = elt(tag, content, className, style); e.setAttribute("role", "presentation"); return e } var range; if (document.createRange) { range = function(node, start, end, endNode) { var r = document.createRange(); r.setEnd(endNode || node, end); r.setStart(node, start); return r }; } else { range = function(node, start, end) { var r = document.body.createTextRange(); try { r.moveToElementText(node.parentNode); } catch(e) { return r } r.collapse(true); r.moveEnd("character", end); r.moveStart("character", start); return r }; } function contains(parent, child) { if (child.nodeType == 3) // Android browser always returns false when child is a textnode { child = child.parentNode; } if (parent.contains) { return parent.contains(child) } do { if (child.nodeType == 11) { child = child.host; } if (child == parent) { return true } } while (child = child.parentNode) } function activeElt() { // IE and Edge may throw an "Unspecified Error" when accessing document.activeElement. // IE < 10 will throw when accessed while the page is loading or in an iframe. // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable. var activeElement; try { activeElement = document.activeElement; } catch(e) { activeElement = document.body || null; } while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) { activeElement = activeElement.shadowRoot.activeElement; } return activeElement } function addClass(node, cls) { var current = node.className; if (!classTest(cls).test(current)) { node.className += (current ? " " : "") + cls; } } function joinClasses(a, b) { var as = a.split(" "); for (var i = 0; i < as.length; i++) { if (as[i] && !classTest(as[i]).test(b)) { b += " " + as[i]; } } return b } var selectInput = function(node) { node.select(); }; if (ios) // Mobile Safari apparently has a bug where select() is broken. { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; } else if (ie) // Suppress mysterious IE10 errors { selectInput = function(node) { try { node.select(); } catch(_e) {} }; } function bind(f) { var args = Array.prototype.slice.call(arguments, 1); return function(){return f.apply(null, args)} } function copyObj(obj, target, overwrite) { if (!target) { target = {}; } for (var prop in obj) { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) { target[prop] = obj[prop]; } } return target } // Counts the column offset in a string, taking tabs into account. // Used mostly to find indentation. function countColumn(string, end, tabSize, startIndex, startValue) { if (end == null) { end = string.search(/[^\s\u00a0]/); if (end == -1) { end = string.length; } } for (var i = startIndex || 0, n = startValue || 0;;) { var nextTab = string.indexOf("\t", i); if (nextTab < 0 || nextTab >= end) { return n + (end - i) } n += nextTab - i; n += tabSize - (n % tabSize); i = nextTab + 1; } } var Delayed = function() { this.id = null; this.f = null; this.time = 0; this.handler = bind(this.onTimeout, this); }; Delayed.prototype.onTimeout = function (self) { self.id = 0; if (self.time <= +new Date) { self.f(); } else { setTimeout(self.handler, self.time - +new Date); } }; Delayed.prototype.set = function (ms, f) { this.f = f; var time = +new Date + ms; if (!this.id || time < this.time) { clearTimeout(this.id); this.id = setTimeout(this.handler, ms); this.time = time; } }; function indexOf(array, elt) { for (var i = 0; i < array.length; ++i) { if (array[i] == elt) { return i } } return -1 } // Number of pixels added to scroller and sizer to hide scrollbar var scrollerGap = 50; // Returned or thrown by various protocols to signal 'I'm not // handling this'. var Pass = {toString: function(){return "CodeMirror.Pass"}}; // Reused option objects for setSelection & friends var sel_dontScroll = {scroll: false}, sel_mouse = {origin: "*mouse"}, sel_move = {origin: "+move"}; // The inverse of countColumn -- find the offset that corresponds to // a particular column. function findColumn(string, goal, tabSize) { for (var pos = 0, col = 0;;) { var nextTab = string.indexOf("\t", pos); if (nextTab == -1) { nextTab = string.length; } var skipped = nextTab - pos; if (nextTab == string.length || col + skipped >= goal) { return pos + Math.min(skipped, goal - col) } col += nextTab - pos; col += tabSize - (col % tabSize); pos = nextTab + 1; if (col >= goal) { return pos } } } var spaceStrs = [""]; function spaceStr(n) { while (spaceStrs.length <= n) { spaceStrs.push(lst(spaceStrs) + " "); } return spaceStrs[n] } function lst(arr) { return arr[arr.length-1] } function map(array, f) { var out = []; for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); } return out } function insertSorted(array, value, score) { var pos = 0, priority = score(value); while (pos < array.length && score(array[pos]) <= priority) { pos++; } array.splice(pos, 0, value); } function nothing() {} function createObj(base, props) { var inst; if (Object.create) { inst = Object.create(base); } else { nothing.prototype = base; inst = new nothing(); } if (props) { copyObj(props, inst); } return inst } var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; function isWordCharBasic(ch) { return /\w/.test(ch) || ch > "\x80" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)) } function isWordChar(ch, helper) { if (!helper) { return isWordCharBasic(ch) } if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { return true } return helper.test(ch) } function isEmpty(obj) { for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } } return true } // Extending unicode characters. A series of a non-extending char + // any number of extending chars is treated as a single unit as far // as editing and measuring is concerned. This is not fully correct, // since some scripts/fonts/browsers also treat other configurations // of code points as a group. var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) } // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range. function skipExtendingChars(str, pos, dir) { while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; } return pos } // Returns the value from the range [`from`; `to`] that satisfies // `pred` and is closest to `from`. Assumes that at least `to` // satisfies `pred`. Supports `from` being greater than `to`. function findFirst(pred, from, to) { // At any point we are certain `to` satisfies `pred`, don't know // whether `from` does. var dir = from > to ? -1 : 1; for (;;) { if (from == to) { return from } var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF); if (mid == from) { return pred(mid) ? from : to } if (pred(mid)) { to = mid; } else { from = mid + dir; } } } // BIDI HELPERS function iterateBidiSections(order, from, to, f) { if (!order) { return f(from, to, "ltr", 0) } var found = false; for (var i = 0; i < order.length; ++i) { var part = order[i]; if (part.from < to && part.to > from || from == to && part.to == from) { f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr", i); found = true; } } if (!found) { f(from, to, "ltr"); } } var bidiOther = null; function getBidiPartAt(order, ch, sticky) { var found; bidiOther = null; for (var i = 0; i < order.length; ++i) { var cur = order[i]; if (cur.from < ch && cur.to > ch) { return i } if (cur.to == ch) { if (cur.from != cur.to && sticky == "before") { found = i; } else { bidiOther = i; } } if (cur.from == ch) { if (cur.from != cur.to && sticky != "before") { found = i; } else { bidiOther = i; } } } return found != null ? found : bidiOther } // Bidirectional ordering algorithm // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm // that this (partially) implements. // One-char codes used for character types: // L (L): Left-to-Right // R (R): Right-to-Left // r (AL): Right-to-Left Arabic // 1 (EN): European Number // + (ES): European Number Separator // % (ET): European Number Terminator // n (AN): Arabic Number // , (CS): Common Number Separator // m (NSM): Non-Spacing Mark // b (BN): Boundary Neutral // s (B): Paragraph Separator // t (S): Segment Separator // w (WS): Whitespace // N (ON): Other Neutrals // Returns null if characters are ordered as they appear // (left-to-right), or an array of sections ({from, to, level} // objects) in the order in which they occur visually. var bidiOrdering = (function() { // Character types for codepoints 0 to 0xff var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; // Character types for codepoints 0x600 to 0x6f9 var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111"; function charType(code) { if (code <= 0xf7) { return lowTypes.charAt(code) } else if (0x590 <= code && code <= 0x5f4) { return "R" } else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) } else if (0x6ee <= code && code <= 0x8ac) { return "r" } else if (0x2000 <= code && code <= 0x200b) { return "w" } else if (code == 0x200c) { return "b" } else { return "L" } } var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/; function BidiSpan(level, from, to) { this.level = level; this.from = from; this.to = to; } return function(str, direction) { var outerType = direction == "ltr" ? "L" : "R"; if (str.length == 0 || direction == "ltr" && !bidiRE.test(str)) { return false } var len = str.length, types = []; for (var i = 0; i < len; ++i) { types.push(charType(str.charCodeAt(i))); } // W1. Examine each non-spacing mark (NSM) in the level run, and // change the type of the NSM to the type of the previous // character. If the NSM is at the start of the level run, it will // get the type of sor. for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) { var type = types[i$1]; if (type == "m") { types[i$1] = prev; } else { prev = type; } } // W2. Search backwards from each instance of a European number // until the first strong type (R, L, AL, or sor) is found. If an // AL is found, change the type of the European number to Arabic // number. // W3. Change all ALs to R. for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) { var type$1 = types[i$2]; if (type$1 == "1" && cur == "r") { types[i$2] = "n"; } else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == "r") { types[i$2] = "R"; } } } // W4. A single European separator between two European numbers // changes to a European number. A single common separator between // two numbers of the same type changes to that type. for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) { var type$2 = types[i$3]; if (type$2 == "+" && prev$1 == "1" && types[i$3+1] == "1") { types[i$3] = "1"; } else if (type$2 == "," && prev$1 == types[i$3+1] && (prev$1 == "1" || prev$1 == "n")) { types[i$3] = prev$1; } prev$1 = type$2; } // W5. A sequence of European terminators adjacent to European // numbers changes to all European numbers. // W6. Otherwise, separators and terminators change to Other // Neutral. for (var i$4 = 0; i$4 < len; ++i$4) { var type$3 = types[i$4]; if (type$3 == ",") { types[i$4] = "N"; } else if (type$3 == "%") { var end = (void 0); for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {} var replace = (i$4 && types[i$4-1] == "!") || (end < len && types[end] == "1") ? "1" : "N"; for (var j = i$4; j < end; ++j) { types[j] = replace; } i$4 = end - 1; } } // W7. Search backwards from each instance of a European number // until the first strong type (R, L, or sor) is found. If an L is // found, then change the type of the European number to L. for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) { var type$4 = types[i$5]; if (cur$1 == "L" && type$4 == "1") { types[i$5] = "L"; } else if (isStrong.test(type$4)) { cur$1 = type$4; } } // N1. A sequence of neutrals takes the direction of the // surrounding strong text if the text on both sides has the same // direction. European and Arabic numbers act as if they were R in // terms of their influence on neutrals. Start-of-level-run (sor) // and end-of-level-run (eor) are used at level run boundaries. // N2. Any remaining neutrals take the embedding direction. for (var i$6 = 0; i$6 < len; ++i$6) { if (isNeutral.test(types[i$6])) { var end$1 = (void 0); for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {} var before = (i$6 ? types[i$6-1] : outerType) == "L"; var after = (end$1 < len ? types[end$1] : outerType) == "L"; var replace$1 = before == after ? (before ? "L" : "R") : outerType; for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; } i$6 = end$1 - 1; } } // Here we depart from the documented algorithm, in order to avoid // building up an actual levels array. Since there are only three // levels (0, 1, 2) in an implementation that doesn't take // explicit embedding into account, we can build up the order on // the fly, without following the level-based algorithm. var order = [], m; for (var i$7 = 0; i$7 < len;) { if (countsAsLeft.test(types[i$7])) { var start = i$7; for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {} order.push(new BidiSpan(0, start, i$7)); } else { var pos = i$7, at = order.length, isRTL = direction == "rtl" ? 1 : 0; for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {} for (var j$2 = pos; j$2 < i$7;) { if (countsAsNum.test(types[j$2])) { if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); at += isRTL; } var nstart = j$2; for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {} order.splice(at, 0, new BidiSpan(2, nstart, j$2)); at += isRTL; pos = j$2; } else { ++j$2; } } if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); } } } if (direction == "ltr") { if (order[0].level == 1 && (m = str.match(/^\s+/))) { order[0].from = m[0].length; order.unshift(new BidiSpan(0, 0, m[0].length)); } if (lst(order).level == 1 && (m = str.match(/\s+$/))) { lst(order).to -= m[0].length; order.push(new BidiSpan(0, len - m[0].length, len)); } } return direction == "rtl" ? order.reverse() : order } })(); // Get the bidi ordering for the given line (and cache it). Returns // false for lines that are fully left-to-right, and an array of // BidiSpan objects otherwise. function getOrder(line, direction) { var order = line.order; if (order == null) { order = line.order = bidiOrdering(line.text, direction); } return order } // EVENT HANDLING // Lightweight event framework. on/off also work on DOM nodes, // registering native DOM handlers. var noHandlers = []; var on = function(emitter, type, f) { if (emitter.addEventListener) { emitter.addEventListener(type, f, false); } else if (emitter.attachEvent) { emitter.attachEvent("on" + type, f); } else { var map = emitter._handlers || (emitter._handlers = {}); map[type] = (map[type] || noHandlers).concat(f); } }; function getHandlers(emitter, type) { return emitter._handlers && emitter._handlers[type] || noHandlers } function off(emitter, type, f) { if (emitter.removeEventListener) { emitter.removeEventListener(type, f, false); } else if (emitter.detachEvent) { emitter.detachEvent("on" + type, f); } else { var map = emitter._handlers, arr = map && map[type]; if (arr) { var index = indexOf(arr, f); if (index > -1) { map[type] = arr.slice(0, index).concat(arr.slice(index + 1)); } } } } function signal(emitter, type /*, values...*/) { var handlers = getHandlers(emitter, type); if (!handlers.length) { return } var args = Array.prototype.slice.call(arguments, 2); for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); } } // The DOM events that CodeMirror handles can be overridden by // registering a (non-DOM) handler on the editor for the event name, // and preventDefault-ing the event in that handler. function signalDOMEvent(cm, e, override) { if (typeof e == "string") { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; } signal(cm, override || e.type, cm, e); return e_defaultPrevented(e) || e.codemirrorIgnore } function signalCursorActivity(cm) { var arr = cm._handlers && cm._handlers.cursorActivity; if (!arr) { return } var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []); for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1) { set.push(arr[i]); } } } function hasHandler(emitter, type) { return getHandlers(emitter, type).length > 0 } // Add on and off methods to a constructor's prototype, to make // registering events on such objects more convenient. function eventMixin(ctor) { ctor.prototype.on = function(type, f) {on(this, type, f);}; ctor.prototype.off = function(type, f) {off(this, type, f);}; } // Due to the fact that we still support jurassic IE versions, some // compatibility wrappers are needed. function e_preventDefault(e) { if (e.preventDefault) { e.preventDefault(); } else { e.returnValue = false; } } function e_stopPropagation(e) { if (e.stopPropagation) { e.stopPropagation(); } else { e.cancelBubble = true; } } function e_defaultPrevented(e) { return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false } function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);} function e_target(e) {return e.target || e.srcElement} function e_button(e) { var b = e.which; if (b == null) { if (e.button & 1) { b = 1; } else if (e.button & 2) { b = 3; } else if (e.button & 4) { b = 2; } } if (mac && e.ctrlKey && b == 1) { b = 3; } return b } // Detect drag-and-drop var dragAndDrop = function() { // There is *some* kind of drag-and-drop support in IE6-8, but I // couldn't get it to work yet. if (ie && ie_version < 9) { return false } var div = elt('div'); return "draggable" in div || "dragDrop" in div }(); var zwspSupported; function zeroWidthElement(measure) { if (zwspSupported == null) { var test = elt("span", "\u200b"); removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); if (measure.firstChild.offsetHeight != 0) { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); } } var node = zwspSupported ? elt("span", "\u200b") : elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px"); node.setAttribute("cm-text", ""); return node } // Feature-detect IE's crummy client rect reporting for bidi text var badBidiRects; function hasBadBidiRects(measure) { if (badBidiRects != null) { return badBidiRects } var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")); var r0 = range(txt, 0, 1).getBoundingClientRect(); var r1 = range(txt, 1, 2).getBoundingClientRect(); removeChildren(measure); if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780) return badBidiRects = (r1.right - r0.right < 3) } // See if "".split is the broken IE version, if so, provide an // alternative way to split lines. var splitLinesAuto = "\n\nb".split(/\n/).length != 3 ? function (string) { var pos = 0, result = [], l = string.length; while (pos <= l) { var nl = string.indexOf("\n", pos); if (nl == -1) { nl = string.length; } var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); var rt = line.indexOf("\r"); if (rt != -1) { result.push(line.slice(0, rt)); pos += rt + 1; } else { result.push(line); pos = nl + 1; } } return result } : function (string) { return string.split(/\r\n?|\n/); }; var hasSelection = window.getSelection ? function (te) { try { return te.selectionStart != te.selectionEnd } catch(e) { return false } } : function (te) { var range; try {range = te.ownerDocument.selection.createRange();} catch(e) {} if (!range || range.parentElement() != te) { return false } return range.compareEndPoints("StartToEnd", range) != 0 }; var hasCopyEvent = (function () { var e = elt("div"); if ("oncopy" in e) { return true } e.setAttribute("oncopy", "return;"); return typeof e.oncopy == "function" })(); var badZoomedRects = null; function hasBadZoomedRects(measure) { if (badZoomedRects != null) { return badZoomedRects } var node = removeChildrenAndAdd(measure, elt("span", "x")); var normal = node.getBoundingClientRect(); var fromRange = range(node, 0, 1).getBoundingClientRect(); return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1 } // Known modes, by name and by MIME var modes = {}, mimeModes = {}; // Extra arguments are stored as the mode's dependencies, which is // used by (legacy) mechanisms like loadmode.js to automatically // load a mode. (Preferred mechanism is the require/define calls.) function defineMode(name, mode) { if (arguments.length > 2) { mode.dependencies = Array.prototype.slice.call(arguments, 2); } modes[name] = mode; } function defineMIME(mime, spec) { mimeModes[mime] = spec; } // Given a MIME type, a {name, ...options} config object, or a name // string, return a mode config object. function resolveMode(spec) { if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { spec = mimeModes[spec]; } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { var found = mimeModes[spec.name]; if (typeof found == "string") { found = {name: found}; } spec = createObj(found, spec); spec.name = found.name; } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { return resolveMode("application/xml") } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) { return resolveMode("application/json") } if (typeof spec == "string") { return {name: spec} } else { return spec || {name: "null"} } } // Given a mode spec (anything that resolveMode accepts), find and // initialize an actual mode object. function getMode(options, spec) { spec = resolveMode(spec); var mfactory = modes[spec.name]; if (!mfactory) { return getMode(options, "text/plain") } var modeObj = mfactory(options, spec); if (modeExtensions.hasOwnProperty(spec.name)) { var exts = modeExtensions[spec.name]; for (var prop in exts) { if (!exts.hasOwnProperty(prop)) { continue } if (modeObj.hasOwnProperty(prop)) { modeObj["_" + prop] = modeObj[prop]; } modeObj[prop] = exts[prop]; } } modeObj.name = spec.name; if (spec.helperType) { modeObj.helperType = spec.helperType; } if (spec.modeProps) { for (var prop$1 in spec.modeProps) { modeObj[prop$1] = spec.modeProps[prop$1]; } } return modeObj } // This can be used to attach properties to mode objects from // outside the actual mode definition. var modeExtensions = {}; function extendMode(mode, properties) { var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); copyObj(properties, exts); } function copyState(mode, state) { if (state === true) { return state } if (mode.copyState) { return mode.copyState(state) } var nstate = {}; for (var n in state) { var val = state[n]; if (val instanceof Array) { val = val.concat([]); } nstate[n] = val; } return nstate } // Given a mode and a state (for that mode), find the inner mode and // state at the position that the state refers to. function innerMode(mode, state) { var info; while (mode.innerMode) { info = mode.innerMode(state); if (!info || info.mode == mode) { break } state = info.state; mode = info.mode; } return info || {mode: mode, state: state} } function startState(mode, a1, a2) { return mode.startState ? mode.startState(a1, a2) : true } // STRING STREAM // Fed to the mode parsers, provides helper functions to make // parsers more succinct. var StringStream = function(string, tabSize, lineOracle) { this.pos = this.start = 0; this.string = string; this.tabSize = tabSize || 8; this.lastColumnPos = this.lastColumnValue = 0; this.lineStart = 0; this.lineOracle = lineOracle; }; StringStream.prototype.eol = function () {return this.pos >= this.string.length}; StringStream.prototype.sol = function () {return this.pos == this.lineStart}; StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined}; StringStream.prototype.next = function () { if (this.pos < this.string.length) { return this.string.charAt(this.pos++) } }; StringStream.prototype.eat = function (match) { var ch = this.string.charAt(this.pos); var ok; if (typeof match == "string") { ok = ch == match; } else { ok = ch && (match.test ? match.test(ch) : match(ch)); } if (ok) {++this.pos; return ch} }; StringStream.prototype.eatWhile = function (match) { var start = this.pos; while (this.eat(match)){} return this.pos > start }; StringStream.prototype.eatSpace = function () { var start = this.pos; while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { ++this.pos; } return this.pos > start }; StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;}; StringStream.prototype.skipTo = function (ch) { var found = this.string.indexOf(ch, this.pos); if (found > -1) {this.pos = found; return true} }; StringStream.prototype.backUp = function (n) {this.pos -= n;}; StringStream.prototype.column = function () { if (this.lastColumnPos < this.start) { this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); this.lastColumnPos = this.start; } return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0) }; StringStream.prototype.indentation = function () { return countColumn(this.string, null, this.tabSize) - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0) }; StringStream.prototype.match = function (pattern, consume, caseInsensitive) { if (typeof pattern == "string") { var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; }; var substr = this.string.substr(this.pos, pattern.length); if (cased(substr) == cased(pattern)) { if (consume !== false) { this.pos += pattern.length; } return true } } else { var match = this.string.slice(this.pos).match(pattern); if (match && match.index > 0) { return null } if (match && consume !== false) { this.pos += match[0].length; } return match } }; StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)}; StringStream.prototype.hideFirstChars = function (n, inner) { this.lineStart += n; try { return inner() } finally { this.lineStart -= n; } }; StringStream.prototype.lookAhead = function (n) { var oracle = this.lineOracle; return oracle && oracle.lookAhead(n) }; StringStream.prototype.baseToken = function () { var oracle = this.lineOracle; return oracle && oracle.baseToken(this.pos) }; // Find the line object corresponding to the given line number. function getLine(doc, n) { n -= doc.first; if (n < 0 || n >= doc.size) { throw new Error("There is no line " + (n + doc.first) + " in the document.") } var chunk = doc; while (!chunk.lines) { for (var i = 0;; ++i) { var child = chunk.children[i], sz = child.chunkSize(); if (n < sz) { chunk = child; break } n -= sz; } } return chunk.lines[n] } // Get the part of a document between two positions, as an array of // strings. function getBetween(doc, start, end) { var out = [], n = start.line; doc.iter(start.line, end.line + 1, function (line) { var text = line.text; if (n == end.line) { text = text.slice(0, end.ch); } if (n == start.line) { text = text.slice(start.ch); } out.push(text); ++n; }); return out } // Get the lines between from and to, as array of strings. function getLines(doc, from, to) { var out = []; doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value return out } // Update the height of a line, propagating the height change // upwards to parent nodes. function updateLineHeight(line, height) { var diff = height - line.height; if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } } } // Given a line object, find its line number by walking up through // its parent links. function lineNo(line) { if (line.parent == null) { return null } var cur = line.parent, no = indexOf(cur.lines, line); for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { for (var i = 0;; ++i) { if (chunk.children[i] == cur) { break } no += chunk.children[i].chunkSize(); } } return no + cur.first } // Find the line at the given vertical position, using the height // information in the document tree. function lineAtHeight(chunk, h) { var n = chunk.first; outer: do { for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) { var child = chunk.children[i$1], ch = child.height; if (h < ch) { chunk = child; continue outer } h -= ch; n += child.chunkSize(); } return n } while (!chunk.lines) var i = 0; for (; i < chunk.lines.length; ++i) { var line = chunk.lines[i], lh = line.height; if (h < lh) { break } h -= lh; } return n + i } function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size} function lineNumberFor(options, i) { return String(options.lineNumberFormatter(i + options.firstLineNumber)) } // A Pos instance represents a position within the text. function Pos(line, ch, sticky) { if ( sticky === void 0 ) sticky = null; if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) } this.line = line; this.ch = ch; this.sticky = sticky; } // Compare two positions, return 0 if they are the same, a negative // number when a is less, and a positive number otherwise. function cmp(a, b) { return a.line - b.line || a.ch - b.ch } function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 } function copyPos(x) {return Pos(x.line, x.ch)} function maxPos(a, b) { return cmp(a, b) < 0 ? b : a } function minPos(a, b) { return cmp(a, b) < 0 ? a : b } // Most of the external API clips given positions to make sure they // actually exist within the document. function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))} function clipPos(doc, pos) { if (pos.line < doc.first) { return Pos(doc.first, 0) } var last = doc.first + doc.size - 1; if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) } return clipToLen(pos, getLine(doc, pos.line).text.length) } function clipToLen(pos, linelen) { var ch = pos.ch; if (ch == null || ch > linelen) { return Pos(pos.line, linelen) } else if (ch < 0) { return Pos(pos.line, 0) } else { return pos } } function clipPosArray(doc, array) { var out = []; for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); } return out } var SavedContext = function(state, lookAhead) { this.state = state; this.lookAhead = lookAhead; }; var Context = function(doc, state, line, lookAhead) { this.state = state; this.doc = doc; this.line = line; this.maxLookAhead = lookAhead || 0; this.baseTokens = null; this.baseTokenPos = 1; }; Context.prototype.lookAhead = function (n) { var line = this.doc.getLine(this.line + n); if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; } return line }; Context.prototype.baseToken = function (n) { if (!this.baseTokens) { return null } while (this.baseTokens[this.baseTokenPos] <= n) { this.baseTokenPos += 2; } var type = this.baseTokens[this.baseTokenPos + 1]; return {type: type && type.replace(/( |^)overlay .*/, ""), size: this.baseTokens[this.baseTokenPos] - n} }; Context.prototype.nextLine = function () { this.line++; if (this.maxLookAhead > 0) { this.maxLookAhead--; } }; Context.fromSaved = function (doc, saved, line) { if (saved instanceof SavedContext) { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) } else { return new Context(doc, copyState(doc.mode, saved), line) } }; Context.prototype.save = function (copy) { var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state; return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state }; // Compute a style array (an array starting with a mode generation // -- for invalidation -- followed by pairs of end positions and // style strings), which is used to highlight the tokens on the // line. function highlightLine(cm, line, context, forceToEnd) { // A styles array always starts with a number identifying the // mode/overlays that it is based on (for easy invalidation). var st = [cm.state.modeGen], lineClasses = {}; // Compute the base array of styles runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); }, lineClasses, forceToEnd); var state = context.state; // Run overlays, adjust style array. var loop = function ( o ) { context.baseTokens = st; var overlay = cm.state.overlays[o], i = 1, at = 0; context.state = true; runMode(cm, line.text, overlay.mode, context, function (end, style) { var start = i; // Ensure there's a token end at the current position, and that i points at it while (at < end) { var i_end = st[i]; if (i_end > end) { st.splice(i, 1, end, st[i+1], i_end); } i += 2; at = Math.min(end, i_end); } if (!style) { return } if (overlay.opaque) { st.splice(start, i - start, end, "overlay " + style); i = start + 2; } else { for (; start < i; start += 2) { var cur = st[start+1]; st[start+1] = (cur ? cur + " " : "") + "overlay " + style; } } }, lineClasses); context.state = state; context.baseTokens = null; context.baseTokenPos = 1; }; for (var o = 0; o < cm.state.overlays.length; ++o) loop( o ); return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null} } function getLineStyles(cm, line, updateFrontier) { if (!line.styles || line.styles[0] != cm.state.modeGen) { var context = getContextBefore(cm, lineNo(line)); var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state); var result = highlightLine(cm, line, context); if (resetState) { context.state = resetState; } line.stateAfter = context.save(!resetState); line.styles = result.styles; if (result.classes) { line.styleClasses = result.classes; } else if (line.styleClasses) { line.styleClasses = null; } if (updateFrontier === cm.doc.highlightFrontier) { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); } } return line.styles } function getContextBefore(cm, n, precise) { var doc = cm.doc, display = cm.display; if (!doc.mode.startState) { return new Context(doc, true, n) } var start = findStartLine(cm, n, precise); var saved = start > doc.first && getLine(doc, start - 1).stateAfter; var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start); doc.iter(start, n, function (line) { processLine(cm, line.text, context); var pos = context.line; line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null; context.nextLine(); }); if (precise) { doc.modeFrontier = context.line; } return context } // Lightweight form of highlight -- proceed over this line and // update state, but don't save a style array. Used for lines that // aren't currently visible. function processLine(cm, text, context, startAt) { var mode = cm.doc.mode; var stream = new StringStream(text, cm.options.tabSize, context); stream.start = stream.pos = startAt || 0; if (text == "") { callBlankLine(mode, context.state); } while (!stream.eol()) { readToken(mode, stream, context.state); stream.start = stream.pos; } } function callBlankLine(mode, state) { if (mode.blankLine) { return mode.blankLine(state) } if (!mode.innerMode) { return } var inner = innerMode(mode, state); if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) } } function readToken(mode, stream, state, inner) { for (var i = 0; i < 10; i++) { if (inner) { inner[0] = innerMode(mode, state).mode; } var style = mode.token(stream, state); if (stream.pos > stream.start) { return style } } throw new Error("Mode " + mode.name + " failed to advance stream.") } var Token = function(stream, type, state) { this.start = stream.start; this.end = stream.pos; this.string = stream.current(); this.type = type || null; this.state = state; }; // Utility for getTokenAt and getLineTokens function takeToken(cm, pos, precise, asArray) { var doc = cm.doc, mode = doc.mode, style; pos = clipPos(doc, pos); var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise); var stream = new StringStream(line.text, cm.options.tabSize, context), tokens; if (asArray) { tokens = []; } while ((asArray || stream.pos < pos.ch) && !stream.eol()) { stream.start = stream.pos; style = readToken(mode, stream, context.state); if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); } } return asArray ? tokens : new Token(stream, style, context.state) } function extractLineClasses(type, output) { if (type) { for (;;) { var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/); if (!lineClass) { break } type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length); var prop = lineClass[1] ? "bgClass" : "textClass"; if (output[prop] == null) { output[prop] = lineClass[2]; } else if (!(new RegExp("(?:^|\\s)" + lineClass[2] + "(?:$|\\s)")).test(output[prop])) { output[prop] += " " + lineClass[2]; } } } return type } // Run the given mode's parser over a line, calling f for each token. function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) { var flattenSpans = mode.flattenSpans; if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; } var curStart = 0, curStyle = null; var stream = new StringStream(text, cm.options.tabSize, context), style; var inner = cm.options.addModeClass && [null]; if (text == "") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); } while (!stream.eol()) { if (stream.pos > cm.options.maxHighlightLength) { flattenSpans = false; if (forceToEnd) { processLine(cm, text, context, stream.pos); } stream.pos = text.length; style = null; } else { style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses); } if (inner) { var mName = inner[0].name; if (mName) { style = "m-" + (style ? mName + " " + style : mName); } } if (!flattenSpans || curStyle != style) { while (curStart < stream.start) { curStart = Math.min(stream.start, curStart + 5000); f(curStart, curStyle); } curStyle = style; } stream.start = stream.pos; } while (curStart < stream.pos) { // Webkit seems to refuse to render text nodes longer than 57444 // characters, and returns inaccurate measurements in nodes // starting around 5000 chars. var pos = Math.min(stream.pos, curStart + 5000); f(pos, curStyle); curStart = pos; } } // Finds the line to start with when starting a parse. Tries to // find a line with a stateAfter, so that it can start with a // valid state. If that fails, it returns the line with the // smallest indentation, which tends to need the least context to // parse correctly. function findStartLine(cm, n, precise) { var minindent, minline, doc = cm.doc; var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100); for (var search = n; search > lim; --search) { if (search <= doc.first) { return doc.first } var line = getLine(doc, search - 1), after = line.stateAfter; if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier)) { return search } var indented = countColumn(line.text, null, cm.options.tabSize); if (minline == null || minindent > indented) { minline = search - 1; minindent = indented; } } return minline } function retreatFrontier(doc, n) { doc.modeFrontier = Math.min(doc.modeFrontier, n); if (doc.highlightFrontier < n - 10) { return } var start = doc.first; for (var line = n - 1; line > start; line--) { var saved = getLine(doc, line).stateAfter; // change is on 3 // state on line 1 looked ahead 2 -- so saw 3 // test 1 + 2 < 3 should cover this if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) { start = line + 1; break } } doc.highlightFrontier = Math.min(doc.highlightFrontier, start); } // Optimize some code when these features are not used. var sawReadOnlySpans = false, sawCollapsedSpans = false; function seeReadOnlySpans() { sawReadOnlySpans = true; } function seeCollapsedSpans() { sawCollapsedSpans = true; } // TEXTMARKER SPANS function MarkedSpan(marker, from, to) { this.marker = marker; this.from = from; this.to = to; } // Search an array of spans for a span matching the given marker. function getMarkedSpanFor(spans, marker) { if (spans) { for (var i = 0; i < spans.length; ++i) { var span = spans[i]; if (span.marker == marker) { return span } } } } // Remove a span from an array, returning undefined if no spans are // left (we don't store arrays for lines without spans). function removeMarkedSpan(spans, span) { var r; for (var i = 0; i < spans.length; ++i) { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } } return r } // Add a span to a line. function addMarkedSpan(line, span, op) { var inThisOp = op && window.WeakSet && (op.markedSpans || (op.markedSpans = new WeakSet)); if (inThisOp && inThisOp.has(line.markedSpans)) { line.markedSpans.push(span); } else { line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; if (inThisOp) { inThisOp.add(line.markedSpans); } } span.marker.attachLine(line); } // Used for the algorithm that adjusts markers for a change in the // document. These functions cut an array of spans at a given // character position, returning an array of remaining chunks (or // undefined if nothing remains). function markedSpansBefore(old, startCh, isInsert) { var nw; if (old) { for (var i = 0; i < old.length; ++i) { var span = old[i], marker = span.marker; var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh) ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)); } } } return nw } function markedSpansAfter(old, endCh, isInsert) { var nw; if (old) { for (var i = 0; i < old.length; ++i) { var span = old[i], marker = span.marker; var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh) ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, span.to == null ? null : span.to - endCh)); } } } return nw } // Given a change object, compute the new set of marker spans that // cover the line in which the change took place. Removes spans // entirely within the change, reconnects spans belonging to the // same marker that appear on both sides of the change, and cuts off // spans partially within the change. Returns an array of span // arrays with one element for each line in (after) the change. function stretchSpansOverChange(doc, change) { if (change.full) { return null } var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; if (!oldFirst && !oldLast) { return null } var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0; // Get the spans that 'stick out' on both sides var first = markedSpansBefore(oldFirst, startCh, isInsert); var last = markedSpansAfter(oldLast, endCh, isInsert); // Next, merge those two ends var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0); if (first) { // Fix up .to properties of first for (var i = 0; i < first.length; ++i) { var span = first[i]; if (span.to == null) { var found = getMarkedSpanFor(last, span.marker); if (!found) { span.to = startCh; } else if (sameLine) { span.to = found.to == null ? null : found.to + offset; } } } } if (last) { // Fix up .from in last (or move them into first in case of sameLine) for (var i$1 = 0; i$1 < last.length; ++i$1) { var span$1 = last[i$1]; if (span$1.to != null) { span$1.to += offset; } if (span$1.from == null) { var found$1 = getMarkedSpanFor(first, span$1.marker); if (!found$1) { span$1.from = offset; if (sameLine) { (first || (first = [])).push(span$1); } } } else { span$1.from += offset; if (sameLine) { (first || (first = [])).push(span$1); } } } } // Make sure we didn't create any zero-length spans if (first) { first = clearEmptySpans(first); } if (last && last != first) { last = clearEmptySpans(last); } var newMarkers = [first]; if (!sameLine) { // Fill gap with whole-line-spans var gap = change.text.length - 2, gapMarkers; if (gap > 0 && first) { for (var i$2 = 0; i$2 < first.length; ++i$2) { if (first[i$2].to == null) { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } } for (var i$3 = 0; i$3 < gap; ++i$3) { newMarkers.push(gapMarkers); } newMarkers.push(last); } return newMarkers } // Remove spans that are empty and don't have a clearWhenEmpty // option of false. function clearEmptySpans(spans) { for (var i = 0; i < spans.length; ++i) { var span = spans[i]; if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) { spans.splice(i--, 1); } } if (!spans.length) { return null } return spans } // Used to 'clip' out readOnly ranges when making a change. function removeReadOnlyRanges(doc, from, to) { var markers = null; doc.iter(from.line, to.line + 1, function (line) { if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) { var mark = line.markedSpans[i].marker; if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) { (markers || (markers = [])).push(mark); } } } }); if (!markers) { return null } var parts = [{from: from, to: to}]; for (var i = 0; i < markers.length; ++i) { var mk = markers[i], m = mk.find(0); for (var j = 0; j < parts.length; ++j) { var p = parts[j]; if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue } var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to); if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) { newParts.push({from: p.from, to: m.from}); } if (dto > 0 || !mk.inclusiveRight && !dto) { newParts.push({from: m.to, to: p.to}); } parts.splice.apply(parts, newParts); j += newParts.length - 3; } } return parts } // Connect or disconnect spans from a line. function detachMarkedSpans(line) { var spans = line.markedSpans; if (!spans) { return } for (var i = 0; i < spans.length; ++i) { spans[i].marker.detachLine(line); } line.markedSpans = null; } function attachMarkedSpans(line, spans) { if (!spans) { return } for (var i = 0; i < spans.length; ++i) { spans[i].marker.attachLine(line); } line.markedSpans = spans; } // Helpers used when computing which overlapping collapsed span // counts as the larger one. function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 } function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 } // Returns a number indicating which of two overlapping collapsed // spans is larger (and thus includes the other). Falls back to // comparing ids when the spans cover exactly the same range. function compareCollapsedMarkers(a, b) { var lenDiff = a.lines.length - b.lines.length; if (lenDiff != 0) { return lenDiff } var aPos = a.find(), bPos = b.find(); var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); if (fromCmp) { return -fromCmp } var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); if (toCmp) { return toCmp } return b.id - a.id } // Find out whether a line ends or starts in a collapsed span. If // so, return the marker for that span. function collapsedSpanAtSide(line, start) { var sps = sawCollapsedSpans && line.markedSpans, found; if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) { sp = sps[i]; if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; } } } return found } function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) } function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) } function collapsedSpanAround(line, ch) { var sps = sawCollapsedSpans && line.markedSpans, found; if (sps) { for (var i = 0; i < sps.length; ++i) { var sp = sps[i]; if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; } } } return found } // Test whether there exists a collapsed span that partially // overlaps (covers the start or end, but not both) of a new span. // Such overlap is not allowed. function conflictingCollapsedRange(doc, lineNo, from, to, marker) { var line = getLine(doc, lineNo); var sps = sawCollapsedSpans && line.markedSpans; if (sps) { for (var i = 0; i < sps.length; ++i) { var sp = sps[i]; if (!sp.marker.collapsed) { continue } var found = sp.marker.find(0); var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue } if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0)) { return true } } } } // A visual line is a line as drawn on the screen. Folding, for // example, can cause multiple logical lines to appear on the same // visual line. This finds the start of the visual line that the // given line is part of (usually that is the line itself). function visualLine(line) { var merged; while (merged = collapsedSpanAtStart(line)) { line = merged.find(-1, true).line; } return line } function visualLineEnd(line) { var merged; while (merged = collapsedSpanAtEnd(line)) { line = merged.find(1, true).line; } return line } // Returns an array of logical lines that continue the visual line // started by the argument, or undefined if there are no such lines. function visualLineContinued(line) { var merged, lines; while (merged = collapsedSpanAtEnd(line)) { line = merged.find(1, true).line ;(lines || (lines = [])).push(line); } return lines } // Get the line number of the start of the visual line that the // given line number is part of. function visualLineNo(doc, lineN) { var line = getLine(doc, lineN), vis = visualLine(line); if (line == vis) { return lineN } return lineNo(vis) } // Get the line number of the start of the next visual line after // the given line. function visualLineEndNo(doc, lineN) { if (lineN > doc.lastLine()) { return lineN } var line = getLine(doc, lineN), merged; if (!lineIsHidden(doc, line)) { return lineN } while (merged = collapsedSpanAtEnd(line)) { line = merged.find(1, true).line; } return lineNo(line) + 1 } // Compute whether a line is hidden. Lines count as hidden when they // are part of a visual line that starts with another line, or when // they are entirely covered by collapsed, non-widget span. function lineIsHidden(doc, line) { var sps = sawCollapsedSpans && line.markedSpans; if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) { sp = sps[i]; if (!sp.marker.collapsed) { continue } if (sp.from == null) { return true } if (sp.marker.widgetNode) { continue } if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) { return true } } } } function lineIsHiddenInner(doc, line, span) { if (span.to == null) { var end = span.marker.find(1, true); return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)) } if (span.marker.inclusiveRight && span.to == line.text.length) { return true } for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) { sp = line.markedSpans[i]; if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && (sp.to == null || sp.to != span.from) && (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && lineIsHiddenInner(doc, line, sp)) { return true } } } // Find the height above the given line. function heightAtLine(lineObj) { lineObj = visualLine(lineObj); var h = 0, chunk = lineObj.parent; for (var i = 0; i < chunk.lines.length; ++i) { var line = chunk.lines[i]; if (line == lineObj) { break } else { h += line.height; } } for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { for (var i$1 = 0; i$1 < p.children.length; ++i$1) { var cur = p.children[i$1]; if (cur == chunk) { break } else { h += cur.height; } } } return h } // Compute the character length of a line, taking into account // collapsed ranges (see markText) that might hide parts, and join // other lines onto it. function lineLength(line) { if (line.height == 0) { return 0 } var len = line.text.length, merged, cur = line; while (merged = collapsedSpanAtStart(cur)) { var found = merged.find(0, true); cur = found.from.line; len += found.from.ch - found.to.ch; } cur = line; while (merged = collapsedSpanAtEnd(cur)) { var found$1 = merged.find(0, true); len -= cur.text.length - found$1.from.ch; cur = found$1.to.line; len += cur.text.length - found$1.to.ch; } return len } // Find the longest line in the document. function findMaxLine(cm) { var d = cm.display, doc = cm.doc; d.maxLine = getLine(doc, doc.first); d.maxLineLength = lineLength(d.maxLine); d.maxLineChanged = true; doc.iter(function (line) { var len = lineLength(line); if (len > d.maxLineLength) { d.maxLineLength = len; d.maxLine = line; } }); } // LINE DATA STRUCTURE // Line objects. These hold state related to a line, including // highlighting info (the styles array). var Line = function(text, markedSpans, estimateHeight) { this.text = text; attachMarkedSpans(this, markedSpans); this.height = estimateHeight ? estimateHeight(this) : 1; }; Line.prototype.lineNo = function () { return lineNo(this) }; eventMixin(Line); // Change the content (text, markers) of a line. Automatically // invalidates cached information and tries to re-estimate the // line's height. function updateLine(line, text, markedSpans, estimateHeight) { line.text = text; if (line.stateAfter) { line.stateAfter = null; } if (line.styles) { line.styles = null; } if (line.order != null) { line.order = null; } detachMarkedSpans(line); attachMarkedSpans(line, markedSpans); var estHeight = estimateHeight ? estimateHeight(line) : 1; if (estHeight != line.height) { updateLineHeight(line, estHeight); } } // Detach a line from the document tree and its markers. function cleanUpLine(line) { line.parent = null; detachMarkedSpans(line); } // Convert a style as returned by a mode (either null, or a string // containing one or more styles) to a CSS style. This is cached, // and also looks for line-wide styles. var styleToClassCache = {}, styleToClassCacheWithMode = {}; function interpretTokenStyle(style, options) { if (!style || /^\s*$/.test(style)) { return null } var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache; return cache[style] || (cache[style] = style.replace(/\S+/g, "cm-$&")) } // Render the DOM representation of the text of a line. Also builds // up a 'line map', which points at the DOM nodes that represent // specific stretches of text, and is used by the measuring code. // The returned object contains the DOM node, this map, and // information about line-wide styles that were set by the mode. function buildLineContent(cm, lineView) { // The padding-right forces the element to have a 'border', which // is needed on Webkit to be able to get line-level bounding // rectangles for it (in measureChar). var content = eltP("span", null, null, webkit ? "padding-right: .1px" : null); var builder = {pre: eltP("pre", [content], "CodeMirror-line"), content: content, col: 0, pos: 0, cm: cm, trailingSpace: false, splitSpaces: cm.getOption("lineWrapping")}; lineView.measure = {}; // Iterate over the logical lines that make up this visual line. for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0); builder.pos = 0; builder.addToken = buildToken; // Optionally wire in some hacks into the token-rendering // algorithm, to deal with browser quirks. if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction))) { builder.addToken = buildTokenBadBidi(builder.addToken, order); } builder.map = []; var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line); insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)); if (line.styleClasses) { if (line.styleClasses.bgClass) { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); } if (line.styleClasses.textClass) { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); } } // Ensure at least a single node is present, for measuring. if (builder.map.length == 0) { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); } // Store the map and a cache object for the current logical line if (i == 0) { lineView.measure.map = builder.map; lineView.measure.cache = {}; } else { (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map) ;(lineView.measure.caches || (lineView.measure.caches = [])).push({}); } } // See issue #2901 if (webkit) { var last = builder.content.lastChild; if (/\bcm-tab\b/.test(last.className) || (last.querySelector && last.querySelector(".cm-tab"))) { builder.content.className = "cm-tab-wrap-hack"; } } signal(cm, "renderLine", cm, lineView.line, builder.pre); if (builder.pre.className) { builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); } return builder } function defaultSpecialCharPlaceholder(ch) { var token = elt("span", "\u2022", "cm-invalidchar"); token.title = "\\u" + ch.charCodeAt(0).toString(16); token.setAttribute("aria-label", token.title); return token } // Build up the DOM representation for a single token, and add it to // the line map. Takes care to render special characters separately. function buildToken(builder, text, style, startStyle, endStyle, css, attributes) { if (!text) { return } var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text; var special = builder.cm.state.specialChars, mustWrap = false; var content; if (!special.test(text)) { builder.col += text.length; content = document.createTextNode(displayText); builder.map.push(builder.pos, builder.pos + text.length, content); if (ie && ie_version < 9) { mustWrap = true; } builder.pos += text.length; } else { content = document.createDocumentFragment(); var pos = 0; while (true) { special.lastIndex = pos; var m = special.exec(text); var skipped = m ? m.index - pos : text.length - pos; if (skipped) { var txt = document.createTextNode(displayText.slice(pos, pos + skipped)); if (ie && ie_version < 9) { content.appendChild(elt("span", [txt])); } else { content.appendChild(txt); } builder.map.push(builder.pos, builder.pos + skipped, txt); builder.col += skipped; builder.pos += skipped; } if (!m) { break } pos += skipped + 1; var txt$1 = (void 0); if (m[0] == "\t") { var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize; txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); txt$1.setAttribute("role", "presentation"); txt$1.setAttribute("cm-text", "\t"); builder.col += tabWidth; } else if (m[0] == "\r" || m[0] == "\n") { txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar")); txt$1.setAttribute("cm-text", m[0]); builder.col += 1; } else { txt$1 = builder.cm.options.specialCharPlaceholder(m[0]); txt$1.setAttribute("cm-text", m[0]); if (ie && ie_version < 9) { content.appendChild(elt("span", [txt$1])); } else { content.appendChild(txt$1); } builder.col += 1; } builder.map.push(builder.pos, builder.pos + 1, txt$1); builder.pos++; } } builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32; if (style || startStyle || endStyle || mustWrap || css || attributes) { var fullStyle = style || ""; if (startStyle) { fullStyle += startStyle; } if (endStyle) { fullStyle += endStyle; } var token = elt("span", [content], fullStyle, css); if (attributes) { for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != "style" && attr != "class") { token.setAttribute(attr, attributes[attr]); } } } return builder.content.appendChild(token) } builder.content.appendChild(content); } // Change some spaces to NBSP to prevent the browser from collapsing // trailing spaces at the end of a line when rendering text (issue #1362). function splitSpaces(text, trailingBefore) { if (text.length > 1 && !/ /.test(text)) { return text } var spaceBefore = trailingBefore, result = ""; for (var i = 0; i < text.length; i++) { var ch = text.charAt(i); if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32)) { ch = "\u00a0"; } result += ch; spaceBefore = ch == " "; } return result } // Work around nonsense dimensions being reported for stretches of // right-to-left text. function buildTokenBadBidi(inner, order) { return function (builder, text, style, startStyle, endStyle, css, attributes) { style = style ? style + " cm-force-border" : "cm-force-border"; var start = builder.pos, end = start + text.length; for (;;) { // Find the part that overlaps with the start of this text var part = (void 0); for (var i = 0; i < order.length; i++) { part = order[i]; if (part.to > start && part.from <= start) { break } } if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) } inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes); startStyle = null; text = text.slice(part.to - start); start = part.to; } } } function buildCollapsedSpan(builder, size, marker, ignoreWidget) { var widget = !ignoreWidget && marker.widgetNode; if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); } if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { if (!widget) { widget = builder.content.appendChild(document.createElement("span")); } widget.setAttribute("cm-marker", marker.id); } if (widget) { builder.cm.display.input.setUneditable(widget); builder.content.appendChild(widget); } builder.pos += size; builder.trailingSpace = false; } // Outputs a number of spans to make up a line, taking highlighting // and marked text into account. function insertLineContent(line, builder, styles) { var spans = line.markedSpans, allText = line.text, at = 0; if (!spans) { for (var i$1 = 1; i$1 < styles.length; i$1+=2) { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); } return } var len = allText.length, pos = 0, i = 1, text = "", style, css; var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes; for (;;) { if (nextChange == pos) { // Update current marker set spanStyle = spanEndStyle = spanStartStyle = css = ""; attributes = null; collapsed = null; nextChange = Infinity; var foundBookmarks = [], endStyles = (void 0); for (var j = 0; j < spans.length; ++j) { var sp = spans[j], m = sp.marker; if (m.type == "bookmark" && sp.from == pos && m.widgetNode) { foundBookmarks.push(m); } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) { if (sp.to != null && sp.to != pos && nextChange > sp.to) { nextChange = sp.to; spanEndStyle = ""; } if (m.className) { spanStyle += " " + m.className; } if (m.css) { css = (css ? css + ";" : "") + m.css; } if (m.startStyle && sp.from == pos) { spanStartStyle += " " + m.startStyle; } if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); } // support for the old title property // https://github.com/codemirror/CodeMirror/pull/5673 if (m.title) { (attributes || (attributes = {})).title = m.title; } if (m.attributes) { for (var attr in m.attributes) { (attributes || (attributes = {}))[attr] = m.attributes[attr]; } } if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) { collapsed = sp; } } else if (sp.from > pos && nextChange > sp.from) { nextChange = sp.from; } } if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2) { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += " " + endStyles[j$1]; } } } if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2) { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } } if (collapsed && (collapsed.from || 0) == pos) { buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, collapsed.marker, collapsed.from == null); if (collapsed.to == null) { return } if (collapsed.to == pos) { collapsed = false; } } } if (pos >= len) { break } var upto = Math.min(len, nextChange); while (true) { if (text) { var end = pos + text.length; if (!collapsed) { var tokenText = end > upto ? text.slice(0, upto - pos) : text; builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", css, attributes); } if (end >= upto) {text = text.slice(upto - pos); pos = upto; break} pos = end; spanStartStyle = ""; } text = allText.slice(at, at = styles[i++]); style = interpretTokenStyle(styles[i++], builder.cm.options); } } } // These objects are used to represent the visible (currently drawn) // part of the document. A LineView may correspond to multiple // logical lines, if those are connected by collapsed ranges. function LineView(doc, line, lineN) { // The starting line this.line = line; // Continuing lines, if any this.rest = visualLineContinued(line); // Number of logical lines in this visual line this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; this.node = this.text = null; this.hidden = lineIsHidden(doc, line); } // Create a range of LineView objects for the given lines. function buildViewArray(cm, from, to) { var array = [], nextPos; for (var pos = from; pos < to; pos = nextPos) { var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); nextPos = pos + view.size; array.push(view); } return array } var operationGroup = null; function pushOperation(op) { if (operationGroup) { operationGroup.ops.push(op); } else { op.ownsGroup = operationGroup = { ops: [op], delayedCallbacks: [] }; } } function fireCallbacksForOps(group) { // Calls delayed callbacks and cursorActivity handlers until no // new ones appear var callbacks = group.delayedCallbacks, i = 0; do { for (; i < callbacks.length; i++) { callbacks[i].call(null); } for (var j = 0; j < group.ops.length; j++) { var op = group.ops[j]; if (op.cursorActivityHandlers) { while (op.cursorActivityCalled < op.cursorActivityHandlers.length) { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } } } } while (i < callbacks.length) } function finishOperation(op, endCb) { var group = op.ownsGroup; if (!group) { return } try { fireCallbacksForOps(group); } finally { operationGroup = null; endCb(group); } } var orphanDelayedCallbacks = null; // Often, we want to signal events at a point where we are in the // middle of some work, but don't want the handler to start calling // other methods on the editor, which might be in an inconsistent // state or simply not expect any other events to happen. // signalLater looks whether there are any handlers, and schedules // them to be executed when the last operation ends, or, if no // operation is active, when a timeout fires. function signalLater(emitter, type /*, values...*/) { var arr = getHandlers(emitter, type); if (!arr.length) { return } var args = Array.prototype.slice.call(arguments, 2), list; if (operationGroup) { list = operationGroup.delayedCallbacks; } else if (orphanDelayedCallbacks) { list = orphanDelayedCallbacks; } else { list = orphanDelayedCallbacks = []; setTimeout(fireOrphanDelayed, 0); } var loop = function ( i ) { list.push(function () { return arr[i].apply(null, args); }); }; for (var i = 0; i < arr.length; ++i) loop( i ); } function fireOrphanDelayed() { var delayed = orphanDelayedCallbacks; orphanDelayedCallbacks = null; for (var i = 0; i < delayed.length; ++i) { delayed[i](); } } // When an aspect of a line changes, a string is added to // lineView.changes. This updates the relevant part of the line's // DOM structure. function updateLineForChanges(cm, lineView, lineN, dims) { for (var j = 0; j < lineView.changes.length; j++) { var type = lineView.changes[j]; if (type == "text") { updateLineText(cm, lineView); } else if (type == "gutter") { updateLineGutter(cm, lineView, lineN, dims); } else if (type == "class") { updateLineClasses(cm, lineView); } else if (type == "widget") { updateLineWidgets(cm, lineView, dims); } } lineView.changes = null; } // Lines with gutter elements, widgets or a background class need to // be wrapped, and have the extra elements added to the wrapper div function ensureLineWrapped(lineView) { if (lineView.node == lineView.text) { lineView.node = elt("div", null, null, "position: relative"); if (lineView.text.parentNode) { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); } lineView.node.appendChild(lineView.text); if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; } } return lineView.node } function updateLineBackground(cm, lineView) { var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass; if (cls) { cls += " CodeMirror-linebackground"; } if (lineView.background) { if (cls) { lineView.background.className = cls; } else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; } } else if (cls) { var wrap = ensureLineWrapped(lineView); lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild); cm.display.input.setUneditable(lineView.background); } } // Wrapper around buildLineContent which will reuse the structure // in display.externalMeasured when possible. function getLineContent(cm, lineView) { var ext = cm.display.externalMeasured; if (ext && ext.line == lineView.line) { cm.display.externalMeasured = null; lineView.measure = ext.measure; return ext.built } return buildLineContent(cm, lineView) } // Redraw the line's text. Interacts with the background and text // classes because the mode may output tokens that influence these // classes. function updateLineText(cm, lineView) { var cls = lineView.text.className; var built = getLineContent(cm, lineView); if (lineView.text == lineView.node) { lineView.node = built.pre; } lineView.text.parentNode.replaceChild(built.pre, lineView.text); lineView.text = built.pre; if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { lineView.bgClass = built.bgClass; lineView.textClass = built.textClass; updateLineClasses(cm, lineView); } else if (cls) { lineView.text.className = cls; } } function updateLineClasses(cm, lineView) { updateLineBackground(cm, lineView); if (lineView.line.wrapClass) { ensureLineWrapped(lineView).className = lineView.line.wrapClass; } else if (lineView.node != lineView.text) { lineView.node.className = ""; } var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass; lineView.text.className = textClass || ""; } function updateLineGutter(cm, lineView, lineN, dims) { if (lineView.gutter) { lineView.node.removeChild(lineView.gutter); lineView.gutter = null; } if (lineView.gutterBackground) { lineView.node.removeChild(lineView.gutterBackground); lineView.gutterBackground = null; } if (lineView.line.gutterClass) { var wrap = ensureLineWrapped(lineView); lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass, ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + (dims.gutterTotalWidth) + "px")); cm.display.input.setUneditable(lineView.gutterBackground); wrap.insertBefore(lineView.gutterBackground, lineView.text); } var markers = lineView.line.gutterMarkers; if (cm.options.lineNumbers || markers) { var wrap$1 = ensureLineWrapped(lineView); var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px")); gutterWrap.setAttribute("aria-hidden", "true"); cm.display.input.setUneditable(gutterWrap); wrap$1.insertBefore(gutterWrap, lineView.text); if (lineView.line.gutterClass) { gutterWrap.className += " " + lineView.line.gutterClass; } if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) { lineView.lineNumber = gutterWrap.appendChild( elt("div", lineNumberFor(cm.options, lineN), "CodeMirror-linenumber CodeMirror-gutter-elt", ("left: " + (dims.gutterLeft["CodeMirror-linenumbers"]) + "px; width: " + (cm.display.lineNumInnerWidth) + "px"))); } if (markers) { for (var k = 0; k < cm.display.gutterSpecs.length; ++k) { var id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id]; if (found) { gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", ("left: " + (dims.gutterLeft[id]) + "px; width: " + (dims.gutterWidth[id]) + "px"))); } } } } } function updateLineWidgets(cm, lineView, dims) { if (lineView.alignable) { lineView.alignable = null; } var isWidget = classTest("CodeMirror-linewidget"); for (var node = lineView.node.firstChild, next = (void 0); node; node = next) { next = node.nextSibling; if (isWidget.test(node.className)) { lineView.node.removeChild(node); } } insertLineWidgets(cm, lineView, dims); } // Build a line's DOM representation from scratch function buildLineElement(cm, lineView, lineN, dims) { var built = getLineContent(cm, lineView); lineView.text = lineView.node = built.pre; if (built.bgClass) { lineView.bgClass = built.bgClass; } if (built.textClass) { lineView.textClass = built.textClass; } updateLineClasses(cm, lineView); updateLineGutter(cm, lineView, lineN, dims); insertLineWidgets(cm, lineView, dims); return lineView.node } // A lineView may contain multiple logical lines (when merged by // collapsed spans). The widgets for all of them need to be drawn. function insertLineWidgets(cm, lineView, dims) { insertLineWidgetsFor(cm, lineView.line, lineView, dims, true); if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++) { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } } } function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { if (!line.widgets) { return } var wrap = ensureLineWrapped(lineView); for (var i = 0, ws = line.widgets; i < ws.length; ++i) { var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget" + (widget.className ? " " + widget.className : "")); if (!widget.handleMouseEvents) { node.setAttribute("cm-ignore-events", "true"); } positionLineWidget(widget, node, lineView, dims); cm.display.input.setUneditable(node); if (allowAbove && widget.above) { wrap.insertBefore(node, lineView.gutter || lineView.text); } else { wrap.appendChild(node); } signalLater(widget, "redraw"); } } function positionLineWidget(widget, node, lineView, dims) { if (widget.noHScroll) { (lineView.alignable || (lineView.alignable = [])).push(node); var width = dims.wrapperWidth; node.style.left = dims.fixedPos + "px"; if (!widget.coverGutter) { width -= dims.gutterTotalWidth; node.style.paddingLeft = dims.gutterTotalWidth + "px"; } node.style.width = width + "px"; } if (widget.coverGutter) { node.style.zIndex = 5; node.style.position = "relative"; if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + "px"; } } } function widgetHeight(widget) { if (widget.height != null) { return widget.height } var cm = widget.doc.cm; if (!cm) { return 0 } if (!contains(document.body, widget.node)) { var parentStyle = "position: relative;"; if (widget.coverGutter) { parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; } if (widget.noHScroll) { parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; } removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)); } return widget.height = widget.node.parentNode.offsetHeight } // Return true when the given mouse event happened in a widget function eventInWidget(display, e) { for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") || (n.parentNode == display.sizer && n != display.mover)) { return true } } } // POSITION MEASUREMENT function paddingTop(display) {return display.lineSpace.offsetTop} function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight} function paddingH(display) { if (display.cachedPaddingH) { return display.cachedPaddingH } var e = removeChildrenAndAdd(display.measure, elt("pre", "x", "CodeMirror-line-like")); var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle; var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)}; if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; } return data } function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth } function displayWidth(cm) { return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth } function displayHeight(cm) { return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight } // Ensure the lineView.wrapping.heights array is populated. This is // an array of bottom offsets for the lines that make up a drawn // line. When lineWrapping is on, there might be more than one // height. function ensureLineHeights(cm, lineView, rect) { var wrapping = cm.options.lineWrapping; var curWidth = wrapping && displayWidth(cm); if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { var heights = lineView.measure.heights = []; if (wrapping) { lineView.measure.width = curWidth; var rects = lineView.text.firstChild.getClientRects(); for (var i = 0; i < rects.length - 1; i++) { var cur = rects[i], next = rects[i + 1]; if (Math.abs(cur.bottom - next.bottom) > 2) { heights.push((cur.bottom + next.top) / 2 - rect.top); } } } heights.push(rect.bottom - rect.top); } } // Find a line map (mapping character offsets to text nodes) and a // measurement cache for the given line number. (A line view might // contain multiple lines when collapsed ranges are present.) function mapFromLineView(lineView, line, lineN) { if (lineView.line == line) { return {map: lineView.measure.map, cache: lineView.measure.cache} } if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++) { if (lineView.rest[i] == line) { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } } for (var i$1 = 0; i$1 < lineView.rest.length; i$1++) { if (lineNo(lineView.rest[i$1]) > lineN) { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } } } } // Render a line into the hidden node display.externalMeasured. Used // when measurement is needed for a line that's not in the viewport. function updateExternalMeasurement(cm, line) { line = visualLine(line); var lineN = lineNo(line); var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN); view.lineN = lineN; var built = view.built = buildLineContent(cm, view); view.text = built.pre; removeChildrenAndAdd(cm.display.lineMeasure, built.pre); return view } // Get a {top, bottom, left, right} box (in line-local coordinates) // for a given character. function measureChar(cm, line, ch, bias) { return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias) } // Find a line view that corresponds to the given line number. function findViewForLine(cm, lineN) { if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) { return cm.display.view[findViewIndex(cm, lineN)] } var ext = cm.display.externalMeasured; if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) { return ext } } // Measurement can be split in two steps, the set-up work that // applies to the whole line, and the measurement of the actual // character. Functions like coordsChar, that need to do a lot of // measurements in a row, can thus ensure that the set-up work is // only done once. function prepareMeasureForLine(cm, line) { var lineN = lineNo(line); var view = findViewForLine(cm, lineN); if (view && !view.text) { view = null; } else if (view && view.changes) { updateLineForChanges(cm, view, lineN, getDimensions(cm)); cm.curOp.forceUpdate = true; } if (!view) { view = updateExternalMeasurement(cm, line); } var info = mapFromLineView(view, line, lineN); return { line: line, view: view, rect: null, map: info.map, cache: info.cache, before: info.before, hasHeights: false } } // Given a prepared measurement object, measures the position of an // actual character (or fetches it from the cache). function measureCharPrepared(cm, prepared, ch, bias, varHeight) { if (prepared.before) { ch = -1; } var key = ch + (bias || ""), found; if (prepared.cache.hasOwnProperty(key)) { found = prepared.cache[key]; } else { if (!prepared.rect) { prepared.rect = prepared.view.text.getBoundingClientRect(); } if (!prepared.hasHeights) { ensureLineHeights(cm, prepared.view, prepared.rect); prepared.hasHeights = true; } found = measureCharInner(cm, prepared, ch, bias); if (!found.bogus) { prepared.cache[key] = found; } } return {left: found.left, right: found.right, top: varHeight ? found.rtop : found.top, bottom: varHeight ? found.rbottom : found.bottom} } var nullRect = {left: 0, right: 0, top: 0, bottom: 0}; function nodeAndOffsetInLineMap(map, ch, bias) { var node, start, end, collapse, mStart, mEnd; // First, search the line map for the text node corresponding to, // or closest to, the target character. for (var i = 0; i < map.length; i += 3) { mStart = map[i]; mEnd = map[i + 1]; if (ch < mStart) { start = 0; end = 1; collapse = "left"; } else if (ch < mEnd) { start = ch - mStart; end = start + 1; } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) { end = mEnd - mStart; start = end - 1; if (ch >= mEnd) { collapse = "right"; } } if (start != null) { node = map[i + 2]; if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) { collapse = bias; } if (bias == "left" && start == 0) { while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) { node = map[(i -= 3) + 2]; collapse = "left"; } } if (bias == "right" && start == mEnd - mStart) { while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) { node = map[(i += 3) + 2]; collapse = "right"; } } break } } return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd} } function getUsefulRect(rects, bias) { var rect = nullRect; if (bias == "left") { for (var i = 0; i < rects.length; i++) { if ((rect = rects[i]).left != rect.right) { break } } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) { if ((rect = rects[i$1]).left != rect.right) { break } } } return rect } function measureCharInner(cm, prepared, ch, bias) { var place = nodeAndOffsetInLineMap(prepared.map, ch, bias); var node = place.node, start = place.start, end = place.end, collapse = place.collapse; var rect; if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates. for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; } while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; } if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) { rect = node.parentNode.getBoundingClientRect(); } else { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); } if (rect.left || rect.right || start == 0) { break } end = start; start = start - 1; collapse = "right"; } if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); } } else { // If it is a widget, simply get the box for the whole widget. if (start > 0) { collapse = bias = "right"; } var rects; if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) { rect = rects[bias == "right" ? rects.length - 1 : 0]; } else { rect = node.getBoundingClientRect(); } } if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { var rSpan = node.parentNode.getClientRects()[0]; if (rSpan) { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; } else { rect = nullRect; } } var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top; var mid = (rtop + rbot) / 2; var heights = prepared.view.measure.heights; var i = 0; for (; i < heights.length - 1; i++) { if (mid < heights[i]) { break } } var top = i ? heights[i - 1] : 0, bot = heights[i]; var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, top: top, bottom: bot}; if (!rect.left && !rect.right) { result.bogus = true; } if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; } return result } // Work around problem with bounding client rects on ranges being // returned incorrectly when zoomed on IE10 and below. function maybeUpdateRectForZooming(measure, rect) { if (!window.screen || screen.logicalXDPI == null || screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) { return rect } var scaleX = screen.logicalXDPI / screen.deviceXDPI; var scaleY = screen.logicalYDPI / screen.deviceYDPI; return {left: rect.left * scaleX, right: rect.right * scaleX, top: rect.top * scaleY, bottom: rect.bottom * scaleY} } function clearLineMeasurementCacheFor(lineView) { if (lineView.measure) { lineView.measure.cache = {}; lineView.measure.heights = null; if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++) { lineView.measure.caches[i] = {}; } } } } function clearLineMeasurementCache(cm) { cm.display.externalMeasure = null; removeChildren(cm.display.lineMeasure); for (var i = 0; i < cm.display.view.length; i++) { clearLineMeasurementCacheFor(cm.display.view[i]); } } function clearCaches(cm) { clearLineMeasurementCache(cm); cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null; if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; } cm.display.lineNumChars = null; } function pageScrollX() { // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206 // which causes page_Offset and bounding client rects to use // different reference viewports and invalidate our calculations. if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) } return window.pageXOffset || (document.documentElement || document.body).scrollLeft } function pageScrollY() { if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) } return window.pageYOffset || (document.documentElement || document.body).scrollTop } function widgetTopHeight(lineObj) { var height = 0; if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above) { height += widgetHeight(lineObj.widgets[i]); } } } return height } // Converts a {top, bottom, left, right} box from line-local // coordinates into another coordinate system. Context may be one of // "line", "div" (display.lineDiv), "local"./null (editor), "window", // or "page". function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) { if (!includeWidgets) { var height = widgetTopHeight(lineObj); rect.top += height; rect.bottom += height; } if (context == "line") { return rect } if (!context) { context = "local"; } var yOff = heightAtLine(lineObj); if (context == "local") { yOff += paddingTop(cm.display); } else { yOff -= cm.display.viewOffset; } if (context == "page" || context == "window") { var lOff = cm.display.lineSpace.getBoundingClientRect(); yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); rect.left += xOff; rect.right += xOff; } rect.top += yOff; rect.bottom += yOff; return rect } // Coverts a box from "div" coords to another coordinate system. // Context may be "window", "page", "div", or "local"./null. function fromCoordSystem(cm, coords, context) { if (context == "div") { return coords } var left = coords.left, top = coords.top; // First move into "page" coordinate system if (context == "page") { left -= pageScrollX(); top -= pageScrollY(); } else if (context == "local" || !context) { var localBox = cm.display.sizer.getBoundingClientRect(); left += localBox.left; top += localBox.top; } var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top} } function charCoords(cm, pos, context, lineObj, bias) { if (!lineObj) { lineObj = getLine(cm.doc, pos.line); } return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context) } // Returns a box for a given cursor position, which may have an // 'other' property containing the position of the secondary cursor // on a bidi boundary. // A cursor Pos(line, char, "before") is on the same visual line as `char - 1` // and after `char - 1` in writing order of `char - 1` // A cursor Pos(line, char, "after") is on the same visual line as `char` // and before `char` in writing order of `char` // Examples (upper-case letters are RTL, lower-case are LTR): // Pos(0, 1, ...) // before after // ab a|b a|b // aB a|B aB| // Ab |Ab A|b // AB B|A B|A // Every position after the last character on a line is considered to stick // to the last character on the line. function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { lineObj = lineObj || getLine(cm.doc, pos.line); if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); } function get(ch, right) { var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight); if (right) { m.left = m.right; } else { m.right = m.left; } return intoCoordSystem(cm, lineObj, m, context) } var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky; if (ch >= lineObj.text.length) { ch = lineObj.text.length; sticky = "before"; } else if (ch <= 0) { ch = 0; sticky = "after"; } if (!order) { return get(sticky == "before" ? ch - 1 : ch, sticky == "before") } function getBidi(ch, partPos, invert) { var part = order[partPos], right = part.level == 1; return get(invert ? ch - 1 : ch, right != invert) } var partPos = getBidiPartAt(order, ch, sticky); var other = bidiOther; var val = getBidi(ch, partPos, sticky == "before"); if (other != null) { val.other = getBidi(ch, other, sticky != "before"); } return val } // Used to cheaply estimate the coordinates for a position. Used for // intermediate scroll updates. function estimateCoords(cm, pos) { var left = 0; pos = clipPos(cm.doc, pos); if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; } var lineObj = getLine(cm.doc, pos.line); var top = heightAtLine(lineObj) + paddingTop(cm.display); return {left: left, right: left, top: top, bottom: top + lineObj.height} } // Positions returned by coordsChar contain some extra information. // xRel is the relative x position of the input coordinates compared // to the found position (so xRel > 0 means the coordinates are to // the right of the character position, for example). When outside // is true, that means the coordinates lie outside the line's // vertical range. function PosWithInfo(line, ch, sticky, outside, xRel) { var pos = Pos(line, ch, sticky); pos.xRel = xRel; if (outside) { pos.outside = outside; } return pos } // Compute the character position closest to the given coordinates. // Input must be lineSpace-local ("div" coordinate system). function coordsChar(cm, x, y) { var doc = cm.doc; y += cm.display.viewOffset; if (y < 0) { return PosWithInfo(doc.first, 0, null, -1, -1) } var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1; if (lineN > last) { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1) } if (x < 0) { x = 0; } var lineObj = getLine(doc, lineN); for (;;) { var found = coordsCharInner(cm, lineObj, lineN, x, y); var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0)); if (!collapsed) { return found } var rangeEnd = collapsed.find(1); if (rangeEnd.line == lineN) { return rangeEnd } lineObj = getLine(doc, lineN = rangeEnd.line); } } function wrappedLineExtent(cm, lineObj, preparedMeasure, y) { y -= widgetTopHeight(lineObj); var end = lineObj.text.length; var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0); end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end); return {begin: begin, end: end} } function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) { if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); } var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), "line").top; return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop) } // Returns true if the given side of a box is after the given // coordinates, in top-to-bottom, left-to-right order. function boxIsAfter(box, x, y, left) { return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x } function coordsCharInner(cm, lineObj, lineNo, x, y) { // Move y into line-local coordinate space y -= heightAtLine(lineObj); var preparedMeasure = prepareMeasureForLine(cm, lineObj); // When directly calling `measureCharPrepared`, we have to adjust // for the widgets at this line. var widgetHeight = widgetTopHeight(lineObj); var begin = 0, end = lineObj.text.length, ltr = true; var order = getOrder(lineObj, cm.doc.direction); // If the line isn't plain left-to-right text, first figure out // which bidi section the coordinates fall into. if (order) { var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart) (cm, lineObj, lineNo, preparedMeasure, order, x, y); ltr = part.level != 1; // The awkward -1 offsets are needed because findFirst (called // on these below) will treat its first bound as inclusive, // second as exclusive, but we want to actually address the // characters in the part's range begin = ltr ? part.from : part.to - 1; end = ltr ? part.to : part.from - 1; } // A binary search to find the first character whose bounding box // starts after the coordinates. If we run across any whose box wrap // the coordinates, store that. var chAround = null, boxAround = null; var ch = findFirst(function (ch) { var box = measureCharPrepared(cm, preparedMeasure, ch); box.top += widgetHeight; box.bottom += widgetHeight; if (!boxIsAfter(box, x, y, false)) { return false } if (box.top <= y && box.left <= x) { chAround = ch; boxAround = box; } return true }, begin, end); var baseX, sticky, outside = false; // If a box around the coordinates was found, use that if (boxAround) { // Distinguish coordinates nearer to the left or right side of the box var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr; ch = chAround + (atStart ? 0 : 1); sticky = atStart ? "after" : "before"; baseX = atLeft ? boxAround.left : boxAround.right; } else { // (Adjust for extended bound, if necessary.) if (!ltr && (ch == end || ch == begin)) { ch++; } // To determine which side to associate with, get the box to the // left of the character and compare it's vertical position to the // coordinates sticky = ch == 0 ? "after" : ch == lineObj.text.length ? "before" : (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y) == ltr ? "after" : "before"; // Now get accurate coordinates for this place, in order to get a // base X position var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), "line", lineObj, preparedMeasure); baseX = coords.left; outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0; } ch = skipExtendingChars(lineObj.text, ch, 1); return PosWithInfo(lineNo, ch, sticky, outside, x - baseX) } function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) { // Bidi parts are sorted left-to-right, and in a non-line-wrapping // situation, we can take this ordering to correspond to the visual // ordering. This finds the first part whose end is after the given // coordinates. var index = findFirst(function (i) { var part = order[i], ltr = part.level != 1; return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? "before" : "after"), "line", lineObj, preparedMeasure), x, y, true) }, 0, order.length - 1); var part = order[index]; // If this isn't the first part, the part's start is also after // the coordinates, and the coordinates aren't on the same line as // that start, move one part back. if (index > 0) { var ltr = part.level != 1; var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? "after" : "before"), "line", lineObj, preparedMeasure); if (boxIsAfter(start, x, y, true) && start.top > y) { part = order[index - 1]; } } return part } function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) { // In a wrapped line, rtl text on wrapping boundaries can do things // that don't correspond to the ordering in our `order` array at // all, so a binary search doesn't work, and we want to return a // part that only spans one line so that the binary search in // coordsCharInner is safe. As such, we first find the extent of the // wrapped line, and then do a flat search in which we discard any // spans that aren't on the line. var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y); var begin = ref.begin; var end = ref.end; if (/\s/.test(lineObj.text.charAt(end - 1))) { end--; } var part = null, closestDist = null; for (var i = 0; i < order.length; i++) { var p = order[i]; if (p.from >= end || p.to <= begin) { continue } var ltr = p.level != 1; var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right; // Weigh against spans ending before this, so that they are only // picked if nothing ends after var dist = endX < x ? x - endX + 1e9 : endX - x; if (!part || closestDist > dist) { part = p; closestDist = dist; } } if (!part) { part = order[order.length - 1]; } // Clip the part to the wrapped line. if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; } if (part.to > end) { part = {from: part.from, to: end, level: part.level}; } return part } var measureText; // Compute the default text height. function textHeight(display) { if (display.cachedTextHeight != null) { return display.cachedTextHeight } if (measureText == null) { measureText = elt("pre", null, "CodeMirror-line-like"); // Measure a bunch of lines, for browsers that compute // fractional heights. for (var i = 0; i < 49; ++i) { measureText.appendChild(document.createTextNode("x")); measureText.appendChild(elt("br")); } measureText.appendChild(document.createTextNode("x")); } removeChildrenAndAdd(display.measure, measureText); var height = measureText.offsetHeight / 50; if (height > 3) { display.cachedTextHeight = height; } removeChildren(display.measure); return height || 1 } // Compute the default character width. function charWidth(display) { if (display.cachedCharWidth != null) { return display.cachedCharWidth } var anchor = elt("span", "xxxxxxxxxx"); var pre = elt("pre", [anchor], "CodeMirror-line-like"); removeChildrenAndAdd(display.measure, pre); var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10; if (width > 2) { display.cachedCharWidth = width; } return width || 10 } // Do a bulk-read of the DOM positions and sizes needed to draw the // view, so that we don't interleave reading and writing to the DOM. function getDimensions(cm) { var d = cm.display, left = {}, width = {}; var gutterLeft = d.gutters.clientLeft; for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { var id = cm.display.gutterSpecs[i].className; left[id] = n.offsetLeft + n.clientLeft + gutterLeft; width[id] = n.clientWidth; } return {fixedPos: compensateForHScroll(d), gutterTotalWidth: d.gutters.offsetWidth, gutterLeft: left, gutterWidth: width, wrapperWidth: d.wrapper.clientWidth} } // Computes display.scroller.scrollLeft + display.gutters.offsetWidth, // but using getBoundingClientRect to get a sub-pixel-accurate // result. function compensateForHScroll(display) { return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left } // Returns a function that estimates the height of a line, to use as // first approximation until the line becomes visible (and is thus // properly measurable). function estimateHeight(cm) { var th = textHeight(cm.display), wrapping = cm.options.lineWrapping; var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); return function (line) { if (lineIsHidden(cm.doc, line)) { return 0 } var widgetsHeight = 0; if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) { if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; } } } if (wrapping) { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th } else { return widgetsHeight + th } } } function estimateLineHeights(cm) { var doc = cm.doc, est = estimateHeight(cm); doc.iter(function (line) { var estHeight = est(line); if (estHeight != line.height) { updateLineHeight(line, estHeight); } }); } // Given a mouse event, find the corresponding position. If liberal // is false, it checks whether a gutter or scrollbar was clicked, // and returns null if it was. forRect is used by rectangular // selections, and tries to estimate a character position even for // coordinates beyond the right of the text. function posFromMouse(cm, e, liberal, forRect) { var display = cm.display; if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { return null } var x, y, space = display.lineSpace.getBoundingClientRect(); // Fails unpredictably on IE[67] when mouse is dragged around quickly. try { x = e.clientX - space.left; y = e.clientY - space.top; } catch (e$1) { return null } var coords = coordsChar(cm, x, y), line; if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length; coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)); } return coords } // Find the view element corresponding to a given line. Return null // when the line isn't visible. function findViewIndex(cm, n) { if (n >= cm.display.viewTo) { return null } n -= cm.display.viewFrom; if (n < 0) { return null } var view = cm.display.view; for (var i = 0; i < view.length; i++) { n -= view[i].size; if (n < 0) { return i } } } // Updates the display.view data structure for a given change to the // document. From and to are in pre-change coordinates. Lendiff is // the amount of lines added or subtracted by the change. This is // used for changes that span multiple lines, or change the way // lines are divided into visual lines. regLineChange (below) // registers single-line changes. function regChange(cm, from, to, lendiff) { if (from == null) { from = cm.doc.first; } if (to == null) { to = cm.doc.first + cm.doc.size; } if (!lendiff) { lendiff = 0; } var display = cm.display; if (lendiff && to < display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers > from)) { display.updateLineNumbers = from; } cm.curOp.viewChanged = true; if (from >= display.viewTo) { // Change after if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) { resetView(cm); } } else if (to <= display.viewFrom) { // Change before if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { resetView(cm); } else { display.viewFrom += lendiff; display.viewTo += lendiff; } } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap resetView(cm); } else if (from <= display.viewFrom) { // Top overlap var cut = viewCuttingPoint(cm, to, to + lendiff, 1); if (cut) { display.view = display.view.slice(cut.index); display.viewFrom = cut.lineN; display.viewTo += lendiff; } else { resetView(cm); } } else if (to >= display.viewTo) { // Bottom overlap var cut$1 = viewCuttingPoint(cm, from, from, -1); if (cut$1) { display.view = display.view.slice(0, cut$1.index); display.viewTo = cut$1.lineN; } else { resetView(cm); } } else { // Gap in the middle var cutTop = viewCuttingPoint(cm, from, from, -1); var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); if (cutTop && cutBot) { display.view = display.view.slice(0, cutTop.index) .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) .concat(display.view.slice(cutBot.index)); display.viewTo += lendiff; } else { resetView(cm); } } var ext = display.externalMeasured; if (ext) { if (to < ext.lineN) { ext.lineN += lendiff; } else if (from < ext.lineN + ext.size) { display.externalMeasured = null; } } } // Register a change to a single line. Type must be one of "text", // "gutter", "class", "widget" function regLineChange(cm, line, type) { cm.curOp.viewChanged = true; var display = cm.display, ext = cm.display.externalMeasured; if (ext && line >= ext.lineN && line < ext.lineN + ext.size) { display.externalMeasured = null; } if (line < display.viewFrom || line >= display.viewTo) { return } var lineView = display.view[findViewIndex(cm, line)]; if (lineView.node == null) { return } var arr = lineView.changes || (lineView.changes = []); if (indexOf(arr, type) == -1) { arr.push(type); } } // Clear the view. function resetView(cm) { cm.display.viewFrom = cm.display.viewTo = cm.doc.first; cm.display.view = []; cm.display.viewOffset = 0; } function viewCuttingPoint(cm, oldN, newN, dir) { var index = findViewIndex(cm, oldN), diff, view = cm.display.view; if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) { return {index: index, lineN: newN} } var n = cm.display.viewFrom; for (var i = 0; i < index; i++) { n += view[i].size; } if (n != oldN) { if (dir > 0) { if (index == view.length - 1) { return null } diff = (n + view[index].size) - oldN; index++; } else { diff = n - oldN; } oldN += diff; newN += diff; } while (visualLineNo(cm.doc, newN) != newN) { if (index == (dir < 0 ? 0 : view.length - 1)) { return null } newN += dir * view[index - (dir < 0 ? 1 : 0)].size; index += dir; } return {index: index, lineN: newN} } // Force the view to cover a given range, adding empty view element // or clipping off existing ones as needed. function adjustView(cm, from, to) { var display = cm.display, view = display.view; if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { display.view = buildViewArray(cm, from, to); display.viewFrom = from; } else { if (display.viewFrom > from) { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); } else if (display.viewFrom < from) { display.view = display.view.slice(findViewIndex(cm, from)); } display.viewFrom = from; if (display.viewTo < to) { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); } else if (display.viewTo > to) { display.view = display.view.slice(0, findViewIndex(cm, to)); } } display.viewTo = to; } // Count the number of lines in the view whose DOM representation is // out of date (or nonexistent). function countDirtyView(cm) { var view = cm.display.view, dirty = 0; for (var i = 0; i < view.length; i++) { var lineView = view[i]; if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; } } return dirty } function updateSelection(cm) { cm.display.input.showSelection(cm.display.input.prepareSelection()); } function prepareSelection(cm, primary) { if ( primary === void 0 ) primary = true; var doc = cm.doc, result = {}; var curFragment = result.cursors = document.createDocumentFragment(); var selFragment = result.selection = document.createDocumentFragment(); var customCursor = cm.options.$customCursor; if (customCursor) { primary = true; } for (var i = 0; i < doc.sel.ranges.length; i++) { if (!primary && i == doc.sel.primIndex) { continue } var range = doc.sel.ranges[i]; if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { continue } var collapsed = range.empty(); if (customCursor) { var head = customCursor(cm, range); if (head) { drawSelectionCursor(cm, head, curFragment); } } else if (collapsed || cm.options.showCursorWhenSelecting) { drawSelectionCursor(cm, range.head, curFragment); } if (!collapsed) { drawSelectionRange(cm, range, selFragment); } } return result } // Draws a cursor for the given range function drawSelectionCursor(cm, head, output) { var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine); var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")); cursor.style.left = pos.left + "px"; cursor.style.top = pos.top + "px"; cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; if (/\bcm-fat-cursor\b/.test(cm.getWrapperElement().className)) { var charPos = charCoords(cm, head, "div", null, null); var width = charPos.right - charPos.left; cursor.style.width = (width > 0 ? width : cm.defaultCharWidth()) + "px"; } if (pos.other) { // Secondary cursor, shown when on a 'jump' in bi-directional text var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")); otherCursor.style.display = ""; otherCursor.style.left = pos.other.left + "px"; otherCursor.style.top = pos.other.top + "px"; otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; } } function cmpCoords(a, b) { return a.top - b.top || a.left - b.left } // Draws the given range as a highlighted selection function drawSelectionRange(cm, range, output) { var display = cm.display, doc = cm.doc; var fragment = document.createDocumentFragment(); var padding = paddingH(cm.display), leftSide = padding.left; var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right; var docLTR = doc.direction == "ltr"; function add(left, top, width, bottom) { if (top < 0) { top = 0; } top = Math.round(top); bottom = Math.round(bottom); fragment.appendChild(elt("div", null, "CodeMirror-selected", ("position: absolute; left: " + left + "px;\n top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n height: " + (bottom - top) + "px"))); } function drawForLine(line, fromArg, toArg) { var lineObj = getLine(doc, line); var lineLen = lineObj.text.length; var start, end; function coords(ch, bias) { return charCoords(cm, Pos(line, ch), "div", lineObj, bias) } function wrapX(pos, dir, side) { var extent = wrappedLineExtentChar(cm, lineObj, null, pos); var prop = (dir == "ltr") == (side == "after") ? "left" : "right"; var ch = side == "after" ? extent.begin : extent.end - (/\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1); return coords(ch, prop)[prop] } var order = getOrder(lineObj, doc.direction); iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) { var ltr = dir == "ltr"; var fromPos = coords(from, ltr ? "left" : "right"); var toPos = coords(to - 1, ltr ? "right" : "left"); var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen; var first = i == 0, last = !order || i == order.length - 1; if (toPos.top - fromPos.top <= 3) { // Single line var openLeft = (docLTR ? openStart : openEnd) && first; var openRight = (docLTR ? openEnd : openStart) && last; var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left; var right = openRight ? rightSide : (ltr ? toPos : fromPos).right; add(left, fromPos.top, right - left, fromPos.bottom); } else { // Multiple lines var topLeft, topRight, botLeft, botRight; if (ltr) { topLeft = docLTR && openStart && first ? leftSide : fromPos.left; topRight = docLTR ? rightSide : wrapX(from, dir, "before"); botLeft = docLTR ? leftSide : wrapX(to, dir, "after"); botRight = docLTR && openEnd && last ? rightSide : toPos.right; } else { topLeft = !docLTR ? leftSide : wrapX(from, dir, "before"); topRight = !docLTR && openStart && first ? rightSide : fromPos.right; botLeft = !docLTR && openEnd && last ? leftSide : toPos.left; botRight = !docLTR ? rightSide : wrapX(to, dir, "after"); } add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom); if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); } add(botLeft, toPos.top, botRight - botLeft, toPos.bottom); } if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; } if (cmpCoords(toPos, start) < 0) { start = toPos; } if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; } if (cmpCoords(toPos, end) < 0) { end = toPos; } }); return {start: start, end: end} } var sFrom = range.from(), sTo = range.to(); if (sFrom.line == sTo.line) { drawForLine(sFrom.line, sFrom.ch, sTo.ch); } else { var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line); var singleVLine = visualLine(fromLine) == visualLine(toLine); var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end; var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start; if (singleVLine) { if (leftEnd.top < rightStart.top - 2) { add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); } else { add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); } } if (leftEnd.bottom < rightStart.top) { add(leftSide, leftEnd.bottom, null, rightStart.top); } } output.appendChild(fragment); } // Cursor-blinking function restartBlink(cm) { if (!cm.state.focused) { return } var display = cm.display; clearInterval(display.blinker); var on = true; display.cursorDiv.style.visibility = ""; if (cm.options.cursorBlinkRate > 0) { display.blinker = setInterval(function () { if (!cm.hasFocus()) { onBlur(cm); } display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; }, cm.options.cursorBlinkRate); } else if (cm.options.cursorBlinkRate < 0) { display.cursorDiv.style.visibility = "hidden"; } } function ensureFocus(cm) { if (!cm.hasFocus()) { cm.display.input.focus(); if (!cm.state.focused) { onFocus(cm); } } } function delayBlurEvent(cm) { cm.state.delayingBlurEvent = true; setTimeout(function () { if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false; if (cm.state.focused) { onBlur(cm); } } }, 100); } function onFocus(cm, e) { if (cm.state.delayingBlurEvent && !cm.state.draggingText) { cm.state.delayingBlurEvent = false; } if (cm.options.readOnly == "nocursor") { return } if (!cm.state.focused) { signal(cm, "focus", cm, e); cm.state.focused = true; addClass(cm.display.wrapper, "CodeMirror-focused"); // This test prevents this from firing when a context // menu is closed (since the input reset would kill the // select-all detection hack) if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { cm.display.input.reset(); if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730 } cm.display.input.receivedFocus(); } restartBlink(cm); } function onBlur(cm, e) { if (cm.state.delayingBlurEvent) { return } if (cm.state.focused) { signal(cm, "blur", cm, e); cm.state.focused = false; rmClass(cm.display.wrapper, "CodeMirror-focused"); } clearInterval(cm.display.blinker); setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150); } // Read the actual heights of the rendered lines, and update their // stored heights to match. function updateHeightsInViewport(cm) { var display = cm.display; var prevBottom = display.lineDiv.offsetTop; var viewTop = Math.max(0, display.scroller.getBoundingClientRect().top); var oldHeight = display.lineDiv.getBoundingClientRect().top; var mustScroll = 0; for (var i = 0; i < display.view.length; i++) { var cur = display.view[i], wrapping = cm.options.lineWrapping; var height = (void 0), width = 0; if (cur.hidden) { continue } oldHeight += cur.line.height; if (ie && ie_version < 8) { var bot = cur.node.offsetTop + cur.node.offsetHeight; height = bot - prevBottom; prevBottom = bot; } else { var box = cur.node.getBoundingClientRect(); height = box.bottom - box.top; // Check that lines don't extend past the right of the current // editor width if (!wrapping && cur.text.firstChild) { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; } } var diff = cur.line.height - height; if (diff > .005 || diff < -.005) { if (oldHeight < viewTop) { mustScroll -= diff; } updateLineHeight(cur.line, height); updateWidgetHeight(cur.line); if (cur.rest) { for (var j = 0; j < cur.rest.length; j++) { updateWidgetHeight(cur.rest[j]); } } } if (width > cm.display.sizerWidth) { var chWidth = Math.ceil(width / charWidth(cm.display)); if (chWidth > cm.display.maxLineLength) { cm.display.maxLineLength = chWidth; cm.display.maxLine = cur.line; cm.display.maxLineChanged = true; } } } if (Math.abs(mustScroll) > 2) { display.scroller.scrollTop += mustScroll; } } // Read and store the height of line widgets associated with the // given line. function updateWidgetHeight(line) { if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) { var w = line.widgets[i], parent = w.node.parentNode; if (parent) { w.height = parent.offsetHeight; } } } } // Compute the lines that are visible in a given viewport (defaults // the the current scroll position). viewport may contain top, // height, and ensure (see op.scrollToPos) properties. function visibleLines(display, doc, viewport) { var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop; top = Math.floor(top - paddingTop(display)); var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight; var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom); // Ensure is a {from: {line, ch}, to: {line, ch}} object, and // forces those lines into the viewport (if possible). if (viewport && viewport.ensure) { var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line; if (ensureFrom < from) { from = ensureFrom; to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight); } else if (Math.min(ensureTo, doc.lastLine()) >= to) { from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight); to = ensureTo; } } return {from: from, to: Math.max(to, from + 1)} } // SCROLLING THINGS INTO VIEW // If an editor sits on the top or bottom of the window, partially // scrolled out of view, this ensures that the cursor is visible. function maybeScrollWindow(cm, rect) { if (signalDOMEvent(cm, "scrollCursorIntoView")) { return } var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null; if (rect.top + box.top < 0) { doScroll = true; } else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; } if (doScroll != null && !phantom) { var scrollNode = elt("div", "\u200b", null, ("position: absolute;\n top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n left: " + (rect.left) + "px; width: " + (Math.max(2, rect.right - rect.left)) + "px;")); cm.display.lineSpace.appendChild(scrollNode); scrollNode.scrollIntoView(doScroll); cm.display.lineSpace.removeChild(scrollNode); } } // Scroll a given position into view (immediately), verifying that // it actually became visible (as line heights are accurately // measured, the position of something may 'drift' during drawing). function scrollPosIntoView(cm, pos, end, margin) { if (margin == null) { margin = 0; } var rect; if (!cm.options.lineWrapping && pos == end) { // Set pos and end to the cursor positions around the character pos sticks to // If pos.sticky == "before", that is around pos.ch - 1, otherwise around pos.ch // If pos == Pos(_, 0, "before"), pos and end are unchanged end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos; pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos; } for (var limit = 0; limit < 5; limit++) { var changed = false; var coords = cursorCoords(cm, pos); var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); rect = {left: Math.min(coords.left, endCoords.left), top: Math.min(coords.top, endCoords.top) - margin, right: Math.max(coords.left, endCoords.left), bottom: Math.max(coords.bottom, endCoords.bottom) + margin}; var scrollPos = calculateScrollPos(cm, rect); var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft; if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; } } if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; } } if (!changed) { break } } return rect } // Scroll a given set of coordinates into view (immediately). function scrollIntoView(cm, rect) { var scrollPos = calculateScrollPos(cm, rect); if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); } if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); } } // Calculate a new scroll position needed to scroll the given // rectangle into view. Returns an object with scrollTop and // scrollLeft properties. When these are undefined, the // vertical/horizontal position does not need to be adjusted. function calculateScrollPos(cm, rect) { var display = cm.display, snapMargin = textHeight(cm.display); if (rect.top < 0) { rect.top = 0; } var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop; var screen = displayHeight(cm), result = {}; if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; } var docBottom = cm.doc.height + paddingVert(display); var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin; if (rect.top < screentop) { result.scrollTop = atTop ? 0 : rect.top; } else if (rect.bottom > screentop + screen) { var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen); if (newTop != screentop) { result.scrollTop = newTop; } } var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth; var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace; var screenw = displayWidth(cm) - display.gutters.offsetWidth; var tooWide = rect.right - rect.left > screenw; if (tooWide) { rect.right = rect.left + screenw; } if (rect.left < 10) { result.scrollLeft = 0; } else if (rect.left < screenleft) { result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10)); } else if (rect.right > screenw + screenleft - 3) { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; } return result } // Store a relative adjustment to the scroll position in the current // operation (to be applied when the operation finishes). function addToScrollTop(cm, top) { if (top == null) { return } resolveScrollToPos(cm); cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top; } // Make sure that at the end of the operation the current cursor is // shown. function ensureCursorVisible(cm) { resolveScrollToPos(cm); var cur = cm.getCursor(); cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin}; } function scrollToCoords(cm, x, y) { if (x != null || y != null) { resolveScrollToPos(cm); } if (x != null) { cm.curOp.scrollLeft = x; } if (y != null) { cm.curOp.scrollTop = y; } } function scrollToRange(cm, range) { resolveScrollToPos(cm); cm.curOp.scrollToPos = range; } // When an operation has its scrollToPos property set, and another // scroll action is applied before the end of the operation, this // 'simulates' scrolling that position into view in a cheap way, so // that the effect of intermediate scroll commands is not ignored. function resolveScrollToPos(cm) { var range = cm.curOp.scrollToPos; if (range) { cm.curOp.scrollToPos = null; var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to); scrollToCoordsRange(cm, from, to, range.margin); } } function scrollToCoordsRange(cm, from, to, margin) { var sPos = calculateScrollPos(cm, { left: Math.min(from.left, to.left), top: Math.min(from.top, to.top) - margin, right: Math.max(from.right, to.right), bottom: Math.max(from.bottom, to.bottom) + margin }); scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop); } // Sync the scrollable area and scrollbars, ensure the viewport // covers the visible area. function updateScrollTop(cm, val) { if (Math.abs(cm.doc.scrollTop - val) < 2) { return } if (!gecko) { updateDisplaySimple(cm, {top: val}); } setScrollTop(cm, val, true); if (gecko) { updateDisplaySimple(cm); } startWorker(cm, 100); } function setScrollTop(cm, val, forceScroll) { val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val)); if (cm.display.scroller.scrollTop == val && !forceScroll) { return } cm.doc.scrollTop = val; cm.display.scrollbars.setScrollTop(val); if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; } } // Sync scroller and scrollbar, ensure the gutter elements are // aligned. function setScrollLeft(cm, val, isScroller, forceScroll) { val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth)); if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return } cm.doc.scrollLeft = val; alignHorizontally(cm); if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; } cm.display.scrollbars.setScrollLeft(val); } // SCROLLBARS // Prepare DOM reads needed to update the scrollbars. Done in one // shot to minimize update/measure roundtrips. function measureForScrollbars(cm) { var d = cm.display, gutterW = d.gutters.offsetWidth; var docH = Math.round(cm.doc.height + paddingVert(cm.display)); return { clientHeight: d.scroller.clientHeight, viewHeight: d.wrapper.clientHeight, scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth, viewWidth: d.wrapper.clientWidth, barLeft: cm.options.fixedGutter ? gutterW : 0, docHeight: docH, scrollHeight: docH + scrollGap(cm) + d.barHeight, nativeBarWidth: d.nativeBarWidth, gutterWidth: gutterW } } var NativeScrollbars = function(place, scroll, cm) { this.cm = cm; var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"); var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); vert.tabIndex = horiz.tabIndex = -1; place(vert); place(horiz); on(vert, "scroll", function () { if (vert.clientHeight) { scroll(vert.scrollTop, "vertical"); } }); on(horiz, "scroll", function () { if (horiz.clientWidth) { scroll(horiz.scrollLeft, "horizontal"); } }); this.checkedZeroWidth = false; // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; } }; NativeScrollbars.prototype.update = function (measure) { var needsH = measure.scrollWidth > measure.clientWidth + 1; var needsV = measure.scrollHeight > measure.clientHeight + 1; var sWidth = measure.nativeBarWidth; if (needsV) { this.vert.style.display = "block"; this.vert.style.bottom = needsH ? sWidth + "px" : "0"; var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); // A bug in IE8 can cause this value to be negative, so guard it. this.vert.firstChild.style.height = Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"; } else { this.vert.scrollTop = 0; this.vert.style.display = ""; this.vert.firstChild.style.height = "0"; } if (needsH) { this.horiz.style.display = "block"; this.horiz.style.right = needsV ? sWidth + "px" : "0"; this.horiz.style.left = measure.barLeft + "px"; var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0); this.horiz.firstChild.style.width = Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px"; } else { this.horiz.style.display = ""; this.horiz.firstChild.style.width = "0"; } if (!this.checkedZeroWidth && measure.clientHeight > 0) { if (sWidth == 0) { this.zeroWidthHack(); } this.checkedZeroWidth = true; } return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0} }; NativeScrollbars.prototype.setScrollLeft = function (pos) { if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; } if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz"); } }; NativeScrollbars.prototype.setScrollTop = function (pos) { if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; } if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, "vert"); } }; NativeScrollbars.prototype.zeroWidthHack = function () { var w = mac && !mac_geMountainLion ? "12px" : "18px"; this.horiz.style.height = this.vert.style.width = w; this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none"; this.disableHoriz = new Delayed; this.disableVert = new Delayed; }; NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) { bar.style.pointerEvents = "auto"; function maybeDisable() { // To find out whether the scrollbar is still visible, we // check whether the element under the pixel in the bottom // right corner of the scrollbar box is the scrollbar box // itself (when the bar is still visible) or its filler child // (when the bar is hidden). If it is still visible, we keep // it enabled, if it's hidden, we disable pointer events. var box = bar.getBoundingClientRect(); var elt = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2) : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1); if (elt != bar) { bar.style.pointerEvents = "none"; } else { delay.set(1000, maybeDisable); } } delay.set(1000, maybeDisable); }; NativeScrollbars.prototype.clear = function () { var parent = this.horiz.parentNode; parent.removeChild(this.horiz); parent.removeChild(this.vert); }; var NullScrollbars = function () {}; NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} }; NullScrollbars.prototype.setScrollLeft = function () {}; NullScrollbars.prototype.setScrollTop = function () {}; NullScrollbars.prototype.clear = function () {}; function updateScrollbars(cm, measure) { if (!measure) { measure = measureForScrollbars(cm); } var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight; updateScrollbarsInner(cm, measure); for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) { if (startWidth != cm.display.barWidth && cm.options.lineWrapping) { updateHeightsInViewport(cm); } updateScrollbarsInner(cm, measureForScrollbars(cm)); startWidth = cm.display.barWidth; startHeight = cm.display.barHeight; } } // Re-synchronize the fake scrollbars with the actual size of the // content. function updateScrollbarsInner(cm, measure) { var d = cm.display; var sizes = d.scrollbars.update(measure); d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"; d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"; d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent"; if (sizes.right && sizes.bottom) { d.scrollbarFiller.style.display = "block"; d.scrollbarFiller.style.height = sizes.bottom + "px"; d.scrollbarFiller.style.width = sizes.right + "px"; } else { d.scrollbarFiller.style.display = ""; } if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { d.gutterFiller.style.display = "block"; d.gutterFiller.style.height = sizes.bottom + "px"; d.gutterFiller.style.width = measure.gutterWidth + "px"; } else { d.gutterFiller.style.display = ""; } } var scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars}; function initScrollbars(cm) { if (cm.display.scrollbars) { cm.display.scrollbars.clear(); if (cm.display.scrollbars.addClass) { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); } } cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) { cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); // Prevent clicks in the scrollbars from killing focus on(node, "mousedown", function () { if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); } }); node.setAttribute("cm-not-content", "true"); }, function (pos, axis) { if (axis == "horizontal") { setScrollLeft(cm, pos); } else { updateScrollTop(cm, pos); } }, cm); if (cm.display.scrollbars.addClass) { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); } } // Operations are used to wrap a series of changes to the editor // state in such a way that each change won't have to update the // cursor and display (which would be awkward, slow, and // error-prone). Instead, display updates are batched and then all // combined and executed at once. var nextOpId = 0; // Start a new operation. function startOperation(cm) { cm.curOp = { cm: cm, viewChanged: false, // Flag that indicates that lines might need to be redrawn startHeight: cm.doc.height, // Used to detect need to update scrollbar forceUpdate: false, // Used to force a redraw updateInput: 0, // Whether to reset the input textarea typing: false, // Whether this reset should be careful to leave existing text (for compositing) changeObjs: null, // Accumulated changes, for firing change events cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already selectionChanged: false, // Whether the selection needs to be redrawn updateMaxLine: false, // Set when the widest line needs to be determined anew scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet scrollToPos: null, // Used to scroll to a specific position focus: false, id: ++nextOpId, // Unique ID markArrays: null // Used by addMarkedSpan }; pushOperation(cm.curOp); } // Finish an operation, updating the display and signalling delayed events function endOperation(cm) { var op = cm.curOp; if (op) { finishOperation(op, function (group) { for (var i = 0; i < group.ops.length; i++) { group.ops[i].cm.curOp = null; } endOperations(group); }); } } // The DOM updates done when an operation finishes are batched so // that the minimum number of relayouts are required. function endOperations(group) { var ops = group.ops; for (var i = 0; i < ops.length; i++) // Read DOM { endOperation_R1(ops[i]); } for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe) { endOperation_W1(ops[i$1]); } for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM { endOperation_R2(ops[i$2]); } for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe) { endOperation_W2(ops[i$3]); } for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM { endOperation_finish(ops[i$4]); } } function endOperation_R1(op) { var cm = op.cm, display = cm.display; maybeClipScrollbars(cm); if (op.updateMaxLine) { findMaxLine(cm); } op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || op.scrollToPos.to.line >= display.viewTo) || display.maxLineChanged && cm.options.lineWrapping; op.update = op.mustUpdate && new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate); } function endOperation_W1(op) { op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update); } function endOperation_R2(op) { var cm = op.cm, display = cm.display; if (op.updatedDisplay) { updateHeightsInViewport(cm); } op.barMeasure = measureForScrollbars(cm); // If the max line changed since it was last measured, measure it, // and ensure the document's width matches it. // updateDisplay_W2 will use these properties to do the actual resizing if (display.maxLineChanged && !cm.options.lineWrapping) { op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3; cm.display.sizerWidth = op.adjustWidthTo; op.barMeasure.scrollWidth = Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth); op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)); } if (op.updatedDisplay || op.selectionChanged) { op.preparedSelection = display.input.prepareSelection(); } } function endOperation_W2(op) { var cm = op.cm; if (op.adjustWidthTo != null) { cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"; if (op.maxScrollLeft < cm.doc.scrollLeft) { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); } cm.display.maxLineChanged = false; } var takeFocus = op.focus && op.focus == activeElt(); if (op.preparedSelection) { cm.display.input.showSelection(op.preparedSelection, takeFocus); } if (op.updatedDisplay || op.startHeight != cm.doc.height) { updateScrollbars(cm, op.barMeasure); } if (op.updatedDisplay) { setDocumentHeight(cm, op.barMeasure); } if (op.selectionChanged) { restartBlink(cm); } if (cm.state.focused && op.updateInput) { cm.display.input.reset(op.typing); } if (takeFocus) { ensureFocus(op.cm); } } function endOperation_finish(op) { var cm = op.cm, display = cm.display, doc = cm.doc; if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); } // Abort mouse wheel delta measurement, when scrolling explicitly if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) { display.wheelStartX = display.wheelStartY = null; } // Propagate the scroll position to the actual DOM scroller if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); } if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); } // If we need to scroll a specific position into view, do so. if (op.scrollToPos) { var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin); maybeScrollWindow(cm, rect); } // Fire events for markers that are hidden/unidden by editing or // undoing var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers; if (hidden) { for (var i = 0; i < hidden.length; ++i) { if (!hidden[i].lines.length) { signal(hidden[i], "hide"); } } } if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1) { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], "unhide"); } } } if (display.wrapper.offsetHeight) { doc.scrollTop = cm.display.scroller.scrollTop; } // Fire change events, and delayed event handlers if (op.changeObjs) { signal(cm, "changes", cm, op.changeObjs); } if (op.update) { op.update.finish(); } } // Run the given function in an operation function runInOp(cm, f) { if (cm.curOp) { return f() } startOperation(cm); try { return f() } finally { endOperation(cm); } } // Wraps a function in an operation. Returns the wrapped function. function operation(cm, f) { return function() { if (cm.curOp) { return f.apply(cm, arguments) } startOperation(cm); try { return f.apply(cm, arguments) } finally { endOperation(cm); } } } // Used to add methods to editor and doc instances, wrapping them in // operations. function methodOp(f) { return function() { if (this.curOp) { return f.apply(this, arguments) } startOperation(this); try { return f.apply(this, arguments) } finally { endOperation(this); } } } function docMethodOp(f) { return function() { var cm = this.cm; if (!cm || cm.curOp) { return f.apply(this, arguments) } startOperation(cm); try { return f.apply(this, arguments) } finally { endOperation(cm); } } } // HIGHLIGHT WORKER function startWorker(cm, time) { if (cm.doc.highlightFrontier < cm.display.viewTo) { cm.state.highlight.set(time, bind(highlightWorker, cm)); } } function highlightWorker(cm) { var doc = cm.doc; if (doc.highlightFrontier >= cm.display.viewTo) { return } var end = +new Date + cm.options.workTime; var context = getContextBefore(cm, doc.highlightFrontier); var changedLines = []; doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) { if (context.line >= cm.display.viewFrom) { // Visible var oldStyles = line.styles; var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null; var highlighted = highlightLine(cm, line, context, true); if (resetState) { context.state = resetState; } line.styles = highlighted.styles; var oldCls = line.styleClasses, newCls = highlighted.classes; if (newCls) { line.styleClasses = newCls; } else if (oldCls) { line.styleClasses = null; } var ischange = !oldStyles || oldStyles.length != line.styles.length || oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass); for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; } if (ischange) { changedLines.push(context.line); } line.stateAfter = context.save(); context.nextLine(); } else { if (line.text.length <= cm.options.maxHighlightLength) { processLine(cm, line.text, context); } line.stateAfter = context.line % 5 == 0 ? context.save() : null; context.nextLine(); } if (+new Date > end) { startWorker(cm, cm.options.workDelay); return true } }); doc.highlightFrontier = context.line; doc.modeFrontier = Math.max(doc.modeFrontier, context.line); if (changedLines.length) { runInOp(cm, function () { for (var i = 0; i < changedLines.length; i++) { regLineChange(cm, changedLines[i], "text"); } }); } } // DISPLAY DRAWING var DisplayUpdate = function(cm, viewport, force) { var display = cm.display; this.viewport = viewport; // Store some values that we'll need later (but don't want to force a relayout for) this.visible = visibleLines(display, cm.doc, viewport); this.editorIsHidden = !display.wrapper.offsetWidth; this.wrapperHeight = display.wrapper.clientHeight; this.wrapperWidth = display.wrapper.clientWidth; this.oldDisplayWidth = displayWidth(cm); this.force = force; this.dims = getDimensions(cm); this.events = []; }; DisplayUpdate.prototype.signal = function (emitter, type) { if (hasHandler(emitter, type)) { this.events.push(arguments); } }; DisplayUpdate.prototype.finish = function () { for (var i = 0; i < this.events.length; i++) { signal.apply(null, this.events[i]); } }; function maybeClipScrollbars(cm) { var display = cm.display; if (!display.scrollbarsClipped && display.scroller.offsetWidth) { display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth; display.heightForcer.style.height = scrollGap(cm) + "px"; display.sizer.style.marginBottom = -display.nativeBarWidth + "px"; display.sizer.style.borderRightWidth = scrollGap(cm) + "px"; display.scrollbarsClipped = true; } } function selectionSnapshot(cm) { if (cm.hasFocus()) { return null } var active = activeElt(); if (!active || !contains(cm.display.lineDiv, active)) { return null } var result = {activeElt: active}; if (window.getSelection) { var sel = window.getSelection(); if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) { result.anchorNode = sel.anchorNode; result.anchorOffset = sel.anchorOffset; result.focusNode = sel.focusNode; result.focusOffset = sel.focusOffset; } } return result } function restoreSelection(snapshot) { if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return } snapshot.activeElt.focus(); if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) && snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) { var sel = window.getSelection(), range = document.createRange(); range.setEnd(snapshot.anchorNode, snapshot.anchorOffset); range.collapse(false); sel.removeAllRanges(); sel.addRange(range); sel.extend(snapshot.focusNode, snapshot.focusOffset); } } // Does the actual updating of the line display. Bails out // (returning false) when there is nothing to be done and forced is // false. function updateDisplayIfNeeded(cm, update) { var display = cm.display, doc = cm.doc; if (update.editorIsHidden) { resetView(cm); return false } // Bail out if the visible area is already rendered and nothing changed. if (!update.force && update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && display.renderedView == display.view && countDirtyView(cm) == 0) { return false } if (maybeUpdateLineNumberWidth(cm)) { resetView(cm); update.dims = getDimensions(cm); } // Compute a suitable new viewport (from & to) var end = doc.first + doc.size; var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first); var to = Math.min(end, update.visible.to + cm.options.viewportMargin); if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); } if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); } if (sawCollapsedSpans) { from = visualLineNo(cm.doc, from); to = visualLineEndNo(cm.doc, to); } var different = from != display.viewFrom || to != display.viewTo || display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth; adjustView(cm, from, to); display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); // Position the mover div to align with the current scroll position cm.display.mover.style.top = display.viewOffset + "px"; var toUpdate = countDirtyView(cm); if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) { return false } // For big changes, we hide the enclosing element during the // update, since that speeds up the operations on most browsers. var selSnapshot = selectionSnapshot(cm); if (toUpdate > 4) { display.lineDiv.style.display = "none"; } patchDisplay(cm, display.updateLineNumbers, update.dims); if (toUpdate > 4) { display.lineDiv.style.display = ""; } display.renderedView = display.view; // There might have been a widget with a focused element that got // hidden or updated, if so re-focus it. restoreSelection(selSnapshot); // Prevent selection and cursors from interfering with the scroll // width and height. removeChildren(display.cursorDiv); removeChildren(display.selectionDiv); display.gutters.style.height = display.sizer.style.minHeight = 0; if (different) { display.lastWrapHeight = update.wrapperHeight; display.lastWrapWidth = update.wrapperWidth; startWorker(cm, 400); } display.updateLineNumbers = null; return true } function postUpdateDisplay(cm, update) { var viewport = update.viewport; for (var first = true;; first = false) { if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) { // Clip forced viewport to actual scrollable area. if (viewport && viewport.top != null) { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; } // Updated line heights might result in the drawn area not // actually covering the viewport. Keep looping until it does. update.visible = visibleLines(cm.display, cm.doc, viewport); if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) { break } } else if (first) { update.visible = visibleLines(cm.display, cm.doc, viewport); } if (!updateDisplayIfNeeded(cm, update)) { break } updateHeightsInViewport(cm); var barMeasure = measureForScrollbars(cm); updateSelection(cm); updateScrollbars(cm, barMeasure); setDocumentHeight(cm, barMeasure); update.force = false; } update.signal(cm, "update", cm); if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo); cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo; } } function updateDisplaySimple(cm, viewport) { var update = new DisplayUpdate(cm, viewport); if (updateDisplayIfNeeded(cm, update)) { updateHeightsInViewport(cm); postUpdateDisplay(cm, update); var barMeasure = measureForScrollbars(cm); updateSelection(cm); updateScrollbars(cm, barMeasure); setDocumentHeight(cm, barMeasure); update.finish(); } } // Sync the actual display DOM structure with display.view, removing // nodes for lines that are no longer in view, and creating the ones // that are not there yet, and updating the ones that are out of // date. function patchDisplay(cm, updateNumbersFrom, dims) { var display = cm.display, lineNumbers = cm.options.lineNumbers; var container = display.lineDiv, cur = container.firstChild; function rm(node) { var next = node.nextSibling; // Works around a throw-scroll bug in OS X Webkit if (webkit && mac && cm.display.currentWheelTarget == node) { node.style.display = "none"; } else { node.parentNode.removeChild(node); } return next } var view = display.view, lineN = display.viewFrom; // Loop over the elements in the view, syncing cur (the DOM nodes // in display.lineDiv) with the view as we go. for (var i = 0; i < view.length; i++) { var lineView = view[i]; if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet var node = buildLineElement(cm, lineView, lineN, dims); container.insertBefore(node, cur); } else { // Already drawn while (cur != lineView.node) { cur = rm(cur); } var updateNumber = lineNumbers && updateNumbersFrom != null && updateNumbersFrom <= lineN && lineView.lineNumber; if (lineView.changes) { if (indexOf(lineView.changes, "gutter") > -1) { updateNumber = false; } updateLineForChanges(cm, lineView, lineN, dims); } if (updateNumber) { removeChildren(lineView.lineNumber); lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))); } cur = lineView.node.nextSibling; } lineN += lineView.size; } while (cur) { cur = rm(cur); } } function updateGutterSpace(display) { var width = display.gutters.offsetWidth; display.sizer.style.marginLeft = width + "px"; // Send an event to consumers responding to changes in gutter width. signalLater(display, "gutterChanged", display); } function setDocumentHeight(cm, measure) { cm.display.sizer.style.minHeight = measure.docHeight + "px"; cm.display.heightForcer.style.top = measure.docHeight + "px"; cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px"; } // Re-align line numbers and gutter marks to compensate for // horizontal scrolling. function alignHorizontally(cm) { var display = cm.display, view = display.view; if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return } var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; var gutterW = display.gutters.offsetWidth, left = comp + "px"; for (var i = 0; i < view.length; i++) { if (!view[i].hidden) { if (cm.options.fixedGutter) { if (view[i].gutter) { view[i].gutter.style.left = left; } if (view[i].gutterBackground) { view[i].gutterBackground.style.left = left; } } var align = view[i].alignable; if (align) { for (var j = 0; j < align.length; j++) { align[j].style.left = left; } } } } if (cm.options.fixedGutter) { display.gutters.style.left = (comp + gutterW) + "px"; } } // Used to ensure that the line number gutter is still the right // size for the current document size. Returns true when an update // is needed. function maybeUpdateLineNumberWidth(cm) { if (!cm.options.lineNumbers) { return false } var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display; if (last.length != display.lineNumChars) { var test = display.measure.appendChild(elt("div", [elt("div", last)], "CodeMirror-linenumber CodeMirror-gutter-elt")); var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW; display.lineGutter.style.width = ""; display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1; display.lineNumWidth = display.lineNumInnerWidth + padding; display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; display.lineGutter.style.width = display.lineNumWidth + "px"; updateGutterSpace(cm.display); return true } return false } function getGutters(gutters, lineNumbers) { var result = [], sawLineNumbers = false; for (var i = 0; i < gutters.length; i++) { var name = gutters[i], style = null; if (typeof name != "string") { style = name.style; name = name.className; } if (name == "CodeMirror-linenumbers") { if (!lineNumbers) { continue } else { sawLineNumbers = true; } } result.push({className: name, style: style}); } if (lineNumbers && !sawLineNumbers) { result.push({className: "CodeMirror-linenumbers", style: null}); } return result } // Rebuild the gutter elements, ensure the margin to the left of the // code matches their width. function renderGutters(display) { var gutters = display.gutters, specs = display.gutterSpecs; removeChildren(gutters); display.lineGutter = null; for (var i = 0; i < specs.length; ++i) { var ref = specs[i]; var className = ref.className; var style = ref.style; var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + className)); if (style) { gElt.style.cssText = style; } if (className == "CodeMirror-linenumbers") { display.lineGutter = gElt; gElt.style.width = (display.lineNumWidth || 1) + "px"; } } gutters.style.display = specs.length ? "" : "none"; updateGutterSpace(display); } function updateGutters(cm) { renderGutters(cm.display); regChange(cm); alignHorizontally(cm); } // The display handles the DOM integration, both for input reading // and content drawing. It holds references to DOM nodes and // display-related state. function Display(place, doc, input, options) { var d = this; this.input = input; // Covers bottom-right square when both scrollbars are present. d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); d.scrollbarFiller.setAttribute("cm-not-content", "true"); // Covers bottom of gutter when coverGutterNextToScrollbar is on // and h scrollbar is present. d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); d.gutterFiller.setAttribute("cm-not-content", "true"); // Will contain the actual code, positioned to cover the viewport. d.lineDiv = eltP("div", null, "CodeMirror-code"); // Elements are added to these to represent selection and cursors. d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); d.cursorDiv = elt("div", null, "CodeMirror-cursors"); // A visibility: hidden element used to find the size of things. d.measure = elt("div", null, "CodeMirror-measure"); // When lines outside of the viewport are measured, they are drawn in this. d.lineMeasure = elt("div", null, "CodeMirror-measure"); // Wraps everything that needs to exist inside the vertically-padded coordinate system d.lineSpace = eltP("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], null, "position: relative; outline: none"); var lines = eltP("div", [d.lineSpace], "CodeMirror-lines"); // Moved around its parent to cover visible view. d.mover = elt("div", [lines], null, "position: relative"); // Set to the height of the document, allowing scrolling. d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); d.sizerWidth = null; // Behavior of elts with overflow: auto and padding is // inconsistent across browsers. This is used to ensure the // scrollable area is big enough. d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;"); // Will contain the gutters, if any. d.gutters = elt("div", null, "CodeMirror-gutters"); d.lineGutter = null; // Actual scrollable element. d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); d.scroller.setAttribute("tabIndex", "-1"); // The element in which the editor lives. d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); // This attribute is respected by automatic translation systems such as Google Translate, // and may also be respected by tools used by human translators. d.wrapper.setAttribute('translate', 'no'); // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; } if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; } if (place) { if (place.appendChild) { place.appendChild(d.wrapper); } else { place(d.wrapper); } } // Current rendered range (may be bigger than the view window). d.viewFrom = d.viewTo = doc.first; d.reportedViewFrom = d.reportedViewTo = doc.first; // Information about the rendered lines. d.view = []; d.renderedView = null; // Holds info about a single rendered line when it was rendered // for measurement, while not in view. d.externalMeasured = null; // Empty space (in pixels) above the view d.viewOffset = 0; d.lastWrapHeight = d.lastWrapWidth = 0; d.updateLineNumbers = null; d.nativeBarWidth = d.barHeight = d.barWidth = 0; d.scrollbarsClipped = false; // Used to only resize the line number gutter when necessary (when // the amount of lines crosses a boundary that makes its width change) d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; // Set to true when a non-horizontal-scrolling line widget is // added. As an optimization, line widget aligning is skipped when // this is false. d.alignWidgets = false; d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; // Tracks the maximum line length so that the horizontal scrollbar // can be kept static when scrolling. d.maxLine = null; d.maxLineLength = 0; d.maxLineChanged = false; // Used for measuring wheel scrolling granularity d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; // True when shift is held down. d.shift = false; // Used to track whether anything happened since the context menu // was opened. d.selForContextMenu = null; d.activeTouch = null; d.gutterSpecs = getGutters(options.gutters, options.lineNumbers); renderGutters(d); input.init(d); } // Since the delta values reported on mouse wheel events are // unstandardized between browsers and even browser versions, and // generally horribly unpredictable, this code starts by measuring // the scroll effect that the first few mouse wheel events have, // and, from that, detects the way it can convert deltas to pixel // offsets afterwards. // // The reason we want to know the amount a wheel event will scroll // is that it gives us a chance to update the display before the // actual scrolling happens, reducing flickering. var wheelSamples = 0, wheelPixelsPerUnit = null; // Fill in a browser-detected starting value on browsers where we // know one. These don't have to be accurate -- the result of them // being wrong would just be a slight flicker on the first wheel // scroll (if it is large enough). if (ie) { wheelPixelsPerUnit = -.53; } else if (gecko) { wheelPixelsPerUnit = 15; } else if (chrome) { wheelPixelsPerUnit = -.7; } else if (safari) { wheelPixelsPerUnit = -1/3; } function wheelEventDelta(e) { var dx = e.wheelDeltaX, dy = e.wheelDeltaY; if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; } if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; } else if (dy == null) { dy = e.wheelDelta; } return {x: dx, y: dy} } function wheelEventPixels(e) { var delta = wheelEventDelta(e); delta.x *= wheelPixelsPerUnit; delta.y *= wheelPixelsPerUnit; return delta } function onScrollWheel(cm, e) { var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y; var pixelsPerUnit = wheelPixelsPerUnit; if (e.deltaMode === 0) { dx = e.deltaX; dy = e.deltaY; pixelsPerUnit = 1; } var display = cm.display, scroll = display.scroller; // Quit if there's nothing to scroll here var canScrollX = scroll.scrollWidth > scroll.clientWidth; var canScrollY = scroll.scrollHeight > scroll.clientHeight; if (!(dx && canScrollX || dy && canScrollY)) { return } // Webkit browsers on OS X abort momentum scrolls when the target // of the scroll event is removed from the scrollable element. // This hack (see related code in patchDisplay) makes sure the // element is kept around. if (dy && mac && webkit) { outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { for (var i = 0; i < view.length; i++) { if (view[i].node == cur) { cm.display.currentWheelTarget = cur; break outer } } } } // On some browsers, horizontal scrolling will cause redraws to // happen before the gutter has been realigned, causing it to // wriggle around in a most unseemly way. When we have an // estimated pixels/delta value, we just handle horizontal // scrolling entirely here. It'll be slightly off from native, but // better than glitching out. if (dx && !gecko && !presto && pixelsPerUnit != null) { if (dy && canScrollY) { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * pixelsPerUnit)); } setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * pixelsPerUnit)); // Only prevent default scrolling if vertical scrolling is // actually possible. Otherwise, it causes vertical scroll // jitter on OSX trackpads when deltaX is small and deltaY // is large (issue #3579) if (!dy || (dy && canScrollY)) { e_preventDefault(e); } display.wheelStartX = null; // Abort measurement, if in progress return } // 'Project' the visible viewport to cover the area that is being // scrolled into view (if we know enough to estimate it). if (dy && pixelsPerUnit != null) { var pixels = dy * pixelsPerUnit; var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight; if (pixels < 0) { top = Math.max(0, top + pixels - 50); } else { bot = Math.min(cm.doc.height, bot + pixels + 50); } updateDisplaySimple(cm, {top: top, bottom: bot}); } if (wheelSamples < 20 && e.deltaMode !== 0) { if (display.wheelStartX == null) { display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop; display.wheelDX = dx; display.wheelDY = dy; setTimeout(function () { if (display.wheelStartX == null) { return } var movedX = scroll.scrollLeft - display.wheelStartX; var movedY = scroll.scrollTop - display.wheelStartY; var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || (movedX && display.wheelDX && movedX / display.wheelDX); display.wheelStartX = display.wheelStartY = null; if (!sample) { return } wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); ++wheelSamples; }, 200); } else { display.wheelDX += dx; display.wheelDY += dy; } } } // Selection objects are immutable. A new one is created every time // the selection changes. A selection is one or more non-overlapping // (and non-touching) ranges, sorted, and an integer that indicates // which one is the primary selection (the one that's scrolled into // view, that getCursor returns, etc). var Selection = function(ranges, primIndex) { this.ranges = ranges; this.primIndex = primIndex; }; Selection.prototype.primary = function () { return this.ranges[this.primIndex] }; Selection.prototype.equals = function (other) { if (other == this) { return true } if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false } for (var i = 0; i < this.ranges.length; i++) { var here = this.ranges[i], there = other.ranges[i]; if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false } } return true }; Selection.prototype.deepCopy = function () { var out = []; for (var i = 0; i < this.ranges.length; i++) { out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); } return new Selection(out, this.primIndex) }; Selection.prototype.somethingSelected = function () { for (var i = 0; i < this.ranges.length; i++) { if (!this.ranges[i].empty()) { return true } } return false }; Selection.prototype.contains = function (pos, end) { if (!end) { end = pos; } for (var i = 0; i < this.ranges.length; i++) { var range = this.ranges[i]; if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) { return i } } return -1 }; var Range = function(anchor, head) { this.anchor = anchor; this.head = head; }; Range.prototype.from = function () { return minPos(this.anchor, this.head) }; Range.prototype.to = function () { return maxPos(this.anchor, this.head) }; Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch }; // Take an unsorted, potentially overlapping set of ranges, and // build a selection out of it. 'Consumes' ranges array (modifying // it). function normalizeSelection(cm, ranges, primIndex) { var mayTouch = cm && cm.options.selectionsMayTouch; var prim = ranges[primIndex]; ranges.sort(function (a, b) { return cmp(a.from(), b.from()); }); primIndex = indexOf(ranges, prim); for (var i = 1; i < ranges.length; i++) { var cur = ranges[i], prev = ranges[i - 1]; var diff = cmp(prev.to(), cur.from()); if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) { var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to()); var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head; if (i <= primIndex) { --primIndex; } ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)); } } return new Selection(ranges, primIndex) } function simpleSelection(anchor, head) { return new Selection([new Range(anchor, head || anchor)], 0) } // Compute the position of the end of a change (its 'to' property // refers to the pre-change end). function changeEnd(change) { if (!change.text) { return change.to } return Pos(change.from.line + change.text.length - 1, lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)) } // Adjust a position to refer to the post-change position of the // same text, or the end of the change if the change covers it. function adjustForChange(pos, change) { if (cmp(pos, change.from) < 0) { return pos } if (cmp(pos, change.to) <= 0) { return changeEnd(change) } var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch; if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; } return Pos(line, ch) } function computeSelAfterChange(doc, change) { var out = []; for (var i = 0; i < doc.sel.ranges.length; i++) { var range = doc.sel.ranges[i]; out.push(new Range(adjustForChange(range.anchor, change), adjustForChange(range.head, change))); } return normalizeSelection(doc.cm, out, doc.sel.primIndex) } function offsetPos(pos, old, nw) { if (pos.line == old.line) { return Pos(nw.line, pos.ch - old.ch + nw.ch) } else { return Pos(nw.line + (pos.line - old.line), pos.ch) } } // Used by replaceSelections to allow moving the selection to the // start or around the replaced test. Hint may be "start" or "around". function computeReplacedSel(doc, changes, hint) { var out = []; var oldPrev = Pos(doc.first, 0), newPrev = oldPrev; for (var i = 0; i < changes.length; i++) { var change = changes[i]; var from = offsetPos(change.from, oldPrev, newPrev); var to = offsetPos(changeEnd(change), oldPrev, newPrev); oldPrev = change.to; newPrev = to; if (hint == "around") { var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0; out[i] = new Range(inv ? to : from, inv ? from : to); } else { out[i] = new Range(from, from); } } return new Selection(out, doc.sel.primIndex) } // Used to get the editor into a consistent state again when options change. function loadMode(cm) { cm.doc.mode = getMode(cm.options, cm.doc.modeOption); resetModeState(cm); } function resetModeState(cm) { cm.doc.iter(function (line) { if (line.stateAfter) { line.stateAfter = null; } if (line.styles) { line.styles = null; } }); cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first; startWorker(cm, 100); cm.state.modeGen++; if (cm.curOp) { regChange(cm); } } // DOCUMENT DATA STRUCTURE // By default, updates that start and end at the beginning of a line // are treated specially, in order to make the association of line // widgets and marker elements with the text behave more intuitive. function isWholeLineUpdate(doc, change) { return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && (!doc.cm || doc.cm.options.wholeLineUpdateBefore) } // Perform a change on the document data structure. function updateDoc(doc, change, markedSpans, estimateHeight) { function spansFor(n) {return markedSpans ? markedSpans[n] : null} function update(line, text, spans) { updateLine(line, text, spans, estimateHeight); signalLater(line, "change", line, change); } function linesFor(start, end) { var result = []; for (var i = start; i < end; ++i) { result.push(new Line(text[i], spansFor(i), estimateHeight)); } return result } var from = change.from, to = change.to, text = change.text; var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line); var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line; // Adjust the line structure if (change.full) { doc.insert(0, linesFor(0, text.length)); doc.remove(text.length, doc.size - text.length); } else if (isWholeLineUpdate(doc, change)) { // This is a whole-line replace. Treated specially to make // sure line objects move the way they are supposed to. var added = linesFor(0, text.length - 1); update(lastLine, lastLine.text, lastSpans); if (nlines) { doc.remove(from.line, nlines); } if (added.length) { doc.insert(from.line, added); } } else if (firstLine == lastLine) { if (text.length == 1) { update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); } else { var added$1 = linesFor(1, text.length - 1); added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight)); update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); doc.insert(from.line + 1, added$1); } } else if (text.length == 1) { update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); doc.remove(from.line + 1, nlines); } else { update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); var added$2 = linesFor(1, text.length - 1); if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); } doc.insert(from.line + 1, added$2); } signalLater(doc, "change", doc, change); } // Call f for all linked documents. function linkedDocs(doc, f, sharedHistOnly) { function propagate(doc, skip, sharedHist) { if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) { var rel = doc.linked[i]; if (rel.doc == skip) { continue } var shared = sharedHist && rel.sharedHist; if (sharedHistOnly && !shared) { continue } f(rel.doc, shared); propagate(rel.doc, doc, shared); } } } propagate(doc, null, true); } // Attach a document to an editor. function attachDoc(cm, doc) { if (doc.cm) { throw new Error("This document is already in use.") } cm.doc = doc; doc.cm = cm; estimateLineHeights(cm); loadMode(cm); setDirectionClass(cm); cm.options.direction = doc.direction; if (!cm.options.lineWrapping) { findMaxLine(cm); } cm.options.mode = doc.modeOption; regChange(cm); } function setDirectionClass(cm) { (cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl"); } function directionChanged(cm) { runInOp(cm, function () { setDirectionClass(cm); regChange(cm); }); } function History(prev) { // Arrays of change events and selections. Doing something adds an // event to done and clears undo. Undoing moves events from done // to undone, redoing moves them in the other direction. this.done = []; this.undone = []; this.undoDepth = prev ? prev.undoDepth : Infinity; // Used to track when changes can be merged into a single undo // event this.lastModTime = this.lastSelTime = 0; this.lastOp = this.lastSelOp = null; this.lastOrigin = this.lastSelOrigin = null; // Used by the isClean() method this.generation = this.maxGeneration = prev ? prev.maxGeneration : 1; } // Create a history change event from an updateDoc-style change // object. function historyChangeFromChange(doc, change) { var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)}; attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true); return histChange } // Pop all selection events off the end of a history array. Stop at // a change event. function clearSelectionEvents(array) { while (array.length) { var last = lst(array); if (last.ranges) { array.pop(); } else { break } } } // Find the top change event in the history. Pop off selection // events that are in the way. function lastChangeEvent(hist, force) { if (force) { clearSelectionEvents(hist.done); return lst(hist.done) } else if (hist.done.length && !lst(hist.done).ranges) { return lst(hist.done) } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { hist.done.pop(); return lst(hist.done) } } // Register a change in the history. Merges changes that are within // a single operation, or are close together with an origin that // allows merging (starting with "+") into a single event. function addChangeToHistory(doc, change, selAfter, opId) { var hist = doc.history; hist.undone.length = 0; var time = +new Date, cur; var last; if ((hist.lastOp == opId || hist.lastOrigin == change.origin && change.origin && ((change.origin.charAt(0) == "+" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) || change.origin.charAt(0) == "*")) && (cur = lastChangeEvent(hist, hist.lastOp == opId))) { // Merge this change into the last event last = lst(cur.changes); if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { // Optimized case for simple insertion -- don't want to add // new changesets for every character typed last.to = changeEnd(change); } else { // Add new sub-event cur.changes.push(historyChangeFromChange(doc, change)); } } else { // Can not be merged, start a new event. var before = lst(hist.done); if (!before || !before.ranges) { pushSelectionToHistory(doc.sel, hist.done); } cur = {changes: [historyChangeFromChange(doc, change)], generation: hist.generation}; hist.done.push(cur); while (hist.done.length > hist.undoDepth) { hist.done.shift(); if (!hist.done[0].ranges) { hist.done.shift(); } } } hist.done.push(selAfter); hist.generation = ++hist.maxGeneration; hist.lastModTime = hist.lastSelTime = time; hist.lastOp = hist.lastSelOp = opId; hist.lastOrigin = hist.lastSelOrigin = change.origin; if (!last) { signal(doc, "historyAdded"); } } function selectionEventCanBeMerged(doc, origin, prev, sel) { var ch = origin.charAt(0); return ch == "*" || ch == "+" && prev.ranges.length == sel.ranges.length && prev.somethingSelected() == sel.somethingSelected() && new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500) } // Called whenever the selection changes, sets the new selection as // the pending selection in the history, and pushes the old pending // selection into the 'done' array when it was significantly // different (in number of selected ranges, emptiness, or time). function addSelectionToHistory(doc, sel, opId, options) { var hist = doc.history, origin = options && options.origin; // A new event is started when the previous origin does not match // the current, or the origins don't allow matching. Origins // starting with * are always merged, those starting with + are // merged when similar and close together in time. if (opId == hist.lastSelOp || (origin && hist.lastSelOrigin == origin && (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || selectionEventCanBeMerged(doc, origin, lst(hist.done), sel)))) { hist.done[hist.done.length - 1] = sel; } else { pushSelectionToHistory(sel, hist.done); } hist.lastSelTime = +new Date; hist.lastSelOrigin = origin; hist.lastSelOp = opId; if (options && options.clearRedo !== false) { clearSelectionEvents(hist.undone); } } function pushSelectionToHistory(sel, dest) { var top = lst(dest); if (!(top && top.ranges && top.equals(sel))) { dest.push(sel); } } // Used to store marked span information in the history. function attachLocalSpans(doc, change, from, to) { var existing = change["spans_" + doc.id], n = 0; doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) { if (line.markedSpans) { (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; } ++n; }); } // When un/re-doing restores text containing marked spans, those // that have been explicitly cleared should not be restored. function removeClearedSpans(spans) { if (!spans) { return null } var out; for (var i = 0; i < spans.length; ++i) { if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } } else if (out) { out.push(spans[i]); } } return !out ? spans : out.length ? out : null } // Retrieve and filter the old marked spans stored in a change event. function getOldSpans(doc, change) { var found = change["spans_" + doc.id]; if (!found) { return null } var nw = []; for (var i = 0; i < change.text.length; ++i) { nw.push(removeClearedSpans(found[i])); } return nw } // Used for un/re-doing changes from the history. Combines the // result of computing the existing spans with the set of spans that // existed in the history (so that deleting around a span and then // undoing brings back the span). function mergeOldSpans(doc, change) { var old = getOldSpans(doc, change); var stretched = stretchSpansOverChange(doc, change); if (!old) { return stretched } if (!stretched) { return old } for (var i = 0; i < old.length; ++i) { var oldCur = old[i], stretchCur = stretched[i]; if (oldCur && stretchCur) { spans: for (var j = 0; j < stretchCur.length; ++j) { var span = stretchCur[j]; for (var k = 0; k < oldCur.length; ++k) { if (oldCur[k].marker == span.marker) { continue spans } } oldCur.push(span); } } else if (stretchCur) { old[i] = stretchCur; } } return old } // Used both to provide a JSON-safe object in .getHistory, and, when // detaching a document, to split the history in two function copyHistoryArray(events, newGroup, instantiateSel) { var copy = []; for (var i = 0; i < events.length; ++i) { var event = events[i]; if (event.ranges) { copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event); continue } var changes = event.changes, newChanges = []; copy.push({changes: newChanges}); for (var j = 0; j < changes.length; ++j) { var change = changes[j], m = (void 0); newChanges.push({from: change.from, to: change.to, text: change.text}); if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\d+)$/)) { if (indexOf(newGroup, Number(m[1])) > -1) { lst(newChanges)[prop] = change[prop]; delete change[prop]; } } } } } } return copy } // The 'scroll' parameter given to many of these indicated whether // the new cursor position should be scrolled into view after // modifying the selection. // If shift is held or the extend flag is set, extends a range to // include a given position (and optionally a second position). // Otherwise, simply returns the range between the given positions. // Used for cursor motion and such. function extendRange(range, head, other, extend) { if (extend) { var anchor = range.anchor; if (other) { var posBefore = cmp(head, anchor) < 0; if (posBefore != (cmp(other, anchor) < 0)) { anchor = head; head = other; } else if (posBefore != (cmp(head, other) < 0)) { head = other; } } return new Range(anchor, head) } else { return new Range(other || head, head) } } // Extend the primary selection range, discard the rest. function extendSelection(doc, head, other, options, extend) { if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); } setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options); } // Extend all selections (pos is an array of selections with length // equal the number of selections) function extendSelections(doc, heads, options) { var out = []; var extend = doc.cm && (doc.cm.display.shift || doc.extend); for (var i = 0; i < doc.sel.ranges.length; i++) { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); } var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex); setSelection(doc, newSel, options); } // Updates a single range in the selection. function replaceOneSelection(doc, i, range, options) { var ranges = doc.sel.ranges.slice(0); ranges[i] = range; setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options); } // Reset the selection to a single range. function setSimpleSelection(doc, anchor, head, options) { setSelection(doc, simpleSelection(anchor, head), options); } // Give beforeSelectionChange handlers a change to influence a // selection update. function filterSelectionChange(doc, sel, options) { var obj = { ranges: sel.ranges, update: function(ranges) { this.ranges = []; for (var i = 0; i < ranges.length; i++) { this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), clipPos(doc, ranges[i].head)); } }, origin: options && options.origin }; signal(doc, "beforeSelectionChange", doc, obj); if (doc.cm) { signal(doc.cm, "beforeSelectionChange", doc.cm, obj); } if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) } else { return sel } } function setSelectionReplaceHistory(doc, sel, options) { var done = doc.history.done, last = lst(done); if (last && last.ranges) { done[done.length - 1] = sel; setSelectionNoUndo(doc, sel, options); } else { setSelection(doc, sel, options); } } // Set a new selection. function setSelection(doc, sel, options) { setSelectionNoUndo(doc, sel, options); addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options); } function setSelectionNoUndo(doc, sel, options) { if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) { sel = filterSelectionChange(doc, sel, options); } var bias = options && options.bias || (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1); setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)); if (!(options && options.scroll === false) && doc.cm && doc.cm.getOption("readOnly") != "nocursor") { ensureCursorVisible(doc.cm); } } function setSelectionInner(doc, sel) { if (sel.equals(doc.sel)) { return } doc.sel = sel; if (doc.cm) { doc.cm.curOp.updateInput = 1; doc.cm.curOp.selectionChanged = true; signalCursorActivity(doc.cm); } signalLater(doc, "cursorActivity", doc); } // Verify that the selection does not partially select any atomic // marked ranges. function reCheckSelection(doc) { setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false)); } // Return a selection that does not partially select any atomic // ranges. function skipAtomicInSelection(doc, sel, bias, mayClear) { var out; for (var i = 0; i < sel.ranges.length; i++) { var range = sel.ranges[i]; var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i]; var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear); var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear); if (out || newAnchor != range.anchor || newHead != range.head) { if (!out) { out = sel.ranges.slice(0, i); } out[i] = new Range(newAnchor, newHead); } } return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel } function skipAtomicInner(doc, pos, oldPos, dir, mayClear) { var line = getLine(doc, pos.line); if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) { var sp = line.markedSpans[i], m = sp.marker; // Determine if we should prevent the cursor being placed to the left/right of an atomic marker // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it // is with selectLeft/Right var preventCursorLeft = ("selectLeft" in m) ? !m.selectLeft : m.inclusiveLeft; var preventCursorRight = ("selectRight" in m) ? !m.selectRight : m.inclusiveRight; if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) { if (mayClear) { signal(m, "beforeCursorEnter"); if (m.explicitlyCleared) { if (!line.markedSpans) { break } else {--i; continue} } } if (!m.atomic) { continue } if (oldPos) { var near = m.find(dir < 0 ? 1 : -1), diff = (void 0); if (dir < 0 ? preventCursorRight : preventCursorLeft) { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); } if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) { return skipAtomicInner(doc, near, pos, dir, mayClear) } } var far = m.find(dir < 0 ? -1 : 1); if (dir < 0 ? preventCursorLeft : preventCursorRight) { far = movePos(doc, far, dir, far.line == pos.line ? line : null); } return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null } } } return pos } // Ensure a given position is not inside an atomic range. function skipAtomic(doc, pos, oldPos, bias, mayClear) { var dir = bias || 1; var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) || (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) || skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true)); if (!found) { doc.cantEdit = true; return Pos(doc.first, 0) } return found } function movePos(doc, pos, dir, line) { if (dir < 0 && pos.ch == 0) { if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) } else { return null } } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) { if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) } else { return null } } else { return new Pos(pos.line, pos.ch + dir) } } function selectAll(cm) { cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll); } // UPDATING // Allow "beforeChange" event handlers to influence a change function filterChange(doc, change, update) { var obj = { canceled: false, from: change.from, to: change.to, text: change.text, origin: change.origin, cancel: function () { return obj.canceled = true; } }; if (update) { obj.update = function (from, to, text, origin) { if (from) { obj.from = clipPos(doc, from); } if (to) { obj.to = clipPos(doc, to); } if (text) { obj.text = text; } if (origin !== undefined) { obj.origin = origin; } }; } signal(doc, "beforeChange", doc, obj); if (doc.cm) { signal(doc.cm, "beforeChange", doc.cm, obj); } if (obj.canceled) { if (doc.cm) { doc.cm.curOp.updateInput = 2; } return null } return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin} } // Apply a change to a document, and add it to the document's // history, and propagating it to all linked documents. function makeChange(doc, change, ignoreReadOnly) { if (doc.cm) { if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) } if (doc.cm.state.suppressEdits) { return } } if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { change = filterChange(doc, change, true); if (!change) { return } } // Possibly split or suppress the update based on the presence // of read-only spans in its range. var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); if (split) { for (var i = split.length - 1; i >= 0; --i) { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text, origin: change.origin}); } } else { makeChangeInner(doc, change); } } function makeChangeInner(doc, change) { if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) { return } var selAfter = computeSelAfterChange(doc, change); addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); var rebased = []; linkedDocs(doc, function (doc, sharedHist) { if (!sharedHist && indexOf(rebased, doc.history) == -1) { rebaseHist(doc.history, change); rebased.push(doc.history); } makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)); }); } // Revert a change stored in a document's history. function makeChangeFromHistory(doc, type, allowSelectionOnly) { var suppress = doc.cm && doc.cm.state.suppressEdits; if (suppress && !allowSelectionOnly) { return } var hist = doc.history, event, selAfter = doc.sel; var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done; // Verify that there is a useable event (so that ctrl-z won't // needlessly clear selection events) var i = 0; for (; i < source.length; i++) { event = source[i]; if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) { break } } if (i == source.length) { return } hist.lastOrigin = hist.lastSelOrigin = null; for (;;) { event = source.pop(); if (event.ranges) { pushSelectionToHistory(event, dest); if (allowSelectionOnly && !event.equals(doc.sel)) { setSelection(doc, event, {clearRedo: false}); return } selAfter = event; } else if (suppress) { source.push(event); return } else { break } } // Build up a reverse change object to add to the opposite history // stack (redo when undoing, and vice versa). var antiChanges = []; pushSelectionToHistory(selAfter, dest); dest.push({changes: antiChanges, generation: hist.generation}); hist.generation = event.generation || ++hist.maxGeneration; var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange"); var loop = function ( i ) { var change = event.changes[i]; change.origin = type; if (filter && !filterChange(doc, change, false)) { source.length = 0; return {} } antiChanges.push(historyChangeFromChange(doc, change)); var after = i ? computeSelAfterChange(doc, change) : lst(source); makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); } var rebased = []; // Propagate to the linked documents linkedDocs(doc, function (doc, sharedHist) { if (!sharedHist && indexOf(rebased, doc.history) == -1) { rebaseHist(doc.history, change); rebased.push(doc.history); } makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)); }); }; for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) { var returned = loop( i$1 ); if ( returned ) return returned.v; } } // Sub-views need their line numbers shifted when text is added // above or below them in the parent document. function shiftDoc(doc, distance) { if (distance == 0) { return } doc.first += distance; doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range( Pos(range.anchor.line + distance, range.anchor.ch), Pos(range.head.line + distance, range.head.ch) ); }), doc.sel.primIndex); if (doc.cm) { regChange(doc.cm, doc.first, doc.first - distance, distance); for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) { regLineChange(doc.cm, l, "gutter"); } } } // More lower-level change function, handling only a single document // (not linked ones). function makeChangeSingleDoc(doc, change, selAfter, spans) { if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) } if (change.to.line < doc.first) { shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); return } if (change.from.line > doc.lastLine()) { return } // Clip the change to the size of this doc if (change.from.line < doc.first) { var shift = change.text.length - 1 - (doc.first - change.from.line); shiftDoc(doc, shift); change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), text: [lst(change.text)], origin: change.origin}; } var last = doc.lastLine(); if (change.to.line > last) { change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), text: [change.text[0]], origin: change.origin}; } change.removed = getBetween(doc, change.from, change.to); if (!selAfter) { selAfter = computeSelAfterChange(doc, change); } if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); } else { updateDoc(doc, change, spans); } setSelectionNoUndo(doc, selAfter, sel_dontScroll); if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0))) { doc.cantEdit = false; } } // Handle the interaction of a change to a document with the editor // that this document is part of. function makeChangeSingleDocInEditor(cm, change, spans) { var doc = cm.doc, display = cm.display, from = change.from, to = change.to; var recomputeMaxLength = false, checkWidthStart = from.line; if (!cm.options.lineWrapping) { checkWidthStart = lineNo(visualLine(getLine(doc, from.line))); doc.iter(checkWidthStart, to.line + 1, function (line) { if (line == display.maxLine) { recomputeMaxLength = true; return true } }); } if (doc.sel.contains(change.from, change.to) > -1) { signalCursorActivity(cm); } updateDoc(doc, change, spans, estimateHeight(cm)); if (!cm.options.lineWrapping) { doc.iter(checkWidthStart, from.line + change.text.length, function (line) { var len = lineLength(line); if (len > display.maxLineLength) { display.maxLine = line; display.maxLineLength = len; display.maxLineChanged = true; recomputeMaxLength = false; } }); if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; } } retreatFrontier(doc, from.line); startWorker(cm, 400); var lendiff = change.text.length - (to.line - from.line) - 1; // Remember that these lines changed, for updating the display if (change.full) { regChange(cm); } else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) { regLineChange(cm, from.line, "text"); } else { regChange(cm, from.line, to.line + 1, lendiff); } var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change"); if (changeHandler || changesHandler) { var obj = { from: from, to: to, text: change.text, removed: change.removed, origin: change.origin }; if (changeHandler) { signalLater(cm, "change", cm, obj); } if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); } } cm.display.selForContextMenu = null; } function replaceRange(doc, code, from, to, origin) { var assign; if (!to) { to = from; } if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); } if (typeof code == "string") { code = doc.splitLines(code); } makeChange(doc, {from: from, to: to, text: code, origin: origin}); } // Rebasing/resetting history to deal with externally-sourced changes function rebaseHistSelSingle(pos, from, to, diff) { if (to < pos.line) { pos.line += diff; } else if (from < pos.line) { pos.line = from; pos.ch = 0; } } // Tries to rebase an array of history events given a change in the // document. If the change touches the same lines as the event, the // event, and everything 'behind' it, is discarded. If the change is // before the event, the event's positions are updated. Uses a // copy-on-write scheme for the positions, to avoid having to // reallocate them all on every rebase, but also avoid problems with // shared position objects being unsafely updated. function rebaseHistArray(array, from, to, diff) { for (var i = 0; i < array.length; ++i) { var sub = array[i], ok = true; if (sub.ranges) { if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; } for (var j = 0; j < sub.ranges.length; j++) { rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); } continue } for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) { var cur = sub.changes[j$1]; if (to < cur.from.line) { cur.from = Pos(cur.from.line + diff, cur.from.ch); cur.to = Pos(cur.to.line + diff, cur.to.ch); } else if (from <= cur.to.line) { ok = false; break } } if (!ok) { array.splice(0, i + 1); i = 0; } } } function rebaseHist(hist, change) { var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1; rebaseHistArray(hist.done, from, to, diff); rebaseHistArray(hist.undone, from, to, diff); } // Utility for applying a change to a line by handle or number, // returning the number and optionally registering the line as // changed. function changeLine(doc, handle, changeType, op) { var no = handle, line = handle; if (typeof handle == "number") { line = getLine(doc, clipLine(doc, handle)); } else { no = lineNo(handle); } if (no == null) { return null } if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); } return line } // The document is represented as a BTree consisting of leaves, with // chunk of lines in them, and branches, with up to ten leaves or // other branch nodes below them. The top node is always a branch // node, and is the document object itself (meaning it has // additional methods and properties). // // All nodes have parent links. The tree is used both to go from // line numbers to line objects, and to go from objects to numbers. // It also indexes by height, and is used to convert between height // and line object, and to find the total height of the document. // // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html function LeafChunk(lines) { this.lines = lines; this.parent = null; var height = 0; for (var i = 0; i < lines.length; ++i) { lines[i].parent = this; height += lines[i].height; } this.height = height; } LeafChunk.prototype = { chunkSize: function() { return this.lines.length }, // Remove the n lines at offset 'at'. removeInner: function(at, n) { for (var i = at, e = at + n; i < e; ++i) { var line = this.lines[i]; this.height -= line.height; cleanUpLine(line); signalLater(line, "delete"); } this.lines.splice(at, n); }, // Helper used to collapse a small branch into a single leaf. collapse: function(lines) { lines.push.apply(lines, this.lines); }, // Insert the given array of lines at offset 'at', count them as // having the given height. insertInner: function(at, lines, height) { this.height += height; this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); for (var i = 0; i < lines.length; ++i) { lines[i].parent = this; } }, // Used to iterate over a part of the tree. iterN: function(at, n, op) { for (var e = at + n; at < e; ++at) { if (op(this.lines[at])) { return true } } } }; function BranchChunk(children) { this.children = children; var size = 0, height = 0; for (var i = 0; i < children.length; ++i) { var ch = children[i]; size += ch.chunkSize(); height += ch.height; ch.parent = this; } this.size = size; this.height = height; this.parent = null; } BranchChunk.prototype = { chunkSize: function() { return this.size }, removeInner: function(at, n) { this.size -= n; for (var i = 0; i < this.children.length; ++i) { var child = this.children[i], sz = child.chunkSize(); if (at < sz) { var rm = Math.min(n, sz - at), oldHeight = child.height; child.removeInner(at, rm); this.height -= oldHeight - child.height; if (sz == rm) { this.children.splice(i--, 1); child.parent = null; } if ((n -= rm) == 0) { break } at = 0; } else { at -= sz; } } // If the result is smaller than 25 lines, ensure that it is a // single leaf node. if (this.size - n < 25 && (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { var lines = []; this.collapse(lines); this.children = [new LeafChunk(lines)]; this.children[0].parent = this; } }, collapse: function(lines) { for (var i = 0; i < this.children.length; ++i) { this.children[i].collapse(lines); } }, insertInner: function(at, lines, height) { this.size += lines.length; this.height += height; for (var i = 0; i < this.children.length; ++i) { var child = this.children[i], sz = child.chunkSize(); if (at <= sz) { child.insertInner(at, lines, height); if (child.lines && child.lines.length > 50) { // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced. // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest. var remaining = child.lines.length % 25 + 25; for (var pos = remaining; pos < child.lines.length;) { var leaf = new LeafChunk(child.lines.slice(pos, pos += 25)); child.height -= leaf.height; this.children.splice(++i, 0, leaf); leaf.parent = this; } child.lines = child.lines.slice(0, remaining); this.maybeSpill(); } break } at -= sz; } }, // When a node has grown, check whether it should be split. maybeSpill: function() { if (this.children.length <= 10) { return } var me = this; do { var spilled = me.children.splice(me.children.length - 5, 5); var sibling = new BranchChunk(spilled); if (!me.parent) { // Become the parent node var copy = new BranchChunk(me.children); copy.parent = me; me.children = [copy, sibling]; me = copy; } else { me.size -= sibling.size; me.height -= sibling.height; var myIndex = indexOf(me.parent.children, me); me.parent.children.splice(myIndex + 1, 0, sibling); } sibling.parent = me.parent; } while (me.children.length > 10) me.parent.maybeSpill(); }, iterN: function(at, n, op) { for (var i = 0; i < this.children.length; ++i) { var child = this.children[i], sz = child.chunkSize(); if (at < sz) { var used = Math.min(n, sz - at); if (child.iterN(at, used, op)) { return true } if ((n -= used) == 0) { break } at = 0; } else { at -= sz; } } } }; // Line widgets are block elements displayed above or below a line. var LineWidget = function(doc, node, options) { if (options) { for (var opt in options) { if (options.hasOwnProperty(opt)) { this[opt] = options[opt]; } } } this.doc = doc; this.node = node; }; LineWidget.prototype.clear = function () { var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line); if (no == null || !ws) { return } for (var i = 0; i < ws.length; ++i) { if (ws[i] == this) { ws.splice(i--, 1); } } if (!ws.length) { line.widgets = null; } var height = widgetHeight(this); updateLineHeight(line, Math.max(0, line.height - height)); if (cm) { runInOp(cm, function () { adjustScrollWhenAboveVisible(cm, line, -height); regLineChange(cm, no, "widget"); }); signalLater(cm, "lineWidgetCleared", cm, this, no); } }; LineWidget.prototype.changed = function () { var this$1 = this; var oldH = this.height, cm = this.doc.cm, line = this.line; this.height = null; var diff = widgetHeight(this) - oldH; if (!diff) { return } if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); } if (cm) { runInOp(cm, function () { cm.curOp.forceUpdate = true; adjustScrollWhenAboveVisible(cm, line, diff); signalLater(cm, "lineWidgetChanged", cm, this$1, lineNo(line)); }); } }; eventMixin(LineWidget); function adjustScrollWhenAboveVisible(cm, line, diff) { if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop)) { addToScrollTop(cm, diff); } } function addLineWidget(doc, handle, node, options) { var widget = new LineWidget(doc, node, options); var cm = doc.cm; if (cm && widget.noHScroll) { cm.display.alignWidgets = true; } changeLine(doc, handle, "widget", function (line) { var widgets = line.widgets || (line.widgets = []); if (widget.insertAt == null) { widgets.push(widget); } else { widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget); } widget.line = line; if (cm && !lineIsHidden(doc, line)) { var aboveVisible = heightAtLine(line) < doc.scrollTop; updateLineHeight(line, line.height + widgetHeight(widget)); if (aboveVisible) { addToScrollTop(cm, widget.height); } cm.curOp.forceUpdate = true; } return true }); if (cm) { signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle)); } return widget } // TEXTMARKERS // Created with markText and setBookmark methods. A TextMarker is a // handle that can be used to clear or find a marked position in the // document. Line objects hold arrays (markedSpans) containing // {from, to, marker} object pointing to such marker objects, and // indicating that such a marker is present on that line. Multiple // lines may point to the same marker when it spans across lines. // The spans will have null for their from/to properties when the // marker continues beyond the start/end of the line. Markers have // links back to the lines they currently touch. // Collapsed markers have unique ids, in order to be able to order // them, which is needed for uniquely determining an outer marker // when they overlap (they may nest, but not partially overlap). var nextMarkerId = 0; var TextMarker = function(doc, type) { this.lines = []; this.type = type; this.doc = doc; this.id = ++nextMarkerId; }; // Clear the marker. TextMarker.prototype.clear = function () { if (this.explicitlyCleared) { return } var cm = this.doc.cm, withOp = cm && !cm.curOp; if (withOp) { startOperation(cm); } if (hasHandler(this, "clear")) { var found = this.find(); if (found) { signalLater(this, "clear", found.from, found.to); } } var min = null, max = null; for (var i = 0; i < this.lines.length; ++i) { var line = this.lines[i]; var span = getMarkedSpanFor(line.markedSpans, this); if (cm && !this.collapsed) { regLineChange(cm, lineNo(line), "text"); } else if (cm) { if (span.to != null) { max = lineNo(line); } if (span.from != null) { min = lineNo(line); } } line.markedSpans = removeMarkedSpan(line.markedSpans, span); if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) { updateLineHeight(line, textHeight(cm.display)); } } if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) { var visual = visualLine(this.lines[i$1]), len = lineLength(visual); if (len > cm.display.maxLineLength) { cm.display.maxLine = visual; cm.display.maxLineLength = len; cm.display.maxLineChanged = true; } } } if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); } this.lines.length = 0; this.explicitlyCleared = true; if (this.atomic && this.doc.cantEdit) { this.doc.cantEdit = false; if (cm) { reCheckSelection(cm.doc); } } if (cm) { signalLater(cm, "markerCleared", cm, this, min, max); } if (withOp) { endOperation(cm); } if (this.parent) { this.parent.clear(); } }; // Find the position of the marker in the document. Returns a {from, // to} object by default. Side can be passed to get a specific side // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the // Pos objects returned contain a line object, rather than a line // number (used to prevent looking up the same line twice). TextMarker.prototype.find = function (side, lineObj) { if (side == null && this.type == "bookmark") { side = 1; } var from, to; for (var i = 0; i < this.lines.length; ++i) { var line = this.lines[i]; var span = getMarkedSpanFor(line.markedSpans, this); if (span.from != null) { from = Pos(lineObj ? line : lineNo(line), span.from); if (side == -1) { return from } } if (span.to != null) { to = Pos(lineObj ? line : lineNo(line), span.to); if (side == 1) { return to } } } return from && {from: from, to: to} }; // Signals that the marker's widget changed, and surrounding layout // should be recomputed. TextMarker.prototype.changed = function () { var this$1 = this; var pos = this.find(-1, true), widget = this, cm = this.doc.cm; if (!pos || !cm) { return } runInOp(cm, function () { var line = pos.line, lineN = lineNo(pos.line); var view = findViewForLine(cm, lineN); if (view) { clearLineMeasurementCacheFor(view); cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; } cm.curOp.updateMaxLine = true; if (!lineIsHidden(widget.doc, line) && widget.height != null) { var oldHeight = widget.height; widget.height = null; var dHeight = widgetHeight(widget) - oldHeight; if (dHeight) { updateLineHeight(line, line.height + dHeight); } } signalLater(cm, "markerChanged", cm, this$1); }); }; TextMarker.prototype.attachLine = function (line) { if (!this.lines.length && this.doc.cm) { var op = this.doc.cm.curOp; if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); } } this.lines.push(line); }; TextMarker.prototype.detachLine = function (line) { this.lines.splice(indexOf(this.lines, line), 1); if (!this.lines.length && this.doc.cm) { var op = this.doc.cm.curOp ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); } }; eventMixin(TextMarker); // Create a marker, wire it up to the right lines, and function markText(doc, from, to, options, type) { // Shared markers (across linked documents) are handled separately // (markTextShared will call out to this again, once per // document). if (options && options.shared) { return markTextShared(doc, from, to, options, type) } // Ensure we are in an operation. if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) } var marker = new TextMarker(doc, type), diff = cmp(from, to); if (options) { copyObj(options, marker, false); } // Don't connect empty markers unless clearWhenEmpty is false if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) { return marker } if (marker.replacedWith) { // Showing up as a widget implies collapsed (widget replaces text) marker.collapsed = true; marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget"); if (!options.handleMouseEvents) { marker.widgetNode.setAttribute("cm-ignore-events", "true"); } if (options.insertLeft) { marker.widgetNode.insertLeft = true; } } if (marker.collapsed) { if (conflictingCollapsedRange(doc, from.line, from, to, marker) || from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) { throw new Error("Inserting collapsed marker partially overlapping an existing one") } seeCollapsedSpans(); } if (marker.addToHistory) { addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); } var curLine = from.line, cm = doc.cm, updateMaxLine; doc.iter(curLine, to.line + 1, function (line) { if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) { updateMaxLine = true; } if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); } addMarkedSpan(line, new MarkedSpan(marker, curLine == from.line ? from.ch : null, curLine == to.line ? to.ch : null), doc.cm && doc.cm.curOp); ++curLine; }); // lineIsHidden depends on the presence of the spans, so needs a second pass if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) { if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); } }); } if (marker.clearOnEnter) { on(marker, "beforeCursorEnter", function () { return marker.clear(); }); } if (marker.readOnly) { seeReadOnlySpans(); if (doc.history.done.length || doc.history.undone.length) { doc.clearHistory(); } } if (marker.collapsed) { marker.id = ++nextMarkerId; marker.atomic = true; } if (cm) { // Sync editor state if (updateMaxLine) { cm.curOp.updateMaxLine = true; } if (marker.collapsed) { regChange(cm, from.line, to.line + 1); } else if (marker.className || marker.startStyle || marker.endStyle || marker.css || marker.attributes || marker.title) { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, "text"); } } if (marker.atomic) { reCheckSelection(cm.doc); } signalLater(cm, "markerAdded", cm, marker); } return marker } // SHARED TEXTMARKERS // A shared marker spans multiple linked documents. It is // implemented as a meta-marker-object controlling multiple normal // markers. var SharedTextMarker = function(markers, primary) { this.markers = markers; this.primary = primary; for (var i = 0; i < markers.length; ++i) { markers[i].parent = this; } }; SharedTextMarker.prototype.clear = function () { if (this.explicitlyCleared) { return } this.explicitlyCleared = true; for (var i = 0; i < this.markers.length; ++i) { this.markers[i].clear(); } signalLater(this, "clear"); }; SharedTextMarker.prototype.find = function (side, lineObj) { return this.primary.find(side, lineObj) }; eventMixin(SharedTextMarker); function markTextShared(doc, from, to, options, type) { options = copyObj(options); options.shared = false; var markers = [markText(doc, from, to, options, type)], primary = markers[0]; var widget = options.widgetNode; linkedDocs(doc, function (doc) { if (widget) { options.widgetNode = widget.cloneNode(true); } markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)); for (var i = 0; i < doc.linked.length; ++i) { if (doc.linked[i].isParent) { return } } primary = lst(markers); }); return new SharedTextMarker(markers, primary) } function findSharedMarkers(doc) { return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; }) } function copySharedMarkers(doc, markers) { for (var i = 0; i < markers.length; i++) { var marker = markers[i], pos = marker.find(); var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to); if (cmp(mFrom, mTo)) { var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type); marker.markers.push(subMark); subMark.parent = marker; } } } function detachSharedMarkers(markers) { var loop = function ( i ) { var marker = markers[i], linked = [marker.primary.doc]; linkedDocs(marker.primary.doc, function (d) { return linked.push(d); }); for (var j = 0; j < marker.markers.length; j++) { var subMarker = marker.markers[j]; if (indexOf(linked, subMarker.doc) == -1) { subMarker.parent = null; marker.markers.splice(j--, 1); } } }; for (var i = 0; i < markers.length; i++) loop( i ); } var nextDocId = 0; var Doc = function(text, mode, firstLine, lineSep, direction) { if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) } if (firstLine == null) { firstLine = 0; } BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); this.first = firstLine; this.scrollTop = this.scrollLeft = 0; this.cantEdit = false; this.cleanGeneration = 1; this.modeFrontier = this.highlightFrontier = firstLine; var start = Pos(firstLine, 0); this.sel = simpleSelection(start); this.history = new History(null); this.id = ++nextDocId; this.modeOption = mode; this.lineSep = lineSep; this.direction = (direction == "rtl") ? "rtl" : "ltr"; this.extend = false; if (typeof text == "string") { text = this.splitLines(text); } updateDoc(this, {from: start, to: start, text: text}); setSelection(this, simpleSelection(start), sel_dontScroll); }; Doc.prototype = createObj(BranchChunk.prototype, { constructor: Doc, // Iterate over the document. Supports two forms -- with only one // argument, it calls that for each line in the document. With // three, it iterates over the range given by the first two (with // the second being non-inclusive). iter: function(from, to, op) { if (op) { this.iterN(from - this.first, to - from, op); } else { this.iterN(this.first, this.first + this.size, from); } }, // Non-public interface for adding and removing lines. insert: function(at, lines) { var height = 0; for (var i = 0; i < lines.length; ++i) { height += lines[i].height; } this.insertInner(at - this.first, lines, height); }, remove: function(at, n) { this.removeInner(at - this.first, n); }, // From here, the methods are part of the public interface. Most // are also available from CodeMirror (editor) instances. getValue: function(lineSep) { var lines = getLines(this, this.first, this.first + this.size); if (lineSep === false) { return lines } return lines.join(lineSep || this.lineSeparator()) }, setValue: docMethodOp(function(code) { var top = Pos(this.first, 0), last = this.first + this.size - 1; makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), text: this.splitLines(code), origin: "setValue", full: true}, true); if (this.cm) { scrollToCoords(this.cm, 0, 0); } setSelection(this, simpleSelection(top), sel_dontScroll); }), replaceRange: function(code, from, to, origin) { from = clipPos(this, from); to = to ? clipPos(this, to) : from; replaceRange(this, code, from, to, origin); }, getRange: function(from, to, lineSep) { var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); if (lineSep === false) { return lines } if (lineSep === '') { return lines.join('') } return lines.join(lineSep || this.lineSeparator()) }, getLine: function(line) {var l = this.getLineHandle(line); return l && l.text}, getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }}, getLineNumber: function(line) {return lineNo(line)}, getLineHandleVisualStart: function(line) { if (typeof line == "number") { line = getLine(this, line); } return visualLine(line) }, lineCount: function() {return this.size}, firstLine: function() {return this.first}, lastLine: function() {return this.first + this.size - 1}, clipPos: function(pos) {return clipPos(this, pos)}, getCursor: function(start) { var range = this.sel.primary(), pos; if (start == null || start == "head") { pos = range.head; } else if (start == "anchor") { pos = range.anchor; } else if (start == "end" || start == "to" || start === false) { pos = range.to(); } else { pos = range.from(); } return pos }, listSelections: function() { return this.sel.ranges }, somethingSelected: function() {return this.sel.somethingSelected()}, setCursor: docMethodOp(function(line, ch, options) { setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options); }), setSelection: docMethodOp(function(anchor, head, options) { setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options); }), extendSelection: docMethodOp(function(head, other, options) { extendSelection(this, clipPos(this, head), other && clipPos(this, other), options); }), extendSelections: docMethodOp(function(heads, options) { extendSelections(this, clipPosArray(this, heads), options); }), extendSelectionsBy: docMethodOp(function(f, options) { var heads = map(this.sel.ranges, f); extendSelections(this, clipPosArray(this, heads), options); }), setSelections: docMethodOp(function(ranges, primary, options) { if (!ranges.length) { return } var out = []; for (var i = 0; i < ranges.length; i++) { out[i] = new Range(clipPos(this, ranges[i].anchor), clipPos(this, ranges[i].head || ranges[i].anchor)); } if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); } setSelection(this, normalizeSelection(this.cm, out, primary), options); }), addSelection: docMethodOp(function(anchor, head, options) { var ranges = this.sel.ranges.slice(0); ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))); setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options); }), getSelection: function(lineSep) { var ranges = this.sel.ranges, lines; for (var i = 0; i < ranges.length; i++) { var sel = getBetween(this, ranges[i].from(), ranges[i].to()); lines = lines ? lines.concat(sel) : sel; } if (lineSep === false) { return lines } else { return lines.join(lineSep || this.lineSeparator()) } }, getSelections: function(lineSep) { var parts = [], ranges = this.sel.ranges; for (var i = 0; i < ranges.length; i++) { var sel = getBetween(this, ranges[i].from(), ranges[i].to()); if (lineSep !== false) { sel = sel.join(lineSep || this.lineSeparator()); } parts[i] = sel; } return parts }, replaceSelection: function(code, collapse, origin) { var dup = []; for (var i = 0; i < this.sel.ranges.length; i++) { dup[i] = code; } this.replaceSelections(dup, collapse, origin || "+input"); }, replaceSelections: docMethodOp(function(code, collapse, origin) { var changes = [], sel = this.sel; for (var i = 0; i < sel.ranges.length; i++) { var range = sel.ranges[i]; changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin}; } var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse); for (var i$1 = changes.length - 1; i$1 >= 0; i$1--) { makeChange(this, changes[i$1]); } if (newSel) { setSelectionReplaceHistory(this, newSel); } else if (this.cm) { ensureCursorVisible(this.cm); } }), undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}), redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}), undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}), redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}), setExtending: function(val) {this.extend = val;}, getExtending: function() {return this.extend}, historySize: function() { var hist = this.history, done = 0, undone = 0; for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } } for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } } return {undo: done, redo: undone} }, clearHistory: function() { var this$1 = this; this.history = new History(this.history); linkedDocs(this, function (doc) { return doc.history = this$1.history; }, true); }, markClean: function() { this.cleanGeneration = this.changeGeneration(true); }, changeGeneration: function(forceSplit) { if (forceSplit) { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; } return this.history.generation }, isClean: function (gen) { return this.history.generation == (gen || this.cleanGeneration) }, getHistory: function() { return {done: copyHistoryArray(this.history.done), undone: copyHistoryArray(this.history.undone)} }, setHistory: function(histData) { var hist = this.history = new History(this.history); hist.done = copyHistoryArray(histData.done.slice(0), null, true); hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); }, setGutterMarker: docMethodOp(function(line, gutterID, value) { return changeLine(this, line, "gutter", function (line) { var markers = line.gutterMarkers || (line.gutterMarkers = {}); markers[gutterID] = value; if (!value && isEmpty(markers)) { line.gutterMarkers = null; } return true }) }), clearGutter: docMethodOp(function(gutterID) { var this$1 = this; this.iter(function (line) { if (line.gutterMarkers && line.gutterMarkers[gutterID]) { changeLine(this$1, line, "gutter", function () { line.gutterMarkers[gutterID] = null; if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; } return true }); } }); }), lineInfo: function(line) { var n; if (typeof line == "number") { if (!isLine(this, line)) { return null } n = line; line = getLine(this, line); if (!line) { return null } } else { n = lineNo(line); if (n == null) { return null } } return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, widgets: line.widgets} }, addLineClass: docMethodOp(function(handle, where, cls) { return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : where == "gutter" ? "gutterClass" : "wrapClass"; if (!line[prop]) { line[prop] = cls; } else if (classTest(cls).test(line[prop])) { return false } else { line[prop] += " " + cls; } return true }) }), removeLineClass: docMethodOp(function(handle, where, cls) { return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : where == "gutter" ? "gutterClass" : "wrapClass"; var cur = line[prop]; if (!cur) { return false } else if (cls == null) { line[prop] = null; } else { var found = cur.match(classTest(cls)); if (!found) { return false } var end = found.index + found[0].length; line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; } return true }) }), addLineWidget: docMethodOp(function(handle, node, options) { return addLineWidget(this, handle, node, options) }), removeLineWidget: function(widget) { widget.clear(); }, markText: function(from, to, options) { return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range") }, setBookmark: function(pos, options) { var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), insertLeft: options && options.insertLeft, clearWhenEmpty: false, shared: options && options.shared, handleMouseEvents: options && options.handleMouseEvents}; pos = clipPos(this, pos); return markText(this, pos, pos, realOpts, "bookmark") }, findMarksAt: function(pos) { pos = clipPos(this, pos); var markers = [], spans = getLine(this, pos.line).markedSpans; if (spans) { for (var i = 0; i < spans.length; ++i) { var span = spans[i]; if ((span.from == null || span.from <= pos.ch) && (span.to == null || span.to >= pos.ch)) { markers.push(span.marker.parent || span.marker); } } } return markers }, findMarks: function(from, to, filter) { from = clipPos(this, from); to = clipPos(this, to); var found = [], lineNo = from.line; this.iter(from.line, to.line + 1, function (line) { var spans = line.markedSpans; if (spans) { for (var i = 0; i < spans.length; i++) { var span = spans[i]; if (!(span.to != null && lineNo == from.line && from.ch >= span.to || span.from == null && lineNo != from.line || span.from != null && lineNo == to.line && span.from >= to.ch) && (!filter || filter(span.marker))) { found.push(span.marker.parent || span.marker); } } } ++lineNo; }); return found }, getAllMarks: function() { var markers = []; this.iter(function (line) { var sps = line.markedSpans; if (sps) { for (var i = 0; i < sps.length; ++i) { if (sps[i].from != null) { markers.push(sps[i].marker); } } } }); return markers }, posFromIndex: function(off) { var ch, lineNo = this.first, sepSize = this.lineSeparator().length; this.iter(function (line) { var sz = line.text.length + sepSize; if (sz > off) { ch = off; return true } off -= sz; ++lineNo; }); return clipPos(this, Pos(lineNo, ch)) }, indexFromPos: function (coords) { coords = clipPos(this, coords); var index = coords.ch; if (coords.line < this.first || coords.ch < 0) { return 0 } var sepSize = this.lineSeparator().length; this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value index += line.text.length + sepSize; }); return index }, copy: function(copyHistory) { var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first, this.lineSep, this.direction); doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft; doc.sel = this.sel; doc.extend = false; if (copyHistory) { doc.history.undoDepth = this.history.undoDepth; doc.setHistory(this.getHistory()); } return doc }, linkedDoc: function(options) { if (!options) { options = {}; } var from = this.first, to = this.first + this.size; if (options.from != null && options.from > from) { from = options.from; } if (options.to != null && options.to < to) { to = options.to; } var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction); if (options.sharedHist) { copy.history = this.history ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}); copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]; copySharedMarkers(copy, findSharedMarkers(this)); return copy }, unlinkDoc: function(other) { if (other instanceof CodeMirror) { other = other.doc; } if (this.linked) { for (var i = 0; i < this.linked.length; ++i) { var link = this.linked[i]; if (link.doc != other) { continue } this.linked.splice(i, 1); other.unlinkDoc(this); detachSharedMarkers(findSharedMarkers(this)); break } } // If the histories were shared, split them again if (other.history == this.history) { var splitIds = [other.id]; linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true); other.history = new History(null); other.history.done = copyHistoryArray(this.history.done, splitIds); other.history.undone = copyHistoryArray(this.history.undone, splitIds); } }, iterLinkedDocs: function(f) {linkedDocs(this, f);}, getMode: function() {return this.mode}, getEditor: function() {return this.cm}, splitLines: function(str) { if (this.lineSep) { return str.split(this.lineSep) } return splitLinesAuto(str) }, lineSeparator: function() { return this.lineSep || "\n" }, setDirection: docMethodOp(function (dir) { if (dir != "rtl") { dir = "ltr"; } if (dir == this.direction) { return } this.direction = dir; this.iter(function (line) { return line.order = null; }); if (this.cm) { directionChanged(this.cm); } }) }); // Public alias. Doc.prototype.eachLine = Doc.prototype.iter; // Kludge to work around strange IE behavior where it'll sometimes // re-fire a series of drag-related events right after the drop (#1551) var lastDrop = 0; function onDrop(e) { var cm = this; clearDragCursor(cm); if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return } e_preventDefault(e); if (ie) { lastDrop = +new Date; } var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files; if (!pos || cm.isReadOnly()) { return } // Might be a file drop, in which case we simply extract the text // and insert it. if (files && files.length && window.FileReader && window.File) { var n = files.length, text = Array(n), read = 0; var markAsReadAndPasteIfAllFilesAreRead = function () { if (++read == n) { operation(cm, function () { pos = clipPos(cm.doc, pos); var change = {from: pos, to: pos, text: cm.doc.splitLines( text.filter(function (t) { return t != null; }).join(cm.doc.lineSeparator())), origin: "paste"}; makeChange(cm.doc, change); setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change)))); })(); } }; var readTextFromFile = function (file, i) { if (cm.options.allowDropFileTypes && indexOf(cm.options.allowDropFileTypes, file.type) == -1) { markAsReadAndPasteIfAllFilesAreRead(); return } var reader = new FileReader; reader.onerror = function () { return markAsReadAndPasteIfAllFilesAreRead(); }; reader.onload = function () { var content = reader.result; if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) { markAsReadAndPasteIfAllFilesAreRead(); return } text[i] = content; markAsReadAndPasteIfAllFilesAreRead(); }; reader.readAsText(file); }; for (var i = 0; i < files.length; i++) { readTextFromFile(files[i], i); } } else { // Normal drop // Don't do a replace if the drop happened inside of the selected text. if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { cm.state.draggingText(e); // Ensure the editor is re-focused setTimeout(function () { return cm.display.input.focus(); }, 20); return } try { var text$1 = e.dataTransfer.getData("Text"); if (text$1) { var selected; if (cm.state.draggingText && !cm.state.draggingText.copy) { selected = cm.listSelections(); } setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1) { replaceRange(cm.doc, "", selected[i$1].anchor, selected[i$1].head, "drag"); } } cm.replaceSelection(text$1, "around", "paste"); cm.display.input.focus(); } } catch(e$1){} } } function onDragStart(cm, e) { if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return } if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return } e.dataTransfer.setData("Text", cm.getSelection()); e.dataTransfer.effectAllowed = "copyMove"; // Use dummy image instead of default browsers image. // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. if (e.dataTransfer.setDragImage && !safari) { var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; if (presto) { img.width = img.height = 1; cm.display.wrapper.appendChild(img); // Force a relayout, or Opera won't use our image for some obscure reason img._top = img.offsetTop; } e.dataTransfer.setDragImage(img, 0, 0); if (presto) { img.parentNode.removeChild(img); } } } function onDragOver(cm, e) { var pos = posFromMouse(cm, e); if (!pos) { return } var frag = document.createDocumentFragment(); drawSelectionCursor(cm, pos, frag); if (!cm.display.dragCursor) { cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors"); cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv); } removeChildrenAndAdd(cm.display.dragCursor, frag); } function clearDragCursor(cm) { if (cm.display.dragCursor) { cm.display.lineSpace.removeChild(cm.display.dragCursor); cm.display.dragCursor = null; } } // These must be handled carefully, because naively registering a // handler for each editor will cause the editors to never be // garbage collected. function forEachCodeMirror(f) { if (!document.getElementsByClassName) { return } var byClass = document.getElementsByClassName("CodeMirror"), editors = []; for (var i = 0; i < byClass.length; i++) { var cm = byClass[i].CodeMirror; if (cm) { editors.push(cm); } } if (editors.length) { editors[0].operation(function () { for (var i = 0; i < editors.length; i++) { f(editors[i]); } }); } } var globalsRegistered = false; function ensureGlobalHandlers() { if (globalsRegistered) { return } registerGlobalHandlers(); globalsRegistered = true; } function registerGlobalHandlers() { // When the window resizes, we need to refresh active editors. var resizeTimer; on(window, "resize", function () { if (resizeTimer == null) { resizeTimer = setTimeout(function () { resizeTimer = null; forEachCodeMirror(onResize); }, 100); } }); // When the window loses focus, we want to show the editor as blurred on(window, "blur", function () { return forEachCodeMirror(onBlur); }); } // Called when the window resizes function onResize(cm) { var d = cm.display; // Might be a text scaling operation, clear size caches. d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; d.scrollbarsClipped = false; cm.setSize(); } var keyNames = { 3: "Pause", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", 106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 145: "ScrollLock", 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", 221: "]", 222: "'", 224: "Mod", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert" }; // Number keys for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); } // Alphabetic keys for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); } // Function keys for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2; } var keyMap = {}; keyMap.basic = { "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore", "Tab": "defaultTab", "Shift-Tab": "indentAuto", "Enter": "newlineAndIndent", "Insert": "toggleOverwrite", "Esc": "singleSelection" }; // Note that the save and find-related commands aren't defined by // default. User code or addons can define them. Unknown commands // are simply ignored. keyMap.pcDefault = { "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown", "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", "fallthrough": "basic" }; // Very basic readline/emacs-style bindings, which are standard on Mac. keyMap.emacsy = { "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars", "Ctrl-O": "openLine" }; keyMap.macDefault = { "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore", "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight", "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd", "fallthrough": ["basic", "emacsy"] }; keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; // KEYMAP DISPATCH function normalizeKeyName(name) { var parts = name.split(/-(?!$)/); name = parts[parts.length - 1]; var alt, ctrl, shift, cmd; for (var i = 0; i < parts.length - 1; i++) { var mod = parts[i]; if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; } else if (/^a(lt)?$/i.test(mod)) { alt = true; } else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; } else if (/^s(hift)?$/i.test(mod)) { shift = true; } else { throw new Error("Unrecognized modifier name: " + mod) } } if (alt) { name = "Alt-" + name; } if (ctrl) { name = "Ctrl-" + name; } if (cmd) { name = "Cmd-" + name; } if (shift) { name = "Shift-" + name; } return name } // This is a kludge to keep keymaps mostly working as raw objects // (backwards compatibility) while at the same time support features // like normalization and multi-stroke key bindings. It compiles a // new normalized keymap, and then updates the old object to reflect // this. function normalizeKeyMap(keymap) { var copy = {}; for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) { var value = keymap[keyname]; if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue } if (value == "...") { delete keymap[keyname]; continue } var keys = map(keyname.split(" "), normalizeKeyName); for (var i = 0; i < keys.length; i++) { var val = (void 0), name = (void 0); if (i == keys.length - 1) { name = keys.join(" "); val = value; } else { name = keys.slice(0, i + 1).join(" "); val = "..."; } var prev = copy[name]; if (!prev) { copy[name] = val; } else if (prev != val) { throw new Error("Inconsistent bindings for " + name) } } delete keymap[keyname]; } } for (var prop in copy) { keymap[prop] = copy[prop]; } return keymap } function lookupKey(key, map, handle, context) { map = getKeyMap(map); var found = map.call ? map.call(key, context) : map[key]; if (found === false) { return "nothing" } if (found === "...") { return "multi" } if (found != null && handle(found)) { return "handled" } if (map.fallthrough) { if (Object.prototype.toString.call(map.fallthrough) != "[object Array]") { return lookupKey(key, map.fallthrough, handle, context) } for (var i = 0; i < map.fallthrough.length; i++) { var result = lookupKey(key, map.fallthrough[i], handle, context); if (result) { return result } } } } // Modifier key presses don't count as 'real' key presses for the // purpose of keymap fallthrough. function isModifierKey(value) { var name = typeof value == "string" ? value : keyNames[value.keyCode]; return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod" } function addModifierNames(name, event, noShift) { var base = name; if (event.altKey && base != "Alt") { name = "Alt-" + name; } if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { name = "Ctrl-" + name; } if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Mod") { name = "Cmd-" + name; } if (!noShift && event.shiftKey && base != "Shift") { name = "Shift-" + name; } return name } // Look up the name of a key as indicated by an event object. function keyName(event, noShift) { if (presto && event.keyCode == 34 && event["char"]) { return false } var name = keyNames[event.keyCode]; if (name == null || event.altGraphKey) { return false } // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause, // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+) if (event.keyCode == 3 && event.code) { name = event.code; } return addModifierNames(name, event, noShift) } function getKeyMap(val) { return typeof val == "string" ? keyMap[val] : val } // Helper for deleting text near the selection(s), used to implement // backspace, delete, and similar functionality. function deleteNearSelection(cm, compute) { var ranges = cm.doc.sel.ranges, kill = []; // Build up a set of ranges to kill first, merging overlapping // ranges. for (var i = 0; i < ranges.length; i++) { var toKill = compute(ranges[i]); while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { var replaced = kill.pop(); if (cmp(replaced.from, toKill.from) < 0) { toKill.from = replaced.from; break } } kill.push(toKill); } // Next, remove those actual ranges. runInOp(cm, function () { for (var i = kill.length - 1; i >= 0; i--) { replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); } ensureCursorVisible(cm); }); } function moveCharLogically(line, ch, dir) { var target = skipExtendingChars(line.text, ch + dir, dir); return target < 0 || target > line.text.length ? null : target } function moveLogically(line, start, dir) { var ch = moveCharLogically(line, start.ch, dir); return ch == null ? null : new Pos(start.line, ch, dir < 0 ? "after" : "before") } function endOfLine(visually, cm, lineObj, lineNo, dir) { if (visually) { if (cm.doc.direction == "rtl") { dir = -dir; } var order = getOrder(lineObj, cm.doc.direction); if (order) { var part = dir < 0 ? lst(order) : order[0]; var moveInStorageOrder = (dir < 0) == (part.level == 1); var sticky = moveInStorageOrder ? "after" : "before"; var ch; // With a wrapped rtl chunk (possibly spanning multiple bidi parts), // it could be that the last bidi part is not on the last visual line, // since visual lines contain content order-consecutive chunks. // Thus, in rtl, we are looking for the first (content-order) character // in the rtl chunk that is on the last line (that is, the same line // as the last (content-order) character). if (part.level > 0 || cm.doc.direction == "rtl") { var prep = prepareMeasureForLine(cm, lineObj); ch = dir < 0 ? lineObj.text.length - 1 : 0; var targetTop = measureCharPrepared(cm, prep, ch).top; ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch); if (sticky == "before") { ch = moveCharLogically(lineObj, ch, 1); } } else { ch = dir < 0 ? part.to : part.from; } return new Pos(lineNo, ch, sticky) } } return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? "before" : "after") } function moveVisually(cm, line, start, dir) { var bidi = getOrder(line, cm.doc.direction); if (!bidi) { return moveLogically(line, start, dir) } if (start.ch >= line.text.length) { start.ch = line.text.length; start.sticky = "before"; } else if (start.ch <= 0) { start.ch = 0; start.sticky = "after"; } var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos]; if (cm.doc.direction == "ltr" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) { // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines, // nothing interesting happens. return moveLogically(line, start, dir) } var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); }; var prep; var getWrappedLineExtent = function (ch) { if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} } prep = prep || prepareMeasureForLine(cm, line); return wrappedLineExtentChar(cm, line, prep, ch) }; var wrappedLineExtent = getWrappedLineExtent(start.sticky == "before" ? mv(start, -1) : start.ch); if (cm.doc.direction == "rtl" || part.level == 1) { var moveInStorageOrder = (part.level == 1) == (dir < 0); var ch = mv(start, moveInStorageOrder ? 1 : -1); if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) { // Case 2: We move within an rtl part or in an rtl editor on the same visual line var sticky = moveInStorageOrder ? "before" : "after"; return new Pos(start.line, ch, sticky) } } // Case 3: Could not move within this bidi part in this visual line, so leave // the current bidi part var searchInVisualLine = function (partPos, dir, wrappedLineExtent) { var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder ? new Pos(start.line, mv(ch, 1), "before") : new Pos(start.line, ch, "after"); }; for (; partPos >= 0 && partPos < bidi.length; partPos += dir) { var part = bidi[partPos]; var moveInStorageOrder = (dir > 0) == (part.level != 1); var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1); if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) } ch = moveInStorageOrder ? part.from : mv(part.to, -1); if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) } } }; // Case 3a: Look for other bidi parts on the same visual line var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent); if (res) { return res } // Case 3b: Look for other bidi parts on the next visual line var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1); if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) { res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh)); if (res) { return res } } // Case 4: Nowhere to move return null } // Commands are parameter-less actions that can be performed on an // editor, mostly used for keybindings. var commands = { selectAll: selectAll, singleSelection: function (cm) { return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); }, killLine: function (cm) { return deleteNearSelection(cm, function (range) { if (range.empty()) { var len = getLine(cm.doc, range.head.line).text.length; if (range.head.ch == len && range.head.line < cm.lastLine()) { return {from: range.head, to: Pos(range.head.line + 1, 0)} } else { return {from: range.head, to: Pos(range.head.line, len)} } } else { return {from: range.from(), to: range.to()} } }); }, deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({ from: Pos(range.from().line, 0), to: clipPos(cm.doc, Pos(range.to().line + 1, 0)) }); }); }, delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({ from: Pos(range.from().line, 0), to: range.from() }); }); }, delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { var top = cm.charCoords(range.head, "div").top + 5; var leftPos = cm.coordsChar({left: 0, top: top}, "div"); return {from: leftPos, to: range.from()} }); }, delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) { var top = cm.charCoords(range.head, "div").top + 5; var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); return {from: range.from(), to: rightPos } }); }, undo: function (cm) { return cm.undo(); }, redo: function (cm) { return cm.redo(); }, undoSelection: function (cm) { return cm.undoSelection(); }, redoSelection: function (cm) { return cm.redoSelection(); }, goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); }, goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); }, goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); }, {origin: "+move", bias: 1} ); }, goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); }, {origin: "+move", bias: 1} ); }, goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); }, {origin: "+move", bias: -1} ); }, goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) { var top = cm.cursorCoords(range.head, "div").top + 5; return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div") }, sel_move); }, goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) { var top = cm.cursorCoords(range.head, "div").top + 5; return cm.coordsChar({left: 0, top: top}, "div") }, sel_move); }, goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) { var top = cm.cursorCoords(range.head, "div").top + 5; var pos = cm.coordsChar({left: 0, top: top}, "div"); if (pos.ch < cm.getLine(pos.line).search(/\S/)) { return lineStartSmart(cm, range.head) } return pos }, sel_move); }, goLineUp: function (cm) { return cm.moveV(-1, "line"); }, goLineDown: function (cm) { return cm.moveV(1, "line"); }, goPageUp: function (cm) { return cm.moveV(-1, "page"); }, goPageDown: function (cm) { return cm.moveV(1, "page"); }, goCharLeft: function (cm) { return cm.moveH(-1, "char"); }, goCharRight: function (cm) { return cm.moveH(1, "char"); }, goColumnLeft: function (cm) { return cm.moveH(-1, "column"); }, goColumnRight: function (cm) { return cm.moveH(1, "column"); }, goWordLeft: function (cm) { return cm.moveH(-1, "word"); }, goGroupRight: function (cm) { return cm.moveH(1, "group"); }, goGroupLeft: function (cm) { return cm.moveH(-1, "group"); }, goWordRight: function (cm) { return cm.moveH(1, "word"); }, delCharBefore: function (cm) { return cm.deleteH(-1, "codepoint"); }, delCharAfter: function (cm) { return cm.deleteH(1, "char"); }, delWordBefore: function (cm) { return cm.deleteH(-1, "word"); }, delWordAfter: function (cm) { return cm.deleteH(1, "word"); }, delGroupBefore: function (cm) { return cm.deleteH(-1, "group"); }, delGroupAfter: function (cm) { return cm.deleteH(1, "group"); }, indentAuto: function (cm) { return cm.indentSelection("smart"); }, indentMore: function (cm) { return cm.indentSelection("add"); }, indentLess: function (cm) { return cm.indentSelection("subtract"); }, insertTab: function (cm) { return cm.replaceSelection("\t"); }, insertSoftTab: function (cm) { var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize; for (var i = 0; i < ranges.length; i++) { var pos = ranges[i].from(); var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize); spaces.push(spaceStr(tabSize - col % tabSize)); } cm.replaceSelections(spaces); }, defaultTab: function (cm) { if (cm.somethingSelected()) { cm.indentSelection("add"); } else { cm.execCommand("insertTab"); } }, // Swap the two chars left and right of each selection's head. // Move cursor behind the two swapped characters afterwards. // // Doesn't consider line feeds a character. // Doesn't scan more than one line above to find a character. // Doesn't do anything on an empty line. // Doesn't do anything with non-empty selections. transposeChars: function (cm) { return runInOp(cm, function () { var ranges = cm.listSelections(), newSel = []; for (var i = 0; i < ranges.length; i++) { if (!ranges[i].empty()) { continue } var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text; if (line) { if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); } if (cur.ch > 0) { cur = new Pos(cur.line, cur.ch + 1); cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), Pos(cur.line, cur.ch - 2), cur, "+transpose"); } else if (cur.line > cm.doc.first) { var prev = getLine(cm.doc, cur.line - 1).text; if (prev) { cur = new Pos(cur.line, 1); cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + prev.charAt(prev.length - 1), Pos(cur.line - 1, prev.length - 1), cur, "+transpose"); } } } newSel.push(new Range(cur, cur)); } cm.setSelections(newSel); }); }, newlineAndIndent: function (cm) { return runInOp(cm, function () { var sels = cm.listSelections(); for (var i = sels.length - 1; i >= 0; i--) { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, "+input"); } sels = cm.listSelections(); for (var i$1 = 0; i$1 < sels.length; i$1++) { cm.indentLine(sels[i$1].from().line, null, true); } ensureCursorVisible(cm); }); }, openLine: function (cm) { return cm.replaceSelection("\n", "start"); }, toggleOverwrite: function (cm) { return cm.toggleOverwrite(); } }; function lineStart(cm, lineN) { var line = getLine(cm.doc, lineN); var visual = visualLine(line); if (visual != line) { lineN = lineNo(visual); } return endOfLine(true, cm, visual, lineN, 1) } function lineEnd(cm, lineN) { var line = getLine(cm.doc, lineN); var visual = visualLineEnd(line); if (visual != line) { lineN = lineNo(visual); } return endOfLine(true, cm, line, lineN, -1) } function lineStartSmart(cm, pos) { var start = lineStart(cm, pos.line); var line = getLine(cm.doc, start.line); var order = getOrder(line, cm.doc.direction); if (!order || order[0].level == 0) { var firstNonWS = Math.max(start.ch, line.text.search(/\S/)); var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch; return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky) } return start } // Run a handler that was bound to a key. function doHandleBinding(cm, bound, dropShift) { if (typeof bound == "string") { bound = commands[bound]; if (!bound) { return false } } // Ensure previous input has been read, so that the handler sees a // consistent view of the document cm.display.input.ensurePolled(); var prevShift = cm.display.shift, done = false; try { if (cm.isReadOnly()) { cm.state.suppressEdits = true; } if (dropShift) { cm.display.shift = false; } done = bound(cm) != Pass; } finally { cm.display.shift = prevShift; cm.state.suppressEdits = false; } return done } function lookupKeyForEditor(cm, name, handle) { for (var i = 0; i < cm.state.keyMaps.length; i++) { var result = lookupKey(name, cm.state.keyMaps[i], handle, cm); if (result) { return result } } return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm)) || lookupKey(name, cm.options.keyMap, handle, cm) } // Note that, despite the name, this function is also used to check // for bound mouse clicks. var stopSeq = new Delayed; function dispatchKey(cm, name, e, handle) { var seq = cm.state.keySeq; if (seq) { if (isModifierKey(name)) { return "handled" } if (/\'$/.test(name)) { cm.state.keySeq = null; } else { stopSeq.set(50, function () { if (cm.state.keySeq == seq) { cm.state.keySeq = null; cm.display.input.reset(); } }); } if (dispatchKeyInner(cm, seq + " " + name, e, handle)) { return true } } return dispatchKeyInner(cm, name, e, handle) } function dispatchKeyInner(cm, name, e, handle) { var result = lookupKeyForEditor(cm, name, handle); if (result == "multi") { cm.state.keySeq = name; } if (result == "handled") { signalLater(cm, "keyHandled", cm, name, e); } if (result == "handled" || result == "multi") { e_preventDefault(e); restartBlink(cm); } return !!result } // Handle a key from the keydown event. function handleKeyBinding(cm, e) { var name = keyName(e, true); if (!name) { return false } if (e.shiftKey && !cm.state.keySeq) { // First try to resolve full name (including 'Shift-'). Failing // that, see if there is a cursor-motion command (starting with // 'go') bound to the keyname without 'Shift-'. return dispatchKey(cm, "Shift-" + name, e, function (b) { return doHandleBinding(cm, b, true); }) || dispatchKey(cm, name, e, function (b) { if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) { return doHandleBinding(cm, b) } }) } else { return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); }) } } // Handle a key from the keypress event function handleCharBinding(cm, e, ch) { return dispatchKey(cm, "'" + ch + "'", e, function (b) { return doHandleBinding(cm, b, true); }) } var lastStoppedKey = null; function onKeyDown(e) { var cm = this; if (e.target && e.target != cm.display.input.getField()) { return } cm.curOp.focus = activeElt(); if (signalDOMEvent(cm, e)) { return } // IE does strange things with escape. if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; } var code = e.keyCode; cm.display.shift = code == 16 || e.shiftKey; var handled = handleKeyBinding(cm, e); if (presto) { lastStoppedKey = handled ? code : null; // Opera has no cut event... we try to at least catch the key combo if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) { cm.replaceSelection("", null, "cut"); } } if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand) { document.execCommand("cut"); } // Turn mouse into crosshair when Alt is held on Mac. if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) { showCrossHair(cm); } } function showCrossHair(cm) { var lineDiv = cm.display.lineDiv; addClass(lineDiv, "CodeMirror-crosshair"); function up(e) { if (e.keyCode == 18 || !e.altKey) { rmClass(lineDiv, "CodeMirror-crosshair"); off(document, "keyup", up); off(document, "mouseover", up); } } on(document, "keyup", up); on(document, "mouseover", up); } function onKeyUp(e) { if (e.keyCode == 16) { this.doc.sel.shift = false; } signalDOMEvent(this, e); } function onKeyPress(e) { var cm = this; if (e.target && e.target != cm.display.input.getField()) { return } if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return } var keyCode = e.keyCode, charCode = e.charCode; if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return} if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return } var ch = String.fromCharCode(charCode == null ? keyCode : charCode); // Some browsers fire keypress events for backspace if (ch == "\x08") { return } if (handleCharBinding(cm, e, ch)) { return } cm.display.input.onKeyPress(e); } var DOUBLECLICK_DELAY = 400; var PastClick = function(time, pos, button) { this.time = time; this.pos = pos; this.button = button; }; PastClick.prototype.compare = function (time, pos, button) { return this.time + DOUBLECLICK_DELAY > time && cmp(pos, this.pos) == 0 && button == this.button }; var lastClick, lastDoubleClick; function clickRepeat(pos, button) { var now = +new Date; if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) { lastClick = lastDoubleClick = null; return "triple" } else if (lastClick && lastClick.compare(now, pos, button)) { lastDoubleClick = new PastClick(now, pos, button); lastClick = null; return "double" } else { lastClick = new PastClick(now, pos, button); lastDoubleClick = null; return "single" } } // A mouse down can be a single click, double click, triple click, // start of selection drag, start of text drag, new cursor // (ctrl-click), rectangle drag (alt-drag), or xwin // middle-click-paste. Or it might be a click on something we should // not interfere with, such as a scrollbar or widget. function onMouseDown(e) { var cm = this, display = cm.display; if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return } display.input.ensurePolled(); display.shift = e.shiftKey; if (eventInWidget(display, e)) { if (!webkit) { // Briefly turn off draggability, to allow widgets to do // normal dragging things. display.scroller.draggable = false; setTimeout(function () { return display.scroller.draggable = true; }, 100); } return } if (clickInGutter(cm, e)) { return } var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : "single"; window.focus(); // #3261: make sure, that we're not starting a second selection if (button == 1 && cm.state.selectingText) { cm.state.selectingText(e); } if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return } if (button == 1) { if (pos) { leftButtonDown(cm, pos, repeat, e); } else if (e_target(e) == display.scroller) { e_preventDefault(e); } } else if (button == 2) { if (pos) { extendSelection(cm.doc, pos); } setTimeout(function () { return display.input.focus(); }, 20); } else if (button == 3) { if (captureRightClick) { cm.display.input.onContextMenu(e); } else { delayBlurEvent(cm); } } } function handleMappedButton(cm, button, pos, repeat, event) { var name = "Click"; if (repeat == "double") { name = "Double" + name; } else if (repeat == "triple") { name = "Triple" + name; } name = (button == 1 ? "Left" : button == 2 ? "Middle" : "Right") + name; return dispatchKey(cm, addModifierNames(name, event), event, function (bound) { if (typeof bound == "string") { bound = commands[bound]; } if (!bound) { return false } var done = false; try { if (cm.isReadOnly()) { cm.state.suppressEdits = true; } done = bound(cm, pos) != Pass; } finally { cm.state.suppressEdits = false; } return done }) } function configureMouse(cm, repeat, event) { var option = cm.getOption("configureMouse"); var value = option ? option(cm, repeat, event) : {}; if (value.unit == null) { var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey; value.unit = rect ? "rectangle" : repeat == "single" ? "char" : repeat == "double" ? "word" : "line"; } if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; } if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; } if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); } return value } function leftButtonDown(cm, pos, repeat, event) { if (ie) { setTimeout(bind(ensureFocus, cm), 0); } else { cm.curOp.focus = activeElt(); } var behavior = configureMouse(cm, repeat, event); var sel = cm.doc.sel, contained; if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && repeat == "single" && (contained = sel.contains(pos)) > -1 && (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) && (cmp(contained.to(), pos) > 0 || pos.xRel < 0)) { leftButtonStartDrag(cm, event, pos, behavior); } else { leftButtonSelect(cm, event, pos, behavior); } } // Start a text drag. When it ends, see if any dragging actually // happen, and treat as a click if it didn't. function leftButtonStartDrag(cm, event, pos, behavior) { var display = cm.display, moved = false; var dragEnd = operation(cm, function (e) { if (webkit) { display.scroller.draggable = false; } cm.state.draggingText = false; if (cm.state.delayingBlurEvent) { if (cm.hasFocus()) { cm.state.delayingBlurEvent = false; } else { delayBlurEvent(cm); } } off(display.wrapper.ownerDocument, "mouseup", dragEnd); off(display.wrapper.ownerDocument, "mousemove", mouseMove); off(display.scroller, "dragstart", dragStart); off(display.scroller, "drop", dragEnd); if (!moved) { e_preventDefault(e); if (!behavior.addNew) { extendSelection(cm.doc, pos, null, null, behavior.extend); } // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081) if ((webkit && !safari) || ie && ie_version == 9) { setTimeout(function () {display.wrapper.ownerDocument.body.focus({preventScroll: true}); display.input.focus();}, 20); } else { display.input.focus(); } } }); var mouseMove = function(e2) { moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10; }; var dragStart = function () { return moved = true; }; // Let the drag handler handle this. if (webkit) { display.scroller.draggable = true; } cm.state.draggingText = dragEnd; dragEnd.copy = !behavior.moveOnDrag; on(display.wrapper.ownerDocument, "mouseup", dragEnd); on(display.wrapper.ownerDocument, "mousemove", mouseMove); on(display.scroller, "dragstart", dragStart); on(display.scroller, "drop", dragEnd); cm.state.delayingBlurEvent = true; setTimeout(function () { return display.input.focus(); }, 20); // IE's approach to draggable if (display.scroller.dragDrop) { display.scroller.dragDrop(); } } function rangeForUnit(cm, pos, unit) { if (unit == "char") { return new Range(pos, pos) } if (unit == "word") { return cm.findWordAt(pos) } if (unit == "line") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) } var result = unit(cm, pos); return new Range(result.from, result.to) } // Normal selection, as opposed to text dragging. function leftButtonSelect(cm, event, start, behavior) { if (ie) { delayBlurEvent(cm); } var display = cm.display, doc = cm.doc; e_preventDefault(event); var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges; if (behavior.addNew && !behavior.extend) { ourIndex = doc.sel.contains(start); if (ourIndex > -1) { ourRange = ranges[ourIndex]; } else { ourRange = new Range(start, start); } } else { ourRange = doc.sel.primary(); ourIndex = doc.sel.primIndex; } if (behavior.unit == "rectangle") { if (!behavior.addNew) { ourRange = new Range(start, start); } start = posFromMouse(cm, event, true, true); ourIndex = -1; } else { var range = rangeForUnit(cm, start, behavior.unit); if (behavior.extend) { ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend); } else { ourRange = range; } } if (!behavior.addNew) { ourIndex = 0; setSelection(doc, new Selection([ourRange], 0), sel_mouse); startSel = doc.sel; } else if (ourIndex == -1) { ourIndex = ranges.length; setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex), {scroll: false, origin: "*mouse"}); } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == "char" && !behavior.extend) { setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), {scroll: false, origin: "*mouse"}); startSel = doc.sel; } else { replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); } var lastPos = start; function extendTo(pos) { if (cmp(lastPos, pos) == 0) { return } lastPos = pos; if (behavior.unit == "rectangle") { var ranges = [], tabSize = cm.options.tabSize; var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize); var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol); for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); line <= end; line++) { var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize); if (left == right) { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); } else if (text.length > leftPos) { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); } } if (!ranges.length) { ranges.push(new Range(start, start)); } setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), {origin: "*mouse", scroll: false}); cm.scrollIntoView(pos); } else { var oldRange = ourRange; var range = rangeForUnit(cm, pos, behavior.unit); var anchor = oldRange.anchor, head; if (cmp(range.anchor, anchor) > 0) { head = range.head; anchor = minPos(oldRange.from(), range.anchor); } else { head = range.anchor; anchor = maxPos(oldRange.to(), range.head); } var ranges$1 = startSel.ranges.slice(0); ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head)); setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse); } } var editorSize = display.wrapper.getBoundingClientRect(); // Used to ensure timeout re-tries don't fire when another extend // happened in the meantime (clearTimeout isn't reliable -- at // least on Chrome, the timeouts still happen even when cleared, // if the clear happens after their scheduled firing time). var counter = 0; function extend(e) { var curCount = ++counter; var cur = posFromMouse(cm, e, true, behavior.unit == "rectangle"); if (!cur) { return } if (cmp(cur, lastPos) != 0) { cm.curOp.focus = activeElt(); extendTo(cur); var visible = visibleLines(display, doc); if (cur.line >= visible.to || cur.line < visible.from) { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); } } else { var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; if (outside) { setTimeout(operation(cm, function () { if (counter != curCount) { return } display.scroller.scrollTop += outside; extend(e); }), 50); } } } function done(e) { cm.state.selectingText = false; counter = Infinity; // If e is null or undefined we interpret this as someone trying // to explicitly cancel the selection rather than the user // letting go of the mouse button. if (e) { e_preventDefault(e); display.input.focus(); } off(display.wrapper.ownerDocument, "mousemove", move); off(display.wrapper.ownerDocument, "mouseup", up); doc.history.lastSelOrigin = null; } var move = operation(cm, function (e) { if (e.buttons === 0 || !e_button(e)) { done(e); } else { extend(e); } }); var up = operation(cm, done); cm.state.selectingText = up; on(display.wrapper.ownerDocument, "mousemove", move); on(display.wrapper.ownerDocument, "mouseup", up); } // Used when mouse-selecting to adjust the anchor to the proper side // of a bidi jump depending on the visual position of the head. function bidiSimplify(cm, range) { var anchor = range.anchor; var head = range.head; var anchorLine = getLine(cm.doc, anchor.line); if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range } var order = getOrder(anchorLine); if (!order) { return range } var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index]; if (part.from != anchor.ch && part.to != anchor.ch) { return range } var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1); if (boundary == 0 || boundary == order.length) { return range } // Compute the relative visual position of the head compared to the // anchor (<0 is to the left, >0 to the right) var leftSide; if (head.line != anchor.line) { leftSide = (head.line - anchor.line) * (cm.doc.direction == "ltr" ? 1 : -1) > 0; } else { var headIndex = getBidiPartAt(order, head.ch, head.sticky); var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1); if (headIndex == boundary - 1 || headIndex == boundary) { leftSide = dir < 0; } else { leftSide = dir > 0; } } var usePart = order[boundary + (leftSide ? -1 : 0)]; var from = leftSide == (usePart.level == 1); var ch = from ? usePart.from : usePart.to, sticky = from ? "after" : "before"; return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head) } // Determines whether an event happened in the gutter, and fires the // handlers for the corresponding event. function gutterEvent(cm, e, type, prevent) { var mX, mY; if (e.touches) { mX = e.touches[0].clientX; mY = e.touches[0].clientY; } else { try { mX = e.clientX; mY = e.clientY; } catch(e$1) { return false } } if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false } if (prevent) { e_preventDefault(e); } var display = cm.display; var lineBox = display.lineDiv.getBoundingClientRect(); if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) } mY -= lineBox.top - display.viewOffset; for (var i = 0; i < cm.display.gutterSpecs.length; ++i) { var g = display.gutters.childNodes[i]; if (g && g.getBoundingClientRect().right >= mX) { var line = lineAtHeight(cm.doc, mY); var gutter = cm.display.gutterSpecs[i]; signal(cm, type, cm, line, gutter.className, e); return e_defaultPrevented(e) } } } function clickInGutter(cm, e) { return gutterEvent(cm, e, "gutterClick", true) } // CONTEXT MENU HANDLING // To make the context menu work, we need to briefly unhide the // textarea (making it as unobtrusive as possible) to let the // right-click take effect on it. function onContextMenu(cm, e) { if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return } if (signalDOMEvent(cm, e, "contextmenu")) { return } if (!captureRightClick) { cm.display.input.onContextMenu(e); } } function contextMenuInGutter(cm, e) { if (!hasHandler(cm, "gutterContextMenu")) { return false } return gutterEvent(cm, e, "gutterContextMenu", false) } function themeChanged(cm) { cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); clearCaches(cm); } var Init = {toString: function(){return "CodeMirror.Init"}}; var defaults = {}; var optionHandlers = {}; function defineOptions(CodeMirror) { var optionHandlers = CodeMirror.optionHandlers; function option(name, deflt, handle, notOnInit) { CodeMirror.defaults[name] = deflt; if (handle) { optionHandlers[name] = notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; } } CodeMirror.defineOption = option; // Passed to option handlers when there is no old value. CodeMirror.Init = Init; // These two are, on init, called from the constructor because they // have to be initialized before the editor can start at all. option("value", "", function (cm, val) { return cm.setValue(val); }, true); option("mode", null, function (cm, val) { cm.doc.modeOption = val; loadMode(cm); }, true); option("indentUnit", 2, loadMode, true); option("indentWithTabs", false); option("smartIndent", true); option("tabSize", 4, function (cm) { resetModeState(cm); clearCaches(cm); regChange(cm); }, true); option("lineSeparator", null, function (cm, val) { cm.doc.lineSep = val; if (!val) { return } var newBreaks = [], lineNo = cm.doc.first; cm.doc.iter(function (line) { for (var pos = 0;;) { var found = line.text.indexOf(val, pos); if (found == -1) { break } pos = found + val.length; newBreaks.push(Pos(lineNo, found)); } lineNo++; }); for (var i = newBreaks.length - 1; i >= 0; i--) { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); } }); option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g, function (cm, val, old) { cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g"); if (old != Init) { cm.refresh(); } }); option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true); option("electricChars", true); option("inputStyle", mobile ? "contenteditable" : "textarea", function () { throw new Error("inputStyle can not (yet) be changed in a running editor") // FIXME }, true); option("spellcheck", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true); option("autocorrect", false, function (cm, val) { return cm.getInputField().autocorrect = val; }, true); option("autocapitalize", false, function (cm, val) { return cm.getInputField().autocapitalize = val; }, true); option("rtlMoveVisually", !windows); option("wholeLineUpdateBefore", true); option("theme", "default", function (cm) { themeChanged(cm); updateGutters(cm); }, true); option("keyMap", "default", function (cm, val, old) { var next = getKeyMap(val); var prev = old != Init && getKeyMap(old); if (prev && prev.detach) { prev.detach(cm, next); } if (next.attach) { next.attach(cm, prev || null); } }); option("extraKeys", null); option("configureMouse", null); option("lineWrapping", false, wrappingChanged, true); option("gutters", [], function (cm, val) { cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers); updateGutters(cm); }, true); option("fixedGutter", true, function (cm, val) { cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; cm.refresh(); }, true); option("coverGutterNextToScrollbar", false, function (cm) { return updateScrollbars(cm); }, true); option("scrollbarStyle", "native", function (cm) { initScrollbars(cm); updateScrollbars(cm); cm.display.scrollbars.setScrollTop(cm.doc.scrollTop); cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft); }, true); option("lineNumbers", false, function (cm, val) { cm.display.gutterSpecs = getGutters(cm.options.gutters, val); updateGutters(cm); }, true); option("firstLineNumber", 1, updateGutters, true); option("lineNumberFormatter", function (integer) { return integer; }, updateGutters, true); option("showCursorWhenSelecting", false, updateSelection, true); option("resetSelectionOnContextMenu", true); option("lineWiseCopyCut", true); option("pasteLinesPerSelection", true); option("selectionsMayTouch", false); option("readOnly", false, function (cm, val) { if (val == "nocursor") { onBlur(cm); cm.display.input.blur(); } cm.display.input.readOnlyChanged(val); }); option("screenReaderLabel", null, function (cm, val) { val = (val === '') ? null : val; cm.display.input.screenReaderLabelChanged(val); }); option("disableInput", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true); option("dragDrop", true, dragDropChanged); option("allowDropFileTypes", null); option("cursorBlinkRate", 530); option("cursorScrollMargin", 0); option("cursorHeight", 1, updateSelection, true); option("singleCursorHeightPerLine", true, updateSelection, true); option("workTime", 100); option("workDelay", 100); option("flattenSpans", true, resetModeState, true); option("addModeClass", false, resetModeState, true); option("pollInterval", 100); option("undoDepth", 200, function (cm, val) { return cm.doc.history.undoDepth = val; }); option("historyEventDelay", 1250); option("viewportMargin", 10, function (cm) { return cm.refresh(); }, true); option("maxHighlightLength", 10000, resetModeState, true); option("moveInputWithCursor", true, function (cm, val) { if (!val) { cm.display.input.resetPosition(); } }); option("tabindex", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || ""; }); option("autofocus", null); option("direction", "ltr", function (cm, val) { return cm.doc.setDirection(val); }, true); option("phrases", null); } function dragDropChanged(cm, value, old) { var wasOn = old && old != Init; if (!value != !wasOn) { var funcs = cm.display.dragFunctions; var toggle = value ? on : off; toggle(cm.display.scroller, "dragstart", funcs.start); toggle(cm.display.scroller, "dragenter", funcs.enter); toggle(cm.display.scroller, "dragover", funcs.over); toggle(cm.display.scroller, "dragleave", funcs.leave); toggle(cm.display.scroller, "drop", funcs.drop); } } function wrappingChanged(cm) { if (cm.options.lineWrapping) { addClass(cm.display.wrapper, "CodeMirror-wrap"); cm.display.sizer.style.minWidth = ""; cm.display.sizerWidth = null; } else { rmClass(cm.display.wrapper, "CodeMirror-wrap"); findMaxLine(cm); } estimateLineHeights(cm); regChange(cm); clearCaches(cm); setTimeout(function () { return updateScrollbars(cm); }, 100); } // A CodeMirror instance represents an editor. This is the object // that user code is usually dealing with. function CodeMirror(place, options) { var this$1 = this; if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) } this.options = options = options ? copyObj(options) : {}; // Determine effective options based on given values and defaults. copyObj(defaults, options, false); var doc = options.value; if (typeof doc == "string") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); } else if (options.mode) { doc.modeOption = options.mode; } this.doc = doc; var input = new CodeMirror.inputStyles[options.inputStyle](this); var display = this.display = new Display(place, doc, input, options); display.wrapper.CodeMirror = this; themeChanged(this); if (options.lineWrapping) { this.display.wrapper.className += " CodeMirror-wrap"; } initScrollbars(this); this.state = { keyMaps: [], // stores maps added by addKeyMap overlays: [], // highlighting overlays, as added by addOverlay modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info overwrite: false, delayingBlurEvent: false, focused: false, suppressEdits: false, // used to disable editing during key handlers when in readOnly mode pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll selectingText: false, draggingText: false, highlight: new Delayed(), // stores highlight worker timeout keySeq: null, // Unfinished key sequence specialChars: null }; if (options.autofocus && !mobile) { display.input.focus(); } // Override magic textarea content restore that IE sometimes does // on our hidden textarea on reload if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); } registerEventHandlers(this); ensureGlobalHandlers(); startOperation(this); this.curOp.forceUpdate = true; attachDoc(this, doc); if ((options.autofocus && !mobile) || this.hasFocus()) { setTimeout(function () { if (this$1.hasFocus() && !this$1.state.focused) { onFocus(this$1); } }, 20); } else { onBlur(this); } for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt)) { optionHandlers[opt](this, options[opt], Init); } } maybeUpdateLineNumberWidth(this); if (options.finishInit) { options.finishInit(this); } for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this); } endOperation(this); // Suppress optimizelegibility in Webkit, since it breaks text // measuring on line wrapping boundaries. if (webkit && options.lineWrapping && getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") { display.lineDiv.style.textRendering = "auto"; } } // The default configuration options. CodeMirror.defaults = defaults; // Functions to run when options are changed. CodeMirror.optionHandlers = optionHandlers; // Attach the necessary event handlers when initializing the editor function registerEventHandlers(cm) { var d = cm.display; on(d.scroller, "mousedown", operation(cm, onMouseDown)); // Older IE's will not fire a second mousedown for a double click if (ie && ie_version < 11) { on(d.scroller, "dblclick", operation(cm, function (e) { if (signalDOMEvent(cm, e)) { return } var pos = posFromMouse(cm, e); if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return } e_preventDefault(e); var word = cm.findWordAt(pos); extendSelection(cm.doc, word.anchor, word.head); })); } else { on(d.scroller, "dblclick", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); } // Some browsers fire contextmenu *after* opening the menu, at // which point we can't mess with it anymore. Context menu is // handled in onMouseDown for these browsers. on(d.scroller, "contextmenu", function (e) { return onContextMenu(cm, e); }); on(d.input.getField(), "contextmenu", function (e) { if (!d.scroller.contains(e.target)) { onContextMenu(cm, e); } }); // Used to suppress mouse event handling when a touch happens var touchFinished, prevTouch = {end: 0}; function finishTouch() { if (d.activeTouch) { touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000); prevTouch = d.activeTouch; prevTouch.end = +new Date; } } function isMouseLikeTouchEvent(e) { if (e.touches.length != 1) { return false } var touch = e.touches[0]; return touch.radiusX <= 1 && touch.radiusY <= 1 } function farAway(touch, other) { if (other.left == null) { return true } var dx = other.left - touch.left, dy = other.top - touch.top; return dx * dx + dy * dy > 20 * 20 } on(d.scroller, "touchstart", function (e) { if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) { d.input.ensurePolled(); clearTimeout(touchFinished); var now = +new Date; d.activeTouch = {start: now, moved: false, prev: now - prevTouch.end <= 300 ? prevTouch : null}; if (e.touches.length == 1) { d.activeTouch.left = e.touches[0].pageX; d.activeTouch.top = e.touches[0].pageY; } } }); on(d.scroller, "touchmove", function () { if (d.activeTouch) { d.activeTouch.moved = true; } }); on(d.scroller, "touchend", function (e) { var touch = d.activeTouch; if (touch && !eventInWidget(d, e) && touch.left != null && !touch.moved && new Date - touch.start < 300) { var pos = cm.coordsChar(d.activeTouch, "page"), range; if (!touch.prev || farAway(touch, touch.prev)) // Single tap { range = new Range(pos, pos); } else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap { range = cm.findWordAt(pos); } else // Triple tap { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); } cm.setSelection(range.anchor, range.head); cm.focus(); e_preventDefault(e); } finishTouch(); }); on(d.scroller, "touchcancel", finishTouch); // Sync scrolling between fake scrollbars and real scrollable // area, ensure viewport is updated when scrolling. on(d.scroller, "scroll", function () { if (d.scroller.clientHeight) { updateScrollTop(cm, d.scroller.scrollTop); setScrollLeft(cm, d.scroller.scrollLeft, true); signal(cm, "scroll", cm); } }); // Listen to wheel events in order to try and update the viewport on time. on(d.scroller, "mousewheel", function (e) { return onScrollWheel(cm, e); }); on(d.scroller, "DOMMouseScroll", function (e) { return onScrollWheel(cm, e); }); // Prevent wrapper from ever scrolling on(d.wrapper, "scroll", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }); d.dragFunctions = { enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }}, over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }}, start: function (e) { return onDragStart(cm, e); }, drop: operation(cm, onDrop), leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }} }; var inp = d.input.getField(); on(inp, "keyup", function (e) { return onKeyUp.call(cm, e); }); on(inp, "keydown", operation(cm, onKeyDown)); on(inp, "keypress", operation(cm, onKeyPress)); on(inp, "focus", function (e) { return onFocus(cm, e); }); on(inp, "blur", function (e) { return onBlur(cm, e); }); } var initHooks = []; CodeMirror.defineInitHook = function (f) { return initHooks.push(f); }; // Indent the given line. The how parameter can be "smart", // "add"/null, "subtract", or "prev". When aggressive is false // (typically set to true for forced single-line indents), empty // lines are not indented, and places where the mode returns Pass // are left alone. function indentLine(cm, n, how, aggressive) { var doc = cm.doc, state; if (how == null) { how = "add"; } if (how == "smart") { // Fall back to "prev" when the mode doesn't have an indentation // method. if (!doc.mode.indent) { how = "prev"; } else { state = getContextBefore(cm, n).state; } } var tabSize = cm.options.tabSize; var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize); if (line.stateAfter) { line.stateAfter = null; } var curSpaceString = line.text.match(/^\s*/)[0], indentation; if (!aggressive && !/\S/.test(line.text)) { indentation = 0; how = "not"; } else if (how == "smart") { indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); if (indentation == Pass || indentation > 150) { if (!aggressive) { return } how = "prev"; } } if (how == "prev") { if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); } else { indentation = 0; } } else if (how == "add") { indentation = curSpace + cm.options.indentUnit; } else if (how == "subtract") { indentation = curSpace - cm.options.indentUnit; } else if (typeof how == "number") { indentation = curSpace + how; } indentation = Math.max(0, indentation); var indentString = "", pos = 0; if (cm.options.indentWithTabs) { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} } if (pos < indentation) { indentString += spaceStr(indentation - pos); } if (indentString != curSpaceString) { replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); line.stateAfter = null; return true } else { // Ensure that, if the cursor was in the whitespace at the start // of the line, it is moved to the end of that space. for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) { var range = doc.sel.ranges[i$1]; if (range.head.line == n && range.head.ch < curSpaceString.length) { var pos$1 = Pos(n, curSpaceString.length); replaceOneSelection(doc, i$1, new Range(pos$1, pos$1)); break } } } } // This will be set to a {lineWise: bool, text: [string]} object, so // that, when pasting, we know what kind of selections the copied // text was made out of. var lastCopied = null; function setLastCopied(newLastCopied) { lastCopied = newLastCopied; } function applyTextInput(cm, inserted, deleted, sel, origin) { var doc = cm.doc; cm.display.shift = false; if (!sel) { sel = doc.sel; } var recent = +new Date - 200; var paste = origin == "paste" || cm.state.pasteIncoming > recent; var textLines = splitLinesAuto(inserted), multiPaste = null; // When pasting N lines into N selections, insert one line per selection if (paste && sel.ranges.length > 1) { if (lastCopied && lastCopied.text.join("\n") == inserted) { if (sel.ranges.length % lastCopied.text.length == 0) { multiPaste = []; for (var i = 0; i < lastCopied.text.length; i++) { multiPaste.push(doc.splitLines(lastCopied.text[i])); } } } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) { multiPaste = map(textLines, function (l) { return [l]; }); } } var updateInput = cm.curOp.updateInput; // Normal behavior is to insert the new text into every selection for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) { var range = sel.ranges[i$1]; var from = range.from(), to = range.to(); if (range.empty()) { if (deleted && deleted > 0) // Handle deletion { from = Pos(from.line, from.ch - deleted); } else if (cm.state.overwrite && !paste) // Handle overwrite { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); } else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == textLines.join("\n")) { from = to = Pos(from.line, 0); } } var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines, origin: origin || (paste ? "paste" : cm.state.cutIncoming > recent ? "cut" : "+input")}; makeChange(cm.doc, changeEvent); signalLater(cm, "inputRead", cm, changeEvent); } if (inserted && !paste) { triggerElectric(cm, inserted); } ensureCursorVisible(cm); if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; } cm.curOp.typing = true; cm.state.pasteIncoming = cm.state.cutIncoming = -1; } function handlePaste(e, cm) { var pasted = e.clipboardData && e.clipboardData.getData("Text"); if (pasted) { e.preventDefault(); if (!cm.isReadOnly() && !cm.options.disableInput) { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, "paste"); }); } return true } } function triggerElectric(cm, inserted) { // When an 'electric' character is inserted, immediately trigger a reindent if (!cm.options.electricChars || !cm.options.smartIndent) { return } var sel = cm.doc.sel; for (var i = sel.ranges.length - 1; i >= 0; i--) { var range = sel.ranges[i]; if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) { continue } var mode = cm.getModeAt(range.head); var indented = false; if (mode.electricChars) { for (var j = 0; j < mode.electricChars.length; j++) { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { indented = indentLine(cm, range.head.line, "smart"); break } } } else if (mode.electricInput) { if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch))) { indented = indentLine(cm, range.head.line, "smart"); } } if (indented) { signalLater(cm, "electricInput", cm, range.head.line); } } } function copyableRanges(cm) { var text = [], ranges = []; for (var i = 0; i < cm.doc.sel.ranges.length; i++) { var line = cm.doc.sel.ranges[i].head.line; var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)}; ranges.push(lineRange); text.push(cm.getRange(lineRange.anchor, lineRange.head)); } return {text: text, ranges: ranges} } function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) { field.setAttribute("autocorrect", autocorrect ? "" : "off"); field.setAttribute("autocapitalize", autocapitalize ? "" : "off"); field.setAttribute("spellcheck", !!spellcheck); } function hiddenTextarea() { var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; min-height: 1em; outline: none"); var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); // The textarea is kept positioned near the cursor to prevent the // fact that it'll be scrolled into view on input from scrolling // our fake cursor out of view. On webkit, when wrap=off, paste is // very slow. So make the area wide instead. if (webkit) { te.style.width = "1000px"; } else { te.setAttribute("wrap", "off"); } // If border: 0; -- iOS fails to open keyboard (issue #1287) if (ios) { te.style.border = "1px solid black"; } disableBrowserMagic(te); return div } // The publicly visible API. Note that methodOp(f) means // 'wrap f in an operation, performed on its `this` parameter'. // This is not the complete set of editor methods. Most of the // methods defined on the Doc type are also injected into // CodeMirror.prototype, for backwards compatibility and // convenience. function addEditorMethods(CodeMirror) { var optionHandlers = CodeMirror.optionHandlers; var helpers = CodeMirror.helpers = {}; CodeMirror.prototype = { constructor: CodeMirror, focus: function(){window.focus(); this.display.input.focus();}, setOption: function(option, value) { var options = this.options, old = options[option]; if (options[option] == value && option != "mode") { return } options[option] = value; if (optionHandlers.hasOwnProperty(option)) { operation(this, optionHandlers[option])(this, value, old); } signal(this, "optionChange", this, option); }, getOption: function(option) {return this.options[option]}, getDoc: function() {return this.doc}, addKeyMap: function(map, bottom) { this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map)); }, removeKeyMap: function(map) { var maps = this.state.keyMaps; for (var i = 0; i < maps.length; ++i) { if (maps[i] == map || maps[i].name == map) { maps.splice(i, 1); return true } } }, addOverlay: methodOp(function(spec, options) { var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec); if (mode.startState) { throw new Error("Overlays may not be stateful.") } insertSorted(this.state.overlays, {mode: mode, modeSpec: spec, opaque: options && options.opaque, priority: (options && options.priority) || 0}, function (overlay) { return overlay.priority; }); this.state.modeGen++; regChange(this); }), removeOverlay: methodOp(function(spec) { var overlays = this.state.overlays; for (var i = 0; i < overlays.length; ++i) { var cur = overlays[i].modeSpec; if (cur == spec || typeof spec == "string" && cur.name == spec) { overlays.splice(i, 1); this.state.modeGen++; regChange(this); return } } }), indentLine: methodOp(function(n, dir, aggressive) { if (typeof dir != "string" && typeof dir != "number") { if (dir == null) { dir = this.options.smartIndent ? "smart" : "prev"; } else { dir = dir ? "add" : "subtract"; } } if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); } }), indentSelection: methodOp(function(how) { var ranges = this.doc.sel.ranges, end = -1; for (var i = 0; i < ranges.length; i++) { var range = ranges[i]; if (!range.empty()) { var from = range.from(), to = range.to(); var start = Math.max(end, from.line); end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; for (var j = start; j < end; ++j) { indentLine(this, j, how); } var newRanges = this.doc.sel.ranges; if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) { replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); } } else if (range.head.line > end) { indentLine(this, range.head.line, how, true); end = range.head.line; if (i == this.doc.sel.primIndex) { ensureCursorVisible(this); } } } }), // Fetch the parser token for a given character. Useful for hacks // that want to inspect the mode state (say, for completion). getTokenAt: function(pos, precise) { return takeToken(this, pos, precise) }, getLineTokens: function(line, precise) { return takeToken(this, Pos(line), precise, true) }, getTokenTypeAt: function(pos) { pos = clipPos(this.doc, pos); var styles = getLineStyles(this, getLine(this.doc, pos.line)); var before = 0, after = (styles.length - 1) / 2, ch = pos.ch; var type; if (ch == 0) { type = styles[2]; } else { for (;;) { var mid = (before + after) >> 1; if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; } else if (styles[mid * 2 + 1] < ch) { before = mid + 1; } else { type = styles[mid * 2 + 2]; break } } } var cut = type ? type.indexOf("overlay ") : -1; return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1) }, getModeAt: function(pos) { var mode = this.doc.mode; if (!mode.innerMode) { return mode } return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode }, getHelper: function(pos, type) { return this.getHelpers(pos, type)[0] }, getHelpers: function(pos, type) { var found = []; if (!helpers.hasOwnProperty(type)) { return found } var help = helpers[type], mode = this.getModeAt(pos); if (typeof mode[type] == "string") { if (help[mode[type]]) { found.push(help[mode[type]]); } } else if (mode[type]) { for (var i = 0; i < mode[type].length; i++) { var val = help[mode[type][i]]; if (val) { found.push(val); } } } else if (mode.helperType && help[mode.helperType]) { found.push(help[mode.helperType]); } else if (help[mode.name]) { found.push(help[mode.name]); } for (var i$1 = 0; i$1 < help._global.length; i$1++) { var cur = help._global[i$1]; if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) { found.push(cur.val); } } return found }, getStateAfter: function(line, precise) { var doc = this.doc; line = clipLine(doc, line == null ? doc.first + doc.size - 1: line); return getContextBefore(this, line + 1, precise).state }, cursorCoords: function(start, mode) { var pos, range = this.doc.sel.primary(); if (start == null) { pos = range.head; } else if (typeof start == "object") { pos = clipPos(this.doc, start); } else { pos = start ? range.from() : range.to(); } return cursorCoords(this, pos, mode || "page") }, charCoords: function(pos, mode) { return charCoords(this, clipPos(this.doc, pos), mode || "page") }, coordsChar: function(coords, mode) { coords = fromCoordSystem(this, coords, mode || "page"); return coordsChar(this, coords.left, coords.top) }, lineAtHeight: function(height, mode) { height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top; return lineAtHeight(this.doc, height + this.display.viewOffset) }, heightAtLine: function(line, mode, includeWidgets) { var end = false, lineObj; if (typeof line == "number") { var last = this.doc.first + this.doc.size - 1; if (line < this.doc.first) { line = this.doc.first; } else if (line > last) { line = last; end = true; } lineObj = getLine(this.doc, line); } else { lineObj = line; } return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page", includeWidgets || end).top + (end ? this.doc.height - heightAtLine(lineObj) : 0) }, defaultTextHeight: function() { return textHeight(this.display) }, defaultCharWidth: function() { return charWidth(this.display) }, getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}}, addWidget: function(pos, node, scroll, vert, horiz) { var display = this.display; pos = cursorCoords(this, clipPos(this.doc, pos)); var top = pos.bottom, left = pos.left; node.style.position = "absolute"; node.setAttribute("cm-ignore-events", "true"); this.display.input.setUneditable(node); display.sizer.appendChild(node); if (vert == "over") { top = pos.top; } else if (vert == "above" || vert == "near") { var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); // Default to positioning above (if specified and possible); otherwise default to positioning below if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) { top = pos.top - node.offsetHeight; } else if (pos.bottom + node.offsetHeight <= vspace) { top = pos.bottom; } if (left + node.offsetWidth > hspace) { left = hspace - node.offsetWidth; } } node.style.top = top + "px"; node.style.left = node.style.right = ""; if (horiz == "right") { left = display.sizer.clientWidth - node.offsetWidth; node.style.right = "0px"; } else { if (horiz == "left") { left = 0; } else if (horiz == "middle") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; } node.style.left = left + "px"; } if (scroll) { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); } }, triggerOnKeyDown: methodOp(onKeyDown), triggerOnKeyPress: methodOp(onKeyPress), triggerOnKeyUp: onKeyUp, triggerOnMouseDown: methodOp(onMouseDown), execCommand: function(cmd) { if (commands.hasOwnProperty(cmd)) { return commands[cmd].call(null, this) } }, triggerElectric: methodOp(function(text) { triggerElectric(this, text); }), findPosH: function(from, amount, unit, visually) { var dir = 1; if (amount < 0) { dir = -1; amount = -amount; } var cur = clipPos(this.doc, from); for (var i = 0; i < amount; ++i) { cur = findPosH(this.doc, cur, dir, unit, visually); if (cur.hitSide) { break } } return cur }, moveH: methodOp(function(dir, unit) { var this$1 = this; this.extendSelectionsBy(function (range) { if (this$1.display.shift || this$1.doc.extend || range.empty()) { return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually) } else { return dir < 0 ? range.from() : range.to() } }, sel_move); }), deleteH: methodOp(function(dir, unit) { var sel = this.doc.sel, doc = this.doc; if (sel.somethingSelected()) { doc.replaceSelection("", null, "+delete"); } else { deleteNearSelection(this, function (range) { var other = findPosH(doc, range.head, dir, unit, false); return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other} }); } }), findPosV: function(from, amount, unit, goalColumn) { var dir = 1, x = goalColumn; if (amount < 0) { dir = -1; amount = -amount; } var cur = clipPos(this.doc, from); for (var i = 0; i < amount; ++i) { var coords = cursorCoords(this, cur, "div"); if (x == null) { x = coords.left; } else { coords.left = x; } cur = findPosV(this, coords, dir, unit); if (cur.hitSide) { break } } return cur }, moveV: methodOp(function(dir, unit) { var this$1 = this; var doc = this.doc, goals = []; var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected(); doc.extendSelectionsBy(function (range) { if (collapse) { return dir < 0 ? range.from() : range.to() } var headPos = cursorCoords(this$1, range.head, "div"); if (range.goalColumn != null) { headPos.left = range.goalColumn; } goals.push(headPos.left); var pos = findPosV(this$1, headPos, dir, unit); if (unit == "page" && range == doc.sel.primary()) { addToScrollTop(this$1, charCoords(this$1, pos, "div").top - headPos.top); } return pos }, sel_move); if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++) { doc.sel.ranges[i].goalColumn = goals[i]; } } }), // Find the word at the given position (as returned by coordsChar). findWordAt: function(pos) { var doc = this.doc, line = getLine(doc, pos.line).text; var start = pos.ch, end = pos.ch; if (line) { var helper = this.getHelper(pos, "wordChars"); if ((pos.sticky == "before" || end == line.length) && start) { --start; } else { ++end; } var startChar = line.charAt(start); var check = isWordChar(startChar, helper) ? function (ch) { return isWordChar(ch, helper); } : /\s/.test(startChar) ? function (ch) { return /\s/.test(ch); } : function (ch) { return (!/\s/.test(ch) && !isWordChar(ch)); }; while (start > 0 && check(line.charAt(start - 1))) { --start; } while (end < line.length && check(line.charAt(end))) { ++end; } } return new Range(Pos(pos.line, start), Pos(pos.line, end)) }, toggleOverwrite: function(value) { if (value != null && value == this.state.overwrite) { return } if (this.state.overwrite = !this.state.overwrite) { addClass(this.display.cursorDiv, "CodeMirror-overwrite"); } else { rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); } signal(this, "overwriteToggle", this, this.state.overwrite); }, hasFocus: function() { return this.display.input.getField() == activeElt() }, isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) }, scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }), getScrollInfo: function() { var scroller = this.display.scroller; return {left: scroller.scrollLeft, top: scroller.scrollTop, height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, clientHeight: displayHeight(this), clientWidth: displayWidth(this)} }, scrollIntoView: methodOp(function(range, margin) { if (range == null) { range = {from: this.doc.sel.primary().head, to: null}; if (margin == null) { margin = this.options.cursorScrollMargin; } } else if (typeof range == "number") { range = {from: Pos(range, 0), to: null}; } else if (range.from == null) { range = {from: range, to: null}; } if (!range.to) { range.to = range.from; } range.margin = margin || 0; if (range.from.line != null) { scrollToRange(this, range); } else { scrollToCoordsRange(this, range.from, range.to, range.margin); } }), setSize: methodOp(function(width, height) { var this$1 = this; var interpret = function (val) { return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; }; if (width != null) { this.display.wrapper.style.width = interpret(width); } if (height != null) { this.display.wrapper.style.height = interpret(height); } if (this.options.lineWrapping) { clearLineMeasurementCache(this); } var lineNo = this.display.viewFrom; this.doc.iter(lineNo, this.display.viewTo, function (line) { if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo, "widget"); break } } } ++lineNo; }); this.curOp.forceUpdate = true; signal(this, "refresh", this); }), operation: function(f){return runInOp(this, f)}, startOperation: function(){return startOperation(this)}, endOperation: function(){return endOperation(this)}, refresh: methodOp(function() { var oldHeight = this.display.cachedTextHeight; regChange(this); this.curOp.forceUpdate = true; clearCaches(this); scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop); updateGutterSpace(this.display); if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping) { estimateLineHeights(this); } signal(this, "refresh", this); }), swapDoc: methodOp(function(doc) { var old = this.doc; old.cm = null; // Cancel the current text selection if any (#5821) if (this.state.selectingText) { this.state.selectingText(); } attachDoc(this, doc); clearCaches(this); this.display.input.reset(); scrollToCoords(this, doc.scrollLeft, doc.scrollTop); this.curOp.forceScroll = true; signalLater(this, "swapDoc", this, old); return old }), phrase: function(phraseText) { var phrases = this.options.phrases; return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText }, getInputField: function(){return this.display.input.getField()}, getWrapperElement: function(){return this.display.wrapper}, getScrollerElement: function(){return this.display.scroller}, getGutterElement: function(){return this.display.gutters} }; eventMixin(CodeMirror); CodeMirror.registerHelper = function(type, name, value) { if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; } helpers[type][name] = value; }; CodeMirror.registerGlobalHelper = function(type, name, predicate, value) { CodeMirror.registerHelper(type, name, value); helpers[type]._global.push({pred: predicate, val: value}); }; } // Used for horizontal relative motion. Dir is -1 or 1 (left or // right), unit can be "codepoint", "char", "column" (like char, but // doesn't cross line boundaries), "word" (across next word), or // "group" (to the start of next group of word or // non-word-non-whitespace chars). The visually param controls // whether, in right-to-left text, direction 1 means to move towards // the next index in the string, or towards the character to the right // of the current position. The resulting position will have a // hitSide=true property if it reached the end of the document. function findPosH(doc, pos, dir, unit, visually) { var oldPos = pos; var origDir = dir; var lineObj = getLine(doc, pos.line); var lineDir = visually && doc.direction == "rtl" ? -dir : dir; function findNextLine() { var l = pos.line + lineDir; if (l < doc.first || l >= doc.first + doc.size) { return false } pos = new Pos(l, pos.ch, pos.sticky); return lineObj = getLine(doc, l) } function moveOnce(boundToLine) { var next; if (unit == "codepoint") { var ch = lineObj.text.charCodeAt(pos.ch + (dir > 0 ? 0 : -1)); if (isNaN(ch)) { next = null; } else { var astral = dir > 0 ? ch >= 0xD800 && ch < 0xDC00 : ch >= 0xDC00 && ch < 0xDFFF; next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (astral ? 2 : 1))), -dir); } } else if (visually) { next = moveVisually(doc.cm, lineObj, pos, dir); } else { next = moveLogically(lineObj, pos, dir); } if (next == null) { if (!boundToLine && findNextLine()) { pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir); } else { return false } } else { pos = next; } return true } if (unit == "char" || unit == "codepoint") { moveOnce(); } else if (unit == "column") { moveOnce(true); } else if (unit == "word" || unit == "group") { var sawType = null, group = unit == "group"; var helper = doc.cm && doc.cm.getHelper(pos, "wordChars"); for (var first = true;; first = false) { if (dir < 0 && !moveOnce(!first)) { break } var cur = lineObj.text.charAt(pos.ch) || "\n"; var type = isWordChar(cur, helper) ? "w" : group && cur == "\n" ? "n" : !group || /\s/.test(cur) ? null : "p"; if (group && !first && !type) { type = "s"; } if (sawType && sawType != type) { if (dir < 0) {dir = 1; moveOnce(); pos.sticky = "after";} break } if (type) { sawType = type; } if (dir > 0 && !moveOnce(!first)) { break } } } var result = skipAtomic(doc, pos, oldPos, origDir, true); if (equalCursorPos(oldPos, result)) { result.hitSide = true; } return result } // For relative vertical movement. Dir may be -1 or 1. Unit can be // "page" or "line". The resulting position will have a hitSide=true // property if it reached the end of the document. function findPosV(cm, pos, dir, unit) { var doc = cm.doc, x = pos.left, y; if (unit == "page") { var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3); y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount; } else if (unit == "line") { y = dir > 0 ? pos.bottom + 3 : pos.top - 3; } var target; for (;;) { target = coordsChar(cm, x, y); if (!target.outside) { break } if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break } y += dir * 5; } return target } // CONTENTEDITABLE INPUT STYLE var ContentEditableInput = function(cm) { this.cm = cm; this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null; this.polling = new Delayed(); this.composing = null; this.gracePeriod = false; this.readDOMTimeout = null; }; ContentEditableInput.prototype.init = function (display) { var this$1 = this; var input = this, cm = input.cm; var div = input.div = display.lineDiv; div.contentEditable = true; disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize); function belongsToInput(e) { for (var t = e.target; t; t = t.parentNode) { if (t == div) { return true } if (/\bCodeMirror-(?:line)?widget\b/.test(t.className)) { break } } return false } on(div, "paste", function (e) { if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) { return } // IE doesn't fire input events, so we schedule a read for the pasted content in this way if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); } }); on(div, "compositionstart", function (e) { this$1.composing = {data: e.data, done: false}; }); on(div, "compositionupdate", function (e) { if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; } }); on(div, "compositionend", function (e) { if (this$1.composing) { if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); } this$1.composing.done = true; } }); on(div, "touchstart", function () { return input.forceCompositionEnd(); }); on(div, "input", function () { if (!this$1.composing) { this$1.readFromDOMSoon(); } }); function onCopyCut(e) { if (!belongsToInput(e) || signalDOMEvent(cm, e)) { return } if (cm.somethingSelected()) { setLastCopied({lineWise: false, text: cm.getSelections()}); if (e.type == "cut") { cm.replaceSelection("", null, "cut"); } } else if (!cm.options.lineWiseCopyCut) { return } else { var ranges = copyableRanges(cm); setLastCopied({lineWise: true, text: ranges.text}); if (e.type == "cut") { cm.operation(function () { cm.setSelections(ranges.ranges, 0, sel_dontScroll); cm.replaceSelection("", null, "cut"); }); } } if (e.clipboardData) { e.clipboardData.clearData(); var content = lastCopied.text.join("\n"); // iOS exposes the clipboard API, but seems to discard content inserted into it e.clipboardData.setData("Text", content); if (e.clipboardData.getData("Text") == content) { e.preventDefault(); return } } // Old-fashioned briefly-focus-a-textarea hack var kludge = hiddenTextarea(), te = kludge.firstChild; cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild); te.value = lastCopied.text.join("\n"); var hadFocus = activeElt(); selectInput(te); setTimeout(function () { cm.display.lineSpace.removeChild(kludge); hadFocus.focus(); if (hadFocus == div) { input.showPrimarySelection(); } }, 50); } on(div, "copy", onCopyCut); on(div, "cut", onCopyCut); }; ContentEditableInput.prototype.screenReaderLabelChanged = function (label) { // Label for screenreaders, accessibility if(label) { this.div.setAttribute('aria-label', label); } else { this.div.removeAttribute('aria-label'); } }; ContentEditableInput.prototype.prepareSelection = function () { var result = prepareSelection(this.cm, false); result.focus = activeElt() == this.div; return result }; ContentEditableInput.prototype.showSelection = function (info, takeFocus) { if (!info || !this.cm.display.view.length) { return } if (info.focus || takeFocus) { this.showPrimarySelection(); } this.showMultipleSelections(info); }; ContentEditableInput.prototype.getSelection = function () { return this.cm.display.wrapper.ownerDocument.getSelection() }; ContentEditableInput.prototype.showPrimarySelection = function () { var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary(); var from = prim.from(), to = prim.to(); if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) { sel.removeAllRanges(); return } var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset); if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && cmp(minPos(curAnchor, curFocus), from) == 0 && cmp(maxPos(curAnchor, curFocus), to) == 0) { return } var view = cm.display.view; var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) || {node: view[0].measure.map[2], offset: 0}; var end = to.line < cm.display.viewTo && posToDOM(cm, to); if (!end) { var measure = view[view.length - 1].measure; var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map; end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]}; } if (!start || !end) { sel.removeAllRanges(); return } var old = sel.rangeCount && sel.getRangeAt(0), rng; try { rng = range(start.node, start.offset, end.offset, end.node); } catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible if (rng) { if (!gecko && cm.state.focused) { sel.collapse(start.node, start.offset); if (!rng.collapsed) { sel.removeAllRanges(); sel.addRange(rng); } } else { sel.removeAllRanges(); sel.addRange(rng); } if (old && sel.anchorNode == null) { sel.addRange(old); } else if (gecko) { this.startGracePeriod(); } } this.rememberSelection(); }; ContentEditableInput.prototype.startGracePeriod = function () { var this$1 = this; clearTimeout(this.gracePeriod); this.gracePeriod = setTimeout(function () { this$1.gracePeriod = false; if (this$1.selectionChanged()) { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); } }, 20); }; ContentEditableInput.prototype.showMultipleSelections = function (info) { removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors); removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection); }; ContentEditableInput.prototype.rememberSelection = function () { var sel = this.getSelection(); this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset; this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset; }; ContentEditableInput.prototype.selectionInEditor = function () { var sel = this.getSelection(); if (!sel.rangeCount) { return false } var node = sel.getRangeAt(0).commonAncestorContainer; return contains(this.div, node) }; ContentEditableInput.prototype.focus = function () { if (this.cm.options.readOnly != "nocursor") { if (!this.selectionInEditor() || activeElt() != this.div) { this.showSelection(this.prepareSelection(), true); } this.div.focus(); } }; ContentEditableInput.prototype.blur = function () { this.div.blur(); }; ContentEditableInput.prototype.getField = function () { return this.div }; ContentEditableInput.prototype.supportsTouch = function () { return true }; ContentEditableInput.prototype.receivedFocus = function () { var this$1 = this; var input = this; if (this.selectionInEditor()) { setTimeout(function () { return this$1.pollSelection(); }, 20); } else { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); } function poll() { if (input.cm.state.focused) { input.pollSelection(); input.polling.set(input.cm.options.pollInterval, poll); } } this.polling.set(this.cm.options.pollInterval, poll); }; ContentEditableInput.prototype.selectionChanged = function () { var sel = this.getSelection(); return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset }; ContentEditableInput.prototype.pollSelection = function () { if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return } var sel = this.getSelection(), cm = this.cm; // On Android Chrome (version 56, at least), backspacing into an // uneditable block element will put the cursor in that element, // and then, because it's not editable, hide the virtual keyboard. // Because Android doesn't allow us to actually detect backspace // presses in a sane way, this code checks for when that happens // and simulates a backspace press in this case. if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) { this.cm.triggerOnKeyDown({type: "keydown", keyCode: 8, preventDefault: Math.abs}); this.blur(); this.focus(); return } if (this.composing) { return } this.rememberSelection(); var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); var head = domToPos(cm, sel.focusNode, sel.focusOffset); if (anchor && head) { runInOp(cm, function () { setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll); if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; } }); } }; ContentEditableInput.prototype.pollContent = function () { if (this.readDOMTimeout != null) { clearTimeout(this.readDOMTimeout); this.readDOMTimeout = null; } var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary(); var from = sel.from(), to = sel.to(); if (from.ch == 0 && from.line > cm.firstLine()) { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); } if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine()) { to = Pos(to.line + 1, 0); } if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false } var fromIndex, fromLine, fromNode; if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { fromLine = lineNo(display.view[0].line); fromNode = display.view[0].node; } else { fromLine = lineNo(display.view[fromIndex].line); fromNode = display.view[fromIndex - 1].node.nextSibling; } var toIndex = findViewIndex(cm, to.line); var toLine, toNode; if (toIndex == display.view.length - 1) { toLine = display.viewTo - 1; toNode = display.lineDiv.lastChild; } else { toLine = lineNo(display.view[toIndex + 1].line) - 1; toNode = display.view[toIndex + 1].node.previousSibling; } if (!fromNode) { return false } var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)); var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)); while (newText.length > 1 && oldText.length > 1) { if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; } else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; } else { break } } var cutFront = 0, cutEnd = 0; var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length); while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) { ++cutFront; } var newBot = lst(newText), oldBot = lst(oldText); var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), oldBot.length - (oldText.length == 1 ? cutFront : 0)); while (cutEnd < maxCutEnd && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) { ++cutEnd; } // Try to move start of change to start of selection if ambiguous if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) { while (cutFront && cutFront > from.ch && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) { cutFront--; cutEnd++; } } newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, ""); newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, ""); var chFrom = Pos(fromLine, cutFront); var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0); if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { replaceRange(cm.doc, newText, chFrom, chTo, "+input"); return true } }; ContentEditableInput.prototype.ensurePolled = function () { this.forceCompositionEnd(); }; ContentEditableInput.prototype.reset = function () { this.forceCompositionEnd(); }; ContentEditableInput.prototype.forceCompositionEnd = function () { if (!this.composing) { return } clearTimeout(this.readDOMTimeout); this.composing = null; this.updateFromDOM(); this.div.blur(); this.div.focus(); }; ContentEditableInput.prototype.readFromDOMSoon = function () { var this$1 = this; if (this.readDOMTimeout != null) { return } this.readDOMTimeout = setTimeout(function () { this$1.readDOMTimeout = null; if (this$1.composing) { if (this$1.composing.done) { this$1.composing = null; } else { return } } this$1.updateFromDOM(); }, 80); }; ContentEditableInput.prototype.updateFromDOM = function () { var this$1 = this; if (this.cm.isReadOnly() || !this.pollContent()) { runInOp(this.cm, function () { return regChange(this$1.cm); }); } }; ContentEditableInput.prototype.setUneditable = function (node) { node.contentEditable = "false"; }; ContentEditableInput.prototype.onKeyPress = function (e) { if (e.charCode == 0 || this.composing) { return } e.preventDefault(); if (!this.cm.isReadOnly()) { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); } }; ContentEditableInput.prototype.readOnlyChanged = function (val) { this.div.contentEditable = String(val != "nocursor"); }; ContentEditableInput.prototype.onContextMenu = function () {}; ContentEditableInput.prototype.resetPosition = function () {}; ContentEditableInput.prototype.needsContentAttribute = true; function posToDOM(cm, pos) { var view = findViewForLine(cm, pos.line); if (!view || view.hidden) { return null } var line = getLine(cm.doc, pos.line); var info = mapFromLineView(view, line, pos.line); var order = getOrder(line, cm.doc.direction), side = "left"; if (order) { var partPos = getBidiPartAt(order, pos.ch); side = partPos % 2 ? "right" : "left"; } var result = nodeAndOffsetInLineMap(info.map, pos.ch, side); result.offset = result.collapse == "right" ? result.end : result.start; return result } function isInGutter(node) { for (var scan = node; scan; scan = scan.parentNode) { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } } return false } function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos } function domTextBetween(cm, from, to, fromLine, toLine) { var text = "", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false; function recognizeMarker(id) { return function (marker) { return marker.id == id; } } function close() { if (closing) { text += lineSep; if (extraLinebreak) { text += lineSep; } closing = extraLinebreak = false; } } function addText(str) { if (str) { close(); text += str; } } function walk(node) { if (node.nodeType == 1) { var cmText = node.getAttribute("cm-text"); if (cmText) { addText(cmText); return } var markerID = node.getAttribute("cm-marker"), range; if (markerID) { var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)); if (found.length && (range = found[0].find(0))) { addText(getBetween(cm.doc, range.from, range.to).join(lineSep)); } return } if (node.getAttribute("contenteditable") == "false") { return } var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName); if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return } if (isBlock) { close(); } for (var i = 0; i < node.childNodes.length; i++) { walk(node.childNodes[i]); } if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; } if (isBlock) { closing = true; } } else if (node.nodeType == 3) { addText(node.nodeValue.replace(/\u200b/g, "").replace(/\u00a0/g, " ")); } } for (;;) { walk(from); if (from == to) { break } from = from.nextSibling; extraLinebreak = false; } return text } function domToPos(cm, node, offset) { var lineNode; if (node == cm.display.lineDiv) { lineNode = cm.display.lineDiv.childNodes[offset]; if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) } node = null; offset = 0; } else { for (lineNode = node;; lineNode = lineNode.parentNode) { if (!lineNode || lineNode == cm.display.lineDiv) { return null } if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break } } } for (var i = 0; i < cm.display.view.length; i++) { var lineView = cm.display.view[i]; if (lineView.node == lineNode) { return locateNodeInLineView(lineView, node, offset) } } } function locateNodeInLineView(lineView, node, offset) { var wrapper = lineView.text.firstChild, bad = false; if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) } if (node == wrapper) { bad = true; node = wrapper.childNodes[offset]; offset = 0; if (!node) { var line = lineView.rest ? lst(lineView.rest) : lineView.line; return badPos(Pos(lineNo(line), line.text.length), bad) } } var textNode = node.nodeType == 3 ? node : null, topNode = node; if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { textNode = node.firstChild; if (offset) { offset = textNode.nodeValue.length; } } while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; } var measure = lineView.measure, maps = measure.maps; function find(textNode, topNode, offset) { for (var i = -1; i < (maps ? maps.length : 0); i++) { var map = i < 0 ? measure.map : maps[i]; for (var j = 0; j < map.length; j += 3) { var curNode = map[j + 2]; if (curNode == textNode || curNode == topNode) { var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]); var ch = map[j] + offset; if (offset < 0 || curNode != textNode) { ch = map[j + (offset ? 1 : 0)]; } return Pos(line, ch) } } } } var found = find(textNode, topNode, offset); if (found) { return badPos(found, bad) } // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { found = find(after, after.firstChild, 0); if (found) { return badPos(Pos(found.line, found.ch - dist), bad) } else { dist += after.textContent.length; } } for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) { found = find(before, before.firstChild, -1); if (found) { return badPos(Pos(found.line, found.ch + dist$1), bad) } else { dist$1 += before.textContent.length; } } } // TEXTAREA INPUT STYLE var TextareaInput = function(cm) { this.cm = cm; // See input.poll and input.reset this.prevInput = ""; // Flag that indicates whether we expect input to appear real soon // now (after some event like 'keypress' or 'input') and are // polling intensively. this.pollingFast = false; // Self-resetting timeout for the poller this.polling = new Delayed(); // Used to work around IE issue with selection being forgotten when focus moves away from textarea this.hasSelection = false; this.composing = null; }; TextareaInput.prototype.init = function (display) { var this$1 = this; var input = this, cm = this.cm; this.createField(display); var te = this.textarea; display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild); // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore) if (ios) { te.style.width = "0px"; } on(te, "input", function () { if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; } input.poll(); }); on(te, "paste", function (e) { if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return } cm.state.pasteIncoming = +new Date; input.fastPoll(); }); function prepareCopyCut(e) { if (signalDOMEvent(cm, e)) { return } if (cm.somethingSelected()) { setLastCopied({lineWise: false, text: cm.getSelections()}); } else if (!cm.options.lineWiseCopyCut) { return } else { var ranges = copyableRanges(cm); setLastCopied({lineWise: true, text: ranges.text}); if (e.type == "cut") { cm.setSelections(ranges.ranges, null, sel_dontScroll); } else { input.prevInput = ""; te.value = ranges.text.join("\n"); selectInput(te); } } if (e.type == "cut") { cm.state.cutIncoming = +new Date; } } on(te, "cut", prepareCopyCut); on(te, "copy", prepareCopyCut); on(display.scroller, "paste", function (e) { if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return } if (!te.dispatchEvent) { cm.state.pasteIncoming = +new Date; input.focus(); return } // Pass the `paste` event to the textarea so it's handled by its event listener. var event = new Event("paste"); event.clipboardData = e.clipboardData; te.dispatchEvent(event); }); // Prevent normal selection in the editor (we handle our own) on(display.lineSpace, "selectstart", function (e) { if (!eventInWidget(display, e)) { e_preventDefault(e); } }); on(te, "compositionstart", function () { var start = cm.getCursor("from"); if (input.composing) { input.composing.range.clear(); } input.composing = { start: start, range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"}) }; }); on(te, "compositionend", function () { if (input.composing) { input.poll(); input.composing.range.clear(); input.composing = null; } }); }; TextareaInput.prototype.createField = function (_display) { // Wraps and hides input textarea this.wrapper = hiddenTextarea(); // The semihidden textarea that is focused when the editor is // focused, and receives input. this.textarea = this.wrapper.firstChild; }; TextareaInput.prototype.screenReaderLabelChanged = function (label) { // Label for screenreaders, accessibility if(label) { this.textarea.setAttribute('aria-label', label); } else { this.textarea.removeAttribute('aria-label'); } }; TextareaInput.prototype.prepareSelection = function () { // Redraw the selection and/or cursor var cm = this.cm, display = cm.display, doc = cm.doc; var result = prepareSelection(cm); // Move the hidden textarea near the cursor to prevent scrolling artifacts if (cm.options.moveInputWithCursor) { var headPos = cursorCoords(cm, doc.sel.primary().head, "div"); var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect(); result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, headPos.top + lineOff.top - wrapOff.top)); result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, headPos.left + lineOff.left - wrapOff.left)); } return result }; TextareaInput.prototype.showSelection = function (drawn) { var cm = this.cm, display = cm.display; removeChildrenAndAdd(display.cursorDiv, drawn.cursors); removeChildrenAndAdd(display.selectionDiv, drawn.selection); if (drawn.teTop != null) { this.wrapper.style.top = drawn.teTop + "px"; this.wrapper.style.left = drawn.teLeft + "px"; } }; // Reset the input to correspond to the selection (or to be empty, // when not typing and nothing is selected) TextareaInput.prototype.reset = function (typing) { if (this.contextMenuPending || this.composing) { return } var cm = this.cm; if (cm.somethingSelected()) { this.prevInput = ""; var content = cm.getSelection(); this.textarea.value = content; if (cm.state.focused) { selectInput(this.textarea); } if (ie && ie_version >= 9) { this.hasSelection = content; } } else if (!typing) { this.prevInput = this.textarea.value = ""; if (ie && ie_version >= 9) { this.hasSelection = null; } } }; TextareaInput.prototype.getField = function () { return this.textarea }; TextareaInput.prototype.supportsTouch = function () { return false }; TextareaInput.prototype.focus = function () { if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) { try { this.textarea.focus(); } catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM } }; TextareaInput.prototype.blur = function () { this.textarea.blur(); }; TextareaInput.prototype.resetPosition = function () { this.wrapper.style.top = this.wrapper.style.left = 0; }; TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); }; // Poll for input changes, using the normal rate of polling. This // runs as long as the editor is focused. TextareaInput.prototype.slowPoll = function () { var this$1 = this; if (this.pollingFast) { return } this.polling.set(this.cm.options.pollInterval, function () { this$1.poll(); if (this$1.cm.state.focused) { this$1.slowPoll(); } }); }; // When an event has just come in that is likely to add or change // something in the input textarea, we poll faster, to ensure that // the change appears on the screen quickly. TextareaInput.prototype.fastPoll = function () { var missed = false, input = this; input.pollingFast = true; function p() { var changed = input.poll(); if (!changed && !missed) {missed = true; input.polling.set(60, p);} else {input.pollingFast = false; input.slowPoll();} } input.polling.set(20, p); }; // Read input from the textarea, and update the document to match. // When something is selected, it is present in the textarea, and // selected (unless it is huge, in which case a placeholder is // used). When nothing is selected, the cursor sits after previously // seen text (can be empty), which is stored in prevInput (we must // not reset the textarea when typing, because that breaks IME). TextareaInput.prototype.poll = function () { var this$1 = this; var cm = this.cm, input = this.textarea, prevInput = this.prevInput; // Since this is called a *lot*, try to bail out as cheaply as // possible when it is clear that nothing happened. hasSelection // will be the case when there is a lot of text in the textarea, // in which case reading its value would be expensive. if (this.contextMenuPending || !cm.state.focused || (hasSelection(input) && !prevInput && !this.composing) || cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) { return false } var text = input.value; // If nothing changed, bail. if (text == prevInput && !cm.somethingSelected()) { return false } // Work around nonsensical selection resetting in IE9/10, and // inexplicable appearance of private area unicode characters on // some key combos in Mac (#2689). if (ie && ie_version >= 9 && this.hasSelection === text || mac && /[\uf700-\uf7ff]/.test(text)) { cm.display.input.reset(); return false } if (cm.doc.sel == cm.display.selForContextMenu) { var first = text.charCodeAt(0); if (first == 0x200b && !prevInput) { prevInput = "\u200b"; } if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo") } } // Find the part of the input that is actually new var same = 0, l = Math.min(prevInput.length, text.length); while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; } runInOp(cm, function () { applyTextInput(cm, text.slice(same), prevInput.length - same, null, this$1.composing ? "*compose" : null); // Don't leave long text in the textarea, since it makes further polling slow if (text.length > 1000 || text.indexOf("\n") > -1) { input.value = this$1.prevInput = ""; } else { this$1.prevInput = text; } if (this$1.composing) { this$1.composing.range.clear(); this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor("to"), {className: "CodeMirror-composing"}); } }); return true }; TextareaInput.prototype.ensurePolled = function () { if (this.pollingFast && this.poll()) { this.pollingFast = false; } }; TextareaInput.prototype.onKeyPress = function () { if (ie && ie_version >= 9) { this.hasSelection = null; } this.fastPoll(); }; TextareaInput.prototype.onContextMenu = function (e) { var input = this, cm = input.cm, display = cm.display, te = input.textarea; if (input.contextMenuPending) { input.contextMenuPending(); } var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop; if (!pos || presto) { return } // Opera is difficult. // Reset the current text selection only if the click is done outside of the selection // and 'resetSelectionOnContextMenu' option is true. var reset = cm.options.resetSelectionOnContextMenu; if (reset && cm.doc.sel.contains(pos) == -1) { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); } var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText; var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect(); input.wrapper.style.cssText = "position: static"; te.style.cssText = "position: absolute; width: 30px; height: 30px;\n top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; var oldScrollY; if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712) display.input.focus(); if (webkit) { window.scrollTo(null, oldScrollY); } display.input.reset(); // Adds "Select all" to context menu in FF if (!cm.somethingSelected()) { te.value = input.prevInput = " "; } input.contextMenuPending = rehide; display.selForContextMenu = cm.doc.sel; clearTimeout(display.detectingSelectAll); // Select-all will be greyed out if there's nothing to select, so // this adds a zero-width space so that we can later check whether // it got selected. function prepareSelectAllHack() { if (te.selectionStart != null) { var selected = cm.somethingSelected(); var extval = "\u200b" + (selected ? te.value : ""); te.value = "\u21da"; // Used to catch context-menu undo te.value = extval; input.prevInput = selected ? "" : "\u200b"; te.selectionStart = 1; te.selectionEnd = extval.length; // Re-set this, in case some other handler touched the // selection in the meantime. display.selForContextMenu = cm.doc.sel; } } function rehide() { if (input.contextMenuPending != rehide) { return } input.contextMenuPending = false; input.wrapper.style.cssText = oldWrapperCSS; te.style.cssText = oldCSS; if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); } // Try to detect the user choosing select-all if (te.selectionStart != null) { if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); } var i = 0, poll = function () { if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && te.selectionEnd > 0 && input.prevInput == "\u200b") { operation(cm, selectAll)(cm); } else if (i++ < 10) { display.detectingSelectAll = setTimeout(poll, 500); } else { display.selForContextMenu = null; display.input.reset(); } }; display.detectingSelectAll = setTimeout(poll, 200); } } if (ie && ie_version >= 9) { prepareSelectAllHack(); } if (captureRightClick) { e_stop(e); var mouseup = function () { off(window, "mouseup", mouseup); setTimeout(rehide, 20); }; on(window, "mouseup", mouseup); } else { setTimeout(rehide, 50); } }; TextareaInput.prototype.readOnlyChanged = function (val) { if (!val) { this.reset(); } this.textarea.disabled = val == "nocursor"; this.textarea.readOnly = !!val; }; TextareaInput.prototype.setUneditable = function () {}; TextareaInput.prototype.needsContentAttribute = false; function fromTextArea(textarea, options) { options = options ? copyObj(options) : {}; options.value = textarea.value; if (!options.tabindex && textarea.tabIndex) { options.tabindex = textarea.tabIndex; } if (!options.placeholder && textarea.placeholder) { options.placeholder = textarea.placeholder; } // Set autofocus to true if this textarea is focused, or if it has // autofocus and no other element is focused. if (options.autofocus == null) { var hasFocus = activeElt(); options.autofocus = hasFocus == textarea || textarea.getAttribute("autofocus") != null && hasFocus == document.body; } function save() {textarea.value = cm.getValue();} var realSubmit; if (textarea.form) { on(textarea.form, "submit", save); // Deplorable hack to make the submit method do the right thing. if (!options.leaveSubmitMethodAlone) { var form = textarea.form; realSubmit = form.submit; try { var wrappedSubmit = form.submit = function () { save(); form.submit = realSubmit; form.submit(); form.submit = wrappedSubmit; }; } catch(e) {} } } options.finishInit = function (cm) { cm.save = save; cm.getTextArea = function () { return textarea; }; cm.toTextArea = function () { cm.toTextArea = isNaN; // Prevent this from being ran twice save(); textarea.parentNode.removeChild(cm.getWrapperElement()); textarea.style.display = ""; if (textarea.form) { off(textarea.form, "submit", save); if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == "function") { textarea.form.submit = realSubmit; } } }; }; textarea.style.display = "none"; var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); }, options); return cm } function addLegacyProps(CodeMirror) { CodeMirror.off = off; CodeMirror.on = on; CodeMirror.wheelEventPixels = wheelEventPixels; CodeMirror.Doc = Doc; CodeMirror.splitLines = splitLinesAuto; CodeMirror.countColumn = countColumn; CodeMirror.findColumn = findColumn; CodeMirror.isWordChar = isWordCharBasic; CodeMirror.Pass = Pass; CodeMirror.signal = signal; CodeMirror.Line = Line; CodeMirror.changeEnd = changeEnd; CodeMirror.scrollbarModel = scrollbarModel; CodeMirror.Pos = Pos; CodeMirror.cmpPos = cmp; CodeMirror.modes = modes; CodeMirror.mimeModes = mimeModes; CodeMirror.resolveMode = resolveMode; CodeMirror.getMode = getMode; CodeMirror.modeExtensions = modeExtensions; CodeMirror.extendMode = extendMode; CodeMirror.copyState = copyState; CodeMirror.startState = startState; CodeMirror.innerMode = innerMode; CodeMirror.commands = commands; CodeMirror.keyMap = keyMap; CodeMirror.keyName = keyName; CodeMirror.isModifierKey = isModifierKey; CodeMirror.lookupKey = lookupKey; CodeMirror.normalizeKeyMap = normalizeKeyMap; CodeMirror.StringStream = StringStream; CodeMirror.SharedTextMarker = SharedTextMarker; CodeMirror.TextMarker = TextMarker; CodeMirror.LineWidget = LineWidget; CodeMirror.e_preventDefault = e_preventDefault; CodeMirror.e_stopPropagation = e_stopPropagation; CodeMirror.e_stop = e_stop; CodeMirror.addClass = addClass; CodeMirror.contains = contains; CodeMirror.rmClass = rmClass; CodeMirror.keyNames = keyNames; } // EDITOR CONSTRUCTOR defineOptions(CodeMirror); addEditorMethods(CodeMirror); // Set up methods on CodeMirror's prototype to redirect to the editor's document. var dontDelegate = "iter insert remove copy getEditor constructor".split(" "); for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) { CodeMirror.prototype[prop] = (function(method) { return function() {return method.apply(this.doc, arguments)} })(Doc.prototype[prop]); } } eventMixin(Doc); CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput}; // Extra arguments are stored as the mode's dependencies, which is // used by (legacy) mechanisms like loadmode.js to automatically // load a mode. (Preferred mechanism is the require/define calls.) CodeMirror.defineMode = function(name/*, mode, …*/) { if (!CodeMirror.defaults.mode && name != "null") { CodeMirror.defaults.mode = name; } defineMode.apply(this, arguments); }; CodeMirror.defineMIME = defineMIME; // Minimal default mode. CodeMirror.defineMode("null", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); }); CodeMirror.defineMIME("text/plain", "null"); // EXTENSIONS CodeMirror.defineExtension = function (name, func) { CodeMirror.prototype[name] = func; }; CodeMirror.defineDocExtension = function (name, func) { Doc.prototype[name] = func; }; CodeMirror.fromTextArea = fromTextArea; addLegacyProps(CodeMirror); CodeMirror.version = "5.64.0"; return CodeMirror; }))); // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE // xml !function(){var N={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},M={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,allowMissingTagName:!1,caseFold:!1};CodeMirror.defineMode("xml",function(t,e){var r,a,i,l=t.indentUnit,u={},n=e.htmlMode?N:M;for(r in n)u[r]=n[r];for(r in e)u[r]=e[r];function d(e,r){function t(t){return(r.tokenize=t)(e,r)}var n=e.next();if("<"==n)return e.eat("!")?e.eat("[")?e.match("CDATA[")?t(o("atom","]]>")):null:e.match("--")?t(o("comment","--\x3e")):e.match("DOCTYPE",!0,!0)?(e.eatWhile(/[\w\._\-]/),t(function n(o){return function(t,e){for(var r;null!=(r=t.next());){if("<"==r)return e.tokenize=n(o+1),e.tokenize(t,e);if(">"==r){if(1!=o)return e.tokenize=n(o-1),e.tokenize(t,e);e.tokenize=d;break}}return"meta"}}(1))):null:e.eat("?")?(e.eatWhile(/[\w\._\-]/),r.tokenize=o("meta","?>"),"meta"):(a=e.eat("/")?"closeTag":"openTag",r.tokenize=s,"tag bracket");if("&"!=n)return e.eatWhile(/[^&<]/),null;n=e.eat("#")?e.eat("x")?e.eatWhile(/[a-fA-F\d]/)&&e.eat(";"):e.eatWhile(/[\d]/)&&e.eat(";"):e.eatWhile(/[\w\.\-:]/)&&e.eat(";");return n?"atom":"error"}function s(t,e){var r=t.next();if(">"==r||"/"==r&&t.eat(">"))return e.tokenize=d,a=">"==r?"endTag":"selfcloseTag","tag bracket";if("="==r)return a="equals",null;if("<"!=r)return/[\'\"]/.test(r)?(e.tokenize=(n=r,o.isInAttribute=!0,o),e.stringStartCol=t.column(),e.tokenize(t,e)):(t.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word");e.tokenize=d,e.state=p,e.tagName=e.tagStart=null;var n,e=e.tokenize(t,e);return e?e+" tag error":"tag error";function o(t,e){for(;!t.eol();)if(t.next()==n){e.tokenize=s;break}return"string"}}function o(r,n){return function(t,e){for(;!t.eol();){if(t.match(n)){e.tokenize=d;break}t.next()}return r}}function c(t){return t&&t.toLowerCase()}function f(t,e,r){this.prev=t.context,this.tagName=e||"",this.indent=t.indented,this.startOfLine=r,(u.doNotIndent.hasOwnProperty(e)||t.context&&t.context.noIndent)&&(this.noIndent=!0)}function m(t){t.context&&(t.context=t.context.prev)}function g(t,e){for(var r;;){if(!t.context)return;if(r=t.context.tagName,!u.contextGrabbers.hasOwnProperty(c(r))||!u.contextGrabbers[c(r)].hasOwnProperty(c(e)))return;m(t)}}function p(t,e,r){return"openTag"==t?(r.tagStart=e.column(),h):"closeTag"==t?x:p}function h(t,e,r){return"word"==t?(r.tagName=e.current(),i="tag",w):u.allowMissingTagName&&"endTag"==t?(i="tag bracket",w(t,0,r)):(i="error",h)}function x(t,e,r){if("word"!=t)return u.allowMissingTagName&&"endTag"==t?(i="tag bracket",b(t,0,r)):(i="error",k);e=e.current();return r.context&&r.context.tagName!=e&&u.implicitlyClosed.hasOwnProperty(c(r.context.tagName))&&m(r),r.context&&r.context.tagName==e||!1===u.matchClosing?(i="tag",b):(i="tag error",k)}function b(t,e,r){return"endTag"!=t?(i="error",b):(m(r),p)}function k(t,e,r){return i="error",b(t,0,r)}function w(t,e,r){if("word"==t)return i="attribute",C;if("endTag"!=t&&"selfcloseTag"!=t)return i="error",w;var n=r.tagName,o=r.tagStart;return r.tagName=r.tagStart=null,"selfcloseTag"==t||u.autoSelfClosers.hasOwnProperty(c(n))?g(r,n):(g(r,n),r.context=new f(r,n,o==r.indented)),p}function C(t,e,r){return"equals"==t?T:(u.allowMissing||(i="error"),w(t,0,r))}function T(t,e,r){return"string"==t?v:"word"==t&&u.allowUnquoted?(i="string",w):(i="error",w(t,0,r))}function v(t,e,r){return"string"==t?v:w(t,0,r)}return d.isInText=!0,{startState:function(t){var e={tokenize:d,state:p,indented:t||0,tagName:null,tagStart:null,context:null};return null!=t&&(e.baseIndent=t),e},token:function(t,e){if(!e.tagName&&t.sol()&&(e.indented=t.indentation()),t.eatSpace())return null;a=null;var r=e.tokenize(t,e);return(r||a)&&"comment"!=r&&(i=null,e.state=e.state(a||r,t,e),i&&(r="error"==i?r+" error":i)),r},indent:function(t,e,r){var n=t.context;if(t.tokenize.isInAttribute)return t.tagStart==t.indented?t.stringStartCol+1:t.indented+l;if(n&&n.noIndent)return CodeMirror.Pass;if(t.tokenize!=s&&t.tokenize!=d)return r?r.match(/^(\s*)/)[0].length:0;if(t.tagName)return!1!==u.multilineTagIndentPastTag?t.tagStart+t.tagName.length+2:t.tagStart+l*(u.multilineTagIndentFactor||1);if(u.alignCDATA&&/$/,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",configuration:u.htmlMode?"html":"xml",helperType:u.htmlMode?"html":"xml",skipAttribute:function(t){t.state==T&&(t.state=w)},xmlCurrentTag:function(t){return t.tagName?{name:t.tagName,close:"closeTag"==t.type}:null},xmlCurrentContext:function(t){for(var e=[],r=t.context;r;r=r.prev)e.push(r.tagName);return e.reverse()}}}),CodeMirror.defineMIME("text/xml","xml"),CodeMirror.defineMIME("application/xml","xml"),CodeMirror.mimeModes.hasOwnProperty("text/html")||CodeMirror.defineMIME("text/html",{name:"xml",htmlMode:!0})}(); // htmlmixed !function(){var l={script:[["lang",/(javascript|babel)/i,"javascript"],["type",/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i,"javascript"],["type",/./,"text/plain"],[null,null,"javascript"]],style:[["lang",/^css$/i,"css"],["type",/^(text\/)?(x-)?(stylesheet|css)$/i,"css"],["type",/./,"text/plain"],[null,null,"css"]]};var a={};function d(t,e){e=t.match(a[e=e]||(a[e]=new RegExp("\\s+"+e+"\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*")));return e?/^\s*(.*?)\s*$/.exec(e[2])[1]:""}function m(t,e){return new RegExp((e?"^":"")+"","i")}function o(t,e){for(var a in t)for(var n=e[a]||(e[a]=[]),l=t[a],o=l.length-1;0<=o;o--)n.unshift(l[o])}CodeMirror.defineMode("htmlmixed",function(i,t){var c=CodeMirror.getMode(i,{name:"xml",htmlMode:!0,multilineTagIndentFactor:t.multilineTagIndentFactor,multilineTagIndentPastTag:t.multilineTagIndentPastTag,allowMissingTagName:t.allowMissingTagName}),s={},e=t&&t.tags,a=t&&t.scriptTypes;if(o(l,s),e&&o(e,s),a)for(var n=a.length-1;0<=n;n--)s.script.unshift(["type",a[n].matches,a[n].mode]);function u(t,e){var a,o,r,n=c.token(t,e.htmlState),l=/\btag\b/.test(n);return l&&!/[<>\s\/]/.test(t.current())&&(a=e.htmlState.tagName&&e.htmlState.tagName.toLowerCase())&&s.hasOwnProperty(a)?e.inTag=a+" ":e.inTag&&l&&/>$/.test(t.current())?(a=/^([\S]+) (.*)/.exec(e.inTag),e.inTag=null,l=">"==t.current()&&function(t,e){for(var a=0;ai.keyCol)return e.skipToEnd(),"string";if(i.literal&&(i.literal=!1),e.sol()){if(i.keyCol=0,i.pair=!1,i.pairStart=!1,e.match("---"))return"def";if(e.match("..."))return"def";if(e.match(/\s*-\s+/))return"meta"}if(e.match(/^(\{|\}|\[|\])/))return"{"==t?i.inlinePairs++:"}"==t?i.inlinePairs--:"["==t?i.inlineList++:i.inlineList--,"meta";if(0)\s*/))return i.literal=!0,"meta";if(e.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i))return"variable-2";if(0==i.inlinePairs&&e.match(/^\s*-?[0-9\.\,]+\s?$/))return"number";if(0'"%@`][^\s'":]|[^,\[\]{}#&*!|>'"%@`])[^#]*?(?=\s*:($|\s))/)?(i.pair=!0,i.keyCol=e.indentation(),"atom"):i.pair&&e.match(/^:\s*/)?(i.pairStart=!0,"meta"):(i.pairStart=!1,i.escaped="\\"==t,e.next(),null)},startState:function(){return{pair:!1,pairStart:!1,keyCol:0,inlinePairs:0,inlineList:0,literal:!1,escaped:!1}},lineComment:"#",fold:"indent"}}),CodeMirror.defineMIME("text/x-yaml","yaml"),CodeMirror.defineMIME("text/yaml","yaml"); // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: https://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../xml/xml"), require("../meta")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../xml/xml", "../meta"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) { var htmlMode = CodeMirror.getMode(cmCfg, "text/html"); var htmlModeMissing = htmlMode.name == "null" function getMode(name) { if (CodeMirror.findModeByName) { var found = CodeMirror.findModeByName(name); if (found) name = found.mime || found.mimes[0]; } var mode = CodeMirror.getMode(cmCfg, name); return mode.name == "null" ? null : mode; } // Should characters that affect highlighting be highlighted separate? // Does not include characters that will be output (such as `1.` and `-` for lists) if (modeCfg.highlightFormatting === undefined) modeCfg.highlightFormatting = false; // Maximum number of nested blockquotes. Set to 0 for infinite nesting. // Excess `>` will emit `error` token. if (modeCfg.maxBlockquoteDepth === undefined) modeCfg.maxBlockquoteDepth = 0; // Turn on task lists? ("- [ ] " and "- [x] ") if (modeCfg.taskLists === undefined) modeCfg.taskLists = false; // Turn on strikethrough syntax if (modeCfg.strikethrough === undefined) modeCfg.strikethrough = false; if (modeCfg.emoji === undefined) modeCfg.emoji = false; if (modeCfg.fencedCodeBlockHighlighting === undefined) modeCfg.fencedCodeBlockHighlighting = true; if (modeCfg.xml === undefined) modeCfg.xml = true; // Allow token types to be overridden by user-provided token types. if (modeCfg.tokenTypeOverrides === undefined) modeCfg.tokenTypeOverrides = {}; var tokenTypes = { header: "header", code: "comment", quote: "quote", list1: "variable-2", list2: "variable-3", list3: "keyword", hr: "hr", image: "image", imageAltText: "image-alt-text", imageMarker: "image-marker", formatting: "formatting", linkInline: "link", linkEmail: "link", linkText: "link", linkHref: "string", em: "em", strong: "strong", strikethrough: "strikethrough", emoji: "builtin", highlight: "highlight", }; for (var tokenType in tokenTypes) { if (tokenTypes.hasOwnProperty(tokenType) && modeCfg.tokenTypeOverrides[tokenType]) { tokenTypes[tokenType] = modeCfg.tokenTypeOverrides[tokenType]; } } var hrRE = /^([*\-_])(?:\s*\1){2,}\s*$/ , listRE = /^(?:[*\-+]|^[0-9]+([.)]))\s+/ , taskListRE = /^\[(.)\](?=\s)/i // Must follow listRE , atxHeaderRE = modeCfg.allowAtxHeaderWithoutSpace ? /^(#+)/ : /^(#+)(?: |$)/ , setextHeaderRE = /^ {0,3}(?:\={1,}|-{2,})\s*$/ , textRE = /^[^#!\[\]*_\\<>` "'(~:=]+/ , fencedCodeRE = /^(~~~+|```+)[ \t]*([\w\/+#-]*)[^\n`]*$/ , linkDefRE = /^\s*\[[^\]]+?\]:.*$/ // naive link-definition , punctuation = /[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E42\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDF3C-\uDF3E]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]/ , expandedTab = " " // CommonMark specifies tab as 4 spaces function switchInline(stream, state, f) { state.f = state.inline = f; return f(stream, state); } function switchBlock(stream, state, f) { state.f = state.block = f; return f(stream, state); } function lineIsEmpty(line) { return !line || !/\S/.test(line.string) } // Blocks function blankLine(state) { // Reset linkTitle state state.linkTitle = false; state.linkHref = false; state.linkText = false; // Reset EM state state.em = false; // Reset STRONG state state.strong = false; // Reset strikethrough state state.strikethrough = false; // Reset highlight state state.highlight = false; // Reset state.quote state.quote = 0; // Reset state.indentedCode state.indentedCode = false; if (state.f == htmlBlock) { var exit = htmlModeMissing if (!exit) { var inner = CodeMirror.innerMode(htmlMode, state.htmlState) exit = inner.mode.name == "xml" && inner.state.tagStart === null && (!inner.state.context && inner.state.tokenize.isInText) } if (exit) { state.f = inlineNormal; state.block = blockNormal; state.htmlState = null; } } // Reset state.trailingSpace state.trailingSpace = 0; state.trailingSpaceNewLine = false; // Mark this line as blank state.prevLine = state.thisLine state.thisLine = {stream: null} return null; } function blockNormal(stream, state) { var firstTokenOnLine = stream.column() === state.indentation; var prevLineLineIsEmpty = lineIsEmpty(state.prevLine.stream); var prevLineIsIndentedCode = state.indentedCode; var prevLineIsHr = state.prevLine.hr; var prevLineIsList = state.list !== false; var maxNonCodeIndentation = (state.listStack[state.listStack.length - 1] || 0) + 3; state.indentedCode = false; var lineIndentation = state.indentation; // compute once per line (on first token) if (state.indentationDiff === null) { state.indentationDiff = state.indentation; if (prevLineIsList) { state.list = null; // While this list item's marker's indentation is less than the deepest // list item's content's indentation,pop the deepest list item // indentation off the stack, and update block indentation state while (lineIndentation < state.listStack[state.listStack.length - 1]) { state.listStack.pop(); if (state.listStack.length) { state.indentation = state.listStack[state.listStack.length - 1]; // less than the first list's indent -> the line is no longer a list } else { state.list = false; } } if (state.list !== false) { state.indentationDiff = lineIndentation - state.listStack[state.listStack.length - 1] } } } // not comprehensive (currently only for setext detection purposes) var allowsInlineContinuation = ( !prevLineLineIsEmpty && !prevLineIsHr && !state.prevLine.header && (!prevLineIsList || !prevLineIsIndentedCode) && !state.prevLine.fencedCodeEnd ); var isHr = (state.list === false || prevLineIsHr || prevLineLineIsEmpty) && state.indentation <= maxNonCodeIndentation && stream.match(hrRE); var match = null; if (state.indentationDiff >= 4 && (prevLineIsIndentedCode || state.prevLine.fencedCodeEnd || state.prevLine.header || prevLineLineIsEmpty)) { stream.skipToEnd(); state.indentedCode = true; return tokenTypes.code; } else if (stream.eatSpace()) { return null; } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(atxHeaderRE)) && match[1].length <= 6) { state.quote = 0; state.header = match[1].length; state.thisLine.header = true; if (modeCfg.highlightFormatting) state.formatting = "header"; state.f = state.inline; return getType(state); } else if (state.indentation <= maxNonCodeIndentation && stream.eat('>')) { state.quote = firstTokenOnLine ? 1 : state.quote + 1; if (modeCfg.highlightFormatting) state.formatting = "quote"; stream.eatSpace(); return getType(state); } else if (!isHr && !state.setext && firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(listRE))) { var listType = match[1] ? "ol" : "ul"; state.indentation = lineIndentation + stream.current().length; state.list = true; state.quote = 0; // Add this list item's content's indentation to the stack state.listStack.push(state.indentation); // Reset inline styles which shouldn't propagate across list items state.em = false; state.strong = false; state.code = false; state.strikethrough = false; state.highlight = false; if (modeCfg.taskLists && stream.match(taskListRE, false)) { state.taskList = true; } state.f = state.inline; if (modeCfg.highlightFormatting) state.formatting = ["list", "list-" + listType]; return getType(state); } else if (firstTokenOnLine && state.indentation <= maxNonCodeIndentation && (match = stream.match(fencedCodeRE, true))) { state.quote = 0; state.fencedEndRE = new RegExp(match[1] + "+ *$"); // try switching mode state.localMode = modeCfg.fencedCodeBlockHighlighting && getMode(match[2]); if (state.localMode) state.localState = CodeMirror.startState(state.localMode); state.f = state.block = local; if (modeCfg.highlightFormatting) state.formatting = "code-block"; state.code = -1 return getType(state); // SETEXT has lowest block-scope precedence after HR, so check it after // the others (code, blockquote, list...) } else if ( // if setext set, indicates line after ---/=== state.setext || ( // line before ---/=== (!allowsInlineContinuation || !prevLineIsList) && !state.quote && state.list === false && !state.code && !isHr && !linkDefRE.test(stream.string) && (match = stream.lookAhead(1)) && (match = match.match(setextHeaderRE)) ) ) { if ( !state.setext ) { state.header = match[0].charAt(0) == '=' ? 1 : 2; state.setext = state.header; } else { state.header = state.setext; // has no effect on type so we can reset it now state.setext = 0; stream.skipToEnd(); if (modeCfg.highlightFormatting) state.formatting = "header"; } state.thisLine.header = true; state.f = state.inline; return getType(state); } else if (isHr) { stream.skipToEnd(); state.hr = true; state.thisLine.hr = true; return tokenTypes.hr; } else if (stream.peek() === '[') { return switchInline(stream, state, footnoteLink); } return switchInline(stream, state, state.inline); } function htmlBlock(stream, state) { var style = htmlMode.token(stream, state.htmlState); if (!htmlModeMissing) { var inner = CodeMirror.innerMode(htmlMode, state.htmlState) if ((inner.mode.name == "xml" && inner.state.tagStart === null && (!inner.state.context && inner.state.tokenize.isInText)) || (state.md_inside && stream.current().indexOf(">") > -1)) { state.f = inlineNormal; state.block = blockNormal; state.htmlState = null; } } return style; } function local(stream, state) { var currListInd = state.listStack[state.listStack.length - 1] || 0; var hasExitedList = state.indentation < currListInd; var maxFencedEndInd = currListInd + 3; if (state.fencedEndRE && state.indentation <= maxFencedEndInd && (hasExitedList || stream.match(state.fencedEndRE))) { if (modeCfg.highlightFormatting) state.formatting = "code-block"; var returnType; if (!hasExitedList) returnType = getType(state) state.localMode = state.localState = null; state.block = blockNormal; state.f = inlineNormal; state.fencedEndRE = null; state.code = 0 state.thisLine.fencedCodeEnd = true; if (hasExitedList) return switchBlock(stream, state, state.block); return returnType; } else if (state.localMode) { return state.localMode.token(stream, state.localState); } else { stream.skipToEnd(); return tokenTypes.code; } } // Inline function getType(state) { var styles = []; if (state.formatting) { styles.push(tokenTypes.formatting); if (typeof state.formatting === "string") state.formatting = [state.formatting]; for (var i = 0; i < state.formatting.length; i++) { styles.push(tokenTypes.formatting + "-" + state.formatting[i]); if (state.formatting[i] === "header") { styles.push(tokenTypes.formatting + "-" + state.formatting[i] + "-" + state.header); } // Add `formatting-quote` and `formatting-quote-#` for blockquotes // Add `error` instead if the maximum blockquote nesting depth is passed if (state.formatting[i] === "quote") { if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) { styles.push(tokenTypes.formatting + "-" + state.formatting[i] + "-" + state.quote); } else { styles.push("error"); } } } } if (state.taskOpen) { styles.push("meta"); return styles.length ? styles.join(' ') : null; } if (state.taskClosed) { styles.push("property"); return styles.length ? styles.join(' ') : null; } // if (state.linkHref) { // styles.push(tokenTypes.linkHref, "url"); // } else { // Only apply inline styles to non-url text if (state.linkHref) { styles.push(tokenTypes.linkHref, "url"); } if (state.strong) { styles.push(tokenTypes.strong); } if (state.em) { styles.push(tokenTypes.em); } if (state.strikethrough) { styles.push(tokenTypes.strikethrough); } if (state.highlight) { styles.push(tokenTypes.highlight); } if (state.emoji) { styles.push(tokenTypes.emoji); } if (state.linkText) { styles.push(tokenTypes.linkText); } if (state.code) { styles.push(tokenTypes.code); } if (state.image) { styles.push(tokenTypes.image); } if (state.imageAltText) { styles.push(tokenTypes.imageAltText, "link"); } if (state.imageMarker) { styles.push(tokenTypes.imageMarker); } // } if (state.header) { styles.push(tokenTypes.header, tokenTypes.header + "-" + state.header); } if (state.quote) { styles.push(tokenTypes.quote); // Add `quote-#` where the maximum for `#` is modeCfg.maxBlockquoteDepth if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) { styles.push(tokenTypes.quote + "-" + state.quote); } else { styles.push(tokenTypes.quote + "-" + modeCfg.maxBlockquoteDepth); } } if (state.list !== false) { var listMod = (state.listStack.length - 1) % 3; if (!listMod) { styles.push(tokenTypes.list1); } else if (listMod === 1) { styles.push(tokenTypes.list2); } else { styles.push(tokenTypes.list3); } } if (state.trailingSpaceNewLine) { styles.push("trailing-space-new-line"); } else if (state.trailingSpace) { styles.push("trailing-space-" + (state.trailingSpace % 2 ? "a" : "b")); } return styles.length ? styles.join(' ') : null; } function handleText(stream, state) { if (stream.match(textRE, true)) { return getType(state); } return undefined; } function inlineNormal(stream, state) { var style = state.text(stream, state); if (typeof style !== 'undefined') return style; // fix " - [[link]]" not working as it returns too early if (state.list && !state.internalLink) { // List marker (*, +, -, 1., etc) state.list = null; return getType(state); } if (state.taskList) { var match = stream.match(taskListRE, true); state.taskList = false; if (match) { var taskOpen = match[1] === " "; if (taskOpen) state.taskOpen = true; else state.taskClosed = true; if (modeCfg.highlightFormatting) state.formatting = "task"; return getType(state); } } state.taskOpen = false; state.taskClosed = false; if (state.header && stream.match(/^#+$/, true)) { if (modeCfg.highlightFormatting) state.formatting = "header"; return getType(state); } var ch = stream.next(); // Matches link titles present on next line if (state.linkTitle) { state.linkTitle = false; var matchCh = ch; if (ch === '(') { matchCh = ')'; } matchCh = (matchCh+'').replace(/([.?*+^\[\]\\(){}|-])/g, "\\$1"); var regex = '^\\s*(?:[^' + matchCh + '\\\\]+|\\\\\\\\|\\\\.)' + matchCh; if (stream.match(new RegExp(regex), true)) { return tokenTypes.linkHref; } } // If this block is changed, it may need to be updated in GFM mode if (ch === '`') { var previousFormatting = state.formatting; if (modeCfg.highlightFormatting) state.formatting = "code"; stream.eatWhile('`'); var count = stream.current().length if (state.code == 0 && (!state.quote || count == 1)) { state.code = count return getType(state) } else if (count == state.code) { // Must be exact var t = getType(state) state.code = 0 return t } else { state.formatting = previousFormatting return getType(state) } } else if (state.code) { return getType(state); } if (ch === '\\') { stream.next(); if (modeCfg.highlightFormatting) { var type = getType(state); var formattingEscape = tokenTypes.formatting + "-escape"; return type ? type + " " + formattingEscape : formattingEscape; } } if (ch === '!' && stream.match(/\[[^\]]*\] ?(?:\(|\[)/, false)) { state.imageMarker = true; state.image = true; if (modeCfg.highlightFormatting) state.formatting = "image"; return getType(state); } if (ch === '[' && state.imageMarker && stream.match(/[^\]]*\](\(.*?\)| ?\[.*?\])/, false)) { state.imageMarker = false; state.imageAltText = true if (modeCfg.highlightFormatting) state.formatting = "image"; return getType(state); } if (ch === ']' && state.imageAltText) { if (modeCfg.highlightFormatting) state.formatting = "image"; var type = getType(state); state.imageAltText = false; state.image = false; state.inline = state.f = linkHref; return type; } if (ch === '[' && !state.image && !state.internalLink) { if (state.linkText && stream.match(/^.*?\]/)) return getType(state) state.linkText = true; if (modeCfg.highlightFormatting) state.formatting = "link"; return getType(state); } if (ch === ']' && state.linkText) { if (modeCfg.highlightFormatting) state.formatting = "link"; var type = getType(state); state.linkText = false; state.inline = state.f = stream.match(/\(.*?\)| ?\[.*?\]/, false) ? linkHref : inlineNormal return type; } if (ch === '<' && stream.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/, false)) { state.f = state.inline = linkInline; if (modeCfg.highlightFormatting) state.formatting = "link"; var type = getType(state); if (type){ type += " "; } else { type = ""; } return type + tokenTypes.linkInline; } if (ch === '<' && stream.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/, false)) { state.f = state.inline = linkInline; if (modeCfg.highlightFormatting) state.formatting = "link"; var type = getType(state); if (type){ type += " "; } else { type = ""; } return type + tokenTypes.linkEmail; } if (modeCfg.xml && ch === '<' && stream.match(/^(!--|\?|!\[CDATA\[|[a-z][a-z0-9-]*(?:\s+[a-z_:.\-]+(?:\s*=\s*[^>]+)?)*\s*(?:>|$))/i, false)) { var end = stream.string.indexOf(">", stream.pos); if (end != -1) { var atts = stream.string.substring(stream.start, end); if (/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(atts)) state.md_inside = true; } stream.backUp(1); state.htmlState = CodeMirror.startState(htmlMode); return switchBlock(stream, state, htmlBlock); } if (modeCfg.xml && ch === '<' && stream.match(/^\/\w*?>/)) { state.md_inside = false; return "tag"; } else if (ch === "*" || ch === "_") { var len = 1, before = stream.pos == 1 ? " " : stream.string.charAt(stream.pos - 2) while (len < 3 && stream.eat(ch)) len++ var after = stream.peek() || " " // See http://spec.commonmark.org/0.27/#emphasis-and-strong-emphasis var leftFlanking = !/\s/.test(after) && (!punctuation.test(after) || /\s/.test(before) || punctuation.test(before)) var rightFlanking = !/\s/.test(before) && (!punctuation.test(before) || /\s/.test(after) || punctuation.test(after)) var setEm = null, setStrong = null if (len % 2) { // Em if (!state.em && leftFlanking && (ch === "*" || !rightFlanking || punctuation.test(before))) setEm = true else if (state.em == ch && rightFlanking && (ch === "*" || !leftFlanking || punctuation.test(after))) setEm = false } if (len > 1) { // Strong if (!state.strong && leftFlanking && (ch === "*" || !rightFlanking || punctuation.test(before))) setStrong = true else if (state.strong == ch && rightFlanking && (ch === "*" || !leftFlanking || punctuation.test(after))) setStrong = false } if (setStrong != null || setEm != null) { if (modeCfg.highlightFormatting) state.formatting = setEm == null ? "strong" : setStrong == null ? "em" : "strong em" if (setEm === true) state.em = ch if (setStrong === true) state.strong = ch var t = getType(state) if (setEm === false) state.em = false if (setStrong === false) state.strong = false return t } } else if (ch === ' ') { if (stream.eat('*') || stream.eat('_')) { // Probably surrounded by spaces if (stream.peek() === ' ') { // Surrounded by spaces, ignore return getType(state); } else { // Not surrounded by spaces, back up pointer stream.backUp(1); } } } if (modeCfg.highlight) { if (ch === '=' && stream.eatWhile(ch)) { if (state.highlight) {// Remove highlight if (modeCfg.highlightFormatting) state.formatting = "highlight"; var t = getType(state); state.highlight = false; return t; } else if (stream.match(/^[^\s>]/, false)) {// Add highlight state.highlight = true; if (modeCfg.highlightFormatting) state.formatting = "highlight"; return getType(state); } } else if (ch === ' ') { if (stream.match(/^==/, true)) { // Probably surrounded by space if (stream.peek() === ' ') { // Surrounded by spaces, ignore return getType(state); } else { // Not surrounded by spaces, back up pointer stream.backUp(2); } } } } if (modeCfg.strikethrough) { if (ch === '~' && stream.eatWhile(ch)) { if (state.strikethrough) {// Remove strikethrough if (modeCfg.highlightFormatting) state.formatting = "strikethrough"; var t = getType(state); state.strikethrough = false; return t; } else if (stream.match(/^[^\s]/, false)) {// Add strikethrough state.strikethrough = true; if (modeCfg.highlightFormatting) state.formatting = "strikethrough"; return getType(state); } } else if (ch === ' ') { if (stream.match('~~', true)) { // Probably surrounded by space if (stream.peek() === ' ') { // Surrounded by spaces, ignore return getType(state); } else { // Not surrounded by spaces, back up pointer stream.backUp(2); } } } } if (modeCfg.emoji && ch === ":" && stream.match(/^(?:[a-z_\d+][a-z_\d+-]*|\-[a-z_\d+][a-z_\d+-]*):/)) { state.emoji = true; if (modeCfg.highlightFormatting) state.formatting = "emoji"; var retType = getType(state); state.emoji = false; return retType; } if (ch === ' ') { if (stream.match(/^ +$/, false)) { state.trailingSpace++; } else if (state.trailingSpace) { state.trailingSpaceNewLine = true; } } return getType(state); } function linkInline(stream, state) { var ch = stream.next(); if (ch === ">") { state.f = state.inline = inlineNormal; if (modeCfg.highlightFormatting) state.formatting = "link"; var type = getType(state); if (type){ type += " "; } else { type = ""; } return type + tokenTypes.linkInline; } stream.match(/^[^>]+/, true); return tokenTypes.linkInline; } function linkHref(stream, state) { // Check if space, and return NULL if so (to avoid marking the space) if(stream.eatSpace()){ return null; } var ch = stream.next(); if (ch === '(' || ch === '[') { state.f = state.inline = getLinkHrefInside(ch === "(" ? ")" : "]"); if (modeCfg.highlightFormatting) state.formatting = "link-string"; state.linkHref = true; return getType(state); } return 'error'; } var linkRE = { ")": /^(?:[^\\\(\)]|\\.|\((?:[^\\\(\)]|\\.)*\))*?(?=\))/, "]": /^(?:[^\\\[\]]|\\.|\[(?:[^\\\[\]]|\\.)*\])*?(?=\])/ } function getLinkHrefInside(endChar) { return function(stream, state) { var ch = stream.next(); if (ch === endChar) { state.f = state.inline = inlineNormal; if (modeCfg.highlightFormatting) state.formatting = "link-string"; var returnState = getType(state); state.linkHref = false; return returnState; } stream.match(linkRE[endChar]) state.linkHref = true; return getType(state); }; } function footnoteLink(stream, state) { if (stream.match(/^([^\]\\]|\\.)*\]:/, false)) { state.f = footnoteLinkInside; stream.next(); // Consume [ if (modeCfg.highlightFormatting) state.formatting = "link"; state.linkText = true; return getType(state); } return switchInline(stream, state, inlineNormal); } function footnoteLinkInside(stream, state) { if (stream.match(']:', true)) { state.f = state.inline = footnoteUrl; if (modeCfg.highlightFormatting) state.formatting = "link"; var returnType = getType(state); state.linkText = false; return returnType; } stream.match(/^([^\]\\]|\\.)+/, true); return tokenTypes.linkText; } function footnoteUrl(stream, state) { // Check if space, and return NULL if so (to avoid marking the space) if(stream.eatSpace()){ return null; } // Match URL stream.match(/^[^\s]+/, true); // Check for link title if (stream.peek() === undefined) { // End of line, set flag to check next line state.linkTitle = true; } else { // More content on line, check if link title stream.match(/^(?:\s+(?:"(?:[^"\\]|\\.)+"|'(?:[^'\\]|\\.)+'|\((?:[^)\\]|\\.)+\)))?/, true); } state.f = state.inline = inlineNormal; return tokenTypes.linkHref + " url"; } var mode = { startState: function() { return { f: blockNormal, prevLine: {stream: null}, thisLine: {stream: null}, block: blockNormal, htmlState: null, indentation: 0, inline: inlineNormal, text: handleText, formatting: false, linkText: false, linkHref: false, linkTitle: false, code: 0, em: false, strong: false, header: 0, setext: 0, hr: false, taskList: false, list: false, listStack: [], quote: 0, trailingSpace: 0, trailingSpaceNewLine: false, strikethrough: false, highlight: false, emoji: false, fencedEndRE: null }; }, copyState: function(s) { return { f: s.f, prevLine: s.prevLine, thisLine: s.thisLine, block: s.block, htmlState: s.htmlState && CodeMirror.copyState(htmlMode, s.htmlState), indentation: s.indentation, localMode: s.localMode, localState: s.localMode ? CodeMirror.copyState(s.localMode, s.localState) : null, inline: s.inline, text: s.text, formatting: false, linkText: s.linkText, linkTitle: s.linkTitle, linkHref: s.linkHref, code: s.code, em: s.em, strong: s.strong, strikethrough: s.strikethrough, highlight: s.highlight, emoji: s.emoji, header: s.header, setext: s.setext, hr: s.hr, taskList: s.taskList, list: s.list, listStack: s.listStack.slice(0), quote: s.quote, indentedCode: s.indentedCode, trailingSpace: s.trailingSpace, trailingSpaceNewLine: s.trailingSpaceNewLine, md_inside: s.md_inside, fencedEndRE: s.fencedEndRE }; }, token: function(stream, state) { // Reset state.formatting state.formatting = false; if (stream != state.thisLine.stream) { state.header = 0; state.hr = false; if (stream.match(/^\s*$/, true)) { blankLine(state); return null; } state.prevLine = state.thisLine state.thisLine = {stream: stream} // Reset state.taskList state.taskList = false; // Reset state.trailingSpace state.trailingSpace = 0; state.trailingSpaceNewLine = false; if (!state.localState) { state.f = state.block; if (state.f != htmlBlock) { var indentation = stream.match(/^\s*/, true)[0].replace(/\t/g, expandedTab).length; state.indentation = indentation; state.indentationDiff = null; if (indentation > 0) return null; } } } return state.f(stream, state); }, innerMode: function(state) { if (state.block == htmlBlock) return {state: state.htmlState, mode: htmlMode}; if (state.localState) return {state: state.localState, mode: state.localMode}; return {state: state, mode: mode}; }, indent: function(state, textAfter, line) { if (state.block == htmlBlock && htmlMode.indent) return htmlMode.indent(state.htmlState, textAfter, line) if (state.localState && state.localMode.indent) return state.localMode.indent(state.localState, textAfter, line) return CodeMirror.Pass }, blankLine: blankLine, getType: getType, blockCommentStart: "", closeBrackets: "()[]{}''\"\"``", fold: "markdown" }; return mode; }, "xml"); CodeMirror.defineMIME("text/markdown", "markdown"); CodeMirror.defineMIME("text/x-markdown", "markdown"); }); !function(){CodeMirror.modeInfo=[{name:"APL",mime:"text/apl",mode:"apl",ext:["dyalog","apl"]},{name:"PGP",mimes:["application/pgp","application/pgp-encrypted","application/pgp-keys","application/pgp-signature"],mode:"asciiarmor",ext:["asc","pgp","sig"]},{name:"ASN.1",mime:"text/x-ttcn-asn",mode:"asn.1",ext:["asn","asn1"]},{name:"Asterisk",mime:"text/x-asterisk",mode:"asterisk",file:/^extensions\.conf$/i},{name:"Brainfuck",mime:"text/x-brainfuck",mode:"brainfuck",ext:["b","bf"]},{name:"C",mime:"text/x-csrc",mode:"clike",ext:["c","h","ino"]},{name:"C++",mime:"text/x-c++src",mode:"clike",ext:["cpp","c++","cc","cxx","hpp","h++","hh","hxx"],alias:["cpp"]},{name:"Cobol",mime:"text/x-cobol",mode:"cobol",ext:["cob","cpy","cbl"]},{name:"C#",mime:"text/x-csharp",mode:"clike",ext:["cs"],alias:["csharp","cs"]},{name:"Clojure",mime:"text/x-clojure",mode:"clojure",ext:["clj","cljc","cljx"]},{name:"ClojureScript",mime:"text/x-clojurescript",mode:"clojure",ext:["cljs"]},{name:"Closure Stylesheets (GSS)",mime:"text/x-gss",mode:"css",ext:["gss"]},{name:"CMake",mime:"text/x-cmake",mode:"cmake",ext:["cmake","cmake.in"],file:/^CMakeLists\.txt$/},{name:"CoffeeScript",mimes:["application/vnd.coffeescript","text/coffeescript","text/x-coffeescript"],mode:"coffeescript",ext:["coffee"],alias:["coffee","coffee-script"]},{name:"Common Lisp",mime:"text/x-common-lisp",mode:"commonlisp",ext:["cl","lisp","el"],alias:["lisp"]},{name:"Cypher",mime:"application/x-cypher-query",mode:"cypher",ext:["cyp","cypher"]},{name:"Cython",mime:"text/x-cython",mode:"python",ext:["pyx","pxd","pxi"]},{name:"Crystal",mime:"text/x-crystal",mode:"crystal",ext:["cr"]},{name:"CSS",mime:"text/css",mode:"css",ext:["css"]},{name:"CQL",mime:"text/x-cassandra",mode:"sql",ext:["cql"]},{name:"D",mime:"text/x-d",mode:"d",ext:["d"]},{name:"Dart",mimes:["application/dart","text/x-dart"],mode:"dart",ext:["dart"]},{name:"diff",mime:"text/x-diff",mode:"diff",ext:["diff","patch"]},{name:"Django",mime:"text/x-django",mode:"django"},{name:"Dockerfile",mime:"text/x-dockerfile",mode:"dockerfile",file:/^Dockerfile$/},{name:"DTD",mime:"application/xml-dtd",mode:"dtd",ext:["dtd"]},{name:"Dylan",mime:"text/x-dylan",mode:"dylan",ext:["dylan","dyl","intr"]},{name:"EBNF",mime:"text/x-ebnf",mode:"ebnf"},{name:"ECL",mime:"text/x-ecl",mode:"ecl",ext:["ecl"]},{name:"edn",mime:"application/edn",mode:"clojure",ext:["edn"]},{name:"Eiffel",mime:"text/x-eiffel",mode:"eiffel",ext:["e"]},{name:"Elm",mime:"text/x-elm",mode:"elm",ext:["elm"]},{name:"Embedded JavaScript",mime:"application/x-ejs",mode:"htmlembedded",ext:["ejs"]},{name:"Embedded Ruby",mime:"application/x-erb",mode:"htmlembedded",ext:["erb"]},{name:"Erlang",mime:"text/x-erlang",mode:"erlang",ext:["erl"]},{name:"Esper",mime:"text/x-esper",mode:"sql"},{name:"Factor",mime:"text/x-factor",mode:"factor",ext:["factor"]},{name:"FCL",mime:"text/x-fcl",mode:"fcl"},{name:"Forth",mime:"text/x-forth",mode:"forth",ext:["forth","fth","4th"]},{name:"Fortran",mime:"text/x-fortran",mode:"fortran",ext:["f","for","f77","f90","f95"]},{name:"F#",mime:"text/x-fsharp",mode:"mllike",ext:["fs"],alias:["fsharp"]},{name:"Gas",mime:"text/x-gas",mode:"gas",ext:["s"]},{name:"Gherkin",mime:"text/x-feature",mode:"gherkin",ext:["feature"]},{name:"GitHub Flavored Markdown",mime:"text/x-gfm",mode:"gfm",file:/^(readme|contributing|history)\.md$/i},{name:"Go",mime:"text/x-go",mode:"go",ext:["go"]},{name:"Groovy",mime:"text/x-groovy",mode:"groovy",ext:["groovy","gradle"],file:/^Jenkinsfile$/},{name:"HAML",mime:"text/x-haml",mode:"haml",ext:["haml"]},{name:"Haskell",mime:"text/x-haskell",mode:"haskell",ext:["hs"]},{name:"Haskell (Literate)",mime:"text/x-literate-haskell",mode:"haskell-literate",ext:["lhs"]},{name:"Haxe",mime:"text/x-haxe",mode:"haxe",ext:["hx"]},{name:"HXML",mime:"text/x-hxml",mode:"haxe",ext:["hxml"]},{name:"ASP.NET",mime:"application/x-aspx",mode:"htmlembedded",ext:["aspx"],alias:["asp","aspx"]},{name:"HTML",mime:"text/html",mode:"htmlmixed",ext:["html","htm","handlebars","hbs"],alias:["xhtml"]},{name:"HTTP",mime:"message/http",mode:"http"},{name:"IDL",mime:"text/x-idl",mode:"idl",ext:["pro"]},{name:"Pug",mime:"text/x-pug",mode:"pug",ext:["jade","pug"],alias:["jade"]},{name:"Java",mime:"text/x-java",mode:"clike",ext:["java"]},{name:"Java Server Pages",mime:"application/x-jsp",mode:"htmlembedded",ext:["jsp"],alias:["jsp"]},{name:"JavaScript",mimes:["text/javascript","text/ecmascript","application/javascript","application/x-javascript","application/ecmascript"],mode:"javascript",ext:["js"],alias:["ecmascript","js","node"]},{name:"JSON",mimes:["application/json","application/x-json"],mode:"javascript",ext:["json","map"],alias:["json5"]},{name:"JSON-LD",mime:"application/ld+json",mode:"javascript",ext:["jsonld"],alias:["jsonld"]},{name:"JSX",mime:"text/jsx",mode:"jsx",ext:["jsx"]},{name:"Jinja2",mime:"text/jinja2",mode:"jinja2",ext:["j2","jinja","jinja2"]},{name:"Julia",mime:"text/x-julia",mode:"julia",ext:["jl"],alias:["jl"]},{name:"Kotlin",mime:"text/x-kotlin",mode:"clike",ext:["kt"]},{name:"LESS",mime:"text/x-less",mode:"css",ext:["less"]},{name:"LiveScript",mime:"text/x-livescript",mode:"livescript",ext:["ls"],alias:["ls"]},{name:"Lua",mime:"text/x-lua",mode:"lua",ext:["lua"]},{name:"Markdown",mime:"text/x-markdown",mode:"markdown",ext:["markdown","md","mkd"]},{name:"mIRC",mime:"text/mirc",mode:"mirc"},{name:"MariaDB SQL",mime:"text/x-mariadb",mode:"sql"},{name:"Mathematica",mime:"text/x-mathematica",mode:"mathematica",ext:["m","nb","wl","wls"]},{name:"Modelica",mime:"text/x-modelica",mode:"modelica",ext:["mo"]},{name:"MUMPS",mime:"text/x-mumps",mode:"mumps",ext:["mps"]},{name:"MS SQL",mime:"text/x-mssql",mode:"sql"},{name:"mbox",mime:"application/mbox",mode:"mbox",ext:["mbox"]},{name:"MySQL",mime:"text/x-mysql",mode:"sql"},{name:"Nginx",mime:"text/x-nginx-conf",mode:"nginx",file:/nginx.*\.conf$/i},{name:"NSIS",mime:"text/x-nsis",mode:"nsis",ext:["nsh","nsi"]},{name:"NTriples",mimes:["application/n-triples","application/n-quads","text/n-triples"],mode:"ntriples",ext:["nt","nq"]},{name:"Objective-C",mime:"text/x-objectivec",mode:"clike",ext:["m"],alias:["objective-c","objc"]},{name:"Objective-C++",mime:"text/x-objectivec++",mode:"clike",ext:["mm"],alias:["objective-c++","objc++"]},{name:"OCaml",mime:"text/x-ocaml",mode:"mllike",ext:["ml","mli","mll","mly"]},{name:"Octave",mime:"text/x-octave",mode:"octave",ext:["m"]},{name:"Oz",mime:"text/x-oz",mode:"oz",ext:["oz"]},{name:"Pascal",mime:"text/x-pascal",mode:"pascal",ext:["p","pas"]},{name:"PEG.js",mime:"null",mode:"pegjs",ext:["jsonld"]},{name:"Perl",mime:"text/x-perl",mode:"perl",ext:["pl","pm"]},{name:"PHP",mimes:["text/x-php","application/x-httpd-php","application/x-httpd-php-open"],mode:"php",ext:["php","php3","php4","php5","php7","phtml"]},{name:"Pig",mime:"text/x-pig",mode:"pig",ext:["pig"]},{name:"Plain Text",mime:"text/plain",mode:"null",ext:["txt","text","conf","def","list","log"]},{name:"PLSQL",mime:"text/x-plsql",mode:"sql",ext:["pls"]},{name:"PostgreSQL",mime:"text/x-pgsql",mode:"sql"},{name:"PowerShell",mime:"application/x-powershell",mode:"powershell",ext:["ps1","psd1","psm1"]},{name:"Properties files",mime:"text/x-properties",mode:"properties",ext:["properties","ini","in"],alias:["ini","properties"]},{name:"ProtoBuf",mime:"text/x-protobuf",mode:"protobuf",ext:["proto"]},{name:"Python",mime:"text/x-python",mode:"python",ext:["BUILD","bzl","py","pyw"],file:/^(BUCK|BUILD)$/},{name:"Puppet",mime:"text/x-puppet",mode:"puppet",ext:["pp"]},{name:"Q",mime:"text/x-q",mode:"q",ext:["q"]},{name:"R",mime:"text/x-rsrc",mode:"r",ext:["r","R"],alias:["rscript"]},{name:"reStructuredText",mime:"text/x-rst",mode:"rst",ext:["rst"],alias:["rst"]},{name:"RPM Changes",mime:"text/x-rpm-changes",mode:"rpm"},{name:"RPM Spec",mime:"text/x-rpm-spec",mode:"rpm",ext:["spec"]},{name:"Ruby",mime:"text/x-ruby",mode:"ruby",ext:["rb"],alias:["jruby","macruby","rake","rb","rbx"]},{name:"Rust",mime:"text/x-rustsrc",mode:"rust",ext:["rs"]},{name:"SAS",mime:"text/x-sas",mode:"sas",ext:["sas"]},{name:"Sass",mime:"text/x-sass",mode:"sass",ext:["sass"]},{name:"Scala",mime:"text/x-scala",mode:"clike",ext:["scala"]},{name:"Scheme",mime:"text/x-scheme",mode:"scheme",ext:["scm","ss"]},{name:"SCSS",mime:"text/x-scss",mode:"css",ext:["scss"]},{name:"Shell",mimes:["text/x-sh","application/x-sh"],mode:"shell",ext:["sh","ksh","bash"],alias:["bash","sh","zsh"],file:/^PKGBUILD$/},{name:"Sieve",mime:"application/sieve",mode:"sieve",ext:["siv","sieve"]},{name:"Slim",mimes:["text/x-slim","application/x-slim"],mode:"slim",ext:["slim"]},{name:"Smalltalk",mime:"text/x-stsrc",mode:"smalltalk",ext:["st"]},{name:"Smarty",mime:"text/x-smarty",mode:"smarty",ext:["tpl"]},{name:"Solr",mime:"text/x-solr",mode:"solr"},{name:"SML",mime:"text/x-sml",mode:"mllike",ext:["sml","sig","fun","smackspec"]},{name:"Soy",mime:"text/x-soy",mode:"soy",ext:["soy"],alias:["closure template"]},{name:"SPARQL",mime:"application/sparql-query",mode:"sparql",ext:["rq","sparql"],alias:["sparul"]},{name:"Spreadsheet",mime:"text/x-spreadsheet",mode:"spreadsheet",alias:["excel","formula"]},{name:"SQL",mime:"text/x-sql",mode:"sql",ext:["sql"]},{name:"SQLite",mime:"text/x-sqlite",mode:"sql"},{name:"Squirrel",mime:"text/x-squirrel",mode:"clike",ext:["nut"]},{name:"Stylus",mime:"text/x-styl",mode:"stylus",ext:["styl"]},{name:"Swift",mime:"text/x-swift",mode:"swift",ext:["swift"]},{name:"sTeX",mime:"text/x-stex",mode:"stex"},{name:"LaTeX",mime:"text/x-latex",mode:"stex",ext:["text","ltx","tex"],alias:["tex"]},{name:"SystemVerilog",mime:"text/x-systemverilog",mode:"verilog",ext:["v","sv","svh"]},{name:"Tcl",mime:"text/x-tcl",mode:"tcl",ext:["tcl"]},{name:"Textile",mime:"text/x-textile",mode:"textile",ext:["textile"]},{name:"TiddlyWiki",mime:"text/x-tiddlywiki",mode:"tiddlywiki"},{name:"Tiki wiki",mime:"text/tiki",mode:"tiki"},{name:"TOML",mime:"text/x-toml",mode:"toml",ext:["toml"]},{name:"Tornado",mime:"text/x-tornado",mode:"tornado"},{name:"troff",mime:"text/troff",mode:"troff",ext:["1","2","3","4","5","6","7","8","9"]},{name:"TTCN",mime:"text/x-ttcn",mode:"ttcn",ext:["ttcn","ttcn3","ttcnpp"]},{name:"TTCN_CFG",mime:"text/x-ttcn-cfg",mode:"ttcn-cfg",ext:["cfg"]},{name:"Turtle",mime:"text/turtle",mode:"turtle",ext:["ttl"]},{name:"TypeScript",mime:"application/typescript",mode:"javascript",ext:["ts"],alias:["ts"]},{name:"TypeScript-JSX",mime:"text/typescript-jsx",mode:"jsx",ext:["tsx"],alias:["tsx"]},{name:"Twig",mime:"text/x-twig",mode:"twig"},{name:"Web IDL",mime:"text/x-webidl",mode:"webidl",ext:["webidl"]},{name:"VB.NET",mime:"text/x-vb",mode:"vb",ext:["vb"]},{name:"VBScript",mime:"text/vbscript",mode:"vbscript",ext:["vbs"]},{name:"Velocity",mime:"text/velocity",mode:"velocity",ext:["vtl"]},{name:"Verilog",mime:"text/x-verilog",mode:"verilog",ext:["v"]},{name:"VHDL",mime:"text/x-vhdl",mode:"vhdl",ext:["vhd","vhdl"]},{name:"Vue.js Component",mimes:["script/x-vue","text/x-vue"],mode:"vue",ext:["vue"]},{name:"XML",mimes:["application/xml","text/xml"],mode:"xml",ext:["xml","xsl","xsd","svg"],alias:["rss","wsdl","xsd"]},{name:"XQuery",mime:"application/xquery",mode:"xquery",ext:["xy","xquery"]},{name:"Yacas",mime:"text/x-yacas",mode:"yacas",ext:["ys"]},{name:"YAML",mimes:["text/x-yaml","text/yaml"],mode:"yaml",ext:["yaml","yml"],alias:["yml"]},{name:"Z80",mime:"text/x-z80",mode:"z80",ext:["z80"]},{name:"mscgen",mime:"text/x-mscgen",mode:"mscgen",ext:["mscgen","mscin","msc"]},{name:"xu",mime:"text/x-xu",mode:"mscgen",ext:["xu"]},{name:"msgenny",mime:"text/x-msgenny",mode:"mscgen",ext:["msgenny"]},{name:"WebAssembly",mime:"text/webassembly",mode:"wast",ext:["wat","wast"]}];for(var e=0;ee.start&&(n.startingInner=!1),s==e.pos&&r.parseDelimiters&&(n.innerActive=n.inner=null),i=r.innerStyle?i?i+" "+r.innerStyle:r.innerStyle:i}for(var o=1/0,t=e.string,l=0;l":[null,"greaterThan"],"≥":[null,"greaterThanOrEqual"],"≠":[null,"notEqual"],"≡":["depth","match"],"≢":[null,"notMatch"],"∈":["enlist","membership"],"⍷":[null,"find"],"∪":["unique","union"],"∩":[null,"intersection"],"∼":["not","without"],"∨":[null,"or"],"∧":[null,"and"],"⍱":[null,"nor"],"⍲":[null,"nand"],"⍴":["shapeOf","reshape"],",":["ravel","catenate"],"⍪":[null,"firstAxisCatenate"],"⌽":["reverse","rotate"],"⊖":["axis1Reverse","axis1Rotate"],"⍉":["transpose",null],"↑":["first","take"],"↓":[null,"drop"],"⊂":["enclose","partitionWithAxis"],"⊃":["diclose","pick"],"⌷":[null,"index"],"⍋":["gradeUp",null],"⍒":["gradeDown",null],"⊤":["encode",null],"⊥":["decode",null],"⍕":["format","formatByExample"],"⍎":["execute",null],"⊣":["stop","left"],"⊢":["pass","right"]},o=/[\.\/⌿⍀¨⍣]/,s=/⍬/,c=/[\+−×÷⌈⌊∣⍳\?⋆⍟○!⌹<≤=>≥≠≡≢∈⍷∪∩∼∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⌷⍋⍒⊤⊥⍕⍎⊣⊢]/,p=/←/,d=/[⍝#].*$/;return{startState:function(){return{prev:!1,func:!1,op:!1,string:!1,escape:!1}},token:function(e,n){var t,l,r,a;return e.eatSpace()?null:'"'===(t=e.next())||"'"===t?(e.eatWhile((r=t,function(e){return(a=e)!==r||"\\"===a})),e.next(),n.prev=!0,"string"):/[\[{\(]/.test(t)?(n.prev=!1,null):/[\]}\)]/.test(t)?(n.prev=!0,null):s.test(t)?(n.prev=!1,"niladic"):/[¯\d]/.test(t)?(n.func?(n.func=!1,n.prev=!1):n.prev=!0,e.eatWhile(/[\w\.]/),"number"):o.test(t)?"operator apl-"+i[t]:p.test(t)?"apl-arrow":c.test(t)?(l="apl-",null!=u[t]&&(n.prev?l+=u[t][1]:l+=u[t][0]),n.func=!0,n.prev=!1,"function "+l):d.test(t)?(e.skipToEnd(),"comment"):"∘"===t&&"."===e.peek()?(e.next(),"function jot-dot"):(e.eatWhile(/[\w\$_]/),n.prev=!0,"keyword")}}}),CodeMirror.defineMIME("text/apl","apl"); // asciiarmor !function(){function a(e){var t=e.match(/^\s*\S/);return e.skipToEnd(),t?"error":null}CodeMirror.defineMode("asciiarmor",function(){return{token:function(e,t){var r;if("top"==t.state)return e.sol()&&(r=e.match(/^-----BEGIN (.*)?-----\s*$/))?(t.state="headers",t.type=r[1],"tag"):a(e);if("headers"!=t.state)return"header"==t.state?(e.skipToEnd(),t.state="headers","string"):"body"==t.state?e.sol()&&(r=e.match(/^-----END (.*)?-----\s*$/))?r[1]!=t.type?"error":(t.state="end","tag"):e.eatWhile(/[A-Za-z0-9+\/=]/)?null:(e.next(),"error"):"end"==t.state?a(e):void 0;if(e.sol()&&e.match(/^\w+:/))return t.state="header","atom";e=a(e);return e&&(t.state="body"),e},blankLine:function(e){"headers"==e.state&&(e.state="body")},startState:function(){return{state:"top",type:null}}}}),CodeMirror.defineMIME("application/pgp","asciiarmor"),CodeMirror.defineMIME("application/pgp-encrypted","asciiarmor"),CodeMirror.defineMIME("application/pgp-keys","asciiarmor"),CodeMirror.defineMIME("application/pgp-signature","asciiarmor")}(); // asn.1 !function(){function e(e){for(var t={},n=e.split(" "),r=0;r?$/.test(n)?(t.extenExten=!0,t.extenStart=!1,"strong"):(t.extenStart=!1,e.skipToEnd(),"error")):t.extenExten?(t.extenExten=!1,t.extenPriority=!0,e.eatWhile(/[^,]/),t.extenInclude&&(e.skipToEnd(),t.extenPriority=!1,t.extenInclude=!1),t.extenSame&&(t.extenPriority=!1,t.extenSame=!1,t.extenApplication=!0),"tag"):t.extenPriority?(t.extenPriority=!1,t.extenApplication=!0,e.next(),t.extenSame?null:(e.eatWhile(/[^,]/),"number")):t.extenApplication?(e.eatWhile(/,/),","===(n=e.current())?null:(e.eatWhile(/\w/),n=e.current().toLowerCase(),t.extenApplication=!1,-1!==a.indexOf(n)?"def strong":null)):function(e,t){var n="",a=e.next();if(t.blockComment)return"-"==a&&e.match("-;",!0)?t.blockComment=!1:e.skipTo("--;")?(e.next(),e.next(),e.next(),t.blockComment=!1):e.skipToEnd(),"comment";if(";"==a)return e.match("--",!0)&&!e.match("-",!1)?t.blockComment=!0:e.skipToEnd(),"comment";if("["==a)return e.skipTo("]"),e.eat("]"),"header";if('"'==a)return e.skipTo('"'),"string";if("'"==a)return e.skipTo("'"),"string-2";if("#"==a&&(e.eatWhile(/\w/),n=e.current(),-1!==r.indexOf(n)))return e.skipToEnd(),"strong";if("$"==a&&"{"==e.peek())return e.skipTo("}"),e.eat("}"),"variable-3";if(e.eatWhile(/\w/),n=e.current(),-1!==i.indexOf(n)){switch(t.extenStart=!0,n){case"same":t.extenSame=!0;break;case"include":case"switch":case"ignorepat":t.extenInclude=!0}return"atom"}}(e,t)},blockCommentStart:";--",blockCommentEnd:"--;",lineComment:";"}}),CodeMirror.defineMIME("text/x-asterisk","asterisk"); // brainfuck !function(){var o="><+-.,[]".split("");CodeMirror.defineMode("brainfuck",function(){return{startState:function(){return{commentLine:!1,left:0,right:0,commentLoop:!1}},token:function(e,n){if(e.eatSpace())return null;e.sol()&&(n.commentLine=!1);var t=e.next().toString();return-1===o.indexOf(t)?(n.commentLine=!0,e.eol()&&(n.commentLine=!1),"comment"):!0===n.commentLine?(e.eol()&&(n.commentLine=!1),"comment"):"]"===t||"["===t?("["===t?n.left++:n.right++,"bracket"):"+"===t||"-"===t?"keyword":"<"===t||">"===t?"atom":"."===t||","===t?"def":void(e.eol()&&(n.commentLine=!1))}}}),CodeMirror.defineMIME("text/x-brainfuck","brainfuck")}(); // clike !function(){function N(e,t,n,r,o,a){this.indented=e,this.column=t,this.type=n,this.info=r,this.align=o,this.prev=a}function L(e,t,n,r){var o=e.indented;return e.context&&"statement"==e.context.type&&"statement"!=n&&(o=e.context.indented),e.context=new N(o,t,n,r,null,e.context)}function D(e){var t=e.context.type;return")"!=t&&"]"!=t&&"}"!=t||(e.indented=e.context.indented),e.context=e.context.prev}function P(e,t,n){return"variable"==t.prevToken||"type"==t.prevToken||(!!/\S(?:[^- ]>|[*\]])\s*$|\*$/.test(e.string.slice(0,n))||(!(!t.typeAtEndOfLine||e.column()!=e.indentation())||void 0))}function E(e){for(;;){if(!e||"top"==e.type)return 1;if("}"==e.type&&"namespace"!=e.prev.info)return;e=e.prev}}function e(e){for(var t={},n=e.split(" "),r=0;r!?|\/]/,S=i.isIdentifierChar||/[\w\$_\xa1-\uffff]/,T=i.isReservedIdentifier||!1;function C(e,t){var a,n=e.next();if(g[n]){var r=g[n](e,t);if(!1!==r)return r}if('"'==n||"'"==n)return t.tokenize=(a=n,function(e,t){for(var n,r=!1,o=!1;null!=(n=e.next());){if(n==a&&!r){o=!0;break}r=!r&&"\\"==n}return!o&&(r||k)||(t.tokenize=null),"string"}),t.tokenize(e,t);if(v.test(n)){if(e.backUp(1),e.match(w))return"number";e.next()}if(b.test(n))return l=n,null;if("/"==n){if(e.eat("*"))return(t.tokenize=I)(e,t);if(e.eat("/"))return e.skipToEnd(),"comment"}if(_.test(n)){for(;!e.match(/^\/[\/*]/,!1)&&e.eat(_););return"operator"}if(e.eatWhile(S),x)for(;e.match(x);)e.eatWhile(S);n=e.current();return z(o,n)?(z(m,n)&&(l="newstatement"),z(h,n)&&(s=!0),"keyword"):z(f,n)?"type":z(p,n)||T&&T(n)?(z(m,n)&&(l="newstatement"),"builtin"):z(y,n)?"atom":"variable"}function I(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=null;break}r="*"==n}return"comment"}function M(e,t){i.typeFirstDefinitions&&e.eol()&&E(t.context)&&(t.typeAtEndOfLine=P(e,t,e.pos))}return{startState:function(e){return{tokenize:null,context:new N((e||0)-c,0,"top",null,!1),indented:0,startOfLine:!0,prevToken:null}},token:function(e,t){var n=t.context;if(e.sol()&&(null==n.align&&(n.align=!1),t.indented=e.indentation(),t.startOfLine=!0),e.eatSpace())return M(e,t),null;l=s=null;var r,o=(t.tokenize||C)(e,t);if("comment"==o||"meta"==o)return o;if(null==n.align&&(n.align=!0),";"==l||":"==l||","==l&&e.match(/^\s*(?:\/\/.*)?$/,!1))for(;"statement"==t.context.type;)D(t);else if("{"==l)L(t,e.column(),"}");else if("["==l)L(t,e.column(),"]");else if("("==l)L(t,e.column(),")");else if("}"==l){for(;"statement"==n.type;)n=D(t);for("}"==n.type&&(n=D(t));"statement"==n.type;)n=D(t)}else l==n.type?D(t):a&&(("}"==n.type||"top"==n.type)&&";"!=l||"statement"==n.type&&"newstatement"==l)&&L(t,e.column(),"statement",e.current());return"variable"==o&&("def"==t.prevToken||i.typeFirstDefinitions&&P(e,t,e.start)&&E(t.context)&&e.match(/^\s*\(/,!1))&&(o="def"),!g.token||void 0!==(r=g.token(e,t,o))&&(o=r),"def"==o&&!1===i.styleDefs&&(o="variable"),t.startOfLine=!1,t.prevToken=s?"def":o||l,M(e,t),o},indent:function(e,t){if(e.tokenize!=C&&null!=e.tokenize||e.typeAtEndOfLine)return CodeMirror.Pass;var n=e.context,r=t&&t.charAt(0),o=r==n.type;if("statement"==n.type&&"}"==r&&(n=n.prev),i.dontIndentStatements)for(;"statement"==n.type&&i.dontIndentStatements.test(n.info);)n=n.prev;if(g.indent){var a=g.indent(e,n,t,c);if("number"==typeof a)return a}a=n.prev&&"switch"==n.prev.info;if(i.allmanIndentation&&/[{(]/.test(r)){for(;"top"!=n.type&&"}"!=n.type;)n=n.prev;return n.indented}return"statement"==n.type?n.indented+("{"==r?0:u):!n.align||d&&")"==n.type?")"!=n.type||o?n.indented+(o?0:c)+(o||!a||/^(?:case|default)\b/.test(t)?0:c):n.indented+u:n.column+(o?0:1)},electricInput:e?/^\s*(?:case .*?:|default:|\{\}?|\})$/:/^\s*[{}]$/,blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:"//",fold:"brace"}});var t="auto if break case register continue return default do sizeof static else struct switch extern typedef union for goto while enum const volatile inline restrict asm fortran",n="alignas alignof and and_eq audit axiom bitand bitor catch class compl concept constexpr const_cast decltype delete dynamic_cast explicit export final friend import module mutable namespace new noexcept not not_eq operator or or_eq override private protected public reinterpret_cast requires static_assert static_cast template this thread_local throw try typeid typename using virtual xor xor_eq",r="bycopy byref in inout oneway out self super atomic nonatomic retain copy readwrite readonly strong weak assign typeof nullable nonnull null_resettable _cmd @interface @implementation @end @protocol @encode @property @synthesize @dynamic @class @public @package @private @protected @required @optional @try @catch @finally @import @selector @encode @defs @synchronized @autoreleasepool @compatibility_alias @available",o="FOUNDATION_EXPORT FOUNDATION_EXTERN NS_INLINE NS_FORMAT_FUNCTION NS_RETURNS_RETAINEDNS_ERROR_ENUM NS_RETURNS_NOT_RETAINED NS_RETURNS_INNER_POINTER NS_DESIGNATED_INITIALIZER NS_ENUM NS_OPTIONS NS_REQUIRES_NIL_TERMINATION NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_SWIFT_NAME NS_REFINED_FOR_SWIFT",a=e("int long char short double float unsigned signed void bool"),i=e("SEL instancetype id Class Protocol BOOL");function l(e){return z(a,e)||/.+_t$/.test(e)}function s(e){return l(e)||z(i,e)}var c="case do else for if switch while struct enum union",u="struct enum union";function d(e,t){if(!t.startOfLine)return!1;for(var n,r=null;n=e.peek();){if("\\"==n&&e.match(/^.$/)){r=d;break}if("/"==n&&e.match(/^\/[\/\*]/,!1))break;e.next()}return t.tokenize=r,"meta"}function f(e,t){return"type"==t.prevToken&&"type"}function p(e){return!(!e||e.length<2)&&("_"==e[0]&&("_"==e[1]||e[1]!==e[1].toLowerCase()))}function m(e){return e.eatWhile(/[\w\.']/),"number"}function h(e,t){if(e.backUp(1),e.match(/^(?:R|u8R|uR|UR|LR)/)){var n=e.match(/^"([^\s\\()]{0,16})\(/);return n?(t.cpp11RawStringDelim=n[1],(t.tokenize=k)(e,t)):!1}return e.match(/^(?:u8|u|U|L)/)?!!e.match(/^["']/,!1)&&"string":(e.next(),!1)}function y(e){e=/(\w+)::~?(\w+)$/.exec(e);return e&&e[1]==e[2]}function g(e,t){for(var n;null!=(n=e.next());)if('"'==n&&!e.eat('"')){t.tokenize=null;break}return"string"}function k(e,t){var n=t.cpp11RawStringDelim.replace(/[^\w\s]/g,"\\$&");return e.match(new RegExp(".*?\\)"+n+'"'))?t.tokenize=null:e.skipToEnd(),"string"}function x(e,t){"string"==typeof e&&(e=[e]);var n=[];function r(e){if(e)for(var t in e)e.hasOwnProperty(t)&&n.push(t)}r(t.keywords),r(t.types),r(t.builtin),r(t.atoms),n.length&&(t.helperType=e[0],CodeMirror.registerHelper("hintWords",e[0],n));for(var o=0;o!?|\/#:@]/,hooks:{"@":function(e){return e.eatWhile(/[\w\$_]/),"meta"},'"':function(e,t){return!!e.match('""')&&(t.tokenize=b,t.tokenize(e,t))},"'":function(e){return e.eatWhile(/[\w\$_\xa1-\uffff]/),"atom"},"=":function(e,t){var n=t.context;return!("}"!=n.type||!n.align||!e.eat(">"))&&(t.context=new N(n.indented,n.column,n.type,n.info,null,n.prev),"operator")},"/":function(e,t){return!!e.eat("*")&&(t.tokenize=v(1),t.tokenize(e,t))}},modeProps:{closeBrackets:{pairs:'()[]{}""',triples:'"'}}}),x("text/x-kotlin",{name:"clike",keywords:e("package as typealias class interface this super val operator var fun for is in This throw return annotation break continue object if else while do try when !in !is as? file import where by get set abstract enum open inner override private public internal protected catch finally out final vararg reified dynamic companion constructor init sealed field property receiver param sparam lateinit data inline noinline tailrec external annotation crossinline const operator infix suspend actual expect setparam value"),types:e("Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable Compiler Double Exception Float Integer Long Math Number Object Package Pair Process Runtime Runnable SecurityManager Short StackTraceElement StrictMath String StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void Annotation Any BooleanArray ByteArray Char CharArray DeprecationLevel DoubleArray Enum FloatArray Function Int IntArray Lazy LazyThreadSafetyMode LongArray Nothing ShortArray Unit"),intendSwitch:!1,indentStatements:!1,multiLineStrings:!0,number:/^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+(\.\d+)?|\.\d+)(?:e[-+]?[\d_]+)?)(u|ll?|l|f)?/i,blockKeywords:e("catch class do else finally for if where try while enum"),defKeywords:e("class val var object interface fun"),atoms:e("true false null this"),hooks:{"@":function(e){return e.eatWhile(/[\w\$_]/),"meta"},"*":function(e,t){return"."==t.prevToken?"variable":"operator"},'"':function(e,t){var a;return t.tokenize=(a=e.match('""'),function(e,t){for(var n,r=!1,o=!1;!e.eol();){if(!a&&!r&&e.match('"')){o=!0;break}if(a&&e.match('"""')){o=!0;break}n=e.next(),!r&&"$"==n&&e.match("{")&&e.skipTo("}"),r=!r&&"\\"==n&&!a}return!o&&a||(t.tokenize=null),"string"}),t.tokenize(e,t)},"/":function(e,t){return!!e.eat("*")&&(t.tokenize=v(1),t.tokenize(e,t))},indent:function(e,t,n,r){var o=n&&n.charAt(0);return"}"!=e.prevToken&&")"!=e.prevToken||""!=n?"operator"==e.prevToken&&"}"!=n&&"}"!=e.context.type||"variable"==e.prevToken&&"."==o||("}"==e.prevToken||")"==e.prevToken)&&"."==o?2*r+t.indented:t.align&&"}"==t.type?t.indented+(e.context.type==(n||"").charAt(0)?0:r):void 0:e.indented}},modeProps:{closeBrackets:{triples:'"'}}}),x(["x-shader/x-vertex","x-shader/x-fragment"],{name:"clike",keywords:e("sampler1D sampler2D sampler3D samplerCube sampler1DShadow sampler2DShadow const attribute uniform varying break continue discard return for while do if else struct in out inout"),types:e("float int bool void vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 mat2 mat3 mat4"),blockKeywords:e("for while do if else struct"),builtin:e("radians degrees sin cos tan asin acos atan pow exp log exp2 sqrt inversesqrt abs sign floor ceil fract mod min max clamp mix step smoothstep length distance dot cross normalize ftransform faceforward reflect refract matrixCompMult lessThan lessThanEqual greaterThan greaterThanEqual equal notEqual any all not texture1D texture1DProj texture1DLod texture1DProjLod texture2D texture2DProj texture2DLod texture2DProjLod texture3D texture3DProj texture3DLod texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj shadow2DProj shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod dFdx dFdy fwidth noise1 noise2 noise3 noise4"),atoms:e("true false gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogCoord gl_PointCoord gl_Position gl_PointSize gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_TexCoord gl_FogFragCoord gl_FragCoord gl_FrontFacing gl_FragData gl_FragDepth gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse gl_TextureMatrixTranspose gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose gl_TextureMatrixInverseTranspose gl_NormalScale gl_DepthRange gl_ClipPlane gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ gl_FogParameters gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits gl_MaxDrawBuffers"),indentSwitch:!1,hooks:{"#":d},modeProps:{fold:["brace","include"]}}),x("text/x-nesc",{name:"clike",keywords:e(t+" as atomic async call command component components configuration event generic implementation includes interface module new norace nx_struct nx_union post provides signal task uses abstract extends"),types:l,blockKeywords:e(c),atoms:e("null true false"),hooks:{"#":d},modeProps:{fold:["brace","include"]}}),x("text/x-objectivec",{name:"clike",keywords:e(t+" "+r),types:s,builtin:e(o),blockKeywords:e(c+" @synthesize @try @catch @finally @autoreleasepool @synchronized"),defKeywords:e(u+" @interface @implementation @protocol @class"),dontIndentStatements:/^@.*$/,typeFirstDefinitions:!0,atoms:e("YES NO NULL Nil nil true false nullptr"),isReservedIdentifier:p,hooks:{"#":d,"*":f},modeProps:{fold:["brace","include"]}}),x("text/x-objectivec++",{name:"clike",keywords:e(t+" "+r+" "+n),types:s,builtin:e(o),blockKeywords:e(c+" @synthesize @try @catch @finally @autoreleasepool @synchronized class try catch"),defKeywords:e(u+" @interface @implementation @protocol @class class namespace"),dontIndentStatements:/^@.*$|^template$/,typeFirstDefinitions:!0,atoms:e("YES NO NULL Nil nil true false nullptr"),isReservedIdentifier:p,hooks:{"#":d,"*":f,u:h,U:h,L:h,R:h,0:m,1:m,2:m,3:m,4:m,5:m,6:m,7:m,8:m,9:m,token:function(e,t,n){if("variable"==n&&"("==e.peek()&&(";"==t.prevToken||null==t.prevToken||"}"==t.prevToken)&&y(e.current()))return"def"}},namespaceSeparator:"::",modeProps:{fold:["brace","include"]}}),x("text/x-squirrel",{name:"clike",keywords:e("base break clone continue const default delete enum extends function in class foreach local resume return this throw typeof yield constructor instanceof static"),types:l,blockKeywords:e("case catch class else for foreach if switch try while"),defKeywords:e("function local class"),typeFirstDefinitions:!0,atoms:e("true false null"),hooks:{"#":d},modeProps:{fold:["brace","include"]}});var w=null;x("text/x-ceylon",{name:"clike",keywords:e("abstracts alias assembly assert assign break case catch class continue dynamic else exists extends finally for function given if import in interface is let module new nonempty object of out outer package return satisfies super switch then this throw try value void while"),types:function(e){e=e.charAt(0);return e===e.toUpperCase()&&e!==e.toLowerCase()},blockKeywords:e("case catch class dynamic else finally for function if interface module new object switch try while"),defKeywords:e("class dynamic function interface module object package value"),builtin:e("abstract actual aliased annotation by default deprecated doc final formal late license native optional sealed see serializable shared suppressWarnings tagged throws variable"),isPunctuationChar:/[\[\]{}\(\),;\:\.`]/,isOperatorChar:/[+\-*&%=<>!?|^~:\/]/,numberStart:/[\d#$]/,number:/^(?:#[\da-fA-F_]+|\$[01_]+|[\d_]+[kMGTPmunpf]?|[\d_]+\.[\d_]+(?:[eE][-+]?\d+|[kMGTPmunpf]|)|)/i,multiLineStrings:!0,typeFirstDefinitions:!0,atoms:e("true false null larger smaller equal empty finished"),indentSwitch:!1,styleDefs:!1,hooks:{"@":function(e){return e.eatWhile(/[\w\$_]/),"meta"},'"':function(e,t){return t.tokenize=function a(i){return function(e,t){for(var n,r=!1,o=!1;!e.eol();){if(!r&&e.match('"')&&("single"==i||e.match('""'))){o=!0;break}if(!r&&e.match("``")){w=a(i),o=!0;break}n=e.next(),r="single"==i&&!r&&"\\"==n}return o&&(t.tokenize=null),"string"}}(e.match('""')?"triple":"single"),t.tokenize(e,t)},"`":function(e,t){return!(!w||!e.match("`"))&&(t.tokenize=w,w=null,t.tokenize(e,t))},"'":function(e){return e.eatWhile(/[\w\$_\xa1-\uffff]/),"atom"},token:function(e,t,n){if(("variable"==n||"type"==n)&&"."==t.prevToken)return"variable-2"}},modeProps:{fold:["brace","import"],closeBrackets:{triples:'"'}}})}(); // clojure CodeMirror.defineMode("clojure",function(o){var e=["false","nil","true"],t=[".","catch","def","do","if","monitor-enter","monitor-exit","new","quote","recur","set!","throw","try","var"],n=["*","*'","*1","*2","*3","*agent*","*allow-unresolved-vars*","*assert*","*clojure-version*","*command-line-args*","*compile-files*","*compile-path*","*compiler-options*","*data-readers*","*default-data-reader-fn*","*e","*err*","*file*","*flush-on-newline*","*fn-loader*","*in*","*math-context*","*ns*","*out*","*print-dup*","*print-length*","*print-level*","*print-meta*","*print-namespace-maps*","*print-readably*","*read-eval*","*reader-resolver*","*source-path*","*suppress-read*","*unchecked-math*","*use-context-classloader*","*verbose-defrecords*","*warn-on-reflection*","+","+'","-","-'","->","->>","->ArrayChunk","->Eduction","->Vec","->VecNode","->VecSeq","-cache-protocol-fn","-reset-methods","..","/","<","<=","=","==",">",">=","EMPTY-NODE","Inst","StackTraceElement->vec","Throwable->map","accessor","aclone","add-classpath","add-watch","agent","agent-error","agent-errors","aget","alength","alias","all-ns","alter","alter-meta!","alter-var-root","amap","ancestors","and","any?","apply","areduce","array-map","as->","aset","aset-boolean","aset-byte","aset-char","aset-double","aset-float","aset-int","aset-long","aset-short","assert","assoc","assoc!","assoc-in","associative?","atom","await","await-for","await1","bases","bean","bigdec","bigint","biginteger","binding","bit-and","bit-and-not","bit-clear","bit-flip","bit-not","bit-or","bit-set","bit-shift-left","bit-shift-right","bit-test","bit-xor","boolean","boolean-array","boolean?","booleans","bound-fn","bound-fn*","bound?","bounded-count","butlast","byte","byte-array","bytes","bytes?","case","cast","cat","char","char-array","char-escape-string","char-name-string","char?","chars","chunk","chunk-append","chunk-buffer","chunk-cons","chunk-first","chunk-next","chunk-rest","chunked-seq?","class","class?","clear-agent-errors","clojure-version","coll?","comment","commute","comp","comparator","compare","compare-and-set!","compile","complement","completing","concat","cond","cond->","cond->>","condp","conj","conj!","cons","constantly","construct-proxy","contains?","count","counted?","create-ns","create-struct","cycle","dec","dec'","decimal?","declare","dedupe","default-data-readers","definline","definterface","defmacro","defmethod","defmulti","defn","defn-","defonce","defprotocol","defrecord","defstruct","deftype","delay","delay?","deliver","denominator","deref","derive","descendants","destructure","disj","disj!","dissoc","dissoc!","distinct","distinct?","doall","dorun","doseq","dosync","dotimes","doto","double","double-array","double?","doubles","drop","drop-last","drop-while","eduction","empty","empty?","ensure","ensure-reduced","enumeration-seq","error-handler","error-mode","eval","even?","every-pred","every?","ex-data","ex-info","extend","extend-protocol","extend-type","extenders","extends?","false?","ffirst","file-seq","filter","filterv","find","find-keyword","find-ns","find-protocol-impl","find-protocol-method","find-var","first","flatten","float","float-array","float?","floats","flush","fn","fn?","fnext","fnil","for","force","format","frequencies","future","future-call","future-cancel","future-cancelled?","future-done?","future?","gen-class","gen-interface","gensym","get","get-in","get-method","get-proxy-class","get-thread-bindings","get-validator","group-by","halt-when","hash","hash-combine","hash-map","hash-ordered-coll","hash-set","hash-unordered-coll","ident?","identical?","identity","if-let","if-not","if-some","ifn?","import","in-ns","inc","inc'","indexed?","init-proxy","inst-ms","inst-ms*","inst?","instance?","int","int-array","int?","integer?","interleave","intern","interpose","into","into-array","ints","io!","isa?","iterate","iterator-seq","juxt","keep","keep-indexed","key","keys","keyword","keyword?","last","lazy-cat","lazy-seq","let","letfn","line-seq","list","list*","list?","load","load-file","load-reader","load-string","loaded-libs","locking","long","long-array","longs","loop","macroexpand","macroexpand-1","make-array","make-hierarchy","map","map-entry?","map-indexed","map?","mapcat","mapv","max","max-key","memfn","memoize","merge","merge-with","meta","method-sig","methods","min","min-key","mix-collection-hash","mod","munge","name","namespace","namespace-munge","nat-int?","neg-int?","neg?","newline","next","nfirst","nil?","nnext","not","not-any?","not-empty","not-every?","not=","ns","ns-aliases","ns-imports","ns-interns","ns-map","ns-name","ns-publics","ns-refers","ns-resolve","ns-unalias","ns-unmap","nth","nthnext","nthrest","num","number?","numerator","object-array","odd?","or","parents","partial","partition","partition-all","partition-by","pcalls","peek","persistent!","pmap","pop","pop!","pop-thread-bindings","pos-int?","pos?","pr","pr-str","prefer-method","prefers","primitives-classnames","print","print-ctor","print-dup","print-method","print-simple","print-str","printf","println","println-str","prn","prn-str","promise","proxy","proxy-call-with-super","proxy-mappings","proxy-name","proxy-super","push-thread-bindings","pvalues","qualified-ident?","qualified-keyword?","qualified-symbol?","quot","rand","rand-int","rand-nth","random-sample","range","ratio?","rational?","rationalize","re-find","re-groups","re-matcher","re-matches","re-pattern","re-seq","read","read-line","read-string","reader-conditional","reader-conditional?","realized?","record?","reduce","reduce-kv","reduced","reduced?","reductions","ref","ref-history-count","ref-max-history","ref-min-history","ref-set","refer","refer-clojure","reify","release-pending-sends","rem","remove","remove-all-methods","remove-method","remove-ns","remove-watch","repeat","repeatedly","replace","replicate","require","reset!","reset-meta!","reset-vals!","resolve","rest","restart-agent","resultset-seq","reverse","reversible?","rseq","rsubseq","run!","satisfies?","second","select-keys","send","send-off","send-via","seq","seq?","seqable?","seque","sequence","sequential?","set","set-agent-send-executor!","set-agent-send-off-executor!","set-error-handler!","set-error-mode!","set-validator!","set?","short","short-array","shorts","shuffle","shutdown-agents","simple-ident?","simple-keyword?","simple-symbol?","slurp","some","some->","some->>","some-fn","some?","sort","sort-by","sorted-map","sorted-map-by","sorted-set","sorted-set-by","sorted?","special-symbol?","spit","split-at","split-with","str","string?","struct","struct-map","subs","subseq","subvec","supers","swap!","swap-vals!","symbol","symbol?","sync","tagged-literal","tagged-literal?","take","take-last","take-nth","take-while","test","the-ns","thread-bound?","time","to-array","to-array-2d","trampoline","transduce","transient","tree-seq","true?","type","unchecked-add","unchecked-add-int","unchecked-byte","unchecked-char","unchecked-dec","unchecked-dec-int","unchecked-divide-int","unchecked-double","unchecked-float","unchecked-inc","unchecked-inc-int","unchecked-int","unchecked-long","unchecked-multiply","unchecked-multiply-int","unchecked-negate","unchecked-negate-int","unchecked-remainder-int","unchecked-short","unchecked-subtract","unchecked-subtract-int","underive","unquote","unquote-splicing","unreduced","unsigned-bit-shift-right","update","update-in","update-proxy","uri?","use","uuid?","val","vals","var-get","var-set","var?","vary-meta","vec","vector","vector-of","vector?","volatile!","volatile?","vreset!","vswap!","when","when-first","when-let","when-not","when-some","while","with-bindings","with-bindings*","with-in-str","with-loading-context","with-local-vars","with-meta","with-open","with-out-str","with-precision","with-redefs","with-redefs-fn","xml-seq","zero?","zipmap"];CodeMirror.registerHelper("hintWords","clojure",[].concat(e,t,n));var r=h(e),a=h(t),s=h(n),i=h(["->","->>","as->","binding","bound-fn","case","catch","comment","cond","cond->","cond->>","condp","def","definterface","defmethod","defn","defmacro","defprotocol","defrecord","defstruct","deftype","do","doseq","dotimes","doto","extend","extend-protocol","extend-type","fn","for","future","if","if-let","if-not","if-some","let","letfn","locking","loop","ns","proxy","reify","struct-map","some->","some->>","try","when","when-first","when-let","when-not","when-some","while","with-bindings","with-bindings*","with-in-str","with-loading-context","with-local-vars","with-meta","with-open","with-out-str","with-precision","with-redefs","with-redefs-fn"]),d=/^(?:[\\\[\]\s"(),;@^`{}~]|$)/,c=/^(?:[+\-]?\d+(?:(?:N|(?:[eE][+\-]?\d+))|(?:\.?\d*(?:M|(?:[eE][+\-]?\d+))?)|\/\d+|[xX][0-9a-fA-F]+|r[0-9a-zA-Z]+)?(?=[\\\[\]\s"#'(),;@^`{}~]|$))/,l=/^(?:\\(?:backspace|formfeed|newline|return|space|tab|o[0-7]{3}|u[0-9A-Fa-f]{4}|x[0-9A-Fa-f]{4}|.)?(?=[\\\[\]\s"(),;@^`{}~]|$))/,u=/^(?:(?:[^\\\/\[\]\d\s"#'(),;@^`{}~.][^\\\[\]\s"(),;@^`{}~.\/]*(?:\.[^\\\/\[\]\d\s"#'(),;@^`{}~.][^\\\[\]\s"(),;@^`{}~.\/]*)*\/)?(?:\/|[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*(?=[\\\[\]\s"(),;@^`{}~]|$))/;function p(e,t){if(e.eatSpace()||e.eat(","))return["space",null];if(e.match(c))return[null,"number"];if(e.match(l))return[null,"string-2"];if(e.eat(/^"/))return(t.tokenize=m)(e,t);if(e.eat(/^[(\[{]/))return["open","bracket"];if(e.eat(/^[)\]}]/))return["close","bracket"];if(e.eat(/^;/))return e.skipToEnd(),["space","comment"];if(e.eat(/^[#'@^`~]/))return[null,"meta"];var n=e.match(u),n=n&&n[0];return n?"comment"===n&&"("===t.lastToken?(t.tokenize=f)(e,t):y(n,r)||":"===n.charAt(0)?["symbol","atom"]:y(n,a)||y(n,s)?["symbol","keyword"]:"("===t.lastToken?["symbol","builtin"]:["symbol","variable"]:(e.next(),e.eatWhile(function(e){return!y(e,d)}),[null,"error"])}function m(e,t){for(var n,r=!1;n=e.next();){if('"'===n&&!r){t.tokenize=p;break}r=!r&&"\\"===n}return[null,"string"]}function f(e,t){for(var n,r=1;n=e.next();)if(")"===n&&r--,"("===n&&r++,0===r){e.backUp(1),t.tokenize=p;break}return["space","comment"]}function h(e){for(var t={},n=0;n >= "),P={digit:/\d/,digit_or_colon:/[\d:]/,hex:/[0-9a-f]/i,sign:/[+-]/,exponent:/e/i,keyword_char:/[^\s\(\[\;\)\]]/,symbol:/[\w*+\-]/};return{startState:function(){return{indentStack:null,indentation:0,mode:!1}},token:function(E,T){if(null==T.indentStack&&E.sol()&&(T.indentation=6),E.eatSpace())return null;var I,N=null;if("string"===T.mode){for(var R;null!=(R=E.next());)if(('"'==R||"'"==R)&&!E.match(/['"]/,!1)){T.mode=!1;break}N=C}else{var A=E.next(),O=E.column();if(0<=O&&O<=5)N="def";else if(72<=O&&O<=79)E.skipToEnd(),N="header";else if("*"==A&&6==O)E.skipToEnd(),N="comment";else if('"'==A||"'"==A)T.mode="string",N=C;else if("'"!=A||P.digit_or_colon.test(E.peek()))if("."==A)N="link";else if(I=E,"0"===(A=A)&&I.eat(/x/i)?(I.eatWhile(P.hex),1):("+"!=A&&"-"!=A||!P.digit.test(I.peek())||(I.eat(P.sign),A=I.next()),P.digit.test(A)&&(I.eat(A),I.eatWhile(P.digit),"."==I.peek()&&(I.eat("."),I.eatWhile(P.digit)),I.eat(P.exponent)&&(I.eat(P.sign),I.eatWhile(P.digit)),1)))N="number";else{if(E.current().match(P.symbol))for(;O<71&&void 0!==E.eat(P.symbol);)O++;N=S&&S.propertyIsEnumerable(E.current().toUpperCase())?"keyword":U&&U.propertyIsEnumerable(E.current().toUpperCase())?"builtin":D&&D.propertyIsEnumerable(E.current().toUpperCase())?L:null}else N=L}return N},indent:function(E){return null==E.indentStack?E.indentation:E.indentStack.indent}}}),CodeMirror.defineMIME("text/x-cobol","cobol"); // coffeescript CodeMirror.defineMode("coffeescript",function(f,i){var c="error";function e(e){return new RegExp("^(("+e.join(")|(")+"))\\b")}var o=/^(?:->|=>|\+[+=]?|-[\-=]?|\*[\*=]?|\/[\/=]?|[=!]=|<[><]?=?|>>?=?|%=?|&=?|\|=?|\^=?|\~|!|\?|(or|and|\|\||&&|\?)=)/,p=/^(?:[()\[\]{},:`=;]|\.\.?\.?)/,a=/^[_A-Za-z$][_A-Za-z$0-9]*/,s=/^@[_A-Za-z$][_A-Za-z$0-9]*/,u=e(["and","or","not","is","isnt","in","instanceof","typeof"]),l=e((d=["for","while","loop","if","unless","else","switch","try","catch","finally","class"]).concat(["break","by","continue","debugger","delete","do","in","of","new","return","then","this","@","throw","when","until","extends"])),d=e(d),h=/^('{3}|\"{3}|['\"])/,m=/^(\/{3}|\/)/,v=e(["Infinity","NaN","undefined","null","true","false","on","off","yes","no"]);function k(e,t){if(e.sol()){null===t.scope.align&&(t.scope.align=!1);var n=t.scope.offset;if(e.eatSpace()){var r=e.indentation();return n"!==r&&"=>"!==r||!e.eol())&&"indent"!==n||z(e,t);var o="[({".indexOf(r);if(-1!==o&&z(e,t,"])}".slice(o,o+1)),d.exec(r)&&z(e,t),"then"==r&&x(e,t),"dedent"===n&&x(e,t))return c;if(-1!==(o="])}".indexOf(r))){for(;"coffee"==t.scope.type&&t.scope.prev;)t.scope=t.scope.prev;t.scope.type==r&&(t.scope=t.scope.prev)}return t.dedent&&e.eol()&&("coffee"==t.scope.type&&t.scope.prev&&(t.scope=t.scope.prev),t.dedent=!1),n}(e,t);return r&&"comment"!=r&&(n&&(n.align=!0),t.prop="punctuation"==r&&"."==e.current()),r},indent:function(e,t){if(e.tokenize!=k)return 0;var n=e.scope,e=t&&-1<"])}".indexOf(t.charAt(0));if(e)for(;"coffee"==n.type&&n.prev;)n=n.prev;t=e&&n.type===t.charAt(0);return n.align?n.alignOffset-(t?1:0):(t?n.prev:n).offset},lineComment:"#",fold:"indent"}}),CodeMirror.defineMIME("application/vnd.coffeescript","coffeescript"),CodeMirror.defineMIME("text/x-coffeescript","coffeescript"),CodeMirror.defineMIME("text/coffeescript","coffeescript"); // commonlisp CodeMirror.defineMode("commonlisp",function(r){var o,i=/^(block|let*|return-from|catch|load-time-value|setq|eval-when|locally|symbol-macrolet|flet|macrolet|tagbody|function|multiple-value-call|the|go|multiple-value-prog1|throw|if|progn|unwind-protect|labels|progv|let|quote)$/,l=/^with|^def|^do|^prog|case$|^cond$|bind$|when$|unless$/,c=/^(?:[+\-]?(?:\d+|\d*\.\d+)(?:[efd][+\-]?\d+)?|[+\-]?\d+(?:\/[+\-]?\d+)?|#b[+\-]?[01]+|#o[+\-]?[0-7]+|#x[+\-]?[\da-f]+)/,n=/[^\s'`,@()\[\]";]/;function a(t){for(var e;e=t.next();)if("\\"==e)t.next();else if(!n.test(e)){t.backUp(1);break}return t.current()}function u(t,e){if(t.eatSpace())return o="ws",null;if(t.match(c))return"number";var n=t.next();if('"'==(n="\\"==n?t.next():n))return(e.tokenize=s)(t,e);if("("==n)return o="open","bracket";if(")"==n||"]"==n)return o="close","bracket";if(";"==n)return t.skipToEnd(),o="ws","comment";if(/['`,@]/.test(n))return null;if("|"==n)return t.skipTo("|")?(t.next(),"symbol"):(t.skipToEnd(),"error");if("#"==n)return"("==(n=t.next())?(o="open","bracket"):/[+\-=\.']/.test(n)||/\d/.test(n)&&t.match(/^\d*#/)?null:"|"==n?(e.tokenize=d)(t,e):":"==n?(a(t),"meta"):"\\"==n?(t.next(),a(t),"string-2"):"error";t=a(t);return"."==t?null:(o="symbol","nil"==t||"t"==t||":"==t.charAt(0)?"atom":"open"==e.lastType&&(i.test(t)||l.test(t))?"keyword":"&"==t.charAt(0)?"variable-2":"variable")}function s(t,e){for(var n,r=!1;n=t.next();){if('"'==n&&!r){e.tokenize=u;break}r=!r&&"\\"==n}return"string"}function d(t,e){for(var n,r;n=t.next();){if("#"==n&&"|"==r){e.tokenize=u;break}r=n}return o="ws","comment"}return{startState:function(){return{ctx:{prev:null,start:0,indentTo:0},lastType:null,tokenize:u}},token:function(t,e){t.sol()&&"number"!=typeof e.ctx.indentTo&&(e.ctx.indentTo=e.ctx.start+1),o=null;var n=e.tokenize(t,e);return"ws"!=o&&(null==e.ctx.indentTo?"symbol"==o&&l.test(t.current())?e.ctx.indentTo=e.ctx.start+r.indentUnit:e.ctx.indentTo="next":"next"==e.ctx.indentTo&&(e.ctx.indentTo=t.column()),e.lastType=o),"open"==o?e.ctx={prev:e.ctx,start:t.column(),indentTo:null}:"close"==o&&(e.ctx=e.ctx.prev||e.ctx),n},indent:function(t,e){var n=t.ctx.indentTo;return"number"==typeof n?n:t.ctx.start+1},closeBrackets:{pairs:'()[]{}""'},lineComment:";;",blockCommentStart:"#|",blockCommentEnd:"|#"}}),CodeMirror.defineMIME("text/x-common-lisp","commonlisp"); // crystal CodeMirror.defineMode("crystal",function(n){function e(e,t){return new RegExp((t?"":"^")+"(?:"+e.join("|")+")"+(t?"$":"\\b"))}function o(e,t,n){return n.tokenize.push(e),e(t,n)}var c=/^(?:[-+/%|&^]|\*\*?|[<>]{2})/,s=/^(?:[=!]~|===|<=>|[<>=!]=?|[|&]{2}|~)/,f=/^(?:\[\][?=]?)/,l=/^(?:\.(?:\.{2})?|->|[?:])/,m=/^[a-z_\u009F-\uFFFF][a-zA-Z0-9_\u009F-\uFFFF]*/,h=/^[A-Z_\u009F-\uFFFF][a-zA-Z0-9_\u009F-\uFFFF]*/,p=e(["abstract","alias","as","asm","begin","break","case","class","def","do","else","elsif","end","ensure","enum","extend","for","fun","if","include","instance_sizeof","lib","macro","module","next","of","out","pointerof","private","protected","rescue","return","require","select","sizeof","struct","super","then","type","typeof","uninitialized","union","unless","until","when","while","with","yield","__DIR__","__END_LINE__","__FILE__","__LINE__"]),d=e(["true","false","nil","self"]),k=e(["def","fun","macro","class","module","struct","lib","enum","union","do","for"]),F=e(["if","unless","case","while","until","begin","then"]),t=["end","else","elsif","rescue","ensure"],r=e(t),a=["\\)","\\}","\\]"],u=new RegExp("^(?:"+a.join("|")+")$"),z={def:i,fun:i,macro:function(e,t){if(e.eatSpace())return null;var n;if(n=e.match(m)){if("def"==n)return"keyword";e.eat(/[?!]/)}return t.tokenize.pop(),"def"},class:I,module:I,struct:I,lib:I,enum:I,union:I},_={"[":"]","{":"}","(":")","<":">"};function b(e,t){if(e.eatSpace())return null;if("\\"!=t.lastToken&&e.match("{%",!1))return o(x("%","%"),e,t);if("\\"!=t.lastToken&&e.match("{{",!1))return o(x("{","}"),e,t);if("#"==e.peek())return e.skipToEnd(),"comment";var r,a;if(e.match(m))return e.eat(/[?!]/),i=e.current(),e.eat(":")?"atom":"."==t.lastToken?"property":p.test(i)?(k.test(i)?"fun"==i&&0<=t.blocks.indexOf("lib")||"def"==i&&"abstract"==t.lastToken||(t.blocks.push(i),t.currentIndent+=1):"operator"!=t.lastStyle&&t.lastStyle||!F.test(i)?"end"==i&&(t.blocks.pop(),--t.currentIndent):(t.blocks.push(i),t.currentIndent+=1),z.hasOwnProperty(i)&&t.tokenize.push(z[i]),"keyword"):d.test(i)?"atom":"variable";if(e.eat("@"))return"["==e.peek()?o(g("[","]","meta"),e,t):(e.eat("@"),e.match(m)||e.match(h),"variable-2");if(e.match(h))return"tag";if(e.eat(":"))return e.eat('"')?o(y('"',"atom",!1),e,t):e.match(m)||e.match(h)||e.match(c)||e.match(s)||e.match(f)?"atom":(e.eat(":"),"operator");if(e.eat('"'))return o(y('"',"string",!0),e,t);if("%"!=e.peek())return(i=e.match(/^<<-('?)([A-Z]\w*)\1/))?o((r=i[2],a=!i[1],function(e,t){if(e.sol()&&(e.eatSpace(),e.match(r)))return t.tokenize.pop(),"string";for(var n=!1;e.peek();)if(n)e.next(),n=!1;else{if(e.match("{%",!1))return t.tokenize.push(x("%","%")),"string";if(e.match("{{",!1))return t.tokenize.push(x("{","}")),"string";if(a&&e.match("#{",!1))return t.tokenize.push(g("#{","}","meta")),"string";n=a&&"\\"==e.next()}return"string"}),e,t):e.eat("'")?(e.match(/^(?:[^']|\\(?:[befnrtv0'"]|[0-7]{3}|u(?:[0-9a-fA-F]{4}|\{[0-9a-fA-F]{1,6}\})))/),e.eat("'"),"atom"):e.eat("0")?(e.eat("x")?e.match(/^[0-9a-fA-F_]+/):e.eat("o")?e.match(/^[0-7_]+/):e.eat("b")&&e.match(/^[01_]+/),"number"):e.eat(/^\d/)?(e.match(/^[\d_]*(?:\.[\d_]+)?(?:[eE][+-]?\d+)?/),"number"):e.match(c)?(e.eat("="),"operator"):e.match(s)||e.match(l)?"operator":(i=e.match(/[({[]/,!1))?o(g(i=i[0],_[i],null),e,t):e.eat("\\")?(e.next(),"meta"):(e.next(),null);var n,u="string",i=!0;if(e.match("%r"))u="string-2",n=e.next();else if(e.match("%w"))i=!1,n=e.next();else if(e.match("%q"))i=!1,n=e.next();else if(n=e.match(/^%([^\w\s=])/))n=n[1];else{if(e.match(/^%[a-zA-Z_\u009F-\uFFFF][\w\u009F-\uFFFF]*/))return"meta";if(e.eat("%"))return"operator"}return o(y(n=_.hasOwnProperty(n)?_[n]:n,u,i),e,t)}function g(r,a,u,i){return function(e,t){if(!i&&e.match(r))return t.tokenize[t.tokenize.length-1]=g(r,a,u,!0),t.currentIndent+=1,u;var n=b(e,t);return e.current()===a&&(t.tokenize.pop(),--t.currentIndent,n=u),n}}function x(n,r,a){return function(e,t){return!a&&e.match("{"+n)?(t.currentIndent+=1,t.tokenize[t.tokenize.length-1]=x(n,r,!0),"meta"):e.match(r+"}")?(--t.currentIndent,t.tokenize.pop(),"meta"):b(e,t)}}function i(e,t){return e.eatSpace()?null:(e.match(m)?e.eat(/[!?]/):e.match(c)||e.match(s)||e.match(f),t.tokenize.pop(),"def")}function I(e,t){return e.eatSpace()?null:(e.match(h),t.tokenize.pop(),"def")}function y(a,u,i){return function(e,t){for(var n=!1;e.peek();)if(n)e.next(),n=!1;else{if(e.match("{%",!1))return t.tokenize.push(x("%","%")),u;if(e.match("{{",!1))return t.tokenize.push(x("{","}")),u;if(i&&e.match("#{",!1))return t.tokenize.push(g("#{","}","meta")),u;var r=e.next();if(r==a)return t.tokenize.pop(),u;n=i&&"\\"==r}return u}}return{startState:function(){return{tokenize:[b],currentIndent:0,lastToken:null,lastStyle:null,blocks:[]}},token:function(e,t){var n=t.tokenize[t.tokenize.length-1](e,t),e=e.current();return n&&"comment"!=n&&(t.lastToken=e,t.lastStyle=n),n},indent:function(e,t){return t=t.replace(/^\s*(?:\{%)?\s*|\s*(?:%\})?\s*$/g,""),r.test(t)||u.test(t)?n.indentUnit*(e.currentIndent-1):n.indentUnit*e.currentIndent},fold:"indent",electricInput:e(a.concat(t),!0),lineComment:"#"}}),CodeMirror.defineMIME("text/x-crystal","crystal"); // css !function(){function e(e){for(var t={},r=0;r*\/]/.test(r)?(a="select-op",null):"."==r&&e.match(/^-?[_a-z][_a-z0-9-]*/i)?a="qualifier":/[:;{}\[\]\(\)]/.test(r)?v(null,r):e.match(/^[\w-.]+(?=\()/)?(/^(url(-prefix)?|domain|regexp)$/i.test(e.current())&&(t.tokenize=z),a="variable","variable callee"):/[\w\\\-]/.test(r)?(e.eatWhile(/[\w\\\-]/),a="word","property"):a=null})(e,t);return r&&"object"==typeof r&&(a=r[1],r=r[0]),o=r,"comment"!=a&&(t.state=M[t.state](a,e,t)),o},indent:function(e,t){var r=e.context,e=t&&t.charAt(0),t=r.indent;return(r="prop"==r.type&&("}"==e||")"==e)?r.prev:r).prev&&("}"!=e||"block"!=r.type&&"top"!=r.type&&"interpolation"!=r.type&&"restricted_atBlock"!=r.type?(")"!=e||"parens"!=r.type&&"atBlock_parens"!=r.type)&&("{"!=e||"at"!=r.type&&"atBlock"!=r.type)||(t=Math.max(0,r.indent-i)):t=(r=r.prev).indent),t},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:k,fold:"brace"}});var t=["domain","regexp","url","url-prefix"],r=e(t),o=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],i=e(o),a=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid","orientation","device-pixel-ratio","min-device-pixel-ratio","max-device-pixel-ratio","pointer","any-pointer","hover","any-hover","prefers-color-scheme","dynamic-range","video-dynamic-range"],n=e(a),l=["landscape","portrait","none","coarse","fine","on-demand","hover","interlace","progressive","dark","light","standard","high"],s=e(l),d=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","all","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","binding","bleed","block-size","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-content","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-gap","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-gap","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","inset","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","left","letter-spacing","line-break","line-height","line-height-step","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","place-content","place-items","place-self","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotate","rotation","rotation-point","row-gap","ruby-align","ruby-overhang","ruby-position","ruby-span","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-type","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-orientation","text-outline","text-overflow","text-rendering","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","touch-action","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-select","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","paint-order","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode"],c=e(d),p=["accent-color","aspect-ratio","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","content-visibility","margin-block","margin-block-end","margin-block-start","margin-inline","margin-inline-end","margin-inline-start","overflow-anchor","overscroll-behavior","padding-block","padding-block-end","padding-block-start","padding-inline","padding-inline-end","padding-inline-start","scroll-snap-stop","scrollbar-3d-light-color","scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-track-color","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","shape-inside","zoom"],u=e(p),m=e(["font-display","font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"]),g=e(["additive-symbols","fallback","negative","pad","prefix","range","speak-as","suffix","symbols","system"]),b=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],h=e(b),f=["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","auto-flow","avoid","avoid-column","avoid-page","avoid-region","axis-pan","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","blur","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","brightness","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","color","color-burn","color-dodge","column","column-reverse","compact","condensed","contain","content","contents","content-box","context-menu","continuous","contrast","copy","counter","counters","cover","crop","cross","crosshair","cubic-bezier","currentcolor","cursive","cyclic","darken","dashed","decimal","decimal-leading-zero","default","default-button","dense","destination-atop","destination-in","destination-out","destination-over","devanagari","difference","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","drop-shadow","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","exclusion","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fill-box","fixed","flat","flex","flex-end","flex-start","footnotes","forwards","from","geometricPrecision","georgian","grayscale","graytext","grid","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hard-light","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","hue","hue-rotate","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-grid","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","lighten","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","luminosity","malayalam","manipulation","match","matrix","matrix3d","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","multiple_mask_images","multiply","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","opacity","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","pinch-zoom","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row","row-resize","row-reverse","rtl","run-in","running","s-resize","sans-serif","saturate","saturation","scale","scale3d","scaleX","scaleY","scaleZ","screen","scroll","scrollbar","scroll-position","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","self-start","self-end","semi-condensed","semi-expanded","separate","sepia","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","soft-light","solid","somali","source-atop","source-in","source-out","source-over","space","space-around","space-between","space-evenly","spell-out","square","square-button","start","static","status-bar","stretch","stroke","stroke-box","sub","subpixel-antialiased","svg_masks","super","sw-resize","symbolic","symbols","system-ui","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","transform","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","unidirectional-pan","unset","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","view-box","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","wrap","wrap-reverse","x-large","x-small","xor","xx-large","xx-small"],k=e(f),f=t.concat(o).concat(a).concat(l).concat(d).concat(p).concat(b).concat(f);function y(e,t){for(var r,o=!1;null!=(r=e.next());){if(o&&"/"==r){t.tokenize=null;break}o="*"==r}return["comment","comment"]}CodeMirror.registerHelper("hintWords","css",f),CodeMirror.defineMIME("text/css",{documentTypes:r,mediaTypes:i,mediaFeatures:n,mediaValueKeywords:s,propertyKeywords:c,nonStandardPropertyKeywords:u,fontProperties:m,counterDescriptors:g,colorKeywords:h,valueKeywords:k,tokenHooks:{"/":function(e,t){return!!e.eat("*")&&(t.tokenize=y)(e,t)}},name:"css"}),CodeMirror.defineMIME("text/x-scss",{mediaTypes:i,mediaFeatures:n,mediaValueKeywords:s,propertyKeywords:c,nonStandardPropertyKeywords:u,colorKeywords:h,valueKeywords:k,fontProperties:m,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(e,t){return e.eat("/")?(e.skipToEnd(),["comment","comment"]):e.eat("*")?(t.tokenize=y)(e,t):["operator","operator"]},":":function(e){return!!e.match(/^\s*\{/,!1)&&[null,null]},$:function(e){return e.match(/^[\w-]+/),e.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"]},"#":function(e){return!!e.eat("{")&&[null,"interpolation"]}},name:"css",helperType:"scss"}),CodeMirror.defineMIME("text/x-less",{mediaTypes:i,mediaFeatures:n,mediaValueKeywords:s,propertyKeywords:c,nonStandardPropertyKeywords:u,colorKeywords:h,valueKeywords:k,fontProperties:m,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(e,t){return e.eat("/")?(e.skipToEnd(),["comment","comment"]):e.eat("*")?(t.tokenize=y)(e,t):["operator","operator"]},"@":function(e){return e.eat("{")?[null,"interpolation"]:!e.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i,!1)&&(e.eatWhile(/[\w\\\-]/),e.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"])},"&":function(){return["atom","atom"]}},name:"css",helperType:"less"}),CodeMirror.defineMIME("text/x-gss",{documentTypes:r,mediaTypes:i,mediaFeatures:n,propertyKeywords:c,nonStandardPropertyKeywords:u,fontProperties:m,counterDescriptors:g,colorKeywords:h,valueKeywords:k,supportsAtComponent:!0,tokenHooks:{"/":function(e,t){return!!e.eat("*")&&(t.tokenize=y)(e,t)}},name:"css",helperType:"gss"})}(); // cypher !function(){function p(e){return new RegExp("^(?:"+e.join("|")+")$","i")}CodeMirror.defineMode("cypher",function(e){function t(e){var t=e.next();return'"'===t?(e.match(/^[^"]*"/),"string"):"'"===t?(e.match(/^[^']*'/),"string"):/[{}\(\),\.;\[\]]/.test(t)?(i=t,"node"):"/"===t&&e.eat("/")?(e.skipToEnd(),"comment"):d.test(t)?(e.eatWhile(d),null):(e.eatWhile(/[_\w\d]/),e.eat(":")?(e.eatWhile(/[\w\d_\-]/),"atom"):(e=e.current(),n.test(e)?"builtin":s.test(e)?"def":c.test(e)||l.test(e)?"keyword":"variable"))}function r(e,t,n){return e.context={prev:e.context,indent:e.indent,col:n,type:t}}function o(e){return e.indent=e.context.indent,e.context=e.context.prev}var i,a=e.indentUnit,n=p(["abs","acos","allShortestPaths","asin","atan","atan2","avg","ceil","coalesce","collect","cos","cot","count","degrees","e","endnode","exp","extract","filter","floor","haversin","head","id","keys","labels","last","left","length","log","log10","lower","ltrim","max","min","node","nodes","percentileCont","percentileDisc","pi","radians","rand","range","reduce","rel","relationship","relationships","replace","reverse","right","round","rtrim","shortestPath","sign","sin","size","split","sqrt","startnode","stdev","stdevp","str","substring","sum","tail","tan","timestamp","toFloat","toInt","toString","trim","type","upper"]),s=p(["all","and","any","contains","exists","has","in","none","not","or","single","xor"]),c=p(["as","asc","ascending","assert","by","case","commit","constraint","create","csv","cypher","delete","desc","descending","detach","distinct","drop","else","end","ends","explain","false","fieldterminator","foreach","from","headers","in","index","is","join","limit","load","match","merge","null","on","optional","order","periodic","profile","remove","return","scan","set","skip","start","starts","then","true","union","unique","unwind","using","when","where","with","call","yield"]),l=p(["access","active","assign","all","alter","as","catalog","change","copy","create","constraint","constraints","current","database","databases","dbms","default","deny","drop","element","elements","exists","from","grant","graph","graphs","if","index","indexes","label","labels","management","match","name","names","new","node","nodes","not","of","on","or","password","populated","privileges","property","read","relationship","relationships","remove","replace","required","revoke","role","roles","set","show","start","status","stop","suspended","to","traverse","type","types","user","users","with","write"]),d=/[*+\-<>=&|~%^]/;return{startState:function(){return{tokenize:t,context:null,indent:0,col:0}},token:function(e,t){if(e.sol()&&(t.context&&null==t.context.align&&(t.context.align=!1),t.indent=e.indentation()),e.eatSpace())return null;var n=t.tokenize(e,t);if("comment"!==n&&t.context&&null==t.context.align&&"pattern"!==t.context.type&&(t.context.align=!0),"("===i)r(t,")",e.column());else if("["===i)r(t,"]",e.column());else if("{"===i)r(t,"}",e.column());else if(/[\]\}\)]/.test(i)){for(;t.context&&"pattern"===t.context.type;)o(t);t.context&&i===t.context.type&&o(t)}else"."===i&&t.context&&"pattern"===t.context.type?o(t):/atom|string|variable/.test(n)&&t.context&&(/[\}\]]/.test(t.context.type)?r(t,"pattern",e.column()):"pattern"!==t.context.type||t.context.align||(t.context.align=!0,t.context.col=e.column()));return n},indent:function(e,t){var t=t&&t.charAt(0),n=e.context;if(/[\]\}]/.test(t))for(;n&&"pattern"===n.type;)n=n.prev;t=n&&t===n.type;return n?"keywords"===n.type?CodeMirror.commands.newlineAndIndent:n.align?n.col+(t?0:1):n.indent+(t?0:a):0}}}),CodeMirror.modeExtensions.cypher={autoFormatLineBreaks:function(e){for(var t=e.split("\n"),n=/\s+\b(return|where|order by|match|with|skip|limit|create|delete|set)\b\s/g,r=0;r!?|\/]/;function m(e,t){var o,n=e.next();if(c[n]){var r=c[n](e,t);if(!1!==r)return r}if('"'==n||"'"==n||"`"==n)return t.tokenize=(o=n,function(e,t){for(var n,r=!1,i=!1;null!=(n=e.next());){if(n==o&&!r){i=!0;break}r=!r&&"\\"==n}return!i&&(r||f)||(t.tokenize=null),"string"}),t.tokenize(e,t);if(/[\[\]{}\(\),;\:\.]/.test(n))return i=n,null;if(/\d/.test(n))return e.eatWhile(/[\w\.]/),"number";if("/"==n){if(e.eat("+"))return(t.tokenize=y)(e,t);if(e.eat("*"))return(t.tokenize=p)(e,t);if(e.eat("/"))return e.skipToEnd(),"comment"}if(d.test(n))return e.eatWhile(d),"operator";e.eatWhile(/[\w\$_\xa1-\uffff]/);e=e.current();return a.propertyIsEnumerable(e)?(u.propertyIsEnumerable(e)&&(i="newstatement"),"keyword"):l.propertyIsEnumerable(e)?(u.propertyIsEnumerable(e)&&(i="newstatement"),"builtin"):s.propertyIsEnumerable(e)?"atom":"variable"}function p(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=null;break}r="*"==n}return"comment"}function y(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=null;break}r="+"==n}return"comment"}function h(e,t,n,r,i){this.indented=e,this.column=t,this.type=n,this.align=r,this.prev=i}function b(e,t,n){var r=e.indented;return e.context&&"statement"==e.context.type&&(r=e.context.indented),e.context=new h(r,t,n,null,e.context)}function k(e){var t=e.context.type;return")"!=t&&"]"!=t&&"}"!=t||(e.indented=e.context.indented),e.context=e.context.prev}return{startState:function(e){return{tokenize:null,context:new h((e||0)-r,0,"top",!1),indented:0,startOfLine:!0}},token:function(e,t){var n=t.context;if(e.sol()&&(null==n.align&&(n.align=!1),t.indented=e.indentation(),t.startOfLine=!0),e.eatSpace())return null;i=null;var r=(t.tokenize||m)(e,t);if("comment"==r||"meta"==r)return r;if(null==n.align&&(n.align=!0),";"!=i&&":"!=i&&","!=i||"statement"!=n.type)if("{"==i)b(t,e.column(),"}");else if("["==i)b(t,e.column(),"]");else if("("==i)b(t,e.column(),")");else if("}"==i){for(;"statement"==n.type;)n=k(t);for("}"==n.type&&(n=k(t));"statement"==n.type;)n=k(t)}else i==n.type?k(t):(("}"==n.type||"top"==n.type)&&";"!=i||"statement"==n.type&&"newstatement"==i)&&b(t,e.column(),"statement");else k(t);return t.startOfLine=!1,r},indent:function(e,t){if(e.tokenize!=m&&null!=e.tokenize)return CodeMirror.Pass;var n=e.context,e=t&&t.charAt(0),t=e==(n="statement"==n.type&&"}"==e?n.prev:n).type;return"statement"==n.type?n.indented+("{"==e?0:o):n.align?n.column+(t?0:1):n.indented+(t?0:r)},electricChars:"{}",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:"//",fold:"brace"}});var t="body catch class do else enum for foreach foreach_reverse if in interface mixin out scope struct switch try union unittest version while with";CodeMirror.defineMIME("text/x-d",{name:"d",keywords:e("abstract alias align asm assert auto break case cast cdouble cent cfloat const continue debug default delegate delete deprecated export extern final finally function goto immutable import inout invariant is lazy macro module new nothrow override package pragma private protected public pure ref return shared short static super synchronized template this throw typedef typeid typeof volatile __FILE__ __LINE__ __gshared __traits __vector __parameters "+t),blockKeywords:e(t),builtin:e("bool byte char creal dchar double float idouble ifloat int ireal long real short ubyte ucent uint ulong ushort wchar wstring void size_t sizediff_t"),atoms:e("exit failure success true false null"),hooks:{"@":function(e,t){return e.eatWhile(/[\w\$_]/),"meta"}}})}(); // dart !function(){var e="this super static final const abstract class extends external factory implements mixin get native set typedef with enum throw rethrow assert break case continue default in return new deferred async await covariant try catch finally do else for if switch while import library export part of show hide is as extension on yield late required".split(" "),t="try catch finally do else for if switch while".split(" "),n="true false null".split(" "),r="void bool num int double dynamic var String Null Never".split(" ");function i(e){for(var t={},n=0;n","<=",">="],a=["in","not","or","and"];function l(e,t){if(e.match("{{"))return t.tokenize=r,"tag";if(e.match("{%"))return t.tokenize=c,"tag";if(e.match("{#"))return t.tokenize=f,"comment";for(;null!=e.next()&&!e.match(/\{[{%#]/,!1););return null}function u(r,n){return function(e,t){return!t.escapeNext&&e.eat(r)?t.tokenize=n:(t.escapeNext&&(t.escapeNext=!1),"\\"==e.next()&&(t.escapeNext=!0)),"string"}}function r(e,t){if(t.waitDot){if(t.waitDot=!1,"."!=e.peek())return"null";if(e.match(/\.\W+/))return"error";if(e.eat("."))return t.waitProperty=!0,"null";throw Error("Unexpected error while waiting for property.")}if(t.waitPipe){if(t.waitPipe=!1,"|"!=e.peek())return"null";if(e.match(/\.\W+/))return"error";if(e.eat("|"))return t.waitFilter=!0,"null";throw Error("Unexpected error while waiting for filter.")}return t.waitProperty&&(t.waitProperty=!1,e.match(/\b(\w+)\b/))?(t.waitDot=!0,t.waitPipe=!0,"property"):t.waitFilter&&(t.waitFilter=!1,e.match(i))?"variable-2":e.eatSpace()?(t.waitProperty=!1,"null"):e.match(/\b\d+(\.\d+)?\b/)?"number":e.match("'")?(t.tokenize=u("'",t.tokenize),"string"):e.match('"')?(t.tokenize=u('"',t.tokenize),"string"):e.match(/\b(\w+)\b/)&&!t.foundVariable?(t.waitDot=!0,t.waitPipe=!0,"variable"):e.match("}}")?(t.waitProperty=null,t.waitFilter=null,t.waitDot=null,t.waitPipe=null,t.tokenize=l,"tag"):(e.next(),"null")}function c(e,t){if(t.waitDot){if(t.waitDot=!1,"."!=e.peek())return"null";if(e.match(/\.\W+/))return"error";if(e.eat("."))return t.waitProperty=!0,"null";throw Error("Unexpected error while waiting for property.")}if(t.waitPipe){if(t.waitPipe=!1,"|"!=e.peek())return"null";if(e.match(/\.\W+/))return"error";if(e.eat("|"))return t.waitFilter=!0,"null";throw Error("Unexpected error while waiting for filter.")}if(t.waitProperty&&(t.waitProperty=!1,e.match(/\b(\w+)\b/)))return t.waitDot=!0,t.waitPipe=!0,"property";if(t.waitFilter&&(t.waitFilter=!1,e.match(i)))return"variable-2";if(e.eatSpace())return t.waitProperty=!1,"null";if(e.match(/\b\d+(\.\d+)?\b/))return"number";if(e.match("'"))return t.tokenize=u("'",t.tokenize),"string";if(e.match('"'))return t.tokenize=u('"',t.tokenize),"string";if(e.match(o))return"operator";if(e.match(a))return"keyword";var r=e.match(n);return r?("comment"==r[0]&&(t.blockCommentTag=!0),"keyword"):e.match(/\b(\w+)\b/)?(t.waitDot=!0,t.waitPipe=!0,"variable"):e.match("%}")?(t.waitProperty=null,t.waitFilter=null,t.waitDot=null,t.waitPipe=null,t.blockCommentTag?(t.blockCommentTag=!1,t.tokenize=m):t.tokenize=l,"tag"):(e.next(),"null")}function f(e,t){return e.match(/^.*?#\}/)?t.tokenize=l:e.skipToEnd(),"comment"}function m(e,t){return e.match(/\{%\s*endcomment\s*%\}/,!1)?(t.tokenize=c,e.match("{%"),"tag"):(e.next(),"comment")}return n=new RegExp("^\\b("+n.join("|")+")\\b"),i=new RegExp("^\\b("+i.join("|")+")\\b"),o=new RegExp("^\\b("+o.join("|")+")\\b"),a=new RegExp("^\\b("+a.join("|")+")\\b"),{startState:function(){return{tokenize:l}},token:function(e,t){return t.tokenize(e,t)},blockCommentStart:"{% comment %}",blockCommentEnd:"{% endcomment %}"}}),CodeMirror.defineMode("django",function(e){var t=CodeMirror.getMode(e,"text/html"),e=CodeMirror.getMode(e,"django:inner");return CodeMirror.overlayMode(t,e)}),CodeMirror.defineMIME("text/x-django","django"); // dockerfile !function(){var e="from",n=new RegExp("^(\\s*)\\b("+e+")\\b","i"),t=["run","cmd","entrypoint","shell"],r=new RegExp("^(\\s*)("+t.join("|")+")(\\s+\\[)","i"),o="expose",l=new RegExp("^(\\s*)("+o+")(\\s+)","i"),o="("+[e,o].concat(t).concat(["arg","from","maintainer","label","env","add","copy","volume","user","workdir","onbuild","stopsignal","healthcheck","shell"]).join("|")+")",t=new RegExp("^(\\s*)"+o+"(\\s*)(#.*)?$","i"),o=new RegExp("^(\\s*)"+o+"(\\s+)","i");CodeMirror.defineSimpleMode("dockerfile",{start:[{regex:/^\s*#.*$/,sol:!0,token:"comment"},{regex:n,token:[null,"keyword"],sol:!0,next:"from"},{regex:t,token:[null,"keyword",null,"error"],sol:!0},{regex:r,token:[null,"keyword",null],sol:!0,next:"array"},{regex:l,token:[null,"keyword",null],sol:!0,next:"expose"},{regex:o,token:[null,"keyword",null],sol:!0,next:"arguments"},{regex:/./,token:null}],from:[{regex:/\s*$/,token:null,next:"start"},{regex:/(\s*)(#.*)$/,token:[null,"error"],next:"start"},{regex:/(\s*\S+\s+)(as)/i,token:[null,"keyword"],next:"start"},{token:null,next:"start"}],single:[{regex:/(?:[^\\']|\\.)/,token:"string"},{regex:/'/,token:"string",pop:!0}],double:[{regex:/(?:[^\\"]|\\.)/,token:"string"},{regex:/"/,token:"string",pop:!0}],array:[{regex:/\]/,token:null,next:"start"},{regex:/"(?:[^\\"]|\\.)*"?/,token:"string"}],expose:[{regex:/\d+$/,token:"number",next:"start"},{regex:/[^\d]+$/,token:null,next:"start"},{regex:/\d+/,token:"number"},{regex:/[^\d]+/,token:null},{token:null,next:"start"}],arguments:[{regex:/^\s*#.*$/,sol:!0,token:"comment"},{regex:/"(?:[^\\"]|\\.)*"?$/,token:"string",next:"start"},{regex:/"/,token:"string",push:"double"},{regex:/'(?:[^\\']|\\.)*'?$/,token:"string",next:"start"},{regex:/'/,token:"string",push:"single"},{regex:/[^#"']+[\\`]$/,token:null},{regex:/[^#"']+$/,token:null,next:"start"},{regex:/[^#"']+/,token:null},{token:null,next:"start"}],meta:{lineComment:"#"}}),CodeMirror.defineMIME("text/x-dockerfile","dockerfile")}(); // dtd CodeMirror.defineMode("dtd",function(t){var u,r=t.indentUnit;function l(t,e){return u=e,t}function o(t,e){var a,n,r,i=t.next();if("<"==i&&t.eat("!"))return t.eatWhile(/[\-]/)?(e.tokenize=c)(t,e):t.eatWhile(/[\w]/)?(u="doindent","keyword"):void 0;if("<"==i&&t.eat("?"))return e.tokenize=(n="meta",r="?>",function(t,e){for(;!t.eol();){if(t.match(r)){e.tokenize=o;break}t.next()}return n}),l("meta",i);if("#"==i&&t.eatWhile(/[\w]/))return u="tag","atom";if("|"==i)return u="separator","keyword";if(i.match(/[\(\)\[\]\-\.,\+\?>]/))return l(null,i);if(i.match(/[\[\]]/))return l("rule",i);if('"'==i||"'"==i)return e.tokenize=(a=i,function(t,e){for(var n,r=!1;null!=(n=t.next());){if(n==a&&!r){e.tokenize=o;break}r=!r&&"\\"==n}return u="tag","string"}),e.tokenize(t,e);if(t.eatWhile(/[a-zA-Z\?\+\d]/)){e=t.current();return null!==e.substr(e.length-1,e.length).match(/\?|\+/)&&t.backUp(1),u="tag"}return"%"==i||"*"==i?u="number":(t.eatWhile(/[\w\\\-_%.{,]/),u=null)}function c(t,e){for(var n,r=0;null!=(n=t.next());){if(2<=r&&">"==n){e.tokenize=o;break}r="-"==n?r+1:0}return u="comment"}return{startState:function(t){return{tokenize:o,baseIndent:t||0,stack:[]}},token:function(t,e){if(t.eatSpace())return null;var n=e.tokenize(t,e),r=e.stack[e.stack.length-1];return"["==t.current()||"doindent"===u||"["==u?e.stack.push("rule"):"endtag"===u?e.stack[e.stack.length-1]="endtag":"]"==t.current()||"]"==u||">"==u&&"rule"==r?e.stack.pop():"["==u&&e.stack.push("["),n},indent:function(t,e){var n=t.stack.length;return"]"===e.charAt(0)?n--:">"===e.substr(e.length-1,e.length)&&("<"===e.substr(0,1)||"doindent"==u&&1"==u&&1"!==e||("tag"==u&&"rule"==t.stack[t.stack.length-1]?n--:"tag"==u?n++:">"===e&&"rule"==t.stack[t.stack.length-1]&&">"===u?n--:">"===e&&"rule"==t.stack[t.stack.length-1]||("<"===e.substr(0,1)||">"!==e.substr(0,1))&&">"===e||(n-=1))),null!=u&&"]"!=u||n--),t.baseIndent+n*r},electricChars:"]>"}}),CodeMirror.defineMIME("application/xml-dtd","dtd"); // dylan !function(){function p(e,n){for(var t=0;t",symbolGlobal:"\\*"+i+"\\*",symbolConstant:"\\$"+i},l={symbolKeyword:"atom",symbolClass:"tag",symbolGlobal:"variable-2",symbolConstant:"variable-3"};for(n in o)o.hasOwnProperty(n)&&(o[n]=new RegExp("^"+o[n]));o.keyword=[/^with(?:out)?-[-_a-zA-Z?!*@<>$%]+/];var r={keyword:"keyword",definition:"def",simpleDefinition:"def",signalingCalls:"builtin"},f={},c={};function s(e,n,t){return(n.tokenize=t)(e,n)}function u(n,e){var t,i=n.peek();if("'"==i||'"'==i)return n.next(),s(n,e,d(i,"string"));if("/"==i){if(n.next(),n.eat("*"))return s(n,e,m);if(n.eat("/"))return n.skipToEnd(),"comment";n.backUp(1)}else if(/[+\-\d\.]/.test(i)){if(n.match(/^[+-]?[0-9]*\.[0-9]*([esdx][+-]?[0-9]+)?/i)||n.match(/^[+-]?[0-9]+([esdx][+-]?[0-9]+)/i)||n.match(/^[+-]?\d+/))return"number"}else{if("#"==i)return n.next(),'"'==(i=n.peek())?(n.next(),s(n,e,d('"',"string"))):"b"==i?(n.next(),n.eatWhile(/[01]/),"number"):"x"==i?(n.next(),n.eatWhile(/[\da-f]/i),"number"):"o"==i?(n.next(),n.eatWhile(/[0-7]/),"number"):"#"==i?(n.next(),"punctuation"):"["==i||"("==i?(n.next(),"bracket"):n.match(/f|t|all-keys|include|key|next|rest/i)?"atom":(n.eatWhile(/[-a-zA-Z]/),"error");if("~"==i)return n.next(),"="==(i=n.peek())?(n.next(),"="==(i=n.peek())&&n.next(),"operator"):"operator";if(":"==i){if(n.next(),"="==(i=n.peek()))return n.next(),"operator";if(":"==i)return n.next(),"punctuation"}else{if(-1!="[](){}".indexOf(i))return n.next(),"bracket";if(-1!=".,".indexOf(i))return n.next(),"punctuation";if(n.match("end"))return"keyword"}}for(t in o)if(o.hasOwnProperty(t)){var r=o[t];if(r instanceof Array&&function(e,n){for(var t=0;t&|]/.test(i)?(n.next(),"operator"):n.match("define")?"def":(n.eatWhile(/[\w\-]/),f.hasOwnProperty(n.current())?c[n.current()]:n.current().match(a)?"variable":(n.next(),"variable-2"))}function m(e,n){for(var t,i=!1,r=!1,a=0;t=e.next();){if("/"==t&&i){if(!(0>/))return"builtin"}return e.match("//")?(e.skipToEnd(),"comment"):e.match("return")?"operator":e.match(/^[a-zA-Z_][a-zA-Z0-9_]*/)?e.match(/(?=[\(.])/)?"variable":e.match(/(?=[\s\n]*[:=])/)?"def":"variable-2":-1!=["[","]","(",")"].indexOf(e.peek())?(e.next(),"bracket"):(e.eatSpace()||e.next(),null)}}}}),CodeMirror.defineMIME("text/x-ebnf","ebnf"); // ecl CodeMirror.defineMode("ecl",function(e){function t(e){for(var t={},n=e.split(" "),r=0;r!?|\/]/;function b(e,t){var o,n=e.next();if(h[n]){var r=h[n](e,t);if(!1!==r)return r}if('"'==n||"'"==n)return t.tokenize=(o=n,function(e,t){for(var n,r=!1,a=!1;null!=(n=e.next());){if(n==o&&!r){a=!0;break}r=!r&&"\\"==n}return!a&&r||(t.tokenize=b),"string"}),t.tokenize(e,t);if(/[\[\]{}\(\),;\:\.]/.test(n))return l=n,null;if(/\d/.test(n))return e.eatWhile(/[\w\.]/),"number";if("/"==n){if(e.eat("*"))return(t.tokenize=g)(e,t);if(e.eat("/"))return e.skipToEnd(),"comment"}if(y.test(n))return e.eatWhile(y),"operator";e.eatWhile(/[\w\$_]/);var a=e.current().toLowerCase();if(s.propertyIsEnumerable(a))return m.propertyIsEnumerable(a)&&(l="newstatement"),"keyword";if(c.propertyIsEnumerable(a))return m.propertyIsEnumerable(a)&&(l="newstatement"),"variable";if(u.propertyIsEnumerable(a))return m.propertyIsEnumerable(a)&&(l="newstatement"),"variable-2";if(d.propertyIsEnumerable(a))return m.propertyIsEnumerable(a)&&(l="newstatement"),"variable-3";if(p.propertyIsEnumerable(a))return m.propertyIsEnumerable(a)&&(l="newstatement"),"builtin";for(var i=a.length-1;0<=i&&(!isNaN(a[i])||"_"==a[i]);)--i;if(0>"]);function t(e,t){if(e.eatSpace())return null;var r,n,i,a,o,l=e.next();return'"'==l||"'"==l?(i=l,a="string",r=function(e,t){for(var r,n=!1;null!=(r=e.next());){if(r==i&&(o||!n)){t.tokenize.pop();break}n=!n&&"%"==r}return a},n=e,(t=t).tokenize.push(r),r(n,t)):"-"==l&&e.eat("-")?(e.skipToEnd(),"comment"):":"==l&&e.eat("=")?"operator":/[0-9]/.test(l)?(e.eatWhile(/[xXbBCc0-9\.]/),e.eat(/[\?\!]/),"ident"):/[a-zA-Z_0-9]/.test(l)?(e.eatWhile(/[a-zA-Z_0-9]/),e.eat(/[\?\!]/),"ident"):/[=+\-\/*^%<>~]/.test(l)?(e.eatWhile(/[=+\-\/*^%<>~]/),"operator"):null}return{startState:function(){return{tokenize:[t]}},token:function(e,t){var r=t.tokenize[t.tokenize.length-1](e,t);return"ident"==r&&(t=e.current(),r=n.propertyIsEnumerable(e.current())?"keyword":i.propertyIsEnumerable(e.current())?"operator":/^[A-Z][A-Z_0-9]*$/g.test(t)?"tag":/^0[bB][0-1]+$/g.test(t)||/^0[cC][0-7]+$/g.test(t)||/^0[xX][a-fA-F0-9]+$/g.test(t)||/^([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+)$/g.test(t)||/^[0-9]+$/g.test(t)?"number":"variable"),r},lineComment:"--"}}),CodeMirror.defineMIME("text/x-eiffel","eiffel"); // elm CodeMirror.defineMode("elm",function(){function n(e,t,r){return t(r),r(e,t)}var i=/[a-z]/,o=/[A-Z]/,f=/[a-zA-Z0-9_]/,u=/[0-9]/,a=/[0-9A-Fa-f]/,s=/[-&*+.\\/<>=?^|:]/,l=/[(),[\]{}]/,c=/[ \v\f]/;function m(){return function(e,t){if(e.eatWhile(c))return null;var r=e.next();if(l.test(r))return"{"===r&&e.eat("-")?n(e,t,function n(i){if(0==i)return m();return function(e,t){for(;!e.eol();){var r=e.next();if("{"==r&&e.eat("-"))++i;else if("-"==r&&e.eat("}")&&0===--i)return t(m()),"comment"}return t(n(i)),"comment"}}(1)):"["===r&&e.match("glsl|")?n(e,t,h):"builtin";if("'"===r)return n(e,t,d);if('"'===r)return e.eat('"')?e.eat('"')?n(e,t,p):"string":n(e,t,x);if(o.test(r))return e.eatWhile(f),"variable-2";if(i.test(r)){t=1===e.pos;return e.eatWhile(f),t?"def":"variable"}if(u.test(r)){if("0"===r){if(e.eat(/[xX]/))return e.eatWhile(a),"number"}else e.eatWhile(u);return e.eat(".")&&e.eatWhile(u),e.eat(/[eE]/)&&(e.eat(/[-+]/),e.eatWhile(u)),"number"}return s.test(r)?"-"===r&&e.eat("-")?(e.skipToEnd(),"comment"):(e.eatWhile(s),"keyword"):"_"===r?"keyword":"error"}}function p(e,t){for(;!e.eol();)if('"'===e.next()&&e.eat('"')&&e.eat('"'))return t(m()),"string";return"string"}function x(e,t){for(;e.skipTo('\\"');)e.next(),e.next();return e.skipTo('"')?(e.next(),t(m()),"string"):(e.skipToEnd(),t(m()),"error")}function d(e,t){for(;e.skipTo("\\'");)e.next(),e.next();return e.skipTo("'")?(e.next(),t(m()),"string"):(e.skipToEnd(),t(m()),"error")}function h(e,t){for(;!e.eol();)if("|"===e.next()&&e.eat("]"))return t(m()),"string";return"string"}var k={case:1,of:1,as:1,if:1,then:1,else:1,let:1,in:1,type:1,alias:1,module:1,where:1,import:1,exposing:1,port:1};return{startState:function(){return{f:m()}},copyState:function(e){return{f:e.f}},token:function(e,t){var r=t.f(e,function(e){t.f=e}),e=e.current();return k.hasOwnProperty(e)?"keyword":r}}}),CodeMirror.defineMIME("text/x-elm","elm"); // erlang CodeMirror.defineMIME("text/x-erlang","erlang"),CodeMirror.defineMode("erlang",function(c){"use strict";var i=["-type","-spec","-export_type","-opaque"],o=["after","begin","catch","case","cond","end","fun","if","let","of","query","receive","try","when"],a=/[\->,;]/,s=["->",";",","],u=["and","andalso","band","bnot","bor","bsl","bsr","bxor","div","not","or","orelse","rem","xor"],l=/[\+\-\*\/<>=\|:!]/,_=["=","+","-","*","/",">",">=","<","=<","=:=","==","=/=","/=","||","<-","!"],f=/[<\(\[\{]/,p=["<<","(","[","{"],m=/[>\)\]\}]/,d=["}","]",")",">>"],b=["is_atom","is_binary","is_bitstring","is_boolean","is_float","is_function","is_integer","is_list","is_number","is_pid","is_port","is_record","is_reference","is_tuple","atom","binary","bitstring","boolean","function","integer","list","number","pid","port","record","reference","tuple"],g=["abs","adler32","adler32_combine","alive","apply","atom_to_binary","atom_to_list","binary_to_atom","binary_to_existing_atom","binary_to_list","binary_to_term","bit_size","bitstring_to_list","byte_size","check_process_code","contact_binary","crc32","crc32_combine","date","decode_packet","delete_module","disconnect_node","element","erase","exit","float","float_to_list","garbage_collect","get","get_keys","group_leader","halt","hd","integer_to_list","internal_bif","iolist_size","iolist_to_binary","is_alive","is_atom","is_binary","is_bitstring","is_boolean","is_float","is_function","is_integer","is_list","is_number","is_pid","is_port","is_process_alive","is_record","is_reference","is_tuple","length","link","list_to_atom","list_to_binary","list_to_bitstring","list_to_existing_atom","list_to_float","list_to_integer","list_to_pid","list_to_tuple","load_module","make_ref","module_loaded","monitor_node","node","node_link","node_unlink","nodes","notalive","now","open_port","pid_to_list","port_close","port_command","port_connect","port_control","pre_loaded","process_flag","process_info","processes","purge_module","put","register","registered","round","self","setelement","size","spawn","spawn_link","spawn_monitor","spawn_opt","split_binary","statistics","term_to_binary","time","throw","tl","trunc","tuple_size","tuple_to_list","unlink","unregister","whereis"],k=/[\w@Ø-ÞÀ-Öß-öø-ÿ]/,h=/[0-7]{1,3}|[bdefnrstv\\"']|\^[a-zA-Z]|x[0-9a-zA-Z]{2}|x{[0-9a-zA-Z]+}/;function e(e,t){if(t.in_string)return t.in_string=!w(e),z(t,e,"string");if(t.in_atom)return t.in_atom=!x(e),z(t,e,"atom");if(e.eatSpace())return z(t,e,"whitespace");if(!M(t)&&e.match(/-\s*[a-zß-öø-ÿ][\wØ-ÞÀ-Öß-öø-ÿ]*/))return S(e.current(),i)?z(t,e,"type"):z(t,e,"attribute");var r=e.next();if("%"==r)return e.skipToEnd(),z(t,e,"comment");if(":"==r)return z(t,e,"colon");if("?"==r)return e.eatSpace(),e.eatWhile(k),z(t,e,"macro");if("#"==r)return e.eatSpace(),e.eatWhile(k),z(t,e,"record");if("$"==r)return"\\"!=e.next()||e.match(h)?z(t,e,"number"):z(t,e,"error");if("."==r)return z(t,e,"dot");if("'"==r){if(!(t.in_atom=!x(e))){if(e.match(/\s*\/\s*[0-9]/,!1))return e.match(/\s*\/\s*[0-9]/,!0),z(t,e,"fun");if(e.match(/\s*\(/,!1)||e.match(/\s*:/,!1))return z(t,e,"function")}return z(t,e,"atom")}if('"'==r)return t.in_string=!w(e),z(t,e,"string");if(/[A-Z_Ø-ÞÀ-Ö]/.test(r))return e.eatWhile(k),z(t,e,"variable");if(/[a-z_ß-öø-ÿ]/.test(r)){if(e.eatWhile(k),e.match(/\s*\/\s*[0-9]/,!1))return e.match(/\s*\/\s*[0-9]/,!0),z(t,e,"fun");var n=e.current();return S(n,o)?z(t,e,"keyword"):S(n,u)?z(t,e,"operator"):e.match(/\s*\(/,!1)?!S(n,g)||":"==M(t).token&&"erlang"!=M(t,2).token?S(n,b)?z(t,e,"guard"):z(t,e,"function"):z(t,e,"builtin"):":"==function(e){e=e.match(/^\s*([^\s%])/,!1);return e?e[1]:""}(e)?z(t,e,"erlang"==n?"builtin":"function"):S(n,["true","false"])?z(t,e,"boolean"):z(t,e,"atom")}n=/[0-9]/;return n.test(r)?(e.eatWhile(n),e.eat("#")?e.eatWhile(/[0-9a-zA-Z]/)||e.backUp(1):e.eat(".")&&(e.eatWhile(n)?e.eat(/[eE]/)&&(e.eat(/[-+]/)?e.eatWhile(n)||e.backUp(2):e.eatWhile(n)||e.backUp(1)):e.backUp(1)),z(t,e,"number")):y(e,f,p)?z(t,e,"open_paren"):y(e,m,d)?z(t,e,"close_paren"):v(e,a,s)?z(t,e,"separator"):v(e,l,_)?z(t,e,"operator"):z(t,e,null)}function y(e,t,r){if(1==e.current().length&&t.test(e.current())){for(e.backUp(1);t.test(e.peek());)if(e.next(),S(e.current(),r))return 1;e.backUp(e.current().length-1)}}function v(e,t,r){if(1==e.current().length&&t.test(e.current())){for(;t.test(e.peek());)e.next();for(;0>":return U(e,{i:["<<"]});case"end":return U(e,{i:["begin","case","fun","if","receive","try"]});case",":return U(e,{e:["begin","try","when","->",",","(","[","{","<<"]});case"->":return U(e,{r:["when"],m:["try","if","case","receive"]});case";":return U(e,{E:["case","fun","if","receive","try","when"]});case"catch":return U(e,{e:["try"]});case"of":return U(e,{e:["case"]});case"after":return U(e,{e:["receive","try"]});default:return e}}(n.tokenStack)),r){case"atom":return"atom";case"attribute":return"attribute";case"boolean":return"atom";case"builtin":return"builtin";case"close_paren":case"colon":return null;case"comment":return"comment";case"dot":return null;case"error":return"error";case"fun":return"meta";case"function":return"tag";case"guard":return"property";case"keyword":return"keyword";case"macro":return"variable-2";case"number":return"number";case"open_paren":return null;case"operator":return"operator";case"record":return"bracket";case"separator":return null;case"string":return"string";case"type":return"def";case"variable":return"variable";default:return null}}function W(e,t,r,n){return{token:e,column:t,indent:r,type:n}}function M(e,t){var r=e.tokenStack.length,t=t||1;return!(r>|\|+|\(/);return A(e)&&0===e.index?e[0]:""}(t),o=M(e,1),a=M(e,2);return e.in_string||e.in_atom?CodeMirror.Pass:a?"when"==o.token?o.column+n:"when"===i&&"function"===a.type?a.indent+n:"("===i&&"fun"===o.token?o.column+3:"catch"===i&&(r=C(e,["try"]))?r.column:S(i,["end","after","of"])?(r=C(e,["begin","case","fun","if","receive","try"]))?r.column:CodeMirror.Pass:S(i,d)?(r=C(e,p))?r.column:CodeMirror.Pass:S(o.token,[",","|","||"])||S(i,[",","|","||"])?(t=E(i=(t=e).tokenStack.slice(0,-1),"type",["open_paren"]),(r=!!A(i[t])&&i[t])?r.column+r.token.length:n):"->"==o.token?S(a.token,["receive","case","if","try"])?a.column+n+n:a.column+n:S(o.token,p)?o.column+o.token.length:(o=(a=e).tokenStack,e=E(o,"type",["open_paren","separator","keyword"]),a=E(o,"type",["operator"]),r=A(e)&&A(a)&&e|\.\*\?]+(?=\s|$)/,token:"builtin"},{regex:/[\)><]+\S+(?=\s|$)/,token:"builtin"},{regex:/(?:[\+\-\=\/\*<>])(?=\s|$)/,token:"keyword"},{regex:/\S+/,token:"variable"},{regex:/\s+|./,token:null}],vocabulary:[{regex:/;/,token:"keyword",next:"start"},{regex:/\S+/,token:"tag"},{regex:/\s+|./,token:null}],string:[{regex:/(?:[^\\]|\\.)*?"/,token:"string",next:"start"},{regex:/.*/,token:"string"}],string2:[{regex:/^;/,token:"keyword",next:"start"},{regex:/.*/,token:"string"}],string3:[{regex:/(?:[^\\]|\\.)*?"""/,token:"string",next:"start"},{regex:/.*/,token:"string"}],stack:[{regex:/\)/,token:"bracket",next:"start"},{regex:/--/,token:"bracket"},{regex:/\S+/,token:"meta"},{regex:/\s+|./,token:null}],meta:{dontIndentStates:["start","vocabulary","string","string3","stack"],lineComment:["!","#!"]}}),CodeMirror.defineMIME("text/x-factor","factor"); // fcl CodeMirror.defineMode("fcl",function(e){var t=e.indentUnit,r={term:!0,method:!0,accu:!0,rule:!0,then:!0,is:!0,and:!0,or:!0,if:!0,default:!0},a={var_input:!0,var_output:!0,fuzzify:!0,defuzzify:!0,function_block:!0,ruleblock:!0},u={end_ruleblock:!0,end_defuzzify:!0,end_function_block:!0,end_fuzzify:!0,end_var:!0},o={true:!0,false:!0,nan:!0,real:!0,min:!0,max:!0,cog:!0,cogs:!0},i=/[+\-*&^%:=<>!|\/]/;function l(e,n){var t=e.next();if(/[\d\.]/.test(t))return"."==t?e.match(/^[0-9]+([eE][\-+]?[0-9]+)?/):"0"==t?e.match(/^[xX][0-9a-fA-F]+/)||e.match(/^0[0-7]+/):e.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/),"number";if("/"==t||"("==t){if(e.eat("*"))return(n.tokenize=c)(e,n);if(e.eat("/"))return e.skipToEnd(),"comment"}if(i.test(t))return e.eatWhile(i),"operator";e.eatWhile(/[\w\$_\xa1-\uffff]/);e=e.current().toLowerCase();return r.propertyIsEnumerable(e)||a.propertyIsEnumerable(e)||u.propertyIsEnumerable(e)?"keyword":o.propertyIsEnumerable(e)?"atom":"variable"}function c(e,n){for(var t,r=!1;t=e.next();){if(("/"==t||")"==t)&&r){n.tokenize=l;break}r="*"==t}return"comment"}function f(e,n,t,r,o){this.indented=e,this.column=n,this.type=t,this.align=r,this.prev=o}return{startState:function(e){return{tokenize:null,context:new f((e||0)-t,0,"top",!1),indented:0,startOfLine:!0}},token:function(e,n){var t=n.context;if(e.sol()&&(null==t.align&&(t.align=!1),n.indented=e.indentation(),n.startOfLine=!0),e.eatSpace())return null;var r=(n.tokenize||l)(e,n);if("comment"==r)return r;null==t.align&&(t.align=!0);var o,i=e.current().toLowerCase();return a.propertyIsEnumerable(i)?(o=n,t=e.column(),e="end_block",o.context=new f(o.indented,t,e,null,o.context)):!u.propertyIsEnumerable(i)||(i=n).context.prev&&("end_block"==i.context.type&&(i.indented=i.context.indented),i.context=i.context.prev),n.startOfLine=!1,r},indent:function(e,n){if(e.tokenize!=l&&null!=e.tokenize)return 0;e=e.context,n=u.propertyIsEnumerable(n);return e.align?e.column+(n?0:1):e.indented+(n?0:t)},electricChars:"ryk",fold:"brace",blockCommentStart:"(*",blockCommentEnd:"*)",lineComment:"//"}}),CodeMirror.defineMIME("text/x-fcl","fcl"); // forth !function(){function t(t){var E=[];return t.split(" ").forEach(function(t){E.push({name:t})}),E}var E=t("INVERT AND OR XOR 2* 2/ LSHIFT RSHIFT 0= = 0< < > U< MIN MAX 2DROP 2DUP 2OVER 2SWAP ?DUP DEPTH DROP DUP OVER ROT SWAP >R R> R@ + - 1+ 1- ABS NEGATE S>D * M* UM* FM/MOD SM/REM UM/MOD */ */MOD / /MOD MOD HERE , @ ! CELL+ CELLS C, C@ C! CHARS 2@ 2! ALIGN ALIGNED +! ALLOT CHAR [CHAR] [ ] BL FIND EXECUTE IMMEDIATE COUNT LITERAL STATE ; DOES> >BODY EVALUATE SOURCE >IN <# # #S #> HOLD SIGN BASE >NUMBER HEX DECIMAL FILL MOVE . CR EMIT SPACE SPACES TYPE U. .R U.R ACCEPT TRUE FALSE <> U> 0<> 0> NIP TUCK ROLL PICK 2>R 2R@ 2R> WITHIN UNUSED MARKER I J TO COMPILE, [COMPILE] SAVE-INPUT RESTORE-INPUT PAD ERASE 2LITERAL DNEGATE D- D+ D0< D0= D2* D2/ D< D= DMAX DMIN D>S DABS M+ M*/ D. D.R 2ROT DU< CATCH THROW FREE RESIZE ALLOCATE CS-PICK CS-ROLL GET-CURRENT SET-CURRENT FORTH-WORDLIST GET-ORDER SET-ORDER PREVIOUS SEARCH-WORDLIST WORDLIST FIND ALSO ONLY FORTH DEFINITIONS ORDER -TRAILING /STRING SEARCH COMPARE CMOVE CMOVE> BLANK SLITERAL"),e=t("IF ELSE THEN BEGIN WHILE REPEAT UNTIL RECURSE [IF] [ELSE] [THEN] ?DO DO LOOP +LOOP UNLOOP LEAVE EXIT AGAIN CASE OF ENDOF ENDCASE");CodeMirror.defineMode("forth",function(){function i(t,E){for(var e=t.length-1;0<=e;e--)if(t[e].name===E.toUpperCase())return t[e]}return{startState:function(){return{state:"",base:10,coreWordList:E,immediateWordList:e,wordList:[]}},token:function(t,E){var e;if(t.eatSpace())return null;if(""===E.state){if(t.match(/^(\]|:NONAME)(\s|$)/i))return E.state=" compilation","builtin compilation";if(e=t.match(/^(\:)\s+(\S+)(\s|$)+/))return E.wordList.push({name:e[2].toUpperCase()}),E.state=" compilation","def"+E.state;if(e=t.match(/^(VARIABLE|2VARIABLE|CONSTANT|2CONSTANT|CREATE|POSTPONE|VALUE|WORD)\s+(\S+)(\s|$)+/i))return E.wordList.push({name:e[2].toUpperCase()}),"def"+E.state;if(e=t.match(/^(\'|\[\'\])\s+(\S+)(\s|$)+/))return"builtin"+E.state}else{if(t.match(/^(\;|\[)(\s)/))return E.state="",t.backUp(1),"builtin compilation";if(t.match(/^(\;|\[)($)/))return E.state="","builtin compilation";if(t.match(/^(POSTPONE)\s+\S+(\s|$)+/))return"builtin"}return(e=t.match(/^(\S+)(\s+|$)/))?void 0!==i(E.wordList,e[1])?"variable"+E.state:"\\"===e[1]?(t.skipToEnd(),"comment"+E.state):void 0!==i(E.coreWordList,e[1])?"builtin"+E.state:void 0!==i(E.immediateWordList,e[1])?"keyword"+E.state:"("===e[1]?(t.eatWhile(function(t){return")"!==t}),t.eat(")"),"comment"+E.state):".("===e[1]?(t.eatWhile(function(t){return")"!==t}),t.eat(")"),"string"+E.state):'S"'===e[1]||'."'===e[1]||'C"'===e[1]?(t.eatWhile(function(t){return'"'!==t}),t.eat('"'),"string"+E.state):e[1]-68719476735?"number"+E.state:"atom"+E.state:void 0}}}),CodeMirror.defineMIME("text/x-forth","forth")}(); // fortran CodeMirror.defineMode("fortran",function(){function e(e){for(var t={},n=0;n\/\:]/,l=new RegExp("(.and.|.or.|.eq.|.lt.|.le.|.gt.|.ge.|.ne.|.not.|.eqv.|.neqv.)","i");return{startState:function(){return{tokenize:null}},token:function(e,t){if(e.eatSpace())return null;t=(t.tokenize||function(e,t){if(e.match(l))return"operator";var r,n=e.next();return"!"==n?(e.skipToEnd(),"comment"):'"'==n||"'"==n?(t.tokenize=(r=n,function(e,t){for(var n,a=!1,i=!1;null!=(n=e.next());){if(n==r&&!a){i=!0;break}a=!a&&"\\"==n}return!i&&a||(t.tokenize=null),"string"}),t.tokenize(e,t)):/[\[\]\(\),]/.test(n)?null:/\d/.test(n)?(e.eatWhile(/[\w\.]/),"number"):c.test(n)?(e.eatWhile(c),"operator"):(e.eatWhile(/[\w\$_]/),e=e.current().toLowerCase(),a.hasOwnProperty(e)?"keyword":i.hasOwnProperty(e)||o.hasOwnProperty(e)?"builtin":"variable")})(e,t);return t}}}),CodeMirror.defineMIME("text/x-fortran","fortran"); // gas CodeMirror.defineMode("gas",function(i,l){"use strict";var r=[],a="",u={".abort":"builtin",".align":"builtin",".altmacro":"builtin",".ascii":"builtin",".asciz":"builtin",".balign":"builtin",".balignw":"builtin",".balignl":"builtin",".bundle_align_mode":"builtin",".bundle_lock":"builtin",".bundle_unlock":"builtin",".byte":"builtin",".cfi_startproc":"builtin",".comm":"builtin",".data":"builtin",".def":"builtin",".desc":"builtin",".dim":"builtin",".double":"builtin",".eject":"builtin",".else":"builtin",".elseif":"builtin",".end":"builtin",".endef":"builtin",".endfunc":"builtin",".endif":"builtin",".equ":"builtin",".equiv":"builtin",".eqv":"builtin",".err":"builtin",".error":"builtin",".exitm":"builtin",".extern":"builtin",".fail":"builtin",".file":"builtin",".fill":"builtin",".float":"builtin",".func":"builtin",".global":"builtin",".gnu_attribute":"builtin",".hidden":"builtin",".hword":"builtin",".ident":"builtin",".if":"builtin",".incbin":"builtin",".include":"builtin",".int":"builtin",".internal":"builtin",".irp":"builtin",".irpc":"builtin",".lcomm":"builtin",".lflags":"builtin",".line":"builtin",".linkonce":"builtin",".list":"builtin",".ln":"builtin",".loc":"builtin",".loc_mark_labels":"builtin",".local":"builtin",".long":"builtin",".macro":"builtin",".mri":"builtin",".noaltmacro":"builtin",".nolist":"builtin",".octa":"builtin",".offset":"builtin",".org":"builtin",".p2align":"builtin",".popsection":"builtin",".previous":"builtin",".print":"builtin",".protected":"builtin",".psize":"builtin",".purgem":"builtin",".pushsection":"builtin",".quad":"builtin",".reloc":"builtin",".rept":"builtin",".sbttl":"builtin",".scl":"builtin",".section":"builtin",".set":"builtin",".short":"builtin",".single":"builtin",".size":"builtin",".skip":"builtin",".sleb128":"builtin",".space":"builtin",".stab":"builtin",".string":"builtin",".struct":"builtin",".subsection":"builtin",".symver":"builtin",".tag":"builtin",".text":"builtin",".title":"builtin",".type":"builtin",".uleb128":"builtin",".val":"builtin",".version":"builtin",".vtable_entry":"builtin",".vtable_inherit":"builtin",".warning":"builtin",".weak":"builtin",".weakref":"builtin",".word":"builtin"},o={};l=(l.architecture||"x86").toLowerCase();function v(i,l){for(var t,n=!1;null!=(t=i.next());){if("/"===t&&n){l.tokenize=null;break}n="*"===t}return"comment"}return"x86"===l?(a="#",o.al="variable",o.ah="variable",o.ax="variable",o.eax="variable-2",o.rax="variable-3",o.bl="variable",o.bh="variable",o.bx="variable",o.ebx="variable-2",o.rbx="variable-3",o.cl="variable",o.ch="variable",o.cx="variable",o.ecx="variable-2",o.rcx="variable-3",o.dl="variable",o.dh="variable",o.dx="variable",o.edx="variable-2",o.rdx="variable-3",o.si="variable",o.esi="variable-2",o.rsi="variable-3",o.di="variable",o.edi="variable-2",o.rdi="variable-3",o.sp="variable",o.esp="variable-2",o.rsp="variable-3",o.bp="variable",o.ebp="variable-2",o.rbp="variable-3",o.ip="variable",o.eip="variable-2",o.rip="variable-3",o.cs="keyword",o.ds="keyword",o.ss="keyword",o.es="keyword",o.fs="keyword",o.gs="keyword"):"arm"!==l&&"armv6"!==l||(a="@",u.syntax="builtin",o.r0="variable",o.r1="variable",o.r2="variable",o.r3="variable",o.r4="variable",o.r5="variable",o.r6="variable",o.r7="variable",o.r8="variable",o.r9="variable",o.r10="variable",o.r11="variable",o.r12="variable",o.sp="variable-2",o.lr="variable-2",o.pc="variable-2",o.r13=o.sp,o.r14=o.lr,o.r15=o.pc,r.push(function(i,l){if("#"===i)return l.eatWhile(/\w/),"number"})),{startState:function(){return{tokenize:null}},token:function(i,l){if(l.tokenize)return l.tokenize(i,l);if(i.eatSpace())return null;var t,n,e=i.next();if("/"===e&&i.eat("*"))return(l.tokenize=v)(i,l);if(e===a)return i.skipToEnd(),"comment";if('"'===e)return function(i,l){for(var t,n=!1;null!=(t=i.next());){if(t===l&&!n)return;n=!n&&"\\"===t}}(i,'"'),"string";if("."===e)return i.eatWhile(/\w/),n=i.current().toLowerCase(),(t=u[n])||null;if("="===e)return i.eatWhile(/\w/),"tag";if("{"===e)return"bracket";if("}"===e)return"bracket";if(/\d/.test(e))return"0"===e&&i.eat("x")?i.eatWhile(/[0-9a-fA-F]/):i.eatWhile(/\d/),"number";if(/\w/.test(e))return i.eatWhile(/\w/),i.eat(":")?"tag":(n=i.current().toLowerCase(),(t=o[n])||null);for(var b=0;b]|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`*!()\[\]{};:'".,<>?«»“”‘’]))/i;CodeMirror.defineMode("gfm",function(e,n){var o=0;var t,a={startState:function(){return{code:!1,codeBlock:!1,ateSpace:!1}},copyState:function(e){return{code:e.code,codeBlock:e.codeBlock,ateSpace:e.ateSpace}},token:function(e,t){if(t.combineTokens=null,t.codeBlock)return e.match(/^```+/)?t.codeBlock=!1:e.skipToEnd(),null;if(e.sol()&&(t.code=!1),e.sol()&&e.match(/^```+/))return e.skipToEnd(),t.codeBlock=!0,null;if("`"===e.peek()){e.next();var a=e.pos;e.eatWhile("`");a=1+e.pos-a;return t.code?a===o&&(t.code=!1):(o=a,t.code=!0),null}if(t.code)return e.next(),null;if(e.eatSpace())return t.ateSpace=!0,null;if((e.sol()||t.ateSpace)&&(t.ateSpace=!1)!==n.gitHubSpice){if(e.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?=.{0,6}\d)(?:[a-f0-9]{7,40}\b)/))return t.combineTokens=!0,"link";if(e.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/))return t.combineTokens=!0,"link"}return e.match(s)&&"]("!=e.string.slice(e.start-2,e.start)&&(0==e.start||/\W/.test(e.string.charAt(e.start-1)))?(t.combineTokens=!0,"link"):(e.next(),null)},blankLine:function(e){return e.code=!1,null}},i={taskLists:!0,strikethrough:!0,emoji:!0};for(t in n)i[t]=n[t];return i.name="markdown",CodeMirror.overlayMode(CodeMirror.getMode(e,i),a)},"markdown"),CodeMirror.defineMIME("text/x-gfm","gfm")}(); // gherkin CodeMirror.defineMode("gherkin",function(){return{startState:function(){return{lineNumber:0,tableHeaderLine:!1,allowFeature:!0,allowBackground:!1,allowScenario:!1,allowSteps:!1,allowPlaceholders:!1,allowMultilineArgument:!1,inMultilineString:!1,inMultilineTable:!1,inKeywordLine:!1}},token:function(a,e){if(a.sol()&&(e.lineNumber++,e.inKeywordLine=!1,e.inMultilineTable&&(e.tableHeaderLine=!1,a.match(/\s*\|/,!1)||(e.allowMultilineArgument=!1,e.inMultilineTable=!1))),a.eatSpace(),e.allowMultilineArgument){if(e.inMultilineString)return a.match('"""')?(e.inMultilineString=!1,e.allowMultilineArgument=!1):a.match(/.*/),"string";if(e.inMultilineTable)return a.match(/\|\s*/)?"bracket":(a.match(/[^\|]*/),e.tableHeaderLine?"header":"string");if(a.match('"""'))return e.inMultilineString=!0,"string";if(a.match("|"))return e.inMultilineTable=!0,e.tableHeaderLine=!0,"bracket"}return a.match(/#.*/)?"comment":!e.inKeywordLine&&a.match(/@\S+/)?"tag":!e.inKeywordLine&&e.allowFeature&&a.match(/(機能|功能|フィーチャ|기능|โครงหลัก|ความสามารถ|ความต้องการทางธุรกิจ|ಹೆಚ್ಚಳ|గుణము|ਮੁਹਾਂਦਰਾ|ਨਕਸ਼ ਨੁਹਾਰ|ਖਾਸੀਅਤ|रूप लेख|وِیژگی|خاصية|תכונה|Функціонал|Функция|Функционалност|Функционал|Үзенчәлеклелек|Свойство|Особина|Мөмкинлек|Могућност|Λειτουργία|Δυνατότητα|Właściwość|Vlastnosť|Trajto|Tính năng|Savybė|Pretty much|Požiadavka|Požadavek|Potrzeba biznesowa|Özellik|Osobina|Ominaisuus|Omadus|OH HAI|Mogućnost|Mogucnost|Jellemző|Hwæt|Hwaet|Funzionalità|Funktionalitéit|Funktionalität|Funkcja|Funkcionalnost|Funkcionalitāte|Funkcia|Fungsi|Functionaliteit|Funcționalitate|Funcţionalitate|Functionalitate|Funcionalitat|Funcionalidade|Fonctionnalité|Fitur|Fīča|Feature|Eiginleiki|Egenskap|Egenskab|Característica|Caracteristica|Business Need|Aspekt|Arwedd|Ahoy matey!|Ability):/)?(e.allowScenario=!0,e.allowBackground=!0,e.allowPlaceholders=!1,e.allowSteps=!1,e.allowMultilineArgument=!1,e.inKeywordLine=!0,"keyword"):!e.inKeywordLine&&e.allowBackground&&a.match(/(背景|배경|แนวคิด|ಹಿನ್ನೆಲೆ|నేపథ్యం|ਪਿਛੋਕੜ|पृष्ठभूमि|زمینه|الخلفية|רקע|Тарих|Предыстория|Предистория|Позадина|Передумова|Основа|Контекст|Кереш|Υπόβαθρο|Założenia|Yo\-ho\-ho|Tausta|Taust|Situācija|Rerefons|Pozadina|Pozadie|Pozadí|Osnova|Latar Belakang|Kontext|Konteksts|Kontekstas|Kontekst|Háttér|Hannergrond|Grundlage|Geçmiş|Fundo|Fono|First off|Dis is what went down|Dasar|Contexto|Contexte|Context|Contesto|Cenário de Fundo|Cenario de Fundo|Cefndir|Bối cảnh|Bakgrunnur|Bakgrunn|Bakgrund|Baggrund|Background|B4|Antecedents|Antecedentes|Ær|Aer|Achtergrond):/)?(e.allowPlaceholders=!1,e.allowSteps=!0,e.allowBackground=!1,e.allowMultilineArgument=!1,e.inKeywordLine=!0,"keyword"):!e.inKeywordLine&&e.allowScenario&&a.match(/(場景大綱|场景大纲|劇本大綱|剧本大纲|テンプレ|シナリオテンプレート|シナリオテンプレ|シナリオアウトライン|시나리오 개요|สรุปเหตุการณ์|โครงสร้างของเหตุการณ์|ವಿವರಣೆ|కథనం|ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ|ਪਟਕਥਾ ਢਾਂਚਾ|परिदृश्य रूपरेखा|سيناريو مخطط|الگوی سناریو|תבנית תרחיש|Сценарийның төзелеше|Сценарий структураси|Структура сценарію|Структура сценария|Структура сценарија|Скица|Рамка на сценарий|Концепт|Περιγραφή Σεναρίου|Wharrimean is|Template Situai|Template Senario|Template Keadaan|Tapausaihio|Szenariogrundriss|Szablon scenariusza|Swa hwær swa|Swa hwaer swa|Struktura scenarija|Structură scenariu|Structura scenariu|Skica|Skenario konsep|Shiver me timbers|Senaryo taslağı|Schema dello scenario|Scenariomall|Scenariomal|Scenario Template|Scenario Outline|Scenario Amlinellol|Scenārijs pēc parauga|Scenarijaus šablonas|Reckon it's like|Raamstsenaarium|Plang vum Szenario|Plan du Scénario|Plan du scénario|Osnova scénáře|Osnova Scenára|Náčrt Scenáru|Náčrt Scénáře|Náčrt Scenára|MISHUN SRSLY|Menggariskan Senario|Lýsing Dæma|Lýsing Atburðarásar|Konturo de la scenaro|Koncept|Khung tình huống|Khung kịch bản|Forgatókönyv vázlat|Esquema do Cenário|Esquema do Cenario|Esquema del escenario|Esquema de l'escenari|Esbozo do escenario|Delineação do Cenário|Delineacao do Cenario|All y'all|Abstrakt Scenario|Abstract Scenario):/)?(e.allowPlaceholders=!0,e.allowSteps=!0,e.allowMultilineArgument=!1,e.inKeywordLine=!0,"keyword"):e.allowScenario&&a.match(/(例子|例|サンプル|예|ชุดของเหตุการณ์|ชุดของตัวอย่าง|ಉದಾಹರಣೆಗಳು|ఉదాహరణలు|ਉਦਾਹਰਨਾਂ|उदाहरण|نمونه ها|امثلة|דוגמאות|Үрнәкләр|Сценарији|Примеры|Примери|Приклади|Мисоллар|Мисаллар|Σενάρια|Παραδείγματα|You'll wanna|Voorbeelden|Variantai|Tapaukset|Se þe|Se the|Se ðe|Scenarios|Scenariji|Scenarijai|Przykłady|Primjeri|Primeri|Příklady|Príklady|Piemēri|Példák|Pavyzdžiai|Paraugs|Örnekler|Juhtumid|Exemplos|Exemples|Exemple|Exempel|EXAMPLZ|Examples|Esempi|Enghreifftiau|Ekzemploj|Eksempler|Ejemplos|Dữ liệu|Dead men tell no tales|Dæmi|Contoh|Cenários|Cenarios|Beispiller|Beispiele|Atburðarásir):/)?(e.allowPlaceholders=!1,e.allowSteps=!0,e.allowBackground=!1,e.allowMultilineArgument=!0,"keyword"):!e.inKeywordLine&&e.allowScenario&&a.match(/(場景|场景|劇本|剧本|シナリオ|시나리오|เหตุการณ์|ಕಥಾಸಾರಾಂಶ|సన్నివేశం|ਪਟਕਥਾ|परिदृश्य|سيناريو|سناریو|תרחיש|Сценарій|Сценарио|Сценарий|Пример|Σενάριο|Tình huống|The thing of it is|Tapaus|Szenario|Swa|Stsenaarium|Skenario|Situai|Senaryo|Senario|Scenaro|Scenariusz|Scenariu|Scénario|Scenario|Scenarijus|Scenārijs|Scenarij|Scenarie|Scénář|Scenár|Primer|MISHUN|Kịch bản|Keadaan|Heave to|Forgatókönyv|Escenario|Escenari|Cenário|Cenario|Awww, look mate|Atburðarás):/)?(e.allowPlaceholders=!1,e.allowSteps=!0,e.allowBackground=!1,e.allowMultilineArgument=!1,e.inKeywordLine=!0,"keyword"):!e.inKeywordLine&&e.allowSteps&&a.match(/(那麼|那么|而且|當|当|并且|同時|同时|前提|假设|假設|假定|假如|但是|但し|並且|もし|ならば|ただし|しかし|かつ|하지만|조건|먼저|만일|만약|단|그리고|그러면|และ |เมื่อ |แต่ |ดังนั้น |กำหนดให้ |ಸ್ಥಿತಿಯನ್ನು |ಮತ್ತು |ನೀಡಿದ |ನಂತರ |ಆದರೆ |మరియు |చెప్పబడినది |కాని |ఈ పరిస్థితిలో |అప్పుడు |ਪਰ |ਤਦ |ਜੇਕਰ |ਜਿਵੇਂ ਕਿ |ਜਦੋਂ |ਅਤੇ |यदि |परन्तु |पर |तब |तदा |तथा |जब |चूंकि |किन्तु |कदा |और |अगर |و |هنگامی |متى |لكن |عندما |ثم |بفرض |با فرض |اما |اذاً |آنگاه |כאשר |וגם |בהינתן |אזי |אז |אבל |Якщо |Һәм |Унда |Тоді |Тогда |То |Также |Та |Пусть |Припустимо, що |Припустимо |Онда |Но |Нехай |Нәтиҗәдә |Лекин |Ләкин |Коли |Когда |Когато |Када |Кад |К тому же |І |И |Задато |Задати |Задате |Если |Допустим |Дано |Дадено |Вә |Ва |Бирок |Әмма |Әйтик |Әгәр |Аммо |Али |Але |Агар |А також |А |Τότε |Όταν |Και |Δεδομένου |Αλλά |Þurh |Þegar |Þa þe |Þá |Þa |Zatati |Zakładając |Zadato |Zadate |Zadano |Zadani |Zadan |Za předpokladu |Za predpokladu |Youse know when youse got |Youse know like when |Yna |Yeah nah |Y'know |Y |Wun |Wtedy |When y'all |When |Wenn |WEN |wann |Ve |Và |Und |Un |ugeholl |Too right |Thurh |Thì |Then y'all |Then |Tha the |Tha |Tetapi |Tapi |Tak |Tada |Tad |Stel |Soit |Siis |Și |Şi |Si |Sed |Se |Så |Quando |Quand |Quan |Pryd |Potom |Pokud |Pokiaľ |Però |Pero |Pak |Oraz |Onda |Ond |Oletetaan |Og |Och |O zaman |Niin |Nhưng |När |Når |Mutta |Men |Mas |Maka |Majd |Mając |Mais |Maar |mä |Ma |Lorsque |Lorsqu'|Logo |Let go and haul |Kun |Kuid |Kui |Kiedy |Khi |Ketika |Kemudian |Keď |Když |Kaj |Kai |Kada |Kad |Jeżeli |Jeśli |Ja |It's just unbelievable |Ir |I CAN HAZ |I |Ha |Givun |Givet |Given y'all |Given |Gitt |Gegeven |Gegeben seien |Gegeben sei |Gdy |Gangway! |Fakat |Étant donnés |Etant donnés |Étant données |Etant données |Étant donnée |Etant donnée |Étant donné |Etant donné |Et |És |Entonces |Entón |Então |Entao |En |Eğer ki |Ef |Eeldades |E |Ðurh |Duota |Dun |Donitaĵo |Donat |Donada |Do |Diyelim ki |Diberi |Dengan |Den youse gotta |DEN |De |Dato |Dați fiind |Daţi fiind |Dati fiind |Dati |Date fiind |Date |Data |Dat fiind |Dar |Dann |dann |Dan |Dados |Dado |Dadas |Dada |Ða ðe |Ða |Cuando |Cho |Cando |Când |Cand |Cal |But y'all |But at the end of the day I reckon |BUT |But |Buh |Blimey! |Biết |Bet |Bagi |Aye |awer |Avast! |Atunci |Atesa |Atès |Apabila |Anrhegedig a |Angenommen |And y'all |And |AN |An |an |Amikor |Amennyiben |Ama |Als |Alors |Allora |Ali |Aleshores |Ale |Akkor |Ak |Adott |Ac |Aber |A zároveň |A tiež |A taktiež |A také |A |a |7 |\* )/)?(e.inStep=!0,e.allowPlaceholders=!0,e.allowMultilineArgument=!0,e.inKeywordLine=!0,"keyword"):a.match(/"[^"]*"?/)?"string":e.allowPlaceholders&&a.match(/<[^>]*>?/)?"variable":(a.next(),a.eatWhile(/[^@"<#]/),null)}}}),CodeMirror.defineMIME("text/x-feature","gherkin"); // go CodeMirror.defineMode("go",function(e){var i,o=e.indentUnit,r={break:!0,case:!0,chan:!0,const:!0,continue:!0,default:!0,defer:!0,else:!0,fallthrough:!0,for:!0,func:!0,go:!0,goto:!0,if:!0,import:!0,interface:!0,map:!0,package:!0,range:!0,return:!0,select:!0,struct:!0,switch:!0,type:!0,var:!0,bool:!0,byte:!0,complex64:!0,complex128:!0,float32:!0,float64:!0,int8:!0,int16:!0,int32:!0,int64:!0,string:!0,uint8:!0,uint16:!0,uint32:!0,uint64:!0,int:!0,uint:!0,uintptr:!0,error:!0,rune:!0},a={true:!0,false:!0,iota:!0,nil:!0,append:!0,cap:!0,close:!0,complex:!0,copy:!0,delete:!0,imag:!0,len:!0,make:!0,new:!0,panic:!0,print:!0,println:!0,real:!0,recover:!0},c=/[+\-*&^%:=<>!|\/]/;function u(e,t){var o,n=e.next();if('"'==n||"'"==n||"`"==n)return t.tokenize=(o=n,function(e,t){for(var n,r=!1,i=!1;null!=(n=e.next());){if(n==o&&!r){i=!0;break}r=!r&&"`"!=o&&"\\"==n}return(i||!r&&"`"!=o)&&(t.tokenize=u),"string"}),t.tokenize(e,t);if(/[\d\.]/.test(n))return"."==n?e.match(/^[0-9]+([eE][\-+]?[0-9]+)?/):"0"==n?e.match(/^[xX][0-9a-fA-F]+/)||e.match(/^0[0-7]+/):e.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/),"number";if(/[\[\]{}\(\),;\:\.]/.test(n))return i=n,null;if("/"==n){if(e.eat("*"))return(t.tokenize=l)(e,t);if(e.eat("/"))return e.skipToEnd(),"comment"}if(c.test(n))return e.eatWhile(c),"operator";e.eatWhile(/[\w\$_\xa1-\uffff]/);e=e.current();return r.propertyIsEnumerable(e)?("case"!=e&&"default"!=e||(i="case"),"keyword"):a.propertyIsEnumerable(e)?"atom":"variable"}function l(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=u;break}r="*"==n}return"comment"}function f(e,t,n,r,i){this.indented=e,this.column=t,this.type=n,this.align=r,this.prev=i}function s(e,t,n){return e.context=new f(e.indented,t,n,null,e.context)}function d(e){if(e.context.prev){var t=e.context.type;return")"!=t&&"]"!=t&&"}"!=t||(e.indented=e.context.indented),e.context=e.context.prev}}return{startState:function(e){return{tokenize:null,context:new f((e||0)-o,0,"top",!1),indented:0,startOfLine:!0}},token:function(e,t){var n=t.context;if(e.sol()&&(null==n.align&&(n.align=!1),t.indented=e.indentation(),t.startOfLine=!0,"case"==n.type&&(n.type="}")),e.eatSpace())return null;i=null;var r=(t.tokenize||u)(e,t);return"comment"==r||(null==n.align&&(n.align=!0),"{"==i?s(t,e.column(),"}"):"["==i?s(t,e.column(),"]"):"("==i?s(t,e.column(),")"):"case"==i?n.type="case":("}"==i&&"}"==n.type||i==n.type)&&d(t),t.startOfLine=!1),r},indent:function(e,t){if(e.tokenize!=u&&null!=e.tokenize)return CodeMirror.Pass;var n=e.context,r=t&&t.charAt(0);if("case"==n.type&&/^(?:case|default)\b/.test(t))return e.context.type="}",n.indented;r=r==n.type;return n.align?n.column+(r?0:1):n.indented+(r?0:o)},electricChars:"{}):",closeBrackets:"()[]{}''\"\"``",fold:"brace",blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//"}}),CodeMirror.defineMIME("text/x-go","go"); // groovy CodeMirror.defineMode("groovy",function(r){function e(e){for(var t={},n=e.split(" "),r=0;r"))return i="->",null;if(/[+\-*&%=<>!?|\/~]/.test(n))return e.eatWhile(/[+\-*&%=<>|~]/),"operator";if(e.eatWhile(/[\w\$_]/),"@"==n)return e.eatWhile(/[\w\$_\.]/),"meta";if("."==t.lastToken)return"property";if(e.eat(":"))return i="proplabel","property";e=e.current();return s.propertyIsEnumerable(e)?"atom":o.propertyIsEnumerable(e)?(a.propertyIsEnumerable(e)?i="newstatement":l.propertyIsEnumerable(e)&&(i="standalone"),"keyword"):"variable"}function f(o,e,t){var a=!1;if("/"!=o&&e.eat(o)){if(!e.eat(o))return"string";a=!0}function n(e,t){for(var n,r=!1,i=!a;null!=(n=e.next());){if(n==o&&!r){if(!a)break;if(e.match(o+o)){i=!0;break}}if('"'==o&&"$"==n&&!r&&e.eat("{"))return t.tokenize.push(function(){var n=1;function e(e,t){if("}"==e.peek()){if(0==--n)return t.tokenize.pop(),t.tokenize[t.tokenize.length-1](e,t)}else"{"==e.peek()&&n++;return u(e,t)}return e.isBase=!0,e}()),"string";r=!r&&"\\"==n}return i&&t.tokenize.pop(),"string"}return t.tokenize.push(n),n(e,t)}function c(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize.pop();break}r="*"==n}return"comment"}function p(e,t){return!e||"operator"==e||"->"==e||/[\.\[\{\(,;:]/.test(e)||"newstatement"==e||"keyword"==e||"proplabel"==e||"standalone"==e&&!t}function d(e,t,n,r,i){this.indented=e,this.column=t,this.type=n,this.align=r,this.prev=i}function m(e,t,n){return e.context=new d(e.indented,t,n,null,e.context)}function k(e){var t=e.context.type;return")"!=t&&"]"!=t&&"}"!=t||(e.indented=e.context.indented),e.context=e.context.prev}return u.isBase=!0,{startState:function(e){return{tokenize:[u],context:new d((e||0)-r.indentUnit,0,"top",!1),indented:0,startOfLine:!0,lastToken:null}},token:function(e,t){var n=t.context;if(e.sol()&&(null==n.align&&(n.align=!1),t.indented=e.indentation(),t.startOfLine=!0,"statement"!=n.type||p(t.lastToken,!0)||(k(t),n=t.context)),e.eatSpace())return null;i=null;var r=t.tokenize[t.tokenize.length-1](e,t);if("comment"==r)return r;if(null==n.align&&(n.align=!0),";"!=i&&":"!=i||"statement"!=n.type)if("->"==i&&"statement"==n.type&&"}"==n.prev.type)k(t),t.context.align=!1;else if("{"==i)m(t,e.column(),"}");else if("["==i)m(t,e.column(),"]");else if("("==i)m(t,e.column(),")");else if("}"==i){for(;"statement"==n.type;)n=k(t);for("}"==n.type&&(n=k(t));"statement"==n.type;)n=k(t)}else i==n.type?k(t):("}"==n.type||"top"==n.type||"statement"==n.type&&"newstatement"==i)&&m(t,e.column(),"statement");else k(t);return t.startOfLine=!1,t.lastToken=i||r,r},indent:function(e,t){if(!e.tokenize[e.tokenize.length-1].isBase)return CodeMirror.Pass;var n=t&&t.charAt(0),t=e.context,e=n==(t="statement"==t.type&&!p(e.lastToken,!0)?t.prev:t).type;return"statement"==t.type?t.indented+("{"==n?0:r.indentUnit):t.align?t.column+(e?0:1):t.indented+(e?0:r.indentUnit)},electricChars:"{}",closeBrackets:{triples:"'\""},fold:"brace",blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//"}}),CodeMirror.defineMIME("text/x-groovy","groovy"); // haml CodeMirror.defineMode("haml",function(e){var r=CodeMirror.getMode(e,{name:"htmlmixed"}),n=CodeMirror.getMode(e,"ruby");function i(n){return function(e,t){return e.peek()==n&&1==t.rubyState.tokenize.length?(e.next(),t.tokenize=a,"closeAttributeTag"):o(e,t)}}function o(e,t){return e.match("-#")?(e.skipToEnd(),"comment"):n.token(e,t.rubyState)}function a(e,t){var n=e.peek();if("comment"==t.previousToken.style&&t.indented>t.previousToken.indented)return e.skipToEnd(),"commentLine";if(t.startOfLine){if("!"==n&&e.match("!!"))return e.skipToEnd(),"tag";if(e.match(/^%[\w:#\.]+=/))return t.tokenize=o,"hamlTag";if(e.match(/^%[\w:]+/))return"hamlTag";if("/"==n)return e.skipToEnd(),"comment"}if((t.startOfLine||"hamlTag"==t.previousToken.style)&&("#"==n||"."==n))return e.match(/[\w-#\.]*/),"hamlAttribute";if(t.startOfLine&&!e.match("--\x3e",!1)&&("="==n||"-"==n))return t.tokenize=o,t.tokenize(e,t);if("hamlTag"==t.previousToken.style||"closeAttributeTag"==t.previousToken.style||"hamlAttribute"==t.previousToken.style){if("("==n)return t.tokenize=i(")"),t.tokenize(e,t);if("{"==n&&!e.match(/^\{%.*/))return t.tokenize=i("}"),t.tokenize(e,t)}return r.token(e,t.htmlState)}return{startState:function(){return{htmlState:CodeMirror.startState(r),rubyState:CodeMirror.startState(n),indented:0,previousToken:{style:null,indented:0},tokenize:a}},copyState:function(e){return{htmlState:CodeMirror.copyState(r,e.htmlState),rubyState:CodeMirror.copyState(n,e.rubyState),indented:e.indented,previousToken:e.previousToken,tokenize:e.tokenize}},token:function(e,t){if(e.sol()&&(t.indented=e.indentation(),t.startOfLine=!0),e.eatSpace())return null;var n,r=t.tokenize(e,t);return t.startOfLine=!1,r&&"commentLine"!=r&&(t.previousToken={style:r,indented:t.indented}),e.eol()&&t.tokenize==o&&(e.backUp(1),n=e.peek(),e.next(),n&&","!=n&&(t.tokenize=a)),"hamlTag"==r?r="tag":"commentLine"==r?r="comment":"hamlAttribute"==r?r="attribute":"closeAttributeTag"==r&&(r=null),r}}},"htmlmixed","ruby"),CodeMirror.defineMIME("text/x-haml","haml"); // handlebars CodeMirror.defineSimpleMode("handlebars-tags",{start:[{regex:/\{\{\{/,push:"handlebars_raw",token:"tag"},{regex:/\{\{!--/,push:"dash_comment",token:"comment"},{regex:/\{\{!/,push:"comment",token:"comment"},{regex:/\{\{/,push:"handlebars",token:"tag"}],handlebars_raw:[{regex:/\}\}\}/,pop:!0,token:"tag"}],handlebars:[{regex:/\}\}/,pop:!0,token:"tag"},{regex:/"(?:[^\\"]|\\.)*"?/,token:"string"},{regex:/'(?:[^\\']|\\.)*'?/,token:"string"},{regex:/>|[#\/]([A-Za-z_]\w*)/,token:"keyword"},{regex:/(?:else|this)\b/,token:"keyword"},{regex:/\d+/i,token:"number"},{regex:/=|~|@|true|false/,token:"atom"},{regex:/(?:\.\.\/)*(?:[A-Za-z_][\w\.]*)+/,token:"variable-2"}],dash_comment:[{regex:/--\}\}/,pop:!0,token:"comment"},{regex:/./,token:"comment"}],comment:[{regex:/\}\}/,pop:!0,token:"comment"},{regex:/./,token:"comment"}],meta:{blockCommentStart:"{{--",blockCommentEnd:"--}}"}}),CodeMirror.defineMode("handlebars",function(e,r){var o=CodeMirror.getMode(e,"handlebars-tags");return r&&r.base?CodeMirror.multiplexingMode(CodeMirror.getMode(e,r.base),{open:"{{",close:/\}\}\}?/,mode:o,parseDelimiters:!0}):o}),CodeMirror.defineMIME("text/x-handlebars-template","handlebars"); // haskell CodeMirror.defineMode("haskell",function(e,a){function i(e,r,t){return r(t),t(e,r)}var o=/[a-z_]/,l=/[A-Z]/,u=/\d/,s=/[0-9A-Fa-f]/,f=/[0-7]/,c=/[a-z_A-Z0-9'\xa1-\uffff]/,d=/[-!#$%&*+.\/<=>?@\\^|~:]/,m=/[(),;[\]`{}]/,h=/[ \t\v\f]/;function p(e,r){if(e.eatWhile(h))return null;var t=e.next();if(m.test(t)){if("{"==t&&e.eat("-")){var n="comment";return e.eat("#")&&(n="meta"),i(e,r,function a(i,o){if(0==o)return p;return function(e,r){for(var t=o;!e.eol();){var n=e.next();if("{"==n&&e.eat("-"))++t;else if("-"==n&&e.eat("}")&&0==--t)return r(p),i}return r(a(i,t)),i}}(n,1))}return null}if("'"==t)return e.eat("\\"),e.next(),e.eat("'")?"string":"string error";if('"'==t)return i(e,r,g);if(l.test(t))return e.eatWhile(c),e.eat(".")?"qualifier":"variable-2";if(o.test(t))return e.eatWhile(c),"variable";if(u.test(t)){if("0"==t){if(e.eat(/[xX]/))return e.eatWhile(s),"integer";if(e.eat(/[oO]/))return e.eatWhile(f),"number"}e.eatWhile(u);n="number";return e.match(/^\.\d+/)&&(n="number"),e.eat(/[eE]/)&&(n="number",e.eat(/[-+]/),e.eatWhile(u)),n}if("."==t&&e.eat("."))return"keyword";if(d.test(t)){if("-"==t&&e.eat(/-/)&&(e.eatWhile(/-/),!e.eat(d)))return e.skipToEnd(),"comment";n=":"==t?"variable-2":"variable";return e.eatWhile(d),n}return"error"}function g(e,r){for(;!e.eol();){var t=e.next();if('"'==t)return r(p),"string";if("\\"==t){if(e.eol()||e.eat(h))return r(n),"string";e.eat("&")||e.next()}}return r(p),"string error"}function n(e,r){return e.eat("\\")?i(e,r,g):(e.next(),r(p),"error")}var v=function(){var t={};function e(r){return function(){for(var e=0;e","@","~","=>"),e("builtin")("!!","$!","$","&&","+","++","-",".","/","/=","<","<*","<=","<$>","<*>","=<<","==",">",">=",">>",">>=","^","^^","||","*","*>","**"),e("builtin")("Applicative","Bool","Bounded","Char","Double","EQ","Either","Enum","Eq","False","FilePath","Float","Floating","Fractional","Functor","GT","IO","IOError","Int","Integer","Integral","Just","LT","Left","Maybe","Monad","Nothing","Num","Ord","Ordering","Rational","Read","ReadS","Real","RealFloat","RealFrac","Right","Show","ShowS","String","True"),e("builtin")("abs","acos","acosh","all","and","any","appendFile","asTypeOf","asin","asinh","atan","atan2","atanh","break","catch","ceiling","compare","concat","concatMap","const","cos","cosh","curry","cycle","decodeFloat","div","divMod","drop","dropWhile","either","elem","encodeFloat","enumFrom","enumFromThen","enumFromThenTo","enumFromTo","error","even","exp","exponent","fail","filter","flip","floatDigits","floatRadix","floatRange","floor","fmap","foldl","foldl1","foldr","foldr1","fromEnum","fromInteger","fromIntegral","fromRational","fst","gcd","getChar","getContents","getLine","head","id","init","interact","ioError","isDenormalized","isIEEE","isInfinite","isNaN","isNegativeZero","iterate","last","lcm","length","lex","lines","log","logBase","lookup","map","mapM","mapM_","max","maxBound","maximum","maybe","min","minBound","minimum","mod","negate","not","notElem","null","odd","or","otherwise","pi","pred","print","product","properFraction","pure","putChar","putStr","putStrLn","quot","quotRem","read","readFile","readIO","readList","readLn","readParen","reads","readsPrec","realToFrac","recip","rem","repeat","replicate","return","reverse","round","scaleFloat","scanl","scanl1","scanr","scanr1","seq","sequence","sequence_","show","showChar","showList","showParen","showString","shows","showsPrec","significand","signum","sin","sinh","snd","span","splitAt","sqrt","subtract","succ","sum","tail","take","takeWhile","tan","tanh","toEnum","toInteger","toRational","truncate","uncurry","undefined","unlines","until","unwords","unzip","unzip3","userError","words","writeFile","zip","zip3","zipWith","zipWith3");var r=a.overrideKeywords;if(r)for(var n in r)r.hasOwnProperty(n)&&(t[n]=r[n]);return t}();return{startState:function(){return{f:p}},copyState:function(e){return{f:e.f}},token:function(e,r){var t=r.f(e,function(e){r.f=e}),e=e.current();return v.hasOwnProperty(e)?v[e]:t},blockCommentStart:"{-",blockCommentEnd:"-}",lineComment:"--"}}),CodeMirror.defineMIME("text/x-haskell","haskell"); // haskell-literate CodeMirror.defineMode("haskell-literate",function(e,t){var r=CodeMirror.getMode(e,t&&t.base||"haskell");return{startState:function(){return{inCode:!1,baseState:CodeMirror.startState(r)}},token:function(e,t){return e.sol()&&(t.inCode=e.eat(">"))?"meta":t.inCode?r.token(e,t.baseState):(e.skipToEnd(),"comment")},innerMode:function(e){return e.inCode?{state:e.baseState,mode:r}:null}}},"haskell"),CodeMirror.defineMIME("text/x-literate-haskell","haskell-literate"); // haxe CodeMirror.defineMode("haxe",function(e,t){var i=e.indentUnit;function n(e){return{type:e,style:"keyword"}}var r,a=n("keyword a"),o=n("keyword b"),l=n("keyword c"),c=n("operator"),u={type:"atom",style:"atom"},e={type:"attribute",style:"attribute"},f=n("typedef"),s={if:a,while:a,else:o,do:o,try:o,return:l,break:l,continue:l,new:l,throw:l,var:n("var"),inline:e,static:e,using:n("import"),public:e,private:e,cast:n("cast"),import:n("import"),macro:n("macro"),function:n("function"),catch:n("catch"),untyped:n("untyped"),callback:n("cb"),for:n("for"),switch:n("switch"),case:n("case"),default:n("default"),in:c,never:n("property_access"),trace:n("trace"),class:f,abstract:f,enum:f,interface:f,typedef:f,extends:f,implements:f,dynamic:f,true:u,false:u,null:u},d=/[+\-*&%=<>!?|]/;function p(e,t,n){return(t.tokenize=n)(e,t)}function m(e,t){for(var n,r=!1;null!=(n=e.next());){if(n==t&&!r)return 1;r=!r&&"\\"==n}}function v(e,t,n){return f=e,r=n,t}function b(e,t){var n=e.next();if('"'==n||"'"==n)return p(e,t,(r=n,function(e,t){return m(e,r)&&(t.tokenize=b),v("string","string")}));if(/[\[\]{}\(\),;\:\.]/.test(n))return v(n);if("0"==n&&e.eat(/x/i))return e.eatWhile(/[\da-f]/i),v("number","number");if(/\d/.test(n)||"-"==n&&e.eat(/\d/))return e.match(/^\d*(?:\.\d*(?!\.))?(?:[eE][+\-]?\d+)?/),v("number","number");if(t.reAllowed&&"~"==n&&e.eat(/\//))return m(e,"/"),e.eatWhile(/[gimsu]/),v("regexp","string-2");if("/"==n)return e.eat("*")?p(e,t,y):e.eat("/")?(e.skipToEnd(),v("comment","comment")):(e.eatWhile(d),v("operator",null,e.current()));if("#"==n)return e.skipToEnd(),v("conditional","meta");if("@"==n)return e.eat(/:/),e.eatWhile(/[\w_]/),v("metadata","meta");if(d.test(n))return e.eatWhile(d),v("operator",null,e.current());if(/[A-Z]/.test(n))return e.eatWhile(/[\w_<>]/),v("type","variable-3",a=e.current());e.eatWhile(/[\w_]/);var r,a=e.current(),e=s.propertyIsEnumerable(a)&&s[a];return e&&t.kwAllowed?v(e.type,e.style,a):v("variable","variable",a)}function y(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=b;break}r="*"==n}return v("comment","comment")}var x={atom:!0,number:!0,variable:!0,string:!0,regexp:!0};function h(e,t,n,r,a,i){this.indented=e,this.column=t,this.type=n,this.prev=a,this.info=i,null!=r&&(this.align=r)}function k(e,t,n,r,a){var i=e.cc;for(g.state=e,g.stream=a,g.marked=null,g.cc=i,e.lexical.hasOwnProperty("align")||(e.lexical.align=!0);;)if((i.length?i.pop():I)(n,r)){for(;i.length&&i[i.length-1].lex;)i.pop()();return g.marked?g.marked:"variable"==n&&function(e,t){for(var n=e.localVars;n;n=n.next)if(n.name==t)return 1}(e,r)?"variable-2":"variable"==n&&function(e,t){if(/[a-z]/.test(t.charAt(0)))return!1;for(var n=e.importedtypes.length,r=0;r";return CodeMirror.multiplexingMode(CodeMirror.getMode(e,"htmlmixed"),{open:o.openComment||"<%--",close:d,delimStyle:"comment",mode:{token:function(e){return e.skipTo(d)||e.skipToEnd(),"comment"}}},{open:o.open||o.scriptStartRegex||"<%",close:o.close||o.scriptEndRegex||"%>",mode:CodeMirror.getMode(e,o.scriptingModeSpec)})},"htmlmixed"),CodeMirror.defineMIME("application/x-ejs",{name:"htmlembedded",scriptingModeSpec:"javascript"}),CodeMirror.defineMIME("application/x-aspx",{name:"htmlembedded",scriptingModeSpec:"text/x-csharp"}),CodeMirror.defineMIME("application/x-jsp",{name:"htmlembedded",scriptingModeSpec:"text/x-java"}),CodeMirror.defineMIME("application/x-erb",{name:"htmlembedded",scriptingModeSpec:"ruby"}); // http CodeMirror.defineMode("http",function(){function e(r,t){return r.skipToEnd(),t.cur=c,"error"}function r(r,t){return r.match(/^HTTP\/\d\.\d/)?(t.cur=n,"keyword"):r.match(/^[A-Z]+/)&&/[ \t]/.test(r.peek())?(t.cur=i,"keyword"):e(r,t)}function n(r,t){var n=r.match(/^\d+/);if(!n)return e(r,t);t.cur=u;n=Number(n[0]);return 100<=n&&n<200?"positive informational":200<=n&&n<300?"positive success":300<=n&&n<400?"positive redirect":400<=n&&n<500?"negative client-error":500<=n&&n<600?"negative server-error":"error"}function u(r,t){return r.skipToEnd(),t.cur=c,null}function i(r,t){return r.eatWhile(/\S/),t.cur=o,"string-2"}function o(r,t){return r.match(/^HTTP\/\d\.\d$/)?(t.cur=c,"keyword"):e(r,t)}function c(r){return r.sol()&&!r.eat(/[ \t]/)?r.match(/^.*?:/)?"atom":(r.skipToEnd(),"error"):(r.skipToEnd(),"string")}function a(r){return r.skipToEnd(),null}return{token:function(r,t){var n=t.cur;return n!=c&&n!=a&&r.eatSpace()?null:n(r,t)},blankLine:function(r){r.cur=a},startState:function(){return{cur:r}}}}),CodeMirror.defineMIME("message/http","http"); // idl !function(){function e(e){return new RegExp("^(("+e.join(")|(")+"))\\b","i")}var t=["a_correlate","abs","acos","adapt_hist_equal","alog","alog2","alog10","amoeba","annotate","app_user_dir","app_user_dir_query","arg_present","array_equal","array_indices","arrow","ascii_template","asin","assoc","atan","axis","axis","bandpass_filter","bandreject_filter","barplot","bar_plot","beseli","beselj","beselk","besely","beta","biginteger","bilinear","bin_date","binary_template","bindgen","binomial","bit_ffs","bit_population","blas_axpy","blk_con","boolarr","boolean","boxplot","box_cursor","breakpoint","broyden","bubbleplot","butterworth","bytarr","byte","byteorder","bytscl","c_correlate","calendar","caldat","call_external","call_function","call_method","call_procedure","canny","catch","cd","cdf","ceil","chebyshev","check_math","chisqr_cvf","chisqr_pdf","choldc","cholsol","cindgen","cir_3pnt","clipboard","close","clust_wts","cluster","cluster_tree","cmyk_convert","code_coverage","color_convert","color_exchange","color_quan","color_range_map","colorbar","colorize_sample","colormap_applicable","colormap_gradient","colormap_rotation","colortable","comfit","command_line_args","common","compile_opt","complex","complexarr","complexround","compute_mesh_normals","cond","congrid","conj","constrained_min","contour","contour","convert_coord","convol","convol_fft","coord2to3","copy_lun","correlate","cos","cosh","cpu","cramer","createboxplotdata","create_cursor","create_struct","create_view","crossp","crvlength","ct_luminance","cti_test","cursor","curvefit","cv_coord","cvttobm","cw_animate","cw_animate_getp","cw_animate_load","cw_animate_run","cw_arcball","cw_bgroup","cw_clr_index","cw_colorsel","cw_defroi","cw_field","cw_filesel","cw_form","cw_fslider","cw_light_editor","cw_light_editor_get","cw_light_editor_set","cw_orient","cw_palette_editor","cw_palette_editor_get","cw_palette_editor_set","cw_pdmenu","cw_rgbslider","cw_tmpl","cw_zoom","db_exists","dblarr","dcindgen","dcomplex","dcomplexarr","define_key","define_msgblk","define_msgblk_from_file","defroi","defsysv","delvar","dendro_plot","dendrogram","deriv","derivsig","determ","device","dfpmin","diag_matrix","dialog_dbconnect","dialog_message","dialog_pickfile","dialog_printersetup","dialog_printjob","dialog_read_image","dialog_write_image","dictionary","digital_filter","dilate","dindgen","dissolve","dist","distance_measure","dlm_load","dlm_register","doc_library","double","draw_roi","edge_dog","efont","eigenql","eigenvec","ellipse","elmhes","emboss","empty","enable_sysrtn","eof","eos","erase","erf","erfc","erfcx","erode","errorplot","errplot","estimator_filter","execute","exit","exp","expand","expand_path","expint","extract","extract_slice","f_cvf","f_pdf","factorial","fft","file_basename","file_chmod","file_copy","file_delete","file_dirname","file_expand_path","file_gunzip","file_gzip","file_info","file_lines","file_link","file_mkdir","file_move","file_poll_input","file_readlink","file_same","file_search","file_tar","file_test","file_untar","file_unzip","file_which","file_zip","filepath","findgen","finite","fix","flick","float","floor","flow3","fltarr","flush","format_axis_values","forward_function","free_lun","fstat","fulstr","funct","function","fv_test","fx_root","fz_roots","gamma","gamma_ct","gauss_cvf","gauss_pdf","gauss_smooth","gauss2dfit","gaussfit","gaussian_function","gaussint","get_drive_list","get_dxf_objects","get_kbrd","get_login_info","get_lun","get_screen_size","getenv","getwindows","greg2jul","grib","grid_input","grid_tps","grid3","griddata","gs_iter","h_eq_ct","h_eq_int","hanning","hash","hdf","hdf5","heap_free","heap_gc","heap_nosave","heap_refcount","heap_save","help","hilbert","hist_2d","hist_equal","histogram","hls","hough","hqr","hsv","i18n_multibytetoutf8","i18n_multibytetowidechar","i18n_utf8tomultibyte","i18n_widechartomultibyte","ibeta","icontour","iconvertcoord","idelete","identity","idl_base64","idl_container","idl_validname","idlexbr_assistant","idlitsys_createtool","idlunit","iellipse","igamma","igetcurrent","igetdata","igetid","igetproperty","iimage","image","image_cont","image_statistics","image_threshold","imaginary","imap","indgen","int_2d","int_3d","int_tabulated","intarr","interpol","interpolate","interval_volume","invert","ioctl","iopen","ir_filter","iplot","ipolygon","ipolyline","iputdata","iregister","ireset","iresolve","irotate","isa","isave","iscale","isetcurrent","isetproperty","ishft","isocontour","isosurface","isurface","itext","itranslate","ivector","ivolume","izoom","journal","json_parse","json_serialize","jul2greg","julday","keyword_set","krig2d","kurtosis","kw_test","l64indgen","la_choldc","la_cholmprove","la_cholsol","la_determ","la_eigenproblem","la_eigenql","la_eigenvec","la_elmhes","la_gm_linear_model","la_hqr","la_invert","la_least_square_equality","la_least_squares","la_linear_equation","la_ludc","la_lumprove","la_lusol","la_svd","la_tridc","la_trimprove","la_triql","la_trired","la_trisol","label_date","label_region","ladfit","laguerre","lambda","lambdap","lambertw","laplacian","least_squares_filter","leefilt","legend","legendre","linbcg","lindgen","linfit","linkimage","list","ll_arc_distance","lmfit","lmgr","lngamma","lnp_test","loadct","locale_get","logical_and","logical_or","logical_true","lon64arr","lonarr","long","long64","lsode","lu_complex","ludc","lumprove","lusol","m_correlate","machar","make_array","make_dll","make_rt","map","mapcontinents","mapgrid","map_2points","map_continents","map_grid","map_image","map_patch","map_proj_forward","map_proj_image","map_proj_info","map_proj_init","map_proj_inverse","map_set","matrix_multiply","matrix_power","max","md_test","mean","meanabsdev","mean_filter","median","memory","mesh_clip","mesh_decimate","mesh_issolid","mesh_merge","mesh_numtriangles","mesh_obj","mesh_smooth","mesh_surfacearea","mesh_validate","mesh_volume","message","min","min_curve_surf","mk_html_help","modifyct","moment","morph_close","morph_distance","morph_gradient","morph_hitormiss","morph_open","morph_thin","morph_tophat","multi","n_elements","n_params","n_tags","ncdf","newton","noise_hurl","noise_pick","noise_scatter","noise_slur","norm","obj_class","obj_destroy","obj_hasmethod","obj_isa","obj_new","obj_valid","objarr","on_error","on_ioerror","online_help","openr","openu","openw","oplot","oploterr","orderedhash","p_correlate","parse_url","particle_trace","path_cache","path_sep","pcomp","plot","plot3d","plot","plot_3dbox","plot_field","ploterr","plots","polar_contour","polar_surface","polyfill","polyshade","pnt_line","point_lun","polarplot","poly","poly_2d","poly_area","poly_fit","polyfillv","polygon","polyline","polywarp","popd","powell","pref_commit","pref_get","pref_set","prewitt","primes","print","printf","printd","pro","product","profile","profiler","profiles","project_vol","ps_show_fonts","psafm","pseudo","ptr_free","ptr_new","ptr_valid","ptrarr","pushd","qgrid3","qhull","qromb","qromo","qsimp","query_*","query_ascii","query_bmp","query_csv","query_dicom","query_gif","query_image","query_jpeg","query_jpeg2000","query_mrsid","query_pict","query_png","query_ppm","query_srf","query_tiff","query_video","query_wav","r_correlate","r_test","radon","randomn","randomu","ranks","rdpix","read","readf","read_ascii","read_binary","read_bmp","read_csv","read_dicom","read_gif","read_image","read_interfile","read_jpeg","read_jpeg2000","read_mrsid","read_pict","read_png","read_ppm","read_spr","read_srf","read_sylk","read_tiff","read_video","read_wav","read_wave","read_x11_bitmap","read_xwd","reads","readu","real_part","rebin","recall_commands","recon3","reduce_colors","reform","region_grow","register_cursor","regress","replicate","replicate_inplace","resolve_all","resolve_routine","restore","retall","return","reverse","rk4","roberts","rot","rotate","round","routine_filepath","routine_info","rs_test","s_test","save","savgol","scale3","scale3d","scatterplot","scatterplot3d","scope_level","scope_traceback","scope_varfetch","scope_varname","search2d","search3d","sem_create","sem_delete","sem_lock","sem_release","set_plot","set_shading","setenv","sfit","shade_surf","shade_surf_irr","shade_volume","shift","shift_diff","shmdebug","shmmap","shmunmap","shmvar","show3","showfont","signum","simplex","sin","sindgen","sinh","size","skewness","skip_lun","slicer3","slide_image","smooth","sobel","socket","sort","spawn","sph_4pnt","sph_scat","spher_harm","spl_init","spl_interp","spline","spline_p","sprsab","sprsax","sprsin","sprstp","sqrt","standardize","stddev","stop","strarr","strcmp","strcompress","streamline","streamline","stregex","stretch","string","strjoin","strlen","strlowcase","strmatch","strmessage","strmid","strpos","strput","strsplit","strtrim","struct_assign","struct_hide","strupcase","surface","surface","surfr","svdc","svdfit","svsol","swap_endian","swap_endian_inplace","symbol","systime","t_cvf","t_pdf","t3d","tag_names","tan","tanh","tek_color","temporary","terminal_size","tetra_clip","tetra_surface","tetra_volume","text","thin","thread","threed","tic","time_test2","timegen","timer","timestamp","timestamptovalues","tm_test","toc","total","trace","transpose","tri_surf","triangulate","trigrid","triql","trired","trisol","truncate_lun","ts_coef","ts_diff","ts_fcast","ts_smooth","tv","tvcrs","tvlct","tvrd","tvscl","typename","uindgen","uint","uintarr","ul64indgen","ulindgen","ulon64arr","ulonarr","ulong","ulong64","uniq","unsharp_mask","usersym","value_locate","variance","vector","vector_field","vel","velovect","vert_t3d","voigt","volume","voronoi","voxel_proj","wait","warp_tri","watershed","wdelete","wf_draw","where","widget_base","widget_button","widget_combobox","widget_control","widget_displaycontextmenu","widget_draw","widget_droplist","widget_event","widget_info","widget_label","widget_list","widget_propertysheet","widget_slider","widget_tab","widget_table","widget_text","widget_tree","widget_tree_move","widget_window","wiener_filter","window","window","write_bmp","write_csv","write_gif","write_image","write_jpeg","write_jpeg2000","write_nrif","write_pict","write_png","write_ppm","write_spr","write_srf","write_sylk","write_tiff","write_video","write_wav","write_wave","writeu","wset","wshow","wtn","wv_applet","wv_cwt","wv_cw_wavelet","wv_denoise","wv_dwt","wv_fn_coiflet","wv_fn_daubechies","wv_fn_gaussian","wv_fn_haar","wv_fn_morlet","wv_fn_paul","wv_fn_symlet","wv_import_data","wv_import_wavelet","wv_plot3d_wps","wv_plot_multires","wv_pwt","wv_tool_denoise","xbm_edit","xdisplayfile","xdxf","xfont","xinteranimate","xloadct","xmanager","xmng_tmpl","xmtool","xobjview","xobjview_rotate","xobjview_write_image","xpalette","xpcolor","xplot3d","xregistered","xroi","xsq_test","xsurface","xvaredit","xvolume","xvolume_rotate","xvolume_write_image","xyouts","zlib_compress","zlib_uncompress","zoom","zoom_24"],r=e(t),i=["begin","end","endcase","endfor","endwhile","endif","endrep","endforeach","break","case","continue","for","foreach","goto","if","then","else","repeat","until","switch","while","do","pro","function"],a=e(i);CodeMirror.registerHelper("hintWords","idl",t.concat(i));var _=new RegExp("^[_a-z¡-￿][_a-z0-9¡-￿]*","i"),o=/[+\-*&=<>\/@#~$]/,l=new RegExp("(and|or|eq|lt|le|gt|ge|ne|not)","i");CodeMirror.defineMode("idl",function(){return{token:function(e){if(e.eatSpace())return null;if(e.match(";"))return e.skipToEnd(),"comment";if(e.match(/^[0-9\.+-]/,!1)){if(e.match(/^[+-]?0x[0-9a-fA-F]+/))return"number";if(e.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?/))return"number";if(e.match(/^[+-]?\d+([EeDd][+-]?\d+)?/))return"number"}return e.match(/^"([^"]|(""))*"/)||e.match(/^'([^']|(''))*'/)?"string":e.match(a)?"keyword":e.match(r)?"builtin":e.match(_)?"variable":e.match(o)||e.match(l)?"operator":(e.next(),null)}}}),CodeMirror.defineMIME("text/x-idl","idl")}(); // javascript CodeMirror.defineMode("javascript",function(e,l){var t,r,n,a,f=e.indentUnit,d=l.statementIndent,i=l.jsonld,o=l.json||i,s=!1!==l.trackScope,u=l.typescript,p=l.wordCharacters||/[\w$\xa1-\uffff]/,c=(t=m("keyword a"),r=m("keyword b"),n=m("keyword c"),a=m("keyword d"),e=m("operator"),{if:m("if"),while:t,with:t,else:r,do:r,try:r,finally:r,return:a,break:a,continue:a,new:m("new"),delete:n,void:n,throw:n,debugger:m("debugger"),var:m("var"),const:m("var"),let:m("var"),function:m("function"),catch:m("catch"),for:m("for"),switch:m("switch"),case:m("case"),default:m("default"),in:e,typeof:e,instanceof:e,true:e={type:"atom",style:"atom"},false:e,null:e,undefined:e,NaN:e,Infinity:e,this:m("this"),class:m("class"),super:m("atom"),yield:n,export:m("export"),import:m("import"),extends:n,await:n});function m(e){return{type:e,style:"keyword"}}var k,v,y=/[+\-*&%=<>!?|~^@]/,w=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function b(e,t,r){return k=e,v=r,t}function h(e,t){var a,r=e.next();if('"'==r||"'"==r)return t.tokenize=(a=r,function(e,t){var r,n=!1;if(i&&"@"==e.peek()&&e.match(w))return t.tokenize=h,b("jsonld-keyword","meta");for(;null!=(r=e.next())&&(r!=a||n);)n=!n&&"\\"==r;return n||(t.tokenize=h),b("string","string")}),t.tokenize(e,t);if("."==r&&e.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/))return b("number","number");if("."==r&&e.match(".."))return b("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(r))return b(r);if("="==r&&e.eat(">"))return b("=>","operator");if("0"==r&&e.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/))return b("number","number");if(/\d/.test(r))return e.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/),b("number","number");if("/"==r)return e.eat("*")?(t.tokenize=x)(e,t):e.eat("/")?(e.skipToEnd(),b("comment","comment")):tt(e,t,1)?(function(e){for(var t,r=!1,n=!1;null!=(t=e.next());){if(!r){if("/"==t&&!n)return;"["==t?n=!0:n&&"]"==t&&(n=!1)}r=!r&&"\\"==t}}(e),e.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),b("regexp","string-2")):(e.eat("="),b("operator","operator",e.current()));if("`"==r)return(t.tokenize=g)(e,t);if("#"==r&&"!"==e.peek())return e.skipToEnd(),b("meta","meta");if("#"==r&&e.eatWhile(p))return b("variable","property");if("<"==r&&e.match("!--")||"-"==r&&e.match("->")&&!/\S/.test(e.string.slice(0,e.start)))return e.skipToEnd(),b("comment","comment");if(y.test(r))return">"==r&&t.lexical&&">"==t.lexical.type||(e.eat("=")?"!"!=r&&"="!=r||e.eat("="):/[<>*+\-|&?]/.test(r)&&(e.eat(r),">"==r&&e.eat(r))),"?"==r&&e.eat(".")?b("."):b("operator","operator",e.current());if(p.test(r)){e.eatWhile(p);r=e.current();if("."!=t.lastType){if(c.propertyIsEnumerable(r)){t=c[r];return b(t.type,t.style,r)}if("async"==r&&e.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/,!1))return b("async","keyword",r)}return b("variable","variable",r)}}function x(e,t){for(var r,n=!1;r=e.next();){if("/"==r&&n){t.tokenize=h;break}n="*"==r}return b("comment","comment")}function g(e,t){for(var r,n=!1;null!=(r=e.next());){if(!n&&("`"==r||"$"==r&&e.eat("{"))){t.tokenize=h;break}n=!n&&"\\"==r}return b("quasi","string-2",e.current())}function M(e,t){t.fatArrowAt&&(t.fatArrowAt=null);var r,n=e.string.indexOf("=>",e.start);if(!(n<0)){!u||(r=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(e.string.slice(e.start,n)))&&(n=r.index);for(var a=0,i=!1,o=n-1;0<=o;--o){var s=e.string.charAt(o),c="([{}])".indexOf(s);if(0<=c&&c<3){if(!a){++o;break}if(0==--a){"("==s&&(i=!0);break}}else if(3<=c&&c<6)++a;else if(p.test(s))i=!0;else if(/["'\/`]/.test(s))for(;;--o){if(0==o)return;if(e.string.charAt(o-1)==s&&"\\"!=e.string.charAt(o-2)){o--;break}}else if(i&&!a){++o;break}}i&&!a&&(t.fatArrowAt=o)}}var j={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,import:!0,"jsonld-keyword":!0};function C(e,t,r,n,a,i){this.indented=e,this.column=t,this.type=r,this.prev=a,this.info=i,null!=n&&(this.align=n)}function A(e,t,r,n,a){var i=e.cc;for(V.state=e,V.stream=a,V.marked=null,V.cc=i,V.style=t,e.lexical.hasOwnProperty("align")||(e.lexical.align=!0);;)if((i.length?i.pop():o?D:F)(r,n)){for(;i.length&&i[i.length-1].lex;)i.pop()();return V.marked?V.marked:"variable"==r&&function(e,t){if(s){for(var r=e.localVars;r;r=r.next)if(r.name==t)return 1;for(var n=e.context;n;n=n.prev)for(r=n.vars;r;r=r.next)if(r.name==t)return 1}}(e,n)?"variable-2":t}}var V={state:null,column:null,marked:null,cc:null};function E(){for(var e=arguments.length-1;0<=e;e--)V.cc.push(arguments[e])}function z(){return E.apply(null,arguments),!0}function I(e,t){for(var r=t;r;r=r.next)if(r.name==e)return 1}function T(e){var t=V.state;if(V.marked="def",s){if(t.context)if("var"==t.lexical.info&&t.context&&t.context.block){var r=function e(t,r){{if(r){if(r.block){var n=e(t,r.prev);return n?n==r.prev?r:new S(n,r.vars,!0):null}return I(t,r.vars)?r:new S(r.prev,new _(t,r.vars),!1)}return null}}(e,t.context);if(null!=r)return void(t.context=r)}else if(!I(e,t.localVars))return void(t.localVars=new _(e,t.localVars));l.globalVars&&!I(e,t.globalVars)&&(t.globalVars=new _(e,t.globalVars))}}function $(e){return"public"==e||"private"==e||"protected"==e||"abstract"==e||"readonly"==e}function S(e,t,r){this.prev=e,this.vars=t,this.block=r}function _(e,t){this.name=e,this.next=t}var q=new _("this",new _("arguments",null));function O(){V.state.context=new S(V.state.context,V.state.localVars,!1),V.state.localVars=q}function P(){V.state.context=new S(V.state.context,V.state.localVars,!0),V.state.localVars=null}function N(){V.state.localVars=V.state.context.vars,V.state.context=V.state.context.prev}function U(n,a){function e(){var e=V.state,t=e.indented;if("stat"==e.lexical.type)t=e.lexical.indented;else for(var r=e.lexical;r&&")"==r.type&&r.align;r=r.prev)t=r.indented;e.lexical=new C(t,V.stream.column(),n,null,e.lexical,a)}return e.lex=!0,e}function W(){var e=V.state;e.lexical.prev&&(")"==e.lexical.type&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function B(r){return function e(t){return t==r?z():";"==r||"}"==t||")"==t||"]"==t?E():z(e)}}function F(e,t){return"var"==e?z(U("vardef",t),Ae,B(";"),W):"keyword a"==e?z(U("form"),J,F,W):"keyword b"==e?z(U("form"),F,W):"keyword d"==e?V.stream.match(/^\s*$/,!1)?z():z(U("stat"),L,B(";"),W):"debugger"==e?z(B(";")):"{"==e?z(U("}"),P,le,W,N):";"==e?z():"if"==e?("else"==V.state.lexical.info&&V.state.cc[V.state.cc.length-1]==W&&V.state.cc.pop()(),z(U("form"),J,F,W,$e)):"function"==e?z(Oe):"for"==e?z(U("form"),P,Se,F,N,W):"class"==e||u&&"interface"==t?(V.marked="keyword",z(U("form","class"==e?e:t),Be,W)):"variable"==e?u&&"declare"==t?(V.marked="keyword",z(F)):u&&("module"==t||"enum"==t||"type"==t)&&V.stream.match(/^\s*\w/,!1)?(V.marked="keyword","enum"==t?z(Ze):"type"==t?z(Ne,B("operator"),ke,B(";")):z(U("form"),Ve,B("{"),U("}"),le,W,W)):u&&"namespace"==t?(V.marked="keyword",z(U("form"),D,F,W)):u&&"abstract"==t?(V.marked="keyword",z(F)):z(U("stat"),ne):"switch"==e?z(U("form"),J,B("{"),U("}","switch"),P,le,W,W,N):"case"==e?z(D,B(":")):"default"==e?z(B(":")):"catch"==e?z(U("form"),O,H,F,W,N):"export"==e?z(U("stat"),Ge,W):"import"==e?z(U("stat"),Ke,W):"async"==e?z(F):"@"==t?z(D,F):E(U("stat"),D,B(";"),W)}function H(e){if("("==e)return z(Ue,B(")"))}function D(e,t){return K(e,t,!1)}function G(e,t){return K(e,t,!0)}function J(e){return"("!=e?E():z(U(")"),L,B(")"),W)}function K(e,t,r){if(V.state.fatArrowAt==V.stream.start){var n=r?ee:Z;if("("==e)return z(O,U(")"),ce(Ue,")"),W,B("=>"),n,N);if("variable"==e)return E(O,Ve,B("=>"),n,N)}var a,n=r?R:Q;return j.hasOwnProperty(e)?z(n):"function"==e?z(Oe,n):"class"==e||u&&"interface"==t?(V.marked="keyword",z(U("form"),We,W)):"keyword c"==e||"async"==e?z(r?G:D):"("==e?z(U(")"),L,B(")"),W,n):"operator"==e||"spread"==e?z(r?G:D):"["==e?z(U("]"),Ye,W,n):"{"==e?ue(ie,"}",null,n):"quasi"==e?E(X,n):"new"==e?z((a=r,function(e){return"."==e?z(a?re:te):"variable"==e&&u?z(Me,a?R:Q):E(a?G:D)})):z()}function L(e){return e.match(/[;\}\)\],]/)?E():E(D)}function Q(e,t){return","==e?z(L):R(e,t,!1)}function R(e,t,r){var n=0==r?Q:R,a=0==r?D:G;return"=>"==e?z(O,r?ee:Z,N):"operator"==e?/\+\+|--/.test(t)||u&&"!"==t?z(n):u&&"<"==t&&V.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/,!1)?z(U(">"),ce(ke,">"),W,n):"?"==t?z(D,B(":"),a):z(a):"quasi"==e?E(X,n):";"!=e?"("==e?ue(G,")","call",n):"."==e?z(ae,n):"["==e?z(U("]"),L,B("]"),W,n):u&&"as"==t?(V.marked="keyword",z(ke,n)):"regexp"==e?(V.state.lastType=V.marked="operator",V.stream.backUp(V.stream.pos-V.stream.start-1),z(a)):void 0:void 0}function X(e,t){return"quasi"!=e?E():"${"!=t.slice(t.length-2)?z(X):z(L,Y)}function Y(e){if("}"==e)return V.marked="string-2",V.state.tokenize=g,z(X)}function Z(e){return M(V.stream,V.state),E("{"==e?F:D)}function ee(e){return M(V.stream,V.state),E("{"==e?F:G)}function te(e,t){if("target"==t)return V.marked="keyword",z(Q)}function re(e,t){if("target"==t)return V.marked="keyword",z(R)}function ne(e){return":"==e?z(W,F):E(Q,B(";"),W)}function ae(e){if("variable"==e)return V.marked="property",z()}function ie(e,t){return"async"==e?(V.marked="property",z(ie)):"variable"!=e&&"keyword"!=V.style?"number"==e||"string"==e?(V.marked=i?"property":V.style+" property",z(se)):"jsonld-keyword"==e?z(se):u&&$(t)?(V.marked="keyword",z(ie)):"["==e?z(D,fe,B("]"),se):"spread"==e?z(G,se):"*"==t?(V.marked="keyword",z(ie)):":"==e?E(se):void 0:(V.marked="property","get"==t||"set"==t?z(oe):(u&&V.state.fatArrowAt==V.stream.start&&(r=V.stream.match(/^\s*:\s*/,!1))&&(V.state.fatArrowAt=V.stream.pos+r[0].length),z(se)));var r}function oe(e){return"variable"!=e?E(se):(V.marked="property",z(Oe))}function se(e){return":"==e?z(G):"("==e?E(Oe):void 0}function ce(n,a,i){function o(e,t){if(i?-1"),ke):"quasi"==e?E(be,ge):void 0}function ve(e){if("=>"==e)return z(ke)}function ye(e){return e.match(/[\}\)\]]/)?z():","==e||";"==e?z(ye):E(we,ye)}function we(e,t){return"variable"==e||"keyword"==V.style?(V.marked="property",z(we)):"?"==t||"number"==e||"string"==e?z(we):":"==e?z(ke):"["==e?z(B("variable"),de,B("]"),we):"("==e?E(Pe,we):e.match(/[;\}\)\],]/)?void 0:z()}function be(e,t){return"quasi"!=e?E():"${"!=t.slice(t.length-2)?z(be):z(ke,he)}function he(e){if("}"==e)return V.marked="string-2",V.state.tokenize=g,z(be)}function xe(e,t){return"variable"==e&&V.stream.match(/^\s*[?:]/,!1)||"?"==t?z(xe):":"==e?z(ke):"spread"==e?z(xe):E(ke)}function ge(e,t){return"<"==t?z(U(">"),ce(ke,">"),W,ge):"|"==t||"."==e||"&"==t?z(ke):"["==e?z(ke,B("]"),ge):"extends"==t||"implements"==t?(V.marked="keyword",z(ke)):"?"==t?z(ke,B(":"),ke):void 0}function Me(e,t){if("<"==t)return z(U(">"),ce(ke,">"),W,ge)}function je(){return E(ke,Ce)}function Ce(e,t){if("="==t)return z(ke)}function Ae(e,t){return"enum"==t?(V.marked="keyword",z(Ze)):E(Ve,fe,Ie,Te)}function Ve(e,t){return u&&$(t)?(V.marked="keyword",z(Ve)):"variable"==e?(T(t),z()):"spread"==e?z(Ve):"["==e?ue(ze,"]"):"{"==e?ue(Ee,"}"):void 0}function Ee(e,t){return"variable"!=e||V.stream.match(/^\s*:/,!1)?("variable"==e&&(V.marked="property"),"spread"==e?z(Ve):"}"==e?E():"["==e?z(D,B("]"),B(":"),Ee):z(B(":"),Ve,Ie)):(T(t),z(Ie))}function ze(){return E(Ve,Ie)}function Ie(e,t){if("="==t)return z(G)}function Te(e){if(","==e)return z(Ae)}function $e(e,t){if("keyword b"==e&&"else"==t)return z(U("form","else"),F,W)}function Se(e,t){return"await"==t?z(Se):"("==e?z(U(")"),_e,W):void 0}function _e(e){return"var"==e?z(Ae,qe):("variable"==e?z:E)(qe)}function qe(e,t){return")"==e?z():";"==e?z(qe):"in"==t||"of"==t?(V.marked="keyword",z(D,qe)):E(D,qe)}function Oe(e,t){return"*"==t?(V.marked="keyword",z(Oe)):"variable"==e?(T(t),z(Oe)):"("==e?z(O,U(")"),ce(Ue,")"),W,pe,F,N):u&&"<"==t?z(U(">"),ce(je,">"),W,Oe):void 0}function Pe(e,t){return"*"==t?(V.marked="keyword",z(Pe)):"variable"==e?(T(t),z(Pe)):"("==e?z(O,U(")"),ce(Ue,")"),W,pe,N):u&&"<"==t?z(U(">"),ce(je,">"),W,Pe):void 0}function Ne(e,t){return"keyword"==e||"variable"==e?(V.marked="type",z(Ne)):"<"==t?z(U(">"),ce(je,">"),W):void 0}function Ue(e,t){return"@"==t&&z(D,Ue),"spread"==e?z(Ue):u&&$(t)?(V.marked="keyword",z(Ue)):u&&"this"==e?z(fe,Ie):E(Ve,fe,Ie)}function We(e,t){return("variable"==e?Be:Fe)(e,t)}function Be(e,t){if("variable"==e)return T(t),z(Fe)}function Fe(e,t){return"<"==t?z(U(">"),ce(je,">"),W,Fe):"extends"==t||"implements"==t||u&&","==e?("implements"==t&&(V.marked="keyword"),z(u?ke:D,Fe)):"{"==e?z(U("}"),He,W):void 0}function He(e,t){return"async"==e||"variable"==e&&("static"==t||"get"==t||"set"==t||u&&$(t))&&V.stream.match(/^\s+[\w$\xa1-\uffff]/,!1)?(V.marked="keyword",z(He)):"variable"==e||"keyword"==V.style?(V.marked="property",z(De,He)):"number"==e||"string"==e?z(De,He):"["==e?z(D,fe,B("]"),De,He):"*"==t?(V.marked="keyword",z(He)):u&&"("==e?E(Pe,He):";"==e||","==e?z(He):"}"==e?z():"@"==t?z(D,He):void 0}function De(e,t){if("!"==t)return z(De);if("?"==t)return z(De);if(":"==e)return z(ke,Ie);if("="==t)return z(G);t=V.state.lexical.prev;return E(t&&"interface"==t.info?Pe:Oe)}function Ge(e,t){return"*"==t?(V.marked="keyword",z(Xe,B(";"))):"default"==t?(V.marked="keyword",z(D,B(";"))):"{"==e?z(ce(Je,"}"),Xe,B(";")):E(F)}function Je(e,t){return"as"==t?(V.marked="keyword",z(B("variable"))):"variable"==e?E(G,Je):void 0}function Ke(e){return"string"==e?z():"("==e?E(D):"."==e?E(Q):E(Le,Qe,Xe)}function Le(e,t){return"{"==e?ue(Le,"}"):("variable"==e&&T(t),"*"==t&&(V.marked="keyword"),z(Re))}function Qe(e){if(","==e)return z(Le,Qe)}function Re(e,t){if("as"==t)return V.marked="keyword",z(Le)}function Xe(e,t){if("from"==t)return V.marked="keyword",z(D)}function Ye(e){return"]"==e?z():E(ce(G,"]"))}function Ze(){return E(U("form"),Ve,B("{"),U("}"),ce(et,"}"),W,W)}function et(){return E(Ve,Ie)}function tt(e,t,r){return t.tokenize==h&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(t.lastType)||"quasi"==t.lastType&&/\{\s*$/.test(e.string.slice(0,e.pos-(r||0)))}return W.lex=N.lex=!0,{startState:function(e){e={tokenize:h,lastType:"sof",cc:[],lexical:new C((e||0)-f,0,"block",!1),localVars:l.localVars,context:l.localVars&&new S(null,null,!1),indented:e||0};return l.globalVars&&"object"==typeof l.globalVars&&(e.globalVars=l.globalVars),e},token:function(e,t){if(e.sol()&&(t.lexical.hasOwnProperty("align")||(t.lexical.align=!1),t.indented=e.indentation(),M(e,t)),t.tokenize!=x&&e.eatSpace())return null;var r=t.tokenize(e,t);return"comment"==k?r:(t.lastType="operator"!=k||"++"!=v&&"--"!=v?k:"incdec",A(t,r,k,v,e))},indent:function(e,t){if(e.tokenize==x||e.tokenize==g)return CodeMirror.Pass;if(e.tokenize!=h)return 0;var r,n=t&&t.charAt(0),a=e.lexical;if(!/^\s*else\b/.test(t))for(var i=e.cc.length-1;0<=i;--i){var o=e.cc[i];if(o==W)a=a.prev;else if(o!=$e&&o!=N)break}for(;("stat"==a.type||"form"==a.type)&&("}"==n||(r=e.cc[e.cc.length-1])&&(r==Q||r==R)&&!/^[,\.=+\-*:?[\(]/.test(t));)a=a.prev;var s,c=(a=d&&")"==a.type&&"stat"==a.prev.type?a.prev:a).type,u=n==c;return"vardef"==c?a.indented+("operator"==e.lastType||","==e.lastType?a.info.length+1:0):"form"==c&&"{"==n?a.indented:"form"==c?a.indented+f:"stat"==c?a.indented+(s=t,"operator"==(c=e).lastType||","==c.lastType||y.test(s.charAt(0))||/[,.]/.test(s.charAt(0))?d||f:0):"switch"!=a.info||u||0==l.doubleIndentSwitch?a.align?a.column+(u?0:1):a.indented+(u?0:f):a.indented+(/^(?:case|default)\b/.test(t)?f:2*f)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:o?null:"/*",blockCommentEnd:o?null:"*/",blockCommentContinue:o?null:" * ",lineComment:o?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:o?"json":"javascript",jsonldMode:i,jsonMode:o,expressionAllowed:tt,skipExpression:function(e){A(e,"atom","atom","true",new CodeMirror.StringStream("",2,null))}}}),CodeMirror.registerHelper("wordChars","javascript",/[\w$]/),CodeMirror.defineMIME("text/javascript","javascript"),CodeMirror.defineMIME("text/ecmascript","javascript"),CodeMirror.defineMIME("application/javascript","javascript"),CodeMirror.defineMIME("application/x-javascript","javascript"),CodeMirror.defineMIME("application/ecmascript","javascript"),CodeMirror.defineMIME("application/json",{name:"javascript",json:!0}),CodeMirror.defineMIME("application/x-json",{name:"javascript",json:!0}),CodeMirror.defineMIME("application/manifest+json",{name:"javascript",json:!0}),CodeMirror.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),CodeMirror.defineMIME("text/typescript",{name:"javascript",typescript:!0}),CodeMirror.defineMIME("application/typescript",{name:"javascript",typescript:!0}); // jinja2 CodeMirror.defineMode("jinja2",function(){var r=["and","as","block","endblock","by","cycle","debug","else","elif","extends","filter","endfilter","firstof","for","endfor","if","endif","ifchanged","endifchanged","ifequal","endifequal","ifnotequal","endifnotequal","in","include","load","not","now","or","parsed","regroup","reversed","spaceless","endspaceless","ssi","templatetag","openblock","closeblock","openvariable","closevariable","openbrace","closebrace","opencomment","closecomment","widthratio","url","with","endwith","get_current_language","trans","endtrans","noop","blocktrans","endblocktrans","get_available_languages","get_current_language_bidi","plural"],i=/^[+\-*&%=<>!?|~^]/,a=/^[:\[\(\{]/,o=["true","false"],c=/^(\d[+\-\*\/])?\d+(\.\d+)?/;function e(e,n){var t=e.peek();if(n.incomment)return e.skipTo("#}")?(e.eatWhile(/\#|}/),n.incomment=!1):e.skipToEnd(),"comment";if(n.intag){if(n.operator){if(n.operator=!1,e.match(o))return"atom";if(e.match(c))return"number"}if(n.sign){if(n.sign=!1,e.match(o))return"atom";if(e.match(c))return"number"}if(n.instring)return t==n.instring&&(n.instring=!1),e.next(),"string";if("'"==t||'"'==t)return n.instring=t,e.next(),"string";if(e.match(n.intag+"}")||e.eat("-")&&e.match(n.intag+"}"))return n.intag=!1,"tag";if(e.match(i))return n.operator=!0,"operator";if(e.match(a))n.sign=!0;else if(e.eat(" ")||e.sol()){if(e.match(r))return"keyword";if(e.match(o))return"atom";if(e.match(c))return"number";e.sol()&&e.next()}else e.next();return"variable"}if(e.eat("{")){if(e.eat("#"))return n.incomment=!0,e.skipTo("#}")?(e.eatWhile(/\#|}/),n.incomment=!1):e.skipToEnd(),"comment";if(t=e.eat(/\{|%/))return"{"==(n.intag=t)&&(n.intag="}"),e.eat("-"),"tag"}e.next()}return r=new RegExp("(("+r.join(")|(")+"))\\b"),o=new RegExp("(("+o.join(")|(")+"))\\b"),{startState:function(){return{tokenize:e}},token:function(e,n){return n.tokenize(e,n)},blockCommentStart:"{#",blockCommentEnd:"#}"}}),CodeMirror.defineMIME("text/jinja2","jinja2"); // jsx !function(){function x(t,e,n,r){this.state=t,this.mode=e,this.depth=n,this.prev=r}CodeMirror.defineMode("jsx",function(s,t){var c=CodeMirror.getMode(s,{name:"xml",allowMissing:!0,multilineTagIndentPastTag:!1,allowMissingTagName:!0}),d=CodeMirror.getMode(s,t&&t.base||"javascript");function p(t){var e=t.tagName;t.tagName=null;var n=c.indent(t,"","");return t.tagName=e,n}function u(t,e){return(e.context.mode==c?function(t,e,n){if(2==n.depth)return t.match(/^.*?\*\//)?n.depth=1:t.skipToEnd(),"comment";if("{"==t.peek()){c.skipAttribute(n.state);var r=p(n.state),o=n.state.context;if(o&&t.match(/^[^>]*>\s*$/,!1)){for(;o.prev&&!o.startOfLine;)o=o.prev;o.startOfLine?r-=s.indentUnit:n.prev.state.lexical&&(r=n.prev.state.lexical.indented)}else 1==n.depth&&(r+=s.indentUnit);return e.context=new x(CodeMirror.startState(d,r),d,0,e.context),null}if(1==n.depth){if("<"==t.peek())return c.skipAttribute(n.state),e.context=new x(CodeMirror.startState(c,p(n.state)),c,0,e.context),null;if(t.match("//"))return t.skipToEnd(),"comment";if(t.match("/*"))return n.depth=2,u(t,e)}var i,a=c.token(t,n.state),r=t.current();/\btag\b/.test(a)?/>$/.test(r)?n.state.context?n.depth=0:e.context=e.context.prev:/^]:","[<>=]=","<<=?",">>>?=?","=>","--?>","<--[->]?","\\/\\/","\\.{2,3}","[\\.\\\\%*+\\-<>!\\/^|&]=?","\\?","\\$","~",":"],a=e.operators||t(["[<>]:","[<>=]=","<<=?",">>>?=?","=>","--?>","<--[->]?","\\/\\/","[\\\\%*+\\-<>!\\/^|&\\u00F7\\u22BB]=?","\\?","\\$","~",":","\\u00D7","\\u2208","\\u2209","\\u220B","\\u220C","\\u2218","\\u221A","\\u221B","\\u2229","\\u222A","\\u2260","\\u2264","\\u2265","\\u2286","\\u2288","\\u228A","\\u22C5","\\b(in|isa)\\b(?!.?\\()"],""),o=e.delimiters||/^[;,()[\]{}]/,s=e.identifiers||/^[_A-Za-z\u00A1-\u2217\u2219-\uFFFF][\w\u00A1-\u2217\u2219-\uFFFF]*!*/,u=t(["\\\\[0-7]{1,3}","\\\\x[A-Fa-f0-9]{1,2}","\\\\[abefnrtv0%?'\"\\\\]","([^\\u0027\\u005C\\uD800-\\uDFFF]|[\\uD800-\\uDFFF][\\uDC00-\\uDFFF])"],"'"),i=["if","else","elseif","while","for","begin","let","end","do","try","catch","finally","return","break","continue","global","local","const","export","import","importall","using","function","where","macro","module","baremodule","struct","type","mutable","immutable","quote","typealias","abstract","primitive","bitstype"],e=["true","false","nothing","NaN","Inf"];CodeMirror.registerHelper("hintWords","julia",i.concat(e));var c=t(["begin","function","type","struct","immutable","let","macro","for","while","quote","if","else","elseif","try","finally","catch","do"]),l=t(["end","else","elseif","catch","finally"]),m=t(i),f=t(e),d=/^@[_A-Za-z\u00A1-\uFFFF][\w\u00A1-\uFFFF]*!*/,p=/^:[_A-Za-z\u00A1-\uFFFF][\w\u00A1-\uFFFF]*!*/,h=/^(`|([_A-Za-z\u00A1-\uFFFF]*"("")?))/,F=t(n,"","@"),k=t(n,"",":");function b(e){return 0|\\b(?:e(?:lse|xport)|d(?:o|efault)|t(?:ry|hen)|finally|import(?:\\s*all)?|const|var|let|new|catch(?:\\s*"+t+")?))\\s*$"),n="(?![$\\w]|-[A-Za-z]|\\s*:(?![:=]))",o={token:"string",regex:".+"},x={start:[{token:"comment.doc",regex:"/\\*",next:"comment"},{token:"comment",regex:"#.*"},{token:"keyword",regex:"(?:t(?:h(?:is|row|en)|ry|ypeof!?)|c(?:on(?:tinue|st)|a(?:se|tch)|lass)|i(?:n(?:stanceof)?|mp(?:ort(?:\\s+all)?|lements)|[fs])|d(?:e(?:fault|lete|bugger)|o)|f(?:or(?:\\s+own)?|inally|unction)|s(?:uper|witch)|e(?:lse|x(?:tends|port)|val)|a(?:nd|rguments)|n(?:ew|ot)|un(?:less|til)|w(?:hile|ith)|o[fr]|return|break|let|var|loop)"+n},{token:"constant.language",regex:"(?:true|false|yes|no|on|off|null|void|undefined)"+n},{token:"invalid.illegal",regex:"(?:p(?:ackage|r(?:ivate|otected)|ublic)|i(?:mplements|nterface)|enum|static|yield)"+n},{token:"language.support.class",regex:"(?:R(?:e(?:gExp|ferenceError)|angeError)|S(?:tring|yntaxError)|E(?:rror|valError)|Array|Boolean|Date|Function|Number|Object|TypeError|URIError)"+n},{token:"language.support.function",regex:"(?:is(?:NaN|Finite)|parse(?:Int|Float)|Math|JSON|(?:en|de)codeURI(?:Component)?)"+n},{token:"variable.language",regex:"(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)"+n},{token:"identifier",regex:t+"\\s*:(?![:=])"},{token:"variable",regex:t},{token:"keyword.operator",regex:"(?:\\.{3}|\\s+\\?)"},{token:"keyword.variable",regex:"(?:@+|::|\\.\\.)",next:"key"},{token:"keyword.operator",regex:"\\.\\s*",next:"key"},{token:"string",regex:"\\\\\\S[^\\s,;)}\\]]*"},{token:"string.doc",regex:"'''",next:"qdoc"},{token:"string.doc",regex:'"""',next:"qqdoc"},{token:"string",regex:"'",next:"qstring"},{token:"string",regex:'"',next:"qqstring"},{token:"string",regex:"`",next:"js"},{token:"string",regex:"<\\[",next:"words"},{token:"string.regex",regex:"//",next:"heregex"},{token:"string.regex",regex:"\\/(?:[^[\\/\\n\\\\]*(?:(?:\\\\.|\\[[^\\]\\n\\\\]*(?:\\\\.[^\\]\\n\\\\]*)*\\])[^[\\/\\n\\\\]*)*)\\/[gimy$]{0,4}",next:"key"},{token:"constant.numeric",regex:"(?:0x[\\da-fA-F][\\da-fA-F_]*|(?:[2-9]|[12]\\d|3[0-6])r[\\da-zA-Z][\\da-zA-Z_]*|(?:\\d[\\d_]*(?:\\.\\d[\\d_]*)?|\\.\\d[\\d_]*)(?:e[+-]?\\d[\\d_]*)?[\\w$]*)"},{token:"lparen",regex:"[({[]"},{token:"rparen",regex:"[)}\\]]",next:"key"},{token:"keyword.operator",regex:"\\S+"},{token:"text",regex:"\\s+"}],heregex:[{token:"string.regex",regex:".*?//[gimy$?]{0,4}",next:"start"},{token:"string.regex",regex:"\\s*#{"},{token:"comment.regex",regex:"\\s+(?:#.*)?"},{token:"string.regex",regex:"\\S+"}],key:[{token:"keyword.operator",regex:"[.?@!]+"},{token:"identifier",regex:t,next:"start"},{token:"text",regex:"",next:"start"}],comment:[{token:"comment.doc",regex:".*?\\*/",next:"start"},{token:"comment.doc",regex:".+"}],qdoc:[{token:"string",regex:".*?'''",next:"key"},o],qqdoc:[{token:"string",regex:'.*?"""',next:"key"},o],qstring:[{token:"string",regex:"[^\\\\']*(?:\\\\.[^\\\\']*)*'",next:"key"},o],qqstring:[{token:"string",regex:'[^\\\\"]*(?:\\\\.[^\\\\"]*)*"',next:"key"},o],js:[{token:"string",regex:"[^\\\\`]*(?:\\\\.[^\\\\`]*)*`",next:"key"},o],words:[{token:"string",regex:".*?\\]>",next:"key"},o]};for(e in x){var g=x[e];if(g.splice)for(var i=0,a=g.length;i~@\^\&\*\)\[\]'\?,\|])).*/,!0,!1)||e.match(/[a-zA-Z\$][a-zA-Z0-9\$]*_+[a-zA-Z\$][a-zA-Z0-9\$]*/,!0,!1)||e.match(/[a-zA-Z\$][a-zA-Z0-9\$]*_+/,!0,!1)||e.match(/_+[a-zA-Z\$][a-zA-Z0-9\$]*/,!0,!1)?"variable-2":e.match(/\\\[[a-zA-Z\$][a-zA-Z0-9\$]*\]/,!0,!1)?"variable-3":e.match(/(?:\[|\]|{|}|\(|\))/,!0,!1)?"bracket":e.match(/(?:#[a-zA-Z\$][a-zA-Z0-9\$]*|#+[0-9]?)/,!0,!1)?"variable-2":e.match(c,!0,!1)?"keyword":e.match(/(?:\\|\+|\-|\*|\/|,|;|\.|:|@|~|=|>|<|&|\||_|`|'|\^|\?|!|%)/,!0,!1)?"operator":(e.next(),"error"))}function i(e,a){for(var t,n=!1,m=!1;null!=(t=e.next());){if('"'===t&&!m){n=!0;break}m=!m&&"\\"===t}return n&&!m&&(a.tokenize=z),"string"}function A(e,a){for(var t,n;0/,l=/^.*?(?=<.*>)/;function n(e,r){if(e.sol()){if(r.inSeparator=!1,r.inHeader&&e.match(a))return null;if(r.inHeader=!1,r.header=null,e.match(i))return r.inHeaders=!0,r.inSeparator=!0,"atom";var n=!1;return(t=e.match(d))||(n=!0,t=e.match(o))?(r.inHeaders=!0,r.inHeader=!0,r.emailPermitted=n,r.header=t[1],"atom"):r.inHeaders&&(t=e.match(m))?(r.inHeader=!0,r.emailPermitted=!0,r.header=t[1],"atom"):(r.inHeaders=!1,e.skipToEnd(),null)}if(r.inSeparator)return e.match(s)?"link":(e.match(c)||e.skipToEnd(),"atom");if(r.inHeader){var t="Subject"===r.header?"header":"string";if(r.emailPermitted){if(e.match(u))return t+" link";if(e.match(l))return t}return e.skipToEnd(),t}return e.skipToEnd(),null}CodeMirror.defineMode("mbox",function(){return{startState:function(){return{inSeparator:!1,inHeader:!1,emailPermitted:!1,header:null,inHeaders:!1}},token:n,blankLine:function(e){e.inHeaders=e.inSeparator=e.inHeader=!1}}}),CodeMirror.defineMIME("application/mbox","mbox")}(); // mirc CodeMirror.defineMIME("text/mirc","mirc"),CodeMirror.defineMode("mirc",function(){function e(e){for(var i={},$=e.split(" "),r=0;r<$.length;++r)i[$[r]]=!0;return i}var t=e("$! $$ $& $? $+ $abook $abs $active $activecid $activewid $address $addtok $agent $agentname $agentstat $agentver $alias $and $anick $ansi2mirc $aop $appactive $appstate $asc $asctime $asin $atan $avoice $away $awaymsg $awaytime $banmask $base $bfind $binoff $biton $bnick $bvar $bytes $calc $cb $cd $ceil $chan $chanmodes $chantypes $chat $chr $cid $clevel $click $cmdbox $cmdline $cnick $color $com $comcall $comchan $comerr $compact $compress $comval $cos $count $cr $crc $creq $crlf $ctime $ctimer $ctrlenter $date $day $daylight $dbuh $dbuw $dccignore $dccport $dde $ddename $debug $decode $decompress $deltok $devent $dialog $did $didreg $didtok $didwm $disk $dlevel $dll $dllcall $dname $dns $duration $ebeeps $editbox $emailaddr $encode $error $eval $event $exist $feof $ferr $fgetc $file $filename $filtered $finddir $finddirn $findfile $findfilen $findtok $fline $floor $fopen $fread $fserve $fulladdress $fulldate $fullname $fullscreen $get $getdir $getdot $gettok $gmt $group $halted $hash $height $hfind $hget $highlight $hnick $hotline $hotlinepos $ial $ialchan $ibl $idle $iel $ifmatch $ignore $iif $iil $inelipse $ini $inmidi $inpaste $inpoly $input $inrect $inroundrect $insong $instok $int $inwave $ip $isalias $isbit $isdde $isdir $isfile $isid $islower $istok $isupper $keychar $keyrpt $keyval $knick $lactive $lactivecid $lactivewid $left $len $level $lf $line $lines $link $lock $lock $locked $log $logstamp $logstampfmt $longfn $longip $lower $ltimer $maddress $mask $matchkey $matchtok $md5 $me $menu $menubar $menucontext $menutype $mid $middir $mircdir $mircexe $mircini $mklogfn $mnick $mode $modefirst $modelast $modespl $mouse $msfile $network $newnick $nick $nofile $nopath $noqt $not $notags $notify $null $numeric $numok $oline $onpoly $opnick $or $ord $os $passivedcc $pic $play $pnick $port $portable $portfree $pos $prefix $prop $protect $puttok $qt $query $rand $r $rawmsg $read $readomo $readn $regex $regml $regsub $regsubex $remove $remtok $replace $replacex $reptok $result $rgb $right $round $scid $scon $script $scriptdir $scriptline $sdir $send $server $serverip $sfile $sha1 $shortfn $show $signal $sin $site $sline $snick $snicks $snotify $sock $sockbr $sockerr $sockname $sorttok $sound $sqrt $ssl $sreq $sslready $status $strip $str $stripped $syle $submenu $switchbar $tan $target $ticks $time $timer $timestamp $timestampfmt $timezone $tip $titlebar $toolbar $treebar $trust $ulevel $ulist $upper $uptime $url $usermode $v1 $v2 $var $vcmd $vcmdstat $vcmdver $version $vnick $vol $wid $width $wildsite $wildtok $window $wrap $xor"),o=e("abook ajinvite alias aline ame amsg anick aop auser autojoin avoice away background ban bcopy beep bread break breplace bset btrunc bunset bwrite channel clear clearall cline clipboard close cnick color comclose comopen comreg continue copy creq ctcpreply ctcps dcc dccserver dde ddeserver debug dec describe dialog did didtok disable disconnect dlevel dline dll dns dqwindow drawcopy drawdot drawfill drawline drawpic drawrect drawreplace drawrot drawsave drawscroll drawtext ebeeps echo editbox emailaddr enable events exit fclose filter findtext finger firewall flash flist flood flush flushini font fopen fseek fsend fserve fullname fwrite ghide gload gmove gopts goto gplay gpoint gqreq groups gshow gsize gstop gtalk gunload hadd halt haltdef hdec hdel help hfree hinc hload hmake hop hsave ial ialclear ialmark identd if ignore iline inc invite iuser join kick linesep links list load loadbuf localinfo log mdi me menubar mkdir mnick mode msg nick noop notice notify omsg onotice part partall pdcc perform play playctrl pop protect pvoice qme qmsg query queryn quit raw reload remini remote remove rename renwin reseterror resetidle return rlevel rline rmdir run ruser save savebuf saveini say scid scon server set showmirc signam sline sockaccept sockclose socklist socklisten sockmark sockopen sockpause sockread sockrename sockudp sockwrite sound speak splay sreq strip switchbar timer timestamp titlebar tnick tokenize toolbar topic tray treebar ulist unload unset unsetall updatenl url uwho var vcadd vcmd vcrem vol while whois window winhelp write writeint if isalnum isalpha isaop isavoice isban ischan ishop isignore isin isincs isletter islower isnotify isnum ison isop isprotect isreg isupper isvoice iswm iswmcs elseif else goto menu nicklist status title icon size option text edit button check radio box scroll list combo link tab item"),n=e("if elseif else and not or eq ne in ni for foreach while switch"),a=/[+\-*&%=<>!?^\/\|]/;function s(e,i,$){return(i.tokenize=$)(e,i)}function l(e,i){var $=i.beforeParams;i.beforeParams=!1;var r=e.next();if(/[\[\]{}\(\),\.]/.test(r))return"("==r&&$?i.inParams=!0:")"==r&&(i.inParams=!1),null;if(/\d/.test(r))return e.eatWhile(/[\w\.]/),"number";if("\\"==r)return e.eat("\\"),e.eat(/./),"number";if("/"==r&&e.eat("*"))return s(e,i,c);if(";"==r&&e.match(/ *\( *\(/))return s(e,i,d);if(";"!=r||i.inParams){if('"'==r)return e.eat(/"/),"keyword";if("$"==r)return e.eatWhile(/[$_a-z0-9A-Z\.:]/),t&&t.propertyIsEnumerable(e.current().toLowerCase())?"keyword":(i.beforeParams=!0,"builtin");if("%"==r)return e.eatWhile(/[^,\s()]/),i.beforeParams=!0,"string";if(a.test(r))return e.eatWhile(a),"operator";e.eatWhile(/[\w\$_{}]/);r=e.current().toLowerCase();return o&&o.propertyIsEnumerable(r)?"keyword":n&&n.propertyIsEnumerable(r)?(i.beforeParams=!0,"keyword"):null}return e.skipToEnd(),"comment"}function c(e,i){for(var $,r=!1;$=e.next();){if("/"==$&&r){i.tokenize=l;break}r="*"==$}return"comment"}function d(e,i){for(var $,r=0;$=e.next();){if(";"==$&&2==r){i.tokenize=l;break}")"==$?r++:" "!=$&&(r=0)}return"meta"}return{startState:function(){return{tokenize:l,beforeParams:!1,inParams:!1}},token:function(e,i){return e.eatSpace()?null:i.tokenize(e,i)}}}); // mllike CodeMirror.defineMode("mllike",function(e,t){var r,i={as:"keyword",do:"keyword",else:"keyword",end:"keyword",exception:"keyword",fun:"keyword",functor:"keyword",if:"keyword",in:"keyword",include:"keyword",let:"keyword",of:"keyword",open:"keyword",rec:"keyword",struct:"keyword",then:"keyword",type:"keyword",val:"keyword",while:"keyword",with:"keyword"},o=t.extraWords||{};for(r in o)o.hasOwnProperty(r)&&(i[r]=t.extraWords[r]);var n,d=[];for(n in i)d.push(n);function k(e,r){var o=e.next();if('"'===o)return r.tokenize=y,r.tokenize(e,r);if("{"===o&&e.eat("|"))return r.longString=!0,r.tokenize=l,r.tokenize(e,r);if("("===o&&e.eat("*"))return r.commentLevel++,r.tokenize=w,r.tokenize(e,r);if("~"===o||"?"===o)return e.eatWhile(/\w/),"variable-2";if("`"===o)return e.eatWhile(/\w/),"quote";if("/"===o&&t.slashComments&&e.eat("/"))return e.skipToEnd(),"comment";if(/\d/.test(o))return"0"===o&&e.eat(/[bB]/)&&e.eatWhile(/[01]/),"0"===o&&e.eat(/[xX]/)&&e.eatWhile(/[0-9a-fA-F]/),"0"===o&&e.eat(/[oO]/)?e.eatWhile(/[0-7]/):(e.eatWhile(/[\d_]/),e.eat(".")&&e.eatWhile(/[\d]/),e.eat(/[eE]/)&&e.eatWhile(/[\d\-+]/)),"number";if(/[+\-*&%=<>!?|@\.~:]/.test(o))return"operator";if(/[\w\xa1-\uffff]/.test(o)){e.eatWhile(/[\w\xa1-\uffff]/);e=e.current();return i.hasOwnProperty(e)?i[e]:"variable"}return null}function y(e,r){for(var o,t=!1,i=!1;null!=(o=e.next());){if('"'===o&&!i){t=!0;break}i=!i&&"\\"===o}return t&&!i&&(r.tokenize=k),"string"}function w(e,r){for(var o,t;0+\-\/^\[\]]/,l=/(:=|<=|>=|==|<>|\.\+|\.\-|\.\*|\.\/|\.\^)/,u=/[0-9]/,s=/[_a-zA-Z]/;function c(e,t){return e.skipToEnd(),t.tokenize=null,"comment"}function f(e,t){for(var n,r=!1;n=e.next();){if(r&&"/"==n){t.tokenize=null;break}r="*"==n}return"comment"}function p(e,t){for(var n,r=!1;null!=(n=e.next());){if('"'==n&&!r){t.tokenize=null,t.sol=!1;break}r=!r&&"\\"==n}return"string"}function d(e,t){for(e.eatWhile(u);e.eat(u)||e.eat(s););var n=e.current();return!t.sol||"package"!=n&&"model"!=n&&"when"!=n&&"connector"!=n?t.sol&&"end"==n&&0","==","<<=>>","<=>","\\.\\.","<<>>","::","<:>","->","=>>","=>",">>",":>","<-","<<=","<=","<<","<:","x-","-x"],singlecomment:["//","#"],operators:["="]},xu:{keywords:["msc","xu"],options:["hscale","width","arcgradient","wordwraparcs","wordwrapentities","watermark"],constants:["true","false","on","off","auto"],attributes:["label","idurl","id","url","linecolor","linecolour","textcolor","textcolour","textbgcolor","textbgcolour","arclinecolor","arclinecolour","arctextcolor","arctextcolour","arctextbgcolor","arctextbgcolour","arcskip","title","deactivate","activate","activation"],brackets:["\\{","\\}"],arcsWords:["note","abox","rbox","box","alt","else","opt","break","par","seq","strict","neg","critical","ignore","consider","assert","loop","ref","exc"],arcsOthers:["\\|\\|\\|","\\.\\.\\.","---","--","<->","==","<<=>>","<=>","\\.\\.","<<>>","::","<:>","->","=>>","=>",">>",":>","<-","<<=","<=","<<","<:","x-","-x"],singlecomment:["//","#"],operators:["="]},msgenny:{keywords:null,options:["hscale","width","arcgradient","wordwraparcs","wordwrapentities","watermark"],constants:["true","false","on","off","auto"],attributes:null,brackets:["\\{","\\}"],arcsWords:["note","abox","rbox","box","alt","else","opt","break","par","seq","strict","neg","critical","ignore","consider","assert","loop","ref","exc"],arcsOthers:["\\|\\|\\|","\\.\\.\\.","---","--","<->","==","<<=>>","<=>","\\.\\.","<<>>","::","<:>","->","=>>","=>",">>",":>","<-","<<=","<=","<<","<:","x-","-x"],singlecomment:["//","#"],operators:["="]}};function o(t){return new RegExp("^\\b(?:"+t.join("|")+")\\b","i")}function i(t){return new RegExp("^(?:"+t.join("|")+")","i")}function a(){return{inComment:!1,inString:!1,inAttributeList:!1,inScript:!1}}function c(t){return{inComment:t.inComment,inString:t.inString,inAttributeList:t.inAttributeList,inScript:t.inScript}}CodeMirror.defineMode("mscgen",function(t,r){var e,r=n[r&&r.language||"mscgen"];return{startState:a,copyState:c,token:(e=r,function(t,r){if(t.match(i(e.brackets),!0,!0))return"bracket";if(!r.inComment){if(t.match(/\/\*[^\*\/]*/,!0,!0))return r.inComment=!0,"comment";if(t.match(i(e.singlecomment),!0,!0))return t.skipToEnd(),"comment"}if(r.inComment)return t.match(/[^\*\/]*\*\//,!0,!0)?r.inComment=!1:t.skipToEnd(),"comment";if(!r.inString&&t.match(/\"(\\\"|[^\"])*/,!0,!0))return r.inString=!0,"string";if(r.inString)return t.match(/[^\"]*\"/,!0,!0)?r.inString=!1:t.skipToEnd(),"string";if(e.keywords&&t.match(o(e.keywords),!0,!0))return"keyword";if(t.match(o(e.options),!0,!0))return"keyword";if(t.match(o(e.arcsWords),!0,!0))return"keyword";if(t.match(i(e.arcsOthers),!0,!0))return"keyword";if(e.operators&&t.match(i(e.operators),!0,!0))return"operator";if(e.constants&&t.match(i(e.constants),!0,!0))return"variable";if(!e.inAttributeList&&e.attributes&&t.match("[",!0,!0))return e.inAttributeList=!0,"bracket";if(e.inAttributeList){if(null!==e.attributes&&t.match(o(e.attributes),!0,!0))return"attribute";if(t.match("]",!0,!0))return e.inAttributeList=!1,"bracket"}return t.next(),"base"}),lineComment:"#",blockCommentStart:"/*",blockCommentEnd:"*/"}}),CodeMirror.defineMIME("text/x-mscgen","mscgen"),CodeMirror.defineMIME("text/x-xu",{name:"mscgen",language:"xu"}),CodeMirror.defineMIME("text/x-msgenny",{name:"mscgen",language:"msgenny"})}(); // mumps CodeMirror.defineMode("mumps",function(){function e(e){return new RegExp("^(("+e.join(")|(")+"))\\b","i")}var $=new RegExp("^[\\+\\-\\*/&#!_?\\\\<>=\\'\\[\\]]"),o=new RegExp("^(('=)|(<=)|(>=)|('>)|('<)|([[)|(]])|(^$))"),r=new RegExp("^[\\.,:]"),a=new RegExp("[()]"),m=new RegExp("^[%A-Za-z][A-Za-z0-9]*"),c=e(["\\$ascii","\\$char","\\$data","\\$ecode","\\$estack","\\$etrap","\\$extract","\\$find","\\$fnumber","\\$get","\\$horolog","\\$io","\\$increment","\\$job","\\$justify","\\$length","\\$name","\\$next","\\$order","\\$piece","\\$qlength","\\$qsubscript","\\$query","\\$quit","\\$random","\\$reverse","\\$select","\\$stack","\\$test","\\$text","\\$translate","\\$view","\\$x","\\$y","\\$a","\\$c","\\$d","\\$e","\\$ec","\\$es","\\$et","\\$f","\\$fn","\\$g","\\$h","\\$i","\\$j","\\$l","\\$n","\\$na","\\$o","\\$p","\\$q","\\$ql","\\$qs","\\$r","\\$re","\\$s","\\$st","\\$t","\\$tr","\\$v","\\$z"]),i=e(["break","close","do","else","for","goto","halt","hang","if","job","kill","lock","merge","new","open","quit","read","set","tcommit","trollback","tstart","use","view","write","xecute","b","c","d","e","f","g","h","i","j","k","l","m","n","o","q","r","s","tc","tro","ts","u","v","w","x"]);return{startState:function(){return{label:!1,commandMode:0}},token:function(e,t){e=function(e,t){e.sol()&&(t.label=!0,t.commandMode=0);var n=e.peek();return" "==n||"\t"==n?(t.label=!1,0==t.commandMode?t.commandMode=1:(t.commandMode<0||2==t.commandMode)&&(t.commandMode=0)):"."!=n&&0*\/]/.test(t)?(s="select-op",null):/[;{}:\[\]]/.test(t)?n(null,t):(e.eatWhile(/[\w\\\-]/),s="variable"):(s="compare",null):void(s="compare")}function l(e,_){for(var t,r=!1;null!=(t=e.next());){if(r&&"/"==t){_.tokenize=c;break}r="*"==t}return s="comment"}function p(e,_){for(var t,r=0;null!=(t=e.next());){if(2<=r&&">"==t){_.tokenize=c;break}r="-"==t?r+1:0}return s="comment"}return{startState:function(e){return{tokenize:c,baseIndent:e||0,stack:[]}},token:function(e,_){if(e.eatSpace())return null;s=null;var t=_.tokenize(e,_),e=_.stack[_.stack.length-1];return"hash"==s&&"rule"==e?t="atom":"variable"==t&&("rule"==e?t="number":e&&"@media{"!=e||(t="tag")),"rule"==e&&/^[\{\};]$/.test(s)&&_.stack.pop(),"{"==s?"@media"==e?_.stack[_.stack.length-1]="@media{":_.stack.push("{"):"}"==s?_.stack.pop():"@media"==s?_.stack.push("@media"):"{"==e&&"comment"!=s&&_.stack.push("rule"),t},indent:function(e,_){var t=e.stack.length;return/^\}/.test(_)&&(t-="rule"==e.stack[e.stack.length-1]?2:1),e.baseIndent+t*i},electricChars:"}"}}),CodeMirror.defineMIME("text/x-nginx-conf","nginx"); // nsis CodeMirror.defineSimpleMode("nsis",{start:[{regex:/(?:[+-]?)(?:0x[\d,a-f]+)|(?:0o[0-7]+)|(?:0b[0,1]+)|(?:\d+.?\d*)/,token:"number"},{regex:/"(?:[^\\"]|\\.)*"?/,token:"string"},{regex:/'(?:[^\\']|\\.)*'?/,token:"string"},{regex:/`(?:[^\\`]|\\.)*`?/,token:"string"},{regex:/^\s*(?:\!(addincludedir|addplugindir|appendfile|cd|define|delfile|echo|error|execute|finalize|getdllversion|gettlbversion|include|insertmacro|macro|macroend|makensis|packhdr|pragma|searchparse|searchreplace|system|tempfile|undef|uninstfinalize|verbose|warning))\b/,token:"keyword"},{regex:/^\s*(?:\!(if(?:n?def)?|ifmacron?def|macro))\b/,token:"keyword",indent:!0},{regex:/^\s*(?:\!(else|endif|macroend))\b/,token:"keyword",dedent:!0},{regex:/^\s*(?:Abort|AddBrandingImage|AddSize|AllowRootDirInstall|AllowSkipFiles|AutoCloseWindow|BGFont|BGGradient|BrandingText|BringToFront|Call|CallInstDLL|Caption|ChangeUI|CheckBitmap|ClearErrors|CompletedText|ComponentText|CopyFiles|CRCCheck|CreateDirectory|CreateFont|CreateShortCut|Delete|DeleteINISec|DeleteINIStr|DeleteRegKey|DeleteRegValue|DetailPrint|DetailsButtonText|DirText|DirVar|DirVerify|EnableWindow|EnumRegKey|EnumRegValue|Exch|Exec|ExecShell|ExecShellWait|ExecWait|ExpandEnvStrings|File|FileBufSize|FileClose|FileErrorText|FileOpen|FileRead|FileReadByte|FileReadUTF16LE|FileReadWord|FileWriteUTF16LE|FileSeek|FileWrite|FileWriteByte|FileWriteWord|FindClose|FindFirst|FindNext|FindWindow|FlushINI|GetCurInstType|GetCurrentAddress|GetDlgItem|GetDLLVersion|GetDLLVersionLocal|GetErrorLevel|GetFileTime|GetFileTimeLocal|GetFullPathName|GetFunctionAddress|GetInstDirError|GetKnownFolderPath|GetLabelAddress|GetTempFileName|GetWinVer|Goto|HideWindow|Icon|IfAbort|IfErrors|IfFileExists|IfRebootFlag|IfRtlLanguage|IfShellVarContextAll|IfSilent|InitPluginsDir|InstallButtonText|InstallColors|InstallDir|InstallDirRegKey|InstProgressFlags|InstType|InstTypeGetText|InstTypeSetText|Int64Cmp|Int64CmpU|Int64Fmt|IntCmp|IntCmpU|IntFmt|IntOp|IntPtrCmp|IntPtrCmpU|IntPtrOp|IsWindow|LangString|LicenseBkColor|LicenseData|LicenseForceSelection|LicenseLangString|LicenseText|LoadAndSetImage|LoadLanguageFile|LockWindow|LogSet|LogText|ManifestDPIAware|ManifestLongPathAware|ManifestMaxVersionTested|ManifestSupportedOS|MessageBox|MiscButtonText|Name|Nop|OutFile|Page|PageCallbacks|PEAddResource|PEDllCharacteristics|PERemoveResource|PESubsysVer|Pop|Push|Quit|ReadEnvStr|ReadINIStr|ReadRegDWORD|ReadRegStr|Reboot|RegDLL|Rename|RequestExecutionLevel|ReserveFile|Return|RMDir|SearchPath|SectionGetFlags|SectionGetInstTypes|SectionGetSize|SectionGetText|SectionIn|SectionSetFlags|SectionSetInstTypes|SectionSetSize|SectionSetText|SendMessage|SetAutoClose|SetBrandingImage|SetCompress|SetCompressor|SetCompressorDictSize|SetCtlColors|SetCurInstType|SetDatablockOptimize|SetDateSave|SetDetailsPrint|SetDetailsView|SetErrorLevel|SetErrors|SetFileAttributes|SetFont|SetOutPath|SetOverwrite|SetRebootFlag|SetRegView|SetShellVarContext|SetSilent|ShowInstDetails|ShowUninstDetails|ShowWindow|SilentInstall|SilentUnInstall|Sleep|SpaceTexts|StrCmp|StrCmpS|StrCpy|StrLen|SubCaption|Unicode|UninstallButtonText|UninstallCaption|UninstallIcon|UninstallSubCaption|UninstallText|UninstPage|UnRegDLL|Var|VIAddVersionKey|VIFileVersion|VIProductVersion|WindowIcon|WriteINIStr|WriteRegBin|WriteRegDWORD|WriteRegExpandStr|WriteRegMultiStr|WriteRegNone|WriteRegStr|WriteUninstaller|XPStyle)\b/,token:"keyword"},{regex:/^\s*(?:Function|PageEx|Section(?:Group)?)\b/,token:"keyword",indent:!0},{regex:/^\s*(?:(Function|PageEx|Section(?:Group)?)End)\b/,token:"keyword",dedent:!0},{regex:/\b(?:ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HIDDEN|HKCC|HKCR(32|64)?|HKCU(32|64)?|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM(32|64)?|HKPD|HKU|IDABORT|IDCANCEL|IDD_DIR|IDD_INST|IDD_INSTFILES|IDD_LICENSE|IDD_SELCOM|IDD_UNINST|IDD_VERIFY|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|MB_YESNOCANCEL|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SW_HIDE|SW_SHOWDEFAULT|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_SHOWNORMAL|SYSTEM|TEMPORARY)\b/,token:"atom"},{regex:/\b(?:admin|all|auto|both|bottom|bzip2|components|current|custom|directory|false|force|hide|highest|ifdiff|ifnewer|instfiles|lastused|leave|left|license|listonly|lzma|nevershow|none|normal|notset|off|on|right|show|silent|silentlog|textonly|top|true|try|un\.components|un\.custom|un\.directory|un\.instfiles|un\.license|uninstConfirm|user|Win10|Win7|Win8|WinVista|zlib)\b/,token:"builtin"},{regex:/\$\{(?:And(?:If(?:Not)?|Unless)|Break|Case(?:Else)?|Continue|Default|Do(?:Until|While)?|Else(?:If(?:Not)?|Unless)?|End(?:If|Select|Switch)|Exit(?:Do|For|While)|For(?:Each)?|If(?:Cmd|Not(?:Then)?|Then)?|Loop(?:Until|While)?|Or(?:If(?:Not)?|Unless)|Select|Switch|Unless|While)\}/,token:"variable-2",indent:!0},{regex:/\$\{(?:BannerTrimPath|DirState|DriveSpace|Get(BaseName|Drives|ExeName|ExePath|FileAttributes|FileExt|FileName|FileVersion|Options|OptionsS|Parameters|Parent|Root|Size|Time)|Locate|RefreshShellIcons)\}/,token:"variable-2",dedent:!0},{regex:/\$\{(?:Memento(?:Section(?:Done|End|Restore|Save)?|UnselectedSection))\}/,token:"variable-2",dedent:!0},{regex:/\$\{(?:Config(?:Read|ReadS|Write|WriteS)|File(?:Join|ReadFromEnd|Recode)|Line(?:Find|Read|Sum)|Text(?:Compare|CompareS)|TrimNewLines)\}/,token:"variable-2",dedent:!0},{regex:/\$\{(?:(?:At(?:Least|Most)|Is)(?:ServicePack|Win(?:7|8|10|95|98|200(?:0|3|8(?:R2)?)|ME|NT4|Vista|XP))|Is(?:NT|Server))\}/,token:"variable",dedent:!0},{regex:/\$\{(?:StrFilterS?|Version(?:Compare|Convert)|Word(?:AddS?|Find(?:(?:2|3)X)?S?|InsertS?|ReplaceS?))\}/,token:"variable-2",dedent:!0},{regex:/\$\{(?:RunningX64)\}/,token:"variable",dedent:!0},{regex:/\$\{(?:Disable|Enable)X64FSRedirection\}/,token:"variable-2",dedent:!0},{regex:/(#|;).*/,token:"comment"},{regex:/\/\*/,token:"comment",next:"comment"},{regex:/[-+\/*=<>!]+/,token:"operator"},{regex:/\$\w+/,token:"variable"},{regex:/\${[\w\.:-]+}/,token:"variable-2"},{regex:/\$\([\w\.:-]+\)/,token:"variable-3"}],comment:[{regex:/.*?\*\//,token:"comment",next:"start"},{regex:/.*/,token:"comment"}],meta:{electricInput:/^\s*((Function|PageEx|Section|Section(Group)?)End|(\!(endif|macroend))|\$\{(End(If|Unless|While)|Loop(Until)|Next)\})$/,blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:["#",";"]}}),CodeMirror.defineMIME("text/x-nsis","nsis"); // ntriples CodeMirror.defineMode("ntriples",function(){var t=0,i=1,a=2,u=3,o=4,l=5,s=6,f=7,p=8,c=9,h=10,v=11,d=12;function M(e,n){var r=e.location,r=r==t&&"<"==n?i:r==t&&"_"==n?a:r==u&&"<"==n?o:r==l&&"<"==n?s:r==l&&"_"==n?f:r==l&&'"'==n?p:r==i&&">"==n||r==a&&" "==n?u:r==o&&">"==n?l:r==s&&">"==n||r==f&&" "==n||r==p&&'"'==n||r==c&&" "==n||r==h&&">"==n?v:r==p&&"@"==n?c:r==p&&"^"==n?h:" "!=n||r!=t&&r!=u&&r!=l&&r!=v?r==v&&"."==n?t:d:r;e.location=r}return{startState:function(){return{location:t,uris:[],anchors:[],bnodes:[],langs:[],types:[]}},token:function(e,n){var r=e.next();if("<"==r){M(n,r);var t="";return(e.eatWhile(function(e){return"#"!=e&&">"!=e&&(t+=e,!0)}),n.uris.push(t),e.match("#",!1))?"variable":(e.next(),M(n,">"),"variable")}if("#"==r){var i="";return e.eatWhile(function(e){return">"!=e&&" "!=e&&(i+=e,!0)}),n.anchors.push(i),"variable-2"}if(">"==r)return M(n,">"),"variable";if("_"==r){M(n,r);var a="";return e.eatWhile(function(e){return" "!=e&&(a+=e,!0)}),n.bnodes.push(a),e.next(),M(n," "),"builtin"}if('"'==r)return M(n,r),e.eatWhile(function(e){return'"'!=e}),e.next(),"@"!=e.peek()&&"^"!=e.peek()&&M(n,'"'),"string";if("@"==r){M(n,"@");var u="";return e.eatWhile(function(e){return" "!=e&&(u+=e,!0)}),n.langs.push(u),e.next(),M(n," "),"string-2"}if("^"==r){e.next(),M(n,"^");var o="";return e.eatWhile(function(e){return">"!=e&&(o+=e,!0)}),n.types.push(o),e.next(),M(n,">"),"variable"}" "==r&&M(n,r),"."==r&&M(n,r)}}}),CodeMirror.defineMIME("application/n-triples","ntriples"),CodeMirror.defineMIME("application/n-quads","ntriples"),CodeMirror.defineMIME("text/n-triples","ntriples"); // octave CodeMirror.defineMode("octave",function(){function r(e){return new RegExp("^(("+e.join(")|(")+"))\\b")}var i=new RegExp("^[\\+\\-\\*/&|\\^~<>!@'\\\\]"),o=new RegExp("^[\\(\\[\\{\\},:=;\\.]"),a=new RegExp("^((==)|(~=)|(<=)|(>=)|(<<)|(>>)|(\\.[\\+\\-\\*/\\^\\\\]))"),c=new RegExp("^((!=)|(\\+=)|(\\-=)|(\\*=)|(/=)|(&=)|(\\|=)|(\\^=))"),m=new RegExp("^((>>=)|(<<=))"),s=new RegExp("^[\\]\\)]"),u=new RegExp("^[_A-Za-z¡-￿][_A-Za-z0-9¡-￿]*"),f=r(["error","eval","function","abs","acos","atan","asin","cos","cosh","exp","log","prod","sum","log10","max","min","sign","sin","sinh","sqrt","tan","reshape","break","zeros","default","margin","round","ones","rand","syn","ceil","floor","size","clear","zeros","eye","mean","std","cov","det","eig","inv","norm","rank","trace","expm","logm","sqrtm","linspace","plot","title","xlabel","ylabel","legend","text","grid","meshgrid","mesh","num2str","fft","ifft","arrayfun","cellfun","input","fliplr","flipud","ismember"]),l=r(["return","case","switch","else","elseif","end","endif","endfunction","if","otherwise","do","for","while","try","catch","classdef","properties","events","methods","global","persistent","endfor","endwhile","printf","sprintf","disp","until","continue","pkg"]);function d(e,n){return e.sol()||"'"!==e.peek()?(n.tokenize=h)(e,n):(e.next(),n.tokenize=h,"operator")}function p(e,n){return e.match(/^.*%}/)?n.tokenize=h:e.skipToEnd(),"comment"}function h(e,n){if(e.eatSpace())return null;if(e.match("%{"))return n.tokenize=p,e.skipToEnd(),"comment";if(e.match(/^[%#]/))return e.skipToEnd(),"comment";if(e.match(/^[0-9\.+-]/,!1)){if(e.match(/^[+-]?0x[0-9a-fA-F]+[ij]?/))return e.tokenize=h,"number";if(e.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?[ij]?/))return"number";if(e.match(/^[+-]?\d+([EeDd][+-]?\d+)?[ij]?/))return"number"}if(e.match(r(["nan","NaN","inf","Inf"])))return"number";var t=e.match(/^"(?:[^"]|"")*("|$)/)||e.match(/^'(?:[^']|'')*('|$)/);return t?t[1]?"string":"string error":e.match(l)?"keyword":e.match(f)?"builtin":e.match(u)?"variable":e.match(i)||e.match(a)?"operator":e.match(o)||e.match(c)||e.match(m)?null:e.match(s)?(n.tokenize=d,null):(e.next(),"error")}return{startState:function(){return{tokenize:h}},token:function(e,n){e=n.tokenize(e,n);return"number"!==e&&"variable"!==e||(n.tokenize=d),e},lineComment:"%",fold:"indent"}}),CodeMirror.defineMIME("text/x-octave","octave"); // oz CodeMirror.defineMode("oz",function(n){function e(e){return new RegExp("^(("+e.join(")|(")+"))\\b")}var t,r=/[\^@!\|<>#~\.\*\-\+\\/,=]/,a=/(<-)|(:=)|(=<)|(>=)|(<=)|(<:)|(>:)|(=:)|(\\=)|(\\=:)|(!!)|(==)|(::)/,i=/(:::)|(\.\.\.)|(=<:)|(>=:)/,o=["in","then","else","of","elseof","elsecase","elseif","catch","finally","with","require","prepare","import","export","define","do"],c=["end"],u=e(["true","false","nil","unit"]),f=e(["andthen","at","attr","declare","feat","from","lex","mod","div","mode","orelse","parser","prod","prop","scanner","self","syn","token"]),s=e(["local","proc","fun","case","class","if","cond","or","dis","choice","not","thread","try","raise","lock","for","suchthat","meth","functor"]),d=e(o),l=e(c);function m(e,t){if(e.eatSpace())return null;if(e.match(/[{}]/))return"bracket";if(e.match("[]"))return"keyword";if(e.match(i)||e.match(a))return"operator";if(e.match(u))return"atom";var n=e.match(s);if(n)return t.doInCurrentLine?t.doInCurrentLine=!1:t.currentIndent++,"proc"==n[0]||"fun"==n[0]?t.tokenize=p:"class"==n[0]?t.tokenize=h:"meth"==n[0]&&(t.tokenize=k),"keyword";if(e.match(d)||e.match(f))return"keyword";if(e.match(l))return t.currentIndent--,"keyword";var o,n=e.next();if('"'==n||"'"==n)return t.tokenize=(o=n,function(e,t){for(var n,r=!1,a=!1;null!=(n=e.next());){if(n==o&&!r){a=!0;break}r=!r&&"\\"==n}return!a&&r||(t.tokenize=m),"string"}),t.tokenize(e,t);if(/[~\d]/.test(n)){if("~"==n){if(!/^[0-9]/.test(e.peek()))return null;if("0"==e.next()&&e.match(/^[xX][0-9a-fA-F]+/)||e.match(/^[0-9]*(\.[0-9]+)?([eE][~+]?[0-9]+)?/))return"number"}return"0"==n&&e.match(/^[xX][0-9a-fA-F]+/)||e.match(/^[0-9]*(\.[0-9]+)?([eE][~+]?[0-9]+)?/)?"number":null}return"%"==n?(e.skipToEnd(),"comment"):"/"==n&&e.eat("*")?(t.tokenize=z)(e,t):r.test(n)?"operator":(e.eatWhile(/\w/),"variable")}function h(e,t){return e.eatSpace()?null:(e.match(/([A-Z][A-Za-z0-9_]*)|(`.+`)/),t.tokenize=m,"variable-3")}function k(e,t){return e.eatSpace()?null:(e.match(/([a-zA-Z][A-Za-z0-9_]*)|(`.+`)/),t.tokenize=m,"def")}function p(e,t){return e.eatSpace()?null:!t.hasPassedFirstStage&&e.eat("{")?(t.hasPassedFirstStage=!0,"bracket"):t.hasPassedFirstStage?(e.match(/([A-Z][A-Za-z0-9_]*)|(`.+`)|\$/),t.hasPassedFirstStage=!1,t.tokenize=m,"def"):(t.tokenize=m,null)}function z(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=m;break}r="*"==n}return"comment"}return{startState:function(){return{tokenize:m,currentIndent:0,doInCurrentLine:!1,hasPassedFirstStage:!1}},token:function(e,t){return e.sol()&&(t.doInCurrentLine=0),t.tokenize(e,t)},indent:function(e,t){t=t.replace(/^\s+|\s+$/g,"");return t.match(l)||t.match(d)||t.match(/(\[])/)?n.indentUnit*(e.currentIndent-1):e.currentIndent<0?0:e.currentIndent*n.indentUnit},fold:"indent",electricInput:(t=o.concat(c),new RegExp("[\\[\\]]|("+t.join("|")+")$")),lineComment:"%",blockCommentStart:"/*",blockCommentEnd:"*/"}}),CodeMirror.defineMIME("text/x-oz","oz"); // pascal CodeMirror.defineMode("pascal",function(){var n=function(e){for(var t={},r=e.split(" "),n=0;n!?|\/]/;function l(e,t){for(var r,n=!1;r=e.next();){if(")"==r&&n){t.tokenize=null;break}n="*"==r}return"comment"}function s(e,t){for(var r;r=e.next();)if("}"==r){t.tokenize=null;break}return"comment"}return{startState:function(){return{tokenize:null}},token:function(e,t){if(e.eatSpace())return null;t=(t.tokenize||function(e,t){var i,r=e.next();return"#"==r&&t.startOfLine?(e.skipToEnd(),"meta"):'"'==r||"'"==r?(t.tokenize=(i=r,function(e,t){for(var r,n=!1,a=!1;null!=(r=e.next());){if(r==i&&!n){a=!0;break}n=!n&&"\\"==r}return!a&&n||(t.tokenize=null),"string"}),t.tokenize(e,t)):"("==r&&e.eat("*")?(t.tokenize=l)(e,t):"{"==r?(t.tokenize=s)(e,t):/[\[\]\(\),;\:\.]/.test(r)?null:/\d/.test(r)?(e.eatWhile(/[\w\.]/),"number"):"/"==r&&e.eat("/")?(e.skipToEnd(),"comment"):o.test(r)?(e.eatWhile(o),"operator"):(e.eatWhile(/[\w\$_]/),e=e.current(),n.propertyIsEnumerable(e)?"keyword":a.propertyIsEnumerable(e)?"atom":"variable")})(e,t);return t},electricChars:"{}"}}),CodeMirror.defineMIME("text/x-pascal","pascal"); // pegjs CodeMirror.defineMode("pegjs",function(e){var i=CodeMirror.getMode(e,"javascript");return{startState:function(){return{inString:!1,stringType:null,inComment:!1,inCharacterClass:!1,braced:0,lhs:!0,localState:null}},token:function(e,t){if(e&&(t.inString||t.inComment||'"'!=e.peek()&&"'"!=e.peek()||(t.stringType=e.peek(),e.next(),t.inString=!0)),t.inString||t.inComment||!e.match("/*")||(t.inComment=!0),t.inString){for(;t.inString&&!e.eol();)e.peek()===t.stringType?(e.next(),t.inString=!1):"\\"===e.peek()?(e.next(),e.next()):e.match(/^.[^\\\"\']*/);return t.lhs?"property string":"string"}if(t.inComment){for(;t.inComment&&!e.eol();)e.match("*/")?t.inComment=!1:e.match(/^.[^\*]*/);return"comment"}if(t.inCharacterClass)for(;t.inCharacterClass&&!e.eol();)e.match(/^[^\]\\]+/)||e.match(/^\\./)||(t.inCharacterClass=!1);else{if("["===e.peek())return e.next(),t.inCharacterClass=!0,"bracket";if(e.match("//"))return e.skipToEnd(),"comment";if(t.braced||"{"===e.peek()){null===t.localState&&(t.localState=CodeMirror.startState(i));var n=i.token(e,t.localState),r=e.current();if(!n)for(var a=0;a=(t=e.string.length-1)?e.pos=t:e.pos=r}CodeMirror.defineMode("perl",function(){var o={"->":4,"++":4,"--":4,"**":4,"=~":4,"!~":4,"*":4,"/":4,"%":4,x:4,"+":4,"-":4,".":4,"<<":4,">>":4,"<":4,">":4,"<=":4,">=":4,lt:4,gt:4,le:4,ge:4,"==":4,"!=":4,"<=>":4,eq:4,ne:4,cmp:4,"~~":4,"&":4,"|":4,"^":4,"&&":4,"||":4,"//":4,"..":4,"...":4,"?":4,":":4,"=":4,"+=":4,"-=":4,"*=":4,",":4,"=>":4,"::":4,not:4,and:4,or:4,xor:4,BEGIN:[5,1],END:[5,1],PRINT:[5,1],PRINTF:[5,1],GETC:[5,1],READ:[5,1],READLINE:[5,1],DESTROY:[5,1],TIE:[5,1],TIEHANDLE:[5,1],UNTIE:[5,1],STDIN:5,STDIN_TOP:5,STDOUT:5,STDOUT_TOP:5,STDERR:5,STDERR_TOP:5,$ARG:5,$_:5,"@ARG":5,"@_":5,$LIST_SEPARATOR:5,'$"':5,$PROCESS_ID:5,$PID:5,$$:5,$REAL_GROUP_ID:5,$GID:5,"$(":5,$EFFECTIVE_GROUP_ID:5,$EGID:5,"$)":5,$PROGRAM_NAME:5,$0:5,$SUBSCRIPT_SEPARATOR:5,$SUBSEP:5,"$;":5,$REAL_USER_ID:5,$UID:5,"$<":5,$EFFECTIVE_USER_ID:5,$EUID:5,"$>":5,$a:5,$b:5,$COMPILING:5,"$^C":5,$DEBUGGING:5,"$^D":5,"${^ENCODING}":5,$ENV:5,"%ENV":5,$SYSTEM_FD_MAX:5,"$^F":5,"@F":5,"${^GLOBAL_PHASE}":5,"$^H":5,"%^H":5,"@INC":5,"%INC":5,$INPLACE_EDIT:5,"$^I":5,"$^M":5,$OSNAME:5,"$^O":5,"${^OPEN}":5,$PERLDB:5,"$^P":5,$SIG:5,"%SIG":5,$BASETIME:5,"$^T":5,"${^TAINT}":5,"${^UNICODE}":5,"${^UTF8CACHE}":5,"${^UTF8LOCALE}":5,$PERL_VERSION:5,"$^V":5,"${^WIN32_SLOPPY_STAT}":5,$EXECUTABLE_NAME:5,"$^X":5,$1:5,$MATCH:5,"$&":5,"${^MATCH}":5,$PREMATCH:5,"$`":5,"${^PREMATCH}":5,$POSTMATCH:5,"$'":5,"${^POSTMATCH}":5,$LAST_PAREN_MATCH:5,"$+":5,$LAST_SUBMATCH_RESULT:5,"$^N":5,"@LAST_MATCH_END":5,"@+":5,"%LAST_PAREN_MATCH":5,"%+":5,"@LAST_MATCH_START":5,"@-":5,"%LAST_MATCH_START":5,"%-":5,$LAST_REGEXP_CODE_RESULT:5,"$^R":5,"${^RE_DEBUG_FLAGS}":5,"${^RE_TRIE_MAXBUF}":5,$ARGV:5,"@ARGV":5,ARGV:5,ARGVOUT:5,$OUTPUT_FIELD_SEPARATOR:5,$OFS:5,"$,":5,$INPUT_LINE_NUMBER:5,$NR:5,"$.":5,$INPUT_RECORD_SEPARATOR:5,$RS:5,"$/":5,$OUTPUT_RECORD_SEPARATOR:5,$ORS:5,"$\\":5,$OUTPUT_AUTOFLUSH:5,"$|":5,$ACCUMULATOR:5,"$^A":5,$FORMAT_FORMFEED:5,"$^L":5,$FORMAT_PAGE_NUMBER:5,"$%":5,$FORMAT_LINES_LEFT:5,"$-":5,$FORMAT_LINE_BREAK_CHARACTERS:5,"$:":5,$FORMAT_LINES_PER_PAGE:5,"$=":5,$FORMAT_TOP_NAME:5,"$^":5,$FORMAT_NAME:5,"$~":5,"${^CHILD_ERROR_NATIVE}":5,$EXTENDED_OS_ERROR:5,"$^E":5,$EXCEPTIONS_BEING_CAUGHT:5,"$^S":5,$WARNING:5,"$^W":5,"${^WARNING_BITS}":5,$OS_ERROR:5,$ERRNO:5,"$!":5,"%OS_ERROR":5,"%ERRNO":5,"%!":5,$CHILD_ERROR:5,"$?":5,$EVAL_ERROR:5,"$@":5,$OFMT:5,"$#":5,"$*":5,$ARRAY_BASE:5,"$[":5,$OLD_PERL_VERSION:5,"$]":5,if:[1,1],elsif:[1,1],else:[1,1],while:[1,1],unless:[1,1],for:[1,1],foreach:[1,1],abs:1,accept:1,alarm:1,atan2:1,bind:1,binmode:1,bless:1,bootstrap:1,break:1,caller:1,chdir:1,chmod:1,chomp:1,chop:1,chown:1,chr:1,chroot:1,close:1,closedir:1,connect:1,continue:[1,1],cos:1,crypt:1,dbmclose:1,dbmopen:1,default:1,defined:1,delete:1,die:1,do:1,dump:1,each:1,endgrent:1,endhostent:1,endnetent:1,endprotoent:1,endpwent:1,endservent:1,eof:1,eval:1,exec:1,exists:1,exit:1,exp:1,fcntl:1,fileno:1,flock:1,fork:1,format:1,formline:1,getc:1,getgrent:1,getgrgid:1,getgrnam:1,gethostbyaddr:1,gethostbyname:1,gethostent:1,getlogin:1,getnetbyaddr:1,getnetbyname:1,getnetent:1,getpeername:1,getpgrp:1,getppid:1,getpriority:1,getprotobyname:1,getprotobynumber:1,getprotoent:1,getpwent:1,getpwnam:1,getpwuid:1,getservbyname:1,getservbyport:1,getservent:1,getsockname:1,getsockopt:1,given:1,glob:1,gmtime:1,goto:1,grep:1,hex:1,import:1,index:1,int:1,ioctl:1,join:1,keys:1,kill:1,last:1,lc:1,lcfirst:1,length:1,link:1,listen:1,local:2,localtime:1,lock:1,log:1,lstat:1,m:null,map:1,mkdir:1,msgctl:1,msgget:1,msgrcv:1,msgsnd:1,my:2,new:1,next:1,no:1,oct:1,open:1,opendir:1,ord:1,our:2,pack:1,package:1,pipe:1,pop:1,pos:1,print:1,printf:1,prototype:1,push:1,q:null,qq:null,qr:null,quotemeta:null,qw:null,qx:null,rand:1,read:1,readdir:1,readline:1,readlink:1,readpipe:1,recv:1,redo:1,ref:1,rename:1,require:1,reset:1,return:1,reverse:1,rewinddir:1,rindex:1,rmdir:1,s:null,say:1,scalar:1,seek:1,seekdir:1,select:1,semctl:1,semget:1,semop:1,send:1,setgrent:1,sethostent:1,setnetent:1,setpgrp:1,setpriority:1,setprotoent:1,setpwent:1,setservent:1,setsockopt:1,shift:1,shmctl:1,shmget:1,shmread:1,shmwrite:1,shutdown:1,sin:1,sleep:1,socket:1,socketpair:1,sort:1,splice:1,split:1,sprintf:1,sqrt:1,srand:1,stat:1,state:1,study:1,sub:1,substr:1,symlink:1,syscall:1,sysopen:1,sysread:1,sysseek:1,system:1,syswrite:1,tell:1,telldir:1,tie:1,tied:1,time:1,times:1,tr:null,truncate:1,uc:1,ucfirst:1,umask:1,undef:1,unlink:1,unpack:1,unshift:1,untie:1,use:1,utime:1,values:1,vec:1,wait:1,waitpid:1,wantarray:1,warn:1,when:1,write:1,y:null},$="string-2",u=/[goseximacplud]/;function l(e,t,s,a,o){return t.chain=null,t.style=null,t.tail=null,t.tokenize=function(e,t){for(var r,n=!1,i=0;r=e.next();){if(r===s[i]&&!n)return void 0!==s[++i]?(t.chain=s[i],t.style=a,t.tail=o):o&&e.eatWhile(o),t.tokenize=E,a;n=!n&&"\\"==r}return a},t.tokenize(e,t)}function f(e,t,r){return t.tokenize=function(e,t){return e.string==r&&(t.tokenize=E),e.skipToEnd(),"string"},t.tokenize(e,t)}function E(e,t){if(e.eatSpace())return null;if(t.chain)return l(e,t,t.chain,t.style,t.tail);if(e.match(/^\-?[\d\.]/,!1)&&e.match(/^(\-?(\d*\.\d+(e[+-]?\d+)?|\d+\.\d*)|0x[\da-fA-F]+|0b[01]+|\d+(e[+-]?\d+)?)/))return"number";if(e.match(/^<<(?=[_a-zA-Z])/))return e.eatWhile(/\w/),f(e,t,e.current().substr(2));if(e.sol()&&e.match(/^\=item(?!\w)/))return f(e,t,"=cut");var r=e.next();if('"'==r||"'"==r){if(T(e,3)=="<<"+r){var n=e.pos;e.eatWhile(/\w/);var i=e.current().substr(1);if(i&&e.eat(r))return f(e,t,i);e.pos=n}return l(e,t,[r],"string")}if("q"==r&&(!(s=R(e,-2))||!/\w/.test(s)))if("x"==(s=R(e,0))){if("("==(s=R(e,1)))return p(e,2),l(e,t,[")"],$,u);if("["==s)return p(e,2),l(e,t,["]"],$,u);if("{"==s)return p(e,2),l(e,t,["}"],$,u);if("<"==s)return p(e,2),l(e,t,[">"],$,u);if(/[\^'"!~\/]/.test(s))return p(e,1),l(e,t,[e.eat(s)],$,u)}else if("q"==s){if("("==(s=R(e,1)))return p(e,2),l(e,t,[")"],"string");if("["==s)return p(e,2),l(e,t,["]"],"string");if("{"==s)return p(e,2),l(e,t,["}"],"string");if("<"==s)return p(e,2),l(e,t,[">"],"string");if(/[\^'"!~\/]/.test(s))return p(e,1),l(e,t,[e.eat(s)],"string")}else if("w"==s){if("("==(s=R(e,1)))return p(e,2),l(e,t,[")"],"bracket");if("["==s)return p(e,2),l(e,t,["]"],"bracket");if("{"==s)return p(e,2),l(e,t,["}"],"bracket");if("<"==s)return p(e,2),l(e,t,[">"],"bracket");if(/[\^'"!~\/]/.test(s))return p(e,1),l(e,t,[e.eat(s)],"bracket")}else if("r"==s){if("("==(s=R(e,1)))return p(e,2),l(e,t,[")"],$,u);if("["==s)return p(e,2),l(e,t,["]"],$,u);if("{"==s)return p(e,2),l(e,t,["}"],$,u);if("<"==s)return p(e,2),l(e,t,[">"],$,u);if(/[\^'"!~\/]/.test(s))return p(e,1),l(e,t,[e.eat(s)],$,u)}else if(/[\^'"!~\/(\[{<]/.test(s)){if("("==s)return p(e,1),l(e,t,[")"],"string");if("["==s)return p(e,1),l(e,t,["]"],"string");if("{"==s)return p(e,1),l(e,t,["}"],"string");if("<"==s)return p(e,1),l(e,t,[">"],"string");if(/[\^'"!~\/]/.test(s))return l(e,t,[e.eat(s)],"string")}if("m"==r){var s=R(e,-2);if((!s||!/\w/.test(s))&&(s=e.eat(/[(\[{<\^'"!~\/]/))){if(/[\^'"!~\/]/.test(s))return l(e,t,[s],$,u);if("("==s)return l(e,t,[")"],$,u);if("["==s)return l(e,t,["]"],$,u);if("{"==s)return l(e,t,["}"],$,u);if("<"==s)return l(e,t,[">"],$,u)}}if("s"==r){s=/[\/>\]})\w]/.test(R(e,-2));if(!s&&(s=e.eat(/[(\[{<\^'"!~\/]/)))return l(e,t,"["==s?["]","]"]:"{"==s?["}","}"]:"<"==s?[">",">"]:"("==s?[")",")"]:[s,s],$,u)}if("y"==r){s=/[\/>\]})\w]/.test(R(e,-2));if(!s&&(s=e.eat(/[(\[{<\^'"!~\/]/)))return l(e,t,"["==s?["]","]"]:"{"==s?["}","}"]:"<"==s?[">",">"]:"("==s?[")",")"]:[s,s],$,u)}if("t"==r){s=/[\/>\]})\w]/.test(R(e,-2));if(!s&&(s=(s=e.eat("r"))&&e.eat(/[(\[{<\^'"!~\/]/)))return l(e,t,"["==s?["]","]"]:"{"==s?["}","}"]:"<"==s?[">",">"]:"("==s?[")",")"]:[s,s],$,u)}if("`"==r)return l(e,t,[r],"variable-2");if("/"==r)return/~\s*$/.test(T(e))?l(e,t,[r],$,u):"operator";if("$"==r){n=e.pos;if(e.eatWhile(/\d/)||e.eat("{")&&e.eatWhile(/\d/)&&e.eat("}"))return"variable-2";e.pos=n}if(/[$@%]/.test(r)){n=e.pos;if(e.eat("^")&&e.eat(/[A-Z]/)||!/[@$%&]/.test(R(e,-2))&&e.eat(/[=|\\\-#?@;:&`~\^!\[\]*'"$+.,\/<>()]/)){s=e.current();if(o[s])return"variable-2"}e.pos=n}if(/[$@%&]/.test(r)&&(e.eatWhile(/[\w$]/)||e.eat("{")&&e.eatWhile(/[\w$]/)&&e.eat("}"))){s=e.current();return o[s]?"variable-2":"variable"}if("#"==r&&"$"!=R(e,-2))return e.skipToEnd(),"comment";if(/[:+\-\^*$&%@=<>!?|\/~\.]/.test(r)){n=e.pos;if(e.eatWhile(/[:+\-\^*$&%@=<>!?|\/~\.]/),o[e.current()])return"operator";e.pos=n}if("_"==r&&1==e.pos){if("_END__"==A(e,6))return l(e,t,["\0"],"comment");if("_DATA__"==A(e,7))return l(e,t,["\0"],"variable-2");if("_C__"==A(e,7))return l(e,t,["\0"],"string")}if(/\w/.test(r)){n=e.pos;if("{"==R(e,-2)&&("}"==R(e,0)||e.eatWhile(/\w/)&&"}"==R(e,0)))return"string";e.pos=n}if(/[A-Z]/.test(r)){var a=R(e,-2),n=e.pos;if(e.eatWhile(/[A-Z_]/),!/[\da-z]/.test(R(e,0)))return(s=o[e.current()])?(s[1]&&(s=s[0]),":"!=a?1==s?"keyword":2==s?"def":3==s?"atom":4==s?"operator":5==s?"variable-2":"meta":"meta"):"meta";e.pos=n}if(/[a-zA-Z_]/.test(r)){a=R(e,-2);return e.eatWhile(/\w/),(s=o[e.current()])?(s[1]&&(s=s[0]),":"!=a?1==s?"keyword":2==s?"def":3==s?"atom":4==s?"operator":5==s?"variable-2":"meta":"meta"):"meta"}return null}return{startState:function(){return{tokenize:E,chain:null,style:null,tail:null}},token:function(e,t){return(t.tokenize||E)(e,t)},lineComment:"#"}}),CodeMirror.registerHelper("wordChars","perl",/[\w$]/),CodeMirror.defineMIME("text/x-perl","perl")}(); // php !function(){function e(e){for(var t={},r=e.split(" "),_=0;_\w/,!1)&&(t.tokenize=a([[["->",null]],[[/[\w]+/,"variable"]]],r,_)),"variable-2";var s=!1;for(;!e.eol()&&(s||!1===_||!e.match("{$",!1)&&!e.match(/^(\$[a-zA-Z_][a-zA-Z0-9_]*|\$\{)/,!1));){if(!s&&e.match(r)){t.tokenize=null,t.tokStack.pop(),t.tokStack.pop();break}s="\\"==e.next()&&!s}return"string"}(e,t,r,_)}}var t="abstract and array as break case catch class clone const continue declare default do else elseif enddeclare endfor endforeach endif endswitch endwhile enum extends final for foreach function global goto if implements interface instanceof namespace new or private protected public static switch throw trait try use var while xor die echo empty exit eval include include_once isset list require require_once return print unset __halt_compiler self static parent yield insteadof finally readonly match",r="true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__ __TRAIT__",_="func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex hex2bin sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage memory_get_peak_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_resource is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents file_put_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists array_intersect_key array_combine array_column pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport http_response_code get_declared_traits getimagesizefromstring socket_import_stream stream_set_chunk_size trait_exists header_register_callback class_uses session_status session_register_shutdown echo print global static exit array empty eval isset unset die include require include_once require_once json_decode json_encode json_last_error json_last_error_msg curl_close curl_copy_handle curl_errno curl_error curl_escape curl_exec curl_file_create curl_getinfo curl_init curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_multi_init curl_multi_remove_handle curl_multi_select curl_multi_setopt curl_multi_strerror curl_pause curl_reset curl_setopt_array curl_setopt curl_share_close curl_share_init curl_share_setopt curl_strerror curl_unescape curl_version mysqli_affected_rows mysqli_autocommit mysqli_change_user mysqli_character_set_name mysqli_close mysqli_commit mysqli_connect_errno mysqli_connect_error mysqli_connect mysqli_data_seek mysqli_debug mysqli_dump_debug_info mysqli_errno mysqli_error_list mysqli_error mysqli_fetch_all mysqli_fetch_array mysqli_fetch_assoc mysqli_fetch_field_direct mysqli_fetch_field mysqli_fetch_fields mysqli_fetch_lengths mysqli_fetch_object mysqli_fetch_row mysqli_field_count mysqli_field_seek mysqli_field_tell mysqli_free_result mysqli_get_charset mysqli_get_client_info mysqli_get_client_stats mysqli_get_client_version mysqli_get_connection_stats mysqli_get_host_info mysqli_get_proto_info mysqli_get_server_info mysqli_get_server_version mysqli_info mysqli_init mysqli_insert_id mysqli_kill mysqli_more_results mysqli_multi_query mysqli_next_result mysqli_num_fields mysqli_num_rows mysqli_options mysqli_ping mysqli_prepare mysqli_query mysqli_real_connect mysqli_real_escape_string mysqli_real_query mysqli_reap_async_query mysqli_refresh mysqli_rollback mysqli_select_db mysqli_set_charset mysqli_set_local_infile_default mysqli_set_local_infile_handler mysqli_sqlstate mysqli_ssl_set mysqli_stat mysqli_stmt_init mysqli_store_result mysqli_thread_id mysqli_thread_safe mysqli_use_result mysqli_warning_count";CodeMirror.registerHelper("hintWords","php",[t,r,_].join(" ").split(" ")),CodeMirror.registerHelper("wordChars","php",/[\w$]/);var s={name:"clike",helperType:"php",keywords:e(t),blockKeywords:e("catch do else elseif for foreach if switch try while finally"),defKeywords:e("class enum function interface namespace trait"),atoms:e(r),builtin:e(_),multiLineStrings:!0,hooks:{$:function(e){return e.eatWhile(/[\w\$_]/),"variable-2"},"<":function(e,t){if(_=e.match(/^<<\s*/)){var r=e.eat(/['"]/);e.eatWhile(/[\w\.]/);var _=e.current().slice(_[0].length+(r?2:1));if(r&&e.eat(r),_)return(t.tokStack||(t.tokStack=[])).push(_,0),t.tokenize=n(_,"'"!=r),"string"}return!1},"#":function(e){for(;!e.eol()&&!e.match("?>",!1);)e.next();return"comment"},"/":function(e){if(e.eat("/")){for(;!e.eol()&&!e.match("?>",!1);)e.next();return"comment"}return!1},'"':function(e,t){return(t.tokStack||(t.tokStack=[])).push('"',0),t.tokenize=n('"'),"string"},"{":function(e,t){return t.tokStack&&t.tokStack.length&&t.tokStack[t.tokStack.length-1]++,!1},"}":function(e,t){return t.tokStack&&0")?(t.curMode=l,t.curState=t.html,t.php.context.prev||(t.php=null),"meta"):a.token(e,t.curState);if(e.match(/^<\?\w*/))return t.curMode=a,t.php||(t.php=CodeMirror.startState(a,l.indent(t.html,"",""))),t.curState=t.php,"meta";if('"'==t.pending||"'"==t.pending){for(;!e.eol()&&e.next()!=t.pending;);var _="string"}else _=t.pending&&e.pos/.test(i)?t.pending=s[0]:t.pending={end:e.pos,style:_},e.backUp(i.length-r)),_},indent:function(e,t,r){return e.curMode!=a&&/^\s*<\//.test(t)||e.curMode==a&&/^\?>/.test(t)?l.indent(e.html,t,r):e.curMode.indent(e.curState,t,r)},blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//",innerMode:function(e){return{state:e.curState,mode:e.curMode}}}},"htmlmixed","clike"),CodeMirror.defineMIME("application/x-httpd-php","php"),CodeMirror.defineMIME("application/x-httpd-php-open",{name:"php",startOpen:!0}),CodeMirror.defineMIME("text/x-php",s)}(); // pig !function(){function O(O){for(var T={},E=O.split(" "),e=0;e=&?:\/!|]/;function S(O,T,E){return(T.tokenize=E)(O,T)}function t(O,T){for(var E,e=!1;E=O.next();){if("/"==E&&e){T.tokenize=L;break}e="*"==E}return"comment"}function L(O,T){var N,E=O.next();return'"'==E||"'"==E?S(O,T,(N=E,function(O,T){for(var E,e=!1,I=!1;null!=(E=O.next());){if(E==N&&!e){I=!0;break}e=!e&&"\\"==E}return!I&&(e||r)||(T.tokenize=L),"error"})):/[\[\]{}\(\),;\.]/.test(E)?null:/\d/.test(E)?(O.eatWhile(/[\w\.]/),"number"):"/"==E?O.eat("*")?S(O,T,t):(O.eatWhile(R),"operator"):"-"==E?O.eat("-")?(O.skipToEnd(),"comment"):(O.eatWhile(R),"operator"):R.test(E)?(O.eatWhile(R),"operator"):(O.eatWhile(/[\w\$_]/),e&&e.propertyIsEnumerable(O.current().toUpperCase())&&!O.eat(")")&&!O.eat(".")?"keyword":I&&I.propertyIsEnumerable(O.current().toUpperCase())?"variable-2":A&&A.propertyIsEnumerable(O.current().toUpperCase())?"variable-3":"variable")}return{startState:function(){return{tokenize:L,startOfLine:!0}},token:function(O,T){return O.eatSpace()?null:T.tokenize(O,T)}}}),T="ABS ACOS ARITY ASIN ATAN AVG BAGSIZE BINSTORAGE BLOOM BUILDBLOOM CBRT CEIL CONCAT COR COS COSH COUNT COUNT_STAR COV CONSTANTSIZE CUBEDIMENSIONS DIFF DISTINCT DOUBLEABS DOUBLEAVG DOUBLEBASE DOUBLEMAX DOUBLEMIN DOUBLEROUND DOUBLESUM EXP FLOOR FLOATABS FLOATAVG FLOATMAX FLOATMIN FLOATROUND FLOATSUM GENERICINVOKER INDEXOF INTABS INTAVG INTMAX INTMIN INTSUM INVOKEFORDOUBLE INVOKEFORFLOAT INVOKEFORINT INVOKEFORLONG INVOKEFORSTRING INVOKER ISEMPTY JSONLOADER JSONMETADATA JSONSTORAGE LAST_INDEX_OF LCFIRST LOG LOG10 LOWER LONGABS LONGAVG LONGMAX LONGMIN LONGSUM MAX MIN MAPSIZE MONITOREDUDF NONDETERMINISTIC OUTPUTSCHEMA PIGSTORAGE PIGSTREAMING RANDOM REGEX_EXTRACT REGEX_EXTRACT_ALL REPLACE ROUND SIN SINH SIZE SQRT STRSPLIT SUBSTRING SUM STRINGCONCAT STRINGMAX STRINGMIN STRINGSIZE TAN TANH TOBAG TOKENIZE TOMAP TOP TOTUPLE TRIM TEXTLOADER TUPLESIZE UCFIRST UPPER UTF8STORAGECONVERTER ",E="VOID IMPORT RETURNS DEFINE LOAD FILTER FOREACH ORDER CUBE DISTINCT COGROUP JOIN CROSS UNION SPLIT INTO IF OTHERWISE ALL AS BY USING INNER OUTER ONSCHEMA PARALLEL PARTITION GROUP AND OR NOT GENERATE FLATTEN ASC DESC IS STREAM THROUGH STORE MAPREDUCE SHIP CACHE INPUT OUTPUT STDERROR STDIN STDOUT LIMIT SAMPLE LEFT RIGHT FULL EQ GT LT GTE LTE NEQ MATCHES TRUE FALSE DUMP",e="BOOLEAN INT LONG FLOAT DOUBLE CHARARRAY BYTEARRAY BAG TUPLE MAP ",CodeMirror.defineMIME("text/x-pig",{name:"pig",builtins:O(T),keywords:O(E),types:O(e)}),CodeMirror.registerHelper("hintWords","pig",(T+e+E).split(" "))}(); // powershell CodeMirror.defineMode("powershell",function(){function e(e,t){for(var r=void 0!==(t=t||{}).prefix?t.prefix:"^",t=void 0!==t.suffix?t.suffix:"\\b",n=0;n/],{suffix:""}),a=e([/Add-(Computer|Content|History|Member|PSSnapin|Type)/,/Checkpoint-Computer/,/Clear-(Content|EventLog|History|Host|Item(Property)?|Variable)/,/Compare-Object/,/Complete-Transaction/,/Connect-PSSession/,/ConvertFrom-(Csv|Json|SecureString|StringData)/,/Convert-Path/,/ConvertTo-(Csv|Html|Json|SecureString|Xml)/,/Copy-Item(Property)?/,/Debug-Process/,/Disable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)/,/Disconnect-PSSession/,/Enable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)/,/(Enter|Exit)-PSSession/,/Export-(Alias|Clixml|Console|Counter|Csv|FormatData|ModuleMember|PSSession)/,/ForEach-Object/,/Format-(Custom|List|Table|Wide)/,new RegExp("Get-(Acl|Alias|AuthenticodeSignature|ChildItem|Command|ComputerRestorePoint|Content|ControlPanelItem|Counter|Credential|Culture|Date|Event|EventLog|EventSubscriber|ExecutionPolicy|FormatData|Help|History|Host|HotFix|Item|ItemProperty|Job|Location|Member|Module|PfxCertificate|Process|PSBreakpoint|PSCallStack|PSDrive|PSProvider|PSSession|PSSessionConfiguration|PSSnapin|Random|Service|TraceSource|Transaction|TypeData|UICulture|Unique|Variable|Verb|WinEvent|WmiObject)"),/Group-Object/,/Import-(Alias|Clixml|Counter|Csv|LocalizedData|Module|PSSession)/,/ImportSystemModules/,/Invoke-(Command|Expression|History|Item|RestMethod|WebRequest|WmiMethod)/,/Join-Path/,/Limit-EventLog/,/Measure-(Command|Object)/,/Move-Item(Property)?/,new RegExp("New-(Alias|Event|EventLog|Item(Property)?|Module|ModuleManifest|Object|PSDrive|PSSession|PSSessionConfigurationFile|PSSessionOption|PSTransportOption|Service|TimeSpan|Variable|WebServiceProxy|WinEvent)"),/Out-(Default|File|GridView|Host|Null|Printer|String)/,/Pause/,/(Pop|Push)-Location/,/Read-Host/,/Receive-(Job|PSSession)/,/Register-(EngineEvent|ObjectEvent|PSSessionConfiguration|WmiEvent)/,/Remove-(Computer|Event|EventLog|Item(Property)?|Job|Module|PSBreakpoint|PSDrive|PSSession|PSSnapin|TypeData|Variable|WmiObject)/,/Rename-(Computer|Item(Property)?)/,/Reset-ComputerMachinePassword/,/Resolve-Path/,/Restart-(Computer|Service)/,/Restore-Computer/,/Resume-(Job|Service)/,/Save-Help/,/Select-(Object|String|Xml)/,/Send-MailMessage/,new RegExp("Set-(Acl|Alias|AuthenticodeSignature|Content|Date|ExecutionPolicy|Item(Property)?|Location|PSBreakpoint|PSDebug|PSSessionConfiguration|Service|StrictMode|TraceSource|Variable|WmiInstance)"),/Show-(Command|ControlPanelItem|EventLog)/,/Sort-Object/,/Split-Path/,/Start-(Job|Process|Service|Sleep|Transaction|Transcript)/,/Stop-(Computer|Job|Process|Service|Transcript)/,/Suspend-(Job|Service)/,/TabExpansion2/,/Tee-Object/,/Test-(ComputerSecureChannel|Connection|ModuleManifest|Path|PSSessionConfigurationFile)/,/Trace-Command/,/Unblock-File/,/Undo-Transaction/,/Unregister-(Event|PSSessionConfiguration)/,/Update-(FormatData|Help|List|TypeData)/,/Use-Transaction/,/Wait-(Event|Job|Process)/,/Where-Object/,/Write-(Debug|Error|EventLog|Host|Output|Progress|Verbose|Warning)/,/cd|help|mkdir|more|oss|prompt/,/ac|asnp|cat|cd|chdir|clc|clear|clhy|cli|clp|cls|clv|cnsn|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|dnsn|ebp/,/echo|epal|epcsv|epsn|erase|etsn|exsn|fc|fl|foreach|ft|fw|gal|gbp|gc|gci|gcm|gcs|gdr|ghy|gi|gjb|gl|gm|gmo|gp|gps/,/group|gsn|gsnp|gsv|gu|gv|gwmi|h|history|icm|iex|ihy|ii|ipal|ipcsv|ipmo|ipsn|irm|ise|iwmi|iwr|kill|lp|ls|man|md/,/measure|mi|mount|move|mp|mv|nal|ndr|ni|nmo|npssc|nsn|nv|ogv|oh|popd|ps|pushd|pwd|r|rbp|rcjb|rcsn|rd|rdr|ren|ri/,/rjb|rm|rmdir|rmo|rni|rnp|rp|rsn|rsnp|rujb|rv|rvpa|rwmi|sajb|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls/,/sort|sp|spjb|spps|spsv|start|sujb|sv|swmi|tee|trcm|type|where|wjb|write/],{prefix:"",suffix:""}),n=e([/[$?^_]|Args|ConfirmPreference|ConsoleFileName|DebugPreference|Error|ErrorActionPreference|ErrorView|ExecutionContext/,/FormatEnumerationLimit|Home|Host|Input|MaximumAliasCount|MaximumDriveCount|MaximumErrorCount|MaximumFunctionCount/,/MaximumHistoryCount|MaximumVariableCount|MyInvocation|NestedPromptLevel|OutputEncoding|Pid|Profile|ProgressPreference/,/PSBoundParameters|PSCommandPath|PSCulture|PSDefaultParameterValues|PSEmailServer|PSHome|PSScriptRoot|PSSessionApplicationName/,/PSSessionConfigurationName|PSSessionOption|PSUICulture|PSVersionTable|Pwd|ShellId|StackTrace|VerbosePreference/,/WarningPreference|WhatIfPreference/,/Event|EventArgs|EventSubscriber|Sender/,/Matches|Ofs|ForEach|LastExitCode|PSCmdlet|PSItem|PSSenderInfo|This/,/true|false|null/],{prefix:"\\$",suffix:""}),s={keyword:r,number:/^((0x[\da-f]+)|((\d+\.\d+|\d\.|\.\d+|\d+)(e[\+\-]?\d+)?))[ld]?([kmgtp]b)?/i,operator:i,builtin:e([/[A-Z]:|%|\?/i,a,n],{suffix:t}),punctuation:/[\[\]{},;`\\\.]|@[({]/,identifier:/^[A-Za-z\_][A-Za-z\-\_\d]*\b/};function u(e,t){var r,n=t.returnStack[t.returnStack.length-1];if(n&&n.shouldReturnFrom(t))return t.tokenize=n.tokenize,t.returnStack.pop(),t.tokenize(e,t);if(e.eatSpace())return null;if(e.eat("("))return t.bracketNesting+=1,"punctuation";if(e.eat(")"))return--t.bracketNesting,"punctuation";for(r in s)if(e.match(s[r]))return r;n=e.next();if("'"===n)return function(e,t){var r;for(;null!=(r=e.peek());)if(e.next(),"'"===r&&!e.eat("'"))return t.tokenize=u,"string";return"error"}(e,t);if("$"===n)return P(e,t);if('"'===n)return c(e,t);if("<"===n&&e.eat("#"))return(t.tokenize=f)(e,t);if("#"===n)return e.skipToEnd(),"comment";if("@"===n){n=e.eat(/["']/);if(n&&e.eol())return t.tokenize=g,t.startQuote=n[0],g(e,t);if(e.eol())return"error";if(e.peek().match(/[({]/))return"punctuation";if(e.peek().match(o))return P(e,t)}return"error"}function c(e,t){for(var r;null!=(r=e.peek());){if("$"===r)return t.tokenize=l,"string";if(e.next(),"`"!==r){if('"'===r&&!e.eat('"'))return t.tokenize=u,"string"}else e.next()}return"error"}function l(e,t){return S(e,t,c)}function p(e,t){return t.tokenize=g,t.startQuote='"',g(e,t)}function m(e,t){return S(e,t,p)}function S(e,t,r){if(e.match("$(")){var n=t.bracketNesting;return t.returnStack.push({shouldReturnFrom:function(e){return e.bracketNesting===n},tokenize:r}),t.tokenize=u,t.bracketNesting+=1,"punctuation"}return e.next(),t.returnStack.push({shouldReturnFrom:function(){return!0},tokenize:r}),t.tokenize=P,t.tokenize(e,t)}function f(e,t){for(var r,n=!1;null!=(r=e.next());){if(n&&">"==r){t.tokenize=u;break}n="#"===r}return"comment"}function P(e,t){var r=e.peek();return e.eat("{")?(t.tokenize=d)(e,t):null!=r&&r.match(o)?(e.eatWhile(o),t.tokenize=u,"variable-2"):(t.tokenize=u,"error")}function d(e,t){for(var r;null!=(r=e.next());)if("}"===r){t.tokenize=u;break}return"variable-2"}function g(e,t){var r=t.startQuote;if(e.sol()&&e.match(new RegExp(r+"@")))t.tokenize=u;else if('"'===r)for(;!e.eol();){var n=e.peek();if("$"===n)return t.tokenize=m,"string";e.next(),"`"===n&&e.next()}else e.skipToEnd();return"string"}return{startState:function(){return{returnStack:[],bracketNesting:0,tokenize:u}},token:function(e,t){return t.tokenize(e,t)},blockCommentStart:"<#",blockCommentEnd:"#>",lineComment:"#",fold:"brace"}}),CodeMirror.defineMIME("application/x-powershell","powershell"); // properties CodeMirror.defineMode("properties",function(){return{token:function(e,i){var t=e.sol()||i.afterSection,n=e.eol();if(i.afterSection=!1,t&&(i.nextMultiline?(i.inMultiline=!0,i.nextMultiline=!1):i.position="def"),n&&!i.nextMultiline&&(i.inMultiline=!1,i.position="def"),t)for(;e.eatSpace(););n=e.next();return!t||"#"!==n&&"!"!==n&&";"!==n?t&&"["===n?(i.afterSection=!0,e.skipTo("]"),e.eat("]"),"header"):"="===n||":"===n?(i.position="quote",null):("\\"===n&&"quote"===i.position&&e.eol()&&(i.nextMultiline=!0),i.position):(i.position="comment",e.skipToEnd(),"comment")},startState:function(){return{position:"def",nextMultiline:!1,inMultiline:!1,afterSection:!1}}}}),CodeMirror.defineMIME("text/x-properties","properties"),CodeMirror.defineMIME("text/x-ini","properties"); // protobuf !function(){var e=["package","message","import","syntax","required","optional","repeated","reserved","default","extensions","packed","bool","bytes","double","enum","float","string","int32","int64","uint32","uint64","sint32","sint64","fixed32","fixed64","sfixed32","sfixed64","option","service","rpc","returns"],r=new RegExp("^(("+e.join(")|(")+"))\\b","i");CodeMirror.registerHelper("hintWords","protobuf",e);var t=new RegExp("^[_A-Za-z¡-￿][_A-Za-z0-9¡-￿]*");function n(e){if(e.eatSpace())return null;if(e.match("//"))return e.skipToEnd(),"comment";if(e.match(/^[0-9\.+-]/,!1)){if(e.match(/^[+-]?0x[0-9a-fA-F]+/))return"number";if(e.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?/))return"number";if(e.match(/^[+-]?\d+([EeDd][+-]?\d+)?/))return"number"}return e.match(/^"([^"]|(""))*"/)||e.match(/^'([^']|(''))*'/)?"string":e.match(r)?"keyword":e.match(t)?"variable":(e.next(),null)}CodeMirror.defineMode("protobuf",function(){return{token:n,fold:"brace"}}),CodeMirror.defineMIME("text/x-protobuf","protobuf")}(); // pug CodeMirror.defineMode("pug",function(n){var r="keyword",a="meta",s="builtin",o="qualifier",c={"{":"}","(":")","[":"]"},u=CodeMirror.getMode(n,"javascript");function e(){this.javaScriptLine=!1,this.javaScriptLineExcludesColon=!1,this.javaScriptArguments=!1,this.javaScriptArgumentsDepth=0,this.isInterpolating=!1,this.interpolationNesting=0,this.jsState=CodeMirror.startState(u),this.restOfLine="",this.isIncludeFiltered=!1,this.isEach=!1,this.lastTag="",this.scriptType="",this.isAttrs=!1,this.attrsNest=[],this.inAttributeName=!0,this.attributeIsType=!1,this.attrValue="",this.indentOf=1/0,this.indentToken="",this.innerMode=null,this.innerState=null,this.innerModeForLine=!1}function p(t,e){if(t.match("#{"))return e.isInterpolating=!0,e.interpolationNesting=0,"punctuation"}function f(t,e){if(t.match(/^:([\w\-]+)/)){var i=(i=n&&n.innerModes?n.innerModes(t.current().substring(1)):i)||t.current().substring(1);return l(t,e,i="string"==typeof i?CodeMirror.getMode(n,i):i),"atom"}}function l(t,e,i){i=CodeMirror.mimeModes[i]||i,i=n.innerModes&&n.innerModes(i)||i,i=CodeMirror.mimeModes[i]||i,i=CodeMirror.getMode(n,i),e.indentOf=t.indentation(),i&&"null"!==i.name?e.innerMode=i:e.indentToken="string"}function h(t,e,i){if(t.indentation()>e.indentOf||e.innerModeForLine&&!t.sol()||i)return e.innerMode?(e.innerState||(e.innerState=e.innerMode.startState?CodeMirror.startState(e.innerMode,t.indentation()):{}),t.hideFirstChars(e.indentOf+2,function(){return e.innerMode.token(t,e.innerState)||!0})):(t.skipToEnd(),e.indentToken);t.sol()&&(e.indentOf=1/0,e.indentToken=null,e.innerMode=null,e.innerState=null)}return e.prototype.copy=function(){var t=new e;return t.javaScriptLine=this.javaScriptLine,t.javaScriptLineExcludesColon=this.javaScriptLineExcludesColon,t.javaScriptArguments=this.javaScriptArguments,t.javaScriptArgumentsDepth=this.javaScriptArgumentsDepth,t.isInterpolating=this.isInterpolating,t.interpolationNesting=this.interpolationNesting,t.jsState=CodeMirror.copyState(u,this.jsState),t.innerMode=this.innerMode,this.innerMode&&this.innerState&&(t.innerState=CodeMirror.copyState(this.innerMode,this.innerState)),t.restOfLine=this.restOfLine,t.isIncludeFiltered=this.isIncludeFiltered,t.isEach=this.isEach,t.lastTag=this.lastTag,t.scriptType=this.scriptType,t.isAttrs=this.isAttrs,t.attrsNest=this.attrsNest.slice(),t.inAttributeName=this.inAttributeName,t.attributeIsType=this.attributeIsType,t.attrValue=this.attrValue,t.indentOf=this.indentOf,t.indentToken=this.indentToken,t.innerModeForLine=this.innerModeForLine,t},{startState:function(){return new e},copyState:function(t){return t.copy()},token:function(t,e){var i,n;return!0===(t=h(t,e)||function(t,e){if(t.sol()&&(e.restOfLine=""),e.restOfLine){t.skipToEnd();t=e.restOfLine;return e.restOfLine="",t}}(t,e)||function(t,e){if(e.isInterpolating){if("}"===t.peek()){if(e.interpolationNesting--,e.interpolationNesting<0)return t.next(),e.isInterpolating=!1,"punctuation"}else"{"===t.peek()&&e.interpolationNesting++;return u.token(t,e.jsState)||!0}}(t,e)||function(t,e){if(e.isIncludeFiltered){t=f(t,e);return e.isIncludeFiltered=!1,e.restOfLine="string",t}}(t,e)||function(t,e){if(e.isEach){if(t.match(/^ in\b/))return e.javaScriptLine=!0,e.isEach=!1,r;if(t.sol()||t.eol())e.isEach=!1;else if(t.next()){for(;!t.match(/^ in\b/,!1)&&t.next(););return"variable"}}}(t,e)||function t(e,i){if(i.isAttrs){if(c[e.peek()]&&i.attrsNest.push(c[e.peek()]),i.attrsNest[i.attrsNest.length-1]===e.peek())i.attrsNest.pop();else if(e.eat(")"))return i.isAttrs=!1,"punctuation";if(i.inAttributeName&&e.match(/^[^=,\)!]+/))return"="!==e.peek()&&"!"!==e.peek()||(i.inAttributeName=!1,i.jsState=CodeMirror.startState(u),"script"===i.lastTag&&"type"===e.current().trim().toLowerCase()?i.attributeIsType=!0:i.attributeIsType=!1),"attribute";var n=u.token(e,i.jsState);if(i.attributeIsType&&"string"===n&&(i.scriptType=e.current().toString()),0===i.attrsNest.length&&("string"===n||"variable"===n||"keyword"===n))try{return Function("","var x "+i.attrValue.replace(/,\s*$/,"").replace(/^!/,"")),i.inAttributeName=!0,i.attrValue="",e.backUp(e.current().length),t(e,i)}catch(t){}return i.attrValue+=e.current(),n||!0}}(t,e)||function(t,e){if(t.sol()&&(e.javaScriptLine=!1,e.javaScriptLineExcludesColon=!1),e.javaScriptLine){if(e.javaScriptLineExcludesColon&&":"===t.peek())return e.javaScriptLine=!1,void(e.javaScriptLineExcludesColon=!1);var i=u.token(t,e.jsState);return t.eol()&&(e.javaScriptLine=!1),i||!0}}(t,e)||function(t,e){if(e.javaScriptArguments)if(0!==e.javaScriptArgumentsDepth||"("===t.peek()){if("("===t.peek()?e.javaScriptArgumentsDepth++:")"===t.peek()&&e.javaScriptArgumentsDepth--,0!==e.javaScriptArgumentsDepth)return u.token(t,e.jsState)||!0;e.javaScriptArguments=!1}else e.javaScriptArguments=!1}(t,e)||function(t,e){if(e.mixinCallAfter)return e.mixinCallAfter=!1,t.match(/^\( *[-\w]+ *=/,!1)||(e.javaScriptArguments=!0,e.javaScriptArgumentsDepth=0),!0}(t,e)||function(t){if(t.match(/^yield\b/))return"keyword"}(t)||function(t){if(t.match(/^(?:doctype) *([^\n]+)?/))return a}(t)||p(t,e)||function(t,e){if(t.match(/^case\b/))return e.javaScriptLine=!0,r}(t,e)||function(t,e){if(t.match(/^when\b/))return e.javaScriptLine=!0,e.javaScriptLineExcludesColon=!0,r}(t,e)||function(t){if(t.match(/^default\b/))return r}(t)||function(t,e){if(t.match(/^extends?\b/))return e.restOfLine="string",r}(t,e)||function(t,e){if(t.match(/^append\b/))return e.restOfLine="variable",r}(t,e)||function(t,e){if(t.match(/^prepend\b/))return e.restOfLine="variable",r}(t,e)||function(t,e){if(t.match(/^block\b *(?:(prepend|append)\b)?/))return e.restOfLine="variable",r}(t,e)||function(t,e){if(t.match(/^include\b/))return e.restOfLine="string",r}(t,e)||function(t,e){if(t.match(/^include:([a-zA-Z0-9\-]+)/,!1)&&t.match("include"))return e.isIncludeFiltered=!0,r}(t,e)||function(t,e){if(t.match(/^mixin\b/))return e.javaScriptLine=!0,r}(t,e)||(n=e,(i=t).match(/^\+([-\w]+)/)?(i.match(/^\( *[-\w]+ *=/,!1)||(n.javaScriptArguments=!0,n.javaScriptArgumentsDepth=0),"variable"):i.match("+#{",!1)?(i.next(),n.mixinCallAfter=!0,p(i,n)):void 0)||function(t,e){if(t.match(/^(if|unless|else if|else)\b/))return e.javaScriptLine=!0,r}(t,e)||function(t,e){if(t.match(/^(- *)?(each|for)\b/))return e.isEach=!0,r}(t,e)||function(t,e){if(t.match(/^while\b/))return e.javaScriptLine=!0,r}(t,e)||function(t,e){if(t=t.match(/^(\w(?:[-:\w]*\w)?)\/?/))return e.lastTag=t[1].toLowerCase(),"script"===e.lastTag&&(e.scriptType="application/javascript"),"tag"}(t,e)||f(t,e)||function(t,e){if(t.match(/^(!?=|-)/))return e.javaScriptLine=!0,"punctuation"}(t,e)||function(t){if(t.match(/^#([\w-]+)/))return s}(t)||function(t){if(t.match(/^\.([\w-]+)/))return o}(t)||function(t,e){if("("==t.peek())return t.next(),e.isAttrs=!0,e.attrsNest=[],e.inAttributeName=!0,e.attrValue="",e.attributeIsType=!1,"punctuation"}(t,e)||function(t,e){if(t.match(/^&attributes\b/))return e.javaScriptArguments=!0,e.javaScriptArgumentsDepth=0,"keyword"}(t,e)||function(t){if(t.sol()&&t.eatSpace())return"indent"}(t)||(i=e,(n=t).match(/^(?:\| ?| )([^\n]+)/)?"string":n.match(/^(<[^\n]*)/,!1)?(l(n,i,"htmlmixed"),i.innerModeForLine=!0,h(n,i,!0)):void 0)||function(t,e){if(t.match(/^ *\/\/(-)?([^\n]*)/))return e.indentOf=t.indentation(),e.indentToken="comment"}(t,e)||function(t){if(t.match(/^: */))return"colon"}(t)||function(t,e){if(t.eat(".")){var i=null;return"script"===e.lastTag&&-1!=e.scriptType.toLowerCase().indexOf("javascript")?i=e.scriptType.toLowerCase().replace(/"|'/g,""):"style"===e.lastTag&&(i="css"),l(t,e,i),"dot"}}(t,e)||(t.next(),null))?null:t}}},"javascript","css","htmlmixed"),CodeMirror.defineMIME("text/x-pug","pug"),CodeMirror.defineMIME("text/x-jade","pug"); // puppet CodeMirror.defineMode("puppet",function(){var s={},c=/({)?([a-z][a-z0-9_]*)?((::[a-z][a-z0-9_]*)*::)?[a-zA-Z0-9_]+(})?/;function e(e,n){for(var t=n.split(" "),i=0;i.*/,!1),a=e.match(/(\s+)?[\w:_]+(\s+)?{/,!1),o=e.match(/(\s+)?[@]{1,2}[\w:_]+(\s+)?{/,!1),r=e.next();if("$"===r)return e.match(c)?n.continueString?"variable-2":"variable":"error";if(n.continueString)return e.backUp(1),u(e,n);if(n.inDefinition){if(e.match(/(\s+)?[\w:_]+(\s+)?/))return"def";e.match(/\s+{/),n.inDefinition=!1}return n.inInclude?(e.match(/(\s+)?\S+(\s+)?/),n.inInclude=!1,"def"):e.match(/(\s+)?\w+\(/)?(e.backUp(1),"def"):i?(e.match(/(\s+)?\w+/),"tag"):t&&s.hasOwnProperty(t)?(e.backUp(1),e.match(/[\w]+/),e.match(/\s+\S+\s+{/,!1)&&(n.inDefinition=!0),"include"==t&&(n.inInclude=!0),s[t]):/(^|\s+)[A-Z][\w:_]+/.test(t)?(e.backUp(1),e.match(/(^|\s+)[A-Z][\w:_]+/),"def"):a?(e.match(/(\s+)?[\w:_]+/),"def"):o?(e.match(/(\s+)?[@]{1,2}/),"special"):"#"==r?(e.skipToEnd(),"comment"):"'"==r||'"'==r?(n.pending=r,u(e,n)):"{"==r||"}"==r?"bracket":"/"==r?(e.match(/^[^\/]*\//),"variable-3"):r.match(/[0-9]/)?(e.eatWhile(/[0-9]+/),"number"):"="==r?(">"==e.peek()&&e.next(),"operator"):(e.eatWhile(/[\w-]/),null)}(e,n)}}}),CodeMirror.defineMIME("text/x-puppet","puppet"); // python !function(){function x(e){return new RegExp("^(("+e.join(")|(")+"))\\b")}var k=x(["and","or","not","is"]),v=["as","assert","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","lambda","pass","raise","return","try","while","with","yield","in"],_=["abs","all","any","bin","bool","bytearray","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip","__import__","NotImplemented","Ellipsis","__debug__"];function z(e){return e.scopes[e.scopes.length-1]}CodeMirror.registerHelper("hintWords","python",v.concat(_)),CodeMirror.defineMode("python",function(t,l){for(var s="error",o=l.delimiters||l.singleDelimiters||/^[\(\)\[\]\{\}@,:`=;\.\\]/,a=[l.singleOperators,l.doubleOperators,l.doubleDelimiters,l.tripleDelimiters,l.operators||/^([-+*/%\/&|^]=?|[<>=]+|\/\/=?|\*\*=?|!=|[~!@]|\.\.\.)/],e=0;en;){if("py"!=z(t).type)return 1;t.scopes.pop()}return z(t).offset!=n}function g(e,t){e.sol()&&(t.beginningOfLine=!0,t.dedent=!1);var n,r,i,o=t.tokenize(e,t),a=e.current();if(t.beginningOfLine&&"@"==a)return e.match(u,!1)?"meta":p?"operator":s;if(/\S/.test(a)&&(t.beginningOfLine=!1),"variable"!=o&&"builtin"!=o||"meta"!=t.lastToken||(o="meta"),"pass"!=a&&"return"!=a||(t.dedent=!0),"lambda"==a&&(t.lambda=!0),":"==a&&!t.lambda&&"py"==z(t).type&&e.match(/^\s*(?:#|$)/,!1)&&b(t),1==a.length&&!/string|comment/.test(o)){var l="[({".indexOf(a);if(-1!=l&&(n=e,r=t,i="])}".slice(l,l+1),n=n.match(/^[\s\[\{\(]*(?:#|$)/,!1)?null:n.column()+1,r.scopes.push({offset:r.indent+c,type:i,align:n})),-1!=(l="])}".indexOf(a))){if(z(t).type!=a)return s;t.indent=t.scopes.pop().offset-c}}return t.dedent&&e.eol()&&"py"==z(t).type&&1<,?_\'\"\[\(\]\)\s{}]/;function c(e,t){var n=e.sol(),r=e.next();if(o=null,n){if("/"==r)return(t.tokenize=a)(e,t);if("\\"==r)return e.eol()||/\s/.test(e.peek())?(e.skipToEnd(),/^\\\s*$/.test(e.current())?(t.tokenize=l)(e):t.tokenize=c,"comment"):(t.tokenize=c,"builtin")}if(/\s/.test(r))return"/"==e.peek()?(e.skipToEnd(),"comment"):"whitespace";if('"'==r)return(t.tokenize=d)(e,t);if("`"==r)return e.eatWhile(/[A-Za-z\d_:\/.]/),"symbol";if("."==r&&/\d/.test(e.peek())||/\d/.test(r)){t=null;return e.backUp(1),e.match(/^\d{4}\.\d{2}(m|\.\d{2}([DT](\d{2}(:\d{2}(:\d{2}(\.\d{1,9})?)?)?)?)?)/)||e.match(/^\d+D(\d{2}(:\d{2}(:\d{2}(\.\d{1,9})?)?)?)/)||e.match(/^\d{2}:\d{2}(:\d{2}(\.\d{1,9})?)?/)||e.match(/^\d+[ptuv]{1}/)?t="temporal":(e.match(/^0[NwW]{1}/)||e.match(/^0x[\da-fA-F]*/)||e.match(/^[01]+[b]{1}/)||e.match(/^\d+[chijn]{1}/)||e.match(/-?\d*(\.\d*)?(e[+\-]?\d+)?(e|f)?/))&&(t="number"),!t||(r=e.peek())&&!s.test(r)?(e.next(),"error"):t}return/[A-Za-z]|\./.test(r)?(e.eatWhile(/[A-Za-z._\d]/),i.test(e.current())?"keyword":"variable"):/[|/&^!+:\\\-*%$=~#;@><\.,?_\']/.test(r)||/[{}\(\[\]\)]/.test(r)?null:"error"}function a(e,t){return e.skipToEnd(),/\/\s*$/.test(e.current())?(t.tokenize=n)(e,t):t.tokenize=c,"comment"}function n(e,t){var n=e.sol()&&"\\"==e.peek();return e.skipToEnd(),n&&/^\\\s*$/.test(e.current())&&(t.tokenize=c),"comment"}function l(e){return e.skipToEnd(),"comment"}function d(e,t){for(var n,r=!1,o=!1;n=e.next();){if('"'==n&&!r){o=!0;break}r=!r&&"\\"==n}return o&&(t.tokenize=c),"string"}function u(e,t,n){e.context={prev:e.context,indent:e.indent,col:n,type:t}}function m(e){e.indent=e.context.indent,e.context=e.context.prev}return{startState:function(){return{tokenize:c,context:null,indent:0,col:0}},token:function(e,t){e.sol()&&(t.context&&null==t.context.align&&(t.context.align=!1),t.indent=e.indentation());var n=t.tokenize(e,t);if("comment"!=n&&t.context&&null==t.context.align&&"pattern"!=t.context.type&&(t.context.align=!0),"("==o)u(t,")",e.column());else if("["==o)u(t,"]",e.column());else if("{"==o)u(t,"}",e.column());else if(/[\]\}\)]/.test(o)){for(;t.context&&"pattern"==t.context.type;)m(t);t.context&&o==t.context.type&&m(t)}else"."==o&&t.context&&"pattern"==t.context.type?m(t):/atom|string|variable/.test(n)&&t.context&&(/[\}\]]/.test(t.context.type)?u(t,"pattern",e.column()):"pattern"!=t.context.type||t.context.align||(t.context.align=!0,t.context.col=e.column()));return n},indent:function(e,t){var t=t&&t.charAt(0),n=e.context;if(/[\]\}]/.test(t))for(;n&&"pattern"==n.type;)n=n.prev;t=n&&t==n.type;return n?"pattern"==n.type?n.col:n.align?n.col+(t?0:1):n.indent+(t?0:r):0}}}),CodeMirror.defineMIME("text/x-q","q"); // r CodeMirror.registerHelper("wordChars","r",/[\w.]/),CodeMirror.defineMode("r",function(n){function e(e){for(var t={},r=0;r=!&|~$:]/;function d(e,t){i=null;var a,r=e.next();if("#"==r)return e.skipToEnd(),"comment";if("0"==r&&e.eat("x"))return e.eatWhile(/[\da-f]/i),"number";if("."==r&&e.eat(/\d/))return e.match(/\d*(?:e[+\-]?\d+)?/),"number";if(/\d/.test(r))return e.match(/\d*(?:\.\d+)?(?:e[+\-]\d+)?L?/),"number";if("'"==r||'"'==r)return t.tokenize=(a=r,function(e,t){if(e.eat("\\")){var r=e.next();return"x"==r?e.match(/^[a-f0-9]{2}/i):("u"==r||"U"==r)&&e.eat("{")&&e.skipTo("}")?e.next():"u"==r?e.match(/^[a-f0-9]{4}/i):"U"==r?e.match(/^[a-f0-9]{8}/i):/[0-7]/.test(r)&&e.match(/^[0-7]{1,2}/),"string-2"}for(var n;null!=(n=e.next());){if(n==a){t.tokenize=d;break}if("\\"==n){e.backUp(1);break}}return"string"}),"string";if("`"==r)return e.match(/[^`]+`/),"variable-3";if("."==r&&e.match(/.(?:[.]|\d+)/))return"keyword";if(/[a-zA-Z\.]/.test(r)){e.eatWhile(/[\w\.]/);var n=e.current();return o.propertyIsEnumerable(n)?"atom":l.propertyIsEnumerable(n)?(u.propertyIsEnumerable(n)&&!e.match(/\s*if(\s+|$)/,!1)&&(i="block"),"keyword"):c.propertyIsEnumerable(n)?"builtin":"variable"}return"%"==r?(e.skipTo("%")&&e.next(),"operator variable-2"):"<"==r&&e.eat("-")||"<"==r&&e.match("<-")||"-"==r&&e.match(/>>?/)?"operator arrow":"="==r&&t.ctx.argList?"arg-is":f.test(r)?"$"==r?"operator dollar":(e.eatWhile(f),"operator"):/[\(\){}\[\];]/.test(r)&&";"==(i=r)?"semi":null}function s(e,t,r){e.ctx={type:t,indent:e.indent,flags:0,column:r.column(),prev:e.ctx}}function p(e,t){var r=e.ctx;e.ctx={type:r.type,indent:r.indent,flags:r.flags|t,column:r.column,prev:r.prev}}function m(e){e.indent=e.ctx.indent,e.ctx=e.ctx.prev}return{startState:function(){return{tokenize:d,ctx:{type:"top",indent:-n.indentUnit,flags:2},indent:0,afterIdent:!1}},token:function(e,t){if(e.sol()&&(0==(3&t.ctx.flags)&&(t.ctx.flags|=2),4&t.ctx.flags&&m(t),t.indent=e.indentation()),e.eatSpace())return null;var r=t.tokenize(e,t);return"comment"!=r&&0==(2&t.ctx.flags)&&p(t,1),";"!=i&&"{"!=i&&"}"!=i||"block"!=t.ctx.type||m(t),"{"==i?s(t,"}",e):"("==i?(s(t,")",e),t.afterIdent&&(t.ctx.argList=!0)):"["==i?s(t,"]",e):"block"==i?s(t,"block",e):i==t.ctx.type?m(t):"block"==t.ctx.type&&"comment"!=r&&p(t,4),t.afterIdent="variable"==r||"keyword"==r,r},indent:function(e,t){if(e.tokenize!=d)return 0;var r=t&&t.charAt(0),t=e.ctx,e=r==t.type;return"block"==(t=4&t.flags?t.prev:t).type?t.indent+("{"==r?0:n.indentUnit):1&t.flags?t.column+(e?0:1):t.indent+(e?0:n.indentUnit)},lineComment:"#"}}),CodeMirror.defineMIME("text/x-rsrc","r"); // rpm CodeMirror.defineMode("rpm-changes",function(){var e=/^-+$/,t=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ?\d{1,2} \d{2}:\d{2}(:\d{2})? [A-Z]{3,4} \d{4} - /,n=/^[\w+.-]+@[\w.-]+/;return{token:function(r){if(r.sol()){if(r.match(e))return"tag";if(r.match(t))return"tag"}return r.match(n)?"string":(r.next(),null)}}}),CodeMirror.defineMIME("text/x-rpm-changes","rpm-changes"),CodeMirror.defineMode("rpm-spec",function(){var t=/^(i386|i586|i686|x86_64|ppc64le|ppc64|ppc|ia64|s390x|s390|sparc64|sparcv9|sparc|noarch|alphaev6|alpha|hppa|mipsel)/,n=/^[a-zA-Z0-9()]+:/,a=/^%(debug_package|package|description|prep|build|install|files|clean|changelog|preinstall|preun|postinstall|postun|pretrans|posttrans|pre|post|triggerin|triggerun|verifyscript|check|triggerpostun|triggerprein|trigger)/,o=/^%(ifnarch|ifarch|if)/,i=/^%(else|endif)/,c=/^(\!|\?|\<\=|\<|\>\=|\>|\=\=|\&\&|\|\|)/;return{startState:function(){return{controlFlow:!1,macroParameters:!1,section:!1}},token:function(r,e){if("#"==r.peek())return r.skipToEnd(),"comment";if(r.sol()){if(r.match(n))return"header";if(r.match(a))return"atom"}if(r.match(/^\$\w+/))return"def";if(r.match(/^\$\{\w+\}/))return"def";if(r.match(i))return"keyword";if(r.match(o))return e.controlFlow=!0,"keyword";if(e.controlFlow){if(r.match(c))return"operator";if(r.match(/^(\d+)/))return"number";r.eol()&&(e.controlFlow=!1)}if(r.match(t))return r.eol()&&(e.controlFlow=!1),"number";if(r.match(/^%[\w]+/))return r.match("(")&&(e.macroParameters=!0),"keyword";if(e.macroParameters){if(r.match(/^\d+/))return"number";if(r.match(")"))return e.macroParameters=!1,"keyword"}return r.match(/^%\{\??[\w \-\:\!]+\}/)?(r.eol()&&(e.controlFlow=!1),"def"):(r.next(),null)}}}),CodeMirror.defineMIME("text/x-rpm-spec","rpm-spec"); // rst CodeMirror.defineMode("rst",function(e,t){var a=/^\*\*[^\*\s](?:[^\*]*[^\*\s])?\*\*/,c=/^\*[^\*\s](?:[^\*]*[^\*\s])?\*/,r=/^``[^`\s](?:[^`]*[^`\s])``/,n=/^(?:[\d]+(?:[\.,]\d+)*)/,o=/^(?:\s\+[\d]+(?:[\.,]\d+)*)/,m=/^(?:\s\-[\d]+(?:[\.,]\d+)*)/,s=new RegExp("^[Hh][Tt][Tt][Pp][Ss]?://(?:[\\d\\w.-]+)\\.(?:\\w{2,6})(?:/[\\d\\w\\#\\%\\&\\-\\.\\,\\/\\:\\=\\?\\~]+)*"),h={token:function(e){if(e.match(a)&&e.match(/\W+|$/,!1))return"strong";if(e.match(c)&&e.match(/\W+|$/,!1))return"em";if(e.match(r)&&e.match(/\W+|$/,!1))return"string-2";if(e.match(n))return"number";if(e.match(o))return"positive";if(e.match(m))return"negative";if(e.match(s))return"link";for(;!(null==e.next()||e.match(a,!1)||e.match(c,!1)||e.match(r,!1)||e.match(n,!1)||e.match(o,!1)||e.match(m,!1)||e.match(s,!1)););return null}},t=CodeMirror.getMode(e,t.backdrop||"rst-base");return CodeMirror.overlayMode(t,h,!0)},"python","stex"),CodeMirror.defineMode("rst-base",function(e){function t(e){var a=Array.prototype.slice.call(arguments,1);return e.replace(/{(\d+)}/g,function(e,t){return void 0!==a[t]?a[t]:e})}var c=CodeMirror.getMode(e,"python"),r=CodeMirror.getMode(e,"stex"),a="\\s+",n="(?:\\s*|\\W|$)",o=new RegExp(t("^{0}",n)),m="(?:[^\\W\\d_](?:[\\w!\"#$%&'()\\*\\+,\\-\\./:;<=>\\?]*[^\\W_])?)",s=new RegExp(t("^{0}",m)),h=t("(?:{0}|`{1}`)",m,"(?:[^\\W\\d_](?:[\\w\\s!\"#$%&'()\\*\\+,\\-\\./:;<=>\\?]*[^\\W_])?)"),i="(?:[^\\s\\|](?:[^\\|]*[^\\s\\|])?)",e="(?:[^\\`]+)",l=new RegExp(t("^{0}",e)),d=new RegExp("^([!'#$%&\"()*+,-./:;<=>?@\\[\\\\\\]^_`{|}~])\\1{3,}\\s*$"),p=new RegExp(t("^\\.\\.{0}",a)),u=new RegExp(t("^_{0}:{1}|^__:{1}",h,n)),k=new RegExp(t("^{0}::{1}",h,n)),x=new RegExp(t("^\\|{0}\\|{1}{2}::{3}",i,a,h,n)),f=new RegExp(t("^\\[(?:\\d+|#{0}?|\\*)]{1}",h,n)),w=new RegExp(t("^\\[{0}\\]{1}",h,n)),g=new RegExp(t("^\\|{0}\\|",i)),b=new RegExp(t("^\\[(?:\\d+|#{0}?|\\*)]_",h)),E=new RegExp(t("^\\[{0}\\]_",h)),R=new RegExp(t("^{0}__?",h)),_=new RegExp(t("^`{0}`_",e)),M=new RegExp(t("^:{0}:`{1}`{2}",m,e,n)),y=new RegExp(t("^`{1}`:{0}:{2}",m,e,n)),v=new RegExp(t("^:{0}:{1}",m,n)),C=new RegExp(t("^{0}",h)),$=new RegExp(t("^::{0}",n)),S=new RegExp(t("^\\|{0}\\|",i)),W=new RegExp(t("^{0}",a)),T=new RegExp(t("^{0}",h)),q=new RegExp(t("^::{0}",n)),I=new RegExp("^_"),A=new RegExp(t("^{0}|_",h)),H=new RegExp(t("^:{0}",n)),P=new RegExp("^::\\s*$"),j=new RegExp("^\\s+(?:>>>|In \\[\\d+\\]:)\\s");function z(e,t){var a=null;if(e.sol()&&e.match(j,!1))L(t,J,{mode:c,local:CodeMirror.startState(c)});else if(e.sol()&&e.match(p))L(t,B),a="meta";else if(e.sol()&&e.match(d))L(t,z),a="header";else if(O(t)==M||e.match(M,!1))switch(N(t)){case 0:L(t,z,K(M,1)),e.match(/^:/),a="meta";break;case 1:L(t,z,K(M,2)),e.match(s),a="keyword",e.current().match(/^(?:math|latex)/)&&(t.tmp_stex=!0);break;case 2:L(t,z,K(M,3)),e.match(/^:`/),a="meta";break;case 3:if(t.tmp_stex&&(t.tmp_stex=void 0,t.tmp={mode:r,local:CodeMirror.startState(r)}),t.tmp){if("`"==e.peek()){L(t,z,K(M,4)),t.tmp=void 0;break}a=t.tmp.mode.token(e,t.tmp.local);break}L(t,z,K(M,4)),e.match(l),a="string";break;case 4:L(t,z,K(M,5)),e.match(/^`/),a="meta";break;case 5:L(t,z,K(M,6)),e.match(o);break;default:L(t,z)}else if(O(t)==y||e.match(y,!1))switch(N(t)){case 0:L(t,z,K(y,1)),e.match(/^`/),a="meta";break;case 1:L(t,z,K(y,2)),e.match(l),a="string";break;case 2:L(t,z,K(y,3)),e.match(/^`:/),a="meta";break;case 3:L(t,z,K(y,4)),e.match(s),a="keyword";break;case 4:L(t,z,K(y,5)),e.match(/^:/),a="meta";break;case 5:L(t,z,K(y,6)),e.match(o);break;default:L(t,z)}else if(O(t)==v||e.match(v,!1))switch(N(t)){case 0:L(t,z,K(v,1)),e.match(/^:/),a="meta";break;case 1:L(t,z,K(v,2)),e.match(s),a="keyword";break;case 2:L(t,z,K(v,3)),e.match(/^:/),a="meta";break;case 3:L(t,z,K(v,4)),e.match(o);break;default:L(t,z)}else if(O(t)==g||e.match(g,!1))switch(N(t)){case 0:L(t,z,K(g,1)),e.match(S),a="variable-2";break;case 1:L(t,z,K(g,2)),e.match(/^_?_?/)&&(a="link");break;default:L(t,z)}else if(e.match(b))L(t,z),a="quote";else if(e.match(E))L(t,z),a="quote";else if(e.match(R))L(t,z),e.peek()&&!e.peek().match(/^\W$/)||(a="link");else if(O(t)==_||e.match(_,!1))switch(N(t)){case 0:!e.peek()||e.peek().match(/^\W$/)?L(t,z,K(_,1)):e.match(_);break;case 1:L(t,z,K(_,2)),e.match(/^`/),a="link";break;case 2:L(t,z,K(_,3)),e.match(l);break;case 3:L(t,z,K(_,4)),e.match(/^`_/),a="link";break;default:L(t,z)}else e.match(P)?L(t,F):e.next()&&L(t,z);return a}function B(e,t){var a=null;if(O(t)==x||e.match(x,!1))switch(N(t)){case 0:L(t,B,K(x,1)),e.match(S),a="variable-2";break;case 1:L(t,B,K(x,2)),e.match(W);break;case 2:L(t,B,K(x,3)),e.match(T),a="keyword";break;case 3:L(t,B,K(x,4)),e.match(q),a="meta";break;default:L(t,z)}else if(O(t)==k||e.match(k,!1))switch(N(t)){case 0:L(t,B,K(k,1)),e.match(C),a="keyword",e.current().match(/^(?:math|latex)/)?t.tmp_stex=!0:e.current().match(/^python/)&&(t.tmp_py=!0);break;case 1:L(t,B,K(k,2)),e.match($),a="meta",(e.match(/^latex\s*$/)||t.tmp_stex)&&(t.tmp_stex=void 0,L(t,J,{mode:r,local:CodeMirror.startState(r)}));break;case 2:L(t,B,K(k,3)),(e.match(/^python\s*$/)||t.tmp_py)&&(t.tmp_py=void 0,L(t,J,{mode:c,local:CodeMirror.startState(c)}));break;default:L(t,z)}else if(O(t)==u||e.match(u,!1))switch(N(t)){case 0:L(t,B,K(u,1)),e.match(I),e.match(A),a="link";break;case 1:L(t,B,K(u,2)),e.match(H),a="meta";break;default:L(t,z)}else e.match(f)||e.match(w)?(L(t,z),a="quote"):(e.eatSpace(),e.eol()?L(t,z):(e.skipToEnd(),L(t,D),a="comment"));return a}function D(e,t){return G(e,t,"comment")}function F(e,t){return G(e,t,"meta")}function G(e,t,a){return e.eol()||e.eatSpace()?(e.skipToEnd(),a):(L(t,z),null)}function J(e,t){return t.ctx.mode&&t.ctx.local?e.sol()?(e.eatSpace()||L(t,z),null):t.ctx.mode.token(e,t.ctx.local):(L(t,z),null)}function K(e,t,a,c){return{phase:e,stage:t,mode:a,local:c}}function L(e,t,a){e.tok=t,e.ctx=a||{}}function N(e){return e.ctx.stage||0}function O(e){return e.ctx.phase}return{startState:function(){return{tok:z,ctx:K(void 0,0)}},copyState:function(e){var t=e.ctx,a=e.tmp;return t.local&&(t={mode:t.mode,local:CodeMirror.copyState(t.mode,t.local)}),a=a&&{mode:a.mode,local:CodeMirror.copyState(a.mode,a.local)},{tok:e.tok,ctx:t,tmp:a}},innerMode:function(e){return e.tmp?{state:e.tmp.local,mode:e.tmp.mode}:e.ctx.mode?{state:e.ctx.local,mode:e.ctx.mode}:null},token:function(e,t){return t.tok(e,t)}}},"python","stex"),CodeMirror.defineMIME("text/x-rst","rst"); // ruby !function(){function e(e){for(var t={},n=0,r=e.length;n]/)?(e.eat(/[\<\>]/),"atom"):e.eat(/[\+\-\*\/\&\|\:\!]/)?"atom":e.eat(/[a-zA-Z$@_\xa1-\uffff]/)?(e.eatWhile(/[\w$\xa1-\uffff]/),e.eat(/[\?\!\=]/),"atom"):"operator";if("@"==o&&e.match(/^@?[a-zA-Z_\xa1-\uffff]/))return e.eat("@"),e.eatWhile(/[\w\xa1-\uffff]/),"variable-2";if("$"==o)return e.eat(/[a-zA-Z_]/)?e.eatWhile(/[\w]/):e.eat(/\d/)?e.eat(/\d/):e.next(),"variable-3";if(/[a-zA-Z_\xa1-\uffff]/.test(o))return e.eatWhile(/[\w\xa1-\uffff]/),e.eat(/[\?\!]/),e.eat(":")?"atom":"ident";if("|"!=o||!t.varList&&"{"!=t.lastTok&&"do"!=t.lastTok){if(/[\(\)\[\]{}\\;]/.test(o))return l=o,null;if("-"==o&&e.eat(">"))return"arrow";if(/[=+\-\/*:\.^%<>~|]/.test(o)){t=e.eatWhile(/[=+\-\/*:\.^%<>~|]/);return"."!=o||t||(l="."),"operator"}return null}return l="|",null}function s(i,o,a,u){return function(e,t){var n,r=!1;for("read-quoted-paused"===t.context.type&&(t.context=t.context.prev,e.eat("}"));null!=(n=e.next());){if(n==i&&(u||!r)){t.tokenize.pop();break}if(a&&"#"==n&&!r){if(e.eat("{")){"}"==i&&(t.context={prev:t.context,type:"read-quoted-paused"}),t.tokenize.push(function n(r){return r=r||1,function(e,t){if("}"==e.peek()){if(1==r)return t.tokenize.pop(),t.tokenize[t.tokenize.length-1](e,t);t.tokenize[t.tokenize.length-1]=n(r-1)}else"{"==e.peek()&&(t.tokenize[t.tokenize.length-1]=n(r+1));return f(e,t)}}());break}if(/[@\$]/.test(e.peek())){t.tokenize.push(function(){var n=!1;return function(e,t){return n?(t.tokenize.pop(),t.tokenize[t.tokenize.length-1](e,t)):(n=!0,f(e,t))}}());break}}r=!r&&"\\"==n}return o}}function c(e,t){return e.sol()&&e.match("=end")&&e.eol()&&t.tokenize.pop(),e.skipToEnd(),"comment"}return{startState:function(){return{tokenize:[f],indented:0,context:{type:"top",indented:-i.indentUnit},continuedLine:!1,lastTok:null,varList:!1}},token:function(e,t){l=null,e.sol()&&(t.indented=e.indentation());var n,r,i=t.tokenize[t.tokenize.length-1](e,t),o=l;return"ident"==i&&(r=e.current(),"keyword"==(i="."==t.lastTok?"property":a.propertyIsEnumerable(e.current())?"keyword":/^[A-Z]/.test(r)?"tag":"def"==t.lastTok||"class"==t.lastTok||t.varList?"def":"variable")&&(u.propertyIsEnumerable(o=r)?n="indent":p.propertyIsEnumerable(r)?n="dedent":(("if"==r||"unless"==r)&&e.column()==e.indentation()||"do"==r&&t.context.indented!]+/,token:"operator"},{regex:/[a-zA-Z_]\w*!/,token:"variable-3"},{regex:/[a-zA-Z_]\w*/,token:"variable"},{regex:/[\{\[\(]/,indent:!0},{regex:/[\}\]\)]/,dedent:!0}],string:[{regex:/"/,token:"string",next:"start"},{regex:/(?:[^\\"]|\\(?:.|$))*/,token:"string"}],string_raw:[{regex:/"/,token:"string",next:"start"},{regex:/[^"]*/,token:"string"}],string_raw_hash:[{regex:/"#+/,token:"string",next:"start"},{regex:/(?:[^"]|"(?!#))*/,token:"string"}],comment:[{regex:/.*?\*\//,token:"comment",next:"start"},{regex:/.*/,token:"comment"}],meta:{dontIndentStates:["comment"],electricInput:/^\s*\}$/,blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//",fold:"brace"}}),CodeMirror.defineMIME("text/x-rustsrc","rust"),CodeMirror.defineMIME("text/rust","rust"); // sas CodeMirror.defineMode("sas",function(){var a={},i={eq:"operator",lt:"operator",le:"operator",gt:"operator",ge:"operator",in:"operator",ne:"operator",or:"operator"},l=/(<=|>=|!=|<>)/,c=/[=\(:\),{}.*<>+\-\/^\[\]]/;function e(e,t,n){if(n)for(var r=t.split(" "),s=0;s","<","==",">=","<=","\\+","-","\\!=","/","\\*","%","and","or","not",";","\\{","\\}",":"].join("|")),l=/^::?[a-zA-Z_][\w\-]*/;function m(e){return!e.peek()||e.match(/\s+$/,!1)}function h(e,r){var t=e.peek();return")"===t?(e.next(),r.tokenizer=v,"operator"):"("===t?(e.next(),e.eatSpace(),"operator"):(r.tokenizer="'"===t||'"'===t?k(e.next()):k(")",!1),"string")}function d(t,n){return function(e,r){return e.sol()&&e.indentation()<=t?(r.tokenizer=v)(e,r):(n&&e.skipTo("*/")?(e.next(),e.next(),r.tokenizer=v):e.skipToEnd(),"comment")}}function k(a,u){return null==u&&(u=!0),function e(r,t){var n=r.next(),o=r.peek(),i=r.string.charAt(r.pos-2);return"\\"!==n&&o===a||n===a&&"\\"!==i?(n!==a&&u&&r.next(),m(r)&&(t.cursorHalf=0),t.tokenizer=v,"string"):"#"===n&&"{"===o?(t.tokenizer=w(e),r.next(),"operator"):"string"}}function w(t){return function(e,r){return"}"===e.peek()?(e.next(),r.tokenizer=t,"operator"):v(e,r)}}function x(e){var r;0==e.indentCount&&(e.indentCount++,r=e.scopes[0].offset+f.indentUnit,e.scopes.unshift({offset:r}))}function y(e){1!=e.scopes.length&&e.scopes.shift()}function v(e,r){var t=e.peek();if(e.match("/*"))return r.tokenizer=d(e.indentation(),!0),r.tokenizer(e,r);if(e.match("//"))return r.tokenizer=d(e.indentation(),!1),r.tokenizer(e,r);if(e.match("#{"))return r.tokenizer=w(v),"operator";if('"'===t||"'"===t)return e.next(),r.tokenizer=k(t),"string";if(r.cursorHalf){if("#"===t&&(e.next(),e.match(/[0-9a-fA-F]{6}|[0-9a-fA-F]{3}/)))return m(e)&&(r.cursorHalf=0),"number";if(e.match(/^-?[0-9\.]+/))return m(e)&&(r.cursorHalf=0),"number";if(e.match(/^(px|em|in)\b/))return m(e)&&(r.cursorHalf=0),"unit";if(e.match(c))return m(e)&&(r.cursorHalf=0),"keyword";if(e.match(/^url/)&&"("===e.peek())return r.tokenizer=h,m(e)&&(r.cursorHalf=0),"atom";if("$"===t)return e.next(),e.eatWhile(/[\w-]/),m(e)&&(r.cursorHalf=0),"variable-2";if("!"===t)return e.next(),r.cursorHalf=0,e.match(/^[\w]+/)?"keyword":"operator";if(e.match(p))return m(e)&&(r.cursorHalf=0),"operator";if(e.eatWhile(/[\w-]/))return m(e)&&(r.cursorHalf=0),s=e.current().toLowerCase(),a.hasOwnProperty(s)?"atom":i.hasOwnProperty(s)?"keyword":o.hasOwnProperty(s)?(r.prevProp=e.current().toLowerCase(),"property"):"tag";if(m(e))return r.cursorHalf=0,null}else{if("-"===t&&e.match(/^-\w+-/))return"meta";if("."===t){if(e.next(),e.match(/^[\w-]+/))return x(r),"qualifier";if("#"===e.peek())return x(r),"tag"}if("#"===t){if(e.next(),e.match(/^[\w-]+/))return x(r),"builtin";if("#"===e.peek())return x(r),"tag"}if("$"===t)return e.next(),e.eatWhile(/[\w-]/),"variable-2";if(e.match(/^-?[0-9\.]+/))return"number";if(e.match(/^(px|em|in)\b/))return"unit";if(e.match(c))return"keyword";if(e.match(/^url/)&&"("===e.peek())return r.tokenizer=h,"atom";if("="===t&&e.match(/^=[\w-]+/))return x(r),"meta";if("+"===t&&e.match(/^\+[\w-]+/))return"variable-3";if("@"===t&&e.match("@extend")&&(e.match(/\s*[\w]/)||y(r)),e.match(/^@(else if|if|media|else|for|each|while|mixin|function)/))return x(r),"def";if("@"===t)return e.next(),e.eatWhile(/[\w-]/),"def";if(e.eatWhile(/[\w-]/)){if(e.match(/ *: *[\w-\+\$#!\("']/,!1)){s=e.current().toLowerCase();var n=r.prevProp+"-"+s;return o.hasOwnProperty(n)?"property":o.hasOwnProperty(s)?(r.prevProp=s,"property"):u.hasOwnProperty(s)?"property":"tag"}return e.match(/ *:/,!1)?(x(r),r.cursorHalf=1,r.prevProp=e.current().toLowerCase(),"property"):(e.match(/ *,/,!1)||x(r),"tag")}if(":"===t)return e.match(l)?"variable-3":(e.next(),r.cursorHalf=1,"operator")}return e.match(p)?"operator":(e.next(),null)}return{startState:function(){return{tokenizer:v,scopes:[{offset:0,type:"sass"}],indentCount:0,cursorHalf:0,definedVars:[],definedMixins:[]}},token:function(e,r){var t=function(e,r){e.sol()&&(r.indentCount=0);var t=r.tokenizer(e,r),n=e.current();if("@return"!==n&&"}"!==n||y(r),null!==t){for(var o=e.pos-n.length+f.indentUnit*r.indentCount,i=[],a=0;ainteger char-alphabetic? char-ci<=? char-ci=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt #f floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string=? string>? string? substring symbol->string symbol? #t tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"),b=e("define let letrec let* lambda define-macro defmacro let-syntax letrec-syntax let-values let*-values define-syntax syntax-rules define-values when unless");function r(e,t,n){this.indent=e,this.type=t,this.prev=n}function v(e,t,n){e.indentStack=new r(t,n,e.indentStack)}var t=new RegExp(/^(?:[-+]i|[-+][01]+#*(?:\/[01]+#*)?i|[-+]?[01]+#*(?:\/[01]+#*)?@[-+]?[01]+#*(?:\/[01]+#*)?|[-+]?[01]+#*(?:\/[01]+#*)?[-+](?:[01]+#*(?:\/[01]+#*)?)?i|[-+]?[01]+#*(?:\/[01]+#*)?)(?=[()\s;"]|$)/i),n=new RegExp(/^(?:[-+]i|[-+][0-7]+#*(?:\/[0-7]+#*)?i|[-+]?[0-7]+#*(?:\/[0-7]+#*)?@[-+]?[0-7]+#*(?:\/[0-7]+#*)?|[-+]?[0-7]+#*(?:\/[0-7]+#*)?[-+](?:[0-7]+#*(?:\/[0-7]+#*)?)?i|[-+]?[0-7]+#*(?:\/[0-7]+#*)?)(?=[()\s;"]|$)/i),a=new RegExp(/^(?:[-+]i|[-+][\da-f]+#*(?:\/[\da-f]+#*)?i|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?@[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?[-+](?:[\da-f]+#*(?:\/[\da-f]+#*)?)?i|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?)(?=[()\s;"]|$)/i),i=new RegExp(/^(?:[-+]i|[-+](?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)i|[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)@[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)|[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)[-+](?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)?i|(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*))(?=[()\s;"]|$)/i);function k(e){return e.match(t)}function y(e){return e.match(n)}function w(e,t){return!0===t&&e.backUp(1),e.match(i)}function E(e){return e.match(a)}function S(e,t){for(var n,r=!1;null!=(n=e.next());){if(n==t.token&&!r){t.state.mode=!1;break}r=!r&&"\\"==n}}return{startState:function(){return{indentStack:null,indentation:0,mode:!1,sExprComment:!1,sExprQuote:!1}},token:function(e,t){if(null==t.indentStack&&e.sol()&&(t.indentation=e.indentation()),e.eatSpace())return null;var n=null;switch(t.mode){case"string":S(e,{token:'"',state:t}),n=m;break;case"symbol":S(e,{token:"|",state:t}),n=p;break;case"comment":for(var r,a=!1;null!=(r=e.next());){if("#"==r&&a){t.mode=!1;break}a="|"==r}n=u;break;case"s-expr-comment":if(t.mode=!1,"("!=e.peek()&&"["!=e.peek()){e.eatWhile(/[^\s\(\)\[\]]/),n=u;break}t.sExprComment=0;default:var i,c,s=e.next();if('"'==s)t.mode="string",n=m;else if("'"==s)n=("("==e.peek()||"["==e.peek()?"number"!=typeof t.sExprQuote&&(t.sExprQuote=0):e.eatWhile(/[\w_\-!$%&*+\.\/:<=>?@\^~]/),f);else if("|"==s)t.mode="symbol",n=p;else if("#"==s)e.eat("|")?(t.mode="comment",n=u):e.eat(/[tf]/i)?n=f:e.eat(";")?(t.mode="s-expr-comment",n=u):(d=null,c=!(i=!1),e.eat(/[ei]/i)?i=!0:e.backUp(1),e.match(/^#b/i)?d=k:e.match(/^#o/i)?d=y:e.match(/^#x/i)?d=E:e.match(/^#d/i)?d=w:e.match(/^[-+0-9.]/,!1)?(c=!1,d=w):i||e.eat("#"),null!=d&&(c&&!i&&e.match(/^#[ei]/i),d(e)&&(n=h)));else if(/^[-+0-9.]/.test(s)&&w(e,!0))n=h;else if(";"==s)e.skipToEnd(),n=u;else if("("==s||"["==s){for(var o,l="",d=e.column();null!=(o=e.eat(/[^\s\(\[\;\)\]]/));)l+=o;0?@\^~]/),n=g&&g.propertyIsEnumerable(e.current())?"builtin":"variable")}return"number"==typeof t.sExprComment?u:"number"==typeof t.sExprQuote?f:n},indent:function(e){return null==e.indentStack?e.indentation:e.indentStack.indent},closeBrackets:{pairs:'()[]{}""'},lineComment:";;"}}),CodeMirror.defineMIME("text/x-scheme","scheme"); // shell CodeMirror.defineMode("shell",function(){var s={};function e(e,t){for(var n=0;n]?)/))return t.tokenize=(n=e.column(),r=e.column(),o=S,i=function(e,t){p(t);var n=o(e,t);return e.eol()&&e.current().match(/,$/)&&b(t,r),n},function(e,t){if(p(t),e.match(/^\\$/))return b(t,n),"lineContinuation";t=i(e,t);return e.eol()&&e.current().match(/(?:^|[^\\])(?:\\\\)*\\$/)&&e.backUp(1),t}),"slimSwitch";if(e.match(/^doctype\b/))return t.tokenize=T,"keyword";var a,u,l=e.match(s);return l?(a=l[1],u=t,l=$(a),a=CodeMirror.startState(l),u.subMode=l,u.subState=a,u.stack={parent:u.stack,style:"sub",indented:u.indented+1,tokenize:u.line},u.line=u.tokenize=L,"slimSubmode"):R(e,t)}function O(e,t){return(t.startOfLine?U:R)(e,t)}function R(e,t){return e.eat("*")?(t.tokenize=h(I),null):e.match(c)?(t.tokenize=I,"slimTag"):P(e,t)}function I(e,t){return e.match(/^(<>?|>t.indented&&"slimSubmode"!=t.last;)t.line=t.tokenize=t.stack.tokenize,t.stack=t.stack.parent,t.subMode=null,t.subState=null;if(e.eatSpace())return null;e=t.tokenize(e,t);return t.startOfLine=!1,e&&(t.last=e),u.hasOwnProperty(e)?u[e]:e},blankLine:function(e){if(e.subMode&&e.subMode.blankLine)return e.subMode.blankLine(e.subState)},innerMode:function(e){return e.subMode?{state:e.subState,mode:e.subMode}:{state:e,mode:q}}};return q},"htmlmixed","ruby"),CodeMirror.defineMIME("text/x-slim","slim"),CodeMirror.defineMIME("application/x-slim","slim"); // smalltalk CodeMirror.defineMode("smalltalk",function(n){function r(e,t){this.next=e,this.parent=t}function o(e,t,n){this.name=e,this.context=t,this.eos=n}function e(){this.context=new r(a,null),this.expectVariable=!0,this.indentation=0,this.userIndentationDelta=0}var s=/[+\-\/\\*~<>=@%|&?!.,:;^]/,l=/true|false|nil|self|super|thisContext/;e.prototype.userIndent=function(e){this.userIndentationDelta=0]/),e.next()),a.name="string-2"):"|"===i&&n.expectVariable?a.context=new r(d,t):/[\[\]{}()]/.test(i)?(a.name="bracket",a.eos=/[\[{(]/.test(i),"["===i?n.indentation++:"]"===i&&(n.indentation=Math.max(0,n.indentation-1))):s.test(i)?(e.eatWhile(s),a.name="operator",a.eos=";"!==i):/\d/.test(i)?(e.eatWhile(/[\w\d]/),a.name="number"):/[\w_]/.test(i)?(e.eatWhile(/[\w\d_]/),a.name=n.expectVariable?l.test(e.current())?"keyword":"variable":null):a.eos=n.expectVariable,a},u=function(e,t){return e.eatWhile(/[^"]/),new o("comment",e.eat('"')?t.parent:t,!0)},c=function(e,t){return e.eatWhile(/[^']/),new o("string",e.eat("'")?t.parent:t,!1)},x=function(e,t){return e.eatWhile(/[^']/),new o("string-2",e.eat("'")?t.parent:t,!1)},d=function(e,t){var n=new o(null,t,!1);return"|"===e.next()?(n.context=t.parent,n.eos=!0):(e.eatWhile(/[^|]/),n.name="variable"),n};return{startState:function(){return new e},token:function(e,t){if(t.userIndent(e.indentation()),e.eatSpace())return null;e=t.context.next(e,t.context,t);return t.context=e.context,t.expectVariable=e.eos,e.name},blankLine:function(e){e.userIndent(0)},indent:function(e,t){t=e.context.next===a&&t&&"]"===t.charAt(0)?-1:e.userIndentationDelta;return(e.indentation+t)*n.indentUnit},electricChars:"]"}}),CodeMirror.defineMIME("text/x-stsrc",{name:"smalltalk"}); // smarty CodeMirror.defineMode("smarty",function(e,t){var p,h=t.rightDelimiter||"}",c=t.leftDelimiter||"{",k=t.version||2,g=CodeMirror.getMode(e,t.baseMode||"null"),f=["debug","extends","function","include","literal"],s={operatorChars:/[+\-*&%=<>!?]/,validIdentifier:/[a-zA-Z0-9_]/,stringChar:/['"]/};function b(e,t){for(var r,i,n,a,o,l,f,s=e.string,u=e.pos;;){var d=s.indexOf(c,u),u=d+c.length;if(-1==d||(r=e,null==(i=d+c.length)&&(i=r.pos),3!==k||"{"!=c||i!=r.string.length&&!/\s/.test(r.string.charAt(i))))break}if(d==e.pos)return e.match(c),e.eat("*")?(n=e,l="comment",f="*"+h,o=function(e,t){for(;!e.eol();){if(e.match(f)){t.tokenize=b;break}e.next()}return l},((a=t).tokenize=o)(n,a)):(t.depth++,t.tokenize=m,p="startTag","tag");-1]=?)/)?"operator":(a=t.match(/^\$([\w]+)/))?x(e.variables,a[1],!e.lookupVariables):(a=t.match(/^\w+/))?/^(?:as|and|or|not|in|if)$/.test(a[0])?"keyword":null:(t.next(),null)}return{startState:function(){return{soyState:[],variables:f(null,"ij"),scopes:null,indent:0,quoteKind:null,context:null,lookupVariables:!0,localStates:[{mode:y.html,state:CodeMirror.startState(y.html)}]}},copyState:function(t){return{tag:t.tag,soyState:t.soyState.concat([]),variables:t.variables,context:t.context,indent:t.indent,quoteKind:t.quoteKind,lookupVariables:t.lookupVariables,localStates:t.localStates.map(function(t){return{mode:t.mode,state:CodeMirror.copyState(t.mode,t.state)}})}},token:function(t,e){switch(h(e.soyState)){case"comment":if(t.match(/^.*?\*\//)?e.soyState.pop():t.skipToEnd(),!e.context||!e.context.scope)for(var a,n=/@param\??\s+(\S+)/g,r=t.current();a=n.exec(r);)e.variables=f(e.variables,a[1]);return"comment";case"string":return(a=t.match(/^.*?(["']|\\[\s\S])/))?a[1]==e.quoteKind&&(e.quoteKind=null,e.soyState.pop()):t.skipToEnd(),"string"}if(!e.soyState.length||"literal"!=h(e.soyState)){if(t.match(/^\/\*/))return e.soyState.push("comment"),"comment";if(t.match(t.sol()?/^\s*\/\/.*/:/^\s+\/\/.*/))return"comment"}switch(h(e.soyState)){case"templ-def":return(a=t.match(/^\.?([\w]+(?!\.[\w]+)*)/))?(e.soyState.pop(),"def"):(t.next(),null);case"templ-ref":return(a=t.match(/(\.?[a-zA-Z_][a-zA-Z_0-9]+)+/))?(e.soyState.pop(),"."==a[0][0]?"variable-2":"variable"):(a=t.match(/^\$([\w]+)/))?(e.soyState.pop(),x(e.variables,a[1],!e.lookupVariables)):(t.next(),null);case"namespace-def":return(a=t.match(/^\.?([\w\.]+)/))?(e.soyState.pop(),"variable"):(t.next(),null);case"param-def":return(a=t.match(/^\*/))?(e.soyState.pop(),e.soyState.push("param-type"),"type"):(a=t.match(/^\w+/))?(e.variables=f(e.variables,a[0]),e.soyState.pop(),e.soyState.push("param-type"),"def"):(t.next(),null);case"param-ref":return(a=t.match(/^\w+/))?(e.soyState.pop(),"property"):(t.next(),null);case"open-parentheses":return t.match(/[)]/)?(e.soyState.pop(),null):v(t,e);case"param-type":var o=t.peek();return-1!="}]=>,".indexOf(o)?(e.soyState.pop(),null):"["==o?(e.soyState.push("param-type-record"),null):"("==o?(e.soyState.push("param-type-template"),null):"<"==o?(e.soyState.push("param-type-parameter"),null):(a=t.match(/^([\w]+|[?])/))?"type":(t.next(),null);case"param-type-record":return"]"==(o=t.peek())?(e.soyState.pop(),null):t.match(/^\w+/)?(e.soyState.push("param-type"),"property"):(t.next(),null);case"param-type-parameter":return t.match(/^[>]/)?(e.soyState.pop(),null):(t.match(/^[<,]/)?e.soyState.push("param-type"):t.next(),null);case"param-type-template":return t.match(/[>]/)?(e.soyState.pop(),e.soyState.push("param-type"),null):t.match(/^\w+/)?(e.soyState.push("param-type"),"def"):(t.next(),null);case"var-def":return(a=t.match(/^\$([\w]+)/))?(e.variables=f(e.variables,a[1]),e.soyState.pop(),"def"):(t.next(),null);case"for-loop":return t.match(/\bin\b/)?(e.soyState.pop(),"keyword"):("$"==t.peek()?e.soyState.push("var-def"):t.next(),null);case"record-literal":return t.match(/^[)]/)?(e.soyState.pop(),null):(t.match(/[(,]/)?(e.soyState.push("map-value"),e.soyState.push("record-key")):t.next(),null);case"map-literal":return t.match(/^[)]/)?(e.soyState.pop(),null):(t.match(/[(,]/)?(e.soyState.push("map-value"),e.soyState.push("map-value")):t.next(),null);case"list-literal":return t.match("]")?(e.soyState.pop(),e.lookupVariables=!0,g(e),null):t.match(/\bfor\b/)?(e.lookupVariables=!0,e.soyState.push("for-loop"),"keyword"):v(t,e);case"record-key":return t.match(/[\w]+/)?"property":(t.match(/^[:]/)?e.soyState.pop():t.next(),null);case"map-value":return")"==t.peek()||","==t.peek()||t.match(/^[:)]/)?(e.soyState.pop(),null):v(t,e);case"import":return t.eat(";")?(e.soyState.pop(),e.indent-=2*m.indentUnit,null):t.match(/\w+(?=\s+as\b)/)?"variable":(a=t.match(/\w+/))?/\b(from|as)\b/.test(a[0])?"keyword":"def":(a=t.match(/^["']/))?(e.soyState.push("string"),e.quoteKind=a[0],"string"):(t.next(),null);case"tag":u=void 0===e.tag?(p=!0,""):(p="/"==e.tag[0])?e.tag.substring(1):e.tag;var s=w[u];if(t.match(/^\/?}/)){var l="/}"==t.current();return l&&!p&&g(e),"/template"==e.tag||"/deltemplate"==e.tag?(e.variables=f(null,"ij"),e.indent=0):e.indent-=m.indentUnit*(l||-1==k.indexOf(e.tag)?2:1),e.soyState.pop(),"keyword"}return t.match(/^([\w?]+)(?==)/)?(e.context&&e.context.tag==u&&"kind"==t.current()&&(a=t.match(/^="([^"]+)/,!1))&&(l=a[1],e.context.kind=l,l=y[l]||y.html,(d=h(e.localStates)).mode.indent&&(e.indent+=d.mode.indent(d.state,"","")),e.localStates.push({mode:l,state:CodeMirror.startState(l)})),"attribute"):v(t,e);case"template-call-expression":return t.match(/^([\w-?]+)(?==)/)?"attribute":t.eat(">")||t.eat("/>")?(e.soyState.pop(),"keyword"):v(t,e);case"literal":return t.match("{/literal}",!1)?(e.soyState.pop(),this.token(t,e)):S(t,e,/\{\/literal}/);case"export":if(a=t.match(/\w+/)){if(e.soyState.pop(),"const"==a)return e.soyState.push("const-def"),"keyword";if("extern"==a)return e.soyState.push("param-def"),"keyword"}else t.next();return null;case"const-def":return t.match(/^\w+/)?(e.soyState.pop(),"def"):(t.next(),null)}if(t.match("{literal}"))return e.indent+=m.indentUnit,e.soyState.push("literal"),e.context=new b(e.context,"literal",e.variables),"keyword";if(a=t.match(/^\{([/@\\]?\w+\??)(?=$|[\s}]|\/[/*])/)){var i=e.tag;e.tag=a[1];var p="/"==e.tag[0],c=!!w[e.tag],u=p?e.tag.substring(1):e.tag,s=w[u];"/switch"!=e.tag&&(e.indent+=((p||s&&s.reduceIndent)&&"switch"!=i?1:2)*m.indentUnit),e.soyState.push("tag");var d,i=!1;return s?(p||s.soyState&&e.soyState.push(s.soyState),s.noEndTag||!c&&p?p&&(c="extern"==u&&e.context&&"export"==e.context.tag,!e.context||e.context.tag!=u&&!c?i=!0:e.context&&(e.context.kind&&(e.localStates.pop(),(d=h(e.localStates)).mode.indent&&(e.indent-=d.mode.indent(d.state,"",""))),g(e))):e.context=new b(e.context,e.tag,s.variableScope?e.variables:null)):p&&(i=!0),(i?"error ":"")+"keyword"}return t.eat("{")?(e.tag="print",e.indent+=2*m.indentUnit,e.soyState.push("tag"),"keyword"):!e.context&&t.sol()&&t.match(/import\b/)?(e.soyState.push("import"),e.indent+=2*m.indentUnit,"keyword"):(a=t.match("<{"))?(e.soyState.push("template-call-expression"),e.indent+=2*m.indentUnit,e.soyState.push("tag"),"keyword"):(a=t.match(""))?(e.indent-=+m.indentUnit,"keyword"):S(t,e,/\{|\s+\/\/|\/\*/)},indent:function(t,e,a){var n=t.indent,r=h(t.soyState);if("comment"==r)return CodeMirror.Pass;if("literal"==r)/^\{\/literal}/.test(e)&&(n-=m.indentUnit);else{if(/^\s*\{\/(template|deltemplate)\b/.test(e))return 0;/^\{(\/|(fallbackmsg|elseif|else|ifempty)\b)/.test(e)&&(n-=m.indentUnit),"switch"!=t.tag&&/^\{(case|default)\b/.test(e)&&(n-=m.indentUnit),/^\{\/switch\b/.test(e)&&(n-=m.indentUnit)}t=h(t.localStates);return n&&t.mode.indent&&(n+=t.mode.indent(t.state,e,a)),n},innerMode:function(t){return t.soyState.length&&"literal"!=h(t.soyState)?null:h(t.localStates)},electricInput:/^\s*\{(\/|\/template|\/deltemplate|\/switch|fallbackmsg|elseif|else|case|default|ifempty|\/literal\})$/,lineComment:"//",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",useInnerComments:!1,fold:"indent"}},"htmlmixed"),CodeMirror.registerHelper("wordChars","soy",/[\w$]/),CodeMirror.registerHelper("hintWords","soy",Object.keys(w).concat(["css","debugger"])),CodeMirror.defineMIME("text/x-soy","soy")}(); // sparql CodeMirror.defineMode("sparql",function(t){var r,i=t.indentUnit;function e(t){return new RegExp("^(?:"+t.join("|")+")$","i")}var u=e(["str","lang","langmatches","datatype","bound","sameterm","isiri","isuri","iri","uri","bnode","count","sum","min","max","avg","sample","group_concat","rand","abs","ceil","floor","round","concat","substr","strlen","replace","ucase","lcase","encode_for_uri","contains","strstarts","strends","strbefore","strafter","year","month","day","hours","minutes","seconds","timezone","tz","now","uuid","struuid","md5","sha1","sha256","sha384","sha512","coalesce","if","strlang","strdt","isnumeric","regex","exists","isblank","isliteral","a","bind"]),o=e(["base","prefix","select","distinct","reduced","construct","describe","ask","from","named","where","order","limit","offset","filter","optional","graph","by","asc","desc","as","having","undef","values","group","minus","in","not","service","silent","using","insert","delete","union","true","false","with","data","copy","to","move","add","create","drop","clear","load"]),a=/[*+\-<>=&|\^\/!\?]/;function c(t,e){var i,n=t.next();if(r=null,"$"==n||"?"==n)return"?"==n&&t.match(/\s/,!1)?"operator":(t.match(/^[A-Za-z0-9_\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][A-Za-z0-9_\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]*/),"variable-2");if("<"!=n||t.match(/^[\s\u00a0=]/,!1)){if('"'==n||"'"==n)return e.tokenize=(i=n,function(t,e){for(var n,r=!1;null!=(n=t.next());){if(n==i&&!r){e.tokenize=c;break}r=!r&&"\\"==n}return"string"}),e.tokenize(t,e);if(/[{}\(\),\.;\[\]]/.test(n))return r=n,"bracket";if("#"==n)return t.skipToEnd(),"comment";if("^"===n)return"^"===(n=t.peek())?t.eat("^"):t.eatWhile(a),"operator";if(a.test(n))return t.eatWhile(a),"operator";if(":"==n)return s(t),"atom";if("@"==n)return t.eatWhile(/[a-z\d\-]/i),"meta";if(t.eatWhile(/[_\w\d]/),t.eat(":"))return s(t),"atom";n=t.current();return u.test(n)?"builtin":o.test(n)?"keyword":"variable"}return t.match(/^[^\s\u00a0>]*>?/),"atom"}function s(t){t.match(/(\.(?=[\w_\-\\%])|[:\w_-]|\\[-\\_~.!$&'()*+,;=/?#@%]|%[a-f\d][a-f\d])+/i)}function l(t,e,n){t.context={prev:t.context,indent:t.indent,col:n,type:e}}function d(t){t.indent=t.context.indent,t.context=t.context.prev}return{startState:function(){return{tokenize:c,context:null,indent:0,col:0}},token:function(t,e){if(t.sol()&&(e.context&&null==e.context.align&&(e.context.align=!1),e.indent=t.indentation()),t.eatSpace())return null;var n=e.tokenize(t,e);if("comment"!=n&&e.context&&null==e.context.align&&"pattern"!=e.context.type&&(e.context.align=!0),"("==r)l(e,")",t.column());else if("["==r)l(e,"]",t.column());else if("{"==r)l(e,"}",t.column());else if(/[\]\}\)]/.test(r)){for(;e.context&&"pattern"==e.context.type;)d(e);e.context&&r==e.context.type&&(d(e),"}"==r&&e.context&&"pattern"==e.context.type&&d(e))}else"."==r&&e.context&&"pattern"==e.context.type?d(e):/atom|string|variable/.test(n)&&e.context&&(/[\}\]]/.test(e.context.type)?l(e,"pattern",t.column()):"pattern"!=e.context.type||e.context.align||(e.context.align=!0,e.context.col=t.column()));return n},indent:function(t,e){var e=e&&e.charAt(0),n=t.context;if(/[\]\}]/.test(e))for(;n&&"pattern"==n.type;)n=n.prev;e=n&&e==n.type;return n?"pattern"==n.type?n.col:n.align?n.col+(e?0:1):n.indent+(e?0:i):0},lineComment:"#"}}),CodeMirror.defineMIME("application/sparql-query","sparql"); // spreadsheet CodeMirror.defineMode("spreadsheet",function(){return{startState:function(){return{stringType:null,stack:[]}},token:function(e,t){if(e){switch(0===t.stack.length&&('"'!=e.peek()&&"'"!=e.peek()||(t.stringType=e.peek(),e.next(),t.stack.unshift("string"))),t.stack[0]){case"string":for(;"string"===t.stack[0]&&!e.eol();)e.peek()===t.stringType?(e.next(),t.stack.shift()):"\\"===e.peek()?(e.next(),e.next()):e.match(/^.[^\\\"\']*/);return"string";case"characterClass":for(;"characterClass"===t.stack[0]&&!e.eol();)e.match(/^[^\]\\]+/)||e.match(/^\\./)||t.stack.shift();return"operator"}var a=e.peek();switch(a){case"[":return e.next(),t.stack.unshift("characterClass"),"bracket";case":":return e.next(),"operator";case"\\":return e.match(/\\[a-z]+/)?"string-2":(e.next(),"atom");case".":case",":case";":case"*":case"-":case"+":case"^":case"<":case"/":case"=":return e.next(),"atom";case"$":return e.next(),"builtin"}return e.match(/\d+/)?e.match(/^\w+/)?"error":"number":e.match(/^[a-zA-Z_]\w*/)?e.match(/(?=[\(.])/,!1)?"keyword":"variable-2":-1!=["[","]","(",")","{","}"].indexOf(a)?(e.next(),"bracket"):(e.eatSpace()||e.next(),null)}}}}),CodeMirror.defineMIME("text/x-spreadsheet","spreadsheet"); // sql !function(){function e(e){for(var t;null!=(t=e.next());)if("`"==t&&!e.eat("`"))return"variable-2";return e.backUp(e.current().length-1),e.eatWhile(/\w/)?"variable-2":null}function t(e){return e.eat("@")&&(e.match("session."),e.match("local."),e.match("global.")),e.eat("'")?(e.match(/^.*'/),"variable-2"):e.eat('"')?(e.match(/^.*"/),"variable-2"):e.eat("`")?(e.match(/^.*`/),"variable-2"):e.match(/^[0-9a-zA-Z$\.\_]+/)?"variable-2":null}function r(e){return e.eat("N")?"atom":e.match(/^[a-zA-Z.#!?]/)?"variable-2":null}CodeMirror.defineMode("sql",function(r,e){var n=e.client||{},i=e.atoms||{false:!0,true:!0,null:!0},o=e.builtin||f(y),s=e.keywords||f(a),l=e.operatorChars||/^[*+\-%<>!=&|~^\/]/,c=e.support||{},d=e.hooks||{},u=e.dateSQL||{date:!0,time:!0,timestamp:!0},m=!1!==e.backslashStringEscapes,p=e.brackets||/^[\{}\(\)\[\]]/,_=e.punctuation||/^[;.,:]/;function h(e,t){var r=e.next();if(d[r]){var a=d[r](e,t);if(!1!==a)return a}if(c.hexNumber&&("0"==r&&e.match(/^[xX][0-9a-fA-F]+/)||("x"==r||"X"==r)&&e.match(/^'[0-9a-fA-F]+'/)))return"number";if(c.binaryNumber&&(("b"==r||"B"==r)&&e.match(/^'[01]+'/)||"0"==r&&e.match(/^b[01]+/)))return"number";if(47!=^\&|\/]/,brackets:/^[\{}\(\)]/,punctuation:/^[;.,:/]/,backslashStringEscapes:!1,dateSQL:f("date datetimeoffset datetime2 smalldatetime datetime time"),hooks:{"@":t}}),CodeMirror.defineMIME("text/x-mysql",{name:"sql",client:f("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"),keywords:f(a+"accessible action add after algorithm all analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general get global grant grants group group_concat handler hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show signal slave slow smallint snapshot soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"),builtin:f("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"),atoms:f("false true null unknown"),operatorChars:/^[*+\-%<>!=&|^]/,dateSQL:f("date time timestamp"),support:f("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"),hooks:{"@":t,"`":e,"\\":r}}),CodeMirror.defineMIME("text/x-mariadb",{name:"sql",client:f("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"),keywords:f(a+"accessible action add after algorithm all always analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general generated get global grant grants group group_concat handler hard hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password persistent phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show shutdown signal slave slow smallint snapshot soft soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views virtual warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"),builtin:f("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"),atoms:f("false true null unknown"),operatorChars:/^[*+\-%<>!=&|^]/,dateSQL:f("date time timestamp"),support:f("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"),hooks:{"@":t,"`":e,"\\":r}}),CodeMirror.defineMIME("text/x-sqlite",{name:"sql",client:f("auth backup bail binary changes check clone databases dbinfo dump echo eqp exit explain fullschema headers help import imposter indexes iotrace limit lint load log mode nullvalue once open output print prompt quit read restore save scanstats schema separator session shell show stats system tables testcase timeout timer trace vfsinfo vfslist vfsname width"),keywords:f(a+"abort action add after all analyze attach autoincrement before begin cascade case cast check collate column commit conflict constraint cross current_date current_time current_timestamp database default deferrable deferred detach each else end escape except exclusive exists explain fail for foreign full glob if ignore immediate index indexed initially inner instead intersect isnull key left limit match natural no notnull null of offset outer plan pragma primary query raise recursive references regexp reindex release rename replace restrict right rollback row savepoint temp temporary then to transaction trigger unique using vacuum view virtual when with without"),builtin:f("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text clob bigint int int2 int8 integer float double char varchar date datetime year unsigned signed numeric real"),atoms:f("null current_date current_time current_timestamp"),operatorChars:/^[*+\-%<>!=&|/~]/,dateSQL:f("date time timestamp datetime"),support:f("decimallessFloat zerolessFloat"),identifierQuote:'"',hooks:{"@":t,":":t,"?":t,$:t,'"':function(e){for(var t;null!=(t=e.next());)if('"'==t&&!e.eat('"'))return"variable-2";return e.backUp(e.current().length-1),e.eatWhile(/\w/)?"variable-2":null},"`":e}}),CodeMirror.defineMIME("text/x-cassandra",{name:"sql",client:{},keywords:f("add all allow alter and any apply as asc authorize batch begin by clustering columnfamily compact consistency count create custom delete desc distinct drop each_quorum exists filtering from grant if in index insert into key keyspace keyspaces level limit local_one local_quorum modify nan norecursive nosuperuser not of on one order password permission permissions primary quorum rename revoke schema select set storage superuser table three to token truncate ttl two type unlogged update use user users using values where with writetime"),builtin:f("ascii bigint blob boolean counter decimal double float frozen inet int list map static text timestamp timeuuid tuple uuid varchar varint"),atoms:f("false true infinity NaN"),operatorChars:/^[<>=]/,dateSQL:{},support:f("commentSlashSlash decimallessFloat"),hooks:{}}),CodeMirror.defineMIME("text/x-plsql",{name:"sql",client:f("appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define describe echo editfile embedded escape exec execute feedback flagger flush heading headsep instance linesize lno loboffset logsource long longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar release repfooter repheader serveroutput shiftinout show showmode size spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout time timing trimout trimspool ttitle underline verify version wrap"),keywords:f("abort accept access add all alter and any array arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body boolean by case cast char char_base check close cluster clusters colauth column comment commit compress connect connected constant constraint crash create current currval cursor data_base database date dba deallocate debugoff debugon decimal declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry escape exception exception_init exchange exclusive exists exit external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging long loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base object of off offline on online only open option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw read rebuild record ref references refresh release rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate session set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work"),builtin:f("abs acos add_months ascii asin atan atan2 average bfile bfilename bigserial bit blob ceil character chartorowid chr clob concat convert cos cosh count dec decode deref dual dump dup_val_on_index empty error exp false float floor found glb greatest hextoraw initcap instr instrb int integer isopen last_day least length lengthb ln lower lpad ltrim lub make_ref max min mlslabel mod months_between natural naturaln nchar nclob new_time next_day nextval nls_charset_decl_len nls_charset_id nls_charset_name nls_initcap nls_lower nls_sort nls_upper nlssort no_data_found notfound null number numeric nvarchar2 nvl others power rawtohex real reftohex round rowcount rowidtochar rowtype rpad rtrim serial sign signtype sin sinh smallint soundex sqlcode sqlerrm sqrt stddev string substr substrb sum sysdate tan tanh to_char text to_date to_label to_multi_byte to_number to_single_byte translate true trunc uid unlogged upper user userenv varchar varchar2 variance varying vsize xml"),operatorChars:/^[*\/+\-%<>!=~]/,dateSQL:f("date time timestamp"),support:f("doubleQuote nCharCast zerolessFloat binaryNumber hexNumber")}),CodeMirror.defineMIME("text/x-hive",{name:"sql",keywords:f("select alter $elem$ $key$ $value$ add after all analyze and archive as asc before between binary both bucket buckets by cascade case cast change cluster clustered clusterstatus collection column columns comment compute concatenate continue create cross cursor data database databases dbproperties deferred delete delimited desc describe directory disable distinct distribute drop else enable end escaped exclusive exists explain export extended external fetch fields fileformat first format formatted from full function functions grant group having hold_ddltime idxproperties if import in index indexes inpath inputdriver inputformat insert intersect into is items join keys lateral left like limit lines load local location lock locks mapjoin materialized minus msck no_drop nocompress not of offline on option or order out outer outputdriver outputformat overwrite partition partitioned partitions percent plus preserve procedure purge range rcfile read readonly reads rebuild recordreader recordwriter recover reduce regexp rename repair replace restrict revoke right rlike row schema schemas semi sequencefile serde serdeproperties set shared show show_database sort sorted ssl statistics stored streamtable table tables tablesample tblproperties temporary terminated textfile then tmp to touch transform trigger unarchive undo union uniquejoin unlock update use using utc utc_tmestamp view when where while with admin authorization char compact compactions conf cube current current_date current_timestamp day decimal defined dependency directories elem_type exchange file following for grouping hour ignore inner interval jar less logical macro minute month more none noscan over owner partialscan preceding pretty principals protection reload rewrite role roles rollup rows second server sets skewed transactions truncate unbounded unset uri user values window year"),builtin:f("bool boolean long timestamp tinyint smallint bigint int float double date datetime unsigned string array struct map uniontype key_type utctimestamp value_type varchar"),atoms:f("false true null unknown"),operatorChars:/^[*+\-%<>!=]/,dateSQL:f("date timestamp"),support:f("ODBCdotTable doubleQuote binaryNumber hexNumber")}),CodeMirror.defineMIME("text/x-pgsql",{name:"sql",client:f("source"),keywords:f(a+"a abort abs absent absolute access according action ada add admin after aggregate alias all allocate also alter always analyse analyze and any are array array_agg array_max_cardinality as asc asensitive assert assertion assignment asymmetric at atomic attach attribute attributes authorization avg backward base64 before begin begin_frame begin_partition bernoulli between bigint binary bit bit_length blob blocked bom boolean both breadth by c cache call called cardinality cascade cascaded case cast catalog catalog_name ceil ceiling chain char char_length character character_length character_set_catalog character_set_name character_set_schema characteristics characters check checkpoint class class_origin clob close cluster coalesce cobol collate collation collation_catalog collation_name collation_schema collect column column_name columns command_function command_function_code comment comments commit committed concurrently condition condition_number configuration conflict connect connection connection_name constant constraint constraint_catalog constraint_name constraint_schema constraints constructor contains content continue control conversion convert copy corr corresponding cost count covar_pop covar_samp create cross csv cube cume_dist current current_catalog current_date current_default_transform_group current_path current_role current_row current_schema current_time current_timestamp current_transform_group_for_type current_user cursor cursor_name cycle data database datalink datatype date datetime_interval_code datetime_interval_precision day db deallocate debug dec decimal declare default defaults deferrable deferred defined definer degree delete delimiter delimiters dense_rank depends depth deref derived desc describe descriptor detach detail deterministic diagnostics dictionary disable discard disconnect dispatch distinct dlnewcopy dlpreviouscopy dlurlcomplete dlurlcompleteonly dlurlcompletewrite dlurlpath dlurlpathonly dlurlpathwrite dlurlscheme dlurlserver dlvalue do document domain double drop dump dynamic dynamic_function dynamic_function_code each element else elseif elsif empty enable encoding encrypted end end_frame end_partition endexec enforced enum equals errcode error escape event every except exception exclude excluding exclusive exec execute exists exit exp explain expression extension external extract false family fetch file filter final first first_value flag float floor following for force foreach foreign fortran forward found frame_row free freeze from fs full function functions fusion g general generated get global go goto grant granted greatest group grouping groups handler having header hex hierarchy hint hold hour id identity if ignore ilike immediate immediately immutable implementation implicit import in include including increment indent index indexes indicator info inherit inherits initially inline inner inout input insensitive insert instance instantiable instead int integer integrity intersect intersection interval into invoker is isnull isolation join k key key_member key_type label lag language large last last_value lateral lead leading leakproof least left length level library like like_regex limit link listen ln load local localtime localtimestamp location locator lock locked log logged loop lower m map mapping match matched materialized max max_cardinality maxvalue member merge message message_length message_octet_length message_text method min minute minvalue mod mode modifies module month more move multiset mumps name names namespace national natural nchar nclob nesting new next nfc nfd nfkc nfkd nil no none normalize normalized not nothing notice notify notnull nowait nth_value ntile null nullable nullif nulls number numeric object occurrences_regex octet_length octets of off offset oids old on only open operator option options or order ordering ordinality others out outer output over overlaps overlay overriding owned owner p pad parallel parameter parameter_mode parameter_name parameter_ordinal_position parameter_specific_catalog parameter_specific_name parameter_specific_schema parser partial partition pascal passing passthrough password path percent percent_rank percentile_cont percentile_disc perform period permission pg_context pg_datatype_name pg_exception_context pg_exception_detail pg_exception_hint placing plans pli policy portion position position_regex power precedes preceding precision prepare prepared preserve primary print_strict_params prior privileges procedural procedure procedures program public publication query quote raise range rank read reads real reassign recheck recovery recursive ref references referencing refresh regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy reindex relative release rename repeatable replace replica requiring reset respect restart restore restrict result result_oid return returned_cardinality returned_length returned_octet_length returned_sqlstate returning returns reverse revoke right role rollback rollup routine routine_catalog routine_name routine_schema routines row row_count row_number rows rowtype rule savepoint scale schema schema_name schemas scope scope_catalog scope_name scope_schema scroll search second section security select selective self sensitive sequence sequences serializable server server_name session session_user set setof sets share show similar simple size skip slice smallint snapshot some source space specific specific_name specifictype sql sqlcode sqlerror sqlexception sqlstate sqlwarning sqrt stable stacked standalone start state statement static statistics stddev_pop stddev_samp stdin stdout storage strict strip structure style subclass_origin submultiset subscription substring substring_regex succeeds sum symmetric sysid system system_time system_user t table table_name tables tablesample tablespace temp template temporary text then ties time timestamp timezone_hour timezone_minute to token top_level_count trailing transaction transaction_active transactions_committed transactions_rolled_back transform transforms translate translate_regex translation treat trigger trigger_catalog trigger_name trigger_schema trim trim_array true truncate trusted type types uescape unbounded uncommitted under unencrypted union unique unknown unlink unlisten unlogged unnamed unnest until untyped update upper uri usage use_column use_variable user user_defined_type_catalog user_defined_type_code user_defined_type_name user_defined_type_schema using vacuum valid validate validator value value_of values var_pop var_samp varbinary varchar variable_conflict variadic varying verbose version versioning view views volatile warning when whenever where while whitespace width_bucket window with within without work wrapper write xml xmlagg xmlattributes xmlbinary xmlcast xmlcomment xmlconcat xmldeclaration xmldocument xmlelement xmlexists xmlforest xmliterate xmlnamespaces xmlparse xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltext xmlvalidate year yes zone"),builtin:f("bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml"),atoms:f("false true null unknown"),operatorChars:/^[*\/+\-%<>!=&|^\/#@?~]/,backslashStringEscapes:!1,dateSQL:f("date time timestamp"),support:f("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast escapeConstant")}),CodeMirror.defineMIME("text/x-gql",{name:"sql",keywords:f("ancestor and asc by contains desc descendant distinct from group has in is limit offset on order select superset where"),atoms:f("false true"),builtin:f("blob datetime first key __key__ string integer double boolean null"),operatorChars:/^[*+\-%<>!=]/}),CodeMirror.defineMIME("text/x-gpsql",{name:"sql",client:f("source"),keywords:f("abort absolute access action active add admin after aggregate all also alter always analyse analyze and any array as asc assertion assignment asymmetric at authorization backward before begin between bigint binary bit boolean both by cache called cascade cascaded case cast chain char character characteristics check checkpoint class close cluster coalesce codegen collate column comment commit committed concurrency concurrently configuration connection constraint constraints contains content continue conversion copy cost cpu_rate_limit create createdb createexttable createrole createuser cross csv cube current current_catalog current_date current_role current_schema current_time current_timestamp current_user cursor cycle data database day deallocate dec decimal declare decode default defaults deferrable deferred definer delete delimiter delimiters deny desc dictionary disable discard distinct distributed do document domain double drop dxl each else enable encoding encrypted end enum errors escape every except exchange exclude excluding exclusive execute exists explain extension external extract false family fetch fields filespace fill filter first float following for force foreign format forward freeze from full function global grant granted greatest group group_id grouping handler hash having header hold host hour identity if ignore ilike immediate immutable implicit in including inclusive increment index indexes inherit inherits initially inline inner inout input insensitive insert instead int integer intersect interval into invoker is isnull isolation join key language large last leading least left level like limit list listen load local localtime localtimestamp location lock log login mapping master match maxvalue median merge minute minvalue missing mode modifies modify month move name names national natural nchar new newline next no nocreatedb nocreateexttable nocreaterole nocreateuser noinherit nologin none noovercommit nosuperuser not nothing notify notnull nowait null nullif nulls numeric object of off offset oids old on only operator option options or order ordered others out outer over overcommit overlaps overlay owned owner parser partial partition partitions passing password percent percentile_cont percentile_disc placing plans position preceding precision prepare prepared preserve primary prior privileges procedural procedure protocol queue quote randomly range read readable reads real reassign recheck recursive ref references reindex reject relative release rename repeatable replace replica reset resource restart restrict returning returns revoke right role rollback rollup rootpartition row rows rule savepoint scatter schema scroll search second security segment select sequence serializable session session_user set setof sets share show similar simple smallint some split sql stable standalone start statement statistics stdin stdout storage strict strip subpartition subpartitions substring superuser symmetric sysid system table tablespace temp template temporary text then threshold ties time timestamp to trailing transaction treat trigger trim true truncate trusted type unbounded uncommitted unencrypted union unique unknown unlisten until update user using vacuum valid validation validator value values varchar variadic varying verbose version view volatile web when where whitespace window with within without work writable write xml xmlattributes xmlconcat xmlelement xmlexists xmlforest xmlparse xmlpi xmlroot xmlserialize year yes zone"),builtin:f("bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml"),atoms:f("false true null unknown"),operatorChars:/^[*+\-%<>!=&|^\/#@?~]/,dateSQL:f("date time timestamp"),support:f("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast")}),CodeMirror.defineMIME("text/x-sparksql",{name:"sql",keywords:f("add after all alter analyze and anti archive array as asc at between bucket buckets by cache cascade case cast change clear cluster clustered codegen collection column columns comment commit compact compactions compute concatenate cost create cross cube current current_date current_timestamp database databases data dbproperties defined delete delimited deny desc describe dfs directories distinct distribute drop else end escaped except exchange exists explain export extended external false fields fileformat first following for format formatted from full function functions global grant group grouping having if ignore import in index indexes inner inpath inputformat insert intersect interval into is items join keys last lateral lazy left like limit lines list load local location lock locks logical macro map minus msck natural no not null nulls of on optimize option options or order out outer outputformat over overwrite partition partitioned partitions percent preceding principals purge range recordreader recordwriter recover reduce refresh regexp rename repair replace reset restrict revoke right rlike role roles rollback rollup row rows schema schemas select semi separated serde serdeproperties set sets show skewed sort sorted start statistics stored stratify struct table tables tablesample tblproperties temp temporary terminated then to touch transaction transactions transform true truncate unarchive unbounded uncache union unlock unset use using values view when where window with"),builtin:f("abs acos acosh add_months aggregate and any approx_count_distinct approx_percentile array array_contains array_distinct array_except array_intersect array_join array_max array_min array_position array_remove array_repeat array_sort array_union arrays_overlap arrays_zip ascii asin asinh assert_true atan atan2 atanh avg base64 between bigint bin binary bit_and bit_count bit_get bit_length bit_or bit_xor bool_and bool_or boolean bround btrim cardinality case cast cbrt ceil ceiling char char_length character_length chr coalesce collect_list collect_set concat concat_ws conv corr cos cosh cot count count_if count_min_sketch covar_pop covar_samp crc32 cume_dist current_catalog current_database current_date current_timestamp current_timezone current_user date date_add date_format date_from_unix_date date_part date_sub date_trunc datediff day dayofmonth dayofweek dayofyear decimal decode degrees delimited dense_rank div double e element_at elt encode every exists exp explode explode_outer expm1 extract factorial filter find_in_set first first_value flatten float floor forall format_number format_string from_csv from_json from_unixtime from_utc_timestamp get_json_object getbit greatest grouping grouping_id hash hex hour hypot if ifnull in initcap inline inline_outer input_file_block_length input_file_block_start input_file_name inputformat instr int isnan isnotnull isnull java_method json_array_length json_object_keys json_tuple kurtosis lag last last_day last_value lcase lead least left length levenshtein like ln locate log log10 log1p log2 lower lpad ltrim make_date make_dt_interval make_interval make_timestamp make_ym_interval map map_concat map_entries map_filter map_from_arrays map_from_entries map_keys map_values map_zip_with max max_by md5 mean min min_by minute mod monotonically_increasing_id month months_between named_struct nanvl negative next_day not now nth_value ntile nullif nvl nvl2 octet_length or outputformat overlay parse_url percent_rank percentile percentile_approx pi pmod posexplode posexplode_outer position positive pow power printf quarter radians raise_error rand randn random rank rcfile reflect regexp regexp_extract regexp_extract_all regexp_like regexp_replace repeat replace reverse right rint rlike round row_number rpad rtrim schema_of_csv schema_of_json second sentences sequence sequencefile serde session_window sha sha1 sha2 shiftleft shiftright shiftrightunsigned shuffle sign signum sin sinh size skewness slice smallint some sort_array soundex space spark_partition_id split sqrt stack std stddev stddev_pop stddev_samp str_to_map string struct substr substring substring_index sum tan tanh textfile timestamp timestamp_micros timestamp_millis timestamp_seconds tinyint to_csv to_date to_json to_timestamp to_unix_timestamp to_utc_timestamp transform transform_keys transform_values translate trim trunc try_add try_divide typeof ucase unbase64 unhex uniontype unix_date unix_micros unix_millis unix_seconds unix_timestamp upper uuid var_pop var_samp variance version weekday weekofyear when width_bucket window xpath xpath_boolean xpath_double xpath_float xpath_int xpath_long xpath_number xpath_short xpath_string xxhash64 year zip_with"),atoms:f("false true null"),operatorChars:/^[*\/+\-%<>!=~&|^]/,dateSQL:f("date time timestamp"),support:f("ODBCdotTable doubleQuote zerolessFloat")}),CodeMirror.defineMIME("text/x-esper",{name:"sql",client:f("source"),keywords:f("alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit after all and as at asc avedev avg between by case cast coalesce count create current_timestamp day days delete define desc distinct else end escape events every exists false first from full group having hour hours in inner insert instanceof into irstream is istream join last lastweekday left limit like max match_recognize matches median measures metadatasql min minute minutes msec millisecond milliseconds not null offset on or order outer output partition pattern prev prior regexp retain-union retain-intersection right rstream sec second seconds select set some snapshot sql stddev sum then true unidirectional until update variable weekday when where window"),builtin:{},atoms:f("false true null"),operatorChars:/^[*+\-%<>!=&|^\/#@?~]/,dateSQL:f("time"),support:f("decimallessFloat zerolessFloat binaryNumber hexNumber")})}(); // stex CodeMirror.defineMode("stex",function(t,e){"use strict";function a(t,e){t.cmdState.push(e)}function i(t){return 0|=,\/@!*:;'"`~#?]/))return null;if(t.match(/^(\d+\.\d*|\d*\.\d+|\d+)/))return"number";e=t.next();return"{"==e||"}"==e||"["==e||"]"==e||"("==e||")"==e?"bracket":"%"==e?(t.skipToEnd(),"comment"):"error"}function m(t,e){var n=t.peek();return"{"==n||"["==n?(i(e).openBracket(n),t.eat(n),u(e,r),"bracket"):/[ \t\r]/.test(n)?(t.eat(n),null):(u(e,r),(n=(n=e).cmdState.pop())&&n.closeBracket(),r(t,e))}return c.importmodule=n("importmodule","tag",["string","builtin"]),c.documentclass=n("documentclass","tag",["","atom"]),c.usepackage=n("usepackage","tag",["atom"]),c.begin=n("begin","tag",["atom"]),c.end=n("end","tag",["atom"]),c.label=n("label","tag",["atom"]),c.ref=n("ref","tag",["atom"]),c.eqref=n("eqref","tag",["atom"]),c.cite=n("cite","tag",["atom"]),c.bibitem=n("bibitem","tag",["atom"]),c.Bibitem=n("Bibitem","tag",["atom"]),c.RBibitem=n("RBibitem","tag",["atom"]),c.DEFAULT=function(){this.name="DEFAULT",this.style="tag",this.styleIdentifier=this.openBracket=this.closeBracket=function(){}},{startState:function(){return{cmdState:[],f:e.inMathMode?function(t,e){return o(t,e)}:r}},copyState:function(t){return{cmdState:t.cmdState.slice(),f:t.f}},token:function(t,e){return e.f(t,e)},blankLine:function(t){t.f=r,t.cmdState.length=0},lineComment:"%"}}),CodeMirror.defineMIME("text/x-stex","stex"),CodeMirror.defineMIME("text/x-latex","stex"); // stylus !function(){CodeMirror.defineMode("stylus",function(e){for(var r,i,a,o,c=e.indentUnit,d="",t=re(Z),n=/^(a|b|i|s|col|em)$/i,l=re(T),s=re(D),u=re(K),m=re(J),p=re(F),h=te(F),b=re(I),g=re(H),f=re(G),k=/^\s*([.]{2,3}|&&|\|\||\*\*|[?!=:]?=|[-+*\/%<>]=?|\?:|\~)/,w=te(Q),y=re(V),v=new RegExp(/^\-(moz|ms|o|webkit)-/i),x=re(ee),z="",q={};d.length|\*)/)&&!_(Y(t))))return o="variable-2",N(Y(t))?"block":L(r,t,"block",0);if(X(t))return L(r,t,"block")}if("block-keyword"==o)return o="keyword",t.current(/(if|unless)/)&&!R(t)?"block":L(r,t,"block");if("return"==e)return L(r,t,"block",0);if("variable-2"==o&&t.string.match(/^\s?\$[\w-\.\[\]\'\"]+$/))return L(r,t,"block")}return r.context.type},q.parens=function(e,t,r){return"("==e?L(r,t,"parens"):")"==e?"parens"==r.context.prev.type?P(r):t.string.match(/^[a-z][\w-]*\(/i)&&X(t)||N(Y(t))||/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(Y(t))||!t.string.match(/^-?[a-z][\w-\.\[\]\'\"]*\s*=/)&&_(Y(t))||!(t.string.match(/^[\$-]?[a-z][\w-\.\[\]\'\"]*\s*=/)||t.string.match(/^\s*(\(|\)|[0-9])/)||t.string.match(/^\s+[a-z][\w-]*\(/i)||t.string.match(/^\s+[\$-]?[a-z]/i))&&X(t)?L(r,t,"block"):L(r,t,"block",0):(e&&"@"==e.charAt(0)&&M(t.current().slice(1))&&(o="variable-2"),"word"==e&&(i=t.current(),"property"!=(o="tag"==(o=S(i))&&n.test(i)?"variable-2":o)&&"to"!=i||(o="atom")),"variable-name"==e?L(r,t,"variableName"):O(e,t)?L(r,t,"pseudo"):r.context.type);var i},q.vendorPrefixes=function(e,t,r){return"word"==e?(o="property",L(r,t,"block",0)):P(r)},q.pseudo=function(e,t,r){return M(Y(t.string))?E(e,t,r):(t.match(/^[a-z-]+/),o="variable-3",X(t)?L(r,t,"block"):P(r))},q.atBlock=function(e,t,r){if("("==e)return L(r,t,"atBlock_parens");if(U(e,t))return L(r,t,"block");if(A(e,t))return L(r,t,"interpolation");if("word"==e){var i=t.current().toLowerCase();if("tag"==(o=/^(only|not|and|or)$/.test(i)?"keyword":p.hasOwnProperty(i)?"tag":g.hasOwnProperty(i)?"attribute":b.hasOwnProperty(i)?"property":s.hasOwnProperty(i)?"string-2":S(t.current()))&&X(t))return L(r,t,"block")}return"operator"==e&&/^(not|and|or)$/.test(t.current())&&(o="keyword"),r.context.type},q.atBlock_parens=function(e,t,r){if("{"==e||"}"==e)return r.context.type;if(")"==e)return X(t)?L(r,t,"block"):L(r,t,"atBlock");if("word"!=e)return q.atBlock(e,t,r);t=t.current().toLowerCase();return o=S(t),"tag"==(o=/^(max|min)/.test(t)?"property":o)&&(o=n.test(t)?"variable-2":"atom"),r.context.type},q.keyframes=function(e,t,r){return"0"==t.indentation()&&("}"==e&&R(t)||"]"==e||"hash"==e||"qualifier"==e||_(t.current()))?E(e,t,r):"{"==e?L(r,t,"keyframes"):"}"==e?R(t)?P(r,!0):L(r,t,"keyframes"):"unit"==e&&/^[0-9]+\%$/.test(t.current())?L(r,t,"keyframes"):"word"==e&&"block-keyword"==(o=S(t.current()))?(o="keyword",L(r,t,"keyframes")):/@(font-face|media|supports|(-moz-)?document)/.test(e)?L(r,t,X(t)?"block":"atBlock"):"mixin"==e?L(r,t,"block",0):r.context.type},q.interpolation=function(e,t,r){return"{"==e&&P(r)&&L(r,t,"block"),"}"==e?!(t.string.match(/^\s*(\.|#|:|\[|\*|&|>|~|\+|\/)/i)||t.string.match(/^\s*[a-z]/i)&&_(Y(t)))&&(!t.string.match(/^(\{|\s*\&)/)||t.match(/\s*[\w-]/,!1))?L(r,t,"block",0):L(r,t,"block"):"variable-name"==e?L(r,t,"variableName",0):("word"==e&&"tag"==(o=S(t.current()))&&(o="atom"),r.context.type)},q.extend=function(e,t,r){return"["==e||"="==e?"extend":"]"!=e&&"word"==e?(o=S(t.current()),"extend"):P(r)},q.variableName=function(e,t,r){return"string"==e||"["==e||"]"==e||t.current().match(/^(\.|\$)/)?(t.current().match(/^\.[\w-]+/i)&&(o="variable-2"),"variableName"):E(e,t,r)},{startState:function(e){return{tokenize:null,state:"block",context:new B("block",e||0,null)}},token:function(e,t){return!t.tokenize&&e.eatSpace()?null:((i=(t.tokenize||function(e,t){if(z=e.string.match(/(^[\w-]+\s*=\s*$)|(^\s*[\w-]+\s*=\s*[\w-])|(^\s*(\.|#|@|\$|\&|\[|\d|\+|::?|\{|\>|~|\/)?\s*[\w-]*([a-z0-9-]|\*|\/\*)(\(|,)?)/),t.context.line.firstWord=z?z[0].replace(/^\s*/,""):"",t.context.line.indent=e.indentation(),r=e.peek(),e.match("//"))return e.skipToEnd(),["comment","comment"];if(e.match("/*"))return(t.tokenize=j)(e,t);if('"'==r||"'"==r)return e.next(),t.tokenize=$(r),t.tokenize(e,t);if("@"==r)return e.next(),e.eatWhile(/[\w\\-]/),["def",e.current()];if("#"==r){if(e.next(),e.match(/^[0-9a-f]{3}([0-9a-f]([0-9a-f]{2}){0,2})?\b(?!-)/i))return["atom","atom"];if(e.match(/^[a-z][\w-]*/i))return["builtin","hash"]}return e.match(v)?["meta","vendor-prefixes"]:e.match(/^-?[0-9]?\.?[0-9]/)?(e.eatWhile(/[a-z%]/i),["number","unit"]):"!"==r?(e.next(),[e.match(/^(important|optional)/i)?"keyword":"operator","important"]):"."==r&&e.match(/^\.[a-z][\w-]*/i)?["qualifier","qualifier"]:e.match(h)?("("==e.peek()&&(t.tokenize=C),["property","word"]):e.match(/^[a-z][\w-]*\(/i)?(e.backUp(1),["keyword","mixin"]):e.match(/^(\+|-)[a-z][\w-]*\(/i)?(e.backUp(1),["keyword","block-mixin"]):e.string.match(/^\s*&/)&&e.match(/^[-_]+[a-z][\w-]*/)?["qualifier","qualifier"]:e.match(/^(\/|&)(-|_|:|\.|#|[a-z])/)?(e.backUp(1),["variable-3","reference"]):e.match(/^&{1}\s*$/)?["variable-3","reference"]:e.match(w)?["operator","operator"]:e.match(/^\$?[-_]*[a-z0-9]+[\w-]*/i)?e.match(/^(\.|\[)[\w-\'\"\]]+/i,!1)&&!_(e.current())?(e.match("."),["variable-2","variable-name"]):["variable-2","word"]:e.match(k)?["operator",e.current()]:/[:;,{}\[\]\(\)]/.test(r)?(e.next(),[null,r]):(e.next(),[null,null])})(e,t))&&"object"==typeof i&&(a=i[1],i=i[0]),o=i,t.state=q[t.state](a,e,t),o)},indent:function(e,t,r){var i=e.context,a=t&&t.charAt(0),o=i.indent,n=Y(t),l=r.match(/^\s*/)[0].replace(/\t/g,d).length,s=e.context.prev?e.context.prev.line.firstWord:"",e=e.context.prev?e.context.prev.line.indent:l;return i.prev&&("}"==a&&("block"==i.type||"atBlock"==i.type||"keyframes"==i.type)||")"==a&&("parens"==i.type||"atBlock_parens"==i.type)||"{"==a&&"at"==i.type)?o=i.indent-c:/(\})/.test(a)||(/@|\$|\d/.test(a)||/^\{/.test(t)||/^\s*\/(\/|\*)/.test(t)||/^\s*\/\*/.test(s)||/^\s*[\w-\.\[\]\'\"]+\s*(\?|:|\+)?=/i.test(t)||/^(\+|-)?[a-z][\w-]*\(/i.test(t)||/^return/.test(t)||N(n)?o=l:/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(a)||_(n)?o=/\,\s*$/.test(s)?e:/^\s+/.test(r)&&(/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(s)||_(s))?l<=e?e:e+c:l:/,\s*$/.test(r)||!W(n)&&!M(n)||(o=N(s)?l<=e?e:e+c:/^\{/.test(s)?l<=e?l:e+c:W(s)||M(s)?e<=l?e:l:/^(\.|#|:|\[|\*|&|@|\+|\-|>|~|\/)/.test(s)||/=\s*$/.test(s)||_(s)||/^\$[\w-\.\[\]\'\"]/.test(s)?e+c:l)),o},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:"//",fold:"indent"}});var Z=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","bgsound","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","marquee","menu","menuitem","meta","meter","nav","nobr","noframes","noscript","object","ol","optgroup","option","output","p","param","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track","u","ul","var","video"],F=["domain","regexp","url-prefix","url"],H=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],I=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid","dynamic-range","video-dynamic-range"],T=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-position","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marker-offset","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode","font-smoothing","osx-font-smoothing"],D=["scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-3d-light-color","scrollbar-track-color","shape-inside","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","zoom"],G=["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"],J=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],K=["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","column","compact","condensed","contain","content","contents","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","dashed","decimal","decimal-leading-zero","default","default-button","destination-atop","destination-in","destination-out","destination-over","devanagari","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","flex","footnotes","forwards","from","geometricPrecision","georgian","graytext","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hebrew","help","hidden","hide","high","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","malayalam","match","matrix","matrix3d","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row-resize","rtl","run-in","running","s-resize","sans-serif","scale","scale3d","scaleX","scaleY","scaleZ","scroll","scrollbar","scroll-position","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","semi-condensed","semi-expanded","separate","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","solid","somali","source-atop","source-in","source-out","source-over","space","spell-out","square","square-button","standard","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","symbolic","symbols","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","x-large","x-small","xor","xx-large","xx-small","bicubic","optimizespeed","grayscale","row","row-reverse","wrap","wrap-reverse","column-reverse","flex-start","flex-end","space-between","space-around","unset"],Q=["in","and","or","not","is not","is a","is","isnt","defined","if unless"],V=["for","if","else","unless","from","to"],ee=["null","true","false","href","title","type","not-allowed","readonly","disabled"],e=Z.concat(F,H,I,T,D,J,K,G,Q,V,ee,["@font-face","@keyframes","@media","@viewport","@page","@host","@supports","@block","@css"]);function te(e){return e=e.sort(function(e,t){return e~^?!".indexOf(r))return e.next(),"operator";if(-1<":;,.(){}[]".indexOf(r))return e.next(),e.match(".."),"punctuation";if(r=e.match(/("""|"|')/)){var i=function(e,t,n){var r,i=1==e.length,o=!1;for(;r=t.peek();)if(o){if(t.next(),"("==r)return n.tokenize.push(function(){var r=0;return function(e,t,n){n=v(e,t,n);if("punctuation"==n)if("("==e.current())++r;else if(")"==e.current()){if(0==r)return e.backUp(1),t.tokenize.pop(),t.tokenize[t.tokenize.length-1](e,t);--r}return n}}()),"string";o=!1}else{if(t.match(e))return n.tokenize.pop(),"string";t.next(),o="\\"==r}i&&n.tokenize.pop();return"string"}.bind(null,r[0]);return t.tokenize.push(i),i(e,t)}if(e.match(p)){i=e.current();return c.hasOwnProperty(i)?"variable-2":u.hasOwnProperty(i)?"atom":o.hasOwnProperty(i)?(a.hasOwnProperty(i)&&(t.prev="define"),"keyword"):"define"==n?"def":"variable"}return e.next(),null}function k(e,t){for(var n;;){if(e.match(/^[^/*]+/,!0),!(n=e.next()))break;"/"===n&&e.eat("*")?t.tokenize.push(k):"*"===n&&e.eat("/")&&t.tokenize.pop()}return"comment"}function i(e,t,n){this.prev=e,this.align=t,this.indented=n}CodeMirror.defineMode("swift",function(n){return{startState:function(){return{prev:null,context:null,indented:0,tokenize:[]}},token:function(e,t){var n=t.prev;t.prev=null;var r=(t.tokenize[t.tokenize.length-1]||v)(e,t,n);return r&&"comment"!=r?t.prev||(t.prev=r):t.prev=n,"punctuation"!=r||(n=/[\(\[\{]|([\]\)\}])/.exec(e.current()))&&(n[1]?function(e){e.context&&(e.indented=e.context.indented,e.context=e.context.prev)}:function(e,t){t=t.match(/^\s*($|\/[\/\*])/,!1)?null:t.column()+1,e.context=new i(e.context,t,e.indented)})(t,e),r},indent:function(e,t){e=e.context;if(!e)return 0;t=/^[\]\}\)]/.test(t);return null!=e.align?e.align-(t?1:0):e.indented+(t?0:n.indentUnit)},electricInput:/^\s*[\)\}\]]$/,lineComment:"//",blockCommentStart:"/*",blockCommentEnd:"*/",fold:"brace",closeBrackets:"()[]{}''\"\"``"}}),CodeMirror.defineMIME("text/x-swift","swift")}(); // tcl CodeMirror.defineMode("tcl",function(){function e(e){for(var r={},t=e.split(" "),n=0;n!?^\/\|]/;function f(e,r,t){return(r.tokenize=t)(e,r)}function c(e,r){var t=r.beforeParams;r.beforeParams=!1;var o,n=e.next();if('"'!=n&&"'"!=n||!r.inParams){if(/[\[\]{}\(\),;\.]/.test(n))return"("==n&&t?r.inParams=!0:")"==n&&(r.inParams=!1),null;if(/\d/.test(n))return e.eatWhile(/[\w\.]/),"number";if("#"==n)return e.eat("*")?f(e,r,u):"#"==n&&e.match(/ *\[ *\[/)?f(e,r,s):(e.skipToEnd(),"comment");if('"'==n)return e.skipTo(/"/),"comment";if("$"==n)return e.eatWhile(/[$_a-z0-9A-Z\.{:]/),e.eatWhile(/}/),r.beforeParams=!0,"builtin";if(l.test(n))return e.eatWhile(l),"comment";e.eatWhile(/[\w\$_{}\xa1-\uffff]/);t=e.current().toLowerCase();return a&&a.propertyIsEnumerable(t)?"keyword":i&&i.propertyIsEnumerable(t)?(r.beforeParams=!0,"keyword"):null}return f(e,r,(o=n,function(e,r){for(var t,n=!1,a=!1;null!=(t=e.next());){if(t==o&&!n){a=!0;break}n=!n&&"\\"==t}return a&&(r.tokenize=c),"string"}))}function u(e,r){for(var t,n=!1;t=e.next();){if("#"==t&&n){r.tokenize=c;break}n="*"==t}return"comment"}function s(e,r){for(var t,n=0;t=e.next();){if("#"==t&&2==n){r.tokenize=c;break}"]"==t?n++:" "!=t&&(n=0)}return"meta"}return{startState:function(){return{tokenize:c,beforeParams:!1,inParams:!1}},token:function(e,r){return e.eatSpace()?null:r.tokenize(e,r)},lineComment:"#"}}),CodeMirror.defineMIME("text/x-tcl","tcl"); // textile !function(){var i={addition:"positive",attributes:"attribute",bold:"strong",cite:"keyword",code:"atom",definitionList:"number",deletion:"negative",div:"punctuation",em:"em",footnote:"variable",footCite:"qualifier",header:"header",html:"comment",image:"string",italic:"em",link:"link",linkDefinition:"link",list1:"variable-2",list2:"variable-3",list3:"keyword",notextile:"string-2",pre:"operator",p:"property",quote:"bracket",span:"quote",specialChar:"tag",strong:"strong",sub:"builtin",sup:"builtin",table:"variable-3",tableHeading:"operator"};function a(t,e,n){if("_"===n)return t.eat("_")?r(t,e,"italic",/__/,2):r(t,e,"em",/_/,1);if("*"===n)return t.eat("*")?r(t,e,"bold",/\*\*/,2):r(t,e,"strong",/\*/,1);if("["===n)return t.match(/\d+\]/)&&(e.footCite=!0),o(e);if("("===n&&t.match(/^(r|tm|c)\)/))return u(e,i.specialChar);if("<"===n&&t.match(/(\w+)[^>]+>[^<]+<\/\1>/))return u(e,i.html);if("?"===n&&t.eat("?"))return r(t,e,"cite",/\?\?/,2);if("="===n&&t.eat("="))return r(t,e,"notextile",/==/,2);if("-"===n&&!t.eat("-"))return r(t,e,"deletion",/-/,1);if("+"===n)return r(t,e,"addition",/\+/,1);if("~"===n)return r(t,e,"sub",/~/,1);if("^"===n)return r(t,e,"sup",/\^/,1);if("%"===n)return r(t,e,"span",/%/,1);if("@"===n)return r(t,e,"code",/@/,1);if("!"!==n)return o(e);e=r(t,e,"image",/(?:\([^\)]+\))?!/,1);return t.match(/^:\S+/),e}function r(t,e,n,i,a){var r=t.pos>a?t.string.charAt(t.pos-a-1):null,l=t.peek();if(e[n]){if((!l||/\W/.test(l))&&r&&/\S/.test(r)){a=o(e);return e[n]=!1,a}}else(!r||/\W/.test(r))&&l&&/\S/.test(l)&&t.match(new RegExp("^.*\\S"+i.source+"(?:\\W|$)"),!1)&&(e[n]=!0,e.mode=c.attributes);return o(e)}function o(t){var e=l(t);if(e)return e;e=[];return t.layoutType&&e.push(i[t.layoutType]),e=e.concat(function(t){for(var e=[],n=1;n]+)?>(?:[^<]+<\/\1>)?/,link:/[^"]+":\S/,linkDefinition:/\[[^\s\]]+\]\S+/,list:/(?:#+|\*+)/,notextile:"notextile",para:"p",pre:"pre",table:"table",tableCellAttributes:/[\/\\]\d+/,tableHeading:/\|_\./,tableText:/[^"_\*\[\(\?\+~\^%@|-]+/,text:/[^!"_=\*\[\(<\?\+~\^%@-]+/},attributes:{align:/(?:<>|<|>|=)/,selector:/\([^\(][^\)]+\)/,lang:/\[[^\[\]]+\]/,pad:/(?:\(+|\)+){1,2}/,css:/\{[^\}]+\}/},createRe:function(t){switch(t){case"drawTable":return n.makeRe("^",n.single.drawTable,"$");case"html":return n.makeRe("^",n.single.html,"(?:",n.single.html,")*","$");case"linkDefinition":return n.makeRe("^",n.single.linkDefinition,"$");case"listLayout":return n.makeRe("^",n.single.list,s("allAttributes"),"*\\s+");case"tableCellAttributes":return n.makeRe("^",n.choiceRe(n.single.tableCellAttributes,s("allAttributes")),"+\\.");case"type":return n.makeRe("^",s("allTypes"));case"typeLayout":return n.makeRe("^",s("allTypes"),s("allAttributes"),"*\\.\\.?","(\\s+|$)");case"attributes":return n.makeRe("^",s("allAttributes"),"+");case"allTypes":return n.choiceRe(n.single.div,n.single.foot,n.single.header,n.single.bc,n.single.bq,n.single.notextile,n.single.pre,n.single.table,n.single.para);case"allAttributes":return n.choiceRe(n.attributes.selector,n.attributes.css,n.attributes.lang,n.attributes.align,n.attributes.pad);default:return n.makeRe("^",n.single[t])}},makeRe:function(){for(var t="",e=0;e$/,h=/^$/,d=/^\{\{\{$/,s=/^\}\}\}$/,b=/.*?\}\}\}/;function p(e,t,r){return(t.tokenize=r)(e,t)}function $(e,t){var r=e.sol(),n=e.peek();if(t.block=!1,r&&/[<\/\*{}\-]/.test(n)){if(e.match(d))return t.block=!0,p(e,t,x);if(e.match(c))return"quote";if(e.match(o)||e.match(f))return"comment";if(e.match(l)||e.match(m)||e.match(k)||e.match(h))return"comment";if(e.match(u))return"hr"}if(e.next(),r&&/[\/\*!#;:>|]/.test(n)){if("!"==n)return e.skipToEnd(),"header";if("*"==n)return e.eatWhile("*"),"comment";if("#"==n)return e.eatWhile("#"),"comment";if(";"==n)return e.eatWhile(";"),"comment";if(":"==n)return e.eatWhile(":"),"comment";if(">"==n)return e.eatWhile(">"),"quote";if("|"==n)return"header"}if("{"==n&&e.match("{{"))return p(e,t,x);if(/[hf]/i.test(n)&&/[ti]/i.test(e.peek())&&e.match(/\b(ttps?|tp|ile):\/\/[\-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i))return"link";if('"'==n)return"string";if("~"==n)return"brace";if(/[\[\]]/.test(n)&&e.match(n))return"brace";if("@"==n)return e.eatWhile(a),"link";if(/\d/.test(n))return e.eatWhile(/\d/),"number";if("/"==n){if(e.eat("%"))return p(e,t,v);if(e.eat("/"))return p(e,t,z)}if("_"==n&&e.eat("_"))return p(e,t,g);if("-"==n&&e.eat("-")){if(" "!=e.peek())return p(e,t,W);if(" "==e.peek())return"brace"}return"'"==n&&e.eat("'")?p(e,t,w):"<"==n&&e.eat("<")?p(e,t,_):(e.eatWhile(/[\w\$_]/),i.propertyIsEnumerable(e.current())?"keyword":null)}function v(e,t){for(var r,n=!1;r=e.next();){if("/"==r&&n){t.tokenize=$;break}n="%"==r}return"comment"}function w(e,t){for(var r,n=!1;r=e.next();){if("'"==r&&n){t.tokenize=$;break}n="'"==r}return"strong"}function x(e,t){var r=t.block;return r&&e.current()||(!r&&e.match(b)||r&&e.sol()&&e.match(s)?t.tokenize=$:e.next()),"comment"}function z(e,t){for(var r,n=!1;r=e.next();){if("/"==r&&n){t.tokenize=$;break}n="/"==r}return"em"}function g(e,t){for(var r,n=!1;r=e.next();){if("_"==r&&n){t.tokenize=$;break}n="_"==r}return"underlined"}function W(e,t){for(var r,n=!1;r=e.next();){if("-"==r&&n){t.tokenize=$;break}n="-"==r}return"strikethrough"}function _(e,t){if("<<"==e.current())return"macro";var r=e.next();return r?">"==r&&">"==e.peek()?(e.next(),t.tokenize=$,"macro"):(e.eatWhile(/[\w\$_]/),n.propertyIsEnumerable(e.current())?"keyword":null):(t.tokenize=$,null)}return{startState:function(){return{tokenize:$}},token:function(e,t){return e.eatSpace()?null:t.tokenize(e,t)}}}),CodeMirror.defineMIME("text/x-tiddlywiki","tiddlywiki"); // tiki CodeMirror.defineMode("tiki",function(e){function a(n,r,i){return function(e,t){for(;!e.eol();){if(e.match(r)){t.tokenize=u;break}e.next()}return i&&(t.tokenize=i),n}}function o(n){return function(e,t){for(;!e.eol();)e.next();return t.tokenize=u,n}}function u(t,n){function e(e){return(n.tokenize=e)(t,n)}var r=t.sol(),i=t.next();switch(i){case"{":return t.eat("/"),t.eatSpace(),t.eatWhile(/[^\s\u00a0=\"\'\/?(}]/),n.tokenize=s,"tag";case"_":if(t.eat("_"))return e(a("strong","__",u));break;case"'":if(t.eat("'"))return e(a("em","''",u));break;case"(":if(t.eat("("))return e(a("variable-2","))",u));break;case"[":return e(a("variable-3","]",u));case"|":if(t.eat("|"))return e(a("comment","||"));break;case"-":if(t.eat("="))return e(a("header string","=-",u));if(t.eat("-"))return e(a("error tw-deleted","--",u));break;case"=":if(t.match("=="))return e(a("tw-underline","===",u));break;case":":if(t.eat(":"))return e(a("comment","::"));break;case"^":return e(a("tw-box","^"));case"~":if(t.match("np~"))return e(a("meta","~/np~"))}if(r)switch(i){case"!":return t.match("!!!!!")||t.match("!!!!")||t.match("!!!")||t.match("!!"),e(o("header string"));case"*":case"#":case"+":return e(o("tw-listitem bracket"))}return null}var c,r,i,f=e.indentUnit;function s(e,t){var n,r=e.next(),i=e.peek();return"}"==r?(t.tokenize=u,"tag"):"("==r||")"==r?"bracket":"="==r?(c="equals",">"==i&&(e.next(),i=e.peek()),/[\'\"]/.test(i)||(t.tokenize=function(e,t){for(;!e.eol();){var n=e.next(),r=e.peek();if(" "==n||","==n||/[ )}]/.test(r)){t.tokenize=s;break}}return"string"}),"operator"):/[\'\"]/.test(r)?(t.tokenize=(n=r,function(e,t){for(;!e.eol();)if(e.next()==n){t.tokenize=s;break}return"string"}),t.tokenize(e,t)):(e.eatWhile(/[^\s\u00a0=\"\'\/?]/),"keyword")}function l(){for(var e=arguments.length-1;0<=e;e--)r.cc.push(arguments[e])}function k(){return l.apply(null,arguments),!0}function d(e,t){var n=r.context&&r.context.noIndent;r.context={prev:r.context,pluginName:e,indent:r.indented,startOfLine:t,noIndent:n}}function g(){r.context&&(r.context=r.context.prev)}function p(e){if("openPlugin"==e)return r.pluginName=null,k(m,(n=r.startOfLine,function(e){return"selfclosePlugin"==e||"endPlugin"==e||"endPlugin"==e&&d(r.pluginName,n),k()}));if("closePlugin"!=e)return"string"==e&&(r.context&&"!cdata"==r.context.name||d("!cdata"),r.tokenize==u&&g()),k();var t,n,e=!1;return r.context?(e=null!=r.context.pluginName,g()):e=!0,e&&(i="error"),k((t=e,function(e){return t&&(i="error"),("endPlugin"==e?k:l)()}))}function m(e){return"keyword"==e?(i="attribute",k(m)):"equals"==e?k(t,m):l()}function t(e){return"keyword"==e?(i="string",k()):"string"==e?k(n):l()}function n(e){return"string"==e?k(n):l()}return{startState:function(){return{tokenize:u,cc:[],indented:0,startOfLine:!0,pluginName:null,context:null}},token:function(e,t){if(e.sol()&&(t.startOfLine=!0,t.indented=e.indentation()),e.eatSpace())return null;i=c=null;var n=t.tokenize(e,t);if((n||c)&&"comment"!=n)for(r=t;;)if((t.cc.pop()||p)(c||n))break;return t.startOfLine=!1,i||n},indent:function(e,t){var n=e.context;if(n&&n.noIndent)return 0;for(n&&/^{\//.test(t)&&(n=n.prev);n&&!n.startOfLine;)n=n.prev;return n?n.indent+f:0},electricChars:"/"}}),CodeMirror.defineMIME("text/tiki","tiki"); // toml CodeMirror.defineMode("toml",function(){return{startState:function(){return{inString:!1,stringType:"",lhs:!0,inArray:0}},token:function(e,t){if(t.inString||'"'!=e.peek()&&"'"!=e.peek()||(t.stringType=e.peek(),e.next(),t.inString=!0),e.sol()&&0===t.inArray&&(t.lhs=!0),t.inString){for(;t.inString&&!e.eol();)e.peek()===t.stringType?(e.next(),t.inString=!1):"\\"===e.peek()?(e.next(),e.next()):e.match(/^.[^\\\"\']*/);return t.lhs?"property string":"string"}return t.inArray&&"]"===e.peek()?(e.next(),t.inArray--,"bracket"):t.lhs&&"["===e.peek()&&e.skipTo("]")?(e.next(),"]"===e.peek()&&e.next(),"atom"):"#"===e.peek()?(e.skipToEnd(),"comment"):e.eatSpace()?null:t.lhs&&e.eatWhile(function(e){return"="!=e&&" "!=e})?"property":t.lhs&&"="===e.peek()?(e.next(),t.lhs=!1,null):(t.lhs||!e.match(/^\d\d\d\d[\d\-\:\.T]*Z/))&&(t.lhs||!e.match("true")&&!e.match("false"))?t.lhs||"["!==e.peek()?!t.lhs&&e.match(/^\-?\d+(?:\.\d+)?/)?"number":(e.eatSpace()||e.next(),null):(t.inArray++,e.next(),"bracket"):"atom"}}}),CodeMirror.defineMIME("text/x-toml","toml"); // tornado CodeMirror.defineMode("tornado:inner",function(){var r=["and","as","assert","autoescape","block","break","class","comment","context","continue","datetime","def","del","elif","else","end","escape","except","exec","extends","false","finally","for","from","global","if","import","in","include","is","json_encode","lambda","length","linkify","load","module","none","not","or","pass","print","put","raise","raw","return","self","set","squeeze","super","true","try","url_escape","while","with","without","xhtml_escape","yield"];function o(e,t){e.eatWhile(/[^\{]/);var n=e.next();if("{"==n&&(n=e.eat(/\{|%|#/)))return t.tokenize=function(n){"{"==n&&(n="}");return function(e,t){return e.next()==n&&e.eat("}")?(t.tokenize=o,"tag"):e.match(r)?"keyword":"#"==n?"comment":"string"}}(n),"tag"}return r=new RegExp("^(("+r.join(")|(")+"))\\b"),{startState:function(){return{tokenize:o}},token:function(e,t){return t.tokenize(e,t)}}}),CodeMirror.defineMode("tornado",function(e){var t=CodeMirror.getMode(e,"text/html"),e=CodeMirror.getMode(e,"tornado:inner");return CodeMirror.overlayMode(t,e)}),CodeMirror.defineMIME("text/x-tornado","tornado"); // troff CodeMirror.defineMode("troff",function(){var a={};function t(t,r){return(r.tokens[0]||function(t){if(t.eatSpace())return null;var r=t.sol(),e=t.next();if("\\"===e)return t.match("fB")||t.match("fR")||t.match("fI")||t.match("u")||t.match("d")||t.match("%")||t.match("&")||(t.match("m[")?(t.skipTo("]"),t.next()):t.match("s+")||t.match("s-")?t.eatWhile(/[\d-]/):(t.match("(")||t.match("*("))&&t.eatWhile(/[\w-]/)),"string";if(r&&("."===e||"'"===e)&&t.eat("\\")&&t.eat('"'))return t.skipToEnd(),"comment";if(r&&"."===e){if(t.match("B ")||t.match("I ")||t.match("R "))return"attribute";if(t.match("TH ")||t.match("SH ")||t.match("SS ")||t.match("HP "))return t.skipToEnd(),"quote";if(t.match(/[A-Z]/)&&t.match(/[A-Z]/)||t.match(/[a-z]/)&&t.match(/[a-z]/))return"attribute"}return t.eatWhile(/[\w-]/),t=t.current(),a.hasOwnProperty(t)?a[t]:null})(t,r)}return{startState:function(){return{tokens:[]}},token:t}}),CodeMirror.defineMIME("text/troff","troff"),CodeMirror.defineMIME("text/x-troff","troff"),CodeMirror.defineMIME("application/x-troff","troff"); // ttcn !function(){function t(t){for(var e={},n=t.split(" "),r=0;r!\/]/;function k(t,e){var s,n=t.next();if('"'==n||"'"==n)return e.tokenize=(s=n,function(t,e){for(var n,r=!1,i=!1;null!=(n=t.next());){if(n==s&&!r){var o=t.peek();o&&("b"!=(o=o.toLowerCase())&&"h"!=o&&"o"!=o||t.next()),i=!0;break}r=!r&&"\\"==n}return!i&&(r||g)||(e.tokenize=null),"string"}),e.tokenize(t,e);if(/[\[\]{}\(\),;\\:\?\.]/.test(n))return i=n,"punctuation";if("#"==n)return t.skipToEnd(),"atom preprocessor";if("%"==n)return t.eatWhile(/\b/),"atom ttcn3Macros";if(/\d/.test(n))return t.eatWhile(/[\w\.]/),"number";if("/"==n){if(t.eat("*"))return(e.tokenize=O)(t,e);if(t.eat("/"))return t.skipToEnd(),"comment"}if(x.test(n))return"@"==n&&(t.match("try")||t.match("catch")||t.match("lazy"))?"keyword":(t.eatWhile(x),"operator");t.eatWhile(/[\w\$_\xa1-\uffff]/);t=t.current();return r.propertyIsEnumerable(t)?"keyword":o.propertyIsEnumerable(t)?"builtin":a.propertyIsEnumerable(t)?"def timerOps":c.propertyIsEnumerable(t)?"def configOps":p.propertyIsEnumerable(t)?"def verdictOps":l.propertyIsEnumerable(t)?"def portOps":u.propertyIsEnumerable(t)?"def sutOps":f.propertyIsEnumerable(t)?"def functionOps":d.propertyIsEnumerable(t)?"string verdictConsts":m.propertyIsEnumerable(t)?"string booleanConsts":b.propertyIsEnumerable(t)?"string otherConsts":h.propertyIsEnumerable(t)?"builtin types":y.propertyIsEnumerable(t)?"builtin visibilityModifiers":v.propertyIsEnumerable(t)?"atom templateMatch":"variable"}function O(t,e){for(var n,r=!1;n=t.next();){if("/"==n&&r){e.tokenize=null;break}r="*"==n}return"comment"}function E(t,e,n,r,i){this.indented=t,this.column=e,this.type=n,this.align=r,this.prev=i}function C(t,e,n){var r=t.indented;return t.context&&"statement"==t.context.type&&(r=t.context.indented),t.context=new E(r,e,n,null,t.context)}function w(t){var e=t.context.type;return")"!=e&&"]"!=e&&"}"!=e||(t.indented=t.context.indented),t.context=t.context.prev}return{startState:function(t){return{tokenize:null,context:new E((t||0)-n,0,"top",!1),indented:0,startOfLine:!0}},token:function(t,e){var n=e.context;if(t.sol()&&(null==n.align&&(n.align=!1),e.indented=t.indentation(),e.startOfLine=!0),t.eatSpace())return null;i=null;var r=(e.tokenize||k)(t,e);if("comment"==r)return r;if(null==n.align&&(n.align=!0),";"!=i&&":"!=i&&","!=i||"statement"!=n.type)if("{"==i)C(e,t.column(),"}");else if("["==i)C(e,t.column(),"]");else if("("==i)C(e,t.column(),")");else if("}"==i){for(;"statement"==n.type;)n=w(e);for("}"==n.type&&(n=w(e));"statement"==n.type;)n=w(e)}else i==n.type?w(e):s&&(("}"==n.type||"top"==n.type)&&";"!=i||"statement"==n.type&&"newstatement"==i)&&C(e,t.column(),"statement");else w(e);return e.startOfLine=!1,r},electricChars:"{}",blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//",fold:"brace"}}),function(t,e){"string"==typeof t&&(t=[t]);var n=[];function r(t){if(t)for(var e in t)t.hasOwnProperty(e)&&n.push(e)}r(e.keywords),r(e.builtin),r(e.timerOps),r(e.portOps),n.length&&(e.helperType=t[0],CodeMirror.registerHelper("hintWords",t[0],n));for(var i=0;i=&|]/;function l(t,e){var r,n=t.next();if(o=null,"<"!=n||t.match(/^[\s\u00a0=]/,!1)){if('"'==n||"'"==n)return e.tokenize=(r=n,function(t,e){for(var n,o=!1;null!=(n=t.next());){if(n==r&&!o){e.tokenize=l;break}o=!o&&"\\"==n}return"string"}),e.tokenize(t,e);if(/[{}\(\),\.;\[\]]/.test(n))return o=n,null;if("#"==n)return t.skipToEnd(),"comment";if(c.test(n))return t.eatWhile(c),null;if(":"==n)return"operator";if(t.eatWhile(/[_\w\d]/),":"==t.peek())return"variable-3";e=t.current();return i.test(e)?"meta":"A"<=n&&n<="Z"?"comment":"keyword"}return t.match(/^[^\s\u00a0>]*>?/),"atom"}function a(t,e,n){t.context={prev:t.context,indent:t.indent,col:n,type:e}}function u(t){t.indent=t.context.indent,t.context=t.context.prev}return{startState:function(){return{tokenize:l,context:null,indent:0,col:0}},token:function(t,e){if(t.sol()&&(e.context&&null==e.context.align&&(e.context.align=!1),e.indent=t.indentation()),t.eatSpace())return null;var n=e.tokenize(t,e);if("comment"!=n&&e.context&&null==e.context.align&&"pattern"!=e.context.type&&(e.context.align=!0),"("==o)a(e,")",t.column());else if("["==o)a(e,"]",t.column());else if("{"==o)a(e,"}",t.column());else if(/[\]\}\)]/.test(o)){for(;e.context&&"pattern"==e.context.type;)u(e);e.context&&o==e.context.type&&u(e)}else"."==o&&e.context&&"pattern"==e.context.type?u(e):/atom|string|variable/.test(n)&&e.context&&(/[\}\]]/.test(e.context.type)?a(e,"pattern",t.column()):"pattern"!=e.context.type||e.context.align||(e.context.align=!0,e.context.col=t.column()));return n},indent:function(t,e){var e=e&&e.charAt(0),n=t.context;if(/[\]\}]/.test(e))for(;n&&"pattern"==n.type;)n=n.prev;e=n&&e==n.type;return n?"pattern"==n.type?n.col:n.align?n.col+(e?0:1):n.indent+(e?0:r):0},lineComment:"#"}}),CodeMirror.defineMIME("text/turtle","turtle"); // twig CodeMirror.defineMode("twig:inner",function(){var r=["and","as","autoescape","endautoescape","block","do","endblock","else","elseif","extends","for","endfor","embed","endembed","filter","endfilter","flush","from","if","endif","in","is","include","import","not","or","set","spaceless","endspaceless","with","endwith","trans","endtrans","blocktrans","endblocktrans","macro","endmacro","use","verbatim","endverbatim"],i=/^[+\-*&%=<>!?|~^]/,o=/^[:\[\(\{]/,a=["true","false","null","empty","defined","divisibleby","divisible by","even","odd","iterable","sameas","same as"],s=/^(\d[+\-\*\/])?\d+(\.\d+)?/;return r=new RegExp("(("+r.join(")|(")+"))\\b"),a=new RegExp("(("+a.join(")|(")+"))\\b"),{startState:function(){return{}},token:function(e,t){var n=e.peek();if(t.incomment)return e.skipTo("#}")?(e.eatWhile(/\#|}/),t.incomment=!1):e.skipToEnd(),"comment";if(t.intag){if(t.operator){if(t.operator=!1,e.match(a))return"atom";if(e.match(s))return"number"}if(t.sign){if(t.sign=!1,e.match(a))return"atom";if(e.match(s))return"number"}if(t.instring)return n==t.instring&&(t.instring=!1),e.next(),"string";if("'"==n||'"'==n)return t.instring=n,e.next(),"string";if(e.match(t.intag+"}")||e.eat("-")&&e.match(t.intag+"}"))return t.intag=!1,"tag";if(e.match(i))return t.operator=!0,"operator";if(e.match(o))t.sign=!0;else if(e.eat(" ")||e.sol()){if(e.match(r))return"keyword";if(e.match(a))return"atom";if(e.match(s))return"number";e.sol()&&e.next()}else e.next();return"variable"}if(e.eat("{")){if(e.eat("#"))return t.incomment=!0,e.skipTo("#}")?(e.eatWhile(/\#|}/),t.incomment=!1):e.skipToEnd(),"comment";if(n=e.eat(/\{|%/))return"{"==(t.intag=n)&&(t.intag="}"),e.eat("-"),"tag"}e.next()}}}),CodeMirror.defineMode("twig",function(e,t){var n=CodeMirror.getMode(e,"twig:inner");return t&&t.base?CodeMirror.multiplexingMode(CodeMirror.getMode(e,t.base),{open:/\{[{#%]/,close:/[}#%]\}/,mode:n,parseDelimiters:!0}):n}),CodeMirror.defineMIME("text/x-twig","twig"); // vb CodeMirror.defineMode("vb",function(n,a){var c="error";function e(e){return new RegExp("^(("+e.join(")|(")+"))\\b","i")}var d=new RegExp("^[\\+\\-\\*/%&\\\\|\\^~<>!]"),s=new RegExp("^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]"),l=new RegExp("^((==)|(<>)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))"),u=new RegExp("^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))"),h=new RegExp("^((//=)|(>>=)|(<<=)|(\\*\\*=))"),m=new RegExp("^[_A-Za-z][_A-Za-z0-9]*"),t=["class","module","sub","enum","select","while","if","function","get","set","property","try","structure","synclock","using","with"],r=["else","elseif","case","catch","finally"],i=["next","loop"],o=["and","andalso","or","orelse","xor","in","not","is","isnot","like"],f=e(o),p=["#const","#else","#elseif","#end","#if","#region","addhandler","addressof","alias","as","byref","byval","cbool","cbyte","cchar","cdate","cdbl","cdec","cint","clng","cobj","compare","const","continue","csbyte","cshort","csng","cstr","cuint","culng","cushort","declare","default","delegate","dim","directcast","each","erase","error","event","exit","explicit","false","for","friend","gettype","goto","handles","implements","imports","infer","inherits","interface","isfalse","istrue","lib","me","mod","mustinherit","mustoverride","my","mybase","myclass","namespace","narrowing","new","nothing","notinheritable","notoverridable","of","off","on","operator","option","optional","out","overloads","overridable","overrides","paramarray","partial","private","protected","public","raiseevent","readonly","redim","removehandler","resume","return","shadows","shared","static","step","stop","strict","then","throw","to","true","trycast","typeof","until","until","when","widening","withevents","writeonly"],g=["object","boolean","char","string","byte","sbyte","short","ushort","int16","uint16","integer","uinteger","int32","uint32","long","ulong","int64","uint64","decimal","single","double","float","date","datetime","intptr","uintptr"],b=e(p),y=e(g),v='"',w=e(t),k=e(r),x=e(i),I=e(["end"]),E=e(["do"]);function C(e,t){t.currentIndent++}function L(e,t){t.currentIndent--}function z(e,t){if(e.eatSpace())return null;var n,r,i;if("'"===e.peek())return e.skipToEnd(),"comment";if(e.match(/^((&H)|(&O))?[0-9\.a-f]/i,!1)){var o=!1;if(o=e.match(/^\d*\.\d+F?/i)||e.match(/^\d+\.\d*F?/)||e.match(/^\.\d+F?/)?!0:o)return e.eat(/J/i),"number";o=!1;if(e.match(/^&H[0-9a-f]+/i)||e.match(/^&O[0-7]+/i)?o=!0:e.match(/^[1-9]\d*F?/)?(e.eat(/J/i),o=!0):e.match(/^0(?![\dx])/i)&&(o=!0),o)return e.eat(/L/i),"number"}return e.match(v)?(t.tokenize=(n=e.current(),r=1==n.length,i="string",function(e,t){for(;!e.eol();){if(e.eatWhile(/[^'"]/),e.match(n))return t.tokenize=z,i;e.eat(/['"]/)}if(r){if(a.singleLineStringErrors)return c;t.tokenize=z}return i}),t.tokenize(e,t)):e.match(h)||e.match(u)?null:e.match(l)||e.match(d)||e.match(f)?"operator":e.match(s)?null:e.match(E)?(C(0,t),t.doInCurrentLine=!0,"keyword"):e.match(w)?(t.doInCurrentLine?t.doInCurrentLine=!1:C(0,t),"keyword"):e.match(k)?"keyword":e.match(I)?(L(0,t),L(0,t),"keyword"):e.match(x)?(L(0,t),"keyword"):e.match(y)||e.match(b)?"keyword":e.match(m)?"variable":(e.next(),c)}return CodeMirror.registerHelper("hintWords","vb",t.concat(r).concat(i).concat(o).concat(p).concat(g)),{electricChars:"dDpPtTfFeE ",startState:function(){return{tokenize:z,lastToken:null,currentIndent:0,nextLineIndent:0,doInCurrentLine:!1}},token:function(e,t){e.sol()&&(t.currentIndent+=t.nextLineIndent,t.nextLineIndent=0,t.doInCurrentLine=0);var n,r,i,o,i=(n=e,i=(r=t).tokenize(n,r),"."===(o=n.current())?"variable"===(i=r.tokenize(n,r))?"variable":c:(-1!=="[({".indexOf(o)&&C(0,r),-1!=="])}".indexOf(o)&&L(0,r),i));return t.lastToken={style:i,content:e.current()},i},indent:function(e,t){t=t.replace(/^\s+|\s+$/g,"");return t.match(x)||t.match(I)||t.match(k)?n.indentUnit*(e.currentIndent-1):e.currentIndent<0?0:e.currentIndent*n.indentUnit},lineComment:"'"}}),CodeMirror.defineMIME("text/x-vb","vb"); // vbscript CodeMirror.defineMode("vbscript",function(r,i){var o="error";function e(e){return new RegExp("^(("+e.join(")|(")+"))\\b","i")}var c=new RegExp("^[\\+\\-\\*/&\\\\\\^<>=]"),b=new RegExp("^((<>)|(<=)|(>=))"),s=new RegExp("^[\\.,]"),l=new RegExp("^[\\(\\)]"),u=new RegExp("^[A-Za-z][_A-Za-z0-9]*"),d=e(["and","or","not","xor","is","mod","eqv","imp"]),t=["WScript","err","debug","RegExp"],v=["clear","execute","raise","replace","test","write","writeline","close","open","state","eof","update","addnew","end","createobject","quit"].concat(["description","firstindex","global","helpcontext","helpfile","ignorecase","length","number","pattern","source","value","count"]),t=t.concat(["vbBlack","vbRed","vbGreen","vbYellow","vbBlue","vbMagenta","vbCyan","vbWhite","vbBinaryCompare","vbTextCompare","vbSunday","vbMonday","vbTuesday","vbWednesday","vbThursday","vbFriday","vbSaturday","vbUseSystemDayOfWeek","vbFirstJan1","vbFirstFourDays","vbFirstFullWeek","vbGeneralDate","vbLongDate","vbShortDate","vbLongTime","vbShortTime","vbObjectError","vbOKOnly","vbOKCancel","vbAbortRetryIgnore","vbYesNoCancel","vbYesNo","vbRetryCancel","vbCritical","vbQuestion","vbExclamation","vbInformation","vbDefaultButton1","vbDefaultButton2","vbDefaultButton3","vbDefaultButton4","vbApplicationModal","vbSystemModal","vbOK","vbCancel","vbAbort","vbRetry","vbIgnore","vbYes","vbNo","vbCr","VbCrLf","vbFormFeed","vbLf","vbNewLine","vbNullChar","vbNullString","vbTab","vbVerticalTab","vbUseDefault","vbTrue","vbFalse","vbEmpty","vbNull","vbInteger","vbLong","vbSingle","vbDouble","vbCurrency","vbDate","vbString","vbObject","vbError","vbBoolean","vbVariant","vbDataObject","vbDecimal","vbByte","vbArray"]);r.isASP&&(t=t.concat(["server","response","request","session","application"]),v=v.concat(["addheader","appendtolog","binarywrite","end","flush","redirect","binaryread","remove","removeall","lock","unlock","abandon","getlasterror","htmlencode","mappath","transfer","urlencode"],["buffer","cachecontrol","charset","contenttype","expires","expiresabsolute","isclientconnected","pics","status","clientcertificate","cookies","form","querystring","servervariables","totalbytes","contents","staticobjects","codepage","lcid","sessionid","timeout","scripttimeout"]));var m=e(["dim","redim","then","until","randomize","byval","byref","new","property","exit","in","const","private","public","get","set","let","stop","on error resume next","on error goto 0","option explicit","call","me"]),p=e(["true","false","nothing","empty","null"]),h=e(["abs","array","asc","atn","cbool","cbyte","ccur","cdate","cdbl","chr","cint","clng","cos","csng","cstr","date","dateadd","datediff","datepart","dateserial","datevalue","day","escape","eval","execute","exp","filter","formatcurrency","formatdatetime","formatnumber","formatpercent","getlocale","getobject","getref","hex","hour","inputbox","instr","instrrev","int","fix","isarray","isdate","isempty","isnull","isnumeric","isobject","join","lbound","lcase","left","len","loadpicture","log","ltrim","rtrim","trim","maths","mid","minute","month","monthname","msgbox","now","oct","replace","rgb","right","rnd","round","scriptengine","scriptenginebuildversion","scriptenginemajorversion","scriptengineminorversion","second","setlocale","sgn","sin","space","split","sqr","strcomp","string","strreverse","tan","time","timer","timeserial","timevalue","typename","ubound","ucase","unescape","vartype","weekday","weekdayname","year"]),f=e(t),y=e(v),g='"',x=e(["class","sub","select","while","if","function","property","with","for"]),k=e(["else","elseif","case"]),w=e(["next","loop","wend"]),C=e(["end"]),I=e(["do"]),L=e(["on error resume next","exit"]),E=e(["rem"]);function D(e,t){t.currentIndent++}function S(e,t){t.currentIndent--}function T(e,t){if(e.eatSpace())return"space";var r,n;if("'"===e.peek())return e.skipToEnd(),"comment";if(e.match(E))return e.skipToEnd(),"comment";if(e.match(/^((&H)|(&O))?[0-9\.]/i,!1)&&!e.match(/^((&H)|(&O))?[0-9\.]+[a-z_]/i,!1)){var a=!1;if(a=e.match(/^\d*\.\d+/i)||e.match(/^\d+\.\d*/)||e.match(/^\.\d+/)?!0:a)return e.eat(/J/i),"number";a=!1;if(e.match(/^&H[0-9a-f]+/i)||e.match(/^&O[0-7]+/i)?a=!0:e.match(/^[1-9]\d*F?/)?(e.eat(/J/i),a=!0):e.match(/^0(?![\dx])/i)&&(a=!0),a)return e.eat(/L/i),"number"}return e.match(g)?(t.tokenize=(r=e.current(),n=1==r.length,function(e,t){for(;!e.eol();){if(e.eatWhile(/[^'"]/),e.match(r))return t.tokenize=T,"string";e.eat(/['"]/)}if(n){if(i.singleLineStringErrors)return o;t.tokenize=T}return"string"}),t.tokenize(e,t)):e.match(b)||e.match(c)||e.match(d)?"operator":e.match(s)?null:e.match(l)?"bracket":e.match(L)?(t.doInCurrentLine=!0,"keyword"):e.match(I)?(D(0,t),t.doInCurrentLine=!0,"keyword"):e.match(x)?(t.doInCurrentLine?t.doInCurrentLine=!1:D(0,t),"keyword"):e.match(k)?"keyword":e.match(C)?(S(0,t),S(0,t),"keyword"):e.match(w)?(t.doInCurrentLine?t.doInCurrentLine=!1:S(0,t),"keyword"):e.match(m)?"keyword":e.match(p)?"atom":e.match(y)?"variable-2":e.match(h)?"builtin":e.match(f)?"variable-2":e.match(u)?"variable":(e.next(),o)}return{electricChars:"dDpPtTfFeE ",startState:function(){return{tokenize:T,lastToken:null,currentIndent:0,nextLineIndent:0,doInCurrentLine:!1,ignoreKeyword:!1}},token:function(e,t){e.sol()&&(t.currentIndent+=t.nextLineIndent,t.nextLineIndent=0,t.doInCurrentLine=0);var r,n,a,i,a=(r=e,a=(n=t).tokenize(r,n),"."===(i=r.current())?(a=n.tokenize(r,n),i=r.current(),!a||"variable"!==a.substr(0,8)&&"builtin"!==a&&"keyword"!==a?o:("builtin"!==a&&"keyword"!==a||(a="variable"),-1!?:\/|]/;function l(e,t,n){return(t.tokenize=n)(e,t)}function u(e,t){var n=t.beforeParams;t.beforeParams=!1;var r=e.next();if("'"==r&&!t.inString&&t.inParams)return t.lastTokenWasBuiltin=!1,l(e,t,f(r));if('"'==r)return t.lastTokenWasBuiltin=!1,t.inString?(t.inString=!1,"string"):t.inParams?l(e,t,f(r)):void 0;if(/[\[\]{}\(\),;\.]/.test(r))return"("==r&&n?t.inParams=!0:")"==r&&(t.inParams=!1,t.lastTokenWasBuiltin=!0),null;if(/\d/.test(r))return t.lastTokenWasBuiltin=!1,e.eatWhile(/[\w\.]/),"number";if("#"==r&&e.eat("*"))return t.lastTokenWasBuiltin=!1,l(e,t,c);if("#"==r&&e.match(/ *\[ *\[/))return t.lastTokenWasBuiltin=!1,l(e,t,k);if("#"==r&&e.eat("#"))return t.lastTokenWasBuiltin=!1,e.skipToEnd(),"comment";if("$"==r)return e.eat("!"),e.eatWhile(/[\w\d\$_\.{}-]/),o&&o.propertyIsEnumerable(e.current())?"keyword":(t.lastTokenWasBuiltin=!0,t.beforeParams=!0,"builtin");if(s.test(r))return t.lastTokenWasBuiltin=!1,e.eatWhile(s),"operator";e.eatWhile(/[\w\$_{}@]/);r=e.current();return a&&a.propertyIsEnumerable(r)?"keyword":i&&i.propertyIsEnumerable(r)||e.current().match(/^#@?[a-z0-9_]+ *$/i)&&"("==e.peek()&&(!i||!i.propertyIsEnumerable(r.toLowerCase()))?(t.beforeParams=!0,t.lastTokenWasBuiltin=!1,"keyword"):t.inString?(t.lastTokenWasBuiltin=!1,"string"):e.pos>r.length&&"."==e.string.charAt(e.pos-r.length-1)&&t.lastTokenWasBuiltin?"builtin":(t.lastTokenWasBuiltin=!1,null)}function f(i){return function(e,t){for(var n,r=!1,a=!1;null!=(n=e.next());){if(n==i&&!r){a=!0;break}if('"'==i&&"$"==e.peek()&&!r){a=t.inString=!0;break}r=!r&&"\\"==n}return a&&(t.tokenize=u),"string"}}function c(e,t){for(var n,r=!1;n=e.next();){if("#"==n&&r){t.tokenize=u;break}r="*"==n}return"comment"}function k(e,t){for(var n,r=0;n=e.next();){if("#"==n&&2==r){t.tokenize=u;break}"]"==n?r++:" "!=n&&(r=0)}return"meta"}return{startState:function(){return{tokenize:u,beforeParams:!1,inParams:!1,inString:!1,lastTokenWasBuiltin:!1}},token:function(e,t){return e.eatSpace()?null:t.tokenize(e,t)},blockCommentStart:"#*",blockCommentEnd:"*#",lineComment:"##",fold:"velocity"}}),CodeMirror.defineMIME("text/velocity","velocity"); // verilog !function(){CodeMirror.defineMode("verilog",function(e,t){var o=e.indentUnit,l=t.statementIndentUnit||o,c=t.dontAlignCalls,s=t.compilerDirectivesUseRegularIndentation,n=t.noIndentKeywords||[],d=t.multiLineStrings,u=t.hooks||{};function i(e){for(var t={},n=e.split(" "),i=0;i]/,g=/[\[\]{}()]/,h=/\d[0-9_]*/,y=/\d*\s*'s?d\s*\d[0-9_]*/i,k=/\d*\s*'s?b\s*[xz01][xz01_]*/i,b=/\d*\s*'s?o\s*[xz0-7][xz0-7_]*/i,w=/\d*\s*'s?h\s*[0-9a-fxz?][0-9a-fxz?_]*/i,_=/(\d[\d_]*(\.\d[\d_]*)?E-?[\d_]+)|(\d[\d_]*\.\d[\d_]*)/i,x=/^((`?\w+)|[)}\]])/,I=/[)}\]]/,C=new RegExp("^(`(?:ifdef|ifndef|elsif|else|endif|undef|undefineall|define|include|begin_keywords|celldefine|default|nettype|end_keywords|endcelldefine|line|nounconnected_drive|pragma|resetall|timescale|unconnected_drive))\\b"),a=/^(`(?:ifdef|ifndef|elsif|else))\b/,z=/^(`(?:elsif|else|endif))\b/,t=i("case checker class clocking config function generate interface module package primitive program property specify sequence table task"),S={};for(M in t)S[M]="end"+M;for(r in S.begin="end",S.casex="endcase",S.casez="endcase",S.do="while",S.fork="join;join_any;join_none",S.covergroup="endgroup",S.macro_begin="macro_end",n){var M=n[r];S[M]&&(S[M]=void 0)}var E=i("always always_comb always_ff always_latch assert assign assume else export for foreach forever if import initial repeat while extern typedef");function j(e,t){var n,a,i=e.peek();if(u[i]&&0!=(n=u[i](e,t)))return n;if(u.tokenBase&&0!=(n=u.tokenBase(e,t)))return n;if(/[,;:\.]/.test(i))return m=e.next(),null;if(g.test(i))return m=e.next(),"bracket";if("`"==i){if(e.next(),e.eatWhile(/[\w\$_]/)){var r,o=e.current();return(f=o).startsWith("`uvm_")&&o.endsWith("_begin")?(r=f.substr(0,f.length-5)+"end",S[o]=r,m="newblock"):(e.eatSpace(),"("==e.peek()&&(m="newmacro"),r=e.current(),e.backUp(r.length-o.length)),"def"}return null}if("$"==i)return e.next(),e.eatWhile(/[\w\$_]/)?"meta":null;if("#"==i)return e.next(),e.eatWhile(/[\d_.]/),"def";if("@"==i)return e.next(),e.eatWhile(/[@]/),"def";if('"'==i)return e.next(),t.tokenize=(a=i,function(e,t){for(var n,i=!1,r=!1;null!=(n=e.next());){if(n==a&&!i){r=!0;break}i=!i&&"\\"==n}return!r&&(i||d)||(t.tokenize=j),"string"}),t.tokenize(e,t);if("/"==i){if(e.next(),e.eat("*"))return(t.tokenize=$)(e,t);if(e.eat("/"))return e.skipToEnd(),"comment";e.backUp(1)}if(e.match(_)||e.match(y)||e.match(k)||e.match(b)||e.match(w)||e.match(h)||e.match(_))return"number";if(e.eatWhile(v))return m=e.current(),"meta";if(e.eatWhile(/[\w\$_]/)){o=e.current();return p[o]?(S[o]&&(m="newblock","fork"===o&&(e.eatSpace(),";"==e.peek()&&(m="newstatement"),e.backUp(e.current().length-o.length))),E[o]&&(m="newstatement"),f=o,"keyword"):"variable"}return e.next(),null}function $(e,t){for(var n,i=!1;n=e.next();){if("/"==n&&i){t.tokenize=j;break}i="*"==n}return"comment"}function A(e,t,n,i,r,a){this.indented=e,this.column=t,this.type=n,this.scopekind=i,this.align=r,this.prev=a}function q(e,t,n,i){i=new A(e.indented,t,n,i||"",null,e.context);return e.context=i}function B(e){var t=e.context.type;return")"!=t&&"]"!=t&&"}"!=t||(e.indented=e.context.indented),e.context=e.context.prev}function W(e,t){if(e==t)return!0;var n,i=t.split(";");for(n in i)if(e==i[n])return!0;return!1}return{electricInput:function(){var e,t=[];for(e in S)if(S[e]){var n,i=S[e].split(";");for(n in i)t.push(i[n])}return new RegExp("[{}()\\[\\]]|("+t.join("|")+")$")}(),startState:function(e){e={tokenize:null,context:new A((e||0)-o,0,"top","top",!1),indented:0,compilerDirectiveIndented:0,startOfLine:!0};return u.startState&&u.startState(e),e},token:function(e,t){var n,i=t.context;if((e.sol()&&(null==i.align&&(i.align=!1),t.indented=e.indentation(),t.startOfLine=!0),u.token)&&void 0!==(n=u.token(e,t)))return n;if(e.eatSpace())return null;if(f=m=null,"comment"==(n=(t.tokenize||j)(e,t))||"meta"==n||"variable"==n)return"="!==m&&"<="!==m||function e(t,n){return null!=t&&(t.scopekind===n||e(t.prev,n))}(i,"assignment")||(q(t,e.column()+m.length,"assignment","assignment"),null==i.align&&(i.align=!0)),n;null==i.align&&(i.align=!0);var r="assignment"==i.type&&I.test(m)&&i.prev&&i.prev.type===m;if(m==i.type||r){if(r&&(i=B(t)),i=B(t),")"==m){if(i&&"macro"===i.type)for(i=B(t);i&&("statement"==i.type||"assignment"==i.type);)i=B(t)}else if("}"==m&&i&&"statement"===i.type)for(;i&&"statement"==i.type;)i=B(t)}else if((";"==m||","==m)&&("statement"==i.type||"assignment"==i.type)||i.type&&W(f,i.type))for(i=B(t);i&&("statement"==i.type||"assignment"==i.type);)i=B(t);else"{"==m?q(t,e.column(),"}"):"["==m?q(t,e.column(),"]"):"("==m?q(t,e.column(),")"):i&&"endcase"==i.type&&":"==m?q(t,e.column(),"statement","case"):"newstatement"==m?q(t,e.column(),"statement",f):"newblock"==m?"function"==f&&i&&("statement"==i.type||"endgroup"==i.type)||"task"==f&&i&&"statement"==i.type||"class"==f&&i&&"statement"==i.type||(r=S[f],q(t,e.column(),r,f)):("newmacro"==m||f&&f.match(C))&&("newmacro"==m&&q(t,e.column(),"macro","macro"),f.match(z)&&(t.compilerDirectiveIndented-=l),f.match(a)&&(t.compilerDirectiveIndented+=l));return t.startOfLine=!1,n},indent:function(e,t){if(e.tokenize!=j&&null!=e.tokenize)return CodeMirror.Pass;if(u.indent){var n=u.indent(e);if(0<=n)return n}var i=e.context,r=t&&t.charAt(0);"statement"==i.type&&"}"==r&&(i=i.prev);var a=!1,n=t.match(x);return n&&(a=W(n[0],i.type)),!s&&t.match(C)?t.match(z)?e.compilerDirectiveIndented-l:e.compilerDirectiveIndented:"statement"==i.type?i.indented+("{"==r?0:l):!I.test(i.type)&&"assignment"!=i.type||!i.align||c?")"!=i.type||a?i.indented+(a?0:o):i.indented+l:i.column+(a?0:1)},blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//",fold:"indent"}}),CodeMirror.defineMIME("text/x-verilog",{name:"verilog"}),CodeMirror.defineMIME("text/x-systemverilog",{name:"verilog"});var u={"|":"link",">":"property",$:"variable",$$:"variable","?$":"qualifier","?*":"qualifier","-":"hr","/":"property","/-":"property","@":"variable-3","@-":"variable-3","@++":"variable-3","@+=":"variable-3","@+=-":"variable-3","@--":"variable-3","@-=":"variable-3","%+":"tag","%-":"tag","%":"tag",">>":"tag","<<":"tag","<>":"tag","#":"tag","^":"attribute","^^":"attribute","^!":"attribute","*":"variable-2","**":"variable-2","\\":"keyword",'"':"comment"},m={"/":"beh-hier",">":"beh-hier","-":"phys-hier","|":"pipe","?":"when","@":"stage","\\":"keyword"},f=/^([~!@#\$%\^&\*-\+=\?\/\\\|'"<>]+)([\d\w_]*)/,p=/^[! ] /,v=/^[! ] */,g=/^\/[\/\*]/;function h(e,t,n){return"tlv-"+e.tlvIndentationStyle[t/3]+"-"+n}CodeMirror.defineMIME("text/x-tlv",{name:"verilog",hooks:{electricInput:!1,token:function(e,t){var n,i,r=void 0;if(e.sol()&&!t.tlvInBlockComment){"\\"==e.peek()&&(r="def",e.skipToEnd(),e.string.match(/\\SV/)?t.tlvCodeActive=!1:e.string.match(/\\TLV/)&&(t.tlvCodeActive=!0)),t.tlvCodeActive&&0==e.pos&&0==t.indented&&(n=e.match(v,!1))&&(t.indented=n[0].length);var a=t.indented,o=a/3;if(o<=t.tlvIndentationStyle.length){var l,c,s=e.string.length==a,d=3*o;if(do;)t.tlvIndentationStyle.pop()}t.tlvNextIndent=a}return t.tlvCodeActive?(s=!1,void 0!==r?r+=" "+h(t,0,"scope-ident"):e.pos/3!\?@#$%&|:\.]+)/,token:"variable-2"},{regex:/"(?:[^"\\\x00-\x1f\x7f]|\\[nt\\'"]|\\[0-9a-fA-F][0-9a-fA-F])*"/,token:"string"},{regex:/\(;.*?/,token:"comment",next:"comment"},{regex:/;;.*$/,token:"comment"},{regex:/\(/,indent:!0},{regex:/\)/,dedent:!0}],comment:[{regex:/.*?;\)/,token:"comment",next:"start"},{regex:/.*/,token:"comment"}],meta:{dontIndentStates:["comment"]}}),CodeMirror.defineMIME("text/webassembly","wast"); // webidl !function(){function e(e){return new RegExp("^(("+e.join(")|(")+"))\\b")}var t=["Clamp","Constructor","EnforceRange","Exposed","ImplicitThis","Global","PrimaryGlobal","LegacyArrayClass","LegacyUnenumerableNamedProperties","LenientThis","NamedConstructor","NewObject","NoInterfaceObject","OverrideBuiltins","PutForwards","Replaceable","SameObject","TreatNonObjectAsNull","TreatNullAs","EmptyString","Unforgeable","Unscopeable"],n=e(t),r=["unsigned","short","long","unrestricted","float","double","boolean","byte","octet","Promise","ArrayBuffer","DataView","Int8Array","Int16Array","Int32Array","Uint8Array","Uint16Array","Uint32Array","Uint8ClampedArray","Float32Array","Float64Array","ByteString","DOMString","USVString","sequence","object","RegExp","Error","DOMException","FrozenArray","any","void"],a=e(r),i=["attribute","callback","const","deleter","dictionary","enum","getter","implements","inherit","interface","iterable","legacycaller","maplike","partial","required","serializer","setlike","setter","static","stringifier","typedef","optional","readonly","or"],o=e(i),c=["true","false","Infinity","NaN","null"],l=e(c);CodeMirror.registerHelper("hintWords","webidl",t.concat(r).concat(i).concat(c));var m=e(["callback","dictionary","enum","interface"]),u=e(["typedef"]),s=/^[:<=>?]/,f=/^-?([1-9][0-9]*|0[Xx][0-9A-Fa-f]+|0[0-7]*)/,d=/^-?(([0-9]+\.[0-9]*|[0-9]*\.[0-9]+)([Ee][+-]?[0-9]+)?|[0-9]+[Ee][+-]?[0-9]+)/,b=/^_?[A-Za-z][0-9A-Z_a-z-]*/,y=/^_?[A-Za-z][0-9A-Z_a-z-]*(?=\s*;)/,p=/^"[^"]*"/,h=/^\/\*.*?\*\//,A=/^\/\*.*/,g=/^.*?\*\//;CodeMirror.defineMode("webidl",function(){return{startState:function(){return{inComment:!1,lastToken:"",startDef:!1,endDef:!1}},token:function(e,t){var r=function(e,t){if(e.eatSpace())return null;if(t.inComment)return e.match(g)?t.inComment=!1:e.skipToEnd(),"comment";if(e.match("//"))return e.skipToEnd(),"comment";if(e.match(h))return"comment";if(e.match(A))return t.inComment=!0,"comment";if(e.match(/^-?[0-9\.]/,!1)&&(e.match(f)||e.match(d)))return"number";if(e.match(p))return"string";if(t.startDef&&e.match(b))return"def";if(t.endDef&&e.match(y))return t.endDef=!1,"def";if(e.match(o))return"keyword";if(e.match(a)){var r=t.lastToken,t=(e.match(/^\s*(.+?)\b/,!1)||[])[1];return":"===r||"implements"===r||"implements"===t||"="===t?"builtin":"variable-3"}return e.match(n)?"builtin":e.match(l)?"atom":e.match(b)?"variable":e.match(s)?"operator":(e.next(),null)}(e,t);return r&&(e=e.current(),t.lastToken=e,"keyword"===r?(t.startDef=m.test(e),t.endDef=t.endDef||u.test(e)):t.startDef=!1),r}}}),CodeMirror.defineMIME("text/x-webidl","webidl")}(); // xquery CodeMirror.defineMode("xquery",function(){var l=function(){function e(e){return{type:e,style:"keyword"}}for(var t=e("operator"),n={type:"atom",style:"atom"},r={type:"axis_specifier",style:"qualifier"},a={",":{type:"punctuation",style:null}},i=["after","all","allowing","ancestor","ancestor-or-self","any","array","as","ascending","at","attribute","base-uri","before","boundary-space","by","case","cast","castable","catch","child","collation","comment","construction","contains","content","context","copy","copy-namespaces","count","decimal-format","declare","default","delete","descendant","descendant-or-self","descending","diacritics","different","distance","document","document-node","element","else","empty","empty-sequence","encoding","end","entire","every","exactly","except","external","first","following","following-sibling","for","from","ftand","ftnot","ft-option","ftor","function","fuzzy","greatest","group","if","import","in","inherit","insensitive","insert","instance","intersect","into","invoke","is","item","language","last","lax","least","let","levels","lowercase","map","modify","module","most","namespace","next","no","node","nodes","no-inherit","no-preserve","not","occurs","of","only","option","order","ordered","ordering","paragraph","paragraphs","parent","phrase","preceding","preceding-sibling","preserve","previous","processing-instruction","relationship","rename","replace","return","revalidation","same","satisfies","schema","schema-attribute","schema-element","score","self","sensitive","sentence","sentences","sequence","skip","sliding","some","stable","start","stemming","stop","strict","strip","switch","text","then","thesaurus","times","to","transform","treat","try","tumbling","type","typeswitch","union","unordered","update","updating","uppercase","using","validate","value","variable","version","weight","when","where","wildcards","window","with","without","word","words","xquery"],o=0,s=i.length;o",">=","<","<=",".","|","?","and","or","div","idiv","mod","*","/","+","-"],o=0,s=u.length;o\"\'\/?]/);)u+=c;return f(e,t,(n=u,r=s,function(e,t){return e.eatSpace(),r&&e.eat(">")?(w(t),t.tokenize=m,"tag"):(e.eat("/")||z(t,{type:"tag",name:n,tokenize:m}),e.eat(">")?t.tokenize=m:t.tokenize=g,"tag")}))}if("{"==a)return z(t,{type:"codeblock"}),null;if("}"==a)return w(t),null;if(v(t))return">"==a?"tag":"/"==a&&e.eat(">")?(w(t),"tag"):"variable";if(/\d/.test(a))return e.match(/^\d*(?:\.\d*)?(?:E[+\-]?\d+)?/),"atom";if("("===a&&e.eat(":"))return z(t,{type:"comment"}),f(e,t,d);if(o||'"'!==a&&"'"!==a){if("$"===a)return f(e,t,p);if(":"===a&&e.eat("="))return"keyword";if("("===a)return z(t,{type:"paren"}),null;if(")"===a)return w(t),null;if("["===a)return z(t,{type:"bracket"}),null;if("]"===a)return w(t),null;s=l.propertyIsEnumerable(a)&&l[a];if(o&&'"'===a)for(;'"'!==e.next(););if(o&&"'"===a)for(;"'"!==e.next(););s||e.eatWhile(/[\w\$_-]/);o=e.eat(":");!e.eat(":")&&o&&e.eatWhile(/[\w\$_-]/),e.match(/^[ \t]*\(/,!1)&&(i=!0);var o=e.current(),s=l.propertyIsEnumerable(o)&&l[o];return i&&!s&&(s={type:"function_call",style:"variable def"}),b(t,"xmlconstructor")?(w(t),"variable"):("element"!=o&&"attribute"!=o&&"axis_specifier"!=s.type||z(t,{type:"xmlconstructor"}),s?s.style:"variable")}return f(e,t,x(a))}function d(e,t){for(var n,r=!1,a=!1,i=0;n=e.next();){if(")"==n&&r){if(!(0")?(i(t)&&w(t),v(t)&&w(t),"tag"):">"==n?(i(t)&&w(t),"tag"):"="==n?null:'"'==n||"'"==n?f(e,t,x(n,g)):(i(t)||z(t,{type:"attribute",tokenize:g}),e.eat(/[a-zA-Z_:]/),e.eatWhile(/[-a-zA-Z0-9_:.]/),e.eatSpace(),(e.match(">",!1)||e.match("/",!1))&&(w(t),t.tokenize=m),"attribute")}function y(e,t){for(var n;n=e.next();)if("-"==n&&e.match("->",!0))return t.tokenize=m,"comment"}function h(e,t){for(var n;n=e.next();)if("]"==n&&e.match("]",!0))return t.tokenize=m,"comment"}function k(e,t){for(var n;n=e.next();)if("?"==n&&e.match(">",!0))return t.tokenize=m,"comment meta"}function v(e){return b(e,"tag")}function i(e){return b(e,"attribute")}function b(e,t){return e.stack.length&&e.stack[e.stack.length-1].type==t}function z(e,t){e.stack.push(t)}function w(e){e.stack.pop();var t=e.stack.length&&e.stack[e.stack.length-1].tokenize;e.tokenize=t||m}return{startState:function(){return{tokenize:m,cc:[],stack:[]}},token:function(e,t){return e.eatSpace()?null:t.tokenize(e,t)},blockCommentStart:"(:",blockCommentEnd:":)"}}),CodeMirror.defineMIME("application/xquery","xquery"); // yacas CodeMirror.defineMode("yacas",function(n,e){var a=function(e){for(var t={},n=e.split(" "),r=0;r|<|&|\||_|`|'|\^|\?|!|%|#)/,!0,!1)?"operator":"error"}function p(e,t){for(var n,r=!1,o=!1;null!=(n=e.next());){if('"'===n&&!o){r=!0;break}o=!o&&"\\"===n}return r&&!o&&(t.tokenize=s),"string"}function m(e,t){for(var n,r;null!=(r=e.next());){if("*"===n&&"/"===r){t.tokenize=s;break}n=r}return"comment"}function f(e){var t=null;return t=0= curEnd.ch - 1) { var text = cm.getLine(curStart.line); var charCode = text.charCodeAt(curStart.ch); if (0xD800 <= charCode && charCode <= 0xD8FF) { curEnd.ch += 1; } } return {start: curStart, end: curEnd}; } var defaultKeymap = [ // Key to key mapping. This goes first to make it possible to override // existing mappings. { keys: '', type: 'keyToKey', toKeys: 'h' }, { keys: '', type: 'keyToKey', toKeys: 'l' }, { keys: '', type: 'keyToKey', toKeys: 'k' }, { keys: '', type: 'keyToKey', toKeys: 'j' }, { keys: 'g', type: 'keyToKey', toKeys: 'gk' }, { keys: 'g', type: 'keyToKey', toKeys: 'gj' }, { keys: '', type: 'keyToKey', toKeys: 'l' }, { keys: '', type: 'keyToKey', toKeys: 'h', context: 'normal'}, { keys: '', type: 'keyToKey', toKeys: 'x', context: 'normal'}, { keys: '', type: 'keyToKey', toKeys: 'W' }, { keys: '', type: 'keyToKey', toKeys: 'B', context: 'normal' }, { keys: '', type: 'keyToKey', toKeys: 'w' }, { keys: '', type: 'keyToKey', toKeys: 'b', context: 'normal' }, { keys: '', type: 'keyToKey', toKeys: 'j' }, { keys: '', type: 'keyToKey', toKeys: 'k' }, { keys: '', type: 'keyToKey', toKeys: '' }, { keys: '', type: 'keyToKey', toKeys: '' }, { keys: '', type: 'keyToKey', toKeys: '', context: 'insert' }, { keys: '', type: 'keyToKey', toKeys: '', context: 'insert' }, { keys: '', type: 'keyToKey', toKeys: '' }, // ipad keyboard sends C-Esc instead of C-[ { keys: '', type: 'keyToKey', toKeys: '', context: 'insert' }, { keys: 's', type: 'keyToKey', toKeys: 'cl', context: 'normal' }, { keys: 's', type: 'keyToKey', toKeys: 'c', context: 'visual'}, { keys: 'S', type: 'keyToKey', toKeys: 'cc', context: 'normal' }, { keys: 'S', type: 'keyToKey', toKeys: 'VdO', context: 'visual' }, { keys: '', type: 'keyToKey', toKeys: '0' }, { keys: '', type: 'keyToKey', toKeys: '$' }, { keys: '', type: 'keyToKey', toKeys: '' }, { keys: '', type: 'keyToKey', toKeys: '' }, { keys: '', type: 'keyToKey', toKeys: 'j^', context: 'normal' }, { keys: '', type: 'keyToKey', toKeys: 'i', context: 'normal'}, { keys: '', type: 'action', action: 'toggleOverwrite', context: 'insert' }, // Motions { keys: 'H', type: 'motion', motion: 'moveToTopLine', motionArgs: { linewise: true, toJumplist: true }}, { keys: 'M', type: 'motion', motion: 'moveToMiddleLine', motionArgs: { linewise: true, toJumplist: true }}, { keys: 'L', type: 'motion', motion: 'moveToBottomLine', motionArgs: { linewise: true, toJumplist: true }}, { keys: 'h', type: 'motion', motion: 'moveByCharacters', motionArgs: { forward: false }}, { keys: 'l', type: 'motion', motion: 'moveByCharacters', motionArgs: { forward: true }}, { keys: 'j', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, linewise: true }}, { keys: 'k', type: 'motion', motion: 'moveByLines', motionArgs: { forward: false, linewise: true }}, { keys: 'gj', type: 'motion', motion: 'moveByDisplayLines', motionArgs: { forward: true }}, { keys: 'gk', type: 'motion', motion: 'moveByDisplayLines', motionArgs: { forward: false }}, { keys: 'w', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: false }}, { keys: 'W', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: false, bigWord: true }}, { keys: 'e', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: true, inclusive: true }}, { keys: 'E', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: true, bigWord: true, inclusive: true }}, { keys: 'b', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false }}, { keys: 'B', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false, bigWord: true }}, { keys: 'ge', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: true, inclusive: true }}, { keys: 'gE', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: true, bigWord: true, inclusive: true }}, { keys: '{', type: 'motion', motion: 'moveByParagraph', motionArgs: { forward: false, toJumplist: true }}, { keys: '}', type: 'motion', motion: 'moveByParagraph', motionArgs: { forward: true, toJumplist: true }}, { keys: '(', type: 'motion', motion: 'moveBySentence', motionArgs: { forward: false }}, { keys: ')', type: 'motion', motion: 'moveBySentence', motionArgs: { forward: true }}, { keys: '', type: 'motion', motion: 'moveByPage', motionArgs: { forward: true }}, { keys: '', type: 'motion', motion: 'moveByPage', motionArgs: { forward: false }}, { keys: '', type: 'motion', motion: 'moveByScroll', motionArgs: { forward: true, explicitRepeat: true }}, { keys: '', type: 'motion', motion: 'moveByScroll', motionArgs: { forward: false, explicitRepeat: true }}, { keys: 'gg', type: 'motion', motion: 'moveToLineOrEdgeOfDocument', motionArgs: { forward: false, explicitRepeat: true, linewise: true, toJumplist: true }}, { keys: 'G', type: 'motion', motion: 'moveToLineOrEdgeOfDocument', motionArgs: { forward: true, explicitRepeat: true, linewise: true, toJumplist: true }}, {keys: "g$", type: "motion", motion: "moveToEndOfDisplayLine"}, {keys: "g^", type: "motion", motion: "moveToStartOfDisplayLine"}, {keys: "g0", type: "motion", motion: "moveToStartOfDisplayLine"}, { keys: '0', type: 'motion', motion: 'moveToStartOfLine' }, { keys: '^', type: 'motion', motion: 'moveToFirstNonWhiteSpaceCharacter' }, { keys: '+', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, toFirstChar:true }}, { keys: '-', type: 'motion', motion: 'moveByLines', motionArgs: { forward: false, toFirstChar:true }}, { keys: '_', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, toFirstChar:true, repeatOffset:-1 }}, { keys: '$', type: 'motion', motion: 'moveToEol', motionArgs: { inclusive: true }}, { keys: '%', type: 'motion', motion: 'moveToMatchedSymbol', motionArgs: { inclusive: true, toJumplist: true }}, { keys: 'f', type: 'motion', motion: 'moveToCharacter', motionArgs: { forward: true , inclusive: true }}, { keys: 'F', type: 'motion', motion: 'moveToCharacter', motionArgs: { forward: false }}, { keys: 't', type: 'motion', motion: 'moveTillCharacter', motionArgs: { forward: true, inclusive: true }}, { keys: 'T', type: 'motion', motion: 'moveTillCharacter', motionArgs: { forward: false }}, { keys: ';', type: 'motion', motion: 'repeatLastCharacterSearch', motionArgs: { forward: true }}, { keys: ',', type: 'motion', motion: 'repeatLastCharacterSearch', motionArgs: { forward: false }}, { keys: '\'', type: 'motion', motion: 'goToMark', motionArgs: {toJumplist: true, linewise: true}}, { keys: '`', type: 'motion', motion: 'goToMark', motionArgs: {toJumplist: true}}, { keys: ']`', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: true } }, { keys: '[`', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: false } }, { keys: ']\'', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: true, linewise: true } }, { keys: '[\'', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: false, linewise: true } }, // the next two aren't motions but must come before more general motion declarations { keys: ']p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: true, isEdit: true, matchIndent: true}}, { keys: '[p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: false, isEdit: true, matchIndent: true}}, { keys: ']', type: 'motion', motion: 'moveToSymbol', motionArgs: { forward: true, toJumplist: true}}, { keys: '[', type: 'motion', motion: 'moveToSymbol', motionArgs: { forward: false, toJumplist: true}}, { keys: '|', type: 'motion', motion: 'moveToColumn'}, { keys: 'o', type: 'motion', motion: 'moveToOtherHighlightedEnd', context:'visual'}, { keys: 'O', type: 'motion', motion: 'moveToOtherHighlightedEnd', motionArgs: {sameLine: true}, context:'visual'}, // Operators { keys: 'd', type: 'operator', operator: 'delete' }, { keys: 'y', type: 'operator', operator: 'yank' }, { keys: 'c', type: 'operator', operator: 'change' }, { keys: '=', type: 'operator', operator: 'indentAuto' }, { keys: '>', type: 'operator', operator: 'indent', operatorArgs: { indentRight: true }}, { keys: '<', type: 'operator', operator: 'indent', operatorArgs: { indentRight: false }}, { keys: 'g~', type: 'operator', operator: 'changeCase' }, { keys: 'gu', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: true}, isEdit: true }, { keys: 'gU', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: false}, isEdit: true }, { keys: 'n', type: 'motion', motion: 'findNext', motionArgs: { forward: true, toJumplist: true }}, { keys: 'N', type: 'motion', motion: 'findNext', motionArgs: { forward: false, toJumplist: true }}, { keys: 'gn', type: 'motion', motion: 'findAndSelectNextInclusive', motionArgs: { forward: true }}, { keys: 'gN', type: 'motion', motion: 'findAndSelectNextInclusive', motionArgs: { forward: false }}, // Operator-Motion dual commands { keys: 'x', type: 'operatorMotion', operator: 'delete', motion: 'moveByCharacters', motionArgs: { forward: true }, operatorMotionArgs: { visualLine: false }}, { keys: 'X', type: 'operatorMotion', operator: 'delete', motion: 'moveByCharacters', motionArgs: { forward: false }, operatorMotionArgs: { visualLine: true }}, { keys: 'D', type: 'operatorMotion', operator: 'delete', motion: 'moveToEol', motionArgs: { inclusive: true }, context: 'normal'}, { keys: 'D', type: 'operator', operator: 'delete', operatorArgs: { linewise: true }, context: 'visual'}, { keys: 'Y', type: 'operatorMotion', operator: 'yank', motion: 'expandToLine', motionArgs: { linewise: true }, context: 'normal'}, { keys: 'Y', type: 'operator', operator: 'yank', operatorArgs: { linewise: true }, context: 'visual'}, { keys: 'C', type: 'operatorMotion', operator: 'change', motion: 'moveToEol', motionArgs: { inclusive: true }, context: 'normal'}, { keys: 'C', type: 'operator', operator: 'change', operatorArgs: { linewise: true }, context: 'visual'}, { keys: '~', type: 'operatorMotion', operator: 'changeCase', motion: 'moveByCharacters', motionArgs: { forward: true }, operatorArgs: { shouldMoveCursor: true }, context: 'normal'}, { keys: '~', type: 'operator', operator: 'changeCase', context: 'visual'}, { keys: '', type: 'operatorMotion', operator: 'delete', motion: 'moveToStartOfLine', context: 'insert' }, { keys: '', type: 'operatorMotion', operator: 'delete', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false }, context: 'insert' }, //ignore C-w in normal mode // Likely originally introduced to prevent overriding the Ctrl+W hotkey on browsers // No longer needs to exist anymore in our codebase since our hotkeys take precedence. // Commented out on 2022-03-10. // { keys: '', type: 'idle', context: 'normal' }, // Actions { keys: '', type: 'action', action: 'jumpListWalk', actionArgs: { forward: true }}, { keys: '', type: 'action', action: 'jumpListWalk', actionArgs: { forward: false }}, { keys: '', type: 'action', action: 'scroll', actionArgs: { forward: true, linewise: true }}, { keys: '', type: 'action', action: 'scroll', actionArgs: { forward: false, linewise: true }}, { keys: 'a', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'charAfter' }, context: 'normal' }, { keys: 'A', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'eol' }, context: 'normal' }, { keys: 'A', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'endOfSelectedArea' }, context: 'visual' }, { keys: 'i', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'inplace' }, context: 'normal' }, { keys: 'gi', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'lastEdit' }, context: 'normal' }, { keys: 'I', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'firstNonBlank'}, context: 'normal' }, { keys: 'gI', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'bol'}, context: 'normal' }, { keys: 'I', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'startOfSelectedArea' }, context: 'visual' }, { keys: 'o', type: 'action', action: 'newLineAndEnterInsertMode', isEdit: true, interlaceInsertRepeat: true, actionArgs: { after: true }, context: 'normal' }, { keys: 'O', type: 'action', action: 'newLineAndEnterInsertMode', isEdit: true, interlaceInsertRepeat: true, actionArgs: { after: false }, context: 'normal' }, { keys: 'v', type: 'action', action: 'toggleVisualMode' }, { keys: 'V', type: 'action', action: 'toggleVisualMode', actionArgs: { linewise: true }}, { keys: '', type: 'action', action: 'toggleVisualMode', actionArgs: { blockwise: true }}, { keys: '', type: 'action', action: 'toggleVisualMode', actionArgs: { blockwise: true }}, { keys: 'gv', type: 'action', action: 'reselectLastSelection' }, { keys: 'J', type: 'action', action: 'joinLines', isEdit: true }, { keys: 'gJ', type: 'action', action: 'joinLines', actionArgs: { keepSpaces: true }, isEdit: true }, { keys: 'p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: true, isEdit: true }}, { keys: 'P', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: false, isEdit: true }}, { keys: 'r', type: 'action', action: 'replace', isEdit: true }, { keys: '@', type: 'action', action: 'replayMacro' }, { keys: 'q', type: 'action', action: 'enterMacroRecordMode' }, // Handle Replace-mode as a special case of insert mode. { keys: 'R', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { replace: true }, context: 'normal'}, { keys: 'R', type: 'operator', operator: 'change', operatorArgs: { linewise: true, fullLine: true }, context: 'visual', exitVisualBlock: true}, { keys: 'u', type: 'action', action: 'undo', context: 'normal' }, { keys: 'u', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: true}, context: 'visual', isEdit: true }, { keys: 'U', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: false}, context: 'visual', isEdit: true }, { keys: '', type: 'action', action: 'redo' }, { keys: 'm', type: 'action', action: 'setMark' }, { keys: '"', type: 'action', action: 'setRegister' }, { keys: '', type: 'action', action: 'insertRegister', context: 'insert', isEdit: true }, { keys: 'zz', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'center' }}, { keys: 'z.', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'center' }, motion: 'moveToFirstNonWhiteSpaceCharacter' }, { keys: 'zt', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'top' }}, { keys: 'z', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'top' }, motion: 'moveToFirstNonWhiteSpaceCharacter' }, { keys: 'zb', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'bottom' }}, { keys: 'z-', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'bottom' }, motion: 'moveToFirstNonWhiteSpaceCharacter' }, { keys: '.', type: 'action', action: 'repeatLastEdit' }, { keys: '', type: 'action', action: 'incrementNumberToken', isEdit: true, actionArgs: {increase: true, backtrack: false}}, { keys: '', type: 'action', action: 'incrementNumberToken', isEdit: true, actionArgs: {increase: false, backtrack: false}}, { keys: '', type: 'action', action: 'indent', actionArgs: { indentRight: true }, context: 'insert' }, { keys: '', type: 'action', action: 'indent', actionArgs: { indentRight: false }, context: 'insert' }, // Text object motions { keys: 'a', type: 'motion', motion: 'textObjectManipulation' }, { keys: 'i', type: 'motion', motion: 'textObjectManipulation', motionArgs: { textObjectInner: true }}, // Search { keys: '/', type: 'search', searchArgs: { forward: true, querySrc: 'prompt', toJumplist: true }}, { keys: '?', type: 'search', searchArgs: { forward: false, querySrc: 'prompt', toJumplist: true }}, { keys: '*', type: 'search', searchArgs: { forward: true, querySrc: 'wordUnderCursor', wholeWordOnly: true, toJumplist: true }}, { keys: '#', type: 'search', searchArgs: { forward: false, querySrc: 'wordUnderCursor', wholeWordOnly: true, toJumplist: true }}, { keys: 'g*', type: 'search', searchArgs: { forward: true, querySrc: 'wordUnderCursor', toJumplist: true }}, { keys: 'g#', type: 'search', searchArgs: { forward: false, querySrc: 'wordUnderCursor', toJumplist: true }}, // Ex command { keys: ':', type: 'ex' } ]; var defaultKeymapLength = defaultKeymap.length; /** * Ex commands * Care must be taken when adding to the default Ex command map. For any * pair of commands that have a shared prefix, at least one of their * shortNames must not match the prefix of the other command. */ var defaultExCommandMap = [ { name: 'colorscheme', shortName: 'colo' }, { name: 'map' }, { name: 'imap', shortName: 'im' }, { name: 'nmap', shortName: 'nm' }, { name: 'vmap', shortName: 'vm' }, { name: 'unmap' }, { name: 'write', shortName: 'w' }, { name: 'undo', shortName: 'u' }, { name: 'redo', shortName: 'red' }, { name: 'set', shortName: 'se' }, { name: 'setlocal', shortName: 'setl' }, { name: 'setglobal', shortName: 'setg' }, { name: 'sort', shortName: 'sor' }, { name: 'substitute', shortName: 's', possiblyAsync: true }, { name: 'nohlsearch', shortName: 'noh' }, { name: 'yank', shortName: 'y' }, { name: 'delmarks', shortName: 'delm' }, { name: 'registers', shortName: 'reg', excludeFromCommandHistory: true }, { name: 'vglobal', shortName: 'v' }, { name: 'delete', shortName: 'd' }, { name: 'join', shortName: 'j' }, { name: 'global', shortName: 'g' } ]; function enterVimMode(cm) { cm.setOption('disableInput', true); cm.setOption('showCursorWhenSelecting', false); CodeMirror.signal(cm, "vim-mode-change", {mode: "normal"}); cm.on('cursorActivity', onCursorActivity); maybeInitVimState(cm); CodeMirror.on(cm.getInputField(), 'paste', getOnPasteFn(cm)); } function leaveVimMode(cm) { cm.setOption('disableInput', false); cm.off('cursorActivity', onCursorActivity); CodeMirror.off(cm.getInputField(), 'paste', getOnPasteFn(cm)); cm.state.vim = null; if (highlightTimeout) clearTimeout(highlightTimeout); } function detachVimMap(cm, next) { if (this == CodeMirror.keyMap.vim) { cm.options.$customCursor = null; CodeMirror.rmClass(cm.getWrapperElement(), "cm-fat-cursor"); } if (!next || next.attach != attachVimMap) leaveVimMode(cm); } function attachVimMap(cm, prev) { if (this == CodeMirror.keyMap.vim) { if (cm.curOp) cm.curOp.selectionChanged = true; cm.options.$customCursor = transformCursor; CodeMirror.addClass(cm.getWrapperElement(), "cm-fat-cursor"); } if (!prev || prev.attach != attachVimMap) enterVimMode(cm); } // Deprecated, simply setting the keymap works again. CodeMirror.defineOption('vimMode', false, function(cm, val, prev) { if (val && cm.getOption("keyMap") != "vim") cm.setOption("keyMap", "vim"); else if (!val && prev != CodeMirror.Init && /^vim/.test(cm.getOption("keyMap"))) cm.setOption("keyMap", "default"); }); function cmKey(key, cm) { if (!cm) { return undefined; } if (this[key]) { return this[key]; } var vimKey = cmKeyToVimKey(key); if (!vimKey) { return false; } var cmd = vimApi.findKey(cm, vimKey); if (typeof cmd == 'function') { CodeMirror.signal(cm, 'vim-keypress', vimKey); } return cmd; } var modifiers = {Shift:'S',Ctrl:'C',Alt:'A',Cmd:'D',Mod:'A',CapsLock:''}; var specialKeys = {Enter:'CR',Backspace:'BS',Delete:'Del',Insert:'Ins'}; function cmKeyToVimKey(key) { if (key.charAt(0) == '\'') { // Keypress character binding of format "'a'" return key.charAt(1); } var pieces = key.split(/-(?!$)/); var lastPiece = pieces[pieces.length - 1]; if (pieces.length == 1 && pieces[0].length == 1) { // No-modifier bindings use literal character bindings above. Skip. return false; } else if (pieces.length == 2 && pieces[0] == 'Shift' && lastPiece.length == 1) { // Ignore Shift+char bindings as they should be handled by literal character. return false; } var hasCharacter = false; for (var i = 0; i < pieces.length; i++) { var piece = pieces[i]; if (piece in modifiers) { pieces[i] = modifiers[piece]; } else { hasCharacter = true; } if (piece in specialKeys) { pieces[i] = specialKeys[piece]; } } if (!hasCharacter) { // Vim does not support modifier only keys. return false; } // TODO: Current bindings expect the character to be lower case, but // it looks like vim key notation uses upper case. if (isUpperCase(lastPiece)) { pieces[pieces.length - 1] = lastPiece.toLowerCase(); } return '<' + pieces.join('-') + '>'; } function getOnPasteFn(cm) { var vim = cm.state.vim; if (!vim.onPasteFn) { vim.onPasteFn = function() { if (!vim.insertMode) { cm.setCursor(offsetCursor(cm.getCursor(), 0, 1)); actions.enterInsertMode(cm, {}, vim); } }; } return vim.onPasteFn; } var numberRegex = /[\d]/; var wordCharTest = [CodeMirror.isWordChar, function(ch) { return ch && !CodeMirror.isWordChar(ch) && !/\s/.test(ch); }], bigWordCharTest = [function(ch) { return /\S/.test(ch); }]; function makeKeyRange(start, size) { var keys = []; for (var i = start; i < start + size; i++) { keys.push(String.fromCharCode(i)); } return keys; } var upperCaseAlphabet = makeKeyRange(65, 26); var lowerCaseAlphabet = makeKeyRange(97, 26); var numbers = makeKeyRange(48, 10); var validMarks = [].concat(upperCaseAlphabet, lowerCaseAlphabet, numbers, ['<', '>']); var validRegisters = [].concat(upperCaseAlphabet, lowerCaseAlphabet, numbers, ['-', '"', '.', ':', '_', '/', '+']); var upperCaseChars; try { upperCaseChars = new RegExp("^[\\p{Lu}]$", "u"); } catch (_) { upperCaseChars = /^[A-Z]$/; } function isLine(cm, line) { return line >= cm.firstLine() && line <= cm.lastLine(); } function isLowerCase(k) { return (/^[a-z]$/).test(k); } function isMatchableSymbol(k) { return '()[]{}'.indexOf(k) != -1; } function isNumber(k) { return numberRegex.test(k); } function isUpperCase(k) { return upperCaseChars.test(k); } function isWhiteSpaceString(k) { return (/^\s*$/).test(k); } function isEndOfSentenceSymbol(k) { return '.?!'.indexOf(k) != -1; } function inArray(val, arr) { for (var i = 0; i < arr.length; i++) { if (arr[i] == val) { return true; } } return false; } var options = {}; function defineOption(name, defaultValue, type, aliases, callback) { if (defaultValue === undefined && !callback) { throw Error('defaultValue is required unless callback is provided'); } if (!type) { type = 'string'; } options[name] = { type: type, defaultValue: defaultValue, callback: callback }; if (aliases) { for (var i = 0; i < aliases.length; i++) { options[aliases[i]] = options[name]; } } if (defaultValue) { setOption(name, defaultValue); } } function setOption(name, value, cm, cfg) { var option = options[name]; cfg = cfg || {}; var scope = cfg.scope; if (!option) { return new Error('Unknown option: ' + name); } if (option.type == 'boolean') { if (value && value !== true) { return new Error('Invalid argument: ' + name + '=' + value); } else if (value !== false) { // Boolean options are set to true if value is not defined. value = true; } } if (option.callback) { if (scope !== 'local') { option.callback(value, undefined); } if (scope !== 'global' && cm) { option.callback(value, cm); } } else { if (scope !== 'local') { option.value = option.type == 'boolean' ? !!value : value; } if (scope !== 'global' && cm) { cm.state.vim.options[name] = {value: value}; } } } function getOption(name, cm, cfg) { var option = options[name]; cfg = cfg || {}; var scope = cfg.scope; if (!option) { return new Error('Unknown option: ' + name); } if (option.callback) { var local = cm && option.callback(undefined, cm); if (scope !== 'global' && local !== undefined) { return local; } if (scope !== 'local') { return option.callback(); } return; } else { var local = (scope !== 'global') && (cm && cm.state.vim.options[name]); return (local || (scope !== 'local') && option || {}).value; } } defineOption('filetype', undefined, 'string', ['ft'], function(name, cm) { // Option is local. Do nothing for global. if (cm === undefined) { return; } // The 'filetype' option proxies to the CodeMirror 'mode' option. if (name === undefined) { var mode = cm.getOption('mode'); return mode == 'null' ? '' : mode; } else { var mode = name == '' ? 'null' : name; cm.setOption('mode', mode); } }); var createCircularJumpList = function() { var size = 100; var pointer = -1; var head = 0; var tail = 0; var buffer = new Array(size); function add(cm, oldCur, newCur) { var current = pointer % size; var curMark = buffer[current]; function useNextSlot(cursor) { var next = ++pointer % size; var trashMark = buffer[next]; if (trashMark) { trashMark.clear(); } buffer[next] = cm.setBookmark(cursor); } if (curMark) { var markPos = curMark.find(); // avoid recording redundant cursor position if (markPos && !cursorEqual(markPos, oldCur)) { useNextSlot(oldCur); } } else { useNextSlot(oldCur); } useNextSlot(newCur); head = pointer; tail = pointer - size + 1; if (tail < 0) { tail = 0; } } function move(cm, offset) { pointer += offset; if (pointer > head) { pointer = head; } else if (pointer < tail) { pointer = tail; } var mark = buffer[(size + pointer) % size]; // skip marks that are temporarily removed from text buffer if (mark && !mark.find()) { var inc = offset > 0 ? 1 : -1; var newCur; var oldCur = cm.getCursor(); do { pointer += inc; mark = buffer[(size + pointer) % size]; // skip marks that are the same as current position if (mark && (newCur = mark.find()) && !cursorEqual(oldCur, newCur)) { break; } } while (pointer < head && pointer > tail); } return mark; } function find(cm, offset) { var oldPointer = pointer; var mark = move(cm, offset); pointer = oldPointer; return mark && mark.find(); } return { cachedCursor: undefined, //used for # and * jumps add: add, find: find, move: move }; }; // Returns an object to track the changes associated insert mode. It // clones the object that is passed in, or creates an empty object one if // none is provided. var createInsertModeChanges = function(c) { if (c) { // Copy construction return { changes: c.changes, expectCursorActivityForChange: c.expectCursorActivityForChange }; } return { // Change list changes: [], // Set to true on change, false on cursorActivity. expectCursorActivityForChange: false }; }; function MacroModeState() { this.latestRegister = undefined; this.isPlaying = false; this.isRecording = false; this.replaySearchQueries = []; this.onRecordingDone = undefined; this.lastInsertModeChanges = createInsertModeChanges(); } MacroModeState.prototype = { exitMacroRecordMode: function() { var macroModeState = vimGlobalState.macroModeState; if (macroModeState.onRecordingDone) { macroModeState.onRecordingDone(); // close dialog } macroModeState.onRecordingDone = undefined; macroModeState.isRecording = false; }, enterMacroRecordMode: function(cm, registerName) { var register = vimGlobalState.registerController.getRegister(registerName); if (register) { register.clear(); this.latestRegister = registerName; if (cm.openDialog) { this.onRecordingDone = cm.openDialog( document.createTextNode('(recording)['+registerName+']'), null, {bottom:true}); } this.isRecording = true; } } }; function maybeInitVimState(cm) { if (!cm.state.vim) { // Store instance state in the CodeMirror object. cm.state.vim = { inputState: new InputState(), // Vim's input state that triggered the last edit, used to repeat // motions and operators with '.'. lastEditInputState: undefined, // Vim's action command before the last edit, used to repeat actions // with '.' and insert mode repeat. lastEditActionCommand: undefined, // When using jk for navigation, if you move from a longer line to a // shorter line, the cursor may clip to the end of the shorter line. // If j is pressed again and cursor goes to the next line, the // cursor should go back to its horizontal position on the longer // line if it can. This is to keep track of the horizontal position. lastHPos: -1, // Doing the same with screen-position for gj/gk lastHSPos: -1, // The last motion command run. Cleared if a non-motion command gets // executed in between. lastMotion: null, marks: {}, insertMode: false, // Repeat count for changes made in insert mode, triggered by key // sequences like 3,i. Only exists when insertMode is true. insertModeRepeat: undefined, visualMode: false, // If we are in visual line mode. No effect if visualMode is false. visualLine: false, visualBlock: false, lastSelection: null, lastPastedText: null, sel: {}, // Buffer-local/window-local values of vim options. options: {} }; } return cm.state.vim; } var vimGlobalState; function resetVimGlobalState() { vimGlobalState = { // The current search query. searchQuery: null, // Whether we are searching backwards. searchIsReversed: false, // Replace part of the last substituted pattern lastSubstituteReplacePart: undefined, jumpList: createCircularJumpList(), macroModeState: new MacroModeState, // Recording latest f, t, F or T motion command. lastCharacterSearch: {increment:0, forward:true, selectedCharacter:''}, registerController: new RegisterController({}), // search history buffer searchHistoryController: new HistoryController(), // ex Command history buffer exCommandHistoryController : new HistoryController() }; for (var optionName in options) { var option = options[optionName]; option.value = option.defaultValue; } } var lastInsertModeKeyTimer; var vimApi = { enterVimMode: enterVimMode, leaveVimMode: leaveVimMode, buildKeyMap: function() { // TODO: Convert keymap into dictionary format for fast lookup. }, // Testing hook, though it might be useful to expose the register // controller anyway. getRegisterController: function() { return vimGlobalState.registerController; }, // Testing hook. resetVimGlobalState_: resetVimGlobalState, // Testing hook. getVimGlobalState_: function() { return vimGlobalState; }, // Testing hook. maybeInitVimState_: maybeInitVimState, suppressErrorLogging: false, InsertModeKey: InsertModeKey, map: function(lhs, rhs, ctx) { // Add user defined key bindings. exCommandDispatcher.map(lhs, rhs, ctx); }, unmap: function(lhs, ctx) { return exCommandDispatcher.unmap(lhs, ctx); }, // Non-recursive map function. // NOTE: This will not create mappings to key maps that aren't present // in the default key map. See TODO at bottom of function. noremap: function(lhs, rhs, ctx) { function toCtxArray(ctx) { return ctx ? [ctx] : ['normal', 'insert', 'visual']; } var ctxsToMap = toCtxArray(ctx); // Look through all actual defaults to find a map candidate. var actualLength = defaultKeymap.length, origLength = defaultKeymapLength; var goodMappings = [] for (var i = actualLength - origLength; i < actualLength && ctxsToMap.length; i++) { var mapping = defaultKeymap[i]; // Omit mappings that operate in the wrong context(s) and those of invalid type. if (mapping.keys == rhs && (!ctx || !mapping.context || mapping.context === ctx) && mapping.type.substr(0, 2) !== 'ex' && mapping.type.substr(0, 3) !== 'key') { // Make a shallow copy of the original keymap entry. var newMapping = {}; for (var key in mapping) { newMapping[key] = mapping[key]; } // Modify it point to the new mapping with the proper context. newMapping.keys = lhs; if (ctx && !newMapping.context) { newMapping.context = ctx; } // Add it to the list of keymaps to add goodMappings.unshift(newMapping); // Record the mapped contexts as complete. var mappedCtxs = toCtxArray(mapping.context); ctxsToMap = ctxsToMap.filter(function(el) { return mappedCtxs.indexOf(el) === -1; }); } } for (var newMapping of goodMappings){ // Add new mappings with a higher priority than the originals. this._mapCommand(newMapping); } // TODO: Create non-recursive keyToKey mappings for the unmapped contexts once those exist. }, // Remove all user-defined mappings for the provided context. mapclear: function(ctx) { // Partition the existing keymap into user-defined and true defaults. var actualLength = defaultKeymap.length, origLength = defaultKeymapLength; var userKeymap = defaultKeymap.slice(0, actualLength - origLength); defaultKeymap = defaultKeymap.slice(actualLength - origLength); if (ctx) { // If a specific context is being cleared, we need to keep mappings // from all other contexts. for (var i = userKeymap.length - 1; i >= 0; i--) { var mapping = userKeymap[i]; if (ctx !== mapping.context) { if (mapping.context) { this._mapCommand(mapping); } else { // `mapping` applies to all contexts so create keymap copies // for each context except the one being cleared. var contexts = ['normal', 'insert', 'visual']; for (var j in contexts) { if (contexts[j] !== ctx) { var newMapping = {}; for (var key in mapping) { newMapping[key] = mapping[key]; } newMapping.context = contexts[j]; this._mapCommand(newMapping); } } } } } } }, // TODO: Expose setOption and getOption as instance methods. Need to decide how to namespace // them, or somehow make them work with the existing CodeMirror setOption/getOption API. setOption: setOption, getOption: getOption, defineOption: defineOption, defineEx: function(name, prefix, func){ if (!prefix) { prefix = name; } else if (name.indexOf(prefix) !== 0) { throw new Error('(Vim.defineEx) "'+prefix+'" is not a prefix of "'+name+'", command not registered'); } exCommands[name]=func; exCommandDispatcher.commandMap_[prefix]={name:name, shortName:prefix, type:'api'}; }, handleKey: function (cm, key, origin) { var command = this.findKey(cm, key, origin); if (typeof command === 'function') { return command(); } }, multiSelectHandleKey: multiSelectHandleKey, /** * This is the outermost function called by CodeMirror, after keys have * been mapped to their Vim equivalents. * * Finds a command based on the key (and cached keys if there is a * multi-key sequence). Returns `undefined` if no key is matched, a noop * function if a partial match is found (multi-key), and a function to * execute the bound command if a a key is matched. The function always * returns true. */ findKey: function(cm, key, origin) { var vim = maybeInitVimState(cm); function handleMacroRecording() { var macroModeState = vimGlobalState.macroModeState; if (macroModeState.isRecording) { if (key == 'q') { macroModeState.exitMacroRecordMode(); clearInputState(cm); return true; } if (origin != 'mapping') { logKey(macroModeState, key); } } } function handleEsc() { if (key == '') { if (vim.visualMode) { // Get back to normal mode. exitVisualMode(cm); } else if (vim.insertMode) { // Get back to normal mode. exitInsertMode(cm); } else { // We're already in normal mode. Let '' be handled normally. return; } clearInputState(cm); return true; } } function doKeyToKey(keys) { // TODO: prevent infinite recursion. var match; while (keys) { // Pull off one command key, which is either a single character // or a special sequence wrapped in '<' and '>', e.g. ''. match = (/<\w+-.+?>|<\w+>|./).exec(keys); key = match[0]; keys = keys.substring(match.index + key.length); vimApi.handleKey(cm, key, 'mapping'); } } function handleKeyInsertMode() { if (handleEsc()) { return true; } vim.inputState.keyBuffer.push(key); var keys = vim.inputState.keyBuffer.join(""); var keysAreChars = key.length == 1; var match = commandDispatcher.matchCommand(keys, defaultKeymap, vim.inputState, 'insert'); var changeQueue = vim.inputState.changeQueue; if (match.type == 'none') { clearInputState(cm); return false; } else if (match.type == 'partial') { if (lastInsertModeKeyTimer) { window.clearTimeout(lastInsertModeKeyTimer); } lastInsertModeKeyTimer = keysAreChars && window.setTimeout( function() { if (vim.insertMode && vim.inputState.keyBuffer.length) { clearInputState(cm); } }, getOption('insertModeEscKeysTimeout')); if (keysAreChars) { var selections = cm.listSelections(); if (!changeQueue || changeQueue.removed.length != selections.length) changeQueue = vim.inputState.changeQueue = new ChangeQueue; changeQueue.inserted += key; for (var i = 0; i < selections.length; i++) { var from = cursorMin(selections[i].anchor, selections[i].head); var to = cursorMax(selections[i].anchor, selections[i].head); var text = cm.getRange(from, cm.state.overwrite ? offsetCursor(to, 0, 1) : to); changeQueue.removed[i] = (changeQueue.removed[i] || "") + text; } } return !keysAreChars; } if (lastInsertModeKeyTimer) { window.clearTimeout(lastInsertModeKeyTimer); } if (match.command && changeQueue) { var selections = cm.listSelections(); for (var i = 0; i < selections.length; i++) { var here = selections[i].head; cm.replaceRange(changeQueue.removed[i] || "", offsetCursor(here, 0, -changeQueue.inserted.length), here, '+input'); } vimGlobalState.macroModeState.lastInsertModeChanges.changes.pop(); } if (!match.command) clearInputState(cm); return match.command; } function handleKeyNonInsertMode() { if (handleMacroRecording() || handleEsc()) { return true; } vim.inputState.keyBuffer.push(key); var keys = vim.inputState.keyBuffer.join(""); if (/^[1-9]\d*$/.test(keys)) { return true; } var keysMatcher = /^(\d*)(.*)$/.exec(keys); if (!keysMatcher) { clearInputState(cm); return false; } var context = vim.visualMode ? 'visual' : 'normal'; var mainKey = keysMatcher[2] || keysMatcher[1]; if (vim.inputState.operatorShortcut && vim.inputState.operatorShortcut.slice(-1) == mainKey) { // multikey operators act linewise by repeating only the last character mainKey = vim.inputState.operatorShortcut; } var match = commandDispatcher.matchCommand(mainKey, defaultKeymap, vim.inputState, context); if (match.type == 'none') { clearInputState(cm); return false; } else if (match.type == 'partial') { return true; } else if (match.type == 'clear') { clearInputState(cm); return true; } vim.inputState.keyBuffer.length = 0; keysMatcher = /^(\d*)(.*)$/.exec(keys); if (keysMatcher[1] && keysMatcher[1] != '0') { vim.inputState.pushRepeatDigit(keysMatcher[1]); } return match.command; } var command; if (vim.insertMode) { command = handleKeyInsertMode(); } else { command = handleKeyNonInsertMode(); } if (command === false) { return !vim.insertMode && key.length === 1 ? function() { return true; } : undefined; } else if (command === true) { // TODO: Look into using CodeMirror's multi-key handling. // Return no-op since we are caching the key. Counts as handled, but // don't want act on it just yet. return function() { return true; }; } else { return function() { return cm.operation(function() { cm.curOp.isVimOp = true; try { if (command.type == 'keyToKey') { doKeyToKey(command.toKeys); } else { commandDispatcher.processCommand(cm, vim, command); } } catch (e) { // clear VIM state in case it's in a bad state. cm.state.vim = undefined; maybeInitVimState(cm); if (!vimApi.suppressErrorLogging) { console['log'](e); } throw e; } return true; }); }; } }, handleEx: function(cm, input) { exCommandDispatcher.processCommand(cm, input); }, defineMotion: defineMotion, defineAction: defineAction, defineOperator: defineOperator, mapCommand: mapCommand, _mapCommand: _mapCommand, defineRegister: defineRegister, exitVisualMode: exitVisualMode, exitInsertMode: exitInsertMode }; // Represents the current input state. function InputState() { this.prefixRepeat = []; this.motionRepeat = []; this.operator = null; this.operatorArgs = null; this.motion = null; this.motionArgs = null; this.keyBuffer = []; // For matching multi-key commands. this.registerName = null; // Defaults to the unnamed register. this.changeQueue = null; // For restoring text used by insert mode keybindings } InputState.prototype.pushRepeatDigit = function(n) { if (!this.operator) { this.prefixRepeat = this.prefixRepeat.concat(n); } else { this.motionRepeat = this.motionRepeat.concat(n); } }; InputState.prototype.getRepeat = function() { var repeat = 0; if (this.prefixRepeat.length > 0 || this.motionRepeat.length > 0) { repeat = 1; if (this.prefixRepeat.length > 0) { repeat *= parseInt(this.prefixRepeat.join(''), 10); } if (this.motionRepeat.length > 0) { repeat *= parseInt(this.motionRepeat.join(''), 10); } } return repeat; }; function clearInputState(cm, reason) { cm.state.vim.inputState = new InputState(); CodeMirror.signal(cm, 'vim-command-done', reason); } function ChangeQueue() { this.removed = []; this.inserted = ""; } /* * Register stores information about copy and paste registers. Besides * text, a register must store whether it is linewise (i.e., when it is * pasted, should it insert itself into a new line, or should the text be * inserted at the cursor position.) */ function Register(text, linewise, blockwise) { this.clear(); this.keyBuffer = [text || '']; this.insertModeChanges = []; this.searchQueries = []; this.linewise = !!linewise; this.blockwise = !!blockwise; } Register.prototype = { setText: function(text, linewise, blockwise) { this.keyBuffer = [text || '']; this.linewise = !!linewise; this.blockwise = !!blockwise; }, pushText: function(text, linewise) { // if this register has ever been set to linewise, use linewise. if (linewise) { if (!this.linewise) { this.keyBuffer.push('\n'); } this.linewise = true; } this.keyBuffer.push(text); }, pushInsertModeChanges: function(changes) { this.insertModeChanges.push(createInsertModeChanges(changes)); }, pushSearchQuery: function(query) { this.searchQueries.push(query); }, clear: function() { this.keyBuffer = []; this.insertModeChanges = []; this.searchQueries = []; this.linewise = false; }, toString: function() { return this.keyBuffer.join(''); } }; /** * Defines an external register. * * The name should be a single character that will be used to reference the register. * The register should support setText, pushText, clear, and toString(). See Register * for a reference implementation. */ function defineRegister(name, register) { var registers = vimGlobalState.registerController.registers; if (!name || name.length != 1) { throw Error('Register name must be 1 character'); } if (registers[name]) { throw Error('Register already defined ' + name); } registers[name] = register; validRegisters.push(name); } /* * vim registers allow you to keep many independent copy and paste buffers. * See http://usevim.com/2012/04/13/registers/ for an introduction. * * RegisterController keeps the state of all the registers. An initial * state may be passed in. The unnamed register '"' will always be * overridden. */ function RegisterController(registers) { this.registers = registers; this.unnamedRegister = registers['"'] = new Register(); registers['.'] = new Register(); registers[':'] = new Register(); registers['/'] = new Register(); registers['+'] = new Register(); } RegisterController.prototype = { pushText: function(registerName, operator, text, linewise, blockwise) { // The black hole register, "_, means delete/yank to nowhere. if (registerName === '_') return; if (linewise && text.charAt(text.length - 1) !== '\n'){ text += '\n'; } // Lowercase and uppercase registers refer to the same register. // Uppercase just means append. var register = this.isValidRegister(registerName) ? this.getRegister(registerName) : null; // if no register/an invalid register was specified, things go to the // default registers if (!register) { switch (operator) { case 'yank': // The 0 register contains the text from the most recent yank. this.registers['0'] = new Register(text, linewise, blockwise); break; case 'delete': case 'change': if (text.indexOf('\n') == -1) { // Delete less than 1 line. Update the small delete register. this.registers['-'] = new Register(text, linewise); } else { // Shift down the contents of the numbered registers and put the // deleted text into register 1. this.shiftNumericRegisters_(); this.registers['1'] = new Register(text, linewise); } break; } // Make sure the unnamed register is set to what just happened this.unnamedRegister.setText(text, linewise, blockwise); return; } // If we've gotten to this point, we've actually specified a register var append = isUpperCase(registerName); if (append) { register.pushText(text, linewise); } else { register.setText(text, linewise, blockwise); } if (registerName === '+') { navigator.clipboard.writeText(text); } // The unnamed register always has the same value as the last used // register. this.unnamedRegister.setText(register.toString(), linewise); }, // Gets the register named @name. If one of @name doesn't already exist, // create it. If @name is invalid, return the unnamedRegister. getRegister: function(name) { if (!this.isValidRegister(name)) { return this.unnamedRegister; } name = name.toLowerCase(); if (!this.registers[name]) { this.registers[name] = new Register(); } return this.registers[name]; }, isValidRegister: function(name) { return name && inArray(name, validRegisters); }, shiftNumericRegisters_: function() { for (var i = 9; i >= 2; i--) { this.registers[i] = this.getRegister('' + (i - 1)); } } }; function HistoryController() { this.historyBuffer = []; this.iterator = 0; this.initialPrefix = null; } HistoryController.prototype = { // the input argument here acts a user entered prefix for a small time // until we start autocompletion in which case it is the autocompleted. nextMatch: function (input, up) { var historyBuffer = this.historyBuffer; var dir = up ? -1 : 1; if (this.initialPrefix === null) this.initialPrefix = input; for (var i = this.iterator + dir; up ? i >= 0 : i < historyBuffer.length; i+= dir) { var element = historyBuffer[i]; for (var j = 0; j <= element.length; j++) { if (this.initialPrefix == element.substring(0, j)) { this.iterator = i; return element; } } } // should return the user input in case we reach the end of buffer. if (i >= historyBuffer.length) { this.iterator = historyBuffer.length; return this.initialPrefix; } // return the last autocompleted query or exCommand as it is. if (i < 0 ) return input; }, pushInput: function(input) { var index = this.historyBuffer.indexOf(input); if (index > -1) this.historyBuffer.splice(index, 1); if (input.length) this.historyBuffer.push(input); }, reset: function() { this.initialPrefix = null; this.iterator = this.historyBuffer.length; } }; var commandDispatcher = { matchCommand: function(keys, keyMap, inputState, context) { var matches = commandMatches(keys, keyMap, context, inputState); if (!matches.full && !matches.partial) { return {type: 'none'}; } else if (!matches.full && matches.partial) { return {type: 'partial'}; } var bestMatch; for (var i = 0; i < matches.full.length; i++) { var match = matches.full[i]; if (!bestMatch) { bestMatch = match; } } if (bestMatch.keys.slice(-11) == '') { var character = lastChar(keys); if (!character || character.length > 1) return {type: 'clear'}; inputState.selectedCharacter = character; } return {type: 'full', command: bestMatch}; }, processCommand: function(cm, vim, command) { vim.inputState.repeatOverride = command.repeatOverride; switch (command.type) { case 'motion': this.processMotion(cm, vim, command); break; case 'operator': this.processOperator(cm, vim, command); break; case 'operatorMotion': this.processOperatorMotion(cm, vim, command); break; case 'action': this.processAction(cm, vim, command); break; case 'search': this.processSearch(cm, vim, command); break; case 'ex': case 'keyToEx': this.processEx(cm, vim, command); break; default: break; } }, processMotion: function(cm, vim, command) { vim.inputState.motion = command.motion; vim.inputState.motionArgs = copyArgs(command.motionArgs); this.evalInput(cm, vim); }, processOperator: function(cm, vim, command) { var inputState = vim.inputState; if (inputState.operator) { if (inputState.operator == command.operator) { // Typing an operator twice like 'dd' makes the operator operate // linewise inputState.motion = 'expandToLine'; inputState.motionArgs = { linewise: true }; this.evalInput(cm, vim); return; } else { // 2 different operators in a row doesn't make sense. clearInputState(cm); } } inputState.operator = command.operator; inputState.operatorArgs = copyArgs(command.operatorArgs); if (command.keys.length > 1) { inputState.operatorShortcut = command.keys; } if (command.exitVisualBlock) { vim.visualBlock = false; updateCmSelection(cm); } if (vim.visualMode) { // Operating on a selection in visual mode. We don't need a motion. this.evalInput(cm, vim); } }, processOperatorMotion: function(cm, vim, command) { var visualMode = vim.visualMode; var operatorMotionArgs = copyArgs(command.operatorMotionArgs); if (operatorMotionArgs) { // Operator motions may have special behavior in visual mode. if (visualMode && operatorMotionArgs.visualLine) { vim.visualLine = true; } } this.processOperator(cm, vim, command); if (!visualMode) { this.processMotion(cm, vim, command); } }, processAction: function(cm, vim, command) { var inputState = vim.inputState; var repeat = inputState.getRepeat(); var repeatIsExplicit = !!repeat; var actionArgs = copyArgs(command.actionArgs) || {}; if (inputState.selectedCharacter) { actionArgs.selectedCharacter = inputState.selectedCharacter; } // Actions may or may not have motions and operators. Do these first. if (command.operator) { this.processOperator(cm, vim, command); } if (command.motion) { this.processMotion(cm, vim, command); } if (command.motion || command.operator) { this.evalInput(cm, vim); } actionArgs.repeat = repeat || 1; actionArgs.repeatIsExplicit = repeatIsExplicit; actionArgs.registerName = inputState.registerName; clearInputState(cm); vim.lastMotion = null; if (command.isEdit) { this.recordLastEdit(vim, inputState, command); } actions[command.action](cm, actionArgs, vim); }, processSearch: function(cm, vim, command) { if (!cm.getSearchCursor) { // Search depends on SearchCursor. return; } var forward = command.searchArgs.forward; var wholeWordOnly = command.searchArgs.wholeWordOnly; getSearchState(cm).setReversed(!forward); var promptPrefix = (forward) ? '/' : '?'; var originalQuery = getSearchState(cm).getQuery(); var originalScrollPos = cm.getScrollInfo(); function handleQuery(query, ignoreCase, smartCase) { vimGlobalState.searchHistoryController.pushInput(query); vimGlobalState.searchHistoryController.reset(); try { updateSearchQuery(cm, query, ignoreCase, smartCase); } catch (e) { showConfirm(cm, 'Invalid regex: ' + query); clearInputState(cm); return; } commandDispatcher.processMotion(cm, vim, { type: 'motion', motion: 'findNext', motionArgs: { forward: true, toJumplist: command.searchArgs.toJumplist } }); } function onPromptClose(query) { cm.scrollTo(originalScrollPos.left, originalScrollPos.top); handleQuery(query, true /** ignoreCase */, true /** smartCase */); var macroModeState = vimGlobalState.macroModeState; if (macroModeState.isRecording) { logSearchQuery(macroModeState, query); } } function onPromptKeyUp(e, query, close) { var keyName = CodeMirror.keyName(e), up, offset; if (keyName == 'Up' || keyName == 'Down') { up = keyName == 'Up' ? true : false; offset = e.target ? e.target.selectionEnd : 0; query = vimGlobalState.searchHistoryController.nextMatch(query, up) || ''; close(query); if (offset && e.target) e.target.selectionEnd = e.target.selectionStart = Math.min(offset, e.target.value.length); } else { if ( keyName != 'Left' && keyName != 'Right' && keyName != 'Ctrl' && keyName != 'Alt' && keyName != 'Shift') vimGlobalState.searchHistoryController.reset(); } var parsedQuery; try { parsedQuery = updateSearchQuery(cm, query, true /** ignoreCase */, true /** smartCase */); } catch (e) { // Swallow bad regexes for incremental search. } if (parsedQuery) { cm.scrollIntoView(findNext(cm, !forward, parsedQuery), 30); } else { clearSearchHighlight(cm); cm.scrollTo(originalScrollPos.left, originalScrollPos.top); } } function onPromptKeyDown(e, query, close) { var keyName = CodeMirror.keyName(e); if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[' || (keyName == 'Backspace' && query == '')) { vimGlobalState.searchHistoryController.pushInput(query); vimGlobalState.searchHistoryController.reset(); updateSearchQuery(cm, originalQuery); clearSearchHighlight(cm); cm.scrollTo(originalScrollPos.left, originalScrollPos.top); CodeMirror.e_stop(e); clearInputState(cm); close(); cm.focus(); } else if (keyName == 'Up' || keyName == 'Down') { CodeMirror.e_stop(e); } else if (keyName == 'Ctrl-U') { // Ctrl-U clears input. CodeMirror.e_stop(e); close(''); } } switch (command.searchArgs.querySrc) { case 'prompt': var macroModeState = vimGlobalState.macroModeState; if (macroModeState.isPlaying) { var query = macroModeState.replaySearchQueries.shift(); handleQuery(query, true /** ignoreCase */, false /** smartCase */); } else { showPrompt(cm, { onClose: onPromptClose, prefix: promptPrefix, desc: '(JavaScript regexp)', onKeyUp: onPromptKeyUp, onKeyDown: onPromptKeyDown }); } break; case 'wordUnderCursor': var word = expandWordUnderCursor(cm, false /** inclusive */, false /** innerWord */, false /** bigWord */, true /** noSymbol */); var isKeyword = true; if (!word) { word = expandWordUnderCursor(cm, false /** inclusive */, false /** innerWord */, false /** bigWord */, false /** noSymbol */); isKeyword = false; } if (!word) { return; } var query = cm.getLine(word.start.line).substring(word.start.ch, word.end.ch); if (isKeyword && wholeWordOnly) { query = '\\b' + query + '\\b'; } else { query = escapeRegex(query); } // cachedCursor is used to save the old position of the cursor // when * or # causes vim to seek for the nearest word and shift // the cursor before entering the motion. vimGlobalState.jumpList.cachedCursor = cm.getCursor(); cm.setCursor(word.start); handleQuery(query, true /** ignoreCase */, false /** smartCase */); break; } }, processEx: function(cm, vim, command) { function onPromptClose(input) { // Give the prompt some time to close so that if processCommand shows // an error, the elements don't overlap. vimGlobalState.exCommandHistoryController.pushInput(input); vimGlobalState.exCommandHistoryController.reset(); exCommandDispatcher.processCommand(cm, input); if (cm.state.vim) clearInputState(cm); } function onPromptKeyDown(e, input, close) { var keyName = CodeMirror.keyName(e), up, offset; if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[' || (keyName == 'Backspace' && input == '')) { vimGlobalState.exCommandHistoryController.pushInput(input); vimGlobalState.exCommandHistoryController.reset(); CodeMirror.e_stop(e); clearInputState(cm); close(); cm.focus(); } if (keyName == 'Up' || keyName == 'Down') { CodeMirror.e_stop(e); up = keyName == 'Up' ? true : false; offset = e.target ? e.target.selectionEnd : 0; input = vimGlobalState.exCommandHistoryController.nextMatch(input, up) || ''; close(input); if (offset && e.target) e.target.selectionEnd = e.target.selectionStart = Math.min(offset, e.target.value.length); } else if (keyName == 'Ctrl-U') { // Ctrl-U clears input. CodeMirror.e_stop(e); close(''); } else { if ( keyName != 'Left' && keyName != 'Right' && keyName != 'Ctrl' && keyName != 'Alt' && keyName != 'Shift') vimGlobalState.exCommandHistoryController.reset(); } } if (command.type == 'keyToEx') { // Handle user defined Ex to Ex mappings exCommandDispatcher.processCommand(cm, command.exArgs.input); } else { if (vim.visualMode) { showPrompt(cm, { onClose: onPromptClose, prefix: ':', value: '\'<,\'>', onKeyDown: onPromptKeyDown, selectValueOnOpen: false}); } else { showPrompt(cm, { onClose: onPromptClose, prefix: ':', onKeyDown: onPromptKeyDown}); } } }, evalInput: function(cm, vim) { // If the motion command is set, execute both the operator and motion. // Otherwise return. var inputState = vim.inputState; var motion = inputState.motion; var motionArgs = inputState.motionArgs || {}; var operator = inputState.operator; var operatorArgs = inputState.operatorArgs || {}; var registerName = inputState.registerName; var sel = vim.sel; // TODO: Make sure cm and vim selections are identical outside visual mode. var origHead = copyCursor(vim.visualMode ? clipCursorToContent(cm, sel.head): cm.getCursor('head')); var origAnchor = copyCursor(vim.visualMode ? clipCursorToContent(cm, sel.anchor) : cm.getCursor('anchor')); var oldHead = copyCursor(origHead); var oldAnchor = copyCursor(origAnchor); var newHead, newAnchor; var repeat; if (operator) { this.recordLastEdit(vim, inputState); } if (inputState.repeatOverride !== undefined) { // If repeatOverride is specified, that takes precedence over the // input state's repeat. Used by Ex mode and can be user defined. repeat = inputState.repeatOverride; } else { repeat = inputState.getRepeat(); } if (repeat > 0 && motionArgs.explicitRepeat) { motionArgs.repeatIsExplicit = true; } else if (motionArgs.noRepeat || (!motionArgs.explicitRepeat && repeat === 0)) { repeat = 1; motionArgs.repeatIsExplicit = false; } if (inputState.selectedCharacter) { // If there is a character input, stick it in all of the arg arrays. motionArgs.selectedCharacter = operatorArgs.selectedCharacter = inputState.selectedCharacter; } motionArgs.repeat = repeat; clearInputState(cm); if (motion) { var motionResult = motions[motion](cm, origHead, motionArgs, vim, inputState); vim.lastMotion = motions[motion]; if (!motionResult) { return; } if (motionArgs.toJumplist) { var jumpList = vimGlobalState.jumpList; // if the current motion is # or *, use cachedCursor var cachedCursor = jumpList.cachedCursor; if (cachedCursor) { recordJumpPosition(cm, cachedCursor, motionResult); delete jumpList.cachedCursor; } else { recordJumpPosition(cm, origHead, motionResult); } } if (motionResult instanceof Array) { newAnchor = motionResult[0]; newHead = motionResult[1]; } else { newHead = motionResult; } // TODO: Handle null returns from motion commands better. if (!newHead) { newHead = copyCursor(origHead); } if (vim.visualMode) { if (!(vim.visualBlock && newHead.ch === Infinity)) { newHead = clipCursorToContent(cm, newHead, oldHead); } if (newAnchor) { newAnchor = clipCursorToContent(cm, newAnchor); } newAnchor = newAnchor || oldAnchor; sel.anchor = newAnchor; sel.head = newHead; updateCmSelection(cm); updateMark(cm, vim, '<', cursorIsBefore(newAnchor, newHead) ? newAnchor : newHead); updateMark(cm, vim, '>', cursorIsBefore(newAnchor, newHead) ? newHead : newAnchor); } else if (!operator) { newHead = clipCursorToContent(cm, newHead, oldHead); cm.setCursor(newHead.line, newHead.ch); } } if (operator) { if (operatorArgs.lastSel) { // Replaying a visual mode operation newAnchor = oldAnchor; var lastSel = operatorArgs.lastSel; var lineOffset = Math.abs(lastSel.head.line - lastSel.anchor.line); var chOffset = Math.abs(lastSel.head.ch - lastSel.anchor.ch); if (lastSel.visualLine) { // Linewise Visual mode: The same number of lines. newHead = new Pos(oldAnchor.line + lineOffset, oldAnchor.ch); } else if (lastSel.visualBlock) { // Blockwise Visual mode: The same number of lines and columns. newHead = new Pos(oldAnchor.line + lineOffset, oldAnchor.ch + chOffset); } else if (lastSel.head.line == lastSel.anchor.line) { // Normal Visual mode within one line: The same number of characters. newHead = new Pos(oldAnchor.line, oldAnchor.ch + chOffset); } else { // Normal Visual mode with several lines: The same number of lines, in the // last line the same number of characters as in the last line the last time. newHead = new Pos(oldAnchor.line + lineOffset, oldAnchor.ch); } vim.visualMode = true; vim.visualLine = lastSel.visualLine; vim.visualBlock = lastSel.visualBlock; sel = vim.sel = { anchor: newAnchor, head: newHead }; updateCmSelection(cm); } else if (vim.visualMode) { operatorArgs.lastSel = { anchor: copyCursor(sel.anchor), head: copyCursor(sel.head), visualBlock: vim.visualBlock, visualLine: vim.visualLine }; } var curStart, curEnd, linewise, mode; var cmSel; if (vim.visualMode) { // Init visual op curStart = cursorMin(sel.head, sel.anchor); curEnd = cursorMax(sel.head, sel.anchor); linewise = vim.visualLine || operatorArgs.linewise; mode = vim.visualBlock ? 'block' : linewise ? 'line' : 'char'; var newPositions = updateSelectionForSurrogateCharacters(cm, curStart, curEnd); cmSel = makeCmSelection(cm, { anchor: newPositions.start, head: newPositions.end }, mode); if (linewise) { var ranges = cmSel.ranges; if (mode == 'block') { // Linewise operators in visual block mode extend to end of line for (var i = 0; i < ranges.length; i++) { ranges[i].head.ch = lineLength(cm, ranges[i].head.line); } } else if (mode == 'line') { ranges[0].head = new Pos(ranges[0].head.line + 1, 0); } } } else { // Init motion op curStart = copyCursor(newAnchor || oldAnchor); curEnd = copyCursor(newHead || oldHead); if (cursorIsBefore(curEnd, curStart)) { var tmp = curStart; curStart = curEnd; curEnd = tmp; } linewise = motionArgs.linewise || operatorArgs.linewise; if (linewise) { // Expand selection to entire line. expandSelectionToLine(cm, curStart, curEnd); } else if (motionArgs.forward) { // Clip to trailing newlines only if the motion goes forward. clipToLine(cm, curStart, curEnd); } mode = 'char'; var exclusive = !motionArgs.inclusive || linewise; var newPositions = updateSelectionForSurrogateCharacters(cm, curStart, curEnd); cmSel = makeCmSelection(cm, { anchor: newPositions.start, head: newPositions.end }, mode, exclusive); } cm.setSelections(cmSel.ranges, cmSel.primary); vim.lastMotion = null; operatorArgs.repeat = repeat; // For indent in visual mode. operatorArgs.registerName = registerName; // Keep track of linewise as it affects how paste and change behave. operatorArgs.linewise = linewise; var operatorMoveTo = operators[operator]( cm, operatorArgs, cmSel.ranges, oldAnchor, newHead); if (vim.visualMode) { exitVisualMode(cm, operatorMoveTo != null); } if (operatorMoveTo) { cm.setCursor(operatorMoveTo); } } }, recordLastEdit: function(vim, inputState, actionCommand) { var macroModeState = vimGlobalState.macroModeState; if (macroModeState.isPlaying) { return; } vim.lastEditInputState = inputState; vim.lastEditActionCommand = actionCommand; macroModeState.lastInsertModeChanges.changes = []; macroModeState.lastInsertModeChanges.expectCursorActivityForChange = false; macroModeState.lastInsertModeChanges.visualBlock = vim.visualBlock ? vim.sel.head.line - vim.sel.anchor.line : 0; } }; /** * typedef {Object{line:number,ch:number}} Cursor An object containing the * position of the cursor. */ // All of the functions below return Cursor objects. var motions = { moveToTopLine: function(cm, _head, motionArgs) { var line = getUserVisibleLines(cm).top + motionArgs.repeat -1; return new Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line))); }, moveToMiddleLine: function(cm) { var range = getUserVisibleLines(cm); var line = Math.floor((range.top + range.bottom) * 0.5); return new Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line))); }, moveToBottomLine: function(cm, _head, motionArgs) { var line = getUserVisibleLines(cm).bottom - motionArgs.repeat +1; return new Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line))); }, expandToLine: function(_cm, head, motionArgs) { // Expands forward to end of line, and then to next line if repeat is // >1. Does not handle backward motion! var cur = head; return new Pos(cur.line + motionArgs.repeat - 1, Infinity); }, findNext: function(cm, _head, motionArgs) { var state = getSearchState(cm); var query = state.getQuery(); if (!query) { return; } var prev = !motionArgs.forward; // If search is initiated with ? instead of /, negate direction. prev = (state.isReversed()) ? !prev : prev; highlightSearchMatches(cm, query); return findNext(cm, prev/** prev */, query, motionArgs.repeat); }, /** * Find and select the next occurrence of the search query. If the cursor is currently * within a match, then find and select the current match. Otherwise, find the next occurrence in the * appropriate direction. * * This differs from `findNext` in the following ways: * * 1. Instead of only returning the "from", this returns a "from", "to" range. * 2. If the cursor is currently inside a search match, this selects the current match * instead of the next match. * 3. If there is no associated operator, this will turn on visual mode. */ findAndSelectNextInclusive: function(cm, _head, motionArgs, vim, prevInputState) { var state = getSearchState(cm); var query = state.getQuery(); if (!query) { return; } var prev = !motionArgs.forward; prev = (state.isReversed()) ? !prev : prev; // next: [from, to] | null var next = findNextFromAndToInclusive(cm, prev, query, motionArgs.repeat, vim); // No matches. if (!next) { return; } // If there's an operator that will be executed, return the selection. if (prevInputState.operator) { return next; } // At this point, we know that there is no accompanying operator -- let's // deal with visual mode in order to select an appropriate match. var from = next[0]; // For whatever reason, when we use the "to" as returned by searchcursor.js directly, // the resulting selection is extended by 1 char. Let's shrink it so that only the // match is selected. var to = new Pos(next[1].line, next[1].ch - 1); if (vim.visualMode) { // If we were in visualLine or visualBlock mode, get out of it. if (vim.visualLine || vim.visualBlock) { vim.visualLine = false; vim.visualBlock = false; CodeMirror.signal(cm, "vim-mode-change", {mode: "visual", subMode: ""}); } // If we're currently in visual mode, we should extend the selection to include // the search result. var anchor = vim.sel.anchor; if (anchor) { if (state.isReversed()) { if (motionArgs.forward) { return [anchor, from]; } return [anchor, to]; } else { if (motionArgs.forward) { return [anchor, to]; } return [anchor, from]; } } } else { // Let's turn visual mode on. vim.visualMode = true; vim.visualLine = false; vim.visualBlock = false; CodeMirror.signal(cm, "vim-mode-change", {mode: "visual", subMode: ""}); } return prev ? [to, from] : [from, to]; }, goToMark: function(cm, _head, motionArgs, vim) { var pos = getMarkPos(cm, vim, motionArgs.selectedCharacter); if (pos) { return motionArgs.linewise ? { line: pos.line, ch: findFirstNonWhiteSpaceCharacter(cm.getLine(pos.line)) } : pos; } return null; }, moveToOtherHighlightedEnd: function(cm, _head, motionArgs, vim) { if (vim.visualBlock && motionArgs.sameLine) { var sel = vim.sel; return [ clipCursorToContent(cm, new Pos(sel.anchor.line, sel.head.ch)), clipCursorToContent(cm, new Pos(sel.head.line, sel.anchor.ch)) ]; } else { return ([vim.sel.head, vim.sel.anchor]); } }, jumpToMark: function(cm, head, motionArgs, vim) { var best = head; for (var i = 0; i < motionArgs.repeat; i++) { var cursor = best; for (var key in vim.marks) { if (!isLowerCase(key)) { continue; } var mark = vim.marks[key].find(); var isWrongDirection = (motionArgs.forward) ? cursorIsBefore(mark, cursor) : cursorIsBefore(cursor, mark); if (isWrongDirection) { continue; } if (motionArgs.linewise && (mark.line == cursor.line)) { continue; } var equal = cursorEqual(cursor, best); var between = (motionArgs.forward) ? cursorIsBetween(cursor, mark, best) : cursorIsBetween(best, mark, cursor); if (equal || between) { best = mark; } } } if (motionArgs.linewise) { // Vim places the cursor on the first non-whitespace character of // the line if there is one, else it places the cursor at the end // of the line, regardless of whether a mark was found. best = new Pos(best.line, findFirstNonWhiteSpaceCharacter(cm.getLine(best.line))); } return best; }, moveByCharacters: function(_cm, head, motionArgs) { var cur = head; var repeat = motionArgs.repeat; var ch = motionArgs.forward ? cur.ch + repeat : cur.ch - repeat; return new Pos(cur.line, ch); }, moveByLines: function(cm, head, motionArgs, vim) { var cur = head; var endCh = cur.ch; // Depending what our last motion was, we may want to do different // things. If our last motion was moving vertically, we want to // preserve the HPos from our last horizontal move. If our last motion // was going to the end of a line, moving vertically we should go to // the end of the line, etc. switch (vim.lastMotion) { case this.moveByLines: case this.moveByDisplayLines: case this.moveByScroll: case this.moveToColumn: case this.moveToEol: endCh = vim.lastHPos; break; default: vim.lastHPos = endCh; } var repeat = motionArgs.repeat+(motionArgs.repeatOffset||0); var line = motionArgs.forward ? cur.line + repeat : cur.line - repeat; var first = cm.firstLine(); var last = cm.lastLine(); var posV = cm.findPosV(cur, (motionArgs.forward ? repeat : -repeat), 'line', vim.lastHSPos); var hasMarkedText = motionArgs.forward ? posV.line > line : posV.line < line; if (hasMarkedText) { line = posV.line; endCh = posV.ch; } // Vim go to line begin or line end when cursor at first/last line and // move to previous/next line is triggered. if (line < first && cur.line == first){ return this.moveToStartOfLine(cm, head, motionArgs, vim); } else if (line > last && cur.line == last){ return moveToEol(cm, head, motionArgs, vim, true); } if (motionArgs.toFirstChar){ endCh=findFirstNonWhiteSpaceCharacter(cm.getLine(line)); vim.lastHPos = endCh; } vim.lastHSPos = cm.charCoords(new Pos(line, endCh),'div').left; return new Pos(line, endCh); }, moveByDisplayLines: function(cm, head, motionArgs, vim) { var cur = head; switch (vim.lastMotion) { case this.moveByDisplayLines: case this.moveByScroll: case this.moveByLines: case this.moveToColumn: case this.moveToEol: break; default: vim.lastHSPos = cm.charCoords(cur,'div').left; } var repeat = motionArgs.repeat; var res=cm.findPosV(cur,(motionArgs.forward ? repeat : -repeat),'line',vim.lastHSPos); if (res.hitSide) { if (motionArgs.forward) { var lastCharCoords = cm.charCoords(res, 'div'); var goalCoords = { top: lastCharCoords.top + 8, left: vim.lastHSPos }; var res = cm.coordsChar(goalCoords, 'div'); } else { var resCoords = cm.charCoords(new Pos(cm.firstLine(), 0), 'div'); resCoords.left = vim.lastHSPos; res = cm.coordsChar(resCoords, 'div'); } } vim.lastHPos = res.ch; return res; }, moveByPage: function(cm, head, motionArgs) { // CodeMirror only exposes functions that move the cursor page down, so // doing this bad hack to move the cursor and move it back. evalInput // will move the cursor to where it should be in the end. var curStart = head; var repeat = motionArgs.repeat; return cm.findPosV(curStart, (motionArgs.forward ? repeat : -repeat), 'page'); }, moveByParagraph: function(cm, head, motionArgs) { var dir = motionArgs.forward ? 1 : -1; return findParagraph(cm, head, motionArgs.repeat, dir); }, moveBySentence: function(cm, head, motionArgs) { var dir = motionArgs.forward ? 1 : -1; return findSentence(cm, head, motionArgs.repeat, dir); }, moveByScroll: function(cm, head, motionArgs, vim) { var scrollbox = cm.getScrollInfo(); var curEnd = null; var repeat = motionArgs.repeat; if (!repeat) { repeat = scrollbox.clientHeight / (2 * cm.defaultTextHeight()); } var orig = cm.charCoords(head, 'local'); motionArgs.repeat = repeat; curEnd = motions.moveByDisplayLines(cm, head, motionArgs, vim); if (!curEnd) { return null; } var dest = cm.charCoords(curEnd, 'local'); cm.scrollTo(null, scrollbox.top + dest.top - orig.top); return curEnd; }, moveByWords: function(cm, head, motionArgs) { return moveToWord(cm, head, motionArgs.repeat, !!motionArgs.forward, !!motionArgs.wordEnd, !!motionArgs.bigWord); }, moveTillCharacter: function(cm, _head, motionArgs) { var repeat = motionArgs.repeat; var curEnd = moveToCharacter(cm, repeat, motionArgs.forward, motionArgs.selectedCharacter); var increment = motionArgs.forward ? -1 : 1; recordLastCharacterSearch(increment, motionArgs); if (!curEnd) return null; curEnd.ch += increment; return curEnd; }, moveToCharacter: function(cm, head, motionArgs) { var repeat = motionArgs.repeat; recordLastCharacterSearch(0, motionArgs); return moveToCharacter(cm, repeat, motionArgs.forward, motionArgs.selectedCharacter) || head; }, moveToSymbol: function(cm, head, motionArgs) { var repeat = motionArgs.repeat; return findSymbol(cm, repeat, motionArgs.forward, motionArgs.selectedCharacter) || head; }, moveToColumn: function(cm, head, motionArgs, vim) { var repeat = motionArgs.repeat; // repeat is equivalent to which column we want to move to! vim.lastHPos = repeat - 1; vim.lastHSPos = cm.charCoords(head,'div').left; return moveToColumn(cm, repeat); }, moveToEol: function(cm, head, motionArgs, vim) { return moveToEol(cm, head, motionArgs, vim, false); }, moveToFirstNonWhiteSpaceCharacter: function(cm, head) { // Go to the start of the line where the text begins, or the end for // whitespace-only lines var cursor = head; return new Pos(cursor.line, findFirstNonWhiteSpaceCharacter(cm.getLine(cursor.line))); }, moveToMatchedSymbol: function(cm, head) { var cursor = head; var line = cursor.line; var ch = cursor.ch; var lineText = cm.getLine(line); var symbol; for (; ch < lineText.length; ch++) { symbol = lineText.charAt(ch); if (symbol && isMatchableSymbol(symbol)) { var style = cm.getTokenTypeAt(new Pos(line, ch + 1)); if (style !== "string" && style !== "comment") { break; } } } if (ch < lineText.length) { // Only include angle brackets in analysis if they are being matched. var re = (ch === '<' || ch === '>') ? /[(){}[\]<>]/ : /[(){}[\]]/; var matched = cm.findMatchingBracket(new Pos(line, ch), {bracketRegex: re}); return matched.to; } else { return cursor; } }, moveToStartOfLine: function(_cm, head) { return new Pos(head.line, 0); }, moveToLineOrEdgeOfDocument: function(cm, _head, motionArgs) { var lineNum = motionArgs.forward ? cm.lastLine() : cm.firstLine(); if (motionArgs.repeatIsExplicit) { lineNum = motionArgs.repeat - cm.getOption('firstLineNumber'); } return new Pos(lineNum, findFirstNonWhiteSpaceCharacter(cm.getLine(lineNum))); }, moveToStartOfDisplayLine: function(cm) { cm.execCommand("goLineLeft"); return cm.getCursor(); }, moveToEndOfDisplayLine: function(cm) { cm.execCommand("goLineRight"); var head = cm.getCursor(); if (head.sticky == "before") head.ch--; return head; }, textObjectManipulation: function(cm, head, motionArgs, vim) { // TODO: lots of possible exceptions that can be thrown here. Try da( // outside of a () block. var mirroredPairs = {'(': ')', ')': '(', '{': '}', '}': '{', '[': ']', ']': '[', '<': '>', '>': '<'}; var selfPaired = {'\'': true, '"': true, '`': true}; var character = motionArgs.selectedCharacter; // 'b' refers to '()' block. // 'B' refers to '{}' block. if (character == 'b') { character = '('; } else if (character == 'B') { character = '{'; } // Inclusive is the difference between a and i // TODO: Instead of using the additional text object map to perform text // object operations, merge the map into the defaultKeyMap and use // motionArgs to define behavior. Define separate entries for 'aw', // 'iw', 'a[', 'i[', etc. var inclusive = !motionArgs.textObjectInner; var tmp; if (mirroredPairs[character]) { tmp = selectCompanionObject(cm, head, character, inclusive); } else if (selfPaired[character]) { tmp = findBeginningAndEnd(cm, head, character, inclusive); } else if (character === 'W') { tmp = expandWordUnderCursor(cm, inclusive, !inclusive /** innerWord */, true /** bigWord */); } else if (character === 'w') { tmp = expandWordUnderCursor(cm, inclusive, !inclusive /** innerWord */, false /** bigWord */); } else if (character === 'p') { tmp = findParagraph(cm, head, motionArgs.repeat, 0, inclusive); motionArgs.linewise = true; if (vim.visualMode) { if (!vim.visualLine) { vim.visualLine = true; } } else { var operatorArgs = vim.inputState.operatorArgs; if (operatorArgs) { operatorArgs.linewise = true; } tmp.end.line--; } } else if (character === 't') { tmp = expandTagUnderCursor(cm, head, inclusive); } else if (character === 's') { // account for cursor on end of sentence symbol var content = cm.getLine(head.line); if (head.ch > 0 && isEndOfSentenceSymbol(content[head.ch])) { head.ch -= 1; } var end = getSentence(cm, head, motionArgs.repeat, 1, inclusive) var start = getSentence(cm, head, motionArgs.repeat, -1, inclusive) // closer vim behaviour, 'a' only takes the space after the sentence if there is one before and after if (isWhiteSpaceString(cm.getLine(start.line)[start.ch]) && isWhiteSpaceString(cm.getLine(end.line)[end.ch -1])) { start = {line: start.line, ch: start.ch + 1} } tmp = {start: start, end: end}; } if (!tmp) { // No valid text object, don't move. return null; } if (!cm.state.vim.visualMode) { return [tmp.start, tmp.end]; } else { return expandSelection(cm, tmp.start, tmp.end); } }, repeatLastCharacterSearch: function(cm, head, motionArgs) { var lastSearch = vimGlobalState.lastCharacterSearch; var repeat = motionArgs.repeat; var forward = motionArgs.forward === lastSearch.forward; var increment = (lastSearch.increment ? 1 : 0) * (forward ? -1 : 1); cm.moveH(-increment, 'char'); motionArgs.inclusive = forward ? true : false; var curEnd = moveToCharacter(cm, repeat, forward, lastSearch.selectedCharacter); if (!curEnd) { cm.moveH(increment, 'char'); return head; } curEnd.ch += increment; return curEnd; } }; function defineMotion(name, fn) { motions[name] = fn; } function fillArray(val, times) { var arr = []; for (var i = 0; i < times; i++) { arr.push(val); } return arr; } /** * An operator acts on a text selection. It receives the list of selections * as input. The corresponding CodeMirror selection is guaranteed to * match the input selection. */ var operators = { change: function(cm, args, ranges) { var finalHead, text; var vim = cm.state.vim; var anchor = ranges[0].anchor, head = ranges[0].head; if (!vim.visualMode) { text = cm.getRange(anchor, head); var lastState = vim.lastEditInputState || {}; if (lastState.motion == "moveByWords" && !isWhiteSpaceString(text)) { // Exclude trailing whitespace if the range is not all whitespace. var match = (/\s+$/).exec(text); if (match && lastState.motionArgs && lastState.motionArgs.forward) { head = offsetCursor(head, 0, - match[0].length); text = text.slice(0, - match[0].length); } } var prevLineEnd = new Pos(anchor.line - 1, Number.MAX_VALUE); var wasLastLine = cm.firstLine() == cm.lastLine(); if (head.line > cm.lastLine() && args.linewise && !wasLastLine) { cm.replaceRange('', prevLineEnd, head); } else { cm.replaceRange('', anchor, head); } if (args.linewise) { // Push the next line back down, if there is a next line. if (!wasLastLine) { cm.setCursor(prevLineEnd); CodeMirror.commands.newlineAndIndent(cm); } // make sure cursor ends up at the end of the line. anchor.ch = Number.MAX_VALUE; } finalHead = anchor; } else if (args.fullLine) { head.ch = Number.MAX_VALUE; head.line--; cm.setSelection(anchor, head) text = cm.getSelection(); cm.replaceSelection(""); finalHead = anchor; } else { text = cm.getSelection(); var replacement = fillArray('', ranges.length); cm.replaceSelections(replacement); finalHead = cursorMin(ranges[0].head, ranges[0].anchor); } vimGlobalState.registerController.pushText( args.registerName, 'change', text, args.linewise, ranges.length > 1); actions.enterInsertMode(cm, {head: finalHead}, cm.state.vim); }, // delete is a javascript keyword. 'delete': function(cm, args, ranges) { var finalHead, text; var vim = cm.state.vim; if (!vim.visualBlock) { var anchor = ranges[0].anchor, head = ranges[0].head; if (args.linewise && head.line != cm.firstLine() && anchor.line == cm.lastLine() && anchor.line == head.line - 1) { // Special case for dd on last line (and first line). if (anchor.line == cm.firstLine()) { anchor.ch = 0; } else { anchor = new Pos(anchor.line - 1, lineLength(cm, anchor.line - 1)); } } text = cm.getRange(anchor, head); cm.replaceRange('', anchor, head); finalHead = anchor; if (args.linewise) { finalHead = motions.moveToFirstNonWhiteSpaceCharacter(cm, anchor); } } else { text = cm.getSelection(); var replacement = fillArray('', ranges.length); cm.replaceSelections(replacement); finalHead = cursorMin(ranges[0].head, ranges[0].anchor); } vimGlobalState.registerController.pushText( args.registerName, 'delete', text, args.linewise, vim.visualBlock); return clipCursorToContent(cm, finalHead); }, indent: function(cm, args, ranges) { var vim = cm.state.vim; if (cm.indentMore) { var repeat = (vim.visualMode) ? args.repeat : 1; for (var j = 0; j < repeat; j++) { if (args.indentRight) cm.indentMore(); else cm.indentLess(); } } else { var startLine = ranges[0].anchor.line; var endLine = vim.visualBlock ? ranges[ranges.length - 1].anchor.line : ranges[0].head.line; // In visual mode, n> shifts the selection right n times, instead of // shifting n lines right once. var repeat = (vim.visualMode) ? args.repeat : 1; if (args.linewise) { // The only way to delete a newline is to delete until the start of // the next line, so in linewise mode evalInput will include the next // line. We don't want this in indent, so we go back a line. endLine--; } for (var i = startLine; i <= endLine; i++) { for (var j = 0; j < repeat; j++) { cm.indentLine(i, args.indentRight); } } } return motions.moveToFirstNonWhiteSpaceCharacter(cm, ranges[0].anchor); }, indentAuto: function(cm, _args, ranges) { cm.execCommand("indentAuto"); return motions.moveToFirstNonWhiteSpaceCharacter(cm, ranges[0].anchor); }, changeCase: function(cm, args, ranges, oldAnchor, newHead) { var selections = cm.getSelections(); var swapped = []; var toLower = args.toLower; for (var j = 0; j < selections.length; j++) { var toSwap = selections[j]; var text = ''; if (toLower === true) { text = toSwap.toLowerCase(); } else if (toLower === false) { text = toSwap.toUpperCase(); } else { for (var i = 0; i < toSwap.length; i++) { var character = toSwap.charAt(i); text += isUpperCase(character) ? character.toLowerCase() : character.toUpperCase(); } } swapped.push(text); } cm.replaceSelections(swapped); if (args.shouldMoveCursor){ return newHead; } else if (!cm.state.vim.visualMode && args.linewise && ranges[0].anchor.line + 1 == ranges[0].head.line) { return motions.moveToFirstNonWhiteSpaceCharacter(cm, oldAnchor); } else if (args.linewise){ return oldAnchor; } else { return cursorMin(ranges[0].anchor, ranges[0].head); } }, yank: function(cm, args, ranges, oldAnchor) { var vim = cm.state.vim; var text = cm.getSelection(); var endPos = vim.visualMode ? cursorMin(vim.sel.anchor, vim.sel.head, ranges[0].head, ranges[0].anchor) : oldAnchor; vimGlobalState.registerController.pushText( args.registerName, 'yank', text, args.linewise, vim.visualBlock); return endPos; } }; function defineOperator(name, fn) { operators[name] = fn; } var actions = { jumpListWalk: function(cm, actionArgs, vim) { if (vim.visualMode) { return; } var repeat = actionArgs.repeat; var forward = actionArgs.forward; var jumpList = vimGlobalState.jumpList; var mark = jumpList.move(cm, forward ? repeat : -repeat); var markPos = mark ? mark.find() : undefined; markPos = markPos ? markPos : cm.getCursor(); cm.setCursor(markPos); }, scroll: function(cm, actionArgs, vim) { if (vim.visualMode) { return; } var repeat = actionArgs.repeat || 1; var lineHeight = cm.defaultTextHeight(); var top = cm.getScrollInfo().top; var delta = lineHeight * repeat; var newPos = actionArgs.forward ? top + delta : top - delta; var cursor = copyCursor(cm.getCursor()); var cursorCoords = cm.charCoords(cursor, 'local'); if (actionArgs.forward) { if (newPos > cursorCoords.top) { cursor.line += (newPos - cursorCoords.top) / lineHeight; cursor.line = Math.ceil(cursor.line); cm.setCursor(cursor); cursorCoords = cm.charCoords(cursor, 'local'); cm.scrollTo(null, cursorCoords.top); } else { // Cursor stays within bounds. Just reposition the scroll window. cm.scrollTo(null, newPos); } } else { var newBottom = newPos + cm.getScrollInfo().clientHeight; if (newBottom < cursorCoords.bottom) { cursor.line -= (cursorCoords.bottom - newBottom) / lineHeight; cursor.line = Math.floor(cursor.line); cm.setCursor(cursor); cursorCoords = cm.charCoords(cursor, 'local'); cm.scrollTo( null, cursorCoords.bottom - cm.getScrollInfo().clientHeight); } else { // Cursor stays within bounds. Just reposition the scroll window. cm.scrollTo(null, newPos); } } }, scrollToCursor: function(cm, actionArgs) { var lineNum = cm.getCursor().line; var charCoords = cm.charCoords(new Pos(lineNum, 0), 'local'); var height = cm.getScrollInfo().clientHeight; var y = charCoords.top; switch (actionArgs.position) { case 'center': y = charCoords.bottom - height / 2; break; case 'bottom': var lineLastCharPos = new Pos(lineNum, cm.getLine(lineNum).length - 1); var lineLastCharCoords = cm.charCoords(lineLastCharPos, 'local'); var lineHeight = lineLastCharCoords.bottom - y; y = y - height + lineHeight break; } cm.scrollTo(null, y); }, replayMacro: function(cm, actionArgs, vim) { var registerName = actionArgs.selectedCharacter; var repeat = actionArgs.repeat; var macroModeState = vimGlobalState.macroModeState; if (registerName == '@') { registerName = macroModeState.latestRegister; } else { macroModeState.latestRegister = registerName; } while(repeat--){ executeMacroRegister(cm, vim, macroModeState, registerName); } }, enterMacroRecordMode: function(cm, actionArgs) { var macroModeState = vimGlobalState.macroModeState; var registerName = actionArgs.selectedCharacter; if (vimGlobalState.registerController.isValidRegister(registerName)) { macroModeState.enterMacroRecordMode(cm, registerName); } }, toggleOverwrite: function(cm) { if (!cm.state.overwrite) { cm.toggleOverwrite(true); cm.setOption('keyMap', 'vim-replace'); CodeMirror.signal(cm, "vim-mode-change", {mode: "replace"}); } else { cm.toggleOverwrite(false); cm.setOption('keyMap', 'vim-insert'); CodeMirror.signal(cm, "vim-mode-change", {mode: "insert"}); } }, enterInsertMode: function(cm, actionArgs, vim) { if (cm.getOption('readOnly')) { return; } vim.insertMode = true; vim.insertModeRepeat = actionArgs && actionArgs.repeat || 1; var insertAt = (actionArgs) ? actionArgs.insertAt : null; var sel = vim.sel; var head = actionArgs.head || cm.getCursor('head'); var height = cm.listSelections().length; if (insertAt == 'eol') { head = new Pos(head.line, lineLength(cm, head.line)); } else if (insertAt == 'bol') { head = new Pos(head.line, 0); } else if (insertAt == 'charAfter') { var newPosition = updateSelectionForSurrogateCharacters(cm, head, offsetCursor(head, 0, 1)); head = newPosition.end; } else if (insertAt == 'firstNonBlank') { var newPosition = updateSelectionForSurrogateCharacters(cm, head, motions.moveToFirstNonWhiteSpaceCharacter(cm, head)); head = newPosition.end; } else if (insertAt == 'startOfSelectedArea') { if (!vim.visualMode) return; if (!vim.visualBlock) { if (sel.head.line < sel.anchor.line) { head = sel.head; } else { head = new Pos(sel.anchor.line, 0); } } else { head = new Pos( Math.min(sel.head.line, sel.anchor.line), Math.min(sel.head.ch, sel.anchor.ch)); height = Math.abs(sel.head.line - sel.anchor.line) + 1; } } else if (insertAt == 'endOfSelectedArea') { if (!vim.visualMode) return; if (!vim.visualBlock) { if (sel.head.line >= sel.anchor.line) { head = offsetCursor(sel.head, 0, 1); } else { head = new Pos(sel.anchor.line, 0); } } else { head = new Pos( Math.min(sel.head.line, sel.anchor.line), Math.max(sel.head.ch, sel.anchor.ch) + 1); height = Math.abs(sel.head.line - sel.anchor.line) + 1; } } else if (insertAt == 'inplace') { if (vim.visualMode){ return; } } else if (insertAt == 'lastEdit') { head = getLastEditPos(cm) || head; } cm.setOption('disableInput', false); if (actionArgs && actionArgs.replace) { // Handle Replace-mode as a special case of insert mode. cm.toggleOverwrite(true); cm.setOption('keyMap', 'vim-replace'); CodeMirror.signal(cm, "vim-mode-change", {mode: "replace"}); } else { cm.toggleOverwrite(false); cm.setOption('keyMap', 'vim-insert'); CodeMirror.signal(cm, "vim-mode-change", {mode: "insert"}); } if (!vimGlobalState.macroModeState.isPlaying) { // Only record if not replaying. cm.on('change', onChange); CodeMirror.on(cm.getInputField(), 'keydown', onKeyEventTargetKeyDown); } if (vim.visualMode) { exitVisualMode(cm); } selectForInsert(cm, head, height); }, toggleVisualMode: function(cm, actionArgs, vim) { var repeat = actionArgs.repeat; var anchor = cm.getCursor(); var head; // TODO: The repeat should actually select number of characters/lines // equal to the repeat times the size of the previous visual // operation. if (!vim.visualMode) { // Entering visual mode vim.visualMode = true; vim.visualLine = !!actionArgs.linewise; vim.visualBlock = !!actionArgs.blockwise; head = clipCursorToContent( cm, new Pos(anchor.line, anchor.ch + repeat - 1)); var newPosition = updateSelectionForSurrogateCharacters(cm, anchor, head) vim.sel = { anchor: newPosition.start, head: newPosition.end }; CodeMirror.signal(cm, "vim-mode-change", {mode: "visual", subMode: vim.visualLine ? "linewise" : vim.visualBlock ? "blockwise" : ""}); updateCmSelection(cm); updateMark(cm, vim, '<', cursorMin(anchor, head)); updateMark(cm, vim, '>', cursorMax(anchor, head)); } else if (vim.visualLine ^ actionArgs.linewise || vim.visualBlock ^ actionArgs.blockwise) { // Toggling between modes vim.visualLine = !!actionArgs.linewise; vim.visualBlock = !!actionArgs.blockwise; CodeMirror.signal(cm, "vim-mode-change", {mode: "visual", subMode: vim.visualLine ? "linewise" : vim.visualBlock ? "blockwise" : ""}); updateCmSelection(cm); } else { exitVisualMode(cm); } }, reselectLastSelection: function(cm, _actionArgs, vim) { var lastSelection = vim.lastSelection; if (vim.visualMode) { updateLastSelection(cm, vim); } if (lastSelection) { var anchor = lastSelection.anchorMark.find(); var head = lastSelection.headMark.find(); if (!anchor || !head) { // If the marks have been destroyed due to edits, do nothing. return; } vim.sel = { anchor: anchor, head: head }; vim.visualMode = true; vim.visualLine = lastSelection.visualLine; vim.visualBlock = lastSelection.visualBlock; updateCmSelection(cm); updateMark(cm, vim, '<', cursorMin(anchor, head)); updateMark(cm, vim, '>', cursorMax(anchor, head)); CodeMirror.signal(cm, 'vim-mode-change', { mode: 'visual', subMode: vim.visualLine ? 'linewise' : vim.visualBlock ? 'blockwise' : ''}); } }, joinLines: function(cm, actionArgs, vim) { var curStart, curEnd; if (vim.visualMode) { curStart = cm.getCursor('anchor'); curEnd = cm.getCursor('head'); if (cursorIsBefore(curEnd, curStart)) { var tmp = curEnd; curEnd = curStart; curStart = tmp; } curEnd.ch = lineLength(cm, curEnd.line) - 1; } else { // Repeat is the number of lines to join. Minimum 2 lines. var repeat = Math.max(actionArgs.repeat, 2); curStart = cm.getCursor(); curEnd = clipCursorToContent(cm, new Pos(curStart.line + repeat - 1, Infinity)); } var finalCh = 0; for (var i = curStart.line; i < curEnd.line; i++) { finalCh = lineLength(cm, curStart.line); var text = ''; var nextStartCh = 0; if (!actionArgs.keepSpaces) { var nextLine = cm.getLine(curStart.line + 1); nextStartCh = nextLine.search(/\S/); if (nextStartCh == -1) { nextStartCh = nextLine.length; } else { text = " "; } } cm.replaceRange(text, new Pos(curStart.line, finalCh), new Pos(curStart.line + 1, nextStartCh)); } var curFinalPos = clipCursorToContent(cm, new Pos(curStart.line, finalCh)); if (vim.visualMode) { exitVisualMode(cm, false); } cm.setCursor(curFinalPos); }, newLineAndEnterInsertMode: function(cm, actionArgs, vim) { vim.insertMode = true; var insertAt = copyCursor(cm.getCursor()); if (insertAt.line === cm.firstLine() && !actionArgs.after) { // Special case for inserting newline before start of document. cm.replaceRange('\n', new Pos(cm.firstLine(), 0)); cm.setCursor(cm.firstLine(), 0); } else { insertAt.line = (actionArgs.after) ? insertAt.line : insertAt.line - 1; insertAt.ch = lineLength(cm, insertAt.line); cm.setCursor(insertAt); var newlineFn = CodeMirror.commands.newlineAndIndentContinueComment || CodeMirror.commands.newlineAndIndent; newlineFn(cm); } this.enterInsertMode(cm, { repeat: actionArgs.repeat }, vim); }, paste: function(cm, actionArgs, vim) { var register = vimGlobalState.registerController.getRegister( actionArgs.registerName); if (actionArgs.registerName === '+') { navigator.clipboard.readText().then((value) => { this.continuePaste(cm, actionArgs, vim, value, register); }) } else { var text = register.toString(); this.continuePaste(cm, actionArgs, vim, text, register); } }, continuePaste: function(cm, actionArgs, vim, text, register) { var cur = copyCursor(cm.getCursor()); if (!text) { return; } if (actionArgs.matchIndent) { var tabSize = cm.getOption("tabSize"); // length that considers tabs and tabSize var whitespaceLength = function(str) { var tabs = (str.split("\t").length - 1); var spaces = (str.split(" ").length - 1); return tabs * tabSize + spaces * 1; }; var currentLine = cm.getLine(cm.getCursor().line); var indent = whitespaceLength(currentLine.match(/^\s*/)[0]); // chomp last newline b/c don't want it to match /^\s*/gm var chompedText = text.replace(/\n$/, ''); var wasChomped = text !== chompedText; var firstIndent = whitespaceLength(text.match(/^\s*/)[0]); var text = chompedText.replace(/^\s*/gm, function(wspace) { var newIndent = indent + (whitespaceLength(wspace) - firstIndent); if (newIndent < 0) { return ""; } else if (cm.getOption("indentWithTabs")) { var quotient = Math.floor(newIndent / tabSize); return Array(quotient + 1).join('\t'); } else { return Array(newIndent + 1).join(' '); } }); text += wasChomped ? "\n" : ""; } if (actionArgs.repeat > 1) { var text = Array(actionArgs.repeat + 1).join(text); } var linewise = register.linewise; var blockwise = register.blockwise; if (blockwise) { text = text.split('\n'); if (linewise) { text.pop(); } for (var i = 0; i < text.length; i++) { text[i] = (text[i] == '') ? ' ' : text[i]; } cur.ch += actionArgs.after ? 1 : 0; cur.ch = Math.min(lineLength(cm, cur.line), cur.ch); } else if (linewise) { if(vim.visualMode) { text = vim.visualLine ? text.slice(0, -1) : '\n' + text.slice(0, text.length - 1) + '\n'; } else if (actionArgs.after) { // Move the newline at the end to the start instead, and paste just // before the newline character of the line we are on right now. text = '\n' + text.slice(0, text.length - 1); cur.ch = lineLength(cm, cur.line); } else { cur.ch = 0; } } else { cur.ch += actionArgs.after ? 1 : 0; } var curPosFinal; var idx; if (vim.visualMode) { // save the pasted text for reselection if the need arises vim.lastPastedText = text; var lastSelectionCurEnd; var selectedArea = getSelectedAreaRange(cm, vim); var selectionStart = selectedArea[0]; var selectionEnd = selectedArea[1]; var selectedText = cm.getSelection(); var selections = cm.listSelections(); var emptyStrings = new Array(selections.length).join('1').split('1'); // save the curEnd marker before it get cleared due to cm.replaceRange. if (vim.lastSelection) { lastSelectionCurEnd = vim.lastSelection.headMark.find(); } // push the previously selected text to unnamed register vimGlobalState.registerController.unnamedRegister.setText(selectedText); if (blockwise) { // first delete the selected text cm.replaceSelections(emptyStrings); // Set new selections as per the block length of the yanked text selectionEnd = new Pos(selectionStart.line + text.length-1, selectionStart.ch); cm.setCursor(selectionStart); selectBlock(cm, selectionEnd); cm.replaceSelections(text); curPosFinal = selectionStart; } else if (vim.visualBlock) { cm.replaceSelections(emptyStrings); cm.setCursor(selectionStart); cm.replaceRange(text, selectionStart, selectionStart); curPosFinal = selectionStart; } else { cm.replaceRange(text, selectionStart, selectionEnd); curPosFinal = cm.posFromIndex(cm.indexFromPos(selectionStart) + text.length - 1); } // restore the the curEnd marker if(lastSelectionCurEnd) { vim.lastSelection.headMark = cm.setBookmark(lastSelectionCurEnd); } if (linewise) { curPosFinal.ch=0; } } else { if (blockwise) { cm.setCursor(cur); for (var i = 0; i < text.length; i++) { var line = cur.line+i; if (line > cm.lastLine()) { cm.replaceRange('\n', new Pos(line, 0)); } var lastCh = lineLength(cm, line); if (lastCh < cur.ch) { extendLineToColumn(cm, line, cur.ch); } } cm.setCursor(cur); selectBlock(cm, new Pos(cur.line + text.length-1, cur.ch)); cm.replaceSelections(text); curPosFinal = cur; } else { cm.replaceRange(text, cur); // Now fine tune the cursor to where we want it. if (linewise && actionArgs.after) { curPosFinal = new Pos( cur.line + 1, findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line + 1))); } else if (linewise && !actionArgs.after) { curPosFinal = new Pos( cur.line, findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line))); } else if (!linewise && actionArgs.after) { idx = cm.indexFromPos(cur); curPosFinal = cm.posFromIndex(idx + text.length - 1); } else { idx = cm.indexFromPos(cur); curPosFinal = cm.posFromIndex(idx + text.length); } } } if (vim.visualMode) { exitVisualMode(cm, false); } cm.setCursor(curPosFinal); }, undo: function(cm, actionArgs) { cm.operation(function() { repeatFn(cm, CodeMirror.commands.undo, actionArgs.repeat)(); cm.setCursor(clipCursorToContent(cm, cm.getCursor('start'))); }); }, redo: function(cm, actionArgs) { repeatFn(cm, CodeMirror.commands.redo, actionArgs.repeat)(); }, setRegister: function(_cm, actionArgs, vim) { vim.inputState.registerName = actionArgs.selectedCharacter; }, insertRegister: function(cm, actionArgs, vim) { var registerName = actionArgs.selectedCharacter; var register = vimGlobalState.registerController.getRegister(registerName); var text = register && register.toString(); if (text) { cm.replaceSelection(text); } }, setMark: function(cm, actionArgs, vim) { var markName = actionArgs.selectedCharacter; updateMark(cm, vim, markName, cm.getCursor()); }, replace: function(cm, actionArgs, vim) { var replaceWith = actionArgs.selectedCharacter; var curStart = cm.getCursor(); var replaceTo; var curEnd; var selections = cm.listSelections(); if (vim.visualMode) { curStart = cm.getCursor('start'); curEnd = cm.getCursor('end'); } else { var line = cm.getLine(curStart.line); replaceTo = curStart.ch + actionArgs.repeat; if (replaceTo > line.length) { replaceTo=line.length; } curEnd = new Pos(curStart.line, replaceTo); } var newPositions = updateSelectionForSurrogateCharacters(cm, curStart, curEnd); curStart = newPositions.start; curEnd = newPositions.end; if (replaceWith=='\n') { if (!vim.visualMode) cm.replaceRange('', curStart, curEnd); // special case, where vim help says to replace by just one line-break (CodeMirror.commands.newlineAndIndentContinueComment || CodeMirror.commands.newlineAndIndent)(cm); } else { var replaceWithStr = cm.getRange(curStart, curEnd); // replace all surrogate characters with selected character replaceWithStr = replaceWithStr.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, replaceWith); //replace all characters in range by selected, but keep linebreaks replaceWithStr = replaceWithStr.replace(/[^\n]/g, replaceWith); if (vim.visualBlock) { // Tabs are split in visua block before replacing var spaces = new Array(cm.getOption("tabSize")+1).join(' '); replaceWithStr = cm.getSelection(); replaceWithStr = replaceWithStr.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, replaceWith); replaceWithStr = replaceWithStr.replace(/\t/g, spaces).replace(/[^\n]/g, replaceWith).split('\n'); cm.replaceSelections(replaceWithStr); } else { cm.replaceRange(replaceWithStr, curStart, curEnd); } if (vim.visualMode) { curStart = cursorIsBefore(selections[0].anchor, selections[0].head) ? selections[0].anchor : selections[0].head; cm.setCursor(curStart); exitVisualMode(cm, false); } else { cm.setCursor(offsetCursor(curEnd, 0, -1)); } } }, incrementNumberToken: function(cm, actionArgs) { var cur = cm.getCursor(); var lineStr = cm.getLine(cur.line); var re = /(-?)(?:(0x)([\da-f]+)|(0b|0|)(\d+))/gi; var match; var start; var end; var numberStr; while ((match = re.exec(lineStr)) !== null) { start = match.index; end = start + match[0].length; if (cur.ch < end)break; } if (!actionArgs.backtrack && (end <= cur.ch))return; if (match) { var baseStr = match[2] || match[4] var digits = match[3] || match[5] var increment = actionArgs.increase ? 1 : -1; var base = {'0b': 2, '0': 8, '': 10, '0x': 16}[baseStr.toLowerCase()]; var number = parseInt(match[1] + digits, base) + (increment * actionArgs.repeat); numberStr = number.toString(base); var zeroPadding = baseStr ? new Array(digits.length - numberStr.length + 1 + match[1].length).join('0') : '' if (numberStr.charAt(0) === '-') { numberStr = '-' + baseStr + zeroPadding + numberStr.substr(1); } else { numberStr = baseStr + zeroPadding + numberStr; } var from = new Pos(cur.line, start); var to = new Pos(cur.line, end); cm.replaceRange(numberStr, from, to); } else { return; } cm.setCursor(new Pos(cur.line, start + numberStr.length - 1)); }, repeatLastEdit: function(cm, actionArgs, vim) { var lastEditInputState = vim.lastEditInputState; if (!lastEditInputState) { return; } var repeat = actionArgs.repeat; if (repeat && actionArgs.repeatIsExplicit) { vim.lastEditInputState.repeatOverride = repeat; } else { repeat = vim.lastEditInputState.repeatOverride || repeat; } repeatLastEdit(cm, vim, repeat, false /** repeatForInsert */); }, indent: function(cm, actionArgs) { cm.indentLine(cm.getCursor().line, actionArgs.indentRight); }, exitInsertMode: exitInsertMode }; function defineAction(name, fn) { actions[name] = fn; } /* * Below are miscellaneous utility functions used by vim.js */ /** * Clips cursor to ensure that line is within the buffer's range * and is not inside surrogate pair * If includeLineBreak is true, then allow cur.ch == lineLength. */ function clipCursorToContent(cm, cur, oldCur) { var vim = cm.state.vim; var includeLineBreak = vim.insertMode || vim.visualMode; var line = Math.min(Math.max(cm.firstLine(), cur.line), cm.lastLine() ); var text = cm.getLine(line); var maxCh = text.length - 1 + Number(!!includeLineBreak); var ch = Math.min(Math.max(0, cur.ch), maxCh); // prevent cursor from entering surrogate pair var charCode = text.charCodeAt(ch); if (0xDC00 <= charCode && charCode <= 0xDFFF) { var direction = 1; if (oldCur && oldCur.line == line && oldCur.ch > ch) { direction = -1; } ch +=direction; if (ch > maxCh) ch -=2; } return new Pos(line, ch); } function copyArgs(args) { var ret = {}; for (var prop in args) { if (args.hasOwnProperty(prop)) { ret[prop] = args[prop]; } } return ret; } function offsetCursor(cur, offsetLine, offsetCh) { if (typeof offsetLine === 'object') { offsetCh = offsetLine.ch; offsetLine = offsetLine.line; } return new Pos(cur.line + offsetLine, cur.ch + offsetCh); } function commandMatches(keys, keyMap, context, inputState) { // Partial matches are not applied. They inform the key handler // that the current key sequence is a subsequence of a valid key // sequence, so that the key buffer is not cleared. var match, partial = [], full = []; for (var i = 0; i < keyMap.length; i++) { var command = keyMap[i]; if (context == 'insert' && command.context != 'insert' || command.context && command.context != context || inputState.operator && command.type == 'action' || !(match = commandMatch(keys, command.keys))) { continue; } if (match == 'partial') { partial.push(command); } if (match == 'full') { full.push(command); } } return { partial: partial.length && partial, full: full.length && full }; } function commandMatch(pressed, mapped) { if (mapped.slice(-11) == '') { // Last character matches anything. var prefixLen = mapped.length - 11; var pressedPrefix = pressed.slice(0, prefixLen); var mappedPrefix = mapped.slice(0, prefixLen); return pressedPrefix == mappedPrefix && pressed.length > prefixLen ? 'full' : mappedPrefix.indexOf(pressedPrefix) == 0 ? 'partial' : false; } else { return pressed == mapped ? 'full' : mapped.indexOf(pressed) == 0 ? 'partial' : false; } } function lastChar(keys) { var match = /^.*(<[^>]+>)$/.exec(keys); var selectedCharacter = match ? match[1] : keys.slice(-1); if (selectedCharacter.length > 1){ switch(selectedCharacter){ case '': selectedCharacter='\n'; break; case '': selectedCharacter=' '; break; default: selectedCharacter=''; break; } } return selectedCharacter; } function repeatFn(cm, fn, repeat) { return function() { for (var i = 0; i < repeat; i++) { fn(cm); } }; } function copyCursor(cur) { return new Pos(cur.line, cur.ch); } function cursorEqual(cur1, cur2) { return cur1.ch == cur2.ch && cur1.line == cur2.line; } function cursorIsBefore(cur1, cur2) { if (cur1.line < cur2.line) { return true; } if (cur1.line == cur2.line && cur1.ch < cur2.ch) { return true; } return false; } function cursorMin(cur1, cur2) { if (arguments.length > 2) { cur2 = cursorMin.apply(undefined, Array.prototype.slice.call(arguments, 1)); } return cursorIsBefore(cur1, cur2) ? cur1 : cur2; } function cursorMax(cur1, cur2) { if (arguments.length > 2) { cur2 = cursorMax.apply(undefined, Array.prototype.slice.call(arguments, 1)); } return cursorIsBefore(cur1, cur2) ? cur2 : cur1; } function cursorIsBetween(cur1, cur2, cur3) { // returns true if cur2 is between cur1 and cur3. var cur1before2 = cursorIsBefore(cur1, cur2); var cur2before3 = cursorIsBefore(cur2, cur3); return cur1before2 && cur2before3; } function lineLength(cm, lineNum) { return cm.getLine(lineNum).length; } function trim(s) { if (s.trim) { return s.trim(); } return s.replace(/^\s+|\s+$/g, ''); } function escapeRegex(s) { return s.replace(/([.?*+$\[\]\/\\(){}|\-])/g, '\\$1'); } function extendLineToColumn(cm, lineNum, column) { var endCh = lineLength(cm, lineNum); var spaces = new Array(column-endCh+1).join(' '); cm.setCursor(new Pos(lineNum, endCh)); cm.replaceRange(spaces, cm.getCursor()); } // This functions selects a rectangular block // of text with selectionEnd as any of its corner // Height of block: // Difference in selectionEnd.line and first/last selection.line // Width of the block: // Distance between selectionEnd.ch and any(first considered here) selection.ch function selectBlock(cm, selectionEnd) { var selections = [], ranges = cm.listSelections(); var head = copyCursor(cm.clipPos(selectionEnd)); var isClipped = !cursorEqual(selectionEnd, head); var curHead = cm.getCursor('head'); var primIndex = getIndex(ranges, curHead); var wasClipped = cursorEqual(ranges[primIndex].head, ranges[primIndex].anchor); var max = ranges.length - 1; var index = max - primIndex > primIndex ? max : 0; var base = ranges[index].anchor; var firstLine = Math.min(base.line, head.line); var lastLine = Math.max(base.line, head.line); var baseCh = base.ch, headCh = head.ch; var dir = ranges[index].head.ch - baseCh; var newDir = headCh - baseCh; if (dir > 0 && newDir <= 0) { baseCh++; if (!isClipped) { headCh--; } } else if (dir < 0 && newDir >= 0) { baseCh--; if (!wasClipped) { headCh++; } } else if (dir < 0 && newDir == -1) { baseCh--; headCh++; } for (var line = firstLine; line <= lastLine; line++) { var range = {anchor: new Pos(line, baseCh), head: new Pos(line, headCh)}; selections.push(range); } cm.setSelections(selections); selectionEnd.ch = headCh; base.ch = baseCh; return base; } function selectForInsert(cm, head, height) { var sel = []; for (var i = 0; i < height; i++) { var lineHead = offsetCursor(head, i, 0); sel.push({anchor: lineHead, head: lineHead}); } cm.setSelections(sel, 0); } // getIndex returns the index of the cursor in the selections. function getIndex(ranges, cursor, end) { for (var i = 0; i < ranges.length; i++) { var atAnchor = end != 'head' && cursorEqual(ranges[i].anchor, cursor); var atHead = end != 'anchor' && cursorEqual(ranges[i].head, cursor); if (atAnchor || atHead) { return i; } } return -1; } function getSelectedAreaRange(cm, vim) { var lastSelection = vim.lastSelection; var getCurrentSelectedAreaRange = function() { var selections = cm.listSelections(); var start = selections[0]; var end = selections[selections.length-1]; var selectionStart = cursorIsBefore(start.anchor, start.head) ? start.anchor : start.head; var selectionEnd = cursorIsBefore(end.anchor, end.head) ? end.head : end.anchor; return [selectionStart, selectionEnd]; }; var getLastSelectedAreaRange = function() { var selectionStart = cm.getCursor(); var selectionEnd = cm.getCursor(); var block = lastSelection.visualBlock; if (block) { var width = block.width; var height = block.height; selectionEnd = new Pos(selectionStart.line + height, selectionStart.ch + width); var selections = []; // selectBlock creates a 'proper' rectangular block. // We do not want that in all cases, so we manually set selections. for (var i = selectionStart.line; i < selectionEnd.line; i++) { var anchor = new Pos(i, selectionStart.ch); var head = new Pos(i, selectionEnd.ch); var range = {anchor: anchor, head: head}; selections.push(range); } cm.setSelections(selections); } else { var start = lastSelection.anchorMark.find(); var end = lastSelection.headMark.find(); var line = end.line - start.line; var ch = end.ch - start.ch; selectionEnd = {line: selectionEnd.line + line, ch: line ? selectionEnd.ch : ch + selectionEnd.ch}; if (lastSelection.visualLine) { selectionStart = new Pos(selectionStart.line, 0); selectionEnd = new Pos(selectionEnd.line, lineLength(cm, selectionEnd.line)); } cm.setSelection(selectionStart, selectionEnd); } return [selectionStart, selectionEnd]; }; if (!vim.visualMode) { // In case of replaying the action. return getLastSelectedAreaRange(); } else { return getCurrentSelectedAreaRange(); } } // Updates the previous selection with the current selection's values. This // should only be called in visual mode. function updateLastSelection(cm, vim) { var anchor = vim.sel.anchor; var head = vim.sel.head; // To accommodate the effect of lastPastedText in the last selection if (vim.lastPastedText) { head = cm.posFromIndex(cm.indexFromPos(anchor) + vim.lastPastedText.length); vim.lastPastedText = null; } vim.lastSelection = {'anchorMark': cm.setBookmark(anchor), 'headMark': cm.setBookmark(head), 'anchor': copyCursor(anchor), 'head': copyCursor(head), 'visualMode': vim.visualMode, 'visualLine': vim.visualLine, 'visualBlock': vim.visualBlock}; } function expandSelection(cm, start, end) { var sel = cm.state.vim.sel; var head = sel.head; var anchor = sel.anchor; var tmp; if (cursorIsBefore(end, start)) { tmp = end; end = start; start = tmp; } if (cursorIsBefore(head, anchor)) { head = cursorMin(start, head); anchor = cursorMax(anchor, end); } else { anchor = cursorMin(start, anchor); head = cursorMax(head, end); head = offsetCursor(head, 0, -1); if (head.ch == -1 && head.line != cm.firstLine()) { head = new Pos(head.line - 1, lineLength(cm, head.line - 1)); } } return [anchor, head]; } /** * Updates the CodeMirror selection to match the provided vim selection. * If no arguments are given, it uses the current vim selection state. */ function updateCmSelection(cm, sel, mode) { var vim = cm.state.vim; sel = sel || vim.sel; var mode = mode || vim.visualLine ? 'line' : vim.visualBlock ? 'block' : 'char'; var cmSel = makeCmSelection(cm, sel, mode); cm.setSelections(cmSel.ranges, cmSel.primary); } function makeCmSelection(cm, sel, mode, exclusive) { var head = copyCursor(sel.head); var anchor = copyCursor(sel.anchor); if (mode == 'char') { var headOffset = !exclusive && !cursorIsBefore(sel.head, sel.anchor) ? 1 : 0; var anchorOffset = cursorIsBefore(sel.head, sel.anchor) ? 1 : 0; head = offsetCursor(sel.head, 0, headOffset); anchor = offsetCursor(sel.anchor, 0, anchorOffset); return { ranges: [{anchor: anchor, head: head}], primary: 0 }; } else if (mode == 'line') { if (!cursorIsBefore(sel.head, sel.anchor)) { anchor.ch = 0; var lastLine = cm.lastLine(); if (head.line > lastLine) { head.line = lastLine; } head.ch = lineLength(cm, head.line); } else { head.ch = 0; anchor.ch = lineLength(cm, anchor.line); } return { ranges: [{anchor: anchor, head: head}], primary: 0 }; } else if (mode == 'block') { var top = Math.min(anchor.line, head.line), fromCh = anchor.ch, bottom = Math.max(anchor.line, head.line), toCh = head.ch; if (fromCh < toCh) { toCh += 1 } else { fromCh += 1 }; var height = bottom - top + 1; var primary = head.line == top ? 0 : height - 1; var ranges = []; for (var i = 0; i < height; i++) { ranges.push({ anchor: new Pos(top + i, fromCh), head: new Pos(top + i, toCh) }); } return { ranges: ranges, primary: primary }; } } function getHead(cm) { var cur = cm.getCursor('head'); if (cm.getSelection().length == 1) { // Small corner case when only 1 character is selected. The "real" // head is the left of head and anchor. cur = cursorMin(cur, cm.getCursor('anchor')); } return cur; } /** * If moveHead is set to false, the CodeMirror selection will not be * touched. The caller assumes the responsibility of putting the cursor * in the right place. */ function exitVisualMode(cm, moveHead) { var vim = cm.state.vim; if (moveHead !== false) { cm.setCursor(clipCursorToContent(cm, vim.sel.head)); } updateLastSelection(cm, vim); vim.visualMode = false; vim.visualLine = false; vim.visualBlock = false; if (!vim.insertMode) CodeMirror.signal(cm, "vim-mode-change", {mode: "normal"}); } // Remove any trailing newlines from the selection. For // example, with the caret at the start of the last word on the line, // 'dw' should word, but not the newline, while 'w' should advance the // caret to the first character of the next line. function clipToLine(cm, curStart, curEnd) { var selection = cm.getRange(curStart, curEnd); // Only clip if the selection ends with trailing newline + whitespace if (/\n\s*$/.test(selection)) { var lines = selection.split('\n'); // We know this is all whitespace. lines.pop(); // Cases: // 1. Last word is an empty line - do not clip the trailing '\n' // 2. Last word is not an empty line - clip the trailing '\n' var line; // Find the line containing the last word, and clip all whitespace up // to it. for (var line = lines.pop(); lines.length > 0 && line && isWhiteSpaceString(line); line = lines.pop()) { curEnd.line--; curEnd.ch = 0; } // If the last word is not an empty line, clip an additional newline if (line) { curEnd.line--; curEnd.ch = lineLength(cm, curEnd.line); } else { curEnd.ch = 0; } } } // Expand the selection to line ends. function expandSelectionToLine(_cm, curStart, curEnd) { curStart.ch = 0; curEnd.ch = 0; curEnd.line++; } function findFirstNonWhiteSpaceCharacter(text) { if (!text) { return 0; } var firstNonWS = text.search(/\S/); return firstNonWS == -1 ? text.length : firstNonWS; } function expandWordUnderCursor(cm, inclusive, innerWord, bigWord, noSymbol) { var cur = getHead(cm); var line = cm.getLine(cur.line); var idx = cur.ch; // Seek to first word or non-whitespace character, depending on if // noSymbol is true. var test = noSymbol ? wordCharTest[0] : bigWordCharTest [0]; if (innerWord && /\s/.test(line.charAt(idx))) { test = function(ch) { return /\s/.test(ch); }; } else { while (!test(line.charAt(idx))) { idx++; if (idx >= line.length) { return null; } } if (bigWord) { test = bigWordCharTest[0]; } else { test = wordCharTest[0]; if (!test(line.charAt(idx))) { test = wordCharTest[1]; } } } var end = idx, start = idx; while (test(line.charAt(end)) && end < line.length) { end++; } while (test(line.charAt(start)) && start >= 0) { start--; } start++; if (inclusive) { // If present, include all whitespace after word. // Otherwise, include all whitespace before word, except indentation. var wordEnd = end; while (/\s/.test(line.charAt(end)) && end < line.length) { end++; } if (wordEnd == end) { var wordStart = start; while (/\s/.test(line.charAt(start - 1)) && start > 0) { start--; } if (!start) { start = wordStart; } } } return { start: new Pos(cur.line, start), end: new Pos(cur.line, end) }; } /** * Depends on the following: * * - editor mode should be htmlmixedmode / xml * - mode/xml/xml.js should be loaded * - addon/fold/xml-fold.js should be loaded * * If any of the above requirements are not true, this function noops. * * This is _NOT_ a 100% accurate implementation of vim tag text objects. * The following caveats apply (based off cursory testing, I'm sure there * are other discrepancies): * * - Does not work inside comments: * ``` * * ``` * - Does not work when tags have different cases: * ``` *
    broken
    * ``` * - Does not work when cursor is inside a broken tag: * ``` *
    * ``` */ function expandTagUnderCursor(cm, head, inclusive) { var cur = head; if (!CodeMirror.findMatchingTag || !CodeMirror.findEnclosingTag) { return { start: cur, end: cur }; } var tags = CodeMirror.findMatchingTag(cm, head) || CodeMirror.findEnclosingTag(cm, head); if (!tags || !tags.open || !tags.close) { return { start: cur, end: cur }; } if (inclusive) { return { start: tags.open.from, end: tags.close.to }; } return { start: tags.open.to, end: tags.close.from }; } function recordJumpPosition(cm, oldCur, newCur) { if (!cursorEqual(oldCur, newCur)) { vimGlobalState.jumpList.add(cm, oldCur, newCur); } } function recordLastCharacterSearch(increment, args) { vimGlobalState.lastCharacterSearch.increment = increment; vimGlobalState.lastCharacterSearch.forward = args.forward; vimGlobalState.lastCharacterSearch.selectedCharacter = args.selectedCharacter; } var symbolToMode = { '(': 'bracket', ')': 'bracket', '{': 'bracket', '}': 'bracket', '[': 'section', ']': 'section', '*': 'comment', '/': 'comment', 'm': 'method', 'M': 'method', '#': 'preprocess' }; var findSymbolModes = { bracket: { isComplete: function(state) { if (state.nextCh === state.symb) { state.depth++; if (state.depth >= 1)return true; } else if (state.nextCh === state.reverseSymb) { state.depth--; } return false; } }, section: { init: function(state) { state.curMoveThrough = true; state.symb = (state.forward ? ']' : '[') === state.symb ? '{' : '}'; }, isComplete: function(state) { return state.index === 0 && state.nextCh === state.symb; } }, comment: { isComplete: function(state) { var found = state.lastCh === '*' && state.nextCh === '/'; state.lastCh = state.nextCh; return found; } }, // TODO: The original Vim implementation only operates on level 1 and 2. // The current implementation doesn't check for code block level and // therefore it operates on any levels. method: { init: function(state) { state.symb = (state.symb === 'm' ? '{' : '}'); state.reverseSymb = state.symb === '{' ? '}' : '{'; }, isComplete: function(state) { if (state.nextCh === state.symb)return true; return false; } }, preprocess: { init: function(state) { state.index = 0; }, isComplete: function(state) { if (state.nextCh === '#') { var token = state.lineText.match(/^#(\w+)/)[1]; if (token === 'endif') { if (state.forward && state.depth === 0) { return true; } state.depth++; } else if (token === 'if') { if (!state.forward && state.depth === 0) { return true; } state.depth--; } if (token === 'else' && state.depth === 0)return true; } return false; } } }; function findSymbol(cm, repeat, forward, symb) { var cur = copyCursor(cm.getCursor()); var increment = forward ? 1 : -1; var endLine = forward ? cm.lineCount() : -1; var curCh = cur.ch; var line = cur.line; var lineText = cm.getLine(line); var state = { lineText: lineText, nextCh: lineText.charAt(curCh), lastCh: null, index: curCh, symb: symb, reverseSymb: (forward ? { ')': '(', '}': '{' } : { '(': ')', '{': '}' })[symb], forward: forward, depth: 0, curMoveThrough: false }; var mode = symbolToMode[symb]; if (!mode)return cur; var init = findSymbolModes[mode].init; var isComplete = findSymbolModes[mode].isComplete; if (init) { init(state); } while (line !== endLine && repeat) { state.index += increment; state.nextCh = state.lineText.charAt(state.index); if (!state.nextCh) { line += increment; state.lineText = cm.getLine(line) || ''; if (increment > 0) { state.index = 0; } else { var lineLen = state.lineText.length; state.index = (lineLen > 0) ? (lineLen-1) : 0; } state.nextCh = state.lineText.charAt(state.index); } if (isComplete(state)) { cur.line = line; cur.ch = state.index; repeat--; } } if (state.nextCh || state.curMoveThrough) { return new Pos(line, state.index); } return cur; } /* * Returns the boundaries of the next word. If the cursor in the middle of * the word, then returns the boundaries of the current word, starting at * the cursor. If the cursor is at the start/end of a word, and we are going * forward/backward, respectively, find the boundaries of the next word. * * @param {CodeMirror} cm CodeMirror object. * @param {Cursor} cur The cursor position. * @param {boolean} forward True to search forward. False to search * backward. * @param {boolean} bigWord True if punctuation count as part of the word. * False if only [a-zA-Z0-9] characters count as part of the word. * @param {boolean} emptyLineIsWord True if empty lines should be treated * as words. * @return {Object{from:number, to:number, line: number}} The boundaries of * the word, or null if there are no more words. */ function findWord(cm, cur, forward, bigWord, emptyLineIsWord) { var lineNum = cur.line; var pos = cur.ch; var line = cm.getLine(lineNum); var dir = forward ? 1 : -1; var charTests = bigWord ? bigWordCharTest: wordCharTest; if (emptyLineIsWord && line == '') { lineNum += dir; line = cm.getLine(lineNum); if (!isLine(cm, lineNum)) { return null; } pos = (forward) ? 0 : line.length; } while (true) { if (emptyLineIsWord && line == '') { return { from: 0, to: 0, line: lineNum }; } var stop = (dir > 0) ? line.length : -1; var wordStart = stop, wordEnd = stop; // Find bounds of next word. while (pos != stop) { var foundWord = false; for (var i = 0; i < charTests.length && !foundWord; ++i) { if (charTests[i](line.charAt(pos))) { wordStart = pos; // Advance to end of word. while (pos != stop && charTests[i](line.charAt(pos))) { pos += dir; } wordEnd = pos; foundWord = wordStart != wordEnd; if (wordStart == cur.ch && lineNum == cur.line && wordEnd == wordStart + dir) { // We started at the end of a word. Find the next one. continue; } else { return { from: Math.min(wordStart, wordEnd + 1), to: Math.max(wordStart, wordEnd), line: lineNum }; } } } if (!foundWord) { pos += dir; } } // Advance to next/prev line. lineNum += dir; if (!isLine(cm, lineNum)) { return null; } line = cm.getLine(lineNum); pos = (dir > 0) ? 0 : line.length; } } /** * @param {CodeMirror} cm CodeMirror object. * @param {Pos} cur The position to start from. * @param {int} repeat Number of words to move past. * @param {boolean} forward True to search forward. False to search * backward. * @param {boolean} wordEnd True to move to end of word. False to move to * beginning of word. * @param {boolean} bigWord True if punctuation count as part of the word. * False if only alphabet characters count as part of the word. * @return {Cursor} The position the cursor should move to. */ function moveToWord(cm, cur, repeat, forward, wordEnd, bigWord) { var curStart = copyCursor(cur); var words = []; if (forward && !wordEnd || !forward && wordEnd) { repeat++; } // For 'e', empty lines are not considered words, go figure. var emptyLineIsWord = !(forward && wordEnd); for (var i = 0; i < repeat; i++) { var word = findWord(cm, cur, forward, bigWord, emptyLineIsWord); if (!word) { var eodCh = lineLength(cm, cm.lastLine()); words.push(forward ? {line: cm.lastLine(), from: eodCh, to: eodCh} : {line: 0, from: 0, to: 0}); break; } words.push(word); cur = new Pos(word.line, forward ? (word.to - 1) : word.from); } var shortCircuit = words.length != repeat; var firstWord = words[0]; var lastWord = words.pop(); if (forward && !wordEnd) { // w if (!shortCircuit && (firstWord.from != curStart.ch || firstWord.line != curStart.line)) { // We did not start in the middle of a word. Discard the extra word at the end. lastWord = words.pop(); } return new Pos(lastWord.line, lastWord.from); } else if (forward && wordEnd) { return new Pos(lastWord.line, lastWord.to - 1); } else if (!forward && wordEnd) { // ge if (!shortCircuit && (firstWord.to != curStart.ch || firstWord.line != curStart.line)) { // We did not start in the middle of a word. Discard the extra word at the end. lastWord = words.pop(); } return new Pos(lastWord.line, lastWord.to); } else { // b return new Pos(lastWord.line, lastWord.from); } } function moveToEol(cm, head, motionArgs, vim, keepHPos) { var cur = head; var retval= new Pos(cur.line + motionArgs.repeat - 1, Infinity); var end=cm.clipPos(retval); end.ch--; if (!keepHPos) { vim.lastHPos = Infinity; vim.lastHSPos = cm.charCoords(end,'div').left; } return retval; } function moveToCharacter(cm, repeat, forward, character) { var cur = cm.getCursor(); var start = cur.ch; var idx; for (var i = 0; i < repeat; i ++) { var line = cm.getLine(cur.line); idx = charIdxInLine(start, line, character, forward, true); if (idx == -1) { return null; } start = idx; } return new Pos(cm.getCursor().line, idx); } function moveToColumn(cm, repeat) { // repeat is always >= 1, so repeat - 1 always corresponds // to the column we want to go to. var line = cm.getCursor().line; return clipCursorToContent(cm, new Pos(line, repeat - 1)); } function updateMark(cm, vim, markName, pos) { if (!inArray(markName, validMarks)) { return; } if (vim.marks[markName]) { vim.marks[markName].clear(); } vim.marks[markName] = cm.setBookmark(pos); } function charIdxInLine(start, line, character, forward, includeChar) { // Search for char in line. // motion_options: {forward, includeChar} // If includeChar = true, include it too. // If forward = true, search forward, else search backwards. // If char is not found on this line, do nothing var idx; if (forward) { idx = line.indexOf(character, start + 1); if (idx != -1 && !includeChar) { idx -= 1; } } else { idx = line.lastIndexOf(character, start - 1); if (idx != -1 && !includeChar) { idx += 1; } } return idx; } function findParagraph(cm, head, repeat, dir, inclusive) { var line = head.line; var min = cm.firstLine(); var max = cm.lastLine(); var start, end, i = line; function isEmpty(i) { return !cm.getLine(i); } function isBoundary(i, dir, any) { if (any) { return isEmpty(i) != isEmpty(i + dir); } return !isEmpty(i) && isEmpty(i + dir); } if (dir) { while (min <= i && i <= max && repeat > 0) { if (isBoundary(i, dir)) { repeat--; } i += dir; } return new Pos(i, 0); } var vim = cm.state.vim; if (vim.visualLine && isBoundary(line, 1, true)) { var anchor = vim.sel.anchor; if (isBoundary(anchor.line, -1, true)) { if (!inclusive || anchor.line != line) { line += 1; } } } var startState = isEmpty(line); for (i = line; i <= max && repeat; i++) { if (isBoundary(i, 1, true)) { if (!inclusive || isEmpty(i) != startState) { repeat--; } } } end = new Pos(i, 0); // select boundary before paragraph for the last one if (i > max && !startState) { startState = true; } else { inclusive = false; } for (i = line; i > min; i--) { if (!inclusive || isEmpty(i) == startState || i == line) { if (isBoundary(i, -1, true)) { break; } } } start = new Pos(i, 0); return { start: start, end: end }; } /** * Based on {@link findSentence}. The internal functions have the same names, * but their behaviour is different. findSentence() crosses line breaks and * is used for jumping to sentence beginnings before or after the current cursor position, * whereas getSentence() is for getting the beginning or end of the sentence * at the current cursor position, either including (a) or excluding (i) whitespace. */ function getSentence(cm, cur, repeat, dir, inclusive /*includes whitespace*/) { /* Takes an index object { line: the line string, ln: line number, pos: index in line, dir: direction of traversal (-1 or 1) } and modifies the pos member to represent the next valid position or sets the line to null if there are no more valid positions. */ function nextChar(curr) { if (curr.pos + curr.dir < 0 || curr.pos + curr.dir >= curr.line.length) { curr.line = null; } else { curr.pos += curr.dir; } } /* Performs one iteration of traversal in forward direction Returns an index object of the sentence end */ function forward(cm, ln, pos, dir) { var line = cm.getLine(ln); var curr = { line: line, ln: ln, pos: pos, dir: dir, }; if (curr.line === "") { return { ln: curr.ln, pos: curr.pos }; } var lastSentencePos = curr.pos; // Move one step to skip character we start on nextChar(curr); while (curr.line !== null) { lastSentencePos = curr.pos; if (isEndOfSentenceSymbol(curr.line[curr.pos])) { if (!inclusive) { return { ln: curr.ln, pos: curr.pos + 1 }; } else { nextChar(curr); while (curr.line !== null ) { if (isWhiteSpaceString(curr.line[curr.pos])) { lastSentencePos = curr.pos; nextChar(curr) } else { break; } } return { ln: curr.ln, pos: lastSentencePos + 1 }; } } nextChar(curr); } return { ln: curr.ln, pos: lastSentencePos + 1 }; } /* Performs one iteration of traversal in reverse direction Returns an index object of the sentence start */ function reverse(cm, ln, pos, dir) { var line = cm.getLine(ln); var curr = { line: line, ln: ln, pos: pos, dir: dir, } if (curr.line === "") { return { ln: curr.ln, pos: curr.pos }; } var lastSentencePos = curr.pos; // Move one step to skip character we start on nextChar(curr); while (curr.line !== null) { if (!isWhiteSpaceString(curr.line[curr.pos]) && !isEndOfSentenceSymbol(curr.line[curr.pos])) { lastSentencePos = curr.pos; } else if (isEndOfSentenceSymbol(curr.line[curr.pos]) ) { if (!inclusive) { return { ln: curr.ln, pos: lastSentencePos }; } else { if (isWhiteSpaceString(curr.line[curr.pos + 1])) { return { ln: curr.ln, pos: curr.pos + 1 }; } else { return { ln: curr.ln, pos: lastSentencePos }; } } } nextChar(curr); } curr.line = line if (inclusive && isWhiteSpaceString(curr.line[curr.pos])) { return { ln: curr.ln, pos: curr.pos }; } else { return { ln: curr.ln, pos: lastSentencePos }; } } var curr_index = { ln: cur.line, pos: cur.ch, }; while (repeat > 0) { if (dir < 0) { curr_index = reverse(cm, curr_index.ln, curr_index.pos, dir); } else { curr_index = forward(cm, curr_index.ln, curr_index.pos, dir); } repeat--; } return new Pos(curr_index.ln, curr_index.pos); } function findSentence(cm, cur, repeat, dir) { /* Takes an index object { line: the line string, ln: line number, pos: index in line, dir: direction of traversal (-1 or 1) } and modifies the line, ln, and pos members to represent the next valid position or sets them to null if there are no more valid positions. */ function nextChar(cm, idx) { if (idx.pos + idx.dir < 0 || idx.pos + idx.dir >= idx.line.length) { idx.ln += idx.dir; if (!isLine(cm, idx.ln)) { idx.line = null; idx.ln = null; idx.pos = null; return; } idx.line = cm.getLine(idx.ln); idx.pos = (idx.dir > 0) ? 0 : idx.line.length - 1; } else { idx.pos += idx.dir; } } /* Performs one iteration of traversal in forward direction Returns an index object of the new location */ function forward(cm, ln, pos, dir) { var line = cm.getLine(ln); var stop = (line === ""); var curr = { line: line, ln: ln, pos: pos, dir: dir, } var last_valid = { ln: curr.ln, pos: curr.pos, } var skip_empty_lines = (curr.line === ""); // Move one step to skip character we start on nextChar(cm, curr); while (curr.line !== null) { last_valid.ln = curr.ln; last_valid.pos = curr.pos; if (curr.line === "" && !skip_empty_lines) { return { ln: curr.ln, pos: curr.pos, }; } else if (stop && curr.line !== "" && !isWhiteSpaceString(curr.line[curr.pos])) { return { ln: curr.ln, pos: curr.pos, }; } else if (isEndOfSentenceSymbol(curr.line[curr.pos]) && !stop && (curr.pos === curr.line.length - 1 || isWhiteSpaceString(curr.line[curr.pos + 1]))) { stop = true; } nextChar(cm, curr); } /* Set the position to the last non whitespace character on the last valid line in the case that we reach the end of the document. */ var line = cm.getLine(last_valid.ln); last_valid.pos = 0; for(var i = line.length - 1; i >= 0; --i) { if (!isWhiteSpaceString(line[i])) { last_valid.pos = i; break; } } return last_valid; } /* Performs one iteration of traversal in reverse direction Returns an index object of the new location */ function reverse(cm, ln, pos, dir) { var line = cm.getLine(ln); var curr = { line: line, ln: ln, pos: pos, dir: dir, } var last_valid = { ln: curr.ln, pos: null, }; var skip_empty_lines = (curr.line === ""); // Move one step to skip character we start on nextChar(cm, curr); while (curr.line !== null) { if (curr.line === "" && !skip_empty_lines) { if (last_valid.pos !== null) { return last_valid; } else { return { ln: curr.ln, pos: curr.pos }; } } else if (isEndOfSentenceSymbol(curr.line[curr.pos]) && last_valid.pos !== null && !(curr.ln === last_valid.ln && curr.pos + 1 === last_valid.pos)) { return last_valid; } else if (curr.line !== "" && !isWhiteSpaceString(curr.line[curr.pos])) { skip_empty_lines = false; last_valid = { ln: curr.ln, pos: curr.pos } } nextChar(cm, curr); } /* Set the position to the first non whitespace character on the last valid line in the case that we reach the beginning of the document. */ var line = cm.getLine(last_valid.ln); last_valid.pos = 0; for(var i = 0; i < line.length; ++i) { if (!isWhiteSpaceString(line[i])) { last_valid.pos = i; break; } } return last_valid; } var curr_index = { ln: cur.line, pos: cur.ch, }; while (repeat > 0) { if (dir < 0) { curr_index = reverse(cm, curr_index.ln, curr_index.pos, dir); } else { curr_index = forward(cm, curr_index.ln, curr_index.pos, dir); } repeat--; } return new Pos(curr_index.ln, curr_index.pos); } // TODO: perhaps this finagling of start and end positions belongs // in codemirror/replaceRange? function selectCompanionObject(cm, head, symb, inclusive) { var cur = head, start, end; var bracketRegexp = ({ '(': /[()]/, ')': /[()]/, '[': /[[\]]/, ']': /[[\]]/, '{': /[{}]/, '}': /[{}]/, '<': /[<>]/, '>': /[<>]/})[symb]; var openSym = ({ '(': '(', ')': '(', '[': '[', ']': '[', '{': '{', '}': '{', '<': '<', '>': '<'})[symb]; var curChar = cm.getLine(cur.line).charAt(cur.ch); // Due to the behavior of scanForBracket, we need to add an offset if the // cursor is on a matching open bracket. var offset = curChar === openSym ? 1 : 0; start = cm.scanForBracket(new Pos(cur.line, cur.ch + offset), -1, undefined, {'bracketRegex': bracketRegexp}); end = cm.scanForBracket(new Pos(cur.line, cur.ch + offset), 1, undefined, {'bracketRegex': bracketRegexp}); if (!start || !end) { return { start: cur, end: cur }; } start = start.pos; end = end.pos; if ((start.line == end.line && start.ch > end.ch) || (start.line > end.line)) { var tmp = start; start = end; end = tmp; } if (inclusive) { end.ch += 1; } else { start.ch += 1; } return { start: start, end: end }; } // Takes in a symbol and a cursor and tries to simulate text objects that // have identical opening and closing symbols // TODO support across multiple lines function findBeginningAndEnd(cm, head, symb, inclusive) { var cur = copyCursor(head); var line = cm.getLine(cur.line); var chars = line.split(''); var start, end, i, len; var firstIndex = chars.indexOf(symb); // the decision tree is to always look backwards for the beginning first, // but if the cursor is in front of the first instance of the symb, // then move the cursor forward if (cur.ch < firstIndex) { cur.ch = firstIndex; // Why is this line even here??? // cm.setCursor(cur.line, firstIndex+1); } // otherwise if the cursor is currently on the closing symbol else if (firstIndex < cur.ch && chars[cur.ch] == symb) { end = cur.ch; // assign end to the current cursor --cur.ch; // make sure to look backwards } // if we're currently on the symbol, we've got a start if (chars[cur.ch] == symb && !end) { start = cur.ch + 1; // assign start to ahead of the cursor } else { // go backwards to find the start for (i = cur.ch; i > -1 && !start; i--) { if (chars[i] == symb) { start = i + 1; } } } // look forwards for the end symbol if (start && !end) { for (i = start, len = chars.length; i < len && !end; i++) { if (chars[i] == symb) { end = i; } } } // nothing found if (!start || !end) { return { start: cur, end: cur }; } // include the symbols if (inclusive) { --start; ++end; } return { start: new Pos(cur.line, start), end: new Pos(cur.line, end) }; } // Search functions defineOption('pcre', true, 'boolean'); function SearchState() {} SearchState.prototype = { getQuery: function() { return vimGlobalState.query; }, setQuery: function(query) { vimGlobalState.query = query; }, getOverlay: function() { return this.searchOverlay; }, setOverlay: function(overlay) { this.searchOverlay = overlay; }, isReversed: function() { return vimGlobalState.isReversed; }, setReversed: function(reversed) { vimGlobalState.isReversed = reversed; }, getScrollbarAnnotate: function() { return this.annotate; }, setScrollbarAnnotate: function(annotate) { this.annotate = annotate; } }; function getSearchState(cm) { var vim = cm.state.vim; return vim.searchState_ || (vim.searchState_ = new SearchState()); } function splitBySlash(argString) { return splitBySeparator(argString, '/'); } function findUnescapedSlashes(argString) { return findUnescapedSeparators(argString, '/'); } function splitBySeparator(argString, separator) { var slashes = findUnescapedSeparators(argString, separator) || []; if (!slashes.length) return []; var tokens = []; // in case of strings like foo/bar if (slashes[0] !== 0) return; for (var i = 0; i < slashes.length; i++) { if (typeof slashes[i] == 'number') tokens.push(argString.substring(slashes[i] + 1, slashes[i+1])); } return tokens; } function findUnescapedSeparators(str, separator) { if (!separator) separator = '/'; var escapeNextChar = false; var slashes = []; for (var i = 0; i < str.length; i++) { var c = str.charAt(i); if (!escapeNextChar && c == separator) { slashes.push(i); } escapeNextChar = !escapeNextChar && (c == '\\'); } return slashes; } // Translates a search string from ex (vim) syntax into javascript form. function translateRegex(str) { // When these match, add a '\' if unescaped or remove one if escaped. var specials = '|(){'; // Remove, but never add, a '\' for these. var unescape = '}'; var escapeNextChar = false; var out = []; for (var i = -1; i < str.length; i++) { var c = str.charAt(i) || ''; var n = str.charAt(i+1) || ''; var specialComesNext = (n && specials.indexOf(n) != -1); if (escapeNextChar) { if (c !== '\\' || !specialComesNext) { out.push(c); } escapeNextChar = false; } else { if (c === '\\') { escapeNextChar = true; // Treat the unescape list as special for removing, but not adding '\'. if (n && unescape.indexOf(n) != -1) { specialComesNext = true; } // Not passing this test means removing a '\'. if (!specialComesNext || n === '\\') { out.push(c); } } else { out.push(c); if (specialComesNext && n !== '\\') { out.push('\\'); } } } } return out.join(''); } // Translates the replace part of a search and replace from ex (vim) syntax into // javascript form. Similar to translateRegex, but additionally fixes back references // (translates '\[0..9]' to '$[0..9]') and follows different rules for escaping '$'. var charUnescapes = {'\\n': '\n', '\\r': '\r', '\\t': '\t'}; function translateRegexReplace(str) { var escapeNextChar = false; var out = []; for (var i = -1; i < str.length; i++) { var c = str.charAt(i) || ''; var n = str.charAt(i+1) || ''; if (charUnescapes[c + n]) { out.push(charUnescapes[c+n]); i++; } else if (escapeNextChar) { // At any point in the loop, escapeNextChar is true if the previous // character was a '\' and was not escaped. out.push(c); escapeNextChar = false; } else { if (c === '\\') { escapeNextChar = true; if ((isNumber(n) || n === '$')) { out.push('$'); } else if (n !== '/' && n !== '\\') { out.push('\\'); } } else { if (c === '$') { out.push('$'); } out.push(c); if (n === '/') { out.push('\\'); } } } } return out.join(''); } // Unescape \ and / in the replace part, for PCRE mode. var unescapes = {'\\/': '/', '\\\\': '\\', '\\n': '\n', '\\r': '\r', '\\t': '\t', '\\&':'&'}; function unescapeRegexReplace(str) { var stream = new CodeMirror.StringStream(str); var output = []; while (!stream.eol()) { // Search for \. while (stream.peek() && stream.peek() != '\\') { output.push(stream.next()); } var matched = false; for (var matcher in unescapes) { if (stream.match(matcher, true)) { matched = true; output.push(unescapes[matcher]); break; } } if (!matched) { // Don't change anything output.push(stream.next()); } } return output.join(''); } /** * Extract the regular expression from the query and return a Regexp object. * Returns null if the query is blank. * If ignoreCase is passed in, the Regexp object will have the 'i' flag set. * If smartCase is passed in, and the query contains upper case letters, * then ignoreCase is overridden, and the 'i' flag will not be set. * If the query contains the /i in the flag part of the regular expression, * then both ignoreCase and smartCase are ignored, and 'i' will be passed * through to the Regex object. */ function parseQuery(query, ignoreCase, smartCase) { // First update the last search register var lastSearchRegister = vimGlobalState.registerController.getRegister('/'); lastSearchRegister.setText(query); // Check if the query is already a regex. if (query instanceof RegExp) { return query; } // First try to extract regex + flags from the input. If no flags found, // extract just the regex. IE does not accept flags directly defined in // the regex string in the form /regex/flags var slashes = findUnescapedSlashes(query); var regexPart; var forceIgnoreCase; if (!slashes.length) { // Query looks like 'regexp' regexPart = query; } else { // Query looks like 'regexp/...' regexPart = query.substring(0, slashes[0]); var flagsPart = query.substring(slashes[0]); forceIgnoreCase = (flagsPart.indexOf('i') != -1); } if (!regexPart) { return null; } if (!getOption('pcre')) { regexPart = translateRegex(regexPart); } if (smartCase) { ignoreCase = (/^[^A-Z]*$/).test(regexPart); } var regexp = new RegExp(regexPart, (ignoreCase || forceIgnoreCase) ? 'im' : 'm'); return regexp; } /** * dom - Document Object Manipulator * Usage: * dom(''|[, ...{|<$styles>}||'']) * Examples: * dom('div', {id:'xyz'}, dom('p', 'CM rocks!', {$color:'red'})) * dom(document.head, dom('script', 'alert("hello!")')) * Not supported: * dom('p', ['arrays are objects'], Error('objects specify attributes')) */ function dom(n) { if (typeof n === 'string') n = document.createElement(n); for (var a, i = 1; i < arguments.length; i++) { if (!(a = arguments[i])) continue; if (typeof a !== 'object') a = document.createTextNode(a); if (a.nodeType) n.appendChild(a); else for (var key in a) { if (!Object.prototype.hasOwnProperty.call(a, key)) continue; if (key[0] === '$') n.style[key.slice(1)] = a[key]; else n.setAttribute(key, a[key]); } } return n; } function showConfirm(cm, template) { var pre = dom('div', {$color: 'red', $whiteSpace: 'pre', class: 'cm-vim-message'}, template); if (cm.openNotification) { cm.openNotification(pre, {bottom: true, duration: 5000}); } else { alert(pre.innerText); } } function makePrompt(prefix, desc) { return dom(document.createDocumentFragment(), dom('span', {$fontFamily: 'monospace', $whiteSpace: 'pre'}, prefix, dom('input', {type: 'text', autocorrect: 'off', autocapitalize: 'off', spellcheck: 'false'})), desc && dom('span', {$color: '#888'}, desc)); } function showPrompt(cm, options) { var template = makePrompt(options.prefix, options.desc); if (cm.openDialog) { cm.openDialog(template, options.onClose, { onKeyDown: options.onKeyDown, onKeyUp: options.onKeyUp, bottom: true, selectValueOnOpen: false, value: options.value }); } else { var shortText = ''; if (typeof options.prefix != "string" && options.prefix) shortText += options.prefix.textContent; if (options.desc) shortText += " " + options.desc; options.onClose(prompt(shortText, '')); } } function regexEqual(r1, r2) { if (r1 instanceof RegExp && r2 instanceof RegExp) { var props = ['global', 'multiline', 'ignoreCase', 'source']; for (var i = 0; i < props.length; i++) { var prop = props[i]; if (r1[prop] !== r2[prop]) { return false; } } return true; } return false; } // Returns true if the query is valid. function updateSearchQuery(cm, rawQuery, ignoreCase, smartCase) { if (!rawQuery) { return; } var state = getSearchState(cm); var query = parseQuery(rawQuery, !!ignoreCase, !!smartCase); if (!query) { return; } highlightSearchMatches(cm, query); if (regexEqual(query, state.getQuery())) { return query; } state.setQuery(query); return query; } function searchOverlay(query) { if (query.source.charAt(0) == '^') { var matchSol = true; } return { token: function(stream) { if (matchSol && !stream.sol()) { stream.skipToEnd(); return; } var match = stream.match(query, false); if (match) { if (match[0].length == 0) { // Matched empty string, skip to next. stream.next(); return 'searching'; } if (!stream.sol()) { // Backtrack 1 to match \b stream.backUp(1); if (!query.exec(stream.next() + match[0])) { stream.next(); return null; } } stream.match(query); return 'searching'; } while (!stream.eol()) { stream.next(); if (stream.match(query, false)) break; } }, query: query }; } var highlightTimeout = 0; function highlightSearchMatches(cm, query) { clearTimeout(highlightTimeout); highlightTimeout = setTimeout(function() { if (!cm.state.vim) return; var searchState = getSearchState(cm); var overlay = searchState.getOverlay(); if (!overlay || query != overlay.query) { if (overlay) { cm.removeOverlay(overlay); } overlay = searchOverlay(query); cm.addOverlay(overlay); if (cm.showMatchesOnScrollbar) { if (searchState.getScrollbarAnnotate()) { searchState.getScrollbarAnnotate().clear(); } searchState.setScrollbarAnnotate(cm.showMatchesOnScrollbar(query)); } searchState.setOverlay(overlay); } }, 50); } function findNext(cm, prev, query, repeat) { if (repeat === undefined) { repeat = 1; } return cm.operation(function() { var pos = cm.getCursor(); var cursor = cm.getSearchCursor(query, pos); for (var i = 0; i < repeat; i++) { var found = cursor.find(prev); if (i == 0 && found && cursorEqual(cursor.from(), pos)) { var lastEndPos = prev ? cursor.from() : cursor.to(); found = cursor.find(prev); if (found && !found[0] && cursorEqual(cursor.from(), lastEndPos)) { if (cm.getLine(lastEndPos.line).length == lastEndPos.ch) found = cursor.find(prev); } } if (!found) { // SearchCursor may have returned null because it hit EOF, wrap // around and try again. cursor = cm.getSearchCursor(query, (prev) ? new Pos(cm.lastLine()) : new Pos(cm.firstLine(), 0) ); if (!cursor.find(prev)) { return; } } } return cursor.from(); }); } /** * Pretty much the same as `findNext`, except for the following differences: * * 1. Before starting the search, move to the previous search. This way if our cursor is * already inside a match, we should return the current match. * 2. Rather than only returning the cursor's from, we return the cursor's from and to as a tuple. */ function findNextFromAndToInclusive(cm, prev, query, repeat, vim) { if (repeat === undefined) { repeat = 1; } return cm.operation(function() { var pos = cm.getCursor(); var cursor = cm.getSearchCursor(query, pos); // Go back one result to ensure that if the cursor is currently a match, we keep it. var found = cursor.find(!prev); // If we haven't moved, go back one more (similar to if i==0 logic in findNext). if (!vim.visualMode && found && cursorEqual(cursor.from(), pos)) { cursor.find(!prev); } for (var i = 0; i < repeat; i++) { found = cursor.find(prev); if (!found) { // SearchCursor may have returned null because it hit EOF, wrap // around and try again. cursor = cm.getSearchCursor(query, (prev) ? new Pos(cm.lastLine()) : new Pos(cm.firstLine(), 0) ); if (!cursor.find(prev)) { return; } } } return [cursor.from(), cursor.to()]; }); } function clearSearchHighlight(cm) { var state = getSearchState(cm); cm.removeOverlay(getSearchState(cm).getOverlay()); state.setOverlay(null); if (state.getScrollbarAnnotate()) { state.getScrollbarAnnotate().clear(); state.setScrollbarAnnotate(null); } } /** * Check if pos is in the specified range, INCLUSIVE. * Range can be specified with 1 or 2 arguments. * If the first range argument is an array, treat it as an array of line * numbers. Match pos against any of the lines. * If the first range argument is a number, * if there is only 1 range argument, check if pos has the same line * number * if there are 2 range arguments, then check if pos is in between the two * range arguments. */ function isInRange(pos, start, end) { if (typeof pos != 'number') { // Assume it is a cursor position. Get the line number. pos = pos.line; } if (start instanceof Array) { return inArray(pos, start); } else { if (typeof end == 'number') { return (pos >= start && pos <= end); } else { return pos == start; } } } function getUserVisibleLines(cm) { var scrollInfo = cm.getScrollInfo(); var occludeToleranceTop = 6; var occludeToleranceBottom = 10; var from = cm.coordsChar({left:0, top: occludeToleranceTop + scrollInfo.top}, 'local'); var bottomY = scrollInfo.clientHeight - occludeToleranceBottom + scrollInfo.top; var to = cm.coordsChar({left:0, top: bottomY}, 'local'); return {top: from.line, bottom: to.line}; } function getMarkPos(cm, vim, markName) { if (markName == '\'' || markName == '`') { return vimGlobalState.jumpList.find(cm, -1) || new Pos(0, 0); } else if (markName == '.') { return getLastEditPos(cm); } var mark = vim.marks[markName]; return mark && mark.find(); } function getLastEditPos(cm) { var done = cm.doc.history.done; for (var i = done.length; i--;) { if (done[i].changes) { return copyCursor(done[i].changes[0].to); } } } var ExCommandDispatcher = function() { this.buildCommandMap_(); }; ExCommandDispatcher.prototype = { processCommand: function(cm, input, opt_params) { var that = this; cm.operation(function () { cm.curOp.isVimOp = true; that._processCommand(cm, input, opt_params); }); }, _processCommand: function(cm, input, opt_params) { var vim = cm.state.vim; var commandHistoryRegister = vimGlobalState.registerController.getRegister(':'); var previousCommand = commandHistoryRegister.toString(); var inputStream = new CodeMirror.StringStream(input); // update ": with the latest command whether valid or invalid commandHistoryRegister.setText(input); var params = opt_params || {}; params.input = input; try { this.parseInput_(cm, inputStream, params); } catch(e) { showConfirm(cm, e.toString()); throw e; } if (vim.visualMode) { exitVisualMode(cm); } var command; var commandName; if (!params.commandName) { // If only a line range is defined, move to the line. if (params.line !== undefined) { commandName = 'move'; } } else { command = this.matchCommand_(params.commandName); if (command) { commandName = command.name; if (command.excludeFromCommandHistory) { commandHistoryRegister.setText(previousCommand); } this.parseCommandArgs_(inputStream, params, command); if (command.type == 'exToKey') { // Handle Ex to Key mapping. for (var i = 0; i < command.toKeys.length; i++) { vimApi.handleKey(cm, command.toKeys[i], 'mapping'); } return; } else if (command.type == 'exToEx') { // Handle Ex to Ex mapping. this.processCommand(cm, command.toInput); return; } } } if (!commandName) { showConfirm(cm, 'Not an editor command ":' + input + '"'); return; } try { exCommands[commandName](cm, params); // Possibly asynchronous commands (e.g. substitute, which might have a // user confirmation), are responsible for calling the callback when // done. All others have it taken care of for them here. if ((!command || !command.possiblyAsync) && params.callback) { params.callback(); } } catch(e) { showConfirm(cm, e.toString()); throw e; } }, parseInput_: function(cm, inputStream, result) { inputStream.eatWhile(':'); // Parse range. if (inputStream.eat('%')) { result.line = cm.firstLine(); result.lineEnd = cm.lastLine(); } else { result.line = this.parseLineSpec_(cm, inputStream); if (result.line !== undefined && inputStream.eat(',')) { result.lineEnd = this.parseLineSpec_(cm, inputStream); } } if (result.line == undefined) { if (cm.state.vim.visualMode) { result.selectionLine = (getMarkPos(cm, cm.state.vim, '<') || {}).line; result.selectionLineEnd = (getMarkPos(cm, cm.state.vim, '>') || {}).line; } else { result.selectionLine = cm.getCursor().line; } } else { result.selectionLine = result.line; result.selectionLineEnd = result.lineEnd; } // Parse command name. var commandMatch = inputStream.match(/^(\w+|!!|@@|[!#&*<=>@~])/); if (commandMatch) { result.commandName = commandMatch[1]; } else { result.commandName = inputStream.match(/.*/)[0]; } return result; }, parseLineSpec_: function(cm, inputStream) { var numberMatch = inputStream.match(/^(\d+)/); if (numberMatch) { // Absolute line number plus offset (N+M or N-M) is probably a typo, // not something the user actually wanted. (NB: vim does allow this.) return parseInt(numberMatch[1], 10) - 1; } switch (inputStream.next()) { case '.': return this.parseLineSpecOffset_(inputStream, cm.getCursor().line); case '$': return this.parseLineSpecOffset_(inputStream, cm.lastLine()); case '\'': var markName = inputStream.next(); var markPos = getMarkPos(cm, cm.state.vim, markName); if (!markPos) throw new Error('Mark not set'); return this.parseLineSpecOffset_(inputStream, markPos.line); case '-': case '+': inputStream.backUp(1); // Offset is relative to current line if not otherwise specified. return this.parseLineSpecOffset_(inputStream, cm.getCursor().line); default: inputStream.backUp(1); return undefined; } }, parseLineSpecOffset_: function(inputStream, line) { var offsetMatch = inputStream.match(/^([+-])?(\d+)/); if (offsetMatch) { var offset = parseInt(offsetMatch[2], 10); if (offsetMatch[1] == "-") { line -= offset; } else { line += offset; } } return line; }, parseCommandArgs_: function(inputStream, params, command) { if (inputStream.eol()) { return; } params.argString = inputStream.match(/.*/)[0]; // Parse command-line arguments var delim = command.argDelimiter || /\s+/; var args = trim(params.argString).split(delim); if (args.length && args[0]) { params.args = args; } }, matchCommand_: function(commandName) { // Return the command in the command map that matches the shortest // prefix of the passed in command name. The match is guaranteed to be // unambiguous if the defaultExCommandMap's shortNames are set up // correctly. (see @code{defaultExCommandMap}). for (var i = commandName.length; i > 0; i--) { var prefix = commandName.substring(0, i); if (this.commandMap_[prefix]) { var command = this.commandMap_[prefix]; if (command.name.indexOf(commandName) === 0) { return command; } } } return null; }, buildCommandMap_: function() { this.commandMap_ = {}; for (var i = 0; i < defaultExCommandMap.length; i++) { var command = defaultExCommandMap[i]; var key = command.shortName || command.name; this.commandMap_[key] = command; } }, map: function(lhs, rhs, ctx) { if (lhs != ':' && lhs.charAt(0) == ':') { if (ctx) { throw Error('Mode not supported for ex mappings'); } var commandName = lhs.substring(1); if (rhs != ':' && rhs.charAt(0) == ':') { // Ex to Ex mapping this.commandMap_[commandName] = { name: commandName, type: 'exToEx', toInput: rhs.substring(1), user: true }; } else { // Ex to key mapping this.commandMap_[commandName] = { name: commandName, type: 'exToKey', toKeys: rhs, user: true }; } } else { if (rhs != ':' && rhs.charAt(0) == ':') { // Key to Ex mapping. var mapping = { keys: lhs, type: 'keyToEx', exArgs: { input: rhs.substring(1) } }; if (ctx) { mapping.context = ctx; } defaultKeymap.unshift(mapping); } else { // Key to key mapping var mapping = { keys: lhs, type: 'keyToKey', toKeys: rhs }; if (ctx) { mapping.context = ctx; } defaultKeymap.unshift(mapping); } } }, unmap: function(lhs, ctx) { if (lhs != ':' && lhs.charAt(0) == ':') { // Ex to Ex or Ex to key mapping if (ctx) { throw Error('Mode not supported for ex mappings'); } var commandName = lhs.substring(1); if (this.commandMap_[commandName] && this.commandMap_[commandName].user) { delete this.commandMap_[commandName]; return true; } } else { // Key to Ex or key to key mapping var keys = lhs; for (var i = 0; i < defaultKeymap.length; i++) { if (keys == defaultKeymap[i].keys && defaultKeymap[i].context === ctx) { defaultKeymap.splice(i, 1); return true; } } } } }; var exCommands = { colorscheme: function(cm, params) { if (!params.args || params.args.length < 1) { showConfirm(cm, cm.getOption('theme')); return; } cm.setOption('theme', params.args[0]); }, map: function(cm, params, ctx) { var mapArgs = params.args; if (!mapArgs || mapArgs.length < 2) { if (cm) { showConfirm(cm, 'Invalid mapping: ' + params.input); } return; } exCommandDispatcher.map(mapArgs[0], mapArgs[1], ctx); }, imap: function(cm, params) { this.map(cm, params, 'insert'); }, nmap: function(cm, params) { this.map(cm, params, 'normal'); }, vmap: function(cm, params) { this.map(cm, params, 'visual'); }, unmap: function(cm, params, ctx) { var mapArgs = params.args; if (!mapArgs || mapArgs.length < 1 || !exCommandDispatcher.unmap(mapArgs[0], ctx)) { if (cm) { showConfirm(cm, 'No such mapping: ' + params.input); } } }, move: function(cm, params) { commandDispatcher.processCommand(cm, cm.state.vim, { type: 'motion', motion: 'moveToLineOrEdgeOfDocument', motionArgs: { forward: false, explicitRepeat: true, linewise: true }, repeatOverride: params.line+1}); }, set: function(cm, params) { var setArgs = params.args; // Options passed through to the setOption/getOption calls. May be passed in by the // local/global versions of the set command var setCfg = params.setCfg || {}; if (!setArgs || setArgs.length < 1) { if (cm) { showConfirm(cm, 'Invalid mapping: ' + params.input); } return; } var expr = setArgs[0].split('='); var optionName = expr[0]; var value = expr[1]; var forceGet = false; if (optionName.charAt(optionName.length - 1) == '?') { // If post-fixed with ?, then the set is actually a get. if (value) { throw Error('Trailing characters: ' + params.argString); } optionName = optionName.substring(0, optionName.length - 1); forceGet = true; } if (value === undefined && optionName.substring(0, 2) == 'no') { // To set boolean options to false, the option name is prefixed with // 'no'. optionName = optionName.substring(2); value = false; } var optionIsBoolean = options[optionName] && options[optionName].type == 'boolean'; if (optionIsBoolean && value == undefined) { // Calling set with a boolean option sets it to true. value = true; } // If no value is provided, then we assume this is a get. if (!optionIsBoolean && value === undefined || forceGet) { var oldValue = getOption(optionName, cm, setCfg); if (oldValue instanceof Error) { showConfirm(cm, oldValue.message); } else if (oldValue === true || oldValue === false) { showConfirm(cm, ' ' + (oldValue ? '' : 'no') + optionName); } else { showConfirm(cm, ' ' + optionName + '=' + oldValue); } } else { var setOptionReturn = setOption(optionName, value, cm, setCfg); if (setOptionReturn instanceof Error) { showConfirm(cm, setOptionReturn.message); } } }, setlocal: function (cm, params) { // setCfg is passed through to setOption params.setCfg = {scope: 'local'}; this.set(cm, params); }, setglobal: function (cm, params) { // setCfg is passed through to setOption params.setCfg = {scope: 'global'}; this.set(cm, params); }, registers: function(cm, params) { var regArgs = params.args; var registers = vimGlobalState.registerController.registers; var regInfo = '----------Registers----------\n\n'; if (!regArgs) { for (var registerName in registers) { var text = registers[registerName].toString(); if (text.length) { regInfo += '"' + registerName + ' ' + text + '\n' } } } else { var registerName; regArgs = regArgs.join(''); for (var i = 0; i < regArgs.length; i++) { registerName = regArgs.charAt(i); if (!vimGlobalState.registerController.isValidRegister(registerName)) { continue; } var register = registers[registerName] || new Register(); regInfo += '"' + registerName + ' ' + register.toString() + '\n' } } showConfirm(cm, regInfo); }, sort: function(cm, params) { var reverse, ignoreCase, unique, number, pattern; function parseArgs() { if (params.argString) { var args = new CodeMirror.StringStream(params.argString); if (args.eat('!')) { reverse = true; } if (args.eol()) { return; } if (!args.eatSpace()) { return 'Invalid arguments'; } var opts = args.match(/([dinuox]+)?\s*(\/.+\/)?\s*/); if (!opts && !args.eol()) { return 'Invalid arguments'; } if (opts[1]) { ignoreCase = opts[1].indexOf('i') != -1; unique = opts[1].indexOf('u') != -1; var decimal = opts[1].indexOf('d') != -1 || opts[1].indexOf('n') != -1 && 1; var hex = opts[1].indexOf('x') != -1 && 1; var octal = opts[1].indexOf('o') != -1 && 1; if (decimal + hex + octal > 1) { return 'Invalid arguments'; } number = decimal && 'decimal' || hex && 'hex' || octal && 'octal'; } if (opts[2]) { pattern = new RegExp(opts[2].substr(1, opts[2].length - 2), ignoreCase ? 'i' : ''); } } } var err = parseArgs(); if (err) { showConfirm(cm, err + ': ' + params.argString); return; } var lineStart = params.line || cm.firstLine(); var lineEnd = params.lineEnd || params.line || cm.lastLine(); if (lineStart == lineEnd) { return; } var curStart = new Pos(lineStart, 0); var curEnd = new Pos(lineEnd, lineLength(cm, lineEnd)); var text = cm.getRange(curStart, curEnd).split('\n'); var numberRegex = pattern ? pattern : (number == 'decimal') ? /(-?)([\d]+)/ : (number == 'hex') ? /(-?)(?:0x)?([0-9a-f]+)/i : (number == 'octal') ? /([0-7]+)/ : null; var radix = (number == 'decimal') ? 10 : (number == 'hex') ? 16 : (number == 'octal') ? 8 : null; var numPart = [], textPart = []; if (number || pattern) { for (var i = 0; i < text.length; i++) { var matchPart = pattern ? text[i].match(pattern) : null; if (matchPart && matchPart[0] != '') { numPart.push(matchPart); } else if (!pattern && numberRegex.exec(text[i])) { numPart.push(text[i]); } else { textPart.push(text[i]); } } } else { textPart = text; } function compareFn(a, b) { if (reverse) { var tmp; tmp = a; a = b; b = tmp; } if (ignoreCase) { a = a.toLowerCase(); b = b.toLowerCase(); } var anum = number && numberRegex.exec(a); var bnum = number && numberRegex.exec(b); if (!anum) { return a < b ? -1 : 1; } anum = parseInt((anum[1] + anum[2]).toLowerCase(), radix); bnum = parseInt((bnum[1] + bnum[2]).toLowerCase(), radix); return anum - bnum; } function comparePatternFn(a, b) { if (reverse) { var tmp; tmp = a; a = b; b = tmp; } if (ignoreCase) { a[0] = a[0].toLowerCase(); b[0] = b[0].toLowerCase(); } return (a[0] < b[0]) ? -1 : 1; } numPart.sort(pattern ? comparePatternFn : compareFn); if (pattern) { for (var i = 0; i < numPart.length; i++) { numPart[i] = numPart[i].input; } } else if (!number) { textPart.sort(compareFn); } text = (!reverse) ? textPart.concat(numPart) : numPart.concat(textPart); if (unique) { // Remove duplicate lines var textOld = text; var lastLine; text = []; for (var i = 0; i < textOld.length; i++) { if (textOld[i] != lastLine) { text.push(textOld[i]); } lastLine = textOld[i]; } } cm.replaceRange(text.join('\n'), curStart, curEnd); }, vglobal: function(cm, params) { // global inspects params.commandName this.global(cm, params); }, global: function(cm, params) { // a global command is of the form // :[range]g/pattern/[cmd] // argString holds the string /pattern/[cmd] var argString = params.argString; if (!argString) { showConfirm(cm, 'Regular Expression missing from global'); return; } var inverted = params.commandName[0] === 'v'; if (argString[0] === '!' && params.commandName[0] === 'g') { inverted = true; argString = argString.slice(1); } // range is specified here var lineStart = (params.line !== undefined) ? params.line : cm.firstLine(); var lineEnd = params.lineEnd || params.line || cm.lastLine(); // get the tokens from argString var tokens = splitBySlash(argString); var regexPart = argString, cmd; if (tokens.length) { regexPart = tokens[0]; cmd = tokens.slice(1, tokens.length).join('/'); } if (regexPart) { // If regex part is empty, then use the previous query. Otherwise // use the regex part as the new query. try { updateSearchQuery(cm, regexPart, true /** ignoreCase */, true /** smartCase */); } catch (e) { showConfirm(cm, 'Invalid regex: ' + regexPart); return; } } // now that we have the regexPart, search for regex matches in the // specified range of lines var query = getSearchState(cm).getQuery(); var matchedLines = []; for (var i = lineStart; i <= lineEnd; i++) { var line = cm.getLine(i); var matched = query.test(line); if (matched !== inverted) { matchedLines.push(cmd ? cm.getLineHandle(i) : line); } } // if there is no [cmd], just display the list of matched lines if (!cmd) { showConfirm(cm, matchedLines.join('\n')); return; } var index = 0; var nextCommand = function() { if (index < matchedLines.length) { var lineHandle = matchedLines[index++]; var lineNum = cm.getLineNumber(lineHandle); if (lineNum == null) { nextCommand(); return; } var command = (lineNum + 1) + cmd; exCommandDispatcher.processCommand(cm, command, { callback: nextCommand }); } else if (cm.releaseLineHandles) { cm.releaseLineHandles(); } }; nextCommand(); }, substitute: function(cm, params) { if (!cm.getSearchCursor) { throw new Error('Search feature not available. Requires searchcursor.js or ' + 'any other getSearchCursor implementation.'); } var argString = params.argString; var tokens = argString ? splitBySeparator(argString, argString[0]) : []; var regexPart, replacePart = '', trailing, flagsPart, count; var confirm = false; // Whether to confirm each replace. var global = false; // True to replace all instances on a line, false to replace only 1. if (tokens.length) { regexPart = tokens[0]; if (getOption('pcre') && regexPart !== '') { regexPart = new RegExp(regexPart).source; //normalize not escaped characters } replacePart = tokens[1]; if (replacePart !== undefined) { if (getOption('pcre')) { replacePart = unescapeRegexReplace(replacePart.replace(/([^\\])&/g,"$1$$&")); } else { replacePart = translateRegexReplace(replacePart); } vimGlobalState.lastSubstituteReplacePart = replacePart; } trailing = tokens[2] ? tokens[2].split(' ') : []; } else { // either the argString is empty or its of the form ' hello/world' // actually splitBySlash returns a list of tokens // only if the string starts with a '/' if (argString && argString.length) { showConfirm(cm, 'Substitutions should be of the form ' + ':s/pattern/replace/'); return; } } // After the 3rd slash, we can have flags followed by a space followed // by count. if (trailing) { flagsPart = trailing[0]; count = parseInt(trailing[1]); if (flagsPart) { if (flagsPart.indexOf('c') != -1) { confirm = true; } if (flagsPart.indexOf('g') != -1) { global = true; } if (getOption('pcre')) { regexPart = regexPart + '/' + flagsPart; } else { regexPart = regexPart.replace(/\//g, "\\/") + '/' + flagsPart; } } } if (regexPart) { // If regex part is empty, then use the previous query. Otherwise use // the regex part as the new query. try { updateSearchQuery(cm, regexPart, true /** ignoreCase */, true /** smartCase */); } catch (e) { showConfirm(cm, 'Invalid regex: ' + regexPart); return; } } replacePart = replacePart || vimGlobalState.lastSubstituteReplacePart; if (replacePart === undefined) { showConfirm(cm, 'No previous substitute regular expression'); return; } var state = getSearchState(cm); var query = state.getQuery(); var lineStart = (params.line !== undefined) ? params.line : cm.getCursor().line; var lineEnd = params.lineEnd || lineStart; if (lineStart == cm.firstLine() && lineEnd == cm.lastLine()) { lineEnd = Infinity; } if (count) { lineStart = lineEnd; lineEnd = lineStart + count - 1; } var startPos = clipCursorToContent(cm, new Pos(lineStart, 0)); var cursor = cm.getSearchCursor(query, startPos); doReplace(cm, confirm, global, lineStart, lineEnd, cursor, query, replacePart, params.callback); }, redo: CodeMirror.commands.redo, undo: CodeMirror.commands.undo, write: function(cm) { if (CodeMirror.commands.save) { // If a save command is defined, call it. CodeMirror.commands.save(cm); } else if (cm.save) { // Saves to text area if no save command is defined and cm.save() is available. cm.save(); } }, nohlsearch: function(cm) { clearSearchHighlight(cm); }, yank: function (cm) { var cur = copyCursor(cm.getCursor()); var line = cur.line; var lineText = cm.getLine(line); vimGlobalState.registerController.pushText( '0', 'yank', lineText, true, true); }, delete: function(cm, params) { var line = params.selectionLine; var lineEnd = isNaN(params.selectionLineEnd) ? line : params.selectionLineEnd; operators.delete(cm, {linewise: true}, [ { anchor: new Pos(line, 0), head: new Pos(lineEnd + 1, 0) } ]); }, join: function(cm, params) { var line = params.selectionLine; var lineEnd = isNaN(params.selectionLineEnd) ? line : params.selectionLineEnd; cm.setCursor(new Pos(line, 0)); actions.joinLines(cm, {repeat: lineEnd - line}, cm.state.vim); }, delmarks: function(cm, params) { if (!params.argString || !trim(params.argString)) { showConfirm(cm, 'Argument required'); return; } var state = cm.state.vim; var stream = new CodeMirror.StringStream(trim(params.argString)); while (!stream.eol()) { stream.eatSpace(); // Record the streams position at the beginning of the loop for use // in error messages. var count = stream.pos; if (!stream.match(/[a-zA-Z]/, false)) { showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count)); return; } var sym = stream.next(); // Check if this symbol is part of a range if (stream.match('-', true)) { // This symbol is part of a range. // The range must terminate at an alphabetic character. if (!stream.match(/[a-zA-Z]/, false)) { showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count)); return; } var startMark = sym; var finishMark = stream.next(); // The range must terminate at an alphabetic character which // shares the same case as the start of the range. if (isLowerCase(startMark) && isLowerCase(finishMark) || isUpperCase(startMark) && isUpperCase(finishMark)) { var start = startMark.charCodeAt(0); var finish = finishMark.charCodeAt(0); if (start >= finish) { showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count)); return; } // Because marks are always ASCII values, and we have // determined that they are the same case, we can use // their char codes to iterate through the defined range. for (var j = 0; j <= finish - start; j++) { var mark = String.fromCharCode(start + j); delete state.marks[mark]; } } else { showConfirm(cm, 'Invalid argument: ' + startMark + '-'); return; } } else { // This symbol is a valid mark, and is not part of a range. delete state.marks[sym]; } } } }; var exCommandDispatcher = new ExCommandDispatcher(); /** * @param {CodeMirror} cm CodeMirror instance we are in. * @param {boolean} confirm Whether to confirm each replace. * @param {Cursor} lineStart Line to start replacing from. * @param {Cursor} lineEnd Line to stop replacing at. * @param {RegExp} query Query for performing matches with. * @param {string} replaceWith Text to replace matches with. May contain $1, * $2, etc for replacing captured groups using JavaScript replace. * @param {function()} callback A callback for when the replace is done. */ function doReplace(cm, confirm, global, lineStart, lineEnd, searchCursor, query, replaceWith, callback) { // Set up all the functions. cm.state.vim.exMode = true; var done = false; var lastPos, modifiedLineNumber, joined; function replaceAll() { cm.operation(function() { while (!done) { replace(); next(); } stop(); }); } function replace() { var text = cm.getRange(searchCursor.from(), searchCursor.to()); var newText = text.replace(query, replaceWith); var unmodifiedLineNumber = searchCursor.to().line; searchCursor.replace(newText); modifiedLineNumber = searchCursor.to().line; lineEnd += modifiedLineNumber - unmodifiedLineNumber; joined = modifiedLineNumber < unmodifiedLineNumber; } function findNextValidMatch() { var lastMatchTo = lastPos && copyCursor(searchCursor.to()); var match = searchCursor.findNext(); if (match && !match[0] && lastMatchTo && cursorEqual(searchCursor.from(), lastMatchTo)) { match = searchCursor.findNext(); } return match; } function next() { // The below only loops to skip over multiple occurrences on the same // line when 'global' is not true. while(findNextValidMatch() && isInRange(searchCursor.from(), lineStart, lineEnd)) { if (!global && searchCursor.from().line == modifiedLineNumber && !joined) { continue; } cm.scrollIntoView(searchCursor.from(), 30); cm.setSelection(searchCursor.from(), searchCursor.to()); lastPos = searchCursor.from(); done = false; return; } done = true; } function stop(close) { if (close) { close(); } cm.focus(); if (lastPos) { cm.setCursor(lastPos); var vim = cm.state.vim; vim.exMode = false; vim.lastHPos = vim.lastHSPos = lastPos.ch; } if (callback) { callback(); } } function onPromptKeyDown(e, _value, close) { // Swallow all keys. CodeMirror.e_stop(e); var keyName = CodeMirror.keyName(e); switch (keyName) { case 'Y': replace(); next(); break; case 'N': next(); break; case 'A': // replaceAll contains a call to close of its own. We don't want it // to fire too early or multiple times. var savedCallback = callback; callback = undefined; cm.operation(replaceAll); callback = savedCallback; break; case 'L': replace(); // fall through and exit. case 'Q': case 'Esc': case 'Ctrl-C': case 'Ctrl-[': stop(close); break; } if (done) { stop(close); } return true; } // Actually do replace. next(); if (done) { showConfirm(cm, 'No matches for ' + query.source); return; } if (!confirm) { replaceAll(); if (callback) { callback(); } return; } showPrompt(cm, { prefix: dom('span', 'replace with ', dom('strong', replaceWith), ' (y/n/a/q/l)'), onKeyDown: onPromptKeyDown }); } CodeMirror.keyMap.vim = { attach: attachVimMap, detach: detachVimMap, call: cmKey }; function exitInsertMode(cm) { var vim = cm.state.vim; var macroModeState = vimGlobalState.macroModeState; var insertModeChangeRegister = vimGlobalState.registerController.getRegister('.'); var isPlaying = macroModeState.isPlaying; var lastChange = macroModeState.lastInsertModeChanges; if (!isPlaying) { cm.off('change', onChange); CodeMirror.off(cm.getInputField(), 'keydown', onKeyEventTargetKeyDown); } if (!isPlaying && vim.insertModeRepeat > 1) { // Perform insert mode repeat for commands like 3,a and 3,o. repeatLastEdit(cm, vim, vim.insertModeRepeat - 1, true /** repeatForInsert */); vim.lastEditInputState.repeatOverride = vim.insertModeRepeat; } delete vim.insertModeRepeat; vim.insertMode = false; cm.setCursor(cm.getCursor().line, cm.getCursor().ch-1); cm.setOption('keyMap', 'vim'); cm.setOption('disableInput', true); cm.toggleOverwrite(false); // exit replace mode if we were in it. // update the ". register before exiting insert mode insertModeChangeRegister.setText(lastChange.changes.join('')); CodeMirror.signal(cm, "vim-mode-change", {mode: "normal"}); if (macroModeState.isRecording) { logInsertModeChange(macroModeState); } } function _mapCommand(command) { defaultKeymap.unshift(command); } function mapCommand(keys, type, name, args, extra) { var command = {keys: keys, type: type}; command[type] = name; command[type + "Args"] = args; for (var key in extra) command[key] = extra[key]; _mapCommand(command); } // The timeout in milliseconds for the two-character ESC keymap should be // adjusted according to your typing speed to prevent false positives. defineOption('insertModeEscKeysTimeout', 200, 'number'); CodeMirror.keyMap['vim-insert'] = { // TODO: override navigation keys so that Esc will cancel automatic // indentation from o, O, i_ fallthrough: ['default'], attach: attachVimMap, detach: detachVimMap, call: cmKey }; CodeMirror.keyMap['vim-replace'] = { 'Backspace': 'goCharLeft', fallthrough: ['vim-insert'], attach: attachVimMap, detach: detachVimMap }; function executeMacroRegister(cm, vim, macroModeState, registerName) { var register = vimGlobalState.registerController.getRegister(registerName); if (registerName == ':') { // Read-only register containing last Ex command. if (register.keyBuffer[0]) { exCommandDispatcher.processCommand(cm, register.keyBuffer[0]); } macroModeState.isPlaying = false; return; } var keyBuffer = register.keyBuffer; var imc = 0; macroModeState.isPlaying = true; macroModeState.replaySearchQueries = register.searchQueries.slice(0); for (var i = 0; i < keyBuffer.length; i++) { var text = keyBuffer[i]; var match, key; while (text) { // Pull off one command key, which is either a single character // or a special sequence wrapped in '<' and '>', e.g. ''. match = (/<\w+-.+?>|<\w+>|./).exec(text); key = match[0]; text = text.substring(match.index + key.length); vimApi.handleKey(cm, key, 'macro'); if (vim.insertMode) { var changes = register.insertModeChanges[imc++].changes; vimGlobalState.macroModeState.lastInsertModeChanges.changes = changes; repeatInsertModeChanges(cm, changes, 1); exitInsertMode(cm); } } } macroModeState.isPlaying = false; } function logKey(macroModeState, key) { if (macroModeState.isPlaying) { return; } var registerName = macroModeState.latestRegister; var register = vimGlobalState.registerController.getRegister(registerName); if (register) { register.pushText(key); } } function logInsertModeChange(macroModeState) { if (macroModeState.isPlaying) { return; } var registerName = macroModeState.latestRegister; var register = vimGlobalState.registerController.getRegister(registerName); if (register && register.pushInsertModeChanges) { register.pushInsertModeChanges(macroModeState.lastInsertModeChanges); } } function logSearchQuery(macroModeState, query) { if (macroModeState.isPlaying) { return; } var registerName = macroModeState.latestRegister; var register = vimGlobalState.registerController.getRegister(registerName); if (register && register.pushSearchQuery) { register.pushSearchQuery(query); } } /** * Listens for changes made in insert mode. * Should only be active in insert mode. */ function onChange(cm, changeObj) { var macroModeState = vimGlobalState.macroModeState; var lastChange = macroModeState.lastInsertModeChanges; if (!macroModeState.isPlaying) { while(changeObj) { lastChange.expectCursorActivityForChange = true; if (lastChange.ignoreCount > 1) { lastChange.ignoreCount--; } else if (changeObj.origin == '+input' || changeObj.origin == 'paste' || changeObj.origin === undefined /* only in testing */) { var selectionCount = cm.listSelections().length; if (selectionCount > 1) lastChange.ignoreCount = selectionCount; var text = changeObj.text.join('\n'); if (lastChange.maybeReset) { lastChange.changes = []; lastChange.maybeReset = false; } if (text) { if (cm.state.overwrite && !/\n/.test(text)) { lastChange.changes.push([text]); } else { lastChange.changes.push(text); } } } // Change objects may be chained with next. changeObj = changeObj.next; } } } /** * Listens for any kind of cursor activity on CodeMirror. */ function onCursorActivity(cm) { var vim = cm.state.vim; if (vim.insertMode) { // Tracking cursor activity in insert mode (for macro support). var macroModeState = vimGlobalState.macroModeState; if (macroModeState.isPlaying) { return; } var lastChange = macroModeState.lastInsertModeChanges; if (lastChange.expectCursorActivityForChange) { lastChange.expectCursorActivityForChange = false; } else { // Cursor moved outside the context of an edit. Reset the change. lastChange.maybeReset = true; } } else if (!cm.curOp.isVimOp) { handleExternalSelection(cm, vim); } } function handleExternalSelection(cm, vim) { var anchor = cm.getCursor('anchor'); var head = cm.getCursor('head'); // Enter or exit visual mode to match mouse selection. if (vim.visualMode && !cm.somethingSelected()) { exitVisualMode(cm, false); } else if (!vim.visualMode && !vim.insertMode && cm.somethingSelected()) { vim.visualMode = true; vim.visualLine = false; CodeMirror.signal(cm, "vim-mode-change", {mode: "visual"}); } if (vim.visualMode) { // Bind CodeMirror selection model to vim selection model. // Mouse selections are considered visual characterwise. var headOffset = !cursorIsBefore(head, anchor) ? -1 : 0; var anchorOffset = cursorIsBefore(head, anchor) ? -1 : 0; head = offsetCursor(head, 0, headOffset); anchor = offsetCursor(anchor, 0, anchorOffset); vim.sel = { anchor: anchor, head: head }; updateMark(cm, vim, '<', cursorMin(head, anchor)); updateMark(cm, vim, '>', cursorMax(head, anchor)); } else if (!vim.insertMode) { // Reset lastHPos if selection was modified by something outside of vim mode e.g. by mouse. vim.lastHPos = cm.getCursor().ch; } } /** Wrapper for special keys pressed in insert mode */ function InsertModeKey(keyName) { this.keyName = keyName; } /** * Handles raw key down events from the text area. * - Should only be active in insert mode. * - For recording deletes in insert mode. */ function onKeyEventTargetKeyDown(e) { var macroModeState = vimGlobalState.macroModeState; var lastChange = macroModeState.lastInsertModeChanges; var keyName = CodeMirror.keyName(e); if (!keyName) { return; } function onKeyFound() { if (lastChange.maybeReset) { lastChange.changes = []; lastChange.maybeReset = false; } lastChange.changes.push(new InsertModeKey(keyName)); return true; } if (keyName.indexOf('Delete') != -1 || keyName.indexOf('Backspace') != -1) { CodeMirror.lookupKey(keyName, 'vim-insert', onKeyFound); } } /** * Repeats the last edit, which includes exactly 1 command and at most 1 * insert. Operator and motion commands are read from lastEditInputState, * while action commands are read from lastEditActionCommand. * * If repeatForInsert is true, then the function was called by * exitInsertMode to repeat the insert mode changes the user just made. The * corresponding enterInsertMode call was made with a count. */ function repeatLastEdit(cm, vim, repeat, repeatForInsert) { var macroModeState = vimGlobalState.macroModeState; macroModeState.isPlaying = true; var isAction = !!vim.lastEditActionCommand; var cachedInputState = vim.inputState; function repeatCommand() { if (isAction) { commandDispatcher.processAction(cm, vim, vim.lastEditActionCommand); } else { commandDispatcher.evalInput(cm, vim); } } function repeatInsert(repeat) { if (macroModeState.lastInsertModeChanges.changes.length > 0) { // For some reason, repeat cw in desktop VIM does not repeat // insert mode changes. Will conform to that behavior. repeat = !vim.lastEditActionCommand ? 1 : repeat; var changeObject = macroModeState.lastInsertModeChanges; repeatInsertModeChanges(cm, changeObject.changes, repeat); } } vim.inputState = vim.lastEditInputState; if (isAction && vim.lastEditActionCommand.interlaceInsertRepeat) { // o and O repeat have to be interlaced with insert repeats so that the // insertions appear on separate lines instead of the last line. for (var i = 0; i < repeat; i++) { repeatCommand(); repeatInsert(1); } } else { if (!repeatForInsert) { // Hack to get the cursor to end up at the right place. If I is // repeated in insert mode repeat, cursor will be 1 insert // change set left of where it should be. repeatCommand(); } repeatInsert(repeat); } vim.inputState = cachedInputState; if (vim.insertMode && !repeatForInsert) { // Don't exit insert mode twice. If repeatForInsert is set, then we // were called by an exitInsertMode call lower on the stack. exitInsertMode(cm); } macroModeState.isPlaying = false; } function repeatInsertModeChanges(cm, changes, repeat) { function keyHandler(binding) { if (typeof binding == 'string') { CodeMirror.commands[binding](cm); } else { binding(cm); } return true; } var head = cm.getCursor('head'); var visualBlock = vimGlobalState.macroModeState.lastInsertModeChanges.visualBlock; if (visualBlock) { // Set up block selection again for repeating the changes. selectForInsert(cm, head, visualBlock + 1); repeat = cm.listSelections().length; cm.setCursor(head); } for (var i = 0; i < repeat; i++) { if (visualBlock) { cm.setCursor(offsetCursor(head, i, 0)); } for (var j = 0; j < changes.length; j++) { var change = changes[j]; if (change instanceof InsertModeKey) { CodeMirror.lookupKey(change.keyName, 'vim-insert', keyHandler); } else if (typeof change == "string") { cm.replaceSelection(change); } else { var start = cm.getCursor(); var end = offsetCursor(start, 0, change[0].length); cm.replaceRange(change[0], start, end); cm.setCursor(end); } } } if (visualBlock) { cm.setCursor(offsetCursor(head, 0, 1)); } } // multiselect support function cloneVimState(state) { var n = new state.constructor(); Object.keys(state).forEach(function(key) { var o = state[key]; if (Array.isArray(o)) o = o.slice(); else if (o && typeof o == "object" && o.constructor != Object) o = cloneVimState(o); n[key] = o; }); if (state.sel) { n.sel = { head: state.sel.head && copyCursor(state.sel.head), anchor: state.sel.anchor && copyCursor(state.sel.anchor) }; } return n; } function multiSelectHandleKey(cm, key, origin) { var isHandled = false; var vim = vimApi.maybeInitVimState_(cm); var visualBlock = vim.visualBlock || vim.wasInVisualBlock; var wasMultiselect = cm.isInMultiSelectMode(); if (vim.wasInVisualBlock && !wasMultiselect) { vim.wasInVisualBlock = false; } else if (wasMultiselect && vim.visualBlock) { vim.wasInVisualBlock = true; } if (key == '' && !vim.insertMode && !vim.visualMode && wasMultiselect && vim.status == "") { // allow editor to exit multiselect clearInputState(cm); } else if (visualBlock || !wasMultiselect || cm.inVirtualSelectionMode) { isHandled = vimApi.handleKey(cm, key, origin); } else { var old = cloneVimState(vim); var changeQueueList = vim.inputState.changeQueueList || []; cm.operation(function() { cm.curOp.isVimOp = true; var index = 0; cm.forEachSelection(function() { cm.state.vim.inputState.changeQueue = changeQueueList[index]; var head = cm.getCursor("head"); var anchor = cm.getCursor("anchor"); var headOffset = !cursorIsBefore(head, anchor) ? -1 : 0; var anchorOffset = cursorIsBefore(head, anchor) ? -1 : 0; head = offsetCursor(head, 0, headOffset); anchor = offsetCursor(anchor, 0, anchorOffset); cm.state.vim.sel.head = head; cm.state.vim.sel.anchor = anchor; isHandled = vimApi.handleKey(cm, key, origin); if (cm.virtualSelection) { changeQueueList[index] = cm.state.vim.inputState.changeQueue; cm.state.vim = cloneVimState(old); } index++; }); if (cm.curOp.cursorActivity && !isHandled) cm.curOp.cursorActivity = false; cm.state.vim = vim vim.inputState.changeQueueList = changeQueueList vim.inputState.changeQueue = null; }, true); } // some commands may bring visualMode and selection out of sync if (isHandled && !vim.visualMode && !vim.insert && vim.visualMode != cm.somethingSelected()) { handleExternalSelection(cm, vim, true); } return isHandled; } resetVimGlobalState(); // Initialize Vim and make it available as an API. return vimApi; } CodeMirror.Vim = initVimMode(CodeMirror); !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).i18next=t()}(this,function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function n(e){for(var n=1;n1&&void 0!==arguments[1]?arguments[1]:{};o(this,e),this.init(t,n)}return r(e,[{key:"init",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.prefix=t.prefix||"i18next:",this.logger=e||p,this.options=t,this.debug=t.debug}},{key:"setDebug",value:function(e){this.debug=e}},{key:"log",value:function(){for(var e=arguments.length,t=new Array(e),n=0;n1?t-1:0),o=1;o-1?e.replace(/###/g,"."):e}function i(){return!e||"string"==typeof e}for(var r="string"!=typeof t?[].concat(t):t.split(".");r.length>1;){if(i())return{};var a=o(r.shift());!e[a]&&n&&(e[a]=new n),e=e[a]}return i()?{}:{obj:e,k:o(r.shift())}}function y(e,t,n){var o=v(e,t,Object);o.obj[o.k]=n}function m(e,t){var n=v(e,t),o=n.obj,i=n.k;if(o)return o[i]}function b(e,t,n){var o=m(e,n);return void 0!==o?o:m(t,n)}function k(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}var x={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};function w(e){return"string"==typeof e?e.replace(/[&<>"'\/]/g,function(e){return x[e]}):e}var S="undefined"!=typeof window&&window.navigator&&window.navigator.userAgent&&window.navigator.userAgent.indexOf("MSIE")>-1,L=function(e){function t(e){var n,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{ns:["translation"],defaultNS:"translation"};return o(this,t),n=s(this,u(t).call(this)),S&&f.call(a(n)),n.data=e||{},n.options=i,void 0===n.options.keySeparator&&(n.options.keySeparator="."),n}return c(t,f),r(t,[{key:"addNamespaces",value:function(e){this.options.ns.indexOf(e)<0&&this.options.ns.push(e)}},{key:"removeNamespaces",value:function(e){var t=this.options.ns.indexOf(e);t>-1&&this.options.ns.splice(t,1)}},{key:"getResource",value:function(e,t,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=void 0!==o.keySeparator?o.keySeparator:this.options.keySeparator,r=[e,t];return n&&"string"!=typeof n&&(r=r.concat(n)),n&&"string"==typeof n&&(r=r.concat(i?n.split(i):n)),e.indexOf(".")>-1&&(r=e.split(".")),m(this.data,r)}},{key:"addResource",value:function(e,t,n,o){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{silent:!1},r=this.options.keySeparator;void 0===r&&(r=".");var a=[e,t];n&&(a=a.concat(r?n.split(r):n)),e.indexOf(".")>-1&&(o=t,t=(a=e.split("."))[1]),this.addNamespaces(t),y(this.data,a,o),i.silent||this.emit("added",e,t,n,o)}},{key:"addResources",value:function(e,t,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{silent:!1};for(var i in n)"string"!=typeof n[i]&&"[object Array]"!==Object.prototype.toString.apply(n[i])||this.addResource(e,t,i,n[i],{silent:!0});o.silent||this.emit("added",e,t,n)}},{key:"addResourceBundle",value:function(e,t,o,i,r){var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{silent:!1},s=[e,t];e.indexOf(".")>-1&&(i=o,o=t,t=(s=e.split("."))[1]),this.addNamespaces(t);var u=m(this.data,s)||{};i?function e(t,n,o){for(var i in n)"__proto__"!==i&&(i in t?"string"==typeof t[i]||t[i]instanceof String||"string"==typeof n[i]||n[i]instanceof String?o&&(t[i]=n[i]):e(t[i],n[i],o):t[i]=n[i]);return t}(u,o,r):u=n({},u,o),y(this.data,s,u),a.silent||this.emit("added",e,t,o)}},{key:"removeResourceBundle",value:function(e,t){this.hasResourceBundle(e,t)&&delete this.data[e][t],this.removeNamespaces(t),this.emit("removed",e,t)}},{key:"hasResourceBundle",value:function(e,t){return void 0!==this.getResource(e,t)}},{key:"getResourceBundle",value:function(e,t){return t||(t=this.options.defaultNS),"v1"===this.options.compatibilityAPI?n({},{},this.getResource(e,t)):this.getResource(e,t)}},{key:"getDataByLanguage",value:function(e){return this.data[e]}},{key:"toJSON",value:function(){return this.data}}]),t}(),O={processors:{},addPostProcessor:function(e){this.processors[e.name]=e},handle:function(e,t,n,o,i){var r=this;return e.forEach(function(e){r.processors[e]&&(t=r.processors[e].process(t,n,o,i))}),t}},R={},C=function(t){function i(e){var t,n,r,l,c=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return o(this,i),t=s(this,u(i).call(this)),S&&f.call(a(t)),n=["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],r=e,l=a(t),n.forEach(function(e){r[e]&&(l[e]=r[e])}),t.options=c,void 0===t.options.keySeparator&&(t.options.keySeparator="."),t.logger=g.create("translator"),t}return c(i,f),r(i,[{key:"changeLanguage",value:function(e){e&&(this.language=e)}},{key:"exists",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{interpolation:{}},n=this.resolve(e,t);return n&&void 0!==n.res}},{key:"extractFromKey",value:function(e,t){var n=void 0!==t.nsSeparator?t.nsSeparator:this.options.nsSeparator;void 0===n&&(n=":");var o=void 0!==t.keySeparator?t.keySeparator:this.options.keySeparator,i=t.ns||this.options.defaultNS;if(n&&e.indexOf(n)>-1){var r=e.match(this.interpolator.nestingRegexp);if(r&&r.length>0)return{key:e,namespaces:i};var a=e.split(n);(n!==o||n===o&&this.options.ns.indexOf(a[0])>-1)&&(i=a.shift()),e=a.join(o)}return"string"==typeof i&&(i=[i]),{key:e,namespaces:i}}},{key:"translate",value:function(t,o,i){var r=this;if("object"!==e(o)&&this.options.overloadTranslationOptionHandler&&(o=this.options.overloadTranslationOptionHandler(arguments)),o||(o={}),null==t)return"";Array.isArray(t)||(t=[String(t)]);var a=void 0!==o.keySeparator?o.keySeparator:this.options.keySeparator,s=this.extractFromKey(t[t.length-1],o),u=s.key,l=s.namespaces,c=l[l.length-1],p=o.lng||this.language,g=o.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(p&&"cimode"===p.toLowerCase()){if(g){var f=o.nsSeparator||this.options.nsSeparator;return c+f+u}return u}var h=this.resolve(t,o),d=h&&h.res,v=h&&h.usedKey||u,y=h&&h.exactUsedKey||u,m=Object.prototype.toString.apply(d),b=void 0!==o.joinArrays?o.joinArrays:this.options.joinArrays,k=!this.i18nFormat||this.i18nFormat.handleAsObject;if(k&&d&&("string"!=typeof d&&"boolean"!=typeof d&&"number"!=typeof d)&&["[object Number]","[object Function]","[object RegExp]"].indexOf(m)<0&&("string"!=typeof b||"[object Array]"!==m)){if(!o.returnObjects&&!this.options.returnObjects)return this.logger.warn("accessing an object - but returnObjects options is not enabled!"),this.options.returnedObjectHandler?this.options.returnedObjectHandler(v,d,o):"key '".concat(u," (").concat(this.language,")' returned an object instead of string.");if(a){var x="[object Array]"===m,w=x?[]:{},S=x?y:v;for(var L in d)if(Object.prototype.hasOwnProperty.call(d,L)){var O="".concat(S).concat(a).concat(L);w[L]=this.translate(O,n({},o,{joinArrays:!1,ns:l})),w[L]===O&&(w[L]=d[L])}d=w}}else if(k&&"string"==typeof b&&"[object Array]"===m)(d=d.join(b))&&(d=this.extendTranslation(d,t,o,i));else{var R=!1,C=!1;if(!this.isValidLookup(d)&&void 0!==o.defaultValue){if(R=!0,void 0!==o.count){var N=this.pluralResolver.getSuffix(p,o.count);d=o["defaultValue".concat(N)]}d||(d=o.defaultValue)}this.isValidLookup(d)||(C=!0,d=u);var j=o.defaultValue&&o.defaultValue!==d&&this.options.updateMissing;if(C||R||j){if(this.logger.log(j?"updateKey":"missingKey",p,c,u,j?o.defaultValue:d),a){var E=this.resolve(u,n({},o,{keySeparator:!1}));E&&E.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}var P=[],F=this.languageUtils.getFallbackCodes(this.options.fallbackLng,o.lng||this.language);if("fallback"===this.options.saveMissingTo&&F&&F[0])for(var V=0;V1&&void 0!==arguments[1]?arguments[1]:{};return"string"==typeof e&&(e=[e]),e.forEach(function(e){if(!a.isValidLookup(t)){var u=a.extractFromKey(e,s),l=u.key;n=l;var c=u.namespaces;a.options.fallbackNS&&(c=c.concat(a.options.fallbackNS));var p=void 0!==s.count&&"string"!=typeof s.count,g=void 0!==s.context&&"string"==typeof s.context&&""!==s.context,f=s.lngs?s.lngs:a.languageUtils.toResolveHierarchy(s.lng||a.language,s.fallbackLng);c.forEach(function(e){a.isValidLookup(t)||(r=e,!R["".concat(f[0],"-").concat(e)]&&a.utils&&a.utils.hasLoadedNamespace&&!a.utils.hasLoadedNamespace(r)&&(R["".concat(f[0],"-").concat(e)]=!0,a.logger.warn('key "'.concat(n,'" for languages "').concat(f.join(", "),'" won\'t get resolved as namespace "').concat(r,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),f.forEach(function(n){if(!a.isValidLookup(t)){i=n;var r,u,c=l,f=[c];if(a.i18nFormat&&a.i18nFormat.addLookupKeys)a.i18nFormat.addLookupKeys(f,l,n,e,s);else p&&(r=a.pluralResolver.getSuffix(n,s.count)),p&&g&&f.push(c+r),g&&f.push(c+="".concat(a.options.contextSeparator).concat(s.context)),p&&f.push(c+=r);for(;u=f.pop();)a.isValidLookup(t)||(o=u,t=a.getResource(n,e,u,s))}}))})}}),{res:t,usedKey:n,exactUsedKey:o,usedLng:i,usedNS:r}}},{key:"isValidLookup",value:function(e){return!(void 0===e||!this.options.returnNull&&null===e||!this.options.returnEmptyString&&""===e)}},{key:"getResource",value:function(e,t,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(e,t,n,o):this.resourceStore.getResource(e,t,n,o)}}]),i}();function N(e){return e.charAt(0).toUpperCase()+e.slice(1)}var j=function(){function e(t){o(this,e),this.options=t,this.whitelist=this.options.supportedLngs||!1,this.supportedLngs=this.options.supportedLngs||!1,this.logger=g.create("languageUtils")}return r(e,[{key:"getScriptPartFromCode",value:function(e){if(!e||e.indexOf("-")<0)return null;var t=e.split("-");return 2===t.length?null:(t.pop(),"x"===t[t.length-1].toLowerCase()?null:this.formatLanguageCode(t.join("-")))}},{key:"getLanguagePartFromCode",value:function(e){if(!e||e.indexOf("-")<0)return e;var t=e.split("-");return this.formatLanguageCode(t[0])}},{key:"formatLanguageCode",value:function(e){if("string"==typeof e&&e.indexOf("-")>-1){var t=["hans","hant","latn","cyrl","cans","mong","arab"],n=e.split("-");return this.options.lowerCaseLng?n=n.map(function(e){return e.toLowerCase()}):2===n.length?(n[0]=n[0].toLowerCase(),n[1]=n[1].toUpperCase(),t.indexOf(n[1].toLowerCase())>-1&&(n[1]=N(n[1].toLowerCase()))):3===n.length&&(n[0]=n[0].toLowerCase(),2===n[1].length&&(n[1]=n[1].toUpperCase()),"sgn"!==n[0]&&2===n[2].length&&(n[2]=n[2].toUpperCase()),t.indexOf(n[1].toLowerCase())>-1&&(n[1]=N(n[1].toLowerCase())),t.indexOf(n[2].toLowerCase())>-1&&(n[2]=N(n[2].toLowerCase()))),n.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?e.toLowerCase():e}},{key:"isWhitelisted",value:function(e){return this.logger.deprecate("languageUtils.isWhitelisted",'function "isWhitelisted" will be renamed to "isSupportedCode" in the next major - please make sure to rename it\'s usage asap.'),this.isSupportedCode(e)}},{key:"isSupportedCode",value:function(e){return("languageOnly"===this.options.load||this.options.nonExplicitSupportedLngs)&&(e=this.getLanguagePartFromCode(e)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(e)>-1}},{key:"getBestMatchFromCodes",value:function(e){var t,n=this;return e?(e.forEach(function(e){if(!t){var o=n.formatLanguageCode(e);n.options.supportedLngs&&!n.isSupportedCode(o)||(t=o)}}),!t&&this.options.supportedLngs&&e.forEach(function(e){if(!t){var o=n.getLanguagePartFromCode(e);if(n.isSupportedCode(o))return t=o;t=n.options.supportedLngs.find(function(e){if(0===e.indexOf(o))return e})}}),t||(t=this.getFallbackCodes(this.options.fallbackLng)[0]),t):null}},{key:"getFallbackCodes",value:function(e,t){if(!e)return[];if("string"==typeof e&&(e=[e]),"[object Array]"===Object.prototype.toString.apply(e))return e;if(!t)return e.default||[];var n=e[t];return n||(n=e[this.getScriptPartFromCode(t)]),n||(n=e[this.formatLanguageCode(t)]),n||(n=e[this.getLanguagePartFromCode(t)]),n||(n=e.default),n||[]}},{key:"toResolveHierarchy",value:function(e,t){var n=this,o=this.getFallbackCodes(t||this.options.fallbackLng||[],e),i=[],r=function(e){e&&(n.isSupportedCode(e)?i.push(e):n.logger.warn("rejecting language code not found in supportedLngs: ".concat(e)))};return"string"==typeof e&&e.indexOf("-")>-1?("languageOnly"!==this.options.load&&r(this.formatLanguageCode(e)),"languageOnly"!==this.options.load&&"currentOnly"!==this.options.load&&r(this.getScriptPartFromCode(e)),"currentOnly"!==this.options.load&&r(this.getLanguagePartFromCode(e))):"string"==typeof e&&r(this.formatLanguageCode(e)),o.forEach(function(e){i.indexOf(e)<0&&r(n.formatLanguageCode(e))}),i}}]),e}(),E=[{lngs:["ach","ak","am","arn","br","fil","gun","ln","mfe","mg","mi","oc","pt","pt-BR","tg","ti","tr","uz","wa"],nr:[1,2],fc:1},{lngs:["af","an","ast","az","bg","bn","ca","da","de","dev","el","en","eo","es","et","eu","fi","fo","fur","fy","gl","gu","ha","hi","hu","hy","ia","it","kn","ku","lb","mai","ml","mn","mr","nah","nap","nb","ne","nl","nn","no","nso","pa","pap","pms","ps","pt-PT","rm","sco","se","si","so","son","sq","sv","sw","ta","te","tk","ur","yo"],nr:[1,2],fc:2},{lngs:["ay","bo","cgg","fa","ht","id","ja","jbo","ka","kk","km","ko","ky","lo","ms","sah","su","th","tt","ug","vi","wo","zh"],nr:[1],fc:3},{lngs:["be","bs","cnr","dz","hr","ru","sr","uk"],nr:[1,2,5],fc:4},{lngs:["ar"],nr:[0,1,2,3,11,100],fc:5},{lngs:["cs","sk"],nr:[1,2,5],fc:6},{lngs:["csb","pl"],nr:[1,2,5],fc:7},{lngs:["cy"],nr:[1,2,3,8],fc:8},{lngs:["fr"],nr:[1,2],fc:9},{lngs:["ga"],nr:[1,2,3,7,11],fc:10},{lngs:["gd"],nr:[1,2,3,20],fc:11},{lngs:["is"],nr:[1,2],fc:12},{lngs:["jv"],nr:[0,1],fc:13},{lngs:["kw"],nr:[1,2,3,4],fc:14},{lngs:["lt"],nr:[1,2,10],fc:15},{lngs:["lv"],nr:[1,2,0],fc:16},{lngs:["mk"],nr:[1,2],fc:17},{lngs:["mnk"],nr:[0,1,2],fc:18},{lngs:["mt"],nr:[1,2,11,20],fc:19},{lngs:["or"],nr:[2,1],fc:2},{lngs:["ro"],nr:[1,2,20],fc:20},{lngs:["sl"],nr:[5,1,2,3],fc:21},{lngs:["he","iw"],nr:[1,2,20,21],fc:22}],P={1:function(e){return Number(e>1)},2:function(e){return Number(1!=e)},3:function(e){return 0},4:function(e){return Number(e%10==1&&e%100!=11?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2)},5:function(e){return Number(0==e?0:1==e?1:2==e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5)},6:function(e){return Number(1==e?0:e>=2&&e<=4?1:2)},7:function(e){return Number(1==e?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2)},8:function(e){return Number(1==e?0:2==e?1:8!=e&&11!=e?2:3)},9:function(e){return Number(e>=2)},10:function(e){return Number(1==e?0:2==e?1:e<7?2:e<11?3:4)},11:function(e){return Number(1==e||11==e?0:2==e||12==e?1:e>2&&e<20?2:3)},12:function(e){return Number(e%10!=1||e%100==11)},13:function(e){return Number(0!==e)},14:function(e){return Number(1==e?0:2==e?1:3==e?2:3)},15:function(e){return Number(e%10==1&&e%100!=11?0:e%10>=2&&(e%100<10||e%100>=20)?1:2)},16:function(e){return Number(e%10==1&&e%100!=11?0:0!==e?1:2)},17:function(e){return Number(1==e||e%10==1&&e%100!=11?0:1)},18:function(e){return Number(0==e?0:1==e?1:2)},19:function(e){return Number(1==e?0:0==e||e%100>1&&e%100<11?1:e%100>10&&e%100<20?2:3)},20:function(e){return Number(1==e?0:0==e||e%100>0&&e%100<20?1:2)},21:function(e){return Number(e%100==1?1:e%100==2?2:e%100==3||e%100==4?3:0)},22:function(e){return Number(1==e?0:2==e?1:(e<0||e>10)&&e%10==0?2:3)}};var F=function(){function e(t){var n,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};o(this,e),this.languageUtils=t,this.options=i,this.logger=g.create("pluralResolver"),this.rules=(n={},E.forEach(function(e){e.lngs.forEach(function(t){n[t]={numbers:e.nr,plurals:P[e.fc]}})}),n)}return r(e,[{key:"addRule",value:function(e,t){this.rules[e]=t}},{key:"getRule",value:function(e){return this.rules[e]||this.rules[this.languageUtils.getLanguagePartFromCode(e)]}},{key:"needsPlural",value:function(e){var t=this.getRule(e);return t&&t.numbers.length>1}},{key:"getPluralFormsOfKey",value:function(e,t){var n=this,o=[],i=this.getRule(e);return i?(i.numbers.forEach(function(i){var r=n.getSuffix(e,i);o.push("".concat(t).concat(r))}),o):o}},{key:"getSuffix",value:function(e,t){var n=this,o=this.getRule(e);if(o){var i=o.noAbs?o.plurals(t):o.plurals(Math.abs(t)),r=o.numbers[i];this.options.simplifyPluralSuffix&&2===o.numbers.length&&1===o.numbers[0]&&(2===r?r="plural":1===r&&(r=""));var a=function(){return n.options.prepend&&r.toString()?n.options.prepend+r.toString():r.toString()};return"v1"===this.options.compatibilityJSON?1===r?"":"number"==typeof r?"_plural_".concat(r.toString()):a():"v2"===this.options.compatibilityJSON?a():this.options.simplifyPluralSuffix&&2===o.numbers.length&&1===o.numbers[0]?a():this.options.prepend&&i.toString()?this.options.prepend+i.toString():i.toString()}return this.logger.warn("no plural rule found for: ".concat(e)),""}}]),e}(),V=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};o(this,e),this.logger=g.create("interpolator"),this.options=t,this.format=t.interpolation&&t.interpolation.format||function(e){return e},this.init(t)}return r(e,[{key:"init",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e.interpolation||(e.interpolation={escapeValue:!0});var t=e.interpolation;this.escape=void 0!==t.escape?t.escape:w,this.escapeValue=void 0===t.escapeValue||t.escapeValue,this.useRawValueToEscape=void 0!==t.useRawValueToEscape&&t.useRawValueToEscape,this.prefix=t.prefix?k(t.prefix):t.prefixEscaped||"{{",this.suffix=t.suffix?k(t.suffix):t.suffixEscaped||"}}",this.formatSeparator=t.formatSeparator?t.formatSeparator:t.formatSeparator||",",this.unescapePrefix=t.unescapeSuffix?"":t.unescapePrefix||"-",this.unescapeSuffix=this.unescapePrefix?"":t.unescapeSuffix||"",this.nestingPrefix=t.nestingPrefix?k(t.nestingPrefix):t.nestingPrefixEscaped||k("$t("),this.nestingSuffix=t.nestingSuffix?k(t.nestingSuffix):t.nestingSuffixEscaped||k(")"),this.nestingOptionsSeparator=t.nestingOptionsSeparator?t.nestingOptionsSeparator:t.nestingOptionsSeparator||",",this.maxReplaces=t.maxReplaces?t.maxReplaces:1e3,this.alwaysFormat=void 0!==t.alwaysFormat&&t.alwaysFormat,this.resetRegExp()}},{key:"reset",value:function(){this.options&&this.init(this.options)}},{key:"resetRegExp",value:function(){var e="".concat(this.prefix,"(.+?)").concat(this.suffix);this.regexp=new RegExp(e,"g");var t="".concat(this.prefix).concat(this.unescapePrefix,"(.+?)").concat(this.unescapeSuffix).concat(this.suffix);this.regexpUnescape=new RegExp(t,"g");var n="".concat(this.nestingPrefix,"(.+?)").concat(this.nestingSuffix);this.nestingRegexp=new RegExp(n,"g")}},{key:"interpolate",value:function(e,t,n,o){var i,r,a,s=this,u=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{};function l(e){return e.replace(/\$/g,"$$$$")}var c=function(e){if(e.indexOf(s.formatSeparator)<0){var i=b(t,u,e);return s.alwaysFormat?s.format(i,void 0,n):i}var r=e.split(s.formatSeparator),a=r.shift().trim(),l=r.join(s.formatSeparator).trim();return s.format(b(t,u,a),l,n,o)};this.resetRegExp();var p=o&&o.missingInterpolationHandler||this.options.missingInterpolationHandler,g=o&&o.interpolation&&o.interpolation.skipOnVariables||this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:function(e){return l(e)}},{regex:this.regexp,safeValue:function(e){return s.escapeValue?l(s.escape(e)):l(e)}}].forEach(function(t){for(a=0;i=t.regex.exec(e);){if(void 0===(r=c(i[1].trim())))if("function"==typeof p){var n=p(e,i,o);r="string"==typeof n?n:""}else{if(g){r=i[0];continue}s.logger.warn("missed to pass in variable ".concat(i[1]," for interpolating ").concat(e)),r=""}else"string"==typeof r||s.useRawValueToEscape||(r=d(r));if(e=e.replace(i[0],t.safeValue(r)),t.regex.lastIndex=0,++a>=s.maxReplaces)break}}),e}},{key:"nest",value:function(e,t){var o,i,r=this,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},s=n({},a);function u(e,t){var o=this.nestingOptionsSeparator;if(e.indexOf(o)<0)return e;var i=e.split(new RegExp("".concat(o,"[ ]*{"))),r="{".concat(i[1]);e=i[0],r=(r=this.interpolate(r,s)).replace(/'/g,'"');try{s=JSON.parse(r),t&&(s=n({},t,s))}catch(t){return this.logger.warn("failed parsing options string in nesting for key ".concat(e),t),"".concat(e).concat(o).concat(r)}return delete s.defaultValue,e}for(s.applyPostProcessor=!1,delete s.defaultValue;o=this.nestingRegexp.exec(e);){var l=[],c=!1;if(o[0].includes(this.formatSeparator)&&!/{.*}/.test(o[1])){var p=o[1].split(this.formatSeparator).map(function(e){return e.trim()});o[1]=p.shift(),l=p,c=!0}if((i=t(u.call(this,o[1].trim(),s),s))&&o[0]===e&&"string"!=typeof i)return i;"string"!=typeof i&&(i=d(i)),i||(this.logger.warn("missed to resolve ".concat(o[1]," for nesting ").concat(e)),i=""),c&&(i=l.reduce(function(e,t){return r.format(e,t,a.lng,a)},i.trim())),e=e.replace(o[0],i),this.regexp.lastIndex=0}return e}}]),e}();var T=function(e){function t(e,n,i){var r,l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return o(this,t),r=s(this,u(t).call(this)),S&&f.call(a(r)),r.backend=e,r.store=n,r.services=i,r.languageUtils=i.languageUtils,r.options=l,r.logger=g.create("backendConnector"),r.state={},r.queue=[],r.backend&&r.backend.init&&r.backend.init(i,l.backend,l),r}return c(t,f),r(t,[{key:"queueLoad",value:function(e,t,n,o){var i=this,r=[],a=[],s=[],u=[];return e.forEach(function(e){var o=!0;t.forEach(function(t){var s="".concat(e,"|").concat(t);!n.reload&&i.store.hasResourceBundle(e,t)?i.state[s]=2:i.state[s]<0||(1===i.state[s]?a.indexOf(s)<0&&a.push(s):(i.state[s]=1,o=!1,a.indexOf(s)<0&&a.push(s),r.indexOf(s)<0&&r.push(s),u.indexOf(t)<0&&u.push(t)))}),o||s.push(e)}),(r.length||a.length)&&this.queue.push({pending:a,loaded:{},errors:[],callback:o}),{toLoad:r,pending:a,toLoadLanguages:s,toLoadNamespaces:u}}},{key:"loaded",value:function(e,t,n){var o=e.split("|"),i=o[0],r=o[1];t&&this.emit("failedLoading",i,r,t),n&&this.store.addResourceBundle(i,r,n),this.state[e]=t?-1:2;var a={};this.queue.forEach(function(n){var o,s,u,l,c,p;o=n.loaded,s=r,l=v(o,[i],Object),c=l.obj,p=l.k,c[p]=c[p]||[],u&&(c[p]=c[p].concat(s)),u||c[p].push(s),function(e,t){for(var n=e.indexOf(t);-1!==n;)e.splice(n,1),n=e.indexOf(t)}(n.pending,e),t&&n.errors.push(t),0!==n.pending.length||n.done||(Object.keys(n.loaded).forEach(function(e){a[e]||(a[e]=[]),n.loaded[e].length&&n.loaded[e].forEach(function(t){a[e].indexOf(t)<0&&a[e].push(t)})}),n.done=!0,n.errors.length?n.callback(n.errors):n.callback())}),this.emit("loaded",a),this.queue=this.queue.filter(function(e){return!e.done})}},{key:"read",value:function(e,t,n){var o=this,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:350,a=arguments.length>5?arguments[5]:void 0;return e.length?this.backend[n](e,t,function(s,u){s&&u&&i<5?setTimeout(function(){o.read.call(o,e,t,n,i+1,2*r,a)},r):a(s,u)}):a(null,{})}},{key:"prepareLoading",value:function(e,t){var n=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3?arguments[3]:void 0;if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),i&&i();"string"==typeof e&&(e=this.languageUtils.toResolveHierarchy(e)),"string"==typeof t&&(t=[t]);var r=this.queueLoad(e,t,o,i);if(!r.toLoad.length)return r.pending.length||i(),null;r.toLoad.forEach(function(e){n.loadOne(e)})}},{key:"load",value:function(e,t,n){this.prepareLoading(e,t,{},n)}},{key:"reload",value:function(e,t,n){this.prepareLoading(e,t,{reload:!0},n)}},{key:"loadOne",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",o=e.split("|"),i=o[0],r=o[1];this.read(i,r,"read",void 0,void 0,function(o,a){o&&t.logger.warn("".concat(n,"loading namespace ").concat(r," for language ").concat(i," failed"),o),!o&&a&&t.logger.log("".concat(n,"loaded namespace ").concat(r," for language ").concat(i),a),t.loaded(e,o,a)})}},{key:"saveMissing",value:function(e,t,o,i,r){var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};this.services.utils&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(t)?this.logger.warn('did not save key "'.concat(o,'" as the namespace "').concat(t,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!"):null!=o&&""!==o&&(this.backend&&this.backend.create&&this.backend.create(e,t,o,i,null,n({},a,{isUpdate:r})),e&&e[0]&&this.store.addResource(e[0],t,o,i))}}]),t}();function A(e){return"string"==typeof e.ns&&(e.ns=[e.ns]),"string"==typeof e.fallbackLng&&(e.fallbackLng=[e.fallbackLng]),"string"==typeof e.fallbackNS&&(e.fallbackNS=[e.fallbackNS]),e.whitelist&&(e.whitelist&&e.whitelist.indexOf("cimode")<0&&(e.whitelist=e.whitelist.concat(["cimode"])),e.supportedLngs=e.whitelist),e.nonExplicitWhitelist&&(e.nonExplicitSupportedLngs=e.nonExplicitWhitelist),e.supportedLngs&&e.supportedLngs.indexOf("cimode")<0&&(e.supportedLngs=e.supportedLngs.concat(["cimode"])),e}function U(){}return new(function(t){function i(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;if(o(this,i),e=s(this,u(i).call(this)),S&&f.call(a(e)),e.options=A(t),e.services={},e.logger=g,e.modules={external:[]},n&&!e.isInitialized&&!t.isClone){if(!e.options.initImmediate)return e.init(t,n),s(e,a(e));setTimeout(function(){e.init(t,n)},0)}return e}return c(i,f),r(i,[{key:"init",value:function(){var t=this,o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=arguments.length>1?arguments[1]:void 0;function r(e){return e?"function"==typeof e?new e:e:null}if("function"==typeof o&&(i=o,o={}),o.whitelist&&!o.supportedLngs&&this.logger.deprecate("whitelist",'option "whitelist" will be renamed to "supportedLngs" in the next major - please make sure to rename this option asap.'),o.nonExplicitWhitelist&&!o.nonExplicitSupportedLngs&&this.logger.deprecate("whitelist",'options "nonExplicitWhitelist" will be renamed to "nonExplicitSupportedLngs" in the next major - please make sure to rename this option asap.'),this.options=n({},{debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,whitelist:!1,nonExplicitWhitelist:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!0,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:function(t){var n={};if("object"===e(t[1])&&(n=t[1]),"string"==typeof t[1]&&(n.defaultValue=t[1]),"string"==typeof t[2]&&(n.tDescription=t[2]),"object"===e(t[2])||"object"===e(t[3])){var o=t[3]||t[2];Object.keys(o).forEach(function(e){n[e]=o[e]})}return n},interpolation:{escapeValue:!0,format:function(e,t,n,o){return e},prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!1}},this.options,A(o)),this.format=this.options.interpolation.format,i||(i=U),!this.options.isClone){this.modules.logger?g.init(r(this.modules.logger),this.options):g.init(null,this.options);var a=new j(this.options);this.store=new L(this.options.resources,this.options);var s=this.services;s.logger=g,s.resourceStore=this.store,s.languageUtils=a,s.pluralResolver=new F(a,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),s.interpolator=new V(this.options),s.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},s.backendConnector=new T(r(this.modules.backend),s.resourceStore,s,this.options),s.backendConnector.on("*",function(e){for(var n=arguments.length,o=new Array(n>1?n-1:0),i=1;i1?n-1:0),i=1;i1&&void 0!==arguments[1]?arguments[1]:U,o="string"==typeof e?e:this.language;if("function"==typeof e&&(n=e),!this.options.resources||this.options.partialBundledLanguages){if(o&&"cimode"===o.toLowerCase())return n();var i=[],r=function(e){e&&t.services.languageUtils.toResolveHierarchy(e).forEach(function(e){i.indexOf(e)<0&&i.push(e)})};if(o)r(o);else this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(function(e){return r(e)});this.options.preload&&this.options.preload.forEach(function(e){return r(e)}),this.services.backendConnector.load(i,this.options.ns,n)}else n(null)}},{key:"reloadResources",value:function(e,t,n){var o=h();return e||(e=this.languages),t||(t=this.options.ns),n||(n=U),this.services.backendConnector.reload(e,t,function(e){o.resolve(),n(e)}),o}},{key:"use",value:function(e){if(!e)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!e.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return"backend"===e.type&&(this.modules.backend=e),("logger"===e.type||e.log&&e.warn&&e.error)&&(this.modules.logger=e),"languageDetector"===e.type&&(this.modules.languageDetector=e),"i18nFormat"===e.type&&(this.modules.i18nFormat=e),"postProcessor"===e.type&&O.addPostProcessor(e),"3rdParty"===e.type&&this.modules.external.push(e),this}},{key:"changeLanguage",value:function(e,t){var n=this;this.isLanguageChangingTo=e;var o=h();this.emit("languageChanging",e);var i=function(e){var i="string"==typeof e?e:n.services.languageUtils.getBestMatchFromCodes(e);i&&(n.language||(n.language=i,n.languages=n.services.languageUtils.toResolveHierarchy(i)),n.translator.language||n.translator.changeLanguage(i),n.services.languageDetector&&n.services.languageDetector.cacheUserLanguage(i)),n.loadResources(i,function(e){!function(e,i){i?(n.language=i,n.languages=n.services.languageUtils.toResolveHierarchy(i),n.translator.changeLanguage(i),n.isLanguageChangingTo=void 0,n.emit("languageChanged",i),n.logger.log("languageChanged",i)):n.isLanguageChangingTo=void 0,o.resolve(function(){return n.t.apply(n,arguments)}),t&&t(e,function(){return n.t.apply(n,arguments)})}(e,i)})};return e||!this.services.languageDetector||this.services.languageDetector.async?!e&&this.services.languageDetector&&this.services.languageDetector.async?this.services.languageDetector.detect(i):i(e):i(this.services.languageDetector.detect()),o}},{key:"getFixedT",value:function(t,o){var i=this,r=function t(o,r){var a;if("object"!==e(r)){for(var s=arguments.length,u=new Array(s>2?s-2:0),l=2;l1&&void 0!==arguments[1]?arguments[1]:{};if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;var o=this.languages[0],i=!!this.options&&this.options.fallbackLng,r=this.languages[this.languages.length-1];if("cimode"===o.toLowerCase())return!0;var a=function(e,n){var o=t.services.backendConnector.state["".concat(e,"|").concat(n)];return-1===o||2===o};if(n.precheck){var s=n.precheck(this,a);if(void 0!==s)return s}return!!this.hasResourceBundle(o,e)||(!this.services.backendConnector.backend||!(!a(o,e)||i&&!a(r,e)))}},{key:"loadNamespaces",value:function(e,t){var n=this,o=h();return this.options.ns?("string"==typeof e&&(e=[e]),e.forEach(function(e){n.options.ns.indexOf(e)<0&&n.options.ns.push(e)}),this.loadResources(function(e){o.resolve(),t&&t(e)}),o):(t&&t(),Promise.resolve())}},{key:"loadLanguages",value:function(e,t){var n=h();"string"==typeof e&&(e=[e]);var o=this.options.preload||[],i=e.filter(function(e){return o.indexOf(e)<0});return i.length?(this.options.preload=o.concat(i),this.loadResources(function(e){n.resolve(),t&&t(e)}),n):(t&&t(),Promise.resolve())}},{key:"dir",value:function(e){if(e||(e=this.languages&&this.languages.length>0?this.languages[0]:this.language),!e)return"rtl";return["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam"].indexOf(this.services.languageUtils.getLanguagePartFromCode(e))>=0?"rtl":"ltr"}},{key:"createInstance",value:function(){return new i(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},arguments.length>1?arguments[1]:void 0)}},{key:"cloneInstance",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:U,r=n({},this.options,t,{isClone:!0}),a=new i(r);return["store","services","language"].forEach(function(t){a[t]=e[t]}),a.services=n({},this.services),a.services.utils={hasLoadedNamespace:a.hasLoadedNamespace.bind(a)},a.translator=new C(a.services,a.options),a.translator.on("*",function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o0)&&!(o=n.next()).done;)r.push(o.value)}catch(t){s={error:t}}finally{try{o&&!o.done&&(i=n.return)&&i.call(n)}finally{if(s)throw s.error}}return r},a=this&&this.__spreadArray||function(t,e,i){if(i||2===arguments.length)for(var o,s=0,n=e.length;s=t.length&&(t=void 0),{value:t&&t[o++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.AssistiveMmlHandler=e.AssistiveMmlMathDocumentMixin=e.AssistiveMmlMathItemMixin=e.LimitedMmlVisitor=void 0;var p=i(769),c=i(433),u=i(77),h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return s(e,t),e.prototype.getAttributes=function(e){return t.prototype.getAttributes.call(this,e).replace(/ ?id=".*?"/,"")},e}(c.SerializedMmlVisitor);function m(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return s(e,t),e.prototype.assistiveMml=function(t,e){if(void 0===e&&(e=!1),!(this.state()>=p.STATE.ASSISTIVEMML)){if(!this.isEscaped&&(t.options.enableAssistiveMml||e)){var i=t.adaptor,o=t.toMML(this.root).replace(/\n */g,"").replace(//g,""),s=i.firstChild(i.body(i.parse(o,"text/html"))),n=i.node("mjx-assistive-mml",{unselectable:"on",display:this.display?"block":"inline"},[s]);i.setAttribute(i.firstChild(this.typesetRoot),"aria-hidden","true"),i.setStyle(this.typesetRoot,"position","relative"),i.append(this.typesetRoot,n)}this.state(p.STATE.ASSISTIVEMML)}},e}(t)}function M(t){var e;return e=function(t){function e(){for(var e=[],i=0;i0)&&!(i=n.next()).done;)l.push(i.value)}catch(t){r={error:t}}finally{try{i&&!i.done&&(o=n.return)&&o.call(n)}finally{if(r)throw r.error}}return l},s=this&&this.__spreadArray||function(t,e,o){if(o||2===arguments.length)for(var i,r=0,n=e.length;r=t.length&&(t=void 0),{value:t&&t[i++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.ComplexityHandler=e.ComplexityMathDocumentMixin=e.ComplexityMathItemMixin=void 0;var p=o(769),c=o(511),u=o(175),h=o(77);function y(t,e){return function(t){function o(){return null!==t&&t.apply(this,arguments)||this}return r(o,t),o.prototype.complexity=function(t,o){void 0===o&&(o=!1),this.state()>=p.STATE.COMPLEXITY||(this.isEscaped||!t.options.enableComplexity&&!o||(this.enrich(t,!0),e(this.root)),this.state(p.STATE.COMPLEXITY))},o}(t)}function d(t){var e;return e=function(t){function e(){for(var e=[],o=0;o=t.length&&(t=void 0),{value:t&&t[i++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.Collapse=void 0;var i=function(){function t(e){var o=this;this.cutoff={identifier:3,number:3,text:10,infixop:15,relseq:15,multirel:15,fenced:18,bigop:20,integral:20,fraction:12,sqrt:9,root:12,vector:15,matrix:15,cases:15,superscript:9,subscript:9,subsup:9,punctuated:{endpunct:t.NOCOLLAPSE,startpunct:t.NOCOLLAPSE,value:12}},this.marker={identifier:"x",number:"#",text:"...",appl:{"limit function":"lim",value:"f()"},fraction:"/",sqrt:"\u221a",root:"\u221a",superscript:"\u25fd\u02d9",subscript:"\u25fd.",subsup:"\u25fd:",vector:{binomial:"(:)",determinant:"|:|",value:"\u27e8:\u27e9"},matrix:{squarematrix:"[::]",rowvector:"\u27e8\u22ef\u27e9",columnvector:"\u27e8\u22ee\u27e9",determinant:"|::|",value:"(::)"},cases:"{:",infixop:{addition:"+",subtraction:"\u2212",multiplication:"\u22c5",implicit:"\u22c5",value:"+"},punctuated:{text:"...",value:","}},this.collapse=new Map([["fenced",function(t,e){return(e=o.uncollapseChild(e,t,1))>o.cutoff.fenced&&"leftright"===t.attributes.get("data-semantic-role")&&(e=o.recordCollapse(t,e,o.getText(t.childNodes[0])+o.getText(t.childNodes[t.childNodes.length-1]))),e}],["appl",function(t,e){if(o.canUncollapse(t,2,2)){e=o.complexity.visitNode(t,!1);var i=o.marker.appl,r=i[t.attributes.get("data-semantic-role")]||i.value;e=o.recordCollapse(t,e,r)}return e}],["sqrt",function(t,e){return(e=o.uncollapseChild(e,t,0))>o.cutoff.sqrt&&(e=o.recordCollapse(t,e,o.marker.sqrt)),e}],["root",function(t,e){return(e=o.uncollapseChild(e,t,0,2))>o.cutoff.sqrt&&(e=o.recordCollapse(t,e,o.marker.sqrt)),e}],["enclose",function(t,e){if(1===o.splitAttribute(t,"children").length){var i=o.canUncollapse(t,1);if(i){var r=i.getProperty("collapse-marker");o.unrecordCollapse(i),e=o.recordCollapse(t,o.complexity.visitNode(t,!1),r)}}return e}],["bigop",function(t,e){if(e>o.cutoff.bigop||!t.isKind("mo")){var i=o.splitAttribute(t,"content").pop(),r=o.findChildText(t,i);e=o.recordCollapse(t,e,r)}return e}],["integral",function(t,e){if(e>o.cutoff.integral||!t.isKind("mo")){var i=o.splitAttribute(t,"content").pop(),r=o.findChildText(t,i);e=o.recordCollapse(t,e,r)}return e}],["relseq",function(t,e){if(e>o.cutoff.relseq){var i=o.splitAttribute(t,"content")[0],r=o.findChildText(t,i);e=o.recordCollapse(t,e,r)}return e}],["multirel",function(t,e){if(e>o.cutoff.relseq){var i=o.splitAttribute(t,"content")[0],r=o.findChildText(t,i)+"\u22ef";e=o.recordCollapse(t,e,r)}return e}],["superscript",function(t,e){return(e=o.uncollapseChild(e,t,0,2))>o.cutoff.superscript&&(e=o.recordCollapse(t,e,o.marker.superscript)),e}],["subscript",function(t,e){return(e=o.uncollapseChild(e,t,0,2))>o.cutoff.subscript&&(e=o.recordCollapse(t,e,o.marker.subscript)),e}],["subsup",function(t,e){return(e=o.uncollapseChild(e,t,0,3))>o.cutoff.subsup&&(e=o.recordCollapse(t,e,o.marker.subsup)),e}]]),this.idCount=0,this.complexity=e}return t.prototype.check=function(t,e){var o=t.attributes.get("data-semantic-type");return this.collapse.has(o)?this.collapse.get(o).call(this,t,e):this.cutoff.hasOwnProperty(o)?this.defaultCheck(t,e,o):e},t.prototype.defaultCheck=function(t,e,o){var i=t.attributes.get("data-semantic-role"),r=this.cutoff[o];if(e>("number"==typeof r?r:r[i]||r.value)){var n=this.marker[o]||"??",l="string"==typeof n?n:n[i]||n.value;e=this.recordCollapse(t,e,l)}return e},t.prototype.recordCollapse=function(t,e,o){return o="\u25c2"+o+"\u25b8",t.setProperty("collapse-marker",o),t.setProperty("collapse-complexity",e),o.length*this.complexity.complexity.text},t.prototype.unrecordCollapse=function(t){var e=t.getProperty("collapse-complexity");null!=e&&(t.attributes.set("data-semantic-complexity",e),t.removeProperty("collapse-complexity"),t.removeProperty("collapse-marker"))},t.prototype.canUncollapse=function(t,e,o){if(void 0===o&&(o=1),this.splitAttribute(t,"children").length===o){var i=1===t.childNodes.length&&t.childNodes[0].isInferred?t.childNodes[0]:t;if(i&&i.childNodes[e]){var r=i.childNodes[e];if(r.getProperty("collapse-marker"))return r}}return null},t.prototype.uncollapseChild=function(t,e,o,i){void 0===i&&(i=1);var r=this.canUncollapse(e,o,i);return r&&(this.unrecordCollapse(r),r.parent!==e&&r.parent.attributes.set("data-semantic-complexity",void 0),t=this.complexity.visitNode(e,!1)),t},t.prototype.splitAttribute=function(t,e){return(t.attributes.get("data-semantic-"+e)||"").split(/,/)},t.prototype.getText=function(t){var e=this;return t.isToken?t.getText():t.childNodes.map((function(t){return e.getText(t)})).join("")},t.prototype.findChildText=function(t,e){var o=this.findChild(t,e);return this.getText(o.coreMO()||o)},t.prototype.findChild=function(t,e){var i,r;if(!t||t.attributes.get("data-semantic-id")===e)return t;if(!t.isToken)try{for(var n=o(t.childNodes),l=n.next();!l.done;l=n.next()){var s=l.value,a=this.findChild(s,e);if(a)return a}}catch(t){i={error:t}}finally{try{l&&!l.done&&(r=n.return)&&r.call(n)}finally{if(i)throw i.error}}return null},t.prototype.makeCollapse=function(t){var e=[];t.walkTree((function(t){t.getProperty("collapse-marker")&&e.push(t)})),this.makeActions(e)},t.prototype.makeActions=function(t){var e,i;try{for(var r=o(t),n=r.next();!n.done;n=r.next()){var l=n.value;this.makeAction(l)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(i=r.return)&&i.call(r)}finally{if(e)throw e.error}}},t.prototype.makeId=function(){return"mjx-collapse-"+this.idCount++},t.prototype.makeAction=function(t){t.isKind("math")&&(t=this.addMrow(t));var e=this.complexity.factory,o=t.getProperty("collapse-marker"),i=t.parent,r=e.create("maction",{actiontype:"toggle",selection:2,"data-collapsible":!0,id:this.makeId(),"data-semantic-complexity":t.attributes.get("data-semantic-complexity")},[e.create("mtext",{mathcolor:"blue"},[e.create("text").setText(o)])]);r.inheritAttributesFrom(t),t.attributes.set("data-semantic-complexity",t.getProperty("collapse-complexity")),t.removeProperty("collapse-marker"),t.removeProperty("collapse-complexity"),i.replaceChild(r,t),r.appendChild(t)},t.prototype.addMrow=function(t){var e,i,r=this.complexity.factory.create("mrow",null,t.childNodes[0].childNodes);t.childNodes[0].setChildren([r]);var n=t.attributes.getAllAttributes();try{for(var l=o(Object.keys(n)),s=l.next();!s.done;s=l.next()){var a=s.value;"data-semantic-"===a.substr(0,14)&&(r.attributes.set(a,n[a]),delete n[a])}}catch(t){e={error:t}}finally{try{s&&!s.done&&(i=l.return)&&i.call(l)}finally{if(e)throw e.error}}return r.setProperty("collapse-marker",t.getProperty("collapse-marker")),r.setProperty("collapse-complexity",t.getProperty("collapse-complexity")),t.removeProperty("collapse-marker"),t.removeProperty("collapse-complexity"),r},t.NOCOLLAPSE=1e7,t}();e.Collapse=i},175:function(t,e,o){var i,r=this&&this.__extends||(i=function(t,e){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o])},i(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function o(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),n=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,o=e&&t[e],i=0;if(o)return o.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&i>=t.length&&(t=void 0),{value:t&&t[i++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.ComplexityVisitor=void 0;var l=o(176),s=o(850),a=o(77),p=function(t){function e(e,o){var i=t.call(this,e)||this;i.complexity={text:.5,token:.5,child:1,script:.8,sqrt:2,subsup:2,underover:2,fraction:2,enclose:2,action:2,phantom:0,xml:2,glyph:2};var r=i.constructor;return i.options=(0,a.userOptions)((0,a.defaultOptions)({},r.OPTIONS),o),i.collapse=new i.options.Collapse(i),i.factory=e,i}return r(e,t),e.prototype.visitTree=function(e){t.prototype.visitTree.call(this,e,!0),this.options.makeCollapsible&&this.collapse.makeCollapse(e)},e.prototype.visitNode=function(e,o){if(!e.attributes.get("data-semantic-complexity"))return t.prototype.visitNode.call(this,e,o)},e.prototype.visitDefault=function(t,e){var o;if(t.isToken){var i=t.getText();o=this.complexity.text*i.length+this.complexity.token}else o=this.childrenComplexity(t);return this.setComplexity(t,o,e)},e.prototype.visitMfracNode=function(t,e){var o=this.childrenComplexity(t)*this.complexity.script+this.complexity.fraction;return this.setComplexity(t,o,e)},e.prototype.visitMsqrtNode=function(t,e){var o=this.childrenComplexity(t)+this.complexity.sqrt;return this.setComplexity(t,o,e)},e.prototype.visitMrootNode=function(t,e){var o=this.childrenComplexity(t)+this.complexity.sqrt-(1-this.complexity.script)*this.getComplexity(t.childNodes[1]);return this.setComplexity(t,o,e)},e.prototype.visitMphantomNode=function(t,e){return this.setComplexity(t,this.complexity.phantom,e)},e.prototype.visitMsNode=function(t,e){var o=(t.attributes.get("lquote")+t.getText()+t.attributes.get("rquote")).length*this.complexity.text;return this.setComplexity(t,o,e)},e.prototype.visitMsubsupNode=function(e,o){t.prototype.visitDefault.call(this,e,!0);var i=e.childNodes[e.sub],r=e.childNodes[e.sup],n=e.childNodes[e.base],l=Math.max(i?this.getComplexity(i):0,r?this.getComplexity(r):0)*this.complexity.script;return l+=this.complexity.child*((i?1:0)+(r?1:0)),l+=n?this.getComplexity(n)+this.complexity.child:0,l+=this.complexity.subsup,this.setComplexity(e,l,o)},e.prototype.visitMsubNode=function(t,e){return this.visitMsubsupNode(t,e)},e.prototype.visitMsupNode=function(t,e){return this.visitMsubsupNode(t,e)},e.prototype.visitMunderoverNode=function(e,o){t.prototype.visitDefault.call(this,e,!0);var i=e.childNodes[e.under],r=e.childNodes[e.over],n=e.childNodes[e.base],l=Math.max(i?this.getComplexity(i):0,r?this.getComplexity(r):0)*this.complexity.script;return n&&(l=Math.max(this.getComplexity(n),l)),l+=this.complexity.child*((i?1:0)+(r?1:0)+(n?1:0)),l+=this.complexity.underover,this.setComplexity(e,l,o)},e.prototype.visitMunderNode=function(t,e){return this.visitMunderoverNode(t,e)},e.prototype.visitMoverNode=function(t,e){return this.visitMunderoverNode(t,e)},e.prototype.visitMencloseNode=function(t,e){var o=this.childrenComplexity(t)+this.complexity.enclose;return this.setComplexity(t,o,e)},e.prototype.visitMactionNode=function(t,e){this.childrenComplexity(t);var o=this.getComplexity(t.selected);return this.setComplexity(t,o,e)},e.prototype.visitMsemanticsNode=function(t,e){var o=t.childNodes[0],i=0;return o&&(this.visitNode(o,!0),i=this.getComplexity(o)),this.setComplexity(t,i,e)},e.prototype.visitAnnotationNode=function(t,e){return this.setComplexity(t,this.complexity.xml,e)},e.prototype.visitAnnotation_xmlNode=function(t,e){return this.setComplexity(t,this.complexity.xml,e)},e.prototype.visitMglyphNode=function(t,e){return this.setComplexity(t,this.complexity.glyph,e)},e.prototype.getComplexity=function(t){var e=t.getProperty("collapsedComplexity");return null!=e?e:t.attributes.get("data-semantic-complexity")},e.prototype.setComplexity=function(t,e,o){return o&&(this.options.identifyCollapsible&&(e=this.collapse.check(t,e)),t.attributes.set("data-semantic-complexity",e)),e},e.prototype.childrenComplexity=function(e){var o,i;t.prototype.visitDefault.call(this,e,!0);var r=0;try{for(var l=n(e.childNodes),s=l.next();!s.done;s=l.next()){var a=s.value;r+=this.getComplexity(a)}}catch(t){o={error:t}}finally{try{s&&!s.done&&(i=l.return)&&i.call(l)}finally{if(o)throw o.error}}return e.childNodes.length>1&&(r+=e.childNodes.length*this.complexity.child),r},e.OPTIONS={identifyCollapsible:!0,makeCollapsible:!0,Collapse:s.Collapse},e}(l.MmlVisitor);e.ComplexityVisitor=p},306:function(t,e){e.q=void 0,e.q="3.2.1"},511:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.EnrichedMathItemMixin=MathJax._.a11y["semantic-enrich"].EnrichedMathItemMixin,e.EnrichedMathDocumentMixin=MathJax._.a11y["semantic-enrich"].EnrichedMathDocumentMixin,e.EnrichHandler=MathJax._.a11y["semantic-enrich"].EnrichHandler},723:function(t,e){MathJax._.components.global.isObject,MathJax._.components.global.combineConfig,e.PV=MathJax._.components.global.combineDefaults,e.r8=MathJax._.components.global.combineWithMathJax,MathJax._.components.global.MathJax},769:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.protoItem=MathJax._.core.MathItem.protoItem,e.AbstractMathItem=MathJax._.core.MathItem.AbstractMathItem,e.STATE=MathJax._.core.MathItem.STATE,e.newState=MathJax._.core.MathItem.newState},176:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.MmlVisitor=MathJax._.core.MmlTree.MmlVisitor.MmlVisitor},77:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.isObject=MathJax._.util.Options.isObject,e.APPEND=MathJax._.util.Options.APPEND,e.REMOVE=MathJax._.util.Options.REMOVE,e.OPTIONS=MathJax._.util.Options.OPTIONS,e.Expandable=MathJax._.util.Options.Expandable,e.expandable=MathJax._.util.Options.expandable,e.makeArray=MathJax._.util.Options.makeArray,e.keys=MathJax._.util.Options.keys,e.copy=MathJax._.util.Options.copy,e.insert=MathJax._.util.Options.insert,e.defaultOptions=MathJax._.util.Options.defaultOptions,e.userOptions=MathJax._.util.Options.userOptions,e.selectOptions=MathJax._.util.Options.selectOptions,e.selectOptionsFromKeys=MathJax._.util.Options.selectOptionsFromKeys,e.separateOptions=MathJax._.util.Options.separateOptions,e.lookup=MathJax._.util.Options.lookup}},s={};function a(t){var e=s[t];if(void 0!==e)return e.exports;var o=s[t]={exports:{}};return l[t].call(o.exports,o,o.exports,a),o.exports}t=a(723),e=a(306),o=a(589),i=a(850),r=a(175),n=a(511),MathJax.loader&&MathJax.loader.checkVersion("a11y/complexity",e.q,"a11y"),(0,t.r8)({_:{a11y:{complexity_ts:o,complexity:{collapse:i,visitor:r},"semantic-enrich":n}}}),MathJax.startup&&(MathJax.startup.extendHandler((function(t){return(0,o.ComplexityHandler)(t)})),(0,t.PV)(MathJax.config,"options",MathJax.config["a11y/complexity"]||{}))}();!function(){"use strict";var t,e,o,r,n,i,a,s,l={18:function(t,e,o){var r,n=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,o=1,r=arguments.length;o=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},u=this&&this.__read||function(t,e){var o="function"==typeof Symbol&&t[Symbol.iterator];if(!o)return t;var r,n,i=o.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(t){n={error:t}}finally{try{r&&!r.done&&(o=i.return)&&o.call(i)}finally{if(n)throw n.error}}return a},h=this&&this.__spreadArray||function(t,e,o){if(o||2===arguments.length)for(var r,n=0,i=e.length;n=f.STATE.EXPLORER)){if(!this.isEscaped&&(t.options.enableExplorer||o)){var r=this.typesetRoot,n=e(this.root);this.savedId&&(this.typesetRoot.setAttribute("sre-explorer-id",this.savedId),this.savedId=null),this.explorers=function(t,e,o){var r,n,i={};try{for(var a=c(Object.keys(A)),s=a.next();!s.done;s=a.next()){var l=s.value;i[l]=A[l](t,e,o)}}catch(t){r={error:t}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return i}(t,r,n),this.attachExplorers(t)}this.state(f.STATE.EXPLORER)}},o.prototype.attachExplorers=function(t){var e,o,r,n;this.attached=[];var i=[];try{for(var a=c(Object.keys(this.explorers)),s=a.next();!s.done;s=a.next()){var l=s.value;(p=this.explorers[l])instanceof m.AbstractKeyExplorer&&(p.AddEvents(),p.stoppable=!1,i.unshift(p)),t.options.a11y[l]?(p.Attach(),this.attached.push(l)):p.Detach()}}catch(t){e={error:t}}finally{try{s&&!s.done&&(o=a.return)&&o.call(a)}finally{if(e)throw e.error}}try{for(var u=c(i),h=u.next();!h.done;h=u.next()){var p;if((p=h.value).attached){p.stoppable=!0;break}}}catch(t){r={error:t}}finally{try{h&&!h.done&&(n=u.return)&&n.call(u)}finally{if(r)throw r.error}}},o.prototype.rerender=function(e,o){var r,n;void 0===o&&(o=f.STATE.RERENDER),this.savedId=this.typesetRoot.getAttribute("sre-explorer-id"),this.refocus=window.document.activeElement===this.typesetRoot;try{for(var i=c(this.attached),a=i.next();!a.done;a=i.next()){var s=a.value,l=this.explorers[s];l.active&&(this.restart.push(s),l.Stop())}}catch(t){r={error:t}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}t.prototype.rerender.call(this,e,o)},o.prototype.updateDocument=function(e){var o=this;t.prototype.updateDocument.call(this,e),this.refocus&&this.typesetRoot.focus(),this.restart.forEach((function(t){return o.explorers[t].Start()})),this.restart=[],this.refocus=!1},o}(t)}function O(t){var e;return e=function(t){function e(){for(var e=[],o=0;o0)&&!(r=i.next()).done;)a.push(r.value)}catch(t){n={error:t}}finally{try{r&&!r.done&&(o=i.return)&&o.call(i)}finally{if(n)throw n.error}}return a},n=this&&this.__spreadArray||function(t,e,o){if(o||2===arguments.length)for(var r,n=0,i=e.length;n=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractExplorer=void 0;var s=a(o(712)),l=function(){function t(t,e,o){for(var r=[],n=3;n0&&n[n.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!n||i[1]>n[0]&&i[1]0)&&!(r=i.next()).done;)a.push(r.value)}catch(t){n={error:t}}finally{try{r&&!r.done&&(o=i.return)&&o.call(i)}finally{if(n)throw n.error}}return a};Object.defineProperty(e,"__esModule",{value:!0}),e.FlameHoverer=e.ContentHoverer=e.ValueHoverer=e.Hoverer=e.AbstractMouseExplorer=void 0;var a=o(367),s=o(724);o(712);var l=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.events=t.prototype.Events.call(e).concat([["mouseover",e.MouseOver.bind(e)],["mouseout",e.MouseOut.bind(e)]]),e}return n(e,t),e.prototype.MouseOver=function(t){this.Start()},e.prototype.MouseOut=function(t){this.Stop()},e}(s.AbstractExplorer);e.AbstractMouseExplorer=l;var c=function(t){function e(e,o,r,n,i){var a=t.call(this,e,o,r)||this;return a.document=e,a.region=o,a.node=r,a.nodeQuery=n,a.nodeAccess=i,a}return n(e,t),e.prototype.MouseOut=function(e){e.clientX===this.coord[0]&&e.clientY===this.coord[1]||(this.highlighter.unhighlight(),this.region.Hide(),t.prototype.MouseOut.call(this,e))},e.prototype.MouseOver=function(e){t.prototype.MouseOver.call(this,e);var o=e.target;this.coord=[e.clientX,e.clientY];var r=i(this.getNode(o),2),n=r[0],a=r[1];n&&(this.highlighter.unhighlight(),this.highlighter.highlight([n]),this.region.Update(a),this.region.Show(n,this.highlighter))},e.prototype.getNode=function(t){for(var e=t;t&&t!==this.node;){if(this.nodeQuery(t))return[t,this.nodeAccess(t)];t=t.parentNode}for(t=e;t;){if(this.nodeQuery(t))return[t,this.nodeAccess(t)];var o=t.childNodes[0];t=o&&"defs"===o.tagName?t.childNodes[1]:o}return[null,null]},e}(l);e.Hoverer=c;var u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e}(c);e.ValueHoverer=u;var h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e}(c);e.ContentHoverer=h;var p=function(t){function e(e,o,r){var n=t.call(this,e,new a.DummyRegion(e),r,(function(t){return n.highlighter.isMactionNode(t)}),(function(){}))||this;return n.document=e,n.node=r,n}return n(e,t),e}(c);e.FlameHoverer=p},367:function(t,e,o){var r,n,i,a,s=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)});Object.defineProperty(e,"__esModule",{value:!0}),e.HoverRegion=e.LiveRegion=e.ToolTip=e.StringRegion=e.DummyRegion=e.AbstractRegion=void 0;var l=o(888),c=function(){function t(t){this.document=t,this.CLASS=this.constructor,this.AddStyles(),this.AddElement()}return t.prototype.AddStyles=function(){if(!this.CLASS.styleAdded){var t=this.document.adaptor.node("style");t.innerHTML=this.CLASS.style.cssText,this.document.adaptor.head(this.document.adaptor.document).appendChild(t),this.CLASS.styleAdded=!0}},t.prototype.AddElement=function(){var t=this.document.adaptor.node("div");t.classList.add(this.CLASS.className),t.style.backgroundColor="white",this.div=t,this.inner=this.document.adaptor.node("div"),this.div.appendChild(this.inner),this.document.adaptor.body(this.document.adaptor.document).appendChild(this.div)},t.prototype.Show=function(t,e){this.position(t),this.highlight(e),this.div.classList.add(this.CLASS.className+"_Show")},t.prototype.Hide=function(){this.div.classList.remove(this.CLASS.className+"_Show")},t.prototype.stackRegions=function(t){for(var e=t.getBoundingClientRect(),o=0,r=Number.POSITIVE_INFINITY,n=this.document.adaptor.document.getElementsByClassName(this.CLASS.className+"_Show"),i=0,a=void 0;a=n[i];i++)a!==this.div&&(o=Math.max(a.getBoundingClientRect().bottom,o),r=Math.min(a.getBoundingClientRect().left,r));var s=(o||e.bottom+10)+window.pageYOffset,l=(r=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},s=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,a,i=r.call(t),o=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)o.push(n.value)}catch(t){a={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(a)throw a.error}}return o},c=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,a=0,i=e.length;a=u.STATE.ENRICHED)){if(!this.isEscaped&&(t.options.enableEnrichment||n)){t.options.sre.speech!==y&&(y=t.options.sre.speech,h.mathjax.retryAfter(d.default.setupEngine(t.options.sre).then((function(){return d.default.sreReady()}))));var a=new t.options.MathItem("",e);try{var i=this.inputData.originalMml=r(this.root);a.math=this.serializeMml(d.default.toEnriched(i)),a.display=this.display,a.compile(t),this.root=a.root,this.inputData.enrichedMml=a.math}catch(e){t.options.enrichError(t,this,e)}}this.state(u.STATE.ENRICHED)}},n.prototype.attachSpeech=function(t){var e,r;if(!(this.state()>=u.STATE.ATTACHSPEECH)){var n=this.root.attributes.get("aria-label")||this.getSpeech(this.root);if(n){var a=t.adaptor,i=this.typesetRoot;a.setAttribute(i,"aria-label",n);try{for(var s=o(a.childNodes(i)),c=s.next();!c.done;c=s.next()){var l=c.value;a.setAttribute(l,"aria-hidden","true")}}catch(t){e={error:t}}finally{try{c&&!c.done&&(r=s.return)&&r.call(s)}finally{if(e)throw e.error}}}this.state(u.STATE.ATTACHSPEECH)}},n.prototype.getSpeech=function(t){var e,r,n=t.attributes;if(!n)return"";var a=n.getExplicit("data-semantic-speech");if(!n.getExplicit("data-semantic-parent")&&a)return a;try{for(var i=o(t.childNodes),s=i.next();!s.done;s=i.next()){var c=s.value,l=this.getSpeech(c);if(null!=l)return l}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}return""},n}(t)}function m(t,e){var r;return r=function(t){function r(){for(var r=[],n=0;n0&&i[i.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]delete e[t])),t.open.forEach((n=>e[n]=t[n]));const n=Object.keys(e);e.open=n},t.sortClose=function(e,t){if(e.length<=1)return e;const n=[];for(let r,i=0;r=t[i],e.length;i++)r.close&&r.close.length&&r.close.forEach((function(t){const r=e.indexOf(t);-1!==r&&(n.unshift(t),e.splice(r,1))}));return n};let a={},c=[];function l(e,t){const n=e[e.length-1];if(n){if(p(t)&&p(n)){if(void 0===n.join)return void(n.span=n.span.concat(t.span));const e=n.span.pop(),r=t.span.shift();return n.span.push(e+n.join+r),n.span=n.span.concat(t.span),void(n.join=t.join)}h(t)&&h(n)?n.pause=s(n.pause,t.pause):e.push(t)}else e.push(t)}function u(e,t){e.rate&&(t.rate=e.rate),e.pitch&&(t.pitch=e.pitch),e.volume&&(t.volume=e.volume)}function d(e){return"object"==typeof e&&e.open}function h(e){return"object"==typeof e&&1===Object.keys(e).length&&Object.keys(e)[0]===i.personalityProps.PAUSE}function p(e){const t=Object.keys(e);return"object"==typeof e&&(1===t.length&&"span"===t[0]||2===t.length&&("span"===t[0]&&"join"===t[1]||"span"===t[1]&&"join"===t[0]))}function f(e,t,n,r,a,c=!1){if(c){const c=e[e.length-1];let l;if(c&&(l=c[i.personalityProps.JOIN]),c&&!t.speech&&a&&h(c)){const e=i.personalityProps.PAUSE;c[e]=s(c[e],a[e]),a=null}if(c&&t.speech&&0===Object.keys(n).length&&p(c)){if(void 0!==l){const e=c.span.pop();t=new o.Span(e.speech+l+t.speech,e.attributes)}c.span.push(t),t=new o.Span("",{}),c[i.personalityProps.JOIN]=r}}0!==Object.keys(n).length&&e.push(n),t.speech&&e.push({span:[t],join:r}),a&&e.push(a)}function m(e,t){if(!t)return e;const n={};for(const r of i.personalityPropList){const i=e[r],o=t[r];if(!i&&!o||i&&o&&i===o)continue;const s=i||0;d(n)||(n.open=[],n.close=[]),i||n.close.push(r),o||n.open.push(r),o&&i&&(n.close.push(r),n.open.push(r)),t[r]=s,n[r]=s,a[r]?a[r].push(s):a[r]=[s]}if(d(n)){let e=n.close.slice();for(;e.length>0;){let i=c.pop();const o=(0,r.setdifference)(i,e);if(e=(0,r.setdifference)(e,i),i=o,0!==e.length){if(0!==i.length){n.close=n.close.concat(i),n.open=n.open.concat(i);for(let e,r=0;e=i[r];r++)n[e]=t[e]}}else 0!==i.length&&c.push(i)}c.push(n.open)}return n}t.personalityMarkup=function(e){a={},c=[];let t=[];const n={};for(let r,o=0;r=e[o];o++){let e=null;const o=r.descriptionSpan(),s=r.personality,a=s[i.personalityProps.JOIN];delete s[i.personalityProps.JOIN],void 0!==s[i.personalityProps.PAUSE]&&(e={[i.personalityProps.PAUSE]:s[i.personalityProps.PAUSE]},delete s[i.personalityProps.PAUSE]);f(t,o,m(s,n),a,e,!0)}return t=t.concat(function(){const e=[];for(let t=c.length-1;t>=0;t--){const n=c[t];if(n.length){const t={open:[],close:[]};for(let e=0;e"string"==typeof e?new l.Span(e,{}):e)),n=m.get(r.default.getInstance().markup);return n?n.merge(t):e.join()},t.finalize=function(e){const t=m.get(r.default.getInstance().markup);return t?t.finalize(e):e},t.error=function(e){const t=m.get(r.default.getInstance().markup);return t?t.error(e):""},t.registerRenderer=function(e,t){m.set(e,t)},t.isXml=function(){return m.get(r.default.getInstance().markup)instanceof p.XmlRenderer}},1292:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.LayoutRenderer=void 0;const r=n(1984),i=n(6671),o=n(4998),s=n(2599),a=n(4708);class c extends a.XmlRenderer{finalize(e){return function(e){l="";const t=i.parseInput(`${e}`);return r.Debugger.getInstance().output(i.formatXml(t.toString())),l=p(t),l}(e)}pause(e){return""}prosodyElement(e,t){return e===o.personalityProps.LAYOUT?`<${t}>`:""}closeTag(e){return``}markup(e){const t=[];let n=[];for(const r of e){if(!r.layout){n.push(r);continue}t.push(this.processContent(n)),n=[];const e=r.layout;e.match(/^begin/)?t.push("<"+e.replace(/^begin/,"")+">"):e.match(/^end/)?t.push(""):console.warn("Something went wrong with layout markup: "+e)}return t.push(this.processContent(n)),t.join("")}processContent(e){const t=[],n=s.personalityMarkup(e);for(let e,r=0;e=n[r];r++)e.span?t.push(this.merge(e.span)):s.isPauseElement(e);return t.join("")}}t.LayoutRenderer=c;let l="";const u={TABLE:function(e){let t=S(e);t.forEach((e=>{e.cells=e.cells.slice(1).slice(0,-1),e.width=e.width.slice(1).slice(0,-1)}));const[n,r]=b(t);return t=N(t,r),E(t,n)},CASES:function(e){let t=S(e);t.forEach((e=>{e.cells=e.cells.slice(0,-1),e.width=e.width.slice(0,-1)}));const[n,r]=b(t);return t=N(t,r),E(t,n)},CAYLEY:function(e){let t=S(e);t.forEach((e=>{e.cells=e.cells.slice(1).slice(0,-1),e.width=e.width.slice(1).slice(0,-1),e.sep=e.sep+e.sep}));const[n,r]=b(t),i={lfence:"",rfence:"",cells:r.map((e=>"\u2810"+new Array(e).join("\u2812"))),width:r,height:1,sep:t[0].sep};return t.splice(1,0,i),t=N(t,r),E(t,n)},MATRIX:function(e){let t=S(e);const[n,r]=b(t);return t=N(t,r),E(t,n)},CELL:p,FENCE:p,ROW:p,FRACTION:function(e){const[t,n,,r,i]=Array.from(e.childNodes),o=d(n),s=d(r),a=m(o),c=m(s);let l=Math.max(a,c);const u=t+new Array(l+1).join("\u2812")+i;return l=u.length,`${C(o,l)}\n${u}\n${C(s,l)}`},NUMERATOR:T,DENOMINATOR:T};function d(e){const t=i.tagName(e),n=u[t];return n?n(e):e.textContent}function h(e,t){if(!e||!t)return e+t;const n=f(e),r=f(t),i=n-r;e=i<0?g(e,r,m(e)):e,t=i>0?g(t,n,m(t)):t;const o=e.split(/\r\n|\r|\n/),s=t.split(/\r\n|\r|\n/),a=[];for(let e=0;eMath.max(t.length,e)),0)}function g(e,t,n){return e=function(e,t){const n=t-f(e);return e+(n>0?new Array(n+1).join("\n"):"")}(e,t),function(e,t){const n=e.split(/\r\n|\r|\n/),r=[];for(const e of n){const n=t-e.length;r.push(e+(n>0?new Array(n+1).join("\u2800"):""))}return r.join("\n")}(e,n)}function S(e){const t=Array.from(e.childNodes),n=[];for(const e of t)e.nodeType===i.NodeType.ELEMENT_NODE&&n.push(_(e));return n}function b(e){const t=e.reduce(((e,t)=>Math.max(t.height,e)),0),n=[];for(let t=0;te.width[t])).reduce(((e,t)=>Math.max(e,t)),0));return[t,n]}function N(e,t){const n=[];for(const r of e){if(0===r.height)continue;const e=[];for(let n=0;ne.lfence+e.cells.join(e.sep)+e.rfence)).join("\n");const n=[];for(const t of e){const e=y(t.sep,t.height);let r=t.cells.shift();for(;t.cells.length;)r=h(r,e),r=h(r,t.cells.shift());r=h(y(t.lfence,t.height),r),r=h(r,y(t.rfence,t.height)),n.push(r),n.push(t.lfence+new Array(m(r)-3).join(t.sep)+t.rfence)}return n.slice(0,-1).join("\n")}function y(e,t){let n="";for(;t;)n+=e+"\n",t--;return n.slice(0,-1)}function A(e){return e.nodeType===i.NodeType.ELEMENT_NODE&&"FENCE"===i.tagName(e)?d(e):""}function _(e){const t=Array.from(e.childNodes),n=A(t[0]),r=A(t[t.length-1]);n&&t.shift(),r&&t.pop();let o="";const s=[];for(const e of t){if(e.nodeType===i.NodeType.TEXT_NODE){o=e.textContent;continue}const t=d(e);s.push(t)}return{lfence:n,rfence:r,sep:o,cells:s,height:s.reduce(((e,t)=>Math.max(f(t),e)),0),width:s.map(m)}}function C(e,t){const n=(t-m(e))/2,[r,i]=Math.floor(n)===n?[n,n]:[Math.floor(n),Math.ceil(n)],o=e.split(/\r\n|\r|\n/),s=[],[a,c]=[new Array(r+1).join("\u2800"),new Array(i+1).join("\u2800")];for(const e of o)s.push(a+e+c);return s.join("\n")}function T(e){const t=e.firstChild,n=p(e);if(t&&t.nodeType===i.NodeType.ELEMENT_NODE){if("ENGLISH"===i.tagName(t))return"\u2830"+n;if("NUMBER"===i.tagName(t))return"\u283c"+n}return n}},9610:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.MarkupRenderer=void 0;const r=n(4998),i=n(7086);class o extends i.AbstractAudioRenderer{constructor(){super(...arguments),this.ignoreElements=[r.personalityProps.LAYOUT],this.scaleFunction=null}setScaleFunction(e,t,n,r,i=0){this.scaleFunction=o=>{const s=(o-e)/(t-e),a=n*(1-s)+r*s;return+(Math.round(a+"e+"+i)+"e-"+i)}}applyScaleFunction(e){return this.scaleFunction?this.scaleFunction(e):e}ignoreElement(e){return-1!==this.ignoreElements.indexOf(e)}}t.MarkupRenderer=o},1674:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.PunctuationRenderer=void 0;const r=n(4998),i=n(7086),o=n(2599);class s extends i.AbstractAudioRenderer{markup(e){const t=o.personalityMarkup(e);let n="",i=null,s=!1;for(let e,a=0;e=t[a];a++)o.isMarkupElement(e)||(o.isPauseElement(e)?s&&(i=o.mergePause(i,e,Math.max)):(i&&(n+=this.pause(i[r.personalityProps.PAUSE]),i=null),n+=(s?this.getSeparator():"")+this.merge(e.span),s=!0));return n}pause(e){let t;return t="number"==typeof e?e<=250?"short":e<=500?"medium":"long":e,s.PAUSE_PUNCTUATION.get(t)||""}}t.PunctuationRenderer=s,s.PAUSE_PUNCTUATION=new Map([["short",","],["medium",";"],["long","."]])},8078:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.SableRenderer=void 0;const r=n(4998),i=n(4708);class o extends i.XmlRenderer{finalize(e){return''+this.getSeparator()+e+this.getSeparator()+""}pause(e){return''}prosodyElement(e,t){switch(t=this.applyScaleFunction(t),e){case r.personalityProps.PITCH:return'';case r.personalityProps.RATE:return'';case r.personalityProps.VOLUME:return'';default:return"<"+e.toUpperCase()+' VALUE="'+t+'">'}}closeTag(e){return""}}t.SableRenderer=o},1930:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Span=void 0;t.Span=class{constructor(e,t){this.speech=e,this.attributes=t}}},4115:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.SsmlRenderer=void 0;const r=n(4886),i=n(4998),o=n(4708);class s extends o.XmlRenderer{finalize(e){return''+this.getSeparator()+e+this.getSeparator()+""}pause(e){return''}prosodyElement(e,t){const n=(t=Math.floor(this.applyScaleFunction(t)))<0?t.toString():"+"+t.toString();return"":'%">')}closeTag(e){return""}}t.SsmlRenderer=s},6123:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.SsmlStepRenderer=void 0;const r=n(4115);class i extends r.SsmlRenderer{markup(e){return i.MARKS={},super.markup(e)}merge(e){const t=[];for(let n=0;n'),i.MARKS[o]=!0),1===r.speech.length&&r.speech.match(/[a-zA-Z]/)?t.push(''+r.speech+""):t.push(r.speech)}return t.join(this.getSeparator())}}t.SsmlStepRenderer=i,i.CHARACTER_ATTR="character",i.MARKS={}},8244:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.StringRenderer=void 0;const r=n(7086),i=n(2599);class o extends r.AbstractAudioRenderer{markup(e){let t="";const n=(0,i.personalityMarkup)(e).filter((e=>e.span));if(!n.length)return t;const r=n.length-1;for(let e,i=0;e=n[i];i++){if(e.span&&(t+=this.merge(e.span)),i>=r)continue;const n=e.join;t+=void 0===n?this.getSeparator():n}return t}}t.StringRenderer=o},4708:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.XmlRenderer=void 0;const r=n(4886),i=n(2599),o=n(9610);class s extends o.MarkupRenderer{markup(e){this.setScaleFunction(-2,2,-100,100,2);const t=i.personalityMarkup(e),n=[],o=[];for(let e,s=0;e=t[s];s++)if(e.span)n.push(this.merge(e.span));else if(i.isPauseElement(e))n.push(this.pause(e));else{if(e.close.length)for(let t=0;t{n.push(this.prosodyElement(t,e[t])),o.push(t)}))}}return n.join(" ")}}t.XmlRenderer=s},1426:function(e,t){function n(e,t){return e?t?e.filter((e=>t.indexOf(e)<0)):e:[]}Object.defineProperty(t,"__esModule",{value:!0}),t.union=t.setdifference=t.interleaveLists=t.removeEmpty=void 0,t.removeEmpty=function(e){return e.filter((e=>e))},t.interleaveLists=function(e,t){const n=[];for(;e.length||t.length;)e.length&&n.push(e.shift()),t.length&&n.push(t.shift());return n},t.setdifference=n,t.union=function(e,t){return e&&t?e.concat(n(t,e)):e||t||[]}},9501:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.loadScript=t.loadMapsForIE_=t.installWGXpath_=t.loadWGXpath_=t.mapsForIE=t.detectEdge=t.detectIE=void 0;const r=n(4755),i=n(5024);function o(e){c(r.default.WGXpath),s(e)}function s(e,t){let n=t||1;"undefined"==typeof wgxpath&&n<10?setTimeout((function(){s(e,n++)}),200):n>=10||(r.default.wgxpath=wgxpath,e?r.default.wgxpath.install({document:document}):r.default.wgxpath.install(),i.xpath.evaluate=document.evaluate,i.xpath.result=XPathResult,i.xpath.createNSResolver=document.createNSResolver)}function a(){c(r.default.mathmapsIePath)}function c(e){const t=r.default.document.createElement("script");t.type="text/javascript",t.src=e,r.default.document.head?r.default.document.head.appendChild(t):r.default.document.body.appendChild(t)}t.detectIE=function(){return"undefined"!=typeof window&&"ActiveXObject"in window&&"clipboardData"in window&&(a(),o(),!0)},t.detectEdge=function(){var e;return"undefined"!=typeof window&&"MSGestureEvent"in window&&null===(null===(e=window.chrome)||void 0===e?void 0:e.loadTimes)&&(document.evaluate=null,o(!0),!0)},t.mapsForIE=null,t.loadWGXpath_=o,t.installWGXpath_=s,t.loadMapsForIE_=a,t.loadScript=c},1984:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.Debugger=void 0;const r=n(4755);class i{constructor(){this.isActive_=!1,this.outputFunction_=console.info,this.stream_=null}static getInstance(){return i.instance=i.instance||new i,i.instance}init(e){e&&this.startDebugFile_(e),this.isActive_=!0}output(...e){this.isActive_&&this.output_(e)}generateOutput(e){this.isActive_&&this.output_(e.apply(e,[]))}exit(e=(()=>{})){this.isActive_&&this.stream_&&this.stream_.end("","",e)}startDebugFile_(e){this.stream_=r.default.fs.createWriteStream(e),this.outputFunction_=function(...e){this.stream_.write(e.join(" ")),this.stream_.write("\n")}.bind(this),this.stream_.on("error",function(e){console.info("Invalid log file. Debug information sent to console."),this.outputFunction_=console.info}.bind(this)),this.stream_.on("finish",(function(){console.info("Finalizing debug file.")}))}output_(e){this.outputFunction_.apply(console.info===this.outputFunction_?console:this.outputFunction_,["Speech Rule Engine Debugger:"].concat(e))}}t.Debugger=i},6671:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.serializeXml=t.cloneNode=t.tagName=t.querySelectorAll=t.querySelectorAllByAttrValue=t.querySelectorAllByAttr=t.formatXml=t.createTextNode=t.createElementNS=t.createElement=t.replaceNode=t.NodeType=t.parseInput=t.XML_ENTITIES=t.trimInput_=t.toArray=void 0;const r=n(4886),i=n(4998),o=n(4755),s=n(5024);function a(e){const t=[];for(let n=0,r=e.length;n[ \f\n\r\t\v\u200b]+<").trim()}function l(e,t){if(!t)return[!1,""];const n=e.match(/^<([^> ]+).*>/),r=t.match(/^<\/([^>]+)>(.*)/);return n&&r&&n[1]===r[1]?[!0,r[2]]:[!1,""]}t.toArray=a,t.trimInput_=c,t.XML_ENTITIES={"<":!0,">":!0,"&":!0,""":!0,"'":!0},t.parseInput=function(e){const t=new o.default.xmldom.DOMParser,n=c(e),a=!!n.match(/&(?!lt|gt|amp|quot|apos)\w+;/g);if(!n)throw new Error("Empty input!");try{const e=t.parseFromString(n,a?"text/html":"text/xml");return r.default.getInstance().mode===i.Mode.HTTP?(s.xpath.currentDocument=e,a?e.body.childNodes[0]:e.documentElement):e.documentElement}catch(e){throw new r.SREError("Illegal input: "+e.message)}},function(e){e[e.ELEMENT_NODE=1]="ELEMENT_NODE",e[e.ATTRIBUTE_NODE=2]="ATTRIBUTE_NODE",e[e.TEXT_NODE=3]="TEXT_NODE",e[e.CDATA_SECTION_NODE=4]="CDATA_SECTION_NODE",e[e.ENTITY_REFERENCE_NODE=5]="ENTITY_REFERENCE_NODE",e[e.ENTITY_NODE=6]="ENTITY_NODE",e[e.PROCESSING_INSTRUCTION_NODE=7]="PROCESSING_INSTRUCTION_NODE",e[e.COMMENT_NODE=8]="COMMENT_NODE",e[e.DOCUMENT_NODE=9]="DOCUMENT_NODE",e[e.DOCUMENT_TYPE_NODE=10]="DOCUMENT_TYPE_NODE",e[e.DOCUMENT_FRAGMENT_NODE=11]="DOCUMENT_FRAGMENT_NODE",e[e.NOTATION_NODE=12]="NOTATION_NODE"}(t.NodeType||(t.NodeType={})),t.replaceNode=function(e,t){e.parentNode&&(e.parentNode.insertBefore(t,e),e.parentNode.removeChild(e))},t.createElement=function(e){return o.default.document.createElement(e)},t.createElementNS=function(e,t){return o.default.document.createElementNS(e,t)},t.createTextNode=function(e){return o.default.document.createTextNode(e)},t.formatXml=function(e){let t="",n=/(>)(<)(\/*)/g,r=0,i=(e=e.replace(n,"$1\r\n$2$3")).split("\r\n");for(n=/(\.)*(<)(\/*)/g,i=i.map((e=>e.replace(n,"$1\r\n$2$3").split("\r\n"))).reduce(((e,t)=>e.concat(t)),[]);i.length;){let e=i.shift();if(!e)continue;let n=0;if(e.match(/^<\w[^>/]*>[^>]+$/)){const t=l(e,i[0]);t[0]?t[1]?(e+=i.shift().slice(0,-t[1].length),t[1].trim()&&i.unshift(t[1])):e+=i.shift():n=1}else if(e.match(/^<\/\w/))0!==r&&(r-=1);else if(e.match(/^<\w[^>]*[^/]>.*$/))n=1;else if(e.match(/^<\w[^>]*\/>.+$/)){const t=e.indexOf(">")+1;e.slice(t).trim()&&i.unshift(),e=e.slice(0,t)}else n=0;t+=new Array(r+1).join(" ")+e+"\r\n",r+=n}return t},t.querySelectorAllByAttr=function(e,t){return e.querySelectorAll?a(e.querySelectorAll(`[${t}]`)):s.evalXPath(`.//*[@${t}]`,e)},t.querySelectorAllByAttrValue=function(e,t,n){return e.querySelectorAll?a(e.querySelectorAll(`[${t}="${n}"]`)):s.evalXPath(`.//*[@${t}="${n}"]`,e)},t.querySelectorAll=function(e,t){return e.querySelectorAll?a(e.querySelectorAll(t)):s.evalXPath(`.//${t}`,e)},t.tagName=function(e){return e.tagName.toUpperCase()},t.cloneNode=function(e){return e.cloneNode(!0)},t.serializeXml=function(e){return(new o.default.xmldom.XMLSerializer).serializeToString(e)}},4886:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.EnginePromise=t.SREError=void 0;const r=n(8310),i=n(4998),o=n(1984),s=n(4513);class a extends Error{constructor(e=""){super(),this.message=e,this.name="SRE Error"}}t.SREError=a;class c{constructor(){this.customLoader=null,this.parsers={},this.comparator=null,this.mode=i.Mode.SYNC,this.init=!0,this.delay=!1,this.comparators={},this.domain="mathspeak",this.style=r.DynamicCstr.DEFAULT_VALUES[r.Axis.STYLE],this._defaultLocale=r.DynamicCstr.DEFAULT_VALUES[r.Axis.LOCALE],this.locale=this.defaultLocale,this.subiso="",this.modality=r.DynamicCstr.DEFAULT_VALUES[r.Axis.MODALITY],this.speech=i.Speech.NONE,this.markup=i.Markup.NONE,this.walker="Table",this.structure=!1,this.ruleSets=[],this.strict=!1,this.isIE=!1,this.isEdge=!1,this.rate="100",this.pprint=!1,this.config=!1,this.rules="",this.prune="",this.evaluator=c.defaultEvaluator,this.defaultParser=new r.DynamicCstrParser(r.DynamicCstr.DEFAULT_ORDER),this.parser=this.defaultParser,this.dynamicCstr=r.DynamicCstr.defaultCstr()}set defaultLocale(e){this._defaultLocale=s.Variables.ensureLocale(e,this._defaultLocale)}get defaultLocale(){return this._defaultLocale}static getInstance(){return c.instance=c.instance||new c,c.instance}static defaultEvaluator(e,t){return e}static evaluateNode(e){return c.nodeEvaluator(e)}getRate(){const e=parseInt(this.rate,10);return isNaN(e)?100:e}setDynamicCstr(e){if(this.defaultLocale&&(r.DynamicCstr.DEFAULT_VALUES[r.Axis.LOCALE]=this.defaultLocale),e){const t=Object.keys(e);for(let n=0;n{void 0!==e[n]&&(t[n]=e[n])};return n("mode"),t.configurate(e),a.default.BINARY_FEATURES.forEach((n=>{void 0!==e[n]&&(t[n]=!!e[n])})),a.default.STRING_FEATURES.forEach(n),e.json&&(l.default.jsonPath=c.makePath(e.json)),e.xpath&&(l.default.WGXpath=e.xpath),t.setCustomLoader(e.custom),function(e){e.isIE=s.detectIE(),e.isEdge=s.detectEdge()}(t),i.setLocale(),t.setDynamicCstr(),t.init?(a.EnginePromise.promises.init=new Promise(((e,t)=>{setTimeout((()=>{e("init")}),10)})),t.init=!1,a.EnginePromise.get()):t.delay?(t.delay=!1,a.EnginePromise.get()):o.loadLocale()}))}},6988:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Event=t.EventType=t.Move=t.KeyCode=void 0,function(e){e[e.ENTER=13]="ENTER",e[e.ESC=27]="ESC",e[e.SPACE=32]="SPACE",e[e.PAGE_UP=33]="PAGE_UP",e[e.PAGE_DOWN=34]="PAGE_DOWN",e[e.END=35]="END",e[e.HOME=36]="HOME",e[e.LEFT=37]="LEFT",e[e.UP=38]="UP",e[e.RIGHT=39]="RIGHT",e[e.DOWN=40]="DOWN",e[e.TAB=9]="TAB",e[e.LESS=188]="LESS",e[e.GREATER=190]="GREATER",e[e.DASH=189]="DASH",e[e.ZERO=48]="ZERO",e[e.ONE=49]="ONE",e[e.TWO=50]="TWO",e[e.THREE=51]="THREE",e[e.FOUR=52]="FOUR",e[e.FIVE=53]="FIVE",e[e.SIX=54]="SIX",e[e.SEVEN=55]="SEVEN",e[e.EIGHT=56]="EIGHT",e[e.NINE=57]="NINE",e[e.A=65]="A",e[e.B=66]="B",e[e.C=67]="C",e[e.D=68]="D",e[e.E=69]="E",e[e.F=70]="F",e[e.G=71]="G",e[e.H=72]="H",e[e.I=73]="I",e[e.J=74]="J",e[e.K=75]="K",e[e.L=76]="L",e[e.M=77]="M",e[e.N=78]="N",e[e.O=79]="O",e[e.P=80]="P",e[e.Q=81]="Q",e[e.R=82]="R",e[e.S=83]="S",e[e.T=84]="T",e[e.U=85]="U",e[e.V=86]="V",e[e.W=87]="W",e[e.X=88]="X",e[e.Y=89]="Y",e[e.Z=90]="Z"}(t.KeyCode||(t.KeyCode={})),t.Move=new Map([[13,"ENTER"],[27,"ESC"],[32,"SPACE"],[33,"PAGE_UP"],[34,"PAGE_DOWN"],[35,"END"],[36,"HOME"],[37,"LEFT"],[38,"UP"],[39,"RIGHT"],[40,"DOWN"],[9,"TAB"],[188,"LESS"],[190,"GREATER"],[189,"DASH"],[48,"ZERO"],[49,"ONE"],[50,"TWO"],[51,"THREE"],[52,"FOUR"],[53,"FIVE"],[54,"SIX"],[55,"SEVEN"],[56,"EIGHT"],[57,"NINE"],[65,"A"],[66,"B"],[67,"C"],[68,"D"],[69,"E"],[70,"F"],[71,"G"],[72,"H"],[73,"I"],[74,"J"],[75,"K"],[76,"L"],[77,"M"],[78,"N"],[79,"O"],[80,"P"],[81,"Q"],[82,"R"],[83,"S"],[84,"T"],[85,"U"],[86,"V"],[87,"W"],[88,"X"],[89,"Y"],[90,"Z"]]),function(e){e.CLICK="click",e.DBLCLICK="dblclick",e.MOUSEDOWN="mousedown",e.MOUSEUP="mouseup",e.MOUSEOVER="mouseover",e.MOUSEOUT="mouseout",e.MOUSEMOVE="mousemove",e.SELECTSTART="selectstart",e.KEYPRESS="keypress",e.KEYDOWN="keydown",e.KEYUP="keyup",e.TOUCHSTART="touchstart",e.TOUCHMOVE="touchmove",e.TOUCHEND="touchend",e.TOUCHCANCEL="touchcancel"}(t.EventType||(t.EventType={}));t.Event=class{constructor(e,t,n){this.src=e,this.type=t,this.callback=n}add(){this.src.addEventListener(this.type,this.callback)}remove(){this.src.removeEventListener(this.type,this.callback)}}},7129:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.localePath=t.makePath=void 0;const r=n(4755);function i(e){return e.match("/$")?e:e+"/"}t.makePath=i,t.localePath=function(e,t="json"){return i(r.default.jsonPath)+e+(t.match(/^\./)?t:"."+t)}},3539:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.KeyProcessor=t.Processor=void 0;const r=n(6988);class i{constructor(e,t){this.name=e,this.process=t.processor,this.postprocess=t.postprocessor||((e,t)=>e),this.processor=this.postprocess?function(e){return this.postprocess(this.process(e),e)}:this.process,this.print=t.print||i.stringify_,this.pprint=t.pprint||this.print}static stringify_(e){return e?e.toString():e}}t.Processor=i,i.LocalState={walker:null,speechGenerator:null,highlighter:null};class o extends i{constructor(e,t){super(e,t),this.key=t.key||o.getKey_}static getKey_(e){return"string"==typeof e?r.KeyCode[e.toUpperCase()]:e}}t.KeyProcessor=o},9615:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.keypress=t.output=t.print=t.process=t.set=void 0;const r=n(4253),i=n(7450),o=n(9009),s=n(4524),a=n(1939),c=n(7317),l=n(144),u=n(907),d=n(8835),h=n(6671),p=n(4886),f=n(4998),m=n(3539),g=n(5024),S=new Map;function b(e){S.set(e.name,e)}function N(e){const t=S.get(e);if(!t)throw new p.SREError("Unknown processor "+e);return t}function E(e,t){const n=N(e);try{return n.processor(t)}catch(e){throw new p.SREError("Processing error for expression "+t)}}function y(e,t){const n=N(e);return p.default.getInstance().pprint?n.pprint(t):n.print(t)}t.set=b,t.process=E,t.print=y,t.output=function(e,t){const n=N(e);try{const e=n.processor(t);return p.default.getInstance().pprint?n.pprint(e):n.print(e)}catch(e){throw new p.SREError("Processing error for expression "+t)}},t.keypress=function(e,t){const n=N(e),r=n instanceof m.KeyProcessor?n.key(t):t,i=n.processor(r);return p.default.getInstance().pprint?n.pprint(i):n.print(i)},b(new m.Processor("semantic",{processor:function(e){const t=h.parseInput(e);return a.xmlTree(t)},postprocessor:function(e,t){const n=p.default.getInstance().speech;if(n===f.Speech.NONE)return e;const i=h.cloneNode(e);let o=l.computeMarkup(i);if(n===f.Speech.SHALLOW)return e.setAttribute("speech",r.finalize(o)),e;const s=g.evalXPath(".//*[@id]",e),a=g.evalXPath(".//*[@id]",i);for(let e,t,n=0;e=s[n],t=a[n];n++)o=l.computeMarkup(t),e.setAttribute("speech",r.finalize(o));return e},pprint:function(e){return h.formatXml(e.toString())}})),b(new m.Processor("speech",{processor:function(e){const t=h.parseInput(e),n=a.xmlTree(t),i=l.computeSpeech(n);return r.finalize(r.markup(i))},pprint:function(e){const t=e.toString();return r.isXml()?h.formatXml(t):t}})),b(new m.Processor("json",{processor:function(e){const t=h.parseInput(e);return a.getTree(t).toJson()},postprocessor:function(e,t){const n=p.default.getInstance().speech;if(n===f.Speech.NONE)return e;const i=h.parseInput(t),o=a.xmlTree(i),s=l.computeMarkup(o);if(n===f.Speech.SHALLOW)return e.stree.speech=r.finalize(s),e;const c=e=>{const t=g.evalXPath(`.//*[@id=${e.id}]`,o)[0],n=l.computeMarkup(t);e.speech=r.finalize(n),e.children&&e.children.forEach(c)};return c(e.stree),e},print:function(e){return JSON.stringify(e)},pprint:function(e){return JSON.stringify(e,null,2)}})),b(new m.Processor("description",{processor:function(e){const t=h.parseInput(e),n=a.xmlTree(t);return l.computeSpeech(n)},print:function(e){return JSON.stringify(e)},pprint:function(e){return JSON.stringify(e,null,2)}})),b(new m.Processor("enriched",{processor:function(e){return i.semanticMathmlSync(e)},postprocessor:function(e,t){const n=d.getSemanticRoot(e);let r;switch(p.default.getInstance().speech){case f.Speech.NONE:break;case f.Speech.SHALLOW:r=c.generator("Adhoc"),r.getSpeech(n,e);break;case f.Speech.DEEP:r=c.generator("Tree"),r.getSpeech(e,e)}return e},pprint:function(e){return h.formatXml(e.toString())}})),b(new m.Processor("walker",{processor:function(e){const t=c.generator("Node");m.Processor.LocalState.speechGenerator=t,t.setOptions({modality:p.default.getInstance().modality,locale:p.default.getInstance().locale,domain:p.default.getInstance().domain,style:p.default.getInstance().style}),m.Processor.LocalState.highlighter=o.highlighter({color:"black"},{color:"white"},{renderer:"NativeMML"});const n=E("enriched",e),r=y("enriched",n);return m.Processor.LocalState.walker=u.walker(p.default.getInstance().walker,n,t,m.Processor.LocalState.highlighter,r),m.Processor.LocalState.walker},print:function(e){return m.Processor.LocalState.walker.speech()}})),b(new m.KeyProcessor("move",{processor:function(e){if(!m.Processor.LocalState.walker)return null;return!1===m.Processor.LocalState.walker.move(e)?r.error(e):m.Processor.LocalState.walker.speech()}})),b(new m.Processor("number",{processor:function(e){const t=parseInt(e,10);return isNaN(t)?"":s.LOCALE.NUMBERS.numberToWords(t)}})),b(new m.Processor("ordinal",{processor:function(e){const t=parseInt(e,10);return isNaN(t)?"":s.LOCALE.NUMBERS.wordOrdinal(t)}})),b(new m.Processor("numericOrdinal",{processor:function(e){const t=parseInt(e,10);return isNaN(t)?"":s.LOCALE.NUMBERS.numericOrdinal(t)}})),b(new m.Processor("vulgar",{processor:function(e){const[t,n]=e.split("/").map((e=>parseInt(e,10)));return isNaN(t)||isNaN(n)?"":E("speech",`${t}${n}`)}}))},9037:function(e,t,n){var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.localePath=t.exit=t.move=t.walk=t.processFile=t.file=t.vulgar=t.numericOrdinal=t.ordinal=t.number=t.toEnriched=t.toDescription=t.toJson=t.toSemantic=t.toSpeech=t.localeLoader=t.engineReady=t.engineSetup=t.setupEngine=t.version=void 0;const i=n(4886),o=n(985),s=n(4998),a=n(7129),c=n(9615),l=n(4755),u=n(4513),d=n(5659);function h(e){return r(this,void 0,void 0,(function*(){return(0,o.setup)(e)}))}function p(e,t){return c.process(e,t)}function f(e,t,n){switch(i.default.getInstance().mode){case s.Mode.ASYNC:return function(e,t,n){return r(this,void 0,void 0,(function*(){const r=yield l.default.fs.promises.readFile(t,{encoding:"utf8"}),o=c.output(e,r);if(n)try{l.default.fs.promises.writeFile(n,o)}catch(e){throw new i.SREError("Can not write to file: "+n)}return o}))}(e,t,n);case s.Mode.SYNC:return function(e,t,n){const r=function(e){let t;try{t=l.default.fs.readFileSync(e,{encoding:"utf8"})}catch(t){throw new i.SREError("Can not open file: "+e)}return t}(t),o=c.output(e,r);if(n)try{l.default.fs.writeFileSync(n,o)}catch(e){throw new i.SREError("Can not write to file: "+n)}return o}(e,t,n);default:throw new i.SREError(`Can process files in ${i.default.getInstance().mode} mode`)}}t.version=u.Variables.VERSION,t.setupEngine=h,t.engineSetup=function(){const e=["mode"].concat(i.default.STRING_FEATURES,i.default.BINARY_FEATURES),t=i.default.getInstance(),n={};return e.forEach((function(e){n[e]=t[e]})),n.json=l.default.jsonPath,n.xpath=l.default.WGXpath,n.rules=t.ruleSets.slice(),n},t.engineReady=function(){return r(this,void 0,void 0,(function*(){return h({}).then((()=>i.EnginePromise.getall()))}))},t.localeLoader=d.standardLoader,t.toSpeech=function(e){return p("speech",e)},t.toSemantic=function(e){return p("semantic",e)},t.toJson=function(e){return p("json",e)},t.toDescription=function(e){return p("description",e)},t.toEnriched=function(e){return p("enriched",e)},t.number=function(e){return p("number",e)},t.ordinal=function(e){return p("ordinal",e)},t.numericOrdinal=function(e){return p("numericOrdinal",e)},t.vulgar=function(e){return p("vulgar",e)},t.file={},t.file.toSpeech=function(e,t){return f("speech",e,t)},t.file.toSemantic=function(e,t){return f("semantic",e,t)},t.file.toJson=function(e,t){return f("json",e,t)},t.file.toDescription=function(e,t){return f("description",e,t)},t.file.toEnriched=function(e,t){return f("enriched",e,t)},t.processFile=f,t.walk=function(e){return c.output("walker",e)},t.move=function(e){return c.keypress("move",e)},t.exit=function(e){const t=e||0;i.EnginePromise.getall().then((()=>process.exit(t)))},t.localePath=a.localePath,l.default.documentSupported?h({mode:s.Mode.HTTP}).then((()=>h({}))):h({mode:s.Mode.SYNC}).then((()=>h({mode:s.Mode.ASYNC})))},4755:function(__unused_webpack_module,exports,__webpack_require__){var __dirname="/";Object.defineProperty(exports,"__esModule",{value:!0});const variables_1=__webpack_require__(4513);class SystemExternal{static extRequire(library){if("undefined"!=typeof process){const nodeRequire=eval("require");return nodeRequire(library)}return null}}exports.default=SystemExternal,SystemExternal.windowSupported=!("undefined"==typeof window),SystemExternal.documentSupported=SystemExternal.windowSupported&&!(void 0===window.document),SystemExternal.xmldom=SystemExternal.documentSupported?window:SystemExternal.extRequire("xmldom-sre"),SystemExternal.document=SystemExternal.documentSupported?window.document:(new SystemExternal.xmldom.DOMImplementation).createDocument("","",0),SystemExternal.xpath=SystemExternal.documentSupported?document:function(){const e={document:{},XPathResult:{}};return SystemExternal.extRequire("wicked-good-xpath").install(e),e.document.XPathResult=e.XPathResult,e.document}(),SystemExternal.mathmapsIePath="https://cdn.jsdelivr.net/npm/sre-mathmaps-ie@"+variables_1.Variables.VERSION+"mathmaps_ie.js",SystemExternal.commander=SystemExternal.documentSupported?null:SystemExternal.extRequire("commander"),SystemExternal.fs=SystemExternal.documentSupported?null:SystemExternal.extRequire("fs"),SystemExternal.url=variables_1.Variables.url,SystemExternal.jsonPath=(SystemExternal.documentSupported?SystemExternal.url:process.env.SRE_JSON_PATH||__webpack_require__.g.SRE_JSON_PATH||__dirname+"/mathmaps")+"/",SystemExternal.WGXpath=variables_1.Variables.WGXpath,SystemExternal.wgxpath=null},4513:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Variables=void 0;class n{static ensureLocale(e,t){return n.LOCALES.get(e)?e:(console.error(`Locale ${e} does not exist! Using ${n.LOCALES.get(t)} instead.`),t)}}t.Variables=n,n.VERSION="4.0.6",n.LOCALES=new Map([["ca","Catalan"],["da","Danish"],["de","German"],["en","English"],["es","Spanish"],["fr","French"],["hi","Hindi"],["it","Italian"],["nb","Bokm\xe5l"],["nn","Nynorsk"],["sv","Swedish"],["nemeth","Nemeth"]]),n.mathjaxVersion="3.2.1",n.url="https://cdn.jsdelivr.net/npm/speech-rule-engine@"+n.VERSION+"/lib/mathmaps",n.WGXpath="https://cdn.jsdelivr.net/npm/wicked-good-xpath@1.3.0/dist/wgxpath.install.js"},5024:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.updateEvaluator=t.evaluateString=t.evaluateBoolean=t.getLeafNodes=t.evalXPath=t.resolveNameSpace=t.xpath=void 0;const r=n(4886),i=n(4998),o=n(4755);function s(){return"undefined"!=typeof XPathResult}t.xpath={currentDocument:null,evaluate:s()?document.evaluate:o.default.xpath.evaluate,result:s()?XPathResult:o.default.xpath.XPathResult,createNSResolver:s()?document.createNSResolver:o.default.xpath.createNSResolver};const a={xhtml:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",mml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function c(e){return a[e]||null}t.resolveNameSpace=c;class l{constructor(){this.lookupNamespaceURI=c}}function u(e,n,o){return r.default.getInstance().mode!==i.Mode.HTTP||r.default.getInstance().isIE||r.default.getInstance().isEdge?t.xpath.evaluate(e,n,new l,o,null):t.xpath.currentDocument.evaluate(e,n,c,o,null)}function d(e,n){let r;try{r=u(e,n,t.xpath.result.ORDERED_NODE_ITERATOR_TYPE)}catch(e){return[]}const i=[];for(let e=r.iterateNext();e;e=r.iterateNext())i.push(e);return i}t.evalXPath=d,t.getLeafNodes=function(e){return d(".//*[count(*)=0]",e)},t.evaluateBoolean=function(e,n){let r;try{r=u(e,n,t.xpath.result.BOOLEAN_TYPE)}catch(e){return!1}return r.booleanValue},t.evaluateString=function(e,n){let r;try{r=u(e,n,t.xpath.result.STRING_TYPE)}catch(e){return""}return r.stringValue},t.updateEvaluator=function(e){if(r.default.getInstance().mode!==i.Mode.HTTP)return;let n=e;for(;n&&!n.evaluate;)n=n.parentNode;n&&n.evaluate?t.xpath.currentDocument=n:e.ownerDocument&&(t.xpath.currentDocument=e.ownerDocument)}},9341:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractEnrichCase=void 0;t.AbstractEnrichCase=class{constructor(e){this.semantic=e}}},4306:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.CaseBinomial=void 0;const r=n(6671),i=n(9341),o=n(8672),s=n(8171);class a extends i.AbstractEnrichCase{constructor(e){super(e),this.mml=e.mathmlTree}static test(e){return!e.mathmlTree&&"line"===e.type&&"binomial"===e.role}getMathml(){if(!this.semantic.childNodes.length)return this.mml;const e=this.semantic.childNodes[0];if(this.mml=(0,o.walkTree)(e),this.mml.hasAttribute(s.Attribute.TYPE)){const e=r.createElement("mrow");e.setAttribute(s.Attribute.ADDED,"true"),r.replaceNode(this.mml,e),e.appendChild(this.mml),this.mml=e}return(0,s.setAttributes)(this.mml,this.semantic),this.mml}}t.CaseBinomial=a},8871:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.CaseDoubleScript=void 0;const r=n(6671),i=n(9341),o=n(8672),s=n(8171);class a extends i.AbstractEnrichCase{constructor(e){super(e),this.mml=e.mathmlTree}static test(e){if(!e.mathmlTree||!e.childNodes.length)return!1;const t=r.tagName(e.mathmlTree),n=e.childNodes[0].role;return"MSUBSUP"===t&&"subsup"===n||"MUNDEROVER"===t&&"underover"===n}getMathml(){const e=this.semantic.childNodes[0],t=e.childNodes[0],n=this.semantic.childNodes[1],r=e.childNodes[1],i=o.walkTree(n),a=o.walkTree(t),c=o.walkTree(r);return(0,s.setAttributes)(this.mml,this.semantic),this.mml.setAttribute(s.Attribute.CHILDREN,(0,s.makeIdList)([t,r,n])),[a,c,i].forEach((e=>o.getInnerNode(e).setAttribute(s.Attribute.PARENT,this.mml.getAttribute(s.Attribute.ID)))),this.mml.setAttribute(s.Attribute.TYPE,e.role),o.addCollapsedAttribute(this.mml,[this.semantic.id,[e.id,t.id,r.id],n.id]),this.mml}}t.CaseDoubleScript=a},928:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.CaseEmbellished=void 0;const r=n(6671),i=n(9444),o=n(9341),s=n(8871),a=n(4308),c=n(439),l=n(8672),u=n(8171);class d extends o.AbstractEnrichCase{constructor(e){super(e),this.fenced=null,this.fencedMml=null,this.fencedMmlNodes=[],this.ofence=null,this.ofenceMml=null,this.ofenceMap={},this.cfence=null,this.cfenceMml=null,this.cfenceMap={},this.parentCleanup=[]}static test(e){return!(!e.mathmlTree||!e.fencePointer||e.mathmlTree.getAttribute("data-semantic-type"))}static makeEmptyNode_(e){const t=r.createElement("mrow"),n=new i.SemanticNode(e);return n.type="empty",n.mathmlTree=t,n}static fencedMap_(e,t){t[e.id]=e.mathmlTree,e.embellished&&d.fencedMap_(e.childNodes[0],t)}getMathml(){this.getFenced_(),this.fencedMml=l.walkTree(this.fenced),this.getFencesMml_(),"empty"!==this.fenced.type||this.fencedMml.parentNode||(this.fencedMml.setAttribute(u.Attribute.ADDED,"true"),this.cfenceMml.parentNode.insertBefore(this.fencedMml,this.cfenceMml)),this.getFencedMml_();return this.rewrite_()}fencedElement(e){return"fenced"===e.type||"matrix"===e.type||"vector"===e.type}getFenced_(){let e=this.semantic;for(;!this.fencedElement(e);)e=e.childNodes[0];this.fenced=e.childNodes[0],this.ofence=e.contentNodes[0],this.cfence=e.contentNodes[1],d.fencedMap_(this.ofence,this.ofenceMap),d.fencedMap_(this.cfence,this.cfenceMap)}getFencedMml_(){let e=this.ofenceMml.nextSibling;for(e=e===this.fencedMml?e:this.fencedMml;e&&e!==this.cfenceMml;)this.fencedMmlNodes.push(e),e=e.nextSibling}getFencesMml_(){let e=this.semantic;const t=Object.keys(this.ofenceMap),n=Object.keys(this.cfenceMap);for(;!(this.ofenceMml&&this.cfenceMml||e===this.fenced);)-1===t.indexOf(e.fencePointer)||this.ofenceMml||(this.ofenceMml=e.mathmlTree),-1===n.indexOf(e.fencePointer)||this.cfenceMml||(this.cfenceMml=e.mathmlTree),e=e.childNodes[0];this.ofenceMml||(this.ofenceMml=this.ofence.mathmlTree),this.cfenceMml||(this.cfenceMml=this.cfence.mathmlTree),this.ofenceMml&&(this.ofenceMml=l.ascendNewNode(this.ofenceMml)),this.cfenceMml&&(this.cfenceMml=l.ascendNewNode(this.cfenceMml))}rewrite_(){let e=this.semantic,t=null;const n=this.introduceNewLayer_();for((0,u.setAttributes)(n,this.fenced.parent);!this.fencedElement(e);){const i=e.mathmlTree,o=this.specialCase_(e,i);if(o)e=o;else{(0,u.setAttributes)(i,e);const t=[];for(let n,r=1;n=e.childNodes[r];r++)t.push(l.walkTree(n));e=e.childNodes[0]}const s=r.createElement("dummy"),a=i.childNodes[0];r.replaceNode(i,s),r.replaceNode(n,i),r.replaceNode(i.childNodes[0],n),r.replaceNode(s,a),t||(t=i)}return l.walkTree(this.ofence),l.walkTree(this.cfence),this.cleanupParents_(),t||n}specialCase_(e,t){const n=r.tagName(t);let i,o=null;if("MSUBSUP"===n?(o=e.childNodes[0],i=s.CaseDoubleScript):"MMULTISCRIPTS"===n&&("superscript"===e.type||"subscript"===e.type?i=a.CaseMultiscripts:"tensor"===e.type&&(i=c.CaseTensor),o=i&&e.childNodes[0]&&"subsup"===e.childNodes[0].role?e.childNodes[0]:e),!o)return null;const l=o.childNodes[0],u=d.makeEmptyNode_(l.id);return o.childNodes[0]=u,t=new i(e).getMathml(),o.childNodes[0]=l,this.parentCleanup.push(t),o.childNodes[0]}introduceNewLayer_(){const e=this.fullFence(this.ofenceMml),t=this.fullFence(this.cfenceMml);let n=r.createElement("mrow");if(r.replaceNode(this.fencedMml,n),this.fencedMmlNodes.forEach((e=>n.appendChild(e))),n.insertBefore(e,this.fencedMml),n.appendChild(t),!n.parentNode){const e=r.createElement("mrow");for(;n.childNodes.length>0;)e.appendChild(n.childNodes[0]);n.appendChild(e),n=e}return n}fullFence(e){const t=this.fencedMml.parentNode;let n=e;for(;n.parentNode&&n.parentNode!==t;)n=n.parentNode;return n}cleanupParents_(){this.parentCleanup.forEach((function(e){const t=e.childNodes[1].getAttribute(u.Attribute.PARENT);e.childNodes[0].setAttribute(u.Attribute.PARENT,t)}))}}t.CaseEmbellished=d},9763:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.CaseLimit=void 0;const r=n(6671),i=n(9341),o=n(8672),s=n(8171);class a extends i.AbstractEnrichCase{constructor(e){super(e),this.mml=e.mathmlTree}static test(e){if(!e.mathmlTree||!e.childNodes.length)return!1;const t=r.tagName(e.mathmlTree),n=e.type;return("limupper"===n||"limlower"===n)&&("MSUBSUP"===t||"MUNDEROVER"===t)||"limboth"===n&&("MSUB"===t||"MUNDER"===t||"MSUP"===t||"MOVER"===t)}static walkTree_(e){e&&o.walkTree(e)}getMathml(){const e=this.semantic.childNodes;return"limboth"!==this.semantic.type&&this.mml.childNodes.length>=3&&(this.mml=o.introduceNewLayer([this.mml],this.semantic)),(0,s.setAttributes)(this.mml,this.semantic),e[0].mathmlTree||(e[0].mathmlTree=this.semantic.mathmlTree),e.forEach(a.walkTree_),this.mml}}t.CaseLimit=a},7978:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.CaseLine=void 0;const r=n(9341),i=n(8672),o=n(8171);class s extends r.AbstractEnrichCase{constructor(e){super(e),this.mml=e.mathmlTree}static test(e){return!!e.mathmlTree&&"line"===e.type}getMathml(){return this.semantic.contentNodes.length&&i.walkTree(this.semantic.contentNodes[0]),this.semantic.childNodes.length&&i.walkTree(this.semantic.childNodes[0]),(0,o.setAttributes)(this.mml,this.semantic),this.mml}}t.CaseLine=s},2124:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.CaseMultiindex=void 0;const r=n(6671),i=n(9341),o=n(8672),s=n(8171);class a extends i.AbstractEnrichCase{constructor(e){super(e),this.mml=e.mathmlTree}static multiscriptIndex(e){return"punctuated"===e.type&&"dummy"===e.contentNodes[0].role?o.collapsePunctuated(e):(o.walkTree(e),e.id)}static createNone_(e){const t=r.createElement("none");return e&&(0,s.setAttributes)(t,e),t.setAttribute(s.Attribute.ADDED,"true"),t}completeMultiscript(e,t){const n=r.toArray(this.mml.childNodes).slice(1);let i=0;const c=e=>{for(let t,r=0;t=e[r];r++){const e=n[i];if(e&&t===parseInt(o.getInnerNode(e).getAttribute(s.Attribute.ID)))o.getInnerNode(e).setAttribute(s.Attribute.PARENT,this.semantic.id.toString()),i++;else{const n=this.semantic.querySelectorAll((e=>e.id===t));this.mml.insertBefore(a.createNone_(n[0]),e||null)}}};c(e),n[i]&&"MPRESCRIPTS"!==r.tagName(n[i])?this.mml.insertBefore(n[i],r.createElement("mprescripts")):i++,c(t)}}t.CaseMultiindex=a},4308:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.CaseMultiscripts=void 0;const r=n(6671),i=n(7984),o=n(2124),s=n(8672),a=n(8171);class c extends o.CaseMultiindex{static test(e){if(!e.mathmlTree)return!1;return"MMULTISCRIPTS"===r.tagName(e.mathmlTree)&&("superscript"===e.type||"subscript"===e.type)}constructor(e){super(e)}getMathml(){let e,t,n;if((0,a.setAttributes)(this.mml,this.semantic),this.semantic.childNodes[0]&&"subsup"===this.semantic.childNodes[0].role){const r=this.semantic.childNodes[0];e=r.childNodes[0],t=o.CaseMultiindex.multiscriptIndex(this.semantic.childNodes[1]),n=o.CaseMultiindex.multiscriptIndex(r.childNodes[1]);const c=[this.semantic.id,[r.id,e.id,n],t];s.addCollapsedAttribute(this.mml,c),this.mml.setAttribute(a.Attribute.TYPE,r.role),this.completeMultiscript(i.SemanticSkeleton.interleaveIds(n,t),[])}else{e=this.semantic.childNodes[0],t=o.CaseMultiindex.multiscriptIndex(this.semantic.childNodes[1]);const n=[this.semantic.id,e.id,t];s.addCollapsedAttribute(this.mml,n)}const r=i.SemanticSkeleton.collapsedLeafs(n||[],t),c=s.walkTree(e);return s.getInnerNode(c).setAttribute(a.Attribute.PARENT,this.semantic.id.toString()),r.unshift(e.id),this.mml.setAttribute(a.Attribute.CHILDREN,r.join(",")),this.mml}}t.CaseMultiscripts=c},5326:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.CaseProof=void 0;const r=n(9341),i=n(8672),o=n(8171);class s extends r.AbstractEnrichCase{constructor(e){super(e),this.mml=e.mathmlTree}static test(e){return!!e.mathmlTree&&("inference"===e.type||"premises"===e.type)}getMathml(){return this.semantic.childNodes.length?(this.semantic.contentNodes.forEach((function(e){i.walkTree(e),(0,o.setAttributes)(e.mathmlTree,e)})),this.semantic.childNodes.forEach((function(e){i.walkTree(e)})),(0,o.setAttributes)(this.mml,this.semantic),this.mml.getAttribute("data-semantic-id")===this.mml.getAttribute("data-semantic-parent")&&this.mml.removeAttribute("data-semantic-parent"),this.mml):this.mml}}t.CaseProof=s},6998:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.CaseTable=void 0;const r=n(6671),i=n(9341),o=n(8672),s=n(8171);class a extends i.AbstractEnrichCase{constructor(e){super(e),this.inner=[],this.mml=e.mathmlTree}static test(e){return"matrix"===e.type||"vector"===e.type||"cases"===e.type}getMathml(){const e=o.cloneContentNode(this.semantic.contentNodes[0]),t=this.semantic.contentNodes[1]?o.cloneContentNode(this.semantic.contentNodes[1]):null;if(this.inner=this.semantic.childNodes.map(o.walkTree),this.mml)if("MFENCED"===r.tagName(this.mml)){const n=this.mml.childNodes;this.mml.insertBefore(e,n[0]||null),t&&this.mml.appendChild(t),this.mml=o.rewriteMfenced(this.mml)}else{const n=[e,this.mml];t&&n.push(t),this.mml=o.introduceNewLayer(n,this.semantic)}else this.mml=o.introduceNewLayer([e].concat(this.inner,[t]),this.semantic);return(0,s.setAttributes)(this.mml,this.semantic),this.mml}}t.CaseTable=a},439:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.CaseTensor=void 0;const r=n(7984),i=n(2124),o=n(8672),s=n(8171);class a extends i.CaseMultiindex{static test(e){return!!e.mathmlTree&&"tensor"===e.type}constructor(e){super(e)}getMathml(){o.walkTree(this.semantic.childNodes[0]);const e=i.CaseMultiindex.multiscriptIndex(this.semantic.childNodes[1]),t=i.CaseMultiindex.multiscriptIndex(this.semantic.childNodes[2]),n=i.CaseMultiindex.multiscriptIndex(this.semantic.childNodes[3]),a=i.CaseMultiindex.multiscriptIndex(this.semantic.childNodes[4]);(0,s.setAttributes)(this.mml,this.semantic);const c=[this.semantic.id,this.semantic.childNodes[0].id,e,t,n,a];o.addCollapsedAttribute(this.mml,c);const l=r.SemanticSkeleton.collapsedLeafs(e,t,n,a);return l.unshift(this.semantic.childNodes[0].id),this.mml.setAttribute(s.Attribute.CHILDREN,l.join(",")),this.completeMultiscript(r.SemanticSkeleton.interleaveIds(n,a),r.SemanticSkeleton.interleaveIds(e,t)),this.mml}}t.CaseTensor=a},598:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.CaseText=void 0;const r=n(9341),i=n(8672),o=n(8171);class s extends r.AbstractEnrichCase{constructor(e){super(e),this.mml=e.mathmlTree}static test(e){return"punctuated"===e.type&&("text"===e.role||e.contentNodes.every((e=>"dummy"===e.role)))}getMathml(){const e=[],t=i.collapsePunctuated(this.semantic,e);return this.mml=i.introduceNewLayer(e,this.semantic),(0,o.setAttributes)(this.mml,this.semantic),this.mml.removeAttribute(o.Attribute.CONTENT),i.addCollapsedAttribute(this.mml,t),this.mml}}t.CaseText=s},7450:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.prepareMmlString=t.testTranslation__=t.semanticMathml=t.semanticMathmlSync=t.semanticMathmlNode=void 0;const r=n(1984),i=n(6671),o=n(4886),s=n(1939),a=n(8672),c=n(8171);function l(e){const t=i.cloneNode(e),n=s.getTree(t);return a.enrich(t,n)}function u(e){return l(i.parseInput(e))}function d(e){return e.match(/^$/)||(e+=""),e}n(7813),t.semanticMathmlNode=l,t.semanticMathmlSync=u,t.semanticMathml=function(e,t){o.EnginePromise.getall().then((()=>{const n=i.parseInput(e);t(l(n))}))},t.testTranslation__=function(e){r.Debugger.getInstance().init();const t=u(d(e)).toString();return(0,c.removeAttributePrefix)(t),r.Debugger.getInstance().exit(),t},t.prepareMmlString=d},8171:function(e,t){var n;function r(e){return e.map((function(e){return e.id})).join(",")}function i(e,t){const r=[];"mglyph"===t.role&&r.push("image"),t.attributes.href&&r.push("link"),r.length&&e.setAttribute(n.POSTFIX,r.join(" "))}Object.defineProperty(t,"__esModule",{value:!0}),t.addPrefix=t.removeAttributePrefix=t.setPostfix=t.setAttributes=t.makeIdList=t.EnrichAttributes=t.Attribute=t.Prefix=void 0,t.Prefix="data-semantic-",function(e){e.ADDED="data-semantic-added",e.ALTERNATIVE="data-semantic-alternative",e.CHILDREN="data-semantic-children",e.COLLAPSED="data-semantic-collapsed",e.CONTENT="data-semantic-content",e.EMBELLISHED="data-semantic-embellished",e.FENCEPOINTER="data-semantic-fencepointer",e.FONT="data-semantic-font",e.ID="data-semantic-id",e.ANNOTATION="data-semantic-annotation",e.OPERATOR="data-semantic-operator",e.OWNS="data-semantic-owns",e.PARENT="data-semantic-parent",e.POSTFIX="data-semantic-postfix",e.PREFIX="data-semantic-prefix",e.ROLE="data-semantic-role",e.SPEECH="data-semantic-speech",e.STRUCTURE="data-semantic-structure",e.TYPE="data-semantic-type"}(n=t.Attribute||(t.Attribute={})),t.EnrichAttributes=[n.ADDED,n.ALTERNATIVE,n.CHILDREN,n.COLLAPSED,n.CONTENT,n.EMBELLISHED,n.FENCEPOINTER,n.FONT,n.ID,n.ANNOTATION,n.OPERATOR,n.OWNS,n.PARENT,n.POSTFIX,n.PREFIX,n.ROLE,n.SPEECH,n.STRUCTURE,n.TYPE],t.makeIdList=r,t.setAttributes=function(e,o){e.setAttribute(n.TYPE,o.type);const s=o.allAttributes();for(let n,r=0;n=s[r];r++)e.setAttribute(t.Prefix+n[0].toLowerCase(),n[1]);o.childNodes.length&&e.setAttribute(n.CHILDREN,r(o.childNodes)),o.contentNodes.length&&e.setAttribute(n.CONTENT,r(o.contentNodes)),o.parent&&e.setAttribute(n.PARENT,o.parent.id.toString()),i(e,o)},t.setPostfix=i,t.removeAttributePrefix=function(e){return e.toString().replace(new RegExp(t.Prefix,"g"),"")},t.addPrefix=function(e){return t.Prefix+e}},9775:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.factory=t.getCase=void 0,t.getCase=function(e){for(let n,r=0;n=t.factory[r];r++)if(n.test(e))return n.constr(e);return null},t.factory=[]},7813:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});const r=n(4306),i=n(8871),o=n(928),s=n(9763),a=n(7978),c=n(4308),l=n(5326),u=n(6998),d=n(439),h=n(598);n(9775).factory.push({test:s.CaseLimit.test,constr:e=>new s.CaseLimit(e)},{test:o.CaseEmbellished.test,constr:e=>new o.CaseEmbellished(e)},{test:i.CaseDoubleScript.test,constr:e=>new i.CaseDoubleScript(e)},{test:d.CaseTensor.test,constr:e=>new d.CaseTensor(e)},{test:c.CaseMultiscripts.test,constr:e=>new c.CaseMultiscripts(e)},{test:a.CaseLine.test,constr:e=>new a.CaseLine(e)},{test:r.CaseBinomial.test,constr:e=>new r.CaseBinomial(e)},{test:l.CaseProof.test,constr:e=>new l.CaseProof(e)},{test:u.CaseTable.test,constr:e=>new u.CaseTable(e)},{test:h.CaseText.test,constr:e=>new h.CaseText(e)})},8672:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.printNodeList__=t.collapsePunctuated=t.formattedOutput_=t.formattedOutput=t.getInnerNode=t.setOperatorAttribute_=t.createInvisibleOperator_=t.rewriteMfenced=t.cloneContentNode=t.addCollapsedAttribute=t.parentNode_=t.isIgnorable_=t.unitChild_=t.descendNode_=t.ascendNewNode=t.validLca_=t.pathToRoot_=t.attachedElement_=t.prunePath_=t.mathmlLca_=t.lcaType=t.functionApplication_=t.isDescendant_=t.insertNewChild_=t.mergeChildren_=t.collectChildNodes_=t.collateChildNodes_=t.childrenSubset_=t.moveSemanticAttributes_=t.introduceLayerAboveLca=t.introduceNewLayer=t.walkTree=t.enrich=t.SETTINGS=void 0;const r=n(1984),i=n(6671),o=n(4886),s=n(4020),a=n(2721),c=n(7984),l=n(8901),u=n(8171),d=n(9775);function h(e){const t=(0,d.getCase)(e);let n;if(t)return n=t.getMathml(),I(n);if(1===e.mathml.length)return r.Debugger.getInstance().output("Walktree Case 0"),n=e.mathml[0],u.setAttributes(n,e),e.childNodes.length&&(r.Debugger.getInstance().output("Walktree Case 0.1"),e.childNodes.forEach((function(e){"empty"===e.type&&n.appendChild(h(e))}))),I(n);const i=e.contentNodes.map(F);k(e,i);const o=e.childNodes.map(h),s=c.SemanticSkeleton.combineContentChildren(e,i,o);if(n=e.mathmlTree,null===n)r.Debugger.getInstance().output("Walktree Case 1"),n=p(s,e);else{const e=v(s);r.Debugger.getInstance().output("Walktree Case 2"),e?(r.Debugger.getInstance().output("Walktree Case 2.1"),n=e.parentNode):(r.Debugger.getInstance().output("Walktree Case 2.2"),n=U(n))}return n=D(n),N(n,s,e),u.setAttributes(n,e),I(n)}function p(e,t){const n=C(e);let o=n.node;const s=n.type;if(s!==_.VALID||!l.hasEmptyTag(o))if(r.Debugger.getInstance().output("Walktree Case 1.1"),o=i.createElement("mrow"),s===_.PRUNED)r.Debugger.getInstance().output("Walktree Case 1.1.0"),o=f(o,n.node,e);else if(e[0]){r.Debugger.getInstance().output("Walktree Case 1.1.1");const t=v(e),n=g(t.parentNode,e);i.replaceNode(t,o),n.forEach((function(e){o.appendChild(e)}))}return t.mathmlTree||(t.mathmlTree=o),o}function f(e,t,n){let o=L(t);if(l.hasMathTag(o)){r.Debugger.getInstance().output("Walktree Case 1.1.0.0"),m(o,e),i.toArray(o.childNodes).forEach((function(t){e.appendChild(t)}));const t=e;e=o,o=t}const s=n.indexOf(t);return n[s]=o,i.replaceNode(o,e),e.appendChild(o),n.forEach((function(t){e.appendChild(t)})),e}function m(e,t){for(const n of u.EnrichAttributes)e.hasAttribute(n)&&(t.setAttribute(n,e.getAttribute(n)),e.removeAttribute(n))}function g(e,t){const n=i.toArray(e.childNodes);let r=1/0,o=-1/0;return t.forEach((function(e){const t=n.indexOf(e);-1!==t&&(r=Math.min(r,t),o=Math.max(o,t))})),n.slice(r,o+1)}function S(e,t,n){const r=[];let o=i.toArray(e.childNodes),s=!1;for(;o.length;){const e=o.shift();if(e.hasAttribute(u.Attribute.TYPE)){r.push(e);continue}const t=b(e);0!==t.length&&(1!==t.length?(s?e.setAttribute("AuxiliaryImplicit",!0):s=!0,o=t.concat(o)):r.push(e))}const a=[],c=n.childNodes.map((function(e){return e.mathmlTree}));for(;c.length;){const e=c.pop();if(e){if(-1!==r.indexOf(e))break;-1!==t.indexOf(e)&&a.unshift(e)}}return r.concat(a)}function b(e){const t=[];let n=i.toArray(e.childNodes);for(;n.length;){const e=n.shift();e.nodeType===i.NodeType.ELEMENT_NODE&&(e.hasAttribute(u.Attribute.TYPE)?t.push(e):n=i.toArray(e.childNodes).concat(n))}return t}function N(e,t,n){const r="implicit"===n.role&&a.flags.combine_juxtaposition?S(e,t,n):i.toArray(e.childNodes);if(!r.length)return void t.forEach((function(t){e.appendChild(t)}));let o=0;for(;t.length;){const n=t[0];r[o]===n||A(r[o],n)?(t.shift(),o++):r[o]&&-1===t.indexOf(r[o])?o++:(y(n,e)||E(e,r[o],n),t.shift())}}function E(e,t,n){if(!t)return void e.insertBefore(n,null);let r=t,i=P(r);for(;i&&i.firstChild===r&&!r.hasAttribute("AuxiliaryImplicit")&&i!==e;)r=i,i=P(r);i&&(i.insertBefore(n,r),r.removeAttribute("AuxiliaryImplicit"))}function y(e,t){if(!e)return!1;do{if((e=e.parentNode)===t)return!0}while(e);return!1}function A(e,t){const n=s.functionApplication();if(e&&t&&e.textContent&&t.textContent&&e.textContent===n&&t.textContent===n&&"true"===t.getAttribute(u.Attribute.ADDED)){for(let n,r=0;n=e.attributes[r];r++)t.hasAttribute(n.nodeName)||t.setAttribute(n.nodeName,n.nodeValue);return i.replaceNode(e,t),!0}return!1}var _;function C(e){const t=v(e);if(!t)return{type:_.INVALID,node:null};const n=v(e.slice().reverse());if(t===n)return{type:_.VALID,node:t};const r=O(t),i=T(r,e),o=O(n,(function(e){return-1!==i.indexOf(e)})),s=o[0],a=i.indexOf(s);return-1===a?{type:_.INVALID,node:null}:{type:i.length!==r.length?_.PRUNED:M(i[a+1],o[1])?_.VALID:_.INVALID,node:s}}function T(e,t){let n=0;for(;e[n]&&-1===t.indexOf(e[n]);)n++;return e.slice(0,n+1)}function v(e){let t=0,n=null;for(;!n&&t!1),r=[e];for(;!n(e)&&!l.hasMathTag(e)&&e.parentNode;)e=P(e),r.unshift(e);return r}function M(e,t){return!(!e||!t||e.previousSibling||t.nextSibling)}function I(e){for(;!l.hasMathTag(e)&&R(e);)e=P(e);return e}function L(e){const t=i.toArray(e.childNodes);if(!t)return e;const n=t.filter((function(e){return e.nodeType===i.NodeType.ELEMENT_NODE&&!l.hasIgnoreTag(e)}));return 1===n.length&&l.hasEmptyTag(n[0])&&!n[0].hasAttribute(u.Attribute.TYPE)?L(n[0]):e}function R(e){const t=P(e);return!(!t||!l.hasEmptyTag(t))&&i.toArray(t.childNodes).every((function(t){return t===e||x(t)}))}function x(e){if(e.nodeType!==i.NodeType.ELEMENT_NODE)return!0;if(!e||l.hasIgnoreTag(e))return!0;const t=i.toArray(e.childNodes);return!(!l.hasEmptyTag(e)&&t.length||l.hasDisplayTag(e)||e.hasAttribute(u.Attribute.TYPE)||l.isOrphanedGlyph(e))&&i.toArray(e.childNodes).every(x)}function P(e){return e.parentNode}function F(e){if(e.mathml.length)return h(e);const n=t.SETTINGS.implicit?w(e):i.createElement("mrow");return e.mathml=[n],n}function D(e){if("MFENCED"!==i.tagName(e))return e;const t=i.createElement("mrow");for(let n,r=0;n=e.attributes[r];r++)-1===["open","close","separators"].indexOf(n.name)&&t.setAttribute(n.name,n.value);return i.toArray(e.childNodes).forEach((function(e){t.appendChild(e)})),i.replaceNode(e,t),t}function w(e){const t=i.createElement("mo"),n=i.createTextNode(e.textContent);return t.appendChild(n),u.setAttributes(t,e),t.setAttribute(u.Attribute.ADDED,"true"),t}function k(e,t){const n=e.type+(e.textContent?","+e.textContent:"");t.forEach((function(e){U(e).setAttribute(u.Attribute.OPERATOR,n)}))}function U(e){const t=i.toArray(e.childNodes);if(!t)return e;const n=t.filter((function(e){return!x(e)})),r=[];for(let e,t=0;e=n[t];t++)if(l.hasEmptyTag(e)){const t=U(e);t&&t!==e&&r.push(t)}else r.push(e);return 1===r.length?r[0]:e}function B(e,t,n,r){const i=r||!1;j(e,"Original MathML",i),j(n,"Semantic Tree",i),j(t,"Semantically enriched MathML",i)}function j(e,t,n){const r=i.formatXml(e.toString());n?console.info(t+":\n```html\n"+u.removeAttributePrefix(r)+"\n```\n"):console.info(r)}t.SETTINGS={collapsed:!0,implicit:!0},t.enrich=function(e,t){const n=i.cloneNode(e);return h(t.root),o.default.getInstance().structure&&e.setAttribute(u.Attribute.STRUCTURE,c.SemanticSkeleton.fromStructure(e,t).toString()),r.Debugger.getInstance().generateOutput((function(){return B(n,e,t,!0),[]})),e},t.walkTree=h,t.introduceNewLayer=p,t.introduceLayerAboveLca=f,t.moveSemanticAttributes_=m,t.childrenSubset_=g,t.collateChildNodes_=S,t.collectChildNodes_=b,t.mergeChildren_=N,t.insertNewChild_=E,t.isDescendant_=y,t.functionApplication_=A,function(e){e.VALID="valid",e.INVALID="invalid",e.PRUNED="pruned"}(_=t.lcaType||(t.lcaType={})),t.mathmlLca_=C,t.prunePath_=T,t.attachedElement_=v,t.pathToRoot_=O,t.validLca_=M,t.ascendNewNode=I,t.descendNode_=L,t.unitChild_=R,t.isIgnorable_=x,t.parentNode_=P,t.addCollapsedAttribute=function(e,t){const n=new c.SemanticSkeleton(t);e.setAttribute(u.Attribute.COLLAPSED,n.toString())},t.cloneContentNode=F,t.rewriteMfenced=D,t.createInvisibleOperator_=w,t.setOperatorAttribute_=k,t.getInnerNode=U,t.formattedOutput=B,t.formattedOutput_=j,t.collapsePunctuated=function(e,t){const n=!!t,r=t||[],i=e.parent,o=e.contentNodes.map((function(e){return e.id}));o.unshift("c");const s=[e.id,o];for(let t,o=0;t=e.childNodes[o];o++){const e=h(t);r.push(e);const o=U(e);i&&!n&&o.setAttribute(u.Attribute.PARENT,i.id.toString()),s.push(t.id)}return s},t.printNodeList__=function(e,t){console.info(e),i.toArray(t).forEach((function(e){console.info(e.toString())})),console.info("<<<<<<<<<<<<<<<<<")}},7228:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractHighlighter=void 0;const r=n(5024),i=n(8171);class o{constructor(){this.color=null,this.mactionName="",this.currentHighlights=[]}highlight(e){this.currentHighlights.push(e.map((e=>{const t=this.highlightNode(e);return this.setHighlighted(e),t})))}highlightAll(e){const t=this.getMactionNodes(e);for(let e,n=0;e=t[n];n++)this.highlight([e])}unhighlight(){const e=this.currentHighlights.pop();e&&e.forEach((e=>{this.isHighlighted(e.node)&&(this.unhighlightNode(e),this.unsetHighlighted(e.node))}))}unhighlightAll(){for(;this.currentHighlights.length>0;)this.unhighlight()}setColor(e){this.color=e}colorString(){return this.color.rgba()}addEvents(e,t){const n=this.getMactionNodes(e);for(let e,r=0;e=n[r];r++)for(const n in t)e.addEventListener(n,t[n])}getMactionNodes(e){return Array.from(e.getElementsByClassName(this.mactionName))}isMactionNode(e){const t=e.className||e.getAttribute("class");return!!t&&!!t.match(new RegExp(this.mactionName))}isHighlighted(e){return e.hasAttribute(o.ATTR)}setHighlighted(e){e.setAttribute(o.ATTR,"true")}unsetHighlighted(e){e.removeAttribute(o.ATTR)}colorizeAll(e){r.evalXPath(`.//*[@${i.Attribute.ID}]`,e).forEach((e=>this.colorize(e)))}uncolorizeAll(e){r.evalXPath(`.//*[@${i.Attribute.ID}]`,e).forEach((e=>this.uncolorize(e)))}colorize(e){const t=(0,i.addPrefix)("foreground");e.hasAttribute(t)&&(e.setAttribute(t+"-old",e.style.color),e.style.color=e.getAttribute(t))}uncolorize(e){const t=(0,i.addPrefix)("foreground")+"-old";e.hasAttribute(t)&&(e.style.color=e.getAttribute(t))}}t.AbstractHighlighter=o,o.ATTR="sre-highlight"},7567:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.ChtmlHighlighter=void 0;const r=n(9400);class i extends r.CssHighlighter{constructor(){super()}isMactionNode(e){return e.tagName.toUpperCase()===this.mactionName.toUpperCase()}getMactionNodes(e){return Array.from(e.getElementsByTagName(this.mactionName))}}t.ChtmlHighlighter=i},1123:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.ContrastPicker=t.ColorPicker=void 0;const n={red:{red:255,green:0,blue:0},green:{red:0,green:255,blue:0},blue:{red:0,green:0,blue:255},yellow:{red:255,green:255,blue:0},cyan:{red:0,green:255,blue:255},magenta:{red:255,green:0,blue:255},white:{red:255,green:255,blue:255},black:{red:0,green:0,blue:0}};function r(e,t){const r=e||{color:t};let i=Object.prototype.hasOwnProperty.call(r,"color")?n[r.color]:r;return i||(i=n[t]),i.alpha=Object.prototype.hasOwnProperty.call(r,"alpha")?r.alpha:1,function(e){const t=e=>(e=Math.max(e,0),e=Math.min(255,e),Math.round(e));return e.red=t(e.red),e.green=t(e.green),e.blue=t(e.blue),e.alpha=Math.max(e.alpha,0),e.alpha=Math.min(1,e.alpha),e}(i)}class i{constructor(e,t){this.foreground=r(t,i.DEFAULT_FOREGROUND_),this.background=r(e,i.DEFAULT_BACKGROUND_)}static toHex(e){const t=e.toString(16);return 1===t.length?"0"+t:t}rgba(){const e=function(e){return"rgba("+e.red+","+e.green+","+e.blue+","+e.alpha+")"};return{background:e(this.background),foreground:e(this.foreground)}}rgb(){const e=function(e){return"rgb("+e.red+","+e.green+","+e.blue+")"};return{background:e(this.background),alphaback:this.background.alpha.toString(),foreground:e(this.foreground),alphafore:this.foreground.alpha.toString()}}hex(){const e=function(e){return"#"+i.toHex(e.red)+i.toHex(e.green)+i.toHex(e.blue)};return{background:e(this.background),alphaback:this.background.alpha.toString(),foreground:e(this.foreground),alphafore:this.foreground.alpha.toString()}}}t.ColorPicker=i,i.DEFAULT_BACKGROUND_="blue",i.DEFAULT_FOREGROUND_="black";t.ContrastPicker=class{constructor(){this.hue=10,this.sat=100,this.light=50,this.incr=50}generate(){return t=function(e,t,n){t=t>1?t/100:t,n=n>1?n/100:n;const r=(1-Math.abs(2*n-1))*t,i=r*(1-Math.abs(e/60%2-1)),o=n-r/2;let s=0,a=0,c=0;return 0<=e&&e<60?[s,a,c]=[r,i,0]:60<=e&&e<120?[s,a,c]=[i,r,0]:120<=e&&e<180?[s,a,c]=[0,r,i]:180<=e&&e<240?[s,a,c]=[0,i,r]:240<=e&&e<300?[s,a,c]=[i,0,r]:300<=e&&e<360&&([s,a,c]=[r,0,i]),{red:s+o,green:a+o,blue:c+o}}(this.hue,this.sat,this.light),"rgb("+(e={red:Math.round(255*t.red),green:Math.round(255*t.green),blue:Math.round(255*t.blue)}).red+","+e.green+","+e.blue+")";var e,t}increment(){this.hue=(this.hue+this.incr)%360}}},9400:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.CssHighlighter=void 0;const r=n(7228);class i extends r.AbstractHighlighter{constructor(){super(),this.mactionName="mjx-maction"}highlightNode(e){const t={node:e,background:e.style.backgroundColor,foreground:e.style.color},n=this.colorString();return e.style.backgroundColor=n.background,e.style.color=n.foreground,t}unhighlightNode(e){e.node.style.backgroundColor=e.background,e.node.style.color=e.foreground}}t.CssHighlighter=i},9009:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.highlighterMapping_=t.addEvents=t.highlighter=void 0;const r=n(7567),i=n(1123),o=n(9400),s=n(7872),a=n(3711),c=n(4662),l=n(3507),u=n(280);t.highlighter=function(e,n,r){const o=new i.ColorPicker(e,n),s="NativeMML"===r.renderer&&"Safari"===r.browser?"MML-CSS":"SVG"===r.renderer&&"v3"===r.browser?"SVG-V3":r.renderer,a=new(t.highlighterMapping_[s]||t.highlighterMapping_.NativeMML);return a.setColor(o),a},t.addEvents=function(e,n,r){const i=t.highlighterMapping_[r.renderer];i&&(new i).addEvents(e,n)},t.highlighterMapping_={SVG:l.SvgHighlighter,"SVG-V3":u.SvgV3Highlighter,NativeMML:c.MmlHighlighter,"HTML-CSS":s.HtmlHighlighter,"MML-CSS":a.MmlCssHighlighter,CommonHTML:o.CssHighlighter,CHTML:r.ChtmlHighlighter}},7872:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.HtmlHighlighter=void 0;const r=n(6671),i=n(7228);class o extends i.AbstractHighlighter{constructor(){super(),this.mactionName="maction"}highlightNode(e){const t={node:e,foreground:e.style.color,position:e.style.position},n=this.color.rgb();e.style.color=n.foreground,e.style.position="relative";const i=e.bbox;if(i&&i.w){const o=.05,s=0,a=r.createElement("span"),c=parseFloat(e.style.paddingLeft||"0");a.style.backgroundColor=n.background,a.style.opacity=n.alphaback.toString(),a.style.display="inline-block",a.style.height=i.h+i.d+2*o+"em",a.style.verticalAlign=-i.d+"em",a.style.marginTop=a.style.marginBottom=-o+"em",a.style.width=i.w+2*s+"em",a.style.marginLeft=c-s+"em",a.style.marginRight=-i.w-s-c+"em",e.parentNode.insertBefore(a,e),t.box=a}return t}unhighlightNode(e){const t=e.node;t.style.color=e.foreground,t.style.position=e.position,e.box&&e.box.parentNode.removeChild(e.box)}}t.HtmlHighlighter=o},3711:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.MmlCssHighlighter=void 0;const r=n(9400);class i extends r.CssHighlighter{constructor(){super(),this.mactionName="maction"}getMactionNodes(e){return Array.from(e.getElementsByTagName(this.mactionName))}isMactionNode(e){return e.tagName===this.mactionName}}t.MmlCssHighlighter=i},4662:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.MmlHighlighter=void 0;const r=n(7228);class i extends r.AbstractHighlighter{constructor(){super(),this.mactionName="maction"}highlightNode(e){let t=e.getAttribute("style");return t+=";background-color: "+this.colorString().background,t+=";color: "+this.colorString().foreground,e.setAttribute("style",t),{node:e}}unhighlightNode(e){let t=e.node.getAttribute("style");t=t.replace(";background-color: "+this.colorString().background,""),t=t.replace(";color: "+this.colorString().foreground,""),e.node.setAttribute("style",t)}colorString(){return this.color.rgba()}getMactionNodes(e){return Array.from(e.getElementsByTagName(this.mactionName))}isMactionNode(e){return e.tagName===this.mactionName}}t.MmlHighlighter=i},3507:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.SvgHighlighter=void 0;const r=n(6671),i=n(7228);class o extends i.AbstractHighlighter{constructor(){super(),this.mactionName="mjx-svg-maction"}highlightNode(e){let t;if(this.isHighlighted(e))return t={node:e.previousSibling||e,background:e.style.backgroundColor,foreground:e.style.color},t;if("svg"===e.tagName){const t={node:e,background:e.style.backgroundColor,foreground:e.style.color};return e.style.backgroundColor=this.colorString().background,e.style.color=this.colorString().foreground,t}const n=r.createElementNS("http://www.w3.org/2000/svg","rect");let o;if("use"===e.nodeName){const t=r.createElementNS("http://www.w3.org/2000/svg","g");e.parentNode.insertBefore(t,e),t.appendChild(e),o=t.getBBox(),t.parentNode.replaceChild(e,t)}else o=e.getBBox();n.setAttribute("x",(o.x-40).toString()),n.setAttribute("y",(o.y-40).toString()),n.setAttribute("width",(o.width+80).toString()),n.setAttribute("height",(o.height+80).toString());const s=e.getAttribute("transform");return s&&n.setAttribute("transform",s),n.setAttribute("fill",this.colorString().background),n.setAttribute(i.AbstractHighlighter.ATTR,"true"),e.parentNode.insertBefore(n,e),t={node:n,foreground:e.getAttribute("fill")},e.setAttribute("fill",this.colorString().foreground),t}setHighlighted(e){"svg"===e.tagName&&super.setHighlighted(e)}unhighlightNode(e){if("background"in e)return e.node.style.backgroundColor=e.background,void(e.node.style.color=e.foreground);e.foreground?e.node.nextSibling.setAttribute("fill",e.foreground):e.node.nextSibling.removeAttribute("fill"),e.node.parentNode.removeChild(e.node)}isMactionNode(e){let t=e.className||e.getAttribute("class");return t=void 0!==t.baseVal?t.baseVal:t,!!t&&!!t.match(new RegExp(this.mactionName))}}t.SvgHighlighter=o},280:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.SvgV3Highlighter=void 0;const r=n(6671),i=n(5024),o=n(7228),s=n(1123),a=n(3507);class c extends a.SvgHighlighter{constructor(){super(),this.mactionName="maction"}highlightNode(e){let t;if(this.isHighlighted(e))return t={node:e,background:this.colorString().background,foreground:this.colorString().foreground},t;if("svg"===e.tagName||"MJX-CONTAINER"===e.tagName)return t={node:e,background:e.style.backgroundColor,foreground:e.style.color},e.style.backgroundColor=this.colorString().background,e.style.color=this.colorString().foreground,t;const n=r.createElementNS("http://www.w3.org/2000/svg","rect");n.setAttribute("sre-highlighter-added","true");const i=e.getBBox();n.setAttribute("x",(i.x-40).toString()),n.setAttribute("y",(i.y-40).toString()),n.setAttribute("width",(i.width+80).toString()),n.setAttribute("height",(i.height+80).toString());const a=e.getAttribute("transform");if(a&&n.setAttribute("transform",a),n.setAttribute("fill",this.colorString().background),e.setAttribute(o.AbstractHighlighter.ATTR,"true"),e.parentNode.insertBefore(n,e),t={node:e,foreground:e.getAttribute("fill")},"rect"===e.nodeName){const t=new s.ColorPicker({alpha:0,color:"black"});e.setAttribute("fill",t.rgba().foreground)}else e.setAttribute("fill",this.colorString().foreground);return t}unhighlightNode(e){const t=e.node.previousSibling;if(t&&t.hasAttribute("sre-highlighter-added"))return e.foreground?e.node.setAttribute("fill",e.foreground):e.node.removeAttribute("fill"),void e.node.parentNode.removeChild(t);e.node.style.backgroundColor=e.background,e.node.style.color=e.foreground}isMactionNode(e){return e.getAttribute("data-mml-node")===this.mactionName}getMactionNodes(e){return Array.from(i.evalXPath(`.//*[@data-mml-node="${this.mactionName}"]`,e))}}t.SvgV3Highlighter=c},1473:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.StaticTrieNode=t.AbstractTrieNode=void 0;const r=n(1984),i=n(9259);class o{constructor(e,t){this.constraint=e,this.test=t,this.children_={},this.kind=i.TrieNodeKind.ROOT}getConstraint(){return this.constraint}getKind(){return this.kind}applyTest(e){return this.test(e)}addChild(e){const t=e.getConstraint(),n=this.children_[t];return this.children_[t]=e,n}getChild(e){return this.children_[e]}getChildren(){const e=[];for(const t in this.children_)e.push(this.children_[t]);return e}findChildren(e){const t=[];for(const n in this.children_){const r=this.children_[n];r.applyTest(e)&&t.push(r)}return t}removeChild(e){delete this.children_[e]}toString(){return this.constraint}}t.AbstractTrieNode=o;t.StaticTrieNode=class extends o{constructor(e,t){super(e,t),this.rule_=null,this.kind=i.TrieNodeKind.STATIC}getRule(){return this.rule_}setRule(e){this.rule_&&r.Debugger.getInstance().output("Replacing rule "+this.rule_+" with "+e),this.rule_=e}toString(){return this.getRule()?this.constraint+"\n==> "+this.getRule().action:this.constraint}}},2803:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.Trie=void 0;const r=n(9259),i=n(9146);class o{constructor(){this.root=(0,i.getNode)(r.TrieNodeKind.ROOT,"",null)}static collectRules_(e){const t=[];let n=[e];for(;n.length;){const e=n.shift();if(e.getKind()===r.TrieNodeKind.QUERY||e.getKind()===r.TrieNodeKind.BOOLEAN){const n=e.getRule();n&&t.unshift(n)}n=n.concat(e.getChildren())}return t}static printWithDepth_(e,t,n){n+=new Array(t+2).join(t.toString())+": "+e.toString()+"\n";const r=e.getChildren();for(let e,i=0;e=r[i];i++)n=o.printWithDepth_(e,t+1,n);return n}static order_(e){const t=e.getChildren();if(!t.length)return 0;const n=Math.max.apply(null,t.map(o.order_));return Math.max(t.length,n)}addRule(e){let t=this.root;const n=e.context,i=e.dynamicCstr.getValues();for(let e=0,o=i.length;e{t.getKind()===r.TrieNodeKind.DYNAMIC&&-1===e.indexOf(t.getConstraint())||i.push(t)}))}n=i.slice()}for(;n.length;){const t=n.shift();if(t.getRule){const e=t.getRule();e&&i.push(e)}const r=t.findChildren(e);n=n.concat(r)}return i}hasSubtrie(e){let t=this.root;for(let n=0,r=e.length;n!0)),this.kind=l.TrieNodeKind.ROOT}}t.RootTrieNode=u;class d extends a.AbstractTrieNode{constructor(e){super(e,(t=>t===e)),this.kind=l.TrieNodeKind.DYNAMIC}}t.DynamicTrieNode=d;const h={"=":(e,t)=>e===t,"!=":(e,t)=>e!==t,"<":(e,t)=>e":(e,t)=>e>t,"<=":(e,t)=>e<=t,">=":(e,t)=>e>=t};function p(e){if(e.match(/^self::\*$/))return e=>!0;if(e.match(/^self::\w+$/)){const t=e.slice(6).toUpperCase();return e=>e.tagName&&r.tagName(e)===t}if(e.match(/^self::\w+:\w+$/)){const t=e.split(":"),n=i.resolveNameSpace(t[2]);if(!n)return null;const r=t[3].toUpperCase();return e=>e.localName&&e.localName.toUpperCase()===r&&e.namespaceURI===n}if(e.match(/^@\w+$/)){const t=e.slice(1);return e=>e.hasAttribute&&e.hasAttribute(t)}if(e.match(/^@\w+="[\w\d ]+"$/)){const t=e.split("="),n=t[0].slice(1),r=t[1].slice(1,-1);return e=>e.hasAttribute&&e.hasAttribute(n)&&e.getAttribute(n)===r}if(e.match(/^@\w+!="[\w\d ]+"$/)){const t=e.split("!="),n=t[0].slice(1),r=t[1].slice(1,-1);return e=>!e.hasAttribute||!e.hasAttribute(n)||e.getAttribute(n)!==r}if(e.match(/^contains\(\s*@grammar\s*,\s*"[\w\d ]+"\s*\)$/)){const t=e.split('"')[1];return e=>!!o.Grammar.getInstance().getParameter(t)}if(e.match(/^not\(\s*contains\(\s*@grammar\s*,\s*"[\w\d ]+"\s*\)\s*\)$/)){const t=e.split('"')[1];return e=>!o.Grammar.getInstance().getParameter(t)}if(e.match(/^name\(\.\.\/\.\.\)="\w+"$/)){const t=e.split('"')[1].toUpperCase();return e=>{var n,i;return(null===(i=null===(n=e.parentNode)||void 0===n?void 0:n.parentNode)||void 0===i?void 0:i.tagName)&&r.tagName(e.parentNode.parentNode)===t}}if(e.match(/^count\(preceding-sibling::\*\)=\d+$/)){const t=e.split("="),n=parseInt(t[1],10);return e=>{var t;return(null===(t=e.parentNode)||void 0===t?void 0:t.childNodes[n])===e}}if(e.match(/^.+\[@category!?=".+"\]$/)){let[,t,n,r]=e.match(/^(.+)\[@category(!?=)"(.+)"\]$/);const o=r.match(/^unit:(.+)$/);let a="";return o&&(r=o[1],a=":unit"),e=>{const o=i.evalXPath(t,e)[0];if(o){const e=s.lookupCategory(o.textContent+a);return"="===n?e===r:e!==r}return!1}}if(e.match(/^string-length\(.+\)\W+\d+/)){const[,t,n,r]=e.match(/^string-length\((.+)\)(\W+)(\d+)/),o=h[n]||h["="],s=parseInt(r,10);return e=>{const n=i.evalXPath(t,e)[0];return!!n&&o(Array.from(n.textContent).length,s)}}return null}t.constraintTest_=p;class f extends c.StaticTrieNode{constructor(e,t){super(e,p(e)),this.context=t,this.kind=l.TrieNodeKind.QUERY}applyTest(e){return this.test?this.test(e):this.context.applyQuery(e,this.constraint)===e}}t.QueryTrieNode=f;class m extends c.StaticTrieNode{constructor(e,t){super(e,p(e)),this.context=t,this.kind=l.TrieNodeKind.BOOLEAN}applyTest(e){return this.test?this.test(e):this.context.applyConstraint(e,this.constraint)}}t.BooleanTrieNode=m},2371:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.completeLocale=t.getLocale=t.setLocale=t.locales=void 0;const r=n(4886),i=n(4513),o=n(1058),s=n(8597),a=n(9883),c=n(2523),l=n(3938),u=n(9139),d=n(1547),h=n(346),p=n(13),f=n(6238),m=n(2913),g=n(3305),S=n(9770),b=n(4524);function N(){const e=i.Variables.ensureLocale(r.default.getInstance().locale,r.default.getInstance().defaultLocale);return r.default.getInstance().locale=e,t.locales[e]()}t.locales={ca:s.ca,da:a.da,de:c.de,en:l.en,es:u.es,fr:d.fr,hi:h.hi,it:p.it,nb:f.nb,nn:g.nn,sv:S.sv,nemeth:m.nemeth},t.setLocale=function(){const e=N();if(function(e){const t=r.default.getInstance().subiso;-1===e.SUBISO.all.indexOf(t)&&(r.default.getInstance().subiso=e.SUBISO.default);e.SUBISO.current=r.default.getInstance().subiso}(e),e){for(const t of Object.getOwnPropertyNames(e))b.LOCALE[t]=e[t];for(const[t,n]of Object.entries(e.CORRECTIONS))o.Grammar.getInstance().setCorrection(t,n)}},t.getLocale=N,t.completeLocale=function(e){const n=t.locales[e.locale];if(!n)return void console.error("Locale "+e.locale+" does not exist!");const r=e.kind.toUpperCase(),i=e.messages;if(!i)return;const o=n();for(const[e,t]of Object.entries(i))o[r][e]=t}},4524:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.createLocale=t.LOCALE=void 0;const r=n(4277);function i(){return{FUNCTIONS:(0,r.FUNCTIONS)(),MESSAGES:(0,r.MESSAGES)(),ALPHABETS:(0,r.ALPHABETS)(),NUMBERS:(0,r.NUMBERS)(),COMBINERS:{},CORRECTIONS:{},SUBISO:(0,r.SUBISO)()}}t.LOCALE=i(),t.createLocale=i},3319:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.localeFontCombiner=t.extractString=t.localEnclose=t.localRole=t.localFont=t.combinePostfixIndex=t.nestingToString=void 0;const r=n(4524),i=n(9385);function o(e,t){return void 0===e?t:"string"==typeof e?e:e[0]}t.nestingToString=function(e){switch(e){case 1:return r.LOCALE.MESSAGES.MS.ONCE||"";case 2:return r.LOCALE.MESSAGES.MS.TWICE;default:return e.toString()}},t.combinePostfixIndex=function(e,t){return e===r.LOCALE.MESSAGES.MS.ROOTINDEX||e===r.LOCALE.MESSAGES.MS.INDEX?e:e+" "+t},t.localFont=function(e){return o(r.LOCALE.MESSAGES.font[e],e)},t.localRole=function(e){return o(r.LOCALE.MESSAGES.role[e],e)},t.localEnclose=function(e){return o(r.LOCALE.MESSAGES.enclose[e],e)},t.extractString=o,t.localeFontCombiner=function(e){return"string"==typeof e?{font:e,combiner:r.LOCALE.ALPHABETS.combiner}:{font:e[0],combiner:r.LOCALE.COMBINERS[e[1]]||i.Combiners[e[1]]||r.LOCALE.ALPHABETS.combiner}}},8597:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.ca=void 0;const r=n(4524),i=n(3319),o=n(165),s=n(9385),a=function(e,t,n){return e="sans serif "+(n?n+" "+e:e),t?e+" "+t:e};let c=null;t.ca=function(){return c||(c=function(){const e=(0,r.createLocale)();return e.NUMBERS=o.default,e.COMBINERS.sansserif=a,e.FUNCTIONS.fracNestDepth=e=>!1,e.FUNCTIONS.combineRootIndex=i.combinePostfixIndex,e.FUNCTIONS.combineNestedRadical=(e,t,n)=>e+n,e.FUNCTIONS.fontRegexp=e=>RegExp("^"+e+" "),e.FUNCTIONS.plural=e=>/.*os$/.test(e)?e+"sos":/.*s$/.test(e)?e+"os":/.*ga$/.test(e)?e.slice(0,-2)+"gues":/.*\xe7a$/.test(e)?e.slice(0,-2)+"ces":/.*ca$/.test(e)?e.slice(0,-2)+"ques":/.*ja$/.test(e)?e.slice(0,-2)+"ges":/.*qua$/.test(e)?e.slice(0,-3)+"q\xfces":/.*a$/.test(e)?e.slice(0,-1)+"es":/.*(e|i)$/.test(e)?e+"ns":/.*\xed$/.test(e)?e.slice(0,-1)+"ins":e+"s",e.FUNCTIONS.si=(e,t)=>(t.match(/^metre/)&&(e=e.replace(/a$/,"\xe0").replace(/o$/,"\xf2").replace(/i$/,"\xed")),e+t),e.ALPHABETS.combiner=s.Combiners.prefixCombiner,e}()),c}},9883:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.da=void 0;const r=n(4524),i=n(3319),o=n(5571),s=n(9385);let a=null;t.da=function(){return a||(a=function(){const e=(0,r.createLocale)();return e.NUMBERS=o.default,e.FUNCTIONS.radicalNestDepth=i.nestingToString,e.FUNCTIONS.fontRegexp=t=>t===e.ALPHABETS.capPrefix.default?RegExp("^"+t+" "):RegExp(" "+t+"$"),e.ALPHABETS.combiner=s.Combiners.postfixCombiner,e.ALPHABETS.digitTrans.default=o.default.numberToWords,e}()),a}},2523:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.de=void 0;const r=n(1058),i=n(3319),o=n(4524),s=n(757),a=function(e,t,n){return"s"===n&&(t=t.split(" ").map((function(e){return e.replace(/s$/,"")})).join(" "),n=""),e=n?n+" "+e:e,t?t+" "+e:e},c=function(e,t,n){return e=n&&"s"!==n?n+" "+e:e,t?e+" "+t:e};let l=null;t.de=function(){return l||(l=function(){const e=(0,o.createLocale)();return e.NUMBERS=s.default,e.COMBINERS.germanPostfix=c,e.ALPHABETS.combiner=a,e.FUNCTIONS.radicalNestDepth=t=>t>1?e.NUMBERS.numberToWords(t)+"fach":"",e.FUNCTIONS.combineRootIndex=(e,t)=>{const n=t?t+"wurzel":"";return e.replace("Wurzel",n)},e.FUNCTIONS.combineNestedRadical=(e,t,n)=>{const r=(t?t+" ":"")+(e=n.match(/exponent$/)?e+"r":e);return n.match(/ /)?n.replace(/ /," "+r+" "):r+" "+n},e.FUNCTIONS.fontRegexp=function(e){return e=e.split(" ").map((function(e){return e.replace(/s$/,"(|s)")})).join(" "),new RegExp("((^"+e+" )|( "+e+"$))")},e.CORRECTIONS.correctOne=e=>e.replace(/^eins$/,"ein"),e.CORRECTIONS.localFontNumber=e=>(0,i.localFont)(e).split(" ").map((function(e){return e.replace(/s$/,"")})).join(" "),e.CORRECTIONS.lowercase=e=>e.toLowerCase(),e.CORRECTIONS.article=e=>{const t=r.Grammar.getInstance().getParameter("case"),n=r.Grammar.getInstance().getParameter("plural");return"dative"===t?{der:"dem",die:n?"den":"der",das:"dem"}[e]:e},e.CORRECTIONS.masculine=e=>"dative"===r.Grammar.getInstance().getParameter("case")?e+"n":e,e}()),l}},3938:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.en=void 0;const r=n(1058),i=n(4524),o=n(3319),s=n(166),a=n(9385);let c=null;t.en=function(){return c||(c=function(){const e=(0,i.createLocale)();return e.NUMBERS=s.default,e.FUNCTIONS.radicalNestDepth=o.nestingToString,e.FUNCTIONS.plural=e=>/.*s$/.test(e)?e:e+"s",e.ALPHABETS.combiner=a.Combiners.prefixCombiner,e.ALPHABETS.digitTrans.default=s.default.numberToWords,e.CORRECTIONS.article=e=>r.Grammar.getInstance().getParameter("noArticle")?"":e,e}()),c}},9139:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.es=void 0;const r=n(4524),i=n(3319),o=n(6154),s=n(9385),a=function(e,t,n){return e="sans serif "+(n?n+" "+e:e),t?e+" "+t:e};let c=null;t.es=function(){return c||(c=function(){const e=(0,r.createLocale)();return e.NUMBERS=o.default,e.COMBINERS.sansserif=a,e.FUNCTIONS.fracNestDepth=e=>!1,e.FUNCTIONS.combineRootIndex=i.combinePostfixIndex,e.FUNCTIONS.combineNestedRadical=(e,t,n)=>e+n,e.FUNCTIONS.fontRegexp=e=>RegExp("^"+e+" "),e.FUNCTIONS.plural=e=>/.*(a|e|i|o|u)$/.test(e)?e+"s":/.*z$/.test(e)?e.slice(0,-1)+"ces":/.*c$/.test(e)?e.slice(0,-1)+"ques":/.*g$/.test(e)?e+"ues":/.*\u00f3n$/.test(e)?e.slice(0,-2)+"ones":e+"es",e.FUNCTIONS.si=(e,t)=>(t.match(/^metro/)&&(e=e.replace(/a$/,"\xe1").replace(/o$/,"\xf3").replace(/i$/,"\xed")),e+t),e.ALPHABETS.combiner=s.Combiners.prefixCombiner,e}()),c}},1547:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.fr=void 0;const r=n(1058),i=n(4524),o=n(3319),s=n(4394),a=n(9385);let c=null;t.fr=function(){return c||(c=function(){const e=(0,i.createLocale)();return e.NUMBERS=s.default,e.FUNCTIONS.radicalNestDepth=o.nestingToString,e.FUNCTIONS.combineRootIndex=o.combinePostfixIndex,e.FUNCTIONS.combineNestedFraction=(e,t,n)=>n.replace(/ $/g,"")+t+e,e.FUNCTIONS.combineNestedRadical=(e,t,n)=>n+" "+e,e.FUNCTIONS.fontRegexp=e=>RegExp(" (en |)"+e+"$"),e.FUNCTIONS.plural=e=>/.*s$/.test(e)?e:e+"s",e.CORRECTIONS.article=e=>r.Grammar.getInstance().getParameter("noArticle")?"":e,e.ALPHABETS.combiner=a.Combiners.romanceCombiner,e.SUBISO={default:"fr",current:"fr",all:["fr","be","ch"]},e}()),c}},346:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.hi=void 0;const r=n(4524),i=n(1779),o=n(9385),s=n(3319);let a=null;t.hi=function(){return a||(a=function(){const e=(0,r.createLocale)();return e.NUMBERS=i.default,e.ALPHABETS.combiner=o.Combiners.prefixCombiner,e.FUNCTIONS.radicalNestDepth=s.nestingToString,e}()),a}},13:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.it=void 0;const r=n(3319),i=n(4524),o=n(5952),s=n(9385),a=function(e,t,n){return e.match(/^[a-zA-Z]$/)&&(t=t.replace("cerchiato","cerchiata")),e=n?e+" "+n:e,t?e+" "+t:e};let c=null;t.it=function(){return c||(c=function(){const e=(0,i.createLocale)();return e.NUMBERS=o.default,e.COMBINERS.italianPostfix=a,e.FUNCTIONS.radicalNestDepth=r.nestingToString,e.FUNCTIONS.combineRootIndex=r.combinePostfixIndex,e.FUNCTIONS.combineNestedFraction=(e,t,n)=>n.replace(/ $/g,"")+t+e,e.FUNCTIONS.combineNestedRadical=(e,t,n)=>n+" "+e,e.FUNCTIONS.fontRegexp=e=>RegExp(" (en |)"+e+"$"),e.ALPHABETS.combiner=s.Combiners.romanceCombiner,e}()),c}},6238:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.nb=void 0;const r=n(4524),i=n(3319),o=n(984),s=n(9385);let a=null;t.nb=function(){return a||(a=function(){const e=(0,r.createLocale)();return e.NUMBERS=o.default,e.ALPHABETS.combiner=s.Combiners.prefixCombiner,e.ALPHABETS.digitTrans.default=o.default.numberToWords,e.FUNCTIONS.radicalNestDepth=i.nestingToString,e}()),a}},2913:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.nemeth=void 0;const r=n(4524),i=n(3669),o=n(9385),s=function(e){return e.match(RegExp("^"+h.ALPHABETS.languagePrefix.english))?e.slice(1):e},a=function(e,t,n){return e=s(e),t?e+t:e},c=function(e,t,n){return t+s(e)},l=function(e,t,n){return t+(n||"")+(e=s(e))+"\u283b"},u=function(e,t,n){return t+(n||"")+(e=s(e))+"\u283b\u283b"},d=function(e,t,n){return t+(e=s(e))+"\u283e"};let h=null;t.nemeth=function(){return h||(h=function(){const e=(0,r.createLocale)();return e.NUMBERS=i.default,e.COMBINERS={postfixCombiner:a,germanCombiner:c,embellishCombiner:l,doubleEmbellishCombiner:u,parensCombiner:d},e.FUNCTIONS.fracNestDepth=e=>!1,e.FUNCTIONS.fontRegexp=e=>RegExp("^"+e),e.FUNCTIONS.si=o.identityTransformer,e.ALPHABETS.combiner=(e,t,n)=>t?t+n+e:s(e),e.ALPHABETS.digitTrans={default:i.default.numberToWords},e}()),h}},3305:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.nn=void 0;const r=n(4524),i=n(3319),o=n(984),s=n(9385);let a=null;t.nn=function(){return a||(a=function(){const e=(0,r.createLocale)();return e.NUMBERS=o.default,e.ALPHABETS.combiner=s.Combiners.prefixCombiner,e.ALPHABETS.digitTrans.default=o.default.numberToWords,e.FUNCTIONS.radicalNestDepth=i.nestingToString,e.SUBISO={default:"",current:"",all:["","alt"]},e}()),a}},9770:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.sv=void 0;const r=n(4524),i=n(3319),o=n(6416),s=n(9385);let a=null;t.sv=function(){return a||(a=function(){const e=(0,r.createLocale)();return e.NUMBERS=o.default,e.FUNCTIONS.radicalNestDepth=i.nestingToString,e.FUNCTIONS.fontRegexp=function(e){return new RegExp("((^"+e+" )|( "+e+"$))")},e.ALPHABETS.combiner=s.Combiners.prefixCombiner,e.ALPHABETS.digitTrans.default=o.default.numberToWords,e.CORRECTIONS.correctOne=e=>e.replace(/^ett$/,"en"),e}()),a}},4277:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.SUBISO=t.FUNCTIONS=t.ALPHABETS=t.NUMBERS=t.MESSAGES=void 0;const r=n(9385);t.MESSAGES=function(){return{MS:{},MSroots:{},font:{},embellish:{},role:{},enclose:{},navigate:{},regexp:{},unitTimes:""}},t.NUMBERS=function(){return{zero:"zero",ones:[],tens:[],large:[],special:{},wordOrdinal:r.identityTransformer,numericOrdinal:r.identityTransformer,numberToWords:r.identityTransformer,numberToOrdinal:r.pluralCase,vulgarSep:" ",numSep:" "}},t.ALPHABETS=function(){return{latinSmall:[],latinCap:[],greekSmall:[],greekCap:[],capPrefix:{default:""},smallPrefix:{default:""},digitPrefix:{default:""},languagePrefix:{},digitTrans:{default:r.identityTransformer,mathspeak:r.identityTransformer,clearspeak:r.identityTransformer},letterTrans:{default:r.identityTransformer},combiner:(e,t,n)=>e}},t.FUNCTIONS=function(){return{fracNestDepth:e=>r.vulgarFractionSmall(e,10,100),radicalNestDepth:e=>"",combineRootIndex:function(e,t){return e},combineNestedFraction:r.Combiners.identityCombiner,combineNestedRadical:r.Combiners.identityCombiner,fontRegexp:function(e){return new RegExp("^"+e.split(/ |-/).join("( |-)")+"( |-)")},si:r.siCombiner,plural:r.identityTransformer}},t.SUBISO=function(){return{default:"",current:"",all:[]}}},165:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});const r=n(1058);function i(e){const t=e%1e3,n=Math.floor(t/100),r=n?1===n?"cent":a.ones[n]+"-cents":"",i=function(e){const t=e%100;if(t<20)return a.ones[t];const n=Math.floor(t/10),r=a.tens[n],i=a.ones[t%10];return r&&i?r+(2===n?"-i-":"-")+i:r||i}(t%100);return r&&i?r+a.numSep+i:r||i}function o(e){if(0===e)return a.zero;if(e>=Math.pow(10,36))return e.toString();let t=0,n="";for(;e>0;){const r=e%(t>1?1e6:1e3);if(r){let e=a.large[t];if(t)if(1===t)n=(1===r?"":i(r)+a.numSep)+e+(n?a.numSep+n:"");else{const t=o(r);e=1===r?e:e.replace(/\u00f3$/,"ons"),n=t+a.numSep+e+(n?a.numSep+n:"")}else n=i(r)}e=Math.floor(e/(t>1?1e6:1e3)),t++}return n}function s(e){const t=r.Grammar.getInstance().getParameter("gender");return e.toString()+("f"===t?"a":"n")}const a=(0,n(4277).NUMBERS)();a.numericOrdinal=s,a.numberToWords=o,a.numberToOrdinal=function(e,t){if(e>1999)return s(e);if(e<=10)return a.special.onesOrdinals[e-1];const n=o(e);return n.match(/mil$/)?n.replace(/mil$/,"mil\xb7l\xe8sima"):n.match(/u$/)?n.replace(/u$/,"vena"):n.match(/a$/)?n.replace(/a$/,"ena"):n+(n.match(/e$/)?"na":"ena")},t.default=a},5571:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});function r(e,t=!1){return e===a.ones[1]?t?"et":"en":e}function i(e,t=!1){let n=e%1e3,i="",o=a.ones[Math.floor(n/100)];if(i+=o?r(o,!0)+" hundrede":"",n%=100,n)if(i+=i?" og ":"",o=t?a.special.smallOrdinals[n]:a.ones[n],o)i+=o;else{const e=t?a.special.tensOrdinals[Math.floor(n/10)]:a.tens[Math.floor(n/10)];o=a.ones[n%10],i+=o?r(o)+"og"+e:e}return i}function o(e,t=!1){if(0===e)return a.zero;if(e>=Math.pow(10,36))return e.toString();let n=0,o="";for(;e>0;){const s=e%1e3;if(s){const e=i(s,t&&!n);if(n){const t=a.large[n],i=s>1?"er":"";o=r(e,n<=1)+" "+t+i+(o?" og ":"")+o}else o=r(e)+o}e=Math.floor(e/1e3),n++}return o}function s(e){if(e%100)return o(e,!0);const t=o(e);return t.match(/e$/)?t:t+"e"}const a=(0,n(4277).NUMBERS)();a.wordOrdinal=s,a.numericOrdinal=function(e){return e.toString()+"."},a.numberToWords=o,a.numberToOrdinal=function(e,t){return 1===e?t?"hel":"hele":2===e?t?"halv":"halve":s(e)+(t?"dele":"del")},t.default=a},757:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});function r(e,t=!1){return e===a.ones[1]?t?"eine":"ein":e}function i(e){let t=e%1e3,n="",i=a.ones[Math.floor(t/100)];if(n+=i?r(i)+"hundert":"",t%=100,t)if(n+=n?a.numSep:"",i=a.ones[t],i)n+=i;else{const e=a.tens[Math.floor(t/10)];i=a.ones[t%10],n+=i?r(i)+"und"+e:e}return n}function o(e){if(0===e)return a.zero;if(e>=Math.pow(10,36))return e.toString();let t=0,n="";for(;e>0;){const o=e%1e3;if(o){const s=i(e%1e3);if(t){const e=a.large[t],i=t>1&&o>1?e.match(/e$/)?"n":"en":"";n=r(s,t>1)+e+i+n}else n=r(s,t>1)+n}e=Math.floor(e/1e3),t++}return n.replace(/ein$/,"eins")}function s(e){if(1===e)return"erste";if(3===e)return"dritte";if(7===e)return"siebte";if(8===e)return"achte";return o(e)+(e<19?"te":"ste")}const a=(0,n(4277).NUMBERS)();a.wordOrdinal=s,a.numericOrdinal=function(e){return e.toString()+"."},a.numberToWords=o,a.numberToOrdinal=function(e,t){return 1===e?"eintel":2===e?t?"halbe":"halb":s(e)+"l"},t.default=a},166:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});function r(e){let t=e%1e3,n="";return n+=s.ones[Math.floor(t/100)]?s.ones[Math.floor(t/100)]+s.numSep+"hundred":"",t%=100,t&&(n+=n?s.numSep:"",n+=s.ones[t]||s.tens[Math.floor(t/10)]+(t%10?s.numSep+s.ones[t%10]:"")),n}function i(e){if(0===e)return s.zero;if(e>=Math.pow(10,36))return e.toString();let t=0,n="";for(;e>0;){e%1e3&&(n=r(e%1e3)+(t?"-"+s.large[t]+"-":"")+n),e=Math.floor(e/1e3),t++}return n.replace(/-$/,"")}function o(e){let t=i(e);return t.match(/one$/)?t=t.slice(0,-3)+"first":t.match(/two$/)?t=t.slice(0,-3)+"second":t.match(/three$/)?t=t.slice(0,-5)+"third":t.match(/five$/)?t=t.slice(0,-4)+"fifth":t.match(/eight$/)?t=t.slice(0,-5)+"eighth":t.match(/nine$/)?t=t.slice(0,-4)+"ninth":t.match(/twelve$/)?t=t.slice(0,-6)+"twelfth":t.match(/ty$/)?t=t.slice(0,-2)+"tieth":t+="th",t}const s=(0,n(4277).NUMBERS)();s.wordOrdinal=o,s.numericOrdinal=function(e){const t=e%100,n=e.toString();if(t>10&&t<20)return n+"th";switch(e%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd";default:return n+"th"}},s.numberToWords=i,s.numberToOrdinal=function(e,t){if(1===e)return t?"oneths":"oneth";if(2===e)return t?"halves":"half";const n=o(e);return t?n+"s":n},t.default=s},6154:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});const r=n(1058);function i(e){const t=e%1e3,n=Math.floor(t/100),r=o.special.hundreds[n],i=function(e){const t=e%100;if(t<30)return o.ones[t];const n=o.tens[Math.floor(t/10)],r=o.ones[t%10];return n&&r?n+" y "+r:n||r}(t%100);return 1===n?i?r+"to "+i:r:r&&i?r+" "+i:r||i}const o=(0,n(4277).NUMBERS)();o.numericOrdinal=function(e){const t=r.Grammar.getInstance().getParameter("gender");return e.toString()+("f"===t?"a":"o")},o.numberToWords=function(e){if(0===e)return o.zero;if(e>=Math.pow(10,36))return e.toString();let t=0,n="";for(;e>0;){const r=e%1e3;if(r){let e=o.large[t];const s=i(r);t?1===r?(e=e.match("/^mil( |$)/")?e:"un "+e,n=e+(n?" "+n:"")):(e=e.replace(/\u00f3n$/,"ones"),n=i(r)+" "+e+(n?" "+n:"")):n=s}e=Math.floor(e/1e3),t++}return n},o.numberToOrdinal=function(e,t){if(e>1999)return e.toString()+"a";if(e<=12)return o.special.onesOrdinals[e-1];const n=[];if(e>=1e3&&(e-=1e3,n.push("mil\xe9sima")),!e)return n.join(" ");let r=0;return r=Math.floor(e/100),r>0&&(n.push(o.special.hundredsOrdinals[r-1]),e%=100),e<=12?n.push(o.special.onesOrdinals[e-1]):(r=Math.floor(e/10),r>0&&(n.push(o.special.tensOrdinals[r-1]),e%=10),e>0&&n.push(o.special.onesOrdinals[e-1])),n.join(" ")},t.default=o},4394:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});const r=n(4886),i=n(1058),o=n(4277);function s(e){let t=e%1e3,n="";if(n+=u.ones[Math.floor(t/100)]?u.ones[Math.floor(t/100)]+"-cent":"",t%=100,t){n+=n?"-":"";let e=u.ones[t];if(e)n+=e;else{const r=u.tens[Math.floor(t/10)];r.match(/-dix$/)?(e=u.ones[t%10+10],n+=r.replace(/-dix$/,"")+"-"+e):n+=r+(t%10?"-"+u.ones[t%10]:"")}}const r=n.match(/s-\w+$/);return r?n.replace(/s-\w+$/,r[0].slice(1)):n.replace(/-un$/,"-et-un")}function a(e){if(0===e)return u.zero;if(e>=Math.pow(10,36))return e.toString();u.special["tens-"+r.default.getInstance().subiso]&&(u.tens=u.special["tens-"+r.default.getInstance().subiso]);let t=0,n="";for(;e>0;){const r=e%1e3;if(r){let e=u.large[t];const i=s(r);if(e&&e.match(/^mille /)){const r=e.replace(/^mille /,"");n=n.match(RegExp(r))?i+(t?"-mille-":"")+n:n.match(RegExp(r.replace(/s$/,"")))?i+(t?"-mille-":"")+n.replace(r.replace(/s$/,""),r):i+(t?"-"+e+"-":"")+n}else e=1===r&&e?e.replace(/s$/,""):e,n=i+(t?"-"+e+"-":"")+n}e=Math.floor(e/1e3),t++}return n.replace(/-$/,"")}const c={1:"uni\xe8me",2:"demi",3:"tiers",4:"quart"};function l(e){if(1===e)return"premi\xe8re";let t=a(e);return t.match(/^neuf$/)?t=t.slice(0,-1)+"v":t.match(/cinq$/)?t+="u":t.match(/trois$/)?t+="":(t.match(/e$/)||t.match(/s$/))&&(t=t.slice(0,-1)),t+="i\xe8me",t}const u=(0,o.NUMBERS)();u.wordOrdinal=l,u.numericOrdinal=function(e){const t=i.Grammar.getInstance().getParameter("gender");return 1===e?e.toString()+("m"===t?"er":"re"):e.toString()+"e"},u.numberToWords=a,u.numberToOrdinal=function(e,t){const n=c[e]||l(e);return 3===e?n:t?n+"s":n},t.default=u},1779:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});const r=n(1058);function i(e){if(0===e)return s.zero;if(e>=Math.pow(10,32))return e.toString();let t=0,n="";const r=function(e){let t=e%1e3,n="";return n+=s.ones[Math.floor(t/100)]?s.ones[Math.floor(t/100)]+s.numSep+s.special.hundred:"",t%=100,t&&(n+=n?s.numSep:"",n+=s.ones[t]),n}(e%1e3);if(!(e=Math.floor(e/1e3)))return r;for(;e>0;){const r=e%100;r&&(n=s.ones[r]+s.numSep+s.large[t]+(n?s.numSep+n:"")),e=Math.floor(e/100),t++}return r?n+s.numSep+r:n}function o(e){const t=r.Grammar.getInstance().getParameter("gender");if(e<=0)return e.toString();if(e<10)return"f"===t?s.special.ordinalsFeminine[e]:s.special.ordinalsMasculine[e];return i(e)+("f"===t?"\u0935\u0940\u0902":"\u0935\u093e\u0901")}const s=(0,n(4277).NUMBERS)();s.wordOrdinal=o,s.numericOrdinal=function(e){const t=r.Grammar.getInstance().getParameter("gender");return e>0&&e<10?"f"===t?s.special.simpleSmallOrdinalsFeminine[e]:s.special.simpleSmallOrdinalsMasculine[e]:e.toString().split("").map((function(e){const t=parseInt(e,10);return isNaN(t)?"":s.special.simpleNumbers[t]})).join("")+("f"===t?"\u0935\u0940\u0902":"\u0935\u093e\u0901")},s.numberToWords=i,s.numberToOrdinal=function(e,t){return e<=10?s.special.smallDenominators[e]:o(e)+" \u0905\u0902\u0936"},t.default=s},5952:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});const r=n(1058);function i(e){let t=e%1e3,n="";if(n+=a.ones[Math.floor(t/100)]?a.ones[Math.floor(t/100)]+a.numSep+"cento":"",t%=100,t){n+=n?a.numSep:"";const e=a.ones[t];if(e)n+=e;else{let e=a.tens[Math.floor(t/10)];const r=t%10;1!==r&&8!==r||(e=e.slice(0,-1)),n+=e,n+=r?a.numSep+a.ones[t%10]:""}}return n}function o(e){if(0===e)return a.zero;if(e>=Math.pow(10,36))return e.toString();if(1===e&&r.Grammar.getInstance().getParameter("fraction"))return"un";let t=0,n="";for(;e>0;){e%1e3&&(n=i(e%1e3)+(t?"-"+a.large[t]+"-":"")+n),e=Math.floor(e/1e3),t++}return n.replace(/-$/,"")}function s(e){const t="m"===r.Grammar.getInstance().getParameter("gender")?"o":"a";let n=a.special.onesOrdinals[e];return n?n.slice(0,-1)+t:(n=o(e),n.slice(0,-1)+"esim"+t)}const a=(0,n(4277).NUMBERS)();a.wordOrdinal=s,a.numericOrdinal=function(e){const t=r.Grammar.getInstance().getParameter("gender");return e.toString()+("m"===t?"o":"a")},a.numberToWords=o,a.numberToOrdinal=function(e,t){if(2===e)return t?"mezzi":"mezzo";const n=s(e);if(!t)return n;const r=n.match(/o$/)?"i":"e";return n.slice(0,-1)+r},t.default=a},3669:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});function r(e){return e.toString().split("").map((function(e){return i.ones[parseInt(e,10)]})).join("")}const i=(0,n(4277).NUMBERS)();i.numberToWords=r,i.numberToOrdinal=r,t.default=i},984:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});const r=n(4886);function i(e,t=!1){let n=e%1e3,r="";const i=Math.floor(n/100),s=a.ones[i];if(r+=s?(1===i?"":s)+"hundre":"",n%=100,n){if(r+=r?"og":"",t){const e=a.special.smallOrdinals[n];if(e)return r+e;if(n%10)return r+a.tens[Math.floor(n/10)]+a.special.smallOrdinals[n%10]}r+=a.ones[n]||a.tens[Math.floor(n/10)]+(n%10?a.ones[n%10]:"")}return t?o(r):r}function o(e){const t=a.special.endOrdinal[0];return"a"===t&&e.match(/en$/)?e.slice(0,-2)+a.special.endOrdinal:e.match(/(d|n)$/)||e.match(/hundre$/)?e+"de":e.match(/i$/)?e+a.special.endOrdinal:"a"===t&&e.match(/e$/)?e.slice(0,-1)+a.special.endOrdinal:(e.match(/e$/),e+"nde")}function s(e){return u(e,!0)}const a=(0,n(4277).NUMBERS)();function c(e,t=!1){return e===a.ones[1]?"ein"===e?"eitt ":t?"et":"ett":e}function l(e,t=!1){let n=e%1e3,r="",i=a.ones[Math.floor(n/100)];if(r+=i?c(i)+"hundre":"",n%=100,n){if(r+=r?"og":"",t){const e=a.special.smallOrdinals[n];if(e)return r+e}if(i=a.ones[n],i)r+=i;else{const e=a.tens[Math.floor(n/10)];i=a.ones[n%10],r+=i?i+"og"+e:e}}return t?o(r):r}function u(e,t=!1){const n="alt"===r.default.getInstance().subiso?function(e,t=!1){if(0===e)return t?a.special.smallOrdinals[0]:a.zero;if(e>=Math.pow(10,36))return e.toString();let n=0,r="";for(;e>0;){const i=e%1e3;if(i){const o=l(e%1e3,!n&&t);!n&&t&&(t=!t),r=(1===n?c(o,!0):o)+(n>1?a.numSep:"")+(n?a.large[n]+(n>1&&i>1?"er":""):"")+(n>1&&r?a.numSep:"")+r}e=Math.floor(e/1e3),n++}return t?r+(r.match(/tusen$/)?"de":"te"):r}(e,t):function(e,t=!1){if(0===e)return t?a.special.smallOrdinals[0]:a.zero;if(e>=Math.pow(10,36))return e.toString();let n=0,r="";for(;e>0;){const o=e%1e3;if(o){const s=i(e%1e3,!n&&t);!n&&t&&(t=!t),r=s+(n?" "+a.large[n]+(n>1&&o>1?"er":"")+(r?" ":""):"")+r}e=Math.floor(e/1e3),n++}return t?r+(r.match(/tusen$/)?"de":"te"):r}(e,t);return n}a.wordOrdinal=s,a.numericOrdinal=function(e){return e.toString()+"."},a.numberToWords=u,a.numberToOrdinal=function(e,t){return s(e)},t.default=a},6416:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});function r(e){let t=e%1e3,n="";const r=Math.floor(t/100);return n+=s.ones[r]?(1===r?"":s.ones[r]+s.numSep)+"hundra":"",t%=100,t&&(n+=n?s.numSep:"",n+=s.ones[t]||s.tens[Math.floor(t/10)]+(t%10?s.numSep+s.ones[t%10]:"")),n}function i(e,t=!1){if(0===e)return s.zero;if(e>=Math.pow(10,36))return e.toString();let n=0,i="";for(;e>0;){const o=e%1e3;if(o){const a=s.large[n],c=o>1&&n>1&&!t?"er":"";i=(1===n&&1===o?"":(n>1&&1===o?"en":r(e%1e3))+(n>1?" ":""))+(n?a+c+(n>1?" ":""):"")+i}e=Math.floor(e/1e3),n++}return i.replace(/ $/,"")}function o(e){let t=i(e,!0);return t.match(/^noll$/)?t="nollte":t.match(/ett$/)?t=t.replace(/ett$/,"f\xf6rsta"):t.match(/tv\xe5$/)?t=t.replace(/tv\xe5$/,"andra"):t.match(/tre$/)?t=t.replace(/tre$/,"tredje"):t.match(/fyra$/)?t=t.replace(/fyra$/,"fj\xe4rde"):t.match(/fem$/)?t=t.replace(/fem$/,"femte"):t.match(/sex$/)?t=t.replace(/sex$/,"sj\xe4tte"):t.match(/sju$/)?t=t.replace(/sju$/,"sjunde"):t.match(/\xe5tta$/)?t=t.replace(/\xe5tta$/,"\xe5ttonde"):t.match(/nio$/)?t=t.replace(/nio$/,"nionde"):t.match(/tio$/)?t=t.replace(/tio$/,"tionde"):t.match(/elva$/)?t=t.replace(/elva$/,"elfte"):t.match(/tolv$/)?t=t.replace(/tolv$/,"tolfte"):t.match(/tusen$/)?t=t.replace(/tusen$/,"tusonde"):t.match(/jard$/)||t.match(/jon$/)?t+="te":t+="de",t}const s=(0,n(4277).NUMBERS)();s.wordOrdinal=o,s.numericOrdinal=function(e){const t=e.toString();return t.match(/11$|12$/)?t+":e":t+(t.match(/1$|2$/)?":a":":e")},s.numberToWords=i,s.numberToOrdinal=function(e,t){if(1===e)return"hel";if(2===e)return t?"halva":"halv";let n=o(e);return n=n.match(/de$/)?n.replace(/de$/,""):n,n+(t?"delar":"del")},t.default=s},9385:function(e,t){function n(e,t=""){if(!e.childNodes||!e.childNodes[0]||!e.childNodes[0].childNodes||e.childNodes[0].childNodes.length<2||"number"!==e.childNodes[0].childNodes[0].tagName||"integer"!==e.childNodes[0].childNodes[0].getAttribute("role")||"number"!==e.childNodes[0].childNodes[1].tagName||"integer"!==e.childNodes[0].childNodes[1].getAttribute("role"))return{convertible:!1,content:e.textContent};const n=e.childNodes[0].childNodes[1].textContent,r=e.childNodes[0].childNodes[0].textContent,i=Number(n),o=Number(r);return isNaN(i)||isNaN(o)?{convertible:!1,content:`${r} ${t} ${n}`}:{convertible:!0,enumerator:o,denominator:i}}Object.defineProperty(t,"__esModule",{value:!0}),t.vulgarFractionSmall=t.convertVulgarFraction=t.Combiners=t.siCombiner=t.identityTransformer=t.pluralCase=void 0,t.pluralCase=function(e,t){return e.toString()},t.identityTransformer=function(e){return e.toString()},t.siCombiner=function(e,t){return e+t.toLowerCase()},t.Combiners={},t.Combiners.identityCombiner=function(e,t,n){return e+t+n},t.Combiners.prefixCombiner=function(e,t,n){return e=n?n+" "+e:e,t?t+" "+e:e},t.Combiners.postfixCombiner=function(e,t,n){return e=n?n+" "+e:e,t?e+" "+t:e},t.Combiners.romanceCombiner=function(e,t,n){return e=n?e+" "+n:e,t?e+" "+t:e},t.convertVulgarFraction=n,t.vulgarFractionSmall=function(e,t,r){const i=n(e);if(i.convertible){const e=i.enumerator,n=i.denominator;return e>0&&e0&&n{const s=this.parseCstr(t.toString().replace(i,""));this.addRule(new o.SpeechRule(e,s,r,n))}))}getFullPreconditions(e){const t=this.preconditions.get(e);return t||!this.inherits?t:this.inherits.getFullPreconditions(e)}definePrecondition(e,t,n,...r){const i=this.parsePrecondition(n,r),o=this.parseCstr(t);i&&o?(i.rank=this.rank++,this.preconditions.set(e,new c(o,i))):console.error(`Precondition Error: ${n}, (${t})`)}inheritRules(){if(!this.inherits||!this.inherits.getSpeechRules().length)return;const e=new RegExp("^\\w+\\.\\w+\\."+(this.domain?"\\w+\\.":""));this.inherits.getSpeechRules().forEach((t=>{const n=this.parseCstr(t.dynamicCstr.toString().replace(e,""));this.addRule(new o.SpeechRule(t.name,n,t.precondition,t.action))}))}ignoreRules(e,...t){let n=this.findAllRules((t=>t.name===e));if(!t.length)return void n.forEach(this.deleteRule.bind(this));let r=[];for(const e of t){const t=this.parseCstr(e);for(const e of n)t.equal(e.dynamicCstr)?this.deleteRule(e):r.push(e);n=r,r=[]}}parsePrecondition_(e){const t=this.context.customGenerators.lookup(e);return t?t():[e]}}t.BaseRuleStore=a;class c{constructor(e,t){this.base=e,this._conditions=[],this.constraints=[],this.allCstr={},this.constraints.push(e),this.addCondition(e,t)}get conditions(){return this._conditions}addConstraint(e){if(this.constraints.filter((t=>t.equal(e))).length)return;this.constraints.push(e);const t=[];for(const[n,r]of this.conditions)this.base.equal(n)&&t.push([e,r]);this._conditions=this._conditions.concat(t)}addBaseCondition(e){this.addCondition(this.base,e)}addFullCondition(e){this.constraints.forEach((t=>this.addCondition(t,e)))}addCondition(e,t){const n=e.toString()+" "+t.toString();this.allCstr.condStr||(this.allCstr[n]=!0,this._conditions.push([e,t]))}}t.Condition=c},1462:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.BrailleStore=void 0;const r=n(4036),i=n(7478);class o extends i.MathStore{constructor(){super(...arguments),this.modality="braille",this.customTranscriptions={"\u22ca":"\u2808\u2821\u2833"}}evaluateString(e){const t=[],n=Array.from(e);for(let e=0;ee.push(this.getProperty(t).slice()))),e}toString(){const e=[];return this.order.forEach((t=>e.push(t+": "+this.getProperty(t).toString()))),e.join("\n")}}t.DynamicProperties=r;class i extends r{constructor(e,t){const n={};for(const[t,r]of Object.entries(e))n[t]=[r];super(n,t),this.components=e}static createCstr(...e){const t=i.DEFAULT_ORDER,n={};for(let r=0,i=e.length,o=t.length;r{const n=t.indexOf(e);return-1!==n&&t.splice(n,1)}))}getComponents(){return this.components}getValue(e){return this.components[e]}getValues(){return this.order.map((e=>this.getValue(e)))}allProperties(){const e=super.allProperties();for(let t,n,r=0;t=e[r],n=this.order[r];r++){const e=this.getValue(n);-1===t.indexOf(e)&&t.unshift(e)}return e}toString(){return this.getValues().join(".")}equal(e){const t=e.getAxes();if(this.order.length!==t.length)return!1;for(let n,r=0;n=t[r];r++){const t=this.getValue(n);if(!t||e.getValue(n)!==t)return!1}return!0}}t.DynamicCstr=i,i.DEFAULT_ORDER=[n.LOCALE,n.MODALITY,n.DOMAIN,n.STYLE,n.TOPIC],i.BASE_LOCALE="base",i.DEFAULT_VALUE="default",i.DEFAULT_VALUES={[n.LOCALE]:"en",[n.DOMAIN]:i.DEFAULT_VALUE,[n.STYLE]:i.DEFAULT_VALUE,[n.TOPIC]:i.DEFAULT_VALUE,[n.MODALITY]:"speech"};t.DynamicCstrParser=class{constructor(e){this.order=e}parse(e){const t=e.split("."),n={};if(t.length>this.order.length)throw new Error("Invalid dynamic constraint: "+n);let r=0;for(let e,i=0;e=this.order[i],t.length;i++,r++){const r=t.shift();n[e]=r}return new i(n,this.order.slice(0,r))}};t.DefaultComparator=class{constructor(e,t=new r(e.getProperties(),e.getOrder())){this.reference=e,this.fallback=t,this.order=this.reference.getOrder()}getReference(){return this.reference}setReference(e,t){this.reference=e,this.fallback=t||new r(e.getProperties(),e.getOrder()),this.order=this.reference.getOrder()}match(e){const t=e.getAxes();return t.length===this.reference.getAxes().length&&t.every((t=>{const n=e.getValue(t);return n===this.reference.getValue(t)||-1!==this.fallback.getProperty(t).indexOf(n)}))}compare(e,t){let n=!1;for(let r,i=0;r=this.order[i];i++){const i=e.getValue(r),o=t.getValue(r);if(!n){const e=this.reference.getValue(r);if(e===i&&e!==o)return-1;if(e===o&&e!==i)return 1;if(e===i&&e===o)continue;e!==i&&e!==o&&(n=!0)}const s=this.fallback.getProperty(r),a=s.indexOf(i),c=s.indexOf(o);if(a!h.equal(e.cstr))),c.push(m),this.rules.set(t,c),p.setReference(f)}lookupRule(e,t){let n=this.getRules(t.getValue(i.Axis.LOCALE));return n=n.filter((function(e){return o.testDynamicConstraints_(t,e)})),1===n.length?n[0]:n.length?n.sort(((e,t)=>r.default.getInstance().comparator.compare(e.cstr,t.cstr)))[0]:null}}t.MathSimpleStore=o},7478:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.MathStore=void 0;const r=n(1426),i=n(4524),o=n(4036),s=n(1970),a=n(7039);class c extends s.BaseRuleStore{constructor(){super(),this.annotators=[],this.parseMethods.Alias=this.defineAlias,this.parseMethods.SpecializedRule=this.defineSpecializedRule,this.parseMethods.Specialized=this.defineSpecialized}initialize(){this.initialized||(this.annotations(),this.initialized=!0)}annotations(){for(let e,t=0;e=this.annotators[t];t++)(0,o.activate)(this.domain,e)}defineAlias(e,t,...n){const r=this.parsePrecondition(t,n);if(!r)return void console.error(`Precondition Error: ${t} ${n}`);const i=this.preconditions.get(e);i?i.addFullCondition(r):console.error(`Alias Error: No precondition by the name of ${e}`)}defineRulesAlias(e,t,...n){const r=this.findAllRules((function(t){return t.name===e}));if(0===r.length)throw new a.OutputError("Rule with name "+e+" does not exist.");const i=[];r.forEach((e=>{(e=>{const t=e.dynamicCstr.toString(),n=e.action.toString();for(let e,r=0;e=i[r];r++)if(e.action===n&&e.cstr===t)return!1;return i.push({cstr:t,action:n}),!0})(e)&&this.addAlias_(e,t,n)}))}defineSpecializedRule(e,t,n,r){const i=this.parseCstr(t),o=this.findRule((t=>t.name===e&&i.equal(t.dynamicCstr))),s=this.parseCstr(n);if(!o&&r)throw new a.OutputError("Rule named "+e+" with style "+t+" does not exist.");const c=r?a.Action.fromString(r):o.action,l=new a.SpeechRule(o.name,s,o.precondition,c);this.addRule(l)}defineSpecialized(e,t,n){const r=this.parseCstr(n);if(!r)return void console.error(`Dynamic Constraint Error: ${n}`);const i=this.preconditions.get(e);i?i.addConstraint(r):console.error(`Alias Error: No precondition by the name of ${e}`)}evaluateString(e){const t=[];if(e.match(/^\s+$/))return t;let n=this.matchNumber_(e);if(n&&n.length===e.length)return t.push(this.evaluateCharacter(n.number)),t;const o=r.removeEmpty(e.replace(/\s/g," ").split(" "));for(let e,r=0;e=o[r];r++)if(1===e.length)t.push(this.evaluateCharacter(e));else if(e.match(new RegExp("^["+i.LOCALE.MESSAGES.regexp.TEXT+"]+$")))t.push(this.evaluateCharacter(e));else{let r=e;for(;r;){n=this.matchNumber_(r);const e=r.match(new RegExp("^["+i.LOCALE.MESSAGES.regexp.TEXT+"]+"));if(n)t.push(this.evaluateCharacter(n.number)),r=r.substring(n.length);else if(e)t.push(this.evaluateCharacter(e[0])),r=r.substring(e[0].length);else{const e=Array.from(r),n=e[0];t.push(this.evaluateCharacter(n)),r=e.slice(1).join("")}}}return t}parse(e){super.parse(e),this.annotators=e.annotators||[]}addAlias_(e,t,n){const r=this.parsePrecondition(t,n),i=new a.SpeechRule(e.name,e.dynamicCstr,r,e.action);i.name=e.name,this.addRule(i)}matchNumber_(e){const t=e.match(new RegExp("^"+i.LOCALE.MESSAGES.regexp.NUMBER)),n=e.match(new RegExp("^"+c.regexp.NUMBER));if(!t&&!n)return null;const r=n&&n[0]===e;if(t&&t[0]===e||!r)return t?{number:t[0],length:t[0].length}:null;return{number:n[0].replace(new RegExp(c.regexp.DIGIT_GROUP,"g"),"X").replace(new RegExp(c.regexp.DECIMAL_MARK,"g"),i.LOCALE.MESSAGES.regexp.DECIMAL_MARK).replace(/X/g,i.LOCALE.MESSAGES.regexp.DIGIT_GROUP.replace(/\\/g,"")),length:n[0].length}}}t.MathStore=c,c.regexp={NUMBER:"((\\d{1,3})(?=(,| ))((,| )\\d{3})*(\\.\\d+)?)|^\\d*\\.\\d+|^\\d+",DECIMAL_MARK:"\\.",DIGIT_GROUP:","}},7039:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.OutputError=t.Precondition=t.Action=t.Component=t.ActionType=t.SpeechRule=void 0;const r=n(4886),i=n(1058);var o;function s(e){switch(e){case"[n]":return o.NODE;case"[m]":return o.MULTI;case"[t]":return o.TEXT;case"[p]":return o.PERSONALITY;default:throw"Parse error: "+e}}t.SpeechRule=class{constructor(e,t,n,r){this.name=e,this.dynamicCstr=t,this.precondition=n,this.action=r,this.context=null}toString(){return this.name+" | "+this.dynamicCstr.toString()+" | "+this.precondition.toString()+" ==> "+this.action.toString()}},function(e){e.NODE="NODE",e.MULTI="MULTI",e.TEXT="TEXT",e.PERSONALITY="PERSONALITY"}(o=t.ActionType||(t.ActionType={}));class a{constructor({type:e,content:t,attributes:n,grammar:r}){this.type=e,this.content=t,this.attributes=n,this.grammar=r}static grammarFromString(e){return i.Grammar.parseInput(e)}static fromString(e){const t={type:s(e.substring(0,3))};let n=e.slice(3).trim();if(!n)throw new u("Missing content.");switch(t.type){case o.TEXT:if('"'===n[0]){const e=d(n,"\\(")[0].trim();if('"'!==e.slice(-1))throw new u("Invalid string syntax.");t.content=e,n=n.slice(e.length).trim(),-1===n.indexOf("(")&&(n="");break}case o.NODE:case o.MULTI:{const e=n.indexOf(" (");if(-1===e){t.content=n.trim(),n="";break}t.content=n.substring(0,e).trim(),n=n.slice(e).trim()}}if(n){const e=a.attributesFromString(n);e.grammar&&(t.grammar=e.grammar,delete e.grammar),Object.keys(e).length&&(t.attributes=e)}return new a(t)}static attributesFromString(e){if("("!==e[0]||")"!==e.slice(-1))throw new u("Invalid attribute expression: "+e);const t={},n=d(e.slice(1,-1),",");for(let e=0,r=n.length;e0?"("+e.join(", ")+")":""}getAttributes(){const e=[];for(const t in this.attributes){const n=this.attributes[t];"true"===n?e.push(t):e.push(t+":"+n)}return e}}t.Component=a;class c{constructor(e){this.components=e}static fromString(e){const t=d(e,";").filter((function(e){return e.match(/\S/)})).map((function(e){return e.trim()})),n=[];for(let e=0,r=t.length;e0?n[0]:null}applyConstraint(e,t){return!!this.applyQuery(e,t)||r.evaluateBoolean(t,e)}constructString(e,t){if(!t)return"";if('"'===t.charAt(0))return t.slice(1,-1);const n=this.customStrings.lookup(t);return n?n(e):r.evaluateString(t,e)}parse(e){const t=Array.isArray(e)?e:Object.entries(e);for(let e,n=0;e=t[n];n++){switch(e[0].slice(0,3)){case"CQF":this.customQueries.add(e[0],e[1]);break;case"CSF":this.customStrings.add(e[0],e[1]);break;case"CTF":this.contextFunctions.add(e[0],e[1]);break;case"CGF":this.customGenerators.add(e[0],e[1]);break;default:console.error("FunctionError: Invalid function name "+e[0])}}}}},6060:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.storeFactory=t.SpeechRuleEngine=void 0;const r=n(4148),i=n(1984),o=n(6671),s=n(4886),a=n(4998),c=n(5024),l=n(7278),u=n(9805),d=n(1462),h=n(8310),p=n(1058),f=n(7478),m=n(7039),g=n(2803);class S{constructor(){this.trie=null,this.evaluators_={},this.trie=new g.Trie}static getInstance(){return S.instance=S.instance||new S,S.instance}static debugSpeechRule(e,t){const n=e.precondition,r=e.context.applyQuery(t,n.query);i.Debugger.getInstance().output(n.query,r?r.toString():r),n.constraints.forEach((n=>i.Debugger.getInstance().output(n,e.context.applyConstraint(t,n))))}static debugNamedSpeechRule(e,t){const n=S.getInstance().trie.collectRules().filter((t=>t.name==e));for(let r,o=0;r=n[o];o++)i.Debugger.getInstance().output("Rule",e,"DynamicCstr:",r.dynamicCstr.toString(),"number",o),S.debugSpeechRule(r,t)}evaluateNode(e){(0,c.updateEvaluator)(e);const t=(new Date).getTime();let n=[];try{n=this.evaluateNode_(e)}catch(e){console.error("Something went wrong computing speech."),i.Debugger.getInstance().output(e)}const r=(new Date).getTime();return i.Debugger.getInstance().output("Time:",r-t),n}toString(){return this.trie.collectRules().map((e=>e.toString())).join("\n")}runInSetting(e,t){const n=s.default.getInstance(),r={};for(const t in e)r[t]=n[t],n[t]=e[t];n.setDynamicCstr();const i=t();for(const e in r)n[e]=r[e];return n.setDynamicCstr(),i}addStore(e){const t=N(e);"abstract"!==t.kind&&t.getSpeechRules().forEach((e=>this.trie.addRule(e))),this.addEvaluator(t)}processGrammar(e,t,n){const r={};for(const i in n){const o=n[i];r[i]="string"==typeof o?e.constructString(t,o):o}p.Grammar.getInstance().pushState(r)}addEvaluator(e){const t=e.evaluateDefault.bind(e),n=this.evaluators_[e.locale];if(n)return void(n[e.modality]=t);const r={};r[e.modality]=t,this.evaluators_[e.locale]=r}getEvaluator(e,t){const n=this.evaluators_[e]||this.evaluators_[h.DynamicCstr.DEFAULT_VALUES[h.Axis.LOCALE]];return n[t]||n[h.DynamicCstr.DEFAULT_VALUES[h.Axis.MODALITY]]}enumerate(e){return this.trie.enumerate(e)}evaluateNode_(e){return e?(this.updateConstraint_(),this.evaluateTree_(e)):[]}evaluateTree_(e){const t=s.default.getInstance();let n;i.Debugger.getInstance().output(t.mode!==a.Mode.HTTP?e.toString():e),p.Grammar.getInstance().setAttribute(e);const o=this.lookupRule(e,t.dynamicCstr);if(!o)return t.strict?[]:(n=this.getEvaluator(t.locale,t.modality)(e),e.attributes&&this.addPersonality_(n,{},!1,e),n);i.Debugger.getInstance().generateOutput((()=>["Apply Rule:",o.name,o.dynamicCstr.toString(),(t.mode,a.Mode.HTTP,e).toString()]));const l=o.context,u=o.action.components;n=[];for(let t,i=0;t=u[i];i++){let i=[];const o=t.content||"",a=t.attributes||{};let u=!1;t.grammar&&this.processGrammar(l,e,t.grammar);let d=null;if(a.engine){d=s.default.getInstance().dynamicCstr.getComponents();const e=p.Grammar.parseInput(a.engine);s.default.getInstance().setDynamicCstr(e)}switch(t.type){case m.ActionType.NODE:{const t=l.applyQuery(e,o);t&&(i=this.evaluateTree_(t))}break;case m.ActionType.MULTI:{u=!0;const t=l.applySelector(e,o);t.length>0&&(i=this.evaluateNodeList_(l,t,a.sepFunc,l.constructString(e,a.separator),a.ctxtFunc,l.constructString(e,a.context)))}break;case m.ActionType.TEXT:{const t=a.span,n={};if(t){const r=(0,c.evalXPath)(t,e);r.length&&(n.extid=r[0].getAttribute("extid"))}const s=l.constructString(e,o);(s||""===s)&&(i=Array.isArray(s)?s.map((function(e){return r.AuditoryDescription.create({text:e.speech,attributes:e.attributes},{adjust:!0})})):[r.AuditoryDescription.create({text:s,attributes:n},{adjust:!0})])}break;case m.ActionType.PERSONALITY:default:i=[r.AuditoryDescription.create({text:o})]}i[0]&&!u&&(a.context&&(i[0].context=l.constructString(e,a.context)+(i[0].context||"")),a.annotation&&(i[0].annotation=a.annotation)),this.addLayout(i,a,u),t.grammar&&p.Grammar.getInstance().popState(),n=n.concat(this.addPersonality_(i,a,u,e)),d&&s.default.getInstance().setDynamicCstr(d)}return n}evaluateNodeList_(e,t,n,i,o,s){if(!t.length)return[];const a=i||"",c=s||"",l=e.contextFunctions.lookup(o),u=l?l(t,c):function(){return c},d=e.contextFunctions.lookup(n),h=d?d(t,a):function(){return[r.AuditoryDescription.create({text:a},{translate:!0})]};let p=[];for(let e,n=0;e=t[n];n++){const r=this.evaluateTree_(e);if(r.length>0&&(r[0].context=u()+(r[0].context||""),p=p.concat(r),n=0;t--){const r=n[t].name;!e.attributes[r]&&r.match(/^ext/)&&(e.attributes[r]=n[t].value)}}}addRelativePersonality_(e,t){if(!e.personality)return e.personality=t,e;const n=e.personality;for(const e in t)n[e]&&"number"==typeof n[e]&&"number"==typeof t[e]?n[e]=n[e]+t[e]:n[e]||(n[e]=t[e]);return e}updateConstraint_(){const e=s.default.getInstance().dynamicCstr,t=s.default.getInstance().strict,n=this.trie,r={};let i=e.getValue(h.Axis.LOCALE),o=e.getValue(h.Axis.MODALITY),a=e.getValue(h.Axis.DOMAIN);n.hasSubtrie([i,o,a])||(a=h.DynamicCstr.DEFAULT_VALUES[h.Axis.DOMAIN],n.hasSubtrie([i,o,a])||(o=h.DynamicCstr.DEFAULT_VALUES[h.Axis.MODALITY],n.hasSubtrie([i,o,a])||(i=h.DynamicCstr.DEFAULT_VALUES[h.Axis.LOCALE]))),r[h.Axis.LOCALE]=[i],r[h.Axis.MODALITY]=["summary"!==o?o:h.DynamicCstr.DEFAULT_VALUES[h.Axis.MODALITY]],r[h.Axis.DOMAIN]=["speech"!==o?h.DynamicCstr.DEFAULT_VALUES[h.Axis.DOMAIN]:a];const c=e.getOrder();for(let n,i=0;n=c[i];i++)if(!r[n]){const i=e.getValue(n),o=this.makeSet_(i,e.preference),s=h.DynamicCstr.DEFAULT_VALUES[n];t||i===s||o.push(s),r[n]=o}e.updateProperties(r)}makeSet_(e,t){return t&&Object.keys(t).length?e.split(":"):[e]}lookupRule(e,t){if(!e||e.nodeType!==o.NodeType.ELEMENT_NODE&&e.nodeType!==o.NodeType.TEXT_NODE)return null;const n=this.lookupRules(e,t);return n.length>0?this.pickMostConstraint_(t,n):null}lookupRules(e,t){return this.trie.lookupRules(e,t.allProperties())}pickMostConstraint_(e,t){const n=s.default.getInstance().comparator;return t.sort((function(e,t){return n.compare(e.dynamicCstr,t.dynamicCstr)||t.precondition.priority-e.precondition.priority||t.precondition.constraints.length-e.precondition.constraints.length||t.precondition.rank-e.precondition.rank})),i.Debugger.getInstance().generateOutput((()=>t.map((e=>e.name+"("+e.dynamicCstr.toString()+")"))).bind(this)),t[0]}}t.SpeechRuleEngine=S;const b=new Map;function N(e){const t=`${e.locale}.${e.modality}.${e.domain}`;if("actions"===e.kind){const n=b.get(t);return n.parse(e),n}u.init(),e&&!e.functions&&(e.functions=l.getStore(e.locale,e.modality,e.domain));const n="braille"===e.modality?new d.BrailleStore:new f.MathStore;return b.set(t,n),e.inherits&&(n.inherits=b.get(`${e.inherits}.${e.modality}.${e.domain}`)),n.parse(e),n.initialize(),n}t.storeFactory=N,s.default.nodeEvaluator=S.getInstance().evaluateNode.bind(S.getInstance())},3686:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.CustomGenerators=t.ContextFunctions=t.CustomStrings=t.CustomQueries=void 0;class n{constructor(e,t){this.prefix=e,this.store=t}add(e,t){this.checkCustomFunctionSyntax_(e)&&(this.store[e]=t)}addStore(e){const t=Object.keys(e.store);for(let n,r=0;n=t[r];r++)this.add(n,e.store[n])}lookup(e){return this.store[e]}checkCustomFunctionSyntax_(e){const t=new RegExp("^"+this.prefix);return!!e.match(t)||(console.error("FunctionError: Invalid function name. Expected prefix "+this.prefix),!1)}}t.CustomQueries=class extends n{constructor(){super("CQF",{})}};t.CustomStrings=class extends n{constructor(){super("CSF",{})}};t.ContextFunctions=class extends n{constructor(){super("CTF",{})}};t.CustomGenerators=class extends n{constructor(){super("CGF",{})}}},931:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.contentIterator=t.pauseSeparator=t.nodeCounter=void 0;const r=n(4148),i=n(5024),o=n(4886);t.nodeCounter=function(e,t){const n=e.length;let r=0,i=t;return t||(i=""),function(){return r0?i.evalXPath("../../content/*",e[0]):[],function(){const e=n.shift(),i=t?[r.AuditoryDescription.create({text:t},{translate:!0})]:[];if(!e)return i;const s=o.default.evaluateNode(e);return i.concat(s)}}},1939:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.getTreeFromString=t.getTree=t.xmlTree=void 0;const r=n(6671),i=n(1784);function o(e){return new i.SemanticTree(e)}t.xmlTree=function(e){return o(e).xml()},t.getTree=o,t.getTreeFromString=function(e){return o(r.parseInput(e))}},4036:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.annotate=t.activate=t.register=t.visitors=t.annotators=void 0;const r=n(241);t.annotators=new Map,t.visitors=new Map,t.register=function(e){const n=e.domain+":"+e.name;e instanceof r.SemanticAnnotator?t.annotators.set(n,e):t.visitors.set(n,e)},t.activate=function(e,n){const r=e+":"+n,i=t.annotators.get(r)||t.visitors.get(r);i&&(i.active=!0)},t.annotate=function(e){for(const n of t.annotators.values())n.active&&n.annotate(e);for(const n of t.visitors.values())n.active&&n.visit(e,Object.assign({},n.def))}},241:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.SemanticVisitor=t.SemanticAnnotator=void 0;t.SemanticAnnotator=class{constructor(e,t,n){this.domain=e,this.name=t,this.func=n,this.active=!1}annotate(e){e.childNodes.forEach(this.annotate.bind(this)),e.addAnnotation(this.domain,this.func(e))}};t.SemanticVisitor=class{constructor(e,t,n,r={}){this.domain=e,this.name=t,this.func=n,this.def=r,this.active=!1}visit(e,t){let n=this.func(e,t);e.addAnnotation(this.domain,n[0]);for(let t,r=0;t=e.childNodes[r];r++)n=this.visit(t,n[1]);return n}}},4020:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.lookupSecondary=t.isEmbellishedType=t.isMatchingFence=t.functionApplication=t.invisibleComma=t.invisiblePlus=t.invisibleTimes=t.lookupMeaning=t.lookupRole=t.lookupType=t.equal=t.allLettersRegExp=void 0;const n=String.fromCodePoint(8291),r=["\uff0c","\ufe50",",",n],i=["\xaf","\u2012","\u2013","\u2014","\u2015","\ufe58","-","\u207b","\u208b","\u2212","\u2796","\ufe63","\uff0d","\u2010","\u2011","\u203e","_"],o=["~","\u0303","\u223c","\u02dc","\u223d","\u02f7","\u0334","\u0330"],s={"(":")","[":"]","{":"}","\u2045":"\u2046","\u2329":"\u232a","\u2768":"\u2769","\u276a":"\u276b","\u276c":"\u276d","\u276e":"\u276f","\u2770":"\u2771","\u2772":"\u2773","\u2774":"\u2775","\u27c5":"\u27c6","\u27e6":"\u27e7","\u27e8":"\u27e9","\u27ea":"\u27eb","\u27ec":"\u27ed","\u27ee":"\u27ef","\u2983":"\u2984","\u2985":"\u2986","\u2987":"\u2988","\u2989":"\u298a","\u298b":"\u298c","\u298d":"\u298e","\u298f":"\u2990","\u2991":"\u2992","\u2993":"\u2994","\u2995":"\u2996","\u2997":"\u2998","\u29d8":"\u29d9","\u29da":"\u29db","\u29fc":"\u29fd","\u2e22":"\u2e23","\u2e24":"\u2e25","\u2e26":"\u2e27","\u2e28":"\u2e29","\u3008":"\u3009","\u300a":"\u300b","\u300c":"\u300d","\u300e":"\u300f","\u3010":"\u3011","\u3014":"\u3015","\u3016":"\u3017","\u3018":"\u3019","\u301a":"\u301b","\u301d":"\u301e","\ufd3e":"\ufd3f","\ufe17":"\ufe18","\ufe59":"\ufe5a","\ufe5b":"\ufe5c","\ufe5d":"\ufe5e","\uff08":"\uff09","\uff3b":"\uff3d","\uff5b":"\uff5d","\uff5f":"\uff60","\uff62":"\uff63","\u2308":"\u2309","\u230a":"\u230b","\u230c":"\u230d","\u230e":"\u230f","\u231c":"\u231d","\u231e":"\u231f","\u239b":"\u239e","\u239c":"\u239f","\u239d":"\u23a0","\u23a1":"\u23a4","\u23a2":"\u23a5","\u23a3":"\u23a6","\u23a7":"\u23ab","\u23a8":"\u23ac","\u23a9":"\u23ad","\u23b0":"\u23b1","\u23b8":"\u23b9"},a={"\u23b4":"\u23b5","\u23dc":"\u23dd","\u23de":"\u23df","\u23e0":"\u23e1","\ufe35":"\ufe36","\ufe37":"\ufe38","\ufe39":"\ufe3a","\ufe3b":"\ufe3c","\ufe3d":"\ufe3e","\ufe3f":"\ufe40","\ufe41":"\ufe42","\ufe43":"\ufe44","\ufe47":"\ufe48"},c=Object.keys(s),l=Object.values(s);l.push("\u301f");const u=Object.keys(a),d=Object.values(a),h=["|","\xa6","\u2223","\u23d0","\u23b8","\u23b9","\u2758","\uff5c","\uffe4","\ufe31","\ufe32"],p=["\u2016","\u2225","\u2980","\u2af4"],f=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"],m=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","\u0131","\u0237"],g=["\uff21","\uff22","\uff23","\uff24","\uff25","\uff26","\uff27","\uff28","\uff29","\uff2a","\uff2b","\uff2c","\uff2d","\uff2e","\uff2f","\uff30","\uff31","\uff32","\uff33","\uff34","\uff35","\uff36","\uff37","\uff38","\uff39","\uff3a"],S=["\uff41","\uff42","\uff43","\uff44","\uff45","\uff46","\uff47","\uff48","\uff49","\uff4a","\uff4b","\uff4c","\uff4d","\uff4e","\uff4f","\uff50","\uff51","\uff52","\uff53","\uff54","\uff55","\uff56","\uff57","\uff58","\uff59","\uff5a"],b=["\ud835\udc00","\ud835\udc01","\ud835\udc02","\ud835\udc03","\ud835\udc04","\ud835\udc05","\ud835\udc06","\ud835\udc07","\ud835\udc08","\ud835\udc09","\ud835\udc0a","\ud835\udc0b","\ud835\udc0c","\ud835\udc0d","\ud835\udc0e","\ud835\udc0f","\ud835\udc10","\ud835\udc11","\ud835\udc12","\ud835\udc13","\ud835\udc14","\ud835\udc15","\ud835\udc16","\ud835\udc17","\ud835\udc18","\ud835\udc19"],N=["\ud835\udc1a","\ud835\udc1b","\ud835\udc1c","\ud835\udc1d","\ud835\udc1e","\ud835\udc1f","\ud835\udc20","\ud835\udc21","\ud835\udc22","\ud835\udc23","\ud835\udc24","\ud835\udc25","\ud835\udc26","\ud835\udc27","\ud835\udc28","\ud835\udc29","\ud835\udc2a","\ud835\udc2b","\ud835\udc2c","\ud835\udc2d","\ud835\udc2e","\ud835\udc2f","\ud835\udc30","\ud835\udc31","\ud835\udc32","\ud835\udc33"],E=["\ud835\udc34","\ud835\udc35","\ud835\udc36","\ud835\udc37","\ud835\udc38","\ud835\udc39","\ud835\udc3a","\ud835\udc3b","\ud835\udc3c","\ud835\udc3d","\ud835\udc3e","\ud835\udc3f","\ud835\udc40","\ud835\udc41","\ud835\udc42","\ud835\udc43","\ud835\udc44","\ud835\udc45","\ud835\udc46","\ud835\udc47","\ud835\udc48","\ud835\udc49","\ud835\udc4a","\ud835\udc4b","\ud835\udc4c","\ud835\udc4d"],y=["\ud835\udc4e","\ud835\udc4f","\ud835\udc50","\ud835\udc51","\ud835\udc52","\ud835\udc53","\ud835\udc54","\u210e","\ud835\udc56","\ud835\udc57","\ud835\udc58","\ud835\udc59","\ud835\udc5a","\ud835\udc5b","\ud835\udc5c","\ud835\udc5d","\ud835\udc5e","\ud835\udc5f","\ud835\udc60","\ud835\udc61","\ud835\udc62","\ud835\udc63","\ud835\udc64","\ud835\udc65","\ud835\udc66","\ud835\udc67","\ud835\udea4","\ud835\udea5"],A=["\ud835\udc68","\ud835\udc69","\ud835\udc6a","\ud835\udc6b","\ud835\udc6c","\ud835\udc6d","\ud835\udc6e","\ud835\udc6f","\ud835\udc70","\ud835\udc71","\ud835\udc72","\ud835\udc73","\ud835\udc74","\ud835\udc75","\ud835\udc76","\ud835\udc77","\ud835\udc78","\ud835\udc79","\ud835\udc7a","\ud835\udc7b","\ud835\udc7c","\ud835\udc7d","\ud835\udc7e","\ud835\udc7f","\ud835\udc80","\ud835\udc81"],_=["\ud835\udc82","\ud835\udc83","\ud835\udc84","\ud835\udc85","\ud835\udc86","\ud835\udc87","\ud835\udc88","\ud835\udc89","\ud835\udc8a","\ud835\udc8b","\ud835\udc8c","\ud835\udc8d","\ud835\udc8e","\ud835\udc8f","\ud835\udc90","\ud835\udc91","\ud835\udc92","\ud835\udc93","\ud835\udc94","\ud835\udc95","\ud835\udc96","\ud835\udc97","\ud835\udc98","\ud835\udc99","\ud835\udc9a","\ud835\udc9b"],C=["\ud835\udc9c","\u212c","\ud835\udc9e","\ud835\udc9f","\u2130","\u2131","\ud835\udca2","\u210b","\u2110","\ud835\udca5","\ud835\udca6","\u2112","\u2133","\ud835\udca9","\ud835\udcaa","\ud835\udcab","\ud835\udcac","\u211b","\ud835\udcae","\ud835\udcaf","\ud835\udcb0","\ud835\udcb1","\ud835\udcb2","\ud835\udcb3","\ud835\udcb4","\ud835\udcb5","\u2118"],T=["\ud835\udcb6","\ud835\udcb7","\ud835\udcb8","\ud835\udcb9","\u212f","\ud835\udcbb","\u210a","\ud835\udcbd","\ud835\udcbe","\ud835\udcbf","\ud835\udcc0","\ud835\udcc1","\ud835\udcc2","\ud835\udcc3","\u2134","\ud835\udcc5","\ud835\udcc6","\ud835\udcc7","\ud835\udcc8","\ud835\udcc9","\ud835\udcca","\ud835\udccb","\ud835\udccc","\ud835\udccd","\ud835\udcce","\ud835\udccf","\u2113"],v=["\ud835\udcd0","\ud835\udcd1","\ud835\udcd2","\ud835\udcd3","\ud835\udcd4","\ud835\udcd5","\ud835\udcd6","\ud835\udcd7","\ud835\udcd8","\ud835\udcd9","\ud835\udcda","\ud835\udcdb","\ud835\udcdc","\ud835\udcdd","\ud835\udcde","\ud835\udcdf","\ud835\udce0","\ud835\udce1","\ud835\udce2","\ud835\udce3","\ud835\udce4","\ud835\udce5","\ud835\udce6","\ud835\udce7","\ud835\udce8","\ud835\udce9"],O=["\ud835\udcea","\ud835\udceb","\ud835\udcec","\ud835\udced","\ud835\udcee","\ud835\udcef","\ud835\udcf0","\ud835\udcf1","\ud835\udcf2","\ud835\udcf3","\ud835\udcf4","\ud835\udcf5","\ud835\udcf6","\ud835\udcf7","\ud835\udcf8","\ud835\udcf9","\ud835\udcfa","\ud835\udcfb","\ud835\udcfc","\ud835\udcfd","\ud835\udcfe","\ud835\udcff","\ud835\udd00","\ud835\udd01","\ud835\udd02","\ud835\udd03"],M=["\ud835\udd04","\ud835\udd05","\u212d","\ud835\udd07","\ud835\udd08","\ud835\udd09","\ud835\udd0a","\u210c","\u2111","\ud835\udd0d","\ud835\udd0e","\ud835\udd0f","\ud835\udd10","\ud835\udd11","\ud835\udd12","\ud835\udd13","\ud835\udd14","\u211c","\ud835\udd16","\ud835\udd17","\ud835\udd18","\ud835\udd19","\ud835\udd1a","\ud835\udd1b","\ud835\udd1c","\u2128"],I=["\ud835\udd1e","\ud835\udd1f","\ud835\udd20","\ud835\udd21","\ud835\udd22","\ud835\udd23","\ud835\udd24","\ud835\udd25","\ud835\udd26","\ud835\udd27","\ud835\udd28","\ud835\udd29","\ud835\udd2a","\ud835\udd2b","\ud835\udd2c","\ud835\udd2d","\ud835\udd2e","\ud835\udd2f","\ud835\udd30","\ud835\udd31","\ud835\udd32","\ud835\udd33","\ud835\udd34","\ud835\udd35","\ud835\udd36","\ud835\udd37"],L=["\ud835\udd38","\ud835\udd39","\u2102","\ud835\udd3b","\ud835\udd3c","\ud835\udd3d","\ud835\udd3e","\u210d","\ud835\udd40","\ud835\udd41","\ud835\udd42","\ud835\udd43","\ud835\udd44","\u2115","\ud835\udd46","\u2119","\u211a","\u211d","\ud835\udd4a","\ud835\udd4b","\ud835\udd4c","\ud835\udd4d","\ud835\udd4e","\ud835\udd4f","\ud835\udd50","\u2124"],R=["\ud835\udd52","\ud835\udd53","\ud835\udd54","\ud835\udd55","\ud835\udd56","\ud835\udd57","\ud835\udd58","\ud835\udd59","\ud835\udd5a","\ud835\udd5b","\ud835\udd5c","\ud835\udd5d","\ud835\udd5e","\ud835\udd5f","\ud835\udd60","\ud835\udd61","\ud835\udd62","\ud835\udd63","\ud835\udd64","\ud835\udd65","\ud835\udd66","\ud835\udd67","\ud835\udd68","\ud835\udd69","\ud835\udd6a","\ud835\udd6b"],x=["\ud835\udd6c","\ud835\udd6d","\ud835\udd6e","\ud835\udd6f","\ud835\udd70","\ud835\udd71","\ud835\udd72","\ud835\udd73","\ud835\udd74","\ud835\udd75","\ud835\udd76","\ud835\udd77","\ud835\udd78","\ud835\udd79","\ud835\udd7a","\ud835\udd7b","\ud835\udd7c","\ud835\udd7d","\ud835\udd7e","\ud835\udd7f","\ud835\udd80","\ud835\udd81","\ud835\udd82","\ud835\udd83","\ud835\udd84","\ud835\udd85"],P=["\ud835\udd86","\ud835\udd87","\ud835\udd88","\ud835\udd89","\ud835\udd8a","\ud835\udd8b","\ud835\udd8c","\ud835\udd8d","\ud835\udd8e","\ud835\udd8f","\ud835\udd90","\ud835\udd91","\ud835\udd92","\ud835\udd93","\ud835\udd94","\ud835\udd95","\ud835\udd96","\ud835\udd97","\ud835\udd98","\ud835\udd99","\ud835\udd9a","\ud835\udd9b","\ud835\udd9c","\ud835\udd9d","\ud835\udd9e","\ud835\udd9f"],F=["\ud835\udda0","\ud835\udda1","\ud835\udda2","\ud835\udda3","\ud835\udda4","\ud835\udda5","\ud835\udda6","\ud835\udda7","\ud835\udda8","\ud835\udda9","\ud835\uddaa","\ud835\uddab","\ud835\uddac","\ud835\uddad","\ud835\uddae","\ud835\uddaf","\ud835\uddb0","\ud835\uddb1","\ud835\uddb2","\ud835\uddb3","\ud835\uddb4","\ud835\uddb5","\ud835\uddb6","\ud835\uddb7","\ud835\uddb8","\ud835\uddb9"],D=["\ud835\uddba","\ud835\uddbb","\ud835\uddbc","\ud835\uddbd","\ud835\uddbe","\ud835\uddbf","\ud835\uddc0","\ud835\uddc1","\ud835\uddc2","\ud835\uddc3","\ud835\uddc4","\ud835\uddc5","\ud835\uddc6","\ud835\uddc7","\ud835\uddc8","\ud835\uddc9","\ud835\uddca","\ud835\uddcb","\ud835\uddcc","\ud835\uddcd","\ud835\uddce","\ud835\uddcf","\ud835\uddd0","\ud835\uddd1","\ud835\uddd2","\ud835\uddd3"],w=["\ud835\uddd4","\ud835\uddd5","\ud835\uddd6","\ud835\uddd7","\ud835\uddd8","\ud835\uddd9","\ud835\uddda","\ud835\udddb","\ud835\udddc","\ud835\udddd","\ud835\uddde","\ud835\udddf","\ud835\udde0","\ud835\udde1","\ud835\udde2","\ud835\udde3","\ud835\udde4","\ud835\udde5","\ud835\udde6","\ud835\udde7","\ud835\udde8","\ud835\udde9","\ud835\uddea","\ud835\uddeb","\ud835\uddec","\ud835\udded"],k=["\ud835\uddee","\ud835\uddef","\ud835\uddf0","\ud835\uddf1","\ud835\uddf2","\ud835\uddf3","\ud835\uddf4","\ud835\uddf5","\ud835\uddf6","\ud835\uddf7","\ud835\uddf8","\ud835\uddf9","\ud835\uddfa","\ud835\uddfb","\ud835\uddfc","\ud835\uddfd","\ud835\uddfe","\ud835\uddff","\ud835\ude00","\ud835\ude01","\ud835\ude02","\ud835\ude03","\ud835\ude04","\ud835\ude05","\ud835\ude06","\ud835\ude07"],U=["\ud835\ude08","\ud835\ude09","\ud835\ude0a","\ud835\ude0b","\ud835\ude0c","\ud835\ude0d","\ud835\ude0e","\ud835\ude0f","\ud835\ude10","\ud835\ude11","\ud835\ude12","\ud835\ude13","\ud835\ude14","\ud835\ude15","\ud835\ude16","\ud835\ude17","\ud835\ude18","\ud835\ude19","\ud835\ude1a","\ud835\ude1b","\ud835\ude1c","\ud835\ude1d","\ud835\ude1e","\ud835\ude1f","\ud835\ude20","\ud835\ude21"],B=["\ud835\ude22","\ud835\ude23","\ud835\ude24","\ud835\ude25","\ud835\ude26","\ud835\ude27","\ud835\ude28","\ud835\ude29","\ud835\ude2a","\ud835\ude2b","\ud835\ude2c","\ud835\ude2d","\ud835\ude2e","\ud835\ude2f","\ud835\ude30","\ud835\ude31","\ud835\ude32","\ud835\ude33","\ud835\ude34","\ud835\ude35","\ud835\ude36","\ud835\ude37","\ud835\ude38","\ud835\ude39","\ud835\ude3a","\ud835\ude3b"],j=["\ud835\ude3c","\ud835\ude3d","\ud835\ude3e","\ud835\ude3f","\ud835\ude40","\ud835\ude41","\ud835\ude42","\ud835\ude43","\ud835\ude44","\ud835\ude45","\ud835\ude46","\ud835\ude47","\ud835\ude48","\ud835\ude49","\ud835\ude4a","\ud835\ude4b","\ud835\ude4c","\ud835\ude4d","\ud835\ude4e","\ud835\ude4f","\ud835\ude50","\ud835\ude51","\ud835\ude52","\ud835\ude53","\ud835\ude54","\ud835\ude55"],G=["\ud835\ude56","\ud835\ude57","\ud835\ude58","\ud835\ude59","\ud835\ude5a","\ud835\ude5b","\ud835\ude5c","\ud835\ude5d","\ud835\ude5e","\ud835\ude5f","\ud835\ude60","\ud835\ude61","\ud835\ude62","\ud835\ude63","\ud835\ude64","\ud835\ude65","\ud835\ude66","\ud835\ude67","\ud835\ude68","\ud835\ude69","\ud835\ude6a","\ud835\ude6b","\ud835\ude6c","\ud835\ude6d","\ud835\ude6e","\ud835\ude6f"],V=["\ud835\ude70","\ud835\ude71","\ud835\ude72","\ud835\ude73","\ud835\ude74","\ud835\ude75","\ud835\ude76","\ud835\ude77","\ud835\ude78","\ud835\ude79","\ud835\ude7a","\ud835\ude7b","\ud835\ude7c","\ud835\ude7d","\ud835\ude7e","\ud835\ude7f","\ud835\ude80","\ud835\ude81","\ud835\ude82","\ud835\ude83","\ud835\ude84","\ud835\ude85","\ud835\ude86","\ud835\ude87","\ud835\ude88","\ud835\ude89"],$=["\ud835\ude8a","\ud835\ude8b","\ud835\ude8c","\ud835\ude8d","\ud835\ude8e","\ud835\ude8f","\ud835\ude90","\ud835\ude91","\ud835\ude92","\ud835\ude93","\ud835\ude94","\ud835\ude95","\ud835\ude96","\ud835\ude97","\ud835\ude98","\ud835\ude99","\ud835\ude9a","\ud835\ude9b","\ud835\ude9c","\ud835\ude9d","\ud835\ude9e","\ud835\ude9f","\ud835\udea0","\ud835\udea1","\ud835\udea2","\ud835\udea3"],H=["\u2145","\u2146","\u2147","\u2148","\u2149"],W=["\u0391","\u0392","\u0393","\u0394","\u0395","\u0396","\u0397","\u0398","\u0399","\u039a","\u039b","\u039c","\u039d","\u039e","\u039f","\u03a0","\u03a1","\u03a3","\u03a4","\u03a5","\u03a6","\u03a7","\u03a8","\u03a9"],X=["\u03b1","\u03b2","\u03b3","\u03b4","\u03b5","\u03b6","\u03b7","\u03b8","\u03b9","\u03ba","\u03bb","\u03bc","\u03bd","\u03be","\u03bf","\u03c0","\u03c1","\u03c2","\u03c3","\u03c4","\u03c5","\u03c6","\u03c7","\u03c8","\u03c9"],q=["\ud835\udea8","\ud835\udea9","\ud835\udeaa","\ud835\udeab","\ud835\udeac","\ud835\udead","\ud835\udeae","\ud835\udeaf","\ud835\udeb0","\ud835\udeb1","\ud835\udeb2","\ud835\udeb3","\ud835\udeb4","\ud835\udeb5","\ud835\udeb6","\ud835\udeb7","\ud835\udeb8","\ud835\udeba","\ud835\udebb","\ud835\udebc","\ud835\udebd","\ud835\udebe","\ud835\udebf","\ud835\udec0"],Y=["\ud835\udec2","\ud835\udec3","\ud835\udec4","\ud835\udec5","\ud835\udec6","\ud835\udec7","\ud835\udec8","\ud835\udec9","\ud835\udeca","\ud835\udecb","\ud835\udecc","\ud835\udecd","\ud835\udece","\ud835\udecf","\ud835\uded0","\ud835\uded1","\ud835\uded2","\ud835\uded3","\ud835\uded4","\ud835\uded5","\ud835\uded6","\ud835\uded7","\ud835\uded8","\ud835\uded9","\ud835\udeda"],K=["\ud835\udee2","\ud835\udee3","\ud835\udee4","\ud835\udee5","\ud835\udee6","\ud835\udee7","\ud835\udee8","\ud835\udee9","\ud835\udeea","\ud835\udeeb","\ud835\udeec","\ud835\udeed","\ud835\udeee","\ud835\udeef","\ud835\udef0","\ud835\udef1","\ud835\udef2","\ud835\udef4","\ud835\udef5","\ud835\udef6","\ud835\udef7","\ud835\udef8","\ud835\udef9","\ud835\udefa"],z=["\ud835\udefc","\ud835\udefd","\ud835\udefe","\ud835\udeff","\ud835\udf00","\ud835\udf01","\ud835\udf02","\ud835\udf03","\ud835\udf04","\ud835\udf05","\ud835\udf06","\ud835\udf07","\ud835\udf08","\ud835\udf09","\ud835\udf0a","\ud835\udf0b","\ud835\udf0c","\ud835\udf0d","\ud835\udf0e","\ud835\udf0f","\ud835\udf10","\ud835\udf11","\ud835\udf12","\ud835\udf13","\ud835\udf14"],J=["\ud835\udf1c","\ud835\udf1d","\ud835\udf1e","\ud835\udf1f","\ud835\udf20","\ud835\udf21","\ud835\udf22","\ud835\udf23","\ud835\udf24","\ud835\udf25","\ud835\udf26","\ud835\udf27","\ud835\udf28","\ud835\udf29","\ud835\udf2a","\ud835\udf2b","\ud835\udf2c","\ud835\udf2e","\ud835\udf2f","\ud835\udf30","\ud835\udf31","\ud835\udf32","\ud835\udf33","\ud835\udf34"],Q=["\ud835\udf36","\ud835\udf37","\ud835\udf38","\ud835\udf39","\ud835\udf3a","\ud835\udf3b","\ud835\udf3c","\ud835\udf3d","\ud835\udf3e","\ud835\udf3f","\ud835\udf40","\ud835\udf41","\ud835\udf42","\ud835\udf43","\ud835\udf44","\ud835\udf45","\ud835\udf46","\ud835\udf47","\ud835\udf48","\ud835\udf49","\ud835\udf4a","\ud835\udf4b","\ud835\udf4c","\ud835\udf4d","\ud835\udf4e"],Z=["\ud835\udf56","\ud835\udf57","\ud835\udf58","\ud835\udf59","\ud835\udf5a","\ud835\udf5b","\ud835\udf5c","\ud835\udf5d","\ud835\udf5e","\ud835\udf5f","\ud835\udf60","\ud835\udf61","\ud835\udf62","\ud835\udf63","\ud835\udf64","\ud835\udf65","\ud835\udf66","\ud835\udf68","\ud835\udf69","\ud835\udf6a","\ud835\udf6b","\ud835\udf6c","\ud835\udf6d","\ud835\udf6e"],ee=["\ud835\udf70","\ud835\udf71","\ud835\udf72","\ud835\udf73","\ud835\udf74","\ud835\udf75","\ud835\udf76","\ud835\udf77","\ud835\udf78","\ud835\udf79","\ud835\udf7a","\ud835\udf7b","\ud835\udf7c","\ud835\udf7d","\ud835\udf7e","\ud835\udf7f","\ud835\udf80","\ud835\udf81","\ud835\udf82","\ud835\udf83","\ud835\udf84","\ud835\udf85","\ud835\udf86","\ud835\udf87","\ud835\udf88"],te=["\ud835\udf90","\ud835\udf91","\ud835\udf92","\ud835\udf93","\ud835\udf94","\ud835\udf95","\ud835\udf96","\ud835\udf97","\ud835\udf98","\ud835\udf99","\ud835\udf9a","\ud835\udf9b","\ud835\udf9c","\ud835\udf9d","\ud835\udf9e","\ud835\udf9f","\ud835\udfa0","\ud835\udfa2","\ud835\udfa3","\ud835\udfa4","\ud835\udfa5","\ud835\udfa6","\ud835\udfa7","\ud835\udfa8"],ne=["\ud835\udfaa","\ud835\udfab","\ud835\udfac","\ud835\udfad","\ud835\udfae","\ud835\udfaf","\ud835\udfb0","\ud835\udfb1","\ud835\udfb2","\ud835\udfb3","\ud835\udfb4","\ud835\udfb5","\ud835\udfb6","\ud835\udfb7","\ud835\udfb8","\ud835\udfb9","\ud835\udfba","\ud835\udfbb","\ud835\udfbc","\ud835\udfbd","\ud835\udfbe","\ud835\udfbf","\ud835\udfc0","\ud835\udfc1","\ud835\udfc2"],re=["\u213c","\u213d","\u213e","\u213f"],ie=["\u03d0","\u03d1","\u03d5","\u03d6","\u03d7","\u03f0","\u03f1","\u03f5","\u03f6","\u03f4"],oe=["\ud835\udedc","\ud835\udedd","\ud835\udede","\ud835\udedf","\ud835\udee0","\ud835\udee1"],se=["\ud835\udf16","\ud835\udf17","\ud835\udf18","\ud835\udf19","\ud835\udf1a","\ud835\udf1b"],ae=["\ud835\udf8a","\ud835\udf8b","\ud835\udf8c","\ud835\udf8d","\ud835\udf8e","\ud835\udf8f"],ce=["\u2135","\u2136","\u2137","\u2138"],le=f.concat(m,g,S,b,N,E,A,_,y,C,T,v,O,M,I,L,R,x,P,F,D,w,k,U,B,j,G,V,$,H,W,X,q,Y,K,z,J,Q,Z,ee,re,ie,te,ne,oe,se,ae,ce);t.allLettersRegExp=new RegExp(le.join("|"));const ue=["+","\xb1","\u2213","\u2214","\u2227","\u2228","\u2229","\u222a","\u228c","\u228d","\u228e","\u2293","\u2294","\u229d","\u229e","\u22a4","\u22a5","\u22ba","\u22bb","\u22bc","\u22c4","\u22ce","\u22cf","\u22d2","\u22d3","\u2a5e","\u2295","\u22d4"],de=String.fromCodePoint(8292);ue.push(de);const he=["\u2020","\u2021","\u2210","\u2217","\u2218","\u2219","\u2240","\u229a","\u229b","\u22a0","\u22a1","\u22c5","\u22c6","\u22c7","\u22c8","\u22c9","\u22ca","\u22cb","\u22cc","\u25cb","\xb7","*","\u2297","\u2299"],pe=String.fromCodePoint(8290);he.push(pe);const fe=String.fromCodePoint(8289),me=["\xbc","\xbd","\xbe","\u2150","\u2151","\u2152","\u2153","\u2154","\u2155","\u2156","\u2157","\u2158","\u2159","\u215a","\u215b","\u215c","\u215d","\u215e","\u215f","\u2189"],ge=["\xb2","\xb3","\xb9","\u2070","\u2074","\u2075","\u2076","\u2077","\u2078","\u2079"].concat(["\u2080","\u2081","\u2082","\u2083","\u2084","\u2085","\u2086","\u2087","\u2088","\u2089"],["\u2460","\u2461","\u2462","\u2463","\u2464","\u2465","\u2466","\u2467","\u2468","\u2469","\u246a","\u246b","\u246c","\u246d","\u246e","\u246f","\u2470","\u2471","\u2472","\u2473","\u24ea","\u24eb","\u24ec","\u24ed","\u24ee","\u24ef","\u24f0","\u24f1","\u24f2","\u24f3","\u24f4","\u24f5","\u24f6","\u24f7","\u24f8","\u24f9","\u24fa","\u24fb","\u24fc","\u24fd","\u24fe","\u24ff","\u2776","\u2777","\u2778","\u2779","\u277a","\u277b","\u277c","\u277d","\u277e","\u277f","\u2780","\u2781","\u2782","\u2783","\u2784","\u2785","\u2786","\u2787","\u2788","\u2789","\u278a","\u278b","\u278c","\u278d","\u278e","\u278f","\u2790","\u2791","\u2792","\u2793","\u3248","\u3249","\u324a","\u324b","\u324c","\u324d","\u324e","\u324f","\u3251","\u3252","\u3253","\u3254","\u3255","\u3256","\u3257","\u3258","\u3259","\u325a","\u325b","\u325c","\u325d","\u325e","\u325f","\u32b1","\u32b2","\u32b3","\u32b4","\u32b5","\u32b6","\u32b7","\u32b8","\u32b9","\u32ba","\u32bb","\u32bc","\u32bd","\u32be","\u32bf"],["\u2474","\u2475","\u2476","\u2477","\u2478","\u2479","\u247a","\u247b","\u247c","\u247d","\u247e","\u247f","\u2480","\u2481","\u2482","\u2483","\u2484","\u2485","\u2486","\u2487"],["\u2488","\u2489","\u248a","\u248b","\u248c","\u248d","\u248e","\u248f","\u2490","\u2491","\u2492","\u2493","\u2494","\u2495","\u2496","\u2497","\u2498","\u2499","\u249a","\u249b","\ud83c\udd00","\ud83c\udd01","\ud83c\udd02","\ud83c\udd03","\ud83c\udd04","\ud83c\udd05","\ud83c\udd06","\ud83c\udd07","\ud83c\udd08","\ud83c\udd09","\ud83c\udd0a"]),Se=["cos","cot","csc","sec","sin","tan","arccos","arccot","arccsc","arcsec","arcsin","arctan","arc cos","arc cot","arc csc","arc sec","arc sin","arc tan"].concat(["cosh","coth","csch","sech","sinh","tanh","arcosh","arcoth","arcsch","arsech","arsinh","artanh","arccosh","arccoth","arccsch","arcsech","arcsinh","arctanh"],["deg","det","dim","hom","ker","Tr","tr"],["log","ln","lg","exp","expt","gcd","gcd","arg","im","re","Pr"]),be=[{set:["!",'"',"#","%","&",";","?","@","\\","\xa1","\xa7","\xb6","\xbf","\u2017","\u2020","\u2021","\u2022","\u2023","\u2024","\u2025","\u2027","\u2030","\u2031","\u2038","\u203b","\u203c","\u203d","\u203e","\u2041","\u2042","\u2043","\u2047","\u2048","\u2049","\u204b","\u204c","\u204d","\u204e","\u204f","\u2050","\u2051","\u2053","\u2055","\u2056","\u2058","\u2059","\u205a","\u205b","\u205c","\u205d","\u205e","\ufe10","\ufe14","\ufe15","\ufe16","\ufe30","\ufe45","\ufe46","\ufe49","\ufe4a","\ufe4b","\ufe4c","\ufe54","\ufe56","\ufe57","\ufe5f","\ufe60","\ufe61","\ufe68","\ufe6a","\ufe6b","\uff01","\uff02","\uff03","\uff05","\uff06","\uff07","\uff0a","\uff0f","\uff1b","\uff1f","\uff20","\uff3c"],type:"punctuation",role:"unknown"},{set:["\ufe13",":","\uff1a","\ufe55"],type:"punctuation",role:"colon"},{set:r,type:"punctuation",role:"comma"},{set:["\u2026","\u22ee","\u22ef","\u22f0","\u22f1","\ufe19"],type:"punctuation",role:"ellipsis"},{set:[".","\ufe52","\uff0e"],type:"punctuation",role:"fullstop"},{set:i,type:"operator",role:"dash"},{set:o,type:"operator",role:"tilde"},{set:["'","\u2032","\u2033","\u2034","\u2035","\u2036","\u2037","\u2057","\u02b9","\u02ba"],type:"punctuation",role:"prime"},{set:["\xb0"],type:"punctuation",role:"degree"},{set:c,type:"fence",role:"open"},{set:l,type:"fence",role:"close"},{set:u,type:"fence",role:"top"},{set:d,type:"fence",role:"bottom"},{set:h,type:"fence",role:"neutral"},{set:p,type:"fence",role:"metric"},{set:m,type:"identifier",role:"latinletter",font:"normal"},{set:f,type:"identifier",role:"latinletter",font:"normal"},{set:S,type:"identifier",role:"latinletter",font:"normal"},{set:g,type:"identifier",role:"latinletter",font:"normal"},{set:N,type:"identifier",role:"latinletter",font:"bold"},{set:b,type:"identifier",role:"latinletter",font:"bold"},{set:y,type:"identifier",role:"latinletter",font:"italic"},{set:E,type:"identifier",role:"latinletter",font:"italic"},{set:_,type:"identifier",role:"latinletter",font:"bold-italic"},{set:A,type:"identifier",role:"latinletter",font:"bold-italic"},{set:T,type:"identifier",role:"latinletter",font:"script"},{set:C,type:"identifier",role:"latinletter",font:"script"},{set:O,type:"identifier",role:"latinletter",font:"bold-script"},{set:v,type:"identifier",role:"latinletter",font:"bold-script"},{set:I,type:"identifier",role:"latinletter",font:"fraktur"},{set:M,type:"identifier",role:"latinletter",font:"fraktur"},{set:R,type:"identifier",role:"latinletter",font:"double-struck"},{set:L,type:"identifier",role:"latinletter",font:"double-struck"},{set:P,type:"identifier",role:"latinletter",font:"bold-fraktur"},{set:x,type:"identifier",role:"latinletter",font:"bold-fraktur"},{set:D,type:"identifier",role:"latinletter",font:"sans-serif"},{set:F,type:"identifier",role:"latinletter",font:"sans-serif"},{set:k,type:"identifier",role:"latinletter",font:"sans-serif-bold"},{set:w,type:"identifier",role:"latinletter",font:"sans-serif-bold"},{set:B,type:"identifier",role:"latinletter",font:"sans-serif-italic"},{set:U,type:"identifier",role:"latinletter",font:"sans-serif-italic"},{set:G,type:"identifier",role:"latinletter",font:"sans-serif-bold-italic"},{set:j,type:"identifier",role:"latinletter",font:"sans-serif-bold-italic"},{set:$,type:"identifier",role:"latinletter",font:"monospace"},{set:V,type:"identifier",role:"latinletter",font:"monospace"},{set:H,type:"identifier",role:"latinletter",font:"double-struck-italic"},{set:X,type:"identifier",role:"greekletter",font:"normal"},{set:W,type:"identifier",role:"greekletter",font:"normal"},{set:Y,type:"identifier",role:"greekletter",font:"bold"},{set:q,type:"identifier",role:"greekletter",font:"bold"},{set:z,type:"identifier",role:"greekletter",font:"italic"},{set:K,type:"identifier",role:"greekletter",font:"italic"},{set:Q,type:"identifier",role:"greekletter",font:"bold-italic"},{set:J,type:"identifier",role:"greekletter",font:"bold-italic"},{set:ee,type:"identifier",role:"greekletter",font:"sans-serif-bold"},{set:Z,type:"identifier",role:"greekletter",font:"sans-serif-bold"},{set:te,type:"identifier",role:"greekletter",font:"sans-serif-bold-italic"},{set:ne,type:"identifier",role:"greekletter",font:"sans-serif-bold-italic"},{set:re,type:"identifier",role:"greekletter",font:"double-struck"},{set:ie,type:"identifier",role:"greekletter",font:"normal"},{set:oe,type:"identifier",role:"greekletter",font:"bold"},{set:se,type:"identifier",role:"greekletter",font:"italic"},{set:ae,type:"identifier",role:"greekletter",font:"sans-serif-bold"},{set:ce,type:"identifier",role:"otherletter",font:"normal"},{set:["0","1","2","3","4","5","6","7","8","9"],type:"number",role:"integer",font:"normal"},{set:["\uff10","\uff11","\uff12","\uff13","\uff14","\uff15","\uff16","\uff17","\uff18","\uff19"],type:"number",role:"integer",font:"normal"},{set:["\ud835\udfce","\ud835\udfcf","\ud835\udfd0","\ud835\udfd1","\ud835\udfd2","\ud835\udfd3","\ud835\udfd4","\ud835\udfd5","\ud835\udfd6","\ud835\udfd7"],type:"number",role:"integer",font:"bold"},{set:["\ud835\udfd8","\ud835\udfd9","\ud835\udfda","\ud835\udfdb","\ud835\udfdc","\ud835\udfdd","\ud835\udfde","\ud835\udfdf","\ud835\udfe0","\ud835\udfe1"],type:"number",role:"integer",font:"double-struck"},{set:["\ud835\udfe2","\ud835\udfe3","\ud835\udfe4","\ud835\udfe5","\ud835\udfe6","\ud835\udfe7","\ud835\udfe8","\ud835\udfe9","\ud835\udfea","\ud835\udfeb"],type:"number",role:"integer",font:"sans-serif"},{set:["\ud835\udfec","\ud835\udfed","\ud835\udfee","\ud835\udfef","\ud835\udff0","\ud835\udff1","\ud835\udff2","\ud835\udff3","\ud835\udff4","\ud835\udff5"],type:"number",role:"integer",font:"sans-serif-bold"},{set:["\ud835\udff6","\ud835\udff7","\ud835\udff8","\ud835\udff9","\ud835\udffa","\ud835\udffb","\ud835\udffc","\ud835\udffd","\ud835\udffe","\ud835\udfff"],type:"number",role:"integer",font:"monospace"},{set:me,type:"number",role:"float"},{set:ge,type:"number",role:"othernumber"},{set:ue,type:"operator",role:"addition"},{set:he,type:"operator",role:"multiplication"},{set:["\xaf","-","\u2052","\u207b","\u208b","\u2212","\u2216","\u2238","\u2242","\u2296","\u229f","\u2796","\u2a29","\u2a2a","\u2a2b","\u2a2c","\u2a3a","\u2a41","\ufe63","\uff0d","\u2010","\u2011"],type:"operator",role:"subtraction"},{set:["/","\xf7","\u2044","\u2215","\u2298","\u27cc","\u29bc","\u2a38"],type:"operator",role:"division"},{set:["\u2200","\u2203","\u2206","\u2207","\u2202","\u2201","\u2204"],type:"operator",role:"prefix operator"},{set:["\ud835\udec1","\ud835\udedb","\ud835\udfca","\ud835\udfcb"],type:"operator",role:"prefix operator",font:"bold"},{set:["\ud835\udefb","\ud835\udf15"],type:"operator",role:"prefix operator",font:"italic"},{set:["\ud835\udf6f","\ud835\udf89"],type:"operator",role:"prefix operator",font:"sans-serif-bold"},{set:["=","~","\u207c","\u208c","\u223c","\u223d","\u2243","\u2245","\u2248","\u224a","\u224b","\u224c","\u224d","\u224e","\u2251","\u2252","\u2253","\u2254","\u2255","\u2256","\u2257","\u2258","\u2259","\u225a","\u225b","\u225c","\u225d","\u225e","\u225f","\u2261","\u2263","\u29e4","\u2a66","\u2a6e","\u2a6f","\u2a70","\u2a71","\u2a72","\u2a73","\u2a74","\u2a75","\u2a76","\u2a77","\u2a78","\u22d5","\u2a6d","\u2a6a","\u2a6b","\u2a6c","\ufe66","\uff1d","\u2a6c","\u229c","\u2237"],type:"relation",role:"equality"},{set:["<",">","\u2241","\u2242","\u2244","\u2246","\u2247","\u2249","\u224f","\u2250","\u2260","\u2262","\u2264","\u2265","\u2266","\u2267","\u2268","\u2269","\u226a","\u226b","\u226c","\u226d","\u226e","\u226f","\u2270","\u2271","\u2272","\u2273","\u2274","\u2275","\u2276","\u2277","\u2278","\u2279","\u227a","\u227b","\u227c","\u227d","\u227e","\u227f","\u2280","\u2281","\u22d6","\u22d7","\u22d8","\u22d9","\u22da","\u22db","\u22dc","\u22dd","\u22de","\u22df","\u22e0","\u22e1","\u22e6","\u22e7","\u22e8","\u22e9","\u2a79","\u2a7a","\u2a7b","\u2a7c","\u2a7d","\u2a7e","\u2a7f","\u2a80","\u2a81","\u2a82","\u2a83","\u2a84","\u2a85","\u2a86","\u2a87","\u2a88","\u2a89","\u2a8a","\u2a8b","\u2a8c","\u2a8d","\u2a8e","\u2a8f","\u2a90","\u2a91","\u2a92","\u2a93","\u2a94","\u2a95","\u2a96","\u2a97","\u2a98","\u2a99","\u2a9a","\u2a9b","\u2a9c","\u2a9d","\u2a9e","\u2a9f","\u2aa0","\u2aa1","\u2aa2","\u2aa3","\u2aa4","\u2aa5","\u2aa6","\u2aa7","\u2aa8","\u2aa9","\u2aaa","\u2aab","\u2aac","\u2aad","\u2aae","\u2aaf","\u2ab0","\u2ab1","\u2ab2","\u2ab3","\u2ab4","\u2ab5","\u2ab6","\u2ab7","\u2ab8","\u2ab9","\u2aba","\u2abb","\u2abc","\u2af7","\u2af8","\u2af9","\u2afa","\u29c0","\u29c1","\ufe64","\ufe65","\uff1c","\uff1e"],type:"relation",role:"inequality"},{set:["\u22e2","\u22e3","\u22e4","\u22e5","\u2282","\u2283","\u2284","\u2285","\u2286","\u2287","\u2288","\u2289","\u228a","\u228b","\u228f","\u2290","\u2291","\u2292","\u2abd","\u2abe","\u2abf","\u2ac0","\u2ac1","\u2ac2","\u2ac3","\u2ac4","\u2ac5","\u2ac6","\u2ac7","\u2ac8","\u2ac9","\u2aca","\u2acb","\u2acc","\u2acd","\u2ace","\u2acf","\u2ad0","\u2ad1","\u2ad2","\u2ad3","\u2ad4","\u2ad5","\u2ad6","\u2ad7","\u2ad8","\u22d0","\u22d1","\u22ea","\u22eb","\u22ec","\u22ed","\u22b2","\u22b3","\u22b4","\u22b5"],type:"relation",role:"set"},{set:["\u22a2","\u22a3","\u22a6","\u22a7","\u22a8","\u22a9","\u22aa","\u22ab","\u22ac","\u22ad","\u22ae","\u22af","\u2ade","\u2adf","\u2ae0","\u2ae1","\u2ae2","\u2ae3","\u2ae4","\u2ae5","\u2ae6","\u2ae7","\u2ae8","\u2ae9","\u2aea","\u2aeb","\u2aec","\u2aed"],type:"relation",role:"unknown"},{set:["\u2190","\u2191","\u2192","\u2193","\u2194","\u2195","\u2196","\u2197","\u2198","\u2199","\u219a","\u219b","\u219c","\u219d","\u219e","\u219f","\u21a0","\u21a1","\u21a2","\u21a3","\u21a4","\u21a5","\u21a6","\u21a7","\u21a8","\u21a9","\u21aa","\u21ab","\u21ac","\u21ad","\u21ae","\u21af","\u21b0","\u21b1","\u21b2","\u21b3","\u21b4","\u21b5","\u21b6","\u21b7","\u21b8","\u21b9","\u21ba","\u21bb","\u21c4","\u21c5","\u21c6","\u21c7","\u21c8","\u21c9","\u21ca","\u21cd","\u21ce","\u21cf","\u21d0","\u21d1","\u21d2","\u21d3","\u21d4","\u21d5","\u21d6","\u21d7","\u21d8","\u21d9","\u21da","\u21db","\u21dc","\u21dd","\u21de","\u21df","\u21e0","\u21e1","\u21e2","\u21e3","\u21e4","\u21e5","\u21e6","\u21e7","\u21e8","\u21e9","\u21ea","\u21eb","\u21ec","\u21ed","\u21ee","\u21ef","\u21f0","\u21f1","\u21f2","\u21f3","\u21f4","\u21f5","\u21f6","\u21f7","\u21f8","\u21f9","\u21fa","\u21fb","\u21fc","\u21fd","\u21fe","\u21ff","\u2301","\u2303","\u2304","\u2324","\u238b","\u2794","\u2798","\u2799","\u279a","\u279b","\u279c","\u279d","\u279e","\u279f","\u27a0","\u27a1","\u27a2","\u27a3","\u27a4","\u27a5","\u27a6","\u27a7","\u27a8","\u27a9","\u27aa","\u27ab","\u27ac","\u27ad","\u27ae","\u27af","\u27b1","\u27b2","\u27b3","\u27b4","\u27b5","\u27b6","\u27b7","\u27b8","\u27b9","\u27ba","\u27bb","\u27bc","\u27bd","\u27be","\u27f0","\u27f1","\u27f2","\u27f3","\u27f4","\u27f5","\u27f6","\u27f7","\u27f8","\u27f9","\u27fa","\u27fb","\u27fc","\u27fd","\u27fe","\u27ff","\u2900","\u2901","\u2902","\u2903","\u2904","\u2905","\u2906","\u2907","\u2908","\u2909","\u290a","\u290b","\u290c","\u290d","\u290e","\u290f","\u2910","\u2911","\u2912","\u2913","\u2914","\u2915","\u2916","\u2917","\u2918","\u2919","\u291a","\u291b","\u291c","\u291d","\u291e","\u291f","\u2920","\u2921","\u2922","\u2923","\u2924","\u2925","\u2926","\u2927","\u2928","\u2929","\u292a","\u292d","\u292e","\u292f","\u2930","\u2931","\u2932","\u2933","\u2934","\u2935","\u2936","\u2937","\u2938","\u2939","\u293a","\u293b","\u293c","\u293d","\u293e","\u293f","\u2940","\u2941","\u2942","\u2943","\u2944","\u2945","\u2946","\u2947","\u2948","\u2949","\u2970","\u2971","\u2972","\u2973","\u2974","\u2975","\u2976","\u2977","\u2978","\u2979","\u297a","\u297b","\u29b3","\u29b4","\u29bd","\u29ea","\u29ec","\u29ed","\u2a17","\u2b00","\u2b01","\u2b02","\u2b03","\u2b04","\u2b05","\u2b06","\u2b07","\u2b08","\u2b09","\u2b0a","\u2b0b","\u2b0c","\u2b0d","\u2b0e","\u2b0f","\u2b10","\u2b11","\u2b30","\u2b31","\u2b32","\u2b33","\u2b34","\u2b35","\u2b36","\u2b37","\u2b38","\u2b39","\u2b3a","\u2b3b","\u2b3c","\u2b3d","\u2b3e","\u2b3f","\u2b40","\u2b41","\u2b42","\u2b43","\u2b44","\u2b45","\u2b46","\u2b47","\u2b48","\u2b49","\u2b4a","\u2b4b","\u2b4c","\uffe9","\uffea","\uffeb","\uffec","\u21bc","\u21bd","\u21be","\u21bf","\u21c0","\u21c1","\u21c2","\u21c3","\u21cb","\u21cc","\u294a","\u294b","\u294c","\u294d","\u294e","\u294f","\u2950","\u2951","\u2952","\u2953","\u2954","\u2955","\u2956","\u2957","\u2958","\u2959","\u295a","\u295b","\u295c","\u295d","\u295e","\u295f","\u2960","\u2961","\u2962","\u2963","\u2964","\u2965","\u2966","\u2967","\u2968","\u2969","\u296a","\u296b","\u296c","\u296d","\u296e","\u296f","\u297c","\u297d","\u297e","\u297f"],type:"relation",role:"arrow"},{set:["\u2208","\u220a","\u22f2","\u22f3","\u22f4","\u22f5","\u22f6","\u22f7","\u22f8","\u22f9","\u22ff"],type:"operator",role:"element"},{set:["\u2209"],type:"operator",role:"nonelement"},{set:["\u220b","\u220d","\u22fa","\u22fb","\u22fc","\u22fd","\u22fe"],type:"operator",role:"reelement"},{set:["\u220c"],type:"operator",role:"renonelement"},{set:["\u2140","\u220f","\u2210","\u2211","\u22c0","\u22c1","\u22c2","\u22c3","\u2a00","\u2a01","\u2a02","\u2a03","\u2a04","\u2a05","\u2a06","\u2a07","\u2a08","\u2a09","\u2a0a","\u2a0b","\u2afc","\u2aff"],type:"largeop",role:"sum"},{set:["\u222b","\u222c","\u222d","\u222e","\u222f","\u2230","\u2231","\u2232","\u2233","\u2a0c","\u2a0d","\u2a0e","\u2a0f","\u2a10","\u2a11","\u2a12","\u2a13","\u2a14","\u2a15","\u2a16","\u2a17","\u2a18","\u2a19","\u2a1a","\u2a1b","\u2a1c"],type:"largeop",role:"integral"},{set:["\u221f","\u2220","\u2221","\u2222","\u22be","\u22bf","\u25b3","\u25b7","\u25bd","\u25c1"],type:"operator",role:"geometry"},{set:["inf","lim","liminf","limsup","max","min","sup","injlim","projlim","inj lim","proj lim"],type:"function",role:"limit function"},{set:Se,type:"function",role:"prefix function"},{set:["mod","rem"],type:"operator",role:"prefix function"}],Ne=function(){const e={};for(let t,n=0;t=be[n];n++)t.set.forEach((function(n){e[n]={role:t.role||"unknown",type:t.type||"unknown",font:t.font||"unknown"}}));return e}();t.equal=function(e,t){return e.type===t.type&&e.role===t.role&&e.font===t.font},t.lookupType=function(e){var t;return(null===(t=Ne[e])||void 0===t?void 0:t.type)||"unknown"},t.lookupRole=function(e){var t;return(null===(t=Ne[e])||void 0===t?void 0:t.role)||"unknown"},t.lookupMeaning=function(e){return Ne[e]||{role:"unknown",type:"unknown",font:"unknown"}},t.invisibleTimes=function(){return pe},t.invisiblePlus=function(){return de},t.invisibleComma=function(){return n},t.functionApplication=function(){return fe},t.isMatchingFence=function(e,t){return-1!==h.indexOf(e)||-1!==p.indexOf(e)?e===t:s[e]===t||a[e]===t},t.isEmbellishedType=function(e){return"operator"===e||"relation"===e||"fence"===e||"punctuation"===e};const Ee=new Map;function ye(e,t){return`${e} ${t}`}function Ae(e,t,n=""){for(const r of t)Ee.set(ye(e,r),n||e)}Ae("d",["d","\u2146","\uff44","\ud835\udc1d","\ud835\udc51","\ud835\udcb9","\ud835\udced","\ud835\udd21","\ud835\udd55","\ud835\udd89","\ud835\uddbd","\ud835\uddf1","\ud835\ude25","\ud835\ude8d"]),Ae("bar",i),Ae("tilde",o),t.lookupSecondary=function(e,t){return Ee.get(ye(e,t))}},7405:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.SemanticMeaningCollator=t.SemanticNodeCollator=t.SemanticDefault=void 0;const r=n(4020),i=n(178);class o{constructor(){this.map={}}static key(e,t){return t?e+":"+t:e}add(e,t){this.map[o.key(e,t.font)]=t}addNode(e){this.add(e.textContent,e.meaning())}retrieve(e,t){return this.map[o.key(e,t)]}retrieveNode(e){return this.retrieve(e.textContent,e.font)}size(){return Object.keys(this.map).length}}t.SemanticDefault=o;class s{constructor(){this.map={}}add(e,t){const n=this.map[e];n?n.push(t):this.map[e]=[t]}retrieve(e,t){return this.map[o.key(e,t)]}retrieveNode(e){return this.retrieve(e.textContent,e.font)}copy(){const e=this.copyCollator();for(const t in this.map)e.map[t]=this.map[t];return e}minimize(){for(const e in this.map)1===this.map[e].length&&delete this.map[e]}minimalCollator(){const e=this.copy();for(const t in e.map)1===e.map[t].length&&delete e.map[t];return e}isMultiValued(){for(const e in this.map)if(this.map[e].length>1)return!0;return!1}isEmpty(){return!Object.keys(this.map).length}}class a extends s{copyCollator(){return new a}add(e,t){const n=o.key(e,t.font);super.add(n,t)}addNode(e){this.add(e.textContent,e)}toString(){const e=[];for(const t in this.map){const n=Array(t.length+3).join(" "),r=this.map[t],i=[];for(let e,t=0;e=r[t];t++)i.push(e.toString());e.push(t+": "+i.join("\n"+n))}return e.join("\n")}collateMeaning(){const e=new c;for(const t in this.map)e.map[t]=this.map[t].map((function(e){return e.meaning()}));return e}}t.SemanticNodeCollator=a;class c extends s{copyCollator(){return new c}add(e,t){const n=this.retrieve(e,t.font);if(!n||!n.find((function(e){return r.equal(e,t)}))){const n=o.key(e,t.font);super.add(n,t)}}addNode(e){this.add(e.textContent,e.meaning())}toString(){const e=[];for(const t in this.map){const n=Array(t.length+3).join(" "),r=this.map[t],i=[];for(let e,t=0;e=r[t];t++)i.push("{type: "+e.type+", role: "+e.role+", font: "+e.font+"}");e.push(t+": "+i.join("\n"+n))}return e.join("\n")}reduce(){for(const e in this.map)1!==this.map[e].length&&(this.map[e]=(0,i.reduce)(this.map[e]))}default(){const e=new o;for(const t in this.map)1===this.map[t].length&&(e.map[t]=this.map[t][0]);return e}newDefault(){const e=this.default();this.reduce();const t=this.default();return e.size()!==t.size()?t:null}}t.SemanticMeaningCollator=c},5958:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.SemanticMultiHeuristic=t.SemanticTreeHeuristic=t.SemanticAbstractHeuristic=void 0;class n{constructor(e,t,n=(e=>!1)){this.name=e,this.apply=t,this.applicable=n}}t.SemanticAbstractHeuristic=n;t.SemanticTreeHeuristic=class extends n{};t.SemanticMultiHeuristic=class extends n{}},2721:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.lookup=t.run=t.add=t.blacklist=t.flags=t.updateFactory=t.factory=void 0,t.factory=null,t.updateFactory=function(e){t.factory=e};const n=new Map;function r(e){return n.get(e)}t.flags={combine_juxtaposition:!0,convert_juxtaposition:!0,multioperator:!0},t.blacklist={},t.add=function(e){const r=e.name;n.set(r,e),t.flags[r]||(t.flags[r]=!1)},t.run=function(e,n,i){const o=r(e);return o&&!t.blacklist[e]&&(t.flags[e]||o.applicable(n))?o.apply(n):i?i(n):n},t.lookup=r},7103:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});const r=n(1984),i=n(4886),o=n(4020),s=n(2721),a=n(5958),c=n(6161),l=n(7793),u=n(8901);function d(e,t,n){let r=null;if(!e.length)return r;const i=n[n.length-1],o=i&&i.length,s=t&&t.length,a=l.default.getInstance();if(o&&s){if("infixop"===t[0].type&&"implicit"===t[0].role)return r=e.pop(),i.push(a.postfixNode_(i.pop(),e)),r;r=e.shift();const n=a.prefixNode_(t.shift(),e);return t.unshift(n),r}return o?(i.push(a.postfixNode_(i.pop(),e)),r):(s&&t.unshift(a.prefixNode_(t.shift(),e)),r)}function h(e,t,n){if(!t.length)return e;const i=e.pop(),o=t.shift(),a=n.shift();if(c.isImplicitOp(o)){r.Debugger.getInstance().output("Juxta Heuristic Case 2");const s=(i?[i,o]:[o]).concat(a);return h(e.concat(s),t,n)}if(!i)return r.Debugger.getInstance().output("Juxta Heuristic Case 3"),h([o].concat(a),t,n);const l=a.shift();if(!l){r.Debugger.getInstance().output("Juxta Heuristic Case 9");const a=s.factory.makeBranchNode("infixop",[i,t.shift()],[o],o.textContent);return a.role="implicit",s.run("combine_juxtaposition",a),t.unshift(a),h(e,t,n)}if(c.isOperator(i)||c.isOperator(l))return r.Debugger.getInstance().output("Juxta Heuristic Case 4"),h(e.concat([i,o,l]).concat(a),t,n);let u=null;return c.isImplicitOp(i)&&c.isImplicitOp(l)?(r.Debugger.getInstance().output("Juxta Heuristic Case 5"),i.contentNodes.push(o),i.contentNodes=i.contentNodes.concat(l.contentNodes),i.childNodes.push(l),i.childNodes=i.childNodes.concat(l.childNodes),l.childNodes.forEach((e=>e.parent=i)),o.parent=i,i.addMathmlNodes(o.mathml),i.addMathmlNodes(l.mathml),u=i):c.isImplicitOp(i)?(r.Debugger.getInstance().output("Juxta Heuristic Case 6"),i.contentNodes.push(o),i.childNodes.push(l),l.parent=i,o.parent=i,i.addMathmlNodes(o.mathml),i.addMathmlNodes(l.mathml),u=i):c.isImplicitOp(l)?(r.Debugger.getInstance().output("Juxta Heuristic Case 7"),l.contentNodes.unshift(o),l.childNodes.unshift(i),i.parent=l,o.parent=l,l.addMathmlNodes(o.mathml),l.addMathmlNodes(i.mathml),u=l):(r.Debugger.getInstance().output("Juxta Heuristic Case 8"),u=s.factory.makeBranchNode("infixop",[i,l],[o],o.textContent),u.role="implicit"),e.push(u),h(e.concat(a),t,n)}s.add(new a.SemanticTreeHeuristic("combine_juxtaposition",(function(e){for(let t,n=e.childNodes.length-1;t=e.childNodes[n];n--)c.isImplicitOp(t)&&!t.nobreaking&&(e.childNodes.splice(n,1,...t.childNodes),e.contentNodes.splice(n,0,...t.contentNodes),t.childNodes.concat(t.contentNodes).forEach((function(t){t.parent=e})),e.addMathmlNodes(t.mathml));return e}))),s.add(new a.SemanticTreeHeuristic("propagateSimpleFunction",(e=>("infixop"!==e.type&&"fraction"!==e.type||!e.childNodes.every(c.isSimpleFunction)||(e.role="composed function"),e)),(e=>"clearspeak"===i.default.getInstance().domain))),s.add(new a.SemanticTreeHeuristic("simpleNamedFunction",(e=>("unit"!==e.role&&-1!==["f","g","h","F","G","H"].indexOf(e.textContent)&&(e.role="simple function"),e)),(e=>"clearspeak"===i.default.getInstance().domain))),s.add(new a.SemanticTreeHeuristic("propagateComposedFunction",(e=>("fenced"===e.type&&"composed function"===e.childNodes[0].role&&(e.role="composed function"),e)),(e=>"clearspeak"===i.default.getInstance().domain))),s.add(new a.SemanticTreeHeuristic("multioperator",(e=>{if("unknown"!==e.role||e.textContent.length<=1)return;const t=[...e.textContent].map(o.lookupMeaning).reduce((function(e,t){return e&&t.role&&"unknown"!==t.role&&t.role!==e?"unknown"===e?t.role:null:e}),"unknown");t&&(e.role=t)}))),s.add(new a.SemanticMultiHeuristic("convert_juxtaposition",(e=>{let t=u.partitionNodes(e,(function(e){return e.textContent===o.invisibleTimes()&&"operator"===e.type}));t=t.rel.length?function(e){const t=[],n=[];let r=e.comp.shift(),i=null,o=[];for(;e.comp.length;)if(o=[],r.length)i&&t.push(i),n.push(r),i=e.rel.shift(),r=e.comp.shift();else{for(i&&o.push(i);!r.length&&e.comp.length;)r=e.comp.shift(),o.push(e.rel.shift());i=d(o,r,n)}o.length||r.length?(t.push(i),n.push(r)):(o.push(i),d(o,r,n));return{rel:t,comp:n}}(t):t,e=t.comp[0];for(let n,r,i=1;n=t.comp[i],r=t.rel[i-1];i++)e.push(r),e=e.concat(n);return t=u.partitionNodes(e,(function(e){return e.textContent===o.invisibleTimes()&&("operator"===e.type||"infixop"===e.type)})),t.rel.length?h(t.comp.shift(),t.rel,t.comp):e}))),s.add(new a.SemanticTreeHeuristic("simple2prefix",(e=>(e.textContent.length>1&&!e.textContent[0].match(/[A-Z]/)&&(e.role="prefix function"),e)),(e=>"braille"===i.default.getInstance().modality&&"identifier"===e.type))),s.add(new a.SemanticTreeHeuristic("detect_cycle",(e=>{e.type="matrix",e.role="cycle";const t=e.childNodes[0];return t.type="row",t.role="cycle",t.textContent="",t.contentNodes=[],e}),(e=>"fenced"===e.type&&"infixop"===e.childNodes[0].type&&"implicit"===e.childNodes[0].role&&e.childNodes[0].childNodes.every((function(e){return"number"===e.type}))&&e.childNodes[0].contentNodes.every((function(e){return"space"===e.role})))))},8122:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.SemanticMathml=void 0;const r=n(6671),i=n(6098),o=n(6161),s=n(7793),a=n(8901);class c extends i.SemanticAbstractParser{constructor(){super("MathML"),this.parseMap_={SEMANTICS:this.semantics_.bind(this),MATH:this.rows_.bind(this),MROW:this.rows_.bind(this),MPADDED:this.rows_.bind(this),MSTYLE:this.rows_.bind(this),MFRAC:this.fraction_.bind(this),MSUB:this.limits_.bind(this),MSUP:this.limits_.bind(this),MSUBSUP:this.limits_.bind(this),MOVER:this.limits_.bind(this),MUNDER:this.limits_.bind(this),MUNDEROVER:this.limits_.bind(this),MROOT:this.root_.bind(this),MSQRT:this.sqrt_.bind(this),MTABLE:this.table_.bind(this),MLABELEDTR:this.tableLabeledRow_.bind(this),MTR:this.tableRow_.bind(this),MTD:this.tableCell_.bind(this),MS:this.text_.bind(this),MTEXT:this.text_.bind(this),MSPACE:this.space_.bind(this),"ANNOTATION-XML":this.text_.bind(this),MI:this.identifier_.bind(this),MN:this.number_.bind(this),MO:this.operator_.bind(this),MFENCED:this.fenced_.bind(this),MENCLOSE:this.enclosed_.bind(this),MMULTISCRIPTS:this.multiscripts_.bind(this),ANNOTATION:this.empty_.bind(this),NONE:this.empty_.bind(this),MACTION:this.action_.bind(this)};const e={type:"identifier",role:"numbersetletter",font:"double-struck"};["C","H","N","P","Q","R","Z","\u2102","\u210d","\u2115","\u2119","\u211a","\u211d","\u2124"].forEach((t=>this.getFactory().defaultMap.add(t,e)).bind(this))}static getAttribute_(e,t,n){if(!e.hasAttribute(t))return n;const r=e.getAttribute(t);return r.match(/^\s*$/)?null:r}parse(e){s.default.getInstance().setNodeFactory(this.getFactory());const t=r.toArray(e.childNodes),n=r.tagName(e),i=this.parseMap_[n],o=(i||this.dummy_.bind(this))(e,t);return a.addAttributes(o,e),-1!==["MATH","MROW","MPADDED","MSTYLE","SEMANTICS"].indexOf(n)||(o.mathml.unshift(e),o.mathmlTree=e),o}semantics_(e,t){return t.length?this.parse(t[0]):this.getFactory().makeEmptyNode()}rows_(e,t){const n=e.getAttribute("semantics");if(n&&n.match("bspr_"))return s.default.proof(e,n,this.parseList.bind(this));let r;return 1===(t=a.purgeNodes(t)).length?(r=this.parse(t[0]),"empty"!==r.type||r.mathmlTree||(r.mathmlTree=e)):r=s.default.getInstance().row(this.parseList(t)),r.mathml.unshift(e),r}fraction_(e,t){if(!t.length)return this.getFactory().makeEmptyNode();const n=this.parse(t[0]),r=t[1]?this.parse(t[1]):this.getFactory().makeEmptyNode();return s.default.getInstance().fractionLikeNode(n,r,e.getAttribute("linethickness"),"true"===e.getAttribute("bevelled"))}limits_(e,t){return s.default.getInstance().limitNode(r.tagName(e),this.parseList(t))}root_(e,t){return t[1]?this.getFactory().makeBranchNode("root",[this.parse(t[1]),this.parse(t[0])],[]):this.sqrt_(e,t)}sqrt_(e,t){const n=this.parseList(a.purgeNodes(t));return this.getFactory().makeBranchNode("sqrt",[s.default.getInstance().row(n)],[])}table_(e,t){const n=e.getAttribute("semantics");if(n&&n.match("bspr_"))return s.default.proof(e,n,this.parseList.bind(this));const r=this.getFactory().makeBranchNode("table",this.parseList(t),[]);return r.mathmlTree=e,s.default.tableToMultiline(r),r}tableRow_(e,t){const n=this.getFactory().makeBranchNode("row",this.parseList(t),[]);return n.role="table",n}tableLabeledRow_(e,t){if(!t.length)return this.tableRow_(e,t);const n=this.parse(t[0]);n.role="label";const r=this.getFactory().makeBranchNode("row",this.parseList(t.slice(1)),[n]);return r.role="table",r}tableCell_(e,t){const n=this.parseList(a.purgeNodes(t));let r;r=n.length?1===n.length&&o.isType(n[0],"empty")?n:[s.default.getInstance().row(n)]:[];const i=this.getFactory().makeBranchNode("cell",r,[]);return i.role="table",i}space_(e,t){const n=e.getAttribute("width"),i=n&&n.match(/[a-z]*$/);if(!i)return this.empty_(e,t);const o=i[0],a=parseFloat(n.slice(0,i.index)),c={cm:.4,pc:.5,em:.5,ex:1,in:.15,pt:5,mm:5}[o];if(!c||isNaN(a)||a1?this.parse(t[1]):this.getFactory().makeUnprocessed(e)}dummy_(e,t){const n=this.getFactory().makeUnprocessed(e);return n.role=e.tagName,n.textContent=e.textContent,n}leaf_(e,t){if(1===t.length&&t[0].nodeType!==r.NodeType.TEXT_NODE){const n=this.getFactory().makeUnprocessed(e);return n.role=t[0].tagName,a.addAttributes(n,t[0]),n}return this.getFactory().makeLeafNode(e.textContent,s.default.getInstance().font(e.getAttribute("mathvariant")))}}t.SemanticMathml=c},9444:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.SemanticNode=void 0;const r=n(6671),i=n(4020),o=n(8901);class s{constructor(e){this.id=e,this.mathml=[],this.parent=null,this.type="unknown",this.role="unknown",this.font="unknown",this.embellished=null,this.fencePointer="",this.childNodes=[],this.textContent="",this.mathmlTree=null,this.contentNodes=[],this.annotation={},this.attributes={},this.nobreaking=!1}static fromXml(e){const t=parseInt(e.getAttribute("id"),10),n=new s(t);return n.type=e.tagName,s.setAttribute(n,e,"role"),s.setAttribute(n,e,"font"),s.setAttribute(n,e,"embellished"),s.setAttribute(n,e,"fencepointer","fencePointer"),e.getAttribute("annotation")&&n.parseAnnotation(e.getAttribute("annotation")),o.addAttributes(n,e),s.processChildren(n,e),n}static setAttribute(e,t,n,r){r=r||n;const i=t.getAttribute(n);i&&(e[r]=i)}static processChildren(e,t){for(const n of r.toArray(t.childNodes)){if(n.nodeType===r.NodeType.TEXT_NODE){e.textContent=n.textContent;continue}const t=r.toArray(n.childNodes).map(s.fromXml);t.forEach((t=>t.parent=e)),"CONTENT"===r.tagName(n)?e.contentNodes=t:e.childNodes=t}}querySelectorAll(e){let t=[];for(let n,r=0;n=this.childNodes[r];r++)t=t.concat(n.querySelectorAll(e));for(let n,r=0;n=this.contentNodes[r];r++)t=t.concat(n.querySelectorAll(e));return e(this)&&t.unshift(this),t}xml(e,t){const n=function(n,r){const i=r.map((function(n){return n.xml(e,t)})),o=e.createElementNS("",n);for(let e,t=0;e=i[t];t++)o.appendChild(e);return o},r=e.createElementNS("",this.type);return t||this.xmlAttributes(r),r.textContent=this.textContent,this.contentNodes.length>0&&r.appendChild(n("content",this.contentNodes)),this.childNodes.length>0&&r.appendChild(n("children",this.childNodes)),r}toString(e=!1){const t=r.parseInput("");return r.serializeXml(this.xml(t,e))}allAttributes(){const e=[];return e.push(["role",this.role]),"unknown"!==this.font&&e.push(["font",this.font]),Object.keys(this.annotation).length&&e.push(["annotation",this.xmlAnnotation()]),this.embellished&&e.push(["embellished",this.embellished]),this.fencePointer&&e.push(["fencepointer",this.fencePointer]),e.push(["id",this.id.toString()]),e}xmlAnnotation(){const e=[];for(const t in this.annotation)this.annotation[t].forEach((function(n){e.push(t+":"+n)}));return e.join(";")}toJson(){const e={};e.type=this.type;const t=this.allAttributes();for(let n,r=0;n=t[r];r++)e[n[0]]=n[1].toString();return this.textContent&&(e.$t=this.textContent),this.childNodes.length&&(e.children=this.childNodes.map((function(e){return e.toJson()}))),this.contentNodes.length&&(e.content=this.contentNodes.map((function(e){return e.toJson()}))),e}updateContent(e,t){const n=t?e.replace(/^[ \f\n\r\t\v\u200b]*/,"").replace(/[ \f\n\r\t\v\u200b]*$/,""):e.trim();if(e=e&&!n?e:n,this.textContent===e)return;const r=(0,i.lookupMeaning)(e);this.textContent=e,this.role=r.role,this.type=r.type,this.font=r.font}addMathmlNodes(e){for(let t,n=0;t=e[n];n++)-1===this.mathml.indexOf(t)&&this.mathml.push(t)}appendChild(e){this.childNodes.push(e),this.addMathmlNodes(e.mathml),e.parent=this}replaceChild(e,t){const n=this.childNodes.indexOf(e);if(-1===n)return;e.parent=null,t.parent=this,this.childNodes[n]=t;const r=e.mathml.filter((function(e){return-1===t.mathml.indexOf(e)})),i=t.mathml.filter((function(t){return-1===e.mathml.indexOf(t)}));this.removeMathmlNodes(r),this.addMathmlNodes(i)}appendContentNode(e){e&&(this.contentNodes.push(e),this.addMathmlNodes(e.mathml),e.parent=this)}removeContentNode(e){if(e){const t=this.contentNodes.indexOf(e);-1!==t&&this.contentNodes.slice(t,1)}}equals(e){if(!e)return!1;if(this.type!==e.type||this.role!==e.role||this.textContent!==e.textContent||this.childNodes.length!==e.childNodes.length||this.contentNodes.length!==e.contentNodes.length)return!1;for(let t,n,r=0;t=this.childNodes[r],n=e.childNodes[r];r++)if(!t.equals(n))return!1;for(let t,n,r=0;t=this.contentNodes[r],n=e.contentNodes[r];r++)if(!t.equals(n))return!1;return!0}displayTree(){console.info(this.displayTree_(0))}addAnnotation(e,t){t&&this.addAnnotation_(e,t)}getAnnotation(e){const t=this.annotation[e];return t||[]}hasAnnotation(e,t){const n=this.annotation[e];return!!n&&-1!==n.indexOf(t)}parseAnnotation(e){const t=e.split(";");for(let e=0,n=t.length;e1)return!1;const n=t[0];if("infixop"===n.type){if("implicit"!==n.role)return!1;if(n.childNodes.some((e=>o(e,"infixop"))))return!1}return!0},t.isPrefixFunctionBoundary=function(e){return l(e)&&!a(e,"division")||o(e,"appl")||c(e)},t.isBigOpBoundary=function(e){return l(e)||c(e)},t.isIntegralDxBoundary=function(e,t){return!!t&&o(t,"identifier")&&r.lookupSecondary("d",e.textContent)},t.isIntegralDxBoundarySingle=function(e){if(o(e,"identifier")){const t=e.textContent[0];return t&&e.textContent[1]&&r.lookupSecondary("d",t)}return!1},t.isGeneralFunctionBoundary=c,t.isEmbellished=function(e){return e.embellished?e.embellished:r.isEmbellishedType(e.type)?e.type:null},t.isOperator=l,t.isRelation=u,t.isPunctuation=d,t.isFence=h,t.isElligibleEmbellishedFence=function(e){return!(!e||!h(e))&&(!e.embellished||p(e))},t.isTableOrMultiline=f,t.tableIsMatrixOrVector=function(e){return!!e&&m(e)&&f(e.childNodes[0])},t.isFencedElement=m,t.tableIsCases=function(e,t){return t.length>0&&a(t[t.length-1],"openfence")},t.tableIsMultiline=function(e){return e.childNodes.every((function(e){return e.childNodes.length<=1}))},t.lineIsLabelled=function(e){return o(e,"line")&&e.contentNodes.length&&a(e.contentNodes[0],"label")},t.isBinomial=function(e){return 2===e.childNodes.length},t.isLimitBase=function e(t){return o(t,"largeop")||o(t,"limboth")||o(t,"limlower")||o(t,"limupper")||o(t,"function")&&a(t,"limit function")||(o(t,"overscore")||o(t,"underscore"))&&e(t.childNodes[0])},t.isSimpleFunctionHead=function(e){return"identifier"===e.type||"latinletter"===e.role||"greekletter"===e.role||"otherletter"===e.role},t.singlePunctAtPosition=function(e,t,n){return 1===t.length&&("punctuation"===e[n].type||"punctuation"===e[n].embellished)&&e[n]===t[0]},t.isSimpleFunction=function(e){return o(e,"identifier")&&a(e,"simple function")},t.isLeftBrace=g,t.isRightBrace=S,t.isSetNode=function(e){return g(e.contentNodes[0])&&S(e.contentNodes[1])},t.illegalSingleton_=["punctuation","punctuated","relseq","multirel","table","multiline","cases","inference"],t.scriptedElement_=["limupper","limlower","limboth","subscript","superscript","underscore","overscore","tensor"],t.isSingletonSetContent=function e(n){const r=n.type;return-1===t.illegalSingleton_.indexOf(r)&&("infixop"!==r||"implicit"===n.role)&&("fenced"===r?"leftright"!==n.role||e(n.childNodes[0]):-1===t.scriptedElement_.indexOf(r)||e(n.childNodes[0]))},t.isNumber=b,t.isUnitCounter=function(e){return b(e)||"vulgar"===e.role||"mixed"===e.role},t.isPureUnit=function(e){const t=e.childNodes;return"unit"===e.role&&(!t.length||"unit"===t[0].role)},t.isImplicit=function(e){return"implicit"===e.role||"unit"===e.role&&!!e.contentNodes.length&&e.contentNodes[0].textContent===r.invisibleTimes()},t.isImplicitOp=function(e){return"infixop"===e.type&&"implicit"===e.role},t.isNeutralFence=N,t.compareNeutralFences=function(e,t){return N(e)&&N(t)&&(0,i.getEmbellishedInner)(e).textContent===(0,i.getEmbellishedInner)(t).textContent},t.elligibleLeftNeutral=function(e){return!!N(e)&&(!e.embellished||"superscript"!==e.type&&"subscript"!==e.type&&("tensor"!==e.type||"empty"===e.childNodes[3].type&&"empty"===e.childNodes[4].type))},t.elligibleRightNeutral=function(e){return!!N(e)&&(!e.embellished||("tensor"!==e.type||"empty"===e.childNodes[1].type&&"empty"===e.childNodes[2].type))},t.isMembership=function(e){return["element","nonelement","reelement","renonelement"].includes(e.role)}},7793:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});const r=n(6671),i=n(4020),o=n(2721),s=n(4790),a=n(6161),c=n(8901);class l{constructor(){this.funcAppls={},this.factory_=new s.SemanticNodeFactory,o.updateFactory(this.factory_)}static getInstance(){return l.instance=l.instance||new l,l.instance}static tableToMultiline(e){if(a.tableIsMultiline(e)){e.type="multiline";for(let t,n=0;t=e.childNodes[n];n++)l.rowToLine_(t,"multiline");1===e.childNodes.length&&!a.lineIsLabelled(e.childNodes[0])&&a.isFencedElement(e.childNodes[0].childNodes[0])&&l.tableToMatrixOrVector_(l.rewriteFencedLine_(e)),l.binomialForm_(e),l.classifyMultiline(e)}else l.classifyTable(e)}static number(e){"unknown"!==e.type&&"identifier"!==e.type||(e.type="number"),l.numberRole_(e),l.exprFont_(e)}static classifyMultiline(e){let t=0;const n=e.childNodes.length;let r;for(;t=n)return;const i=r.childNodes[0].role;"unknown"!==i&&e.childNodes.every((function(e){const t=e.childNodes[0];return!t||t.role===i&&(a.isType(t,"relation")||a.isType(t,"relseq"))}))&&(e.role=i)}static classifyTable(e){const t=l.computeColumns_(e);l.classifyByColumns_(e,t,"equality")||l.classifyByColumns_(e,t,"inequality",["equality"])||l.classifyByColumns_(e,t,"arrow")||l.detectCaleyTable(e)}static detectCaleyTable(e){if(!e.mathmlTree)return!1;const t=e.mathmlTree,n=t.getAttribute("columnlines"),r=t.getAttribute("rowlines");return!(!n||!r)&&(!(!l.cayleySpacing(n)||!l.cayleySpacing(r))&&(e.role="cayley",!0))}static cayleySpacing(e){const t=e.split(" ");return("solid"===t[0]||"dashed"===t[0])&&t.slice(1).every((e=>"none"===e))}static proof(e,t,n){const r=l.separateSemantics(t);return l.getInstance().proof(e,r,n)}static findSemantics(e,t,n){const r=null==n?null:n,i=l.getSemantics(e);return!!i&&(!!i[t]&&(null==r||i[t]===r))}static getSemantics(e){const t=e.getAttribute("semantics");return t?l.separateSemantics(t):null}static removePrefix(e){const[,...t]=e.split("_");return t.join("_")}static separateSemantics(e){const t={};return e.split(";").forEach((function(e){const[n,r]=e.split(":");t[l.removePrefix(n)]=r})),t}static matchSpaces_(e,t){for(let n,r=0;n=t[r];r++){const t=e[r].mathmlTree,i=e[r+1].mathmlTree;if(!t||!i)continue;const o=t.nextSibling;if(!o||o===i)continue;const s=l.getSpacer_(o);s&&(n.mathml.push(s),n.mathmlTree=s,n.role="space")}}static getSpacer_(e){if("MSPACE"===r.tagName(e))return e;for(;c.hasEmptyTag(e)&&1===e.childNodes.length;)if(e=e.childNodes[0],"MSPACE"===r.tagName(e))return e;return null}static fenceToPunct_(e){const t=l.FENCE_TO_PUNCT_[e.role];if(t){for(;e.embellished;)e.embellished="punctuation",a.isRole(e,"subsup")||a.isRole(e,"underover")||(e.role=t),e=e.childNodes[0];e.type="punctuation",e.role=t}}static classifyFunction_(e,t){if("appl"===e.type||"bigop"===e.type||"integral"===e.type)return"";if(t[0]&&t[0].textContent===i.functionApplication()){l.getInstance().funcAppls[e.id]=t.shift();let n="simple function";return o.run("simple2prefix",e),"prefix function"!==e.role&&"limit function"!==e.role||(n=e.role),l.propagateFunctionRole_(e,n),"prefix"}const n=l.CLASSIFY_FUNCTION_[e.role];return n||(a.isSimpleFunctionHead(e)?"simple":"")}static propagateFunctionRole_(e,t){if(e){if("infixop"===e.type)return;a.isRole(e,"subsup")||a.isRole(e,"underover")||(e.role=t),l.propagateFunctionRole_(e.childNodes[0],t)}}static getFunctionOp_(e,t){if(t(e))return e;for(let n,r=0;n=e.childNodes[r];r++){const e=l.getFunctionOp_(n,t);if(e)return e}return null}static tableToMatrixOrVector_(e){const t=e.childNodes[0];a.isType(t,"multiline")?l.tableToVector_(e):l.tableToMatrix_(e),e.contentNodes.forEach(t.appendContentNode.bind(t));for(let e,n=0;e=t.childNodes[n];n++)l.assignRoleToRow_(e,l.getComponentRoles_(t));return t.parent=null,t}static tableToVector_(e){const t=e.childNodes[0];t.type="vector",1!==t.childNodes.length?l.binomialForm_(t):l.tableToSquare_(e)}static binomialForm_(e){a.isBinomial(e)&&(e.role="binomial",e.childNodes[0].role="binomial",e.childNodes[1].role="binomial")}static tableToMatrix_(e){const t=e.childNodes[0];t.type="matrix",t.childNodes&&t.childNodes.length>0&&t.childNodes[0].childNodes&&t.childNodes.length===t.childNodes[0].childNodes.length?l.tableToSquare_(e):t.childNodes&&1===t.childNodes.length&&(t.role="rowvector")}static tableToSquare_(e){const t=e.childNodes[0];a.isNeutralFence(e)?t.role="determinant":t.role="squarematrix"}static getComponentRoles_(e){const t=e.role;return t&&"unknown"!==t?t:e.type.toLowerCase()||"unknown"}static tableToCases_(e,t){for(let t,n=0;t=e.childNodes[n];n++)l.assignRoleToRow_(t,"cases");return e.type="cases",e.appendContentNode(t),a.tableIsMultiline(e)&&l.binomialForm_(e),e}static rewriteFencedLine_(e){const t=e.childNodes[0],n=e.childNodes[0].childNodes[0],r=e.childNodes[0].childNodes[0].childNodes[0];return n.parent=e.parent,e.parent=n,r.parent=t,n.childNodes=[e],t.childNodes=[r],n}static rowToLine_(e,t){const n=t||"unknown";a.isType(e,"row")&&(e.type="line",e.role=n,1===e.childNodes.length&&a.isType(e.childNodes[0],"cell")&&(e.childNodes=e.childNodes[0].childNodes,e.childNodes.forEach((function(t){t.parent=e}))))}static assignRoleToRow_(e,t){a.isType(e,"line")?e.role=t:a.isType(e,"row")&&(e.role=t,e.childNodes.forEach((function(e){a.isType(e,"cell")&&(e.role=t)})))}static nextSeparatorFunction_(e){let t;if(e){if(e.match(/^\s+$/))return null;t=e.replace(/\s/g,"").split("").filter((function(e){return e}))}else t=[","];return function(){return t.length>1?t.shift():t[0]}}static numberRole_(e){if("unknown"!==e.role)return;const t=[...e.textContent].filter((e=>e.match(/[^\s]/))),n=t.map(i.lookupMeaning);if(n.every((function(e){return"number"===e.type&&"integer"===e.role||"punctuation"===e.type&&"comma"===e.role})))return e.role="integer",void("0"===t[0]&&e.addAnnotation("general","basenumber"));n.every((function(e){return"number"===e.type&&"integer"===e.role||"punctuation"===e.type}))?e.role="float":e.role="othernumber"}static exprFont_(e){if("unknown"!==e.font)return;const t=[...e.textContent].map(i.lookupMeaning).reduce((function(e,t){return e&&t.font&&"unknown"!==t.font&&t.font!==e?"unknown"===e?t.font:null:e}),"unknown");t&&(e.font=t)}static purgeFences_(e){const t=e.rel,n=e.comp,r=[],i=[];for(;t.length>0;){const e=t.shift();let o=n.shift();a.isElligibleEmbellishedFence(e)?(r.push(e),i.push(o)):(l.fenceToPunct_(e),o.push(e),o=o.concat(n.shift()),n.unshift(o))}return i.push(n.shift()),{rel:r,comp:i}}static rewriteFencedNode_(e){const t=e.contentNodes[0],n=e.contentNodes[1];let r=l.rewriteFence_(e,t);return e.contentNodes[0]=r.fence,r=l.rewriteFence_(r.node,n),e.contentNodes[1]=r.fence,e.contentNodes[0].parent=e,e.contentNodes[1].parent=e,r.node.parent=null,r.node}static rewriteFence_(e,t){if(!t.embellished)return{node:e,fence:t};const n=t.childNodes[0],r=l.rewriteFence_(e,n);return a.isType(t,"superscript")||a.isType(t,"subscript")||a.isType(t,"tensor")?(a.isRole(t,"subsup")||(t.role=e.role),n!==r.node&&(t.replaceChild(n,r.node),n.parent=e),l.propagateFencePointer_(t,n),{node:t,fence:r.fence}):(t.replaceChild(n,r.fence),t.mathmlTree&&-1===t.mathml.indexOf(t.mathmlTree)&&t.mathml.push(t.mathmlTree),{node:r.node,fence:t})}static propagateFencePointer_(e,t){e.fencePointer=t.fencePointer||t.id.toString(),e.embellished=null}static classifyByColumns_(e,t,n,r){return!!(3===t.length&&l.testColumns_(t,1,(e=>l.isPureRelation_(e,n)))||2===t.length&&(l.testColumns_(t,1,(e=>l.isEndRelation_(e,n)||l.isPureRelation_(e,n)))||l.testColumns_(t,0,(e=>l.isEndRelation_(e,n,!0)||l.isPureRelation_(e,n)))))&&(e.role=n,!0)}static isEndRelation_(e,t,n){const r=n?e.childNodes.length-1:0;return a.isType(e,"relseq")&&a.isRole(e,t)&&a.isType(e.childNodes[r],"empty")}static isPureRelation_(e,t){return a.isType(e,"relation")&&a.isRole(e,t)}static computeColumns_(e){const t=[];for(let n,r=0;n=e.childNodes[r];r++)for(let e,r=0;e=n.childNodes[r];r++){t[r]?t[r].push(e):t[r]=[e]}return t}static testColumns_(e,t,n){const r=e[t];return!!r&&(r.some((function(e){return e.childNodes.length&&n(e.childNodes[0])}))&&r.every((function(e){return!e.childNodes.length||n(e.childNodes[0])})))}setNodeFactory(e){l.getInstance().factory_=e,o.updateFactory(l.getInstance().factory_)}getNodeFactory(){return l.getInstance().factory_}identifierNode(e,t,n){if("MathML-Unit"===n)e.type="identifier",e.role="unit";else if(!t&&1===e.textContent.length&&("integer"===e.role||"latinletter"===e.role||"greekletter"===e.role)&&"normal"===e.font)return e.font="italic",o.run("simpleNamedFunction",e);return"unknown"===e.type&&(e.type="identifier"),l.exprFont_(e),o.run("simpleNamedFunction",e)}implicitNode(e){if(e=l.getInstance().getMixedNumbers_(e),1===(e=l.getInstance().combineUnits_(e)).length)return e[0];const t=l.getInstance().implicitNode_(e);return o.run("combine_juxtaposition",t)}text(e,t){return l.exprFont_(e),e.type="text","MS"===t?(e.role="string",e):"MSPACE"===t||e.textContent.match(/^\s*$/)?(e.role="space",e):e}row(e){return 0===(e=e.filter((function(e){return!a.isType(e,"empty")}))).length?l.getInstance().factory_.makeEmptyNode():(e=l.getInstance().getFencesInRow_(e),e=l.getInstance().tablesInRow(e),e=l.getInstance().getPunctuationInRow_(e),e=l.getInstance().getTextInRow_(e),e=l.getInstance().getFunctionsInRow_(e),l.getInstance().relationsInRow_(e))}limitNode(e,t){if(!t.length)return l.getInstance().factory_.makeEmptyNode();let n,r=t[0],i="unknown";if(!t[1])return r;if(a.isLimitBase(r)){n=l.MML_TO_LIMIT_[e];const o=n.length;if(i=n.type,t=t.slice(0,n.length+1),1===o&&a.isAccent(t[1])||2===o&&a.isAccent(t[1])&&a.isAccent(t[2]))return n=l.MML_TO_BOUNDS_[e],l.getInstance().accentNode_(r,t,n.type,n.length,n.accent);if(2===o){if(a.isAccent(t[1]))return r=l.getInstance().accentNode_(r,[r,t[1]],{MSUBSUP:"subscript",MUNDEROVER:"underscore"}[e],1,!0),t[2]?l.getInstance().makeLimitNode_(r,[r,t[2]],null,"limupper"):r;if(t[2]&&a.isAccent(t[2]))return r=l.getInstance().accentNode_(r,[r,t[2]],{MSUBSUP:"superscript",MUNDEROVER:"overscore"}[e],1,!0),l.getInstance().makeLimitNode_(r,[r,t[1]],null,"limlower");t[o]||(i="limlower")}return l.getInstance().makeLimitNode_(r,t,null,i)}return n=l.MML_TO_BOUNDS_[e],l.getInstance().accentNode_(r,t,n.type,n.length,n.accent)}tablesInRow(e){let t=c.partitionNodes(e,a.tableIsMatrixOrVector),n=[];for(let e,r=0;e=t.rel[r];r++)n=n.concat(t.comp.shift()),n.push(l.tableToMatrixOrVector_(e));n=n.concat(t.comp.shift()),t=c.partitionNodes(n,a.isTableOrMultiline),n=[];for(let e,r=0;e=t.rel[r];r++){const r=t.comp.shift();a.tableIsCases(e,r)&&l.tableToCases_(e,r.pop()),n=n.concat(r),n.push(e)}return n.concat(t.comp.shift())}mfenced(e,t,n,r){if(n&&r.length>0){const e=l.nextSeparatorFunction_(n),t=[r.shift()];r.forEach((n=>{t.push(l.getInstance().factory_.makeContentNode(e())),t.push(n)})),r=t}return e&&t?l.getInstance().horizontalFencedNode_(l.getInstance().factory_.makeContentNode(e),l.getInstance().factory_.makeContentNode(t),r):(e&&r.unshift(l.getInstance().factory_.makeContentNode(e)),t&&r.push(l.getInstance().factory_.makeContentNode(t)),l.getInstance().row(r))}fractionLikeNode(e,t,n,r){let i;if(!r&&c.isZeroLength(n)){const n=l.getInstance().factory_.makeBranchNode("line",[e],[]),r=l.getInstance().factory_.makeBranchNode("line",[t],[]);return i=l.getInstance().factory_.makeBranchNode("multiline",[n,r],[]),l.binomialForm_(i),l.classifyMultiline(i),i}return i=l.getInstance().fractionNode_(e,t),r&&i.addAnnotation("general","bevelled"),i}tensor(e,t,n,r,i){const o=l.getInstance().factory_.makeBranchNode("tensor",[e,l.getInstance().scriptNode_(t,"leftsub"),l.getInstance().scriptNode_(n,"leftsuper"),l.getInstance().scriptNode_(r,"rightsub"),l.getInstance().scriptNode_(i,"rightsuper")],[]);return o.role=e.role,o.embellished=a.isEmbellished(e),o}pseudoTensor(e,t,n){const r=e=>!a.isType(e,"empty"),i=t.filter(r).length,o=n.filter(r).length;if(!i&&!o)return e;const s=i?o?"MSUBSUP":"MSUB":"MSUP",c=[e];return i&&c.push(l.getInstance().scriptNode_(t,"rightsub",!0)),o&&c.push(l.getInstance().scriptNode_(n,"rightsuper",!0)),l.getInstance().limitNode(s,c)}font(e){const t=l.MATHJAX_FONTS[e];return t||e}proof(e,t,n){if(t.inference||t.axiom||console.log("Noise"),t.axiom){const t=l.getInstance().cleanInference(e.childNodes),r=t.length?l.getInstance().factory_.makeBranchNode("inference",n(t),[]):l.getInstance().factory_.makeEmptyNode();return r.role="axiom",r.mathmlTree=e,r}const r=l.getInstance().inference(e,t,n);return t.proof&&(r.role="proof",r.childNodes[0].role="final"),r}inference(e,t,n){if(t.inferenceRule){const t=l.getInstance().getFormulas(e,[],n);return l.getInstance().factory_.makeBranchNode("inference",[t.conclusion,t.premises],[])}const i=t.labelledRule,o=r.toArray(e.childNodes),s=[];"left"!==i&&"both"!==i||s.push(l.getInstance().getLabel(e,o,n,"left")),"right"!==i&&"both"!==i||s.push(l.getInstance().getLabel(e,o,n,"right"));const a=l.getInstance().getFormulas(e,o,n),c=l.getInstance().factory_.makeBranchNode("inference",[a.conclusion,a.premises],s);return c.mathmlTree=e,c}getLabel(e,t,n,i){const o=l.getInstance().findNestedRow(t,"prooflabel",i),s=l.getInstance().factory_.makeBranchNode("rulelabel",n(r.toArray(o.childNodes)),[]);return s.role=i,s.mathmlTree=o,s}getFormulas(e,t,n){const i=t.length?l.getInstance().findNestedRow(t,"inferenceRule"):e,o="up"===l.getSemantics(i).inferenceRule,s=o?i.childNodes[1]:i.childNodes[0],a=o?i.childNodes[0]:i.childNodes[1],c=s.childNodes[0].childNodes[0],u=r.toArray(c.childNodes[0].childNodes),d=[];let h=1;for(const e of u)h%2&&d.push(e.childNodes[0]),h++;const p=n(d),f=n(r.toArray(a.childNodes[0].childNodes))[0],m=l.getInstance().factory_.makeBranchNode("premises",p,[]);m.mathmlTree=c;const g=l.getInstance().factory_.makeBranchNode("conclusion",[f],[]);return g.mathmlTree=a.childNodes[0].childNodes[0],{conclusion:g,premises:m}}findNestedRow(e,t,n){return l.getInstance().findNestedRow_(e,t,0,n)}cleanInference(e){return r.toArray(e).filter((function(e){return"MSPACE"!==r.tagName(e)}))}operatorNode(e){return"unknown"===e.type&&(e.type="operator"),o.run("multioperator",e)}implicitNode_(e){const t=l.getInstance().factory_.makeMultipleContentNodes(e.length-1,i.invisibleTimes());l.matchSpaces_(e,t);const n=l.getInstance().infixNode_(e,t[0]);return n.role="implicit",t.forEach((function(e){e.parent=n})),n.contentNodes=t,n}infixNode_(e,t){const n=l.getInstance().factory_.makeBranchNode("infixop",e,[t],c.getEmbellishedInner(t).textContent);return n.role=t.role,o.run("propagateSimpleFunction",n)}explicitMixed_(e){const t=c.partitionNodes(e,(function(e){return e.textContent===i.invisiblePlus()}));if(!t.rel.length)return e;let n=[];for(let e,r=0;e=t.rel[r];r++){const i=t.comp[r],o=t.comp[r+1],s=i.length-1;if(i[s]&&o[0]&&a.isType(i[s],"number")&&!a.isRole(i[s],"mixed")&&a.isType(o[0],"fraction")){const e=l.getInstance().factory_.makeBranchNode("number",[i[s],o[0]],[]);e.role="mixed",n=n.concat(i.slice(0,s)),n.push(e),o.shift()}else n=n.concat(i),n.push(e)}return n.concat(t.comp[t.comp.length-1])}concatNode_(e,t,n){if(0===t.length)return e;const r=t.map((function(e){return c.getEmbellishedInner(e).textContent})).join(" "),i=l.getInstance().factory_.makeBranchNode(n,[e],t,r);return t.length>1&&(i.role="multiop"),i}prefixNode_(e,t){const n=c.partitionNodes(t,(e=>a.isRole(e,"subtraction")));let r=l.getInstance().concatNode_(e,n.comp.pop(),"prefixop");for(1===r.contentNodes.length&&"addition"===r.contentNodes[0].role&&"+"===r.contentNodes[0].textContent&&(r.role="positive");n.rel.length>0;)r=l.getInstance().concatNode_(r,[n.rel.pop()],"prefixop"),r.role="negative",r=l.getInstance().concatNode_(r,n.comp.pop(),"prefixop");return r}postfixNode_(e,t){return t.length?l.getInstance().concatNode_(e,t,"postfixop"):e}combineUnits_(e){const t=c.partitionNodes(e,(function(e){return!a.isRole(e,"unit")}));if(e.length===t.rel.length)return t.rel;const n=[];let r,i;do{const e=t.comp.shift();r=t.rel.shift();let o=null;i=n.pop(),i&&(e.length&&a.isUnitCounter(i)?e.unshift(i):n.push(i)),1===e.length&&(o=e.pop()),e.length>1&&(o=l.getInstance().implicitNode_(e),o.role="unit"),o&&n.push(o),r&&n.push(r)}while(r);return n}getMixedNumbers_(e){const t=c.partitionNodes(e,(function(e){return a.isType(e,"fraction")&&a.isRole(e,"vulgar")}));if(!t.rel.length)return e;let n=[];for(let e,r=0;e=t.rel[r];r++){const i=t.comp[r],o=i.length-1;if(i[o]&&a.isType(i[o],"number")&&(a.isRole(i[o],"integer")||a.isRole(i[o],"float"))){const t=l.getInstance().factory_.makeBranchNode("number",[i[o],e],[]);t.role="mixed",n=n.concat(i.slice(0,o)),n.push(t)}else n=n.concat(i),n.push(e)}return n.concat(t.comp[t.comp.length-1])}getTextInRow_(e){if(e.length<=1)return e;const t=c.partitionNodes(e,(e=>a.isType(e,"text")));if(0===t.rel.length)return e;const n=[];let r=t.comp[0];r.length>0&&n.push(l.getInstance().row(r));for(let e,i=0;e=t.rel[i];i++)n.push(e),r=t.comp[i+1],r.length>0&&n.push(l.getInstance().row(r));return[l.getInstance().dummyNode_(n)]}relationsInRow_(e){const t=c.partitionNodes(e,a.isRelation),n=t.rel[0];if(!n)return l.getInstance().operationsInRow_(e);if(1===e.length)return e[0];const r=t.comp.map(l.getInstance().operationsInRow_);let i;return t.rel.some((function(e){return!e.equals(n)}))?(i=l.getInstance().factory_.makeBranchNode("multirel",r,t.rel),t.rel.every((function(e){return e.role===n.role}))&&(i.role=n.role),i):(i=l.getInstance().factory_.makeBranchNode("relseq",r,t.rel,c.getEmbellishedInner(n).textContent),i.role=n.role,i)}operationsInRow_(e){if(0===e.length)return l.getInstance().factory_.makeEmptyNode();if(1===(e=l.getInstance().explicitMixed_(e)).length)return e[0];const t=[];for(;e.length>0&&a.isOperator(e[0]);)t.push(e.shift());if(0===e.length)return l.getInstance().prefixNode_(t.pop(),t);if(1===e.length)return l.getInstance().prefixNode_(e[0],t);e=o.run("convert_juxtaposition",e);const n=c.sliceNodes(e,a.isOperator),r=l.getInstance().prefixNode_(l.getInstance().implicitNode(n.head),t);return n.div?l.getInstance().operationsTree_(n.tail,r,n.div):r}operationsTree_(e,t,n,r){const i=r||[];if(0===e.length){if(i.unshift(n),"infixop"===t.type){const e=l.getInstance().postfixNode_(t.childNodes.pop(),i);return t.appendChild(e),t}return l.getInstance().postfixNode_(t,i)}const o=c.sliceNodes(e,a.isOperator);if(0===o.head.length)return i.push(o.div),l.getInstance().operationsTree_(o.tail,t,n,i);const s=l.getInstance().prefixNode_(l.getInstance().implicitNode(o.head),i),u=l.getInstance().appendOperand_(t,n,s);return o.div?l.getInstance().operationsTree_(o.tail,u,o.div,[]):u}appendOperand_(e,t,n){if("infixop"!==e.type)return l.getInstance().infixNode_([e,n],t);const r=l.getInstance().appendDivisionOp_(e,t,n);return r||(l.getInstance().appendExistingOperator_(e,t,n)?e:"multiplication"===t.role?l.getInstance().appendMultiplicativeOp_(e,t,n):l.getInstance().appendAdditiveOp_(e,t,n))}appendDivisionOp_(e,t,n){return"division"===t.role?a.isImplicit(e)?l.getInstance().infixNode_([e,n],t):l.getInstance().appendLastOperand_(e,t,n):"division"===e.role?l.getInstance().infixNode_([e,n],t):null}appendLastOperand_(e,t,n){let r=e,i=e.childNodes[e.childNodes.length-1];for(;i&&"infixop"===i.type&&!a.isImplicit(i);)r=i,i=r.childNodes[e.childNodes.length-1];const o=l.getInstance().infixNode_([r.childNodes.pop(),n],t);return r.appendChild(o),e}appendMultiplicativeOp_(e,t,n){if(a.isImplicit(e))return l.getInstance().infixNode_([e,n],t);let r=e,i=e.childNodes[e.childNodes.length-1];for(;i&&"infixop"===i.type&&!a.isImplicit(i);)r=i,i=r.childNodes[e.childNodes.length-1];const o=l.getInstance().infixNode_([r.childNodes.pop(),n],t);return r.appendChild(o),e}appendAdditiveOp_(e,t,n){return l.getInstance().infixNode_([e,n],t)}appendExistingOperator_(e,t,n){return!(!e||"infixop"!==e.type||a.isImplicit(e))&&(e.contentNodes[0].equals(t)?(e.appendContentNode(t),e.appendChild(n),!0):l.getInstance().appendExistingOperator_(e.childNodes[e.childNodes.length-1],t,n))}getFencesInRow_(e){let t=c.partitionNodes(e,a.isFence);t=l.purgeFences_(t);const n=t.comp.shift();return l.getInstance().fences_(t.rel,t.comp,[],[n])}fences_(e,t,n,r){if(0===e.length&&0===n.length)return r[0];const i=e=>a.isRole(e,"open");if(0===e.length){const e=r.shift();for(;n.length>0;){if(i(n[0])){const t=n.shift();l.fenceToPunct_(t),e.push(t)}else{const t=c.sliceNodes(n,i),o=t.head.length-1,s=l.getInstance().neutralFences_(t.head,r.slice(0,o));r=r.slice(o),e.push(...s),t.div&&t.tail.unshift(t.div),n=t.tail}e.push(...r.shift())}return e}const o=n[n.length-1],s=e[0].role;if("open"===s||a.isNeutralFence(e[0])&&(!o||!a.compareNeutralFences(e[0],o))){n.push(e.shift());const i=t.shift();return i&&r.push(i),l.getInstance().fences_(e,t,n,r)}if(o&&"close"===s&&"open"===o.role){const i=l.getInstance().horizontalFencedNode_(n.pop(),e.shift(),r.pop());return r.push(r.pop().concat([i],t.shift())),l.getInstance().fences_(e,t,n,r)}if(o&&a.compareNeutralFences(e[0],o)){if(!a.elligibleLeftNeutral(o)||!a.elligibleRightNeutral(e[0])){n.push(e.shift());const i=t.shift();return i&&r.push(i),l.getInstance().fences_(e,t,n,r)}const i=l.getInstance().horizontalFencedNode_(n.pop(),e.shift(),r.pop());return r.push(r.pop().concat([i],t.shift())),l.getInstance().fences_(e,t,n,r)}if(o&&"close"===s&&a.isNeutralFence(o)&&n.some(i)){const o=c.sliceNodes(n,i,!0),s=r.pop(),a=r.length-o.tail.length+1,u=l.getInstance().neutralFences_(o.tail,r.slice(a));r=r.slice(0,a);const d=l.getInstance().horizontalFencedNode_(o.div,e.shift(),r.pop().concat(u,s));return r.push(r.pop().concat([d],t.shift())),l.getInstance().fences_(e,t,o.head,r)}const u=e.shift();return l.fenceToPunct_(u),r.push(r.pop().concat([u],t.shift())),l.getInstance().fences_(e,t,n,r)}neutralFences_(e,t){if(0===e.length)return e;if(1===e.length)return l.fenceToPunct_(e[0]),e;const n=e.shift();if(!a.elligibleLeftNeutral(n)){l.fenceToPunct_(n);const r=t.shift();return r.unshift(n),r.concat(l.getInstance().neutralFences_(e,t))}const r=c.sliceNodes(e,(function(e){return a.compareNeutralFences(e,n)}));if(!r.div){l.fenceToPunct_(n);const r=t.shift();return r.unshift(n),r.concat(l.getInstance().neutralFences_(e,t))}if(!a.elligibleRightNeutral(r.div))return l.fenceToPunct_(r.div),e.unshift(n),l.getInstance().neutralFences_(e,t);const i=l.getInstance().combineFencedContent_(n,r.div,r.head,t);if(r.tail.length>0){const e=i.shift(),t=l.getInstance().neutralFences_(r.tail,i);return e.concat(t)}return i[0]}combineFencedContent_(e,t,n,r){if(0===n.length){const n=l.getInstance().horizontalFencedNode_(e,t,r.shift());return r.length>0?r[0].unshift(n):r=[[n]],r}const i=r.shift(),o=n.length-1,s=r.slice(0,o),a=(r=r.slice(o)).shift(),c=l.getInstance().neutralFences_(n,s);i.push(...c),i.push(...a);const u=l.getInstance().horizontalFencedNode_(e,t,i);return r.length>0?r[0].unshift(u):r=[[u]],r}horizontalFencedNode_(e,t,n){const r=l.getInstance().row(n);let i=l.getInstance().factory_.makeBranchNode("fenced",[r],[e,t]);return"open"===e.role?(l.getInstance().classifyHorizontalFence_(i),i=o.run("propagateComposedFunction",i)):i.role=e.role,i=o.run("detect_cycle",i),l.rewriteFencedNode_(i)}classifyHorizontalFence_(e){e.role="leftright";const t=e.childNodes;if(!a.isSetNode(e)||t.length>1)return;if(0===t.length||"empty"===t[0].type)return void(e.role="set empty");const n=t[0].type;if(1===t.length&&a.isSingletonSetContent(t[0]))return void(e.role="set singleton");const r=t[0].role;if("punctuated"===n&&"sequence"===r){if("comma"!==t[0].contentNodes[0].role)return 1!==t[0].contentNodes.length||"vbar"!==t[0].contentNodes[0].role&&"colon"!==t[0].contentNodes[0].role?void 0:(e.role="set extended",void l.getInstance().setExtension_(e));e.role="set collection"}}setExtension_(e){const t=e.childNodes[0].childNodes[0];t&&"infixop"===t.type&&1===t.contentNodes.length&&a.isMembership(t.contentNodes[0])&&(t.addAnnotation("set","intensional"),t.contentNodes[0].addAnnotation("set","intensional"))}getPunctuationInRow_(e){if(e.length<=1)return e;const t=e=>{const t=e.type;return"punctuation"===t||"text"===t||"operator"===t||"relation"===t},n=c.partitionNodes(e,(function(n){if(!a.isPunctuation(n))return!1;if(a.isPunctuation(n)&&!a.isRole(n,"ellipsis"))return!0;const r=e.indexOf(n);if(0===r)return!e[1]||!t(e[1]);const i=e[r-1];if(r===e.length-1)return!t(i);const o=e[r+1];return!t(i)||!t(o)}));if(0===n.rel.length)return e;const r=[];let i=n.comp.shift();i.length>0&&r.push(l.getInstance().row(i));let o=0;for(;n.comp.length>0;)r.push(n.rel[o++]),i=n.comp.shift(),i.length>0&&r.push(l.getInstance().row(i));return[l.getInstance().punctuatedNode_(r,n.rel)]}punctuatedNode_(e,t){const n=l.getInstance().factory_.makeBranchNode("punctuated",e,t);if(t.length===e.length){const e=t[0].role;if("unknown"!==e&&t.every((function(t){return t.role===e})))return n.role=e,n}return a.singlePunctAtPosition(e,t,0)?n.role="startpunct":a.singlePunctAtPosition(e,t,e.length-1)?n.role="endpunct":t.every((e=>a.isRole(e,"dummy")))?n.role="text":t.every((e=>a.isRole(e,"space")))?n.role="space":n.role="sequence",n}dummyNode_(e){const t=l.getInstance().factory_.makeMultipleContentNodes(e.length-1,i.invisibleComma());return t.forEach((function(e){e.role="dummy"})),l.getInstance().punctuatedNode_(e,t)}accentRole_(e,t){if(!a.isAccent(e))return!1;const n=e.textContent,r=i.lookupSecondary("bar",n)||i.lookupSecondary("tilde",n)||e.role;return e.role="underscore"===t?"underaccent":"overaccent",e.addAnnotation("accent",r),!0}accentNode_(e,t,n,r,i){const o=(t=t.slice(0,r+1))[1],s=t[2];let a;if(!i&&s&&(a=l.getInstance().factory_.makeBranchNode("subscript",[e,o],[]),a.role="subsup",t=[a,s],n="superscript"),i){const r=l.getInstance().accentRole_(o,n);if(s){l.getInstance().accentRole_(s,"overscore")&&!r?(a=l.getInstance().factory_.makeBranchNode("overscore",[e,s],[]),t=[a,o],n="underscore"):(a=l.getInstance().factory_.makeBranchNode("underscore",[e,o],[]),t=[a,s],n="overscore"),a.role="underover"}}return l.getInstance().makeLimitNode_(e,t,a,n)}makeLimitNode_(e,t,n,r){if("limupper"===r&&"limlower"===e.type)return e.childNodes.push(t[1]),t[1].parent=e,e.type="limboth",e;if("limlower"===r&&"limupper"===e.type)return e.childNodes.splice(1,-1,t[1]),t[1].parent=e,e.type="limboth",e;const i=l.getInstance().factory_.makeBranchNode(r,t,[]),o=a.isEmbellished(e);return n&&(n.embellished=o),i.embellished=o,i.role=e.role,i}getFunctionsInRow_(e,t){const n=t||[];if(0===e.length)return n;const r=e.shift(),i=l.classifyFunction_(r,e);if(!i)return n.push(r),l.getInstance().getFunctionsInRow_(e,n);const o=l.getInstance().getFunctionsInRow_(e,[]),s=l.getInstance().getFunctionArgs_(r,o,i);return n.concat(s)}getFunctionArgs_(e,t,n){let r,i,o;switch(n){case"integral":{const n=l.getInstance().getIntegralArgs_(t);if(!n.intvar&&!n.integrand.length)return n.rest.unshift(e),n.rest;const r=l.getInstance().row(n.integrand);return o=l.getInstance().integralNode_(e,r,n.intvar),n.rest.unshift(o),n.rest}case"prefix":if(t[0]&&"fenced"===t[0].type){const n=t.shift();return a.isNeutralFence(n)||(n.role="leftright"),o=l.getInstance().functionNode_(e,n),t.unshift(o),t}if(r=c.sliceNodes(t,a.isPrefixFunctionBoundary),r.head.length)i=l.getInstance().row(r.head),r.div&&r.tail.unshift(r.div);else{if(!r.div||!a.isType(r.div,"appl"))return t.unshift(e),t;i=r.div}return o=l.getInstance().functionNode_(e,i),r.tail.unshift(o),r.tail;case"bigop":return r=c.sliceNodes(t,a.isBigOpBoundary),r.head.length?(i=l.getInstance().row(r.head),o=l.getInstance().bigOpNode_(e,i),r.div&&r.tail.unshift(r.div),r.tail.unshift(o),r.tail):(t.unshift(e),t);default:{if(0===t.length)return[e];const n=t[0];return"fenced"===n.type&&!a.isNeutralFence(n)&&a.isSimpleFunctionScope(n)?(n.role="leftright",l.propagateFunctionRole_(e,"simple function"),o=l.getInstance().functionNode_(e,t.shift()),t.unshift(o),t):(t.unshift(e),t)}}}getIntegralArgs_(e,t=[]){if(0===e.length)return{integrand:t,intvar:null,rest:e};const n=e[0];if(a.isGeneralFunctionBoundary(n))return{integrand:t,intvar:null,rest:e};if(a.isIntegralDxBoundarySingle(n))return n.role="integral",{integrand:t,intvar:n,rest:e.slice(1)};if(e[1]&&a.isIntegralDxBoundary(n,e[1])){const r=l.getInstance().prefixNode_(e[1],[n]);return r.role="integral",{integrand:t,intvar:r,rest:e.slice(2)}}return t.push(e.shift()),l.getInstance().getIntegralArgs_(e,t)}functionNode_(e,t){const n=l.getInstance().factory_.makeContentNode(i.functionApplication()),r=l.getInstance().funcAppls[e.id];r&&(n.mathmlTree=r.mathmlTree,n.mathml=r.mathml,n.annotation=r.annotation,n.attributes=r.attributes,delete l.getInstance().funcAppls[e.id]),n.type="punctuation",n.role="application";const o=l.getFunctionOp_(e,(function(e){return a.isType(e,"function")||a.isType(e,"identifier")&&a.isRole(e,"simple function")}));return l.getInstance().functionalNode_("appl",[e,t],o,[n])}bigOpNode_(e,t){const n=l.getFunctionOp_(e,(e=>a.isType(e,"largeop")));return l.getInstance().functionalNode_("bigop",[e,t],n,[])}integralNode_(e,t,n){t=t||l.getInstance().factory_.makeEmptyNode(),n=n||l.getInstance().factory_.makeEmptyNode();const r=l.getFunctionOp_(e,(e=>a.isType(e,"largeop")));return l.getInstance().functionalNode_("integral",[e,t,n],r,[])}functionalNode_(e,t,n,r){const i=t[0];let o;n&&(o=n.parent,r.push(n));const s=l.getInstance().factory_.makeBranchNode(e,t,r);return s.role=i.role,o&&(n.parent=o),s}fractionNode_(e,t){const n=l.getInstance().factory_.makeBranchNode("fraction",[e,t],[]);return n.role=n.childNodes.every((function(e){return a.isType(e,"number")&&a.isRole(e,"integer")}))?"vulgar":n.childNodes.every(a.isPureUnit)?"unit":"division",o.run("propagateSimpleFunction",n)}scriptNode_(e,t,n){let r;switch(e.length){case 0:r=l.getInstance().factory_.makeEmptyNode();break;case 1:if(r=e[0],n)return r;break;default:r=l.getInstance().dummyNode_(e)}return r.role=t,r}findNestedRow_(e,t,n,i){if(n>3)return null;for(let o,s=0;o=e[s];s++){const e=r.tagName(o);if("MSPACE"!==e){if("MROW"===e)return l.getInstance().findNestedRow_(r.toArray(o.childNodes),t,n+1,i);if(l.findSemantics(o,t,i))return o}}return null}}t.default=l,l.FENCE_TO_PUNCT_={metric:"metric",neutral:"vbar",open:"openfence",close:"closefence"},l.MML_TO_LIMIT_={MSUB:{type:"limlower",length:1},MUNDER:{type:"limlower",length:1},MSUP:{type:"limupper",length:1},MOVER:{type:"limupper",length:1},MSUBSUP:{type:"limboth",length:2},MUNDEROVER:{type:"limboth",length:2}},l.MML_TO_BOUNDS_={MSUB:{type:"subscript",length:1,accent:!1},MSUP:{type:"superscript",length:1,accent:!1},MSUBSUP:{type:"subscript",length:2,accent:!1},MUNDER:{type:"underscore",length:1,accent:!0},MOVER:{type:"overscore",length:1,accent:!0},MUNDEROVER:{type:"underscore",length:2,accent:!0}},l.CLASSIFY_FUNCTION_={integral:"integral",sum:"bigop","prefix function":"prefix","limit function":"prefix","simple function":"prefix","composed function":"prefix"},l.MATHJAX_FONTS={"-tex-caligraphic":"caligraphic","-tex-caligraphic-bold":"caligraphic-bold","-tex-calligraphic":"caligraphic","-tex-calligraphic-bold":"caligraphic-bold","-tex-oldstyle":"oldstyle","-tex-oldstyle-bold":"oldstyle-bold","-tex-mathit":"italic"}},7984:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.SemanticSkeleton=void 0;const r=n(1426),i=n(5024),o=n(8171);class s{constructor(e){this.parents=null,this.levelsMap=null,e=0===e?e:e||[],this.array=e}static fromTree(e){return s.fromNode(e.root)}static fromNode(e){return new s(s.fromNode_(e))}static fromString(e){return new s(s.fromString_(e))}static simpleCollapseStructure(e){return"number"==typeof e}static contentCollapseStructure(e){return!!e&&!s.simpleCollapseStructure(e)&&"c"===e[0]}static interleaveIds(e,t){return r.interleaveLists(s.collapsedLeafs(e),s.collapsedLeafs(t))}static collapsedLeafs(...e){return e.reduce(((e,t)=>{return e.concat((n=t,s.simpleCollapseStructure(n)?[n]:(n=n,s.contentCollapseStructure(n[1])?n.slice(2):n.slice(1))));var n}),[])}static fromStructure(e,t){return new s(s.tree_(e,t.root))}static combineContentChildren(e,t,n){switch(e.type){case"relseq":case"infixop":case"multirel":return r.interleaveLists(n,t);case"prefixop":return t.concat(n);case"postfixop":return n.concat(t);case"fenced":return n.unshift(t[0]),n.push(t[1]),n;case"appl":return[n[0],t[0],n[1]];case"root":return[n[1],n[0]];case"row":case"line":return t.length&&n.unshift(t[0]),n;default:return n}}static makeSexp_(e){return s.simpleCollapseStructure(e)?e.toString():s.contentCollapseStructure(e)?"(c "+e.slice(1).map(s.makeSexp_).join(" ")+")":"("+e.map(s.makeSexp_).join(" ")+")"}static fromString_(e){let t=e.replace(/\(/g,"[");return t=t.replace(/\)/g,"]"),t=t.replace(/ /g,","),t=t.replace(/c/g,'"c"'),JSON.parse(t)}static fromNode_(e){if(!e)return[];const t=e.contentNodes;let n;t.length&&(n=t.map(s.fromNode_),n.unshift("c"));const r=e.childNodes;if(!r.length)return t.length?[e.id,n]:e.id;const i=r.map(s.fromNode_);return t.length&&i.unshift(n),i.unshift(e.id),i}static tree_(e,t){if(!t)return[];if(!t.childNodes.length)return t.id;const n=t.id,r=[n],a=i.evalXPath(`.//self::*[@${o.Attribute.ID}=${n}]`,e)[0],c=s.combineContentChildren(t,t.contentNodes.map((function(e){return e})),t.childNodes.map((function(e){return e})));a&&s.addOwns_(a,c);for(let t,n=0;t=c[n];n++)r.push(s.tree_(e,t));return r}static addOwns_(e,t){const n=e.getAttribute(o.Attribute.COLLAPSED),r=n?s.realLeafs_(s.fromString(n).array):t.map((e=>e.id));e.setAttribute(o.Attribute.OWNS,r.join(" "))}static realLeafs_(e){if(s.simpleCollapseStructure(e))return[e];if(s.contentCollapseStructure(e))return[];e=e;let t=[];for(let n=1;ns.simpleCollapseStructure(e)?e:s.contentCollapseStructure(e)?e[1]:e[0]))}subtreeNodes(e){if(!this.isRoot(e))return[];const t=(e,n)=>{s.simpleCollapseStructure(e)?n.push(e):(e=e,s.contentCollapseStructure(e)&&(e=e.slice(1)),e.forEach((e=>t(e,n))))},n=this.levelsMap[e],r=[];return t(n.slice(1),r),r}}t.SemanticSkeleton=s},1784:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.SemanticTree=void 0;const r=n(6671),i=n(4036),o=n(241),s=n(8122),a=n(9444),c=n(6161);n(7103);class l{constructor(e){this.mathml=e,this.parser=new s.SemanticMathml,this.root=this.parser.parse(e),this.collator=this.parser.getFactory().leafMap.collateMeaning();const t=this.collator.newDefault();t&&(this.parser=new s.SemanticMathml,this.parser.getFactory().defaultMap=t,this.root=this.parser.parse(e)),u.visit(this.root,{}),(0,i.annotate)(this.root)}static empty(){const e=r.parseInput(""),t=new l(e);return t.mathml=e,t}static fromNode(e,t){const n=l.empty();return n.root=e,t&&(n.mathml=t),n}static fromRoot(e,t){let n=e;for(;n.parent;)n=n.parent;const r=l.fromNode(n);return t&&(r.mathml=t),r}static fromXml(e){const t=l.empty();return e.childNodes[0]&&(t.root=a.SemanticNode.fromXml(e.childNodes[0])),t}xml(e){const t=r.parseInput(""),n=this.root.xml(t.ownerDocument,e);return t.appendChild(n),t}toString(e){return r.serializeXml(this.xml(e))}formatXml(e){const t=this.toString(e);return r.formatXml(t)}displayTree(){this.root.displayTree()}replaceNode(e,t){const n=e.parent;n?n.replaceChild(e,t):this.root=t}toJson(){const e={};return e.stree=this.root.toJson(),e}}t.SemanticTree=l;const u=new o.SemanticVisitor("general","unit",((e,t)=>{if("infixop"===e.type&&("multiplication"===e.role||"implicit"===e.role)){const t=e.childNodes;t.length&&(c.isPureUnit(t[0])||c.isUnitCounter(t[0]))&&e.childNodes.slice(1).every(c.isPureUnit)&&(e.role="unit")}return!1}))},8901:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.partitionNodes=t.sliceNodes=t.getEmbellishedInner=t.addAttributes=t.isZeroLength=t.purgeNodes=t.isOrphanedGlyph=t.hasDisplayTag=t.hasEmptyTag=t.hasIgnoreTag=t.hasLeafTag=t.hasMathTag=t.directSpeechKeys=t.DISPLAYTAGS=t.EMPTYTAGS=t.IGNORETAGS=t.LEAFTAGS=void 0;const r=n(6671);function i(e){return!!e&&-1!==t.LEAFTAGS.indexOf(r.tagName(e))}function o(e,t,n){n&&e.reverse();const r=[];for(let i,o=0;i=e[o];o++){if(t(i))return n?{head:e.slice(o+1).reverse(),div:i,tail:r.reverse()}:{head:r,div:i,tail:e.slice(o+1)};r.push(i)}return n?{head:[],div:null,tail:r.reverse()}:{head:r,div:null,tail:[]}}t.LEAFTAGS=["MO","MI","MN","MTEXT","MS","MSPACE"],t.IGNORETAGS=["MERROR","MPHANTOM","MALIGNGROUP","MALIGNMARK","MPRESCRIPTS","ANNOTATION","ANNOTATION-XML"],t.EMPTYTAGS=["MATH","MROW","MPADDED","MACTION","NONE","MSTYLE","SEMANTICS"],t.DISPLAYTAGS=["MROOT","MSQRT"],t.directSpeechKeys=["aria-label","exact-speech","alt"],t.hasMathTag=function(e){return!!e&&"MATH"===r.tagName(e)},t.hasLeafTag=i,t.hasIgnoreTag=function(e){return!!e&&-1!==t.IGNORETAGS.indexOf(r.tagName(e))},t.hasEmptyTag=function(e){return!!e&&-1!==t.EMPTYTAGS.indexOf(r.tagName(e))},t.hasDisplayTag=function(e){return!!e&&-1!==t.DISPLAYTAGS.indexOf(r.tagName(e))},t.isOrphanedGlyph=function(e){return!!e&&"MGLYPH"===r.tagName(e)&&!i(e.parentNode)},t.purgeNodes=function(e){const n=[];for(let i,o=0;i=e[o];o++){if(i.nodeType!==r.NodeType.ELEMENT_NODE)continue;const e=r.tagName(i);-1===t.IGNORETAGS.indexOf(e)&&(-1!==t.EMPTYTAGS.indexOf(e)&&0===i.childNodes.length||n.push(i))}return n},t.isZeroLength=function(e){if(!e)return!1;if(-1!==["negativeveryverythinmathspace","negativeverythinmathspace","negativethinmathspace","negativemediummathspace","negativethickmathspace","negativeverythickmathspace","negativeveryverythickmathspace"].indexOf(e))return!0;const t=e.match(/[0-9.]+/);return!!t&&0===parseFloat(t[0])},t.addAttributes=function(e,n){if(n.hasAttributes()){const r=n.attributes;for(let n=r.length-1;n>=0;n--){const i=r[n].name;i.match(/^ext/)&&(e.attributes[i]=r[n].value,e.nobreaking=!0),-1!==t.directSpeechKeys.indexOf(i)&&(e.attributes["ext-speech"]=r[n].value,e.nobreaking=!0),i.match(/texclass$/)&&(e.attributes.texclass=r[n].value),"href"===i&&(e.attributes.href=r[n].value,e.nobreaking=!0)}}},t.getEmbellishedInner=function e(t){return t&&t.embellished&&t.childNodes.length>0?e(t.childNodes[0]):t},t.sliceNodes=o,t.partitionNodes=function(e,t){let n=e;const r=[],i=[];let s=null;do{s=o(n,t),i.push(s.head),r.push(s.div),n=s.tail}while(s.div);return r.pop(),{rel:r,comp:i}}},9135:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractSpeechGenerator=void 0;const r=n(985),i=n(8171),o=n(1848),s=n(144);t.AbstractSpeechGenerator=class{constructor(){this.modality=i.addPrefix("speech"),this.rebuilt_=null,this.options_={}}getRebuilt(){return this.rebuilt_}setRebuilt(e){this.rebuilt_=e}setOptions(e){this.options_=e||{},this.modality=i.addPrefix(this.options_.modality||"speech")}getOptions(){return this.options_}start(){}end(){}generateSpeech(e,t){return this.rebuilt_||(this.rebuilt_=new o.RebuildStree(t)),(0,r.setup)(this.options_),s.computeMarkup(this.getRebuilt().xml)}}},3153:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.AdhocSpeechGenerator=void 0;const r=n(9135);class i extends r.AbstractSpeechGenerator{getSpeech(e,t){const n=this.generateSpeech(e,t);return e.setAttribute(this.modality,n),n}}t.AdhocSpeechGenerator=i},6281:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.ColorGenerator=void 0;const r=n(8171),i=n(1123),o=n(1848),s=n(8835),a=n(9135);class c extends a.AbstractSpeechGenerator{constructor(){super(...arguments),this.modality=(0,r.addPrefix)("foreground"),this.contrast=new i.ContrastPicker}static visitStree_(e,t,n){if(e.childNodes.length){if(e.contentNodes.length&&("punctuated"===e.type&&e.contentNodes.forEach((e=>n[e.id]=!0)),"implicit"!==e.role&&t.push(e.contentNodes.map((e=>e.id)))),e.childNodes.length){if("implicit"===e.role){const r=[];let i=[];for(const t of e.childNodes){const e=[];c.visitStree_(t,e,n),e.length<=2&&r.push(e.shift()),i=i.concat(e)}return t.push(r),void i.forEach((e=>t.push(e)))}e.childNodes.forEach((e=>c.visitStree_(e,t,n)))}}else n[e.id]||t.push(e.id)}getSpeech(e,t){return s.getAttribute(e,this.modality)}generateSpeech(e,t){return this.getRebuilt()||this.setRebuilt(new o.RebuildStree(e)),this.colorLeaves_(e),s.getAttribute(e,this.modality)}colorLeaves_(e){const t=[];c.visitStree_(this.getRebuilt().streeRoot,t,{});for(const n of t){const t=this.contrast.generate();let r=!1;r=Array.isArray(n)?n.map((n=>this.colorLeave_(e,n,t))).reduce(((e,t)=>e||t),!1):this.colorLeave_(e,n.toString(),t),r&&this.contrast.increment()}}colorLeave_(e,t,n){const r=s.getBySemanticId(e,t);return!!r&&(r.setAttribute(this.modality,n),!0)}}t.ColorGenerator=c},1565:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.DirectSpeechGenerator=void 0;const r=n(8835),i=n(9135);class o extends i.AbstractSpeechGenerator{getSpeech(e,t){return r.getAttribute(e,this.modality)}}t.DirectSpeechGenerator=o},7721:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.DummySpeechGenerator=void 0;const r=n(9135);class i extends r.AbstractSpeechGenerator{getSpeech(e,t){return""}}t.DummySpeechGenerator=i},1558:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.NodeSpeechGenerator=void 0;const r=n(8835),i=n(7486);class o extends i.TreeSpeechGenerator{getSpeech(e,t){return super.getSpeech(e,t),r.getAttribute(e,this.modality)}}t.NodeSpeechGenerator=o},7317:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.generatorMapping_=t.generator=void 0;const r=n(3153),i=n(6281),o=n(1565),s=n(7721),a=n(1558),c=n(5778),l=n(7486);t.generator=function(e){return(t.generatorMapping_[e]||t.generatorMapping_.Direct)()},t.generatorMapping_={Adhoc:()=>new r.AdhocSpeechGenerator,Color:()=>new i.ColorGenerator,Direct:()=>new o.DirectSpeechGenerator,Dummy:()=>new s.DummySpeechGenerator,Node:()=>new a.NodeSpeechGenerator,Summary:()=>new c.SummarySpeechGenerator,Tree:()=>new l.TreeSpeechGenerator}},144:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.computeSummary_=t.retrieveSummary=t.connectAllMactions=t.connectMactions=t.nodeAtPosition_=t.computePrefix_=t.retrievePrefix=t.addPrefix=t.addModality=t.addSpeech=t.recomputeMarkup=t.computeMarkup=t.recomputeSpeech=t.computeSpeech=void 0;const r=n(4253),i=n(6671),o=n(5024),s=n(8171),a=n(6060),c=n(1784),l=n(8835);function u(e){return a.SpeechRuleEngine.getInstance().evaluateNode(e)}function d(e){return u(c.SemanticTree.fromNode(e).xml())}function h(e){const t=d(e);return r.markup(t)}function p(e){const t=f(e);return r.markup(t)}function f(e){const t=c.SemanticTree.fromRoot(e),n=o.evalXPath('.//*[@id="'+e.id+'"]',t.xml());let r=n[0];return n.length>1&&(r=m(e,n)||r),r?a.SpeechRuleEngine.getInstance().runInSetting({modality:"prefix",domain:"default",style:"default",strict:!0,speech:!0},(function(){return a.SpeechRuleEngine.getInstance().evaluateNode(r)})):[]}function m(e,t){const n=t[0];if(!e.parent)return n;const r=[];for(;e;)r.push(e.id),e=e.parent;const i=function(e,t){for(;t.length&&t.shift().toString()===e.getAttribute("id")&&e.parentNode&&e.parentNode.parentNode;)e=e.parentNode.parentNode;return!t.length};for(let e,n=0;e=t[n];n++)if(i(e,r.slice()))return e;return n}function g(e){return e?a.SpeechRuleEngine.getInstance().runInSetting({modality:"summary",strict:!1,speech:!0},(function(){return a.SpeechRuleEngine.getInstance().evaluateNode(e)})):[]}t.computeSpeech=u,t.recomputeSpeech=d,t.computeMarkup=function(e){const t=u(e);return r.markup(t)},t.recomputeMarkup=h,t.addSpeech=function(e,t,n){const o=i.querySelectorAllByAttrValue(n,"id",t.id.toString())[0],a=o?r.markup(u(o)):h(t);e.setAttribute(s.Attribute.SPEECH,a)},t.addModality=function(e,t,n){const r=h(t);e.setAttribute(n,r)},t.addPrefix=function(e,t){const n=p(t);n&&e.setAttribute(s.Attribute.PREFIX,n)},t.retrievePrefix=p,t.computePrefix_=f,t.nodeAtPosition_=m,t.connectMactions=function(e,t,n){const r=i.querySelectorAll(t,"maction");for(let t,o=0;t=r[o];o++){const r=t.getAttribute("id"),o=i.querySelectorAllByAttrValue(e,"id",r)[0];if(!o)continue;const a=t.childNodes[1],c=a.getAttribute(s.Attribute.ID);let u=l.getBySemanticId(e,c);if(u&&"dummy"!==u.getAttribute(s.Attribute.TYPE))continue;if(u=o.childNodes[0],u.getAttribute("sre-highlighter-added"))continue;const d=a.getAttribute(s.Attribute.PARENT);d&&u.setAttribute(s.Attribute.PARENT,d),u.setAttribute(s.Attribute.TYPE,"dummy"),u.setAttribute(s.Attribute.ID,c);i.querySelectorAllByAttrValue(n,"id",c)[0].setAttribute("alternative",c)}},t.connectAllMactions=function(e,t){const n=i.querySelectorAll(e,"maction");for(let e,r=0;e=n[r];r++){const n=e.childNodes[1].getAttribute(s.Attribute.ID);i.querySelectorAllByAttrValue(t,"id",n)[0].setAttribute("alternative",n)}},t.retrieveSummary=function(e){const t=g(e);return r.markup(t)},t.computeSummary_=g},5778:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.SummarySpeechGenerator=void 0;const r=n(9135),i=n(144);class o extends r.AbstractSpeechGenerator{getSpeech(e,t){return i.connectAllMactions(t,this.getRebuilt().xml),this.generateSpeech(e,t)}}t.SummarySpeechGenerator=o},7486:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.TreeSpeechGenerator=void 0;const r=n(8171),i=n(8835),o=n(9135),s=n(144);class a extends o.AbstractSpeechGenerator{getSpeech(e,t){const n=this.generateSpeech(e,t),o=this.getRebuilt().nodeDict;for(const n in o){const a=o[n],c=i.getBySemanticId(t,n),l=i.getBySemanticId(e,n);c&&l&&(this.modality&&this.modality!==r.Attribute.SPEECH?s.addModality(l,a,this.modality):s.addSpeech(l,a,this.getRebuilt().xml),this.modality===r.Attribute.SPEECH&&s.addPrefix(l,a))}return n}}t.TreeSpeechGenerator=a},650:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.INTERVALS=t.makeLetter=t.numberRules=t.alphabetRules=t.getFont=t.makeInterval=t.generate=t.makeDomains_=t.Domains_=t.Base=t.Embellish=t.Font=void 0;const r=n(4886),i=n(2371),o=n(4524),s=n(3319),a=n(4161);var c,l,u;function d(){const e=o.LOCALE.ALPHABETS,n=(e,t)=>{const n={};return Object.keys(e).forEach((e=>n[e]=!0)),Object.keys(t).forEach((e=>n[e]=!0)),Object.keys(n)};t.Domains_.small=n(e.smallPrefix,e.letterTrans),t.Domains_.capital=n(e.capPrefix,e.letterTrans),t.Domains_.digit=n(e.digitPrefix,e.digitTrans)}function h(e){const t=e.toString(16).toUpperCase();return t.length>3?t:("000"+t).slice(-4)}function p([e,t],n){const r=parseInt(e,16),i=parseInt(t,16),o=[];for(let e=r;e<=i;e++){let t=h(e);!1!==n[t]&&(t=n[t]||t,o.push(t))}return o}function f(e){const t="normal"===e||"fullwidth"===e?"":o.LOCALE.MESSAGES.font[e]||o.LOCALE.MESSAGES.embellish[e]||"";return(0,s.localeFontCombiner)(t)}function m(e,n,r,i,s,a){const c=f(i);for(let i,l,u,d=0;i=e[d],l=n[d],u=r[d];d++){const e=a?o.LOCALE.ALPHABETS.capPrefix:o.LOCALE.ALPHABETS.smallPrefix,n=a?t.Domains_.capital:t.Domains_.small;S(c.combiner,i,l,u,c.font,e,s,o.LOCALE.ALPHABETS.letterTrans,n)}}function g(e,n,r,i,s){const a=f(r);for(let r,c,l=0;r=e[l],c=n[l];l++){const e=o.LOCALE.ALPHABETS.digitPrefix,n=l+s;S(a.combiner,r,c,n,a.font,e,i,o.LOCALE.ALPHABETS.digitTrans,t.Domains_.digit)}}function S(e,t,n,r,i,o,s,c,l){for(let u,d=0;u=l[d];d++){const l=u in c?c[u]:c.default,d=u in o?o[u]:o.default;a.defineRule(t.toString(),u,"default",s,n,e(l(r),i,d))}}!function(e){e.BOLD="bold",e.BOLDFRAKTUR="bold-fraktur",e.BOLDITALIC="bold-italic",e.BOLDSCRIPT="bold-script",e.DOUBLESTRUCK="double-struck",e.FULLWIDTH="fullwidth",e.FRAKTUR="fraktur",e.ITALIC="italic",e.MONOSPACE="monospace",e.NORMAL="normal",e.SCRIPT="script",e.SANSSERIF="sans-serif",e.SANSSERIFITALIC="sans-serif-italic",e.SANSSERIFBOLD="sans-serif-bold",e.SANSSERIFBOLDITALIC="sans-serif-bold-italic"}(c=t.Font||(t.Font={})),function(e){e.SUPER="super",e.SUB="sub",e.CIRCLED="circled",e.PARENTHESIZED="parenthesized",e.PERIOD="period",e.NEGATIVECIRCLED="negative-circled",e.DOUBLECIRCLED="double-circled",e.CIRCLEDSANSSERIF="circled-sans-serif",e.NEGATIVECIRCLEDSANSSERIF="negative-circled-sans-serif",e.COMMA="comma",e.SQUARED="squared",e.NEGATIVESQUARED="negative-squared"}(l=t.Embellish||(t.Embellish={})),function(e){e.LATINCAP="latinCap",e.LATINSMALL="latinSmall",e.GREEKCAP="greekCap",e.GREEKSMALL="greekSmall",e.DIGIT="digit"}(u=t.Base||(t.Base={})),t.Domains_={small:["default"],capital:["default"],digit:["default"]},t.makeDomains_=d,t.generate=function(e){const n=r.default.getInstance().locale;r.default.getInstance().locale=e,i.setLocale(),a.addSymbolRules({locale:e}),d();const s=t.INTERVALS;for(let e,t=0;e=s[t];t++){const t=p(e.interval,e.subst),n=t.map((function(e){return String.fromCodePoint(parseInt(e,16))}));if("offset"in e)g(t,n,e.font,e.category,e.offset||0);else{m(t,n,o.LOCALE.ALPHABETS[e.base],e.font,e.category,!!e.capital)}}r.default.getInstance().locale=n,i.setLocale()},t.makeInterval=p,t.getFont=f,t.alphabetRules=m,t.numberRules=g,t.makeLetter=S,t.INTERVALS=[{interval:["1D400","1D419"],base:u.LATINCAP,subst:{},capital:!0,category:"Lu",font:c.BOLD},{interval:["1D41A","1D433"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:c.BOLD},{interval:["1D56C","1D585"],base:u.LATINCAP,subst:{},capital:!0,category:"Lu",font:c.BOLDFRAKTUR},{interval:["1D586","1D59F"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:c.BOLDFRAKTUR},{interval:["1D468","1D481"],base:u.LATINCAP,subst:{},capital:!0,category:"Lu",font:c.BOLDITALIC},{interval:["1D482","1D49B"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:c.BOLDITALIC},{interval:["1D4D0","1D4E9"],base:u.LATINCAP,subst:{},capital:!0,category:"Lu",font:c.BOLDSCRIPT},{interval:["1D4EA","1D503"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:c.BOLDSCRIPT},{interval:["1D538","1D551"],base:u.LATINCAP,subst:{"1D53A":"2102","1D53F":"210D","1D545":"2115","1D547":"2119","1D548":"211A","1D549":"211D","1D551":"2124"},capital:!0,category:"Lu",font:c.DOUBLESTRUCK},{interval:["1D552","1D56B"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:c.DOUBLESTRUCK},{interval:["1D504","1D51D"],base:u.LATINCAP,subst:{"1D506":"212D","1D50B":"210C","1D50C":"2111","1D515":"211C","1D51D":"2128"},capital:!0,category:"Lu",font:c.FRAKTUR},{interval:["1D51E","1D537"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:c.FRAKTUR},{interval:["FF21","FF3A"],base:u.LATINCAP,subst:{},capital:!0,category:"Lu",font:c.FULLWIDTH},{interval:["FF41","FF5A"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:c.FULLWIDTH},{interval:["1D434","1D44D"],base:u.LATINCAP,subst:{},capital:!0,category:"Lu",font:c.ITALIC},{interval:["1D44E","1D467"],base:u.LATINSMALL,subst:{"1D455":"210E"},capital:!1,category:"Ll",font:c.ITALIC},{interval:["1D670","1D689"],base:u.LATINCAP,subst:{},capital:!0,category:"Lu",font:c.MONOSPACE},{interval:["1D68A","1D6A3"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:c.MONOSPACE},{interval:["0041","005A"],base:u.LATINCAP,subst:{},capital:!0,category:"Lu",font:c.NORMAL},{interval:["0061","007A"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:c.NORMAL},{interval:["1D49C","1D4B5"],base:u.LATINCAP,subst:{"1D49D":"212C","1D4A0":"2130","1D4A1":"2131","1D4A3":"210B","1D4A4":"2110","1D4A7":"2112","1D4A8":"2133","1D4AD":"211B"},capital:!0,category:"Lu",font:c.SCRIPT},{interval:["1D4B6","1D4CF"],base:u.LATINSMALL,subst:{"1D4BA":"212F","1D4BC":"210A","1D4C4":"2134"},capital:!1,category:"Ll",font:c.SCRIPT},{interval:["1D5A0","1D5B9"],base:u.LATINCAP,subst:{},capital:!0,category:"Lu",font:c.SANSSERIF},{interval:["1D5BA","1D5D3"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:c.SANSSERIF},{interval:["1D608","1D621"],base:u.LATINCAP,subst:{},capital:!0,category:"Lu",font:c.SANSSERIFITALIC},{interval:["1D622","1D63B"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:c.SANSSERIFITALIC},{interval:["1D5D4","1D5ED"],base:u.LATINCAP,subst:{},capital:!0,category:"Lu",font:c.SANSSERIFBOLD},{interval:["1D5EE","1D607"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:c.SANSSERIFBOLD},{interval:["1D63C","1D655"],base:u.LATINCAP,subst:{},capital:!0,category:"Lu",font:c.SANSSERIFBOLDITALIC},{interval:["1D656","1D66F"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:c.SANSSERIFBOLDITALIC},{interval:["0391","03A9"],base:u.GREEKCAP,subst:{"03A2":"03F4"},capital:!0,category:"Lu",font:c.NORMAL},{interval:["03B0","03D0"],base:u.GREEKSMALL,subst:{"03B0":"2207","03CA":"2202","03CB":"03F5","03CC":"03D1","03CD":"03F0","03CE":"03D5","03CF":"03F1","03D0":"03D6"},capital:!1,category:"Ll",font:c.NORMAL},{interval:["1D6A8","1D6C0"],base:u.GREEKCAP,subst:{},capital:!0,category:"Lu",font:c.BOLD},{interval:["1D6C1","1D6E1"],base:u.GREEKSMALL,subst:{},capital:!1,category:"Ll",font:c.BOLD},{interval:["1D6E2","1D6FA"],base:u.GREEKCAP,subst:{},capital:!0,category:"Lu",font:c.ITALIC},{interval:["1D6FB","1D71B"],base:u.GREEKSMALL,subst:{},capital:!1,category:"Ll",font:c.ITALIC},{interval:["1D71C","1D734"],base:u.GREEKCAP,subst:{},capital:!0,category:"Lu",font:c.BOLDITALIC},{interval:["1D735","1D755"],base:u.GREEKSMALL,subst:{},capital:!1,category:"Ll",font:c.BOLDITALIC},{interval:["1D756","1D76E"],base:u.GREEKCAP,subst:{},capital:!0,category:"Lu",font:c.SANSSERIFBOLD},{interval:["1D76F","1D78F"],base:u.GREEKSMALL,subst:{},capital:!1,category:"Ll",font:c.SANSSERIFBOLD},{interval:["1D790","1D7A8"],base:u.GREEKCAP,subst:{},capital:!0,category:"Lu",font:c.SANSSERIFBOLDITALIC},{interval:["1D7A9","1D7C9"],base:u.GREEKSMALL,subst:{},capital:!1,category:"Ll",font:c.SANSSERIFBOLDITALIC},{interval:["0030","0039"],base:u.DIGIT,subst:{},offset:0,category:"Nd",font:c.NORMAL},{interval:["2070","2079"],base:u.DIGIT,subst:{2071:"00B9",2072:"00B2",2073:"00B3"},offset:0,category:"No",font:l.SUPER},{interval:["2080","2089"],base:u.DIGIT,subst:{},offset:0,category:"No",font:l.SUB},{interval:["245F","2473"],base:u.DIGIT,subst:{"245F":"24EA"},offset:0,category:"No",font:l.CIRCLED},{interval:["3251","325F"],base:u.DIGIT,subst:{},offset:21,category:"No",font:l.CIRCLED},{interval:["32B1","32BF"],base:u.DIGIT,subst:{},offset:36,category:"No",font:l.CIRCLED},{interval:["2474","2487"],base:u.DIGIT,subst:{},offset:1,category:"No",font:l.PARENTHESIZED},{interval:["2487","249B"],base:u.DIGIT,subst:{2487:"1F100"},offset:0,category:"No",font:l.PERIOD},{interval:["2775","277F"],base:u.DIGIT,subst:{2775:"24FF"},offset:0,category:"No",font:l.NEGATIVECIRCLED},{interval:["24EB","24F4"],base:u.DIGIT,subst:{},offset:11,category:"No",font:l.NEGATIVECIRCLED},{interval:["24F5","24FE"],base:u.DIGIT,subst:{},offset:1,category:"No",font:l.DOUBLECIRCLED},{interval:["277F","2789"],base:u.DIGIT,subst:{"277F":"1F10B"},offset:0,category:"No",font:l.CIRCLEDSANSSERIF},{interval:["2789","2793"],base:u.DIGIT,subst:{2789:"1F10C"},offset:0,category:"No",font:l.NEGATIVECIRCLEDSANSSERIF},{interval:["FF10","FF19"],base:u.DIGIT,subst:{},offset:0,category:"Nd",font:c.FULLWIDTH},{interval:["1D7CE","1D7D7"],base:u.DIGIT,subst:{},offset:0,category:"Nd",font:c.BOLD},{interval:["1D7D8","1D7E1"],base:u.DIGIT,subst:{},offset:0,category:"Nd",font:c.DOUBLESTRUCK},{interval:["1D7E2","1D7EB"],base:u.DIGIT,subst:{},offset:0,category:"Nd",font:c.SANSSERIF},{interval:["1D7EC","1D7F5"],base:u.DIGIT,subst:{},offset:0,category:"Nd",font:c.SANSSERIFBOLD},{interval:["1D7F6","1D7FF"],base:u.DIGIT,subst:{},offset:0,category:"Nd",font:c.MONOSPACE},{interval:["1F101","1F10A"],base:u.DIGIT,subst:{},offset:0,category:"No",font:l.COMMA},{interval:["24B6","24CF"],base:u.LATINCAP,subst:{},capital:!0,category:"So",font:l.CIRCLED},{interval:["24D0","24E9"],base:u.LATINSMALL,subst:{},capital:!1,category:"So",font:l.CIRCLED},{interval:["1F110","1F129"],base:u.LATINCAP,subst:{},capital:!0,category:"So",font:l.PARENTHESIZED},{interval:["249C","24B5"],base:u.LATINSMALL,subst:{},capital:!1,category:"So",font:l.PARENTHESIZED},{interval:["1F130","1F149"],base:u.LATINCAP,subst:{},capital:!0,category:"So",font:l.SQUARED},{interval:["1F170","1F189"],base:u.LATINCAP,subst:{},capital:!0,category:"So",font:l.NEGATIVESQUARED},{interval:["1F150","1F169"],base:u.LATINCAP,subst:{},capital:!0,category:"So",font:l.NEGATIVECIRCLED}]},3955:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.Parser=t.Comparator=t.ClearspeakPreferences=void 0;const r=n(4886),i=n(4998),o=n(8310),s=n(8310),a=n(4161),c=n(6060);class l extends o.DynamicCstr{constructor(e,t){super(e),this.preference=t}static comparator(){return new d(r.default.getInstance().dynamicCstr,s.DynamicProperties.createProp([o.DynamicCstr.DEFAULT_VALUES[s.Axis.LOCALE]],[o.DynamicCstr.DEFAULT_VALUES[s.Axis.MODALITY]],[o.DynamicCstr.DEFAULT_VALUES[s.Axis.DOMAIN]],[o.DynamicCstr.DEFAULT_VALUES[s.Axis.STYLE]]))}static fromPreference(e){const t=e.split(":"),n={},r=u.getProperties(),i=Object.keys(r);for(let e,o=0;e=t[o];o++){const t=e.split("_");if(-1===i.indexOf(t[0]))continue;const o=t[1];o&&o!==l.AUTO&&-1!==r[t[0]].indexOf(o)&&(n[t[0]]=t[1])}return n}static toPreference(e){const t=Object.keys(e),n=[];for(let r=0;rs?-1:o0&&t<20&&n>0&&n<11}function _(e){return i.default.getInstance().style===e}function C(e){if(!e.hasAttribute("annotation"))return!1;const t=e.getAttribute("annotation");return!!/clearspeak:simple$|clearspeak:simple;/.exec(t)}function T(e){if(C(e))return!0;if("subscript"!==e.tagName)return!1;const t=e.childNodes[0].childNodes,n=t[1];return"identifier"===t[0].tagName&&(v(n)||"infixop"===n.tagName&&n.hasAttribute("role")&&"implicit"===n.getAttribute("role")&&O(n))}function v(e){return"number"===e.tagName&&e.hasAttribute("role")&&"integer"===e.getAttribute("role")}function O(e){return o.evalXPath("children/*",e).every((e=>v(e)||"identifier"===e.tagName))}function M(e){return"text"===e.type||"punctuated"===e.type&&"text"===e.role&&E(e.childNodes[0])&&I(e.childNodes.slice(1))||"identifier"===e.type&&"unit"===e.role||"infixop"===e.type&&("implicit"===e.role||"unit"===e.role)}function I(e){for(let t=0;t10?s.LOCALE.NUMBERS.numericOrdinal(t):s.LOCALE.NUMBERS.wordOrdinal(t)},t.NESTING_DEPTH=null,t.nestingDepth=function(e){let n=0;const r=e.textContent,i="open"===e.getAttribute("role")?0:1;let o=e.parentNode;for(;o;)"fenced"===o.tagName&&o.childNodes[0].childNodes[i].textContent===r&&n++,o=o.parentNode;return t.NESTING_DEPTH=n>1?s.LOCALE.NUMBERS.wordOrdinal(n):"",t.NESTING_DEPTH},t.matchingFences=function(e){const t=e.previousSibling;let n,r;return t?(n=t,r=e):(n=e,r=e.nextSibling),r&&(0,h.isMatchingFence)(n.textContent,r.textContent)?[e]:[]},t.insertNesting=L,c.Grammar.getInstance().setCorrection("insertNesting",L),t.fencedArguments=function(e){const t=r.toArray(e.parentNode.childNodes),n=o.evalXPath("../../children/*",e),i=t.indexOf(e);return x(n[i])||x(n[i+1])?[e]:[]},t.simpleArguments=function(e){const t=r.toArray(e.parentNode.childNodes),n=o.evalXPath("../../children/*",e),i=t.indexOf(e);return R(n[i])&&n[i+1]&&(R(n[i+1])||"root"===n[i+1].tagName||"sqrt"===n[i+1].tagName||"superscript"===n[i+1].tagName&&n[i+1].childNodes[0].childNodes[0]&&("number"===n[i+1].childNodes[0].childNodes[0].tagName||"identifier"===n[i+1].childNodes[0].childNodes[0].tagName)&&("2"===n[i+1].childNodes[0].childNodes[1].textContent||"3"===n[i+1].childNodes[0].childNodes[1].textContent))?[e]:[]},t.simpleFactor_=R,t.fencedFactor_=x,t.layoutFactor_=P,t.wordOrdinal=function(e){return s.LOCALE.NUMBERS.wordOrdinal(parseInt(e.textContent,10))}},5659:function(e,t,n){var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(i,o){function s(e){try{c(r.next(e))}catch(e){o(e)}}function a(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.loadAjax=t.loadFileSync=t.loadFile=t.parseMaps=t.retrieveFiles=t.standardLoader=t.loadLocale=t.store=void 0;const i=n(9501),o=n(4886),s=n(4998),a=n(7129),c=n(4755),l=n(8310),u=n(4161),d=n(6060),h=n(2371),p=n(650);t.store=u;const f={functions:u.addFunctionRules,symbols:u.addSymbolRules,units:u.addUnitRules,si:u.setSiPrefixes};let m=!1;function g(e=o.default.getInstance().locale){o.EnginePromise.loaded[e]||(o.EnginePromise.loaded[e]=[!1,!1],function(e){if(o.default.getInstance().isIE&&o.default.getInstance().mode===s.Mode.HTTP)return void y(e);b(e)}(e))}function S(){switch(o.default.getInstance().mode){case s.Mode.ASYNC:return A;case s.Mode.HTTP:return C;case s.Mode.SYNC:default:return _}}function b(e){const t=o.default.getInstance().customLoader?o.default.getInstance().customLoader:S(),n=new Promise((n=>{t(e).then((t=>{N(t),o.EnginePromise.loaded[e]=[!0,!0],n(e)}),(t=>{o.EnginePromise.loaded[e]=[!0,!1],console.error(`Unable to load locale: ${e}`),o.default.getInstance().locale=o.default.getInstance().defaultLocale,n(e)}))}));o.EnginePromise.promises[e]=n}function N(e){E(JSON.parse(e))}function E(e,t){let n=!0;for(let r,i=0;r=Object.keys(e)[i];i++){const i=r.split("/");t&&t!==i[0]||("rules"===i[1]?d.SpeechRuleEngine.getInstance().addStore(e[r]):"messages"===i[1]?(0,h.completeLocale)(e[r]):(n&&(p.generate(i[0]),n=!1),e[r].forEach(f[i[1]])))}}function y(e,t){let n=t||1;i.mapsForIE?E(i.mapsForIE,e):n<=5&&setTimeout((()=>y(e,n++)).bind(this),300)}function A(e){const t=a.localePath(e);return new Promise(((e,n)=>{c.default.fs.readFile(t,"utf8",((t,r)=>{if(t)return n(t);e(r)}))}))}function _(e){const t=a.localePath(e);return new Promise(((e,n)=>{let r="{}";try{r=c.default.fs.readFileSync(t,"utf8")}catch(e){return n(e)}e(r)}))}function C(e){const t=a.localePath(e),n=new XMLHttpRequest;return new Promise(((e,r)=>{n.onreadystatechange=function(){if(4===n.readyState){const t=n.status;0===t||t>=200&&t<400?e(n.responseText):r(t)}},n.open("GET",t,!0),n.send()}))}t.loadLocale=function(e=o.default.getInstance().locale){return r(this,void 0,void 0,(function*(){return m||(g(l.DynamicCstr.BASE_LOCALE),m=!0),o.EnginePromise.promises[l.DynamicCstr.BASE_LOCALE].then((()=>r(this,void 0,void 0,(function*(){const t=o.default.getInstance().defaultLocale;return t?(g(t),o.EnginePromise.promises[t].then((()=>r(this,void 0,void 0,(function*(){return g(e),o.EnginePromise.promises[e]}))))):(g(e),o.EnginePromise.promises[e])}))))}))},t.standardLoader=S,t.retrieveFiles=b,t.parseMaps=N,t.loadFile=A,t.loadFileSync=_,t.loadAjax=C},3784:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.leftSubscriptBrief=t.leftSuperscriptBrief=t.leftSubscriptVerbose=t.leftSuperscriptVerbose=t.baselineBrief=t.baselineVerbose=void 0;const r=n(3269);t.baselineVerbose=function(e){return r.baselineVerbose(e).replace(/-$/,"")},t.baselineBrief=function(e){return r.baselineBrief(e).replace(/-$/,"")},t.leftSuperscriptVerbose=function(e){return r.superscriptVerbose(e).replace(/^exposant/,"exposant gauche")},t.leftSubscriptVerbose=function(e){return r.subscriptVerbose(e).replace(/^indice/,"indice gauche")},t.leftSuperscriptBrief=function(e){return r.superscriptBrief(e).replace(/^sup/,"sup gauche")},t.leftSubscriptBrief=function(e){return r.subscriptBrief(e).replace(/^sub/,"sub gauche")}},4972:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.MathspeakRules=void 0;const r=n(8310),i=n(931),o=n(3784),s=n(3269),a=n(2110),c=n(7278),l=n(9771);t.MathspeakRules=function(){c.addStore(r.DynamicCstr.BASE_LOCALE+".speech.mathspeak","",{CQFspaceoutNumber:s.spaceoutNumber,CQFspaceoutIdentifier:s.spaceoutIdentifier,CSFspaceoutText:s.spaceoutText,CSFopenFracVerbose:s.openingFractionVerbose,CSFcloseFracVerbose:s.closingFractionVerbose,CSFoverFracVerbose:s.overFractionVerbose,CSFopenFracBrief:s.openingFractionBrief,CSFcloseFracBrief:s.closingFractionBrief,CSFopenFracSbrief:s.openingFractionSbrief,CSFcloseFracSbrief:s.closingFractionSbrief,CSFoverFracSbrief:s.overFractionSbrief,CSFvulgarFraction:a.vulgarFraction,CQFvulgarFractionSmall:s.isSmallVulgarFraction,CSFopenRadicalVerbose:s.openingRadicalVerbose,CSFcloseRadicalVerbose:s.closingRadicalVerbose,CSFindexRadicalVerbose:s.indexRadicalVerbose,CSFopenRadicalBrief:s.openingRadicalBrief,CSFcloseRadicalBrief:s.closingRadicalBrief,CSFindexRadicalBrief:s.indexRadicalBrief,CSFopenRadicalSbrief:s.openingRadicalSbrief,CSFindexRadicalSbrief:s.indexRadicalSbrief,CQFisSmallRoot:s.smallRoot,CSFsuperscriptVerbose:s.superscriptVerbose,CSFsuperscriptBrief:s.superscriptBrief,CSFsubscriptVerbose:s.subscriptVerbose,CSFsubscriptBrief:s.subscriptBrief,CSFbaselineVerbose:s.baselineVerbose,CSFbaselineBrief:s.baselineBrief,CSFleftsuperscriptVerbose:s.superscriptVerbose,CSFleftsubscriptVerbose:s.subscriptVerbose,CSFrightsuperscriptVerbose:s.superscriptVerbose,CSFrightsubscriptVerbose:s.subscriptVerbose,CSFleftsuperscriptBrief:s.superscriptBrief,CSFleftsubscriptBrief:s.subscriptBrief,CSFrightsuperscriptBrief:s.superscriptBrief,CSFrightsubscriptBrief:s.subscriptBrief,CSFunderscript:s.nestedUnderscript,CSFoverscript:s.nestedOverscript,CSFendscripts:s.endscripts,CTFordinalCounter:a.ordinalCounter,CTFwordCounter:a.wordCounter,CTFcontentIterator:i.contentIterator,CQFdetIsSimple:s.determinantIsSimple,CSFRemoveParens:s.removeParens,CQFresetNesting:s.resetNestingDepth,CGFbaselineConstraint:s.generateBaselineConstraint,CGFtensorRules:s.generateTensorRules}),c.addStore("es.speech.mathspeak",r.DynamicCstr.BASE_LOCALE+".speech.mathspeak",{CTFunitMultipliers:l.unitMultipliers,CQFoneLeft:l.oneLeft}),c.addStore("fr.speech.mathspeak",r.DynamicCstr.BASE_LOCALE+".speech.mathspeak",{CSFbaselineVerbose:o.baselineVerbose,CSFbaselineBrief:o.baselineBrief,CSFleftsuperscriptVerbose:o.leftSuperscriptVerbose,CSFleftsubscriptVerbose:o.leftSubscriptVerbose,CSFleftsuperscriptBrief:o.leftSuperscriptBrief,CSFleftsubscriptBrief:o.leftSubscriptBrief})}},3269:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.smallRoot=t.generateTensorRules=t.removeParens=t.generateBaselineConstraint=t.determinantIsSimple=t.nestedOverscript=t.endscripts=t.overscoreNestingDepth=t.nestedUnderscript=t.underscoreNestingDepth=t.indexRadicalSbrief=t.openingRadicalSbrief=t.indexRadicalBrief=t.closingRadicalBrief=t.openingRadicalBrief=t.indexRadicalVerbose=t.closingRadicalVerbose=t.openingRadicalVerbose=t.getRootIndex=t.nestedRadical=t.radicalNestingDepth=t.baselineBrief=t.baselineVerbose=t.superscriptBrief=t.superscriptVerbose=t.subscriptBrief=t.subscriptVerbose=t.nestedSubSuper=t.isSmallVulgarFraction=t.overFractionSbrief=t.closingFractionSbrief=t.openingFractionSbrief=t.closingFractionBrief=t.openingFractionBrief=t.overFractionVerbose=t.closingFractionVerbose=t.openingFractionVerbose=t.nestedFraction=t.fractionNestingDepth=t.computeNestingDepth_=t.containsAttr=t.getNestingDepth=t.resetNestingDepth=t.nestingBarriers=t.spaceoutIdentifier=t.spaceoutNumber=t.spaceoutNodes=t.spaceoutText=void 0;const r=n(1426),i=n(6671),o=n(5024),s=n(4524),a=n(7793);let c={};function l(e,t){const n=Array.from(e.textContent),r=[],i=a.default.getInstance(),o=e.ownerDocument;for(let e,s=0;e=n[s];s++){const n=i.getNodeFactory().makeLeafNode(e,"unknown"),s=i.identifierNode(n,"unknown","");t(s),r.push(s.xml(o))}return r}function u(e,n,o,s,a,l){s=s||t.nestingBarriers,a=a||{},l=l||function(e){return!1};const u=i.serializeXml(n);if(c[e]||(c[e]={}),c[e][u])return c[e][u];if(l(n)||o.indexOf(n.tagName)<0)return 0;const d=h(n,o,r.setdifference(s,o),a,l,0);return c[e][u]=d,d}function d(e,t){if(!e.attributes)return!1;const n=i.toArray(e.attributes);for(let e,r=0;e=n[r];r++)if(t[e.nodeName]===e.nodeValue)return!0;return!1}function h(e,t,n,r,o,s){if(o(e)||n.indexOf(e.tagName)>-1||d(e,r))return s;if(t.indexOf(e.tagName)>-1&&s++,!e.childNodes||0===e.childNodes.length)return s;const a=i.toArray(e.childNodes);return Math.max.apply(null,a.map((function(e){return h(e,t,n,r,o,s)})))}function p(e){return u("fraction",e,["fraction"],t.nestingBarriers,{},s.LOCALE.FUNCTIONS.fracNestDepth)}function f(e,t,n){const r=p(e),i=Array(r).fill(t);return n&&i.push(n),i.join(s.LOCALE.MESSAGES.regexp.JOINER_FRAC)}function m(e,t,n){for(;e.parentNode;){const r=e.parentNode,i=r.parentNode;if(!i)break;const o=e.getAttribute&&e.getAttribute("role");("subscript"===i.tagName&&e===r.childNodes[1]||"tensor"===i.tagName&&o&&("leftsub"===o||"rightsub"===o))&&(t=n.sub+s.LOCALE.MESSAGES.regexp.JOINER_SUBSUPER+t),("superscript"===i.tagName&&e===r.childNodes[1]||"tensor"===i.tagName&&o&&("leftsuper"===o||"rightsuper"===o))&&(t=n.sup+s.LOCALE.MESSAGES.regexp.JOINER_SUBSUPER+t),e=i}return t.trim()}function g(e){return u("radical",e,["sqrt","root"],t.nestingBarriers,{})}function S(e,t,n){const r=g(e),i=b(e);return n=i?s.LOCALE.FUNCTIONS.combineRootIndex(n,i):n,1===r?n:s.LOCALE.FUNCTIONS.combineNestedRadical(t,s.LOCALE.FUNCTIONS.radicalNestDepth(r-1),n)}function b(e){const t="sqrt"===e.tagName?"2":o.evalXPath("children/*[1]",e)[0].textContent.trim();return s.LOCALE.MESSAGES.MSroots[t]||""}function N(e){return u("underscore",e,["underscore"],t.nestingBarriers,{},(function(e){return e.tagName&&"underscore"===e.tagName&&"underaccent"===e.childNodes[0].childNodes[1].getAttribute("role")}))}function E(e){return u("overscore",e,["overscore"],t.nestingBarriers,{},(function(e){return e.tagName&&"overscore"===e.tagName&&"overaccent"===e.childNodes[0].childNodes[1].getAttribute("role")}))}t.spaceoutText=function(e){return Array.from(e.textContent).join(" ")},t.spaceoutNodes=l,t.spaceoutNumber=function(e){return l(e,(function(e){e.textContent.match(/\W/)||(e.type="number")}))},t.spaceoutIdentifier=function(e){return l(e,(function(e){e.font="unknown",e.type="identifier"}))},t.nestingBarriers=["cases","cell","integral","line","matrix","multiline","overscore","root","row","sqrt","subscript","superscript","table","underscore","vector"],t.resetNestingDepth=function(e){return c={},[e]},t.getNestingDepth=u,t.containsAttr=d,t.computeNestingDepth_=h,t.fractionNestingDepth=p,t.nestedFraction=f,t.openingFractionVerbose=function(e){return f(e,s.LOCALE.MESSAGES.MS.START,s.LOCALE.MESSAGES.MS.FRAC_V)},t.closingFractionVerbose=function(e){return f(e,s.LOCALE.MESSAGES.MS.END,s.LOCALE.MESSAGES.MS.FRAC_V)},t.overFractionVerbose=function(e){return f(e,s.LOCALE.MESSAGES.MS.FRAC_OVER)},t.openingFractionBrief=function(e){return f(e,s.LOCALE.MESSAGES.MS.START,s.LOCALE.MESSAGES.MS.FRAC_B)},t.closingFractionBrief=function(e){return f(e,s.LOCALE.MESSAGES.MS.END,s.LOCALE.MESSAGES.MS.FRAC_B)},t.openingFractionSbrief=function(e){const t=p(e);return 1===t?s.LOCALE.MESSAGES.MS.FRAC_S:s.LOCALE.FUNCTIONS.combineNestedFraction(s.LOCALE.MESSAGES.MS.NEST_FRAC,s.LOCALE.FUNCTIONS.radicalNestDepth(t-1),s.LOCALE.MESSAGES.MS.FRAC_S)},t.closingFractionSbrief=function(e){const t=p(e);return 1===t?s.LOCALE.MESSAGES.MS.ENDFRAC:s.LOCALE.FUNCTIONS.combineNestedFraction(s.LOCALE.MESSAGES.MS.NEST_FRAC,s.LOCALE.FUNCTIONS.radicalNestDepth(t-1),s.LOCALE.MESSAGES.MS.ENDFRAC)},t.overFractionSbrief=function(e){const t=p(e);return 1===t?s.LOCALE.MESSAGES.MS.FRAC_OVER:s.LOCALE.FUNCTIONS.combineNestedFraction(s.LOCALE.MESSAGES.MS.NEST_FRAC,s.LOCALE.FUNCTIONS.radicalNestDepth(t-1),s.LOCALE.MESSAGES.MS.FRAC_OVER)},t.isSmallVulgarFraction=function(e){return s.LOCALE.FUNCTIONS.fracNestDepth(e)?[e]:[]},t.nestedSubSuper=m,t.subscriptVerbose=function(e){return m(e,s.LOCALE.MESSAGES.MS.SUBSCRIPT,{sup:s.LOCALE.MESSAGES.MS.SUPER,sub:s.LOCALE.MESSAGES.MS.SUB})},t.subscriptBrief=function(e){return m(e,s.LOCALE.MESSAGES.MS.SUB,{sup:s.LOCALE.MESSAGES.MS.SUP,sub:s.LOCALE.MESSAGES.MS.SUB})},t.superscriptVerbose=function(e){return m(e,s.LOCALE.MESSAGES.MS.SUPERSCRIPT,{sup:s.LOCALE.MESSAGES.MS.SUPER,sub:s.LOCALE.MESSAGES.MS.SUB})},t.superscriptBrief=function(e){return m(e,s.LOCALE.MESSAGES.MS.SUP,{sup:s.LOCALE.MESSAGES.MS.SUP,sub:s.LOCALE.MESSAGES.MS.SUB})},t.baselineVerbose=function(e){const t=m(e,"",{sup:s.LOCALE.MESSAGES.MS.SUPER,sub:s.LOCALE.MESSAGES.MS.SUB});return t?t.replace(new RegExp(s.LOCALE.MESSAGES.MS.SUB+"$"),s.LOCALE.MESSAGES.MS.SUBSCRIPT).replace(new RegExp(s.LOCALE.MESSAGES.MS.SUPER+"$"),s.LOCALE.MESSAGES.MS.SUPERSCRIPT):s.LOCALE.MESSAGES.MS.BASELINE},t.baselineBrief=function(e){return m(e,"",{sup:s.LOCALE.MESSAGES.MS.SUP,sub:s.LOCALE.MESSAGES.MS.SUB})||s.LOCALE.MESSAGES.MS.BASE},t.radicalNestingDepth=g,t.nestedRadical=S,t.getRootIndex=b,t.openingRadicalVerbose=function(e){return S(e,s.LOCALE.MESSAGES.MS.NESTED,s.LOCALE.MESSAGES.MS.STARTROOT)},t.closingRadicalVerbose=function(e){return S(e,s.LOCALE.MESSAGES.MS.NESTED,s.LOCALE.MESSAGES.MS.ENDROOT)},t.indexRadicalVerbose=function(e){return S(e,s.LOCALE.MESSAGES.MS.NESTED,s.LOCALE.MESSAGES.MS.ROOTINDEX)},t.openingRadicalBrief=function(e){return S(e,s.LOCALE.MESSAGES.MS.NEST_ROOT,s.LOCALE.MESSAGES.MS.STARTROOT)},t.closingRadicalBrief=function(e){return S(e,s.LOCALE.MESSAGES.MS.NEST_ROOT,s.LOCALE.MESSAGES.MS.ENDROOT)},t.indexRadicalBrief=function(e){return S(e,s.LOCALE.MESSAGES.MS.NEST_ROOT,s.LOCALE.MESSAGES.MS.ROOTINDEX)},t.openingRadicalSbrief=function(e){return S(e,s.LOCALE.MESSAGES.MS.NEST_ROOT,s.LOCALE.MESSAGES.MS.ROOT)},t.indexRadicalSbrief=function(e){return S(e,s.LOCALE.MESSAGES.MS.NEST_ROOT,s.LOCALE.MESSAGES.MS.INDEX)},t.underscoreNestingDepth=N,t.nestedUnderscript=function(e){const t=N(e);return Array(t).join(s.LOCALE.MESSAGES.MS.UNDER)+s.LOCALE.MESSAGES.MS.UNDERSCRIPT},t.overscoreNestingDepth=E,t.endscripts=function(e){return s.LOCALE.MESSAGES.MS.ENDSCRIPTS},t.nestedOverscript=function(e){const t=E(e);return Array(t).join(s.LOCALE.MESSAGES.MS.OVER)+s.LOCALE.MESSAGES.MS.OVERSCRIPT},t.determinantIsSimple=function(e){if("matrix"!==e.tagName||"determinant"!==e.getAttribute("role"))return[];const t=o.evalXPath("children/row/children/cell/children/*",e);for(let e,n=0;e=t[n];n++)if("number"!==e.tagName){if("identifier"===e.tagName){const t=e.getAttribute("role");if("latinletter"===t||"greekletter"===t||"otherletter"===t)continue}return[]}return[e]},t.generateBaselineConstraint=function(){const e=e=>e.map((e=>"ancestor::"+e)),t=e=>"not("+e+")",n=t(e(["subscript","superscript","tensor"]).join(" or ")),r=e(["relseq","multrel"]),i=e(["fraction","punctuation","fenced","sqrt","root"]);let o=[];for(let e,t=0;e=i[t];t++)o=o.concat(r.map((function(t){return e+"/"+t})));return[["ancestor::*/following-sibling::*",n,t(o.join(" | "))].join(" and ")]},t.removeParens=function(e){if(!e.childNodes.length||!e.childNodes[0].childNodes.length||!e.childNodes[0].childNodes[0].childNodes.length)return"";const t=e.childNodes[0].childNodes[0].childNodes[0].textContent;return t.match(/^\(.+\)$/)?t.slice(1,-1):t};const y=new Map([[3,"CSFleftsuperscript"],[4,"CSFleftsubscript"],[2,"CSFbaseline"],[1,"CSFrightsubscript"],[0,"CSFrightsuperscript"]]),A=new Map([[4,2],[3,3],[2,1],[1,4],[0,5]]);function _(e){const t=[];let n="",r="",i=parseInt(e,2);for(let e=0;e<5;e++){const o="children/*["+A.get(e)+"]";if(1&i){const t=y.get(e%5);n="[t] "+t+"Verbose; [n] "+o+";"+n,r="[t] "+t+"Brief; [n] "+o+";"+r}else t.unshift("name("+o+')="empty"');i>>=1}return[t,n,r]}t.generateTensorRules=function(e,t=!0){const n=["11111","11110","11101","11100","10111","10110","10101","10100","01111","01110","01101","01100"];for(let r,i=0;r=n[i];i++){let n="tensor"+r,[i,o,s]=_(r);e.defineRule(n,"default",o,"self::tensor",...i),t&&(e.defineRule(n,"brief",s,"self::tensor",...i),e.defineRule(n,"sbrief",s,"self::tensor",...i));const a=y.get(2);o+="; [t]"+a+"Verbose",s+="; [t]"+a+"Brief",n+="-baseline";const c="((.//*[not(*)])[last()]/@id)!=(((.//ancestor::fraction|ancestor::root|ancestor::sqrt|ancestor::cell|ancestor::line|ancestor::stree)[1]//*[not(*)])[last()]/@id)";e.defineRule(n,"default",o,"self::tensor",c,...i),t&&(e.defineRule(n,"brief",s,"self::tensor",c,...i),e.defineRule(n,"sbrief",s,"self::tensor",c,...i))}},t.smallRoot=function(e){let t=Object.keys(s.LOCALE.MESSAGES.MSroots).length;if(!t)return[];if(t++,!e.childNodes||0===e.childNodes.length||!e.childNodes[0].childNodes)return[];const n=e.childNodes[0].childNodes[0].textContent;if(!/^\d+$/.test(n))return[];const r=parseInt(n,10);return r>1&&r<=t?[e]:[]}},9570:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.implicitIterator=t.relationIterator=t.propagateNumber=t.checkParent_=t.NUMBER_INHIBITORS_=t.NUMBER_PROPAGATORS_=t.enlargeFence=t.indexRadical=t.closingRadical=t.openingRadical=t.radicalNestingDepth=t.nestedRadical=t.overBevelledFraction=t.overFraction=t.closingFraction=t.openingFraction=void 0;const r=n(4148),i=n(6671),o=n(5024),s=n(1058),a=n(4886),c=n(4036),l=n(241),u=n(4524),d=n(3269);function h(e,t){const n=p(e);return 1===n?t:new Array(n).join(u.LOCALE.MESSAGES.MS.NESTED)+t}function p(e,t){const n=t||0;return e.parentNode?p(e.parentNode,"root"===e.tagName||"sqrt"===e.tagName?n+1:n):n}function f(e){const t="\u2820";if(1===e.length)return t+e;const n=e.split("");return n.every((function(e){return"\u2833"===e}))?t+n.join(t):e.slice(0,-1)+t+e.slice(-1)}function m(e,n){const r=e.parent;if(!r)return!1;const i=r.type;return-1!==t.NUMBER_PROPAGATORS_.indexOf(i)||"prefixop"===i&&"negative"===r.role&&!n.script||"prefixop"===i&&"geometry"===r.role||!("punctuated"!==i||n.enclosed&&"text"!==r.role)}function g(e,n){return e.childNodes.length?(-1!==t.NUMBER_INHIBITORS_.indexOf(e.type)&&(n.script=!0),"fenced"===e.type?(n.number=!1,n.enclosed=!0,["",n]):(m(e,n)&&(n.number=!0,n.enclosed=!1),["",n])):(m(e,n)&&(n.number=!0,n.script=!1,n.enclosed=!1),[n.number?"number":"",{number:!1,enclosed:n.enclosed,script:n.script}])}t.openingFraction=function(e){const t=d.fractionNestingDepth(e);return new Array(t).join(u.LOCALE.MESSAGES.MS.FRACTION_REPEAT)+u.LOCALE.MESSAGES.MS.FRACTION_START},t.closingFraction=function(e){const t=d.fractionNestingDepth(e);return new Array(t).join(u.LOCALE.MESSAGES.MS.FRACTION_REPEAT)+u.LOCALE.MESSAGES.MS.FRACTION_END},t.overFraction=function(e){const t=d.fractionNestingDepth(e);return new Array(t).join(u.LOCALE.MESSAGES.MS.FRACTION_REPEAT)+u.LOCALE.MESSAGES.MS.FRACTION_OVER},t.overBevelledFraction=function(e){const t=d.fractionNestingDepth(e);return new Array(t).join(u.LOCALE.MESSAGES.MS.FRACTION_REPEAT)+"\u2838"+u.LOCALE.MESSAGES.MS.FRACTION_OVER},t.nestedRadical=h,t.radicalNestingDepth=p,t.openingRadical=function(e){return h(e,u.LOCALE.MESSAGES.MS.STARTROOT)},t.closingRadical=function(e){return h(e,u.LOCALE.MESSAGES.MS.ENDROOT)},t.indexRadical=function(e){return h(e,u.LOCALE.MESSAGES.MS.ROOTINDEX)},t.enlargeFence=f,s.Grammar.getInstance().setCorrection("enlargeFence",f),t.NUMBER_PROPAGATORS_=["multirel","relseq","appl","row","line"],t.NUMBER_INHIBITORS_=["subscript","superscript","overscore","underscore"],t.checkParent_=m,t.propagateNumber=g,(0,c.register)(new l.SemanticVisitor("nemeth","number",g,{number:!0})),t.relationIterator=function(e,t){const n=e.slice(0);let s,c=!0;return s=e.length>0?o.evalXPath("../../content/*",e[0]):[],function(){const e=s.shift(),o=n.shift(),l=n[0],h=t?[r.AuditoryDescription.create({text:t},{translate:!0})]:[];if(!e)return h;const p=o?d.nestedSubSuper(o,"",{sup:u.LOCALE.MESSAGES.MS.SUPER,sub:u.LOCALE.MESSAGES.MS.SUB}):"",f=o&&"EMPTY"!==i.tagName(o)||c&&e.parentNode.parentNode&&e.parentNode.parentNode.previousSibling?[r.AuditoryDescription.create({text:"\u2800"+p},{})]:[],m=l&&"EMPTY"!==i.tagName(l)||!s.length&&e.parentNode.parentNode&&e.parentNode.parentNode.nextSibling?[r.AuditoryDescription.create({text:"\u2800"},{})]:[],g=a.default.evaluateNode(e);return c=!1,h.concat(f,g,m)}},t.implicitIterator=function(e,t){const n=e.slice(0);let s;return s=e.length>0?o.evalXPath("../../content/*",e[0]):[],function(){const e=n.shift(),o=n[0],a=s.shift(),c=t?[r.AuditoryDescription.create({text:t},{translate:!0})]:[];if(!a)return c;const l=e&&"NUMBER"===i.tagName(e),u=o&&"NUMBER"===i.tagName(o);return c.concat(l&&u&&"space"===a.getAttribute("role")?[r.AuditoryDescription.create({text:"\u2800"},{})]:[])}}},2110:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.ordinalPosition=t.vulgarFraction=t.wordCounter=t.ordinalCounter=void 0;const r=n(1930),i=n(6671),o=n(4524),s=n(9385);t.ordinalCounter=function(e,t){let n=0;return function(){return o.LOCALE.NUMBERS.numericOrdinal(++n)+" "+t}},t.wordCounter=function(e,t){let n=0;return function(){return o.LOCALE.NUMBERS.numberToOrdinal(++n,!1)+" "+t}},t.vulgarFraction=function(e){const t=(0,s.convertVulgarFraction)(e,o.LOCALE.MESSAGES.MS.FRAC_OVER);return t.convertible&&t.enumerator&&t.denominator?[new r.Span(o.LOCALE.NUMBERS.numberToWords(t.enumerator),{extid:e.childNodes[0].childNodes[0].getAttribute("extid"),separator:""}),new r.Span(o.LOCALE.NUMBERS.vulgarSep,{separator:""}),new r.Span(o.LOCALE.NUMBERS.numberToOrdinal(t.denominator,1!==t.enumerator),{extid:e.childNodes[0].childNodes[1].getAttribute("extid")})]:[new r.Span(t.content||"",{extid:e.getAttribute("extid")})]},t.ordinalPosition=function(e){const t=i.toArray(e.parentNode.childNodes);return o.LOCALE.NUMBERS.numericOrdinal(t.indexOf(e)+1).toString()}},3724:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.BrailleRules=t.OtherRules=t.PrefixRules=void 0;const r=n(8310),i=n(931),o=n(3269),s=n(9570),a=n(2110),c=n(7278);t.PrefixRules=function(){c.addStore("en.prefix.default","",{CSFordinalPosition:a.ordinalPosition})},t.OtherRules=function(){c.addStore("en.speech.chromevox","",{CTFnodeCounter:i.nodeCounter,CTFcontentIterator:i.contentIterator}),c.addStore("en.speech.emacspeak","en.speech.chromevox",{CQFvulgarFractionSmall:o.isSmallVulgarFraction,CSFvulgarFraction:a.vulgarFraction})},t.BrailleRules=function(){c.addStore("nemeth.braille.default",r.DynamicCstr.BASE_LOCALE+".speech.mathspeak",{CSFopenFraction:s.openingFraction,CSFcloseFraction:s.closingFraction,CSFoverFraction:s.overFraction,CSFoverBevFraction:s.overBevelledFraction,CSFopenRadical:s.openingRadical,CSFcloseRadical:s.closingRadical,CSFindexRadical:s.indexRadical,CSFsubscript:o.subscriptVerbose,CSFsuperscript:o.superscriptVerbose,CSFbaseline:o.baselineVerbose,CGFtensorRules:e=>o.generateTensorRules(e,!1),CTFrelationIterator:s.relationIterator,CTFimplicitIterator:s.implicitIterator})}},9805:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.init=t.INIT_=void 0;const r=n(127),i=n(4972),o=n(3724);t.INIT_=!1,t.init=function(){t.INIT_||((0,i.MathspeakRules)(),(0,r.ClearspeakRules)(),(0,o.PrefixRules)(),(0,o.OtherRules)(),(0,o.BrailleRules)(),t.INIT_=!0)}},7278:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.getStore=t.addStore=t.funcStore=void 0;const r=n(8310);t.funcStore=new Map,t.addStore=function(e,n,r){const i={};if(n){const e=t.funcStore.get(n)||{};Object.assign(i,e)}t.funcStore.set(e,Object.assign(i,r))},t.getStore=function(e,n,i){return t.funcStore.get([e,n,i].join("."))||t.funcStore.get([r.DynamicCstr.DEFAULT_VALUES[r.Axis.LOCALE],n,i].join("."))||t.funcStore.get([r.DynamicCstr.BASE_LOCALE,n,i].join("."))||{}}},9771:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.oneLeft=t.leftMostUnit=t.rightMostUnit=t.unitMultipliers=void 0;const r=n(4148),i=n(5024),o=n(4524);t.unitMultipliers=function(e,t){const n=e;let i=0;return function(){const e=r.AuditoryDescription.create({text:a(n[i])&&c(n[i+1])?o.LOCALE.MESSAGES.unitTimes:""},{});return i++,[e]}};const s=["superscript","subscript","overscore","underscore"];function a(e){for(;e;){if("unit"===e.getAttribute("role"))return!0;const t=e.tagName,n=i.evalXPath("children/*",e);e=-1!==s.indexOf(t)?n[0]:n[n.length-1]}return!1}function c(e){for(;e;){if("unit"===e.getAttribute("role"))return!0;e=i.evalXPath("children/*",e)[0]}return!1}t.rightMostUnit=a,t.leftMostUnit=c,t.oneLeft=function(e){for(;e;){if("number"===e.tagName&&"1"===e.textContent)return[e];if("infixop"!==e.tagName||"multiplication"!==e.getAttribute("role")&&"implicit"!==e.getAttribute("role"))return[];e=i.evalXPath("children/*",e)[0]}return[]}},4660:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractWalker=void 0;const r=n(4148),i=n(4253),o=n(6671),s=n(4998),a=n(985),c=n(6988),l=n(8171),u=n(4524),d=n(1058),h=n(7984),p=n(7317),f=n(144),m=n(3955),g=n(5658),S=n(1848),b=n(8119),N=n(8835),E=n(5024);class y{constructor(e,t,n,r){this.node=e,this.generator=t,this.highlighter=n,this.modifier=!1,this.keyMapping=new Map([[c.KeyCode.UP,this.up.bind(this)],[c.KeyCode.DOWN,this.down.bind(this)],[c.KeyCode.RIGHT,this.right.bind(this)],[c.KeyCode.LEFT,this.left.bind(this)],[c.KeyCode.TAB,this.repeat.bind(this)],[c.KeyCode.DASH,this.expand.bind(this)],[c.KeyCode.SPACE,this.depth.bind(this)],[c.KeyCode.HOME,this.home.bind(this)],[c.KeyCode.X,this.summary.bind(this)],[c.KeyCode.Z,this.detail.bind(this)],[c.KeyCode.V,this.virtualize.bind(this)],[c.KeyCode.P,this.previous.bind(this)],[c.KeyCode.U,this.undo.bind(this)],[c.KeyCode.LESS,this.previousRules.bind(this)],[c.KeyCode.GREATER,this.nextRules.bind(this)]]),this.cursors=[],this.xml_=null,this.rebuilt_=null,this.focus_=null,this.active_=!1,this.node.id?this.id=this.node.id:this.node.hasAttribute(y.SRE_ID_ATTR)?this.id=this.node.getAttribute(y.SRE_ID_ATTR):(this.node.setAttribute(y.SRE_ID_ATTR,y.ID_COUNTER.toString()),this.id=y.ID_COUNTER++),this.rootNode=N.getSemanticRoot(e),this.rootId=this.rootNode.getAttribute(l.Attribute.ID),this.xmlString_=r,this.moved=b.WalkerMoves.ENTER}getXml(){return this.xml_||(this.xml_=o.parseInput(this.xmlString_)),this.xml_}getRebuilt(){return this.rebuilt_||this.rebuildStree(),this.rebuilt_}isActive(){return this.active_}activate(){this.isActive()||(this.generator.start(),this.toggleActive_())}deactivate(){this.isActive()&&(b.WalkerState.setState(this.id,this.primaryId()),this.generator.end(),this.toggleActive_())}getFocus(e=!1){return this.focus_||(this.focus_=this.singletonFocus(this.rootId)),e&&this.updateFocus(),this.focus_}setFocus(e){this.focus_=e}getDepth(){return this.levels.depth()-1}isSpeech(){return this.generator.modality===l.Attribute.SPEECH}focusDomNodes(){return this.getFocus().getDomNodes()}focusSemanticNodes(){return this.getFocus().getSemanticNodes()}speech(){const e=this.focusDomNodes();if(!e.length)return"";const t=this.specialMove();if(null!==t)return t;switch(this.moved){case b.WalkerMoves.DEPTH:return this.depth_();case b.WalkerMoves.SUMMARY:return this.summary_();case b.WalkerMoves.DETAIL:return this.detail_();default:{const t=[],n=this.focusSemanticNodes();for(let r=0,i=e.length;r0}restoreState(){if(!this.highlighter)return;const e=b.WalkerState.getState(this.id);if(!e)return;let t=this.getRebuilt().nodeDict[e];const n=[];for(;t;)n.push(t.id),t=t.parent;for(n.pop();n.length>0;){this.down();const e=n.pop(),t=this.findFocusOnLevel(e);if(!t)break;this.setFocus(t)}this.moved=b.WalkerMoves.ENTER}updateFocus(){this.setFocus(g.Focus.factory(this.getFocus().getSemanticPrimary().id.toString(),this.getFocus().getSemanticNodes().map((e=>e.id.toString())),this.getRebuilt(),this.node))}rebuildStree(){this.rebuilt_=new S.RebuildStree(this.getXml()),this.rootId=this.rebuilt_.stree.root.id.toString(),this.generator.setRebuilt(this.rebuilt_),this.skeleton=h.SemanticSkeleton.fromTree(this.rebuilt_.stree),this.skeleton.populate(),this.focus_=this.singletonFocus(this.rootId),this.levels=this.initLevels(),f.connectMactions(this.node,this.getXml(),this.rebuilt_.xml)}previousLevel(){const e=this.getFocus().getDomPrimary();return e?N.getAttribute(e,l.Attribute.PARENT):this.getFocus().getSemanticPrimary().parent.id.toString()}nextLevel(){const e=this.getFocus().getDomPrimary();let t,n;if(e){t=N.splitAttribute(N.getAttribute(e,l.Attribute.CHILDREN)),n=N.splitAttribute(N.getAttribute(e,l.Attribute.CONTENT));const r=N.getAttribute(e,l.Attribute.TYPE),i=N.getAttribute(e,l.Attribute.ROLE);return this.combineContentChildren(r,i,n,t)}const r=e=>e.id.toString(),i=this.getRebuilt().nodeDict[this.primaryId()];return t=i.childNodes.map(r),n=i.contentNodes.map(r),0===t.length?[]:this.combineContentChildren(i.type,i.role,n,t)}singletonFocus(e){this.getRebuilt();const t=this.retrieveVisuals(e);return this.focusFromId(e,t)}retrieveVisuals(e){if(!this.skeleton)return[e];const t=parseInt(e,10),n=this.skeleton.subtreeNodes(t);if(!n.length)return[e];n.unshift(t);const r={},i=[];E.updateEvaluator(this.getXml());for(const e of n)r[e]||(i.push(e.toString()),r[e]=!0,this.subtreeIds(e,r));return i}subtreeIds(e,t){const n=E.evalXPath(`//*[@data-semantic-id="${e}"]`,this.getXml());E.evalXPath("*//@data-semantic-id",n[0]).forEach((e=>t[parseInt(e.textContent,10)]=!0))}focusFromId(e,t){return g.Focus.factory(e,t,this.getRebuilt(),this.node)}summary(){return this.moved=this.isSpeech()?b.WalkerMoves.SUMMARY:b.WalkerMoves.REPEAT,this.getFocus().clone()}detail(){return this.moved=this.isSpeech()?b.WalkerMoves.DETAIL:b.WalkerMoves.REPEAT,this.getFocus().clone()}specialMove(){return null}virtualize(e){return this.cursors.push({focus:this.getFocus(),levels:this.levels,undo:e||!this.cursors.length}),this.levels=this.levels.clone(),this.getFocus().clone()}previous(){const e=this.cursors.pop();return e?(this.levels=e.levels,e.focus):this.getFocus()}undo(){let e;do{e=this.cursors.pop()}while(e&&!e.undo);return e?(this.levels=e.levels,e.focus):this.getFocus()}update(e){this.generator.setOptions(e),(0,a.setup)(e).then((()=>p.generator("Tree").getSpeech(this.node,this.getXml())))}nextRules(){const e=this.generator.getOptions();return"speech"!==e.modality?this.getFocus():(s.DOMAIN_TO_STYLES[e.domain]=e.style,e.domain="mathspeak"===e.domain?"clearspeak":"mathspeak",e.style=s.DOMAIN_TO_STYLES[e.domain],this.update(e),this.moved=b.WalkerMoves.REPEAT,this.getFocus().clone())}nextStyle(e,t){if("mathspeak"===e){const e=["default","brief","sbrief"],n=e.indexOf(t);return-1===n?t:n>=e.length-1?e[0]:e[n+1]}if("clearspeak"===e){const e=m.ClearspeakPreferences.getLocalePreferences().en;if(!e)return"default";const n=m.ClearspeakPreferences.relevantPreferences(this.getFocus().getSemanticPrimary()),r=m.ClearspeakPreferences.findPreference(t,n),i=e[n].map((function(e){return e.split("_")[1]})),o=i.indexOf(r);if(-1===o)return t;const s=o>=i.length-1?i[0]:i[o+1];return m.ClearspeakPreferences.addPreference(t,n,s)}return t}previousRules(){const e=this.generator.getOptions();return"speech"!==e.modality?this.getFocus():(e.style=this.nextStyle(e.domain,e.style),this.update(e),this.moved=b.WalkerMoves.REPEAT,this.getFocus().clone())}refocus(){let e,t=this.getFocus();for(;!t.getNodes().length;){e=this.levels.peek();const n=this.up();if(!n)break;this.setFocus(n),t=this.getFocus(!0)}this.levels.push(e),this.setFocus(t)}toggleActive_(){this.active_=!this.active_}mergePrefix_(e,t=[]){const n=this.isSpeech()?this.prefix_():"";n&&e.unshift(n);const r=this.isSpeech()?this.postfix_():"";return r&&e.push(r),i.finalize(i.merge(t.concat(e)))}prefix_(){const e=this.getFocus().getDomNodes(),t=this.getFocus().getSemanticNodes();return e[0]?N.getAttribute(e[0],l.Attribute.PREFIX):f.retrievePrefix(t[0])}postfix_(){const e=this.getFocus().getDomNodes();return e[0]?N.getAttribute(e[0],l.Attribute.POSTFIX):""}depth_(){const e=d.Grammar.getInstance().getParameter("depth");d.Grammar.getInstance().setParameter("depth",!0);const t=this.getFocus().getDomPrimary(),n=this.expandable(t)?u.LOCALE.MESSAGES.navigate.EXPANDABLE:this.collapsible(t)?u.LOCALE.MESSAGES.navigate.COLLAPSIBLE:"",o=u.LOCALE.MESSAGES.navigate.LEVEL+" "+this.getDepth(),s=this.getFocus().getSemanticNodes(),a=f.retrievePrefix(s[0]),c=[new r.AuditoryDescription({text:o,personality:{}}),new r.AuditoryDescription({text:a,personality:{}}),new r.AuditoryDescription({text:n,personality:{}})];return d.Grammar.getInstance().setParameter("depth",e),i.finalize(i.markup(c))}actionable_(e){const t=null==e?void 0:e.parentNode;return t&&this.highlighter.isMactionNode(t)?t:null}summary_(){const e=this.getFocus().getSemanticPrimary().id.toString(),t=this.getRebuilt().xml.getAttribute("id")===e?this.getRebuilt().xml:o.querySelectorAllByAttrValue(this.getRebuilt().xml,"id",e)[0],n=f.retrieveSummary(t);return this.mergePrefix_([n])}detail_(){const e=this.getFocus().getSemanticPrimary().id.toString(),t=this.getRebuilt().xml.getAttribute("id")===e?this.getRebuilt().xml:o.querySelectorAllByAttrValue(this.getRebuilt().xml,"id",e)[0],n=t.getAttribute("alternative");t.removeAttribute("alternative");const r=f.computeMarkup(t),i=this.mergePrefix_([r]);return t.setAttribute("alternative",n),i}}t.AbstractWalker=y,y.ID_COUNTER=0,y.SRE_ID_ATTR="sre-explorer-id"},4296:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.DummyWalker=void 0;const r=n(4660);class i extends r.AbstractWalker{up(){return null}down(){return null}left(){return null}right(){return null}repeat(){return null}depth(){return null}home(){return null}getDepth(){return 0}initLevels(){return null}combineContentChildren(e,t,n,r){return[]}findFocusOnLevel(e){return null}}t.DummyWalker=i},5658:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.Focus=void 0;const r=n(8835);class i{constructor(e,t){this.nodes=e,this.primary=t,this.domNodes=[],this.domPrimary_=null,this.allNodes=[]}static factory(e,t,n,o){const s=e=>r.getBySemanticId(o,e),a=n.nodeDict,c=s(e),l=t.map(s),u=t.map((function(e){return a[e]})),d=new i(u,a[e]);return d.domNodes=l,d.domPrimary_=c,d.allNodes=i.generateAllVisibleNodes_(t,l,a,o),d}static generateAllVisibleNodes_(e,t,n,o){const s=e=>r.getBySemanticId(o,e);let a=[];for(let r=0,c=e.length;r=t.length?null:t[e]}depth(){return this.level_.length}clone(){const e=new n;return e.level_=this.level_.slice(0),e}toString(){let e="";for(let t,n=0;t=this.level_[n];n++)e+="\n"+t.map((function(e){return e.toString()}));return e}}t.Levels=n},1848:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.RebuildStree=void 0;const r=n(6671),i=n(8171),o=n(4020),s=n(4790),a=n(7793),c=n(7984),l=n(1784),u=n(8901),d=n(8835);class h{constructor(e){this.mathml=e,this.factory=new s.SemanticNodeFactory,this.nodeDict={},this.mmlRoot=d.getSemanticRoot(e),this.streeRoot=this.assembleTree(this.mmlRoot),this.stree=l.SemanticTree.fromNode(this.streeRoot,this.mathml),this.xml=this.stree.xml(),a.default.getInstance().setNodeFactory(this.factory)}static addAttributes(e,t,n){n&&1===t.childNodes.length&&t.childNodes[0].nodeType!==r.NodeType.TEXT_NODE&&u.addAttributes(e,t.childNodes[0]),u.addAttributes(e,t)}static textContent(e,t,n){if(!n&&t.textContent)return void(e.textContent=t.textContent);const r=d.splitAttribute(d.getAttribute(t,i.Attribute.OPERATOR));r.length>1&&(e.textContent=r[1])}static isPunctuated(e){return!c.SemanticSkeleton.simpleCollapseStructure(e)&&e[1]&&c.SemanticSkeleton.contentCollapseStructure(e[1])}getTree(){return this.stree}assembleTree(e){const t=this.makeNode(e),n=d.splitAttribute(d.getAttribute(e,i.Attribute.CHILDREN)),r=d.splitAttribute(d.getAttribute(e,i.Attribute.CONTENT));if(h.addAttributes(t,e,!(n.length||r.length)),0===r.length&&0===n.length)return h.textContent(t,e),t;if(r.length>0){const e=d.getBySemanticId(this.mathml,r[0]);e&&h.textContent(t,e,!0)}t.contentNodes=r.map((e=>this.setParent(e,t))),t.childNodes=n.map((e=>this.setParent(e,t)));const o=d.getAttribute(e,i.Attribute.COLLAPSED);return o?this.postProcess(t,o):t}makeNode(e){const t=d.getAttribute(e,i.Attribute.TYPE),n=d.getAttribute(e,i.Attribute.ROLE),r=d.getAttribute(e,i.Attribute.FONT),o=d.getAttribute(e,i.Attribute.ANNOTATION)||"",s=d.getAttribute(e,i.Attribute.ID),a=d.getAttribute(e,i.Attribute.EMBELLISHED),c=d.getAttribute(e,i.Attribute.FENCEPOINTER),l=this.createNode(parseInt(s,10));return l.type=t,l.role=n,l.font=r||"unknown",l.parseAnnotation(o),c&&(l.fencePointer=c),a&&(l.embellished=a),l}makePunctuation(e){const t=this.createNode(e);return t.updateContent((0,o.invisibleComma)()),t.role="dummy",t}makePunctuated(e,t,n){const r=this.createNode(t[0]);r.type="punctuated",r.embellished=e.embellished,r.fencePointer=e.fencePointer,r.role=n;const i=t.splice(1,1)[0].slice(1);r.contentNodes=i.map(this.makePunctuation.bind(this)),this.collapsedChildren_(t)}makeEmpty(e,t,n){const r=this.createNode(t);r.type="empty",r.embellished=e.embellished,r.fencePointer=e.fencePointer,r.role=n}makeIndex(e,t,n){if(h.isPunctuated(t))return this.makePunctuated(e,t,n),void(t=t[0]);c.SemanticSkeleton.simpleCollapseStructure(t)&&!this.nodeDict[t.toString()]&&this.makeEmpty(e,t,n)}postProcess(e,t){const n=c.SemanticSkeleton.fromString(t).array;if("subsup"===e.type){const t=this.createNode(n[1][0]);return t.type="subscript",t.role="subsup",e.type="superscript",t.embellished=e.embellished,t.fencePointer=e.fencePointer,this.makeIndex(e,n[1][2],"rightsub"),this.makeIndex(e,n[2],"rightsuper"),this.collapsedChildren_(n),e}if("subscript"===e.type)return this.makeIndex(e,n[2],"rightsub"),this.collapsedChildren_(n),e;if("superscript"===e.type)return this.makeIndex(e,n[2],"rightsuper"),this.collapsedChildren_(n),e;if("tensor"===e.type)return this.makeIndex(e,n[2],"leftsub"),this.makeIndex(e,n[3],"leftsuper"),this.makeIndex(e,n[4],"rightsub"),this.makeIndex(e,n[5],"rightsuper"),this.collapsedChildren_(n),e;if("punctuated"===e.type){if(h.isPunctuated(n)){const t=n.splice(1,1)[0].slice(1);e.contentNodes=t.map(this.makePunctuation.bind(this))}return e}if("underover"===e.type){const t=this.createNode(n[1][0]);return"overaccent"===e.childNodes[1].role?(t.type="overscore",e.type="underscore"):(t.type="underscore",e.type="overscore"),t.role="underover",t.embellished=e.embellished,t.fencePointer=e.fencePointer,this.collapsedChildren_(n),e}return e}createNode(e){const t=this.factory.makeNode(e);return this.nodeDict[e.toString()]=t,t}collapsedChildren_(e){const t=e=>{const n=this.nodeDict[e[0]];n.childNodes=[];for(let r=1,i=e.length;rt.getSemanticPrimary().id===e))}}t.SemanticWalker=o},3531:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.SyntaxWalker=void 0;const r=n(1426),i=n(4660),o=n(1497);class s extends i.AbstractWalker{constructor(e,t,n,r){super(e,t,n,r),this.node=e,this.generator=t,this.highlighter=n,this.levels=null,this.restoreState()}initLevels(){const e=new o.Levels;return e.push([this.primaryId()]),e}up(){super.up();const e=this.previousLevel();return e?(this.levels.pop(),this.singletonFocus(e)):null}down(){super.down();const e=this.nextLevel();if(0===e.length)return null;const t=this.singletonFocus(e[0]);return t&&this.levels.push(e),t}combineContentChildren(e,t,n,i){switch(e){case"relseq":case"infixop":case"multirel":return(0,r.interleaveLists)(i,n);case"prefixop":return n.concat(i);case"postfixop":return i.concat(n);case"matrix":case"vector":case"fenced":return i.unshift(n[0]),i.push(n[1]),i;case"cases":return i.unshift(n[0]),i;case"punctuated":return"text"===t?(0,r.interleaveLists)(i,n):i;case"appl":return[i[0],n[0],i[1]];case"root":return[i[1],i[0]];default:return i}}left(){super.left();const e=this.levels.indexOf(this.primaryId());if(null===e)return null;const t=this.levels.get(e-1);return t?this.singletonFocus(t):null}right(){super.right();const e=this.levels.indexOf(this.primaryId());if(null===e)return null;const t=this.levels.get(e+1);return t?this.singletonFocus(t):null}findFocusOnLevel(e){return this.singletonFocus(e.toString())}focusDomNodes(){return[this.getFocus().getDomPrimary()]}focusSemanticNodes(){return[this.getFocus().getSemanticPrimary()]}}t.SyntaxWalker=s},4051:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.TableWalker=void 0;const r=n(6671),i=n(6988),o=n(3531),s=n(8119);class a extends o.SyntaxWalker{constructor(e,t,n,r){super(e,t,n,r),this.node=e,this.generator=t,this.highlighter=n,this.firstJump=null,this.key_=null,this.row_=0,this.currentTable_=null,this.keyMapping.set(i.KeyCode.ZERO,this.jumpCell.bind(this)),this.keyMapping.set(i.KeyCode.ONE,this.jumpCell.bind(this)),this.keyMapping.set(i.KeyCode.TWO,this.jumpCell.bind(this)),this.keyMapping.set(i.KeyCode.THREE,this.jumpCell.bind(this)),this.keyMapping.set(i.KeyCode.FOUR,this.jumpCell.bind(this)),this.keyMapping.set(i.KeyCode.FIVE,this.jumpCell.bind(this)),this.keyMapping.set(i.KeyCode.SIX,this.jumpCell.bind(this)),this.keyMapping.set(i.KeyCode.SEVEN,this.jumpCell.bind(this)),this.keyMapping.set(i.KeyCode.EIGHT,this.jumpCell.bind(this)),this.keyMapping.set(i.KeyCode.NINE,this.jumpCell.bind(this))}move(e){this.key_=e;const t=super.move(e);return this.modifier=!1,t}up(){return this.moved=s.WalkerMoves.UP,this.eligibleCell_()?this.verticalMove_(!1):super.up()}down(){return this.moved=s.WalkerMoves.DOWN,this.eligibleCell_()?this.verticalMove_(!0):super.down()}jumpCell(){if(!this.isInTable_()||null===this.key_)return this.getFocus();if(this.moved===s.WalkerMoves.ROW){this.moved=s.WalkerMoves.CELL;const e=this.key_-i.KeyCode.ZERO;return this.isLegalJump_(this.row_,e)?this.jumpCell_(this.row_,e):this.getFocus()}const e=this.key_-i.KeyCode.ZERO;return e>this.currentTable_.childNodes.length?this.getFocus():(this.row_=e,this.moved=s.WalkerMoves.ROW,this.getFocus().clone())}undo(){const e=super.undo();return e===this.firstJump&&(this.firstJump=null),e}eligibleCell_(){const e=this.getFocus().getSemanticPrimary();return this.modifier&&"cell"===e.type&&-1!==a.ELIGIBLE_CELL_ROLES.indexOf(e.role)}verticalMove_(e){const t=this.previousLevel();if(!t)return null;const n=this.getFocus(),r=this.levels.indexOf(this.primaryId()),i=this.levels.pop(),o=this.levels.indexOf(t),s=this.levels.get(e?o+1:o-1);if(!s)return this.levels.push(i),null;this.setFocus(this.singletonFocus(s));const a=this.nextLevel();return a[r]?(this.levels.push(a),this.singletonFocus(a[r])):(this.setFocus(n),this.levels.push(i),null)}jumpCell_(e,t){this.firstJump?this.virtualize(!1):(this.firstJump=this.getFocus(),this.virtualize(!0));const n=this.currentTable_.id.toString();let r;do{r=this.levels.pop()}while(-1===r.indexOf(n));this.levels.push(r),this.setFocus(this.singletonFocus(n)),this.levels.push(this.nextLevel());const i=this.currentTable_.childNodes[e-1];return this.setFocus(this.singletonFocus(i.id.toString())),this.levels.push(this.nextLevel()),this.singletonFocus(i.childNodes[t-1].id.toString())}isLegalJump_(e,t){const n=r.querySelectorAllByAttrValue(this.getRebuilt().xml,"id",this.currentTable_.id.toString())[0];if(!n||n.hasAttribute("alternative"))return!1;const i=this.currentTable_.childNodes[e-1];if(!i)return!1;const o=r.querySelectorAllByAttrValue(n,"id",i.id.toString())[0];return!(!o||o.hasAttribute("alternative"))&&!(!i||!i.childNodes[t-1])}isInTable_(){let e=this.getFocus().getSemanticPrimary();for(;e;){if(-1!==a.ELIGIBLE_TABLE_TYPES.indexOf(e.type))return this.currentTable_=e,!0;e=e.parent}return!1}}t.TableWalker=a,a.ELIGIBLE_CELL_ROLES=["determinant","rowvector","binomial","squarematrix","multiline","matrix","vector","cases","table"],a.ELIGIBLE_TABLE_TYPES=["multiline","matrix","vector","cases","table"]},8119:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.WalkerState=t.WalkerMoves=void 0,function(e){e.UP="up",e.DOWN="down",e.LEFT="left",e.RIGHT="right",e.REPEAT="repeat",e.DEPTH="depth",e.ENTER="enter",e.EXPAND="expand",e.HOME="home",e.SUMMARY="summary",e.DETAIL="detail",e.ROW="row",e.CELL="cell"}(t.WalkerMoves||(t.WalkerMoves={}));class n{static resetState(e){delete n.STATE[e]}static setState(e,t){n.STATE[e]=t}static getState(e){return n.STATE[e]}}t.WalkerState=n,n.STATE={}},907:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.walkerMapping_=t.walker=void 0;const r=n(4296),i=n(1937),o=n(3531),s=n(4051);t.walker=function(e,n,r,i,o){return(t.walkerMapping_[e.toLowerCase()]||t.walkerMapping_.dummy)(n,r,i,o)},t.walkerMapping_={dummy:(e,t,n,i)=>new r.DummyWalker(e,t,n,i),semantic:(e,t,n,r)=>new i.SemanticWalker(e,t,n,r),syntax:(e,t,n,r)=>new o.SyntaxWalker(e,t,n,r),table:(e,t,n,r)=>new s.TableWalker(e,t,n,r)}},8835:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.getBySemanticId=t.getSemanticRoot=t.getAttribute=t.splitAttribute=void 0;const r=n(6671),i=n(8171);t.splitAttribute=function(e){return e?e.split(/,/):[]},t.getAttribute=function(e,t){return e.getAttribute(t)},t.getSemanticRoot=function(e){if(e.hasAttribute(i.Attribute.TYPE)&&!e.hasAttribute(i.Attribute.PARENT))return e;const t=r.querySelectorAllByAttr(e,i.Attribute.TYPE);for(let e,n=0;e=t[n];n++)if(!e.hasAttribute(i.Attribute.PARENT))return e;return e},t.getBySemanticId=function(e,t){return e.getAttribute(i.Attribute.ID)===t?e:r.querySelectorAllByAttrValue(e,i.Attribute.ID,t)[0]}}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var n=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e].call(n.exports,n,n.exports,__webpack_require__),n.exports}__webpack_require__.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(e,t){for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var __webpack_exports__={};!function(){var e=__webpack_require__(8723),t=__webpack_require__(7306),n=__webpack_require__(8905),r=__webpack_require__.n(n);MathJax.loader&&MathJax.loader.checkVersion("a11y/sre",t.q,"a11y"),(0,e.r8)({_:{a11y:{sre:n}}});var i=__webpack_require__(1993);if(MathJax.startup){var o=i.GL.resolvePath("[sre]",!1);if("undefined"!=typeof window)window.SREfeature={json:o};else{try{o=MathJax.config.loader.require.resolve(o+"/base.json").replace(/\/base\.json$/,"")}catch(e){}__webpack_require__.g.SREfeature={json:o}}}MathJax.startup&&(("undefined"!=typeof window?window:__webpack_require__.g).SREfeature.custom=function(e){return r().preloadLocales(e)})}()})();!function(){"use strict";var c={8667:function(c,f){f.q=void 0,f.q="3.2.1"},2308:function(c,f,i){var t,e=this&&this.__extends||(t=function(c,f){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(c,f){c.__proto__=f}||function(c,f){for(var i in f)Object.prototype.hasOwnProperty.call(f,i)&&(c[i]=f[i])},t(c,f)},function(c,f){if("function"!=typeof f&&null!==f)throw new TypeError("Class extends value "+String(f)+" is not a constructor or null");function i(){this.constructor=c}t(c,f),c.prototype=null===f?Object.create(f):(i.prototype=f.prototype,new i)}),s=this&&this.__assign||function(){return s=Object.assign||function(c){for(var f,i=1,t=arguments.length;i\\338"},8816:{c:"\\2264\\338"},8817:{c:"\\2265\\338"},8832:{c:"\\227A\\338"},8833:{c:"\\227B\\338"},8836:{c:"\\2282\\338"},8837:{c:"\\2283\\338"},8840:{c:"\\2286\\338"},8841:{c:"\\2287\\338"},8876:{c:"\\22A2\\338"},8877:{c:"\\22A8\\338"},8930:{c:"\\2291\\338"},8931:{c:"\\2292\\338"},9001:{c:"\\27E8"},9002:{c:"\\27E9"},9653:{c:"\\25B3"},9663:{c:"\\25BD"},10072:{c:"\\2223"},10744:{c:"/",f:"BI"},10799:{c:"\\D7"},12296:{c:"\\27E8"},12297:{c:"\\27E9"}})},6051:function(c,f,i){Object.defineProperty(f,"__esModule",{value:!0}),f.doubleStruck=void 0;var t=i(5674);Object.defineProperty(f,"doubleStruck",{enumerable:!0,get:function(){return t.doubleStruck}})},9236:function(c,f,i){Object.defineProperty(f,"__esModule",{value:!0}),f.frakturBold=void 0;var t=i(73),e=i(7002);f.frakturBold=(0,t.AddCSS)(e.frakturBold,{8260:{c:"/"}})},1937:function(c,f,i){Object.defineProperty(f,"__esModule",{value:!0}),f.fraktur=void 0;var t=i(73),e=i(9349);f.fraktur=(0,t.AddCSS)(e.fraktur,{8260:{c:"/"}})},4244:function(c,f,i){Object.defineProperty(f,"__esModule",{value:!0}),f.italic=void 0;var t=i(73),e=i(9741);f.italic=(0,t.AddCSS)(e.italic,{47:{f:"I"},989:{c:"\\E008",f:"A"},8213:{c:"\\2014"},8215:{c:"_"},8260:{c:"/",f:"I"},8710:{c:"\\394",f:"I"},10744:{c:"/",f:"I"}})},482:function(c,f,i){Object.defineProperty(f,"__esModule",{value:!0}),f.largeop=void 0;var t=i(73),e=i(2827);f.largeop=(0,t.AddCSS)(e.largeop,{8214:{f:"S1"},8260:{c:"/"},8593:{f:"S1"},8595:{f:"S1"},8657:{f:"S1"},8659:{f:"S1"},8739:{f:"S1"},8741:{f:"S1"},9001:{c:"\\27E8"},9002:{c:"\\27E9"},9168:{f:"S1"},10072:{c:"\\2223",f:"S1"},10764:{c:"\\222C\\222C"},12296:{c:"\\27E8"},12297:{c:"\\27E9"}})},196:function(c,f,i){Object.defineProperty(f,"__esModule",{value:!0}),f.monospace=void 0;var t=i(73),e=i(2970);f.monospace=(0,t.AddCSS)(e.monospace,{697:{c:"\\2032"},913:{c:"A"},914:{c:"B"},917:{c:"E"},918:{c:"Z"},919:{c:"H"},921:{c:"I"},922:{c:"K"},924:{c:"M"},925:{c:"N"},927:{c:"O"},929:{c:"P"},932:{c:"T"},935:{c:"X"},8215:{c:"_"},8243:{c:"\\2032\\2032"},8244:{c:"\\2032\\2032\\2032"},8260:{c:"/"},8279:{c:"\\2032\\2032\\2032\\2032"},8710:{c:"\\394"}})},527:function(c,f,i){Object.defineProperty(f,"__esModule",{value:!0}),f.normal=void 0;var t=i(73),e=i(1668);f.normal=(0,t.AddCSS)(e.normal,{163:{f:"MI"},165:{f:"A"},174:{f:"A"},183:{c:"\\22C5"},240:{f:"A"},697:{c:"\\2032"},913:{c:"A"},914:{c:"B"},917:{c:"E"},918:{c:"Z"},919:{c:"H"},921:{c:"I"},922:{c:"K"},924:{c:"M"},925:{c:"N"},927:{c:"O"},929:{c:"P"},932:{c:"T"},935:{c:"X"},8192:{c:""},8193:{c:""},8194:{c:""},8195:{c:""},8196:{c:""},8197:{c:""},8198:{c:""},8201:{c:""},8202:{c:""},8203:{c:""},8204:{c:""},8213:{c:"\\2014"},8214:{c:"\\2225"},8215:{c:"_"},8226:{c:"\\2219"},8243:{c:"\\2032\\2032"},8244:{c:"\\2032\\2032\\2032"},8245:{f:"A"},8246:{c:"\\2035\\2035",f:"A"},8247:{c:"\\2035\\2035\\2035",f:"A"},8254:{c:"\\2C9"},8260:{c:"/"},8279:{c:"\\2032\\2032\\2032\\2032"},8288:{c:""},8289:{c:""},8290:{c:""},8291:{c:""},8292:{c:""},8407:{c:"\\2192",f:"V"},8450:{c:"C",f:"A"},8459:{c:"H",f:"SC"},8460:{c:"H",f:"FR"},8461:{c:"H",f:"A"},8462:{c:"h",f:"I"},8463:{f:"A"},8464:{c:"I",f:"SC"},8465:{c:"I",f:"FR"},8466:{c:"L",f:"SC"},8469:{c:"N",f:"A"},8473:{c:"P",f:"A"},8474:{c:"Q",f:"A"},8475:{c:"R",f:"SC"},8476:{c:"R",f:"FR"},8477:{c:"R",f:"A"},8484:{c:"Z",f:"A"},8486:{c:"\\3A9"},8487:{f:"A"},8488:{c:"Z",f:"FR"},8492:{c:"B",f:"SC"},8493:{c:"C",f:"FR"},8496:{c:"E",f:"SC"},8497:{c:"F",f:"SC"},8498:{f:"A"},8499:{c:"M",f:"SC"},8502:{f:"A"},8503:{f:"A"},8504:{f:"A"},8513:{f:"A"},8602:{f:"A"},8603:{f:"A"},8606:{f:"A"},8608:{f:"A"},8610:{f:"A"},8611:{f:"A"},8619:{f:"A"},8620:{f:"A"},8621:{f:"A"},8622:{f:"A"},8624:{f:"A"},8625:{f:"A"},8630:{f:"A"},8631:{f:"A"},8634:{f:"A"},8635:{f:"A"},8638:{f:"A"},8639:{f:"A"},8642:{f:"A"},8643:{f:"A"},8644:{f:"A"},8646:{f:"A"},8647:{f:"A"},8648:{f:"A"},8649:{f:"A"},8650:{f:"A"},8651:{f:"A"},8653:{f:"A"},8654:{f:"A"},8655:{f:"A"},8666:{f:"A"},8667:{f:"A"},8669:{f:"A"},8672:{f:"A"},8674:{f:"A"},8705:{f:"A"},8708:{c:"\\2203\\338"},8710:{c:"\\394"},8716:{c:"\\220B\\338"},8717:{f:"A"},8719:{f:"S1"},8720:{f:"S1"},8721:{f:"S1"},8724:{f:"A"},8737:{f:"A"},8738:{f:"A"},8740:{f:"A"},8742:{f:"A"},8748:{f:"S1"},8749:{f:"S1"},8750:{f:"S1"},8756:{f:"A"},8757:{f:"A"},8765:{f:"A"},8769:{f:"A"},8770:{f:"A"},8772:{c:"\\2243\\338"},8775:{c:"\\2246",f:"A"},8777:{c:"\\2248\\338"},8778:{f:"A"},8782:{f:"A"},8783:{f:"A"},8785:{f:"A"},8786:{f:"A"},8787:{f:"A"},8790:{f:"A"},8791:{f:"A"},8796:{f:"A"},8802:{c:"\\2261\\338"},8806:{f:"A"},8807:{f:"A"},8808:{f:"A"},8809:{f:"A"},8812:{f:"A"},8813:{c:"\\224D\\338"},8814:{f:"A"},8815:{f:"A"},8816:{f:"A"},8817:{f:"A"},8818:{f:"A"},8819:{f:"A"},8820:{c:"\\2272\\338"},8821:{c:"\\2273\\338"},8822:{f:"A"},8823:{f:"A"},8824:{c:"\\2276\\338"},8825:{c:"\\2277\\338"},8828:{f:"A"},8829:{f:"A"},8830:{f:"A"},8831:{f:"A"},8832:{f:"A"},8833:{f:"A"},8836:{c:"\\2282\\338"},8837:{c:"\\2283\\338"},8840:{f:"A"},8841:{f:"A"},8842:{f:"A"},8843:{f:"A"},8847:{f:"A"},8848:{f:"A"},8858:{f:"A"},8859:{f:"A"},8861:{f:"A"},8862:{f:"A"},8863:{f:"A"},8864:{f:"A"},8865:{f:"A"},8873:{f:"A"},8874:{f:"A"},8876:{f:"A"},8877:{f:"A"},8878:{f:"A"},8879:{f:"A"},8882:{f:"A"},8883:{f:"A"},8884:{f:"A"},8885:{f:"A"},8888:{f:"A"},8890:{f:"A"},8891:{f:"A"},8892:{f:"A"},8896:{f:"S1"},8897:{f:"S1"},8898:{f:"S1"},8899:{f:"S1"},8903:{f:"A"},8905:{f:"A"},8906:{f:"A"},8907:{f:"A"},8908:{f:"A"},8909:{f:"A"},8910:{f:"A"},8911:{f:"A"},8912:{f:"A"},8913:{f:"A"},8914:{f:"A"},8915:{f:"A"},8916:{f:"A"},8918:{f:"A"},8919:{f:"A"},8920:{f:"A"},8921:{f:"A"},8922:{f:"A"},8923:{f:"A"},8926:{f:"A"},8927:{f:"A"},8928:{f:"A"},8929:{f:"A"},8930:{c:"\\2291\\338"},8931:{c:"\\2292\\338"},8934:{f:"A"},8935:{f:"A"},8936:{f:"A"},8937:{f:"A"},8938:{f:"A"},8939:{f:"A"},8940:{f:"A"},8941:{f:"A"},8965:{c:"\\22BC",f:"A"},8966:{c:"\\2A5E",f:"A"},8988:{c:"\\250C",f:"A"},8989:{c:"\\2510",f:"A"},8990:{c:"\\2514",f:"A"},8991:{c:"\\2518",f:"A"},9001:{c:"\\27E8"},9002:{c:"\\27E9"},9168:{f:"S1"},9416:{f:"A"},9484:{f:"A"},9488:{f:"A"},9492:{f:"A"},9496:{f:"A"},9585:{f:"A"},9586:{f:"A"},9632:{f:"A"},9633:{f:"A"},9642:{c:"\\25A0",f:"A"},9650:{f:"A"},9652:{c:"\\25B2",f:"A"},9653:{c:"\\25B3"},9654:{f:"A"},9656:{c:"\\25B6",f:"A"},9660:{f:"A"},9662:{c:"\\25BC",f:"A"},9663:{c:"\\25BD"},9664:{f:"A"},9666:{c:"\\25C0",f:"A"},9674:{f:"A"},9723:{c:"\\25A1",f:"A"},9724:{c:"\\25A0",f:"A"},9733:{f:"A"},10003:{f:"A"},10016:{f:"A"},10072:{c:"\\2223"},10731:{f:"A"},10744:{c:"/",f:"I"},10752:{f:"S1"},10753:{f:"S1"},10754:{f:"S1"},10756:{f:"S1"},10758:{f:"S1"},10764:{c:"\\222C\\222C",f:"S1"},10799:{c:"\\D7"},10846:{f:"A"},10877:{f:"A"},10878:{f:"A"},10885:{f:"A"},10886:{f:"A"},10887:{f:"A"},10888:{f:"A"},10889:{f:"A"},10890:{f:"A"},10891:{f:"A"},10892:{f:"A"},10901:{f:"A"},10902:{f:"A"},10933:{f:"A"},10934:{f:"A"},10935:{f:"A"},10936:{f:"A"},10937:{f:"A"},10938:{f:"A"},10949:{f:"A"},10950:{f:"A"},10955:{f:"A"},10956:{f:"A"},12296:{c:"\\27E8"},12297:{c:"\\27E9"},57350:{f:"A"},57351:{f:"A"},57352:{f:"A"},57353:{f:"A"},57356:{f:"A"},57357:{f:"A"},57358:{f:"A"},57359:{f:"A"},57360:{f:"A"},57361:{f:"A"},57366:{f:"A"},57367:{f:"A"},57368:{f:"A"},57369:{f:"A"},57370:{f:"A"},57371:{f:"A"},119808:{c:"A",f:"B"},119809:{c:"B",f:"B"},119810:{c:"C",f:"B"},119811:{c:"D",f:"B"},119812:{c:"E",f:"B"},119813:{c:"F",f:"B"},119814:{c:"G",f:"B"},119815:{c:"H",f:"B"},119816:{c:"I",f:"B"},119817:{c:"J",f:"B"},119818:{c:"K",f:"B"},119819:{c:"L",f:"B"},119820:{c:"M",f:"B"},119821:{c:"N",f:"B"},119822:{c:"O",f:"B"},119823:{c:"P",f:"B"},119824:{c:"Q",f:"B"},119825:{c:"R",f:"B"},119826:{c:"S",f:"B"},119827:{c:"T",f:"B"},119828:{c:"U",f:"B"},119829:{c:"V",f:"B"},119830:{c:"W",f:"B"},119831:{c:"X",f:"B"},119832:{c:"Y",f:"B"},119833:{c:"Z",f:"B"},119834:{c:"a",f:"B"},119835:{c:"b",f:"B"},119836:{c:"c",f:"B"},119837:{c:"d",f:"B"},119838:{c:"e",f:"B"},119839:{c:"f",f:"B"},119840:{c:"g",f:"B"},119841:{c:"h",f:"B"},119842:{c:"i",f:"B"},119843:{c:"j",f:"B"},119844:{c:"k",f:"B"},119845:{c:"l",f:"B"},119846:{c:"m",f:"B"},119847:{c:"n",f:"B"},119848:{c:"o",f:"B"},119849:{c:"p",f:"B"},119850:{c:"q",f:"B"},119851:{c:"r",f:"B"},119852:{c:"s",f:"B"},119853:{c:"t",f:"B"},119854:{c:"u",f:"B"},119855:{c:"v",f:"B"},119856:{c:"w",f:"B"},119857:{c:"x",f:"B"},119858:{c:"y",f:"B"},119859:{c:"z",f:"B"},119860:{c:"A",f:"I"},119861:{c:"B",f:"I"},119862:{c:"C",f:"I"},119863:{c:"D",f:"I"},119864:{c:"E",f:"I"},119865:{c:"F",f:"I"},119866:{c:"G",f:"I"},119867:{c:"H",f:"I"},119868:{c:"I",f:"I"},119869:{c:"J",f:"I"},119870:{c:"K",f:"I"},119871:{c:"L",f:"I"},119872:{c:"M",f:"I"},119873:{c:"N",f:"I"},119874:{c:"O",f:"I"},119875:{c:"P",f:"I"},119876:{c:"Q",f:"I"},119877:{c:"R",f:"I"},119878:{c:"S",f:"I"},119879:{c:"T",f:"I"},119880:{c:"U",f:"I"},119881:{c:"V",f:"I"},119882:{c:"W",f:"I"},119883:{c:"X",f:"I"},119884:{c:"Y",f:"I"},119885:{c:"Z",f:"I"},119886:{c:"a",f:"I"},119887:{c:"b",f:"I"},119888:{c:"c",f:"I"},119889:{c:"d",f:"I"},119890:{c:"e",f:"I"},119891:{c:"f",f:"I"},119892:{c:"g",f:"I"},119894:{c:"i",f:"I"},119895:{c:"j",f:"I"},119896:{c:"k",f:"I"},119897:{c:"l",f:"I"},119898:{c:"m",f:"I"},119899:{c:"n",f:"I"},119900:{c:"o",f:"I"},119901:{c:"p",f:"I"},119902:{c:"q",f:"I"},119903:{c:"r",f:"I"},119904:{c:"s",f:"I"},119905:{c:"t",f:"I"},119906:{c:"u",f:"I"},119907:{c:"v",f:"I"},119908:{c:"w",f:"I"},119909:{c:"x",f:"I"},119910:{c:"y",f:"I"},119911:{c:"z",f:"I"},119912:{c:"A",f:"BI"},119913:{c:"B",f:"BI"},119914:{c:"C",f:"BI"},119915:{c:"D",f:"BI"},119916:{c:"E",f:"BI"},119917:{c:"F",f:"BI"},119918:{c:"G",f:"BI"},119919:{c:"H",f:"BI"},119920:{c:"I",f:"BI"},119921:{c:"J",f:"BI"},119922:{c:"K",f:"BI"},119923:{c:"L",f:"BI"},119924:{c:"M",f:"BI"},119925:{c:"N",f:"BI"},119926:{c:"O",f:"BI"},119927:{c:"P",f:"BI"},119928:{c:"Q",f:"BI"},119929:{c:"R",f:"BI"},119930:{c:"S",f:"BI"},119931:{c:"T",f:"BI"},119932:{c:"U",f:"BI"},119933:{c:"V",f:"BI"},119934:{c:"W",f:"BI"},119935:{c:"X",f:"BI"},119936:{c:"Y",f:"BI"},119937:{c:"Z",f:"BI"},119938:{c:"a",f:"BI"},119939:{c:"b",f:"BI"},119940:{c:"c",f:"BI"},119941:{c:"d",f:"BI"},119942:{c:"e",f:"BI"},119943:{c:"f",f:"BI"},119944:{c:"g",f:"BI"},119945:{c:"h",f:"BI"},119946:{c:"i",f:"BI"},119947:{c:"j",f:"BI"},119948:{c:"k",f:"BI"},119949:{c:"l",f:"BI"},119950:{c:"m",f:"BI"},119951:{c:"n",f:"BI"},119952:{c:"o",f:"BI"},119953:{c:"p",f:"BI"},119954:{c:"q",f:"BI"},119955:{c:"r",f:"BI"},119956:{c:"s",f:"BI"},119957:{c:"t",f:"BI"},119958:{c:"u",f:"BI"},119959:{c:"v",f:"BI"},119960:{c:"w",f:"BI"},119961:{c:"x",f:"BI"},119962:{c:"y",f:"BI"},119963:{c:"z",f:"BI"},119964:{c:"A",f:"SC"},119966:{c:"C",f:"SC"},119967:{c:"D",f:"SC"},119970:{c:"G",f:"SC"},119973:{c:"J",f:"SC"},119974:{c:"K",f:"SC"},119977:{c:"N",f:"SC"},119978:{c:"O",f:"SC"},119979:{c:"P",f:"SC"},119980:{c:"Q",f:"SC"},119982:{c:"S",f:"SC"},119983:{c:"T",f:"SC"},119984:{c:"U",f:"SC"},119985:{c:"V",f:"SC"},119986:{c:"W",f:"SC"},119987:{c:"X",f:"SC"},119988:{c:"Y",f:"SC"},119989:{c:"Z",f:"SC"},120068:{c:"A",f:"FR"},120069:{c:"B",f:"FR"},120071:{c:"D",f:"FR"},120072:{c:"E",f:"FR"},120073:{c:"F",f:"FR"},120074:{c:"G",f:"FR"},120077:{c:"J",f:"FR"},120078:{c:"K",f:"FR"},120079:{c:"L",f:"FR"},120080:{c:"M",f:"FR"},120081:{c:"N",f:"FR"},120082:{c:"O",f:"FR"},120083:{c:"P",f:"FR"},120084:{c:"Q",f:"FR"},120086:{c:"S",f:"FR"},120087:{c:"T",f:"FR"},120088:{c:"U",f:"FR"},120089:{c:"V",f:"FR"},120090:{c:"W",f:"FR"},120091:{c:"X",f:"FR"},120092:{c:"Y",f:"FR"},120094:{c:"a",f:"FR"},120095:{c:"b",f:"FR"},120096:{c:"c",f:"FR"},120097:{c:"d",f:"FR"},120098:{c:"e",f:"FR"},120099:{c:"f",f:"FR"},120100:{c:"g",f:"FR"},120101:{c:"h",f:"FR"},120102:{c:"i",f:"FR"},120103:{c:"j",f:"FR"},120104:{c:"k",f:"FR"},120105:{c:"l",f:"FR"},120106:{c:"m",f:"FR"},120107:{c:"n",f:"FR"},120108:{c:"o",f:"FR"},120109:{c:"p",f:"FR"},120110:{c:"q",f:"FR"},120111:{c:"r",f:"FR"},120112:{c:"s",f:"FR"},120113:{c:"t",f:"FR"},120114:{c:"u",f:"FR"},120115:{c:"v",f:"FR"},120116:{c:"w",f:"FR"},120117:{c:"x",f:"FR"},120118:{c:"y",f:"FR"},120119:{c:"z",f:"FR"},120120:{c:"A",f:"A"},120121:{c:"B",f:"A"},120123:{c:"D",f:"A"},120124:{c:"E",f:"A"},120125:{c:"F",f:"A"},120126:{c:"G",f:"A"},120128:{c:"I",f:"A"},120129:{c:"J",f:"A"},120130:{c:"K",f:"A"},120131:{c:"L",f:"A"},120132:{c:"M",f:"A"},120134:{c:"O",f:"A"},120138:{c:"S",f:"A"},120139:{c:"T",f:"A"},120140:{c:"U",f:"A"},120141:{c:"V",f:"A"},120142:{c:"W",f:"A"},120143:{c:"X",f:"A"},120144:{c:"Y",f:"A"},120172:{c:"A",f:"FRB"},120173:{c:"B",f:"FRB"},120174:{c:"C",f:"FRB"},120175:{c:"D",f:"FRB"},120176:{c:"E",f:"FRB"},120177:{c:"F",f:"FRB"},120178:{c:"G",f:"FRB"},120179:{c:"H",f:"FRB"},120180:{c:"I",f:"FRB"},120181:{c:"J",f:"FRB"},120182:{c:"K",f:"FRB"},120183:{c:"L",f:"FRB"},120184:{c:"M",f:"FRB"},120185:{c:"N",f:"FRB"},120186:{c:"O",f:"FRB"},120187:{c:"P",f:"FRB"},120188:{c:"Q",f:"FRB"},120189:{c:"R",f:"FRB"},120190:{c:"S",f:"FRB"},120191:{c:"T",f:"FRB"},120192:{c:"U",f:"FRB"},120193:{c:"V",f:"FRB"},120194:{c:"W",f:"FRB"},120195:{c:"X",f:"FRB"},120196:{c:"Y",f:"FRB"},120197:{c:"Z",f:"FRB"},120198:{c:"a",f:"FRB"},120199:{c:"b",f:"FRB"},120200:{c:"c",f:"FRB"},120201:{c:"d",f:"FRB"},120202:{c:"e",f:"FRB"},120203:{c:"f",f:"FRB"},120204:{c:"g",f:"FRB"},120205:{c:"h",f:"FRB"},120206:{c:"i",f:"FRB"},120207:{c:"j",f:"FRB"},120208:{c:"k",f:"FRB"},120209:{c:"l",f:"FRB"},120210:{c:"m",f:"FRB"},120211:{c:"n",f:"FRB"},120212:{c:"o",f:"FRB"},120213:{c:"p",f:"FRB"},120214:{c:"q",f:"FRB"},120215:{c:"r",f:"FRB"},120216:{c:"s",f:"FRB"},120217:{c:"t",f:"FRB"},120218:{c:"u",f:"FRB"},120219:{c:"v",f:"FRB"},120220:{c:"w",f:"FRB"},120221:{c:"x",f:"FRB"},120222:{c:"y",f:"FRB"},120223:{c:"z",f:"FRB"},120224:{c:"A",f:"SS"},120225:{c:"B",f:"SS"},120226:{c:"C",f:"SS"},120227:{c:"D",f:"SS"},120228:{c:"E",f:"SS"},120229:{c:"F",f:"SS"},120230:{c:"G",f:"SS"},120231:{c:"H",f:"SS"},120232:{c:"I",f:"SS"},120233:{c:"J",f:"SS"},120234:{c:"K",f:"SS"},120235:{c:"L",f:"SS"},120236:{c:"M",f:"SS"},120237:{c:"N",f:"SS"},120238:{c:"O",f:"SS"},120239:{c:"P",f:"SS"},120240:{c:"Q",f:"SS"},120241:{c:"R",f:"SS"},120242:{c:"S",f:"SS"},120243:{c:"T",f:"SS"},120244:{c:"U",f:"SS"},120245:{c:"V",f:"SS"},120246:{c:"W",f:"SS"},120247:{c:"X",f:"SS"},120248:{c:"Y",f:"SS"},120249:{c:"Z",f:"SS"},120250:{c:"a",f:"SS"},120251:{c:"b",f:"SS"},120252:{c:"c",f:"SS"},120253:{c:"d",f:"SS"},120254:{c:"e",f:"SS"},120255:{c:"f",f:"SS"},120256:{c:"g",f:"SS"},120257:{c:"h",f:"SS"},120258:{c:"i",f:"SS"},120259:{c:"j",f:"SS"},120260:{c:"k",f:"SS"},120261:{c:"l",f:"SS"},120262:{c:"m",f:"SS"},120263:{c:"n",f:"SS"},120264:{c:"o",f:"SS"},120265:{c:"p",f:"SS"},120266:{c:"q",f:"SS"},120267:{c:"r",f:"SS"},120268:{c:"s",f:"SS"},120269:{c:"t",f:"SS"},120270:{c:"u",f:"SS"},120271:{c:"v",f:"SS"},120272:{c:"w",f:"SS"},120273:{c:"x",f:"SS"},120274:{c:"y",f:"SS"},120275:{c:"z",f:"SS"},120276:{c:"A",f:"SSB"},120277:{c:"B",f:"SSB"},120278:{c:"C",f:"SSB"},120279:{c:"D",f:"SSB"},120280:{c:"E",f:"SSB"},120281:{c:"F",f:"SSB"},120282:{c:"G",f:"SSB"},120283:{c:"H",f:"SSB"},120284:{c:"I",f:"SSB"},120285:{c:"J",f:"SSB"},120286:{c:"K",f:"SSB"},120287:{c:"L",f:"SSB"},120288:{c:"M",f:"SSB"},120289:{c:"N",f:"SSB"},120290:{c:"O",f:"SSB"},120291:{c:"P",f:"SSB"},120292:{c:"Q",f:"SSB"},120293:{c:"R",f:"SSB"},120294:{c:"S",f:"SSB"},120295:{c:"T",f:"SSB"},120296:{c:"U",f:"SSB"},120297:{c:"V",f:"SSB"},120298:{c:"W",f:"SSB"},120299:{c:"X",f:"SSB"},120300:{c:"Y",f:"SSB"},120301:{c:"Z",f:"SSB"},120302:{c:"a",f:"SSB"},120303:{c:"b",f:"SSB"},120304:{c:"c",f:"SSB"},120305:{c:"d",f:"SSB"},120306:{c:"e",f:"SSB"},120307:{c:"f",f:"SSB"},120308:{c:"g",f:"SSB"},120309:{c:"h",f:"SSB"},120310:{c:"i",f:"SSB"},120311:{c:"j",f:"SSB"},120312:{c:"k",f:"SSB"},120313:{c:"l",f:"SSB"},120314:{c:"m",f:"SSB"},120315:{c:"n",f:"SSB"},120316:{c:"o",f:"SSB"},120317:{c:"p",f:"SSB"},120318:{c:"q",f:"SSB"},120319:{c:"r",f:"SSB"},120320:{c:"s",f:"SSB"},120321:{c:"t",f:"SSB"},120322:{c:"u",f:"SSB"},120323:{c:"v",f:"SSB"},120324:{c:"w",f:"SSB"},120325:{c:"x",f:"SSB"},120326:{c:"y",f:"SSB"},120327:{c:"z",f:"SSB"},120328:{c:"A",f:"SSI"},120329:{c:"B",f:"SSI"},120330:{c:"C",f:"SSI"},120331:{c:"D",f:"SSI"},120332:{c:"E",f:"SSI"},120333:{c:"F",f:"SSI"},120334:{c:"G",f:"SSI"},120335:{c:"H",f:"SSI"},120336:{c:"I",f:"SSI"},120337:{c:"J",f:"SSI"},120338:{c:"K",f:"SSI"},120339:{c:"L",f:"SSI"},120340:{c:"M",f:"SSI"},120341:{c:"N",f:"SSI"},120342:{c:"O",f:"SSI"},120343:{c:"P",f:"SSI"},120344:{c:"Q",f:"SSI"},120345:{c:"R",f:"SSI"},120346:{c:"S",f:"SSI"},120347:{c:"T",f:"SSI"},120348:{c:"U",f:"SSI"},120349:{c:"V",f:"SSI"},120350:{c:"W",f:"SSI"},120351:{c:"X",f:"SSI"},120352:{c:"Y",f:"SSI"},120353:{c:"Z",f:"SSI"},120354:{c:"a",f:"SSI"},120355:{c:"b",f:"SSI"},120356:{c:"c",f:"SSI"},120357:{c:"d",f:"SSI"},120358:{c:"e",f:"SSI"},120359:{c:"f",f:"SSI"},120360:{c:"g",f:"SSI"},120361:{c:"h",f:"SSI"},120362:{c:"i",f:"SSI"},120363:{c:"j",f:"SSI"},120364:{c:"k",f:"SSI"},120365:{c:"l",f:"SSI"},120366:{c:"m",f:"SSI"},120367:{c:"n",f:"SSI"},120368:{c:"o",f:"SSI"},120369:{c:"p",f:"SSI"},120370:{c:"q",f:"SSI"},120371:{c:"r",f:"SSI"},120372:{c:"s",f:"SSI"},120373:{c:"t",f:"SSI"},120374:{c:"u",f:"SSI"},120375:{c:"v",f:"SSI"},120376:{c:"w",f:"SSI"},120377:{c:"x",f:"SSI"},120378:{c:"y",f:"SSI"},120379:{c:"z",f:"SSI"},120432:{c:"A",f:"T"},120433:{c:"B",f:"T"},120434:{c:"C",f:"T"},120435:{c:"D",f:"T"},120436:{c:"E",f:"T"},120437:{c:"F",f:"T"},120438:{c:"G",f:"T"},120439:{c:"H",f:"T"},120440:{c:"I",f:"T"},120441:{c:"J",f:"T"},120442:{c:"K",f:"T"},120443:{c:"L",f:"T"},120444:{c:"M",f:"T"},120445:{c:"N",f:"T"},120446:{c:"O",f:"T"},120447:{c:"P",f:"T"},120448:{c:"Q",f:"T"},120449:{c:"R",f:"T"},120450:{c:"S",f:"T"},120451:{c:"T",f:"T"},120452:{c:"U",f:"T"},120453:{c:"V",f:"T"},120454:{c:"W",f:"T"},120455:{c:"X",f:"T"},120456:{c:"Y",f:"T"},120457:{c:"Z",f:"T"},120458:{c:"a",f:"T"},120459:{c:"b",f:"T"},120460:{c:"c",f:"T"},120461:{c:"d",f:"T"},120462:{c:"e",f:"T"},120463:{c:"f",f:"T"},120464:{c:"g",f:"T"},120465:{c:"h",f:"T"},120466:{c:"i",f:"T"},120467:{c:"j",f:"T"},120468:{c:"k",f:"T"},120469:{c:"l",f:"T"},120470:{c:"m",f:"T"},120471:{c:"n",f:"T"},120472:{c:"o",f:"T"},120473:{c:"p",f:"T"},120474:{c:"q",f:"T"},120475:{c:"r",f:"T"},120476:{c:"s",f:"T"},120477:{c:"t",f:"T"},120478:{c:"u",f:"T"},120479:{c:"v",f:"T"},120480:{c:"w",f:"T"},120481:{c:"x",f:"T"},120482:{c:"y",f:"T"},120483:{c:"z",f:"T"},120488:{c:"A",f:"B"},120489:{c:"B",f:"B"},120490:{c:"\\393",f:"B"},120491:{c:"\\394",f:"B"},120492:{c:"E",f:"B"},120493:{c:"Z",f:"B"},120494:{c:"H",f:"B"},120495:{c:"\\398",f:"B"},120496:{c:"I",f:"B"},120497:{c:"K",f:"B"},120498:{c:"\\39B",f:"B"},120499:{c:"M",f:"B"},120500:{c:"N",f:"B"},120501:{c:"\\39E",f:"B"},120502:{c:"O",f:"B"},120503:{c:"\\3A0",f:"B"},120504:{c:"P",f:"B"},120506:{c:"\\3A3",f:"B"},120507:{c:"T",f:"B"},120508:{c:"\\3A5",f:"B"},120509:{c:"\\3A6",f:"B"},120510:{c:"X",f:"B"},120511:{c:"\\3A8",f:"B"},120512:{c:"\\3A9",f:"B"},120513:{c:"\\2207",f:"B"},120546:{c:"A",f:"I"},120547:{c:"B",f:"I"},120548:{c:"\\393",f:"I"},120549:{c:"\\394",f:"I"},120550:{c:"E",f:"I"},120551:{c:"Z",f:"I"},120552:{c:"H",f:"I"},120553:{c:"\\398",f:"I"},120554:{c:"I",f:"I"},120555:{c:"K",f:"I"},120556:{c:"\\39B",f:"I"},120557:{c:"M",f:"I"},120558:{c:"N",f:"I"},120559:{c:"\\39E",f:"I"},120560:{c:"O",f:"I"},120561:{c:"\\3A0",f:"I"},120562:{c:"P",f:"I"},120564:{c:"\\3A3",f:"I"},120565:{c:"T",f:"I"},120566:{c:"\\3A5",f:"I"},120567:{c:"\\3A6",f:"I"},120568:{c:"X",f:"I"},120569:{c:"\\3A8",f:"I"},120570:{c:"\\3A9",f:"I"},120572:{c:"\\3B1",f:"I"},120573:{c:"\\3B2",f:"I"},120574:{c:"\\3B3",f:"I"},120575:{c:"\\3B4",f:"I"},120576:{c:"\\3B5",f:"I"},120577:{c:"\\3B6",f:"I"},120578:{c:"\\3B7",f:"I"},120579:{c:"\\3B8",f:"I"},120580:{c:"\\3B9",f:"I"},120581:{c:"\\3BA",f:"I"},120582:{c:"\\3BB",f:"I"},120583:{c:"\\3BC",f:"I"},120584:{c:"\\3BD",f:"I"},120585:{c:"\\3BE",f:"I"},120586:{c:"\\3BF",f:"I"},120587:{c:"\\3C0",f:"I"},120588:{c:"\\3C1",f:"I"},120589:{c:"\\3C2",f:"I"},120590:{c:"\\3C3",f:"I"},120591:{c:"\\3C4",f:"I"},120592:{c:"\\3C5",f:"I"},120593:{c:"\\3C6",f:"I"},120594:{c:"\\3C7",f:"I"},120595:{c:"\\3C8",f:"I"},120596:{c:"\\3C9",f:"I"},120597:{c:"\\2202"},120598:{c:"\\3F5",f:"I"},120599:{c:"\\3D1",f:"I"},120600:{c:"\\E009",f:"A"},120601:{c:"\\3D5",f:"I"},120602:{c:"\\3F1",f:"I"},120603:{c:"\\3D6",f:"I"},120604:{c:"A",f:"BI"},120605:{c:"B",f:"BI"},120606:{c:"\\393",f:"BI"},120607:{c:"\\394",f:"BI"},120608:{c:"E",f:"BI"},120609:{c:"Z",f:"BI"},120610:{c:"H",f:"BI"},120611:{c:"\\398",f:"BI"},120612:{c:"I",f:"BI"},120613:{c:"K",f:"BI"},120614:{c:"\\39B",f:"BI"},120615:{c:"M",f:"BI"},120616:{c:"N",f:"BI"},120617:{c:"\\39E",f:"BI"},120618:{c:"O",f:"BI"},120619:{c:"\\3A0",f:"BI"},120620:{c:"P",f:"BI"},120622:{c:"\\3A3",f:"BI"},120623:{c:"T",f:"BI"},120624:{c:"\\3A5",f:"BI"},120625:{c:"\\3A6",f:"BI"},120626:{c:"X",f:"BI"},120627:{c:"\\3A8",f:"BI"},120628:{c:"\\3A9",f:"BI"},120630:{c:"\\3B1",f:"BI"},120631:{c:"\\3B2",f:"BI"},120632:{c:"\\3B3",f:"BI"},120633:{c:"\\3B4",f:"BI"},120634:{c:"\\3B5",f:"BI"},120635:{c:"\\3B6",f:"BI"},120636:{c:"\\3B7",f:"BI"},120637:{c:"\\3B8",f:"BI"},120638:{c:"\\3B9",f:"BI"},120639:{c:"\\3BA",f:"BI"},120640:{c:"\\3BB",f:"BI"},120641:{c:"\\3BC",f:"BI"},120642:{c:"\\3BD",f:"BI"},120643:{c:"\\3BE",f:"BI"},120644:{c:"\\3BF",f:"BI"},120645:{c:"\\3C0",f:"BI"},120646:{c:"\\3C1",f:"BI"},120647:{c:"\\3C2",f:"BI"},120648:{c:"\\3C3",f:"BI"},120649:{c:"\\3C4",f:"BI"},120650:{c:"\\3C5",f:"BI"},120651:{c:"\\3C6",f:"BI"},120652:{c:"\\3C7",f:"BI"},120653:{c:"\\3C8",f:"BI"},120654:{c:"\\3C9",f:"BI"},120655:{c:"\\2202",f:"B"},120656:{c:"\\3F5",f:"BI"},120657:{c:"\\3D1",f:"BI"},120658:{c:"\\E009",f:"A"},120659:{c:"\\3D5",f:"BI"},120660:{c:"\\3F1",f:"BI"},120661:{c:"\\3D6",f:"BI"},120662:{c:"A",f:"SSB"},120663:{c:"B",f:"SSB"},120664:{c:"\\393",f:"SSB"},120665:{c:"\\394",f:"SSB"},120666:{c:"E",f:"SSB"},120667:{c:"Z",f:"SSB"},120668:{c:"H",f:"SSB"},120669:{c:"\\398",f:"SSB"},120670:{c:"I",f:"SSB"},120671:{c:"K",f:"SSB"},120672:{c:"\\39B",f:"SSB"},120673:{c:"M",f:"SSB"},120674:{c:"N",f:"SSB"},120675:{c:"\\39E",f:"SSB"},120676:{c:"O",f:"SSB"},120677:{c:"\\3A0",f:"SSB"},120678:{c:"P",f:"SSB"},120680:{c:"\\3A3",f:"SSB"},120681:{c:"T",f:"SSB"},120682:{c:"\\3A5",f:"SSB"},120683:{c:"\\3A6",f:"SSB"},120684:{c:"X",f:"SSB"},120685:{c:"\\3A8",f:"SSB"},120686:{c:"\\3A9",f:"SSB"},120782:{c:"0",f:"B"},120783:{c:"1",f:"B"},120784:{c:"2",f:"B"},120785:{c:"3",f:"B"},120786:{c:"4",f:"B"},120787:{c:"5",f:"B"},120788:{c:"6",f:"B"},120789:{c:"7",f:"B"},120790:{c:"8",f:"B"},120791:{c:"9",f:"B"},120802:{c:"0",f:"SS"},120803:{c:"1",f:"SS"},120804:{c:"2",f:"SS"},120805:{c:"3",f:"SS"},120806:{c:"4",f:"SS"},120807:{c:"5",f:"SS"},120808:{c:"6",f:"SS"},120809:{c:"7",f:"SS"},120810:{c:"8",f:"SS"},120811:{c:"9",f:"SS"},120812:{c:"0",f:"SSB"},120813:{c:"1",f:"SSB"},120814:{c:"2",f:"SSB"},120815:{c:"3",f:"SSB"},120816:{c:"4",f:"SSB"},120817:{c:"5",f:"SSB"},120818:{c:"6",f:"SSB"},120819:{c:"7",f:"SSB"},120820:{c:"8",f:"SSB"},120821:{c:"9",f:"SSB"},120822:{c:"0",f:"T"},120823:{c:"1",f:"T"},120824:{c:"2",f:"T"},120825:{c:"3",f:"T"},120826:{c:"4",f:"T"},120827:{c:"5",f:"T"},120828:{c:"6",f:"T"},120829:{c:"7",f:"T"},120830:{c:"8",f:"T"},120831:{c:"9",f:"T"}})},3518:function(c,f,i){Object.defineProperty(f,"__esModule",{value:!0}),f.sansSerifBoldItalic=void 0;var t=i(73),e=i(6949);f.sansSerifBoldItalic=(0,t.AddCSS)(e.sansSerifBoldItalic,{305:{f:"SSB"},567:{f:"SSB"}})},965:function(c,f,i){Object.defineProperty(f,"__esModule",{value:!0}),f.sansSerifBold=void 0;var t=i(73),e=i(5193);f.sansSerifBold=(0,t.AddCSS)(e.sansSerifBold,{8213:{c:"\\2014"},8215:{c:"_"},8260:{c:"/"},8710:{c:"\\394"}})},9169:function(c,f,i){Object.defineProperty(f,"__esModule",{value:!0}),f.sansSerifItalic=void 0;var t=i(73),e=i(2632);f.sansSerifItalic=(0,t.AddCSS)(e.sansSerifItalic,{913:{c:"A"},914:{c:"B"},917:{c:"E"},918:{c:"Z"},919:{c:"H"},921:{c:"I"},922:{c:"K"},924:{c:"M"},925:{c:"N"},927:{c:"O"},929:{c:"P"},932:{c:"T"},935:{c:"X"},8213:{c:"\\2014"},8215:{c:"_"},8260:{c:"/"},8710:{c:"\\394"}})},6736:function(c,f,i){Object.defineProperty(f,"__esModule",{value:!0}),f.sansSerif=void 0;var t=i(73),e=i(4214);f.sansSerif=(0,t.AddCSS)(e.sansSerif,{913:{c:"A"},914:{c:"B"},917:{c:"E"},918:{c:"Z"},919:{c:"H"},921:{c:"I"},922:{c:"K"},924:{c:"M"},925:{c:"N"},927:{c:"O"},929:{c:"P"},932:{c:"T"},935:{c:"X"},8213:{c:"\\2014"},8215:{c:"_"},8260:{c:"/"},8710:{c:"\\394"}})},2290:function(c,f,i){Object.defineProperty(f,"__esModule",{value:!0}),f.scriptBold=void 0;var t=i(6466);Object.defineProperty(f,"scriptBold",{enumerable:!0,get:function(){return t.scriptBold}})},3012:function(c,f,i){Object.defineProperty(f,"__esModule",{value:!0}),f.script=void 0;var t=i(3776);Object.defineProperty(f,"script",{enumerable:!0,get:function(){return t.script}})},8787:function(c,f,i){Object.defineProperty(f,"__esModule",{value:!0}),f.smallop=void 0;var t=i(73),e=i(7405);f.smallop=(0,t.AddCSS)(e.smallop,{8260:{c:"/"},9001:{c:"\\27E8"},9002:{c:"\\27E9"},10072:{c:"\\2223"},10764:{c:"\\222C\\222C"},12296:{c:"\\27E8"},12297:{c:"\\27E9"}})},5392:function(c,f,i){Object.defineProperty(f,"__esModule",{value:!0}),f.texCalligraphicBold=void 0;var t=i(73),e=i(8105);f.texCalligraphicBold=(0,t.AddCSS)(e.texCalligraphicBold,{305:{f:"B"},567:{f:"B"}})},6318:function(c,f,i){Object.defineProperty(f,"__esModule",{value:!0}),f.texCalligraphic=void 0;var t=i(2518);Object.defineProperty(f,"texCalligraphic",{enumerable:!0,get:function(){return t.texCalligraphic}})},5351:function(c,f,i){Object.defineProperty(f,"__esModule",{value:!0}),f.texMathit=void 0;var t=i(5595);Object.defineProperty(f,"texMathit",{enumerable:!0,get:function(){return t.texMathit}})},873:function(c,f,i){Object.defineProperty(f,"__esModule",{value:!0}),f.texOldstyleBold=void 0;var t=i(6357);Object.defineProperty(f,"texOldstyleBold",{enumerable:!0,get:function(){return t.texOldstyleBold}})},7611:function(c,f,i){Object.defineProperty(f,"__esModule",{value:!0}),f.texOldstyle=void 0;var t=i(9474);Object.defineProperty(f,"texOldstyle",{enumerable:!0,get:function(){return t.texOldstyle}})},6590:function(c,f,i){Object.defineProperty(f,"__esModule",{value:!0}),f.texSize3=void 0;var t=i(73),e=i(584);f.texSize3=(0,t.AddCSS)(e.texSize3,{8260:{c:"/"},9001:{c:"\\27E8"},9002:{c:"\\27E9"},12296:{c:"\\27E8"},12297:{c:"\\27E9"}})},8798:function(c,f,i){Object.defineProperty(f,"__esModule",{value:!0}),f.texSize4=void 0;var t=i(73),e=i(4324);f.texSize4=(0,t.AddCSS)(e.texSize4,{8260:{c:"/"},9001:{c:"\\27E8"},9002:{c:"\\27E9"},12296:{c:"\\27E8"},12297:{c:"\\27E9"},57685:{c:"\\E153\\E152"},57686:{c:"\\E151\\E150"}})},2138:function(c,f,i){Object.defineProperty(f,"__esModule",{value:!0}),f.texVariant=void 0;var t=i(73),e=i(8135);f.texVariant=(0,t.AddCSS)(e.texVariant,{1008:{c:"\\E009"},8463:{f:""},8740:{c:"\\E006"},8742:{c:"\\E007"},8808:{c:"\\E00C"},8809:{c:"\\E00D"},8816:{c:"\\E011"},8817:{c:"\\E00E"},8840:{c:"\\E016"},8841:{c:"\\E018"},8842:{c:"\\E01A"},8843:{c:"\\E01B"},10887:{c:"\\E010"},10888:{c:"\\E00F"},10955:{c:"\\E017"},10956:{c:"\\E019"}})},2176:function(c,f){var i,t=this&&this.__extends||(i=function(c,f){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(c,f){c.__proto__=f}||function(c,f){for(var i in f)Object.prototype.hasOwnProperty.call(f,i)&&(c[i]=f[i])},i(c,f)},function(c,f){if("function"!=typeof f&&null!==f)throw new TypeError("Class extends value "+String(f)+" is not a constructor or null");function t(){this.constructor=c}i(c,f),c.prototype=null===f?Object.create(f):(t.prototype=f.prototype,new t)}),e=this&&this.__assign||function(){return e=Object.assign||function(c){for(var f,i=1,t=arguments.length;i0)&&!(t=s.next()).done;)r.push(t.value)}catch(c){e={error:c}}finally{try{t&&!t.done&&(i=s.return)&&i.call(s)}finally{if(e)throw e.error}}return r},r=this&&this.__spreadArray||function(c,f,i){if(i||2===arguments.length)for(var t,e=0,s=f.length;eb>gFhƫ㌷0N141k>d.2iI7攪{RVMy7~7/,M֤Qɓi,5ޜjL)--嗧S`syfO5'i컵Fd\5 sLm s)F> j#F;EkjV0wh:e6ZsiWӮ]2_԰Y&k͔%ֲrԥ(3ZRZ\R\Z(00/~voSZݓuL-ߜW_\r=e[o)Liӆ3EgԜoWsNl5eݣtv=L՚iZMTͩڛSk tTiFa64miZgӴΦiO1MetZ/ӵakNV4}h7nЬ1KƬZךQfЮl3klZ׳5L4K3ѬsV4GSMas4 6kMSiFYcfY5fi֘YcfY5ff=OU3d=Q]R7Nэ?iz^lhz2/O?F}3?DtJUEt>S?N?^FdQ7E Ȩ&oߡS~,){SӐiD?SSuݯ g B6~R2rdf+Wg#K[__ߠ\-WI7}~[c;j3},ݒ޲1[ƶ UW}q׾}]}zCufX=qbg&nGn_xGw>wF'wN>:,?)̺Ԇi+fOjgt㽛q/f0z=8'ws_0n~N>ɱmtr[7]<_' ~zK ۼ+:^ůj;vS[deeo6v32rqͻYo`+>\ScfN̷Q{e٫7\MRӞtV}Gt> - 5~/'ˏȏʢ\' o֝ ϩD E6FWc{{+7wol)iksm~cBŎ:I:wu;3@ߟD|8r=O?;_Wے{یG,&|wd~ǼS{[,:>ںߐdw:jǁ[p9tA/!Y,`m"lb:~>\JM n7pJ΃ʬʍp|;!dX?J~{8emN'%yܜl ]lI<"OPM|;RtVAɡH0oFfgED%QnKM\ \I1,472qe1FC zOE2J`bIgЄXuw+V 6.ꨲ wU:7D:9VK0 <׍6+K*v'x>4I $:GuuTpaG8U>4 _Uˆ:ibf,W{hџ .4ƼXP@=; w[M.pq6ۊի9gd% 8Wv=";!T>a>ۙA8^dA($-}95|snD) m6rbR"e vX/{ܬd2>< FOǟ?}Hђ 9 Ȕdi놲5VoW Xl[pdCX@* WdX?h噳~`$ӗƏV!9ܫTD9vp<4peO&| ܈^E6_̗k\&#Gg!(hFdPhG Co,I*;sPQfi^nZxW_E :GoԷވ^&t-{C0 ܿ.:Plrh6AUd̸r UьpAHa" iE,OdA?Yim@1w(){}ճl-£s_') c& 筂/4\gy΁: Y+1X}Q !R,0/ 17,l fpI8rXg]BvK@y7v/6M%_@g&:#(c]9K@#e^Ӓ{%+UI W=*r}QCš7h$ @oD#p2*8d1HtQ'&{aE"!F`D cm;d3 2=@lnz?54~uKAd 'V !I)>', Kt+!J9 !7^xnT+[Z6l,r*FF#|%I$pzKPH (5g#!"@gᤂ#CЂPe@-!;sտQK]:2uQf.H3r0,D1ie/}v޿2/?%oN%2?S1iH8"cu pA8H aXG$\@gXdK>V_"<#0u1bDG*XYKcUo{?33dlӺ4bMĄXT5ř^~ l&=#5cd'(ͪR`=X[mၼOC c\!,*mQ?}ov2)UЄ} ;~Fd(CpI|WHo ahh(+%Q]~" Å\\'\"8VPr1ğf q) GB Cqg= @oG?M~+B)Ar^]TzS|D"B&pp79h{btX~F_hug$wB7 ~5Hgos᯳ʥ>^Y/r#T4R ";щqrM<󰪙/"~K)is??Gb1DS0d8\PCS(;Ɏ356ZHiv75V*8ZT." 5e鐢x?G(~( t&FAE\va- n~Ȫ=FJUjЁ+%k4b,"ʌnq# Nn,V&LS{0SV%7QN 8vG.j x9ê4#O%Uf}-9-ql^d7v3w-0 8 LW<Y?-!S&dJ 3}10[@M28Q"R$_8Lg3&_, Qwy|ab՛{Xj8opsoƟZbjU)Rt B>O^:nSt;>VL#*t2Ӂ; w#5 ~D%^ 0:"K@ 21Y4}j5 F΍T :w➘3n% Q0 W9j]o;1зf,(\j%3oCD\rbTW ?shX|3H8 >Pt1+Xy+O>3%ب#ao^$6Ayvyi^ZZs(eVfZOxBI=g8FL#JDjwzs`#lm,ѩ5K}<`$i[?>[gE j2쇼5w:_]"'xx, xl+t9/5A7p:~,6G3C>{sY7zzIsSw.sZKetFǽ{3*hF"NY*Kn$t@ 6$Vd\U5˅AFn_cAُ XKtb0j|B _Xg.`y5Ғ\iDbQ1"43ȹMUD`z@}lI[ݓEV胓ў2~jFv #mK#̵9x h5=10Ep_>P߻tqa?4EKRXYn]=pkdOHn1dYnyܗŅZ@_'$ts0ym-kl$3T]vP!@l5b6[;[jRJX|fLXf qDq;< }: ɷMwrew2/ǤmI筡&v@ f%*LTVލpԩ:Z֚OF^]BQ-Y::P}.e"SP ,Z @nV nK®6W F * N*eUzJ:L+Ljb[8WBH Hf `J؋<1t8%U}Cי9`ٮ)Mj.vzd9c+q((^M%Yr cj%FbՑRmcm^j' '\,r8*)Q(\ФNU@[xN @_0A lV_xpl&}T9|jNx_j[X1#RThJ= [~')|# ,HՂ삋|J U8_y]Bjk͘]^r ]ׇf/JFE@NaSK\mֆ΢;j&t2~!l9NJ~l*1 ǿb+rc:Y5&;EckޣSh yG!I!aD>U6$u Ljfa#' r!re|BJZ ̻!xO-ߏ b']K‘,YXro bl(a]NahEz"݈UQS urc*t]aWk˭cg~ d3m{E0Ltx5Ac ةIyX9,QάȌ#?op HGqj B<̄,Dc)xKzV:nH+| wPMeWIr7{6&S5.}ہ@0MAQ+!M,'!V*9NlڙtqTTSqP׌AiDQݕMN1x %ja,EY@$-o vI}]0Cg"(gAļ7$ ~O`ȡA4rQ\!/{VR0Rb6q\E6 ]-Sk̏\̵A#2F}$hؒC#!IgtuC:ڟ +2( NSqJE*WAQԱ;6(J˻׼>+J_~  ҉`/4 " fsll[s]oeߑC <|Uv&norTłR#Z߂cƕW#u cJ#Z\\୆gh)xjQ~5(T.GDgݟK]WYF=Ƙ=Ln;}ym&|!lx#&hkK7s =_>@ou|d$L0tSń ypmgN31Ll~|wT<&Nz=d;`x^|#ej+By20{w Dl=C:w!1]Pf_]d/,*y豟+J*1Ƣ-r4CW/6oPSG FcshK2|/&BF'zWgxW=GHX?PYӘtf:n".zuWWr=YDΎ{Y-Du‡Z jKW}8dZMhWF!x[x'd'#7c]^@sCưh^0ftTrddx?D UAڠ[Yi{K,@y.z]˦d>|Nܥy|?s(ӆ=uXXA`f^ "e}L4G*[ 7*-#t p| ViBn)?%q6 $ԛU/_2v1Ŕ2.f%M>X1u,p[w%_Wn[KRŰSNjP\d܏#ZW.,DN0Rg:q3P"<8 xWWr6@3;v89,?p<#W~Iu>3 k7N>)z^a#&%)iݟЊ\ phBrb_ڔQF>QGau{cRKn쩖 | oŰSv+XJ[8X/*'$b]bN18[fem%LoT.l׋@ڣΦ$o3*Ԍ3.@pvM=JZx,$ Y:CIDZ:@k]r݀!n^¦ DVvnepjDķE7INH'3 Rv:jo'JGo%08v30#- d0nLaGD"EƁKcÎ8':THɻԣW9^ j`TXA-~*`)DƈĪa3(3~dcE̒Ÿl"&c58J΢>)w3Jv pU%bMa6ccƦYAfC_VѣL}uƽwY[brb3 ?PFo_p< ]5FG( Ӗ4DBj`I!1]%Tz. ;$ p9ݸ/pɽ"NM& F=D1[ -0fVtAq3P̖$78)~!Rdnixo2* z"s )="4G$!1Fan ktG#HJ&Fq7q!5s`p@ s@2ATs`C ٙpy#wA?O:>D۟>n;-1:\/;UҸH"šbT[=jltq aZE9@ZOEOB#ļ1Sv%o_|Z\v~1,_:f&m9{LF#L!ӊP?.QV- b P-7 ߊ8IĘf(,BhIѶ\j% r'[JE$ E<%@d{OŢ^bX;]ª9XM#> ~9z`YBwiƧ ;;9By>n7Ŗ.-&@Wfd=x^V`F6!VXͭkuaXC8<8s+V㕛`޷ 6*Rͺ0S4UC:yl bW&jkn;:K30APfWg޷!z9,sxG+ɐ[+\SWF2= }r0z&<i+ LK[k_cO0Đh] [I 1{f炊Li7њ[Z Zvف=3ʨ]߼Kp\Ѝ r8[\v[ƺ!c'Y5NfV6kVkOAhc|V=޳$)7V;:s/h޶w+lܜcYWB_[Yjzuh:dx_% pF;}MR)Ҧam0 _@P Zw"+~q ˖W5M*lٖ|r:Ft\a4#&n=V;=s/H2&'@3CN(!V}x%̏ %"Śӛ{ߊu'S|{_'+FPtz1(iNW0j-HnxS J%xHmAyG."==1 ~ ̹i,Nnk'MʏؠG-vLoVn $zHf R5%w%\"x%{5xЖco&@ev媎4#\>&eeV2T|_`UhZ]gڳ˶ov_:=V~Qf?|^}^]FYŠ>ACIEϖT՚;hnYQS&A%T{ޯ-nz.u}֥+vl.]u~xC*o>YdM&%=D%Δ&%k8? 'jRW@cAΖXי=]"xbc[H]SHqMJ,˯.*pb1ę@sr$Wjq&_=u I3UݙQ1=E+e=G=5zlWUoe;q jv]o9p˼6@?]R!`ѧc/\3'[mnjCWTDB?q u׺ywV)!Ǯ)hpeW$}^I'fՙm]CuWM%^@pQh)!\T U=kR$M-;[A"Nl*(V求3/M|l2QֲFO,W҉b3:[aʠ=xT+' T x5,IWrSK,č1e4 t tZ.=`&,z\x} Yow\m@r6`gJ'|oOaʥ>7F9Ȃiˀ>B& eLBA@? +;Β>:O3iܞt*U[7J Uk@8Hcc,sj0<#$y|(/ ?LmJKrA$5$O*77\wo(ĘW38y\u.U5r9/.L--\mU!hP{jlFؽOKW=B =p< cR e \̩Gk{$Tkj]asfGZtooei/ߣ*@1N=y-_> !Ax(t]KO'Q\ANk9֍Dsљ;rǠf.s]2̙rKɮBeG>gzH8XdVv?FO?ĩ3}.h2zy=h*L)'_4nV݇@_KR+LCOv שTkî'&@wçAG4@7ʙo-(+.!S I BkYG{P#mͽbD1Bt$3Ǝbzd'N"$Fp䑟`:a.)k͛> 3-0۠b7I.Lk$汎܃Oew$p90f#bg3OܳkS-򳻹HuwGq8{Wq R PcasK_ptbRCgkգ.>y:A .^o duw,\D D;#}mkB9TlL1թ2-݉PPU.yP)2R좦?!=3 Ao84_ַu?\(TZa N^#jE1YQ~O5 9~)o,Lƪ1(*7J:ǗP_˸gې(1뜙qz9ӹNK}JPLpi>hj^Vv[swϩ9D.8OI^=&`^BꮭgK=Fc;Ts*uQI+:pPY78N ꖚz )&EЇ@PO.\&:p>`l3@lj{{iVM܁8Boݪ,7e+Ѽ2qҘ^!̮ԍ|1 4[qHogqvޏJN G^+7 ccDvh`Ze?T@?:B4۶Xsrb*T2n3JmOZ`ΐ"2#zҭ6np,Z[WVٗ77Nctr>AANTܛ?/_qچiye}mӉSf&Nsї> w=au/Jië_ӝ}Z^3fJ&ӣ='#Cpٛ~Y 1rC<g+UjqϬz*TP=Wgo]ƳJ+(m//>Oz8C~^PU ^ݖ"ޱ1X 6/Bo`}BN}d|墊{Irtgq\xAs|^UWр>䔱EP!jFfTd!zB861}{X75{XX#Oÿý훷ljQz t. 3kkRWbƸQX_I8k~tc&LҵeTi[vVT#6+Lպ5pWZIƌV±T@;ϞS& I@03Tv>S'db{LD&BWZQ :ʠ8"Bt91Z!t[Nx' =x z.(u*DiaÁB4x TI{l^*nwC&&]u8ިsi%#i\]3"dEv%EBTp@+2Q%lu=#ײE yN0jsgihhuZ"z$4%Z`zYPb"4Y^^(ċؠ/Iܡ8}M*bs[Ub+!q !1GI0 $֦0ۑSr&5Pk%оyu9b23ǧHh5Q\̐{\O$H2454u7J?Փ75${(BIJ54Aϓ811ef\Ì7N8NC0 ̂w@F:]BFk/-ko ZXmkJǖ\SL[aW J cD&駆h^k臻OPMk J/˺(׫(ӅNbLOe6dA al&kNEqPkBhX 'uP`J Wi?&;'NS?-^A8gT<[='U{stY9\`\ͩ+Mz҃bq] !+1 ?eu)#ԆJ>KV ,m(!\} }f4\ _szPkUk5mWtA/3b-…^3\._F.YwLڝ[*Gfz6 ,,w~yojT[ؖ{aekZj;uX+l}2/2+ ֭K)\|dN}qT UGm(]UI V$R9=b:JE{垃!*-oL KrZ{p >Ѩi|r]*JVS_ڻ5&˩TAR.c}B60AE oxkqB)V9Rs[S9`^[@{[ӵ]l]*1)x[]> E, ;d;]N @̅Xh6헩C2/H?WE:2q"A#d24XXFOojiiܒՐ.+=f{~]lKCC˖Դu9i Zb1zRtX}5z}`SV#im]ZLҍV_S׵noܚUn}JLTW|s \NGN *֪xe*c#dBd=1L]a*|O_UF 2jNAU-Yɽ~{7lX^PP 핕3E}~o6Cahv8Ibw7W̉)~ {fXX[*_+J@Z }{Ow GYٱ>Գ}.z}gS 4 )])d'D/=z}$L̥r]m~69X?u2 Xd!Rk{pn Ύ)˷iw֢SLԊv2U6pn$,5$eLᚽb-QG(\:,~9E3R9be%f$iSݖ3RfhvEq i,z-&Me x}"4ݐEĬ@=iHTwjh92!9Ap<cZ7!g| }:)(`' :z ݍ\0;V:k#0@ѿ@]Wg#8^> $ 4^fp̼=u&!sQX7;e C{(HYHzv"$Mh [J.d s'^B4iRMO\j8p(6}Rnxl|.Yx\Z93b}<٩4^ pB=ĠgϢRLz絝W,yvcc$b nʚGi&$QY2Œk[uޘ #9Bźf.\@05IN`؏-M]C"[Fe01ar$*g}$⪾i8lM}~l2$i.<֛N]2\#uicύ̳9I٭-Ux zm];7}=ڤB'ȳGV(7 1{t7T)UK jRTRTLWɜv#cg iMOy:} CIqۍQHfYRφ%thgSș#M3e[Z?&Eo׊}Sa 4:#x0>Jmh6 ;zmU:N%wץؤ Y)Dɢ mVTpCZVQrꔏx+x,NmKU#@c4K cWОL#%mF^o ]o ѢP+= J2*]VD~k#{h dn!vU}kxh6s<_.p4fsH vϱPڅϸ[,@|~ZU$&g e,ȏJt Y&E"͍Q\B Fk /(d-f:bSp$vٗE^nrE#'^p  {SPFN4$wo0Q4k"4)̴iPݴs?hzs&iv/i43cqtC ʟ^׋~ȋ84x)(1ftx6q9d^xhG#cѨafZPܻXLXӅ0N٬޹sVYFajB7 x6uU j\TG s*+dM-.ݛide\X(ZhAtSлBX=x ְ8 <A|֏hvDuO>SF^O#\3)_?#rgB L*:;3R2_N ~O4ml7L:"'X,+Y79E#h>m4"Qeg1]{)ry.т.4)X QX[],rZ[x Y3_>ki/ #1c(V߾x~=|J)/ͺt=^O]#gtȹ.g⑟f*Sq=/̓j ? hȈ bʱr 2#nQz<r$PFa0WJv5Ͽ|C{;5ih,D?4 >ߔBGw-#0qqzݭ^6(^W\@z=K%Ek{zic0-<o$Z TzB6v' 'X'G(jGf;oPh YX}>CHܜSv\."|}qvXO~8M\bnXצэC& M4Q>"EN%̃3x%y2ӅaաhJbrKM;gvcx'>Rn)o `z0K}}5TB ҬOl&jXGʧn& o~gS)UݽgktKx.X_ذD*rZX `eXgGwʸCڼ= ᗤ.xJ~WֶMߌ(lJGxEpL<M.{` و喏Rдb}IsO-B.nNO& 0"?t7Xno4Yy`zy %S.KLVTG;!8 4{8ĄkkKr\Nd޾A|ƷHʙ_;h El {zNqo/0X8gӃ 'Q)UIԯ\J F;ughxm UV{-Zg!RqewШU!0 -Ejڼd_ݱl-#~ߋma~Gmd*YK^@Cq /JYn(v4dCϸܱ|x[Xq};,fX'O<0"zһ4|;Bܗh_.->ao5y2{}Emvq+ 10Q g~?!Iא_xrTqpUyLS)Zn'Ea+S J*mnC:gi/xJ/`6kp>\R”O!K}Gn;L2WUVM7L,ZrŌLb?T~b Z QùLNs,x9CfYw9ğ7JCM:gEmE%E.έΪ^IbSA o÷aveaᖒFѳd_s@tZBJ~rAf',CӰ]DcEsb|[&okAqx)uJ%| gCWe֨*~Q7߬@3&Ҹ57gLhqxhTbk]Arj7:~\µ,̬l.ry֑e {*FiƑ{78'-H}?ȥXQnq`ѥsNB+-ӛ9j}pXtt <_wͱ2rhjAO5'?ZO{y -O%JFT}C+jH:#H0 􁕨2nZ_wd7ӃkeBR::nbdZl'we{H(O ޷U:@J3NZBAqD~p?*R(Wo8C̢`)~ # 8qq ickAK;;B~BntЀ"d ۞bpLs<ǫ6&Ǿ̛ƒCΥy\ָof P*xyZ_ x]2Y9nE+bA@#zCZo|vצ> 3 u"/ B-c4!ų9p_X#wDV[Ie쌋tkqקs"onVONzϷh:UDlVQ9}+ُPNzVz0U`rOSIx@b?x4!0X-I#.~AwCĪȤ#Oٳ>Cܫ?}5 v6}{kșO^zjޘY}k=>VXkzSUӵu.A Y$T6$iw7:(Kܙ1^[ﭮR< nX+1jNUYV,w @Wf gPf1 $\QY/!6 |*w{fIVUYZ|]qUDS늊b v}*[_eIO"Ÿ:,b|t4;r8_X?FE/ۯ33)yNBdUjLLbXH녒*un^AFs2)i4X338r zJ]?[VFO=3f&?!zZ6i4@#)  /cAldzSz܊ 6i> #; ֨; I`BLEf#ꐬC RanBּ䉺Lzr_o:Q'~wuⰋMb^U=y^oa/~QJwk]Pq9+Zg36 Q8=zBbWMb3=ZlV 8 ֌!κΪݢNO qa0q=A2^ʊy\&(dTˌdFCIt4fr,RƂU)o\4g8Nh}< e`AAvѕPT@JފnގN쓯5-M^yMIt]b)> Ȼp0se Xѩ*ꂠ vBWBC1QZ7`Ҳ41,L kcq~/8%aZZ$hn eAKXϣYꞅTv׿Li`oD_:]_BPPPCZDE+MvOk}o &潜*< 75S}l~`A?d`3 'lYX"4YQZ A)$vH]<-yz-P;IQ%qZk$ʥzRW=XbӔ/_Nw ^6Jz^< "=澚&bY ~)d|Pp>j颮E"H9U=P GsNng)Ѐ iFZ)(wUkB܇ xV=c,oGMZ(/1(" _Sbjv;0CRjr ;/k͏Tc=;%zB]* YG=¤%g}8.nw}A~_F'ͳ֕Pۜ(xT; _t:hƄ> 1kn"׼Clr0:5@76rC,hC(MlB3 Hڑܚ4:ógF{bpكhX6Z6ё?HEZ!dWxMZ3vjPJ'dF'+8tnx t zTr]qQ =bUDo=p9lzւ(8EѵC ԍZϋ@5!hwMs>bZG|{2'D-%&ʪ-K[T-5 վ*PT˱(@QCXm(?1mrFO~' >GN};x!=Lofy|^P0L1- T#U涃2C>W|^}0OBp3Wbn_GhGc2:.z!O&7OܼW!OƨSS˫3}ʆjuݡKtsSAnAz27SO+C85t8|voއ&:YE( (C(36DBAN+BC'cIT;ygwhT)zv;ZsSؿzhq~v%ۂe|9ͺtPYu=ݯrȎVsξA)V,e:zd: OeQ/6xmP4u՚ou99y`$)Rrt櫹t oy PN ˁٌ<%Pr3g[ /:`+,ӫߢ$V63\1>_NЎ>) nƺЮe`vE)-+R܃Xֿ+ d8 rٝ/zWD_]7'^\l^ۋ|M ./KI+n NqtfEZg,,VmDj_q8 eō^F7㦮M/nLsn.n+$pE=[kE46PPt8P+:Pb*%y{Hoڎ5}>^ϝ=trq, G Q( =dWJ)XfV"'J3 !m|XPL0Vu3-vpՠ!*S*lS<1{?u&Kb cwx0 !/-[Σ#nBV^dFN:qDCY(^6\|; /`9a@&h*B{WIFCGl1j%ǔBorHioy 0W~F hlt _+-Br E>Cx;AK' [3&@GS&O-ŕECGjw}֍lJ Nު+0;pwLo`ͩ6؍$.>fSP9$#sycL-V EO^Bs5ZߡMʥYC (ssJ8M>=Eζ4ٖ *b1 Et?n8WWvѧ/ђ> Io90ÞԲçoZLӮE.? hD5}"I*W8At]]RXtS{ÊFMhWozsݐ<`hE | غVv+~jڥG1YQfoTJp~PB550sԫo %ۻih= eE! p? WeYA0 {9ޞ ~ELdw;}T!Xmo-?6Zn`Xw.=4AtpWzXb(~Xx+b];Fܑx=w9*r~dv_pwcr4jL߮=n=ו2SWbt 1B1}"E{'YdWӯ\|%VCDjx 2wSSg|ibnqOiFp U}._W v/vVw/0rdj,w⽋ql>X̤Q482E#=NUNjWt򭢊r4^ivr1w'xZ:Κ7>kBk:\N>9a,[P Y%Y,dvkPL9z%\ZJ>OD0Orz)Q9&?z;/|8̵"ݲ^uHh sRD5V4C-ݐ LU@>LP͘+x5cjca)KE'e2Ƕ\[ă 3: 6m44eV 6cYQ8c88.UETATHFDU BB\CS169}vgqs`Mk ƁBHC(Bh@iJhhih3֕:IHNtwڻݽ~3|r|uk!!>*O(1=)iQ N.w/jv4ۖZʫ|`{›0'"{./vpWv! j#Nു(Т!0j!Ґ}L=+$` vu@ ˱ѤF#*=p \ۺֽ _E9oYYzeQ nPIɯÜk h0+ԥu""8҇'pKF6A)(9 g`Z[oڿsKeV,̇9 VC…~ 'P,keq{ψ$.2 ΋!ӟP%3ȹ} C{ʾswNmq+pߞdva!j؎͘ H:&xP%꒘+.9utzq<.5eU6˞P0ʁ%bԍKW^.?0֞',SuLzۓ k=8]L&/B۩zVUd' s5UW[EN#VWMY͛#MP ]B)gя ȏoR{zhŧ_@ݦ0~jBb (dP(3 &Yqj? =:&2Ӧ#os`l$RYΌ(;rL[Xb(Efݡz4Wt`ߋ{G\ 'дo;jJ-a\5())/4< ̐X(%A&u_7_/R;W ?_HRVP:,('<M4+Kj/> #\ʆfS2|W@ Jhb;110h.4qI2$iɪ(㧌3uP$C\$ š6uvQc=03cD<2Qa@hOĭ!T qpǐ$#y" ܠ AC#y5&F97QW7x<VP䪚b/@8VV[`Pes)wi#Bo'[77R_iȡ&zFA\Q$|Iϰmؙfa?0RX] x }Whw;|.։UsΕP94K@y.t>vG۹9yhϺzN7.Zjƽ8}xbl]ҡӲ[; wD(h#Ұ9w${pdIOZô^Dd!Y%EHzQT3EѴjpC5AHDn Z$nY˦pJ90U|_4~a}^p{F߃k*V.'|{2Gb]f mD=^'Qsr?)sr`<4jIgz&9 n+#E/Upϖ<#Ff(UDx =Rd>0ud`0fJ$Fn5Fv -{SG[5=2O%xc`d``b `b`d`dd,`8xc`a8iCf|`Ā 0y 0`PxA#C3Hi52PxkHTAٽ߯ ՏZ!RQI %Ȩ2H Z *,-͞=)9{Tz@z> s |01MDfacv~R>g0mf]` lvYH$a9B `)d@%Z8 nhpx-ZІAIWa&f\yq'``J:Wo`vC|ә;x(|ͼwT+%+[JR+]3=@ 0]2cͳxS39B;܆=<~>2̘`.n0=;Ln,X'EM}U$sy)U(UJҩy=}4Hn:G *tQP1"ZOy)2i%4frLɔDqJDO1*bP ~^Bh⵨ CkZfm6W%j1Zyݦ6u.TT.?}a?ΦEMJ~6аȨظ'f$䳦6 Ʀ$﷡gMxc`d``/_|ef~aj=v!k $ rxc`d``S{9@"HxuJA5 5/(A*"bXYZB]$ "6&3a\89{n3ol2[R.Ic ,qubzU|a*7i|W,Fπ %KeShX5(2fb:cycަ/ .IvX'&z19b +he:HV}v=֜K$:/sGgS r,8vǪwcy͐iفO["+\ߖ Yb9X.^w.Νݴ8߄-=2d=Zޓ<7gpOﷴ{6~n]5pܜRO |3)Y[f)v{LQ xwLaTPxTMkQ=&-&4TB2@ ZRҖ6EMN^3&03ɴk. 7D\r3/6(fyݹs}+V&"^l!wa C+opg^@Gc<|3x}b1Vw/t[Xy8bpYd}\ B0ЅƵ u4؆D}T\%{)ËPuXzkVjjElHu !;K!=nku޳K9 vaW]u1+?r͌}FP7oW*2 Uz;xa<Heo4i&o|vhczR+ɔӑmSDw"exzZ}d;:nu+5)WP՘ғ:3]88ISGWDtC"4eTP>Kn$Ibyjs|sKTCp,;"=borG&/ۃ8qC)h)OFAG"h7[b(skPS۞X]sOzRh%p9?r9B5#;RTryaլ'5xc`f F X(DwOFFOTTO& 0PCFF  %/wFFTM&xBGDEF%"&'POS/2hT`B_1cmapbMhead66ghhea@ $O@hmtx%qxmaxp`*Pnamedpost 2S)X_< 2O o-IHxc`d``5Y=@"@ P*xc`aǴ H30@h L@>400`xeHsMaX?G@998f,: dJfxOKAƟDlT i $?b*HT4RJ/2&cvd쮉~s/0RdD-T1wwf๳_,;Xg3Y^8x|Z3ˋx_b^Z^|6"bh !`=7Pc[EPpԥ%`XKa XT{%ѨV+Z&T z,A; a9ϖi cG޶-W+˹Ckw\*phF-.4wl'&}0F#)Sk-ԽYh%l5& <s)iʖP-шuU*3o1]{+k,scT.ux"8bW+suBĩc+A{*H8,XvGE*8w&eq"1;WȑԾ<0I2m4jҋu&n,^P|?&Wxc```f`F| d+0X2D1,x#}&#@gbfaec  KHJI+(*)0@,]=6xc`f F X(DxzixenhԴ Ƣ lT/$ξ ( .㈃3A?8\wΏѹ}t(''7{Vv.+h,nSY+5eiLaNfִ;o2AO>r>Q} ٣6]EJDŋ_^L^V\\Vߠn#Y/^_Y˛*+f/,+-J^CDrDwEѝ")E~-W4G4W4O4_hhA"Cߊ="zTXq'EO=#zV;s9T䰢E!Y>`Mߊ5ΐ_onYw˶[ko|;|Wi`Ef͙]5gCsv?~.̊ɜI7}.(#,ʝY)%bFyąx.4R䳏B`Uڑz9`AH9m-/P%K < \zM0r Plk`Z˵;`,}I6Ɇ0\'SH,`R39Xe.)4V |\q99āRPx1S>CYG|@IΟ,̀벸)?~|ڝ& FjSrV 2.n{?xg%Wmt01P!:d3<{@ VQ}W=BY%#~MU,K,*hd7~pœ?7|z(I @ C5;TnF\=+<pǽQXFڴwK $_V6ZP=<;'<?(܅\+2J;Ax2X5Ѧ4V4f*8 ɕ2 ^ra*f [F$g\:(gvqL@!\Nt:QK$)tz`ۦ ]-X=:{p Fl-TȎ as\@GKIhxݩxyz%mbM`FEuvv,!E>g=g~!KF('!fZE6TiŻ5j r@,;x``Y`DYA .`!%HPM>79"W{ lN` CD,XRa8܀}px֢&oLcc77FX,ѣ3@xsp0n/P  4:#^{I&`;iAjף6N@'/XUF06 4uGbn(O#v$^P԰1 yZ A0y dh`(y3c ZFޮ`gMQ] ٽ ѣݱX=LP>gw)s[L\)I5(m#h.M88˕t>nC?@;ꪷoPo>Rdly?AݓF>sÓ8Gpl3xrkę@ 2(Os*sԫ*9ioI®V ||]zZ'20`amlP4YT* )UP{ڀ>I\4ƪ:n$lj=yl_j'ׅ-#)TdM1qYkeA]09})}2YZ02SFTt8;cU{!n5$Pl3VkxPwңY< 3=k&P'~Ki-av*MlDxxq\̍}X;9@,SyuUcSq4ʥIJ#IHYWi౏ʿ/8#H{̝uj(z1T5v LDwm1h?GP!wq>G]~`/M@7KP{+~DLe RڣmA"jdn`l(AB'p1<9C-n6B&dᰊ$g .{Ɗ$&XVGQ9r6؃8V/6jm(oX3u]| oK6ּPj[ɒ2L۲\j)Ө~3H%Ο@@: dSoxY\AXrŷ]}Ҥ,l8-X+\Vp0|4{ `cp)U:KZZ0!@-wޠ8c:Ar\2uM ڹ`G""N%8K|0 Cr؁@E,6f&nU L[PSoK=$rxއOL"FP__[# awd("\ .~8{`S耈Iíu =L<16A8NDgiWCzM!&ӂl`#sgDxQ'aZ%`X\R{APpo;w{!@Fuʨ3x>M/s= px߿OɓCg҇ZKYF Y3,q,SY[lj5ԫ-5[ ~GܜLt΀3ݡйQA2&d%,@%ňM OyHAɴ*nzyz@\\w~x?#X,xVEysW2+W<%XߋkpFjFˋ6YAɒLꉊ{"=CC8'vsڼAҐ٥+ :٪WT*K]\X_,q{?8w8=1dX@:ۛX}^Ny7|:/ܕ Ba.oq:<. 9+BpuͻJ[8^O-QOGQu@bΦyB7̹2]$])I'qw =zb.ެԫ KTo"$|%L]B®hk'CEauL+'a$jMzLVd5S9og(iB|ؽ7wOhXMkh?mZ{j֤juz!G 0pǃ.F?>?L&&dh)44"e>/[ y[)o8,O}NB%෹ln$&ƴQ^*ךtvCR7zއBS9x;HVJT 2ґ-z4#)E/NlS{/DdxqL]kႜl?0KwWrcs1TVhWeffd 1 hgg{ǻxGpPk #`6W}Q4JeI]]5̥| ΃'2x~-GMf@àkL+կ TC03vr#n?u:ԏFF}B$xd HHWl.oZiԫv MLftBOmK$Ђ3b~Wr6l 8qWNxs+j'B-wߌ }p(0 oPȃO%x7mrt Q:%&ƈf)J^]o)0{Q rL1wrLx<{] i⃬1 ҉X b1 8P 9yWpɧ9"/&c?R#8Ww& M} ca㗬> i e˅geϦ}`0F~ J+`%Դ^fznEV,^4sϯNcl,O_cP>2 /ԉNk5!X_:84;Hf|oG@i7v-4lj2Dgس6&MsD~cDڽί7YRa0{cî Ѧl&*Q˛TrcE6_q6u5<ƔM7ő-M=:{ D!mQSR7_"w=lxp'I>d5kw NXmUx# 8>Ӂox''ղFmߨ)*PmJGO(&>v샋'赤MKvuPЅ-!d / IO2Fē;zqɺ~zB|>HhtƉl B M^-uu/޸Q;}h)UZ٣;LW^xTIn4XLR")ho!Ι4 x | ~&lufoxmPnDJ]cp:Wd[/\j,P:Y߮Ѽݪch$ DO{⩉$vMWH$p0}mC=ŭ7#dVsc;-ҦU;393]̔2njH[WF3IG>W V.D>9ܬwT9 حOn3աJ絵ϾҩŌ҉fNZkx}uA^|Y?l(蛚WڴA՝ Y;/'R?25̘c8%??0ڟX^Ziރm}?FBI$;M 3iL6 tV0&X?8{k88RHśu@C{w$Ns!A#Cq)uӃ뱍{TqS@049=3Sm)jdڢy³뻔9i~\O2GINK;(;MeTGXi aw-T7~@WT [XV2WU[a;!{ʛ#oMlo{>Ov@7F7*\NF*ۡi=}d% uϯYVTW3Dͳ@ 5l| zΊjѩ嵰U봶#k ~5xz8hTla*pau 31{ bAc}yUMD ,V3bG <;lIq~x㼗s HEeN}Ѥ4Pi0[#I[\wq~7ܮ{H]/{}屸n;W!#IDmmwOę9h!ji+M ^1w5[+ ̍ &YNah@Wdy:}|#0EaP8BL>65nZ@}{o|cǿ||mReBc or͓3[7=!xc`d``b19&F b3B0 Uxxc`ɞA X-l(m
    `0ddb@ ޼\S0( P@AN?$˴ABxTJA>\Fl~T"QH)q3fG6eg(}>B}/K@zY XR37gϜs愈^ZEhs-gs4K !Z38OGmza]sK+d%|1Ù1$z Ah;,J=PeEbР)/G{Ɏ2h5GT}0>|ϵ9XC3(Kw!Y6i6Uoh/ &EmlC[ -F_Gf0=' 7I'h'+FuhCX=Pyj^oPzRPLE ͛j.ԫ.-W 3Ƴ K4ξ4 }.iAK6R^v؍UvlGR-(jb1[@##%@(û[,唒V SM &41>/iE omL3YXN!s HtJ)W《Tߏ9YqLp<)Tj7I=PO4E Al5 5zJdi7z%{g$pO|B a"kv渴?#сdb &Pڳ/yبllD,Pr+kYj7X5*d䈀>nKC Nm@̯ߗ G w v Sɤ& *lż+2d({(.%ٷµJZTϝI~ݙa!KtvU?N8`6&̈́\ٱM]KI_hMZt־6/& wA?إ0ϸX^.m\H֚[Cv|¨S^W*]^&"z>nu}F5A%#.sLR;N30 !W̌\/2➣Y%ف=%+wRvNJe -.)C1c嫽UJok>SҒeC|ꍇ|aX[ zʊ,d1b7?w>S<0Vb).#+1k+K7?|ec+:_)ڽn$l3H;S{&éh ; ػ9`0uiq*: GE B/L˺J ]yNqx FՆe[\ Kp-^mҊa` B5<"W[|+aоwƄ #,g\耑H+v'hܰݴ'w;o(v`YǐS'"1> ,b8&muK!F2(A\Ɉ=6* NܒvA&N=FLGOdN ¤pA#\pՙ֑臝ΤcJm\Ɩr\낶h,Nurыy{_Kt"PO6ǶW7UN,ba BЖZNed;Հl`c`G  5lh +%<v ف=Q0 1s6yٝouLtEA68Tԑ Aak4c/ ?-xymBh;S,ȵtm'>?zBѮX:JwVJQj\zݰ{dR2b(<<ݏ-'.L9^>:`0o`|6̶>uB?'y~œFEB|a:+@zq۽+tVeě+2i8#Zo((>7'u4<Jo uECQt]L3^םXZ'uv- .;M C %|w\ 0h,7hijڪj5z$J)T FpȜst T3~b݌o,LZZ!f1 UgMKī @ mū-bѳ+0*Nqh#qs>֝9:6z<eiYo؛͔CjfQco}Y.]>|;p[h5jjScmWӴ;RQ.Ą1h|3=]Qtv;|C`/tÞ`$Q[cy}>>8_H]^Qbob<aUd-JӬ|СwZ19<?&NnsGwb\o !e.2)y:}8sE-3B߶cpۈ1h'=\mڔ-[+sR{ q_:%;QJaXȢ+3Rf#Pl󲼐lS,2DP.Ԅi27aаc {ɱr5KZW lݫWL] 3+W]dIGii7CZ.(T3JD{`?KI֗#9[DAeĐuA cA9^_ Fp#|B@@Ǚ{:FomNۢa/oTg0K@(Wր5L& n&GݽLe>-98AnˏЋࣤ0C;8· ׁľ㢍:3O>ܸpQA7lOZmHp]pmPl`_|s3FJ;Fxmx%jUv2ΐWa/' F} OG1;pbZ;wwaY|O%56W^̱~'g W 7 O qM;Q/x- ~.W4Aʪs9hN'W%\%>Xh3Xs2 ^7Fq;0: Zf|c}]o |Fi0UŹ(P^e:S0]8X3/!w<'em|~΍0xH[;19|DcXjX_wlPԠZĦu/g Ӥ_f [j 94(-:݁`2ssJ`qMʊ^yHT۷4!8VJ9؜9l9PaN~E߂L^B)nq51tZ&^Zϊ'm:p}R@nTiv)Q .9O -?fN;{9=xyvքkNiTmhre 6u0ݥٴ5ccc<;,e)tpc)("76N|c)qHb^{.yC)ananJn)T3`TCjkZv76ȷi79H3;C6QY`uMPAGȜPG3˻T!U&p v0V6;{,'Jl؆qC$XMVA(w ]>Mj>1u.7U U ,9$5=Rsw1M:Dqbj'e٬lLN]4 3lFa;)W.+@޺TS";[9\b{#jfJ=ڪw0È 9i̛yMPKUjrMlWѢ5>ucb_k$L;fWfK3Tދ[۷4!uR1u`\ 6>y MCBd?n#&\V<$1އ+H\˜y s@l:.q+jm&\y%>7Hcd"ioNjBܸNJ$\&W` ~uzR~:z t-\#\mы @=ځAo4wd[W|Z`ɮ5 G7O`g3ߏՀ6^RB[r%Fb‡WMϞ毅wɚ/__BxRnǀǞ֥놗xVUlg)6.iʄ*il:u)&X 4m^tTFm(w x>"&tfj3-vhj)+ߢ|\_%<=`VWxHYGUIy?섁L$cͧ܈j[.螝aI0ۡ*\\.uu raoQϊ[FQ btC¿7ϼK?w L  w{aCOCT\R 6}#^r#;' m5lc#dG& ^In\aG6 aBυ(|YAunQՏW-={(!oa?$/ $|C$qlcC#ŻXakrPDy DTZR`E *K/ُ?Dm8-"TM=B,cO3})/"1HvL0`4w;a,r{;,:BnF2b͌}r'Yoy`hNRp JB+;ؑl[$Ov0!oDbxx=؜R%aԃ p{\h YO<+ݥ3f!/WȯdLNNÔ†%W.o,Q.? Jοjtxc`d``b19&F b3B0 Uxxc` :k A@ b311MdP`gafff3130i13ĠASf+ ̆ E@}q JLE32H2ad:`4A**M:̐l#^ 2O pwOFFOTTOWD iCFF Pb]ܵTFFTMQl]*GDEFQ OS/2QU`B`cmapRCqheadR36JhheaS $hmtxS48hmaxpTl`PnameTtf>DpostW0 2xܼgյ/ڃmv>d1 "I( 499TuUsarhH&؀6`l[{v)LWZ{{h.XSSS[K.s]]z u7kj.h~\\SrE.\w:>g&W˾\= RL\?5Wi~Es~ͣUFd4ECoM7=p><ӛnp˗~yϾ<|_~`G[6]w-7t tMW<2{źަ_xoO٪]\YӴkDUͥiۺ\uMFFo[okCw54h@s%5hPszknDs&8?ܪ4ܩKs^}5i*PSe)_;WӾ3 62/7y!TH!k|<Le!=Fe_L:;:-򰒪;KN[9(a]My)u%8_Rivm>ׁ eDɪhOBB z^VA%1S_+IB!yK:OB;X[{Ǡy" ÆtS[_b”nh<_2fd-e2r4'&g7'`+FZ[}׮^sǷMɖ-=,E(a4\Ńcw4?|.RrDdXrN0ư#ЛbZ8xr  ?U(6 j5x~;+t6囁 t4wdzS)FsD!"<dzor[tWE3кv8L~ T/ WTSb5z;ׁC \'Eje en 2*cCzаU;/,QpnPwk߶5?}#T/A:é2-S]yo9,XgC>牻[K@ΊG 1TEPNk]I:t9l='>Kcnp#| ĩȾᑩDz6| ;_}|%Hx]A3ڧNT|:BH0~/8~ aZV& PN3Nm-Q>gXw9^CccJidqn_9Eڼ>['B@> I옲PG8AA7,L)ʝGTg& o ʊkoR9!PCYBHa[k[js K{c5W(RI>>^=Qg2 n18.j,L0?^F@¹0tU0:Ӟ%"Zx aH{O3[wN`#:zT[_^׮|3;K>ۯ.OM47t5,=bQJJAWDpQH4J<,4W]hwL5*{D9Xܵi֞ޕly2u/ch^,hϝ[Qyk;$*\ ̌0YښЎna5 Kr\DkuN?5-G0،oJ|P'䔔yGc%U9l!|, A?c$9 d_r=}SvC+^ڈYDHPS`1Ƿ/xV}vCOduS_VV*,XέR斻-OU/*Nlo <,Z\CppHO;46v۶~L Ǔ;:14 3&J?Ae<yE\ 5 ^roޱ 胾>4; \G `;81ZtR]­@ ǰ~TV'xqȹLcU b!~#妿+?ܯGP0 <'EG(u)K qKc>cܒ;N.I{f`#366@+lJwM>o|oO8>9 4hmyCĩi}Hv$/pKᮩa(qm=3jܘq"=m\~9"D{y(/Lx L8N (L%8|^өgCR!&` ;4g=< Ii1MK*~kY$ooi6[0u9ZipnηN ɾqbXc$Sxqmh'z_ SE| +*0ɪ颳d\h/{089ʳX 0{q=›A)5/*]r]oq`~lKmA*βabϞ\ĸqu{-ZX?|o˫ʥ:J- Ϛ4] V(FpŜi\\1?H2lPNFsp<_OblfVxVnkBfR=h.O0S`DZfȱW/>7]}}#vtt,[ZqŚυ**nɹ?֑Ў΂m" =uV@]xcnJ\ݹ>H?e^ձˆs+sn#P'p21Lbt2i*mxmŞ;n{WƦŘA#.z|%.Ƒgޗ\@jK4;&<)LÉ|K4RO);Px# ?89vrz\n(1~d0 >U ] }>.魑+W}&'H1r(&RFJ֦!7Bu fދ~S{(ŊsuܐCo4٬n3"Q,O-y ? Տ7E =_>gކᷣgP"#Z`Y#`]_+2rrBAcʸdY<}`Z\l !#h9!$xꨘ7Juˮ@l ` `rJ.'-ۻLAڂ#{#0fDW"]ViFz@\Ċ wmAaoȓLD* RƜ8W/\tb, $< ;^; GOdN| 8vwSV/=R2f㛱~.k ;V?~j1+FAlpg GORH _d6ռȥK_V^X+ u8Ź`l{f9v6tX{nG0m2Actb&SLҩT8|B J=(L%=a?Jy2 ݹQqջ&99&yb  QLp$^la1>E]iO7„ؠ0Œ:^ӎԮ$ZͭnûaXv^V6x {<彾aH3(r jBz9Isg/Vo%:;}rC(mOx&34ML{J\&}(.<1>my$KP,bw)и1ٖtZ ]vXl,%!?)Slhϻ2d枎i8+9F LhKœ1t~b;+z4: }[#lIxB1'1H 2g]N#ru۠ùw'J`\\~#.APahbgWd-Rɡq; pg*57 l'f2(,{e/Eu!z]&Crc?B\> yNXK_~W0Ebbx,sfj.gM9=%&!$ DW5Ŗ ⹃zI"DIU](O uNtOtw6U Oߣ͋^x ~oK O9 H0#<iAjzuap#֯=c [1Od:0Q)\ {_1>%?xTש)nEDIsG16(HKȺ@?!vA(gc$Ų+2fJE) BX&uLf7SQӑ>H]z'ZO[^ lz Fy 校@搯֏Af3"o4/b=bO ѷ X|St͒aG)*] 7ZqV,u93*-Pʅ|<>`}V5jgxN"K]@"xam74F͋]GÈ1,ֶ.g?ig\p-_ڙn8Z|")4a3tld%iY^ Vvj}P]0 bkKsGgڈgު\l3Jr*uuY:{vzfU}* &r"e P|;:GL8={kE~cn{ׄEAwz@0Gv znGΖvH.06 .;Зؑ7򐨺vπbs2p QI{knsS]&,"gQ"@dCQUÐ]o萆Du7*DžcʼnRe J(9IgE>=yVFkWAd*O81 x0˖\XD!fa|2[T10,ĩPV,7gI6Vpi(=T1(OC!D(ap8 ^,U!2es."ïm'UUN1^sX|!:d8h]gXlo[ylp, r&*zi}P4v쾰 )I"0'fH =ɖyjo'YtSW[©QRcuHG'x zS. p {QuUELxp/0ȸO}ET>Y,WbHS98:@vh'r>,f Jx3!uI'd#܇IhW ;VnEkZK@.P.2c;RXk* H$yg98hl44Zyy T>\0ѭ^ףO{z|X'N%#cE9<Sׅ߲'MZA\]fGCC@t'~U [.*|n{0iz=6QFnL?"ϒ86{ӡ KR.q`r43G0 .,碝~~DCQa>. ꐟނ|$&ZԅCGE gO=E|[Ɂ-:z{:\OmQx'[UؿD*{%&$3h)Ywά7JWq: a9rQibXqj6?p\WY}=>aM3ޟI8v1f۶#5# `.|tfh6GWn_8 [rL_DL* g!)TGQ~hAZ0) 4,=W~e%ӯ_/1'}Ůd+nf5Y ㋋D4bdtG {?WW8ORXvA`L{cfłĩccGQ*…9uY^hpT d2B_dYBx4pX:>FrcUeK'-$%G27M&} _ܙH [1͛#2[O];k"^ބYkWQ;;wvtvExU~0n?)3crխ\<<$9LrT "OΞo^*+\ A)"ő gB*X"&&f`LJENcTxTY@E'xW;j47wl40% [Qk/lXz.dC= 7P(DbB 9&$q1^21j_` "GW/{H4+.>utD\Qf_T_ZmKID,"J] ֘ޏ}jBӿSG/Stʡk84эÄslp9*L r `j;cL^` Z| Jst)SJͨ;Ԥ %)0𠧪qmE.i'G?Z;1 ,phVQ0VONg)&J&d%:ֻh^;Q“s'6߁U{\ѹqS{ObiY˃#`WUIg,vXYS.S[ʶ@;Π;NR_WE 2),qbx䞽ސG͋7J \|=W*~}UfuXOIضP##FߠҺU_%EQKbQ'_8y0IKE|Er]&KҪRKB~f8 /BeZ5Ȱkp`@S$gdrGxKIu+ΨfO82?=t[ӓO<4ño=(_U!~ԏ 83%>3y3r 3#ר >nkk g(K6g˱P,g˄SZ&r&l\k}mH?:XiPM)*s?9톍IxO1ЍazWݡj027lYBʿ Tj˙>-a a͖BX u{|%p,Inkڵ{="D;3xq78㶀`:DnXۻfMꂮ@! sә|nkS71H;TݑDcHg̅3m I^\#Z&YꎣHodg`l\޹{tf]0_NajRuNfi h >6~hN6j8H,zv!J/+R7rS`Vm4\yǭ sVڈNqrX@: qGP6B/FfO.ʏ剗J|܂a(_T_nUpyYxd蓓wBRݞnӮݨ Cs`[֚pber;N갓(a8=~boJ2bLГpݱH\IwC:cS#0 6M;xn^ ?7nH#+Ξ!ݪ&&'E <017${~3q.!(‡x(&Rdc+Qd|֌ rGr(?B`JNi1?O:#m'RXc}=8N|i촇sA` kԥH6{ߵbroWZ]֟1 /᠊X)]hSb8 q@A/L@ NqH2wO#=V(ŭEU;A|e3c*GIqT*&F20t3-6iUpkw=SXEK LDJm'ҳ9tv>%yPj1y!*@@RUM@YZqt{JrQyT_T9$qx8^k0A.I_eMT,aîЃZOO  te Eʷ^u&܌cx-J;G r4ZChм}̈́κKs;38MnnAKWJզp(-P6a/LF d|WwwC I(跎ZM5zڜ~jpZ({3[]L=ly7Q,3dQ=bTObμt: T ")yY'79݇&\X+IT"$/a~vV} ӟ) T=V+ hn4$7>){17Qބ9zGo{FwAiDI䟾i?k>+wR}6g^es41{?HSX]3qglM4\B]ڞnuy=ؓqL8Fh ~xjv$d8eWq<}W3ƋHnRw׀ ?y#bn#t*Ÿ"-Җ jCX 44`"Q1DB{ysx5z[]^5;1Hv7ڷe6daO,BLM1 2z|H83Jۓp`$ό{dVFL#6]Z]0"># M Fh81"RG"2#c'l/()#bӰ@lI+`9]RaF"g.F3Q\gHvC]NH DE+Wum7է\hn)?SC}\Q_3 |#v6h[؞ XRQ4ƍⲐS@p|< 㡠,j@~'}#\%TD &Pqd4Ou"W _Cq3_T{%V.ұBKhBzt y\h 3#Hl0cO #RI ۈ*W~ CR^yXeKk,xþR(U`cIm(?!ꅝ7Z [)[ĐD!qn"LĢ[-ͽ=>c)rۅt#[ͧZNv#%|6ұ@(xi.Q,ـ\%V_UW2ռŒ*-*X}|/bL_ٔt0ns3Ʀrǧ l3iH~rD@&0/5ȨZO-`oݹ]3XD6|Z0gm.|Fōh)$i4rTJ 'NĽ1-PʽNRK>S^6Joz[Z;vBI^C li<0pˀi_n6 ZS1O7 .«WWS[(1}xԙh(u>ec>2˨{0&)L+{R,o?j~\ܯ.QYGn53κlCRXFsE^r;T8}S'NdL͘ߦf(ar.4Yed ;uɞnzWiF!c9j1vэ4 8]x' ϼ@ڊv\X¬`7bIbtlĮ7GAW=1YSl^>01rT H]gPcn zAYXSL]w.6w7huQiLTry ..V?4ځi x~DW5ުi+vwCCR/S.$Qge7J/0"7 HFw `*&D_Lړ3:iw; nvg7M&kuyVP&2_7>Qa!x97P.pQƹ s"NhM&;ۈݽk[^e,!\t4[,K< Vc[۱{y(5 y8[t6V8FSpY9+1oʙq%7:˔dM2?TǨ*b;XPGPOr wt u2ڇ.y# ;a ݿscj,eg's(d&ZUF١ʳFR!oU]CIgi}YKGիB"@LQ{a WÓ LHwC[Y|q|4:K%舐 Ro?Ē42 wWviV귯V ڨn^TϩAPj2yV]ԥPsp΀\xzi$>WnKGh?^pr>kBp?ʸa[1ߍƇfs/OOgc8l+Q ϗzh_i?f~k0usXg FⲺ>3c) w6t/3l<3-6܀GULˏ;u k,WWZ&I;nd6sd; kJ4,d0XJ.חcyE`[Yܥ+'MCV/%!)"dgDTmc9I|fx.cL (E"Gm]i{T&HFg.FGBq%D*R~l\$xxLYΔ=Ɍ( dh2!`E[`93m=(&官U`X2lD6U8v Zhq`VqIv 8% C|WUW`;;R)[/; ̓M]F¸`xTov.ça+ku\]e,)(HcT NX^Óɡ d:;mV7f%O|858r/<-H,/3xhE%B%]57$cd)=y ,-72:-^>zM oЍ:A mj)ړ$|_K#yPܕtJȪ"΀# =?ڝPA9~?7ס{g~>iĂ*rvarY#-\z^/j aXDZW0C<_%@nr Bm#Aɂq/"Fe2/E9n"d1mNyfrGL37(zg{Q "pABʕ _:˛LG& ڃqWńP9Ehc8 gX-"/r=zތ |x/VޘzR$sy#4(þTX[mB7FGmϱ4&rlO5kb(N@NDI*>^[|#Wb &7Vw [0PHKaq,PI< {!E#0BkŻDhތ7K!׸hL !)5LFyL^6)w◻}lЋZ/,WIA#r"Ba®dG7 = Fvk >,EY vw0̂ yv(XR5d(]]FV Q ovX7NT08i[‘{ g|)>\=ʣ)r7SdCO-T۾RR C [Di%%B=B݃Or F26m*|mMxK`yYȺ2HΧjWh}7|pEZo,?pH N>i/Eo ġ @1cR' Aj?q_b.4["BOΌ(ER4\JSNh%\ӠCY+G%9F3`bHԱ]* s,uFԂ<5M  W: ĀءnB5~V,Z﬽N?웫_5~w2 gd8fO;tBړ"q( Bo$&jrLNgPM|F훯:#,oҤVΤcjos30ǹq@,U3ّ 5& *c %]s}*\ q:_[L VdvSpby4ɋ괤Iݱ mrxD kbgfK.8c:Nj N-],AYc|ha3ЕMӟK۵o@͙B?zNK-&dd^SDv)*k)K̐S/C+U+deFvkm$মL3&,[&4r ,XR,hPɖw.}~vrv-t7Y7yvαZ`㿋A mEM| X֘ y2Z$χY{izyW?5Z`} =` 䐗,3R`Ǹ.3= sM nf?`@jf}zf<8X,M-B4/!7Ct5]=E%Z?=\BQ XiR6nJ9䰄Ʊ M v@gL\fpWLKM:wxFLѰB!4|ZqTOωHԑBNQdΚٱ4͊I}bd0cQ0U|hRiM٥9ė˙$GT<,&1 =7 =9ӆyqqp!ۓ]=NNy&97̒rw,odOPAq&Qʹ.&N_W ffy84\.uHrg'a 4oXtdN;\"tm t zL!rӋ~1Zs;aqTwCi,XL+mv&8vUPT~E'Z'wg6jZ:ev;mu: Ml`z8KR[Wm?77zgMKX^'T:iW5 Mmm{aGjiJ2*c ]^.g/B\|G];m/\i/|׿2]quq5@kV^}uwH7jT^c-S!$`] pg=2O%xc`d``b `b`x f_xc`aJbz 4CF&  0y 20,`PxA#C3P'% @1xc```f`F1, @ZA(Š```PŰ@A1cQ`P922$$3>x(w7o~`#*, `dc hV6vN.n^>~A!aQ1q IddUT54ut ML-,ml]\=<}|L*BB*1xc`d``3Osm2p30\]F_:&(xc`d``߰` x-K+aƟsΐ;3.\r%! 4odPSH)+_@1b| ;ů_}9u0 78JvOO%0BF4i%d}0KU}]g$!kGJ5RC^ gj|[}{BeΕf=t=C[%in!Ko#qN5)i,GCѮСi9]G^y_{iZ@.1ÌX˃ Ȝ CĘ""*'󎳷OP`xN@!A4RU]YtQ BHd5( AĎl''7#t.ntE ~DQ)|}3wxlB+a shx9|6WԺ&̎RUĦ>$&Zw1Wܺͳ8ZWՈb!i7] _؂ޱ~䀱bu ;tOt7'+9vOmKX%ؓF#үAl}y; }_YB;ֱ lcD0` "ZHCtΩ+ 9YQ$ #6 #vns.qO5uWZ4\ihh/:j۲İd6hykgA9M/jjknP7Ϲ+6 774/~/}Co5i~iUoQm5j,լ5)͈fy-_.vg;>geɒG>YY\NyͿhYE͗4MW4_|MuͿkYA-ͷq{4܌C͏4?DsV5?ܡS3]8Hh\sC5h,a{\IS5!\yFfff%jZ:z͆Z j`Al YUo84~sA\.%*6na+ uK_. EKPSJ{N3}w_gGb zw>^~rOxλ;,W[=ޛуCWsKy'S]j[Xzic>;\])a]}_nCG5¯M6VЧV.\eUP֦;՞B< A0xeĂ5{>-"ф_4m^sѡ1PnE?=dg˯m)iKutYZȋ]H{4 0"+cd H[XQA[Mi) SHˤ Vx#Ҟ1诅9Ȣ[.՞Jx_7V*7U^M/H ׶.fx֖Vn~rNIc$1? "_MBX<88TN Cf82Ɓq>wH0EJ* F213?:,=A@a?r\EI^<@ {[ao=4L#'$<;-l8҂sW~-BV0#YAX,g*/4Ӡ4Zb{Ӫ=7wrnvuУ5d&H# ppEI9 ;dNo4{ ?Η?u t.}.xLnaϮOoʵ( _;^\1[eWE}JwEo[ϙC/~flq lm.䥈E*?biRiQtaO )mRD8E9p2*}=-'8.aD6])R(nv5g5-dz mf3WE0 LIGFa{Ғ7Tl`:_,'AsP( ZzAkr~~`!'X ʋ;[!~1@\JQ1)DrY9;__nן : D.B[n(0 zNKcc.D~ʏȩpIAF(Pcod`CMqC֠ˍImoeXql |ѕHA./Q=.چwbu}վ቉ns+šTt)qD6f}q 8k7Br @~#M}eUqx9J,dC[-DA(ll՟T~5iR_男t Qx<22/<%HNFX k:; }ѭ=dB8|ܴ#M섲VQib C<7VE@!8)#CjTBڿ fad]G9 %[eRy9*ڐxhϿ@9S_{s ',7^߽0 .18 Rdx8SmV 3~)&y8m owoX(!AAr~ȴrLc!AP1h.@r-.-Qܛ<92'Eʉ].+TV}gmýqu7NڃR^:o~mu:.GPq%ANr)R qV?Gcb1bb|23 ~v"^e%waJڿX#Xڇ< @FstwI2Ĺ|iQ$Dt"ma#ͩ{l[0zFwP.4&r-b{^5?Zf//".E #0atbV?۲zCt[ߺ ^A Gʵʳʏ~48M@?~~] jSm=j<ܴ7]_]9%pen20c#rWk`!l'~b\] i3=۠# ȊC@|?_9szp/F3cM5M$!qVl}jk#%7 '>TNE}=fg;YoUb98GqalL]*2Яc&]c*&@$6IHkx/ԗ#A2:f}(:2d86rrW$A ˜N!e᪗Ew(w+_*_:Ѧ]%WNR:Mhê 4y⮄=l6z־~bV:vC@b2&--M-&7gKi?bi{.0TL%hHqm$&BPV3%9?mDj0Rq& Q(F\:WFW\VgAV 'kf[o8u覥6 #Ax 0eq1"9.VJEGE;fWTIp62$wxw$ l %uRHYl\G#ި[&oČlOtRf^+~)t.yh1}XhKAw(6_@.AAIK2 i)ҳߺ~+gQn6=YY񒏵5\;2 VoCڿeVnk6%]a>.q E&߁5]V+HLEhY!LlOIEg[C&W8b~OF]Yjnԅ^CWֱ+P`!\Ny s(p燥ղX̾J-q,g]?7x_i)F s5Å=}eeaϺUkzD&◆;|CwSS󭻠]I6DftN.OF’$xdZD~xc󦐛5@;]W;F:fB7,zZD:L#D,-GJ.Uj<7")4\*w19OL.to0AsӾիq܈J qI?-M)/$8;AV 洡b"TD&7== 'gX&aJJ #ᨨ:0Y5dCqSYCఌ >PW'hə5VUmz~,UՄbn#ik< wZww+2"dHѽCkraaڝOknw<6#)̍ FdVc[eqIL4%q9uztFLW$Ãd,S()Sg5}}KzmNyGDž}`Lr$Z,٥P͌u,ww(2AO9/ LA;Lq Y停rIi}ko*w|~vmfGF5X ֘s؞6=[K᮫%KcN4Vr'ўx8x|E8Տci[ h籮VnS<c;Tydss8:z|HN+c{nrnUeCY#Yq\D =$O9;NI !hd3a7=['%ұd89w V[DT0M$D<8\)l|K\iDUytmf Zz7nA|ޱ# *ecYa 1puE1 *JyPꋧQ nAlMq4ass EVmonNL<3bOo\9B >ÁH [ޖ0)@5zա /%5p;Mʧ~mZm:!Lvp5'ŵէG'vRH:xph.5Of#؃ M{2zbn~@&X}jC8*֒dLbp2zt#cGgj|4VF)'@l_q>B|͒OjFsg^|eYB!jT?:*#:_Zehԯ'fs{ƆIԯ߭)$Q#>A$'c#i6AOyKzUwl keZfئA.RL#bXofpx'LÄ;T^|};pxQWV yv3)@.'0 mǐb^ن צu  ,R~LJ 6ų_" ,u)3LKX CLJ''¤k4ϋT2zpbpbr 2H{h&>/`qd4f}_ taW nK/CdGԯ]M:v<`de(zU c1+3GaކK)*(.LQZ,l <%r0JŃePҗ&]8C^~|>=c ywAvmooMQ}ЖC׏vlO7V܊-N <|([J/9 zߥN^XÙdᦏG"I^qʡkYgP Oi9rqwմwSXUwsjA=OAj ]~fwٜhL75 \VxMyЁ9"1eFm1u&8NdءPBPrȜe '"/+}hQ*|vQ DNN;RQw+xdʹ:,}4崸,HJDsq_NmQw w8؇+zeWLq8n@(ƉWwGg0N݆1o>X`#NPLLq &,U{zphWɹOl^݅oK{,U8.N_ޏ͘0Usʫ(>` 98\eZ jwu,AAWOJr<IHiBVZt+XF9>lwթ#(bC+,#rQ%}nm؅" yuOy8cAȑ]'"g*ĹET_qVmcL9&WWE9/ t9N,:R'%D`ɑv'a36 1jza6uˆZhCߍV׭pn\Xۺ0ֱBPLPg‰ ,sY}~r˖D.ZHc=dn0qNHޱsr6t+-ISS B77z%duV*:?C W$E'Kh"Xc XYLz^)tL 4Ð~ioFW'nX3{6ƶg;%Z 7mܨfؒ3r6ʹzF؃(IH\̢(FgSX@$VL)<Lc ۑj" |>, )L$ҬmZA&!+ _H0'cѰr|"Ŗ(W6_g5E~qo .ѫ )ˑ˵TkN6 )^P}C+/ cC`7 ]1x BKHrIb̉S$x`1&S%u,x"lw`[5;@Mku9̎ui#L//=3WX6jnt!əp I{/I2>9]ABI,Kp!. &Ʊ1Fb2JkOl1 cw@ ~ݳi1!>G Nl1(>DLFDPȌaF+xGX xN|,ʦ)bdL.+Qp1>hǺ=CV hEχ,6_?6MRN^X[Ȥsy41AtzF`2I8 x0׳fE:sHFMv4gNz;[ F#3aI2ǹD ݻMcQ ٰ@s,$F0mmnJD -z9bqld-GWn RLfCjYOH^L@q9?M$LAE$Aw齐 hS dt} 6ii_[ÛlonhZXkQ/u!l_;ٳY] l1Ái)9fTY+%De}̆k̍S>[uu(w'B{Yt617=Qg[yo ח` zٍh6"/XV9$ l\w~UzA;J照̞\næ獣@Z拙H)\/as0asi!ӓ03Sxjl,ǹ}Uvp]QR"l_7ޏ+Hv{֖f)@bTgCH솹6Xye,٭jIkyx8=g_dJMə$y^R Sjq^Rb.6[g;Gmzȵ>95*}@݉\N ]^wV [ ~t'-ekR8U|O|Aif,W-|*'Az[g9Ģ(sMrcGt`7igӶm=͛0mVUPD!ٟHCա|IcUael v'e!!T!1CIJ(:mFaXz(*a2 as(xLVCp(_?&3嗧dʙL.-{eV1f0;IN $E 4i=ݸ&mw69kmhK*=]\uv #2xc +f\lb2qeڤ\K;ߨ,=C ;9i62}ńX$$Oؒ˴@Fڪ{24ʢt]J>cq"z (2atA21,_Έa9Nl:7~ pf+Mv JZHפg2֧Ur 866whuz8rL ⾱1QEH.k&z+]ݢ,A:'jWՍuVҝ·~ԿĮ B(޹7̠?~L:R!Ux`P(!(:\8AiD*<¯(־q;iۡGa!DߟE, [&QpKRm}mFPh;GuɷV.=Z_ErBȬjQI:@uX>kdY bGFp88'ώ!Z[&|bɟio+/i_Jtiܗ/1giod%[u[pP1ܲ%ٓ(s#"v$#EPHRDmzdwt: *JHDIz ǐv}*挧jyv BvYY*#'>AC5kb_Z<b!Zy u~A413_E+AMgѽ-6q,=ml A+"Mdm1@ɼMU#Dy4ZF,I4[*D z^݄oؽv(NEAnuXȄʆ݅ʗk_q!X e|cV*6L#d M/FbZHy> %^ Rpa*GDcfFf$T ,9Bݙ$+cD"QS~աtDxw)_[/bmxY[?~8\QpTx Z\L`)*F'F_n3tMï PnNxj<⒈DoZt*yx}VJPp43= FĻBgm *uV=]Hى}& =mh/lF[L/R5UqXJ^WV\Ҿty-L*)I/aFs6iPK+QpneǞ5 laJ&Ğ=/6' v/NJђb 6W xn2ML披UX讥C!p0 C#&ۜ3q$,ܱ<ՍYL 0ZYxvjՠKp_҃Ҟ0?"#cAwȲ6y]R&rFNvF,,e-h3g܃.\' lQ8/X5_xo)&JBUvviq|_&\Isٓ2nU80"ʡƩzT{(^+fXl%8_y 2#iE;r:# &8t| eM!K(CP~८p J1ޔ(ΔC!Sz|2Ȑ4I4K28"v3|RBOc Ma/od#6arZ]}6POv wQ&1  I{j5\ݳuY~k׮ #K+Fajh'M2'o;,V% ^j`{vQM'E`$J`)3\[|{V;ՋdVh-&LQ#>!w"!CD7 䮞׭k9“(QD뛉~N$n^gSV-|Ae{ZKD F[rbbLzq{P<8%7a=IGyKbkqUb`hCҖFmqw|Rws ܪ?߸Q{Rϗ|H0as1jis26 y}7 9(8Q(Wv]j~7ҾTexY@ўFk\U2ewA`q!}b t;-Įi\]B"3Nf'*qBX{}p</ݬ.g1>L0Jh3WX!cM!|ل걺 v>7 PN:kX1ܚWXLƈrv0]"lCD>X ILDxZٻmQ}YV 4ڣc%^:5%,n=WvA ʗ)$$ gl DwtzRcn| .> cZळvB@L  w3sQ2-f :d1<= bTENrn DL%]#)恚R uW&*h,OILJh3T0 }0 W%8,vb.yhaö^q6|`=r!Vk:'*/yȲ:)q]C0 Uv\4U)QemR/ `V kzKc<:j8Qȇ gUHJ 5@NtB׫8g@A08dReeTAU>!LGـL"@P;a)s3߰YI.#@ տ:=  +ߗ! mCCLsp1iORN<\4r~tr"14fB#}iP`+B_g79nވ bD3B +%Qj&>%ai;'8x8=_xQ)po:_9]&EQT2巓ST.s-Mvtt:1A{G}eɳD#:ᔭME &𖸍ʼnkκ+ksoW7D"n6H WL^]"DdRz230 cs(4Uf*x9^Iңatt42w<9K%WӒL1jb\zWJ*f28)C+˸H v"!@[lNUUP>TT?%55 /8>nnkVO<EНw\s$&cMq<7R "8A<P{t0` )`Dj,17jO _)pĿ eaTPBʰyl+utwÂb#Ni2/r j(Ոaq ~6FNOh?0Ì?t$?؊P}0~Vu˝sG\*f&xB&]'aSI M> 0?ԉ1K%z %gŷԛb^I^W`], ޠbH0 ҭOEYLFQ(9]X:6s?Lu?щ>qUT2jV2nn  x8=9LPsY=9 }+q%eǧN.,Y5tM#wu^BMM?\ܼPwz`ik n6@0RH*l`KՓICIq8 P -dj~4o4k"'{8c5XwOLq8] GLO9q:2wTE*B|wՇaN`*NSDH})/0.I3pٸX\MdRyU/ >|7W2r^Ftzw[Q#z(i<~rt/G* \pBIF+)'I%|.[F6+( x7톝xۉD[ٱCOH+STRқ?HgG¢Ⱥw.=5׺Ny!̾4he+=>bl^lT7ͯ$g>K 7;s`H^ 'j &H; Bta-):rN]:ńNm|aPQ~1Dع<-}0ЏY6ս 5-ȕONȓd30j8edT C'΢L.w4k^{b5͕_qf"U_:_]ϰ "-WN|6\;FVLoAJIjjF~!VO\ 8N`<0+щ{yLƅk(Ga*RdvT{/?s6_kB~7?b8 b6{FJr92y=+rC"|l!po .D$V#!c6G=6Hlض (>OBW"Χf^ZD_D);SOv`V]Z,5W@W73O < d1 'X EmV2EF_y ҘtR0620f4͗ͷL[˺xg#W؂qfR}%W$3l@e$s\`7elF1O1jM (P&, T!6bM)mPNZ"Ykh[te(Xz'=S {:>p(-H\Jl2_,Z\VV yRkb({=09> D$-wcqڤPӪJ'߻eh>>hƮγ7Kg ׄBDDAْF+_'%Jl\^ Ը6_qB s V_|":Ĩµ/̣=|~ ˲yUT⑔;0캋QR 21]Q$\)6+,א<MC`cJ;a3#ncFdlTD$MfNKo(pA!H42HyǂiT.Bx=ˆjTi{p:AAL, 3f+R>pzDT k0>f%ϫ{j_MWsowd̃/5TmzcˆzGG7p hW:+6@-'"^%JMBH^^m~Bb~ 5:/I7o9zm{7eҭ%w# g=2O%xc`d``b `b` fjxc`ab`ŴB3>`0ddb@ ޼\S0( P@AN?M dxc```f`F| - `PbfegfcbX *2 @ ;old`l !j@eaecdbfWPTRVQUS7042615c0``wptrvqus "`3  %^/xc`d``bcm2p30\]F_E s xc`d``EoY@" Wux-O/CQ-Q-yVEX%;ec)|wBkЧ\/NܙAAu쉋(Pksw ,^ZMޑ7̑|`K>1Al"!m6/Ls.C`OPaxTN@=TشRtMAJQ$r@TU*48ClHvbXte?E?~DTx2X9s}s GVFla $K(jTXB}i 8+R b1.jT+e"UQ\zoB2 '؇CAǴ )coC;<42\:J=Hܕ!=Nk)^uzA¶U,j⊎߸w佑B].p+40{ؕug~lt#6YarWuG:!-Zκ)x%y?;h1=~uItH誤L#gWg!t$w͊)9sCZh_Rv9!vwj;Wq̳li'Eijܡқe{)旓$T0Ix3$.Srdd"I9zI$I!ɗ$:YK\+4K$%;%$G%$$Hޒ| TrUD`B[}Xf$Ylf2LSh cgLf0gי+w" rg!C< diM!!!!CRRr0?Lȋ!B> "* ^/U!O:V:Y4JV MJK:)+uKۥ=>i+ϥHJC z)C>4tum%P6ZZ7HP_ˡoie 9yiI&̝ &Ogb^BVt^|lzjLtlnNxaI9I)q}J,bn,3NM^\b|NԘ5IKV$%FNJIO[4;hm҄ `1%XL ӂ`175) E@h ښ5)iI3f'gedEgg/ZJ|FbtVVz~J֜܌@<xJ\ZӂE˙3E@s^mn7?X,'b~?do(&(Wrp)xWNRtJ\֭I9i998qIx*`Ddܤ`1-JNN7i`1Sl.;JH~ӢSҶ&%F%&fҤ`s'}KJBYc{VzxLNJMJ 9eBFg`)KN:Ax$aKȊk`1/PL6}8*7wG|NV֔߿n0P̜,&gNMʊEKV0LS0L41L ft0%d.wt$SRt2]bz_{=^f9d1q2ǘ>9Μ`N2Dbs9\`^d.2/1/3HژW`.1o2o1o30w?d>b>f>a>e>C 1{G'g2~fA7HBiHh ?,\2$BnD&pS!CC(Bn Q"/5dDm!29BDHdȨB'ސBG`C!CƄe"Ebs7N}y=D~+$-.!5LyؿI8Nv]'a Ȇ4n:u7ϸ;aOnyQT𵷮whmmݷo;#sis["/]w{ i㞋\=b=CɣNWcp%M31mGLGM>6egnxieM;7i?MLwxdFYY͚>kѬ5*嘵cYg}4#fO`%ΑytN#N|{\ٹ;|:-,./n ZY.ؾ'{"'ßzZ쏚riN._3\jWWWY6du=nNWoyݖ_[n\eY[nO;[M|:Tۮ&'%'.\شicvKOؖP;[Q8rr ݝ7;xi+0WtoQn+Yɭ%/>ZXzHRʞ-;GP3^tF&]S9ܼC,bM/Uv~/<chva`. <>2G \!V`cxc$A&(PB67սj+y'U\gb DUW@#9qAxj;1Y%ȄGl{h?znWmXo&^:|١FUUZИZ!Jؚ 1GlԪUUB QTؔ:@֗顈w$+Pw) 7ͣ+ ;:OGJIS'k|; %t#ݴ]P0,5DK !ۓ_[-fRkh \:Г E"kVHf<򄦤΍+%5&䲱F!Ϯl _V&{;7gm!ғ;PR%_^WyDp+9^ ̜,֕TA?D)2l]fiaYiH6L@,4Y~\} #h~+i?5GO@sBѯ?W] ٿ12,`ru;v08E@T`47\< pOy5/ۗUI5PJ 7|Tʉ_8Y'8jmu] h3`m#w_7xK8]v({Q|ݱ} vUi¯}77:,=S|ſTzE>W`d)b22F.=wzfqxKoeCN5_ȩA`Fْ3EzʂUkVI< $OIᴜa;LӱNq4N6|/u8;+EP,; A7UP v]|q_ ̋!HL<Vt).))V^v9C4(dSOG}3;+eOzR.LoDf1 f?@R*_*M)lDȖ(PK UJV[Y^@z VzC ;vaG紛&[H\:}0&WG7ZLC JTz1uySXaxtFɈkZj r; $& #>@JUŹ2VGGZ RN5Eom{y#g4ɀt(tW oP͓mSi,R !1m;Z:8X4B(HVkAkkk]K hF7V,vڠjեNb<ɳ /4vwxxᮆZhHG-&[X 謹`#YYWiY??WZLP}D.f4&}H ,o]* nEN3kQ^8Xu xi5&5A[1o%7(7폨Jk[95KTɩNg 3r`7v˱sO.WCꮼ&RR_ dMR4It e*iiipZ}L!ik/c{:z ܭ*(,B,n8ץ~ -Nsah@HKi/\Df6,y8X vcl kmk{MMՑUBO14. }riFH)uu ')>L(­QaVx`hf(0)dS ;j+VZGB x |RPIX*,1X'Y0w9}D묳 fC7dye"pBp[OVW44ŕ^8KkIlL&WdXV2B&NTUrhd m;ENbha2} w9ؕrpw؛Wml΄Ds늑 Y3]A0demn8"⇽9$X1\CQYBVȀMMG{>tKH&*~BelRH(Kj9Ul5.;-/ #"c`6j0,:C71a*_sͬXgtfpf%gˣV#o1X7]⋫~:ǐкcd댲uKb Ef` %.C]>M--dӖ겪.f֌[:`FH@g; 6SW =$"ma d5e^3^`>*">Ĵ ULSEκ' ۭleHn 6c~! ]jnaLpL3@ )="\pnG0z~r}Тj*X8_華ؼ\+5h.q%ה4`LM9M6 Bڵ !ݍ9\X۴]ӖHzT͂q0;pŀNG6wdP|38Q\ظjO|9B7៞ E4W#׀^n F +J:Go\˫A 3Kba fV8R, ;\m.[]H {>B5cޯ93uvXzp{ 9 R5sKgn]Lc1%Ep/FtC{'"? oM;xTKx$@N6'}fhɅu­TJG9Ý? y E A` ])a1f)ݥG\<]YQi>h-lEfg软K&yHxƓP}DFYk&ufoS2q'N-fdzzLqj mrd >]'u{:^樳cƢVFNmv8Z4 H_hUĘgTZOd&5~.iB;` &yI1˱ư!'Vvs|MzSꉞxGb%9Z/D4^(vCfZ|FMSY24DKcR*|T4Go-dzE 4 ʺy@,la*Iodx萿mi̷=NL?b!iC>ڮtUՎ80M.7JSHǔS{ᔽC#Osmf3qn 3{`PncAYlFz"JԼ+p?ոJk2*q "Pntg""x|9a]$ nCOJ́lJ+:e0MK6~g&B{EŇ_$Vbdm[6f>g0*2W*3 wb U򼿴&wSVA}!%EeȩZez+f6[ tktz'u +51 F( f't!T#n]b8ibW7*#Pix&J9dHEP%6 rr6oi&4 +5GMex(;,71GxL‚`j\Ԝq=tV.H\,mn&m DA!Wi袼rV̧P`y|AkŃE O֗q `ELB5A9w< )l9[-6Οo(0#ɷ;n|MMeNYpvqxSv'jh5s9}WnVqp}Gy7\PJԑ.>&TĶ?m晁A;Vj$hh sJ9hX2v_c+vQXIgWxϟuoNMۥmVՅ5PƩ΂Zu%)^BCVɕ zlp0 hЋAl۲>5t{xU"z;ZZ_"fwI<嚎||vWSˎ8 L=_YK5p"BMvU* Qwujs9P#S>-*lOr̪ "YE_&$6Ͻgfь lBR2gg,זuvok4һ77a*c ns~OՖ۶ؓۧيA؀EP-& uh/MfzUeƩq90XKRVizX'ny?t[:s1&ivEet=_}J5ty1G4@^GުŸroQM~fUx`FUlpP)U MAFP'!s@1WB`aUe*ˢ;W/e>1`utl t6XEF'̋b fRf]PkҵWVg:S\sGMm! 12g^/SS:Mј7 <v}ĖCK?ᜰAz$,긖mk0|KGr._NB=d6c ctjYiciLj*pmpث:9M}Gz8,}`e6G?"6oՉyȄ\)O#} w8ISX&'\=DDSdnd B;ɒ&ecY;k0y9a !3tVaӅo{t{6Aẞ9Ȃyj8 yFBBwFYF1A˄8ȎPzyxo<+H0M V a:< :fÂD.:[#؏dɐi]"꠼X1{^\x{>xQSFN7 uBbi*H*˟H=(_s9ˆ,#2.Mny} .,j&Ǟ\ Rաv񋜖߃`^ՉN 0qG>zLo׸.>-w ㉰R+K%Ǜ8im.9gR4rue*ݺm@R#zOtOtGi$\z[l: j\oGo!g[>Cg*^V%yVrϯ!r?f(g:󙳊+- X!buc0zIJcnPLLվW* l)+ M>:7xS"oދR[y XtX H46 pdfCF]ݻa`.h6淶вW.: w$>_6ʹP*SeI"`×p"kq˨J~opy ܬ7Mh]BO\EoT.f Z EQ4" voϼ=' 09SLa\QKw0p<È |tؒc-1Bͪ-ۖtʞʫ*l"'P)kii8aGAUk8E;{#PͺXTNm,"ݖkˁw&5L˲l]`bϳgf*yz>T=Fwm@[%I)ZyRb†|[{+~z5K q0 k\TdѲq|s B+*{ ?9={ "0r^^ TDv0c.Ƈ$%VhKߖ sw~]j7撯ʊ&OՉtlG%4NGБr辰T',CV_bT5ZuNvzYB Wa0zz;mVT˹v׬w )M#T(T^G\cF('Z>7BMRj؊0~+ж \utc(CozFqMɖvDZ]XZBq53sζ}Рo()lvhj(a ~FllbѰKa/b~} >:JO}ö;BΡކ~7_]dh339 ſV|\_Y=^M޵5"cWqp 3sD$Y܀y9K{MxfV8 [ 9<8SDFsJZDIT-9^Mͫ  HC\Z ayaBbfvq&lM9ĥkd$9\H :.oP٬ ¤eJNωl>elBuEU$a"1䜎08}0DjA~W{ 4bZUNB{[mqyQ4CE\3ݰy{hc֠]/3E*Wp[ú}v9ǻ+^8zUo-jtVaD|$NxH9KoƎnh6Jut^z"iY:U8ODA1_E{>"7)*^5Dz0`/L&b(m32x勒+G^lxztNl<1;X\^J0LOXnIE{rFJW%ԑZF'=W#ކ;8= r{mANCX?5pP|7`C.໨f qhFu{\OQpO [//1p#|0&SO7P\ix L9%O /FQ^-> =7-:50[ƔtysHŻ{(Qanokyٷ) SaMub+*VXȠUt[ׄ>-[`O.qSRc`Mۺy[l XFI+J2بkMp{zb _OSS`L4$榗`J64Sc{*o4i0FᨅU>:~pSIG6 B&,YrA3o$'i{^|.1+ᎈ(X_k4,h#{BknH^ɒ )IEyI1u;|ƀ|e_aq]~F ¼;+iݲ]:.W|Y"nVMyL|T6eeoBo7?NmJz[Qz>;NBOtm #'Xo-X{C}m{"X,hK!%9?`d:s0eC ƒ MHGa?_XQy/Ŭ7ķ6v_x [ZtH9 L=  VX-:mQgDŤ24@Lk X UbȚ}aB$]%þ`ر皷4AQƙ0FC 'ղ]_mC,U7*w?jbvNSYa4b׈̮BBnibPQ l 6 |>R>Y^g\b_c-Pg9LU)}Y.wBUaUny8̺Wd{%<:J(B~$Ix@hqN^fڟɫc &Ӵ?D'29}p0L)UϷH7ڞj\[\%X^B-l5\,COXD34W(/>VƱG^CNo6F ŔБ_M槱|xTlN#OY07:wY`nƌzgbݖ@wi:+>%+ԝ޴ !3 b˪we-޺b~vTA~E4/#b}4'1٧.N+*+MNKv^8I?c~R::xq Ż]GZzj.8}raܹc> ]f0Д& t{!nx⸶ LZ87m]I-rKӨj]-0kN'gakDY14(3(MX9֥ବWuȉC0=IF!8<+S^9n? *}{@ԛ1A6gif_5tȃQ06s}Rߦ Eݠ{[QQ%qV;*:IH09|9bOIB5V6<8X\",.iHi}ro3 Cʇ/k:<,.? CS鹳LYfҩAZ,ݎk F[Wy^st" QFsQ']$>N>)=pr4$j @pGʁ8??@gn~YW5h3A)ڵE9 ͖X9~R|9wgJMb1E" n , ;kWZĭuDmn RmʨJvގV!q.,4 fzaW L<*_I`G :nh(Ыt^ky=ǟYi#)b_A&|cxdeأgYfMDctذ z^oxn)߀Sg[ڽZ]?WÈA,͐M)/41hrpQ;:_:s geBTjYDjV!o ZR|_DŽQTgQլe`713R|H~6=Ɣ;˵:^[gw~E !FlG5sɗ%E[`3DL=]Wꩪonjhk|~/ Rz[!sך)g }RI9O6G>*iTNW1 <%v>}\;'|%AI88\-ap@?Ggȃסx. 2c`v0 R`<E w)477ZmSn 6CkV]8񉤉5)0j-fFԜ;{nV?+9'rpip"Ja.ak+M.UyA Io2 :~d ^,@pkZμخoʮZ«9 gϽnT#g_o*WX kL&a`4 V3V4rDLn'mV(8:T)`+ndW5z `t]@'bx*W?OJoݝw2]2R'`ݼ]ߑD¾UsiԄӓ &NٲʽQ{y!`̪gʸ\Ug &89ǡ譝.DIثuӵI>%*IXۍy|7?moޤd{ihG1M< > gmB4/H0!Йuz֤eMdBSS |zfS*0Z^x%[ 5V94[նnV{5w`3 c'2Nx liJzim¥Q{W(FfEeѴg_S[X5+0#L?X!-8^8qd`3S7F^WNڬ]͖R˜B] SXv9ܩ7_Cryq/>p0\&tQ&ފ /ߵyg+Z=ƜQ=ꗤ8?Re ݁tv z7v7oNlnt&AᎨʰ&+ {a;wL'psY{zw6nosnlkLv vÄVT߈8^|\_ve,}6͂C@p'{;7.)rtq"|?Qg:46gpρ}|POwG.聞]I{OuR~w`V <3Γ:p34qMI߸5) ֺC[IPO*Y BT%0x`khB=`=aLƺ^;N׺vd<"ipx mEƜi0lÑ7߄#\$uZ^VwD|V y1? _: |s6{.G{ilTuԗ{vxBH0ޒ+0l`l![h̓`6 (HX/GFP2X*ƳmG1xakYpa[K,LZ#lXeqiy#[񤻰Ws@:!t:e'疮غnLgz&TSZ>ɑ-jrml4tօ1aY^a̢/R|{܊>[bݦ>y: Dyz\,tc!I0}fiM/PeZ*KFUqy)a.(:VgH1j@170Q%\PL*"w/?tj,f0W ߆o |C߷ П>2o+ <`cORN]pVoGt<-86G4Yŝf¢ mؐ$:늖 * 3#v{tNB賗"S.Oastӊz*lDS@X骸f`u1X]) klz/q⟢p=t2x)f4\&b~ՆZ Q4tW6ڕiJ*ƛ 4%q5Vc{Vx5:H\Nvt$d ؋E'IE%UP\Ъ,n vKFI2̝;ss̝}˾ ;D ,.ub[Vp}ϙbo_! <9y*u)Y\Xho/|LM pjrmz^^xNpXyꃃb0 #KUiQncY+zvl){xow1寤svgEOdg3Bgl j\}SbV&^"KuZjkX߾8dvehzNKA8lUUC!)H" a: W h(]*eV>Uͭݺ"CB8څ|Z1%-T" ˶v5JJ7CcEYqnޒ_SlP/au #g]-0z cAn[6PSQۡ\QN RnTrjLX _i i_9JX"44&۵( LAٴt_eZaVIh 9 kLPzP8_wCYk-Yb=]|׫okW#v!HJvWeA*@.I, M ;{X5ly֮%/l h7T=3%OpQ@Ͱ]o3:DVE9_*5Ρ(w;n|_".\6Wr{퓍K,z-3Y[30Y̦,WlCǙx'J$ C~$H%tT se,Msb2ԛM:zmRomoE ^ EgVr9UbX-4qv :e}9~ѥSv;C9®8hLy܈?n5ku:{%]/۶/j*{+\N"J;'+ͰGaOxrKyGO 6Jle(Ob 2:U4 9޲vNr*~lC/:mp=ƠTNm_@~,1297w@+(v,3=cGpjL TҙL4ɹU']UX"[&%/t tTA􃃂PA/©M($ C"M>*f i ?*["37۴,hؐ{ľAe,;"Y?so]SɸdരCmxПE]Bu%T=::S.Wf^<3sy2E5o.To&rT-=czm;cႝcgB~aϲGd!PG2{[%+4Pʃ6Q|$2;re/F"E+Bt$XW] +?]"԰xmtC+P 1ZMf*9J>*_ >3 (| oG}b+A|yրי0`eyx:!3;8j~ymi^Zuh͋ !II5e4PN_];^FKUnNrG KdT'Po;Pѱ>% EM﾿{>+؊B"{/78y7D152 .i XF^8Usyb*ỷx/6-̪s;\o "()fō%;-Ziϲ#dI~.<árxm>o$J> UN(r DnGM}+ Au09g agI3l])%xbQ$6_ζpwmGGeURINѧެ)Zh\ O!\UVUlS (~8ަvXѡO 5NA⍯l,u-j;y&^() KHn1̇%s,v(P3xl pdߪ%x@!3} 3hEJ? ؞X ?GK!XXEXP~4w~Ӆ$8أju[#Զ 7* (5ix XXޤGY3JCѢ x4( ׉;AEWlwtк >rՔm4 ,ձ]nET@aDG+G#9cYFFaټNRYJk,1Jx)=0d`N;2qkVtyTU2kyFe`y揜bCURnxJ?4p(LAT[R2H:el.L9ytA%͈u,ZddԺ;jf㝜,66[v,|s{% V2ix]^pZ%y$>5^SauY$;"-u(?@g0>DޗUcsæ-`3SӕѱnwØ'VPG J.)x#ీla-EJ+-5粰d`[!n#IS˲6k2!Y>##EmRTGG';x2F(b4YYR> U M* ׌\;U̜5 yoWFT/zt&]r2lR5:JNAHSsk5 L).i Y-u+K2-ZV*Qb5[J68ޯ24\BdT+x-B|J_-t54 /wPpI^ًMMU٫FUA^O%aXysᦂ&dRn(RVIKՆ\hFjq8rrTsC6-URpԦE-zg;e+'X$BR|{wv/rx5T8"sb_/P@Wm_]}.3g]!O"FNF[>JɭlYSUW}GcbAjۨ*/Ɔ[}yܭ h3N')7%9Dj{YkPζ ]䓶D*ꃵ0 KSܷ;:2M9kT:Hri3n:vQNWS_eW ,"p YTK>hĸ.Vc { \يC"q ))ugc2J4E6Pa}ka2 @@USݰE)ͯj(b/{zq&I߮+|¿&.݂|ߺrP*( lΈ^p.Z~;}vb8dЎө(r#~[%%וp6`^_6(NqNMkWѽv-=ol>p-o5vwt}_WD,ON-`m(ekצ!‡>fSƎVv/q=B :BQDy{׵-y|zWCˑ^`' L"vj3a&bZ{v)ϸj(-[~EbgEV^4| .A^F|}\L n%צ!N1{X4K ε"^KPf {)=vkpK0NT7\opV#r z-w{X|g}#hagJXR@uR.ܖE|;cS,dN^v撉ǀ ]GtBDs+vX WCx:drEHG"ԉ/esów(\yU tZPgiZK,s̴4Vd>4~-kt_l/u}lXE%+rp @ ':~g_I;x;7׮&)xj*r_n[bYI}XcIMmqzs5Vݎka:}E0%Tg1 rGW ?pFp!˓5\J3wU8R'U%S. zDd%as%i۩#_v)oI½2 !x ?Fj7ceo䁪iWE<R/Y2\Jw?+mcN\m09'֢m%WM:~o^) J?EPRc޿$y>ET46CB=O;DN: '&;8#ίwx XNV&"Kz#?Ѐ'+Wæ$5Λ(>*ʮC[fndl)PmnDӋUkfA4RӑQ?df::vq])+DkiXw#1 -EtCKd!("wPi݂_Dk{kU~YOȮEh(ieDM3eP!/J!Rk4EA8KLOkIgtӳ_}u>;jY>Aq:^Eme(b’"']|@di%R\7GMn }6Ano@ u!#Jo@~v" vꁇ dgm_-<Ƃ w BDZlEQ_Lua}c5%L&gN3"?UN{^c5BfwQ k:ӳ`ʦe*B>IYO!ΪR=ڃ{X/,([P|?Ybĕq5f/AY^hYc .xeIr{ܽ@5joTPDp:K!z7{g‰矛TpFuj;]EEj}k?]j tVOXkíYyoBѪ=kD>ۥ D8֕$򢞃YY9yeYrG1WLw1)T?JUyI>E QId州>pz;axd[r|wF/%'-r ?kRך _isÃFREYtR;NXT8$A6/;|n^!Tx.׿kGHFm4R\)*Z>#K'&mI7I_]YiW WYkF-!#IX|{YrQ"$ڣeBlS]3t#5huo<^v[J0jv:8# 46?R>w:Wel0T鬦ƱjJLJ,9=RSQFF՚Ȅ:Gy4rԦQ%`82zŝOht-q{X17pQ'_pcnձ+]gid4%~Hdo|Mp՟-4D$o!shlJa3Ys+3f k73\ͥMFO$CR/z$(?f/@m"BMe5Txg4sq$ް/)%V['bJboFK-lYglRptqģ?0[$?"!#U*'< !_N`:;~1&yIB.:ftuZ޲~fug]@#*EA͉uuFN9J+A Qί0fir7$oq5]~ZeM#!ˎ,-—m^]ܽY1P ASXY4D&wO߷+{gaM-jP)z9._6]7١w%dPI7䬊k>}?щ>؋+7J!/Ya𬗈E[ƿ4*st@݇~#cz {QGJϝ:r6#51Jv0RgуȉJ/V)'izqyWFvQmzM| `4IaǶFOaW@=&7"7LWeTHUOT#g1sݽI&_*x ^tIR| ?N!Ӂ0;c/yFn>G!AyT\@|@&3.$ݛ5#)L>S/*.Z_}6tZt;2boa]4٩҂kb˘S[pߩ#1.ԱHL"T3-P ^b=IN!49뀈H"-ehtd`e`5b:5X6p߅CL.`G1@3c(:hq_&߶I7HnU0SP`{#DƶI)L%]KL"?{ږ27~a *N%<+A<])lb#w56i|fZQi/׼ؾc! vd""3{`\'ȩd2HwqD*w;HADxN^?]o'*UfO>|n DP,hU{~W[(0f.2krޮ™x^@v8h~"S_XxxEΒk9ֹq'(ޠktԆee^DHͶM;Wۓh[dEs-ZtۨM@ӟuXwEXU sğ$\E* ?W?I:y~8y"qs a6}'v8LJڋ_a"'6}Q0RH(yfC}<*~Ⲿ C/Kf$,a)b_j [Ÿ}:Pm$Mgv`KD]<#ZhJ-LD =>bߪ.!0'rCkbssR/jgP} >r4+"᥆c>=hM-Vf/hs 5apqX$w@Jb!=.,`^ "b_\|(+AD&|_ĸS )ۆQbR{.fTK&P=-902Z%|qT V|Qc{SMԉSO:״Hb"Om$ʴAO]h* i8;d3S]$*'?y?9, Il_+?HL\X[t$z ip؛r)9gF]OIJ$5Ҁ4]}$n:;GIÃA(pUcƆ/~ wCpSLi÷⴩o܂zϲd~ \Yˡ+ Q}tVmh7 )Uh{ tEdC:}aQQA-1j$l sҙujK66<,}on=#k[$drq^sMY;wmڱwyLT1:S1eǒ:^ʀaeHNwW< e|hW#j$7`cῪBI ~DI|N@Cێ$"K~(훋 ]V{I5S\ڛJ,Kdv)v_]|Ưc|:2OMh9Yfq<w)V6 >DJFƌ".@ :bŽɱNEd{xVApχF'%Fc3I=h@Snduo% us^8oZx<g_&W^=|ƦZGU;?<_E WSBMgc1t[m%w ȕKMd:ě a5C9{2R$诞[w.ގZ?9z/Wo:qwL|͘tS|t9d/SwHIݫz:u=vh¡=+byYK=h+,]7W`ܵ+g r]k=Տv/5GMںPkQȽaun)Jmna;쵦zfX;oHBr(Hf]"!}]Q[Ƃ#nn2zT޸Gl;{cC[[6RS{@Sݮ@V /yTH)iSem85  GHxӭ״7S)SJW~(^y4X|U }A/۝6/ `6r $(}leVrv+N*M;$mU8QH+`loS;TxtpE|5nX]omxiă#(?}uJ_>f.'Z ԫDN({Pz <ѪT1B~p5S`Yְ^U%I ð/qGwrnC'RX)l;<SbFTKהgCDھZjeނj8NQvz hM(%Rҗg]4:$G ; -cepRS~>'~p2NvgD:@~ d DŽH{9xo0)KoXy`_2r6Mt*VhHR @i}:KoCKV[J/BјҏX.DXVp4.(bgE`R@/"A =SȺNu1-AΖg=Tw$R><Wpp f1'eWe,A+"QiC]Է3l(Aygч>}ݦկrONT?;_/ 1j~ZL:Nxӣ$_Z-.L%FW2r9U^N5X ƶ-bVYxTa/c^<&3~Kl/k]},M43E e}t dhm[Ya-̖Z;+e[ҧ$>7L˄I0 ʋ(J\@{du>f&ng\.$90gWφ7mluHtjAAғ&%N$Mx m(yTP1g JP)eT7eoǩSRЭʫWf^ 7ٻg=aEN4o#nXK(wY%fSI+y#q. G۹@Y 5լ&Zhx 9Ƿ\ۚlCNp,!s D_ ,N"2Q?'k\MHY٩&thWGȑfpA!jؚ`];l1j  &JsN,Cin ߼X O=\]rK<Җ5/=8GƮ/X (c#7/?.ܻIsĮ& W@8,V҉BZ FEiKV屦 XZtXҾx 4( h#fc^UQd,$2/Q2]W2QE\tȿ 8y?;LeZ{f 5D締`PUWWlbs˛ʃzZ]s$f}hT؝܊ޭwZ%pT`岉: e/%h᦬[wR!Z9{ܲgKV]4"f0CQNWmg y _tѩ//eIf[ĵ,E~jZ"֦F V!,l9UU]^tkV9<>LGeW#CiM-ZZ Po%?/;P㐱UWt!<>n{m!GP pOHgI͘1αg#2ՅuLKv.,B 63{tU:%AV#X]!+ېbUcc(;C(ꀢp":X"⮌uo/=z Hڿ~$II&ܲzokG$Wu;YrLc&$;y9U49r,(m;4pײ\Pv^&E@HqrLK{_iƃܵNy,t?Zd+4CAWaس|jm{i I|%F#p.p39ˮ,tDk+YEw(LXyIFI9w91DǒJM!O%ta6$Ie5ل-x q"x@ i #8b%H$YMQܪ40x>^q|n!c&rfd<Ț+&g{ &MMm*;od N*nEכ.;_zJ۽Tj47uVg?yzu)R'[BO'j4<@)󹵿>)3)T}YXֵy^`R$ܱQvjַn)/Q J`O^>7ybo=2O%xc`d``b `b`d`d,`Rxc`azǴ H30@h L@>400`xeHsMaX?G@998f=Lc Sx{LQ󽧾.W|KV]\C-4י0F+brI4Drny_Fc.ìy<;B(@~2NWīd1RrT*|1H7R:QWI#i-!ZLc;a~,qfca1r3Nj1^/+(8x !X  aD!&ȁP%P up bV[/[Ymi%v5$:t~*2I'@ C_Z$L̗kŐ+ e }aE21@:,l[! uax' !Ŗeoj1T4kLիsz~F՗µVVj+HFmR_/sMQ+kleRɐoȻ]NyYΒM6K/yx Oq,2,}Xpl\ 1S00c8a;lܨ8&:qzG^A? F& Q'gg:zy|:u8XYm!=zݧoXxD"5dh1q#F=fl¸'NDcTmeνi3n位 όVj:݋q=1[ QҕދD$=|)nShh%CCݶ6,4F -ae "5۫CKrFߠz4}'3O@kuչX]' $J>.oKKfv2[ƴ^g1mMs2#{Jfn6~E?{Xr 뻍Je/z_of\wc}ۑo<*wȟ#4PۢߍjY H/I22zd|=2C$gYݝPxTMO@}QR*UڶC!$>*( j{AYE&C=UK/Uy"AUݷ3oά5 _ 0Ow'̲ `2{hş/y ^]xJf~% Lm<^\Ym)se*oPmR/I,C[sꝻkEg@T&^O]vqvI6)h/qgQG&" h7[b/skP;"3x*C)O4՝ r9R7UaUO/0#xc`f F X(DwOFFOTTOQ` mCFF J a[MFFTMK]*GDEFK0 OS/2KPR`ApX:cmapK<_@m@headL36 &9hheaM $khmtxM4Vr gmaxpN|PnameNNspostQL 2x[յ> yI"Ȍ1)ƀlS\㱧wIѨs:E4h\`!F -8u4&w,`F:gU}{}T⦲ۋ7-/.hYSqUy*k<Յ3T+W~-{U~W gTg5̳UѶ@PQGTT]U\ujjjJU2L*ʮ8 NՀj\= )_EKPl(-R\oK-n*l+ޮ{qmMKo.j*-[הU|{u=uU5wXŗ,n֛n{:SC畜pEW]x%\XfҚ .)?ZQP]\?yU4y2UUP}S-U ՙ**,wS}_٪BB4U~\.P\u"Ū_C.U]r蜫TR]FuMUÖnS-SݮCu':oתT+UTёUݧZZZNݔC<6˃<>O<^ / Eyx^"-/kPժXՍ(*c^:3+[ժΏqU"kO{ߨQh74oϼLj~}o<j/~9{ 7֝U5={O?\Z_8g _9O?q.8.CEy.2,]Ұe/ W^+{ԯV\}ຟ\Jn֍.YyӅ7_w3k{K_mێ,沢e,~Y%OEw;7.rמ`yt{ι>q/׬\;=qgoٟ?^/?iOO2dq~+'O'6|\>7Z->M'\ G%jz)YW(/fͅ gh>C4}FtY?_|f'x'1/X>G/ҁ3 qeQ@[X{?I"2 QozſL> $ ~@$׀>5ֹL7:!'µ |Ǝ QkȅW>/_k =se~{_+Ĉl~C p-bRzvy]^pl=]W >]=I_ڐ9ɣO+g_'>1hƲvkɦw8ݜ v l+nGˁ4꼩?<-fVD d:{#]SQm.hma"&I C׹lxCpDQ@EO\xBfh1'(g\+oڲbq `|;h21'y#u&h{$2֓Hz81&BQ]譍fҤW_W1МW6 J=q`!Iu»񊐬X r_};w^U]n+qo)td2I ntܲ/hxpjdlz'dV*'nv >tdZnر牭o+ĸܢ1Ʉ(Z$#q5%kuj_ 4@Yd{z[>Ztz]ƇHu$hbgb;-q=jSܔDs8DԮ.wJhllR0P;͐L_HvNwtrb4& 4@c)nTV5$#F~ #&E r"#my1>Пd= Ou@"ao)iUYe/e2g%]Lo]~g#a8iފGMBcs;a!&f ?Y'Q[z8 qJ\ yԕ=}:LURv;ns)h@_pڲ^EB&@ 5?$`=VѥO7 CW IߐIfyAD08IBN2\Ms(QsOE\>,Yu:^E7nޭ.Y``D-;D~v*]BO^?DAb a{4 {"+b/汗e[/ BP1o*D ]~*福oT*R нJP5O "c+m^Sn 6cmo@FG;|WrSp T2桎x+,l4OߢN6kn^r̬R@|'",QO`D2W"Eg3 6"|s%WpJ 2X (?=DrCrd X/vz1?E:fT^[VmMꆻlұ}=ޔF. iillvxt׾G_x>|f Umyjal<|Jh zkHh{fd7z2 ~n]m+ko/1ޡ/7Vkvu@ TRٕ{跍yt0Wfre|^ٙj0%+D x 2ncȈ X>If;;EMŏW>IQ17*߸t43֌ݎ@kP.CÙ/Lμg[yVDSR ! t3ftcXg$7Vܰ|c6.uFxчb$$ 상pY༫lUWrY I^ PO0m ~P d\MFwîN KD( 'G=O'@4ܺb6(վ=T%~{xhh- f:L Lz,[jR߻ً=FɢoVt7qaY2׼}w7<0IfPylr }^H!!ND>L|βֻ -f"> cAUxf'N`Z\mm=[^@/Ƣb!<0YKك:LK16;76ǥȖ=f+'9\v'F4575pɱm[pHve%&P˕"3FbYBܺ~60慯Ӏ|N0ǬI@(RNj$t =|Z%QĘ8uā,^τ0Q L%3h Xq"R8p V?@h5ͧoѢ蕱R'݊[qrkb -ME6|{[:'uxgMn?L²>~Ho3p%,=4}5Io82{/LBBrO-j}mMܜΐ8oh`pۜlXc|־P@pME9S;UGzZ:'DDi`;Ϣ|?~zlI D^?SB7dB mK)"7`}WĺiS~#ܻ=;o77} e5:c;m/4;[0ҍm-=@ F?ðss˛f-Ysmk<9g,Mlj2 F=ぎ!`pÐ2U9 ȒuEm:he=uMƖ-uzஃb0 .M69K_޽O(1M7( :9f^֕xK˷WxM. męD"R(8H7Z +Q!,Obb4b[/E%oн]T_H䨄<|~ņE^((_ rE$GAo>B BX Z<${ىur[pQX^?TOv[u;L34wLm{ M6mV@O#[G1jID1>yj: %/iPD@j?DшGdPVYiJ]PšhbydSQRQ)NYpQr<~Za{`zpvhN?mxrX9v MwcUW٬w^Wr"΁k&24sݱuB/ }Kt?; HDe4çai1r-P@Nt1=ze1?z%gk)slhYmT:7V|;YG_ŭjdҬc>tlr% ^9\+XRX4ŠOawAN8UCn8􇮗FJm^XoY؅~;"ڷILNe) YlX#6Ao5`g!ًy:i/,w-^ǩ0 I҃ ^q4Q,n…m-ϔuw{=pn,yect|;_a3yfW䟸'PC{7B@BI#|~z 5?0^ah 4d4mju+5fJ{fhD\ח߶bVj,bΆaZ֯;[>i%FjS>@sg0r0-K<,[CUcdwskαq2;{~A Qn6Ӛߝ{@ЫD=]G3<4@Ͼ9/)oҜ:gs0?pk}b?Fluc%}k&H *03obɛ]@/}H=[E4TьpCQ#7W](Pl^ib%p\HR>O5{ ŘNoȅceZF_ 0(QJ&#d~W }u.zhk@sG[$D1*{a\{w?Y"hD>ҦgJxq- !܈rUIC:!\}*/<9 u\ (+kĺ^R=2{sfо{M(nL>L 8mSՂ':L!q2B{A}e| 91mV-%eBsѠbteQ"NYuP0{P!qd=Pü HAPMp800pv_% ̰AHW w3;SSzd@%>7חOӂ '  y6{{l^:<>{wt$Dk . "t3v|,pRŸF}$N-Em6atM]>dlX准\&=дʻ@V/*]H鶇3ݏ۹kGoEhGK>92cf9+f ]J8~YjFH= oM)2925OY]ob N H ` d v(+Jl84.dfǗz D>K#ƪRO`rLH JWϷE/+xe |r,~`ՠQs;E5h} qbw+k<c p"`y4N$()hڅA~D ~"(p `b* ȳ6%8c P"ҭE CDLt~~H'Xom[Jm^֍]ư5 b]:܈7k1;rWXs\ N~H1IdYO4kyߑ͔\M~7m"Lm!6-x3D)c8:5~ lا:,>b/xKs@&E~͠??ЮZ\{oe_ܟ%ߦ!D﨤lV+4^mTv^]׋UNeQe+70grዜW;oEȭub_$]1GuHvЧۜ>@2RK͚j& vi7({'<.Q7pmXu% *-|^MRzX _-w*z1Je)HgI⫷-0<+3s>!'!/Q^QX+K3,D>]Y]_Q"+p> 葿sW;Jwcz[b"X/{xz<PekE{p3토cńDgf/yZ W$iQww\lh$v5Cu @VBZgzhsmW{MH8(/rg#ɨf,{ի&z3g abq|JO|oG=w~:-W@,˻Uul[aCiiISӅޮ3'my >vF^3o?ԋq1.Oz)q.EG{e:B #-3`G?{Mȷ=]k˃GL&#Er4PH4< Bod>G߷! fm&8Ll3YzG6ܲj3q٨;J[Z@lʵEQWo#KiGGF Y:C kѳ>abwb+_P{(E Ctll@{|N?\ /4;#4>~H G01)` Nr7c$ah @'iJGPrߓG].keGm07a$^=u(@\;%MZ]''i?wD>~v#&=Q3܇|gNtZ3iB@6 V%YB FOH$~? Gԃ[6>ʢS<ݿwq%yca>rk{I6܌J/YsM!p&SC{aDQ?H ʯV6fi5uޕ Ҡq+5:ߚc){yH2~LD-#0ݲXݬQWݾߐ?Bk Nl|F{ޚ]Q{hOFA7r"'ӱUv|UQ,{=W!6`z$.4n *>WK4w-׏uKi Ѕك(<vb<Cֹ-``j=[M)-$}=K+Hiup;cRbZ|0HFKɸ~vlBX._3;+:'?JLrJhYm2Hr49ʳ1m򍝲'x=ϊvNj8 ]Ã{ѭ 7za@r\#/K>p"e^sr 'g8 .:?w~!j=qn hyEs#ㅇמߡ_5.J* s_\&d A{@R}C;|Cԋ$߄ *ϝ$b(=%>Cv3^|:8M<`F>X~ s T9rċ^kdmxo"|yKZJ~hR)2nj\N`?̧sM!_vQdWUJq.#'t)`sYAqLjvni(E%Dxs퉴;Hox+I&3,>/伜YxJ}Fa?L4),Ig~N:c:l; wjzW+wDPxЦLU0 ڙX %HX9"0xSPdhєSٞ`!r1>kD#&a|A#/Ƌ&䌠 h2 J{i2\ d>L$y2QsU>oeeqk6/3HFjeC׸sqn$Bp8]22_ҝʂRO%|[iaBo+/p^éw( ܄g;VAyIOԭl8mq1kQXdfpcܗ8 &\ rx1~\MljT";%$r۫e?{އ}P>ݔ]sExa)"։@G񾾁`O#+|)^M &``iuav8E$ T4IKV$\L7qSc`4٭V6{э@ +}? ;bi TKIdd08T /tu.@mo;..}9 ̰c0 259|8D~ṫ_|,}|),<*r>tH@X314 A!1ijкe*n*Kf82قޠwl[^a54v:{v*퍬6׀ zw{Q͗5sBkEs#i /Sڣ^P]VhfBY<"9a>x!>u(3;x,]Lܕ\M51vd/KUJsVˮ_+b7_Ns H D}e.6PuZEcm Ca'h,82ׅuyПf>}ȧŴQ|8M;Ы!.>ص> ƣƁAO%͗{Y"Ъڡކ^ 1F25kbc^`e1J{~GLKevր_TLW MŤ1T)8y":2yM~H?5Z2S7z]`4U9L{8q~D] v40&&6bH@hsv  d8yIҦ/WmUPwGHhj*ll>Fo! Tvq\ 6PLj k?*o.|?^Xo#]cw{%PXTP$/GH!"HkmXW<= ،E ɶ{>dX-.3|[$t5 5 ۋQ:*i!c?<RlvnFPw-w8VI$๚'OK_}ڏT5 : wa$nX)~"R{c*08S)Dۋ-U|µMaQophUII(?}4~P_(nF5ɀ5N/|<o~3p2UUjIIĀMKkK`iq)ui:W6-8.7D|xוVjCe{tzr .(IXj[%[ #jдs|,-TB8/Aܠv"MJ+>VsRӽ!M0$q&ѹ6188L:_|6Sީ``ݞ@ۗ>(DH94UKނ2|ٸlKW-[q7~֒Rͻ=S9vR|lM@[O; W Wrj4 ŒM`U:f}t5>E\]u=q:զ΍5[EykD|W˲$džwg)W<\|8D% ┿fBl2FBmCCC#5.ǚ\4 }whກ5Vލt@l6}gr|\* ǟ ^z_;/>Oߠ氵 tWđ-Z؂lj 㖴3 pC+و]Y*W.PiMD$n҃tsjk!-b[{lݎ.0샩X`ATS;ir #5ΐ7cx35 E~%&GM!'Ofh?cRhX";PQ:ho[z$v^ieLO+ѯRpG@\@EY +V6j6+K0I/0ƌ`v88F)izܖ7ނ= jWBB7g S_n ~Op'[Ү>@g(ד#BnHG~Lv;ٳt\ag!lk=+tù97*!%!vzѱoo6µ3߄QD2j>Z⨿ 2du`é_p/ӕ^0S6aFDyZ]8 !&G{wLͤ_!'i]MXWƌeYִȴl4; ,ƁɢG*':Y 03"u(&AQ臐>ח>0ZE L M-XX&x\-c]m Ml[fE IiXGJwuu$P,qiO˖zLQܐ EvpSն@`G?IWE'Izɩ`3 %ǧsYC3mX, zCvtıp &`0&F_V}ei7igy_zLJ ʍhOc%IB&/{$tu8>w&p$;n&2mB?kt {<+nn۲oV>TjZybCug7_ߓciXP$Ex3GMz 3e첇Z$=ʑVXm/cVX\gp/@@9!Gp8n\w˭\XbץrJþ# (ʹnbs|K}1_:_yC8]>;4/wd3Z 7uʦ^q0\6^Qv:-m@͇܂GtGc@XŽt鶪Fo纎J+V˦ʲ 'qJ+bdH.~_[Y𠲯;TIh-[hr(}"p{8u-dbG-2 X<ŭk*5Zc/O WsefF.9ڌujXbk6s+^퇴"<kHnqՁ/PY8]ޜ#Be}Ύpn֪Z'|ɳVbM&j ^^Ґ\#qb=c[Oev5)OtFVVm*Od_e<c[2coq[6Q81ޓ3 `_XoeyYF''ՏGE0$(=?iK€>F|VXlo*Qv*dv6*GSJzl]3y@v^7MC0"rF>ʕ,X?9Pn ;v٘p􋼟BaoXm5{]KaTq1tzenY]y~+O/nanm`n2b_xt}:ځ'vK.L_fϵ)ǀ<1 !7o.lیl%Ǡ^A~^jWMF[#pdai=ʎ3w3̞Xl\]>оYa7av)m Sm RJQ+AE,DOmnJ %YGBM5a(m=啣0\m==!/,<:;JoBxb7H,߂Aq_eNxJ5@< ?nZaxZ ^xbסMhD}'W}J!/"i|':jA1 :.iH2DrkZ >e8 $s /Q yir2Or߮"0,aJRtJïHuje(:8£ * 3bM=JwRrS@Gv'{@Ycnp:PW2i\٫>r֥<yQ8! Wx)!\  ތHNy J@9 Ӏ8,WZD'5r?l߀gVÑsX{hox΢ Ax):,]U1ߛ0雌 VG' DOi׎>vAF ݁Ȍ.!aF-$jm`f&\OqH%d1 JW2FVz?8!ngvǕ\uesTqreW=Bg"f8,'a5!|fx?3$ b=Ff/:DJvxrr?q{uWM-N=X7+=Q9|\P޼|}e採%Z井UAHlw"ECU^)E+`y8-Eiy{b_\3$B'C"(0I&{ ҒgľΪWok\r5P֮5niu@g̙z89ʹ~]x^hFm3폎N͐nd*mB K::SGlb߫X M^s`r f.FL6P^gv_ɭ =\FtqܪXq'<X$$zS(*[KVY쌙AQYk.2K2Dңҷ'mZM-1a{$,#ޠ1y0/\e^xc saJtq? si!љ~#~lfs=h7(r0H|@D=x%s7LxUWTGKd#)B1yE $`y/9մ !/D2Bbߓ6/lUzǧ,ঙwӓh~z?bo#E!"U%H***@Gh AHBIM8~;ďu8!8Eb(y(ڢPGR+Rt *Eayg}g;s9w^.0=FpG_[x &. 8Aڇwr󾖏IP;RZЏxVp,͑*smVaպ+Sh_:~jy>ퟹ997r܏{ jcu @&鳔[|(#b] (p խ.&G8@^6kyzRS/n!nFwV`.$LJ`}߲7Wqkӳ_âdIC;."vis2H.x>85[ۜq}&'8?hD-8#=S׉ZbomFʲ:ap[1y}j5$=VQ({n=Gs;ׄWzo//&|a_VasŖZqmXm}$D|\ DGfB). mdRup9|H}=C#n40Ew0b\MՉ5ئɳmZl0I^GT=^Ɠc#t8Y1XjsCZDɦ9A>{ɪm ~Pkˊ"sy4MQ~4rUѥC[kᩏIFo Uc贈6ڴ&.Rbd5Uu-MMEsmRAjX6۽Qy&-B;S Z/,X gg|7ʶʊHWdӲ˲or^iI^1ɝIU^"owYAflbtH\\Ԑ |P+i_K FhY]YF;% cU?{l|+GJH sEiQ`C49IL ?$`"OXYL".x`p C*p&^{ˢݏ G)-RƦ+RNvR}0_~ MQ%`Juu{+7 q\s {$qbpaGr"%x@W? FBT"|GcKE jL8 UyF=2O%xc`d``b `b`j f xc`aaŴB3>`0ddb@ ޼\Sg(  Խi2h5xc```f`F 1, %``PPǰa1!93 33̳1/`^̼y"MP`PgeHD<IR  2@Z{7oߨ?W\s?gsωbD<@P;#3 +;'7/40dUT54ut ML-,ml]\=<}|CBÀH2Ȝ0YT\V^RJ(xJ[xc`d``obm2p30\]F{%wxc`d``߿g YR@"Ƞs;x-1HBQ{_IKC45F=P`-EMA5:446DQQCҚ{/{='_=$k<_eNxMS%gsZY؀Y؁#8M؍ZVvJچmW ^(bTsvT+/㟐 ~qyjKw$ܷqf(`{n &?C"N){da/̏LY9UC)ӎr·QͬkIn VaXBu KG3ћU=W3^Ab8!}^/IMwFRQ)cgP|xTKAV@B@(M6? (HT4Җ^dLd7Y=cC{I/ogG4,͛7{3șWS(xXCy8,.9j<~ZQȯ=쵉bKxo|xM|8gNhead36fhhea !$hmtxDS%maxp#Pname]#`post\ 2x|[E/k[ҐnS8{Enz{eޭ4B ,Z؄]va@ fo@vݷo閙3g9+J!(J, mbSZ\'$u1*JXxxՈ_Bm?$]"~-/\G_w! ~f$V2QrnCْ$K$$k$%qTID%$V 'qIuP1#T BPxED~X$ 4}%Kb bRSgOļ՗e$e2 o sE^jrJ@B*+&. % YF*BM>X 5m~K CŢ`pj*U8e*y/a" rWAjlFBjRRbqj~Ab113$?tB*9H"+fYbv,&/5?=36iIy9٤،ԬԬԂجLndجKR,y,2#?53Ė3YyDdqbnalFTPgM{$%RHO:<KZCł`hӣ  .%%&e$\~:ibzy2 CfdfdC50&i*'1hf懮_83!Y8;T- xIX-䵤x=T[`j7kPxj}KsbC>{P1=>0.vQX*u:M}J:C3OԟϩP%P%7+k- EG' Sj1I¨0)0vUظaW]Cõaׅ]6!LvCЇn 9얰[n#T"*,:쎰; vw=arq_aS{0조 ՘JMy]br+K_*Sk_# ݈Fwag^s5=V^p &Tߐ|B77p{o5y󷟏j>'uwwM:)p{N[3k&o0yྦ 1xa#3?3_ b.]t"⩋/<#}K3,_ZdiRRniҟ?߱lɲe=o^UëԺ_oM7m3ضokvp{zؓqL?$.MZԗ^)GRw.N11ތLm&Lֹ]9T6ǙT7T>YXYtUQ~ȦjVUTgUcŅߖl+-Rs鹲Ҳ/ˍ審SQ{+UT5h<ݚOi7if|zf5ƵL{և~z9[b(Ͷ/:5ŵеŕ>6@0Ev`L$G#E_FW?pFS>ZSF>6c\d4x`xhqx;EGE?~؏?QQxN?^ߏ7)A0{d_40mRVTg5AZeAx 0%gȐ :Uosp_vix}.^pf1 G eYwwj+~E>8r5 6$,[w&0Y-&ڪKKG4aoWm`cv@[ R;fj9~uбkSӢ"s(/g=^F|5FldҸS{\dP`t> υT}z> U>ӽk?B't8;Z[vtR0?h=Vѩn,K鉩ºV*;3] 6xfSl~ؐYZ\MtPyKQV%S0B%ή6otCN"a$pၙ#4Y&*[Aj6VI[*^QqLlpvzm/jrJn4MFK0Yrc*eQ!/Vܗs|ɽ+~+8,0_9]ԙb kw\M= {3سU./6p ۉ \qw4:p4؎TxDp,R|s؛pL $"ba-SpfPjXyxG 5*ԐLa9AS^Aěb?ڝ Uݗג.X?aȄs.(rHCM=}tVHTO[Vҽpw, =4_*Gڮ~haPpXޯ VEOȊvEݻ:z[j5eh`T6e<"aL /0%yɰ5Z˄,HwwMMP?W/zT~/*~^ruu:KH]%:l8%ļ \QfYE4T -Rgo&0N=̶/72x% ׀T ʃm& JI)$$ H:-ǒT| ?DwnMAߺג9oCĽYﰡ=]=n%BG7(;54+cWi -eŃ#Wb}ZG{LB(aZifkuV I|AOڨ'_7#BPB _c wge:K ‚G\X9M-9/ZhUx`ޞ|^ lʾ4Uq?zN{f;px'՜q>g$7PT2 4e+۴Is`am`Ж]a?[v! Ry2'05Wf0-'_)_$i\@t˱$Mi4@:hQ:S"~$ŒܙO +^9ƺD흵u151v0bA k^ٔ( LƸ]4I-5ev`rWP^xe}J~nJTwg?5\l9ᚣH0'5G9nl"*zQf5&AQqT9If1,qº{E~w&P$W3fΪ')8I>: 6)q H?<w;;&P8qbbïVqSZiqj3y"gwZ ՚r 2QXyEYdts39hXIrd8p@nfݶz{e㻺[`4tuAZyD؈[T]QX>vRqww3&0Ռ8okP2.bXn>u߹M#{6~^aGo-;h%3{ Tpjy&=^}o =;Wm^޶ `ٌ"HkIx# &:&fu"!ڽ}xz'ؔZK '9= 971CStCVgsPC"5Wߕߔ:t¤460FȀڂ^.8 gμQgq4]b eY3ԒԐ#WUF `5,i@#u%="#CPmELVV]Vi)t^ ͰMԊ2-IFU6XQF1NY%64Fx v)Fhy4 ]fdҙXFl01FЫd8 eWk?"r.tKSK?7  uY]I9GǀEBLL(ҕN4a+c4я2륀eylv:oHk>R² &0LvR9ψZ |wUȋ]g4r#꽄<9z(e lt|ӳ`΁F*ބO[?|e{Km]V25&8*JB/ Q'K+T$0꒲BPQ)Mkq$pf(2kU/C1:r{/e-.e5vn^Ձe]wZ@L2߱<O硋-Ó[{X2|C:Lg#*euPJ|{.@R&!7o? t8e{ c$Q剽 %`B, ?V+_ QMw `ץ` ]aj,~Zf4 @_7oyY~qAٯuesʏ{Urz!;^[n6id-Fg`8`m.{Sz;!z֊,~l\ ,_RdsEx^J?yeWd*F#9r(-YYd7-4T$\$7O˷Lz'FN@d&f~GݖP9װ:{?T8b-ª27_زW?)51mNgMN3Z/ C+x317;E5}zh#e{%~^sWh47M>]vH}C)J=Fp mCIXs6m!dF WZdTPJP&2 E\9ˡd ɥ$-I|#&ޑ4Z}do|+Zcr̢:2k axH VaGY)/N^ 7\ǧ'zG e!gY4O7nv͹. $zO{LI]qv o_F@Gp٢L&t>Jxpp4lj |berv^lt=m}W _Ÿβ.i8rsM\= e WWtȺa`[،$3Dp-Mkc4&z@P`/vjNs &C&E;[D&z!@its$W#{u /P} **2EU$ZtF\eA"Y[W866z,|Z#xtt j$2PĨA͔CLadJL Ć-ҖظI ^.?"%$UB F .WB.l$$Urh͉V`9& }k둊6wŭAM+7ƕkr+e.=IBIҐ'/D "+ ~.OM~婭PΚ .I;C)kV'X#g z43TS|wqWi, av \NMF1/r@`w LJCMu .a.i l@Bl4+h K'5zB"ũF+9b9 [f'r4*ybV}B(oEʓ`Ց0R1MrR*2$<[8 ïGB0)$YaY]՜}KMV igh:hc*XNPp?9=*x-t + l|֚Tki-XՑߪ1B-aJ#|wz" Sp,(~I0ua>y2g^pAC]hAIXn9T & !ʥl@GS,l/\5$ UW7z9ҦI e97OH%52pG5,QGKLDO8Ct&4C![jxm&l޲]{{fkj @ڟGR><283zN#s0x-s xك(< ]xSJ Lf.a`1 jօD% "&~@5h,YqFmm$nGp ]#V l'/ɹe-t`MbTEhp,Ix,~Ab7F3jt p}PZвV0O[+-E}EE%ِD,®j; z]NOӉ,rʝޞO;9IpBrH`LfEo4im$ &mSdt@Ţde5DD%"Xi#@->a ld[׺x_ˋ HIY;h. ?׏xUΝssqtDXNQtA|75rI'cH8 o`n)ownsΌGR=b:%ZTjwDrRqV°rHוw[\j0h RU$Mײ:e pI[zw% :ҧ ?pB72w(v4k$wZV[51kacЋ5!;W]a㰿goRJ ju)rkI; {zt;ĝY#ν@Z=+i5q9sQ8bA`3vl ,W ) 7E` mv$w,:/îrq8H|uXIvA诪Uw^D:6 ,&iB *Ui=}.|?%2eU s8 L+>2b4&@>(VU$Hsf-SM[hQ+QʴIClwѮV0Cո_n+ǻ!)]UM m!wY6ls,"Q|V&MpӸm.,,of$X3L,ߒh wt8\9dz- 7E]]]Q7c+c't-@y."ϒt6\@BZI>0"a<罓xɗ&t/+-4RfզSyXWV-dҐݒkK 45Y HkV &).T\QA:&FNo٩Q׽o!!.|G] 'Xq=I[vj 8i6+ZT9(`y<NX#K*5MӣCjQA"VW)ma6;I$zbZkJoERKZoNnͺجM> Pbu!8IQ^I%SvB1Cy(?kCYy\ # :ZZ*a7Ԫq4`>,chTE>kLBȚKDKNO@߼`f[A2@+ʘ|qkWMIkEw_=i8:M8~t;Y#EIQދ~+&Yb$a) IZEWb.7<~iE-l^J4!bf?{L.{-Ddv"jdjlDCxg ֘cr&"E*L Ņ V|80E݉"(/Ƭ94"eK6Q$iuF57)@.; V t-]ŭJz8 zʞ=4IP )vD*Xnx6ABqFj vi˹-3m b)ho~qx2{  >{>$냐|ށӔ0^Xi|3| W 5z;Q܎5kj殊G:x'r5(]`3Dz^u\ zqĽ5Bn>Kp%=cκҾ廉4O_~OM% V\d02mvy5aܯ120.ūR 4ٰ{ HH1;^%}368;DCT9BWWNr?ނp,A/4M.in|kȖ<ͳB&9lnkLZ|=1<8xlS ɋ$mәHL3'KMܪOi2"av8Vtft'N\ y!"r31"^v?xljw.ˆ\52iYHfEdE*O^N 8 ? @"f) 7N&C!^|ӟ, ,#8wӥ)>d&r4yy°"fOg|{.U:GF1<Rް&`BzmA^d1CgR2[ g4o\HverJ mk箷7kn+ь6znm$*K==HaL͙x?+wQZ(-.H$S1Iq!Kwn{^ޝ} è?>EN(Qc0m/΂B(ҷY=g!|7uDn/ˈ+rC@xN+z/U^ ^y?ԙZqp x#YgnhhAKrω+KY#Lрb~5 M&06%5įr@ep#Hq^j 8qIvJ@9B*16YCSE1a1us*{F 2$SD@2ISLlvnkw،vZ v{Y琗െIaR%)/3aŶJ{(O3*(!fA8ip& 9J iI1B*m͗Lj w9hdř8G_:H7.t$6˶9:K]սv;8IOYfr"3"J ݪ!n`8a<"R]P:$1Ͳ&`iWvNؽiE;Hۓ| C<&BTL8#hٚF[\Yw{=~g{h*Vo]E+E! 23<2'~LV3c(UTֻ⌸8`ЈAns 6YlcKXr!K{v3G'lCǞY!K+ȴZ R41Vqw$㡃QT'*s J_vt~;v:}-A>hL*"XD|S /kjKodҼeE뉒^\]Eɨk駘BrcenY 42N5GOF ϗnVhi=V|h)GGEMd*`q=FiWmuQg;8hFv]3 h:6^)Ue,2y!\UQZ6EGf߈+lpZIZlH M~LTVVN>n82D(SB%IyqճqCHq#>݌xtsW٥k 8B>/>[Wnq>LO1/n:8iA͘7luIIIAm"yHp+#La=Mɫti)GWG2 ۀDsf PjhS>|dbq 4R+FB;1N|.9p˩c,*P1Y" #>Dz2h7vÁIn[F5.?w1BP_F_d(<ُ' FoU3GE~~vϮxM8tKF_mM F›xM$ ~Wya ߏP>FשF<>tEwu_ޭ~d4i]OY+KzaҜ taҤI'(7g34'[ ʞS/L~7٭wwq"Kw뉾#!||P-d\u_,^&Y#b/i?}Or{:GC|t9o [±,OEny Py+T4(nxT9WSx5ӂ[vG>ǢHcQ/c!1c7n&9v]#c S9؃B=$> > l%dPAP9/Rc`gtqOO#46v"J 6~Hǣh/=oT#nQӸMި֯vo_ t؃i~q+Pn->mmWlMŏ_G*,qNᯣϓ谰*d1 yYV1(|G>,H q`a303H'kx}nFX-M{1 ϊ "ܮ}L U ?rh!jc*}ؖ3S[j`dt nP#F]͊*\84B|x', bä^N|){X3*O$EUWe; >W]d(RX5XlCaPaVlDZ  ?G|_ހCɐ`YuU@~cDsPuesp=DįneW˦R^~Vbh(lj, dF EOC2[̩IW-JnE9J% .b o%6,n;_m=n_#zè>0-^Nrx3 ϗf&1(i+xFv[?F N+ZӺ$`_.pJƜpNVC/>0<'H~[pe@oNڋX'@#;wyyKsI0ޖNa W:"]('84{4%ݷsh_SK{`W.IEynFፄ#%[l̸KҌ !LxR_>>taw-'|^I}~&ZZiJ{s}Hrs ȋ%<Ĵ˪?ffiM c m1o*K,Z]0`}cM-ۏe{NŰ ~:@|uV$WJl`{uft=5a5'`>)۱”-ۧzq>9WbWןם ?A\\Dl]x4O>B=>NzC]ylnvVsz]qp#h5:4=#o*S *f+wiKפofqt00Q8K*Kkvdvu緖5;Eܙ8*iu9k%I;2}}8qs-vc9 Fw>n{h}@alx3mh)<K1ސD"}1՜mIbF3w~r >ZRlWۗӖDrl< [RRBEOZ5/t~C"Jg  ,|#Ud#^[Z\W_] wΓbjk9)jV3j*0+L[-v o{Op)S9JsBN^Cҡomkn-ɏ."Kؤjid|s ]A1V*X&i(tP+q^ކޫ$nG[ILOie";RL LMPr!Pc@2qdKnimq\L6C5𐬚֚NUWooUu$Whik[- jwPe0, B}>y7fɾ'M¾6q mqAmj-k3Io0ys߽{{&w[mtØ"!Vkkѐ"ꢽ*T :f#Kz4;,A=7& gBFQY9*%rP:P_"^0eULJZh^Λ{-\3BI!^e+l Ε y i׳]j3ry< WeE|*g.6}B>&}Y-Zeb"ZY`eAA$âQh2;]%v'?V)?W~B(( cQ)\6C >nd9͵C9ʼn*&,afV,d&KŸPqWßwr/Kq]]ڠkN@Gr'{rmufF͢[QҙIb;Teap8wm s9Os\lXb Z]cB r6Lx}NjӄG͞>z]yxln80Xet$_fqB>c/Әc&H8={][@PjE=geO3;,n:%6OGͦӷwlǷč¯ڝ#AA/o9 Նa\xz[>K#S4IOp>X_': j1iӶ/oRөkf~8B~V0%Pj&lsTߟ5})L[e2DEjO)fڎ.]PΔ7TrdIh*,X#HLh׳F]zF T9-si7Dx;vbH$$D{ޥcz/pwWOip&]V_Wژa] t7xC۠DAZ'+ӯT2J@A^&Lob>OfQlQKpҋxJ#Nk%ݖ.Mm6Є,ZsRгn*r3V09e:q_;nhGUO= h' t=uD"j0ZbVO=,ʣ3݊gh;شVF" '0@9 2PZ8$lqWo)IRzr#f.M{71Ts!˺Iwf *̄ wC"tPt6ed$Y[r (2 ѨcSG` "}y1}$;W|# g묵Po5>lD &b[섦D 4 j JńK \yUtk>$z[|[ҹ *Zk ӊuF䀅 Kay>|Ix}_Iپk޿/"%Ī_[26o/Z޶aCX$T! 5ylkZMXՁ>ź z邬 V.E8eLDrMpfi5k& 2DׯZs :҂{{z5tYYSRI67gtUimCdAɱގ)q4DD9JӠm&':>%݆f#͈U]^>./z+WzNvό`敭D&Vc6[:*P71 BׂLXM %hq{krg';\@:6Ȁff4nLjw[sKkn?L4|_T ֧,xTWV,>>m*qAGtd^ vZKaE.6&F| ;VoqWYCIoLy^o #ᴩ=siI,kS:%M (daV+G\1drZdS'@+/DN!(UKKyxPf9a,QϦ2Vg7k*rjLcʞW\iYXJYKPҟJ6:^sFLZ ysC4jrVZ֑qv1`A_zQOh4nz.M7$X]/4$$ʍnFA,nh;J/߸-'E;=K%Ɯ?;:⤨s";+(s*"_ c3pnK;"w}6ܷyryld|-qT _N}R;cS+vymۃJ.(A kԊf-ilDoU"`$S :,Q9a~'uɰ=E) _Gf$nm$Few >b}z8<5߁sjWnؗh WPmSْ5j"VnV6 &`l,YJhիJቝ42"MD֥F(Uݥ{ ksӠ $:' (;n0j[x |oO7}5%dlmӯ@gnghzH0iv[ҩ۬hw|WRKTS( ႩK:E'},)ʲǿaY&bh>-* 71.sG*G> ǧԤO'w9x&B-_z@@J?V)S)D_&E45$>_}J GE x׾]A!$U7ڒY`93Y^f5+8ZF`X(BPT͂&5/1s X-社k0>Sj2\м`_rfalErTNΟsRz?*'U|VRW\T7,[I!49O>Nx!MOXy[ne3k6VSR0VdY WWOpE`Heד{GSӓzz|IL:}jtRXN@x̚RZtf\qT8$<:B=~@ r.;Mzt3R"9xn}nrVsɤ%άZZ#LW.WM+FvO؉dF_,ԅQlޜR rS&n34CȄ.QPow7ыϾ:(0f5Ԯe.@l$X: {af_Fy^c2exJHU*oѾn…dH!dr1 [YMӘWƍ# lgA#hgoIhf8|F{hV}2<:~/VΦ3 Oՙl$$?kJGJ+쁠37w: ]5?^^ubB-}4SҼ:C9NV0 uMc4+bgQ?8u<->XS~@ !iy;hqC QW}WAُ@vM׍?x,^7"1Ntj0U-ڳC L[ۑ׍r9\s6oٲyD,"0d` ÷)fݬұĞ"QC?<$Uf;9W]y[ߠljGqx1r)w=~UKwkWtC݆l1٫TI|.Bߨښ;\2cQp@"֭L=t+N?gS<=$LYoUKBH_VhN+z{aA9r؜nohy'#Z$p-k6 qL<*EYuO?zc 5V&H+pr̥5Tu8WS۹k}e] j .vf?o6gצZ) >OO=6XrH Dx '5ԼM |`WZ+ʊb\ V2iǓN6X@]6,fUyYI&=%}n[t$ڊiG0f+"ѻ a#$6Yhc`f9\Ŋ҅h`-F+u@7bqFCU+3X%tq+זo؏Oqſx0V@@enE.]Zl46=^<02Y2tT%Fkp09Tl[.))ʮY[8\܎y*7,%xQުB4=S;=ʠjк;|/͗#}{::ujt_6 aD bN&f+ 7fVTi Y>msEa=DKg$Td< '>}qAg 5K3W+рEN$ }Eۘ8@M1eԯn?l%@M8dBK0Չ~L!rHi[\#8Y|a=b׍ikwd+N2فKXx(jʽ蛞ṕs_sݧ_?RկdW JCo\rϸgnXE}Y!sM\k/.yn=JTu'n;t{'%6 C܈k"iv屣xbjSg5Գ:B2Hڱ.Np-.' 6V̤aJb@'T*M2a A\‡?o?uck-ŗRtC%5ʠ|TNGʾww}(:P#: kƷ/q1(8J<ƃ%@ک,Yd Te?o3 K4#s5L@5#M|x|#X_G4s32fK?9"t -jc ^$]?>@oh (Gѡb,L _/OâbMf-m(p{յ{z`Z,hH85 (ё|$<\٨zM}h8ܱdkS ea]dbf3[ 74?J2#uMAhr-w,:'bN_z?;=ljKo M()e[]P) }\"kƫƓzW\v1l /yEol\vLЉ:bB.<4{CQ*Tڊ/JZ=R R&Ѷ7> ->Y󆖸L{Hb*PƂe&wSEkt?J)_ny}YG}+6Ctޣύ@.oJսNQn_*$۷ny&r%?pwQEP._qt AM]Q3JڲvLMnJZD9NeM3 i:=2=;-]=5/۬8r9C,3m}QNFC6tιa[pi2#\(FP܂x:%"di4x[YݬLsh;u9Bvb]Jfb "ѽ!җ[")"QDh E h,jWBN0zqQ"]4ڥ "p >*;9R`c9\[#wԠä)? & 3Lqe@ iZ!P1~'Ƨ[HSc)?Q(X&ySp:6:Zڶxx.Nk-V8zx, YÃp*/M^溌ܺ]wW-)`JrWʑ8v$C_;8)"ǑO+}}#JksɭbnV|Qy r #Ʈ*ck5Ut7oN:[^UV[@-/"=WrTf^_\oz\?I5*YLљ f""6D$Gm~P/ed95]¦+붘al>B^S=d3QČewJP#05;w?6bqQK-FLZ9~rEMf=7ztN_=/P+xdFM4y^t#Zw= `y=8ӃIǟW-GRi!{wC>3‘ |7N[MŘp{_҅0^[H$\m?[eFV_cؖ1x#'FUГ ^pY7gptQo\tvjÍQFƱ4dup)|2|K[9;q|=Rb| x,~яsyQ50U/CAV /;4toRV$-O'I×ϣlWϧOg:5]Q> rpUfz\xjgйysekfW19ŹK+ҕjtn)I$Kt\$6u|}&;$wkgn}ҋٸEM Zrw2ixf8X50fL0:*.{7\kmt̛қ֮XXSbKAZٟW 0 @+?ΈEbS4虌pYvzlj `\׃1#lxG7O>0J>@'^H/.ׄVfQcߣىV3b Ͼ/Hh](m.rxb\mvZn| %9#R(dAK+ߤ!&.r¥1!NUVg9%(*M8hVtsN_m|?ǿHy}CFѣ \8Qd߹8&ْ)~?Oج6j*(z>{H!&qY"/ $XY2Fh))#جG7D‰l*"$CT4ﭑnH!mCq=N~1R^0x=p7 ș_R I"DcO6D_RTs v VAQ)h5ȍKVF|Xy0i%nD;%Cm}ϝ3|Z B»{3Sʵʔ_uI~QL_ܑc"QIn̢ne9^ڲe؃m@֩2%vw؋"F/S+pR v/{`nܴH)V\YW(YN&cacΌ9zm՗[^|+O mU/PZY7]5) e':ߎqi,Sq׈;Ve K%Ϯ]81]9kKQ(w j,C_޿#}:Ʀ6bV/nꇝy 쀝N n8ȶz4X!>Yr-*[=Et^#?Y CM|Dyqt,Xy1f4UDؾTf^xŚBo4rq0@4qN^8шޜh:^2q6af)џ%^|4 cGNeKHX bNcg`/@YB>h:R#2o#_[&MInB]M F$#ry'ꋲ$o22CS5IihATMZj-Mh9%.anb{fe357fiC)Qz|֜&%|}Ѝ__w皢=r|Կޘx;#$XiAVΩM2 Ѹx'Oe4؞߻;ݫ!M "D,E_CO <8 A9\5¡Af~I=xlƲBa#hG,N.{]?w`4{I@ 0,F`ɓW۵dG|Yr* dq,ox<1*"tTEiR⿨9u}+-&Ā&o`M9fL/F+ȖROO+$qmTķGtXY~ z>.DR$rbg)"Q^G"l*,|zN }M g R0bA2Լh'c |h|XjBkH,ɡ X_ORN~BLptirR ˴(RYTzx J0zid^1 tI|C;=Cp W+o#u F=.RC5_͛Lw>yw2`u| ,nǓrϑ!"^"]>V8ߥ< Jݬ珅D:5uyeΚἝEǏ,=ݫح{ϺyKW?w#UײG2UK!kZ@4!^K"5?KEIƧha;re.?N$d_eB۶=EYIt:ʙJ99yxڡCW7?ZD |cCᡡ`o%>)zmu_i}wY95Z]*Ȓ*MWk^O^hw2%D#Eִ4Vx|' 6e?('OW몵*D@am}ܰ`o68|HB_|$!1ZO(=nl4[l9dQ[ O3o+7ICY/ Z1VRlsH1r u?+M6FBOP~yZ7zMFu)?yTXG\9S}i7/E'FN~p~α5 ط}$nmWVk5 ȁ|cYNosKسW$0i^ڿ_̣i+h﷛cP?9_0֠4b\pD7lj]o[T(z X˛β.6@H|{&*TGwDo0Fdy)PS<A"˺R̅ c,Af *!E{5d4RҟLIAwE[kc#+i'_Ľ4ǿTݟ(Uvi=Լ06 Wzy-L$BAAiZⲥeU2%%Bk,ϦT5u>t 9)W@6?Hs'2pIWw>S[`NyC+$ADI?D@l0~WU"ͨ}a|u<9mٸ|%|=2y_~ ;4z`,(OӭZL~JˬWpx_=?-Rͩ?U."`~2irlܦ`q|4m!#IOFWONfezgKlEFI@L͎bpҿML@1d&I8nD,|bCE4ӿq3TIñ-ݶG~X__;2cJgLy$ߏnA~X}-?+)1eϘ2m̋i_;7q?/:1A'S&zjPf(e_g\5ǂhfLOhfa43q4X; ~&>NN&y#lQHsƙLj#)xI=(]HR!S MB A)' tXǯհ6,ĶmDo>EZTPA+bjhur"A)&豟]""TϕAq2 Vb!&Nmano T%ZkI]n2VVŜi~?Hϲ#?H&\xi~n8njګp&Μ9SΜ6VM~N0wY>uys:/bbxC?~4uԽӒ&]:cIn<)no'O:4Dܤ=Ww8_M~tr=??'>%4#Mz)ҔmSΪUe քK4%/ĢnK~vo/YxIꦢ 3ȧ5{"?Z/_Ҙ+iE[ %1VF΢g1MQ_Dmj 6{ݰv+Z~ҢӲ;ϚĚ\ m.osW[άichO}$Cab81vN_OLԑM;O|{|(Ly]3i_v:,+G`YҦ܈(Yeu\-_ x!݀HZLJ#(%䢇^_?ͺp f"t*^mM]hdׁTUOac̢v ?Eŭ&'ח*KDNiMD6UT@&? 6~2#N4Mˉe.AA˥Viޡ\Mk5YȜzErun<>ʓVUFӪ++eP z)+xbZ`ә$*LQmm*.-($,UֹgsQ{^n 4ڀX֛ٟ솭-Op]]6ٚ,u3mDr"dB[(=DExi`fu弝q[PHa`Oo(yּȷіZ¢X^O=#h FFҔV  ?X̔ -協(󟗿ȶߺ-T҆"}E拜lpFmnζ\'8"O? &Ͳy%od|jž|N8Dp{*ef h~ªհV6lԗy|?:- [aJ~zeʬ+I8Y)4sJN P7\F{ V=P@U Xp= 扨skEk5ze|q5XQ^Ea?ͺww;=)j:}zxzxph2n9A  x5ەD&()8DLƓinOqKpCDz㴻?MP4ReK&"Z=2O%xc`d``b `b`d`dT,`Vxc`afŴB3>`0ddb@ ޼\S0( P@AN?{  d1 xiHUAywgf[kKYپJ+maRQmDTfVTBQmϗފ‚z-vTD"{af !F,OD"[$)"gHD^R?P^RMi ͣ=J-fVBX[8s( n<?+M?< `.0A,(I0 ! 'r^iew;:V+S#FM8Q%ݗ^V+MİX( cl(p<I8#ZAxCˑ`96)9p\8n 'A.mHqRjOʷ:y! fyټd^0͵f̯h8iTc?;Fvk-]K6j2f]ujSTO_ux`9<%xbbf^L4܀KqLI_FIvMv%ƺ\K;#'wglu\af1zxZ}|Z j&maݡt٥k=zݧo5gM{ƄooXEz9mHwuZn.HOyP}< x/ULa05r~Wv&dCm滖њ(ijʽyߎCfzr+:}EpqaIuUpF!VҚ*9ݢ}O8Giӳf-& !C+kYEI*_-HD7MOEKQM`s0< U׏E[JeTT+bKFdI[4;p6S"vvOv\t1B!; " A:Z^G_1 JQs*../NtWS8URifFjSuվAcS5$q72OLǔylТ#1Z[&ؾnuvȕ!WY.Ƕ]ci7"hB:=J}_0 \6gJt^AUcYMmUqu ktbꩣ'"[!msEe*oPu;Z$N=uxW\b_Hc=n_N';U4Ym <Dؗl &έ-.rgBfb;vU}ݓBKqEcc_q=^.G^qDj.5oG p%>[xc`f F X(DwOFFOTTOM@ iCFF FE^BFFTMGP]*GDEFGl OS/2GP`BXcmapGltheadH46BhheaH $hmtxIGmaxpJ\dPnameJdp- postM, 2x|>Xqi,)"z`n*Vo+ݙ93;۫zoeɽ6^HI^3&$%/>v{9y{]J3ko\)屪i5 Y ŊSge9[+_~%˕_tBqg^r˗흢]~Q\g<*nQܮKq◊GO*UqWjӥ-ȅ?G{x-m7\类vuGny7xS巘n}6w;?k/{w}O>g~G赏汭N}mO<)=ǧ-~5gW?k>cgg^3sìulxO߿Y|k?x&S?Ycҍct'ɡO.)H/Ŵo>?fK6.T૏nz7c& 94 be#Z92ĩOEA @W o=_)|aV%׀p^pVe7wr^W r'a+l^aH') 6 xE V˪ ZboȮVNb8ጬղ (/Ǒy؂xnU4 @s ώLŕp3<9ޘE,^^.cxeE)m;ĊAcu`;q}mtn:OͺOz}_Y698'p\ov sd8ٍ8]>Fp s0X' jv̓ V֌pXsa C\Fuc I֞o,]k3{l\Gƿ>/T讆pB_{D7ol?|iqNS[Nn}B(b|xxWyX8 <~#@&Zwy>[j+V怔 hZ|otv`{`,7r2b&C|G(m CD ْ ͑n-8;i^lݲ>f]17Q7m{jC B' g|3`I4AmCIgڎt^fN% ~'':Sô !Ez=σ3ߝ>cKthvkx[%JX>J=-#͑ig? `́E18\:Ysu]`Gd&}l.8XEX:s#vjn>/|'s*x>%t|T#5X1yc=DU=Rn~'㰞݄9&y. zxQ9Ʋz%!jB›a_.I"Ρ$brs5`/MGE]QlU|Jqp˹R~TWG;?q(;zl]LNNe`@fEA d}, 3bX$y:"m+mVKwuI?E7v|kP cK{U~zj=n z8QEx ;D? {[BS`By٨aοQҕJW B4H4%[s77P+X&Mh8LKJ7'>*2>mtAi~扬wx6Vr ހv5CC{i9N#~Kw.]Ƴ7p8v *A gj|u2w0i~6]>8㖘Mt a|bgAg6T+]up{T2E>n{^KdC\.7d׬8RK[Dɞ'L|mi/ þn?PxO_vî Bu?쐓3dR.`4sN׳۴s*\&8 É}ٱP ΀TfP vѺ (y D!' N8 [G~Jo.Mgftfxg{ 6 /Bwd7A9xTq hP } Qo.c3wCq ST #;8$ =QY_ubc k+ !Lσ Z-u%~Gtku[;H_U^޿}FhZ^ZkD ?@l0zujbsmAkq9#ʬ䁦PMaP_?9)t $+ | =T e9{v1雟tV|賟pͩ^Do]1FܥF>hH-PӴD^i2tPKtq֮wpw?|Q!*Ĉ/.{];8BLR-#x$89QT9AUW5ظql.Z>u/=o;KOo#vAtu06$n<}+fctc9l^@o}e`{~v: Z& Wu,~:#F̩ݛASTkȖlDTy8Yn?BwBBt"c qLod{2_JȆ\ vNuTKw/<OJ="2b@1W(OUdH+^9E5jE>w6oD]ɉFd< ߗH.ʛ4^wRλgH?肎W £ څZBv&%?LJj3h?spV %Qy_eN"":̀q\;4q},'=A 6ɧ~ mr*G "_-EBhl1ՀHt%Z#zHwv7 G^tFAtb|@66=8̭E`"KLo9醓g#žY݃Kzv)ykɓ<@ۼ7?&Df,j?蹍vZEhX,P N|`߳cQ|.#C Eֳ<'4H`T,^ϧށ!vf ]~ubXGs:yMӫ~[>_"uCR${.UMFt͘;92 ʃ%`}8]F}2X*B<ϻkYiZž$-(K0n8"Y U(y](AŷɷCv\V?> WaNDǥ0dzЇCV(*6R*`)<Ie"^]d>b,fZ;=&g[lҏUC=#"XvUaZ*d8cw7Yr*sЀNFrWBmY Ř8/rC;fr/X#^9=wAUtjfsY4̛B#LQ߄N7]"r!7u4?&Ϛ^'uTT˿r`7'`ẁHA!nwSUuL ݟ[tE큌//!nM"%J9zd:Oĝ| np+" O4$&r; "i0D"$hzmtloOG74((4iaӚX;Ǖ zQuj¶֑޶ ;IІ/q?bdqLVg'Um/[+Ee !>}VCշV dXpn[c~{ԇ׻j-4tksY8g⼜;iz7}E6z.fjʆ;6o;=K$z.Es |l}y/<qʾ q(HTU1b>3"/Y_T@<߶ҥuѨ5Xa4v# c 5voG*><,KΖscʍ2:^EcN U{vBbk[e;3ŒɆa6mRB-|Α{0[,PK*:sw@߰3s u%X_3A装t ˘^wVe%k"Ϙ| aULf5JBe ]*qpӼ1f׳#tn!(ɆlZzBpzza#2e=,i nmJIᵸgx 7ޝE4"c4mZt}ȜvABôNRkmw:W#[RMC(CU]-r^%UK)"^Mlڂ{67ԙڼcgG](9o"}<ԷHyl5ZH`^ŏ!1OSр_э_@^hQ]8mxt[.l.!unހ&gaN8vfgql?͗X2&3"Gdc wYՒJC/ə&Mo[;oL9]6=27,pw2.i3u*cYUD8k#mJVADl]Շ/p87>#\}Pz5P0KZp0z5ҏYBxu6ʝK~"iw5DZeL=CĥY6Sk7[P@=9Nyq6z1C_I/j;SZb}};{S==-V_A7p^eÆfGcЮm]cd̒:qgb5LI"RJw6>ZnFQC5Hҍ=quK->.fIn[>Ie77GZY)| =jӢhfdmڶ<9W(5n(S/h^GkَrcN.$DP"~s#9X8n֣c{|tHI ]>l zZN4%dN;`8FI S>̘|aW;sfOA~-}JSп}ݦ!\c₂05Lxj9+% 5Pq~Vd-KB%XYsG3Nk:Ntъ@-Tѩ3VkM 87¹Lkl(_VCܜ%mKjz KUSWwos|r7Bɿ0+/l,[,կ Njr y dr ?h 5FEmKEN͕K`^z/BNxi#-@v:v9BP, 13G#o7Kpm}[7SH HӁf=_2V芪z-987QR19sUğݙ1' #Q uT68sl!W Hzm_e s*[`l GE:}kK<ܚBy21A 9<lրJV߮I A0a]zȷF(m[AGșr[jJ,_3WXY14R3B_IʥO' :Krz\ +ja5Է& %&{c]e. vsJKrO_"Cy0Î?!^e#leޒ҂e`Akgcxw@k_da.e?!C.뫮 .cCC]Rq$a6azRզ08)L6/ x-ZQXPSVjH>KpnC1Tk:KH0fE1G/̢\+#|kp}tcPS{! X7C[tH[QW԰D=sQ4v?;TV <2s0@ zK^gz ?TCܞ<.@]F!]H0L;RJn˸BJhz{Pӳ5kVke]SadL˫@ =[b[6~FoFzпppLs,ZV E "c'rkf,EJ{w@I04>\.ɧB_'JBAjٮۆl p{mr@> xjssV~z2Bo} SfkIt!0o8!>$qK6?Sa̺{ebf-ֲSL W |gnzV7=?zҕWrN<-vk ^+?s3Jdy}m M ޢOnjw[ߟ8krk&jCm- !߀:g}~M BD%Tlݵ}Q:4@^?m!}h}s?a nnsUI|Z}!\t]b /3E/6N)C?Hcʶ˹,6Q=e-eրC3P f[x߃^ x'/7]d5uӗLLmt0TGQ9]Gx"HDaYb>}!0+wALh k۷yD\|9orV>fa6 qD]]h=G z:xOdS5L@$l=SNN;8K? mgg|6Kgm- 0PՄw]0S&/}=z=3?I.ߪI xLjAZx2 uc=xOnñ\GD' fXǖ xݪ6nS^}(-8;z^>InЌ8z;ubݑOI/z5 y}{P$a+6[:yݚ_>y#s,D&(\qڪbweaY.-k\9*Gc}t.ҿqwShг eWRu0QK+skW-0 AX@UU\4z5u׹dG⮿TM4B832NϢ= S-Q=AJ2[/ҫ6;Nf`ϫGs{s KM|G9 ( *ԓ*Cj.<g弜id9Rk52Y[Z8/;$r(?#KOSd,]bXnhCD}_6v`< GXWj vS>?/ |.3"S2tYp$R sP "nPK݂q IN&{r8i/+)5`t"3alU] A^_kyN2h^^]k[\orʕs:f>'"a @7y˜i'b/2yX6SHcRL<: UM ~:A~?#)G6#OA@-[t:9}䫡 πx7qByY'k 3M a߉+r!/| 8 .AmtJa Iq0Bu܃->|fs4WVҲr<w)'塳xH o@A͏ }gAg)Sˊ^E"dn%9#͙rbbƫN>yǙ*Lj iT͙(".M, 2]AR7c!3#}ɺ8t@pa/̫z 8_}W' z'@;$ t'F}'vK& ۠㷠qkgavr 2:S#=ixd򒚢e .˫̉[|f]>w&>zޚEsޅÓwv^w^Kսgx}GWw?oA5&[\q']}TG} dN,̓/p|W~jlS8L6TZxnM{D~ i{lk q>oY%})1\)n0v8ZI#D jKbT"Yzg9Z͙uN}+ﶡZG:@Pah>냉)^PzF9TX QZKV$-LC'DVKwrMcBv+ˇeP/*zC:%2jm ۆ)=@390dk\zapwnQq q2 ) _A9sr2@c?s8:nNןJ] Gh #ΪGF{ML:m@IّuO=|M.7IFqG9A+c*n%3"f(\L.9&B l /_.B~N}h}Yv]7Ͽni!ȴyTǧ# '!zgHڴ~iX:n f`HyZHSG$JGQZIˌbq5⵵EKL瀁wtf۪>Mm:99, "82*nNGp-$ݪ֢fG #:üOBv^kͶ"cdm4ĝtz5Tm߼7ЌhvukqTe"#ρT㻥@92m %4?G/twGV]$Z:: <Ai'FG'hg);;7onhv&$ghn5cSz>s4Fu]w=|o z鎯xx/·|oeǐ7yA\v,I@cu7FSןazcX:.l4Otu˒R,^$| Q# w@ߡ+YiXN I1 tlEn>) vќ( ̓.Jȴ<Ͼ+߂[ @8k v6>VmP}L$qoue:܏KWT+8ť#غwq cmK 65#$1^,x̀1bz8?-ǎ/p*ԜSPWZ[XoKqL &r*zo'.w].J /&X3L~^>p|bXjz\z^CϜZRIS7TE-NXLӂD+ݔ3]]S&_d?tY7k.3iz2Y]9{v+7 i0iSE #G{{菓rDexppEWE|4`kF L{Q EdS~A3Oi~6ؖhucR"uz@ÏwP$!T&W;wuN`wqXHc`Xs^&_!dcZz4ix!6$ ʴ^~tF+t;&L~@-Dll":e1N34`ZS1,m윬+2h#5_ۥ.;QWdrY`im'9%^RҬ"MXMZzyzƬϨ%&v:MO/JGw3Z05N^_% q3Jsd4MU!]`E%*g\\}~7k~ i*qs4eE_jiKϯA__c(6d f0Y]>w4o ,MFu=U1 U A{EQz/JtM)YnF#{6/CWp׏` Um AVEj{a6 -z"w"bW3 j+t:'s42h%sljZrm盟C+@V&Z%MY<=\+OЄ|Q> p>i@G|ST^(,| c4yz#}f)?J/wjoɃ7ꊖ27SM>Lˠ'pk!C6 $+j8n{yN7O0>'v>UGp5f:vkyKnw]f˸CR٣mPX( 䑞%we>fHDXctVR2->}LWRM=ԌĦ(O I\!Uڹ%=jQّɴsQ$r5sљ昞Wkuŕ BÆ&wEz'ёhOch}8y9Ҭ+w+J2/XM`~ {VNgbQ{/Qæf}SrZ!m~HJh16Sք RmHqWi)-ogpnXZ:g©]6aW?>q7ӳHؽ4'685}{l߾,ʡ"|0AMv"=A;a΋rz۵RՃH_/\0ꛭ+V vغC'`g`ɹCv)t5u]s~ Nzr̡P/T`=u-@}>"|zUoHÌ-Ԃ "9A~۫t/Ji]f}Ҵ.;R֞5d[,)^Rwf+Bva'X|Qf(( uuUȓtCĦ7EA{M tiwsɊN;3"x,L.-k& rh\I!c|.ݦyq6B_Wp l@|]tIOMUPe5z|m~or<;g"պZfT5x^'6_״}?^Кy;.cyNa+ OKwGҋwicqg޻N r5\>;@p]~;o+d7Z}C)cbRrw<BHrb_r^IW#J'T=\7DoE" !_{jyl!'xK1lLcZM}}yz$" <,o.9caFbPs* d#y 1'8@vn]pժ\E-^}J/6Lc,C;&dsnʟoD4db09U tKǦlzTsIE:[%_ܓ)頻0y6.0v5z涖"}uťF[[uvYq^7KV( c;㻉v,[>:բ,c11X!=ىZb:Xֵ5 T[Oڶ{|⋳l%aL"81IL0^Ki[\w ~(VO'JZ:{;7(5Nn)yY'8<ΥB"^N%/.qab>g7|$ ;U%,lv ##Tؽwۺ#86]ӻ?q@UG㻿m̔EڦpAnoiil2@fsuKj Vpƪwo|3,. ̸\oil149`>w("d01.z5гavz >Mm-%i)AWM^-Sqp/^ܻ;WW|go0|9~ZiGc'G]hA|Bxd 8p77dj֩i.[fm'ul]X9 1,۲+볋!WG9۫B\=2O%xc`d``b `b`d fxc`aZδ H30@h L HÛ0~@k B? 1)001ufZǠG xc```f`F81, $0Oa{OϢ? 3?3O?yR" 01T&τ_@PHXDTL\BRJZ"/+'o`hdlbjFC vB0'D!xc`d``bnx~ /" WcWm_`9t $ Y xc`d``,@" BxPKBa=߽ &Q>D-BiA4b mM% 5D AC64EI::^D=h -IAv5BR/#Hn0wbP3d}y5br [X^$G2 5$1,ᵤH]Đ<˪%!njc@.Ӱ4G>ehg/9{:5[Ka0"5e# /}?L %aly@Dc> 5_by+Ky&P7Sd>i0qe]FHPdxT]KA=R0 B1`@$*)5#q7쎉}cB@dU!Ιw=s1Lx鼰8GtZHoYd.j{FԽU;b,J\,ŦLT;aSD-l{>CxÛ9}lZ&Kћ4Gi8'tSxF}C7C((nKQ" ʧ [*M#hqP5Zs#?YEN׳Yc\z(U`߰G>RA\.Ym ?;#npJ:]J}2ׇ _?oHp\AU=>vG|۬&: <Ů 5Җ0Vb\*>ԓ{R,}g?k9t e"l9Ď*s݃@%XX xdpYؒЁZ]ve8pridv{G)_T+nuR($Xuu%j.Vc#[JLxc`f F X(DwOFFOTTOK gCFF D[c,8FFTME]*GDEFE OS/2ER`ApXXcmapFLltheadG036 И8hheaGd $WhmtxGL maxpHdPnameHNvϓpostK 2x`6X^"XYrd c۲qmYK[̙E+iիU-r7̀ =!\Ry׌gVkɽd$̼Fu-z UDܬ]UEOݧ_jz!BêEŪ%轥eUjQjN j^-E_-:#:ꤺER6u:PwuOݯPzL=PmVB [XsaΧKs7H>鳗ss{ۋw9hE^se uy^|%.]?}꧿\++{Wuy^wu 7̿/4|-cם u{wش =XPC-Z_}饟.Om{?9{/gsk=+/zOnЫur6<ŀ3b7}aN-O<|D h9L[veSrۅ0 v+$[/!`) $xml=L/8hXcW/@Mb.a$r"0@l|a Oj9>)XpۜVSo9M,\!jrk`i% q0<ڀ >N[d~YgN-4eexrs0Y|6t9oÛ <3g ;Շ#QB]b`t¶Җ5A7/_g=8r0#xxn˃Յ[;m+s4ݟQ(/6~xRXG\~N xϯnx@y:K<<`05MBs ANg?td mG.~pIWm0|3Tgau3iaز%Woذ!sp]g$"JG_\~<=Cvl-5=Lɇ3Z 0b-|"#Sr>l riVbE1ɸ0G8kr=DOЧBDAJK"`tc\Qܒu6Y894I*{cZI8gC E" j0w7(&h?3zM^Ѹbw'gn}#sA8J]_DQ$> ϳRSzkd&6?.AƒTn 1Rf9wn2W0[_ C4q<!.mX6{ <|i|Az mGml{ bl-FZ,\3 xg mCD=30MqW_q3k_W)`M>5Lg.8 vWo_.hII`N <ۍk 9AUhLV ;Cszl=}o r,8p$W_~ƿ:luHI>I}Υ?<<|߃|;=Xwc;J˕wGi]ۓkF'ymMc'ϘVdh!}k=lJ."{zaӷY][~u'R5|RqGJ7LG@2Faw<>RX5$JzH[fq'XgӖ [7<̭l`gh?t?![^O½'hp\aQj>|yE9\ F(p~g^E^O#pUx'ڑxybCW ka_@k^f̊h-*RjW %oHHQME>+*}E -Oj:u})c,'0”6 [CpF ? F);{gpg7?A#"! ௣pM_RhΑ8l"\mwƉU`A^ˋ!fTgmrJ{NP_f^vpV݆! mRrV_sv;L  G'?8]̏oޟZs )Kpرcv8?'y^l4öq}q! `ie\H^|tП]'Y@e,Ao){Qмٮ#\ݻx]h|H/$L jӮ\f!+xع,ЖQ.x:GoѫyGCnnYYԕC/_PwS~|t5rGZkc. vwu:]QMYfnoXi(F?a]Keӽ&d~8'5#{/@(>l{k@]jot6guA3#0E{O^;7IĮ9̑ڧ?\wAK,[8wb]x=Hs 腙<'vn)!d ؀aSH)@ -Gs"Zxg@N"D+}v*z46j{,7?z\T3|?Dd[: a8 (VPRYvPsZ8 [a|VD0;"<yf*ӦiП |P;ʪSSx9'gBI\}T͡*!aFE]tzaDJ]]uB,J]=b9ˊJy  S uikh:/lPNvkي"Q & fN_cfȸW2N`Bzf4;ȖC 6 eSKbvH@i"{|NyT)j ~IƇ7Ȣ*tꘛk6C1_#`|N=L6/seiqi]۸+xv1[@ >M5Qj> >)+DnHgL@i$Ji BE!ؑE l%>LlKg&WY%qH9Z|=?\)U]:VᴴYs=hR#7Hl3mn.ILA"[d۩k5l"B"RER5A-5J ikҝN2N]!am8S|!=ȈNE Ha"]D72%~0]ȣ~p!3sx_n10ȍ A1|5&M_D5L$ý~d&]6fzoV9>~ #Aq_%8y;㭮$vk RvZ(p3.IJ(v >EXL 4/zͳ@ӗ;%KR<[dVQq{ XɕhqIL o'/=yv fG鈤YԜvpہ2ss5xqtB$-}Igm`0UBp~$YyI80d?_1sU(2L! h [eIe_G(ߦ<7T@7H_0ѮмޑK6y>؍!bFf}aOT9*.Dl YA[D\k{MnY|ʍȵ^tg~KJwٜ+p! Z 544.&J#:lG}7Ek"'%טK8TߩW^vfUC=ܕZVqYknqqm.*E)jiun"XZ›qpku<]I*CN?j*E1Z d~ H)$ĤvtFc)=}\pJF !QK01޺wۓx4a9?*c(l7u.a+L c~+O>8yUe1v|J~]dɩˁ%FdMpWឦVg\ߡ_{@@T[>:5zz_ixDO,L?BѲ-eM҄Hӊ7͇" *[V"bHp9 g'w /o\\-"-qo^WXl0C-W Z$HK0@v,\ aUkrXԷ4wOo+!]il+;np?_qZ=J<'+l,}OFەNՃaV"m _[pm1[vӹ\ Y/IB,GVZהoZU~k&>GFDI-`O{yc1Ļ}O֯|NX t{.3$|01r@h M.'oڟxh5eLz .̫\_1|9mFcnK]uc5 +ڕ=Yhk`/tҼyZ ̔CdxB(ԳR{Wc qz5u3;8^ӛz։[ڠ5mil B|~ƃƺX34v`f yjaC&p[,[39cs"o6` ҧ#N3fwcUUzBVn$rAiehi,+//@Q$w6t$Y -ն"°ʡUmYZvuCM",iC aP,J^Byˡi(*^jl'0d$H$UL^~:{sd*̵6nmNwGF4gFԇf}i_wKnHp)Dx舲Sʋ%4 kϥw eA-O̓hȧMihHłIA l?5#GvEBB9t(\3p5Ys7cYJ/W'/"=/sғW?COunCrn)}vO?-͍6kyyÖjggQ$[}\ 1΋P'ĬV@#]&kESZ eJa&6?L -` ;8 G')ߏ([0yaLY3Z+ݛH+46w"2(ajiRZ]U:)j3|Pu᩟g.ڴbrxT$%5ku{ ȧS{҇P}O5d] -حkjlǧ26za"p.-&:n D"5#%'ώV?ULEVZOOhL;sЖ "}C[h cNg+0%3o'D/ݵ#u؟yEx#fnRKpؼv@i ʥ DDoaCUA-[GF¡Dt#W(Cj|PFS#64B֨ZVUV9]vӠlt~GZ|Adzoϡ?kJi]m;nÙF-zœWO IǙ]>su;ldbE:/kkI#@j8}E%GqDr\@~ηvvM΀Qt0/ӱ t>Z$.'j=-nGsAtͽEJe6M:kTv*RX_k"Ah`39Yxwn"y*cʑ*{:˂'DžadXQqLXqJHێM5%_7FOu,q5 3\#1 A.t{hG4َ& .DA/-ZcBGsdfg˯h/9;\.ԙ駃گ\ "QJ߈&@㼌I>TE|N/[iq6a+([KH_u& Ģ;۞64jow$6 _ PSGNmwacY7y/&3g,,qXn)]ޔ4QJ%#=hHB|ˡIyb3Z)cL+|pP٣qJ XN",f5݁DG$XB*4pnViH{lfȇ‘o\6~8r z5c::;`B+㉹IV%Y]6 w@6EI[kg=@_"yj@Ocޱ9>~~ڽXϦkT3 XS{Ѯ@ِcP] S* yyG{Ð my9qۇmt '55;ZV<52R]0VwxH_ۜfYW^n.D]V/"NiD( h.,]:QwcՇ^zNOFݗ[AT0+bEK uN$AaSA7oU-1.e8֕WWxY~6QO&u~DF饟!ʹVAe0&ϐ6GM|#mn3 B,R~ jdNߨ}i Jdy.D"Exw*L6\&{~)FQ=xJm3GL_?|^Ǯ}nz7->8D6Iƚ'J+ MvGݣfͧGԷz/EM}jL?$: xh%f qimz˚lCj9ڿc(8&k8ɭ#Uٷx*CnuA_!X&'i? Zz8rIU&ylU@שiؤ~xYDtlo:uWReea`a@jKΞp G"ą0s64=;JƖTBUsC˅ 6V97νjUo.e-4-ҹ5'kg!G i1C_癿a"(ɳ̋'k0 CxenQ_kD$n~ fڄG%HaXOi[zes |;o*Jt]:2iK7N-4sf鸾޺& p(/;ZV= n#;xG f{|ds;9D@^uDA(7 a(xބYT:6Xŀ:=ewy-Ի//=sځF!+H@dPf5'I٫[(L>K>C> ^V& `&8S1>4ì)B*9C(xA%@6›ƜGjFޟFޑ֟Zn/Ȣ(ƫ2H"_x/a;*#xK5|pkh2_L"p^+%x@Nݖ6̾ F Q5VIx9N?gs1ݵ(4κ: Xg_^kGK2g]f勀\esTH 6(s+|ULW镽ݼ<^f 2N襹 ,ajFЂN1J2/#t c ҂rCb8[h/@2N8y9'Zm)cd=B/&<+#c׌X0ѫWjnY/NGs*wX#\ 7z휜 +ab?s5oSY$(  ^ah-E=ԁנمn~9}Ӕ||>7!m|"m^tN>%҈U E u] y9݄\3{¥l=?7yCطk4 aL1a'm"ۊqnCb& "Y+\Ytq >$r'o4%+Up/XSnhN!thVw^3eljb_e5˗3jJŻyOx uz<}>7h>+cˈJXdvj9& r^ى[b\C X*aPF@>OZ9omک);ysC ԭ2WE/6ZLejWG=KA>֜Dez2R9`amczx#4J͍btϾÇuI=X‘UkAlvW5?Zbu񺅶O9׃[*Bu:Hը`/aWUەXm2#{E"3p\ xEhu1 B&B 0c}d1`"(>];KvRCii'a E+אa6k׽k Fؒϳ^(҂ (?́ON3M=sQ{JWAҶl6-F,`w=&4OrvxoBN=Z 'Ŧ} ^"|B)b,q:Kr y>4JytNdVB~0+Dv+U)"=~@/UԶgPXMYx[\Ygq4-V $_>UP'5ڥPrYe5;67LOu6`=呿-9ixU%!4 GO|[4{lCB9'(ycc%GkǫiXፔˡTs=M{Kџ`E!)$|ZFϏSU340ѩp]ee*nbp s=g0ᛕA[)Ra,a@҇? +ߙwc,9z;'2+N^;bGFY!{Ůn)G{ ݅#H\ٰh{}z:aȊ= Vψ#:';wK=mj/2 B$;$, +#'! sߞ w_HW&O^q^Ǧr3J-*:ldآh" l H}inWjnuXVDj䜆hcjN*J:`oz8(`qN ѕ#/%8ݿD QjO$"TWWdblc7Aff"196BRHIbLB\ .l+</OL w$"i8_SWLc=CC=DmA#T;=6jyVO7N9<L|R[ VVz}ܼ]'/S_Q iH5ǫDa5"wq{ɺD Qxc{Hwkw,%ሻs 3[YIސỹũE1:}.8H޳Hkɜ >c;]_%CJ{ݚƒjSk`=# :1dvn'^ oLڔ>QLQ*2CxOs>>hM$Fokܯ7 2Ze' .) /iN1F9WZ%a%j?`!Hl3L`17˗DPAq 즏h&/cn ˁc^_x_N?/H;j[[#uq(?GҮ4ԓ&!lk5:M+( n=OOIkc;_n<#J (8#2w.W݉& tr+ {y5WW̟7AY! x(4uƺ}m}SqzWn)lzЃB &};ݶsVLNON1-Y7@UҶSO,Z ,t(_% nvs]Ve# Z AScM^L5` {do([`K hctsw5r(#VUA$Yit7tOY[\eg uˈa%J%l@2gdFFyފ$&=4섎RXMyfӏ|bNx=3.rڝv.Wzn\Q(ŽN+ȗ͈m. ٝu_ןtQyp-)4HXT%nubaP(ܼ/dY;l4My#1+Wi]Nӑ]=?>Þ^[7Fl`HVd  x)y=.Z\6ϴ٥J=:#)-| *Ҫʚ-2XU8Rgx_?J B!7;s&>!9<ڵU,N- kWs yT=]x?B_E$x_Bʟ:>jWЃ|!GFa&\ߴa qZq8k2"򊈿<c#T5/F`]}|\N~';ʆA]f[yczsῸX3^EYW1i}c4-Z EEndLg|+ O4Y/_X*v0m,D .Zѳ}滤#Cû}CODE77KMYɺ][%Ѻr6ûyީ~ġcpFʑ}«~l|s/8fRɠ:1U /抙ZK{/齜sqڕ-7U3y^O嚶oوY^5eBQc/v{T 8jΪaw!㞺OsH#Ec݀+P86p6\.< EGgsˣ*e^;8\ = ۇf7`Yybo=ɗr ?WTslt)ɬ(hsCz@GwIRI&K cVkWW]Wgg n џD'>hSZ>,zn9w-dRv }J&3%dllYA޻$ǟoUJֻ7ILnB8GoYUYnx1(b@AI܌i30=uZ4TN]5;B t0kK4I7\^a,ʘZ&IjĜ&$8?"xgSG#R 9KG>=iri!)X,N<5bxՍͺ7&/i%&ӿKɗ{KI[v*ՁaB}m/~(I!T F!LbKdS~}i`J|\PWU[/BXѻy# k4?5=b\k,3W:K ; M(=Fja慄e+6!ػ?h `D+:xJ橷(=o2=̕'gYfZ`^|x)PqTsϒRw҂6[2= K s~H"ps&cy ;#]ATC ِ⢾u%=^T-ϐ3Ǖs3}6Iyi 2 %#<+ՀԹn\^&0wKD1MɝO2uޮ 1A{$ꔙ z=kUll =S!} Ik+!J 8 {h9Y, ^I2G+ڛ`{7j4|g~Os3T|͓ٟ|?o}"?ֈ.q1v9.i<<\{rqaf`+ǐ0#swuWeWc{yoV٠zz'>5*7fvƟ*qҪ#ٳkÁ7W=~vn w֢Ĥx[̍ۻOOi /I̊HuwEͼ~7 6O] 7a-g5Tv-̫:4k+o[Y,Zs9JBck:#3w2=2O%xc`d``b `b`d fxc`afŴB3>`0ddb@ ޼\Sg(  Խi2Sxc```f`F81, $0Oa{OϢ? 3?3O?yR" 01T&τ_@PHXDTL\BRJZ"/+'o`hdlbjFC vB0'D!xc`d``|ef~aj4Y& / xc`d``X@" BoxM+a{?[ ;޺ e@f:O Є/ )d ;Ä20[ R<~ko>H=%!I.P|]]y4[ R!S*>C'd|pƀ|Fax#°%";z2N¦r_vʟuj=SE~!Vd|M'+xn*c&?γD9ߖ$ Un{+̊mE:חI+=||=~Vxk'I*.Х{O~ d=NDPdxTkAMnPxAZL6?P %)*^v3NMv4i<7xAoKx귓mko޼7Cgƿ"^[`,B_-g8/-cykq([| =^,vwOQG7sx-s/o,.9y<}x6cs$P",P᳂AUHMlQVM=`#'j,ZRU)SՍD;P2 dQ4:p?;,Ȯ9c΀m[8ل¤u7q&qqҕUD]\\\׮}Ae)^lW*2IUWZYE33Uo52BY}ÞyoN pmt{rq@rumhp#Ƶ6)q(SMhwY+i}ܚ`*p}ϼ eyU *}.⛌3X󄺦Wz(Iɖp@_\ẨsTz+^{h4XqV$D % @cٸ˶ޥmo3sffg{JZjU˖b1N!T:3+3^~vf)sϕZu*Z]TP_@^  jU3TjՕ?+rGNh.Pz*w.8 TW^[sUW+ sTsUSH5Ou'V]Iujjê|գu"UJUҫ*ʩbT ªYRTCUUS_PYr󯾷ŅTl\dIɲGJʫ*,+Y\QXTPP^]\Hf僅3?d7Or*%U%j*Kjk_o}AC立K6߫d.s wMQ_n/,Xp̗{f,P[RT\e.ګ^}]wp٦M?M:?CU*GXc%K?U]\uJP].Fu-z UDܬ՝TwAGݫOuj!:A"CŪ%eGЅ+T+эT^5f՜ԼZPjZRuPRuTS u:nQԭ6uJݮPwuOݯP[zL=ڤӅg3>̚ ^m4`]ŰY-\zݿr*x9 /S8lsdkd,F0}ܩ{oHչn936\ynhj8}e1N41uYj';^j~M B|r5,b׿ 9ļ/o#xu}˭ewvbknxWz7thÏ=? pϽrL;>,: ޭQc9%}fB W?#/ _9pLOR!Me$J%; ^#x%US(Q}TKi<A4B=c<;8ky|$ !8ڹ^ks< &w4hP67e?X)H>`K~?HR\RJOrHjy ApcYYѣ繠 ShbmcVޣ:Mf:8rUjZ^Hy\0yz&:hB>9=@8+V|%7ܿ# Q 0 8aګNzAݱ'DV __]6[ftOj!cA)q1W&k4.`4I.‚\uW1~}w+`KCW/CWXh=C b(v͸$| "VE,zVAsmDӡ8/k)D8 pyqQ$01XwgW:+`dJ"$l=CO.Pz7\Xp&UxRA?Jh "g +4ad^ y$La_xYv9o❂GIe ^I~z'tB;E^dvedy XfQecYLg$|v1L<".&Wiw6-x^!.EA@|$811ncꇗ>RV B +WW铮?oXŤ6$jn6qPUZX!:^0"v~3ʗZ9*R )*giǸ|D)/iJ +@y}zg6ByzX3lj^0V avOQΞaЈH(j8\@7a9ns~-<)*Z|A"˸1m~.Y"r0;,U0=Lj#Fnc6ci^; q,}m1n1)')C͕i${ +<6!2?M!CI! 2A/ d fף)8"=j(\/EK4LT.Nv#] f6@\<>6:Ƚrf`]x,uU5!c sբ/#ʲzg?gן\hAka}~Qݺqahtl~>z>C/X/61> p!uRKI߰]HM,'{ PWrFE.Xӥ#?V[`+ 88?̈́kjEJ%0ti?JQ]Y7~Bs1MJ'd'?aĉ'Z^DArsyc6{ A1 I4 żAp,mw5<-JFtFZb"!ؔgBt5/&!aiՉ4LNtzDF@6CјCȢ0F Zˆֵ=2 ^yP'_j^X%34f҆򆊢W UH`ģ4X{л;2saɹ>({/tR hՌ]%.1++%qCܸDUu+Xھ.u'[61V64U(\w wO8hz~0dViwEfD~%,Or߀V>kXi2(Fr?ad=~&d~8$4Ż8Q}z+VMj[ou;7_nA;K0I}syM_;/IsSO~|?0$Y 71 7źVŻ x Ooz]DrZ8+~7&*?R@r?aZDb <+5e@N#D+6zmUGب QxsgǟXE:ryfOm3n̙BS !a)8x=dO'G~EF/Bi_W(>WQV+N;~R4~{@]Ew u)uu52Ku()"+嵚nV&XP7L$gՇOUN ^9!IsE(rH __LR D|m1!d(h W-"|mJuX7;ơrEWybҴo[E $e i17!lBJz[3ۜϔ¥ufo`qÜnI4՜@5OY}+r3F <}/fJ#QJLg* "gaJ`#_ z^<*DŽFy͙גϻL|DgYz>trXARV\fI.u|B"f2mB('1~&"lհbP HY5K  W)]'VI)2N.bm$S!=EƀK!"]L72)t=Q?8z[™8_ d&Vf!ZoR9^#> !A1o)8x,'6K閊26/P&D3(6 >XD f4/zL@ӛ=řSP<[dZVq{XɕhqJL$/g'/=k:de&I9m`eʇ+O0Iדz[\adM\I^,4'qQ+D`Qd8| VՇ7Z~Q%qʾQUy/*Hm`]yCL| C(vd ۨb_ٝu(Uv]ve@25{6c5 ;yK7 k+]^G+7^aqz#bjx!ݕ-'(UFdSÅ0,j1dӴҰ*2?{`r,S>V:vF}$}zmYH~bW[0N<- [ShH#& :0YF]wM," Ϳ~'VJS夳|1!ցREIT4NI 6"r,#Nih!#jI#Zl{9F,GGuxśΩoism4}(]1i;2}'Oޮe`djknkz~r `@ٗő=w@;x;;80kݕm'n})M7nѝj"5k[o^V Ӗ]Miš%[nACR7-+1bk(3ͥ\So}7+}=GH˸]W.r89+gL`SٙAhuImx,HEbbI334mXz'M]}`PW}N e+oSK[ibkޢccp[ҩ71=LJzbmk Oޭ-dː;u1x*~Vbxbr!Aw^UTh5{J˚MJwD?h`#h󑀇7?I Q{:J/UC]dK%PC;0+2,~3,:GQ4V&x͖MFvuAg351sȁz9@$")a q1ٷʝUc+(hjٹ 4o%BG.f&š< 5Ar;EGJ/h6FM v P J󲪵+l(vݞ> [vM]YAzXƭ}ؾсn ݐ(o 9W9c3y57ڵ۠+6Ҝ 93Pz ~-b4Á1R£N  =zs~׎?b2_ޭyHXW#6H! $)4W0  ~PաpMYPwG]$Mk ytdo^,|MMĎwo?ִ;ɺҊyyy"47یLGT]^" 'AH1^|y=%f?44Z֚V..ӇV 3g}Dr-h@4ŹkXX<:`p>E;2W[_GZFvcs=ʊyZ3w O 8Sx' ,Ѥۘ-+*\;۝B>J؝:R>!jh.]KEo <> ufqi)x q`dH4$$ /,z^v7zhg*zzCք? Fv8Z?|N`r}7?  ýC8,1)7vˍFJhW."z3rmdY}~86< #hB<.VS᭮Rj^ۿ)jlYlzeG n J(s#;N.lT,#֯?ٺ# 3jdz\hsx$i8f΁cL\fl1U2)D /ݰxB]?΀ܗO'_D0T6-`R:{i?D5[ |]"']H#Y"fW.,0<\kL:kzhG攽0# f_`Y,19t,kUfj)'N;'j,æ-fC@txM=-Ji2K,Wv*|RhoK h@9X;x wn" CҞy:Â'W`dXQvߣLHqJH'ZMUE_5Fwe rlU0v\#1 A.wzH{$ц&NDAq%ZcBGҶDzs䗵)ib,uw+HR3 8c:UuV|1|wx\0U ;43җ@ɹ67mvA=~[/0_"TCc-Yy5Mn拰I9KU[7$ހ+@RwHpl75[HoY4!/~u_l^]8et哔 ({4.Q!Uf:D[bn^~H"Zz-@OxbF`fώ|N(O۩*KGӫ[,bLwE*ՍP]%,x,sUjvd!oĒLQ]zk\@c !0oǡ D\>J[ʗ_ރy^`xߒ,]|Gt081–`QC$c{899wۀ^mêFKXR[S=#y g%ƎaXUV_k(Aa)Yilo luoB69t|e>mANf OD2ijAuVpyZ}]fuڽٻD`Q F #3ykT`خA6prڝFf]ieۓG iD@`Gd^h|P+BLkeT`^)bduGoZDficP$ÔtFlcsƐN8]Z XvKo6ދӤw:u bdֶA&J'#c oA,:}m]FyP*H@2-V.%`4"Oq@qǔz`ۻ;~ QWH@Q:L93MlVg6_QT^ZMa`:O;^Bmi虜Fc&hxqEEeyBH=u՗?dzsh&cm(sO *\ B\\]޼&Ӑ3;~ZVlpHŭ-2>kCS=ɉN->YQUFilU@ǡiXdUоy:ug2ef{Yy*kuf\KǾݺŃO2j-c1bOv%сdlO젿&`:21U e5Vqh=lQ -V,>k1n1G y9#ʦ޷-Mf-/Fw .C5X5HtH-.}-b$DqJAxtfODUgq݌@i`4,V٣T1h ؓies/4|rpϡc?GbTnۛm͹m6mLap ݽ[G0#݃^'il=1wbLxgx%X@պym#J-C`GT㻏?3<<8lKQF,zӪ/X+!tܔ.ԬLyivh\1#璸fhƸ̠/L2~HMշ/()--몬 ^7{ZO1Hn^;#p qHf7 c*ZHiK <ɿ\Cړ HQӆ28?5qEwNiT_8^e8T?ī(svHZ >eAO.ě h ݢb:n/  K'k>tTƕ;txTӴ/&nZhL~}5 0lnj^,3^xT+B%Ȳ6|Ls`v@J>kP &3@t1]Ku G yϸy-Գ7Ο=sځz.#H@d`z5? ٣Y=(($L¶>K^C6V& & 8S1^XQnXYUX7/Usv>cQ Jlש5W 7.S'z,3()LSp䓤AKε{c'9Jq^Sf D:u6>&a!J)z<\$Y Dr{G_ LMj⩗Wg\,_DVbepfƒȷ -ͦ)13> X/`Ͷ%,7xpE@.r\yJO*(vZeBTW>r r El+^.^?FW|?#l@0Nq6_i^zJ ̋w @mH?&R)ү"z:Lj602DnZAeB͖1JmB,GK C 57v,rv#0VgN,qκ Jk xl +ab?4oSaPGsg{{-~5`)pv_|kn4%:Od*=crǶ߃kLl #vB)gV_]nz^gkgZ8^ #=#=Tp7Im1m͘6.mA8 b Q;V#\S,~RRU? e/74`L*XbMߴ!B eZ7{E'Ԃ*m'$_1_/+m'ݡ;6<[vzI3k۠qUz-͖ 8?8|TjEy%{zfOl}!&>7QuR!$oEP %p'M_>oЙ{,Z/ :+}a}#->91<ѽ7u9#^mo=,5EU%8/~8=wwnrNZD_ -3/A9o|0H&md[9N(q/3W?@9 :q JwpYySMm'ŚC5!k˘"4B~טFR4uFJ۵W`sC*lՏaD`V9 Ƭ]~/o:uہ%1! 6BXYY|Ƴ6!p#s>JUՓ )=ys] k֬2;M.ԛ+%Jg1s췔9|9KeJ 0s?ølu-np,qC׈S+57S{<ޝ"=섣W Yb[hՅY$^gj\_XPJD.X=xjަrhY#zyϰ.+M&b|4@~Vڡ's=4 FAwN kC\;//I QP3$vE /6uF9)]uH2+`0`rr3L?1rKq:n 9U wk?'{oAD rv5YvRTPh#,Q8Hr:}%j1JSxy5>_믩J٭ۿz)MUKL&CƒnŞf.TҘOZ,o˹pLqen4og~UܑW~3۹oWB 1W؆twtU[]攓]cR+Rf[tbkne,x9++vuX[JdC̗ okѽ7׫mڳ୊=Cp<hW$7"ΈCo'TFh`,#u|iz]pgfUAv8Brix">zbm!ဦ̌ce`#/ : `k8ME@jotB1{C(RIY;pIGMp9 rặx &t]hrXuJGL] x6FmXk ǃq8Lr.7\w췍sw(.$D&BǠ+#9g6XϾ:zֿH5J n(_-`lEYf(y__xj fI_eO.nto޼arv= IɅ#-uMM}Oxo#~@5?^;ho򴜧2Oc c4/8իW|1k=nH#iNdVnQɣ*j*4'ðvDh{49Bջ^Mzt2?עѥMM-&2sy _k{fz VsL%dqQ JΪ-sԺN"X",I!rD>A7zor??~&xht0p267lFˣavգJOz !$|m$c1*DvA.vub'wkƇڛS4W9BZ]݆݃xu^=T:*M?4j~FKN:~~J<5X9|y[y9;O^::ywFRlU?CJkDc&ua1m`!) G=I$Sy&`c.l 2C-c1V7f%@ar@ v Қ 'rK[OoEVg"`5`l0-h1M<]KɩWVO¡Hc{t~28F)>ivpGt郶_7Hrt~!/ Uf~rm/㒾aO|zOJIese!Ev_ҫ; N$VcԘW fr|L I.fҟ9f<@\.8Eթg"i,-hCYmKsr&^rQ]ʙbz$-;G&wtv1vQB2n*+`M#pt=]m&wKI333 ses>!n@w5<GpGsuقpK;[ISck-i,pgw\`͂3t{(}7߆doy&F^{.k[CV]Z>OLێFmI"&aY$X!P,K@> \RZ;-J~.G łQ.gƒXA -V[hcxcg5r(VKc$Y)T}fpd˵!=LMge[^ l}|=!гՇ4;3oxaE]U:{ ɩKċ[ۀHkaMBƦZ RgO䳚;R20Ű/I/8:wz Sn-zgyf\9lԼP)ζf#WňխN'u_^ןpPxs*0IT}N*AԴs&w5\:0(S.\U4@|,>6[LLa(q|5>h1txg?/E<#y<R")YD˾D c`u&=Ջ7nv*k,=tR zotrV@<-bԑx>9GS^5䓜˔P?=55NGx έķcqlq\kȣ`4DmVHma(  $Hl/Npigg)bGn|SFc.Ƣ&`YUx7.4#8xp)RP@xtߏ5~d"W,6Ymd" N `:ƖGږ\A9ini̖*gVzrVS#RM]voĬl4f(wGBCAp5 ΪnWAOcP#IـoW86pV\*{ {skM%8\,/F ߩ7'FoBO-ɕmrW<[UC*7ZVZV dF|^DQ4GONn/";K$McE55y_ɱzT c6\1zfFeSxh\VJˇeYwmAr/|A-cqO dfL.y=-JzFY j(=q7WUmw(<"n$^K+^ hWlߣr){BN|0cpX `w"w:5UeJSFxLf~<ڹD$|tHN0ƒ;Kj:*Hbę$87,ygK!R 9IGZ<=ibei!Ih,N<5bjeeF~zkr_Q3D{dRdM._SE+<$Mkfoj{wKKsI$nQ?{Xd9CI{ޔKvC^U.m,|Xѳy Æa3c4=6>lXk(1Uꛚu&SE/#Dh"e\½ǜӜSvڗ :x9J橷=w"5ﵬOޭμܸдPYsoNBg㦪-0*\1yG0$7*aׄrI8W B]4aHq^G5[@@x}+v{JP6#cǕs3}6I yn?< S  j@~qh /t7rh1ZsRUD{դ{*㕩6eh0BU-9|0[Lp׻^[lcfnعXmӋ#-θ("'xcL)@fjC`_`IJ)R{ojOO?i6]Sq7fΡwCچ";9Y=gϜ=ΛgϽ@ueJV5*7fvƟ*qҪ#ٳkÁ7W=~vl w֢ĤxZ}ۻOOi /I̊HuwEMͼ~7 6O] 7a-g5Tv-L:4k+o[Y,Zs9JBck:#3wȮ,=2O%xc`d``b `b`$ fxc`areŴB3>`0ddb@ ޼\S0( P@AN?{'  dxc```f`F81, +$0Oa,?s3?3LO,d{l 4_@PHXDTL\BRJ"/#+'o`hdlbJ3@ vD0#Axc`d``_h|ef~aj4Y $ ]xc`d``X@" AnxP+Da=~ȯk ̐H;N#I_ ҆@R,LÆQ,,z5[T hGƃb&~1AD6+o\݇m>6EXzOHKL/ #NraB\Y`H1%hRKNkzD5b_{;ܳEFѥ^fÃC.K7mQR2oB~ixc`f F X(DwOFFOTTO>H VCFF 7J:IFFTM8 ]*GDEF8< OS/28\U`B`cmap8*0>head936 L9hhea: $}hmtx:4:[Jmaxp;p{Pname;xßvpost>4 2x| |Uo7;W`m-AA@@@EQYAM"K ٓ{wuU=BXþ切˸:.?{TUޣMUsoE&Zc֊53W-"3o^jn&geR{Ԫa[U1q1nʔ}iܣrJu==Q gzG*QQݢ꫺O5Xjjjjj%JU*C2U*ʥUnOUWU}ZU>r䤑˨GƦ(LMZrEJA~?~2e\ˤ/SX~ԌפxnV>'}^z 32I>{}j ӦM~yeڔ5;wRݭGV__5@jjzAP0CQGTFƨƢwS=zBijjjit3gUϡWVQU\ZZzQX^]vjVͩy5[-=jIU~u@TauB]RWkԵ,q2U8㰏>1"fMC7irVrYE ɾnϚ^zk{'\B|˅[uK _G߾[_ЧowqwܵAwgƽH؜TVosd0<\1Ag>X7$iC_fC_Q?<#G.}cf1ygKc q=63y|[;ꉅO|俞N<ߤ_R<>Ԕ|55f=SL=uYWo8y9҇CG ziӱq]@Gi }@ӛts~9X@.ѽPs8Kt$_8p~\5]ffe-1``^^>a^<< f. P.Myb!99݅×pGCU- 5C/-T.hb0r,zM2 Pm*F D v~sxLb((nq9iY'k'f KM̱ղ^jJR(JSЛxzyZK*1<=>5IfI"7E~b IY B";i?AJxȻ8;%,K}ѱ}-3\,N), ԧm<\ؒ%"[n#-:c!>V Z!j)PUc7r_^,X2y}VЇbx/ɹ-/ds IHG4b-yK4VXi- e$d+lٕi/+2M/Nip;3ji d |h@0%%vt=CcJ !RL&4wOzi<ٯy`] ,IO܋Ⱥm SQ]\ا6{/Rb[Me9f@s&Dŏ Ѝ_@ B p1]uPPchB7]|=X[ |n8x3}nu ~5`Z^R" V)vd 9`rWS p@TMCc"=d XGitdx[;^IGr$z-xe\! 䑎d> ^,_r< Fߠ7БB+QձAo"} hңUh5M|A6ПFt}\ݚy0 !+(&+9Y2DaͶ\V5*G}5: 9~?PVuBF2m.B:C:%B+xwXڳ OBoj<۶nݶb݂ٚ3JRS WU/=6y%8 ^ ex!ctDaNU6dsikAI/ia{AҭNë<~8pak'N>|'&7GAa#O, avVRsXmAKU~ qB {Ar$dXW_HQud.FIzgL.^Jȡ)01vNɺEz\ jZ%EKf + W@9j~ P"-rI(ThJzcc|FLDl4WXsͶ5U߉ąH́z[~hD%὚F]r?xob6DHTw;9mXJM-{Bf_T^!۲q,,n8H0'Q'LQ.xo}:>XwG:Tsl{[ 'G㱤mi` !4ަM ®&cQHr|[R\aڲ)y呇 lny>y, )2N(/dfq68&j12r0lj\a'3Ug<BLުwӇcZN{ ,Hht.W Fn鶳+l+vyL%z +W.jH71R lV|<v;&A]t(i :\wLRwjuʽ m_=5C#KksB |jσfw: s1! it{>?jsyu06xk[P8ƖtBǧƽojl eoI$vHO"#0DF) Ɏټ |XfٱpAي=nQ@I ^Y$IpQ0(GXv{NEim58^og7c 8ja0J#t }[(N1*Fslv3|(77TT3aKch!}WOyMXi RЯcwO[ՖYNZ@@x2{^S|'4^5'pzYm/)_W}p(q: ՛.<D +`R缼Pĺz}bgFdqZ\j0]txEwzaO0 [@5_UI:_3ʱm*;$BH+hEg47` i3ޕR[)&UK4 f͆ςm- wm t?QoA(t 'UKn?zxcLߺ+Diy=gG6n#[ڪ`~;5(jW;w]$l kf\+y_AL2ЌXiG:Lr1YZP>cq>CD[{*X7< Ia$sN:㈣}IӇN|I$nJ޹Ru!D'nAt~MnyHZc(nѯp +G^2τglqru$'#:G3Z*J8|p+l h/i/yAU,@J.ۘ6AO`Xǥs+r:aOF,ok_+ Wj?FyZ|%S1tO+e<Ã#BdW?BwA~ _^n.%Xo@ HEÂK(ֈ,هH{E D("y|,$(7">؟MbxI T XcgVRy("gzنқZ WY@0]h'&8XF^g;6 |]mSC?yWa ZxzwJJxJ❶e~]6O5_n6(Ƥk; EnP Rr!\Lnw[cx͸Oɇ ;g0}.7U/Hnb|J/I"_d=O Q!p3[,A_s(tOxxkT2%צyтHιz^N$ EbD58s!`;dvRPygu9"^ P==o9:3Pup=b.|u耦^q^Fr849 bA-sӛ#D{S>~Ory-8_k_v0']0݃i!mZ/S|FwGjh¯s' O5M=,:UydB+xvhGK! CuwJ ~p\ F5$22]v:In4Ioz LFN,qiN1WyL^HS49/ϝ8wzOWy^XrH#ȄȂ?"B9'r&p ta:V!cvӯg8G\RE#,Fm>A:~| ViQ@n2ЙJ^ĩ@ya. HD^0 k1 x )ysjg֮7wT=CON Ͱ5K /|{CI[c3rL]y ~; LgKғR~29UW ƨ.E}EA̦ϒh*hrWirCD@]cireϗSZxaw̞NiI}EQsAYt=*Rn"%LZXf z$pZ{l媓eno|4~ G?Y0җ{.~$м|Cq9 zzp|Fm= eȁi[9ˏ# oo& Hx7SE$=тV]"iḬk_"աI?~7'2p.cZaw9Vx4CnI<^3sĂ JGWT,>!}r; /|+r n+3*BDAi(r!A^CE2nmA+HYp"ykG&qCG)+\ vX&5dqׄȢ1u'^Pl=e;K$iw}Dc.KSTd'r:s II+蓭T GfG'ܟZuoi-еL\kC;D_TKJ.dtI00E꭛o_wsvga<-x6 m::M6Miyl7V"5h{ŌݨEnCBU=u9)xCˀqr7żH'x ѳz1v+R’So$դnnj3X;mnR+zN$(ױY B0~7~ SayA2LyG/'<>={9ʞ\7c]v!cl<NUpZ_t~BLOzzK-q,)K%6'OPLho5iNońl?PUoSI6P^_e<'PY6zΕm',c ^^C^%u;VvZh, ov7#t0.k䲅@R&or__Dź;"ra"u&WÊuke<*{O?$nCW-0ķat<ګFv]P2V<\#(Gïe6Uw@V$m ߄bէImZN'`yũ%,zaJLۚ#S@mDO[b${Cmwv%sծ0)ymAA)P `Ah- *i$[VلUqe ?BG>yNDY=A_\m,*tW?h<|l}cݾ-kD7z\,YL3"Ӹj$(VMU#^"!o0RoWFп_9c|",p甤+*;P\MhNPڌ*{_У_+TNRN-zc7>q>a{ *دy~j~EKm5L `46zQQ 9P3M>ȫb R` M\|plaW_Hsz)gscYz^ qXU]+ o.A8]O%wD~uzѢdWT=\Dҩ}Fɐi.t ;*;d3|#pޟb'y4zv$mƝk1Bkt^X"d"q+eaL>բ]SmpTɱJs_;HBhRټ]7Hᦰ UT۶n8q\^TjfrȖ:G3¤&?=in,tD m|Pu/"XT yFǛIzؼeJ?0+ ӢPMvɿ[Ar?ΪIXho4 rˣ4 ?vbO󰷶}7Sq)oQ%>Z?-z0[5[*16æqW!oxxmNTk@`8#k:MSBX,'.4%89r+ E8 -Vb}&y9;,!Ca͗E/2!$UN,cҞ BF O[ E1ϑiZq֙ˋ(v+n&Rhwʼn§[PV*Tl>VYyr+, KN\]g$ w'kQ A[nؼdv!p`u9+/!k4>26M(É\fFӀYE֊k M`+ÂDI=wԵOM$pa w]k;aƵ6طl[+6oCTRWl²Nx#W*<"]Lj"b|l1 ':Kߩ#]}I!eEǁh̹kr҆<'բ.*^]tdLtV6z jIp 5 !J㪰>]C9IzX48!^sIG=x=e*:,,W̌T 2].Yw6FzfҺhiԲ׿iږ) N+!b(!tbR粔Bif[ꮧ[1va=}E}aXv=yro97Nv?re]S FH@b"kEPE=CI!PTIny̿d-q+޽a?.5Op|z݅=Zzݪ>"݆[ʖ0rkOl Ry.Dp^AEq5"߲y> N|n=r2y>k1JS,޽otOS;Щ#"1g%좷ʽ(C]4,6YyfY'"=&<~/D{zohcus]͖ǪOGpz%D~l`-㩰 *'*[IQ7*KtX7bh&-Ce.<ֽ;T ">1}?J'|~i'X^lTx V` ~W} P-ϊt^gLEWWXeXw!I.ugl\璥l!r!̽ |ҦbN) "#rJʕ\]^rlF%64-:el& v]lHVʻ {XKWv0ӽV {)wfۗ9~*?/rZgL)"Nۼ=ukFA> ɬ3ێj_lu(kGZdF9X\H7 U>^Dd,",b^|RJ!EFvzc)C( 'sBT#Â'T{Hv+it=t )tt_zRYT:֤_dͳݙdG*b7S¼yVbt@kk*>jecf;߰7{+O5wԊ! ? r|y8g=v$\.ݰf Acz(̊ZGQV"ɸUy &vK7־cncLw6M! Pve-<>=z MEt@nAȀAz5N8WޠK.}"oWr1o+؄1 o=<+G5TS~Ӫ,[ ]G+yjZ^?5BVAV&XYUvBuSf$;Y ^37|s 8Yxb'NT":i_wQ"EkjQ j {4e5a<4DGp0 21^V}Fz]3,5]3"+S^Yv_$4k95@*5 G pAosH*wEm+Õ,ˢ-ti>V:1xiSz;fWiސ^hL7j2E~ǍR`d*L_WARchz9R+=2O%xc`d``b `b`* f xc`arez 4CF&  0y 20,`PxA#C3P) @&Ixc```f`F1, 7%``PPǰѐɜy 0/f^ƼRADARAzzbz٘'#YʼBAXABA_o_ߘ\s?gs?'?y%P u3FF&fV6vN.n^>~A!aQ1q I)iY9yE%eU5u M-m]=}C#cS3s K+k[;{G'gW7wO/o_?аp8 9`(`Uxc`d``{Bm2p30\]FS $ yq lxc`d``, dP xM/CQƿ{_BDJJF;y Dn5.nd3̺iՈsϹ|jF'2_VQ5j'3eלEjV߄$SV!? @ k7wG:l⿩A!@ѤhùVr czú TuəT*H^s/ɺT:k +LT{sr' 5݌+p5C~e^ t<" V()j)K6&9kdZ:*NtWBn 35{lzvCVYE*g2rۜ;0x=e鈔qNl}YIb+FQjn ktByBދѻj]AW#ޚqC>E])?ٵ~J`XZ:x[tzqtohead436 ֘9hhea4 $hmtx4^x maxp6H{Pname6P upost9 2x{w|Tպa'KШGmh*EAP@I!2d2If&SL2B @:4E4 6gqx{ߏIfYkFv#gWg^H} sJ:*9DS<#dx4"JzI$N,QI2$,a%%I$$O( 8D|y#SBׇ)S~/7 {أ^^&=z<=4>>tJx\j袨١7.0:2>tqĄQ7Fϋ :mڔG/SLګ؀^2rлC5%|ctdBa ao6??71%>4NBI%OH$$$P$<).!yJ$YsLD.yA"K%H^($HJ^!ySҏ`d-ےAw$COޕ'&.!ygdddd$dT%$JIK>,,\,Y"Y*Y&Y.YAVj8UJAIyMj:NKzyR4_Z IBiXZ"IX%iDKTRi\)N5 OƨW!hkе_ tw{[>=NW~nEvL!WQPl9^Q꽯Ϻ_:F)oT~3?l|K f ߠ~ 45wI/Ф?; 7|ĈF>bG\qڅv/0O܆PWno$?H=! r]1u݁< ol`v0DCL Ag;͜<* $Q2SbXhLZȆtof9pMǗ721% @1z=)O3iMs {`uU]eOp[]&WњR6s/ҩM4j,l&!--:& tL`S":ӊ2VxH>Vba[CsŶ&K!"ߩ﹛^KO`dE3C=&stLEVr(`֛@ ZeF_0szl ZOn 1ӂ@ 9rWف_6h)k,~тJpci'gFQ_W#c/qIIiP&C y |ZBjRYBPT3x+;ݗ7:q÷x߃>дSf*d2,P]pS\urz?U>PPqh5_.:s%P{ ͚M{!)6Y^r' 'Ts% MiV*aԴTmZApA ŻՖdFZrYeVsZy3s9gx`97pM&-;ޅ(f( +sׅ^iU)~g1/)y?'`{8L-VL꣒Qd2},4s~cV3h򁼫en *!Bpq/,zgjjv5r<#y{0?bTdЩ)168B⻲Na]NMa` 9.Hkag tV+-Lv6HS4Ф5ϛ`EaLm/^ɬ¥g89ڼ%:Dk5թƛA:gj"}H .ʭ,35>+$ҳAN9aH1nKјxa@{:*#ύ`if5]B4y4Z*} C 0."=)'ci{}E؅/m 2>:jxe2jK;K/KS߸#~ogzB_f/+8x}Oo;us"# :[uHp$Se3LUH'勛םM) eHw9&ASg\1)C G {)H佺9 SѯDIu9LN!<55%GI A~-.5y e*2VY*Z+ʹ*H?>XB4F<$/@K@[ E#ț$Ì 2`8RTU2?f:Îz.D8pgmZXr9Sr~wao}%M};~"D#FD!TZt\xݮƼcGO̻9.M84΋+?ߕZGk](*uiHZmln; L>|*- H EYXw*t o&ĀښkФ>Acael{fC+kM~ Ҿ,C\Znڵbɜ s`i-+I=Ϸ:C>U;v2rDPd=@HɟS~ ~:.Qj D]P2ϖvӲMwhF3rqYC*EvN߶ 9Gn< HH9sY@^Nnj1ˋ)2X5P-]rգrɢ.fXmo 0{` 8Yױ\~MEX8Ҹj5r ӻ,m8BwU{+c/}T(< #>4o(lx2?SGr(Y,?Z,(x5MXE' ο?|O- 5qv '>G^ǰx_'ڿ _{ӁQ}sT DWR-yX-͹ӻswpq.J"(-3,"-caϖ `ԍpCXV$S%_,8*IP %}*8;w!kW]W[i.{s+CfфQIeP2n(x/Gr_ ~ΆlőzLL@5 qzϙX/4+Y܁H -L*֮?F9Ay遜.ia< H$!!qa$h,nuLjU&UC|6.#e_!9_PG߸xJ~8\x({B2]G Ԁ4 xOJ ׇσv>fۉcE@ׄYT>,n28,Jw2j0.x;Sd&6Jon ïm)|4 (#o&hg$E]n8|S븿xZȫQh2"?{!շɸ 8(!Id)'yȖe=;A&' ,LmS7bmaɭ=%]єi5 3~r?gEV$6mi'8*xv~l%\)PD(9q59TSH%tXJ#f, [FҢƏ-Zy ~u~>=@!a&i\u7 oWtW`s!=t3Γ۷7U1={>=BqO ;)4#\ɋGOf[M0EcĺUp" ]4\짆hg,̡&Z+?HO٪ެڡ˪ϬE.;#Ӣvkb[ mR9+$4d3rÊW__/r~XyDde>*k h2BS5 Ҝ*{ 0Z 9c_y]89Mx]fB>ܲH֌4$X :efA ̯]jrXVHfO7~I[m._/9/Ѥ+ ֖\WU 'C-ep9@{Zw1D:'~m4 oy<; >]&FS3Eߑ¯r̰{ >Ɠ0v[Uc`hJ؞D_f IT"aa`3!KL"0wLݡTmm-@vl+l>V5DdDb5FiӒ}h@g9SOK.➐FDZN@xA`&åAb(# e2#LY]/@iG ,ƫQ5EG_ÇEs3Ho΄?Q1\0O3$8S?t>39- A NtsȋqrU)ałi+?]ZpfOm@;A3X#8uؑS̐sImoXrLKEF#\[q_*BVyPAI%lZ3H<ڂ1E&youMs~n 5&s|` pr|^›q\Zz-C86*Si\xB<`>sil,=sP,U [4/I92RS9@2 Jv6|FM5j7 ևB`r:|!C>Ԭ$J+V;|:G_A,4 ہ,tSv|ft? E9aȌ|;ʰf4qmB`qJջvUj$;gsKH\KTE[ϯʏ '{8gUZ(GwV@u$>lkݦ(Pi[N -}Akvܺ),<'̓s*Q, &cfm\Ns>F]x .îƖA9C.1cg%jՓȢa͘-j75XV=2MaWe{E_n6hS ( ן{EBF~'\uC&hٳnoĉ Sn@GC:4[6&8 bym|tMbY˳sH\j(kܺiSvNٵU[+E.}Ǹh^efov<ȞQdSi}(9+M j,q$wVx鋑!4Hvj\J$U"@km&#H50Ka|ZYa 8TXsvVl9\7Zs';N'=A?-e t>NZf/,C.S@IVDij;~rFwٯ6?_B90VƯG xS?؁ʚ<N#jm ):|~~ś/$\۲_.+r`y8j 0U1""?uW38Rf. »jŲt{XĚM99L}QkV-_F*v yWtuNVGOPv|ucC;&Nաcr=96Pښz2 b 0k8[p4SXP/q8B}ٗɫwa\ YLGKTZK MdxN(?mU^ 2 z-jJ-ա`Ld̙l*dE%EB/-RYWDnv(җ\ }`t./HqNWxV\i# 8-'XncfBV$$x/ %KP }¸u")=d(7& s$ziQZs̩a/D"w6\ʐw\ qmlǬ[ 9Q&m5ˢ>.1,pm}VOu=_b 3$,X';Ys]+pG`k}83ӮXz GP{wM/Z:RFq fk5kPٗalȴ/hӅ }̍r60 IR{tR_A~\#H71SVY@库/K k)KԐ mz87?_?2u8H2]!SU7$,TSF} ec}Iō!usYԙi|΂Cua3$mNz. k E60:R,ޖw{?őK9d[bzOSyQQQ#n= W/ QPL v*mWvO]ޯx1%c<"* YERs-FmZ|F4B'‹;,(.6rs<$B%%xV?+w*#6)ۀwrho7Yo=`\_^a5wu߉G"yCJv9.[; yQ=Q_Af)b{~}4] }ڽjw7O29+ZBռq%agש[Nx9_Ax"<@fA"Zջ!Ɂwjs95pk.q\@Tipx)/gmPe(cd@MJ,;laH5.SR՘s;b#]&*RjThվ݊ !Ub0f=JHwU76{Zs⛙[VQlbG\3~e'Ѹ7W<~^:ft@mᄮR\Lr[ ݁-C-h#ȋd %8KHE޵0@YCiN ORLr: P^Ɩ|I{(h+姠^Xhf8kU8;FNIc-o:tE9Y{$ϖoS1fC?Ptspoݖonɉj"YfөK6r1=1m4ǜxoNQa/:ƹ= %4@zy8ߣܫ:LQ [|FHqޢEAln *6P=E(/{?k!ʓRu/yWuVC_^9ٌ1wq#ҋ GY|LA3$l,4FчN,փ{;c/45 cE{B.[a-ٝ9~yg DuaɁ1hƫbcC?D4?73b.Q)bf*J: u~XL4Q-7殢jޜ>!d?6y!K}*ڛ$ "UQ~_;Mgw)@*vݜ/⩴\/2r&KpXe1ѴX[!gݵ&ƙ5Th`I]hsNfyAcQ 5dOix1 v="?BS[h.*snq_7}[mrCzC $BX<ի#`SwZrׯo &*ȭ:J"3eR,;}7VTzQ/ _ҐWXXQTЌwT}AX;'sY2"LO]MCjHv&:22gE2cVƈG!s Nd/P|AjK:Uja9\WQXd+ϧ~ױbp`õ ($=L$FD F(~!'KFD8) D]k]7[m]{R'X@{ w`iו{\_xuyȕ"T|{wSOSۻPtS!J$$!%53ץcqhac)Ul.j[QE9lHQM 8{QʡFjkt=:3}:DU6%_Nh n@^S[`?o Op+B=8 hZPb*U*o P,4PR5hU FjmUEY n2A"&dӇQ{,d)4\njVD (ƓtcYh&=2O%xc`d``b `b`* f xc`afŴB3>`0ddb@ ޼\Sg(  Խi32)xc```f`F1, 7%``PPǰѐɜy 0/f^ƼRADARAzzbz٘'#YʼBAXABA_o_ߘ\s?gs?'?y%P u3FF&fV6vN.n^>~A!aQ1q I)iY9yE%eU5u M-m]=}C#cS3s K+k[;{G'gW7wO/o_?аp8 9`(`Uxc`d``_Θ|ef~ajw? ;& xc`d``ſc]XL@"Ƞ+x51HBQs5T444֔HAPbf j(j0rhI p1&!!ˆιsA@"86 V6=O_7b2K k",2O!SKzMrFR&<ÑTc#'8."Ni̝[~mcqG_qȚ?A5{"ڒUE&纍1-n}ԽޚX>$c2{&KDҬ1Ľ6VI*i0%{ޕ2Z|`tGLcIEM7u;9L80c:K頹{2eļAONz P{xTMKA~V*"Azl>bA@$j^dLH kJ@/{(ΎhP+̾ϼ;3,A+rl 2n,KSx8g3xS x^xthqG2;1Ub`,YgmFjz|Z^ 4 v"=/ΊkjR*=_;ZU ]HC{#KH;ay~Ԗ~V>w8d_ֹ"bP2+qՇAO[5qCHzmRNM+\Anz苊[yr;gXɧFkhu 2B=^Ƙ.=*܁5ChN& [Jq0 SM-vM\17^ܾ麂~ccU}#ٵzj( `D_ZxTz5-zOE~}2SyNly@*oؓu졧$=<&2PAL>*DfPο\!Rq_ G澐Q-EѨV*@ u?^jչjٿ/R]xc`f F X(DwOFFOTTO1t >4CFF *;1HǬFFTM+D]*GDEF+` OS/2+R`A{X^cmap+*0>head-36 9hhea-4 $Yhmtx-TAmaxp.{Pname.spost1` 2xz xźvCOŨQ& l ) {f'3}I&JB@DY@DYD:u{{=39쫒^e_}«̨Wf1yy̼żüLef3 :&`1L2ʤ3*pq0^f.3?%RELر  Q$!^7ݤmO&>9'EG ۖ<2,)h~PtphQˢ"V%FmY81jQtXDm3f=9̞4譐;vҨwǾ3v̰ĨABbBF206!:hC$3ða"L??3y}yc93 5+_Wf5 Mf(3:a83yɌbF3c)2{f"u$f23j3dfQ}|a2ԁ Ebf YFYɬbV3kԱ$.1JLN^bX$VMb8$NKx$$KJ$2&]Ù ɩgҙ}2cgM͒Er}FD}~l@݀o \c$/^8i-5/_'+710zॿ˩~zٗ_yW۫o~dkrn< b^C?ިyϼɾқaoͶ}vhP~a>>6孬n ;|qmi#82vjdȽ#ώadWY͒f#mG;YsO#%GSHt"9':n#^ j`S,wv ]tJw Aǐ><~,S:Nz*pf`1L##Xj# YH@6 *i@?.SȁTuhj7[\v<BK{8Q+2a6`x緲= 2NTYSH/Ks]z붯J_kr,Y[%# ٵHd iFAiLL&)hZ%o'߽Spg!.nȻۀ$ǮWz iZ`N!jB䶱ߑ`kCSX~ |U2 e߉~@[yĦ%m O^`skA5TVV[rͿqC~9n[[,aj꩙ڞ9H-`D*P-)k(1峚71{_l?ǩO:C7N(ngt/`i fS`j6!&7yO ~zFfpdqdا@D=G^x깁6K=xbmOZ"wjsÿqhmdڕ䫸&&ہ?vKAkƚA,]{4pɞ='O` `??ğIٯZ_ as֭UȫUI> D65,C2 |#ƛR0{biSaFsN ڄ6 //rtYkl5.nyC $FtsyN[VnY>@-(o$SrXHd2>&cXlKƆҢH>g=x;}(<½PlzʸiHUzS=ކ3p‡Դ8G^÷|߁amYnMQӌHRm8up_89GbߙLuf:* + +]y{&!OqqdZ QlΝJ%8c`, NԩMQ4SDA20ɧc;NfY3Ԡ|Kx\0ƻR\㖏C|yT q?&ؒI OhyUO;Oӕv諼㷯K8<c*wRy&: 斘kP j,ڷ`n>bCIe&ii| 4Ho49qVŗĎ~ϋ}jrEm[^uaQp 05.i AK>^ԎQ~ݓٲTHf8G@">gVm<a2듊ٵ!EM[TjeN}Pەxz<} D іF[a,5$dƦE)Rb:.Ӏrx¬홟qqwnIvJg$-o>dT%A[d6b FI=>Pii*S.;Gq {6LoOſU0acF7'aWEHGǓ~M|>JMxyþ&:w3- B}A|Ӥ īls{/\2{턑ZĈ GTSh1R/{ @PR}Lek mr-ί+w9-.{Ra!(t)LIG.M4[L:#qfGvUwrURa=DSQj2 8d6UM{=mOOUcW%'Q*Gvz=ț?2lXV.ؔNG_,<ϻ ?<ʷXb)",zB< ft՛beFi!6^ƍ矹\a-gd^tArI3*ҳPMD^m@V7DPU- #ԙL-S+e ң{*\^!+go Ey9rތw928G-`xl?ܹ `:n);g{r ‡rZbQM/ra>at`Xi)\¶vt^'n rʩJڴnv^Α<"9y ў`7O!הkMrվyIT@u] 1 ̔m!TqZLttEv7kuƛI_KFQ>ڸ6l^V`,öK/t8V %~ ' _XĹW; 'V\p2û pM62(+]={wCYxC|m]ɽGjGIU8td+. G.I><[gܭ՟58}w4 BΝ_$PaJS\u3e b$ky¦y gP>Is }(F}TUx .Bmˑp;-~x&gYG q_t/vr@l66kQ]coqR $H(o_';%ApriY/mϲ.Ϣ&4;H&~cuA4 gK.jȳE'K"2~9`Z;d:j|H{W!0qT=7YrKzgx-rQê"RQPKջELwhF1)+p⸻^l3a>;^GяB~8tgq&,Hg1Zs:t\oe8*s P,f}qޓG!ҟv)}5*M/[̒VT=+hD YH>K^gFm u$ {HlY2[HP#J;x:Ag!`U֍a=H< {h? .6 &ǟDiuD ~VpIk%˧nX:%adN",,kqatqBEucR³hKmK1_p-ZU>j=JJMBo"#fQ$iL"x 7h~qT<(09LW hlo5bnt]xY(ƅ9p= ('h6.eMSbߜ.k9\6|¡pu.\ʩUn*)g4;rWrʵ^'}`>x by*+r~} =1?490rz@&VzP S:#oA{׻Ƨ[;d{xY@s@#~ǮɌ' ŌXg]ŧSD /D1@mLM˳t&xCpMuʅ(-V.ܔ]4'8e bc!WU(ž[{yzҭ,GK:sckRSD&ޣ/؛hS.5ڶ: ƼM1&C2 ')Q'3/LY% 6k,@ٲ$擬@I[ ̮QV$F;u| ֌Pզ$CE)w󐭞Gd$q95?6AH9#ksXw'䟁' ~Vw`r޾'pZ8 ,^[kqcKywoo-td[Ŕ% 1Los9ٲ{Eٹ2w/0!tLC'J;&.(WlЬ,Y.hw;'/T6EL|` J \8,5ѭp }~e6RS%2 ʩKnZSiJƄjѝOw #9v6rM P@!%gMbؒF1`kSIH-d~;뫑[&K1nZʣt9lZRRZSc2Ret=n8ul& $@4Lkx׿KoIas־d9C꒏ EVZc7am*>7)",4i4Qפ`o\5"_h>)'2*nFv*7c:Mާ Ͽ&OWs0{8MZ=>_񁯁smV^XU@cl=ֶ^|˯5]/UZrkW[VRhҩYS6.|kX4eI :jΣ<ŤUPnkBclƲj. 7cSNAf(YJ(3"C)h*^a:lHD=']~F|^hwu w8@~OXE$pݮwhl!7XurbTC lZ]I恃GiÅ'='KH~e.Xfݫљ1Ad9΅'iDdYœ2 ו{+OzMvgh){a! }>۞[w.6)O'iC^>?>>ܦc}~sRTU_Jc}RO\S߬Į\/dW~~shG\2pXM ݮ .‰=ey;:4Lpq_~;>s]tKK[rJĂG ΠjOPwT?>h3f!:s6-y\:5f{+zH,O -Be;)m''CB1^qO aѷVx nGn;l:lLeT~CǧX%=s_ M agj[+NBiDa0E*Ӿ7S6̕<|p ojeaEtD1Cͦq])u2P g)9 ?A1_WYV[\zJQ[]E4;NwI}7܃cx50*(CfHMY>k+-/26(c@@Ua ʏڞYhBPuX*`],DX96\Jxu7*@ciH~Up9J(dd 8u"• wbhG[hxi % D?mgZBkɌ~޴D/س@<ЋYX_Y5zmXv3_\!9ȲI^8ASYra8H]†yx*C!I,=)%_'3 s#|8ʰqjp%~: :H ?E&~-jc +pν챳?` oy5Z /AC.s,hpE"9(p<Ƙi4u:[7ĥBUDVEB\bԡP kQ^YaYmg"^J("`#h٩dUhDNlEYޫpȧp vEr@ɩň'&~s@_#͊kksÛ\!癚_&kh?ui&=iHyvKѥx/?-R@,&Vdb^jDē%=Vi8*Ly`k\RLÖF}"!qhٲ1& 8sP3-иQh~^T.'ʅO{O p\ɟ2_%=Sv)wK!䐡}`Fتgpϡ ٦ֆo\ n뒐.)i}Js;%=;tJ{ {wHOvJi\>RuwICm..ڼq4VzRgqclr"M$fOj͊DxRTo٢t^ݱB%/IQ1;j–m]R7 S}9QdYd 'oNHB T&zu9 RO#뺕c`sD hutJq^$Zmiٵ:C}}kΩVeY|DZ5"3S n2]^kUam/ c@^6ɳط"oܷVv٩~̀,d)E ZM0mJˉR$G&(2R4$Xx-4_v5%($ tꢠcG zcPQ2 J>+3~Yiq#Fݠ6$A Ua1SP"6aAm'D7 ,ʊ몚NVtvbJlԸ:èU* -]/o}%}b~mv0 Aﷆx$GIϣGdx0x/^xzW0(LX\  6z 5kO^eF3}%Wי2/@jp;"m)VA,)Ȍ A\r#uB]*s{JIC#6FNP/clR LPP`0ddb@ ޼\S0( P@AN?{f d]dxc```f`F1, 7%``PPǰѐɜy 0/f^ƼRADARAzzbz٘'#YʼBAXABA_o_ߘ\s?gs?'?y%P u3FF&fV6vN.n^>~A!aQ1q I)iY9yE%eU5u M-m]=}C#cS3s K+k[;{G'gW7wO/o_?аp8 9`(`Uxc`d``{ m2p30\]F 8xc`d``ſי3DA5wxMJA)tWDa**!X%QABvc-A`+}}$ XZR;l"zE3o~`F|c6BuTc." u;ɺ6Q%!qIHx٫sD Q $}ɱ&CTVI)3r,2{={K+,g;@JI"0X =5457uS{2e|Yo;Ɣ=kTz:m%CrNș{/A}07[zF8iP{xMKAǟլ-CО<H6/b(HJ)A͘I6agG=c=C;VkQ̲;}23!NJֲCdyY*:E9zYv?-/Я܂<=w_Z^rݏPvrDء%:<_,}XvQ˹_-/8?fX ׳HK;ʻh4SJHQ"JiB*bS p3m$m|cT%z2m F)/EW+zVMU7 T2e[qW$:-'ta!QԎ"hK"ցLL{ڥUvG=hz٘Cb|S@n9H~|-PE|`Z^C5e _{w;lLg&o>6YvD<&sm*ف|}1o=>|UhbzM=zCSGQdM-jcAפrB֋ӿոƸYC<3ENSpϬZ|T`F,m;^AMd#[d2GX+J#ޓZ&cHK08J'" CO2֘<;24ڼ3Թ=u(#O\cz'#"mxQ5LU/KDjm!Vxc`f F X(DwOFFOTTO.L 9CFF (.A}FFTM)]*GDEF) MOS/2)Q`AWscmap*4nZe^ohead*36hhea* $ hmtx*ZDmaxp+x Pname+0Ppost.8 2xz tՙiq!%FdL , Kš0 "[,k[Rzߗ꪿V%˶ll &!a 3J4[ff޼T+7srssBn]|ke{\qZeSE{NM99-=g8wyMwXdo~z_ߞoܞͮA/Pr);94t([xךkך/>*״)V]U=?euG}m˪-zG ׳/7W4OnwsܙsW9?̹'ޜrQΏsy0硜s~ӜGry,'r%r]d.JǪ;r?ٻDn O|3+f['s3V;Pw׷~Xxߺ?tw5sϊ$޳<'B|5?*Űjؔ(;-=[p-nR }I} fi1Mviywۆa NB>?!5f3Tn5[L8|^4->Hqp~ $$ZvL,򐴹ȖgE9N;6YadX=ʑ5PvcdֶlUݰrDv$, T]:R"(Ҭ5jPG`NWFV`W镱fo9?#Ѵ5KSCıL۴ -zp8}d2O$"މgva->J9Ai#Iq :5K4IC[&xx|'3S.a鏱>.H1qBθ (">q͞-{7a%-UV;exYDq41`o&F:iZu#4ACR>m9]px|پɉ#{Y!W qp.YSC;Tn|Җ u!s,.h] Jʪq;@r8`/>5q2~` U y<:<=y(<#D({dZq:zkmFA'5Dy+wY[6?f|Ekįp"FS'FFQ4& tک4+ 5%rd2Tk.9 R,$L!Cgi4~!7іH{ҹ\rhN|yzxc5ݑ}|jjo6zsnGe: ;?( @o{l|*!3h)Yb\VS)A-ς)?rT a'^=rR`᳞X?/ʼnӡd׺jkn ׁ2S6Ђgrɠi)_ A@WD:_P{Ex-vGx钙3Ācyva衩Lj>88:~0ԎH|L+m6\K!\D!U%m)st2m4#nzyZ\5_ <$ig8呅T'cA5 8x&+RhI*^1@b 'O=x!5 9L^j?9@D,h_. 8Wvz\@с>O^VQQ7A-{2^>P`l4AcL2bY7+jW1,@8an$kZ`B[d5mM{*kj-M{әz>x܌]_/nAXQf2,vL%5WGӇ2iWze5#zSTK~bደ7uzI/FաPzx%"s ɘqllQYZ[](3TXT;J4r@}㏍1tcqX\$jz]*ye֠2v4$fi{+7jI&S,Kc^ᑷ.F&[elkROSQi;դ")kri!Xru6އܥ8$$zݞT* &łCqH h*s(sm|zܧZ9Ykϟ}k/Xr^h0T̤3P|?~3ׯA NtdCt+έKUuf{CE/_uq]zax2Nv%RѤ/ 7bm\1-G@7r~R`2jC8'E;9->"O0>J,N0$(EtwQIk", x Aiѵ64[4 f;)%: z? ܨG\D]Sخm˷nU4ޙ}HդkeL;☪L  .g4r %)@s|OT,1:vqP`md{?Ȗe5f&-X<>6r4}-=5ǘ9\j)x%a#/MdMNv3hн8Lz}n\e"X { LVV? s'#ԘO!d峿#@xbBzOCaD8Ч`9qНm6=O֚p9K\oe&kD`F ÅOyCxqk%1*"FwL";Ѩj0tjBi? 1c#-]%;bSUYS٭D6{=@q0{a C`%Dɨ3t$ZYגPill8ڤQذgCɚ646յZ,F4^[`a8`b78d܌goO`ɓ0: .0&H 66]{fûq-#H ]^^/kWb`06hUV+٠Ql{@uyR{n v& akDITwiv<6 z=K cꜰLK*(^ϹWϼ Ӻ"-ح2yR=*x~IeH{vsފU]3?4L-5oLΣ8 CۋF/#ñVݵsMby-qݕObVM赇Ѐ8y܊gK6TTZR;j^j밼>oXbNJA ޺5z[ @&,WU V#>$vX1/fz?؝B_F߬!m<-A]wDxԹhlj:A@z{ %M*MBgĀ ~SșgTgtJG2HׁKd*:;ڊ1+Awcb{?><0?}꓿D'wuvPQ6?{lwþq͏7jF] $˷x3=~2P%!YP[m;Ӫ6+mOJ+*IQ;hxKZ|u9tHR},t֕ȟp_JJ&y{Df'a? @T"-~O^~tXjIH/_E|wљ4 qr8Nm LA})=u_~Q2%9{ Ůy{R\Ď5D֔Nv熇45U^Zd{WxcQkmeots+|}g~gLuӝ^Ɵ۟J$Hދ/]>{cC xٱCEZgvib #;2lakע'$u|'cu:T6ʞ]67ָD,VAER농DśϞ}Gf#>>&hPa%@X3;`2-L=.,bhRYWFtW*Hrv{͏}/TVv6BYqUMx56᥋hE<@ oek~MNޛߟϾ[ αmm qmi:d 5u>tΧ ]zB$?4Hh"ʢ=кP_s9X5xoxk⭟ M`42 DX{qBtf`FV0.A@<В?8Tm:s}Ϻt#()fo*pmukccGs{}g4M7:]]r$0 1>1%BlE.h3hIzJCSbUIkMssCӤWqXbcsO AfLg[VqϐJ.Rwv7iV_4yY żB 'b#)Xů& Zڪ[W$QOΝZzUڗbKDo`:>XYyiqoJz Pρc_8f<)Mik^c6UC\,氬WaRܢ Vc.AcYP<)ɴ 9rsplz?$p8ꆊk?77?5tNb J $ _nBh17(vߢvbo1Y|5J\zF݂;S#( q KS9˅,`iA9{lz&=U.e [Yo0;<6r:ożQ|gKsJo:INwk}L1|F6ރkYvڎQtcsT6Vk1jZ+=e˯ڰyBeKE( Smֽ>DFdfaO8Z8=Kb! %4iVN#v7yju7Ae̮ՖNW)ʷkti+WW,-p_?j25c<0Sj20pǂ/{@'cP`hHpJ=S5l3FSu޶:'!mM d;ҽ2z_P_ů'z1\n'c7QX[e?ɮx(eo-Y}]nrR%١T|v`aA-[8ws/t-g1Jom)&V{){"E6as @2`}v8oo:=71x&x1Aa$hzk5ۚv*:HcRZ%ֺQRz&e/,x}~AZ %(?׹3ɸT+ŶͯE ,/۰uYj:B[B;FNܠ油,F{yTź02 djxsgG#Ǐ?:FH:35=6B0xN,%DnIQѢ+/kkX]{jCJ"qǣx4e/BVˣ[+EjҠFɐ6 F#؝`)\J`YŴz{nbN B?I8>,8rM?+ E2]IcB` 0URF֛+6c'+u}wݨNa g~7A~NV]ZŖeSء!;Ks#13*;+4EZ~eilG MN ~3hWXG\|o^!c%N3N/޶ʺ6m[}P57k?*5C#oN>)~'AY^}$1Y 769\y ޙ}$:[eOl -G6 =|qc:E6sUR?Zӡp;9p(` ERr`Nڿeצ-F2i -|+v{l0~$E|$As#0Ba]<$[:xȡx" ǃ oN:I'8*Me2E0PCj61CvU΍! ʄ> 0@y[ j9mf "Q~\3ёpXB@27$7Т%`J6++6e>\\sh#Çg-?N!o!1[mN\mԄ#6`h#vd>@f,zq^J`]ZS"۲zdp*o alq9049xx/x̲^˨L$9.|ׇY* 5apDkj7I͸Hχ|љɼLҫ X! H/'Rdx3zF r .Zs,IAj[̲6Mp^i+Z(Om."ls%uuuMkHXd6$Wik kݩ%1;Jw Jz$CvlvhAYd5AZTVkpڵpkw剥wJ y¿~P3Wt /z+|Jmy=2O%xc`d``b `b`By fRxc`az8iCf|`Ā 0y 0`PxA#C3H,2JZxc```f`F|  Q (dr?F@ PB L,l\<|B"bR҄tRȐ Pxc`d`` ɁB6__EƮw&} $ oxc`d``Xn2DUxc`YAAi3 s=:SIYfMkI@vs,# Q fA1^)031X0tٔ!d300P xTJQ=RB\UQL (HT4RJq̌Mf$hn't覫~@zY`1;{=U-)xa-cldpO9ipgϣo;2['Y2la  b7sM?.#@>Ra**|PҨW DrTlE8,{+ZV+Պl$zʖF{.SxcMIӊ]7w}t9UA%s/!1{pn֣0GqGɪSL(K һH^-ut]T]YIRuag#8gZc<6 hى6-M1xpՀL[DD#]g=$&瀸UΣttN,J9U:& U e'fʸ:&4Ny _)P\B\溬uTzEo>ϙ{o؅QrU[!{nOݸNpx#7VBC7T0rU,h~_ckXqnuOJW⦵Zh LuyέW#|jWcmap%head36 9hhea $hmtx4t maxp1Pnameopost 2x7 tTUS`Pb@@h#ʌ" D!l_UZ~F a65."`4*=~xݯƙgΙz{w23,ˎx.j݂ܺU NYT8a1,3EgAicwe.mНδAw1#ӆL fs/3<`2bf11ff#t3)=#3+[{3?;MebQ0-=8 d gO[YYV[]e57Qkʲ꼪(O%%Uey1tƴ8x`mMq072c8q㟖ẍq0'|<b$`jd?t 2͛q0rUeuU'M>c 5E ז^WXPW0y3yʒbXf<<̤0FZY+uNJ^dClfmc ld7-kVL1̃L6a,||C\E"دyp˸w5$$O|+?C|C'$ߑ<*uɺd) =xGVʔC& 3,gXQz^#CVPBoVIĔHy iǓ/*dTi$mI۝NpC|$߿gvl<iBT"OFEi8LĩHnhs$N&#Y@\@KH}7 6w # xN  (WFk#`7xN+ ?6QtBHՁxLY&?\= KzkW$!*F)8#Qn>`q]FЀA#Eǥu=7"(6 Q?]%dIB!WD vm =|x3G8*HC.\Օ)5J'w8ܳ-$JpQb hm#%5p&0 `kWTԦ d:'L1`nЖZ`zh[LG{J! L$G9WPo,>P_CBe =v1U bNM9c;]S,B\j9K١:բeVT 5V`(Jޤil-_A5fAYQN P' zscW $]Hďr"R8ĞnG>DXԼhO^sX 8 x:Ƿ Z }VQ<Ŝ`|mSoߵ;r(Fh[װطۧ?N?*c_)~:[k9d yTw! @D A-כsJjb۹GfZ 2N pew?ӉNXq_>r\^G_kឩ.X4Z*~5p++%\:vzz}A]ixXy[|-ClG>Dn5%tm~es) h!2"^3r=EU=4.^*h;5ҫ/u@,rtmv:íپ+C-Vy]׬1RNew#W/]TYBA㌖2ʐS8^@Z T?,+}/k#z˫}$ȳO>6Q٬ԕl`ua{@ؓPcԼB95/kg[2 0c@E),`''} a3=jyřO6 8Kaoh yHjoVԭalW$yS'BS%vl_ GF!) pM`%nq3~638m&b,3M llvJ.E8^㣑[\9l Go5 ^ Ovd$MbFH3Ω]6b=J+'$=Muc_Am|$Sޢ۹ҷ۽#NSVS[2 uuC+:[›Vf=otF!`joca3*T9 (L( tK ד1o ~ͮf=&O3Տc^RSNLJ8r[uؓ6؂z$%^^QD;:@I!y)2`y[I0Py<ǧ`[!4uDޮJuNd< q7"w=9E{^- ݊ ),Zpҍd^8cVR+TPhnxxQDZ0Xe%q\[7e/_T*$%*R2ΒBj,]M~}4ǛKX<gn  *EȊ]t"  Q YB$ |>cCޯE N86˜ "%#^YM*B@9.hԪ[6z>bHZUqn;0Jͣ@ޤQ@rwm/ڄKMoz`0ddb@ ޼\S0( P@AN?@#Cgxc```f`F (1, ?%$5bj0c̬ 8QqEJJRJJJzJ/bbb{ @HzCj+P}[_ ry^={Xݕv5k gbS,$ƎWP0@Bqu&I,xc`d``m2p30\]F=osgZ 5xc`d``e d` xc` Vfrb0g\p Hi1&wLaI 4,x9(0X0`ge3P(4vD@S@,f3ZD e gaz!(P1xTN@=T`Al:JP9CE JAnqxDR~@/'tEǓTm,{ܹs# 㟍W[3GgZ28%cp<~~5l/b>Vg/t[Xg'3xje. ye@= ^D!6z:@`V9VQ泆F;oYd-;voUTb\)N(Z'm=z?>tq+\%7w݋=#Negu&##zHENP z/HQuʢ&&EczE=] 2cŪSQbMNy60ҏQz:c#GWV̇ivu-#)":#z,c3Mq[k:Իhrg99& U_:4Nxjs[ P-bbu]שtճ{bec49]s\s#P2ʶH/sr*8ܑrwH 0AؖH|)Zp;Qwdfp @ &$Z{' ]گ3*ן'=Axc`f F X(DwOFFOTTOX CFF WP3FFTM`]*GDEF| VOS/2M`>Wcmapڄehead36 7hhea $hmtxu||maxp|)PnameopostD 2xW XS׶>p*U6<>u@[DՎsFD :  32(: hoն_ﳾj[)>a޷_/ 9{k cX}deڳ֦R{9uwlư,q#.da"8엒;.9"'g/ga#FʙF1C6͌e0&Yìe62L`3Ō2uL3g fŎe'f. 8eޝ);sSt8.nNlNnFF2]3=%yoz2uwvAq܊!X9 "v A ؅C?ˆ`y$,Aٲ!3qÇ+ a^W;M9nZqqΉ25'}w渵)驙)3ǭL{{b&<NVW8Ϯo4J FقR2DN"K4d>y~2@6!KZ!MI<,[&rLOaZ(lEo%fsHI"Ny1)#%6x*<" J›&d @ji4c12lr50^.UPUP ePb4M,("gGst˥,VvKZnHpb7))KN>j,wXX3lzePu%e8QF7Byxxhq'ݖ7$@ksdZ%ccPdU#MU_y+.]/ XoqqS͝[k-Z~^}y1pZ0F~j:S®[7BO'z34zun҆)1{c}Rڪ#V N ~\YvT.yrƜK[N-,$Q a]U\M;P$JUbxGcV~RJƮ§Mٖ`)xՊ²2;@<ޣ5-[tlHxs@~O勤>ժ]u3+#Bf%zuW3jw /6MTlUwwO ~\szMfDwOX`2C8Jvvq9Yt4 ?G FsޓdM*^[v[8 ?9wQJ{ax@6{$8A!6=Dҿ9yE{&31qA+m꾞ݐ+/{wuo)8Z5}ֿ_F7]}q.xy/(&Mo@8kƋ]jmVau-ѩ/7z<2vW-Gj:bW&MN]fvnfֽ S@`;IBJ-{jӎ5T;`'Jn֙qREl'l,3;- iK &rh5Z hG߿AV`!/4\.EC h<߻'z.4V٥Fͫ$^$g@k2ՌgVݯ1R[8V$}fMIgp.FO3A΍6ʼ* P+6(^y0.bk_Gx r*I54Cm4uu,4`IgaH| &[1ISBq!tnDBqk̶2_2!? rhyu8+dDR:-e~+VOT^|p/ 6e&jz$| YO']ӀyQ(2 Yў[;8Me8/y($DÛU%UTǛ^BkWI0`^D^NJy&tثlݿHtY*zٞ^сEGAy lR$f_osfG@4Tђ/H#%}VTW)C d_-Yq#܁+oҞa]8 -YBGdR ʄ2AڞSpt98uu=up^wlOxW<'ypᯑxXFDX-q%~Eg,"ţLԽ)?GǪ&Ci!ii9;iPdL/pD|4=p<</|9HҀ7δϬmWoT%#;3VV0iLIHء:CYܓ}xާmʣqG@h9VT#4y!MO/-~nsx!_csPFVS:;d8=9f@!b- vZϘO[;Z]enuQx)rJ[*_. OH)܂p \c~M$P&$ |CPU8q{0( ?6 (u8ŋH"3gb"oyB?-1l*a 4'(|BTК\i;<?ڎ6'rxX6Qۍ;˶m-J+z!.prRkPczwB;PCߕed7 +MvRקP{u38M3)ZGZ,Αƒlr8vT-ȡ#{>uUo(3n&nS*߮V;_$ sg#_ -+g''*6"7P<'޹\~̾ _3n;ᅫnz}gWJ8"엔x~oOA;K/ђӈLYEt#%xD_]?)A2oCQB22iҼa;HT2Xi56I/X pqNv_?c8dw%@qZֶvSKoYd\`BQ @a=2O%xc`d``b `b`B f[xc`agŴB3>`0ddb@ ޼\S0( P@AN?@ #xc```f`F1, ;$5bj0c̬$$tX[(0hF#eRV:̡B/P_Y]pw 0xMᚼ&mDF6`L`Ys0p`*g  ڹy`,o3xc`d``ػ[|ef~aj#g $ Kxc`d``= d xc`)a +3k3X0`x̀lra~7  # ,,@u 9Pz:@`V9VQ泎FoYd-;NoUTb\)]N(Z' z~}'$V"eKn'-u%9=zF p L$$G:F:G;g&^ԑEML((x) rt9+[YFꅢTGp&<A(=JӇ-)ҫBuC~۴\N`{wvfkW>cmaphead $36 ٘9hhea X $ hmtx xWd;maxp Pname opost  2xuU{PT?݋Q X h1F`B:hjJMՀ",*yʲ~]vaA>6`-1Vgd;vR'u(:Ӵ|f۳b?~}{s\h%׍Eog*.)7!,‘gD]ͩORhj鷒E.kH+\(Lqv"0$d)YFC{%G I!H/9G.X۲S>{]@#fg6/`cn |۷23CuG%Նզ 벳7e~.Jqbxd.1YLkɿF6.Hd9~rpg5ƧӼXsSݮ5j~/_j07̖fx Q隴Q=cutX[0]ϯ(qs ?Å;=,QrpªôVFyb3W*($tXdޓ cM=XWר[ѧĞg#Z@c2 ǼROf|>>:y U<a\r,WQR:U8TܾF]`[ݴ$iA7u74NC2Cu j?æ${5`wx\w'︭R5AwyqQ(4i_uWSc4ӇkpJux\(@!7T3㎄k*3 A::!–&,z45c^*^I cjɗ{򺔺СΝ׭#3E‡~)[gwg4P yy7zs^Y"#HΑ_y+ 0Qtu*?ڴj"K%TKj]Qb2kIZje}2ǠZl[U7! G'4Mo׃${|aݽcyes&v G|Y}e]eM`ݷeJ^kY-%h *K3# RӂS_>u_tAt w=7< K8- TϹC]MA.c&j#ʼn|:7d9|$h4 T`rп?p ׳ɥPk[sNX yk{589~qJ=2O%xc`d``b `b`B fRKxc`aZ8iCf|`Ā 0y 0`PxA#C3T21nxc```f`FX1, @ZA(ǠɠPP˰ff%)enTFgsx[_ rzㆎ$^<"<3b!d&`ec+Ii?"A 7@(xc`d``o|ef~ajNju9* $ qxc`d``uɯoX3D$|xc`E Vba0g`-47;& na]F_@!ɝsw u@Ǩ ) "sPxTNQZ5m` 6ލ G7BB MJ*J!ҹd:mf- |.]'\ۋPCMP;=|{ U+-xd-18[hlp?f\r6cu1}If+s:J-,3Y< 2fpO3_ ^/m`=q H (YCQ _H7EOEKQ `׿TOĊ*ZZŎU'-OГhehi81.IKn-u)9=zF p L$$G:F:G;g&^ԑEML((x) rt9+[YFꅢTGؾCS ki&CUU:!mZz'ǽ]ݻy;dk<7wNF)# bq@"Y-3fnN05w΄ɸ| .ڜVB=5dKا-fXs]UDu*v[XFNg=wx7WH%8- !ܮ N.wx@y2qe$_V)2;7qԝ1+ܡ$BkqE}@I-'IV*^I*HE'_ eAxc`f F X(DwOFFOTTO CFF ٯFFTM]*GDEF4 aOS/2TM`>Wcmapߖhead\36 ٘9hhea $ `hmtxЕ\maxp@4PnameHo post 2xuW |ٟa""5Q$0G$ T @H $l53ޛd !HEşj$N&bۙͳO tH7-t+n7z+NNAwһz/AMQbf4AN&~諴< {+[-hC7ttosNy&$'Zʴ=a*D4`(#Ξjv+6M*V1Yj3GP<|iqL.p^ź%e5vNؚ maݱo}5"--un`n;P}r[o5hex9^bNm"#!MsA K2#lRB[ `OvN doE(S= a5ˆhga$kG}YP'  Ge<1>f<ڎGx&wK>h#@pPB> - e&-J$U~bU\b*~aq{~OcH4IB 6fS ]rhN%zja7:9Mt(e^_?& N4 "@Ee4Q;yg1N/2`ȃ,%J9zЊm1RUTrnp3vЖX߉4jߏ1|S #bd;G€hLwBl2w2h6Iy8J.`:eūMClR&V[a/$ y-4ODBk3z2b|ʙ'ӒHOZ n 8cEB3 u~T/d{JDhl@)ޥbhI RO,G4$ PnQO<T}nsGLTn+O7FCnYV@ӕI~kapjծ$93׵gh }P!29 k,Gs.M:MJT=HLx'E勇}Ozrnl1mgW,^Ri+:%t4~Cl Wht#@(>`@qbCh7.T5 җ JKn#΢*\<:8L*qƔlKB_ّ}%`ջhԯT\AgJN8F砟cubS.`s@eӛ[3lߢFmE_0Ȥv#΀: -.kHd(17}r-뀐kEp< & ItC (!-Xy Њr&cLk2n6Է(NρM!bޜvfC #G3vCs]Mz>heu" w@t5.6Ps{OAO~h(H"!(A}n09lyi*c7Q7 75:XGM$.\.9ʞ囌>HގL a^xߚk r$KͨA=ףk0ͺ#S̉Zj?]$ !X(۵pM㚝-\΅U@.eFA ȓͻ9[mjY2c~8ZLB[d{}- L#3tRZ:Bq#ܤ͛޼-yܠП908ڗ27dHK4J&MJK|K 4ʷ௨8=h)(NKuJ-P1F.R^9^/"cD yJ R {o?yRuoITuzif%zRc2/Jr.1hI4ڥN 7_2躱mӽͦnB7Q`[(I)j:/}5rT #n=_—T(_QPbJy~tB$yABB_' KsFq6I}E\cf^al}$Y/=2O%xc`d``b `b`Bc f{fxc`afeŴB3>`0ddb@ ޼\S0( P@AN?@oxc```f`F81, +$5bj0c̬$̭VyC^A.IPl TW_׿~qN -;&P*31)bV6v $C(.pX j3xc`d`` }6__EƮL-Ǟv ``o xc`d``=/@"xc`Y-+c`rg j @='DFx! |zF^zVͨ͜ @$fh @D3W260W2lU, @{8Ei3 @ ) )3P4xTN@=T`Al:JP%Cl " nqxDR~@/'tEǓTm,{ܹs# _ {g0≵dpKV,Zo yjpٌ g7 ^|%^()7pgOg08\^tm-c)&:#Jt=RD&␸5EM8ZRg~ܚ`Hkpw eqU*ݯS~SM]q<9ݭz(Ȗvq@[X溮tT:{be3Idzs\<[\bOH#NON^;;T4^n W "nؓl έCQ:QsK8}(xP/#7T8#姢 fW?/Axc`f F X(DwOFFOTTOD ^tCFF =Qb0FFTM?]*GDEF? OS/2?<R`A+XBcmap?1head@16 5hhea@ $~Zhmtx@X maxpA~PnameAu2postD 2x| |Uo7;נM:%..#"(,BIBtSUk}GQQ$(Jqc۾ީNhBֽg9V.HVtFi֓+ 3ˋK3,7XRn]=M{0!6\^kTˮ{5[yZVQAu*Mu.iUUKU+TUXUTYUK*VդTNuJY~ g/OP.;qMq!sUAʌUe7pOivQor×G˘[1?+4cvFf?&/cAaIvnAܬ%s2d(=×{fΜ1|yl2т5Yn^u˸{&Lt=0nFfIqϭ_yY}g 2rUGJP]ҨDUbUjեdeU)* eꏪ?VYuTqkUשWݠQuj<խTP݉z[u^}WMDMR=zH5E5u8]eR=zT5CqY'UOfnQQU=z@Pjjj 2rUڭ$5ԠՂZT{>:#u:S׫ԍ&uEݪnS'R52aECϵ%!j!5&Ǻ.RͥK.͗˸˾#)^v+_uU?}r?/kNכR?J?ص_W|x㸛tGnny-[umj N{so_vݿpn>tKPɔ'R>jSzƩ;iiN/7<w8afqOzYW͚0k֬{bQ? {z[{ΖgKLb2Ę<;EWȯIDwHgh!(Dgh4u_ܒϓ촿]ם䴖okO<$ӿmj'$ؕ㒒 tK?sx!UKPָ%V0fu`QS@$ (|ۻDؗ\گ𶝉;@Ix#o t.tߎ?qk,}wYBM `LJ0X= x/s"b8^&bV{_.Y aIsi3*?s.y,l\f^wfo>QeKܡ GS?0x>m[:Orߊ OGS :nȗf$?S,9I/XO Ͻ[ôۣfAL_iaj5`sVۍ"5U>Uh| @@kv{7l2u\?DpZb56c@NnXD˺Sקɮ++ WXS B`55H>,Mw3(!0hwU➪ ٰ$ǦƔÕT`ݡ~HʶZ{м}\V5*yላ\."VB\v `Ճ2h5# 83- L=Iq>aƺre0rO 8G+Kj!g{|~a{]+2m)n3ט@LrGѸ92?w-5w7C;B0o@Ey9,($E*Mx 0a'3Ơ[Ջ6B=Ϸf#n>LSiv &Ќ^Iجzaveoۡ퍻`M6whH~^8FS7bfڒ\씵xoxG&D +|.#Tԛxj&W1CU*wc<>Nfh6@𥵅dIF'z8(j+3q[;Cۡ& hVWN$~p58xd^㨩 pXՄ&!E8"H# '&iI?F'1UaAFzwѶӿKJi2rZ]ߥ&|~mq^*lO4enTY[$v,V::Dۇ)] Up;:'w|Sˆn! OC@']Ηs]Ӵ! UR}P0Wlnq+'U82!ݖ owR`$跃4ӂCºhW}ץ $.@{rfˊ) أ hk@L*CU׮y9"aǰ[诒vP;ԃS}Ot;n66At4t4 Ů K1pj"_rfDb]h&(:*bcA_z?ltX}evXoL|؛G6fh4; x& Z ieg sq$/5:H+?LznH5<6Oҝ~8/'*!66E,>%9Uv[^a̅S׺|HiBqDT6,yזx DH_QSa4/_O.I@5١/:n$FCbBzWx: 󺦈raĶҔ^JZJ{RQ]]VjJ~(dz>QT`5Uخ^5N \AX>H:QjPǢC"U`SYNPn"\FQ" Wܵ 4x7-<]Lhл(?HoL'i)ʾσ`y髮Ey|~1![X_jI_5_MOO|K?z8lY 9|4DkF5|~t)m;|;wwN>z hH^V< /Y6.Gg*df03!\Α@qeJxMr?@}7BP]\K6on\ .qAǎktE_;x3o98bbuWlQyшvzW lPZ[ނaЋ5~0wnfhub*AdJ+,/e`rEvk ooz VMSBg?++lV"%1xKuMMMTMQ"I8(bH2h9(_ezGZ j0LlFc/s/b΋a4Ж,@tWrS!/TPQzbN(m kyyo{|B=c+k6d4A@^Z*UiʂYJ;֯|AxaC/YD5 #8/>FQ%VKE^K'aj=qu6}]MrD^zK+oc0AR77<;[twmٶ3#uM~ުWz]#7fֲ2k$)V'vQBt/h~ 4uaTXVˠf}`0}^"?Mǟ֜{h H( úY[\q#T`&`9] 9;| QhB'7RPE]$v 㤚L!Zkt` }jmԇ, ?k. ô^"c .Z=*-W-I!N]bĂJ')ak0r6Tk@t!!# ƺ]Yee8qs94}v??3?b$)\!qd]qHY..TJryv#)i|[c7;KdpO%lDyK4ۂ:z7m1|_[ׂ =Kv2~&<%?!'ʽΈIׄtlzoq߃2ɆB7}L$ b/f~&v>)2m0!z'mCON6CU@ڀM/і9d2(S#}A|<~ZTcN8 J!4^lL pr4m(E|ѣ '$JD2l-6h'ߐ;)ZI$1W:_PA1D/N\V̱tgӋ݉ L3uN|Χ >G˳ϭ+\ yV&pU ]jv7S 1U>``=FۅP:tEzUs3ӴJJļ^Q]V*V\p=^ItT4d+$P*T . K B s-Qr[(hɋ.2[y0_3=EŢ`f|&!kG!S=͖oW/onL@WЅ b&.oJ}:>IELhGrn&e*"sIotlǛ͘ID辽`SkR2(9#̹NߜC DL[h!@u<{X[70vCAgXbl!poyll3qf02N b9Is=yrc,Et\|T"}%MJƆSpp{R=hZA誶ĶD"RjsQڧ`!ڢ1>Q2Haz#ONmA ܮD &tMn%u?d@S궻 o$JRDf*yRwuag6fXCDw).0.;^~Ȑ4KY?mJlHl:ߘ] Y8尢pݞCUݡQ8 9't4n0!Z0۱=9\/ lz6U`vs8{)50]Yw"`(tÄ/!A(8ۑ!7$6܂?,Uӥ=>}lI;tk-5h {yfQ봺mSD:jkBECZaݫufw"%ۏ#jGϻ`1J3("# ֝bj)j#1&0T+fg tv笯>)Ϣ/7/C'(t#|!H+Z5]rڇr鞨k"J6dZߜx!:`&i絞ƾ6L[9/Sk p66X FA [Dl9b;+;~mzߖDkfD,˅q=K99YJW:fX H}"|̟imKl w*FZ&5DK*;뗾ȗl.wnEj "vGV3x ,e_#.G $Jca,N8g|C kޱ׆>=o(!DN#j"Poӫ1iKq+2V,Rt`8c[d 7u'U[M:eg5zX|?BEj~9,អl$J=˰IcqXރTv``pĭͅoy /jp q5N/{z:a4p6eO)>s0{١Ǻ p44X tVm/Ԣ`| %6YC8@^x0!k\ge.1K8WMA.Ex]\dQ+[nh 5]% 3oH لq-n>ˠ]a%źXw: 81[ ֖c泚#+s۴8/a,e߉ClhǺŖ x襅:֪bȄՕ%U&;[AILe% 0(bz`",@*&+E0%b~Aa:m<9>_6[flYPIC~WqlLZ57v ob$ [lO. zu`RSvNXPj%M1qBI#mR(!.ߨ?YK~V=KcΓcH3YZܭ.me#Wp=0lnƱ阳300ތ1givB8&rs| Sf]fa0bաL os8GJA| G27 0M!Y䯔m{(p@v~7'#')kXӴq08fn: 3{0g 1_]ty@ 7JvWYwwFnK{ ylJ){^n7/{- tIT)0|͑ 1Gtbcovk=RqYDJ<AnavVu>{W `vٍ˱ֶz&]IJh[lCqO6'^{F3P}͈0 G4ƀ[fm#ZK9#6:#43<σBxNikE JKUFD$J^z*6dFHB0<~φ٣84 :GR.$ :2|OEgƃqWm-iKJ"9f!,e7< fr T):;&)%./νEĔcħ {6@sa85mML9 {?|o p"^ #N[z+v9@fkuo ;iq#qtձO({J60Ei&ÃP- o88Z *bC CgeeRwD~ rv}\XbHbzٮ E뛛;6kA,)7 13Ҕ=_ UosQө8F? d.{W{p4x2 Zr@{{cHBnXjlEmiƿL16TsĊ\& Y$OhˆÖdؖcRf~>~?7h#RAHVV KbXe'irڈGQpّ+|C~-.}N2z03J ,][?X 4+$ҴZ>ߠ˶CPvu@!0&$P]ccKfSzZ[я~MQAZޝ9u%^׳)UalF1vTPR¬}iQOc5RrP77w)/O3tb0 4B}ZK!֮ Lޅ/*K,Ϲ-ypHUi~uuc^*،yA|4}޳OkMṊKGyL jiD^tt姮-*M<۠ɡ߿A:I Y;:$rv!ǟIIJ+D/O~Nkwwwu{_~J뾿7Iw$IӱtmTrGgj0K32,c;&.G`:k;];]o+h|;~H[>McC44@tdf[8cᗻIӕg93߮uD߹N{>ѯ^*NU픣>8.Nˑ?+D F!fa|ܠKXΖu?;J4?I$x}WQ; 95`o1U(b¸4nC}:%U՞38W,*$GEB8T/UipFՁߪHo"Vv;ˆŢƝOCxѝK@P4>eR7w!y3c\;Cw>@yG~,dhrʮ5ΰG?伟Yz %PTmHw,M̛yG a>"m=PPp˱O֮&vv=dٲ*+W2eGw􃗟,23#,;z?GOZWnw` ~MH= P+s i ؼ\xyY$W~V_{vybz9T{UltIyv`!i:WԦcʤN7Yp /$R(@.SLU'߀Sqd%0qH!_Ok'nn7w h.5}\3è w|THgJ ՋäDǽ{+dXMƒ@"̻Vu/1ÙmȾ C @zS@e|N(ћQfyxq .0\P1+XTH˭PKּ^lrl?h yn`$/K=3vkqdFdE^EEVTj[} nY'`x3j׶w>֦%Z8'?Gp.44t8-ȗYm}LjK|v;5*.UE˼B m7=.WO>hA/rL頺fY bUYRSrݴ] h._sO龻}"GlDxI|!Al?G'u@4G2:3#_~Dwd}/3>{ Hj|:DO"d5O xa{-|+!xOJ?H O">e9?pV*#l89vhJQűAie&.SrxB*6tY6W/b E꬇%BCjon]NB;$ ᨩńn79rtvwnLbӁ71w:1ѬZҧh\O^zgh'xAY"szE/<Υ!wr!A)az4I2n[o?j+_E<2KqT'w0fˋ7,qj)}13Kz8oT0̐x]P'vm0QQrGC\kTN1aT6UH_ɓZׂلn0!ϼqK2.x\'`0=搁.Iij_Rxp.EbMgaPqD)lCDlGέ\C?>ǤuNi6 jdUx?E+ܬSh*qc^qil˸9g<198v6`R÷HxKg." utռ"݂W QɁV>[X"8y@ʯw﷼kZT9|Mǒ؋O&鬓tJJC|A ?$+&)=!?gSy sC?ÙuT1XyV#vPg]P^9[mՂ \}d'*iZ9 X;hDlj(Ox`ksl`%UTR=0= WzCJbxḳSKMm qaDj` IJ=;iV!}W-ĖثzHְlM0k*@zQ W*JCƦQ#iㄳwֻb!%[#pOKQݎ7(JJͮn^S:Us*ۭt$t$.WFZ[+tZp~ Ij$0'jjq]v[|e'pg|#! ȓc/{YK$_kDC/ՇVtܵUav#"Cd^+쥳^#"bBaa@lD8^˂ 5sːC_o[{=A0{06a`7>Q(5t 6ǥzi&V`=.x7?Ƨ ?=|%_V2ϴG x @MIt/lJ+YqhÉoaHaspAoqȷ"DZÇQ*Cc++~a*l\臐;zswgf.L(C+%ZY apé픍'ۨEo'ug?v\۲E0 >X~IQ:[jVI׼%ą3Ӓt_/<az͚$n bĬø*O{rM<:PSs`ʖQɓ: W<ЍsE ?l{dEs=^Ÿ&8]M9sDO&s9~a%V'R"4tt[~!5 VGB $'=^k :cI'C*r$ɨKN@ij"h1=Q+qxjYZZ+/P?޲Gt`茫X>v fN;ookX?ypB4 5c:+ {k64 ;f^A1(z1iGDNL%PYHEjXSt[cWiN whӱ~$xSN{,R=`ޜVGg?:c{U⟏kOL;<{<04nzwzԬp)P5K?cLm)kumHqj9 5o _ 9n8=:hu_6g'i&a>$kܽ(oAN޲yC)q:JJ'J )ߋq.2GG & E6kqZXQFZ5v)ںhFiNS4? T3飻ɪɷ$_j]SUM|@!4ErۃvPm0 $B7"5pGיjJ! ok &&Z-{$Hr%vpIҞ=cS璔kTT/GU֩QI}zuzzcVBbMLp$ vѕxьr.Br}3r2N/WP|=N(94Ѓq(ulVWiOD^R~6wYdgH5_ KMkcm /n_v$[97v $=siJ̹ӔcGU΋/K9K~kƅ\t'_62pl>kw@FC{MމHH=/uߺr %q8/=[x^bb2v=:`=J[UDjDJZd)S>L^rhWN\aHX!~uc.#K*݃V}wh> AD\-~R*4Ȋa6k]t ic1vgO}V$@ktrbicO4p"cs*Jrx-o/C_csdѐ@X7^GqZ cQYvˉHJ$M-7ulZ [yɷm.%Uj"':Vv+%٩٨;JE>ЕgX`e|4jCh>2,uUHƆ iΦ&Qb%+&nѭ6M*L^[57Z(#c׶TKk{:ҠXg\Myic =v_[m_Dx ,|;ډ]4 Ew [=2O%xc`d``b `b`Z f xc`ab`ŴB3>`0ddb@ ޼\S0( P@AN?{=S226xc```f`F1, ;Pϰѐɜy 0/f^Ƽ(@2NFRy#ڿ@oOoI&.ŸC6"#A L,l\<|B"bR2r J*jZ:zF&fV6vN.n^>~A!aQ1q #sח`Kxc`d``zm2q30\]F/ͤȴ `q xc`d``7L dPx5AJBQ8ZS|Yi5*@SM[C &򜸀6$p-?5q{ﱵulm ob JH! }|*[3h +}m*X2~V5dqc||dp=b*mTϨg[XΗxRϹKc3H|JsT uNL?hkvC<'895vS}0sb 3P~xTNA> ]54ȅxL 74@T(1 YCwHmv]^;xg/`|bbA"7gw̔;9rh Zw<}x;Zv^Y]s5!ieTSYJ#.{f#lBXxԳόpn) iL#۰\l4>b{fY| aQS<-SĴ'xt1esۆM>a4)Cڍ7՛R6j!~v7`Þ5JE< li)RE(A.p̫Ix=3ZgC>J#/= :c0te "a1Pp@D!Ͽ\oBfctA>׶lZ, <%boճ_w]_xc`f F X(DwOFFOTTO\ 0CFF >FFTM w'IGDEF<(OS/2hI`wFcmap4B $8head56 hhea@$ohmtxT`maxp`PnameMpost 3xc`d``bSPx~ /" W'o3л1(2121]`` xc`d``_H3#*`EgPxc`agŴB3>`0dd213#+8i) ')Nb_2%PBF} xuj@(-n vVEq#H)Eঈ[d}>A>EoA?3'gQ=Ac^&7* zͱ#\/Eɽv*ޟLVáZm:[D66;윳ZƑզ;M:SmXelL*L9aHH(D_}BB YK"e&zSi8Y8eXtӪ )_RFgU%~g@Sxc```f`F| @!|JF6s#exc`f F@ (Uxcd`ab`ddM,JKM./uIg!Cq5?39 [ 202r&eg8T ɚ F ! PKJ2KsX*ȔO/e8շ4vWvLmݡCw]-kmm{Wwuw9ӻ^dM2{~ɵ9WnXdzdGQ4M:u*=TN7%+DeX.KS yno5Q֦$D=QAbJb)Bz( e5RrXQ<оPߒѠlPeFJ뉉sr(g]-Ք9K\Iw f>fxc```f`F| @!|JF6s#exc`f F@ (Uxcd`ab`ddM,JKM./ JM/I,Ig!Cq?fݖBXM"ˋ23J * dM#CsT= yE%mFe```lg`bddJKnfj߿Z[[ں&Mjnݾ!3~ZS-\pު3&t1yGڧwuuw77v7rupmʽg+>rX=UՓxc`d``b fB0+wOFFOTTOX TCFF ls7FFTMvjGDEF0 *OS/2\B`@cmap 4B head/6 hhea8$fhmtxPmaxpTPname~z\`postT 3xc`d```f`xgkZ,+\R|~ї7笕8NK{V ռ^YjL^)WCuY+q3d(lsv[mvJv,lx$AD[5"t}%uҗi$t6HH+m7vڥF%1kV^|̝ߪ!K#LYfNX.Xs߿ɳɭM H dlP7R3 ;8'rBZXQLHDV gL؎Z;4fnT< zgiR4,1ڤmaݡmjQ!QϪc2jMi\p >Wiݪ; yM c:tYL!˙OJ<{*4(uG$s58><䃡\S !"3:AO͡>Tʵ@@f3"cMN9snrʽlNOO/t r}o{p]:sn}wOt@- b^iD:\xc```f`F| @?CHVJF6sTxc`f F@ (Uxcd`ad`ddM,JJ- a!C  }jb6q(tuss63p/,L(QHT0204WHUW_TYbc;##3_s\;]nen\{eX`3lxc```d3΃諱y0H_Vxc`d``bF(dAL I(function(){"use strict";var __webpack_modules__={351:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},s=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.AssistiveMmlHandler=e.AssistiveMmlMathDocumentMixin=e.AssistiveMmlMathItemMixin=e.LimitedMmlVisitor=void 0;var c=r(4474),u=r(9259),p=r(7233),h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.getAttributes=function(e){return t.prototype.getAttributes.call(this,e).replace(/ ?id=".*?"/,"")},e}(u.SerializedMmlVisitor);function d(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.assistiveMml=function(t,e){if(void 0===e&&(e=!1),!(this.state()>=c.STATE.ASSISTIVEMML)){if(!this.isEscaped&&(t.options.enableAssistiveMml||e)){var r=t.adaptor,n=t.toMML(this.root).replace(/\n */g,"").replace(//g,""),o=r.firstChild(r.body(r.parse(n,"text/html"))),i=r.node("mjx-assistive-mml",{unselectable:"on",display:this.display?"block":"inline"},[o]);r.setAttribute(r.firstChild(this.typesetRoot),"aria-hidden","true"),r.setStyle(this.typesetRoot,"position","relative"),r.append(this.typesetRoot,i)}this.state(c.STATE.ASSISTIVEMML)}},e}(t)}function f(t){var e;return e=function(t){function e(){for(var e=[],r=0;r0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.HTMLAdaptor=void 0;var a=function(t){function e(e){var r=t.call(this,e.document)||this;return r.window=e,r.parser=new e.DOMParser,r}return o(e,t),e.prototype.parse=function(t,e){return void 0===e&&(e="text/html"),this.parser.parseFromString(t,e)},e.prototype.create=function(t,e){return e?this.document.createElementNS(e,t):this.document.createElement(t)},e.prototype.text=function(t){return this.document.createTextNode(t)},e.prototype.head=function(t){return t.head||t},e.prototype.body=function(t){return t.body||t},e.prototype.root=function(t){return t.documentElement||t},e.prototype.doctype=function(t){return t.doctype?""):""},e.prototype.tags=function(t,e,r){void 0===r&&(r=null);var n=r?t.getElementsByTagNameNS(r,e):t.getElementsByTagName(e);return Array.from(n)},e.prototype.getElements=function(t,e){var r,n,o=[];try{for(var a=i(t),s=a.next();!s.done;s=a.next()){var l=s.value;"string"==typeof l?o=o.concat(Array.from(this.document.querySelectorAll(l))):Array.isArray(l)||l instanceof this.window.NodeList||l instanceof this.window.HTMLCollection?o=o.concat(Array.from(l)):o.push(l)}}catch(t){r={error:t}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return o},e.prototype.contains=function(t,e){return t.contains(e)},e.prototype.parent=function(t){return t.parentNode},e.prototype.append=function(t,e){return t.appendChild(e)},e.prototype.insert=function(t,e){return this.parent(e).insertBefore(t,e)},e.prototype.remove=function(t){return this.parent(t).removeChild(t)},e.prototype.replace=function(t,e){return this.parent(e).replaceChild(t,e)},e.prototype.clone=function(t){return t.cloneNode(!0)},e.prototype.split=function(t,e){return t.splitText(e)},e.prototype.next=function(t){return t.nextSibling},e.prototype.previous=function(t){return t.previousSibling},e.prototype.firstChild=function(t){return t.firstChild},e.prototype.lastChild=function(t){return t.lastChild},e.prototype.childNodes=function(t){return Array.from(t.childNodes)},e.prototype.childNode=function(t,e){return t.childNodes[e]},e.prototype.kind=function(t){var e=t.nodeType;return 1===e||3===e||8===e?t.nodeName.toLowerCase():""},e.prototype.value=function(t){return t.nodeValue||""},e.prototype.textContent=function(t){return t.textContent},e.prototype.innerHTML=function(t){return t.innerHTML},e.prototype.outerHTML=function(t){return t.outerHTML},e.prototype.serializeXML=function(t){return(new this.window.XMLSerializer).serializeToString(t)},e.prototype.setAttribute=function(t,e,r,n){return void 0===n&&(n=null),n?(e=n.replace(/.*\//,"")+":"+e.replace(/^.*:/,""),t.setAttributeNS(n,e,r)):t.setAttribute(e,r)},e.prototype.getAttribute=function(t,e){return t.getAttribute(e)},e.prototype.removeAttribute=function(t,e){return t.removeAttribute(e)},e.prototype.hasAttribute=function(t,e){return t.hasAttribute(e)},e.prototype.allAttributes=function(t){return Array.from(t.attributes).map((function(t){return{name:t.name,value:t.value}}))},e.prototype.addClass=function(t,e){t.classList?t.classList.add(e):t.className=(t.className+" "+e).trim()},e.prototype.removeClass=function(t,e){t.classList?t.classList.remove(e):t.className=t.className.split(/ /).filter((function(t){return t!==e})).join(" ")},e.prototype.hasClass=function(t,e){return t.classList?t.classList.contains(e):t.className.split(/ /).indexOf(e)>=0},e.prototype.setStyle=function(t,e,r){t.style[e]=r},e.prototype.getStyle=function(t,e){return t.style[e]},e.prototype.allStyles=function(t){return t.style.cssText},e.prototype.insertRules=function(t,e){var r,n;try{for(var o=i(e.reverse()),a=o.next();!a.done;a=o.next()){var s=a.value;try{t.sheet.insertRule(s,0)}catch(t){console.warn("MathJax: can't insert css rule '".concat(s,"': ").concat(t.message))}}}catch(t){r={error:t}}finally{try{a&&!a.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}},e.prototype.fontSize=function(t){var e=this.window.getComputedStyle(t);return parseFloat(e.fontSize)},e.prototype.fontFamily=function(t){return this.window.getComputedStyle(t).fontFamily||""},e.prototype.nodeSize=function(t,e,r){if(void 0===e&&(e=1),void 0===r&&(r=!1),r&&t.getBBox){var n=t.getBBox();return[n.width/e,n.height/e]}return[t.offsetWidth/e,t.offsetHeight/e]},e.prototype.nodeBBox=function(t){var e=t.getBoundingClientRect();return{left:e.left,right:e.right,top:e.top,bottom:e.bottom}},e}(r(5009).AbstractDOMAdaptor);e.HTMLAdaptor=a},6191:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.browserAdaptor=void 0;var n=r(444);e.browserAdaptor=function(){return new n.HTMLAdaptor(window)}},9515:function(t,e,r){var n=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.MathJax=e.combineWithMathJax=e.combineDefaults=e.combineConfig=e.isObject=void 0;var o=r(3282);function i(t){return"object"==typeof t&&null!==t}function a(t,e){var r,o;try{for(var s=n(Object.keys(e)),l=s.next();!l.done;l=s.next()){var c=l.value;"__esModule"!==c&&(!i(t[c])||!i(e[c])||e[c]instanceof Promise?null!==e[c]&&void 0!==e[c]&&(t[c]=e[c]):a(t[c],e[c]))}}catch(t){r={error:t}}finally{try{l&&!l.done&&(o=s.return)&&o.call(s)}finally{if(r)throw r.error}}return t}e.isObject=i,e.combineConfig=a,e.combineDefaults=function t(e,r,o){var a,s;e[r]||(e[r]={}),e=e[r];try{for(var l=n(Object.keys(o)),c=l.next();!c.done;c=l.next()){var u=c.value;i(e[u])&&i(o[u])?t(e,u,o[u]):null==e[u]&&null!=o[u]&&(e[u]=o[u])}}catch(t){a={error:t}}finally{try{c&&!c.done&&(s=l.return)&&s.call(l)}finally{if(a)throw a.error}}return e},e.combineWithMathJax=function(t){return a(e.MathJax,t)},void 0===r.g.MathJax&&(r.g.MathJax={}),r.g.MathJax.version||(r.g.MathJax={version:o.VERSION,_:{},config:r.g.MathJax}),e.MathJax=r.g.MathJax},235:function(t,e,r){var n,o,i=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.CONFIG=e.MathJax=e.Loader=e.PathFilters=e.PackageError=e.Package=void 0;var a=r(9515),s=r(265),l=r(265);Object.defineProperty(e,"Package",{enumerable:!0,get:function(){return l.Package}}),Object.defineProperty(e,"PackageError",{enumerable:!0,get:function(){return l.PackageError}});var c,u=r(7525);if(e.PathFilters={source:function(t){return e.CONFIG.source.hasOwnProperty(t.name)&&(t.name=e.CONFIG.source[t.name]),!0},normalize:function(t){var e=t.name;return e.match(/^(?:[a-z]+:\/)?\/|[a-z]:\\|\[/i)||(t.name="[mathjax]/"+e.replace(/^\.\//,"")),t.addExtension&&!e.match(/\.[^\/]+$/)&&(t.name+=".js"),!0},prefix:function(t){for(var r;(r=t.name.match(/^\[([^\]]*)\]/))&&e.CONFIG.paths.hasOwnProperty(r[1]);)t.name=e.CONFIG.paths[r[1]]+t.name.substr(r[0].length);return!0}},function(t){var r=a.MathJax.version;t.versions=new Map,t.ready=function(){for(var t,e,r=[],n=0;n=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},s=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},i=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractDOMAdaptor=void 0;var n=function(){function t(t){void 0===t&&(t=null),this.document=t}return t.prototype.node=function(t,e,n,o){var i,a;void 0===e&&(e={}),void 0===n&&(n=[]);var s=this.create(t,o);this.setAttributes(s,e);try{for(var l=r(n),c=l.next();!c.done;c=l.next()){var u=c.value;this.append(s,u)}}catch(t){i={error:t}}finally{try{c&&!c.done&&(a=l.return)&&a.call(l)}finally{if(i)throw i.error}}return s},t.prototype.setAttributes=function(t,e){var n,o,i,a,s,l;if(e.style&&"string"!=typeof e.style)try{for(var c=r(Object.keys(e.style)),u=c.next();!u.done;u=c.next()){var p=u.value;this.setStyle(t,p.replace(/-([a-z])/g,(function(t,e){return e.toUpperCase()})),e.style[p])}}catch(t){n={error:t}}finally{try{u&&!u.done&&(o=c.return)&&o.call(c)}finally{if(n)throw n.error}}if(e.properties)try{for(var h=r(Object.keys(e.properties)),d=h.next();!d.done;d=h.next()){t[p=d.value]=e.properties[p]}}catch(t){i={error:t}}finally{try{d&&!d.done&&(a=h.return)&&a.call(h)}finally{if(i)throw i.error}}try{for(var f=r(Object.keys(e)),m=f.next();!m.done;m=f.next()){"style"===(p=m.value)&&"string"!=typeof e.style||"properties"===p||this.setAttribute(t,p,e[p])}}catch(t){s={error:t}}finally{try{m&&!m.done&&(l=f.return)&&l.call(f)}finally{if(s)throw s.error}}},t.prototype.replace=function(t,e){return this.insert(t,e),this.remove(e),e},t.prototype.childNode=function(t,e){return this.childNodes(t)[e]},t.prototype.allClasses=function(t){var e=this.getAttribute(t,"class");return e?e.replace(/ +/g," ").replace(/^ /,"").replace(/ $/,"").split(/ /):[]},t}();e.AbstractDOMAdaptor=n},3494:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractFindMath=void 0;var n=r(7233),o=function(){function t(t){var e=this.constructor;this.options=(0,n.userOptions)((0,n.defaultOptions)({},e.OPTIONS),t)}return t.OPTIONS={},t}();e.AbstractFindMath=o},3670:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractHandler=void 0;var i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e}(r(5722).AbstractMathDocument),a=function(){function t(t,e){void 0===e&&(e=5),this.documentClass=i,this.adaptor=t,this.priority=e}return Object.defineProperty(t.prototype,"name",{get:function(){return this.constructor.NAME},enumerable:!1,configurable:!0}),t.prototype.handlesDocument=function(t){return!1},t.prototype.create=function(t,e){return new this.documentClass(t,this.adaptor,e)},t.NAME="generic",t}();e.AbstractHandler=a},805:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.HandlerList=void 0;var a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.register=function(t){return this.add(t,t.priority)},e.prototype.unregister=function(t){this.remove(t)},e.prototype.handlesDocument=function(t){var e,r;try{for(var n=i(this),o=n.next();!o.done;o=n.next()){var a=o.value.item;if(a.handlesDocument(t))return a}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}throw new Error("Can't find handler for document")},e.prototype.document=function(t,e){return void 0===e&&(e=null),this.handlesDocument(t).create(t,e)},e}(r(8666).PrioritizedList);e.HandlerList=a},9206:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractInputJax=void 0;var n=r(7233),o=r(7525),i=function(){function t(t){void 0===t&&(t={}),this.adaptor=null,this.mmlFactory=null;var e=this.constructor;this.options=(0,n.userOptions)((0,n.defaultOptions)({},e.OPTIONS),t),this.preFilters=new o.FunctionList,this.postFilters=new o.FunctionList}return Object.defineProperty(t.prototype,"name",{get:function(){return this.constructor.NAME},enumerable:!1,configurable:!0}),t.prototype.setAdaptor=function(t){this.adaptor=t},t.prototype.setMmlFactory=function(t){this.mmlFactory=t},t.prototype.initialize=function(){},t.prototype.reset=function(){for(var t=[],e=0;e=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},s=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o=e&&s.item.renderDoc(t))return}}catch(t){r={error:t}}finally{try{a&&!a.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}},e.prototype.renderMath=function(t,e,r){var n,o;void 0===r&&(r=h.STATE.UNPROCESSED);try{for(var a=i(this.items),s=a.next();!s.done;s=a.next()){var l=s.value;if(l.priority>=r&&l.item.renderMath(t,e))return}}catch(t){n={error:t}}finally{try{s&&!s.done&&(o=a.return)&&o.call(a)}finally{if(n)throw n.error}}},e.prototype.renderConvert=function(t,e,r){var n,o;void 0===r&&(r=h.STATE.LAST);try{for(var a=i(this.items),s=a.next();!s.done;s=a.next()){var l=s.value;if(l.priority>r)return;if(l.item.convert&&l.item.renderMath(t,e))return}}catch(t){n={error:t}}finally{try{s&&!s.done&&(o=a.return)&&o.call(a)}finally{if(n)throw n.error}}},e.prototype.findID=function(t){var e,r;try{for(var n=i(this.items),o=n.next();!o.done;o=n.next()){var a=o.value;if(a.item.id===t)return a.item}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}return null},e}(r(8666).PrioritizedList);e.RenderList=m,e.resetOptions={all:!1,processed:!1,inputJax:null,outputJax:null},e.resetAllOptions={all:!0,processed:!0,inputJax:[],outputJax:[]};var y=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.compile=function(t){return null},e}(c.AbstractInputJax),g=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.typeset=function(t,e){return void 0===e&&(e=null),null},e.prototype.escaped=function(t,e){return null},e}(u.AbstractOutputJax),b=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e}(p.AbstractMathList),v=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e}(h.AbstractMathItem),_=function(){function t(e,r,n){var o=this,i=this.constructor;this.document=e,this.options=(0,l.userOptions)((0,l.defaultOptions)({},i.OPTIONS),n),this.math=new(this.options.MathList||b),this.renderActions=m.create(this.options.renderActions),this.processed=new t.ProcessBits,this.outputJax=this.options.OutputJax||new g;var a=this.options.InputJax||[new y];Array.isArray(a)||(a=[a]),this.inputJax=a,this.adaptor=r,this.outputJax.setAdaptor(r),this.inputJax.map((function(t){return t.setAdaptor(r)})),this.mmlFactory=this.options.MmlFactory||new d.MmlFactory,this.inputJax.map((function(t){return t.setMmlFactory(o.mmlFactory)})),this.outputJax.initialize(),this.inputJax.map((function(t){return t.initialize()}))}return Object.defineProperty(t.prototype,"kind",{get:function(){return this.constructor.KIND},enumerable:!1,configurable:!0}),t.prototype.addRenderAction=function(t){for(var e=[],r=1;r=r&&this.state(r-1),t.renderActions.renderMath(this,t,r)},t.prototype.convert=function(t,r){void 0===r&&(r=e.STATE.LAST),t.renderActions.renderConvert(this,t,r)},t.prototype.compile=function(t){this.state()=e.STATE.INSERTED&&this.removeFromDocument(r),t=e.STATE.TYPESET&&(this.outputData={}),t=e.STATE.COMPILED&&(this.inputData={}),this._state=t),this._state},t.prototype.reset=function(t){void 0===t&&(t=!1),this.state(e.STATE.UNPROCESSED,t)},t}();e.AbstractMathItem=r,e.STATE={UNPROCESSED:0,FINDMATH:10,COMPILED:20,CONVERT:100,METRICS:110,RERENDER:125,TYPESET:150,INSERTED:200,LAST:1e4},e.newState=function(t,r){if(t in e.STATE)throw Error("State "+t+" already exists");e.STATE[t]=r}},9e3:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractMathList=void 0;var i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.isBefore=function(t,e){return t.start.i=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.Attributes=e.INHERIT=void 0,e.INHERIT="_inherit_";var n=function(){function t(t,e){this.global=e,this.defaults=Object.create(e),this.inherited=Object.create(this.defaults),this.attributes=Object.create(this.inherited),Object.assign(this.defaults,t)}return t.prototype.set=function(t,e){this.attributes[t]=e},t.prototype.setList=function(t){Object.assign(this.attributes,t)},t.prototype.get=function(t){var r=this.attributes[t];return r===e.INHERIT&&(r=this.global[t]),r},t.prototype.getExplicit=function(t){if(this.attributes.hasOwnProperty(t))return this.attributes[t]},t.prototype.getList=function(){for(var t,e,n=[],o=0;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.MathMLVisitor=void 0;var a=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.document=null,e}return o(e,t),e.prototype.visitTree=function(t,e){this.document=e;var r=e.createElement("top");return this.visitNode(t,r),this.document=null,r.firstChild},e.prototype.visitTextNode=function(t,e){e.appendChild(this.document.createTextNode(t.getText()))},e.prototype.visitXMLNode=function(t,e){e.appendChild(t.getXML().cloneNode(!0))},e.prototype.visitInferredMrowNode=function(t,e){var r,n;try{for(var o=i(t.childNodes),a=o.next();!a.done;a=o.next()){var s=a.value;this.visitNode(s,e)}}catch(t){r={error:t}}finally{try{a&&!a.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}},e.prototype.visitDefault=function(t,e){var r,n,o=this.document.createElement(t.kind);this.addAttributes(t,o);try{for(var a=i(t.childNodes),s=a.next();!s.done;s=a.next()){var l=s.value;this.visitNode(l,o)}}catch(t){r={error:t}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}e.appendChild(o)},e.prototype.addAttributes=function(t,e){var r,n,o=t.attributes,a=o.getExplicitNames();try{for(var s=i(a),l=s.next();!l.done;l=s.next()){var c=l.value;e.setAttribute(c,o.getExplicit(c).toString())}}catch(t){r={error:t}}finally{try{l&&!l.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}},e}(r(6325).MmlVisitor);e.MathMLVisitor=a},3909:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.MmlFactory=void 0;var i=r(7860),a=r(6336),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,"MML",{get:function(){return this.node},enumerable:!1,configurable:!0}),e.defaultNodes=a.MML,e}(i.AbstractNodeFactory);e.MmlFactory=s},9007:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},s=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(e,"__esModule",{value:!0}),e.XMLNode=e.TextNode=e.AbstractMmlEmptyNode=e.AbstractMmlBaseNode=e.AbstractMmlLayoutNode=e.AbstractMmlTokenNode=e.AbstractMmlNode=e.indentAttributes=e.TEXCLASSNAMES=e.TEXCLASS=void 0;var l=r(91),c=r(4596);e.TEXCLASS={ORD:0,OP:1,BIN:2,REL:3,OPEN:4,CLOSE:5,PUNCT:6,INNER:7,VCENTER:8,NONE:-1},e.TEXCLASSNAMES=["ORD","OP","BIN","REL","OPEN","CLOSE","PUNCT","INNER","VCENTER"];var u=["","thinmathspace","mediummathspace","thickmathspace"],p=[[0,-1,2,3,0,0,0,1],[-1,-1,0,3,0,0,0,1],[2,2,0,0,2,0,0,2],[3,3,0,0,3,0,0,3],[0,0,0,0,0,0,0,0],[0,-1,2,3,0,0,0,1],[1,1,0,1,1,1,1,1],[1,-1,2,3,1,0,1,1]];e.indentAttributes=["indentalign","indentalignfirst","indentshift","indentshiftfirst"];var h=function(t){function r(e,r,n){void 0===r&&(r={}),void 0===n&&(n=[]);var o=t.call(this,e)||this;return o.prevClass=null,o.prevLevel=null,o.texclass=null,o.arity<0&&(o.childNodes=[e.create("inferredMrow")],o.childNodes[0].parent=o),o.setChildren(n),o.attributes=new l.Attributes(e.getNodeClass(o.kind).defaults,e.getNodeClass("math").defaults),o.attributes.setList(r),o}return o(r,t),r.prototype.copy=function(t){var e,r,n,o;void 0===t&&(t=!1);var s=this.factory.create(this.kind);if(s.properties=i({},this.properties),this.attributes){var l=this.attributes.getAllAttributes();try{for(var c=a(Object.keys(l)),u=c.next();!u.done;u=c.next()){var p=u.value;("id"!==p||t)&&s.attributes.set(p,l[p])}}catch(t){e={error:t}}finally{try{u&&!u.done&&(r=c.return)&&r.call(c)}finally{if(e)throw e.error}}}if(this.childNodes&&this.childNodes.length){var h=this.childNodes;1===h.length&&h[0].isInferred&&(h=h[0].childNodes);try{for(var d=a(h),f=d.next();!f.done;f=d.next()){var m=f.value;m?s.appendChild(m.copy()):s.childNodes.push(null)}}catch(t){n={error:t}}finally{try{f&&!f.done&&(o=d.return)&&o.call(d)}finally{if(n)throw n.error}}}return s},Object.defineProperty(r.prototype,"texClass",{get:function(){return this.texclass},set:function(t){this.texclass=t},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"isToken",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"isEmbellished",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"isSpacelike",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"linebreakContainer",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"hasNewLine",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"arity",{get:function(){return 1/0},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"isInferred",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"Parent",{get:function(){for(var t=this.parent;t&&t.notParent;)t=t.Parent;return t},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"notParent",{get:function(){return!1},enumerable:!1,configurable:!0}),r.prototype.setChildren=function(e){return this.arity<0?this.childNodes[0].setChildren(e):t.prototype.setChildren.call(this,e)},r.prototype.appendChild=function(e){var r,n,o=this;if(this.arity<0)return this.childNodes[0].appendChild(e),e;if(e.isInferred){if(this.arity===1/0)return e.childNodes.forEach((function(e){return t.prototype.appendChild.call(o,e)})),e;var i=e;(e=this.factory.create("mrow")).setChildren(i.childNodes),e.attributes=i.attributes;try{for(var s=a(i.getPropertyNames()),l=s.next();!l.done;l=s.next()){var c=l.value;e.setProperty(c,i.getProperty(c))}}catch(t){r={error:t}}finally{try{l&&!l.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}}return t.prototype.appendChild.call(this,e)},r.prototype.replaceChild=function(e,r){return this.arity<0?(this.childNodes[0].replaceChild(e,r),e):t.prototype.replaceChild.call(this,e,r)},r.prototype.core=function(){return this},r.prototype.coreMO=function(){return this},r.prototype.coreIndex=function(){return 0},r.prototype.childPosition=function(){for(var t,e,r=this,n=r.parent;n&&n.notParent;)r=n,n=n.parent;if(n){var o=0;try{for(var i=a(n.childNodes),s=i.next();!s.done;s=i.next()){if(s.value===r)return o;o++}}catch(e){t={error:e}}finally{try{s&&!s.done&&(e=i.return)&&e.call(i)}finally{if(t)throw t.error}}}return null},r.prototype.setTeXclass=function(t){return this.getPrevClass(t),null!=this.texClass?this:t},r.prototype.updateTeXclass=function(t){t&&(this.prevClass=t.prevClass,this.prevLevel=t.prevLevel,t.prevClass=t.prevLevel=null,this.texClass=t.texClass)},r.prototype.getPrevClass=function(t){t&&(this.prevClass=t.texClass,this.prevLevel=t.attributes.get("scriptlevel"))},r.prototype.texSpacing=function(){var t=null!=this.prevClass?this.prevClass:e.TEXCLASS.NONE,r=this.texClass||e.TEXCLASS.ORD;if(t===e.TEXCLASS.NONE||r===e.TEXCLASS.NONE)return"";t===e.TEXCLASS.VCENTER&&(t=e.TEXCLASS.ORD),r===e.TEXCLASS.VCENTER&&(r=e.TEXCLASS.ORD);var n=p[t][r];return(this.prevLevel>0||this.attributes.get("scriptlevel")>0)&&n>=0?"":u[Math.abs(n)]},r.prototype.hasSpacingAttributes=function(){return this.isEmbellished&&this.coreMO().hasSpacingAttributes()},r.prototype.setInheritedAttributes=function(t,e,n,o){var i,l;void 0===t&&(t={}),void 0===e&&(e=!1),void 0===n&&(n=0),void 0===o&&(o=!1);var c=this.attributes.getAllDefaults();try{for(var u=a(Object.keys(t)),p=u.next();!p.done;p=u.next()){var h=p.value;if(c.hasOwnProperty(h)||r.alwaysInherit.hasOwnProperty(h)){var d=s(t[h],2),f=d[0],m=d[1];((r.noInherit[f]||{})[this.kind]||{})[h]||this.attributes.setInherited(h,m)}}}catch(t){i={error:t}}finally{try{p&&!p.done&&(l=u.return)&&l.call(u)}finally{if(i)throw i.error}}void 0===this.attributes.getExplicit("displaystyle")&&this.attributes.setInherited("displaystyle",e),void 0===this.attributes.getExplicit("scriptlevel")&&this.attributes.setInherited("scriptlevel",n),o&&this.setProperty("texprimestyle",o);var y=this.arity;if(y>=0&&y!==1/0&&(1===y&&0===this.childNodes.length||1!==y&&this.childNodes.length!==y))if(y=0&&e!==1/0&&(1===e&&0===this.childNodes.length||1!==e&&this.childNodes.length!==e)&&this.mError('Wrong number of children for "'+this.kind+'" node',t,!0),this.verifyChildren(t)}},r.prototype.verifyAttributes=function(t){var e,r;if(t.checkAttributes){var n=this.attributes,o=[];try{for(var i=a(n.getExplicitNames()),s=i.next();!s.done;s=i.next()){var l=s.value;"data-"===l.substr(0,5)||void 0!==n.getDefault(l)||l.match(/^(?:class|style|id|(?:xlink:)?href)$/)||o.push(l)}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}o.length&&this.mError("Unknown attributes for "+this.kind+" node: "+o.join(", "),t)}},r.prototype.verifyChildren=function(t){var e,r;try{for(var n=a(this.childNodes),o=n.next();!o.done;o=n.next()){o.value.verifyTree(t)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}},r.prototype.mError=function(t,e,r){if(void 0===r&&(r=!1),this.parent&&this.parent.isKind("merror"))return null;var n=this.factory.create("merror");if(n.attributes.set("data-mjx-message",t),e.fullErrors||r){var o=this.factory.create("mtext"),i=this.factory.create("text");i.setText(e.fullErrors?t:this.kind),o.appendChild(i),n.appendChild(o),this.parent.replaceChild(n,this)}else this.parent.replaceChild(n,this),n.appendChild(this);return n},r.defaults={mathbackground:l.INHERIT,mathcolor:l.INHERIT,mathsize:l.INHERIT,dir:l.INHERIT},r.noInherit={mstyle:{mpadded:{width:!0,height:!0,depth:!0,lspace:!0,voffset:!0},mtable:{width:!0,height:!0,depth:!0,align:!0}},maligngroup:{mrow:{groupalign:!0},mtable:{groupalign:!0}}},r.alwaysInherit={scriptminsize:!0,scriptsizemultiplier:!0},r.verifyDefaults={checkArity:!0,checkAttributes:!1,fullErrors:!1,fixMmultiscripts:!0,fixMtables:!0},r}(c.AbstractNode);e.AbstractMmlNode=h;var d=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,"isToken",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.getText=function(){var t,e,r="";try{for(var n=a(this.childNodes),o=n.next();!o.done;o=n.next()){var i=o.value;i instanceof g&&(r+=i.getText())}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}return r},e.prototype.setChildInheritedAttributes=function(t,e,r,n){var o,i;try{for(var s=a(this.childNodes),l=s.next();!l.done;l=s.next()){var c=l.value;c instanceof h&&c.setInheritedAttributes(t,e,r,n)}}catch(t){o={error:t}}finally{try{l&&!l.done&&(i=s.return)&&i.call(s)}finally{if(o)throw o.error}}},e.prototype.walkTree=function(t,e){var r,n;t(this,e);try{for(var o=a(this.childNodes),i=o.next();!i.done;i=o.next()){var s=i.value;s instanceof h&&s.walkTree(t,e)}}catch(t){r={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return e},e.defaults=i(i({},h.defaults),{mathvariant:"normal",mathsize:l.INHERIT}),e}(h);e.AbstractMmlTokenNode=d;var f=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,"isSpacelike",{get:function(){return this.childNodes[0].isSpacelike},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isEmbellished",{get:function(){return this.childNodes[0].isEmbellished},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"arity",{get:function(){return-1},enumerable:!1,configurable:!0}),e.prototype.core=function(){return this.childNodes[0]},e.prototype.coreMO=function(){return this.childNodes[0].coreMO()},e.prototype.setTeXclass=function(t){return t=this.childNodes[0].setTeXclass(t),this.updateTeXclass(this.childNodes[0]),t},e.defaults=h.defaults,e}(h);e.AbstractMmlLayoutNode=f;var m=function(t){function r(){return null!==t&&t.apply(this,arguments)||this}return o(r,t),Object.defineProperty(r.prototype,"isEmbellished",{get:function(){return this.childNodes[0].isEmbellished},enumerable:!1,configurable:!0}),r.prototype.core=function(){return this.childNodes[0]},r.prototype.coreMO=function(){return this.childNodes[0].coreMO()},r.prototype.setTeXclass=function(t){var r,n;this.getPrevClass(t),this.texClass=e.TEXCLASS.ORD;var o=this.childNodes[0];o?this.isEmbellished||o.isKind("mi")?(t=o.setTeXclass(t),this.updateTeXclass(this.core())):(o.setTeXclass(null),t=this):t=this;try{for(var i=a(this.childNodes.slice(1)),s=i.next();!s.done;s=i.next()){var l=s.value;l&&l.setTeXclass(null)}}catch(t){r={error:t}}finally{try{s&&!s.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}return t},r.defaults=h.defaults,r}(h);e.AbstractMmlBaseNode=m;var y=function(t){function r(){return null!==t&&t.apply(this,arguments)||this}return o(r,t),Object.defineProperty(r.prototype,"isToken",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"isEmbellished",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"isSpacelike",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"linebreakContainer",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"hasNewLine",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"arity",{get:function(){return 0},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"isInferred",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"notParent",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"Parent",{get:function(){return this.parent},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"texClass",{get:function(){return e.TEXCLASS.NONE},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"prevClass",{get:function(){return e.TEXCLASS.NONE},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"prevLevel",{get:function(){return 0},enumerable:!1,configurable:!0}),r.prototype.hasSpacingAttributes=function(){return!1},Object.defineProperty(r.prototype,"attributes",{get:function(){return null},enumerable:!1,configurable:!0}),r.prototype.core=function(){return this},r.prototype.coreMO=function(){return this},r.prototype.coreIndex=function(){return 0},r.prototype.childPosition=function(){return 0},r.prototype.setTeXclass=function(t){return t},r.prototype.texSpacing=function(){return""},r.prototype.setInheritedAttributes=function(t,e,r,n){},r.prototype.inheritAttributesFrom=function(t){},r.prototype.verifyTree=function(t){},r.prototype.mError=function(t,e,r){return void 0===r&&(r=!1),null},r}(c.AbstractEmptyNode);e.AbstractMmlEmptyNode=y;var g=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.text="",e}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"text"},enumerable:!1,configurable:!0}),e.prototype.getText=function(){return this.text},e.prototype.setText=function(t){return this.text=t,this},e.prototype.copy=function(){return this.factory.create(this.kind).setText(this.getText())},e.prototype.toString=function(){return this.text},e}(y);e.TextNode=g;var b=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.xml=null,e.adaptor=null,e}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"XML"},enumerable:!1,configurable:!0}),e.prototype.getXML=function(){return this.xml},e.prototype.setXML=function(t,e){return void 0===e&&(e=null),this.xml=t,this.adaptor=e,this},e.prototype.getSerializedXML=function(){return this.adaptor.serializeXML(this.xml)},e.prototype.copy=function(){return this.factory.create(this.kind).setXML(this.adaptor.clone(this.xml))},e.prototype.toString=function(){return"XML data"},e}(y);e.XMLNode=b},3948:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;rthis.childNodes.length&&(t=1),this.attributes.set("selection",t)},e.defaults=i(i({},a.AbstractMmlNode.defaults),{actiontype:"toggle",selection:1}),e}(a.AbstractMmlNode);e.MmlMaction=s},142:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.MmlMfenced=void 0;var s=r(9007),l=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.texclass=s.TEXCLASS.INNER,e.separators=[],e.open=null,e.close=null,e}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"mfenced"},enumerable:!1,configurable:!0}),e.prototype.setTeXclass=function(t){this.getPrevClass(t),this.open&&(t=this.open.setTeXclass(t)),this.childNodes[0]&&(t=this.childNodes[0].setTeXclass(t));for(var e=1,r=this.childNodes.length;e=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.MmlMfrac=void 0;var s=r(9007),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"mfrac"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"arity",{get:function(){return 2},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"linebreakContainer",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.setTeXclass=function(t){var e,r;this.getPrevClass(t);try{for(var n=a(this.childNodes),o=n.next();!o.done;o=n.next()){o.value.setTeXclass(null)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}return this},e.prototype.setChildInheritedAttributes=function(t,e,r,n){(!e||r>0)&&r++,this.childNodes[0].setInheritedAttributes(t,!1,r,n),this.childNodes[1].setInheritedAttributes(t,!1,r,!0)},e.defaults=i(i({},s.AbstractMmlBaseNode.defaults),{linethickness:"medium",numalign:"center",denomalign:"center",bevelled:!1}),e}(s.AbstractMmlBaseNode);e.MmlMfrac=l},3985:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r1&&r.match(e.operatorName)&&"normal"===this.attributes.get("mathvariant")&&void 0===this.getProperty("autoOP")&&void 0===this.getProperty("texClass")&&(this.texClass=a.TEXCLASS.OP,this.setProperty("autoOP",!0)),this},e.defaults=i({},a.AbstractMmlTokenNode.defaults),e.operatorName=/^[a-z][a-z0-9]*$/i,e.singleCharacter=/^[\uD800-\uDBFF]?.[\u0300-\u036F\u1AB0-\u1ABE\u1DC0-\u1DFF\u20D0-\u20EF]*$/,e}(a.AbstractMmlTokenNode);e.MmlMi=s},6405:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},s=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.MmlMo=void 0;var l=r(9007),c=r(4082),u=r(505),p=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._texClass=null,e.lspace=5/18,e.rspace=5/18,e}return o(e,t),Object.defineProperty(e.prototype,"texClass",{get:function(){if(null===this._texClass){var t=this.getText(),e=a(this.handleExplicitForm(this.getForms()),3),r=e[0],n=e[1],o=e[2],i=this.constructor.OPTABLE,s=i[r][t]||i[n][t]||i[o][t];return s?s[2]:l.TEXCLASS.REL}return this._texClass},set:function(t){this._texClass=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"kind",{get:function(){return"mo"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isEmbellished",{get:function(){return!0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"hasNewLine",{get:function(){return"newline"===this.attributes.get("linebreak")},enumerable:!1,configurable:!0}),e.prototype.coreParent=function(){for(var t=this,e=this,r=this.factory.getNodeClass("math");e&&e.isEmbellished&&e.coreMO()===this&&!(e instanceof r);)t=e,e=e.parent;return t},e.prototype.coreText=function(t){if(!t)return"";if(t.isEmbellished)return t.coreMO().getText();for(;((t.isKind("mrow")||t.isKind("TeXAtom")&&t.texClass!==l.TEXCLASS.VCENTER||t.isKind("mstyle")||t.isKind("mphantom"))&&1===t.childNodes.length||t.isKind("munderover"))&&t.childNodes[0];)t=t.childNodes[0];return t.isToken?t.getText():""},e.prototype.hasSpacingAttributes=function(){return this.attributes.isSet("lspace")||this.attributes.isSet("rspace")},Object.defineProperty(e.prototype,"isAccent",{get:function(){var t=!1,e=this.coreParent().parent;if(e){var r=e.isKind("mover")?e.childNodes[e.over].coreMO()?"accent":"":e.isKind("munder")?e.childNodes[e.under].coreMO()?"accentunder":"":e.isKind("munderover")?this===e.childNodes[e.over].coreMO()?"accent":this===e.childNodes[e.under].coreMO()?"accentunder":"":"";if(r)t=void 0!==e.attributes.getExplicit(r)?t:this.attributes.get("accent")}return t},enumerable:!1,configurable:!0}),e.prototype.setTeXclass=function(t){var e=this.attributes.getList("form","fence"),r=e.form,n=e.fence;return void 0===this.getProperty("texClass")&&(this.attributes.isSet("lspace")||this.attributes.isSet("rspace"))?null:(n&&this.texClass===l.TEXCLASS.REL&&("prefix"===r&&(this.texClass=l.TEXCLASS.OPEN),"postfix"===r&&(this.texClass=l.TEXCLASS.CLOSE)),this.adjustTeXclass(t))},e.prototype.adjustTeXclass=function(t){var e=this.texClass,r=this.prevClass;if(e===l.TEXCLASS.NONE)return t;if(t?(!t.getProperty("autoOP")||e!==l.TEXCLASS.BIN&&e!==l.TEXCLASS.REL||(r=t.texClass=l.TEXCLASS.ORD),r=this.prevClass=t.texClass||l.TEXCLASS.ORD,this.prevLevel=this.attributes.getInherited("scriptlevel")):r=this.prevClass=l.TEXCLASS.NONE,e!==l.TEXCLASS.BIN||r!==l.TEXCLASS.NONE&&r!==l.TEXCLASS.BIN&&r!==l.TEXCLASS.OP&&r!==l.TEXCLASS.REL&&r!==l.TEXCLASS.OPEN&&r!==l.TEXCLASS.PUNCT)if(r!==l.TEXCLASS.BIN||e!==l.TEXCLASS.REL&&e!==l.TEXCLASS.CLOSE&&e!==l.TEXCLASS.PUNCT){if(e===l.TEXCLASS.BIN){for(var n=this,o=this.parent;o&&o.parent&&o.isEmbellished&&(1===o.childNodes.length||!o.isKind("mrow")&&o.core()===n);)n=o,o=o.parent;o.childNodes[o.childNodes.length-1]===n&&(this.texClass=l.TEXCLASS.ORD)}}else t.texClass=this.prevClass=l.TEXCLASS.ORD;else this.texClass=l.TEXCLASS.ORD;return this},e.prototype.setInheritedAttributes=function(e,r,n,o){void 0===e&&(e={}),void 0===r&&(r=!1),void 0===n&&(n=0),void 0===o&&(o=!1),t.prototype.setInheritedAttributes.call(this,e,r,n,o);var i=this.getText();this.checkOperatorTable(i),this.checkPseudoScripts(i),this.checkPrimes(i),this.checkMathAccent(i)},e.prototype.checkOperatorTable=function(t){var e,r,n=a(this.handleExplicitForm(this.getForms()),3),o=n[0],i=n[1],l=n[2];this.attributes.setInherited("form",o);var u=this.constructor.OPTABLE,p=u[o][t]||u[i][t]||u[l][t];if(p){void 0===this.getProperty("texClass")&&(this.texClass=p[2]);try{for(var h=s(Object.keys(p[3]||{})),d=h.next();!d.done;d=h.next()){var f=d.value;this.attributes.setInherited(f,p[3][f])}}catch(t){e={error:t}}finally{try{d&&!d.done&&(r=h.return)&&r.call(h)}finally{if(e)throw e.error}}this.lspace=(p[0]+1)/18,this.rspace=(p[1]+1)/18}else{var m=(0,c.getRange)(t);if(m){void 0===this.getProperty("texClass")&&(this.texClass=m[2]);var y=this.constructor.MMLSPACING[m[2]];this.lspace=(y[0]+1)/18,this.rspace=(y[1]+1)/18}}},e.prototype.getForms=function(){for(var t=this,e=this.parent,r=this.Parent;r&&r.isEmbellished;)t=e,e=r.parent,r=r.Parent;if(e&&e.isKind("mrow")&&1!==e.nonSpaceLength()){if(e.firstNonSpace()===t)return["prefix","infix","postfix"];if(e.lastNonSpace()===t)return["postfix","infix","prefix"]}return["infix","prefix","postfix"]},e.prototype.handleExplicitForm=function(t){if(this.attributes.isSet("form")){var e=this.attributes.get("form");t=[e].concat(t.filter((function(t){return t!==e})))}return t},e.prototype.checkPseudoScripts=function(t){var e=this.constructor.pseudoScripts;if(t.match(e)){var r=this.coreParent().Parent,n=!r||!(r.isKind("msubsup")&&!r.isKind("msub"));this.setProperty("pseudoscript",n),n&&(this.attributes.setInherited("lspace",0),this.attributes.setInherited("rspace",0))}},e.prototype.checkPrimes=function(t){var e=this.constructor.primes;if(t.match(e)){var r=this.constructor.remapPrimes,n=(0,u.unicodeString)((0,u.unicodeChars)(t).map((function(t){return r[t]})));this.setProperty("primes",n)}},e.prototype.checkMathAccent=function(t){var e=this.Parent;if(void 0===this.getProperty("mathaccent")&&e&&e.isKind("munderover")){var r=e.childNodes[0];if(!r.isEmbellished||r.coreMO()!==this){var n=this.constructor.mathaccents;t.match(n)&&this.setProperty("mathaccent",!0)}}},e.defaults=i(i({},l.AbstractMmlTokenNode.defaults),{form:"infix",fence:!1,separator:!1,lspace:"thickmathspace",rspace:"thickmathspace",stretchy:!1,symmetric:!1,maxsize:"infinity",minsize:"0em",largeop:!1,movablelimits:!1,accent:!1,linebreak:"auto",lineleading:"1ex",linebreakstyle:"before",indentalign:"auto",indentshift:"0",indenttarget:"",indentalignfirst:"indentalign",indentshiftfirst:"indentshift",indentalignlast:"indentalign",indentshiftlast:"indentshift"}),e.MMLSPACING=c.MMLSPACING,e.OPTABLE=c.OPTABLE,e.pseudoScripts=new RegExp(["^[\"'*`","\xaa","\xb0","\xb2-\xb4","\xb9","\xba","\u2018-\u201f","\u2032-\u2037\u2057","\u2070\u2071","\u2074-\u207f","\u2080-\u208e","]+$"].join("")),e.primes=new RegExp(["^[\"'`","\u2018-\u201f","]+$"].join("")),e.remapPrimes={34:8243,39:8242,96:8245,8216:8245,8217:8242,8218:8242,8219:8245,8220:8246,8221:8243,8222:8243,8223:8246},e.mathaccents=new RegExp(["^[","\xb4\u0301\u02ca","`\u0300\u02cb","\xa8\u0308","~\u0303\u02dc","\xaf\u0304\u02c9","\u02d8\u0306","\u02c7\u030c","^\u0302\u02c6","\u2192\u20d7","\u02d9\u0307","\u02da\u030a","\u20db","\u20dc","]$"].join("")),e}(l.AbstractMmlTokenNode);e.MmlMo=p},7238:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.MmlInferredMrow=e.MmlMrow=void 0;var s=r(9007),l=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._core=null,e}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"mrow"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isSpacelike",{get:function(){var t,e;try{for(var r=a(this.childNodes),n=r.next();!n.done;n=r.next()){if(!n.value.isSpacelike)return!1}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}return!0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isEmbellished",{get:function(){var t,e,r=!1,n=0;try{for(var o=a(this.childNodes),i=o.next();!i.done;i=o.next()){var s=i.value;if(s)if(s.isEmbellished){if(r)return!1;r=!0,this._core=n}else if(!s.isSpacelike)return!1;n++}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}return r},enumerable:!1,configurable:!0}),e.prototype.core=function(){return this.isEmbellished&&null!=this._core?this.childNodes[this._core]:this},e.prototype.coreMO=function(){return this.isEmbellished&&null!=this._core?this.childNodes[this._core].coreMO():this},e.prototype.nonSpaceLength=function(){var t,e,r=0;try{for(var n=a(this.childNodes),o=n.next();!o.done;o=n.next()){var i=o.value;i&&!i.isSpacelike&&r++}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}return r},e.prototype.firstNonSpace=function(){var t,e;try{for(var r=a(this.childNodes),n=r.next();!n.done;n=r.next()){var o=n.value;if(o&&!o.isSpacelike)return o}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}return null},e.prototype.lastNonSpace=function(){for(var t=this.childNodes.length;--t>=0;){var e=this.childNodes[t];if(e&&!e.isSpacelike)return e}return null},e.prototype.setTeXclass=function(t){var e,r,n,o;if(null!=this.getProperty("open")||null!=this.getProperty("close")){this.getPrevClass(t),t=null;try{for(var i=a(this.childNodes),l=i.next();!l.done;l=i.next()){t=l.value.setTeXclass(t)}}catch(t){e={error:t}}finally{try{l&&!l.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}null==this.texClass&&(this.texClass=s.TEXCLASS.INNER)}else{try{for(var c=a(this.childNodes),u=c.next();!u.done;u=c.next()){t=u.value.setTeXclass(t)}}catch(t){n={error:t}}finally{try{u&&!u.done&&(o=c.return)&&o.call(c)}finally{if(n)throw n.error}}this.childNodes[0]&&this.updateTeXclass(this.childNodes[0])}return t},e.defaults=i({},s.AbstractMmlNode.defaults),e}(s.AbstractMmlNode);e.MmlMrow=l;var c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"inferredMrow"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isInferred",{get:function(){return!0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"notParent",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.toString=function(){return"["+this.childNodes.join(",")+"]"},e.defaults=l.defaults,e}(l);e.MmlInferredMrow=c},7265:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.MmlMtable=void 0;var s=r(9007),l=r(505),c=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.properties={useHeight:!0},e.texclass=s.TEXCLASS.ORD,e}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"mtable"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"linebreakContainer",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.setInheritedAttributes=function(e,r,n,o){var i,l;try{for(var c=a(s.indentAttributes),u=c.next();!u.done;u=c.next()){var p=u.value;e[p]&&this.attributes.setInherited(p,e[p][1]),void 0!==this.attributes.getExplicit(p)&&delete this.attributes.getAllAttributes()[p]}}catch(t){i={error:t}}finally{try{u&&!u.done&&(l=c.return)&&l.call(c)}finally{if(i)throw i.error}}t.prototype.setInheritedAttributes.call(this,e,r,n,o)},e.prototype.setChildInheritedAttributes=function(t,e,r,n){var o,i,s,c;try{for(var u=a(this.childNodes),p=u.next();!p.done;p=u.next()){(y=p.value).isKind("mtr")||this.replaceChild(this.factory.create("mtr"),y).appendChild(y)}}catch(t){o={error:t}}finally{try{p&&!p.done&&(i=u.return)&&i.call(u)}finally{if(o)throw o.error}}r=this.getProperty("scriptlevel")||r,e=!(!this.attributes.getExplicit("displaystyle")&&!this.attributes.getDefault("displaystyle")),t=this.addInheritedAttributes(t,{columnalign:this.attributes.get("columnalign"),rowalign:"center"});var h=this.attributes.getExplicit("data-cramped"),d=(0,l.split)(this.attributes.get("rowalign"));try{for(var f=a(this.childNodes),m=f.next();!m.done;m=f.next()){var y=m.value;t.rowalign[1]=d.shift()||t.rowalign[1],y.setInheritedAttributes(t,e,r,!!h)}}catch(t){s={error:t}}finally{try{m&&!m.done&&(c=f.return)&&c.call(f)}finally{if(s)throw s.error}}},e.prototype.verifyChildren=function(e){for(var r=null,n=this.factory,o=0;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.MmlMlabeledtr=e.MmlMtr=void 0;var s=r(9007),l=r(91),c=r(505),u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"mtr"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"linebreakContainer",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.setChildInheritedAttributes=function(t,e,r,n){var o,i,s,l;try{for(var u=a(this.childNodes),p=u.next();!p.done;p=u.next()){(m=p.value).isKind("mtd")||this.replaceChild(this.factory.create("mtd"),m).appendChild(m)}}catch(t){o={error:t}}finally{try{p&&!p.done&&(i=u.return)&&i.call(u)}finally{if(o)throw o.error}}var h=(0,c.split)(this.attributes.get("columnalign"));1===this.arity&&h.unshift(this.parent.attributes.get("side")),t=this.addInheritedAttributes(t,{rowalign:this.attributes.get("rowalign"),columnalign:"center"});try{for(var d=a(this.childNodes),f=d.next();!f.done;f=d.next()){var m=f.value;t.columnalign[1]=h.shift()||t.columnalign[1],m.setInheritedAttributes(t,e,r,n)}}catch(t){s={error:t}}finally{try{f&&!f.done&&(l=d.return)&&l.call(d)}finally{if(s)throw s.error}}},e.prototype.verifyChildren=function(e){var r,n;if(!this.parent||this.parent.isKind("mtable")){try{for(var o=a(this.childNodes),i=o.next();!i.done;i=o.next()){var s=i.value;if(!s.isKind("mtd"))this.replaceChild(this.factory.create("mtd"),s).appendChild(s),e.fixMtables||s.mError("Children of "+this.kind+" must be mtd",e)}}catch(t){r={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}t.prototype.verifyChildren.call(this,e)}else this.mError(this.kind+" can only be a child of an mtable",e,!0)},e.prototype.setTeXclass=function(t){var e,r;this.getPrevClass(t);try{for(var n=a(this.childNodes),o=n.next();!o.done;o=n.next()){o.value.setTeXclass(null)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}return this},e.defaults=i(i({},s.AbstractMmlNode.defaults),{rowalign:l.INHERIT,columnalign:l.INHERIT,groupalign:l.INHERIT}),e}(s.AbstractMmlNode);e.MmlMtr=u;var p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"mlabeledtr"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"arity",{get:function(){return 1},enumerable:!1,configurable:!0}),e}(u);e.MmlMlabeledtr=p},5184:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.OPTABLE=e.MMLSPACING=e.getRange=e.RANGES=e.MO=e.OPDEF=void 0;var o=r(9007);function i(t,e,r,n){return void 0===r&&(r=o.TEXCLASS.BIN),void 0===n&&(n=null),[t,e,r,n]}e.OPDEF=i,e.MO={ORD:i(0,0,o.TEXCLASS.ORD),ORD11:i(1,1,o.TEXCLASS.ORD),ORD21:i(2,1,o.TEXCLASS.ORD),ORD02:i(0,2,o.TEXCLASS.ORD),ORD55:i(5,5,o.TEXCLASS.ORD),NONE:i(0,0,o.TEXCLASS.NONE),OP:i(1,2,o.TEXCLASS.OP,{largeop:!0,movablelimits:!0,symmetric:!0}),OPFIXED:i(1,2,o.TEXCLASS.OP,{largeop:!0,movablelimits:!0}),INTEGRAL:i(0,1,o.TEXCLASS.OP,{largeop:!0,symmetric:!0}),INTEGRAL2:i(1,2,o.TEXCLASS.OP,{largeop:!0,symmetric:!0}),BIN3:i(3,3,o.TEXCLASS.BIN),BIN4:i(4,4,o.TEXCLASS.BIN),BIN01:i(0,1,o.TEXCLASS.BIN),BIN5:i(5,5,o.TEXCLASS.BIN),TALLBIN:i(4,4,o.TEXCLASS.BIN,{stretchy:!0}),BINOP:i(4,4,o.TEXCLASS.BIN,{largeop:!0,movablelimits:!0}),REL:i(5,5,o.TEXCLASS.REL),REL1:i(1,1,o.TEXCLASS.REL,{stretchy:!0}),REL4:i(4,4,o.TEXCLASS.REL),RELSTRETCH:i(5,5,o.TEXCLASS.REL,{stretchy:!0}),RELACCENT:i(5,5,o.TEXCLASS.REL,{accent:!0}),WIDEREL:i(5,5,o.TEXCLASS.REL,{accent:!0,stretchy:!0}),OPEN:i(0,0,o.TEXCLASS.OPEN,{fence:!0,stretchy:!0,symmetric:!0}),CLOSE:i(0,0,o.TEXCLASS.CLOSE,{fence:!0,stretchy:!0,symmetric:!0}),INNER:i(0,0,o.TEXCLASS.INNER),PUNCT:i(0,3,o.TEXCLASS.PUNCT),ACCENT:i(0,0,o.TEXCLASS.ORD,{accent:!0}),WIDEACCENT:i(0,0,o.TEXCLASS.ORD,{accent:!0,stretchy:!0})},e.RANGES=[[32,127,o.TEXCLASS.REL,"mo"],[160,191,o.TEXCLASS.ORD,"mo"],[192,591,o.TEXCLASS.ORD,"mi"],[688,879,o.TEXCLASS.ORD,"mo"],[880,6688,o.TEXCLASS.ORD,"mi"],[6832,6911,o.TEXCLASS.ORD,"mo"],[6912,7615,o.TEXCLASS.ORD,"mi"],[7616,7679,o.TEXCLASS.ORD,"mo"],[7680,8191,o.TEXCLASS.ORD,"mi"],[8192,8303,o.TEXCLASS.ORD,"mo"],[8304,8351,o.TEXCLASS.ORD,"mo"],[8448,8527,o.TEXCLASS.ORD,"mi"],[8528,8591,o.TEXCLASS.ORD,"mn"],[8592,8703,o.TEXCLASS.REL,"mo"],[8704,8959,o.TEXCLASS.BIN,"mo"],[8960,9215,o.TEXCLASS.ORD,"mo"],[9312,9471,o.TEXCLASS.ORD,"mn"],[9472,10223,o.TEXCLASS.ORD,"mo"],[10224,10239,o.TEXCLASS.REL,"mo"],[10240,10495,o.TEXCLASS.ORD,"mtext"],[10496,10623,o.TEXCLASS.REL,"mo"],[10624,10751,o.TEXCLASS.ORD,"mo"],[10752,11007,o.TEXCLASS.BIN,"mo"],[11008,11055,o.TEXCLASS.ORD,"mo"],[11056,11087,o.TEXCLASS.REL,"mo"],[11088,11263,o.TEXCLASS.ORD,"mo"],[11264,11744,o.TEXCLASS.ORD,"mi"],[11776,11903,o.TEXCLASS.ORD,"mo"],[11904,12255,o.TEXCLASS.ORD,"mi","normal"],[12272,12351,o.TEXCLASS.ORD,"mo"],[12352,42143,o.TEXCLASS.ORD,"mi","normal"],[42192,43055,o.TEXCLASS.ORD,"mi"],[43056,43071,o.TEXCLASS.ORD,"mn"],[43072,55295,o.TEXCLASS.ORD,"mi"],[63744,64255,o.TEXCLASS.ORD,"mi","normal"],[64256,65023,o.TEXCLASS.ORD,"mi"],[65024,65135,o.TEXCLASS.ORD,"mo"],[65136,65791,o.TEXCLASS.ORD,"mi"],[65792,65935,o.TEXCLASS.ORD,"mn"],[65936,74751,o.TEXCLASS.ORD,"mi","normal"],[74752,74879,o.TEXCLASS.ORD,"mn"],[74880,113823,o.TEXCLASS.ORD,"mi","normal"],[113824,119391,o.TEXCLASS.ORD,"mo"],[119648,119679,o.TEXCLASS.ORD,"mn"],[119808,120781,o.TEXCLASS.ORD,"mi"],[120782,120831,o.TEXCLASS.ORD,"mn"],[122624,129023,o.TEXCLASS.ORD,"mo"],[129024,129279,o.TEXCLASS.REL,"mo"],[129280,129535,o.TEXCLASS.ORD,"mo"],[131072,195103,o.TEXCLASS.ORD,"mi","normnal"]],e.getRange=function(t){var r,o,i=t.codePointAt(0);try{for(var a=n(e.RANGES),s=a.next();!s.done;s=a.next()){var l=s.value;if(i<=l[1]){if(i>=l[0])return l;break}}}catch(t){r={error:t}}finally{try{s&&!s.done&&(o=a.return)&&o.call(a)}finally{if(r)throw r.error}}return null},e.MMLSPACING=[[0,0],[1,2],[3,3],[4,4],[0,0],[0,0],[0,3]],e.OPTABLE={prefix:{"(":e.MO.OPEN,"+":e.MO.BIN01,"-":e.MO.BIN01,"[":e.MO.OPEN,"{":e.MO.OPEN,"|":e.MO.OPEN,"||":[0,0,o.TEXCLASS.BIN,{fence:!0,stretchy:!0,symmetric:!0}],"|||":[0,0,o.TEXCLASS.ORD,{fence:!0,stretchy:!0,symmetric:!0}],"\xac":e.MO.ORD21,"\xb1":e.MO.BIN01,"\u2016":[0,0,o.TEXCLASS.ORD,{fence:!0,stretchy:!0}],"\u2018":[0,0,o.TEXCLASS.OPEN,{fence:!0}],"\u201c":[0,0,o.TEXCLASS.OPEN,{fence:!0}],"\u2145":e.MO.ORD21,"\u2146":i(2,0,o.TEXCLASS.ORD),"\u2200":e.MO.ORD21,"\u2202":e.MO.ORD21,"\u2203":e.MO.ORD21,"\u2204":e.MO.ORD21,"\u2207":e.MO.ORD21,"\u220f":e.MO.OP,"\u2210":e.MO.OP,"\u2211":e.MO.OP,"\u2212":e.MO.BIN01,"\u2213":e.MO.BIN01,"\u221a":[1,1,o.TEXCLASS.ORD,{stretchy:!0}],"\u221b":e.MO.ORD11,"\u221c":e.MO.ORD11,"\u2220":e.MO.ORD,"\u2221":e.MO.ORD,"\u2222":e.MO.ORD,"\u222b":e.MO.INTEGRAL,"\u222c":e.MO.INTEGRAL,"\u222d":e.MO.INTEGRAL,"\u222e":e.MO.INTEGRAL,"\u222f":e.MO.INTEGRAL,"\u2230":e.MO.INTEGRAL,"\u2231":e.MO.INTEGRAL,"\u2232":e.MO.INTEGRAL,"\u2233":e.MO.INTEGRAL,"\u22c0":e.MO.OP,"\u22c1":e.MO.OP,"\u22c2":e.MO.OP,"\u22c3":e.MO.OP,"\u2308":e.MO.OPEN,"\u230a":e.MO.OPEN,"\u2329":e.MO.OPEN,"\u2772":e.MO.OPEN,"\u27e6":e.MO.OPEN,"\u27e8":e.MO.OPEN,"\u27ea":e.MO.OPEN,"\u27ec":e.MO.OPEN,"\u27ee":e.MO.OPEN,"\u2980":[0,0,o.TEXCLASS.ORD,{fence:!0,stretchy:!0}],"\u2983":e.MO.OPEN,"\u2985":e.MO.OPEN,"\u2987":e.MO.OPEN,"\u2989":e.MO.OPEN,"\u298b":e.MO.OPEN,"\u298d":e.MO.OPEN,"\u298f":e.MO.OPEN,"\u2991":e.MO.OPEN,"\u2993":e.MO.OPEN,"\u2995":e.MO.OPEN,"\u2997":e.MO.OPEN,"\u29fc":e.MO.OPEN,"\u2a00":e.MO.OP,"\u2a01":e.MO.OP,"\u2a02":e.MO.OP,"\u2a03":e.MO.OP,"\u2a04":e.MO.OP,"\u2a05":e.MO.OP,"\u2a06":e.MO.OP,"\u2a07":e.MO.OP,"\u2a08":e.MO.OP,"\u2a09":e.MO.OP,"\u2a0a":e.MO.OP,"\u2a0b":e.MO.INTEGRAL2,"\u2a0c":e.MO.INTEGRAL,"\u2a0d":e.MO.INTEGRAL2,"\u2a0e":e.MO.INTEGRAL2,"\u2a0f":e.MO.INTEGRAL2,"\u2a10":e.MO.OP,"\u2a11":e.MO.OP,"\u2a12":e.MO.OP,"\u2a13":e.MO.OP,"\u2a14":e.MO.OP,"\u2a15":e.MO.INTEGRAL2,"\u2a16":e.MO.INTEGRAL2,"\u2a17":e.MO.INTEGRAL2,"\u2a18":e.MO.INTEGRAL2,"\u2a19":e.MO.INTEGRAL2,"\u2a1a":e.MO.INTEGRAL2,"\u2a1b":e.MO.INTEGRAL2,"\u2a1c":e.MO.INTEGRAL2,"\u2afc":e.MO.OP,"\u2aff":e.MO.OP},postfix:{"!!":i(1,0),"!":[1,0,o.TEXCLASS.CLOSE,null],'"':e.MO.ACCENT,"&":e.MO.ORD,")":e.MO.CLOSE,"++":i(0,0),"--":i(0,0),"..":i(0,0),"...":e.MO.ORD,"'":e.MO.ACCENT,"]":e.MO.CLOSE,"^":e.MO.WIDEACCENT,_:e.MO.WIDEACCENT,"`":e.MO.ACCENT,"|":e.MO.CLOSE,"}":e.MO.CLOSE,"~":e.MO.WIDEACCENT,"||":[0,0,o.TEXCLASS.BIN,{fence:!0,stretchy:!0,symmetric:!0}],"|||":[0,0,o.TEXCLASS.ORD,{fence:!0,stretchy:!0,symmetric:!0}],"\xa8":e.MO.ACCENT,"\xaa":e.MO.ACCENT,"\xaf":e.MO.WIDEACCENT,"\xb0":e.MO.ORD,"\xb2":e.MO.ACCENT,"\xb3":e.MO.ACCENT,"\xb4":e.MO.ACCENT,"\xb8":e.MO.ACCENT,"\xb9":e.MO.ACCENT,"\xba":e.MO.ACCENT,"\u02c6":e.MO.WIDEACCENT,"\u02c7":e.MO.WIDEACCENT,"\u02c9":e.MO.WIDEACCENT,"\u02ca":e.MO.ACCENT,"\u02cb":e.MO.ACCENT,"\u02cd":e.MO.WIDEACCENT,"\u02d8":e.MO.ACCENT,"\u02d9":e.MO.ACCENT,"\u02da":e.MO.ACCENT,"\u02dc":e.MO.WIDEACCENT,"\u02dd":e.MO.ACCENT,"\u02f7":e.MO.WIDEACCENT,"\u0302":e.MO.WIDEACCENT,"\u0311":e.MO.ACCENT,"\u03f6":e.MO.REL,"\u2016":[0,0,o.TEXCLASS.ORD,{fence:!0,stretchy:!0}],"\u2019":[0,0,o.TEXCLASS.CLOSE,{fence:!0}],"\u201a":e.MO.ACCENT,"\u201b":e.MO.ACCENT,"\u201d":[0,0,o.TEXCLASS.CLOSE,{fence:!0}],"\u201e":e.MO.ACCENT,"\u201f":e.MO.ACCENT,"\u2032":e.MO.ORD,"\u2033":e.MO.ACCENT,"\u2034":e.MO.ACCENT,"\u2035":e.MO.ACCENT,"\u2036":e.MO.ACCENT,"\u2037":e.MO.ACCENT,"\u203e":e.MO.WIDEACCENT,"\u2057":e.MO.ACCENT,"\u20db":e.MO.ACCENT,"\u20dc":e.MO.ACCENT,"\u2309":e.MO.CLOSE,"\u230b":e.MO.CLOSE,"\u232a":e.MO.CLOSE,"\u23b4":e.MO.WIDEACCENT,"\u23b5":e.MO.WIDEACCENT,"\u23dc":e.MO.WIDEACCENT,"\u23dd":e.MO.WIDEACCENT,"\u23de":e.MO.WIDEACCENT,"\u23df":e.MO.WIDEACCENT,"\u23e0":e.MO.WIDEACCENT,"\u23e1":e.MO.WIDEACCENT,"\u25a0":e.MO.BIN3,"\u25a1":e.MO.BIN3,"\u25aa":e.MO.BIN3,"\u25ab":e.MO.BIN3,"\u25ad":e.MO.BIN3,"\u25ae":e.MO.BIN3,"\u25af":e.MO.BIN3,"\u25b0":e.MO.BIN3,"\u25b1":e.MO.BIN3,"\u25b2":e.MO.BIN4,"\u25b4":e.MO.BIN4,"\u25b6":e.MO.BIN4,"\u25b7":e.MO.BIN4,"\u25b8":e.MO.BIN4,"\u25bc":e.MO.BIN4,"\u25be":e.MO.BIN4,"\u25c0":e.MO.BIN4,"\u25c1":e.MO.BIN4,"\u25c2":e.MO.BIN4,"\u25c4":e.MO.BIN4,"\u25c5":e.MO.BIN4,"\u25c6":e.MO.BIN4,"\u25c7":e.MO.BIN4,"\u25c8":e.MO.BIN4,"\u25c9":e.MO.BIN4,"\u25cc":e.MO.BIN4,"\u25cd":e.MO.BIN4,"\u25ce":e.MO.BIN4,"\u25cf":e.MO.BIN4,"\u25d6":e.MO.BIN4,"\u25d7":e.MO.BIN4,"\u25e6":e.MO.BIN4,"\u266d":e.MO.ORD02,"\u266e":e.MO.ORD02,"\u266f":e.MO.ORD02,"\u2773":e.MO.CLOSE,"\u27e7":e.MO.CLOSE,"\u27e9":e.MO.CLOSE,"\u27eb":e.MO.CLOSE,"\u27ed":e.MO.CLOSE,"\u27ef":e.MO.CLOSE,"\u2980":[0,0,o.TEXCLASS.ORD,{fence:!0,stretchy:!0}],"\u2984":e.MO.CLOSE,"\u2986":e.MO.CLOSE,"\u2988":e.MO.CLOSE,"\u298a":e.MO.CLOSE,"\u298c":e.MO.CLOSE,"\u298e":e.MO.CLOSE,"\u2990":e.MO.CLOSE,"\u2992":e.MO.CLOSE,"\u2994":e.MO.CLOSE,"\u2996":e.MO.CLOSE,"\u2998":e.MO.CLOSE,"\u29fd":e.MO.CLOSE},infix:{"!=":e.MO.BIN4,"#":e.MO.ORD,$:e.MO.ORD,"%":[3,3,o.TEXCLASS.ORD,null],"&&":e.MO.BIN4,"":e.MO.ORD,"*":e.MO.BIN3,"**":i(1,1),"*=":e.MO.BIN4,"+":e.MO.BIN4,"+=":e.MO.BIN4,",":[0,3,o.TEXCLASS.PUNCT,{linebreakstyle:"after",separator:!0}],"-":e.MO.BIN4,"-=":e.MO.BIN4,"->":e.MO.BIN5,".":[0,3,o.TEXCLASS.PUNCT,{separator:!0}],"/":e.MO.ORD11,"//":i(1,1),"/=":e.MO.BIN4,":":[1,2,o.TEXCLASS.REL,null],":=":e.MO.BIN4,";":[0,3,o.TEXCLASS.PUNCT,{linebreakstyle:"after",separator:!0}],"<":e.MO.REL,"<=":e.MO.BIN5,"<>":i(1,1),"=":e.MO.REL,"==":e.MO.BIN4,">":e.MO.REL,">=":e.MO.BIN5,"?":[1,1,o.TEXCLASS.CLOSE,null],"@":e.MO.ORD11,"\\":e.MO.ORD,"^":e.MO.ORD11,_:e.MO.ORD11,"|":[2,2,o.TEXCLASS.ORD,{fence:!0,stretchy:!0,symmetric:!0}],"||":[2,2,o.TEXCLASS.BIN,{fence:!0,stretchy:!0,symmetric:!0}],"|||":[2,2,o.TEXCLASS.ORD,{fence:!0,stretchy:!0,symmetric:!0}],"\xb1":e.MO.BIN4,"\xb7":e.MO.BIN4,"\xd7":e.MO.BIN4,"\xf7":e.MO.BIN4,"\u02b9":e.MO.ORD,"\u0300":e.MO.ACCENT,"\u0301":e.MO.ACCENT,"\u0303":e.MO.WIDEACCENT,"\u0304":e.MO.ACCENT,"\u0306":e.MO.ACCENT,"\u0307":e.MO.ACCENT,"\u0308":e.MO.ACCENT,"\u030c":e.MO.ACCENT,"\u0332":e.MO.WIDEACCENT,"\u0338":e.MO.REL4,"\u2015":[0,0,o.TEXCLASS.ORD,{stretchy:!0}],"\u2017":[0,0,o.TEXCLASS.ORD,{stretchy:!0}],"\u2020":e.MO.BIN3,"\u2021":e.MO.BIN3,"\u2022":e.MO.BIN4,"\u2026":e.MO.INNER,"\u2043":e.MO.BIN4,"\u2044":e.MO.TALLBIN,"\u2061":e.MO.NONE,"\u2062":e.MO.NONE,"\u2063":[0,0,o.TEXCLASS.NONE,{linebreakstyle:"after",separator:!0}],"\u2064":e.MO.NONE,"\u20d7":e.MO.ACCENT,"\u2111":e.MO.ORD,"\u2113":e.MO.ORD,"\u2118":e.MO.ORD,"\u211c":e.MO.ORD,"\u2190":e.MO.WIDEREL,"\u2191":e.MO.RELSTRETCH,"\u2192":e.MO.WIDEREL,"\u2193":e.MO.RELSTRETCH,"\u2194":e.MO.WIDEREL,"\u2195":e.MO.RELSTRETCH,"\u2196":e.MO.RELSTRETCH,"\u2197":e.MO.RELSTRETCH,"\u2198":e.MO.RELSTRETCH,"\u2199":e.MO.RELSTRETCH,"\u219a":e.MO.RELACCENT,"\u219b":e.MO.RELACCENT,"\u219c":e.MO.WIDEREL,"\u219d":e.MO.WIDEREL,"\u219e":e.MO.WIDEREL,"\u219f":e.MO.WIDEREL,"\u21a0":e.MO.WIDEREL,"\u21a1":e.MO.RELSTRETCH,"\u21a2":e.MO.WIDEREL,"\u21a3":e.MO.WIDEREL,"\u21a4":e.MO.WIDEREL,"\u21a5":e.MO.RELSTRETCH,"\u21a6":e.MO.WIDEREL,"\u21a7":e.MO.RELSTRETCH,"\u21a8":e.MO.RELSTRETCH,"\u21a9":e.MO.WIDEREL,"\u21aa":e.MO.WIDEREL,"\u21ab":e.MO.WIDEREL,"\u21ac":e.MO.WIDEREL,"\u21ad":e.MO.WIDEREL,"\u21ae":e.MO.RELACCENT,"\u21af":e.MO.RELSTRETCH,"\u21b0":e.MO.RELSTRETCH,"\u21b1":e.MO.RELSTRETCH,"\u21b2":e.MO.RELSTRETCH,"\u21b3":e.MO.RELSTRETCH,"\u21b4":e.MO.RELSTRETCH,"\u21b5":e.MO.RELSTRETCH,"\u21b6":e.MO.RELACCENT,"\u21b7":e.MO.RELACCENT,"\u21b8":e.MO.REL,"\u21b9":e.MO.WIDEREL,"\u21ba":e.MO.REL,"\u21bb":e.MO.REL,"\u21bc":e.MO.WIDEREL,"\u21bd":e.MO.WIDEREL,"\u21be":e.MO.RELSTRETCH,"\u21bf":e.MO.RELSTRETCH,"\u21c0":e.MO.WIDEREL,"\u21c1":e.MO.WIDEREL,"\u21c2":e.MO.RELSTRETCH,"\u21c3":e.MO.RELSTRETCH,"\u21c4":e.MO.WIDEREL,"\u21c5":e.MO.RELSTRETCH,"\u21c6":e.MO.WIDEREL,"\u21c7":e.MO.WIDEREL,"\u21c8":e.MO.RELSTRETCH,"\u21c9":e.MO.WIDEREL,"\u21ca":e.MO.RELSTRETCH,"\u21cb":e.MO.WIDEREL,"\u21cc":e.MO.WIDEREL,"\u21cd":e.MO.RELACCENT,"\u21ce":e.MO.RELACCENT,"\u21cf":e.MO.RELACCENT,"\u21d0":e.MO.WIDEREL,"\u21d1":e.MO.RELSTRETCH,"\u21d2":e.MO.WIDEREL,"\u21d3":e.MO.RELSTRETCH,"\u21d4":e.MO.WIDEREL,"\u21d5":e.MO.RELSTRETCH,"\u21d6":e.MO.RELSTRETCH,"\u21d7":e.MO.RELSTRETCH,"\u21d8":e.MO.RELSTRETCH,"\u21d9":e.MO.RELSTRETCH,"\u21da":e.MO.WIDEREL,"\u21db":e.MO.WIDEREL,"\u21dc":e.MO.WIDEREL,"\u21dd":e.MO.WIDEREL,"\u21de":e.MO.REL,"\u21df":e.MO.REL,"\u21e0":e.MO.WIDEREL,"\u21e1":e.MO.RELSTRETCH,"\u21e2":e.MO.WIDEREL,"\u21e3":e.MO.RELSTRETCH,"\u21e4":e.MO.WIDEREL,"\u21e5":e.MO.WIDEREL,"\u21e6":e.MO.WIDEREL,"\u21e7":e.MO.RELSTRETCH,"\u21e8":e.MO.WIDEREL,"\u21e9":e.MO.RELSTRETCH,"\u21ea":e.MO.RELSTRETCH,"\u21eb":e.MO.RELSTRETCH,"\u21ec":e.MO.RELSTRETCH,"\u21ed":e.MO.RELSTRETCH,"\u21ee":e.MO.RELSTRETCH,"\u21ef":e.MO.RELSTRETCH,"\u21f0":e.MO.WIDEREL,"\u21f1":e.MO.REL,"\u21f2":e.MO.REL,"\u21f3":e.MO.RELSTRETCH,"\u21f4":e.MO.RELACCENT,"\u21f5":e.MO.RELSTRETCH,"\u21f6":e.MO.WIDEREL,"\u21f7":e.MO.RELACCENT,"\u21f8":e.MO.RELACCENT,"\u21f9":e.MO.RELACCENT,"\u21fa":e.MO.RELACCENT,"\u21fb":e.MO.RELACCENT,"\u21fc":e.MO.RELACCENT,"\u21fd":e.MO.WIDEREL,"\u21fe":e.MO.WIDEREL,"\u21ff":e.MO.WIDEREL,"\u2201":i(1,2,o.TEXCLASS.ORD),"\u2205":e.MO.ORD,"\u2206":e.MO.BIN3,"\u2208":e.MO.REL,"\u2209":e.MO.REL,"\u220a":e.MO.REL,"\u220b":e.MO.REL,"\u220c":e.MO.REL,"\u220d":e.MO.REL,"\u220e":e.MO.BIN3,"\u2212":e.MO.BIN4,"\u2213":e.MO.BIN4,"\u2214":e.MO.BIN4,"\u2215":e.MO.TALLBIN,"\u2216":e.MO.BIN4,"\u2217":e.MO.BIN4,"\u2218":e.MO.BIN4,"\u2219":e.MO.BIN4,"\u221d":e.MO.REL,"\u221e":e.MO.ORD,"\u221f":e.MO.REL,"\u2223":e.MO.REL,"\u2224":e.MO.REL,"\u2225":e.MO.REL,"\u2226":e.MO.REL,"\u2227":e.MO.BIN4,"\u2228":e.MO.BIN4,"\u2229":e.MO.BIN4,"\u222a":e.MO.BIN4,"\u2234":e.MO.REL,"\u2235":e.MO.REL,"\u2236":e.MO.REL,"\u2237":e.MO.REL,"\u2238":e.MO.BIN4,"\u2239":e.MO.REL,"\u223a":e.MO.BIN4,"\u223b":e.MO.REL,"\u223c":e.MO.REL,"\u223d":e.MO.REL,"\u223d\u0331":e.MO.BIN3,"\u223e":e.MO.REL,"\u223f":e.MO.BIN3,"\u2240":e.MO.BIN4,"\u2241":e.MO.REL,"\u2242":e.MO.REL,"\u2242\u0338":e.MO.REL,"\u2243":e.MO.REL,"\u2244":e.MO.REL,"\u2245":e.MO.REL,"\u2246":e.MO.REL,"\u2247":e.MO.REL,"\u2248":e.MO.REL,"\u2249":e.MO.REL,"\u224a":e.MO.REL,"\u224b":e.MO.REL,"\u224c":e.MO.REL,"\u224d":e.MO.REL,"\u224e":e.MO.REL,"\u224e\u0338":e.MO.REL,"\u224f":e.MO.REL,"\u224f\u0338":e.MO.REL,"\u2250":e.MO.REL,"\u2251":e.MO.REL,"\u2252":e.MO.REL,"\u2253":e.MO.REL,"\u2254":e.MO.REL,"\u2255":e.MO.REL,"\u2256":e.MO.REL,"\u2257":e.MO.REL,"\u2258":e.MO.REL,"\u2259":e.MO.REL,"\u225a":e.MO.REL,"\u225b":e.MO.REL,"\u225c":e.MO.REL,"\u225d":e.MO.REL,"\u225e":e.MO.REL,"\u225f":e.MO.REL,"\u2260":e.MO.REL,"\u2261":e.MO.REL,"\u2262":e.MO.REL,"\u2263":e.MO.REL,"\u2264":e.MO.REL,"\u2265":e.MO.REL,"\u2266":e.MO.REL,"\u2266\u0338":e.MO.REL,"\u2267":e.MO.REL,"\u2268":e.MO.REL,"\u2269":e.MO.REL,"\u226a":e.MO.REL,"\u226a\u0338":e.MO.REL,"\u226b":e.MO.REL,"\u226b\u0338":e.MO.REL,"\u226c":e.MO.REL,"\u226d":e.MO.REL,"\u226e":e.MO.REL,"\u226f":e.MO.REL,"\u2270":e.MO.REL,"\u2271":e.MO.REL,"\u2272":e.MO.REL,"\u2273":e.MO.REL,"\u2274":e.MO.REL,"\u2275":e.MO.REL,"\u2276":e.MO.REL,"\u2277":e.MO.REL,"\u2278":e.MO.REL,"\u2279":e.MO.REL,"\u227a":e.MO.REL,"\u227b":e.MO.REL,"\u227c":e.MO.REL,"\u227d":e.MO.REL,"\u227e":e.MO.REL,"\u227f":e.MO.REL,"\u227f\u0338":e.MO.REL,"\u2280":e.MO.REL,"\u2281":e.MO.REL,"\u2282":e.MO.REL,"\u2282\u20d2":e.MO.REL,"\u2283":e.MO.REL,"\u2283\u20d2":e.MO.REL,"\u2284":e.MO.REL,"\u2285":e.MO.REL,"\u2286":e.MO.REL,"\u2287":e.MO.REL,"\u2288":e.MO.REL,"\u2289":e.MO.REL,"\u228a":e.MO.REL,"\u228b":e.MO.REL,"\u228c":e.MO.BIN4,"\u228d":e.MO.BIN4,"\u228e":e.MO.BIN4,"\u228f":e.MO.REL,"\u228f\u0338":e.MO.REL,"\u2290":e.MO.REL,"\u2290\u0338":e.MO.REL,"\u2291":e.MO.REL,"\u2292":e.MO.REL,"\u2293":e.MO.BIN4,"\u2294":e.MO.BIN4,"\u2295":e.MO.BIN4,"\u2296":e.MO.BIN4,"\u2297":e.MO.BIN4,"\u2298":e.MO.BIN4,"\u2299":e.MO.BIN4,"\u229a":e.MO.BIN4,"\u229b":e.MO.BIN4,"\u229c":e.MO.BIN4,"\u229d":e.MO.BIN4,"\u229e":e.MO.BIN4,"\u229f":e.MO.BIN4,"\u22a0":e.MO.BIN4,"\u22a1":e.MO.BIN4,"\u22a2":e.MO.REL,"\u22a3":e.MO.REL,"\u22a4":e.MO.ORD55,"\u22a5":e.MO.REL,"\u22a6":e.MO.REL,"\u22a7":e.MO.REL,"\u22a8":e.MO.REL,"\u22a9":e.MO.REL,"\u22aa":e.MO.REL,"\u22ab":e.MO.REL,"\u22ac":e.MO.REL,"\u22ad":e.MO.REL,"\u22ae":e.MO.REL,"\u22af":e.MO.REL,"\u22b0":e.MO.REL,"\u22b1":e.MO.REL,"\u22b2":e.MO.REL,"\u22b3":e.MO.REL,"\u22b4":e.MO.REL,"\u22b5":e.MO.REL,"\u22b6":e.MO.REL,"\u22b7":e.MO.REL,"\u22b8":e.MO.REL,"\u22b9":e.MO.REL,"\u22ba":e.MO.BIN4,"\u22bb":e.MO.BIN4,"\u22bc":e.MO.BIN4,"\u22bd":e.MO.BIN4,"\u22be":e.MO.BIN3,"\u22bf":e.MO.BIN3,"\u22c4":e.MO.BIN4,"\u22c5":e.MO.BIN4,"\u22c6":e.MO.BIN4,"\u22c7":e.MO.BIN4,"\u22c8":e.MO.REL,"\u22c9":e.MO.BIN4,"\u22ca":e.MO.BIN4,"\u22cb":e.MO.BIN4,"\u22cc":e.MO.BIN4,"\u22cd":e.MO.REL,"\u22ce":e.MO.BIN4,"\u22cf":e.MO.BIN4,"\u22d0":e.MO.REL,"\u22d1":e.MO.REL,"\u22d2":e.MO.BIN4,"\u22d3":e.MO.BIN4,"\u22d4":e.MO.REL,"\u22d5":e.MO.REL,"\u22d6":e.MO.REL,"\u22d7":e.MO.REL,"\u22d8":e.MO.REL,"\u22d9":e.MO.REL,"\u22da":e.MO.REL,"\u22db":e.MO.REL,"\u22dc":e.MO.REL,"\u22dd":e.MO.REL,"\u22de":e.MO.REL,"\u22df":e.MO.REL,"\u22e0":e.MO.REL,"\u22e1":e.MO.REL,"\u22e2":e.MO.REL,"\u22e3":e.MO.REL,"\u22e4":e.MO.REL,"\u22e5":e.MO.REL,"\u22e6":e.MO.REL,"\u22e7":e.MO.REL,"\u22e8":e.MO.REL,"\u22e9":e.MO.REL,"\u22ea":e.MO.REL,"\u22eb":e.MO.REL,"\u22ec":e.MO.REL,"\u22ed":e.MO.REL,"\u22ee":e.MO.ORD55,"\u22ef":e.MO.INNER,"\u22f0":e.MO.REL,"\u22f1":[5,5,o.TEXCLASS.INNER,null],"\u22f2":e.MO.REL,"\u22f3":e.MO.REL,"\u22f4":e.MO.REL,"\u22f5":e.MO.REL,"\u22f6":e.MO.REL,"\u22f7":e.MO.REL,"\u22f8":e.MO.REL,"\u22f9":e.MO.REL,"\u22fa":e.MO.REL,"\u22fb":e.MO.REL,"\u22fc":e.MO.REL,"\u22fd":e.MO.REL,"\u22fe":e.MO.REL,"\u22ff":e.MO.REL,"\u2305":e.MO.BIN3,"\u2306":e.MO.BIN3,"\u2322":e.MO.REL4,"\u2323":e.MO.REL4,"\u2329":e.MO.OPEN,"\u232a":e.MO.CLOSE,"\u23aa":e.MO.ORD,"\u23af":[0,0,o.TEXCLASS.ORD,{stretchy:!0}],"\u23b0":e.MO.OPEN,"\u23b1":e.MO.CLOSE,"\u2500":e.MO.ORD,"\u25b3":e.MO.BIN4,"\u25b5":e.MO.BIN4,"\u25b9":e.MO.BIN4,"\u25bd":e.MO.BIN4,"\u25bf":e.MO.BIN4,"\u25c3":e.MO.BIN4,"\u25ef":e.MO.BIN3,"\u2660":e.MO.ORD,"\u2661":e.MO.ORD,"\u2662":e.MO.ORD,"\u2663":e.MO.ORD,"\u2758":e.MO.REL,"\u27f0":e.MO.RELSTRETCH,"\u27f1":e.MO.RELSTRETCH,"\u27f5":e.MO.WIDEREL,"\u27f6":e.MO.WIDEREL,"\u27f7":e.MO.WIDEREL,"\u27f8":e.MO.WIDEREL,"\u27f9":e.MO.WIDEREL,"\u27fa":e.MO.WIDEREL,"\u27fb":e.MO.WIDEREL,"\u27fc":e.MO.WIDEREL,"\u27fd":e.MO.WIDEREL,"\u27fe":e.MO.WIDEREL,"\u27ff":e.MO.WIDEREL,"\u2900":e.MO.RELACCENT,"\u2901":e.MO.RELACCENT,"\u2902":e.MO.RELACCENT,"\u2903":e.MO.RELACCENT,"\u2904":e.MO.RELACCENT,"\u2905":e.MO.RELACCENT,"\u2906":e.MO.RELACCENT,"\u2907":e.MO.RELACCENT,"\u2908":e.MO.REL,"\u2909":e.MO.REL,"\u290a":e.MO.RELSTRETCH,"\u290b":e.MO.RELSTRETCH,"\u290c":e.MO.WIDEREL,"\u290d":e.MO.WIDEREL,"\u290e":e.MO.WIDEREL,"\u290f":e.MO.WIDEREL,"\u2910":e.MO.WIDEREL,"\u2911":e.MO.RELACCENT,"\u2912":e.MO.RELSTRETCH,"\u2913":e.MO.RELSTRETCH,"\u2914":e.MO.RELACCENT,"\u2915":e.MO.RELACCENT,"\u2916":e.MO.RELACCENT,"\u2917":e.MO.RELACCENT,"\u2918":e.MO.RELACCENT,"\u2919":e.MO.RELACCENT,"\u291a":e.MO.RELACCENT,"\u291b":e.MO.RELACCENT,"\u291c":e.MO.RELACCENT,"\u291d":e.MO.RELACCENT,"\u291e":e.MO.RELACCENT,"\u291f":e.MO.RELACCENT,"\u2920":e.MO.RELACCENT,"\u2921":e.MO.RELSTRETCH,"\u2922":e.MO.RELSTRETCH,"\u2923":e.MO.REL,"\u2924":e.MO.REL,"\u2925":e.MO.REL,"\u2926":e.MO.REL,"\u2927":e.MO.REL,"\u2928":e.MO.REL,"\u2929":e.MO.REL,"\u292a":e.MO.REL,"\u292b":e.MO.REL,"\u292c":e.MO.REL,"\u292d":e.MO.REL,"\u292e":e.MO.REL,"\u292f":e.MO.REL,"\u2930":e.MO.REL,"\u2931":e.MO.REL,"\u2932":e.MO.REL,"\u2933":e.MO.RELACCENT,"\u2934":e.MO.REL,"\u2935":e.MO.REL,"\u2936":e.MO.REL,"\u2937":e.MO.REL,"\u2938":e.MO.REL,"\u2939":e.MO.REL,"\u293a":e.MO.RELACCENT,"\u293b":e.MO.RELACCENT,"\u293c":e.MO.RELACCENT,"\u293d":e.MO.RELACCENT,"\u293e":e.MO.REL,"\u293f":e.MO.REL,"\u2940":e.MO.REL,"\u2941":e.MO.REL,"\u2942":e.MO.RELACCENT,"\u2943":e.MO.RELACCENT,"\u2944":e.MO.RELACCENT,"\u2945":e.MO.RELACCENT,"\u2946":e.MO.RELACCENT,"\u2947":e.MO.RELACCENT,"\u2948":e.MO.RELACCENT,"\u2949":e.MO.REL,"\u294a":e.MO.RELACCENT,"\u294b":e.MO.RELACCENT,"\u294c":e.MO.REL,"\u294d":e.MO.REL,"\u294e":e.MO.WIDEREL,"\u294f":e.MO.RELSTRETCH,"\u2950":e.MO.WIDEREL,"\u2951":e.MO.RELSTRETCH,"\u2952":e.MO.WIDEREL,"\u2953":e.MO.WIDEREL,"\u2954":e.MO.RELSTRETCH,"\u2955":e.MO.RELSTRETCH,"\u2956":e.MO.RELSTRETCH,"\u2957":e.MO.RELSTRETCH,"\u2958":e.MO.RELSTRETCH,"\u2959":e.MO.RELSTRETCH,"\u295a":e.MO.WIDEREL,"\u295b":e.MO.WIDEREL,"\u295c":e.MO.RELSTRETCH,"\u295d":e.MO.RELSTRETCH,"\u295e":e.MO.WIDEREL,"\u295f":e.MO.WIDEREL,"\u2960":e.MO.RELSTRETCH,"\u2961":e.MO.RELSTRETCH,"\u2962":e.MO.RELACCENT,"\u2963":e.MO.REL,"\u2964":e.MO.RELACCENT,"\u2965":e.MO.REL,"\u2966":e.MO.RELACCENT,"\u2967":e.MO.RELACCENT,"\u2968":e.MO.RELACCENT,"\u2969":e.MO.RELACCENT,"\u296a":e.MO.RELACCENT,"\u296b":e.MO.RELACCENT,"\u296c":e.MO.RELACCENT,"\u296d":e.MO.RELACCENT,"\u296e":e.MO.RELSTRETCH,"\u296f":e.MO.RELSTRETCH,"\u2970":e.MO.RELACCENT,"\u2971":e.MO.RELACCENT,"\u2972":e.MO.RELACCENT,"\u2973":e.MO.RELACCENT,"\u2974":e.MO.RELACCENT,"\u2975":e.MO.RELACCENT,"\u2976":e.MO.RELACCENT,"\u2977":e.MO.RELACCENT,"\u2978":e.MO.RELACCENT,"\u2979":e.MO.RELACCENT,"\u297a":e.MO.RELACCENT,"\u297b":e.MO.RELACCENT,"\u297c":e.MO.RELACCENT,"\u297d":e.MO.RELACCENT,"\u297e":e.MO.REL,"\u297f":e.MO.REL,"\u2981":e.MO.BIN3,"\u2982":e.MO.BIN3,"\u2999":e.MO.BIN3,"\u299a":e.MO.BIN3,"\u299b":e.MO.BIN3,"\u299c":e.MO.BIN3,"\u299d":e.MO.BIN3,"\u299e":e.MO.BIN3,"\u299f":e.MO.BIN3,"\u29a0":e.MO.BIN3,"\u29a1":e.MO.BIN3,"\u29a2":e.MO.BIN3,"\u29a3":e.MO.BIN3,"\u29a4":e.MO.BIN3,"\u29a5":e.MO.BIN3,"\u29a6":e.MO.BIN3,"\u29a7":e.MO.BIN3,"\u29a8":e.MO.BIN3,"\u29a9":e.MO.BIN3,"\u29aa":e.MO.BIN3,"\u29ab":e.MO.BIN3,"\u29ac":e.MO.BIN3,"\u29ad":e.MO.BIN3,"\u29ae":e.MO.BIN3,"\u29af":e.MO.BIN3,"\u29b0":e.MO.BIN3,"\u29b1":e.MO.BIN3,"\u29b2":e.MO.BIN3,"\u29b3":e.MO.BIN3,"\u29b4":e.MO.BIN3,"\u29b5":e.MO.BIN3,"\u29b6":e.MO.BIN4,"\u29b7":e.MO.BIN4,"\u29b8":e.MO.BIN4,"\u29b9":e.MO.BIN4,"\u29ba":e.MO.BIN4,"\u29bb":e.MO.BIN4,"\u29bc":e.MO.BIN4,"\u29bd":e.MO.BIN4,"\u29be":e.MO.BIN4,"\u29bf":e.MO.BIN4,"\u29c0":e.MO.REL,"\u29c1":e.MO.REL,"\u29c2":e.MO.BIN3,"\u29c3":e.MO.BIN3,"\u29c4":e.MO.BIN4,"\u29c5":e.MO.BIN4,"\u29c6":e.MO.BIN4,"\u29c7":e.MO.BIN4,"\u29c8":e.MO.BIN4,"\u29c9":e.MO.BIN3,"\u29ca":e.MO.BIN3,"\u29cb":e.MO.BIN3,"\u29cc":e.MO.BIN3,"\u29cd":e.MO.BIN3,"\u29ce":e.MO.REL,"\u29cf":e.MO.REL,"\u29cf\u0338":e.MO.REL,"\u29d0":e.MO.REL,"\u29d0\u0338":e.MO.REL,"\u29d1":e.MO.REL,"\u29d2":e.MO.REL,"\u29d3":e.MO.REL,"\u29d4":e.MO.REL,"\u29d5":e.MO.REL,"\u29d6":e.MO.BIN4,"\u29d7":e.MO.BIN4,"\u29d8":e.MO.BIN3,"\u29d9":e.MO.BIN3,"\u29db":e.MO.BIN3,"\u29dc":e.MO.BIN3,"\u29dd":e.MO.BIN3,"\u29de":e.MO.REL,"\u29df":e.MO.BIN3,"\u29e0":e.MO.BIN3,"\u29e1":e.MO.REL,"\u29e2":e.MO.BIN4,"\u29e3":e.MO.REL,"\u29e4":e.MO.REL,"\u29e5":e.MO.REL,"\u29e6":e.MO.REL,"\u29e7":e.MO.BIN3,"\u29e8":e.MO.BIN3,"\u29e9":e.MO.BIN3,"\u29ea":e.MO.BIN3,"\u29eb":e.MO.BIN3,"\u29ec":e.MO.BIN3,"\u29ed":e.MO.BIN3,"\u29ee":e.MO.BIN3,"\u29ef":e.MO.BIN3,"\u29f0":e.MO.BIN3,"\u29f1":e.MO.BIN3,"\u29f2":e.MO.BIN3,"\u29f3":e.MO.BIN3,"\u29f4":e.MO.REL,"\u29f5":e.MO.BIN4,"\u29f6":e.MO.BIN4,"\u29f7":e.MO.BIN4,"\u29f8":e.MO.BIN3,"\u29f9":e.MO.BIN3,"\u29fa":e.MO.BIN3,"\u29fb":e.MO.BIN3,"\u29fe":e.MO.BIN4,"\u29ff":e.MO.BIN4,"\u2a1d":e.MO.BIN3,"\u2a1e":e.MO.BIN3,"\u2a1f":e.MO.BIN3,"\u2a20":e.MO.BIN3,"\u2a21":e.MO.BIN3,"\u2a22":e.MO.BIN4,"\u2a23":e.MO.BIN4,"\u2a24":e.MO.BIN4,"\u2a25":e.MO.BIN4,"\u2a26":e.MO.BIN4,"\u2a27":e.MO.BIN4,"\u2a28":e.MO.BIN4,"\u2a29":e.MO.BIN4,"\u2a2a":e.MO.BIN4,"\u2a2b":e.MO.BIN4,"\u2a2c":e.MO.BIN4,"\u2a2d":e.MO.BIN4,"\u2a2e":e.MO.BIN4,"\u2a2f":e.MO.BIN4,"\u2a30":e.MO.BIN4,"\u2a31":e.MO.BIN4,"\u2a32":e.MO.BIN4,"\u2a33":e.MO.BIN4,"\u2a34":e.MO.BIN4,"\u2a35":e.MO.BIN4,"\u2a36":e.MO.BIN4,"\u2a37":e.MO.BIN4,"\u2a38":e.MO.BIN4,"\u2a39":e.MO.BIN4,"\u2a3a":e.MO.BIN4,"\u2a3b":e.MO.BIN4,"\u2a3c":e.MO.BIN4,"\u2a3d":e.MO.BIN4,"\u2a3e":e.MO.BIN4,"\u2a3f":e.MO.BIN4,"\u2a40":e.MO.BIN4,"\u2a41":e.MO.BIN4,"\u2a42":e.MO.BIN4,"\u2a43":e.MO.BIN4,"\u2a44":e.MO.BIN4,"\u2a45":e.MO.BIN4,"\u2a46":e.MO.BIN4,"\u2a47":e.MO.BIN4,"\u2a48":e.MO.BIN4,"\u2a49":e.MO.BIN4,"\u2a4a":e.MO.BIN4,"\u2a4b":e.MO.BIN4,"\u2a4c":e.MO.BIN4,"\u2a4d":e.MO.BIN4,"\u2a4e":e.MO.BIN4,"\u2a4f":e.MO.BIN4,"\u2a50":e.MO.BIN4,"\u2a51":e.MO.BIN4,"\u2a52":e.MO.BIN4,"\u2a53":e.MO.BIN4,"\u2a54":e.MO.BIN4,"\u2a55":e.MO.BIN4,"\u2a56":e.MO.BIN4,"\u2a57":e.MO.BIN4,"\u2a58":e.MO.BIN4,"\u2a59":e.MO.REL,"\u2a5a":e.MO.BIN4,"\u2a5b":e.MO.BIN4,"\u2a5c":e.MO.BIN4,"\u2a5d":e.MO.BIN4,"\u2a5e":e.MO.BIN4,"\u2a5f":e.MO.BIN4,"\u2a60":e.MO.BIN4,"\u2a61":e.MO.BIN4,"\u2a62":e.MO.BIN4,"\u2a63":e.MO.BIN4,"\u2a64":e.MO.BIN4,"\u2a65":e.MO.BIN4,"\u2a66":e.MO.REL,"\u2a67":e.MO.REL,"\u2a68":e.MO.REL,"\u2a69":e.MO.REL,"\u2a6a":e.MO.REL,"\u2a6b":e.MO.REL,"\u2a6c":e.MO.REL,"\u2a6d":e.MO.REL,"\u2a6e":e.MO.REL,"\u2a6f":e.MO.REL,"\u2a70":e.MO.REL,"\u2a71":e.MO.BIN4,"\u2a72":e.MO.BIN4,"\u2a73":e.MO.REL,"\u2a74":e.MO.REL,"\u2a75":e.MO.REL,"\u2a76":e.MO.REL,"\u2a77":e.MO.REL,"\u2a78":e.MO.REL,"\u2a79":e.MO.REL,"\u2a7a":e.MO.REL,"\u2a7b":e.MO.REL,"\u2a7c":e.MO.REL,"\u2a7d":e.MO.REL,"\u2a7d\u0338":e.MO.REL,"\u2a7e":e.MO.REL,"\u2a7e\u0338":e.MO.REL,"\u2a7f":e.MO.REL,"\u2a80":e.MO.REL,"\u2a81":e.MO.REL,"\u2a82":e.MO.REL,"\u2a83":e.MO.REL,"\u2a84":e.MO.REL,"\u2a85":e.MO.REL,"\u2a86":e.MO.REL,"\u2a87":e.MO.REL,"\u2a88":e.MO.REL,"\u2a89":e.MO.REL,"\u2a8a":e.MO.REL,"\u2a8b":e.MO.REL,"\u2a8c":e.MO.REL,"\u2a8d":e.MO.REL,"\u2a8e":e.MO.REL,"\u2a8f":e.MO.REL,"\u2a90":e.MO.REL,"\u2a91":e.MO.REL,"\u2a92":e.MO.REL,"\u2a93":e.MO.REL,"\u2a94":e.MO.REL,"\u2a95":e.MO.REL,"\u2a96":e.MO.REL,"\u2a97":e.MO.REL,"\u2a98":e.MO.REL,"\u2a99":e.MO.REL,"\u2a9a":e.MO.REL,"\u2a9b":e.MO.REL,"\u2a9c":e.MO.REL,"\u2a9d":e.MO.REL,"\u2a9e":e.MO.REL,"\u2a9f":e.MO.REL,"\u2aa0":e.MO.REL,"\u2aa1":e.MO.REL,"\u2aa1\u0338":e.MO.REL,"\u2aa2":e.MO.REL,"\u2aa2\u0338":e.MO.REL,"\u2aa3":e.MO.REL,"\u2aa4":e.MO.REL,"\u2aa5":e.MO.REL,"\u2aa6":e.MO.REL,"\u2aa7":e.MO.REL,"\u2aa8":e.MO.REL,"\u2aa9":e.MO.REL,"\u2aaa":e.MO.REL,"\u2aab":e.MO.REL,"\u2aac":e.MO.REL,"\u2aad":e.MO.REL,"\u2aae":e.MO.REL,"\u2aaf":e.MO.REL,"\u2aaf\u0338":e.MO.REL,"\u2ab0":e.MO.REL,"\u2ab0\u0338":e.MO.REL,"\u2ab1":e.MO.REL,"\u2ab2":e.MO.REL,"\u2ab3":e.MO.REL,"\u2ab4":e.MO.REL,"\u2ab5":e.MO.REL,"\u2ab6":e.MO.REL,"\u2ab7":e.MO.REL,"\u2ab8":e.MO.REL,"\u2ab9":e.MO.REL,"\u2aba":e.MO.REL,"\u2abb":e.MO.REL,"\u2abc":e.MO.REL,"\u2abd":e.MO.REL,"\u2abe":e.MO.REL,"\u2abf":e.MO.REL,"\u2ac0":e.MO.REL,"\u2ac1":e.MO.REL,"\u2ac2":e.MO.REL,"\u2ac3":e.MO.REL,"\u2ac4":e.MO.REL,"\u2ac5":e.MO.REL,"\u2ac6":e.MO.REL,"\u2ac7":e.MO.REL,"\u2ac8":e.MO.REL,"\u2ac9":e.MO.REL,"\u2aca":e.MO.REL,"\u2acb":e.MO.REL,"\u2acc":e.MO.REL,"\u2acd":e.MO.REL,"\u2ace":e.MO.REL,"\u2acf":e.MO.REL,"\u2ad0":e.MO.REL,"\u2ad1":e.MO.REL,"\u2ad2":e.MO.REL,"\u2ad3":e.MO.REL,"\u2ad4":e.MO.REL,"\u2ad5":e.MO.REL,"\u2ad6":e.MO.REL,"\u2ad7":e.MO.REL,"\u2ad8":e.MO.REL,"\u2ad9":e.MO.REL,"\u2ada":e.MO.REL,"\u2adb":e.MO.REL,"\u2add":e.MO.REL,"\u2add\u0338":e.MO.REL,"\u2ade":e.MO.REL,"\u2adf":e.MO.REL,"\u2ae0":e.MO.REL,"\u2ae1":e.MO.REL,"\u2ae2":e.MO.REL,"\u2ae3":e.MO.REL,"\u2ae4":e.MO.REL,"\u2ae5":e.MO.REL,"\u2ae6":e.MO.REL,"\u2ae7":e.MO.REL,"\u2ae8":e.MO.REL,"\u2ae9":e.MO.REL,"\u2aea":e.MO.REL,"\u2aeb":e.MO.REL,"\u2aec":e.MO.REL,"\u2aed":e.MO.REL,"\u2aee":e.MO.REL,"\u2aef":e.MO.REL,"\u2af0":e.MO.REL,"\u2af1":e.MO.REL,"\u2af2":e.MO.REL,"\u2af3":e.MO.REL,"\u2af4":e.MO.BIN4,"\u2af5":e.MO.BIN4,"\u2af6":e.MO.BIN4,"\u2af7":e.MO.REL,"\u2af8":e.MO.REL,"\u2af9":e.MO.REL,"\u2afa":e.MO.REL,"\u2afb":e.MO.BIN4,"\u2afd":e.MO.BIN4,"\u2afe":e.MO.BIN3,"\u2b45":e.MO.RELSTRETCH,"\u2b46":e.MO.RELSTRETCH,"\u3008":e.MO.OPEN,"\u3009":e.MO.CLOSE,"\ufe37":e.MO.WIDEACCENT,"\ufe38":e.MO.WIDEACCENT}},e.OPTABLE.infix["^"]=e.MO.WIDEREL,e.OPTABLE.infix._=e.MO.WIDEREL,e.OPTABLE.infix["\u2adc"]=e.MO.REL},9259:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(e,"__esModule",{value:!0}),e.SerializedMmlVisitor=e.toEntity=e.DATAMJX=void 0;var s=r(6325),l=r(9007),c=r(450);e.DATAMJX="data-mjx-";e.toEntity=function(t){return"&#x"+t.codePointAt(0).toString(16).toUpperCase()+";"};var u=function(t){function r(){return null!==t&&t.apply(this,arguments)||this}return o(r,t),r.prototype.visitTree=function(t){return this.visitNode(t,"")},r.prototype.visitTextNode=function(t,e){return this.quoteHTML(t.getText())},r.prototype.visitXMLNode=function(t,e){return e+t.getSerializedXML()},r.prototype.visitInferredMrowNode=function(t,e){var r,n,o=[];try{for(var a=i(t.childNodes),s=a.next();!s.done;s=a.next()){var l=s.value;o.push(this.visitNode(l,e))}}catch(t){r={error:t}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return o.join("\n")},r.prototype.visitTeXAtomNode=function(t,e){var r=this.childNodeMml(t,e+" ","\n");return e+""+(r.match(/\S/)?"\n"+r+e:"")+""},r.prototype.visitAnnotationNode=function(t,e){return e+""+this.childNodeMml(t,"","")+""},r.prototype.visitDefault=function(t,e){var r=t.kind,n=a(t.isToken||0===t.childNodes.length?["",""]:["\n",e],2),o=n[0],i=n[1],s=this.childNodeMml(t,e+" ",o);return e+"<"+r+this.getAttributes(t)+">"+(s.match(/\S/)?o+s+i:"")+""},r.prototype.childNodeMml=function(t,e,r){var n,o,a="";try{for(var s=i(t.childNodes),l=s.next();!l.done;l=s.next()){var c=l.value;a+=this.visitNode(c,e)+r}}catch(t){n={error:t}}finally{try{l&&!l.done&&(o=s.return)&&o.call(s)}finally{if(n)throw n.error}}return a},r.prototype.getAttributes=function(t){var e,r,n=[],o=this.constructor.defaultAttributes[t.kind]||{},a=Object.assign({},o,this.getDataAttributes(t),t.attributes.getAllAttributes()),s=this.constructor.variants;a.hasOwnProperty("mathvariant")&&s.hasOwnProperty(a.mathvariant)&&(a.mathvariant=s[a.mathvariant]);try{for(var l=i(Object.keys(a)),c=l.next();!c.done;c=l.next()){var u=c.value,p=String(a[u]);void 0!==p&&n.push(u+'="'+this.quoteHTML(p)+'"')}}catch(t){e={error:t}}finally{try{c&&!c.done&&(r=l.return)&&r.call(l)}finally{if(e)throw e.error}}return n.length?" "+n.join(" "):""},r.prototype.getDataAttributes=function(t){var e={},r=t.attributes.getExplicit("mathvariant"),n=this.constructor.variants;r&&n.hasOwnProperty(r)&&this.setDataAttribute(e,"variant",r),t.getProperty("variantForm")&&this.setDataAttribute(e,"alternate","1"),t.getProperty("pseudoscript")&&this.setDataAttribute(e,"pseudoscript","true"),!1===t.getProperty("autoOP")&&this.setDataAttribute(e,"auto-op","false");var o=t.getProperty("scriptalign");o&&this.setDataAttribute(e,"script-align",o);var i=t.getProperty("texClass");if(void 0!==i){var a=!0;if(i===l.TEXCLASS.OP&&t.isKind("mi")){var s=t.getText();a=!(s.length>1&&s.match(c.MmlMi.operatorName))}a&&this.setDataAttribute(e,"texclass",i<0?"NONE":l.TEXCLASSNAMES[i])}return t.getProperty("scriptlevel")&&!1===t.getProperty("useHeight")&&this.setDataAttribute(e,"smallmatrix","true"),e},r.prototype.setDataAttribute=function(t,r,n){t[e.DATAMJX+r]=n},r.prototype.quoteHTML=function(t){return t.replace(/&/g,"&").replace(//g,">").replace(/\"/g,""").replace(/[\uD800-\uDBFF]./g,e.toEntity).replace(/[\u0080-\uD7FF\uE000-\uFFFF]/g,e.toEntity)},r.variants={"-tex-calligraphic":"script","-tex-bold-calligraphic":"bold-script","-tex-oldstyle":"normal","-tex-bold-oldstyle":"bold","-tex-mathit":"italic"},r.defaultAttributes={math:{xmlns:"http://www.w3.org/1998/Math/MathML"}},r}(s.MmlVisitor);e.SerializedMmlVisitor=u},2975:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractOutputJax=void 0;var n=r(7233),o=r(7525),i=function(){function t(t){void 0===t&&(t={}),this.adaptor=null;var e=this.constructor;this.options=(0,n.userOptions)((0,n.defaultOptions)({},e.OPTIONS),t),this.postFilters=new o.FunctionList}return Object.defineProperty(t.prototype,"name",{get:function(){return this.constructor.NAME},enumerable:!1,configurable:!0}),t.prototype.setAdaptor=function(t){this.adaptor=t},t.prototype.initialize=function(){},t.prototype.reset=function(){for(var t=[],e=0;e=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},n=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},o=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractEmptyNode=e.AbstractNode=void 0;var a=function(){function t(t,e,r){var n,o;void 0===e&&(e={}),void 0===r&&(r=[]),this.factory=t,this.parent=null,this.properties={},this.childNodes=[];try{for(var a=i(Object.keys(e)),s=a.next();!s.done;s=a.next()){var l=s.value;this.setProperty(l,e[l])}}catch(t){n={error:t}}finally{try{s&&!s.done&&(o=a.return)&&o.call(a)}finally{if(n)throw n.error}}r.length&&this.setChildren(r)}return Object.defineProperty(t.prototype,"kind",{get:function(){return"unknown"},enumerable:!1,configurable:!0}),t.prototype.setProperty=function(t,e){this.properties[t]=e},t.prototype.getProperty=function(t){return this.properties[t]},t.prototype.getPropertyNames=function(){return Object.keys(this.properties)},t.prototype.getAllProperties=function(){return this.properties},t.prototype.removeProperty=function(){for(var t,e,r=[],n=0;n=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},i=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},s=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.HTMLDocument=void 0;var l=r(5722),c=r(7233),u=r(3363),p=r(3335),h=r(5138),d=r(4474),f=function(t){function e(e,r,n){var o=this,i=a((0,c.separateOptions)(n,h.HTMLDomStrings.OPTIONS),2),s=i[0],l=i[1];return(o=t.call(this,e,r,s)||this).domStrings=o.options.DomStrings||new h.HTMLDomStrings(l),o.domStrings.adaptor=r,o.styles=[],o}return o(e,t),e.prototype.findPosition=function(t,e,r,n){var o,i,l=this.adaptor;try{for(var c=s(n[t]),u=c.next();!u.done;u=c.next()){var p=u.value,h=a(p,2),d=h[0],f=h[1];if(e<=f&&"#text"===l.kind(d))return{node:d,n:Math.max(e,0),delim:r};e-=f}}catch(t){o={error:t}}finally{try{u&&!u.done&&(i=c.return)&&i.call(c)}finally{if(o)throw o.error}}return{node:null,n:0,delim:r}},e.prototype.mathItem=function(t,e,r){var n=t.math,o=this.findPosition(t.n,t.start.n,t.open,r),i=this.findPosition(t.n,t.end.n,t.close,r);return new this.options.MathItem(n,e,t.display,o,i)},e.prototype.findMath=function(t){var e,r,n,o,i,l,u,p,h;if(!this.processed.isSet("findMath")){this.adaptor.document=this.document,t=(0,c.userOptions)({elements:this.options.elements||[this.adaptor.body(this.document)]},t);try{for(var d=s(this.adaptor.getElements(t.elements,this.document)),f=d.next();!f.done;f=d.next()){var m=f.value,y=a([null,null],2),g=y[0],b=y[1];try{for(var v=(n=void 0,s(this.inputJax)),_=v.next();!_.done;_=v.next()){var S=_.value,x=new this.options.MathList;if(S.processStrings){null===g&&(g=(i=a(this.domStrings.find(m),2))[0],b=i[1]);try{for(var M=(l=void 0,s(S.findMath(g))),O=M.next();!O.done;O=M.next()){var E=O.value;x.push(this.mathItem(E,S,b))}}catch(t){l={error:t}}finally{try{O&&!O.done&&(u=M.return)&&u.call(M)}finally{if(l)throw l.error}}}else try{for(var A=(p=void 0,s(S.findMath(m))),C=A.next();!C.done;C=A.next()){E=C.value;var w=new this.options.MathItem(E.math,S,E.display,E.start,E.end);x.push(w)}}catch(t){p={error:t}}finally{try{C&&!C.done&&(h=A.return)&&h.call(A)}finally{if(p)throw p.error}}this.math.merge(x)}}catch(t){n={error:t}}finally{try{_&&!_.done&&(o=v.return)&&o.call(v)}finally{if(n)throw n.error}}}}catch(t){e={error:t}}finally{try{f&&!f.done&&(r=d.return)&&r.call(d)}finally{if(e)throw e.error}}this.processed.set("findMath")}return this},e.prototype.updateDocument=function(){return this.processed.isSet("updateDocument")||(this.addPageElements(),this.addStyleSheet(),t.prototype.updateDocument.call(this),this.processed.set("updateDocument")),this},e.prototype.addPageElements=function(){var t=this.adaptor.body(this.document),e=this.documentPageElements();e&&this.adaptor.append(t,e)},e.prototype.addStyleSheet=function(){var t=this.documentStyleSheet(),e=this.adaptor;if(t&&!e.parent(t)){var r=e.head(this.document),n=this.findSheet(r,e.getAttribute(t,"id"));n?e.replace(t,n):e.append(r,t)}},e.prototype.findSheet=function(t,e){var r,n;if(e)try{for(var o=s(this.adaptor.tags(t,"style")),i=o.next();!i.done;i=o.next()){var a=i.value;if(this.adaptor.getAttribute(a,"id")===e)return a}}catch(t){r={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return null},e.prototype.removeFromDocument=function(t){var e,r;if(void 0===t&&(t=!1),this.processed.isSet("updateDocument"))try{for(var n=s(this.math),o=n.next();!o.done;o=n.next()){var i=o.value;i.state()>=d.STATE.INSERTED&&i.state(d.STATE.TYPESET,t)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}return this.processed.clear("updateDocument"),this},e.prototype.documentStyleSheet=function(){return this.outputJax.styleSheet(this)},e.prototype.documentPageElements=function(){return this.outputJax.pageElements(this)},e.prototype.addStyles=function(t){this.styles.push(t)},e.prototype.getStyles=function(){return this.styles},e.KIND="HTML",e.OPTIONS=i(i({},l.AbstractMathDocument.OPTIONS),{renderActions:(0,c.expandable)(i(i({},l.AbstractMathDocument.OPTIONS.renderActions),{styles:[d.STATE.INSERTED+1,"","updateStyleSheet",!1]})),MathList:p.HTMLMathList,MathItem:u.HTMLMathItem,DomStrings:null}),e}(l.AbstractMathDocument);e.HTMLDocument=f},5138:function(t,e,r){var n=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(e,"__esModule",{value:!0}),e.HTMLDomStrings=void 0;var o=r(7233),i=function(){function t(t){void 0===t&&(t=null);var e=this.constructor;this.options=(0,o.userOptions)((0,o.defaultOptions)({},e.OPTIONS),t),this.init(),this.getPatterns()}return t.prototype.init=function(){this.strings=[],this.string="",this.snodes=[],this.nodes=[],this.stack=[]},t.prototype.getPatterns=function(){var t=(0,o.makeArray)(this.options.skipHtmlTags),e=(0,o.makeArray)(this.options.ignoreHtmlClass),r=(0,o.makeArray)(this.options.processHtmlClass);this.skipHtmlTags=new RegExp("^(?:"+t.join("|")+")$","i"),this.ignoreHtmlClass=new RegExp("(?:^| )(?:"+e.join("|")+")(?: |$)"),this.processHtmlClass=new RegExp("(?:^| )(?:"+r+")(?: |$)")},t.prototype.pushString=function(){this.string.match(/\S/)&&(this.strings.push(this.string),this.nodes.push(this.snodes)),this.string="",this.snodes=[]},t.prototype.extendString=function(t,e){this.snodes.push([t,e.length]),this.string+=e},t.prototype.handleText=function(t,e){return e||this.extendString(t,this.adaptor.value(t)),this.adaptor.next(t)},t.prototype.handleTag=function(t,e){if(!e){var r=this.options.includeHtmlTags[this.adaptor.kind(t)];this.extendString(t,r)}return this.adaptor.next(t)},t.prototype.handleContainer=function(t,e){this.pushString();var r=this.adaptor.getAttribute(t,"class")||"",n=this.adaptor.kind(t)||"",o=this.processHtmlClass.exec(r),i=t;return!this.adaptor.firstChild(t)||this.adaptor.getAttribute(t,"data-MJX")||!o&&this.skipHtmlTags.exec(n)?i=this.adaptor.next(t):(this.adaptor.next(t)&&this.stack.push([this.adaptor.next(t),e]),i=this.adaptor.firstChild(t),e=(e||this.ignoreHtmlClass.exec(r))&&!o),[i,e]},t.prototype.handleOther=function(t,e){return this.pushString(),this.adaptor.next(t)},t.prototype.find=function(t){var e,r;this.init();for(var o=this.adaptor.next(t),i=!1,a=this.options.includeHtmlTags;t&&t!==o;){var s=this.adaptor.kind(t);"#text"===s?t=this.handleText(t,i):a.hasOwnProperty(s)?t=this.handleTag(t,i):s?(t=(e=n(this.handleContainer(t,i),2))[0],i=e[1]):t=this.handleOther(t,i),!t&&this.stack.length&&(this.pushString(),t=(r=n(this.stack.pop(),2))[0],i=r[1])}this.pushString();var l=[this.strings,this.nodes];return this.init(),l},t.OPTIONS={skipHtmlTags:["script","noscript","style","textarea","pre","code","annotation","annotation-xml"],includeHtmlTags:{br:"\n",wbr:"","#comment":""},ignoreHtmlClass:"mathjax_ignore",processHtmlClass:"mathjax_process"},t}();e.HTMLDomStrings=i},3726:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.HTMLHandler=void 0;var i=r(3670),a=r(3683),s=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.documentClass=a.HTMLDocument,e}return o(e,t),e.prototype.handlesDocument=function(t){var e=this.adaptor;if("string"==typeof t)try{t=e.parse(t,"text/html")}catch(t){}return t instanceof e.window.Document||t instanceof e.window.HTMLElement||t instanceof e.window.DocumentFragment},e.prototype.create=function(e,r){var n=this.adaptor;if("string"==typeof e)e=n.parse(e,"text/html");else if(e instanceof n.window.HTMLElement||e instanceof n.window.DocumentFragment){var o=e;e=n.parse("","text/html"),n.append(n.body(e),o)}return t.prototype.create.call(this,e,r)},e}(i.AbstractHandler);e.HTMLHandler=s},3363:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.HTMLMathItem=void 0;var i=r(4474),a=function(t){function e(e,r,n,o,i){return void 0===n&&(n=!0),void 0===o&&(o={node:null,n:0,delim:""}),void 0===i&&(i={node:null,n:0,delim:""}),t.call(this,e,r,n,o,i)||this}return o(e,t),Object.defineProperty(e.prototype,"adaptor",{get:function(){return this.inputJax.adaptor},enumerable:!1,configurable:!0}),e.prototype.updateDocument=function(t){if(this.state()=i.STATE.TYPESET){var e=this.adaptor,r=this.start.node,n=e.text("");if(t){var o=this.start.delim+this.math+this.end.delim;if(this.inputJax.processStrings)n=e.text(o);else{var a=e.parse(o,"text/html");n=e.firstChild(e.body(a))}}e.parent(r)&&e.replace(n,r),this.start.node=this.end.node=n,this.start.n=this.end.n=0}},e}(i.AbstractMathItem);e.HTMLMathItem=a},3335:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.HTMLMathList=void 0;var i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e}(r(9e3).AbstractMathList);e.HTMLMathList=i},8462:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},s=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.TeX=void 0;var l=r(9206),c=r(7233),u=r(7073),p=s(r(4676)),h=s(r(1256)),d=s(r(8417)),f=s(r(3971)),m=s(r(8562)),y=r(6521),g=r(9899);r(2942);var b=function(t){function e(r){void 0===r&&(r={});var n=this,o=a((0,c.separateOptions)(r,e.OPTIONS,u.FindTeX.OPTIONS),3),i=o[0],s=o[1],l=o[2];(n=t.call(this,s)||this).findTeX=n.options.FindTeX||new u.FindTeX(l);var h=n.options.packages,d=n.configuration=e.configure(h),f=n._parseOptions=new m.default(d,[n.options,y.TagsFactory.OPTIONS]);return(0,c.userOptions)(f.options,i),d.config(n),e.tags(f,d),n.postFilters.add(p.default.cleanSubSup,-6),n.postFilters.add(p.default.setInherited,-5),n.postFilters.add(p.default.moveLimits,-4),n.postFilters.add(p.default.cleanStretchy,-3),n.postFilters.add(p.default.cleanAttributes,-2),n.postFilters.add(p.default.combineRelations,-1),n}return o(e,t),e.configure=function(t){var e=new g.ParserConfiguration(t,["tex"]);return e.init(),e},e.tags=function(t,e){y.TagsFactory.addTags(e.tags),y.TagsFactory.setDefault(t.options.tags),t.tags=y.TagsFactory.getDefault(),t.tags.configuration=t},e.prototype.setMmlFactory=function(e){t.prototype.setMmlFactory.call(this,e),this._parseOptions.nodeFactory.setMmlFactory(e)},Object.defineProperty(e.prototype,"parseOptions",{get:function(){return this._parseOptions},enumerable:!1,configurable:!0}),e.prototype.reset=function(t){void 0===t&&(t=0),this.parseOptions.tags.reset(t)},e.prototype.compile=function(t,e){this.parseOptions.clear(),this.executeFilters(this.preFilters,t,e,this.parseOptions);var r,n,o=t.display;this.latex=t.math,this.parseOptions.tags.startEquation(t);try{var i=new d.default(this.latex,{display:o,isInner:!1},this.parseOptions);r=i.mml(),n=i.stack.global}catch(t){if(!(t instanceof f.default))throw t;this.parseOptions.error=!0,r=this.options.formatError(this,t)}return r=this.parseOptions.nodeFactory.create("node","math",[r]),(null==n?void 0:n.indentalign)&&h.default.setAttribute(r,"indentalign",n.indentalign),o&&h.default.setAttribute(r,"display","block"),this.parseOptions.tags.finishEquation(t),this.parseOptions.root=r,this.executeFilters(this.postFilters,t,e,this.parseOptions),this.mathNode=this.parseOptions.root,this.mathNode},e.prototype.findMath=function(t){return this.findTeX.findMath(t)},e.prototype.formatError=function(t){var e=t.message.replace(/\n.*/,"");return this.parseOptions.nodeFactory.create("error",e,t.id,this.latex)},e.NAME="TeX",e.OPTIONS=i(i({},l.AbstractInputJax.OPTIONS),{FindTeX:null,packages:["base"],digits:/^(?:[0-9]+(?:\{,\}[0-9]{3})*(?:\.[0-9]*)?|\.[0-9]+)/,maxBuffer:5120,formatError:function(t,e){return t.formatError(e)}}),e}(l.AbstractInputJax);e.TeX=b},210:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.AllPackages=void 0,r(2942),r(8174),r(8021),r(583),r(1186),r(8603),r(6538),r(9499),r(8963),r(3752),r(8227),r(5860),r(6628),r(6648),r(8458),r(5464),r(1428),r(6121),r(3078),r(8901),r(7535),r(6944),r(1496),r(4234),r(4898),r(3168),r(9365),r(1527),r(2307),r(2675),r(1442),r(6841),r(1247),"undefined"!=typeof MathJax&&MathJax.loader&&MathJax.loader.preLoad("[tex]/action","[tex]/ams","[tex]/amscd","[tex]/bbox","[tex]/boldsymbol","[tex]/braket","[tex]/bussproofs","[tex]/cancel","[tex]/cases","[tex]/centernot","[tex]/color","[tex]/colorv2","[tex]/colortbl","[tex]/empheq","[tex]/enclose","[tex]/extpfeil","[tex]/gensymb","[tex]/html","[tex]/mathtools","[tex]/mhchem","[tex]/newcommand","[tex]/noerrors","[tex]/noundefined","[tex]/physics","[tex]/upgreek","[tex]/unicode","[tex]/verb","[tex]/configmacros","[tex]/tagformat","[tex]/textcomp","[tex]/textmacros","[tex]/setoptions"),e.AllPackages=["base","action","ams","amscd","bbox","boldsymbol","braket","bussproofs","cancel","cases","centernot","color","colortbl","empheq","enclose","extpfeil","gensymb","html","mathtools","mhchem","newcommand","noerrors","noundefined","upgreek","unicode","verb","configmacros","tagformat","textcomp","textmacros"]},9899:function(t,e,r){var n=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(e,"__esModule",{value:!0}),e.ParserConfiguration=e.ConfigurationHandler=e.Configuration=void 0;var i,a=r(7233),s=r(2947),l=r(7525),c=r(8666),u=r(6521),p=function(){function t(t,e,r,n,o,i,a,s,l,c,u,p,h){void 0===e&&(e={}),void 0===r&&(r={}),void 0===n&&(n={}),void 0===o&&(o={}),void 0===i&&(i={}),void 0===a&&(a={}),void 0===s&&(s=[]),void 0===l&&(l=[]),void 0===c&&(c=null),void 0===u&&(u=null),this.name=t,this.handler=e,this.fallback=r,this.items=n,this.tags=o,this.options=i,this.nodes=a,this.preprocessors=s,this.postprocessors=l,this.initMethod=c,this.configMethod=u,this.priority=p,this.parser=h,this.handler=Object.assign({character:[],delimiter:[],macro:[],environment:[]},e)}return t.makeProcessor=function(t,e){return Array.isArray(t)?t:[t,e]},t._create=function(e,r){var n=this;void 0===r&&(r={});var o=r.priority||c.PrioritizedList.DEFAULTPRIORITY,i=r.init?this.makeProcessor(r.init,o):null,a=r.config?this.makeProcessor(r.config,o):null,s=(r.preprocessors||[]).map((function(t){return n.makeProcessor(t,o)})),l=(r.postprocessors||[]).map((function(t){return n.makeProcessor(t,o)})),u=r.parser||"tex";return new t(e,r.handler||{},r.fallback||{},r.items||{},r.tags||{},r.options||{},r.nodes||{},s,l,i,a,o,u)},t.create=function(e,r){void 0===r&&(r={});var n=t._create(e,r);return i.set(e,n),n},t.local=function(e){return void 0===e&&(e={}),t._create("",e)},Object.defineProperty(t.prototype,"init",{get:function(){return this.initMethod?this.initMethod[0]:null},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"config",{get:function(){return this.configMethod?this.configMethod[0]:null},enumerable:!1,configurable:!0}),t}();e.Configuration=p,function(t){var e=new Map;t.set=function(t,r){e.set(t,r)},t.get=function(t){return e.get(t)},t.keys=function(){return e.keys()}}(i=e.ConfigurationHandler||(e.ConfigurationHandler={}));var h=function(){function t(t,e){var r,o,i,a;void 0===e&&(e=["tex"]),this.initMethod=new l.FunctionList,this.configMethod=new l.FunctionList,this.configurations=new c.PrioritizedList,this.parsers=[],this.handlers=new s.SubHandlers,this.items={},this.tags={},this.options={},this.nodes={},this.parsers=e;try{for(var u=n(t.slice().reverse()),p=u.next();!p.done;p=u.next()){var h=p.value;this.addPackage(h)}}catch(t){r={error:t}}finally{try{p&&!p.done&&(o=u.return)&&o.call(u)}finally{if(r)throw r.error}}try{for(var d=n(this.configurations),f=d.next();!f.done;f=d.next()){var m=f.value,y=m.item,g=m.priority;this.append(y,g)}}catch(t){i={error:t}}finally{try{f&&!f.done&&(a=d.return)&&a.call(d)}finally{if(i)throw i.error}}}return t.prototype.init=function(){this.initMethod.execute(this)},t.prototype.config=function(t){var e,r;this.configMethod.execute(this,t);try{for(var o=n(this.configurations),i=o.next();!i.done;i=o.next()){var a=i.value;this.addFilters(t,a.item)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}},t.prototype.addPackage=function(t){var e="string"==typeof t?t:t[0],r=this.getPackage(e);r&&this.configurations.add(r,"string"==typeof t?r.priority:t[1])},t.prototype.add=function(t,e,r){var o,i;void 0===r&&(r={});var s=this.getPackage(t);this.append(s),this.configurations.add(s,s.priority),this.init();var l=e.parseOptions;l.nodeFactory.setCreators(s.nodes);try{for(var c=n(Object.keys(s.items)),p=c.next();!p.done;p=c.next()){var h=p.value;l.itemFactory.setNodeClass(h,s.items[h])}}catch(t){o={error:t}}finally{try{p&&!p.done&&(i=c.return)&&i.call(c)}finally{if(o)throw o.error}}u.TagsFactory.addTags(s.tags),(0,a.defaultOptions)(l.options,s.options),(0,a.userOptions)(l.options,r),this.addFilters(e,s),s.config&&s.config(this,e)},t.prototype.getPackage=function(t){var e=i.get(t);if(e&&this.parsers.indexOf(e.parser)<0)throw Error("Package ".concat(t," doesn't target the proper parser"));return e},t.prototype.append=function(t,e){e=e||t.priority,t.initMethod&&this.initMethod.add(t.initMethod[0],t.initMethod[1]),t.configMethod&&this.configMethod.add(t.configMethod[0],t.configMethod[1]),this.handlers.add(t.handler,t.fallback,e),Object.assign(this.items,t.items),Object.assign(this.tags,t.tags),(0,a.defaultOptions)(this.options,t.options),Object.assign(this.nodes,t.nodes)},t.prototype.addFilters=function(t,e){var r,i,a,s;try{for(var l=n(e.preprocessors),c=l.next();!c.done;c=l.next()){var u=o(c.value,2),p=u[0],h=u[1];t.preFilters.add(p,h)}}catch(t){r={error:t}}finally{try{c&&!c.done&&(i=l.return)&&i.call(l)}finally{if(r)throw r.error}}try{for(var d=n(e.postprocessors),f=d.next();!f.done;f=d.next()){var m=o(f.value,2),y=m[0];h=m[1];t.postFilters.add(y,h)}}catch(t){a={error:t}}finally{try{f&&!f.done&&(s=d.return)&&s.call(d)}finally{if(a)throw a.error}}},t}();e.ParserConfiguration=h},4676:function(t,e,r){var n=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i,a=r(9007),s=o(r(1256));!function(t){t.cleanStretchy=function(t){var e,r,o=t.data;try{for(var i=n(o.getList("fixStretchy")),a=i.next();!a.done;a=i.next()){var l=a.value;if(s.default.getProperty(l,"fixStretchy")){var c=s.default.getForm(l);c&&c[3]&&c[3].stretchy&&s.default.setAttribute(l,"stretchy",!1);var u=l.parent;if(!(s.default.getTexClass(l)||c&&c[2])){var p=o.nodeFactory.create("node","TeXAtom",[l]);u.replaceChild(p,l),p.inheritAttributesFrom(l)}s.default.removeProperties(l,"fixStretchy")}}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}},t.cleanAttributes=function(t){t.data.root.walkTree((function(t,e){var r,o,i=t.attributes;if(i){var a=new Set((i.get("mjx-keep-attrs")||"").split(/ /));delete i.getAllAttributes()["mjx-keep-attrs"];try{for(var s=n(i.getExplicitNames()),l=s.next();!l.done;l=s.next()){var c=l.value;a.has(c)||i.attributes[c]!==t.attributes.getInherited(c)||delete i.attributes[c]}}catch(t){r={error:t}}finally{try{l&&!l.done&&(o=s.return)&&o.call(s)}finally{if(r)throw r.error}}}}),{})},t.combineRelations=function(t){var o,i,l,c,u=[];try{for(var p=n(t.data.getList("mo")),h=p.next();!h.done;h=p.next()){var d=h.value;if(!d.getProperty("relationsCombined")&&d.parent&&(!d.parent||s.default.isType(d.parent,"mrow"))&&s.default.getTexClass(d)===a.TEXCLASS.REL){for(var f=d.parent,m=void 0,y=f.childNodes,g=y.indexOf(d)+1,b=s.default.getProperty(d,"variantForm");g0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(e,"__esModule",{value:!0}),e.FindTeX=void 0;var a=r(3494),s=r(505),l=r(4474),c=function(t){function e(e){var r=t.call(this,e)||this;return r.getPatterns(),r}return o(e,t),e.prototype.getPatterns=function(){var t=this,e=this.options,r=[],n=[],o=[];this.end={},this.env=this.sub=0;var i=1;e.inlineMath.forEach((function(e){return t.addPattern(r,e,!1)})),e.displayMath.forEach((function(e){return t.addPattern(r,e,!0)})),r.length&&n.push(r.sort(s.sortLength).join("|")),e.processEnvironments&&(n.push("\\\\begin\\s*\\{([^}]*)\\}"),this.env=i,i++),e.processEscapes&&o.push("\\\\([\\\\$])"),e.processRefs&&o.push("(\\\\(?:eq)?ref\\s*\\{[^}]*\\})"),o.length&&(n.push("("+o.join("|")+")"),this.sub=i),this.start=new RegExp(n.join("|"),"g"),this.hasPatterns=n.length>0},e.prototype.addPattern=function(t,e,r){var n=i(e,2),o=n[0],a=n[1];t.push((0,s.quotePattern)(o)),this.end[o]=[a,r,this.endPattern(a)]},e.prototype.endPattern=function(t,e){return new RegExp((e||(0,s.quotePattern)(t))+"|\\\\(?:[a-zA-Z]|.)|[{}]","g")},e.prototype.findEnd=function(t,e,r,n){for(var o,a=i(n,3),s=a[0],c=a[1],u=a[2],p=u.lastIndex=r.index+r[0].length,h=0;o=u.exec(t);){if((o[1]||o[0])===s&&0===h)return(0,l.protoItem)(r[0],t.substr(p,o.index-p),o[0],e,r.index,o.index+o[0].length,c);"{"===o[0]?h++:"}"===o[0]&&h&&h--}return null},e.prototype.findMathInString=function(t,e,r){var n,o;for(this.start.lastIndex=0;n=this.start.exec(r);){if(void 0!==n[this.env]&&this.env){var i="\\\\end\\s*(\\{"+(0,s.quotePattern)(n[this.env])+"\\})";(o=this.findEnd(r,e,n,["{"+n[this.env]+"}",!0,this.endPattern(null,i)]))&&(o.math=o.open+o.math+o.close,o.open=o.close="")}else if(void 0!==n[this.sub]&&this.sub){var a=n[this.sub];i=n.index+n[this.sub].length;o=2===a.length?(0,l.protoItem)("",a.substr(1),"",e,n.index,i):(0,l.protoItem)("",a,"",e,n.index,i,!1)}else o=this.findEnd(r,e,n,this.end[n[0]]);o&&(t.push(o),this.start.lastIndex=o.end.n)}},e.prototype.findMath=function(t){var e=[];if(this.hasPatterns)for(var r=0,n=t.length;r=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(e,"__esModule",{value:!0}),e.SubHandlers=e.SubHandler=e.MapHandler=void 0;var i,a=r(8666),s=r(7525);!function(t){var e=new Map;t.register=function(t){e.set(t.name,t)},t.getMap=function(t){return e.get(t)}}(i=e.MapHandler||(e.MapHandler={}));var l=function(){function t(){this._configuration=new a.PrioritizedList,this._fallback=new s.FunctionList}return t.prototype.add=function(t,e,r){var o,s;void 0===r&&(r=a.PrioritizedList.DEFAULTPRIORITY);try{for(var l=n(t.slice().reverse()),c=l.next();!c.done;c=l.next()){var u=c.value,p=i.getMap(u);if(!p)return void this.warn("Configuration "+u+" not found! Omitted.");this._configuration.add(p,r)}}catch(t){o={error:t}}finally{try{c&&!c.done&&(s=l.return)&&s.call(l)}finally{if(o)throw o.error}}e&&this._fallback.add(e,r)},t.prototype.parse=function(t){var e,r;try{for(var i=n(this._configuration),a=i.next();!a.done;a=i.next()){var s=a.value.item.parse(t);if(s)return s}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}var l=o(t,2),c=l[0],u=l[1];Array.from(this._fallback)[0].item(c,u)},t.prototype.lookup=function(t){var e=this.applicable(t);return e?e.lookup(t):null},t.prototype.contains=function(t){return!!this.applicable(t)},t.prototype.toString=function(){var t,e,r=[];try{for(var o=n(this._configuration),i=o.next();!i.done;i=o.next()){var a=i.value.item;r.push(a.name)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}return r.join(", ")},t.prototype.applicable=function(t){var e,r;try{for(var o=n(this._configuration),i=o.next();!i.done;i=o.next()){var a=i.value.item;if(a.contains(t))return a}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}return null},t.prototype.retrieve=function(t){var e,r;try{for(var o=n(this._configuration),i=o.next();!i.done;i=o.next()){var a=i.value.item;if(a.name===t)return a}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}return null},t.prototype.warn=function(t){console.log("TexParser Warning: "+t)},t}();e.SubHandler=l;var c=function(){function t(){this.map=new Map}return t.prototype.add=function(t,e,r){var o,i;void 0===r&&(r=a.PrioritizedList.DEFAULTPRIORITY);try{for(var s=n(Object.keys(t)),c=s.next();!c.done;c=s.next()){var u=c.value,p=this.get(u);p||(p=new l,this.set(u,p)),p.add(t[u],e[u],r)}}catch(t){o={error:t}}finally{try{c&&!c.done&&(i=s.return)&&i.call(s)}finally{if(o)throw o.error}}},t.prototype.set=function(t,e){this.map.set(t,e)},t.prototype.get=function(t){return this.map.get(t)},t.prototype.retrieve=function(t){var e,r;try{for(var o=n(this.map.values()),i=o.next();!i.done;i=o.next()){var a=i.value.retrieve(t);if(a)return a}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}return null},t.prototype.keys=function(){return this.map.keys()},t}();e.SubHandlers=c},8929:function(t,e,r){var n=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},o=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},i=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},o=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o1&&(r.autoOP=!1));var o=t.create("token","mi",r,e);t.Push(o)},t.digit=function(t,e){var r,n=t.configuration.options.digits,o=t.string.slice(t.i-1).match(n),i=c.default.getFontDef(t);o?(r=t.create("token","mn",i,o[0].replace(/[{}]/g,"")),t.i+=o[0].length-1):r=t.create("token","mo",i,e),t.Push(r)},t.controlSequence=function(t,e){var r=t.GetCS();t.parse("macro",[t,r])},t.mathchar0mi=function(t,e){var r=e.attributes||{mathvariant:l.TexConstant.Variant.ITALIC},n=t.create("token","mi",r,e.char);t.Push(n)},t.mathchar0mo=function(t,e){var r=e.attributes||{};r.stretchy=!1;var n=t.create("token","mo",r,e.char);s.default.setProperty(n,"fixStretchy",!0),t.configuration.addNode("fixStretchy",n),t.Push(n)},t.mathchar7=function(t,e){var r=e.attributes||{mathvariant:l.TexConstant.Variant.NORMAL};t.stack.env.font&&(r.mathvariant=t.stack.env.font);var n=t.create("token","mi",r,e.char);t.Push(n)},t.delimiter=function(t,e){var r=e.attributes||{};r=Object.assign({fence:!1,stretchy:!1},r);var n=t.create("token","mo",r,e.char);t.Push(n)},t.environment=function(t,e,r,i){var a=i[0],s=t.itemFactory.create("begin").setProperties({name:e,end:a});s=r.apply(void 0,o([t,s],n(i.slice(1)),!1)),t.Push(s)}}(a||(a={})),e.default=a},8562:function(t,e,r){var n=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},o=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=a(r(5453)),l=r(8929),c=a(r(1256)),u=r(7233),p=function(){function t(t,e){void 0===e&&(e=[]),this.options={},this.packageData=new Map,this.parsers=[],this.root=null,this.nodeLists={},this.error=!1,this.handlers=t.handlers,this.nodeFactory=new l.NodeFactory,this.nodeFactory.configuration=this,this.nodeFactory.setCreators(t.nodes),this.itemFactory=new s.default(t.items),this.itemFactory.configuration=this,u.defaultOptions.apply(void 0,o([this.options],n(e),!1)),(0,u.defaultOptions)(this.options,t.options)}return t.prototype.pushParser=function(t){this.parsers.unshift(t)},t.prototype.popParser=function(){this.parsers.shift()},Object.defineProperty(t.prototype,"parser",{get:function(){return this.parsers[0]},enumerable:!1,configurable:!0}),t.prototype.clear=function(){this.parsers=[],this.root=null,this.nodeLists={},this.error=!1,this.tags.resetTag()},t.prototype.addNode=function(t,e){var r=this.nodeLists[t];if(r||(r=this.nodeLists[t]=[]),r.push(e),e.kind!==t){var n=c.default.getProperty(e,"in-lists")||"",o=(n?n.split(/,/):[]).concat(t).join(",");c.default.setProperty(e,"in-lists",o)}},t.prototype.getList=function(t){var e,r,n=this.nodeLists[t]||[],o=[];try{for(var a=i(n),s=a.next();!s.done;s=a.next()){var l=s.value;this.inTree(l)&&o.push(l)}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}return this.nodeLists[t]=o,o},t.prototype.removeFromList=function(t,e){var r,n,o=this.nodeLists[t]||[];try{for(var a=i(e),s=a.next();!s.done;s=a.next()){var l=s.value,c=o.indexOf(l);c>=0&&o.splice(c,1)}}catch(t){r={error:t}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}},t.prototype.inTree=function(t){for(;t&&t!==this.root;)t=t.parent;return!!t},t}();e.default=p},1130:function(t,e,r){var n=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var a,s=r(9007),l=i(r(1256)),c=i(r(8417)),u=i(r(3971)),p=r(5368);!function(t){var e=7.2,r={em:function(t){return t},ex:function(t){return.43*t},pt:function(t){return t/10},pc:function(t){return 1.2*t},px:function(t){return t*e/72},in:function(t){return t*e},cm:function(t){return t*e/2.54},mm:function(t){return t*e/25.4},mu:function(t){return t/18}},i="([-+]?([.,]\\d+|\\d+([.,]\\d*)?))",a="(pt|em|ex|mu|px|mm|cm|in|pc)",h=RegExp("^\\s*"+i+"\\s*"+a+"\\s*$"),d=RegExp("^\\s*"+i+"\\s*"+a+" ?");function f(t,e){void 0===e&&(e=!1);var o=t.match(e?d:h);return o?function(t){var e=n(t,3),o=e[0],i=e[1],a=e[2];if("mu"!==i)return[o,i,a];return[m(r[i](parseFloat(o||"1"))).slice(0,-2),"em",a]}([o[1].replace(/,/,"."),o[4],o[0].length]):[null,null,0]}function m(t){return Math.abs(t)<6e-4?"0em":t.toFixed(3).replace(/\.?0+$/,"")+"em"}function y(t,e,r){"{"!==e&&"}"!==e||(e="\\"+e);var n="{\\bigg"+r+" "+e+"}",o="{\\big"+r+" "+e+"}";return new c.default("\\mathchoice"+n+o+o+o,{},t).mml()}function g(t,e,r){e=e.replace(/^\s+/,p.entities.nbsp).replace(/\s+$/,p.entities.nbsp);var n=t.create("text",e);return t.create("node","mtext",[],r,n)}function b(t,e,r){if(r.match(/^[a-z]/i)&&e.match(/(^|[^\\])(\\\\)*\\[a-z]+$/i)&&(e+=" "),e.length+r.length>t.configuration.options.maxBuffer)throw new u.default("MaxBufferSize","MathJax internal buffer size exceeded; is there a recursive macro call?");return e+r}function v(t,e){for(;e>0;)t=t.trim().slice(1,-1),e--;return t.trim()}function _(t,e){for(var r=t.length,n=0,o="",i=0,a=0,s=!0,l=!1;in&&(a=n)),n++;break;case"}":n&&n--,(s||l)&&(a--,l=!0),s=!1;break;default:if(!n&&-1!==e.indexOf(c))return[l?"true":v(o,a),c,t.slice(i)];s=!1,l=!1}o+=c}if(n)throw new u.default("ExtraOpenMissingClose","Extra open brace or missing close brace");return[l?"true":v(o,a),"",t.slice(i)]}t.matchDimen=f,t.dimen2em=function(t){var e=n(f(t),2),o=e[0],i=e[1],a=parseFloat(o||"1"),s=r[i];return s?s(a):0},t.Em=m,t.cols=function(){for(var t=[],e=0;e1&&(l=[t.create("node","mrow",l)]),l},t.internalText=g,t.underOver=function(e,r,n,o,i){if(t.checkMovableLimits(r),l.default.isType(r,"munderover")&&l.default.isEmbellished(r)){l.default.setProperties(l.default.getCoreMO(r),{lspace:0,rspace:0});var a=e.create("node","mo",[],{rspace:0});r=e.create("node","mrow",[a,r])}var c=e.create("node","munderover",[r]);l.default.setChild(c,"over"===o?c.over:c.under,n);var u=c;return i&&(u=e.create("node","TeXAtom",[c],{texClass:s.TEXCLASS.OP,movesupsub:!0})),l.default.setProperty(u,"subsupOK",!0),u},t.checkMovableLimits=function(t){var e=l.default.isType(t,"mo")?l.default.getForm(t):null;(l.default.getProperty(t,"movablelimits")||e&&e[3]&&e[3].movablelimits)&&l.default.setProperties(t,{movablelimits:!1})},t.trimSpaces=function(t){if("string"!=typeof t)return t;var e=t.trim();return e.match(/\\$/)&&t.match(/ $/)&&(e+=" "),e},t.setArrayAlign=function(e,r){return"t"===(r=t.trimSpaces(r||""))?e.arraydef.align="baseline 1":"b"===r?e.arraydef.align="baseline -1":"c"===r?e.arraydef.align="axis":r&&(e.arraydef.align=r),e},t.substituteArgs=function(t,e,r){for(var n="",o="",i=0;ie.length)throw new u.default("IllegalMacroParam","Illegal macro parameter reference");o=b(t,b(t,o,n),e[parseInt(a,10)-1]),n=""}else n+=a}return b(t,o,n)},t.addArgs=b,t.checkMaxMacros=function(t,e){if(void 0===e&&(e=!0),!(++t.macroCount<=t.configuration.options.maxMacros))throw e?new u.default("MaxMacroSub1","MathJax maximum macro substitution count exceeded; is here a recursive macro call?"):new u.default("MaxMacroSub2","MathJax maximum substitution count exceeded; is there a recursive latex environment?")},t.checkEqnEnv=function(t){if(t.stack.global.eqnenv)throw new u.default("ErroneousNestingEq","Erroneous nesting of equation structures");t.stack.global.eqnenv=!0},t.copyNode=function(t,e){var r=t.copy(),n=e.configuration;return r.walkTree((function(t){var e,r;n.addNode(t.kind,t);var i=(t.getProperty("in-lists")||"").split(/,/);try{for(var a=o(i),s=a.next();!s.done;s=a.next()){var l=s.value;l&&n.addNode(l,t)}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}})),r},t.MmlFilterAttribute=function(t,e,r){return r},t.getFontDef=function(t){var e=t.stack.env.font;return e?{mathvariant:e}:{}},t.keyvalOptions=function(t,e,r){var i,a;void 0===e&&(e=null),void 0===r&&(r=!1);var s=function(t){var e,r,o,i,a,s={},l=t;for(;l;)i=(e=n(_(l,["=",","]),3))[0],o=e[1],l=e[2],"="===o?(a=(r=n(_(l,[","]),3))[0],o=r[1],l=r[2],a="false"===a||"true"===a?JSON.parse(a):a,s[i]=a):i&&(s[i]=!0);return s}(t);if(e)try{for(var l=o(Object.keys(s)),c=l.next();!c.done;c=l.next()){var p=c.value;if(!e.hasOwnProperty(p)){if(r)throw new u.default("InvalidOption","Invalid option: %1",p);delete s[p]}}}catch(t){i={error:t}}finally{try{c&&!c.done&&(a=l.return)&&a.call(l)}finally{if(i)throw i.error}}return s}}(a||(a={})),e.default=a},9497:function(t,e,r){var n=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},i=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},l=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.BaseItem=e.MmlStack=void 0;var c=l(r(3971)),u=function(){function t(t){this._nodes=t}return Object.defineProperty(t.prototype,"nodes",{get:function(){return this._nodes},enumerable:!1,configurable:!0}),t.prototype.Push=function(){for(var t,e=[],r=0;r0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},s=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.TagsFactory=e.AllTags=e.NoTags=e.AbstractTags=e.TagInfo=e.Label=void 0;var s=a(r(8417)),l=function(t,e){void 0===t&&(t="???"),void 0===e&&(e=""),this.tag=t,this.id=e};e.Label=l;var c=function(t,e,r,n,o,i,a,s){void 0===t&&(t=""),void 0===e&&(e=!1),void 0===r&&(r=!1),void 0===n&&(n=null),void 0===o&&(o=""),void 0===i&&(i=""),void 0===a&&(a=!1),void 0===s&&(s=""),this.env=t,this.taggable=e,this.defaultTags=r,this.tag=n,this.tagId=o,this.tagFormat=i,this.noTag=a,this.labelId=s};e.TagInfo=c;var u=function(){function t(){this.counter=0,this.allCounter=0,this.configuration=null,this.ids={},this.allIds={},this.labels={},this.allLabels={},this.redo=!1,this.refUpdate=!1,this.currentTag=new c,this.history=[],this.stack=[],this.enTag=function(t,e){var r=this.configuration.nodeFactory,n=r.create("node","mtd",[t]),o=r.create("node","mlabeledtr",[e,n]);return r.create("node","mtable",[o],{side:this.configuration.options.tagSide,minlabelspacing:this.configuration.options.tagIndent,displaystyle:!0})}}return t.prototype.start=function(t,e,r){this.currentTag&&this.stack.push(this.currentTag),this.currentTag=new c(t,e,r)},Object.defineProperty(t.prototype,"env",{get:function(){return this.currentTag.env},enumerable:!1,configurable:!0}),t.prototype.end=function(){this.history.push(this.currentTag),this.currentTag=this.stack.pop()},t.prototype.tag=function(t,e){this.currentTag.tag=t,this.currentTag.tagFormat=e?t:this.formatTag(t),this.currentTag.noTag=!1},t.prototype.notag=function(){this.tag("",!0),this.currentTag.noTag=!0},Object.defineProperty(t.prototype,"noTag",{get:function(){return this.currentTag.noTag},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"label",{get:function(){return this.currentTag.labelId},set:function(t){this.currentTag.labelId=t},enumerable:!1,configurable:!0}),t.prototype.formatUrl=function(t,e){return e+"#"+encodeURIComponent(t)},t.prototype.formatTag=function(t){return"("+t+")"},t.prototype.formatId=function(t){return"mjx-eqn:"+t.replace(/\s/g,"_")},t.prototype.formatNumber=function(t){return t.toString()},t.prototype.autoTag=function(){null==this.currentTag.tag&&(this.counter++,this.tag(this.formatNumber(this.counter),!1))},t.prototype.clearTag=function(){this.label="",this.tag(null,!0),this.currentTag.tagId=""},t.prototype.getTag=function(t){if(void 0===t&&(t=!1),t)return this.autoTag(),this.makeTag();var e=this.currentTag;return e.taggable&&!e.noTag&&(e.defaultTags&&this.autoTag(),e.tag)?this.makeTag():null},t.prototype.resetTag=function(){this.history=[],this.redo=!1,this.refUpdate=!1,this.clearTag()},t.prototype.reset=function(t){void 0===t&&(t=0),this.resetTag(),this.counter=this.allCounter=t,this.allLabels={},this.allIds={}},t.prototype.startEquation=function(t){this.history=[],this.stack=[],this.clearTag(),this.currentTag=new c("",void 0,void 0),this.labels={},this.ids={},this.counter=this.allCounter,this.redo=!1;var e=t.inputData.recompile;e&&(this.refUpdate=!0,this.counter=e.counter)},t.prototype.finishEquation=function(t){this.redo&&(t.inputData.recompile={state:t.state(),counter:this.allCounter}),this.refUpdate||(this.allCounter=this.counter),Object.assign(this.allIds,this.ids),Object.assign(this.allLabels,this.labels)},t.prototype.finalize=function(t,e){if(!e.display||this.currentTag.env||null==this.currentTag.tag)return t;var r=this.makeTag();return this.enTag(t,r)},t.prototype.makeId=function(){this.currentTag.tagId=this.formatId(this.configuration.options.useLabelIds&&this.label||this.currentTag.tag)},t.prototype.makeTag=function(){this.makeId(),this.label&&(this.labels[this.label]=new l(this.currentTag.tag,this.currentTag.tagId));var t=new s.default("\\text{"+this.currentTag.tagFormat+"}",{},this.configuration).mml();return this.configuration.nodeFactory.create("node","mtd",[t],{id:this.currentTag.tagId})},t}();e.AbstractTags=u;var p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.autoTag=function(){},e.prototype.getTag=function(){return this.currentTag.tag?t.prototype.getTag.call(this):null},e}(u);e.NoTags=p;var h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.finalize=function(t,e){if(!e.display||this.history.find((function(t){return t.taggable})))return t;var r=this.getTag(!0);return this.enTag(t,r)},e}(u);e.AllTags=h,function(t){var e=new Map([["none",p],["all",h]]),r="none";t.OPTIONS={tags:r,tagSide:"right",tagIndent:"0.8em",useLabelIds:!0,ignoreDuplicateLabels:!1},t.add=function(t,r){e.set(t,r)},t.addTags=function(e){var r,n;try{for(var o=i(Object.keys(e)),a=o.next();!a.done;a=o.next()){var s=a.value;t.add(s,e[s])}}catch(t){r={error:t}}finally{try{a&&!a.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}},t.create=function(t){var n=e.get(t)||e.get(r);if(!n)throw Error("Unknown tags class");return new n},t.setDefault=function(t){r=t},t.getDefault=function(){return t.create(r)}}(e.TagsFactory||(e.TagsFactory={}))},8317:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.TexConstant=void 0,function(t){t.Variant={NORMAL:"normal",BOLD:"bold",ITALIC:"italic",BOLDITALIC:"bold-italic",DOUBLESTRUCK:"double-struck",FRAKTUR:"fraktur",BOLDFRAKTUR:"bold-fraktur",SCRIPT:"script",BOLDSCRIPT:"bold-script",SANSSERIF:"sans-serif",BOLDSANSSERIF:"bold-sans-serif",SANSSERIFITALIC:"sans-serif-italic",SANSSERIFBOLDITALIC:"sans-serif-bold-italic",MONOSPACE:"monospace",INITIAL:"inital",TAILED:"tailed",LOOPED:"looped",STRETCHED:"stretched",CALLIGRAPHIC:"-tex-calligraphic",BOLDCALLIGRAPHIC:"-tex-bold-calligraphic",OLDSTYLE:"-tex-oldstyle",BOLDOLDSTYLE:"-tex-bold-oldstyle",MATHITALIC:"-tex-mathit"},t.Form={PREFIX:"prefix",INFIX:"infix",POSTFIX:"postfix"},t.LineBreak={AUTO:"auto",NEWLINE:"newline",NOBREAK:"nobreak",GOODBREAK:"goodbreak",BADBREAK:"badbreak"},t.LineBreakStyle={BEFORE:"before",AFTER:"after",DUPLICATE:"duplicate",INFIXLINBREAKSTYLE:"infixlinebreakstyle"},t.IndentAlign={LEFT:"left",CENTER:"center",RIGHT:"right",AUTO:"auto",ID:"id",INDENTALIGN:"indentalign"},t.IndentShift={INDENTSHIFT:"indentshift"},t.LineThickness={THIN:"thin",MEDIUM:"medium",THICK:"thick"},t.Notation={LONGDIV:"longdiv",ACTUARIAL:"actuarial",PHASORANGLE:"phasorangle",RADICAL:"radical",BOX:"box",ROUNDEDBOX:"roundedbox",CIRCLE:"circle",LEFT:"left",RIGHT:"right",TOP:"top",BOTTOM:"bottom",UPDIAGONALSTRIKE:"updiagonalstrike",DOWNDIAGONALSTRIKE:"downdiagonalstrike",VERTICALSTRIKE:"verticalstrike",HORIZONTALSTRIKE:"horizontalstrike",NORTHEASTARROW:"northeastarrow",MADRUWB:"madruwb",UPDIAGONALARROW:"updiagonalarrow"},t.Align={TOP:"top",BOTTOM:"bottom",CENTER:"center",BASELINE:"baseline",AXIS:"axis",LEFT:"left",RIGHT:"right"},t.Lines={NONE:"none",SOLID:"solid",DASHED:"dashed"},t.Side={LEFT:"left",RIGHT:"right",LEFTOVERLAP:"leftoverlap",RIGHTOVERLAP:"rightoverlap"},t.Width={AUTO:"auto",FIT:"fit"},t.Actiontype={TOGGLE:"toggle",STATUSLINE:"statusline",TOOLTIP:"tooltip",INPUT:"input"},t.Overflow={LINBREAK:"linebreak",SCROLL:"scroll",ELIDE:"elide",TRUNCATE:"truncate",SCALE:"scale"},t.Unit={EM:"em",EX:"ex",PX:"px",IN:"in",CM:"cm",MM:"mm",PT:"pt",PC:"pc"}}(e.TexConstant||(e.TexConstant={}))},3971:function(t,e){Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(e,r){for(var n=[],o=2;o="0"&&a<="9")n[o]=r[parseInt(n[o],10)-1],"number"==typeof n[o]&&(n[o]=n[o].toString());else if("{"===a){if((a=n[o].substr(1))>="0"&&a<="9")n[o]=r[parseInt(n[o].substr(1,n[o].length-2),10)-1],"number"==typeof n[o]&&(n[o]=n[o].toString());else n[o].match(/^\{([a-z]+):%(\d+)\|(.*)\}$/)&&(n[o]="%"+n[o])}null==n[o]&&(n[o]="???")}return n.join("")},t.pattern=/%(\d+|\{\d+\}|\{[a-z]+:\%\d+(?:\|(?:%\{\d+\}|%.|[^\}])*)+\}|.)/g,t}();e.default=r},8417:function(t,e,r){var n=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},i=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;oe)throw new u.default("XalignOverflow","Extra %1 in row of %2","&",this.name)},e.prototype.EndRow=function(){for(var e,r=this.row,n=this.getProperty("xalignat");r.lengththis.maxrow&&(this.maxrow=this.row.length),t.prototype.EndRow.call(this);var o=this.table[this.table.length-1];if(this.getProperty("zeroWidthLabel")&&o.isKind("mlabeledtr")){var a=c.default.getChildren(o)[0],s=this.factory.configuration.options.tagSide,l=i({width:0},"right"===s?{lspace:"-1width"}:{}),u=this.create("node","mpadded",c.default.getChildren(a),l);a.setChildren([u])}},e.prototype.EndTable=function(){(t.prototype.EndTable.call(this),this.center)&&(this.maxrow<=2&&(delete this.arraydef.width,delete this.global.indentalign))},e}(s.EqnArrayItem);e.FlalignItem=d},7379:function(t,e,r){var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&n(e,t,r);return o(e,t),e},a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=r(4387),l=i(r(9140)),c=r(8317),u=a(r(5450)),p=a(r(1130)),h=r(9007),d=r(6010);new l.CharacterMap("AMSmath-mathchar0mo",u.default.mathchar0mo,{iiiint:["\u2a0c",{texClass:h.TEXCLASS.OP}]}),new l.RegExpMap("AMSmath-operatorLetter",s.AmsMethods.operatorLetter,/[-*]/i),new l.CommandMap("AMSmath-macros",{mathring:["Accent","02DA"],nobreakspace:"Tilde",negmedspace:["Spacer",d.MATHSPACE.negativemediummathspace],negthickspace:["Spacer",d.MATHSPACE.negativethickmathspace],idotsint:["MultiIntegral","\\int\\cdots\\int"],dddot:["Accent","20DB"],ddddot:["Accent","20DC"],sideset:"SideSet",boxed:["Macro","\\fbox{$\\displaystyle{#1}$}",1],tag:"HandleTag",notag:"HandleNoTag",eqref:["HandleRef",!0],substack:["Macro","\\begin{subarray}{c}#1\\end{subarray}",1],injlim:["NamedOp","inj lim"],projlim:["NamedOp","proj lim"],varliminf:["Macro","\\mathop{\\underline{\\mmlToken{mi}{lim}}}"],varlimsup:["Macro","\\mathop{\\overline{\\mmlToken{mi}{lim}}}"],varinjlim:["Macro","\\mathop{\\underrightarrow{\\mmlToken{mi}{lim}}}"],varprojlim:["Macro","\\mathop{\\underleftarrow{\\mmlToken{mi}{lim}}}"],DeclareMathOperator:"HandleDeclareOp",operatorname:"HandleOperatorName",genfrac:"Genfrac",frac:["Genfrac","","","",""],tfrac:["Genfrac","","","","1"],dfrac:["Genfrac","","","","0"],binom:["Genfrac","(",")","0",""],tbinom:["Genfrac","(",")","0","1"],dbinom:["Genfrac","(",")","0","0"],cfrac:"CFrac",shoveleft:["HandleShove",c.TexConstant.Align.LEFT],shoveright:["HandleShove",c.TexConstant.Align.RIGHT],xrightarrow:["xArrow",8594,5,10],xleftarrow:["xArrow",8592,10,5]},s.AmsMethods),new l.EnvironmentMap("AMSmath-environment",u.default.environment,{"equation*":["Equation",null,!1],"eqnarray*":["EqnArray",null,!1,!0,"rcl",p.default.cols(0,d.MATHSPACE.thickmathspace),".5em"],align:["EqnArray",null,!0,!0,"rl",p.default.cols(0,2)],"align*":["EqnArray",null,!1,!0,"rl",p.default.cols(0,2)],multline:["Multline",null,!0],"multline*":["Multline",null,!1],split:["EqnArray",null,!1,!1,"rl",p.default.cols(0)],gather:["EqnArray",null,!0,!0,"c"],"gather*":["EqnArray",null,!1,!0,"c"],alignat:["AlignAt",null,!0,!0],"alignat*":["AlignAt",null,!1,!0],alignedat:["AlignAt",null,!1,!1],aligned:["AmsEqnArray",null,null,null,"rl",p.default.cols(0,2),".5em","D"],gathered:["AmsEqnArray",null,null,null,"c",null,".5em","D"],xalignat:["XalignAt",null,!0,!0],"xalignat*":["XalignAt",null,!1,!0],xxalignat:["XalignAt",null,!1,!1],flalign:["FlalignArray",null,!0,!1,!0,"rlc","auto auto fit"],"flalign*":["FlalignArray",null,!1,!1,!0,"rlc","auto auto fit"],subarray:["Array",null,null,null,null,p.default.cols(0),"0.1em","S",1],smallmatrix:["Array",null,null,null,"c",p.default.cols(1/3),".2em","S",1],matrix:["Array",null,null,null,"c"],pmatrix:["Array",null,"(",")","c"],bmatrix:["Array",null,"[","]","c"],Bmatrix:["Array",null,"\\{","\\}","c"],vmatrix:["Array",null,"\\vert","\\vert","c"],Vmatrix:["Array",null,"\\Vert","\\Vert","c"],cases:["Array",null,"\\{",".","ll",null,".2em","T"]},s.AmsMethods),new l.DelimiterMap("AMSmath-delimiter",u.default.delimiter,{"\\lvert":["|",{texClass:h.TEXCLASS.OPEN}],"\\rvert":["|",{texClass:h.TEXCLASS.CLOSE}],"\\lVert":["\u2016",{texClass:h.TEXCLASS.OPEN}],"\\rVert":["\u2016",{texClass:h.TEXCLASS.CLOSE}]}),new l.CharacterMap("AMSsymbols-mathchar0mi",u.default.mathchar0mi,{digamma:"\u03dd",varkappa:"\u03f0",varGamma:["\u0393",{mathvariant:c.TexConstant.Variant.ITALIC}],varDelta:["\u0394",{mathvariant:c.TexConstant.Variant.ITALIC}],varTheta:["\u0398",{mathvariant:c.TexConstant.Variant.ITALIC}],varLambda:["\u039b",{mathvariant:c.TexConstant.Variant.ITALIC}],varXi:["\u039e",{mathvariant:c.TexConstant.Variant.ITALIC}],varPi:["\u03a0",{mathvariant:c.TexConstant.Variant.ITALIC}],varSigma:["\u03a3",{mathvariant:c.TexConstant.Variant.ITALIC}],varUpsilon:["\u03a5",{mathvariant:c.TexConstant.Variant.ITALIC}],varPhi:["\u03a6",{mathvariant:c.TexConstant.Variant.ITALIC}],varPsi:["\u03a8",{mathvariant:c.TexConstant.Variant.ITALIC}],varOmega:["\u03a9",{mathvariant:c.TexConstant.Variant.ITALIC}],beth:"\u2136",gimel:"\u2137",daleth:"\u2138",backprime:["\u2035",{variantForm:!0}],hslash:"\u210f",varnothing:["\u2205",{variantForm:!0}],blacktriangle:"\u25b4",triangledown:["\u25bd",{variantForm:!0}],blacktriangledown:"\u25be",square:"\u25fb",Box:"\u25fb",blacksquare:"\u25fc",lozenge:"\u25ca",Diamond:"\u25ca",blacklozenge:"\u29eb",circledS:["\u24c8",{mathvariant:c.TexConstant.Variant.NORMAL}],bigstar:"\u2605",sphericalangle:"\u2222",measuredangle:"\u2221",nexists:"\u2204",complement:"\u2201",mho:"\u2127",eth:["\xf0",{mathvariant:c.TexConstant.Variant.NORMAL}],Finv:"\u2132",diagup:"\u2571",Game:"\u2141",diagdown:"\u2572",Bbbk:["k",{mathvariant:c.TexConstant.Variant.DOUBLESTRUCK}],yen:"\xa5",circledR:"\xae",checkmark:"\u2713",maltese:"\u2720"}),new l.CharacterMap("AMSsymbols-mathchar0mo",u.default.mathchar0mo,{dotplus:"\u2214",ltimes:"\u22c9",smallsetminus:["\u2216",{variantForm:!0}],rtimes:"\u22ca",Cap:"\u22d2",doublecap:"\u22d2",leftthreetimes:"\u22cb",Cup:"\u22d3",doublecup:"\u22d3",rightthreetimes:"\u22cc",barwedge:"\u22bc",curlywedge:"\u22cf",veebar:"\u22bb",curlyvee:"\u22ce",doublebarwedge:"\u2a5e",boxminus:"\u229f",circleddash:"\u229d",boxtimes:"\u22a0",circledast:"\u229b",boxdot:"\u22a1",circledcirc:"\u229a",boxplus:"\u229e",centerdot:["\u22c5",{variantForm:!0}],divideontimes:"\u22c7",intercal:"\u22ba",leqq:"\u2266",geqq:"\u2267",leqslant:"\u2a7d",geqslant:"\u2a7e",eqslantless:"\u2a95",eqslantgtr:"\u2a96",lesssim:"\u2272",gtrsim:"\u2273",lessapprox:"\u2a85",gtrapprox:"\u2a86",approxeq:"\u224a",lessdot:"\u22d6",gtrdot:"\u22d7",lll:"\u22d8",llless:"\u22d8",ggg:"\u22d9",gggtr:"\u22d9",lessgtr:"\u2276",gtrless:"\u2277",lesseqgtr:"\u22da",gtreqless:"\u22db",lesseqqgtr:"\u2a8b",gtreqqless:"\u2a8c",doteqdot:"\u2251",Doteq:"\u2251",eqcirc:"\u2256",risingdotseq:"\u2253",circeq:"\u2257",fallingdotseq:"\u2252",triangleq:"\u225c",backsim:"\u223d",thicksim:["\u223c",{variantForm:!0}],backsimeq:"\u22cd",thickapprox:["\u2248",{variantForm:!0}],subseteqq:"\u2ac5",supseteqq:"\u2ac6",Subset:"\u22d0",Supset:"\u22d1",sqsubset:"\u228f",sqsupset:"\u2290",preccurlyeq:"\u227c",succcurlyeq:"\u227d",curlyeqprec:"\u22de",curlyeqsucc:"\u22df",precsim:"\u227e",succsim:"\u227f",precapprox:"\u2ab7",succapprox:"\u2ab8",vartriangleleft:"\u22b2",lhd:"\u22b2",vartriangleright:"\u22b3",rhd:"\u22b3",trianglelefteq:"\u22b4",unlhd:"\u22b4",trianglerighteq:"\u22b5",unrhd:"\u22b5",vDash:["\u22a8",{variantForm:!0}],Vdash:"\u22a9",Vvdash:"\u22aa",smallsmile:["\u2323",{variantForm:!0}],shortmid:["\u2223",{variantForm:!0}],smallfrown:["\u2322",{variantForm:!0}],shortparallel:["\u2225",{variantForm:!0}],bumpeq:"\u224f",between:"\u226c",Bumpeq:"\u224e",pitchfork:"\u22d4",varpropto:["\u221d",{variantForm:!0}],backepsilon:"\u220d",blacktriangleleft:"\u25c2",blacktriangleright:"\u25b8",therefore:"\u2234",because:"\u2235",eqsim:"\u2242",vartriangle:["\u25b3",{variantForm:!0}],Join:"\u22c8",nless:"\u226e",ngtr:"\u226f",nleq:"\u2270",ngeq:"\u2271",nleqslant:["\u2a87",{variantForm:!0}],ngeqslant:["\u2a88",{variantForm:!0}],nleqq:["\u2270",{variantForm:!0}],ngeqq:["\u2271",{variantForm:!0}],lneq:"\u2a87",gneq:"\u2a88",lneqq:"\u2268",gneqq:"\u2269",lvertneqq:["\u2268",{variantForm:!0}],gvertneqq:["\u2269",{variantForm:!0}],lnsim:"\u22e6",gnsim:"\u22e7",lnapprox:"\u2a89",gnapprox:"\u2a8a",nprec:"\u2280",nsucc:"\u2281",npreceq:["\u22e0",{variantForm:!0}],nsucceq:["\u22e1",{variantForm:!0}],precneqq:"\u2ab5",succneqq:"\u2ab6",precnsim:"\u22e8",succnsim:"\u22e9",precnapprox:"\u2ab9",succnapprox:"\u2aba",nsim:"\u2241",ncong:"\u2247",nshortmid:["\u2224",{variantForm:!0}],nshortparallel:["\u2226",{variantForm:!0}],nmid:"\u2224",nparallel:"\u2226",nvdash:"\u22ac",nvDash:"\u22ad",nVdash:"\u22ae",nVDash:"\u22af",ntriangleleft:"\u22ea",ntriangleright:"\u22eb",ntrianglelefteq:"\u22ec",ntrianglerighteq:"\u22ed",nsubseteq:"\u2288",nsupseteq:"\u2289",nsubseteqq:["\u2288",{variantForm:!0}],nsupseteqq:["\u2289",{variantForm:!0}],subsetneq:"\u228a",supsetneq:"\u228b",varsubsetneq:["\u228a",{variantForm:!0}],varsupsetneq:["\u228b",{variantForm:!0}],subsetneqq:"\u2acb",supsetneqq:"\u2acc",varsubsetneqq:["\u2acb",{variantForm:!0}],varsupsetneqq:["\u2acc",{variantForm:!0}],leftleftarrows:"\u21c7",rightrightarrows:"\u21c9",leftrightarrows:"\u21c6",rightleftarrows:"\u21c4",Lleftarrow:"\u21da",Rrightarrow:"\u21db",twoheadleftarrow:"\u219e",twoheadrightarrow:"\u21a0",leftarrowtail:"\u21a2",rightarrowtail:"\u21a3",looparrowleft:"\u21ab",looparrowright:"\u21ac",leftrightharpoons:"\u21cb",rightleftharpoons:["\u21cc",{variantForm:!0}],curvearrowleft:"\u21b6",curvearrowright:"\u21b7",circlearrowleft:"\u21ba",circlearrowright:"\u21bb",Lsh:"\u21b0",Rsh:"\u21b1",upuparrows:"\u21c8",downdownarrows:"\u21ca",upharpoonleft:"\u21bf",upharpoonright:"\u21be",downharpoonleft:"\u21c3",restriction:"\u21be",multimap:"\u22b8",downharpoonright:"\u21c2",leftrightsquigarrow:"\u21ad",rightsquigarrow:"\u21dd",leadsto:"\u21dd",dashrightarrow:"\u21e2",dashleftarrow:"\u21e0",nleftarrow:"\u219a",nrightarrow:"\u219b",nLeftarrow:"\u21cd",nRightarrow:"\u21cf",nleftrightarrow:"\u21ae",nLeftrightarrow:"\u21ce"}),new l.DelimiterMap("AMSsymbols-delimiter",u.default.delimiter,{"\\ulcorner":"\u231c","\\urcorner":"\u231d","\\llcorner":"\u231e","\\lrcorner":"\u231f"}),new l.CommandMap("AMSsymbols-macros",{implies:["Macro","\\;\\Longrightarrow\\;"],impliedby:["Macro","\\;\\Longleftarrow\\;"]},s.AmsMethods)},4387:function(t,e,r){var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.NEW_OPS=e.AmsMethods=void 0;var a=i(r(1130)),s=i(r(5450)),l=i(r(1256)),c=r(8317),u=i(r(8417)),p=i(r(3971)),h=r(8803),d=i(r(7693)),f=r(9007);function m(t){if(!t||t.isInferred&&0===t.childNodes.length)return[null,null];if(t.isKind("msubsup")&&y(t))return[t,null];var e=l.default.getChildAt(t,0);return t.isInferred&&e&&y(e)?(t.childNodes.splice(0,1),[e,t]):[null,t]}function y(t){var e=t.childNodes[0];return e&&e.isKind("mi")&&""===e.getText()}e.AmsMethods={},e.AmsMethods.AmsEqnArray=function(t,e,r,n,o,i,s){var l=t.GetBrackets("\\begin{"+e.getName()+"}"),c=d.default.EqnArray(t,e,r,n,o,i,s);return a.default.setArrayAlign(c,l)},e.AmsMethods.AlignAt=function(t,r,n,o){var i,s,l=r.getName(),c="",u=[];if(o||(s=t.GetBrackets("\\begin{"+l+"}")),(i=t.GetArgument("\\begin{"+l+"}")).match(/[^0-9]/))throw new p.default("PositiveIntegerArg","Argument to %1 must me a positive integer","\\begin{"+l+"}");for(var h=parseInt(i,10);h>0;)c+="rl",u.push("0em 0em"),h--;var d=u.join(" ");if(o)return e.AmsMethods.EqnArray(t,r,n,o,c,d);var f=e.AmsMethods.EqnArray(t,r,n,o,c,d);return a.default.setArrayAlign(f,s)},e.AmsMethods.Multline=function(t,e,r){t.Push(e),a.default.checkEqnEnv(t);var n=t.itemFactory.create("multline",r,t.stack);return n.arraydef={displaystyle:!0,rowspacing:".5em",columnspacing:"100%",width:t.options.ams.multlineWidth,side:t.options.tagSide,minlabelspacing:t.options.tagIndent,framespacing:t.options.ams.multlineIndent+" 0",frame:"","data-width-includes-label":!0},n},e.AmsMethods.XalignAt=function(t,r,n,o){var i=t.GetArgument("\\begin{"+r.getName()+"}");if(i.match(/[^0-9]/))throw new p.default("PositiveIntegerArg","Argument to %1 must me a positive integer","\\begin{"+r.getName()+"}");var a=o?"crl":"rlc",s=o?"fit auto auto":"auto auto fit",l=e.AmsMethods.FlalignArray(t,r,n,o,!1,a,s,!0);return l.setProperty("xalignat",2*parseInt(i)),l},e.AmsMethods.FlalignArray=function(t,e,r,n,o,i,s,l){void 0===l&&(l=!1),t.Push(e),a.default.checkEqnEnv(t),i=i.split("").join(" ").replace(/r/g,"right").replace(/l/g,"left").replace(/c/g,"center");var c=t.itemFactory.create("flalign",e.getName(),r,n,o,t.stack);return c.arraydef={width:"100%",displaystyle:!0,columnalign:i,columnspacing:"0em",columnwidth:s,rowspacing:"3pt",side:t.options.tagSide,minlabelspacing:l?"0":t.options.tagIndent,"data-width-includes-label":!0},c.setProperty("zeroWidthLabel",l),c},e.NEW_OPS="ams-declare-ops",e.AmsMethods.HandleDeclareOp=function(t,r){var n=t.GetStar()?"*":"",o=a.default.trimSpaces(t.GetArgument(r));"\\"===o.charAt(0)&&(o=o.substr(1));var i=t.GetArgument(r);t.configuration.handlers.retrieve(e.NEW_OPS).add(o,new h.Macro(o,e.AmsMethods.Macro,["\\operatorname".concat(n,"{").concat(i,"}")]))},e.AmsMethods.HandleOperatorName=function(t,e){var r=t.GetStar(),o=a.default.trimSpaces(t.GetArgument(e)),i=new u.default(o,n(n({},t.stack.env),{font:c.TexConstant.Variant.NORMAL,multiLetterIdentifiers:/^[-*a-z]+/i,operatorLetters:!0}),t.configuration).mml();if(i.isKind("mi")||(i=t.create("node","TeXAtom",[i])),l.default.setProperties(i,{movesupsub:r,movablelimits:!0,texClass:f.TEXCLASS.OP}),!r){var s=t.GetNext(),p=t.i;"\\"===s&&++t.i&&"limits"!==t.GetCS()&&(t.i=p)}t.Push(i)},e.AmsMethods.SideSet=function(t,e){var r=o(m(t.ParseArg(e)),2),n=r[0],i=r[1],s=o(m(t.ParseArg(e)),2),c=s[0],u=s[1],p=t.ParseArg(e),h=p;n&&(i?n.replaceChild(t.create("node","mphantom",[t.create("node","mpadded",[a.default.copyNode(p,t)],{width:0})]),l.default.getChildAt(n,0)):(h=t.create("node","mmultiscripts",[p]),c&&l.default.appendChildren(h,[l.default.getChildAt(c,1)||t.create("node","none"),l.default.getChildAt(c,2)||t.create("node","none")]),l.default.setProperty(h,"scriptalign","left"),l.default.appendChildren(h,[t.create("node","mprescripts"),l.default.getChildAt(n,1)||t.create("node","none"),l.default.getChildAt(n,2)||t.create("node","none")]))),c&&h===p&&(c.replaceChild(p,l.default.getChildAt(c,0)),h=c);var d=t.create("node","TeXAtom",[],{texClass:f.TEXCLASS.OP,movesupsub:!0,movablelimits:!0});i&&(n&&d.appendChild(n),d.appendChild(i)),d.appendChild(h),u&&d.appendChild(u),t.Push(d)},e.AmsMethods.operatorLetter=function(t,e){return!!t.stack.env.operatorLetters&&s.default.variable(t,e)},e.AmsMethods.MultiIntegral=function(t,e,r){var n=t.GetNext();if("\\"===n){var o=t.i;n=t.GetArgument(e),t.i=o,"\\limits"===n&&(r="\\idotsint"===e?"\\!\\!\\mathop{\\,\\,"+r+"}":"\\!\\!\\!\\mathop{\\,\\,\\,"+r+"}")}t.string=r+" "+t.string.slice(t.i),t.i=0},e.AmsMethods.xArrow=function(t,e,r,n,o){var i={width:"+"+a.default.Em((n+o)/18),lspace:a.default.Em(n/18)},s=t.GetBrackets(e),c=t.ParseArg(e),p=t.create("node","mspace",[],{depth:".25em"}),h=t.create("token","mo",{stretchy:!0,texClass:f.TEXCLASS.REL},String.fromCodePoint(r));h=t.create("node","mstyle",[h],{scriptlevel:0});var d=t.create("node","munderover",[h]),m=t.create("node","mpadded",[c,p],i);if(l.default.setAttribute(m,"voffset","-.2em"),l.default.setAttribute(m,"height","-.2em"),l.default.setChild(d,d.over,m),s){var y=new u.default(s,t.stack.env,t.configuration).mml(),g=t.create("node","mspace",[],{height:".75em"});m=t.create("node","mpadded",[y,g],i),l.default.setAttribute(m,"voffset",".15em"),l.default.setAttribute(m,"depth","-.15em"),l.default.setChild(d,d.under,m)}l.default.setProperty(d,"subsupOK",!0),t.Push(d)},e.AmsMethods.HandleShove=function(t,e,r){var n=t.stack.Top();if("multline"!==n.kind)throw new p.default("CommandOnlyAllowedInEnv","%1 only allowed in %2 environment",t.currentCS,"multline");if(n.Size())throw new p.default("CommandAtTheBeginingOfLine","%1 must come at the beginning of the line",t.currentCS);n.setProperty("shove",r)},e.AmsMethods.CFrac=function(t,e){var r=a.default.trimSpaces(t.GetBrackets(e,"")),n=t.GetArgument(e),o=t.GetArgument(e),i={l:c.TexConstant.Align.LEFT,r:c.TexConstant.Align.RIGHT,"":""},s=new u.default("\\strut\\textstyle{"+n+"}",t.stack.env,t.configuration).mml(),h=new u.default("\\strut\\textstyle{"+o+"}",t.stack.env,t.configuration).mml(),d=t.create("node","mfrac",[s,h]);if(null==(r=i[r]))throw new p.default("IllegalAlign","Illegal alignment specified in %1",t.currentCS);r&&l.default.setProperties(d,{numalign:r,denomalign:r}),t.Push(d)},e.AmsMethods.Genfrac=function(t,e,r,n,o,i){null==r&&(r=t.GetDelimiterArg(e)),null==n&&(n=t.GetDelimiterArg(e)),null==o&&(o=t.GetArgument(e)),null==i&&(i=a.default.trimSpaces(t.GetArgument(e)));var s=t.ParseArg(e),c=t.ParseArg(e),u=t.create("node","mfrac",[s,c]);if(""!==o&&l.default.setAttribute(u,"linethickness",o),(r||n)&&(l.default.setProperty(u,"withDelims",!0),u=a.default.fixedFence(t.configuration,r,u,n)),""!==i){var h=parseInt(i,10),d=["D","T","S","SS"][h];if(null==d)throw new p.default("BadMathStyleFor","Bad math style for %1",t.currentCS);u=t.create("node","mstyle",[u]),"D"===d?l.default.setProperties(u,{displaystyle:!0,scriptlevel:0}):l.default.setProperties(u,{displaystyle:!1,scriptlevel:h-1})}t.Push(u)},e.AmsMethods.HandleTag=function(t,e){if(!t.tags.currentTag.taggable&&t.tags.env)throw new p.default("CommandNotAllowedInEnv","%1 not allowed in %2 environment",t.currentCS,t.tags.env);if(t.tags.currentTag.tag)throw new p.default("MultipleCommand","Multiple %1",t.currentCS);var r=t.GetStar(),n=a.default.trimSpaces(t.GetArgument(e));t.tags.tag(n,r)},e.AmsMethods.HandleNoTag=d.default.HandleNoTag,e.AmsMethods.HandleRef=d.default.HandleRef,e.AmsMethods.Macro=d.default.Macro,e.AmsMethods.Accent=d.default.Accent,e.AmsMethods.Tilde=d.default.Tilde,e.AmsMethods.Array=d.default.Array,e.AmsMethods.Spacer=d.default.Spacer,e.AmsMethods.NamedOp=d.default.NamedOp,e.AmsMethods.EqnArray=d.default.EqnArray,e.AmsMethods.Equation=d.default.Equation},583:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.AmsCdConfiguration=void 0;var n=r(9899);r(8289),e.AmsCdConfiguration=n.Configuration.create("amscd",{handler:{character:["amscd_special"],macro:["amscd_macros"],environment:["amscd_environment"]},options:{amscd:{colspace:"5pt",rowspace:"5pt",harrowsize:"2.75em",varrowsize:"1.75em",hideHorizontalLabels:!1}}})},8289:function(t,e,r){var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&n(e,t,r);return o(e,t),e},a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=i(r(9140)),l=a(r(5450)),c=a(r(7819));new s.EnvironmentMap("amscd_environment",l.default.environment,{CD:"CD"},c.default),new s.CommandMap("amscd_macros",{minCDarrowwidth:"minCDarrowwidth",minCDarrowheight:"minCDarrowheight"},c.default),new s.MacroMap("amscd_special",{"@":"arrow"},c.default)},7819:function(t,e,r){var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=n(r(8417)),i=r(2942),a=r(9007),s=n(r(1256)),l={CD:function(t,e){t.Push(e);var r=t.itemFactory.create("array"),n=t.configuration.options.amscd;return r.setProperties({minw:t.stack.env.CD_minw||n.harrowsize,minh:t.stack.env.CD_minh||n.varrowsize}),r.arraydef={columnalign:"center",columnspacing:n.colspace,rowspacing:n.rowspace,displaystyle:!0},r},arrow:function(t,e){var r=t.string.charAt(t.i);if(!r.match(/[>":"\u2192","<":"\u2190",V:"\u2193",A:"\u2191"}[r],y=t.GetUpTo(e+r,r),g=t.GetUpTo(e+r,r);if(">"===r||"<"===r){if(c=t.create("token","mo",d,m),y||(y="\\kern "+u.getProperty("minw")),y||g){var b={width:"+.67em",lspace:".33em"};if(c=t.create("node","munderover",[c]),y){var v=new o.default(y,t.stack.env,t.configuration).mml(),_=t.create("node","mpadded",[v],b);s.default.setAttribute(_,"voffset",".1em"),s.default.setChild(c,c.over,_)}if(g){var S=new o.default(g,t.stack.env,t.configuration).mml();s.default.setChild(c,c.under,t.create("node","mpadded",[S],b))}t.configuration.options.amscd.hideHorizontalLabels&&(c=t.create("node","mpadded",c,{depth:0,height:".67em"}))}}else{var x=t.create("token","mo",f,m);c=x,(y||g)&&(c=t.create("node","mrow"),y&&s.default.appendChildren(c,[new o.default("\\scriptstyle\\llap{"+y+"}",t.stack.env,t.configuration).mml()]),x.texClass=a.TEXCLASS.ORD,s.default.appendChildren(c,[x]),g&&s.default.appendChildren(c,[new o.default("\\scriptstyle\\rlap{"+g+"}",t.stack.env,t.configuration).mml()]))}}c&&t.Push(c),l.cell(t,e)},cell:function(t,e){var r=t.stack.Top();(r.table||[]).length%2==0&&0===(r.row||[]).length&&t.Push(t.create("node","mpadded",[],{height:"8.5pt",depth:"2pt"})),t.Push(t.itemFactory.create("cell").setProperties({isEntry:!0,name:e}))},minCDarrowwidth:function(t,e){t.stack.env.CD_minw=t.GetDimen(e)},minCDarrowheight:function(t,e){t.stack.env.CD_minh=t.GetDimen(e)}};e.default=l},1275:function(t,e,r){var n=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.AutoloadConfiguration=void 0;var i=r(9899),a=r(9140),s=r(8803),l=r(7741),c=r(265),u=r(7233);function p(t,e,r,i){var a,s,u,p;if(c.Package.packages.has(t.options.require.prefix+r)){var f=t.options.autoload[r],m=n(2===f.length&&Array.isArray(f[0])?f:[f,[]],2),y=m[0],g=m[1];try{for(var b=o(y),v=b.next();!v.done;v=b.next()){var _=v.value;h.remove(_)}}catch(t){a={error:t}}finally{try{v&&!v.done&&(s=b.return)&&s.call(b)}finally{if(a)throw a.error}}try{for(var S=o(g),x=S.next();!x.done;x=S.next()){var M=x.value;d.remove(M)}}catch(t){u={error:t}}finally{try{x&&!x.done&&(p=S.return)&&p.call(S)}finally{if(u)throw u.error}}t.string=(i?e+" ":"\\begin{"+e.slice(1)+"}")+t.string.slice(t.i),t.i=0}(0,l.RequireLoad)(t,r)}var h=new a.CommandMap("autoload-macros",{},{}),d=new a.CommandMap("autoload-environments",{},{});e.AutoloadConfiguration=i.Configuration.create("autoload",{handler:{macro:["autoload-macros"],environment:["autoload-environments"]},options:{autoload:(0,u.expandable)({action:["toggle","mathtip","texttip"],amscd:[[],["CD"]],bbox:["bbox"],boldsymbol:["boldsymbol"],braket:["bra","ket","braket","set","Bra","Ket","Braket","Set","ketbra","Ketbra"],bussproofs:[[],["prooftree"]],cancel:["cancel","bcancel","xcancel","cancelto"],color:["color","definecolor","textcolor","colorbox","fcolorbox"],enclose:["enclose"],extpfeil:["xtwoheadrightarrow","xtwoheadleftarrow","xmapsto","xlongequal","xtofrom","Newextarrow"],html:["href","class","style","cssId"],mhchem:["ce","pu"],newcommand:["newcommand","renewcommand","newenvironment","renewenvironment","def","let"],unicode:["unicode"],verb:["verb"]})},config:function(t,e){var r,i,a,c,u,f,m=e.parseOptions,y=m.handlers.get("macro"),g=m.handlers.get("environment"),b=m.options.autoload;m.packageData.set("autoload",{Autoload:p});try{for(var v=o(Object.keys(b)),_=v.next();!_.done;_=v.next()){var S=_.value,x=b[S],M=n(2===x.length&&Array.isArray(x[0])?x:[x,[]],2),O=M[0],E=M[1];try{for(var A=(a=void 0,o(O)),C=A.next();!C.done;C=A.next()){var w=C.value;y.lookup(w)&&"color"!==w||h.add(w,new s.Macro(w,p,[S,!0]))}}catch(t){a={error:t}}finally{try{C&&!C.done&&(c=A.return)&&c.call(A)}finally{if(a)throw a.error}}try{for(var T=(u=void 0,o(E)),N=T.next();!N.done;N=T.next()){var L=N.value;g.lookup(L)||d.add(L,new s.Macro(L,p,[S,!1]))}}catch(t){u={error:t}}finally{try{N&&!N.done&&(f=T.return)&&f.call(T)}finally{if(u)throw u.error}}}}catch(t){r={error:t}}finally{try{_&&!_.done&&(i=v.return)&&i.call(v)}finally{if(r)throw r.error}}m.packageData.get("require")||l.RequireConfiguration.config(t,e)},init:function(t){t.options.require||(0,u.defaultOptions)(t.options,l.RequireConfiguration.options)},priority:10})},2942:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),s=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),l=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&a(e,t,r);return s(e,t),e},c=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.BaseConfiguration=e.BaseTags=e.Other=void 0;var p=r(9899),h=r(2947),d=u(r(3971)),f=u(r(1256)),m=r(9140),y=l(r(1181)),g=r(6521);r(1267);var b=r(4082);function v(t,e){var r=t.stack.env.font?{mathvariant:t.stack.env.font}:{},n=h.MapHandler.getMap("remap").lookup(e),o=(0,b.getRange)(e),i=o?o[3]:"mo",a=t.create("token",i,r,n?n.char:e);o[4]&&a.attributes.set("mathvariant",o[4]),"mo"===i&&(f.default.setProperty(a,"fixStretchy",!0),t.configuration.addNode("fixStretchy",a)),t.Push(a)}new m.CharacterMap("remap",null,{"-":"\u2212","*":"\u2217","`":"\u2018"}),e.Other=v;var _=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),e}(g.AbstractTags);e.BaseTags=_,e.BaseConfiguration=p.Configuration.create("base",{handler:{character:["command","special","letter","digit"],delimiter:["delimiter"],macro:["delimiter","macros","mathchar0mi","mathchar0mo","mathchar7"],environment:["environment"]},fallback:{character:v,macro:function(t,e){throw new d.default("UndefinedControlSequence","Undefined control sequence %1","\\"+e)},environment:function(t,e){throw new d.default("UnknownEnv","Unknown environment '%1'",e)}},items:(o={},o[y.StartItem.prototype.kind]=y.StartItem,o[y.StopItem.prototype.kind]=y.StopItem,o[y.OpenItem.prototype.kind]=y.OpenItem,o[y.CloseItem.prototype.kind]=y.CloseItem,o[y.PrimeItem.prototype.kind]=y.PrimeItem,o[y.SubsupItem.prototype.kind]=y.SubsupItem,o[y.OverItem.prototype.kind]=y.OverItem,o[y.LeftItem.prototype.kind]=y.LeftItem,o[y.Middle.prototype.kind]=y.Middle,o[y.RightItem.prototype.kind]=y.RightItem,o[y.BeginItem.prototype.kind]=y.BeginItem,o[y.EndItem.prototype.kind]=y.EndItem,o[y.StyleItem.prototype.kind]=y.StyleItem,o[y.PositionItem.prototype.kind]=y.PositionItem,o[y.CellItem.prototype.kind]=y.CellItem,o[y.MmlItem.prototype.kind]=y.MmlItem,o[y.FnItem.prototype.kind]=y.FnItem,o[y.NotItem.prototype.kind]=y.NotItem,o[y.NonscriptItem.prototype.kind]=y.NonscriptItem,o[y.DotsItem.prototype.kind]=y.DotsItem,o[y.ArrayItem.prototype.kind]=y.ArrayItem,o[y.EqnArrayItem.prototype.kind]=y.EqnArrayItem,o[y.EquationItem.prototype.kind]=y.EquationItem,o),options:{maxMacros:1e3,baseURL:"undefined"==typeof document||0===document.getElementsByTagName("base").length?"":String(document.location).replace(/#.*$/,"")},tags:{base:_},postprocessors:[[function(t){var e,r,n=t.data;try{for(var o=c(n.getList("nonscript")),i=o.next();!i.done;i=o.next()){var a=i.value;if(a.attributes.get("scriptlevel")>0){var s=a.parent;if(s.childNodes.splice(s.childIndex(a),1),n.removeFromList(a.kind,[a]),a.isKind("mrow")){var l=a.childNodes[0];n.removeFromList("mstyle",[l]),n.removeFromList("mspace",l.childNodes[0].childNodes)}}else a.isKind("mrow")&&(a.parent.replaceChild(a.childNodes[0],a),n.removeFromList("mrow",[a]))}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}},-4]]})},1181:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;othis.maxrow&&(this.maxrow=this.row.length);var t="mtr",e=this.factory.configuration.tags.getTag();e&&(this.row=[e].concat(this.row),t="mlabeledtr"),this.factory.configuration.tags.clearTag();var r=this.create("node",t,this.row);this.table.push(r),this.row=[]},e.prototype.EndTable=function(){t.prototype.EndTable.call(this),this.factory.configuration.tags.end(),this.extendArray("columnalign",this.maxrow),this.extendArray("columnwidth",this.maxrow),this.extendArray("columnspacing",this.maxrow-1)},e.prototype.extendArray=function(t,e){if(this.arraydef[t]){var r=this.arraydef[t].split(/ /),n=a([],i(r),!1);if(n.length>1){for(;n.length",succ:"\u227b",prec:"\u227a",approx:"\u2248",succeq:"\u2ab0",preceq:"\u2aaf",supset:"\u2283",subset:"\u2282",supseteq:"\u2287",subseteq:"\u2286",in:"\u2208",ni:"\u220b",notin:"\u2209",owns:"\u220b",gg:"\u226b",ll:"\u226a",sim:"\u223c",simeq:"\u2243",perp:"\u22a5",equiv:"\u2261",asymp:"\u224d",smile:"\u2323",frown:"\u2322",ne:"\u2260",neq:"\u2260",cong:"\u2245",doteq:"\u2250",bowtie:"\u22c8",models:"\u22a8",notChar:"\u29f8",Leftrightarrow:"\u21d4",Leftarrow:"\u21d0",Rightarrow:"\u21d2",leftrightarrow:"\u2194",leftarrow:"\u2190",gets:"\u2190",rightarrow:"\u2192",to:["\u2192",{accent:!1}],mapsto:"\u21a6",leftharpoonup:"\u21bc",leftharpoondown:"\u21bd",rightharpoonup:"\u21c0",rightharpoondown:"\u21c1",nearrow:"\u2197",searrow:"\u2198",nwarrow:"\u2196",swarrow:"\u2199",rightleftharpoons:"\u21cc",hookrightarrow:"\u21aa",hookleftarrow:"\u21a9",longleftarrow:"\u27f5",Longleftarrow:"\u27f8",longrightarrow:"\u27f6",Longrightarrow:"\u27f9",Longleftrightarrow:"\u27fa",longleftrightarrow:"\u27f7",longmapsto:"\u27fc",ldots:"\u2026",cdots:"\u22ef",vdots:"\u22ee",ddots:"\u22f1",dotsc:"\u2026",dotsb:"\u22ef",dotsm:"\u22ef",dotsi:"\u22ef",dotso:"\u2026",ldotp:[".",{texClass:h.TEXCLASS.PUNCT}],cdotp:["\u22c5",{texClass:h.TEXCLASS.PUNCT}],colon:[":",{texClass:h.TEXCLASS.PUNCT}]}),new s.CharacterMap("mathchar7",u.default.mathchar7,{Gamma:"\u0393",Delta:"\u0394",Theta:"\u0398",Lambda:"\u039b",Xi:"\u039e",Pi:"\u03a0",Sigma:"\u03a3",Upsilon:"\u03a5",Phi:"\u03a6",Psi:"\u03a8",Omega:"\u03a9",_:"_","#":"#",$:"$","%":"%","&":"&",And:"&"}),new s.DelimiterMap("delimiter",u.default.delimiter,{"(":"(",")":")","[":"[","]":"]","<":"\u27e8",">":"\u27e9","\\lt":"\u27e8","\\gt":"\u27e9","/":"/","|":["|",{texClass:h.TEXCLASS.ORD}],".":"","\\\\":"\\","\\lmoustache":"\u23b0","\\rmoustache":"\u23b1","\\lgroup":"\u27ee","\\rgroup":"\u27ef","\\arrowvert":"\u23d0","\\Arrowvert":"\u2016","\\bracevert":"\u23aa","\\Vert":["\u2016",{texClass:h.TEXCLASS.ORD}],"\\|":["\u2016",{texClass:h.TEXCLASS.ORD}],"\\vert":["|",{texClass:h.TEXCLASS.ORD}],"\\uparrow":"\u2191","\\downarrow":"\u2193","\\updownarrow":"\u2195","\\Uparrow":"\u21d1","\\Downarrow":"\u21d3","\\Updownarrow":"\u21d5","\\backslash":"\\","\\rangle":"\u27e9","\\langle":"\u27e8","\\rbrace":"}","\\lbrace":"{","\\}":"}","\\{":"{","\\rceil":"\u2309","\\lceil":"\u2308","\\rfloor":"\u230b","\\lfloor":"\u230a","\\lbrack":"[","\\rbrack":"]"}),new s.CommandMap("macros",{displaystyle:["SetStyle","D",!0,0],textstyle:["SetStyle","T",!1,0],scriptstyle:["SetStyle","S",!1,1],scriptscriptstyle:["SetStyle","SS",!1,2],rm:["SetFont",l.TexConstant.Variant.NORMAL],mit:["SetFont",l.TexConstant.Variant.ITALIC],oldstyle:["SetFont",l.TexConstant.Variant.OLDSTYLE],cal:["SetFont",l.TexConstant.Variant.CALLIGRAPHIC],it:["SetFont",l.TexConstant.Variant.MATHITALIC],bf:["SetFont",l.TexConstant.Variant.BOLD],bbFont:["SetFont",l.TexConstant.Variant.DOUBLESTRUCK],scr:["SetFont",l.TexConstant.Variant.SCRIPT],frak:["SetFont",l.TexConstant.Variant.FRAKTUR],sf:["SetFont",l.TexConstant.Variant.SANSSERIF],tt:["SetFont",l.TexConstant.Variant.MONOSPACE],mathrm:["MathFont",l.TexConstant.Variant.NORMAL],mathup:["MathFont",l.TexConstant.Variant.NORMAL],mathnormal:["MathFont",""],mathbf:["MathFont",l.TexConstant.Variant.BOLD],mathbfup:["MathFont",l.TexConstant.Variant.BOLD],mathit:["MathFont",l.TexConstant.Variant.MATHITALIC],mathbfit:["MathFont",l.TexConstant.Variant.BOLDITALIC],mathbb:["MathFont",l.TexConstant.Variant.DOUBLESTRUCK],Bbb:["MathFont",l.TexConstant.Variant.DOUBLESTRUCK],mathfrak:["MathFont",l.TexConstant.Variant.FRAKTUR],mathbffrak:["MathFont",l.TexConstant.Variant.BOLDFRAKTUR],mathscr:["MathFont",l.TexConstant.Variant.SCRIPT],mathbfscr:["MathFont",l.TexConstant.Variant.BOLDSCRIPT],mathsf:["MathFont",l.TexConstant.Variant.SANSSERIF],mathsfup:["MathFont",l.TexConstant.Variant.SANSSERIF],mathbfsf:["MathFont",l.TexConstant.Variant.BOLDSANSSERIF],mathbfsfup:["MathFont",l.TexConstant.Variant.BOLDSANSSERIF],mathsfit:["MathFont",l.TexConstant.Variant.SANSSERIFITALIC],mathbfsfit:["MathFont",l.TexConstant.Variant.SANSSERIFBOLDITALIC],mathtt:["MathFont",l.TexConstant.Variant.MONOSPACE],mathcal:["MathFont",l.TexConstant.Variant.CALLIGRAPHIC],mathbfcal:["MathFont",l.TexConstant.Variant.BOLDCALLIGRAPHIC],symrm:["MathFont",l.TexConstant.Variant.NORMAL],symup:["MathFont",l.TexConstant.Variant.NORMAL],symnormal:["MathFont",""],symbf:["MathFont",l.TexConstant.Variant.BOLD],symbfup:["MathFont",l.TexConstant.Variant.BOLD],symit:["MathFont",l.TexConstant.Variant.ITALIC],symbfit:["MathFont",l.TexConstant.Variant.BOLDITALIC],symbb:["MathFont",l.TexConstant.Variant.DOUBLESTRUCK],symfrak:["MathFont",l.TexConstant.Variant.FRAKTUR],symbffrak:["MathFont",l.TexConstant.Variant.BOLDFRAKTUR],symscr:["MathFont",l.TexConstant.Variant.SCRIPT],symbfscr:["MathFont",l.TexConstant.Variant.BOLDSCRIPT],symsf:["MathFont",l.TexConstant.Variant.SANSSERIF],symsfup:["MathFont",l.TexConstant.Variant.SANSSERIF],symbfsf:["MathFont",l.TexConstant.Variant.BOLDSANSSERIF],symbfsfup:["MathFont",l.TexConstant.Variant.BOLDSANSSERIF],symsfit:["MathFont",l.TexConstant.Variant.SANSSERIFITALIC],symbfsfit:["MathFont",l.TexConstant.Variant.SANSSERIFBOLDITALIC],symtt:["MathFont",l.TexConstant.Variant.MONOSPACE],symcal:["MathFont",l.TexConstant.Variant.CALLIGRAPHIC],symbfcal:["MathFont",l.TexConstant.Variant.BOLDCALLIGRAPHIC],textrm:["HBox",null,l.TexConstant.Variant.NORMAL],textup:["HBox",null,l.TexConstant.Variant.NORMAL],textnormal:["HBox"],textit:["HBox",null,l.TexConstant.Variant.ITALIC],textbf:["HBox",null,l.TexConstant.Variant.BOLD],textsf:["HBox",null,l.TexConstant.Variant.SANSSERIF],texttt:["HBox",null,l.TexConstant.Variant.MONOSPACE],tiny:["SetSize",.5],Tiny:["SetSize",.6],scriptsize:["SetSize",.7],small:["SetSize",.85],normalsize:["SetSize",1],large:["SetSize",1.2],Large:["SetSize",1.44],LARGE:["SetSize",1.73],huge:["SetSize",2.07],Huge:["SetSize",2.49],arcsin:"NamedFn",arccos:"NamedFn",arctan:"NamedFn",arg:"NamedFn",cos:"NamedFn",cosh:"NamedFn",cot:"NamedFn",coth:"NamedFn",csc:"NamedFn",deg:"NamedFn",det:"NamedOp",dim:"NamedFn",exp:"NamedFn",gcd:"NamedOp",hom:"NamedFn",inf:"NamedOp",ker:"NamedFn",lg:"NamedFn",lim:"NamedOp",liminf:["NamedOp","lim inf"],limsup:["NamedOp","lim sup"],ln:"NamedFn",log:"NamedFn",max:"NamedOp",min:"NamedOp",Pr:"NamedOp",sec:"NamedFn",sin:"NamedFn",sinh:"NamedFn",sup:"NamedOp",tan:"NamedFn",tanh:"NamedFn",limits:["Limits",1],nolimits:["Limits",0],overline:["UnderOver","2015"],underline:["UnderOver","2015"],overbrace:["UnderOver","23DE",1],underbrace:["UnderOver","23DF",1],overparen:["UnderOver","23DC"],underparen:["UnderOver","23DD"],overrightarrow:["UnderOver","2192"],underrightarrow:["UnderOver","2192"],overleftarrow:["UnderOver","2190"],underleftarrow:["UnderOver","2190"],overleftrightarrow:["UnderOver","2194"],underleftrightarrow:["UnderOver","2194"],overset:"Overset",underset:"Underset",overunderset:"Overunderset",stackrel:["Macro","\\mathrel{\\mathop{#2}\\limits^{#1}}",2],stackbin:["Macro","\\mathbin{\\mathop{#2}\\limits^{#1}}",2],over:"Over",overwithdelims:"Over",atop:"Over",atopwithdelims:"Over",above:"Over",abovewithdelims:"Over",brace:["Over","{","}"],brack:["Over","[","]"],choose:["Over","(",")"],frac:"Frac",sqrt:"Sqrt",root:"Root",uproot:["MoveRoot","upRoot"],leftroot:["MoveRoot","leftRoot"],left:"LeftRight",right:"LeftRight",middle:"LeftRight",llap:"Lap",rlap:"Lap",raise:"RaiseLower",lower:"RaiseLower",moveleft:"MoveLeftRight",moveright:"MoveLeftRight",",":["Spacer",d.MATHSPACE.thinmathspace],":":["Spacer",d.MATHSPACE.mediummathspace],">":["Spacer",d.MATHSPACE.mediummathspace],";":["Spacer",d.MATHSPACE.thickmathspace],"!":["Spacer",d.MATHSPACE.negativethinmathspace],enspace:["Spacer",.5],quad:["Spacer",1],qquad:["Spacer",2],thinspace:["Spacer",d.MATHSPACE.thinmathspace],negthinspace:["Spacer",d.MATHSPACE.negativethinmathspace],hskip:"Hskip",hspace:"Hskip",kern:"Hskip",mskip:"Hskip",mspace:"Hskip",mkern:"Hskip",rule:"rule",Rule:["Rule"],Space:["Rule","blank"],nonscript:"Nonscript",big:["MakeBig",h.TEXCLASS.ORD,.85],Big:["MakeBig",h.TEXCLASS.ORD,1.15],bigg:["MakeBig",h.TEXCLASS.ORD,1.45],Bigg:["MakeBig",h.TEXCLASS.ORD,1.75],bigl:["MakeBig",h.TEXCLASS.OPEN,.85],Bigl:["MakeBig",h.TEXCLASS.OPEN,1.15],biggl:["MakeBig",h.TEXCLASS.OPEN,1.45],Biggl:["MakeBig",h.TEXCLASS.OPEN,1.75],bigr:["MakeBig",h.TEXCLASS.CLOSE,.85],Bigr:["MakeBig",h.TEXCLASS.CLOSE,1.15],biggr:["MakeBig",h.TEXCLASS.CLOSE,1.45],Biggr:["MakeBig",h.TEXCLASS.CLOSE,1.75],bigm:["MakeBig",h.TEXCLASS.REL,.85],Bigm:["MakeBig",h.TEXCLASS.REL,1.15],biggm:["MakeBig",h.TEXCLASS.REL,1.45],Biggm:["MakeBig",h.TEXCLASS.REL,1.75],mathord:["TeXAtom",h.TEXCLASS.ORD],mathop:["TeXAtom",h.TEXCLASS.OP],mathopen:["TeXAtom",h.TEXCLASS.OPEN],mathclose:["TeXAtom",h.TEXCLASS.CLOSE],mathbin:["TeXAtom",h.TEXCLASS.BIN],mathrel:["TeXAtom",h.TEXCLASS.REL],mathpunct:["TeXAtom",h.TEXCLASS.PUNCT],mathinner:["TeXAtom",h.TEXCLASS.INNER],vcenter:["TeXAtom",h.TEXCLASS.VCENTER],buildrel:"BuildRel",hbox:["HBox",0],text:"HBox",mbox:["HBox",0],fbox:"FBox",boxed:["Macro","\\fbox{$\\displaystyle{#1}$}",1],framebox:"FrameBox",strut:"Strut",mathstrut:["Macro","\\vphantom{(}"],phantom:"Phantom",vphantom:["Phantom",1,0],hphantom:["Phantom",0,1],smash:"Smash",acute:["Accent","00B4"],grave:["Accent","0060"],ddot:["Accent","00A8"],tilde:["Accent","007E"],bar:["Accent","00AF"],breve:["Accent","02D8"],check:["Accent","02C7"],hat:["Accent","005E"],vec:["Accent","2192"],dot:["Accent","02D9"],widetilde:["Accent","007E",1],widehat:["Accent","005E",1],matrix:"Matrix",array:"Matrix",pmatrix:["Matrix","(",")"],cases:["Matrix","{","","left left",null,".1em",null,!0],eqalign:["Matrix",null,null,"right left",(0,d.em)(d.MATHSPACE.thickmathspace),".5em","D"],displaylines:["Matrix",null,null,"center",null,".5em","D"],cr:"Cr","\\":"CrLaTeX",newline:["CrLaTeX",!0],hline:["HLine","solid"],hdashline:["HLine","dashed"],eqalignno:["Matrix",null,null,"right left",(0,d.em)(d.MATHSPACE.thickmathspace),".5em","D",null,"right"],leqalignno:["Matrix",null,null,"right left",(0,d.em)(d.MATHSPACE.thickmathspace),".5em","D",null,"left"],hfill:"HFill",hfil:"HFill",hfilll:"HFill",bmod:["Macro",'\\mmlToken{mo}[lspace="thickmathspace" rspace="thickmathspace"]{mod}'],pmod:["Macro","\\pod{\\mmlToken{mi}{mod}\\kern 6mu #1}",1],mod:["Macro","\\mathchoice{\\kern18mu}{\\kern12mu}{\\kern12mu}{\\kern12mu}\\mmlToken{mi}{mod}\\,\\,#1",1],pod:["Macro","\\mathchoice{\\kern18mu}{\\kern8mu}{\\kern8mu}{\\kern8mu}(#1)",1],iff:["Macro","\\;\\Longleftrightarrow\\;"],skew:["Macro","{{#2{#3\\mkern#1mu}\\mkern-#1mu}{}}",3],pmb:["Macro","\\rlap{#1}\\kern1px{#1}",1],TeX:["Macro","T\\kern-.14em\\lower.5ex{E}\\kern-.115em X"],LaTeX:["Macro","L\\kern-.325em\\raise.21em{\\scriptstyle{A}}\\kern-.17em\\TeX"]," ":["Macro","\\text{ }"],not:"Not",dots:"Dots",space:"Tilde","\xa0":"Tilde",begin:"BeginEnd",end:"BeginEnd",label:"HandleLabel",ref:"HandleRef",nonumber:"HandleNoTag",mathchoice:"MathChoice",mmlToken:"MmlToken"},c.default),new s.EnvironmentMap("environment",u.default.environment,{array:["AlignedArray"],equation:["Equation",null,!0],eqnarray:["EqnArray",null,!0,!0,"rcl",p.default.cols(0,d.MATHSPACE.thickmathspace),".5em"]},c.default),new s.CharacterMap("not_remap",null,{"\u2190":"\u219a","\u2192":"\u219b","\u2194":"\u21ae","\u21d0":"\u21cd","\u21d2":"\u21cf","\u21d4":"\u21ce","\u2208":"\u2209","\u220b":"\u220c","\u2223":"\u2224","\u2225":"\u2226","\u223c":"\u2241","~":"\u2241","\u2243":"\u2244","\u2245":"\u2247","\u2248":"\u2249","\u224d":"\u226d","=":"\u2260","\u2261":"\u2262","<":"\u226e",">":"\u226f","\u2264":"\u2270","\u2265":"\u2271","\u2272":"\u2274","\u2273":"\u2275","\u2276":"\u2278","\u2277":"\u2279","\u227a":"\u2280","\u227b":"\u2281","\u2282":"\u2284","\u2283":"\u2285","\u2286":"\u2288","\u2287":"\u2289","\u22a2":"\u22ac","\u22a8":"\u22ad","\u22a9":"\u22ae","\u22ab":"\u22af","\u227c":"\u22e0","\u227d":"\u22e1","\u2291":"\u22e2","\u2292":"\u22e3","\u22b2":"\u22ea","\u22b3":"\u22eb","\u22b4":"\u22ec","\u22b5":"\u22ed","\u2203":"\u2204"})},7693:function(t,e,r){var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},l=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var c=a(r(1181)),u=l(r(1256)),p=l(r(3971)),h=l(r(8417)),d=r(8317),f=l(r(1130)),m=r(9007),y=r(6521),g=r(6010),b=r(5368),v=r(7233),_={},S={fontfamily:1,fontsize:1,fontweight:1,fontstyle:1,color:1,background:1,id:1,class:1,href:1,style:1};function x(t,e){var r=t.stack.env,n=r.inRoot;r.inRoot=!0;var o=new h.default(e,r,t.configuration),i=o.mml(),a=o.stack.global;if(a.leftRoot||a.upRoot){var s={};a.leftRoot&&(s.width=a.leftRoot),a.upRoot&&(s.voffset=a.upRoot,s.height=a.upRoot),i=t.create("node","mpadded",[i],s)}return r.inRoot=n,i}_.Open=function(t,e){t.Push(t.itemFactory.create("open"))},_.Close=function(t,e){t.Push(t.itemFactory.create("close"))},_.Tilde=function(t,e){t.Push(t.create("token","mtext",{},b.entities.nbsp))},_.Space=function(t,e){},_.Superscript=function(t,e){var r,n,o;t.GetNext().match(/\d/)&&(t.string=t.string.substr(0,t.i+1)+" "+t.string.substr(t.i+1));var i=t.stack.Top();i.isKind("prime")?(o=(r=s(i.Peek(2),2))[0],n=r[1],t.stack.Pop()):(o=t.stack.Prev())||(o=t.create("token","mi",{},""));var a=u.default.getProperty(o,"movesupsub"),l=u.default.isType(o,"msubsup")?o.sup:o.over;if(u.default.isType(o,"msubsup")&&!u.default.isType(o,"msup")&&u.default.getChildAt(o,o.sup)||u.default.isType(o,"munderover")&&!u.default.isType(o,"mover")&&u.default.getChildAt(o,o.over)&&!u.default.getProperty(o,"subsupOK"))throw new p.default("DoubleExponent","Double exponent: use braces to clarify");u.default.isType(o,"msubsup")&&!u.default.isType(o,"msup")||(a?((!u.default.isType(o,"munderover")||u.default.isType(o,"mover")||u.default.getChildAt(o,o.over))&&(o=t.create("node","munderover",[o],{movesupsub:!0})),l=o.over):l=(o=t.create("node","msubsup",[o])).sup),t.Push(t.itemFactory.create("subsup",o).setProperties({position:l,primes:n,movesupsub:a}))},_.Subscript=function(t,e){var r,n,o;t.GetNext().match(/\d/)&&(t.string=t.string.substr(0,t.i+1)+" "+t.string.substr(t.i+1));var i=t.stack.Top();i.isKind("prime")?(o=(r=s(i.Peek(2),2))[0],n=r[1],t.stack.Pop()):(o=t.stack.Prev())||(o=t.create("token","mi",{},""));var a=u.default.getProperty(o,"movesupsub"),l=u.default.isType(o,"msubsup")?o.sub:o.under;if(u.default.isType(o,"msubsup")&&!u.default.isType(o,"msup")&&u.default.getChildAt(o,o.sub)||u.default.isType(o,"munderover")&&!u.default.isType(o,"mover")&&u.default.getChildAt(o,o.under)&&!u.default.getProperty(o,"subsupOK"))throw new p.default("DoubleSubscripts","Double subscripts: use braces to clarify");u.default.isType(o,"msubsup")&&!u.default.isType(o,"msup")||(a?((!u.default.isType(o,"munderover")||u.default.isType(o,"mover")||u.default.getChildAt(o,o.under))&&(o=t.create("node","munderover",[o],{movesupsub:!0})),l=o.under):l=(o=t.create("node","msubsup",[o])).sub),t.Push(t.itemFactory.create("subsup",o).setProperties({position:l,primes:n,movesupsub:a}))},_.Prime=function(t,e){var r=t.stack.Prev();if(r||(r=t.create("node","mi")),u.default.isType(r,"msubsup")&&!u.default.isType(r,"msup")&&u.default.getChildAt(r,r.sup))throw new p.default("DoubleExponentPrime","Prime causes double exponent: use braces to clarify");var n="";t.i--;do{n+=b.entities.prime,t.i++,e=t.GetNext()}while("'"===e||e===b.entities.rsquo);n=["","\u2032","\u2033","\u2034","\u2057"][n.length]||n;var o=t.create("token","mo",{variantForm:!0},n);t.Push(t.itemFactory.create("prime",r,o))},_.Comment=function(t,e){for(;t.i=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.BoldsymbolConfiguration=e.rewriteBoldTokens=e.createBoldToken=e.BoldsymbolMethods=void 0;var i=r(9899),a=o(r(1256)),s=r(8317),l=r(9140),c=r(8929),u={};function p(t,e,r,n){var o=c.NodeFactory.createToken(t,e,r,n);return"mtext"!==e&&t.configuration.parser.stack.env.boldsymbol&&(a.default.setProperty(o,"fixBold",!0),t.configuration.addNode("fixBold",o)),o}function h(t){var e,r;try{for(var o=n(t.data.getList("fixBold")),i=o.next();!i.done;i=o.next()){var l=i.value;if(a.default.getProperty(l,"fixBold")){var c=a.default.getAttribute(l,"mathvariant");null==c?a.default.setAttribute(l,"mathvariant",s.TexConstant.Variant.BOLD):a.default.setAttribute(l,"mathvariant",u[c]||c),a.default.removeProperties(l,"fixBold")}}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}}u[s.TexConstant.Variant.NORMAL]=s.TexConstant.Variant.BOLD,u[s.TexConstant.Variant.ITALIC]=s.TexConstant.Variant.BOLDITALIC,u[s.TexConstant.Variant.FRAKTUR]=s.TexConstant.Variant.BOLDFRAKTUR,u[s.TexConstant.Variant.SCRIPT]=s.TexConstant.Variant.BOLDSCRIPT,u[s.TexConstant.Variant.SANSSERIF]=s.TexConstant.Variant.BOLDSANSSERIF,u["-tex-calligraphic"]="-tex-bold-calligraphic",u["-tex-oldstyle"]="-tex-bold-oldstyle",u["-tex-mathit"]=s.TexConstant.Variant.BOLDITALIC,e.BoldsymbolMethods={},e.BoldsymbolMethods.Boldsymbol=function(t,e){var r=t.stack.env.boldsymbol;t.stack.env.boldsymbol=!0;var n=t.ParseArg(e);t.stack.env.boldsymbol=r,t.Push(n)},new l.CommandMap("boldsymbol",{boldsymbol:"Boldsymbol"},e.BoldsymbolMethods),e.createBoldToken=p,e.rewriteBoldTokens=h,e.BoldsymbolConfiguration=i.Configuration.create("boldsymbol",{handler:{macro:["boldsymbol"]},nodes:{token:p},postprocessors:[h]})},6538:function(t,e,r){var n;Object.defineProperty(e,"__esModule",{value:!0}),e.BraketConfiguration=void 0;var o=r(9899),i=r(7191);r(2608),e.BraketConfiguration=o.Configuration.create("braket",{handler:{character:["Braket-characters"],macro:["Braket-macros"]},items:(n={},n[i.BraketItem.prototype.kind]=i.BraketItem,n)})},7191:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.BraketItem=void 0;var a=r(8292),s=r(9007),l=i(r(1130)),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"braket"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isOpen",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){return e.isKind("close")?[[this.factory.create("mml",this.toMml())],!0]:e.isKind("mml")?(this.Push(e.toMml()),this.getProperty("single")?[[this.toMml()],!0]:a.BaseItem.fail):t.prototype.checkItem.call(this,e)},e.prototype.toMml=function(){var e=t.prototype.toMml.call(this),r=this.getProperty("open"),n=this.getProperty("close");if(this.getProperty("stretchy"))return l.default.fenced(this.factory.configuration,r,e,n);var o={fence:!0,stretchy:!1,symmetric:!0,texClass:s.TEXCLASS.OPEN},i=this.create("token","mo",o,r);o.texClass=s.TEXCLASS.CLOSE;var a=this.create("token","mo",o,n);return this.create("node","mrow",[i,e,a],{open:r,close:n,texClass:s.TEXCLASS.INNER})},e}(a.BaseItem);e.BraketItem=c},2608:function(t,e,r){var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=r(9140),i=n(r(8667));new o.CommandMap("Braket-macros",{bra:["Macro","{\\langle {#1} \\vert}",1],ket:["Macro","{\\vert {#1} \\rangle}",1],braket:["Braket","\u27e8","\u27e9",!1,1/0],set:["Braket","{","}",!1,1],Bra:["Macro","{\\left\\langle {#1} \\right\\vert}",1],Ket:["Macro","{\\left\\vert {#1} \\right\\rangle}",1],Braket:["Braket","\u27e8","\u27e9",!0,1/0],Set:["Braket","{","}",!0,1],ketbra:["Macro","{\\vert {#1} \\rangle\\langle {#2} \\vert}",2],Ketbra:["Macro","{\\left\\vert {#1} \\right\\rangle\\left\\langle {#2} \\right\\vert}",2],"|":"Bar"},i.default),new o.MacroMap("Braket-characters",{"|":"Bar"},i.default)},8667:function(t,e,r){var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=n(r(7693)),i=r(9007),a=n(r(3971)),s={};s.Macro=o.default.Macro,s.Braket=function(t,e,r,n,o,i){var s=t.GetNext();if(""===s)throw new a.default("MissingArgFor","Missing argument for %1",t.currentCS);var l=!0;"{"===s&&(t.i++,l=!1),t.Push(t.itemFactory.create("braket").setProperties({barmax:i,barcount:0,open:r,close:n,stretchy:o,single:l}))},s.Bar=function(t,e){var r="|"===e?"|":"\u2225",n=t.stack.Top();if("braket"!==n.kind||n.getProperty("barcount")>=n.getProperty("barmax")){var o=t.create("token","mo",{texClass:i.TEXCLASS.ORD,stretchy:!1},r);t.Push(o)}else{if("|"===r&&"|"===t.GetNext()&&(t.i++,r="\u2225"),n.getProperty("stretchy")){var a=t.create("node","TeXAtom",[],{texClass:i.TEXCLASS.CLOSE});t.Push(a),n.setProperty("barcount",n.getProperty("barcount")+1),a=t.create("token","mo",{stretchy:!0,braketbar:!0},r),t.Push(a),a=t.create("node","TeXAtom",[],{texClass:i.TEXCLASS.OPEN}),t.Push(a)}else{var s=t.create("token","mo",{stretchy:!1,braketbar:!0},r);t.Push(s)}}},e.default=s},9499:function(t,e,r){var n;Object.defineProperty(e,"__esModule",{value:!0}),e.BussproofsConfiguration=void 0;var o=r(9899),i=r(3980),a=r(1933);r(8620),e.BussproofsConfiguration=o.Configuration.create("bussproofs",{handler:{macro:["Bussproofs-macros"],environment:["Bussproofs-environments"]},items:(n={},n[i.ProofTreeItem.prototype.kind]=i.ProofTreeItem,n),preprocessors:[[a.saveDocument,1]],postprocessors:[[a.clearDocument,3],[a.makeBsprAttributes,2],[a.balanceRules,1]]})},3980:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),s=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&i(e,t,r);return a(e,t),e},l=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.ProofTreeItem=void 0;var c=l(r(3971)),u=r(8292),p=l(r(9497)),h=s(r(1933)),d=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.leftLabel=null,e.rigthLabel=null,e.innerStack=new p.default(e.factory,{},!0),e}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"proofTree"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(t){if(t.isKind("end")&&"prooftree"===t.getName()){var e=this.toMml();return h.setProperty(e,"proof",!0),[[this.factory.create("mml",e),t],!0]}if(t.isKind("stop"))throw new c.default("EnvMissingEnd","Missing \\end{%1}",this.getName());return this.innerStack.Push(t),u.BaseItem.fail},e.prototype.toMml=function(){var e=t.prototype.toMml.call(this),r=this.innerStack.Top();if(r.isKind("start")&&!r.Size())return e;this.innerStack.Push(this.factory.create("stop"));var n=this.innerStack.Top().toMml();return this.create("node","mrow",[n,e],{})},e}(u.BaseItem);e.ProofTreeItem=d},8620:function(t,e,r){var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=n(r(4934)),i=n(r(5450)),a=r(9140);new a.CommandMap("Bussproofs-macros",{AxiomC:"Axiom",UnaryInfC:["Inference",1],BinaryInfC:["Inference",2],TrinaryInfC:["Inference",3],QuaternaryInfC:["Inference",4],QuinaryInfC:["Inference",5],RightLabel:["Label","right"],LeftLabel:["Label","left"],AXC:"Axiom",UIC:["Inference",1],BIC:["Inference",2],TIC:["Inference",3],RL:["Label","right"],LL:["Label","left"],noLine:["SetLine","none",!1],singleLine:["SetLine","solid",!1],solidLine:["SetLine","solid",!1],dashedLine:["SetLine","dashed",!1],alwaysNoLine:["SetLine","none",!0],alwaysSingleLine:["SetLine","solid",!0],alwaysSolidLine:["SetLine","solid",!0],alwaysDashedLine:["SetLine","dashed",!0],rootAtTop:["RootAtTop",!0],alwaysRootAtTop:["RootAtTop",!0],rootAtBottom:["RootAtTop",!1],alwaysRootAtBottom:["RootAtTop",!1],fCenter:"FCenter",Axiom:"AxiomF",UnaryInf:["InferenceF",1],BinaryInf:["InferenceF",2],TrinaryInf:["InferenceF",3],QuaternaryInf:["InferenceF",4],QuinaryInf:["InferenceF",5]},o.default),new a.EnvironmentMap("Bussproofs-environments",i.default.environment,{prooftree:["Prooftree",null,!1]},o.default)},4934:function(t,e,r){var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&n(e,t,r);return o(e,t),e},a=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},s=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o0);var s=t.create("node","mtr",a,{}),l=t.create("node","mtable",[s],{framespacing:"0 0"}),u=f(t,t.GetArgument(e)),p=n.getProperty("currentLine");p!==n.getProperty("line")&&n.setProperty("currentLine",n.getProperty("line"));var d=m(t,l,[u],n.getProperty("left"),n.getProperty("right"),p,o);n.setProperty("left",null),n.setProperty("right",null),h.setProperty(d,"inference",i),t.configuration.addNode("inference",d),n.Push(d)},d.Label=function(t,e,r){var n=t.stack.Top();if("proofTree"!==n.kind)throw new c.default("IllegalProofCommand","Proof commands only allowed in prooftree environment.");var o=p.default.internalMath(t,t.GetArgument(e),0),i=o.length>1?t.create("node","mrow",o,{}):o[0];n.setProperty(r,i)},d.SetLine=function(t,e,r,n){var o=t.stack.Top();if("proofTree"!==o.kind)throw new c.default("IllegalProofCommand","Proof commands only allowed in prooftree environment.");o.setProperty("currentLine",r),n&&o.setProperty("line",r)},d.RootAtTop=function(t,e,r){var n=t.stack.Top();if("proofTree"!==n.kind)throw new c.default("IllegalProofCommand","Proof commands only allowed in prooftree environment.");n.setProperty("rootAtTop",r)},d.AxiomF=function(t,e){var r=t.stack.Top();if("proofTree"!==r.kind)throw new c.default("IllegalProofCommand","Proof commands only allowed in prooftree environment.");var n=y(t,e);h.setProperty(n,"axiom",!0),r.Push(n)},d.FCenter=function(t,e){},d.InferenceF=function(t,e,r){var n=t.stack.Top();if("proofTree"!==n.kind)throw new c.default("IllegalProofCommand","Proof commands only allowed in prooftree environment.");if(n.Size()0);var s=t.create("node","mtr",a,{}),l=t.create("node","mtable",[s],{framespacing:"0 0"}),u=y(t,e),p=n.getProperty("currentLine");p!==n.getProperty("line")&&n.setProperty("currentLine",n.getProperty("line"));var d=m(t,l,[u],n.getProperty("left"),n.getProperty("right"),p,o);n.setProperty("left",null),n.setProperty("right",null),h.setProperty(d,"inference",i),t.configuration.addNode("inference",d),n.Push(d)},e.default=d},1933:function(t,e,r){var n,o=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},i=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.clearDocument=e.saveDocument=e.makeBsprAttributes=e.removeProperty=e.getProperty=e.setProperty=e.balanceRules=void 0;var s=a(r(1256)),l=a(r(1130)),c=null,u=null,p=function(t){return u.root=t,c.outputJax.getBBox(u,c).w},h=function(t){for(var e=0;t&&!s.default.isType(t,"mtable");){if(s.default.isType(t,"text"))return null;s.default.isType(t,"mrow")?(t=t.childNodes[0],e=0):(t=t.parent.childNodes[e],e++)}return t},d=function(t,e){return t.childNodes["up"===e?1:0].childNodes[0].childNodes[0].childNodes[0].childNodes[0]},f=function(t,e){return t.childNodes[e].childNodes[0].childNodes[0]},m=function(t){return f(t,0)},y=function(t){return f(t,t.childNodes.length-1)},g=function(t,e){return t.childNodes["up"===e?0:1].childNodes[0].childNodes[0].childNodes[0]},b=function(t){for(;t&&!s.default.isType(t,"mtd");)t=t.parent;return t},v=function(t){return t.parent.childNodes[t.parent.childNodes.indexOf(t)+1]},_=function(t){for(;t&&null==(0,e.getProperty)(t,"inference");)t=t.parent;return t},S=function(t,e,r){void 0===r&&(r=!1);var n=0;if(t===e)return n;if(t!==e.parent){var o=t.childNodes,i=r?o.length-1:0;s.default.isType(o[i],"mspace")&&(n+=p(o[i])),t=e.parent}if(t===e)return n;var a=t.childNodes,l=r?a.length-1:0;return a[l]!==e&&(n+=p(a[l])),n},x=function(t,r){void 0===r&&(r=!1);var n=h(t),o=g(n,(0,e.getProperty)(n,"inferenceRule"));return S(t,n,r)+(p(n)-p(o))/2},M=function(t,r,n,o){if(void 0===o&&(o=!1),(0,e.getProperty)(r,"inferenceRule")||(0,e.getProperty)(r,"labelledRule")){var i=t.nodeFactory.create("node","mrow");r.parent.replaceChild(i,r),i.setChildren([r]),O(r,i),r=i}var a=o?r.childNodes.length-1:0,c=r.childNodes[a];s.default.isType(c,"mspace")?s.default.setAttribute(c,"width",l.default.Em(l.default.dimen2em(s.default.getAttribute(c,"width"))+n)):(c=t.nodeFactory.create("node","mspace",[],{width:l.default.Em(n)}),o?r.appendChild(c):(c.parent=r,r.childNodes.unshift(c)))},O=function(t,r){["inference","proof","maxAdjust","labelledRule"].forEach((function(n){var o=(0,e.getProperty)(t,n);null!=o&&((0,e.setProperty)(r,n,o),(0,e.removeProperty)(t,n))}))},E=function(t,r,n,o,i){var a=t.nodeFactory.create("node","mspace",[],{width:l.default.Em(i)});if("left"===o){var s=r.childNodes[n].childNodes[0];a.parent=s,s.childNodes.unshift(a)}else r.childNodes[n].appendChild(a);(0,e.setProperty)(r.parent,"sequentAdjust_"+o,i)},A=function(t,r){for(var n=r.pop();r.length;){var i=r.pop(),a=o(C(n,i),2),s=a[0],l=a[1];(0,e.getProperty)(n.parent,"axiom")&&(E(t,s<0?n:i,0,"left",Math.abs(s)),E(t,l<0?n:i,2,"right",Math.abs(l))),n=i}},C=function(t,e){var r=p(t.childNodes[2]),n=p(e.childNodes[2]);return[p(t.childNodes[0])-p(e.childNodes[0]),r-n]};e.balanceRules=function(t){var r,n;u=new t.document.options.MathItem("",null,t.math.display);var o=t.data;!function(t){var r=t.nodeLists.sequent;if(r)for(var n=r.length-1,o=void 0;o=r[n];n--)if((0,e.getProperty)(o,"sequentProcessed"))(0,e.removeProperty)(o,"sequentProcessed");else{var i=[],a=_(o);if(1===(0,e.getProperty)(a,"inference")){for(i.push(o);1===(0,e.getProperty)(a,"inference");){a=h(a);var s=m(d(a,(0,e.getProperty)(a,"inferenceRule"))),l=(0,e.getProperty)(s,"inferenceRule")?g(s,(0,e.getProperty)(s,"inferenceRule")):s;(0,e.getProperty)(l,"sequent")&&(o=l.childNodes[0],i.push(o),(0,e.setProperty)(o,"sequentProcessed",!0)),a=s}A(t,i)}}}(o);var a=o.nodeLists.inference||[];try{for(var s=i(a),l=s.next();!l.done;l=s.next()){var c=l.value,p=(0,e.getProperty)(c,"proof"),f=h(c),O=d(f,(0,e.getProperty)(f,"inferenceRule")),E=m(O);if((0,e.getProperty)(E,"inference")){var C=x(E);if(C){M(o,E,-C);var w=S(c,f,!1);M(o,c,C-w)}}var T=y(O);if(null!=(0,e.getProperty)(T,"inference")){var N=x(T,!0);M(o,T,-N,!0);var L=S(c,f,!0),P=(0,e.getProperty)(c,"maxAdjust");null!=P&&(N=Math.max(N,P));var I=void 0;if(!p&&(I=b(c))){var k=v(I);if(k){var R=o.nodeFactory.create("node","mspace",[],{width:N-L+"em"});k.appendChild(R),c.removeProperty("maxAdjust")}else{var j=_(I);j&&(N=(0,e.getProperty)(j,"maxAdjust")?Math.max((0,e.getProperty)(j,"maxAdjust"),N):N,(0,e.setProperty)(j,"maxAdjust",N))}}else M(o,(0,e.getProperty)(c,"proof")?c:c.parent,N-L,!0)}}}catch(t){r={error:t}}finally{try{l&&!l.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}};var w="bspr_",T=((n={}).bspr_maxAdjust=!0,n);e.setProperty=function(t,e,r){s.default.setProperty(t,w+e,r)};e.getProperty=function(t,e){return s.default.getProperty(t,w+e)};e.removeProperty=function(t,e){t.removeProperty(w+e)};e.makeBsprAttributes=function(t){t.data.root.walkTree((function(t,e){var r=[];t.getPropertyNames().forEach((function(e){!T[e]&&e.match(RegExp("^bspr_"))&&r.push(e+":"+t.getProperty(e))})),r.length&&s.default.setAttribute(t,"semantics",r.join(";"))}))};e.saveDocument=function(t){if(!("getBBox"in(c=t.document).outputJax))throw Error("The bussproofs extension requires an output jax with a getBBox() method")};e.clearDocument=function(t){c=null}},8963:function(t,e,r){var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.CancelConfiguration=e.CancelMethods=void 0;var o=r(9899),i=r(8317),a=r(9140),s=n(r(1130)),l=r(1428);e.CancelMethods={},e.CancelMethods.Cancel=function(t,e,r){var n=t.GetBrackets(e,""),o=t.ParseArg(e),i=s.default.keyvalOptions(n,l.ENCLOSE_OPTIONS);i.notation=r,t.Push(t.create("node","menclose",[o],i))},e.CancelMethods.CancelTo=function(t,e){var r=t.GetBrackets(e,""),n=t.ParseArg(e),o=t.ParseArg(e),a=s.default.keyvalOptions(r,l.ENCLOSE_OPTIONS);a.notation=[i.TexConstant.Notation.UPDIAGONALSTRIKE,i.TexConstant.Notation.UPDIAGONALARROW,i.TexConstant.Notation.NORTHEASTARROW].join(" "),n=t.create("node","mpadded",[n],{depth:"-.1em",height:"+.1em",voffset:".1em"}),t.Push(t.create("node","msup",[t.create("node","menclose",[o],a),n]))},new a.CommandMap("cancel",{cancel:["Cancel",i.TexConstant.Notation.UPDIAGONALSTRIKE],bcancel:["Cancel",i.TexConstant.Notation.DOWNDIAGONALSTRIKE],xcancel:["Cancel",i.TexConstant.Notation.UPDIAGONALSTRIKE+" "+i.TexConstant.Notation.DOWNDIAGONALSTRIKE],cancelto:"CancelTo"},e.CancelMethods),e.CancelConfiguration=o.Configuration.create("cancel",{handler:{macro:["cancel"]}})},3752:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.CasesConfiguration=e.CasesMethods=e.CasesTags=e.CasesBeginItem=void 0;var s=r(9899),l=r(9140),c=a(r(1130)),u=a(r(7693)),p=a(r(3971)),h=r(1181),d=r(8021),f=r(6471),m=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"cases-begin"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){return e.isKind("end")&&e.getName()===this.getName()&&this.getProperty("end")?(this.setProperty("end",!1),[[],!0]):t.prototype.checkItem.call(this,e)},e}(h.BeginItem);e.CasesBeginItem=m;var y=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.subcounter=0,e}return i(e,t),e.prototype.start=function(e,r,n){this.subcounter=0,t.prototype.start.call(this,e,r,n)},e.prototype.autoTag=function(){null==this.currentTag.tag&&("subnumcases"===this.currentTag.env?(0===this.subcounter&&this.counter++,this.subcounter++,this.tag(this.formatNumber(this.counter,this.subcounter),!1)):(0!==this.subcounter&&"numcases-left"===this.currentTag.env||this.counter++,this.tag(this.formatNumber(this.counter),!1)))},e.prototype.formatNumber=function(t,e){return void 0===e&&(e=null),t.toString()+(null===e?"":String.fromCharCode(96+e))},e}(d.AmsTags);e.CasesTags=y,e.CasesMethods={NumCases:function(t,e){if(t.stack.env.closing===e.getName()){delete t.stack.env.closing,t.Push(t.itemFactory.create("end").setProperty("name",e.getName()));var r=t.stack.Top(),n=r.Last,o=c.default.copyNode(n,t),i=r.getProperty("left");return f.EmpheqUtil.left(n,o,i+"\\empheqlbrace\\,",t,"numcases-left"),t.Push(t.itemFactory.create("end").setProperty("name",e.getName())),null}i=t.GetArgument("\\begin{"+e.getName()+"}");e.setProperty("left",i);var a=u.default.EqnArray(t,e,!0,!0,"ll");return a.arraydef.displaystyle=!1,a.arraydef.rowspacing=".2em",a.setProperty("numCases",!0),t.Push(e),a},Entry:function(t,e){if(!t.stack.Top().getProperty("numCases"))return u.default.Entry(t,e);t.Push(t.itemFactory.create("cell").setProperties({isEntry:!0,name:e}));for(var r=t.string,n=0,o=t.i,i=r.length;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.CenternotConfiguration=e.filterCenterOver=void 0;var i=r(9899),a=o(r(8417)),s=o(r(1256)),l=r(9140),c=o(r(7693));function u(t){var e,r,o=t.data;try{for(var i=n(o.getList("centerOver")),a=i.next();!a.done;a=i.next()){var l=a.value,c=s.default.getTexClass(l.childNodes[0].childNodes[0]);null!==c&&s.default.setProperties(l.parent.parent.parent.parent.parent.parent,{texClass:c})}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}}new l.CommandMap("centernot",{centerOver:"CenterOver",centernot:["Macro","\\centerOver{#1}{{\u29f8}}",1]},{CenterOver:function(t,e){var r="{"+t.GetArgument(e)+"}",n=t.ParseArg(e),o=new a.default(r,t.stack.env,t.configuration).mml(),i=t.create("node","TeXAtom",[new a.default(r,t.stack.env,t.configuration).mml(),t.create("node","mpadded",[t.create("node","mpadded",[n],{width:0,lspace:"-.5width"}),t.create("node","mphantom",[o])],{width:0,lspace:"-.5width"})]);t.configuration.addNode("centerOver",o),t.Push(i)},Macro:c.default.Macro}),e.filterCenterOver=u,e.CenternotConfiguration=i.Configuration.create("centernot",{handler:{macro:["centernot"]},postprocessors:[u]})},5860:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.ColorConfiguration=void 0;var n=r(9140),o=r(9899),i=r(2784),a=r(4207);new n.CommandMap("color",{color:"Color",textcolor:"TextColor",definecolor:"DefineColor",colorbox:"ColorBox",fcolorbox:"FColorBox"},i.ColorMethods);e.ColorConfiguration=o.Configuration.create("color",{handler:{macro:["color"]},options:{color:{padding:"5px",borderWidth:"2px"}},config:function(t,e){e.parseOptions.packageData.set("color",{model:new a.ColorModel})}})},7960:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.COLORS=void 0,e.COLORS=new Map([["Apricot","#FBB982"],["Aquamarine","#00B5BE"],["Bittersweet","#C04F17"],["Black","#221E1F"],["Blue","#2D2F92"],["BlueGreen","#00B3B8"],["BlueViolet","#473992"],["BrickRed","#B6321C"],["Brown","#792500"],["BurntOrange","#F7921D"],["CadetBlue","#74729A"],["CarnationPink","#F282B4"],["Cerulean","#00A2E3"],["CornflowerBlue","#41B0E4"],["Cyan","#00AEEF"],["Dandelion","#FDBC42"],["DarkOrchid","#A4538A"],["Emerald","#00A99D"],["ForestGreen","#009B55"],["Fuchsia","#8C368C"],["Goldenrod","#FFDF42"],["Gray","#949698"],["Green","#00A64F"],["GreenYellow","#DFE674"],["JungleGreen","#00A99A"],["Lavender","#F49EC4"],["LimeGreen","#8DC73E"],["Magenta","#EC008C"],["Mahogany","#A9341F"],["Maroon","#AF3235"],["Melon","#F89E7B"],["MidnightBlue","#006795"],["Mulberry","#A93C93"],["NavyBlue","#006EB8"],["OliveGreen","#3C8031"],["Orange","#F58137"],["OrangeRed","#ED135A"],["Orchid","#AF72B0"],["Peach","#F7965A"],["Periwinkle","#7977B8"],["PineGreen","#008B72"],["Plum","#92268F"],["ProcessBlue","#00B0F0"],["Purple","#99479B"],["RawSienna","#974006"],["Red","#ED1B23"],["RedOrange","#F26035"],["RedViolet","#A1246B"],["Rhodamine","#EF559F"],["RoyalBlue","#0071BC"],["RoyalPurple","#613F99"],["RubineRed","#ED017D"],["Salmon","#F69289"],["SeaGreen","#3FBC9D"],["Sepia","#671800"],["SkyBlue","#46C5DD"],["SpringGreen","#C6DC67"],["Tan","#DA9D76"],["TealBlue","#00AEB3"],["Thistle","#D883B7"],["Turquoise","#00B4CE"],["Violet","#58429B"],["VioletRed","#EF58A0"],["White","#FFFFFF"],["WildStrawberry","#EE2967"],["Yellow","#FFF200"],["YellowGreen","#98CC70"],["YellowOrange","#FAA21A"]])},2784:function(t,e,r){var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.ColorMethods=void 0;var o=n(r(1256)),i=n(r(1130));function a(t){var e="+".concat(t),r=t.replace(/^.*?([a-z]*)$/,"$1"),n=2*parseFloat(e);return{width:"+".concat(n).concat(r),height:e,depth:e,lspace:t}}e.ColorMethods={},e.ColorMethods.Color=function(t,e){var r=t.GetBrackets(e,""),n=t.GetArgument(e),o=t.configuration.packageData.get("color").model.getColor(r,n),i=t.itemFactory.create("style").setProperties({styles:{mathcolor:o}});t.stack.env.color=o,t.Push(i)},e.ColorMethods.TextColor=function(t,e){var r=t.GetBrackets(e,""),n=t.GetArgument(e),o=t.configuration.packageData.get("color").model.getColor(r,n),i=t.stack.env.color;t.stack.env.color=o;var a=t.ParseArg(e);i?t.stack.env.color=i:delete t.stack.env.color;var s=t.create("node","mstyle",[a],{mathcolor:o});t.Push(s)},e.ColorMethods.DefineColor=function(t,e){var r=t.GetArgument(e),n=t.GetArgument(e),o=t.GetArgument(e);t.configuration.packageData.get("color").model.defineColor(n,r,o)},e.ColorMethods.ColorBox=function(t,e){var r=t.GetArgument(e),n=i.default.internalMath(t,t.GetArgument(e)),s=t.configuration.packageData.get("color").model,l=t.create("node","mpadded",n,{mathbackground:s.getColor("named",r)});o.default.setProperties(l,a(t.options.color.padding)),t.Push(l)},e.ColorMethods.FColorBox=function(t,e){var r=t.GetArgument(e),n=t.GetArgument(e),s=i.default.internalMath(t,t.GetArgument(e)),l=t.options.color,c=t.configuration.packageData.get("color").model,u=t.create("node","mpadded",s,{mathbackground:c.getColor("named",n),style:"border: ".concat(l.borderWidth," solid ").concat(c.getColor("named",r))});o.default.setProperties(u,a(l.padding)),t.Push(u)}},4207:function(t,e,r){var n=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.ColorModel=void 0;var i=o(r(3971)),a=r(7960),s=new Map,l=function(){function t(){this.userColors=new Map}return t.prototype.normalizeColor=function(t,e){if(!t||"named"===t)return e;if(s.has(t))return s.get(t)(e);throw new i.default("UndefinedColorModel","Color model '%1' not defined",t)},t.prototype.getColor=function(t,e){return t&&"named"!==t?this.normalizeColor(t,e):this.getColorByName(e)},t.prototype.getColorByName=function(t){return this.userColors.has(t)?this.userColors.get(t):a.COLORS.has(t)?a.COLORS.get(t):t},t.prototype.defineColor=function(t,e,r){var n=this.normalizeColor(t,r);this.userColors.set(e,n)},t}();e.ColorModel=l,s.set("rgb",(function(t){var e,r,o=t.trim().split(/\s*,\s*/),a="#";if(3!==o.length)throw new i.default("ModelArg1","Color values for the %1 model require 3 numbers","rgb");try{for(var s=n(o),l=s.next();!l.done;l=s.next()){var c=l.value;if(!c.match(/^(\d+(\.\d*)?|\.\d+)$/))throw new i.default("InvalidDecimalNumber","Invalid decimal number");var u=parseFloat(c);if(u<0||u>1)throw new i.default("ModelArg2","Color values for the %1 model must be between %2 and %3","rgb","0","1");var p=Math.floor(255*u).toString(16);p.length<2&&(p="0"+p),a+=p}}catch(t){e={error:t}}finally{try{l&&!l.done&&(r=s.return)&&r.call(s)}finally{if(e)throw e.error}}return a})),s.set("RGB",(function(t){var e,r,o=t.trim().split(/\s*,\s*/),a="#";if(3!==o.length)throw new i.default("ModelArg1","Color values for the %1 model require 3 numbers","RGB");try{for(var s=n(o),l=s.next();!l.done;l=s.next()){var c=l.value;if(!c.match(/^\d+$/))throw new i.default("InvalidNumber","Invalid number");var u=parseInt(c);if(u>255)throw new i.default("ModelArg2","Color values for the %1 model must be between %2 and %3","RGB","0","255");var p=u.toString(16);p.length<2&&(p="0"+p),a+=p}}catch(t){e={error:t}}finally{try{l&&!l.done&&(r=s.return)&&r.call(s)}finally{if(e)throw e.error}}return a})),s.set("gray",(function(t){if(!t.match(/^\s*(\d+(\.\d*)?|\.\d+)\s*$/))throw new i.default("InvalidDecimalNumber","Invalid decimal number");var e=parseFloat(t);if(e<0||e>1)throw new i.default("ModelArg2","Color values for the %1 model must be between %2 and %3","gray","0","1");var r=Math.floor(255*e).toString(16);return r.length<2&&(r="0"+r),"#".concat(r).concat(r).concat(r)}))},6648:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.ColortblConfiguration=e.ColorArrayItem=void 0;var a=r(1181),s=r(9899),l=r(9140),c=i(r(3971)),u=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.color={cell:"",row:"",col:[]},e.hasColor=!1,e}return o(e,t),e.prototype.EndEntry=function(){t.prototype.EndEntry.call(this);var e=this.row[this.row.length-1],r=this.color.cell||this.color.row||this.color.col[this.row.length-1];r&&(e.attributes.set("mathbackground",r),this.color.cell="",this.hasColor=!0)},e.prototype.EndRow=function(){t.prototype.EndRow.call(this),this.color.row=""},e.prototype.createMml=function(){var e=t.prototype.createMml.call(this),r=e.isKind("mrow")?e.childNodes[1]:e;return r.isKind("menclose")&&(r=r.childNodes[0].childNodes[0]),this.hasColor&&"none"===r.attributes.get("frame")&&r.attributes.set("frame",""),e},e}(a.ArrayItem);e.ColorArrayItem=u,new l.CommandMap("colortbl",{cellcolor:["TableColor","cell"],rowcolor:["TableColor","row"],columncolor:["TableColor","col"]},{TableColor:function(t,e,r){var n=t.configuration.packageData.get("color").model,o=t.GetBrackets(e,""),i=n.getColor(o,t.GetArgument(e)),a=t.stack.Top();if(!(a instanceof u))throw new c.default("UnsupportedTableColor","Unsupported use of %1",t.currentCS);if("col"===r){if(a.table.length)throw new c.default("ColumnColorNotTop","%1 must be in the top row",e);a.color.col[a.row.length]=i,t.GetBrackets(e,"")&&t.GetBrackets(e,"")}else if(a.color[r]=i,"row"===r&&(a.Size()||a.row.length))throw new c.default("RowColorNotFirst","%1 must be at the beginning of a row",e)}});e.ColortblConfiguration=s.Configuration.create("colortbl",{handler:{macro:["colortbl"]},items:{array:u},priority:10,config:[function(t,e){e.parseOptions.packageData.has("color")||s.ConfigurationHandler.get("color").config(t,e)},10]})},6628:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.ColorConfiguration=e.ColorV2Methods=void 0;var n=r(9140),o=r(9899);e.ColorV2Methods={Color:function(t,e){var r=t.GetArgument(e),n=t.stack.env.color;t.stack.env.color=r;var o=t.ParseArg(e);n?t.stack.env.color=n:delete t.stack.env.color;var i=t.create("node","mstyle",[o],{mathcolor:r});t.Push(i)}},new n.CommandMap("colorv2",{color:"Color"},e.ColorV2Methods),e.ColorConfiguration=o.Configuration.create("colorv2",{handler:{macro:["colorv2"]}})},8458:function(t,e,r){var n,o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.ConfigMacrosConfiguration=void 0;var a=r(9899),s=r(7233),l=r(9140),c=i(r(5450)),u=r(8803),p=i(r(1110)),h=r(6793),d="configmacros-map",f="configmacros-env-map";e.ConfigMacrosConfiguration=a.Configuration.create("configmacros",{init:function(t){new l.CommandMap(d,{},{}),new l.EnvironmentMap(f,c.default.environment,{},{}),t.append(a.Configuration.local({handler:{macro:[d],environment:[f]},priority:3}))},config:function(t,e){!function(t){var e,r,n=t.parseOptions.handlers.retrieve(d),i=t.parseOptions.options.macros;try{for(var a=o(Object.keys(i)),s=a.next();!s.done;s=a.next()){var l=s.value,c="string"==typeof i[l]?[i[l]]:i[l],h=Array.isArray(c[2])?new u.Macro(l,p.default.MacroWithTemplate,c.slice(0,2).concat(c[2])):new u.Macro(l,p.default.Macro,c);n.add(l,h)}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}}(e),function(t){var e,r,n=t.parseOptions.handlers.retrieve(f),i=t.parseOptions.options.environments;try{for(var a=o(Object.keys(i)),s=a.next();!s.done;s=a.next()){var l=s.value;n.add(l,new u.Macro(l,p.default.BeginEnv,[!0].concat(i[l])))}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}}(e)},items:(n={},n[h.BeginEnvItem.prototype.kind]=h.BeginEnvItem,n),options:{macros:(0,s.expandable)({}),environments:(0,s.expandable)({})}})},5464:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},s=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.EmpheqConfiguration=e.EmpheqMethods=e.EmpheqBeginItem=void 0;var l=r(9899),c=r(9140),u=s(r(1130)),p=s(r(3971)),h=r(1181),d=r(6471),f=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"empheq-begin"},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){return e.isKind("end")&&e.getName()===this.getName()&&this.setProperty("end",!1),t.prototype.checkItem.call(this,e)},e}(h.BeginItem);e.EmpheqBeginItem=f,e.EmpheqMethods={Empheq:function(t,e){if(t.stack.env.closing===e.getName()){delete t.stack.env.closing,t.Push(t.itemFactory.create("end").setProperty("name",t.stack.global.empheq)),t.stack.global.empheq="";var r=t.stack.Top();d.EmpheqUtil.adjustTable(r,t),t.Push(t.itemFactory.create("end").setProperty("name","empheq"))}else{u.default.checkEqnEnv(t),delete t.stack.global.eqnenv;var n=t.GetBrackets("\\begin{"+e.getName()+"}")||"",o=a((t.GetArgument("\\begin{"+e.getName()+"}")||"").split(/=/),2),i=o[0],s=o[1];if(!d.EmpheqUtil.checkEnv(i))throw new p.default("UnknownEnv",'Unknown environment "%1"',i);n&&e.setProperties(d.EmpheqUtil.splitOptions(n,{left:1,right:1})),t.stack.global.empheq=i,t.string="\\begin{"+i+"}"+(s?"{"+s+"}":"")+t.string.slice(t.i),t.i=0,t.Push(e)}},EmpheqMO:function(t,e,r){t.Push(t.create("token","mo",{},r))},EmpheqDelim:function(t,e){var r=t.GetDelimiter(e);t.Push(t.create("token","mo",{stretchy:!0,symmetric:!0},r))}},new c.EnvironmentMap("empheq-env",d.EmpheqUtil.environment,{empheq:["Empheq","empheq"]},e.EmpheqMethods),new c.CommandMap("empheq-macros",{empheqlbrace:["EmpheqMO","{"],empheqrbrace:["EmpheqMO","}"],empheqlbrack:["EmpheqMO","["],empheqrbrack:["EmpheqMO","]"],empheqlangle:["EmpheqMO","\u27e8"],empheqrangle:["EmpheqMO","\u27e9"],empheqlparen:["EmpheqMO","("],empheqrparen:["EmpheqMO",")"],empheqlvert:["EmpheqMO","|"],empheqrvert:["EmpheqMO","|"],empheqlVert:["EmpheqMO","\u2016"],empheqrVert:["EmpheqMO","\u2016"],empheqlfloor:["EmpheqMO","\u230a"],empheqrfloor:["EmpheqMO","\u230b"],empheqlceil:["EmpheqMO","\u2308"],empheqrceil:["EmpheqMO","\u2309"],empheqbiglbrace:["EmpheqMO","{"],empheqbigrbrace:["EmpheqMO","}"],empheqbiglbrack:["EmpheqMO","["],empheqbigrbrack:["EmpheqMO","]"],empheqbiglangle:["EmpheqMO","\u27e8"],empheqbigrangle:["EmpheqMO","\u27e9"],empheqbiglparen:["EmpheqMO","("],empheqbigrparen:["EmpheqMO",")"],empheqbiglvert:["EmpheqMO","|"],empheqbigrvert:["EmpheqMO","|"],empheqbiglVert:["EmpheqMO","\u2016"],empheqbigrVert:["EmpheqMO","\u2016"],empheqbiglfloor:["EmpheqMO","\u230a"],empheqbigrfloor:["EmpheqMO","\u230b"],empheqbiglceil:["EmpheqMO","\u2308"],empheqbigrceil:["EmpheqMO","\u2309"],empheql:"EmpheqDelim",empheqr:"EmpheqDelim",empheqbigl:"EmpheqDelim",empheqbigr:"EmpheqDelim"},e.EmpheqMethods),e.EmpheqConfiguration=l.Configuration.create("empheq",{handler:{macro:["empheq-macros"],environment:["empheq-env"]},items:(o={},o[f.prototype.kind]=f,o)})},6471:function(t,e,r){var n=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},o=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.EmpheqUtil=void 0;var s=a(r(1130)),l=a(r(8417));e.EmpheqUtil={environment:function(t,e,r,i){var a=i[0],s=t.itemFactory.create(a+"-begin").setProperties({name:e,end:a});t.Push(r.apply(void 0,o([t,s],n(i.slice(1)),!1)))},splitOptions:function(t,e){return void 0===e&&(e=null),s.default.keyvalOptions(t,e,!0)},columnCount:function(t){var e,r,n=0;try{for(var o=i(t.childNodes),a=o.next();!a.done;a=o.next()){var s=a.value,l=s.childNodes.length-(s.isKind("mlabeledtr")?1:0);l>n&&(n=l)}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}return n},cellBlock:function(t,e,r,n){var o,a,s=r.create("node","mpadded",[],{height:0,depth:0,voffset:"-1height"}),c=new l.default(t,r.stack.env,r.configuration),u=c.mml();n&&c.configuration.tags.label&&(c.configuration.tags.currentTag.env=n,c.configuration.tags.getTag(!0));try{for(var p=i(u.isInferred?u.childNodes:[u]),h=p.next();!h.done;h=p.next()){var d=h.value;s.appendChild(d)}}catch(t){o={error:t}}finally{try{h&&!h.done&&(a=p.return)&&a.call(p)}finally{if(o)throw o.error}}return s.appendChild(r.create("node","mphantom",[r.create("node","mpadded",[e],{width:0})])),s},topRowTable:function(t,e){var r=s.default.copyNode(t,e);return r.setChildren(r.childNodes.slice(0,1)),r.attributes.set("align","baseline 1"),t.factory.create("mphantom",{},[e.create("node","mpadded",[r],{width:0})])},rowspanCell:function(t,e,r,n,o){t.appendChild(n.create("node","mpadded",[this.cellBlock(e,s.default.copyNode(r,n),n,o),this.topRowTable(r,n)],{height:0,depth:0,voffset:"height"}))},left:function(t,e,r,n,o){var a,s,l;void 0===o&&(o=""),t.attributes.set("columnalign","right "+(t.attributes.get("columnalign")||"")),t.attributes.set("columnspacing","0em "+(t.attributes.get("columnspacing")||""));try{for(var c=i(t.childNodes.slice(0).reverse()),u=c.next();!u.done;u=c.next()){var p=u.value;l=n.create("node","mtd"),p.childNodes.unshift(l),l.parent=p,p.isKind("mlabeledtr")&&(p.childNodes[0]=p.childNodes[1],p.childNodes[1]=l)}}catch(t){a={error:t}}finally{try{u&&!u.done&&(s=c.return)&&s.call(c)}finally{if(a)throw a.error}}this.rowspanCell(l,r,e,n,o)},right:function(t,r,n,o,i){void 0===i&&(i=""),0===t.childNodes.length&&t.appendChild(o.create("node","mtr"));for(var a=e.EmpheqUtil.columnCount(t),s=t.childNodes[0];s.childNodes.length=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.MathtoolsConfiguration=e.fixPrescripts=e.PAIREDDELIMS=void 0;var a=r(9899),s=r(9140),l=i(r(1256)),c=r(7233);r(2448);var u=r(836),p=r(1503),h=r(6224);function d(t){var e,r,n,i,a,s,c=t.data;try{for(var u=o(c.getList("mmultiscripts")),p=u.next();!p.done;p=u.next()){var h=p.value;if(h.getProperty("fixPrescript")){var d=l.default.getChildren(h),f=0;try{for(var m=(n=void 0,o([1,2])),y=m.next();!y.done;y=m.next()){d[v=y.value]||(l.default.setChild(h,v,c.nodeFactory.create("node","none")),f++)}}catch(t){n={error:t}}finally{try{y&&!y.done&&(i=m.return)&&i.call(m)}finally{if(n)throw n.error}}try{for(var g=(a=void 0,o([4,5])),b=g.next();!b.done;b=g.next()){var v=b.value;l.default.isType(d[v],"mrow")&&0===l.default.getChildren(d[v]).length&&l.default.setChild(h,v,c.nodeFactory.create("node","none"))}}catch(t){a={error:t}}finally{try{b&&!b.done&&(s=g.return)&&s.call(g)}finally{if(a)throw a.error}}2===f&&d.splice(1,2)}}}catch(t){e={error:t}}finally{try{p&&!p.done&&(r=u.return)&&r.call(u)}finally{if(e)throw e.error}}}e.PAIREDDELIMS="mathtools-paired-delims",e.fixPrescripts=d,e.MathtoolsConfiguration=a.Configuration.create("mathtools",{handler:{macro:["mathtools-macros","mathtools-delimiters"],environment:["mathtools-environments"],delimiter:["mathtools-delimiters"],character:["mathtools-characters"]},items:(n={},n[h.MultlinedItem.prototype.kind]=h.MultlinedItem,n),init:function(t){new s.CommandMap(e.PAIREDDELIMS,{},{}),t.append(a.Configuration.local({handler:{macro:[e.PAIREDDELIMS]},priority:-5}))},config:function(t,e){var r,n,i=e.parseOptions,a=i.options.mathtools.pairedDelimiters;try{for(var s=o(Object.keys(a)),l=s.next();!l.done;l=s.next()){var c=l.value;u.MathtoolsUtil.addPairedDelims(i,c,a[c])}}catch(t){r={error:t}}finally{try{l&&!l.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}(0,p.MathtoolsTagFormat)(t,e)},postprocessors:[[d,-6]],options:{mathtools:{multlinegap:"1em","multlined-pos":"c","firstline-afterskip":"","lastline-preskip":"","smallmatrix-align":"c",shortvdotsadjustabove:".2em",shortvdotsadjustbelow:".2em",centercolon:!1,"centercolon-offset":".04em","thincolon-dx":"-.04em","thincolon-dw":"-.08em","use-unicode":!1,"prescript-sub-format":"","prescript-sup-format":"","prescript-arg-format":"","allow-mathtoolsset":!0,pairedDelimiters:(0,c.expandable)({}),tagforms:(0,c.expandable)({})}}})},6224:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.MultlinedItem=void 0;var a=r(2790),s=i(r(1256)),l=r(8317),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"multlined"},enumerable:!1,configurable:!0}),e.prototype.EndTable=function(){if((this.Size()||this.row.length)&&(this.EndEntry(),this.EndRow()),this.table.length>1){var e=this.factory.configuration.options.mathtools,r=e.multlinegap,n=e["firstline-afterskip"]||r,o=e["lastline-preskip"]||r,i=s.default.getChildren(this.table[0])[0];s.default.getAttribute(i,"columnalign")!==l.TexConstant.Align.RIGHT&&i.appendChild(this.create("node","mspace",[],{width:n}));var a=s.default.getChildren(this.table[this.table.length-1])[0];if(s.default.getAttribute(a,"columnalign")!==l.TexConstant.Align.LEFT){var c=s.default.getChildren(a)[0];c.childNodes.unshift(null);var u=this.create("node","mspace",[],{width:o});s.default.setChild(c,0,u)}}t.prototype.EndTable.call(this)},e}(a.MultlineItem);e.MultlinedItem=c},2448:function(t,e,r){var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=n(r(5450)),i=r(9140),a=r(8317),s=r(643);new i.CommandMap("mathtools-macros",{shoveleft:["HandleShove",a.TexConstant.Align.LEFT],shoveright:["HandleShove",a.TexConstant.Align.RIGHT],xleftrightarrow:["xArrow",8596,10,10],xLeftarrow:["xArrow",8656,12,7],xRightarrow:["xArrow",8658,7,12],xLeftrightarrow:["xArrow",8660,12,12],xhookleftarrow:["xArrow",8617,10,5],xhookrightarrow:["xArrow",8618,5,10],xmapsto:["xArrow",8614,10,10],xrightharpoondown:["xArrow",8641,5,10],xleftharpoondown:["xArrow",8637,10,5],xrightleftharpoons:["xArrow",8652,10,10],xrightharpoonup:["xArrow",8640,5,10],xleftharpoonup:["xArrow",8636,10,5],xleftrightharpoons:["xArrow",8651,10,10],mathllap:["MathLap","l",!1],mathrlap:["MathLap","r",!1],mathclap:["MathLap","c",!1],clap:["MtLap","c"],textllap:["MtLap","l"],textrlap:["MtLap","r"],textclap:["MtLap","c"],cramped:"Cramped",crampedllap:["MathLap","l",!0],crampedrlap:["MathLap","r",!0],crampedclap:["MathLap","c",!0],crampedsubstack:["Macro","\\begin{crampedsubarray}{c}#1\\end{crampedsubarray}",1],mathmbox:"MathMBox",mathmakebox:"MathMakeBox",overbracket:"UnderOverBracket",underbracket:"UnderOverBracket",refeq:"HandleRef",MoveEqLeft:["Macro","\\hspace{#1em}&\\hspace{-#1em}",1,"2"],Aboxed:"Aboxed",ArrowBetweenLines:"ArrowBetweenLines",vdotswithin:"VDotsWithin",shortvdotswithin:"ShortVDotsWithin",MTFlushSpaceAbove:"FlushSpaceAbove",MTFlushSpaceBelow:"FlushSpaceBelow",DeclarePairedDelimiter:"DeclarePairedDelimiter",DeclarePairedDelimiterX:"DeclarePairedDelimiterX",DeclarePairedDelimiterXPP:"DeclarePairedDelimiterXPP",DeclarePairedDelimiters:"DeclarePairedDelimiter",DeclarePairedDelimitersX:"DeclarePairedDelimiterX",DeclarePairedDelimitersXPP:"DeclarePairedDelimiterXPP",centercolon:["CenterColon",!0,!0],ordinarycolon:["CenterColon",!1],MTThinColon:["CenterColon",!0,!0,!0],coloneqq:["Relation",":=","\u2254"],Coloneqq:["Relation","::=","\u2a74"],coloneq:["Relation",":-"],Coloneq:["Relation","::-"],eqqcolon:["Relation","=:","\u2255"],Eqqcolon:["Relation","=::"],eqcolon:["Relation","-:","\u2239"],Eqcolon:["Relation","-::"],colonapprox:["Relation",":\\approx"],Colonapprox:["Relation","::\\approx"],colonsim:["Relation",":\\sim"],Colonsim:["Relation","::\\sim"],dblcolon:["Relation","::","\u2237"],nuparrow:["NArrow","\u2191",".06em"],ndownarrow:["NArrow","\u2193",".25em"],bigtimes:["Macro","\\mathop{\\Large\\kern-.1em\\boldsymbol{\\times}\\kern-.1em}"],splitfrac:["SplitFrac",!1],splitdfrac:["SplitFrac",!0],xmathstrut:"XMathStrut",prescript:"Prescript",newtagform:["NewTagForm",!1],renewtagform:["NewTagForm",!0],usetagform:"UseTagForm",adjustlimits:["MacroWithTemplate","\\mathop{{#1}\\vphantom{{#3}}}_{{#2}\\vphantom{{#4}}}\\mathop{{#3}\\vphantom{{#1}}}_{{#4}\\vphantom{{#2}}}",4,,"_",,"_"],mathtoolsset:"SetOptions"},s.MathtoolsMethods),new i.EnvironmentMap("mathtools-environments",o.default.environment,{dcases:["Array",null,"\\{","","ll",null,".2em","D"],rcases:["Array",null,"","\\}","ll",null,".2em"],drcases:["Array",null,"","\\}","ll",null,".2em","D"],"dcases*":["Cases",null,"{","","D"],"rcases*":["Cases",null,"","}"],"drcases*":["Cases",null,"","}","D"],"cases*":["Cases",null,"{",""],"matrix*":["MtMatrix",null,null,null],"pmatrix*":["MtMatrix",null,"(",")"],"bmatrix*":["MtMatrix",null,"[","]"],"Bmatrix*":["MtMatrix",null,"\\{","\\}"],"vmatrix*":["MtMatrix",null,"\\vert","\\vert"],"Vmatrix*":["MtMatrix",null,"\\Vert","\\Vert"],"smallmatrix*":["MtSmallMatrix",null,null,null],psmallmatrix:["MtSmallMatrix",null,"(",")","c"],"psmallmatrix*":["MtSmallMatrix",null,"(",")"],bsmallmatrix:["MtSmallMatrix",null,"[","]","c"],"bsmallmatrix*":["MtSmallMatrix",null,"[","]"],Bsmallmatrix:["MtSmallMatrix",null,"\\{","\\}","c"],"Bsmallmatrix*":["MtSmallMatrix",null,"\\{","\\}"],vsmallmatrix:["MtSmallMatrix",null,"\\vert","\\vert","c"],"vsmallmatrix*":["MtSmallMatrix",null,"\\vert","\\vert"],Vsmallmatrix:["MtSmallMatrix",null,"\\Vert","\\Vert","c"],"Vsmallmatrix*":["MtSmallMatrix",null,"\\Vert","\\Vert"],crampedsubarray:["Array",null,null,null,null,"0em","0.1em","S'",1],multlined:"MtMultlined",spreadlines:["SpreadLines",!0],lgathered:["AmsEqnArray",null,null,null,"l",null,".5em","D"],rgathered:["AmsEqnArray",null,null,null,"r",null,".5em","D"]},s.MathtoolsMethods),new i.DelimiterMap("mathtools-delimiters",o.default.delimiter,{"\\lparen":"(","\\rparen":")"}),new i.CommandMap("mathtools-characters",{":":["CenterColon",!0]},s.MathtoolsMethods)},643:function(t,e,r){var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},i=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.MathtoolsMethods=void 0;var s=a(r(1130)),l=r(4387),c=a(r(7693)),u=a(r(8417)),p=a(r(3971)),h=a(r(1256)),d=r(9007),f=r(6010),m=r(7233),y=a(r(5579)),g=a(r(1110)),b=r(836);e.MathtoolsMethods={MtMatrix:function(t,r,n,o){var i=t.GetBrackets("\\begin{".concat(r.getName(),"}"),"c");return e.MathtoolsMethods.Array(t,r,n,o,i)},MtSmallMatrix:function(t,r,n,o,i){return i||(i=t.GetBrackets("\\begin{".concat(r.getName(),"}"),t.options.mathtools["smallmatrix-align"])),e.MathtoolsMethods.Array(t,r,n,o,i,s.default.Em(1/3),".2em","S",1)},MtMultlined:function(t,e){var r,n="\\begin{".concat(e.getName(),"}"),i=t.GetBrackets(n,t.options.mathtools["multlined-pos"]||"c"),a=i?t.GetBrackets(n,""):"";i&&!i.match(/^[cbt]$/)&&(a=(r=o([i,a],2))[0],i=r[1]),t.Push(e);var l=t.itemFactory.create("multlined",t,e);return l.arraydef={displaystyle:!0,rowspacing:".5em",width:a||"auto",columnwidth:"100%"},s.default.setArrayAlign(l,i||"c")},HandleShove:function(t,e,r){var n=t.stack.Top();if("multline"!==n.kind&&"multlined"!==n.kind)throw new p.default("CommandInMultlined","%1 can only appear within the multline or multlined environments",e);if(n.Size())throw new p.default("CommandAtTheBeginingOfLine","%1 must come at the beginning of the line",e);n.setProperty("shove",r);var o=t.GetBrackets(e),i=t.ParseArg(e);if(o){var a=t.create("node","mrow",[]),s=t.create("node","mspace",[],{width:o});"left"===r?(a.appendChild(s),a.appendChild(i)):(a.appendChild(i),a.appendChild(s)),i=a}t.Push(i)},SpreadLines:function(t,e){var r,n;if(t.stack.env.closing===e.getName()){delete t.stack.env.closing;var o=t.stack.Pop(),a=o.toMml(),s=o.getProperty("spread");if(a.isInferred)try{for(var l=i(h.default.getChildren(a)),c=l.next();!c.done;c=l.next()){var u=c.value;b.MathtoolsUtil.spreadLines(u,s)}}catch(t){r={error:t}}finally{try{c&&!c.done&&(n=l.return)&&n.call(l)}finally{if(r)throw r.error}}else b.MathtoolsUtil.spreadLines(a,s);t.Push(a)}else{s=t.GetDimen("\\begin{".concat(e.getName(),"}"));e.setProperty("spread",s),t.Push(e)}},Cases:function(t,e,r,n,o){var i=t.itemFactory.create("array").setProperty("casesEnv",e.getName());return i.arraydef={rowspacing:".2em",columnspacing:"1em",columnalign:"left"},"D"===o&&(i.arraydef.displaystyle=!0),i.setProperties({open:r,close:n}),t.Push(e),i},MathLap:function(t,e,r,o){var i=t.GetBrackets(e,"").trim(),a=t.create("node","mstyle",[t.create("node","mpadded",[t.ParseArg(e)],n({width:0},"r"===r?{}:{lspace:"l"===r?"-1width":"-.5width"}))],{"data-cramped":o});b.MathtoolsUtil.setDisplayLevel(a,i),t.Push(t.create("node","TeXAtom",[a]))},Cramped:function(t,e){var r=t.GetBrackets(e,"").trim(),n=t.ParseArg(e),o=t.create("node","mstyle",[n],{"data-cramped":!0});b.MathtoolsUtil.setDisplayLevel(o,r),t.Push(o)},MtLap:function(t,e,r){var n=s.default.internalMath(t,t.GetArgument(e),0),o=t.create("node","mpadded",n,{width:0});"r"!==r&&h.default.setAttribute(o,"lspace","l"===r?"-1width":"-.5width"),t.Push(o)},MathMakeBox:function(t,e){var r=t.GetBrackets(e),n=t.GetBrackets(e,"c"),o=t.create("node","mpadded",[t.ParseArg(e)]);r&&h.default.setAttribute(o,"width",r);var i=(0,m.lookup)(n,{c:"center",r:"right"},"");i&&h.default.setAttribute(o,"data-align",i),t.Push(o)},MathMBox:function(t,e){t.Push(t.create("node","mrow",[t.ParseArg(e)]))},UnderOverBracket:function(t,e){var r=(0,f.length2em)(t.GetBrackets(e,".1em"),.1),n=t.GetBrackets(e,".2em"),i=t.GetArgument(e),a=o("o"===e.charAt(1)?["over","accent","bottom"]:["under","accentunder","top"],3),l=a[0],c=a[1],p=a[2],d=(0,f.em)(r),m=new u.default(i,t.stack.env,t.configuration).mml(),y=new u.default(i,t.stack.env,t.configuration).mml(),g=t.create("node","mpadded",[t.create("node","mphantom",[y])],{style:"border: ".concat(d," solid; border-").concat(p,": none"),height:n,depth:0}),b=s.default.underOver(t,m,g,l,!0),v=h.default.getChildAt(h.default.getChildAt(b,0),0);h.default.setAttribute(v,c,!0),t.Push(b)},Aboxed:function(t,e){var r=b.MathtoolsUtil.checkAlignment(t,e);r.row.length%2==1&&r.row.push(t.create("node","mtd",[]));var n=t.GetArgument(e),o=t.string.substr(t.i);t.string=n+"&&\\endAboxed",t.i=0;var i=t.GetUpTo(e,"&"),a=t.GetUpTo(e,"&");t.GetUpTo(e,"\\endAboxed");var l=s.default.substituteArgs(t,[i,a],"\\rlap{\\boxed{#1{}#2}}\\kern.267em\\phantom{#1}&\\phantom{{}#2}\\kern.267em");t.string=l+o,t.i=0},ArrowBetweenLines:function(t,e){var r=b.MathtoolsUtil.checkAlignment(t,e);if(r.Size()||r.row.length)throw new p.default("BetweenLines","%1 must be on a row by itself",e);var n=t.GetStar(),o=t.GetBrackets(e,"\\Updownarrow");n&&(r.EndEntry(),r.EndEntry());var i=n?"\\quad"+o:o+"\\quad",a=new u.default(i,t.stack.env,t.configuration).mml();t.Push(a),r.EndEntry(),r.EndRow()},VDotsWithin:function(t,e){var r=t.stack.Top(),o=r.getProperty("flushspaceabove")===r.table.length,i="\\mmlToken{mi}{}"+t.GetArgument(e)+"\\mmlToken{mi}{}",a=new u.default(i,t.stack.env,t.configuration).mml(),s=t.create("node","mpadded",[t.create("node","mpadded",[t.create("node","mo",[t.create("text","\u22ee")])],n({width:0,lspace:"-.5width"},o?{height:"-.6em",voffset:"-.18em"}:{})),t.create("node","mphantom",[a])],{lspace:".5width"});t.Push(s)},ShortVDotsWithin:function(t,r){var n=t.stack.Top(),o=t.GetStar();e.MathtoolsMethods.FlushSpaceAbove(t,"\\MTFlushSpaceAbove"),!o&&n.EndEntry(),e.MathtoolsMethods.VDotsWithin(t,"\\vdotswithin"),o&&n.EndEntry(),e.MathtoolsMethods.FlushSpaceBelow(t,"\\MTFlushSpaceBelow")},FlushSpaceAbove:function(t,e){var r=b.MathtoolsUtil.checkAlignment(t,e);r.setProperty("flushspaceabove",r.table.length),r.addRowSpacing("-"+t.options.mathtools.shortvdotsadjustabove)},FlushSpaceBelow:function(t,e){var r=b.MathtoolsUtil.checkAlignment(t,e);r.Size()&&r.EndEntry(),r.EndRow(),r.addRowSpacing("-"+t.options.mathtools.shortvdotsadjustbelow)},PairedDelimiters:function(t,e,r,n,i,a,l,c){void 0===i&&(i="#1"),void 0===a&&(a=1),void 0===l&&(l=""),void 0===c&&(c="");var u=t.GetStar(),p=u?"":t.GetBrackets(e),h=o(u?["\\left","\\right"]:p?[p+"l",p+"r"]:["",""],2),d=h[0],f=h[1],m=u?"\\middle":p||"";if(a){for(var y=[],g=y.length;g=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},s=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.MathtoolsTagFormat=void 0;var l=s(r(3971)),c=r(6521),u=0;e.MathtoolsTagFormat=function(t,e){var r=e.parseOptions.options.tags;"base"!==r&&t.tags.hasOwnProperty(r)&&c.TagsFactory.add(r,t.tags[r]);var n=function(t){function r(){var r,n,o=t.call(this)||this;o.mtFormats=new Map,o.mtCurrent=null;var a=e.parseOptions.options.mathtools.tagforms;try{for(var s=i(Object.keys(a)),c=s.next();!c.done;c=s.next()){var u=c.value;if(!Array.isArray(a[u])||3!==a[u].length)throw new l.default("InvalidTagFormDef",'The tag form definition for "%1" should be an array fo three strings',u);o.mtFormats.set(u,a[u])}}catch(t){r={error:t}}finally{try{c&&!c.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}return o}return o(r,t),r.prototype.formatTag=function(e){if(this.mtCurrent){var r=a(this.mtCurrent,3),n=r[0],o=r[1],i=r[2];return i?"".concat(n).concat(i,"{").concat(e,"}").concat(o):"".concat(n).concat(e).concat(o)}return t.prototype.formatTag.call(this,e)},r}(c.TagsFactory.create(e.parseOptions.options.tags).constructor),s="MathtoolsTags-"+ ++u;c.TagsFactory.add(s,n),e.parseOptions.options.tags=s}},836:function(t,e,r){var n=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.MathtoolsUtil=void 0;var i=r(1181),a=o(r(1130)),s=o(r(8417)),l=o(r(3971)),c=r(8803),u=r(7233),p=r(643),h=r(7535);e.MathtoolsUtil={setDisplayLevel:function(t,e){if(e){var r=n((0,u.lookup)(e,{"\\displaystyle":[!0,0],"\\textstyle":[!1,0],"\\scriptstyle":[!1,1],"\\scriptscriptstyle":[!1,2]},[null,null]),2),o=r[0],i=r[1];null!==o&&(t.attributes.set("displaystyle",o),t.attributes.set("scriptlevel",i))}},checkAlignment:function(t,e){var r=t.stack.Top();if(r.kind!==i.EqnArrayItem.prototype.kind)throw new l.default("NotInAlignment","%1 can only be used in aligment environments",e);return r},addPairedDelims:function(t,e,r){t.handlers.retrieve(h.PAIREDDELIMS).add(e,new c.Macro(e,p.MathtoolsMethods.PairedDelimiters,r))},spreadLines:function(t,e){if(t.isKind("mtable")){var r=t.attributes.get("rowspacing");if(r){var n=a.default.dimen2em(e);r=r.split(/ /).map((function(t){return a.default.Em(Math.max(0,a.default.dimen2em(t)+n))})).join(" ")}else r=e;t.attributes.set("rowspacing",r)}},plusOrMinus:function(t,e){if(!(e=e.trim()).match(/^[-+]?(?:\d+(?:\.\d*)?|\.\d+)$/))throw new l.default("NotANumber","Argument to %1 is not a number",t);return e.match(/^[-+]/)?e:"+"+e},getScript:function(t,e,r){var n=a.default.trimSpaces(t.GetArgument(e));if(""===n)return t.create("node","none");var o=t.options.mathtools["prescript-".concat(r,"-format")];return o&&(n="".concat(o,"{").concat(n,"}")),new s.default(n,t.stack.env,t.configuration).mml()}}},6944:function(t,e,r){var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.MhchemConfiguration=void 0;var o=r(9899),i=r(9140),a=n(r(3971)),s=n(r(7693)),l=r(4387),c=r(7718),u={};u.Macro=s.default.Macro,u.xArrow=l.AmsMethods.xArrow,u.Machine=function(t,e,r){var n,o=t.GetArgument(e);try{n=c.mhchemParser.toTex(o,r)}catch(t){throw new a.default(t[0],t[1])}t.string=n+t.string.substr(t.i),t.i=0},new i.CommandMap("mhchem",{ce:["Machine","ce"],pu:["Machine","pu"],longrightleftharpoons:["Macro","\\stackrel{\\textstyle{-}\\!\\!{\\rightharpoonup}}{\\smash{{\\leftharpoondown}\\!\\!{-}}}"],longRightleftharpoons:["Macro","\\stackrel{\\textstyle{-}\\!\\!{\\rightharpoonup}}{\\smash{\\leftharpoondown}}"],longLeftrightharpoons:["Macro","\\stackrel{\\textstyle\\vphantom{{-}}{\\rightharpoonup}}{\\smash{{\\leftharpoondown}\\!\\!{-}}}"],longleftrightarrows:["Macro","\\stackrel{\\longrightarrow}{\\smash{\\longleftarrow}\\Rule{0px}{.25em}{0px}}"],tripledash:["Macro","\\vphantom{-}\\raise2mu{\\kern2mu\\tiny\\text{-}\\kern1mu\\text{-}\\kern1mu\\text{-}\\kern2mu}"],xleftrightarrow:["xArrow",8596,6,6],xrightleftharpoons:["xArrow",8652,5,7],xRightleftharpoons:["xArrow",8652,5,7],xLeftrightharpoons:["xArrow",8652,5,7]},u),e.MhchemConfiguration=o.Configuration.create("mhchem",{handler:{macro:["mhchem"]}})},1496:function(t,e,r){var n,o=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),i=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),a=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&o(e,t,r);return i(e,t),e},s=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.NewcommandConfiguration=void 0;var l=r(9899),c=r(6793),u=s(r(5579));r(5117);var p=s(r(5450)),h=a(r(9140));e.NewcommandConfiguration=l.Configuration.create("newcommand",{handler:{macro:["Newcommand-macros"]},items:(n={},n[c.BeginEnvItem.prototype.kind]=c.BeginEnvItem,n),options:{maxMacros:1e3},init:function(t){new h.DelimiterMap(u.default.NEW_DELIMITER,p.default.delimiter,{}),new h.CommandMap(u.default.NEW_COMMAND,{},{}),new h.EnvironmentMap(u.default.NEW_ENVIRONMENT,p.default.environment,{},{}),t.append(l.Configuration.local({handler:{character:[],delimiter:[u.default.NEW_DELIMITER],macro:[u.default.NEW_DELIMITER,u.default.NEW_COMMAND],environment:[u.default.NEW_ENVIRONMENT]},priority:-1}))}})},6793:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.BeginEnvItem=void 0;var a=i(r(3971)),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"beginEnv"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isOpen",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.checkItem=function(e){if(e.isKind("end")){if(e.getName()!==this.getName())throw new a.default("EnvBadEnd","\\begin{%1} ended with \\end{%2}",this.getName(),e.getName());return[[this.factory.create("mml",this.toMml())],!0]}if(e.isKind("stop"))throw new a.default("EnvMissingEnd","Missing \\end{%1}",this.getName());return t.prototype.checkItem.call(this,e)},e}(r(8292).BaseItem);e.BeginEnvItem=s},5117:function(t,e,r){var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=n(r(1110));new(r(9140).CommandMap)("Newcommand-macros",{newcommand:"NewCommand",renewcommand:"NewCommand",newenvironment:"NewEnvironment",renewenvironment:"NewEnvironment",def:"MacroDef",let:"Let"},o.default)},1110:function(t,e,r){var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&n(e,t,r);return o(e,t),e},a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=a(r(3971)),l=i(r(9140)),c=a(r(7693)),u=a(r(1130)),p=a(r(5579)),h={NewCommand:function(t,e){var r=p.default.GetCsNameArgument(t,e),n=p.default.GetArgCount(t,e),o=t.GetBrackets(e),i=t.GetArgument(e);p.default.addMacro(t,r,h.Macro,[i,n,o])},NewEnvironment:function(t,e){var r=u.default.trimSpaces(t.GetArgument(e)),n=p.default.GetArgCount(t,e),o=t.GetBrackets(e),i=t.GetArgument(e),a=t.GetArgument(e);p.default.addEnvironment(t,r,h.BeginEnv,[!0,i,a,n,o])},MacroDef:function(t,e){var r=p.default.GetCSname(t,e),n=p.default.GetTemplate(t,e,"\\"+r),o=t.GetArgument(e);n instanceof Array?p.default.addMacro(t,r,h.MacroWithTemplate,[o].concat(n)):p.default.addMacro(t,r,h.Macro,[o,n])},Let:function(t,e){var r=p.default.GetCSname(t,e),n=t.GetNext();"="===n&&(t.i++,n=t.GetNext());var o=t.configuration.handlers;if("\\"!==n){t.i++;var i=o.get("delimiter").lookup(n);i?p.default.addDelimiter(t,"\\"+r,i.char,i.attributes):p.default.addMacro(t,r,h.Macro,[n])}else{e=p.default.GetCSname(t,e);var a=o.get("delimiter").lookup("\\"+e);if(a)return void p.default.addDelimiter(t,"\\"+r,a.char,a.attributes);var s=o.get("macro").applicable(e);if(!s)return;if(s instanceof l.MacroMap){var c=s.lookup(e);return void p.default.addMacro(t,r,c.func,c.args,c.symbol)}a=s.lookup(e);var u=p.default.disassembleSymbol(r,a);p.default.addMacro(t,r,(function(t,e){for(var r=[],n=2;n0?[i.toString()].concat(o):i;t.i++}throw new a.default("MissingReplacementString","Missing replacement string for definition of %1",e)},t.GetParameter=function(t,r,n){if(null==n)return t.GetArgument(r);for(var o=t.i,i=0,s=0;t.i=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.NoUndefinedConfiguration=void 0;var o=r(9899);e.NoUndefinedConfiguration=o.Configuration.create("noundefined",{fallback:{macro:function(t,e){var r,o,i=t.create("text","\\"+e),a=t.options.noundefined||{},s={};try{for(var l=n(["color","background","size"]),c=l.next();!c.done;c=l.next()){var u=c.value;a[u]&&(s["math"+u]=a[u])}}catch(t){r={error:t}}finally{try{c&&!c.done&&(o=l.return)&&o.call(l)}finally{if(r)throw r.error}}t.Push(t.create("node","mtext",[],s,i))}},options:{noundefined:{color:"red",background:"",size:""}},priority:3})},3168:function(t,e,r){var n;Object.defineProperty(e,"__esModule",{value:!0}),e.PhysicsConfiguration=void 0;var o=r(9899),i=r(2612);r(3847),e.PhysicsConfiguration=o.Configuration.create("physics",{handler:{macro:["Physics-automatic-bracing-macros","Physics-vector-macros","Physics-vector-mo","Physics-vector-mi","Physics-derivative-macros","Physics-expressions-macros","Physics-quick-quad-macros","Physics-bra-ket-macros","Physics-matrix-macros"],character:["Physics-characters"],environment:["Physics-aux-envs"]},items:(n={},n[i.AutoOpen.prototype.kind]=i.AutoOpen,n),options:{physics:{italicdiff:!1,arrowdel:!1}}})},2612:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.AutoOpen=void 0;var a=r(8292),s=i(r(1130)),l=i(r(1256)),c=i(r(8417)),u=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.openCount=0,e}return o(e,t),Object.defineProperty(e.prototype,"kind",{get:function(){return"auto open"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isOpen",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.toMml=function(){var e=this.factory.configuration.parser,r=this.getProperty("right");if(this.getProperty("smash")){var n=t.prototype.toMml.call(this),o=e.create("node","mpadded",[n],{height:0,depth:0});this.Clear(),this.Push(e.create("node","TeXAtom",[o]))}r&&this.Push(new c.default(r,e.stack.env,e.configuration).mml());var i=s.default.fenced(this.factory.configuration,this.getProperty("open"),t.prototype.toMml.call(this),this.getProperty("close"),this.getProperty("big"));return l.default.removeProperties(i,"open","close","texClass"),i},e.prototype.checkItem=function(e){if(e.isKind("mml")&&1===e.Size()){var r=e.toMml();r.isKind("mo")&&r.getText()===this.getProperty("open")&&this.openCount++}var n=e.getProperty("autoclose");return n&&n===this.getProperty("close")&&!this.openCount--?this.getProperty("ignore")?(this.Clear(),[[],!0]):[[this.toMml()],!0]:t.prototype.checkItem.call(this,e)},e.errors=Object.assign(Object.create(a.BaseItem.errors),{stop:["ExtraOrMissingDelims","Extra open or missing close delimiter"]}),e}(a.BaseItem);e.AutoOpen=u},3847:function(t,e,r){var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=r(9140),i=n(r(7157)),a=r(8317),s=n(r(5450)),l=r(9007);new o.CommandMap("Physics-automatic-bracing-macros",{quantity:"Quantity",qty:"Quantity",pqty:["Quantity","(",")",!0],bqty:["Quantity","[","]",!0],vqty:["Quantity","|","|",!0],Bqty:["Quantity","\\{","\\}",!0],absolutevalue:["Quantity","|","|",!0],abs:["Quantity","|","|",!0],norm:["Quantity","\\|","\\|",!0],evaluated:"Eval",eval:"Eval",order:["Quantity","(",")",!0,"O",a.TexConstant.Variant.CALLIGRAPHIC],commutator:"Commutator",comm:"Commutator",anticommutator:["Commutator","\\{","\\}"],acomm:["Commutator","\\{","\\}"],poissonbracket:["Commutator","\\{","\\}"],pb:["Commutator","\\{","\\}"]},i.default),new o.CharacterMap("Physics-vector-mo",s.default.mathchar0mo,{dotproduct:["\u22c5",{mathvariant:a.TexConstant.Variant.BOLD}],vdot:["\u22c5",{mathvariant:a.TexConstant.Variant.BOLD}],crossproduct:"\xd7",cross:"\xd7",cp:"\xd7",gradientnabla:["\u2207",{mathvariant:a.TexConstant.Variant.BOLD}]}),new o.CharacterMap("Physics-vector-mi",s.default.mathchar0mi,{real:["\u211c",{mathvariant:a.TexConstant.Variant.NORMAL}],imaginary:["\u2111",{mathvariant:a.TexConstant.Variant.NORMAL}]}),new o.CommandMap("Physics-vector-macros",{vnabla:"Vnabla",vectorbold:"VectorBold",vb:"VectorBold",vectorarrow:["StarMacro",1,"\\vec{\\vb","{#1}}"],va:["StarMacro",1,"\\vec{\\vb","{#1}}"],vectorunit:["StarMacro",1,"\\hat{\\vb","{#1}}"],vu:["StarMacro",1,"\\hat{\\vb","{#1}}"],gradient:["OperatorApplication","\\vnabla","(","["],grad:["OperatorApplication","\\vnabla","(","["],divergence:["VectorOperator","\\vnabla\\vdot","(","["],div:["VectorOperator","\\vnabla\\vdot","(","["],curl:["VectorOperator","\\vnabla\\crossproduct","(","["],laplacian:["OperatorApplication","\\nabla^2","(","["]},i.default),new o.CommandMap("Physics-expressions-macros",{sin:"Expression",sinh:"Expression",arcsin:"Expression",asin:"Expression",cos:"Expression",cosh:"Expression",arccos:"Expression",acos:"Expression",tan:"Expression",tanh:"Expression",arctan:"Expression",atan:"Expression",csc:"Expression",csch:"Expression",arccsc:"Expression",acsc:"Expression",sec:"Expression",sech:"Expression",arcsec:"Expression",asec:"Expression",cot:"Expression",coth:"Expression",arccot:"Expression",acot:"Expression",exp:["Expression",!1],log:"Expression",ln:"Expression",det:["Expression",!1],Pr:["Expression",!1],tr:["Expression",!1],trace:["Expression",!1,"tr"],Tr:["Expression",!1],Trace:["Expression",!1,"Tr"],rank:"NamedFn",erf:["Expression",!1],Residue:["Macro","\\mathrm{Res}"],Res:["OperatorApplication","\\Residue","(","[","{"],principalvalue:["OperatorApplication","{\\cal P}"],pv:["OperatorApplication","{\\cal P}"],PV:["OperatorApplication","{\\rm P.V.}"],Re:["OperatorApplication","\\mathrm{Re}","{"],Im:["OperatorApplication","\\mathrm{Im}","{"],sine:["NamedFn","sin"],hypsine:["NamedFn","sinh"],arcsine:["NamedFn","arcsin"],asine:["NamedFn","asin"],cosine:["NamedFn","cos"],hypcosine:["NamedFn","cosh"],arccosine:["NamedFn","arccos"],acosine:["NamedFn","acos"],tangent:["NamedFn","tan"],hyptangent:["NamedFn","tanh"],arctangent:["NamedFn","arctan"],atangent:["NamedFn","atan"],cosecant:["NamedFn","csc"],hypcosecant:["NamedFn","csch"],arccosecant:["NamedFn","arccsc"],acosecant:["NamedFn","acsc"],secant:["NamedFn","sec"],hypsecant:["NamedFn","sech"],arcsecant:["NamedFn","arcsec"],asecant:["NamedFn","asec"],cotangent:["NamedFn","cot"],hypcotangent:["NamedFn","coth"],arccotangent:["NamedFn","arccot"],acotangent:["NamedFn","acot"],exponential:["NamedFn","exp"],logarithm:["NamedFn","log"],naturallogarithm:["NamedFn","ln"],determinant:["NamedFn","det"],Probability:["NamedFn","Pr"]},i.default),new o.CommandMap("Physics-quick-quad-macros",{qqtext:"Qqtext",qq:"Qqtext",qcomma:["Macro","\\qqtext*{,}"],qc:["Macro","\\qqtext*{,}"],qcc:["Qqtext","c.c."],qif:["Qqtext","if"],qthen:["Qqtext","then"],qelse:["Qqtext","else"],qotherwise:["Qqtext","otherwise"],qunless:["Qqtext","unless"],qgiven:["Qqtext","given"],qusing:["Qqtext","using"],qassume:["Qqtext","assume"],qsince:["Qqtext","since"],qlet:["Qqtext","let"],qfor:["Qqtext","for"],qall:["Qqtext","all"],qeven:["Qqtext","even"],qodd:["Qqtext","odd"],qinteger:["Qqtext","integer"],qand:["Qqtext","and"],qor:["Qqtext","or"],qas:["Qqtext","as"],qin:["Qqtext","in"]},i.default),new o.CommandMap("Physics-derivative-macros",{diffd:"DiffD",flatfrac:["Macro","\\left.#1\\middle/#2\\right.",2],differential:["Differential","\\diffd"],dd:["Differential","\\diffd"],variation:["Differential","\\delta"],var:["Differential","\\delta"],derivative:["Derivative",2,"\\diffd"],dv:["Derivative",2,"\\diffd"],partialderivative:["Derivative",3,"\\partial"],pderivative:["Derivative",3,"\\partial"],pdv:["Derivative",3,"\\partial"],functionalderivative:["Derivative",2,"\\delta"],fderivative:["Derivative",2,"\\delta"],fdv:["Derivative",2,"\\delta"]},i.default),new o.CommandMap("Physics-bra-ket-macros",{bra:"Bra",ket:"Ket",innerproduct:"BraKet",ip:"BraKet",braket:"BraKet",outerproduct:"KetBra",dyad:"KetBra",ketbra:"KetBra",op:"KetBra",expectationvalue:"Expectation",expval:"Expectation",ev:"Expectation",matrixelement:"MatrixElement",matrixel:"MatrixElement",mel:"MatrixElement"},i.default),new o.CommandMap("Physics-matrix-macros",{matrixquantity:"MatrixQuantity",mqty:"MatrixQuantity",pmqty:["Macro","\\mqty(#1)",1],Pmqty:["Macro","\\mqty*(#1)",1],bmqty:["Macro","\\mqty[#1]",1],vmqty:["Macro","\\mqty|#1|",1],smallmatrixquantity:["MatrixQuantity",!0],smqty:["MatrixQuantity",!0],spmqty:["Macro","\\smqty(#1)",1],sPmqty:["Macro","\\smqty*(#1)",1],sbmqty:["Macro","\\smqty[#1]",1],svmqty:["Macro","\\smqty|#1|",1],matrixdeterminant:["Macro","\\vmqty{#1}",1],mdet:["Macro","\\vmqty{#1}",1],smdet:["Macro","\\svmqty{#1}",1],identitymatrix:"IdentityMatrix",imat:"IdentityMatrix",xmatrix:"XMatrix",xmat:"XMatrix",zeromatrix:["Macro","\\xmat{0}{#1}{#2}",2],zmat:["Macro","\\xmat{0}{#1}{#2}",2],paulimatrix:"PauliMatrix",pmat:"PauliMatrix",diagonalmatrix:"DiagonalMatrix",dmat:"DiagonalMatrix",antidiagonalmatrix:["DiagonalMatrix",!0],admat:["DiagonalMatrix",!0]},i.default),new o.EnvironmentMap("Physics-aux-envs",s.default.environment,{smallmatrix:["Array",null,null,null,"c","0.333em",".2em","S",1]},i.default),new o.MacroMap("Physics-characters",{"|":["AutoClose",l.TEXCLASS.ORD],")":"AutoClose","]":"AutoClose"},i.default)},7157:function(t,e,r){var n=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=o(r(7693)),a=o(r(8417)),s=o(r(3971)),l=r(9007),c=o(r(1130)),u=o(r(1256)),p=r(8929),h={},d={"(":")","[":"]","{":"}","|":"|"},f=/^(b|B)i(g{1,2})$/;h.Quantity=function(t,e,r,n,o,i,p){void 0===r&&(r="("),void 0===n&&(n=")"),void 0===o&&(o=!1),void 0===i&&(i=""),void 0===p&&(p="");var h=!!o&&t.GetStar(),m=t.GetNext(),y=t.i,g=null;if("\\"===m){if(t.i++,!(g=t.GetCS()).match(f)){var b=t.create("node","mrow");return t.Push(c.default.fenced(t.configuration,r,b,n)),void(t.i=y)}m=t.GetNext()}var v=d[m];if(o&&"{"!==m)throw new s.default("MissingArgFor","Missing argument for %1",t.currentCS);if(!v){b=t.create("node","mrow");return t.Push(c.default.fenced(t.configuration,r,b,n)),void(t.i=y)}if(i){var _=t.create("token","mi",{texClass:l.TEXCLASS.OP},i);p&&u.default.setAttribute(_,"mathvariant",p),t.Push(t.itemFactory.create("fn",_))}if("{"===m){var S=t.GetArgument(e);return m=o?r:"\\{",v=o?n:"\\}",S=h?m+" "+S+" "+v:g?"\\"+g+"l"+m+" "+S+" \\"+g+"r"+v:"\\left"+m+" "+S+" \\right"+v,void t.Push(new a.default(S,t.stack.env,t.configuration).mml())}o&&(m=r,v=n),t.i++,t.Push(t.itemFactory.create("auto open").setProperties({open:m,close:v,big:g}))},h.Eval=function(t,e){var r=t.GetStar(),n=t.GetNext();if("{"!==n){if("("===n||"["===n)return t.i++,void t.Push(t.itemFactory.create("auto open").setProperties({open:n,close:"|",smash:r,right:"\\vphantom{\\int}"}));throw new s.default("MissingArgFor","Missing argument for %1",t.currentCS)}var o=t.GetArgument(e),i="\\left. "+(r?"\\smash{"+o+"}":o)+" \\vphantom{\\int}\\right|";t.string=t.string.slice(0,t.i)+i+t.string.slice(t.i)},h.Commutator=function(t,e,r,n){void 0===r&&(r="["),void 0===n&&(n="]");var o=t.GetStar(),i=t.GetNext(),l=null;if("\\"===i){if(t.i++,!(l=t.GetCS()).match(f))throw new s.default("MissingArgFor","Missing argument for %1",t.currentCS);i=t.GetNext()}if("{"!==i)throw new s.default("MissingArgFor","Missing argument for %1",t.currentCS);var c=t.GetArgument(e)+","+t.GetArgument(e);c=o?r+" "+c+" "+n:l?"\\"+l+"l"+r+" "+c+" \\"+l+"r"+n:"\\left"+r+" "+c+" \\right"+n,t.Push(new a.default(c,t.stack.env,t.configuration).mml())};var m=[65,90],y=[97,122],g=[913,937],b=[945,969],v=[48,57];function _(t,e){return t>=e[0]&&t<=e[1]}function S(t,e,r,n){var o=t.configuration.parser,i=p.NodeFactory.createToken(t,e,r,n),a=n.codePointAt(0);return 1===n.length&&!o.stack.env.font&&o.stack.env.vectorFont&&(_(a,m)||_(a,y)||_(a,g)||_(a,v)||_(a,b)&&o.stack.env.vectorStar||u.default.getAttribute(i,"accent"))&&u.default.setAttribute(i,"mathvariant",o.stack.env.vectorFont),i}h.VectorBold=function(t,e){var r=t.GetStar(),n=t.GetArgument(e),o=t.configuration.nodeFactory.get("token"),i=t.stack.env.font;delete t.stack.env.font,t.configuration.nodeFactory.set("token",S),t.stack.env.vectorFont=r?"bold-italic":"bold",t.stack.env.vectorStar=r;var s=new a.default(n,t.stack.env,t.configuration).mml();i&&(t.stack.env.font=i),delete t.stack.env.vectorFont,delete t.stack.env.vectorStar,t.configuration.nodeFactory.set("token",o),t.Push(s)},h.StarMacro=function(t,e,r){for(var n=[],o=3;o2&&l.length>2?(u="^{"+(l.length-1)+"}",c=!0):null!=i&&(r>2&&l.length>1&&(c=!0),p=u="^{"+i+"}");for(var h=o?"\\flatfrac":"\\frac",d=l.length>1?l[0]:"",f=l.length>1?l[1]:l[0],m="",y=2,g=void 0;g=l[y];y++)m+=n+" "+g;var b=h+"{"+n+u+d+"}{"+n+" "+f+p+" "+m+"}";t.Push(new a.default(b,t.stack.env,t.configuration).mml()),"("===t.GetNext()&&(t.i++,t.Push(t.itemFactory.create("auto open").setProperties({open:"(",close:")",ignore:c})))},h.Bra=function(t,e){var r=t.GetStar(),n=t.GetArgument(e),o="",i=!1,s=!1;if("\\"===t.GetNext()){var l=t.i;t.i++;var c=t.GetCS(),u=t.lookup("macro",c);u&&"ket"===u.symbol?(i=!0,l=t.i,s=t.GetStar(),"{"===t.GetNext()?o=t.GetArgument(c,!0):(t.i=l,s=!1)):t.i=l}var p="";p=i?r||s?"\\langle{".concat(n,"}\\vert{").concat(o,"}\\rangle"):"\\left\\langle{".concat(n,"}\\middle\\vert{").concat(o,"}\\right\\rangle"):r||s?"\\langle{".concat(n,"}\\vert"):"\\left\\langle{".concat(n,"}\\right\\vert{").concat(o,"}"),t.Push(new a.default(p,t.stack.env,t.configuration).mml())},h.Ket=function(t,e){var r=t.GetStar(),n=t.GetArgument(e),o=r?"\\vert{".concat(n,"}\\rangle"):"\\left\\vert{".concat(n,"}\\right\\rangle");t.Push(new a.default(o,t.stack.env,t.configuration).mml())},h.BraKet=function(t,e){var r=t.GetStar(),n=t.GetArgument(e),o=null;"{"===t.GetNext()&&(o=t.GetArgument(e,!0));var i="";i=null==o?r?"\\langle{".concat(n,"}\\vert{").concat(n,"}\\rangle"):"\\left\\langle{".concat(n,"}\\middle\\vert{").concat(n,"}\\right\\rangle"):r?"\\langle{".concat(n,"}\\vert{").concat(o,"}\\rangle"):"\\left\\langle{".concat(n,"}\\middle\\vert{").concat(o,"}\\right\\rangle"),t.Push(new a.default(i,t.stack.env,t.configuration).mml())},h.KetBra=function(t,e){var r=t.GetStar(),n=t.GetArgument(e),o=null;"{"===t.GetNext()&&(o=t.GetArgument(e,!0));var i="";i=null==o?r?"\\vert{".concat(n,"}\\rangle\\!\\langle{").concat(n,"}\\vert"):"\\left\\vert{".concat(n,"}\\middle\\rangle\\!\\middle\\langle{").concat(n,"}\\right\\vert"):r?"\\vert{".concat(n,"}\\rangle\\!\\langle{").concat(o,"}\\vert"):"\\left\\vert{".concat(n,"}\\middle\\rangle\\!\\middle\\langle{").concat(o,"}\\right\\vert"),t.Push(new a.default(i,t.stack.env,t.configuration).mml())},h.Expectation=function(t,e){var r=t.GetStar(),n=r&&t.GetStar(),o=t.GetArgument(e),i=null;"{"===t.GetNext()&&(i=t.GetArgument(e,!0));var s=o&&i?M([i,o,i],r,n):r?"\\langle {".concat(o,"} \\rangle"):"\\left\\langle {".concat(o,"} \\right\\rangle");t.Push(new a.default(s,t.stack.env,t.configuration).mml())},h.MatrixElement=function(t,e){var r=t.GetStar(),n=r&&t.GetStar(),o=M([t.GetArgument(e),t.GetArgument(e),t.GetArgument(e)],r,n);t.Push(new a.default(o,t.stack.env,t.configuration).mml())},h.MatrixQuantity=function(t,e,r){var n=t.GetStar(),o=r?"smallmatrix":"array",i="",s="",l="";switch(t.GetNext()){case"{":i=t.GetArgument(e);break;case"(":t.i++,s=n?"\\lgroup":"(",l=n?"\\rgroup":")",i=t.GetUpTo(e,")");break;case"[":t.i++,s="[",l="]",i=t.GetUpTo(e,"]");break;case"|":t.i++,s="|",l="|",i=t.GetUpTo(e,"|");break;default:s="(",l=")"}var c=(s?"\\left":"")+s+"\\begin{"+o+"}{} "+i+"\\end{"+o+"}"+(s?"\\right":"")+l;t.Push(new a.default(c,t.stack.env,t.configuration).mml())},h.IdentityMatrix=function(t,e){var r=t.GetArgument(e),n=parseInt(r,10);if(isNaN(n))throw new s.default("InvalidNumber","Invalid number");if(n<=1)return t.string="1"+t.string.slice(t.i),void(t.i=0);for(var o=Array(n).fill("0"),i=[],a=0;a=o){i.push(t.string.slice(s,o));break}s=t.i,i.push(a)}t.string=function(t,e){for(var r=t.length,n=[],o=0;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},i=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.SetOptionsConfiguration=e.SetOptionsUtil=void 0;var i=r(9899),a=r(9140),s=o(r(3971)),l=o(r(1130)),c=r(8803),u=o(r(7693)),p=r(7233);e.SetOptionsUtil={filterPackage:function(t,e){if("tex"!==e&&!i.ConfigurationHandler.get(e))throw new s.default("NotAPackage","Not a defined package: %1",e);var r=t.options.setoptions,n=r.allowOptions[e];if(void 0===n&&!r.allowPackageDefault||!1===n)throw new s.default("PackageNotSettable",'Options can\'t be set for package "%1"',e);return!0},filterOption:function(t,e,r){var n,o=t.options.setoptions,i=o.allowOptions[e]||{},a=i.hasOwnProperty(r)&&!(0,p.isObject)(i[r])?i[r]:null;if(!1===a||null===a&&!o.allowOptionsDefault)throw new s.default("OptionNotSettable",'Option "%1" is not allowed to be set',r);if(!(null===(n="tex"===e?t.options:t.options[e])||void 0===n?void 0:n.hasOwnProperty(r)))throw"tex"===e?new s.default("InvalidTexOption",'Invalid TeX option "%1"',r):new s.default("InvalidOptionKey",'Invalid option "%1" for package "%2"',r,e);return!0},filterValue:function(t,e,r,n){return n}};var h=new a.CommandMap("setoptions",{setOptions:"SetOptions"},{SetOptions:function(t,e){var r,o,i=t.GetBrackets(e)||"tex",a=l.default.keyvalOptions(t.GetArgument(e)),s=t.options.setoptions;if(s.filterPackage(t,i))try{for(var c=n(Object.keys(a)),u=c.next();!u.done;u=c.next()){var p=u.value;s.filterOption(t,i,p)&&(("tex"===i?t.options:t.options[i])[p]=s.filterValue(t,i,p,a[p]))}}catch(t){r={error:t}}finally{try{u&&!u.done&&(o=c.return)&&o.call(c)}finally{if(r)throw r.error}}}});e.SetOptionsConfiguration=i.Configuration.create("setoptions",{handler:{macro:["setoptions"]},config:function(t,e){var r=e.parseOptions.handlers.get("macro").lookup("require");r&&(h.add("Require",new c.Macro("Require",r._func)),h.add("require",new c.Macro("require",u.default.Macro,["\\Require{#2}\\setOptions[#2]{#1}",2,""])))},priority:3,options:{setoptions:{filterPackage:e.SetOptionsUtil.filterPackage,filterOption:e.SetOptionsUtil.filterOption,filterValue:e.SetOptionsUtil.filterValue,allowPackageDefault:!0,allowOptionsDefault:!0,allowOptions:(0,p.expandable)({tex:{FindTeX:!1,formatError:!1,package:!1,baseURL:!1,tags:!1,maxBuffer:!1,maxMaxros:!1,macros:!1,environments:!1},setoptions:!1,autoload:!1,require:!1,configmacros:!1,tagformat:!1})}}})},1527:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.TagFormatConfiguration=e.tagformatConfig=void 0;var i=r(9899),a=r(6521),s=0;function l(t,e){var r=e.parseOptions.options.tags;"base"!==r&&t.tags.hasOwnProperty(r)&&a.TagsFactory.add(r,t.tags[r]);var n=function(t){function r(){return null!==t&&t.apply(this,arguments)||this}return o(r,t),r.prototype.formatNumber=function(t){return e.parseOptions.options.tagformat.number(t)},r.prototype.formatTag=function(t){return e.parseOptions.options.tagformat.tag(t)},r.prototype.formatId=function(t){return e.parseOptions.options.tagformat.id(t)},r.prototype.formatUrl=function(t,r){return e.parseOptions.options.tagformat.url(t,r)},r}(a.TagsFactory.create(e.parseOptions.options.tags).constructor),i="configTags-"+ ++s;a.TagsFactory.add(i,n),e.parseOptions.options.tags=i}e.tagformatConfig=l,e.TagFormatConfiguration=i.Configuration.create("tagformat",{config:[l,10],options:{tagformat:{number:function(t){return t.toString()},tag:function(t){return"("+t+")"},id:function(t){return"mjx-eqn:"+t.replace(/\s/g,"_")},url:function(t,e){return e+"#"+encodeURIComponent(t)}}}})},2307:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.TextcompConfiguration=void 0;var n=r(9899);r(9906),e.TextcompConfiguration=n.Configuration.create("textcomp",{handler:{macro:["textcomp-macros"]}})},9906:function(t,e,r){var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=r(9140),i=r(8317),a=r(58),s=n(r(1130)),l=r(8728);new o.CommandMap("textcomp-macros",{textasciicircum:["Insert","^"],textasciitilde:["Insert","~"],textasteriskcentered:["Insert","*"],textbackslash:["Insert","\\"],textbar:["Insert","|"],textbraceleft:["Insert","{"],textbraceright:["Insert","}"],textbullet:["Insert","\u2022"],textdagger:["Insert","\u2020"],textdaggerdbl:["Insert","\u2021"],textellipsis:["Insert","\u2026"],textemdash:["Insert","\u2014"],textendash:["Insert","\u2013"],textexclamdown:["Insert","\xa1"],textgreater:["Insert",">"],textless:["Insert","<"],textordfeminine:["Insert","\xaa"],textordmasculine:["Insert","\xba"],textparagraph:["Insert","\xb6"],textperiodcentered:["Insert","\xb7"],textquestiondown:["Insert","\xbf"],textquotedblleft:["Insert","\u201c"],textquotedblright:["Insert","\u201d"],textquoteleft:["Insert","\u2018"],textquoteright:["Insert","\u2019"],textsection:["Insert","\xa7"],textunderscore:["Insert","_"],textvisiblespace:["Insert","\u2423"],textacutedbl:["Insert","\u02dd"],textasciiacute:["Insert","\xb4"],textasciibreve:["Insert","\u02d8"],textasciicaron:["Insert","\u02c7"],textasciidieresis:["Insert","\xa8"],textasciimacron:["Insert","\xaf"],textgravedbl:["Insert","\u02f5"],texttildelow:["Insert","\u02f7"],textbaht:["Insert","\u0e3f"],textcent:["Insert","\xa2"],textcolonmonetary:["Insert","\u20a1"],textcurrency:["Insert","\xa4"],textdollar:["Insert","$"],textdong:["Insert","\u20ab"],texteuro:["Insert","\u20ac"],textflorin:["Insert","\u0192"],textguarani:["Insert","\u20b2"],textlira:["Insert","\u20a4"],textnaira:["Insert","\u20a6"],textpeso:["Insert","\u20b1"],textsterling:["Insert","\xa3"],textwon:["Insert","\u20a9"],textyen:["Insert","\xa5"],textcircledP:["Insert","\u2117"],textcompwordmark:["Insert","\u200c"],textcopyleft:["Insert","\ud83c\udd2f"],textcopyright:["Insert","\xa9"],textregistered:["Insert","\xae"],textservicemark:["Insert","\u2120"],texttrademark:["Insert","\u2122"],textbardbl:["Insert","\u2016"],textbigcircle:["Insert","\u25ef"],textblank:["Insert","\u2422"],textbrokenbar:["Insert","\xa6"],textdiscount:["Insert","\u2052"],textestimated:["Insert","\u212e"],textinterrobang:["Insert","\u203d"],textinterrobangdown:["Insert","\u2e18"],textmusicalnote:["Insert","\u266a"],textnumero:["Insert","\u2116"],textopenbullet:["Insert","\u25e6"],textpertenthousand:["Insert","\u2031"],textperthousand:["Insert","\u2030"],textrecipe:["Insert","\u211e"],textreferencemark:["Insert","\u203b"],textlangle:["Insert","\u2329"],textrangle:["Insert","\u232a"],textlbrackdbl:["Insert","\u27e6"],textrbrackdbl:["Insert","\u27e7"],textlquill:["Insert","\u2045"],textrquill:["Insert","\u2046"],textcelsius:["Insert","\u2103"],textdegree:["Insert","\xb0"],textdiv:["Insert","\xf7"],textdownarrow:["Insert","\u2193"],textfractionsolidus:["Insert","\u2044"],textleftarrow:["Insert","\u2190"],textlnot:["Insert","\xac"],textmho:["Insert","\u2127"],textminus:["Insert","\u2212"],textmu:["Insert","\xb5"],textohm:["Insert","\u2126"],textonehalf:["Insert","\xbd"],textonequarter:["Insert","\xbc"],textonesuperior:["Insert","\xb9"],textpm:["Insert","\xb1"],textrightarrow:["Insert","\u2192"],textsurd:["Insert","\u221a"],textthreequarters:["Insert","\xbe"],textthreesuperior:["Insert","\xb3"],texttimes:["Insert","\xd7"],texttwosuperior:["Insert","\xb2"],textuparrow:["Insert","\u2191"],textborn:["Insert","*"],textdied:["Insert","\u2020"],textdivorced:["Insert","\u26ae"],textmarried:["Insert","\u26ad"],textcentoldstyle:["Insert","\xa2",i.TexConstant.Variant.OLDSTYLE],textdollaroldstyle:["Insert","$",i.TexConstant.Variant.OLDSTYLE],textzerooldstyle:["Insert","0",i.TexConstant.Variant.OLDSTYLE],textoneoldstyle:["Insert","1",i.TexConstant.Variant.OLDSTYLE],texttwooldstyle:["Insert","2",i.TexConstant.Variant.OLDSTYLE],textthreeoldstyle:["Insert","3",i.TexConstant.Variant.OLDSTYLE],textfouroldstyle:["Insert","4",i.TexConstant.Variant.OLDSTYLE],textfiveoldstyle:["Insert","5",i.TexConstant.Variant.OLDSTYLE],textsixoldstyle:["Insert","6",i.TexConstant.Variant.OLDSTYLE],textsevenoldstyle:["Insert","7",i.TexConstant.Variant.OLDSTYLE],texteightoldstyle:["Insert","8",i.TexConstant.Variant.OLDSTYLE],textnineoldstyle:["Insert","9",i.TexConstant.Variant.OLDSTYLE]},{Insert:function(t,e,r,n){if(t instanceof l.TextParser){if(!n)return void a.TextMacrosMethods.Insert(t,e,r);t.saveText()}t.Push(s.default.internalText(t,r,n?{mathvariant:n}:{}))}})},2675:function(t,e,r){var n,o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.TextMacrosConfiguration=e.TextBaseConfiguration=void 0;var i=r(9899),a=o(r(8562)),s=r(6521),l=r(1181),c=r(8728),u=r(58);function p(t,e,r,n){var o=t.configuration.packageData.get("textmacros");return t instanceof c.TextParser||(o.texParser=t),[new c.TextParser(e,n?{mathvariant:n}:{},o.parseOptions,r).mml()]}r(8376),e.TextBaseConfiguration=i.Configuration.create("text-base",{parser:"text",handler:{character:["command","text-special"],macro:["text-macros"]},fallback:{character:function(t,e){t.text+=e},macro:function(t,e){var r=t.texParser,n=r.lookup("macro",e);n&&n._func!==u.TextMacrosMethods.Macro&&t.Error("MathMacro","%1 is only supported in math mode","\\"+e),r.parse("macro",[t,e])}},items:(n={},n[l.StartItem.prototype.kind]=l.StartItem,n[l.StopItem.prototype.kind]=l.StopItem,n[l.MmlItem.prototype.kind]=l.MmlItem,n[l.StyleItem.prototype.kind]=l.StyleItem,n)}),e.TextMacrosConfiguration=i.Configuration.create("textmacros",{config:function(t,e){var r=new i.ParserConfiguration(e.parseOptions.options.textmacros.packages,["tex","text"]);r.init();var n=new a.default(r,[]);n.options=e.parseOptions.options,r.config(e),s.TagsFactory.addTags(r.tags),n.tags=s.TagsFactory.getDefault(),n.tags.configuration=n,n.packageData=e.parseOptions.packageData,n.packageData.set("textmacros",{parseOptions:n,jax:e,texParser:null}),n.options.internalMath=p},preprocessors:[function(t){var e=t.data.packageData.get("textmacros");e.parseOptions.nodeFactory.setMmlFactory(e.jax.mmlFactory)}],options:{textmacros:{packages:["text-base"]}}})},8376:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0});var n=r(9140),o=r(8317),i=r(58),a=r(6010);new n.MacroMap("text-special",{$:"Math","%":"Comment","^":"MathModeOnly",_:"MathModeOnly","&":"Misplaced","#":"Misplaced","~":"Tilde"," ":"Space","\t":"Space","\r":"Space","\n":"Space","\xa0":"Tilde","{":"OpenBrace","}":"CloseBrace","`":"OpenQuote","'":"CloseQuote"},i.TextMacrosMethods),new n.CommandMap("text-macros",{"(":"Math",$:"SelfQuote",_:"SelfQuote","%":"SelfQuote","{":"SelfQuote","}":"SelfQuote"," ":"SelfQuote","&":"SelfQuote","#":"SelfQuote","\\":"SelfQuote","'":["Accent","\xb4"],"\u2019":["Accent","\xb4"],"`":["Accent","`"],"\u2018":["Accent","`"],"^":["Accent","^"],'"':["Accent","\xa8"],"~":["Accent","~"],"=":["Accent","\xaf"],".":["Accent","\u02d9"],u:["Accent","\u02d8"],v:["Accent","\u02c7"],emph:"Emph",rm:["SetFont",o.TexConstant.Variant.NORMAL],mit:["SetFont",o.TexConstant.Variant.ITALIC],oldstyle:["SetFont",o.TexConstant.Variant.OLDSTYLE],cal:["SetFont",o.TexConstant.Variant.CALLIGRAPHIC],it:["SetFont","-tex-mathit"],bf:["SetFont",o.TexConstant.Variant.BOLD],bbFont:["SetFont",o.TexConstant.Variant.DOUBLESTRUCK],scr:["SetFont",o.TexConstant.Variant.SCRIPT],frak:["SetFont",o.TexConstant.Variant.FRAKTUR],sf:["SetFont",o.TexConstant.Variant.SANSSERIF],tt:["SetFont",o.TexConstant.Variant.MONOSPACE],tiny:["SetSize",.5],Tiny:["SetSize",.6],scriptsize:["SetSize",.7],small:["SetSize",.85],normalsize:["SetSize",1],large:["SetSize",1.2],Large:["SetSize",1.44],LARGE:["SetSize",1.73],huge:["SetSize",2.07],Huge:["SetSize",2.49],Bbb:["Macro","{\\bbFont #1}",1],textnormal:["Macro","{\\rm #1}",1],textup:["Macro","{\\rm #1}",1],textrm:["Macro","{\\rm #1}",1],textit:["Macro","{\\it #1}",1],textbf:["Macro","{\\bf #1}",1],textsf:["Macro","{\\sf #1}",1],texttt:["Macro","{\\tt #1}",1],dagger:["Insert","\u2020"],ddagger:["Insert","\u2021"],S:["Insert","\xa7"],",":["Spacer",a.MATHSPACE.thinmathspace],":":["Spacer",a.MATHSPACE.mediummathspace],">":["Spacer",a.MATHSPACE.mediummathspace],";":["Spacer",a.MATHSPACE.thickmathspace],"!":["Spacer",a.MATHSPACE.negativethinmathspace],enspace:["Spacer",.5],quad:["Spacer",1],qquad:["Spacer",2],thinspace:["Spacer",a.MATHSPACE.thinmathspace],negthinspace:["Spacer",a.MATHSPACE.negativethinmathspace],hskip:"Hskip",hspace:"Hskip",kern:"Hskip",mskip:"Hskip",mspace:"Hskip",mkern:"Hskip",rule:"rule",Rule:["Rule"],Space:["Rule","blank"],color:"CheckAutoload",textcolor:"CheckAutoload",colorbox:"CheckAutoload",fcolorbox:"CheckAutoload",href:"CheckAutoload",style:"CheckAutoload",class:"CheckAutoload",cssId:"CheckAutoload",unicode:"CheckAutoload",ref:["HandleRef",!1],eqref:["HandleRef",!0]},i.TextMacrosMethods)},58:function(t,e,r){var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.TextMacrosMethods=void 0;var o=n(r(8417)),i=r(4542),a=n(r(7693));e.TextMacrosMethods={Comment:function(t,e){for(;t.i=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},s=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.CHTML=void 0;var u=r(3055),p=r(4139),h=r(9261),d=r(6797),f=r(2760),m=l(r(6010)),y=r(505),g=function(t){function e(e){void 0===e&&(e=null);var r=t.call(this,e,h.CHTMLWrapperFactory,f.TeXFont)||this;return r.chtmlStyles=null,r.font.adaptiveCSS(r.options.adaptiveCSS),r.wrapperUsage=new d.Usage,r}return o(e,t),e.prototype.escaped=function(t,e){return this.setDocument(e),this.html("span",{},[this.text(t.math)])},e.prototype.styleSheet=function(r){if(this.chtmlStyles){if(this.options.adaptiveCSS){var n=new p.CssStyles;this.addWrapperStyles(n),this.updateFontStyles(n),this.adaptor.insertRules(this.chtmlStyles,n.getStyleRules())}return this.chtmlStyles}var o=this.chtmlStyles=t.prototype.styleSheet.call(this,r);return this.adaptor.setAttribute(o,"id",e.STYLESHEETID),this.wrapperUsage.update(),o},e.prototype.updateFontStyles=function(t){t.addStyles(this.font.updateStyles({}))},e.prototype.addWrapperStyles=function(e){var r,n;if(this.options.adaptiveCSS)try{for(var o=c(this.wrapperUsage.update()),i=o.next();!i.done;i=o.next()){var a=i.value,s=this.factory.getNodeClass(a);s&&this.addClassStyles(s,e)}}catch(t){r={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}else t.prototype.addWrapperStyles.call(this,e)},e.prototype.addClassStyles=function(e,r){var n,o=e;o.autoStyle&&"unknown"!==o.kind&&r.addStyles(((n={})["mjx-"+o.kind]={display:"inline-block","text-align":"left"},n)),this.wrapperUsage.add(o.kind),t.prototype.addClassStyles.call(this,e,r)},e.prototype.processMath=function(t,e){this.factory.wrap(t).toCHTML(e)},e.prototype.clearCache=function(){this.cssStyles.clear(),this.font.clearCache(),this.wrapperUsage.clear(),this.chtmlStyles=null},e.prototype.reset=function(){this.clearCache()},e.prototype.unknownText=function(t,e,r){void 0===r&&(r=null);var n={},o=100/this.math.metrics.scale;if(100!==o&&(n["font-size"]=this.fixed(o,1)+"%",n.padding=m.em(75/o)+" 0 "+m.em(20/o)+" 0"),"-explicitFont"!==e){var i=(0,y.unicodeChars)(t);(1!==i.length||i[0]<119808||i[0]>120831)&&this.cssFontStyles(this.font.getCssFont(e),n)}if(null!==r){var a=this.math.metrics;n.width=Math.round(r*a.em*a.scale)+"px"}return this.html("mjx-utext",{variant:e,style:n},[this.text(t)])},e.prototype.measureTextNode=function(t){var e=this.adaptor,r=e.clone(t);e.setStyle(r,"font-family",e.getStyle(r,"font-family").replace(/MJXZERO, /g,""));var n=this.html("mjx-measure-text",{style:{position:"absolute","white-space":"nowrap"}},[r]);e.append(e.parent(this.math.start.node),this.container),e.append(this.container,n);var o=e.nodeSize(r,this.math.metrics.em)[0]/this.math.metrics.scale;return e.remove(this.container),e.remove(n),{w:o,h:.75,d:.2}},e.NAME="CHTML",e.OPTIONS=i(i({},u.CommonOutputJax.OPTIONS),{adaptiveCSS:!0,matchFontHeight:!0}),e.commonStyles={'mjx-container[jax="CHTML"]':{"line-height":0},'mjx-container [space="1"]':{"margin-left":".111em"},'mjx-container [space="2"]':{"margin-left":".167em"},'mjx-container [space="3"]':{"margin-left":".222em"},'mjx-container [space="4"]':{"margin-left":".278em"},'mjx-container [space="5"]':{"margin-left":".333em"},'mjx-container [rspace="1"]':{"margin-right":".111em"},'mjx-container [rspace="2"]':{"margin-right":".167em"},'mjx-container [rspace="3"]':{"margin-right":".222em"},'mjx-container [rspace="4"]':{"margin-right":".278em"},'mjx-container [rspace="5"]':{"margin-right":".333em"},'mjx-container [size="s"]':{"font-size":"70.7%"},'mjx-container [size="ss"]':{"font-size":"50%"},'mjx-container [size="Tn"]':{"font-size":"60%"},'mjx-container [size="sm"]':{"font-size":"85%"},'mjx-container [size="lg"]':{"font-size":"120%"},'mjx-container [size="Lg"]':{"font-size":"144%"},'mjx-container [size="LG"]':{"font-size":"173%"},'mjx-container [size="hg"]':{"font-size":"207%"},'mjx-container [size="HG"]':{"font-size":"249%"},'mjx-container [width="full"]':{width:"100%"},"mjx-box":{display:"inline-block"},"mjx-block":{display:"block"},"mjx-itable":{display:"inline-table"},"mjx-row":{display:"table-row"},"mjx-row > *":{display:"table-cell"},"mjx-mtext":{display:"inline-block"},"mjx-mstyle":{display:"inline-block"},"mjx-merror":{display:"inline-block",color:"red","background-color":"yellow"},"mjx-mphantom":{visibility:"hidden"},"_::-webkit-full-page-media, _:future, :root mjx-container":{"will-change":"opacity"}},e.STYLESHEETID="MJX-CHTML-styles",e}(u.CommonOutputJax);e.CHTML=g},8042:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},c=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(e,"__esModule",{value:!0}),e.AddCSS=e.CHTMLFontData=void 0;var u=r(5884),p=r(6797),h=r(6010);s(r(5884),e);var d=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.charUsage=new p.Usage,e.delimUsage=new p.Usage,e}return o(e,t),e.charOptions=function(e,r){return t.charOptions.call(this,e,r)},e.prototype.adaptiveCSS=function(t){this.options.adaptiveCSS=t},e.prototype.clearCache=function(){this.options.adaptiveCSS&&(this.charUsage.clear(),this.delimUsage.clear())},e.prototype.createVariant=function(e,r,n){void 0===r&&(r=null),void 0===n&&(n=null),t.prototype.createVariant.call(this,e,r,n);var o=this.constructor;this.variant[e].classes=o.defaultVariantClasses[e],this.variant[e].letter=o.defaultVariantLetters[e]},e.prototype.defineChars=function(r,n){var o,i;t.prototype.defineChars.call(this,r,n);var a=this.variant[r].letter;try{for(var s=l(Object.keys(n)),c=s.next();!c.done;c=s.next()){var u=c.value,p=e.charOptions(n,parseInt(u));void 0===p.f&&(p.f=a)}}catch(t){o={error:t}}finally{try{c&&!c.done&&(i=s.return)&&i.call(s)}finally{if(o)throw o.error}}},Object.defineProperty(e.prototype,"styles",{get:function(){var t=this.constructor,e=i({},t.defaultStyles);return this.addFontURLs(e,t.defaultFonts,this.options.fontURL),this.options.adaptiveCSS?this.updateStyles(e):this.allStyles(e),e},enumerable:!1,configurable:!0}),e.prototype.updateStyles=function(t){var e,r,n,o;try{for(var i=l(this.delimUsage.update()),a=i.next();!a.done;a=i.next()){var s=a.value;this.addDelimiterStyles(t,s,this.delimiters[s])}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}try{for(var u=l(this.charUsage.update()),p=u.next();!p.done;p=u.next()){var h=c(p.value,2),d=h[0],f=(s=h[1],this.variant[d]);this.addCharStyles(t,f.letter,s,f.chars[s])}}catch(t){n={error:t}}finally{try{p&&!p.done&&(o=u.return)&&o.call(u)}finally{if(n)throw n.error}}return t},e.prototype.allStyles=function(t){var e,r,n,o,i,a;try{for(var s=l(Object.keys(this.delimiters)),c=s.next();!c.done;c=s.next()){var u=c.value,p=parseInt(u);this.addDelimiterStyles(t,p,this.delimiters[p])}}catch(t){e={error:t}}finally{try{c&&!c.done&&(r=s.return)&&r.call(s)}finally{if(e)throw e.error}}try{for(var h=l(Object.keys(this.variant)),d=h.next();!d.done;d=h.next()){var f=d.value,m=this.variant[f],y=m.letter;try{for(var g=(i=void 0,l(Object.keys(m.chars))),b=g.next();!b.done;b=g.next()){u=b.value,p=parseInt(u);var v=m.chars[p];(v[3]||{}).smp||(v.length<4&&(v[3]={}),this.addCharStyles(t,y,p,v))}}catch(t){i={error:t}}finally{try{b&&!b.done&&(a=g.return)&&a.call(g)}finally{if(i)throw i.error}}}}catch(t){n={error:t}}finally{try{d&&!d.done&&(o=h.return)&&o.call(h)}finally{if(n)throw n.error}}},e.prototype.addFontURLs=function(t,e,r){var n,o;try{for(var a=l(Object.keys(e)),s=a.next();!s.done;s=a.next()){var c=s.value,u=i({},e[c]);u.src=u.src.replace(/%%URL%%/,r),t[c]=u}}catch(t){n={error:t}}finally{try{s&&!s.done&&(o=a.return)&&o.call(a)}finally{if(n)throw n.error}}},e.prototype.addDelimiterStyles=function(t,e,r){var n=this.charSelector(e);r.c&&r.c!==e&&(t[".mjx-stretched mjx-c"+(n=this.charSelector(r.c))+"::before"]={content:this.charContent(r.c)}),r.stretch&&(1===r.dir?this.addDelimiterVStyles(t,n,r):this.addDelimiterHStyles(t,n,r))},e.prototype.addDelimiterVStyles=function(t,e,r){var n=r.HDW,o=c(r.stretch,4),i=o[0],a=o[1],s=o[2],l=o[3],u=this.addDelimiterVPart(t,e,"beg",i,n);this.addDelimiterVPart(t,e,"ext",a,n);var p=this.addDelimiterVPart(t,e,"end",s,n),h={};if(l){var d=this.addDelimiterVPart(t,e,"mid",l,n);h.height="50%",t["mjx-stretchy-v"+e+" > mjx-mid"]={"margin-top":this.em(-d/2),"margin-bottom":this.em(-d/2)}}u&&(h["border-top-width"]=this.em0(u-.03)),p&&(h["border-bottom-width"]=this.em0(p-.03),t["mjx-stretchy-v"+e+" > mjx-end"]={"margin-top":this.em(-p)}),Object.keys(h).length&&(t["mjx-stretchy-v"+e+" > mjx-ext"]=h)},e.prototype.addDelimiterVPart=function(t,e,r,n,o){if(!n)return 0;var i=this.getDelimiterData(n),a=(o[2]-i[2])/2,s={content:this.charContent(n)};return"ext"!==r?s.padding=this.padding(i,a):(s.width=this.em0(o[2]),a&&(s["padding-left"]=this.em0(a))),t["mjx-stretchy-v"+e+" mjx-"+r+" mjx-c::before"]=s,i[0]+i[1]},e.prototype.addDelimiterHStyles=function(t,e,r){var n=c(r.stretch,4),o=n[0],i=n[1],a=n[2],s=n[3],l=r.HDW;this.addDelimiterHPart(t,e,"beg",o,l),this.addDelimiterHPart(t,e,"ext",i,l),this.addDelimiterHPart(t,e,"end",a,l),s&&(this.addDelimiterHPart(t,e,"mid",s,l),t["mjx-stretchy-h"+e+" > mjx-ext"]={width:"50%"})},e.prototype.addDelimiterHPart=function(t,e,r,n,o){if(n){var i=this.getDelimiterData(n)[3],a={content:i&&i.c?'"'+i.c+'"':this.charContent(n)};a.padding=this.padding(o,0,-o[2]),t["mjx-stretchy-h"+e+" mjx-"+r+" mjx-c::before"]=a}},e.prototype.addCharStyles=function(t,e,r,n){var o=n[3],i=void 0!==o.f?o.f:e;t["mjx-c"+this.charSelector(r)+(i?".TEX-"+i:"")+"::before"]={padding:this.padding(n,0,o.ic||0),content:null!=o.c?'"'+o.c+'"':this.charContent(r)}},e.prototype.getDelimiterData=function(t){return this.getChar("-smallop",t)},e.prototype.em=function(t){return(0,h.em)(t)},e.prototype.em0=function(t){return(0,h.em)(Math.max(0,t))},e.prototype.padding=function(t,e,r){var n=c(t,3),o=n[0],i=n[1];return void 0===e&&(e=0),void 0===r&&(r=0),[o,n[2]+r,i,e].map(this.em0).join(" ")},e.prototype.charContent=function(t){return'"'+(t>=32&&t<=126&&34!==t&&39!==t&&92!==t?String.fromCharCode(t):"\\"+t.toString(16).toUpperCase())+'"'},e.prototype.charSelector=function(t){return".mjx-c"+t.toString(16).toUpperCase()},e.OPTIONS=i(i({},u.FontData.OPTIONS),{fontURL:"js/output/chtml/fonts/tex-woff-v2"}),e.JAX="CHTML",e.defaultVariantClasses={},e.defaultVariantLetters={},e.defaultStyles={"mjx-c::before":{display:"block",width:0}},e.defaultFonts={"@font-face /* 0 */":{"font-family":"MJXZERO",src:'url("%%URL%%/MathJax_Zero.woff") format("woff")'}},e}(u.FontData);e.CHTMLFontData=d,e.AddCSS=function(t,e){var r,n;try{for(var o=l(Object.keys(e)),i=o.next();!i.done;i=o.next()){var a=i.value,s=parseInt(a);Object.assign(u.FontData.charOptions(t,s),e[s])}}catch(t){r={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return t}},8270:function(t,e,r){var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&n(e,t,r);return o(e,t),e},a=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)},s=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(e,"__esModule",{value:!0}),e.Arrow=e.DiagonalArrow=e.DiagonalStrike=e.Border2=e.Border=e.RenderElement=void 0;var l=i(r(5552));a(r(5552),e);e.RenderElement=function(t,e){return void 0===e&&(e=""),function(r,n){var o=r.adjustBorder(r.html("mjx-"+t));if(e){var i=r.getOffset(e);if(r.thickness!==l.THICKNESS||i){var a="translate".concat(e,"(").concat(r.em(r.thickness/2-i),")");r.adaptor.setStyle(o,"transform",a)}}r.adaptor.append(r.chtml,o)}};e.Border=function(t){return l.CommonBorder((function(e,r){e.adaptor.setStyle(r,"border-"+t,e.em(e.thickness)+" solid")}))(t)};e.Border2=function(t,e,r){return l.CommonBorder2((function(t,n){var o=t.em(t.thickness)+" solid";t.adaptor.setStyle(n,"border-"+e,o),t.adaptor.setStyle(n,"border-"+r,o)}))(t,e,r)};e.DiagonalStrike=function(t,e){return l.CommonDiagonalStrike((function(t){return function(r,n){var o=r.getBBox(),i=o.w,a=o.h,l=o.d,c=s(r.getArgMod(i,a+l),2),u=c[0],p=c[1],h=e*r.thickness/2,d=r.adjustBorder(r.html(t,{style:{width:r.em(p),transform:"rotate("+r.fixed(-e*u)+"rad) translateY("+h+"em)"}}));r.adaptor.append(r.chtml,d)}}))(t)};e.DiagonalArrow=function(t){return l.CommonDiagonalArrow((function(t,e){t.adaptor.append(t.chtml,e)}))(t)};e.Arrow=function(t){return l.CommonArrow((function(t,e){t.adaptor.append(t.chtml,e)}))(t)}},6797:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.Usage=void 0;var r=function(){function t(){this.used=new Set,this.needsUpdate=[]}return t.prototype.add=function(t){var e=JSON.stringify(t);this.used.has(e)||this.needsUpdate.push(t),this.used.add(e)},t.prototype.has=function(t){return this.used.has(JSON.stringify(t))},t.prototype.clear=function(){this.used.clear(),this.needsUpdate=[]},t.prototype.update=function(){var t=this.needsUpdate;return this.needsUpdate=[],t},t}();e.Usage=r},5355:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),s=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),l=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&a(e,t,r);return s(e,t),e},c=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},u=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLWrapper=e.SPACE=e.FONTSIZE=void 0;var p=l(r(6010)),h=r(7519),d=r(6469);e.FONTSIZE={"70.7%":"s","70%":"s","50%":"ss","60%":"Tn","85%":"sm","120%":"lg","144%":"Lg","173%":"LG","207%":"hg","249%":"HG"},e.SPACE=((o={})[p.em(2/18)]="1",o[p.em(3/18)]="2",o[p.em(4/18)]="3",o[p.em(5/18)]="4",o[p.em(6/18)]="5",o);var f=function(t){function r(){var e=null!==t&&t.apply(this,arguments)||this;return e.chtml=null,e}return i(r,t),r.prototype.toCHTML=function(t){var e,r,n=this.standardCHTMLnode(t);try{for(var o=c(this.childNodes),i=o.next();!i.done;i=o.next()){i.value.toCHTML(n)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}},r.prototype.standardCHTMLnode=function(t){this.markUsed();var e=this.createCHTMLnode(t);return this.handleStyles(),this.handleVariant(),this.handleScale(),this.handleColor(),this.handleSpace(),this.handleAttributes(),this.handlePWidth(),e},r.prototype.markUsed=function(){this.jax.wrapperUsage.add(this.kind)},r.prototype.createCHTMLnode=function(t){var e=this.node.attributes.get("href");return e&&(t=this.adaptor.append(t,this.html("a",{href:e}))),this.chtml=this.adaptor.append(t,this.html("mjx-"+this.node.kind)),this.chtml},r.prototype.handleStyles=function(){if(this.styles){var t=this.styles.cssText;if(t){this.adaptor.setAttribute(this.chtml,"style",t);var e=this.styles.get("font-family");e&&this.adaptor.setStyle(this.chtml,"font-family","MJXZERO, "+e)}}},r.prototype.handleVariant=function(){this.node.isToken&&"-explicitFont"!==this.variant&&this.adaptor.setAttribute(this.chtml,"class",(this.font.getVariant(this.variant)||this.font.getVariant("normal")).classes)},r.prototype.handleScale=function(){this.setScale(this.chtml,this.bbox.rscale)},r.prototype.setScale=function(t,r){var n=Math.abs(r-1)<.001?1:r;if(t&&1!==n){var o=this.percent(n);e.FONTSIZE[o]?this.adaptor.setAttribute(t,"size",e.FONTSIZE[o]):this.adaptor.setStyle(t,"fontSize",o)}return t},r.prototype.handleSpace=function(){var t,r;try{for(var n=c([[this.bbox.L,"space","marginLeft"],[this.bbox.R,"rspace","marginRight"]]),o=n.next();!o.done;o=n.next()){var i=o.value,a=u(i,3),s=a[0],l=a[1],p=a[2];if(s){var h=this.em(s);e.SPACE[h]?this.adaptor.setAttribute(this.chtml,l,e.SPACE[h]):this.adaptor.setStyle(this.chtml,p,h)}}}catch(e){t={error:e}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}},r.prototype.handleColor=function(){var t=this.node.attributes,e=t.getExplicit("mathcolor"),r=t.getExplicit("color"),n=t.getExplicit("mathbackground"),o=t.getExplicit("background");(e||r)&&this.adaptor.setStyle(this.chtml,"color",e||r),(n||o)&&this.adaptor.setStyle(this.chtml,"backgroundColor",n||o)},r.prototype.handleAttributes=function(){var t,e,n,o,i=this.node.attributes,a=i.getAllDefaults(),s=r.skipAttributes;try{for(var l=c(i.getExplicitNames()),u=l.next();!u.done;u=l.next()){var p=u.value;!1!==s[p]&&(p in a||s[p]||this.adaptor.hasAttribute(this.chtml,p))||this.adaptor.setAttribute(this.chtml,p,i.getExplicit(p))}}catch(e){t={error:e}}finally{try{u&&!u.done&&(e=l.return)&&e.call(l)}finally{if(t)throw t.error}}if(i.get("class")){var h=i.get("class").trim().split(/ +/);try{for(var d=c(h),f=d.next();!f.done;f=d.next()){var m=f.value;this.adaptor.addClass(this.chtml,m)}}catch(t){n={error:t}}finally{try{f&&!f.done&&(o=d.return)&&o.call(d)}finally{if(n)throw n.error}}}},r.prototype.handlePWidth=function(){this.bbox.pwidth&&(this.bbox.pwidth===d.BBox.fullWidth?this.adaptor.setAttribute(this.chtml,"width","full"):this.adaptor.setStyle(this.chtml,"width",this.bbox.pwidth))},r.prototype.setIndent=function(t,e,r){var n=this.adaptor;if("center"===e||"left"===e){var o=this.getBBox().L;n.setStyle(t,"margin-left",this.em(r+o))}if("center"===e||"right"===e){var i=this.getBBox().R;n.setStyle(t,"margin-right",this.em(-r+i))}},r.prototype.drawBBox=function(){var t=this.getBBox(),e=t.w,r=t.h,n=t.d,o=t.R,i=this.html("mjx-box",{style:{opacity:.25,"margin-left":this.em(-e-o)}},[this.html("mjx-box",{style:{height:this.em(r),width:this.em(e),"background-color":"red"}}),this.html("mjx-box",{style:{height:this.em(n),width:this.em(e),"margin-left":this.em(-e),"vertical-align":this.em(-n),"background-color":"green"}})]),a=this.chtml||this.parent.chtml,s=this.adaptor.getAttribute(a,"size");s&&this.adaptor.setAttribute(i,"size",s);var l=this.adaptor.getStyle(a,"fontSize");l&&this.adaptor.setStyle(i,"fontSize",l),this.adaptor.append(this.adaptor.parent(a),i),this.adaptor.setStyle(a,"backgroundColor","#FFEE00")},r.prototype.html=function(t,e,r){return void 0===e&&(e={}),void 0===r&&(r=[]),this.jax.html(t,e,r)},r.prototype.text=function(t){return this.jax.text(t)},r.prototype.char=function(t){return this.font.charSelector(t).substr(1)},r.kind="unknown",r.autoStyle=!0,r}(h.CommonWrapper);e.CHTMLWrapper=f},9261:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLWrapperFactory=void 0;var i=r(4420),a=r(9086),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.defaultNodes=a.CHTMLWrappers,e}(i.CommonWrapperFactory);e.CHTMLWrapperFactory=s},9086:function(t,e,r){var n;Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLWrappers=void 0;var o=r(5355),i=r(804),a=r(1653),s=r(6287),l=r(6460),c=r(4597),u=r(1259),p=r(2970),h=r(5964),d=r(8147),f=r(4798),m=r(2275),y=r(9063),g=r(5610),b=r(8776),v=r(4300),_=r(6590),S=r(6781),x=r(8002),M=r(3571),O=r(7056),E=r(8102),A=r(6911),C=r(421),w=r(95),T=r(1148);e.CHTMLWrappers=((n={})[i.CHTMLmath.kind]=i.CHTMLmath,n[f.CHTMLmrow.kind]=f.CHTMLmrow,n[f.CHTMLinferredMrow.kind]=f.CHTMLinferredMrow,n[a.CHTMLmi.kind]=a.CHTMLmi,n[s.CHTMLmo.kind]=s.CHTMLmo,n[l.CHTMLmn.kind]=l.CHTMLmn,n[c.CHTMLms.kind]=c.CHTMLms,n[u.CHTMLmtext.kind]=u.CHTMLmtext,n[p.CHTMLmspace.kind]=p.CHTMLmspace,n[h.CHTMLmpadded.kind]=h.CHTMLmpadded,n[d.CHTMLmenclose.kind]=d.CHTMLmenclose,n[y.CHTMLmfrac.kind]=y.CHTMLmfrac,n[g.CHTMLmsqrt.kind]=g.CHTMLmsqrt,n[b.CHTMLmroot.kind]=b.CHTMLmroot,n[v.CHTMLmsub.kind]=v.CHTMLmsub,n[v.CHTMLmsup.kind]=v.CHTMLmsup,n[v.CHTMLmsubsup.kind]=v.CHTMLmsubsup,n[_.CHTMLmunder.kind]=_.CHTMLmunder,n[_.CHTMLmover.kind]=_.CHTMLmover,n[_.CHTMLmunderover.kind]=_.CHTMLmunderover,n[S.CHTMLmmultiscripts.kind]=S.CHTMLmmultiscripts,n[m.CHTMLmfenced.kind]=m.CHTMLmfenced,n[x.CHTMLmtable.kind]=x.CHTMLmtable,n[M.CHTMLmtr.kind]=M.CHTMLmtr,n[M.CHTMLmlabeledtr.kind]=M.CHTMLmlabeledtr,n[O.CHTMLmtd.kind]=O.CHTMLmtd,n[E.CHTMLmaction.kind]=E.CHTMLmaction,n[A.CHTMLmglyph.kind]=A.CHTMLmglyph,n[C.CHTMLsemantics.kind]=C.CHTMLsemantics,n[C.CHTMLannotation.kind]=C.CHTMLannotation,n[C.CHTMLannotationXML.kind]=C.CHTMLannotationXML,n[C.CHTMLxml.kind]=C.CHTMLxml,n[w.CHTMLTeXAtom.kind]=w.CHTMLTeXAtom,n[T.CHTMLTextNode.kind]=T.CHTMLTextNode,n[o.CHTMLWrapper.kind]=o.CHTMLWrapper,n)},95:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLTeXAtom=void 0;var i=r(5355),a=r(9800),s=r(3948),l=r(9007),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.toCHTML=function(e){if(t.prototype.toCHTML.call(this,e),this.adaptor.setAttribute(this.chtml,"texclass",l.TEXCLASSNAMES[this.node.texClass]),this.node.texClass===l.TEXCLASS.VCENTER){var r=this.childNodes[0].getBBox(),n=r.h,o=(n+r.d)/2+this.font.params.axis_height-n;this.adaptor.setStyle(this.chtml,"verticalAlign",this.em(o))}},e.kind=s.TeXAtom.prototype.kind,e}((0,a.CommonTeXAtomMixin)(i.CHTMLWrapper));e.CHTMLTeXAtom=c},1148:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLTextNode=void 0;var a=r(9007),s=r(5355),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.toCHTML=function(t){var e,r;this.markUsed();var n=this.adaptor,o=this.parent.variant,a=this.node.getText();if(0!==a.length)if("-explicitFont"===o)n.append(t,this.jax.unknownText(a,o,this.getBBox().w));else{var s=this.remappedText(a,o);try{for(var l=i(s),c=l.next();!c.done;c=l.next()){var u=c.value,p=this.getVariantChar(o,u)[3],h=p.f?" TEX-"+p.f:"",d=p.unknown?this.jax.unknownText(String.fromCodePoint(u),o):this.html("mjx-c",{class:this.char(u)+h});n.append(t,d),!p.unknown&&this.font.charUsage.add([o,u])}}catch(t){e={error:t}}finally{try{c&&!c.done&&(r=l.return)&&r.call(l)}finally{if(e)throw e.error}}}},e.kind=a.TextNode.prototype.kind,e.autoStyle=!1,e.styles={"mjx-c":{display:"inline-block"},"mjx-utext":{display:"inline-block",padding:".75em 0 .2em 0"}},e}((0,r(1160).CommonTextNodeMixin)(s.CHTMLWrapper));e.CHTMLTextNode=l},8102:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmaction=void 0;var i=r(5355),a=r(1956),s=r(1956),l=r(9145),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.toCHTML=function(t){var e=this.standardCHTMLnode(t);this.selected.toCHTML(e),this.action(this,this.data)},e.prototype.setEventHandler=function(t,e){this.chtml.addEventListener(t,e)},e.kind=l.MmlMaction.prototype.kind,e.styles={"mjx-maction":{position:"relative"},"mjx-maction > mjx-tool":{display:"none",position:"absolute",bottom:0,right:0,width:0,height:0,"z-index":500},"mjx-tool > mjx-tip":{display:"inline-block",padding:".2em",border:"1px solid #888","font-size":"70%","background-color":"#F8F8F8",color:"black","box-shadow":"2px 2px 5px #AAAAAA"},"mjx-maction[toggle]":{cursor:"pointer"},"mjx-status":{display:"block",position:"fixed",left:"1em",bottom:"1em","min-width":"25%",padding:".2em .4em",border:"1px solid #888","font-size":"90%","background-color":"#F8F8F8",color:"black"}},e.actions=new Map([["toggle",[function(t,e){t.adaptor.setAttribute(t.chtml,"toggle",t.node.attributes.get("selection"));var r=t.factory.jax.math,n=t.factory.jax.document,o=t.node;t.setEventHandler("click",(function(t){r.end.node||(r.start.node=r.end.node=r.typesetRoot,r.start.n=r.end.n=0),o.nextToggleSelection(),r.rerender(n),t.stopPropagation()}))},{}]],["tooltip",[function(t,e){var r=t.childNodes[1];if(r)if(r.node.isKind("mtext")){var n=r.node.getText();t.adaptor.setAttribute(t.chtml,"title",n)}else{var o=t.adaptor,i=o.append(t.chtml,t.html("mjx-tool",{style:{bottom:t.em(-t.dy),right:t.em(-t.dx)}},[t.html("mjx-tip")]));r.toCHTML(o.firstChild(i)),t.setEventHandler("mouseover",(function(r){e.stopTimers(t,e);var n=setTimeout((function(){return o.setStyle(i,"display","block")}),e.postDelay);e.hoverTimer.set(t,n),r.stopPropagation()})),t.setEventHandler("mouseout",(function(r){e.stopTimers(t,e);var n=setTimeout((function(){return o.setStyle(i,"display","")}),e.clearDelay);e.clearTimer.set(t,n),r.stopPropagation()}))}},s.TooltipData]],["statusline",[function(t,e){var r=t.childNodes[1];if(r&&r.node.isKind("mtext")){var n=t.adaptor,o=r.node.getText();n.setAttribute(t.chtml,"statusline",o),t.setEventHandler("mouseover",(function(r){if(null===e.status){var i=n.body(n.document);e.status=n.append(i,t.html("mjx-status",{},[t.text(o)]))}r.stopPropagation()})),t.setEventHandler("mouseout",(function(t){e.status&&(n.remove(e.status),e.status=null),t.stopPropagation()}))}},{status:null}]]]),e}((0,a.CommonMactionMixin)(i.CHTMLWrapper));e.CHTMLmaction=c},804:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmath=void 0;var a=r(5355),s=r(7490),l=r(3233),c=r(6469),u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.toCHTML=function(e){t.prototype.toCHTML.call(this,e);var r=this.chtml,n=this.adaptor;"block"===this.node.attributes.get("display")?(n.setAttribute(r,"display","true"),n.setAttribute(e,"display","true"),this.handleDisplay(e)):this.handleInline(e),n.addClass(r,"MJX-TEX")},e.prototype.handleDisplay=function(t){var e=this.adaptor,r=i(this.getAlignShift(),2),n=r[0],o=r[1];if("center"!==n&&e.setAttribute(t,"justify",n),this.bbox.pwidth===c.BBox.fullWidth){if(e.setAttribute(t,"width","full"),this.jax.table){var a=this.jax.table.getOuterBBox(),s=a.L,l=a.w,u=a.R;"right"===n?u=Math.max(u||-o,-o):"left"===n?s=Math.max(s||o,o):"center"===n&&(l+=2*Math.abs(o));var p=this.em(Math.max(0,s+l+u));e.setStyle(t,"min-width",p),e.setStyle(this.jax.table.chtml,"min-width",p)}}else this.setIndent(this.chtml,n,o)},e.prototype.handleInline=function(t){var e=this.adaptor,r=e.getStyle(this.chtml,"margin-right");r&&(e.setStyle(this.chtml,"margin-right",""),e.setStyle(t,"margin-right",r),e.setStyle(t,"width","0"))},e.prototype.setChildPWidths=function(e,r,n){return void 0===r&&(r=null),void 0===n&&(n=!0),!!this.parent&&t.prototype.setChildPWidths.call(this,e,r,n)},e.kind=l.MmlMath.prototype.kind,e.styles={"mjx-math":{"line-height":0,"text-align":"left","text-indent":0,"font-style":"normal","font-weight":"normal","font-size":"100%","font-size-adjust":"none","letter-spacing":"normal","border-collapse":"collapse","word-wrap":"normal","word-spacing":"normal","white-space":"nowrap",direction:"ltr",padding:"1px 0"},'mjx-container[jax="CHTML"][display="true"]':{display:"block","text-align":"center",margin:"1em 0"},'mjx-container[jax="CHTML"][display="true"][width="full"]':{display:"flex"},'mjx-container[jax="CHTML"][display="true"] mjx-math':{padding:0},'mjx-container[jax="CHTML"][justify="left"]':{"text-align":"left"},'mjx-container[jax="CHTML"][justify="right"]':{"text-align":"right"}},e}((0,s.CommonMathMixin)(a.CHTMLWrapper));e.CHTMLmath=u},8147:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),a=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),s=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&i(e,t,r);return a(e,t),e},l=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},c=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmenclose=void 0;var u=r(5355),p=r(7313),h=s(r(8270)),d=r(6661),f=r(6010);function m(t,e){return Math.atan2(t,e).toFixed(3).replace(/\.?0+$/,"")}var y=m(h.ARROWDX,h.ARROWY),g=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.toCHTML=function(t){var e,r,n,o,i=this.adaptor,a=this.standardCHTMLnode(t),s=i.append(a,this.html("mjx-box"));this.renderChild?this.renderChild(this,s):this.childNodes[0].toCHTML(s);try{for(var c=l(Object.keys(this.notations)),u=c.next();!u.done;u=c.next()){var p=u.value,d=this.notations[p];!d.renderChild&&d.renderer(this,s)}}catch(t){e={error:t}}finally{try{u&&!u.done&&(r=c.return)&&r.call(c)}finally{if(e)throw e.error}}var f=this.getPadding();try{for(var m=l(h.sideNames),y=m.next();!y.done;y=m.next()){var g=y.value,b=h.sideIndex[g];f[b]>0&&i.setStyle(s,"padding-"+g,this.em(f[b]))}}catch(t){n={error:t}}finally{try{y&&!y.done&&(o=m.return)&&o.call(m)}finally{if(n)throw n.error}}},e.prototype.arrow=function(t,e,r,n,o){void 0===n&&(n=""),void 0===o&&(o=0);var i=this.getBBox().w,a={width:this.em(t)};i!==t&&(a.left=this.em((i-t)/2)),e&&(a.transform="rotate("+this.fixed(e)+"rad)");var s=this.html("mjx-arrow",{style:a},[this.html("mjx-aline"),this.html("mjx-rthead"),this.html("mjx-rbhead")]);return r&&(this.adaptor.append(s,this.html("mjx-lthead")),this.adaptor.append(s,this.html("mjx-lbhead")),this.adaptor.setAttribute(s,"double","true")),this.adjustArrow(s,r),this.moveArrow(s,n,o),s},e.prototype.adjustArrow=function(t,e){var r=this,n=this.thickness,o=this.arrowhead;if(o.x!==h.ARROWX||o.y!==h.ARROWY||o.dx!==h.ARROWDX||n!==h.THICKNESS){var i=c([n*o.x,n*o.y].map((function(t){return r.em(t)})),2),a=i[0],s=i[1],l=m(o.dx,o.y),u=c(this.adaptor.childNodes(t),5),p=u[0],d=u[1],f=u[2],y=u[3],g=u[4];this.adjustHead(d,[s,"0","1px",a],l),this.adjustHead(f,["1px","0",s,a],"-"+l),this.adjustHead(y,[s,a,"1px","0"],"-"+l),this.adjustHead(g,["1px",a,s,"0"],l),this.adjustLine(p,n,o.x,e)}},e.prototype.adjustHead=function(t,e,r){t&&(this.adaptor.setStyle(t,"border-width",e.join(" ")),this.adaptor.setStyle(t,"transform","skewX("+r+"rad)"))},e.prototype.adjustLine=function(t,e,r,n){this.adaptor.setStyle(t,"borderTop",this.em(e)+" solid"),this.adaptor.setStyle(t,"top",this.em(-e/2)),this.adaptor.setStyle(t,"right",this.em(e*(r-1))),n&&this.adaptor.setStyle(t,"left",this.em(e*(r-1)))},e.prototype.moveArrow=function(t,e,r){if(r){var n=this.adaptor.getStyle(t,"transform");this.adaptor.setStyle(t,"transform","translate".concat(e,"(").concat(this.em(-r),")").concat(n?" "+n:""))}},e.prototype.adjustBorder=function(t){return this.thickness!==h.THICKNESS&&this.adaptor.setStyle(t,"borderWidth",this.em(this.thickness)),t},e.prototype.adjustThickness=function(t){return this.thickness!==h.THICKNESS&&this.adaptor.setStyle(t,"strokeWidth",this.fixed(this.thickness)),t},e.prototype.fixed=function(t,e){return void 0===e&&(e=3),Math.abs(t)<6e-4?"0":t.toFixed(e).replace(/\.?0+$/,"")},e.prototype.em=function(e){return t.prototype.em.call(this,e)},e.kind=d.MmlMenclose.prototype.kind,e.styles={"mjx-menclose":{position:"relative"},"mjx-menclose > mjx-dstrike":{display:"inline-block",left:0,top:0,position:"absolute","border-top":h.SOLID,"transform-origin":"top left"},"mjx-menclose > mjx-ustrike":{display:"inline-block",left:0,bottom:0,position:"absolute","border-top":h.SOLID,"transform-origin":"bottom left"},"mjx-menclose > mjx-hstrike":{"border-top":h.SOLID,position:"absolute",left:0,right:0,bottom:"50%",transform:"translateY("+(0,f.em)(h.THICKNESS/2)+")"},"mjx-menclose > mjx-vstrike":{"border-left":h.SOLID,position:"absolute",top:0,bottom:0,right:"50%",transform:"translateX("+(0,f.em)(h.THICKNESS/2)+")"},"mjx-menclose > mjx-rbox":{position:"absolute",top:0,bottom:0,right:0,left:0,border:h.SOLID,"border-radius":(0,f.em)(h.THICKNESS+h.PADDING)},"mjx-menclose > mjx-cbox":{position:"absolute",top:0,bottom:0,right:0,left:0,border:h.SOLID,"border-radius":"50%"},"mjx-menclose > mjx-arrow":{position:"absolute",left:0,bottom:"50%",height:0,width:0},"mjx-menclose > mjx-arrow > *":{display:"block",position:"absolute","transform-origin":"bottom","border-left":(0,f.em)(h.THICKNESS*h.ARROWX)+" solid","border-right":0,"box-sizing":"border-box"},"mjx-menclose > mjx-arrow > mjx-aline":{left:0,top:(0,f.em)(-h.THICKNESS/2),right:(0,f.em)(h.THICKNESS*(h.ARROWX-1)),height:0,"border-top":(0,f.em)(h.THICKNESS)+" solid","border-left":0},"mjx-menclose > mjx-arrow[double] > mjx-aline":{left:(0,f.em)(h.THICKNESS*(h.ARROWX-1)),height:0},"mjx-menclose > mjx-arrow > mjx-rthead":{transform:"skewX("+y+"rad)",right:0,bottom:"-1px","border-bottom":"1px solid transparent","border-top":(0,f.em)(h.THICKNESS*h.ARROWY)+" solid transparent"},"mjx-menclose > mjx-arrow > mjx-rbhead":{transform:"skewX(-"+y+"rad)","transform-origin":"top",right:0,top:"-1px","border-top":"1px solid transparent","border-bottom":(0,f.em)(h.THICKNESS*h.ARROWY)+" solid transparent"},"mjx-menclose > mjx-arrow > mjx-lthead":{transform:"skewX(-"+y+"rad)",left:0,bottom:"-1px","border-left":0,"border-right":(0,f.em)(h.THICKNESS*h.ARROWX)+" solid","border-bottom":"1px solid transparent","border-top":(0,f.em)(h.THICKNESS*h.ARROWY)+" solid transparent"},"mjx-menclose > mjx-arrow > mjx-lbhead":{transform:"skewX("+y+"rad)","transform-origin":"top",left:0,top:"-1px","border-left":0,"border-right":(0,f.em)(h.THICKNESS*h.ARROWX)+" solid","border-top":"1px solid transparent","border-bottom":(0,f.em)(h.THICKNESS*h.ARROWY)+" solid transparent"},"mjx-menclose > dbox":{position:"absolute",top:0,bottom:0,left:(0,f.em)(-1.5*h.PADDING),width:(0,f.em)(3*h.PADDING),border:(0,f.em)(h.THICKNESS)+" solid","border-radius":"50%","clip-path":"inset(0 0 0 "+(0,f.em)(1.5*h.PADDING)+")","box-sizing":"border-box"}},e.notations=new Map([h.Border("top"),h.Border("right"),h.Border("bottom"),h.Border("left"),h.Border2("actuarial","top","right"),h.Border2("madruwb","bottom","right"),h.DiagonalStrike("up",1),h.DiagonalStrike("down",-1),["horizontalstrike",{renderer:h.RenderElement("hstrike","Y"),bbox:function(t){return[0,t.padding,0,t.padding]}}],["verticalstrike",{renderer:h.RenderElement("vstrike","X"),bbox:function(t){return[t.padding,0,t.padding,0]}}],["box",{renderer:function(t,e){t.adaptor.setStyle(e,"border",t.em(t.thickness)+" solid")},bbox:h.fullBBox,border:h.fullBorder,remove:"left right top bottom"}],["roundedbox",{renderer:h.RenderElement("rbox"),bbox:h.fullBBox}],["circle",{renderer:h.RenderElement("cbox"),bbox:h.fullBBox}],["phasorangle",{renderer:function(t,e){var r=t.getBBox(),n=r.h,o=r.d,i=c(t.getArgMod(1.75*t.padding,n+o),2),a=i[0],s=i[1],l=t.thickness*Math.sin(a)*.9;t.adaptor.setStyle(e,"border-bottom",t.em(t.thickness)+" solid");var u=t.adjustBorder(t.html("mjx-ustrike",{style:{width:t.em(s),transform:"translateX("+t.em(l)+") rotate("+t.fixed(-a)+"rad)"}}));t.adaptor.append(t.chtml,u)},bbox:function(t){var e=t.padding/2,r=t.thickness;return[2*e,e,e+r,3*e+r]},border:function(t){return[0,0,t.thickness,0]},remove:"bottom"}],h.Arrow("up"),h.Arrow("down"),h.Arrow("left"),h.Arrow("right"),h.Arrow("updown"),h.Arrow("leftright"),h.DiagonalArrow("updiagonal"),h.DiagonalArrow("northeast"),h.DiagonalArrow("southeast"),h.DiagonalArrow("northwest"),h.DiagonalArrow("southwest"),h.DiagonalArrow("northeastsouthwest"),h.DiagonalArrow("northwestsoutheast"),["longdiv",{renderer:function(t,e){var r=t.adaptor;r.setStyle(e,"border-top",t.em(t.thickness)+" solid");var n=r.append(t.chtml,t.html("dbox")),o=t.thickness,i=t.padding;o!==h.THICKNESS&&r.setStyle(n,"border-width",t.em(o)),i!==h.PADDING&&(r.setStyle(n,"left",t.em(-1.5*i)),r.setStyle(n,"width",t.em(3*i)),r.setStyle(n,"clip-path","inset(0 0 0 "+t.em(1.5*i)+")"))},bbox:function(t){var e=t.padding,r=t.thickness;return[e+r,e,e,2*e+r/2]}}],["radical",{renderer:function(t,e){t.msqrt.toCHTML(e);var r=t.sqrtTRBL();t.adaptor.setStyle(t.msqrt.chtml,"margin",r.map((function(e){return t.em(-e)})).join(" "))},init:function(t){t.msqrt=t.createMsqrt(t.childNodes[0])},bbox:function(t){return t.sqrtTRBL()},renderChild:!0}]]),e}((0,p.CommonMencloseMixin)(u.CHTMLWrapper));e.CHTMLmenclose=g},2275:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmfenced=void 0;var i=r(5355),a=r(7555),s=r(5410),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.toCHTML=function(t){var e=this.standardCHTMLnode(t);this.mrow.toCHTML(e)},e.kind=s.MmlMfenced.prototype.kind,e}((0,a.CommonMfencedMixin)(i.CHTMLWrapper));e.CHTMLmfenced=l},9063:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r *":{"font-size":"2000%"},"mjx-dbox":{display:"block","font-size":"5%"},"mjx-num":{display:"block","text-align":"center"},"mjx-den":{display:"block","text-align":"center"},"mjx-mfrac[bevelled] > mjx-num":{display:"inline-block"},"mjx-mfrac[bevelled] > mjx-den":{display:"inline-block"},'mjx-den[align="right"], mjx-num[align="right"]':{"text-align":"right"},'mjx-den[align="left"], mjx-num[align="left"]':{"text-align":"left"},"mjx-nstrut":{display:"inline-block",height:".054em",width:0,"vertical-align":"-.054em"},'mjx-nstrut[type="d"]':{height:".217em","vertical-align":"-.217em"},"mjx-dstrut":{display:"inline-block",height:".505em",width:0},'mjx-dstrut[type="d"]':{height:".726em"},"mjx-line":{display:"block","box-sizing":"border-box","min-height":"1px",height:".06em","border-top":".06em solid",margin:".06em -.1em",overflow:"hidden"},'mjx-line[type="d"]':{margin:".18em -.1em"}},e}((0,s.CommonMfracMixin)(a.CHTMLWrapper));e.CHTMLmfrac=c},6911:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmglyph=void 0;var i=r(5355),a=r(5636),s=r(3985),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.toCHTML=function(t){var e=this.standardCHTMLnode(t);if(this.charWrapper)this.charWrapper.toCHTML(e);else{var r=this.node.attributes.getList("src","alt"),n=r.src,o=r.alt,i={width:this.em(this.width),height:this.em(this.height)};this.valign&&(i.verticalAlign=this.em(this.valign));var a=this.html("img",{src:n,style:i,alt:o,title:o});this.adaptor.append(e,a)}},e.kind=s.MmlMglyph.prototype.kind,e.styles={"mjx-mglyph > img":{display:"inline-block",border:0,padding:0}},e}((0,a.CommonMglyphMixin)(i.CHTMLWrapper));e.CHTMLmglyph=l},1653:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmi=void 0;var i=r(5355),a=r(5723),s=r(450),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.kind=s.MmlMi.prototype.kind,e}((0,a.CommonMiMixin)(i.CHTMLWrapper));e.CHTMLmi=l},6781:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmmultiscripts=void 0;var a=r(4300),s=r(8009),l=r(6405),c=r(505),u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.toCHTML=function(t){var e=this.standardCHTMLnode(t),r=this.scriptData,n=this.node.getProperty("scriptalign")||"right left",o=i((0,c.split)(n+" "+n),2),a=o[0],s=o[1],l=this.combinePrePost(r.sub,r.psub),u=this.combinePrePost(r.sup,r.psup),p=i(this.getUVQ(l,u),2),h=p[0],d=p[1];if(r.numPrescripts){var f=this.addScripts(h,-d,!0,r.psub,r.psup,this.firstPrescript,r.numPrescripts);"right"!==a&&this.adaptor.setAttribute(f,"script-align",a)}if(this.childNodes[0].toCHTML(e),r.numScripts){f=this.addScripts(h,-d,!1,r.sub,r.sup,1,r.numScripts);"left"!==s&&this.adaptor.setAttribute(f,"script-align",s)}},e.prototype.addScripts=function(t,e,r,n,o,i,a){for(var s=this.adaptor,l=t-o.d+(e-n.h),c=t<0&&0===e?n.h+t:t,u=l>0?{style:{height:this.em(l)}}:{},p=c?{style:{"vertical-align":this.em(c)}}:{},h=this.html("mjx-row"),d=this.html("mjx-row",u),f=this.html("mjx-row"),m="mjx-"+(r?"pre":"")+"scripts",y=i+2*a;i mjx-row > mjx-cell":{"text-align":"right"},'[script-align="left"] > mjx-row > mjx-cell':{"text-align":"left"},'[script-align="center"] > mjx-row > mjx-cell':{"text-align":"center"},'[script-align="right"] > mjx-row > mjx-cell':{"text-align":"right"}},e}((0,s.CommonMmultiscriptsMixin)(a.CHTMLmsubsup));e.CHTMLmmultiscripts=u},6460:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmn=void 0;var i=r(5355),a=r(5023),s=r(3050),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.kind=s.MmlMn.prototype.kind,e}((0,a.CommonMnMixin)(i.CHTMLWrapper));e.CHTMLmn=l},6287:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmo=void 0;var a=r(5355),s=r(7096),l=r(2756),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.toCHTML=function(t){var e,r,n=this.node.attributes,o=n.get("symmetric")&&2!==this.stretch.dir,a=0!==this.stretch.dir;a&&null===this.size&&this.getStretchedVariant([]);var s=this.standardCHTMLnode(t);if(a&&this.size<0)this.stretchHTML(s);else{if(o||n.get("largeop")){var l=this.em(this.getCenterOffset());"0"!==l&&this.adaptor.setStyle(s,"verticalAlign",l)}this.node.getProperty("mathaccent")&&(this.adaptor.setStyle(s,"width","0"),this.adaptor.setStyle(s,"margin-left",this.em(this.getAccentOffset())));try{for(var c=i(this.childNodes),u=c.next();!u.done;u=c.next()){u.value.toCHTML(s)}}catch(t){e={error:t}}finally{try{u&&!u.done&&(r=c.return)&&r.call(c)}finally{if(e)throw e.error}}}},e.prototype.stretchHTML=function(t){var e=this.getText().codePointAt(0);this.font.delimUsage.add(e),this.childNodes[0].markUsed();var r=this.stretch,n=r.stretch,o=[];n[0]&&o.push(this.html("mjx-beg",{},[this.html("mjx-c")])),o.push(this.html("mjx-ext",{},[this.html("mjx-c")])),4===n.length&&o.push(this.html("mjx-mid",{},[this.html("mjx-c")]),this.html("mjx-ext",{},[this.html("mjx-c")])),n[2]&&o.push(this.html("mjx-end",{},[this.html("mjx-c")]));var i={},a=this.bbox,l=a.h,c=a.d,u=a.w;1===r.dir?(o.push(this.html("mjx-mark")),i.height=this.em(l+c),i.verticalAlign=this.em(-c)):i.width=this.em(u);var p=s.DirectionVH[r.dir],h={class:this.char(r.c||e),style:i},d=this.html("mjx-stretchy-"+p,h,o);this.adaptor.append(t,d)},e.kind=l.MmlMo.prototype.kind,e.styles={"mjx-stretchy-h":{display:"inline-table",width:"100%"},"mjx-stretchy-h > *":{display:"table-cell",width:0},"mjx-stretchy-h > * > mjx-c":{display:"inline-block",transform:"scalex(1.0000001)"},"mjx-stretchy-h > * > mjx-c::before":{display:"inline-block",width:"initial"},"mjx-stretchy-h > mjx-ext":{"/* IE */ overflow":"hidden","/* others */ overflow":"clip visible",width:"100%"},"mjx-stretchy-h > mjx-ext > mjx-c::before":{transform:"scalex(500)"},"mjx-stretchy-h > mjx-ext > mjx-c":{width:0},"mjx-stretchy-h > mjx-beg > mjx-c":{"margin-right":"-.1em"},"mjx-stretchy-h > mjx-end > mjx-c":{"margin-left":"-.1em"},"mjx-stretchy-v":{display:"inline-block"},"mjx-stretchy-v > *":{display:"block"},"mjx-stretchy-v > mjx-beg":{height:0},"mjx-stretchy-v > mjx-end > mjx-c":{display:"block"},"mjx-stretchy-v > * > mjx-c":{transform:"scaley(1.0000001)","transform-origin":"left center",overflow:"hidden"},"mjx-stretchy-v > mjx-ext":{display:"block",height:"100%","box-sizing":"border-box",border:"0px solid transparent","/* IE */ overflow":"hidden","/* others */ overflow":"visible clip"},"mjx-stretchy-v > mjx-ext > mjx-c::before":{width:"initial","box-sizing":"border-box"},"mjx-stretchy-v > mjx-ext > mjx-c":{transform:"scaleY(500) translateY(.075em)",overflow:"visible"},"mjx-mark":{display:"inline-block",height:"0px"}},e}((0,s.CommonMoMixin)(a.CHTMLWrapper));e.CHTMLmo=c},5964:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmpadded=void 0;var s=r(5355),l=r(6898),c=r(7238),u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.toCHTML=function(t){var e,r,n=this.standardCHTMLnode(t),o=[],s={},l=i(this.getDimens(),9),c=l[2],u=l[3],p=l[4],h=l[5],d=l[6],f=l[7],m=l[8];if(h&&(s.width=this.em(c+h)),(u||p)&&(s.margin=this.em(u)+" 0 "+this.em(p)),d+m||f){s.position="relative";var y=this.html("mjx-rbox",{style:{left:this.em(d+m),top:this.em(-f),"max-width":s.width}});d+m&&this.childNodes[0].getBBox().pwidth&&(this.adaptor.setAttribute(y,"width","full"),this.adaptor.setStyle(y,"left",this.em(d))),o.push(y)}n=this.adaptor.append(n,this.html("mjx-block",{style:s},o));try{for(var g=a(this.childNodes),b=g.next();!b.done;b=g.next()){b.value.toCHTML(o[0]||n)}}catch(t){e={error:t}}finally{try{b&&!b.done&&(r=g.return)&&r.call(g)}finally{if(e)throw e.error}}},e.kind=c.MmlMpadded.prototype.kind,e.styles={"mjx-mpadded":{display:"inline-block"},"mjx-rbox":{display:"inline-block",position:"relative"}},e}((0,l.CommonMpaddedMixin)(s.CHTMLWrapper));e.CHTMLmpadded=u},8776:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmroot=void 0;var a=r(5610),s=r(6991),l=r(6145),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.addRoot=function(t,e,r,n){e.toCHTML(t);var o=i(this.getRootDimens(r,n),3),a=o[0],s=o[1],l=o[2];this.adaptor.setStyle(t,"verticalAlign",this.em(s)),this.adaptor.setStyle(t,"width",this.em(a)),l&&this.adaptor.setStyle(this.adaptor.firstChild(t),"paddingLeft",this.em(l))},e.kind=l.MmlMroot.prototype.kind,e}((0,s.CommonMrootMixin)(a.CHTMLmsqrt));e.CHTMLmroot=c},4798:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLinferredMrow=e.CHTMLmrow=void 0;var a=r(5355),s=r(8411),l=r(8411),c=r(9878),u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.toCHTML=function(t){var e,r,n=this.node.isInferred?this.chtml=t:this.standardCHTMLnode(t),o=!1;try{for(var a=i(this.childNodes),s=a.next();!s.done;s=a.next()){var l=s.value;l.toCHTML(n),l.bbox.w<0&&(o=!0)}}catch(t){e={error:t}}finally{try{s&&!s.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}if(o){var c=this.getBBox().w;c&&(this.adaptor.setStyle(n,"width",this.em(Math.max(0,c))),c<0&&this.adaptor.setStyle(n,"marginRight",this.em(c)))}},e.kind=c.MmlMrow.prototype.kind,e}((0,s.CommonMrowMixin)(a.CHTMLWrapper));e.CHTMLmrow=u;var p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.kind=c.MmlInferredMrow.prototype.kind,e}((0,l.CommonInferredMrowMixin)(u));e.CHTMLinferredMrow=p},4597:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLms=void 0;var i=r(5355),a=r(4126),s=r(7265),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.kind=s.MmlMs.prototype.kind,e}((0,a.CommonMsMixin)(i.CHTMLWrapper));e.CHTMLms=l},2970:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmspace=void 0;var i=r(5355),a=r(258),s=r(6030),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.toCHTML=function(t){var e=this.standardCHTMLnode(t),r=this.getBBox(),n=r.w,o=r.h,i=r.d;n<0&&(this.adaptor.setStyle(e,"marginRight",this.em(n)),n=0),n&&this.adaptor.setStyle(e,"width",this.em(n)),(o=Math.max(0,o+i))&&this.adaptor.setStyle(e,"height",this.em(Math.max(0,o))),i&&this.adaptor.setStyle(e,"verticalAlign",this.em(-i))},e.kind=s.MmlMspace.prototype.kind,e}((0,a.CommonMspaceMixin)(i.CHTMLWrapper));e.CHTMLmspace=l},5610:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmsqrt=void 0;var a=r(5355),s=r(4093),l=r(7131),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.toCHTML=function(t){var e,r,n,o,a=this.childNodes[this.surd],s=this.childNodes[this.base],l=a.getBBox(),c=s.getOuterBBox(),u=i(this.getPQ(l),2)[1],p=this.font.params.rule_thickness,h=c.h+u+p,d=this.standardCHTMLnode(t);null!=this.root&&(n=this.adaptor.append(d,this.html("mjx-root")),o=this.childNodes[this.root]);var f=this.adaptor.append(d,this.html("mjx-sqrt",{},[e=this.html("mjx-surd"),r=this.html("mjx-box",{style:{paddingTop:this.em(u)}})]));this.addRoot(n,o,l,h),a.toCHTML(e),s.toCHTML(r),a.size<0&&this.adaptor.addClass(f,"mjx-tall")},e.prototype.addRoot=function(t,e,r,n){},e.kind=l.MmlMsqrt.prototype.kind,e.styles={"mjx-root":{display:"inline-block","white-space":"nowrap"},"mjx-surd":{display:"inline-block","vertical-align":"top"},"mjx-sqrt":{display:"inline-block","padding-top":".07em"},"mjx-sqrt > mjx-box":{"border-top":".07em solid"},"mjx-sqrt.mjx-tall > mjx-box":{"padding-left":".3em","margin-left":"-.3em"}},e}((0,s.CommonMsqrtMixin)(a.CHTMLWrapper));e.CHTMLmsqrt=c},4300:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmsubsup=e.CHTMLmsup=e.CHTMLmsub=void 0;var a=r(8650),s=r(905),l=r(905),c=r(905),u=r(4461),p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.kind=u.MmlMsub.prototype.kind,e}((0,s.CommonMsubMixin)(a.CHTMLscriptbase));e.CHTMLmsub=p;var h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.kind=u.MmlMsup.prototype.kind,e}((0,l.CommonMsupMixin)(a.CHTMLscriptbase));e.CHTMLmsup=h;var d=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.toCHTML=function(t){var e=this.adaptor,r=this.standardCHTMLnode(t),n=i([this.baseChild,this.supChild,this.subChild],3),o=n[0],a=n[1],s=n[2],l=i(this.getUVQ(),3),c=l[1],u=l[2],p={"vertical-align":this.em(c)};o.toCHTML(r);var h=e.append(r,this.html("mjx-script",{style:p}));a.toCHTML(h),e.append(h,this.html("mjx-spacer",{style:{"margin-top":this.em(u)}})),s.toCHTML(h);var d=this.getAdjustedIc();d&&e.setStyle(a.chtml,"marginLeft",this.em(d/a.bbox.rscale)),this.baseRemoveIc&&e.setStyle(h,"marginLeft",this.em(-this.baseIc))},e.kind=u.MmlMsubsup.prototype.kind,e.styles={"mjx-script":{display:"inline-block","padding-right":".05em","padding-left":".033em"},"mjx-script > mjx-spacer":{display:"block"}},e}((0,c.CommonMsubsupMixin)(a.CHTMLscriptbase));e.CHTMLmsubsup=d},8002:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmtable=void 0;var s=r(5355),l=r(6237),c=r(1349),u=r(505),p=function(t){function e(e,r,n){void 0===n&&(n=null);var o=t.call(this,e,r,n)||this;return o.itable=o.html("mjx-itable"),o.labels=o.html("mjx-itable"),o}return o(e,t),e.prototype.getAlignShift=function(){var e=t.prototype.getAlignShift.call(this);return this.isTop||(e[1]=0),e},e.prototype.toCHTML=function(t){var e,r,n=this.standardCHTMLnode(t);this.adaptor.append(n,this.html("mjx-table",{},[this.itable]));try{for(var o=i(this.childNodes),a=o.next();!a.done;a=o.next()){a.value.toCHTML(this.itable)}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}this.padRows(),this.handleColumnSpacing(),this.handleColumnLines(),this.handleColumnWidths(),this.handleRowSpacing(),this.handleRowLines(),this.handleRowHeights(),this.handleFrame(),this.handleWidth(),this.handleLabels(),this.handleAlign(),this.handleJustify(),this.shiftColor()},e.prototype.shiftColor=function(){var t=this.adaptor,e=t.getStyle(this.chtml,"backgroundColor");e&&(t.setStyle(this.chtml,"backgroundColor",""),t.setStyle(this.itable,"backgroundColor",e))},e.prototype.padRows=function(){var t,e,r=this.adaptor;try{for(var n=i(r.childNodes(this.itable)),o=n.next();!o.done;o=n.next())for(var a=o.value;r.childNodes(a).length1&&"0.4em"!==m||s&&1===p)&&this.adaptor.setStyle(g,"paddingLeft",m),(p1&&"0.215em"!==h||s&&1===l)&&this.adaptor.setStyle(y.chtml,"paddingTop",h),(l mjx-itable":{"vertical-align":"middle","text-align":"left","box-sizing":"border-box"},"mjx-labels > mjx-itable":{position:"absolute",top:0},'mjx-mtable[justify="left"]':{"text-align":"left"},'mjx-mtable[justify="right"]':{"text-align":"right"},'mjx-mtable[justify="left"][side="left"]':{"padding-right":"0 ! important"},'mjx-mtable[justify="left"][side="right"]':{"padding-left":"0 ! important"},'mjx-mtable[justify="right"][side="left"]':{"padding-right":"0 ! important"},'mjx-mtable[justify="right"][side="right"]':{"padding-left":"0 ! important"},"mjx-mtable[align]":{"vertical-align":"baseline"},'mjx-mtable[align="top"] > mjx-table':{"vertical-align":"top"},'mjx-mtable[align="bottom"] > mjx-table':{"vertical-align":"bottom"},'mjx-mtable[side="right"] mjx-labels':{"min-width":"100%"}},e}((0,l.CommonMtableMixin)(s.CHTMLWrapper));e.CHTMLmtable=p},7056:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmtd=void 0;var i=r(5355),a=r(5164),s=r(4359),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.toCHTML=function(e){t.prototype.toCHTML.call(this,e);var r=this.node.attributes.get("rowalign"),n=this.node.attributes.get("columnalign");r!==this.parent.node.attributes.get("rowalign")&&this.adaptor.setAttribute(this.chtml,"rowalign",r),"center"===n||"mlabeledtr"===this.parent.kind&&this===this.parent.childNodes[0]&&n===this.parent.parent.node.attributes.get("side")||this.adaptor.setStyle(this.chtml,"textAlign",n),this.parent.parent.node.getProperty("useHeight")&&this.adaptor.append(this.chtml,this.html("mjx-tstrut"))},e.kind=s.MmlMtd.prototype.kind,e.styles={"mjx-mtd":{display:"table-cell","text-align":"center",padding:".215em .4em"},"mjx-mtd:first-child":{"padding-left":0},"mjx-mtd:last-child":{"padding-right":0},"mjx-mtable > * > mjx-itable > *:first-child > mjx-mtd":{"padding-top":0},"mjx-mtable > * > mjx-itable > *:last-child > mjx-mtd":{"padding-bottom":0},"mjx-tstrut":{display:"inline-block",height:"1em","vertical-align":"-.25em"},'mjx-labels[align="left"] > mjx-mtr > mjx-mtd':{"text-align":"left"},'mjx-labels[align="right"] > mjx-mtr > mjx-mtd':{"text-align":"right"},"mjx-mtd[extra]":{padding:0},'mjx-mtd[rowalign="top"]':{"vertical-align":"top"},'mjx-mtd[rowalign="center"]':{"vertical-align":"middle"},'mjx-mtd[rowalign="bottom"]':{"vertical-align":"bottom"},'mjx-mtd[rowalign="baseline"]':{"vertical-align":"baseline"},'mjx-mtd[rowalign="axis"]':{"vertical-align":".25em"}},e}((0,a.CommonMtdMixin)(i.CHTMLWrapper));e.CHTMLmtd=l},1259:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmtext=void 0;var i=r(5355),a=r(6319),s=r(4770),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.kind=s.MmlMtext.prototype.kind,e}((0,a.CommonMtextMixin)(i.CHTMLWrapper));e.CHTMLmtext=l},3571:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmlabeledtr=e.CHTMLmtr=void 0;var i=r(5355),a=r(5766),s=r(5766),l=r(5022),c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.toCHTML=function(e){t.prototype.toCHTML.call(this,e);var r=this.node.attributes.get("rowalign");"baseline"!==r&&this.adaptor.setAttribute(this.chtml,"rowalign",r)},e.kind=l.MmlMtr.prototype.kind,e.styles={"mjx-mtr":{display:"table-row"},'mjx-mtr[rowalign="top"] > mjx-mtd':{"vertical-align":"top"},'mjx-mtr[rowalign="center"] > mjx-mtd':{"vertical-align":"middle"},'mjx-mtr[rowalign="bottom"] > mjx-mtd':{"vertical-align":"bottom"},'mjx-mtr[rowalign="baseline"] > mjx-mtd':{"vertical-align":"baseline"},'mjx-mtr[rowalign="axis"] > mjx-mtd':{"vertical-align":".25em"}},e}((0,a.CommonMtrMixin)(i.CHTMLWrapper));e.CHTMLmtr=c;var u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.toCHTML=function(e){t.prototype.toCHTML.call(this,e);var r=this.adaptor.firstChild(this.chtml);if(r){this.adaptor.remove(r);var n=this.node.attributes.get("rowalign"),o="baseline"!==n&&"axis"!==n?{rowalign:n}:{},i=this.html("mjx-mtr",o,[r]);this.adaptor.append(this.parent.labels,i)}},e.prototype.markUsed=function(){t.prototype.markUsed.call(this),this.jax.wrapperUsage.add(c.kind)},e.kind=l.MmlMlabeledtr.prototype.kind,e.styles={"mjx-mlabeledtr":{display:"table-row"},'mjx-mlabeledtr[rowalign="top"] > mjx-mtd':{"vertical-align":"top"},'mjx-mlabeledtr[rowalign="center"] > mjx-mtd':{"vertical-align":"middle"},'mjx-mlabeledtr[rowalign="bottom"] > mjx-mtd':{"vertical-align":"bottom"},'mjx-mlabeledtr[rowalign="baseline"] > mjx-mtd':{"vertical-align":"baseline"},'mjx-mlabeledtr[rowalign="axis"] > mjx-mtd':{"vertical-align":".25em"}},e}((0,s.CommonMlabeledtrMixin)(c));e.CHTMLmlabeledtr=u},6590:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLmunderover=e.CHTMLmover=e.CHTMLmunder=void 0;var i=r(4300),a=r(1971),s=r(1971),l=r(1971),c=r(5184),u=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.toCHTML=function(e){if(this.hasMovableLimits())return t.prototype.toCHTML.call(this,e),void this.adaptor.setAttribute(this.chtml,"limits","false");this.chtml=this.standardCHTMLnode(e);var r=this.adaptor.append(this.adaptor.append(this.chtml,this.html("mjx-row")),this.html("mjx-base")),n=this.adaptor.append(this.adaptor.append(this.chtml,this.html("mjx-row")),this.html("mjx-under"));this.baseChild.toCHTML(r),this.scriptChild.toCHTML(n);var o=this.baseChild.getOuterBBox(),i=this.scriptChild.getOuterBBox(),a=this.getUnderKV(o,i)[0],s=this.isLineBelow?0:this.getDelta(!0);this.adaptor.setStyle(n,"paddingTop",this.em(a)),this.setDeltaW([r,n],this.getDeltaW([o,i],[0,-s])),this.adjustUnderDepth(n,i)},e.kind=c.MmlMunder.prototype.kind,e.styles={"mjx-over":{"text-align":"left"},'mjx-munder:not([limits="false"])':{display:"inline-table"},"mjx-munder > mjx-row":{"text-align":"left"},"mjx-under":{"padding-bottom":".1em"}},e}((0,a.CommonMunderMixin)(i.CHTMLmsub));e.CHTMLmunder=u;var p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.toCHTML=function(e){if(this.hasMovableLimits())return t.prototype.toCHTML.call(this,e),void this.adaptor.setAttribute(this.chtml,"limits","false");this.chtml=this.standardCHTMLnode(e);var r=this.adaptor.append(this.chtml,this.html("mjx-over")),n=this.adaptor.append(this.chtml,this.html("mjx-base"));this.scriptChild.toCHTML(r),this.baseChild.toCHTML(n);var o=this.scriptChild.getOuterBBox(),i=this.baseChild.getOuterBBox();this.adjustBaseHeight(n,i);var a=this.getOverKU(i,o)[0],s=this.isLineAbove?0:this.getDelta();this.adaptor.setStyle(r,"paddingBottom",this.em(a)),this.setDeltaW([n,r],this.getDeltaW([i,o],[0,s])),this.adjustOverDepth(r,o)},e.kind=c.MmlMover.prototype.kind,e.styles={'mjx-mover:not([limits="false"])':{"padding-top":".1em"},'mjx-mover:not([limits="false"]) > *':{display:"block","text-align":"left"}},e}((0,s.CommonMoverMixin)(i.CHTMLmsup));e.CHTMLmover=p;var h=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.toCHTML=function(e){if(this.hasMovableLimits())return t.prototype.toCHTML.call(this,e),void this.adaptor.setAttribute(this.chtml,"limits","false");this.chtml=this.standardCHTMLnode(e);var r=this.adaptor.append(this.chtml,this.html("mjx-over")),n=this.adaptor.append(this.adaptor.append(this.chtml,this.html("mjx-box")),this.html("mjx-munder")),o=this.adaptor.append(this.adaptor.append(n,this.html("mjx-row")),this.html("mjx-base")),i=this.adaptor.append(this.adaptor.append(n,this.html("mjx-row")),this.html("mjx-under"));this.overChild.toCHTML(r),this.baseChild.toCHTML(o),this.underChild.toCHTML(i);var a=this.overChild.getOuterBBox(),s=this.baseChild.getOuterBBox(),l=this.underChild.getOuterBBox();this.adjustBaseHeight(o,s);var c=this.getOverKU(s,a)[0],u=this.getUnderKV(s,l)[0],p=this.getDelta();this.adaptor.setStyle(r,"paddingBottom",this.em(c)),this.adaptor.setStyle(i,"paddingTop",this.em(u)),this.setDeltaW([o,i,r],this.getDeltaW([s,l,a],[0,this.isLineBelow?0:-p,this.isLineAbove?0:p])),this.adjustOverDepth(r,a),this.adjustUnderDepth(i,l)},e.prototype.markUsed=function(){t.prototype.markUsed.call(this),this.jax.wrapperUsage.add(i.CHTMLmsubsup.kind)},e.kind=c.MmlMunderover.prototype.kind,e.styles={'mjx-munderover:not([limits="false"])':{"padding-top":".1em"},'mjx-munderover:not([limits="false"]) > *':{display:"block"}},e}((0,l.CommonMunderoverMixin)(i.CHTMLmsubsup));e.CHTMLmunderover=h},8650:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.CHTMLscriptbase=void 0;var s=r(5355),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.toCHTML=function(t){this.chtml=this.standardCHTMLnode(t);var e=i(this.getOffset(),2),r=e[0],n=e[1],o=r-(this.baseRemoveIc?this.baseIc:0),a={"vertical-align":this.em(n)};o&&(a["margin-left"]=this.em(o)),this.baseChild.toCHTML(this.chtml),this.scriptChild.toCHTML(this.adaptor.append(this.chtml,this.html("mjx-script",{style:a})))},e.prototype.setDeltaW=function(t,e){for(var r=0;r=0||this.adaptor.setStyle(t,"marginBottom",this.em(e.d*e.rscale))},e.prototype.adjustUnderDepth=function(t,e){var r,n;if(!(e.d>=0)){var o=this.adaptor,i=this.em(e.d),s=this.html("mjx-box",{style:{"margin-bottom":i,"vertical-align":i}});try{for(var l=a(o.childNodes(o.firstChild(t))),c=l.next();!c.done;c=l.next()){var u=c.value;o.append(s,u)}}catch(t){r={error:t}}finally{try{c&&!c.done&&(n=l.return)&&n.call(l)}finally{if(r)throw r.error}}o.append(o.firstChild(t),s)}},e.prototype.adjustBaseHeight=function(t,e){if(this.node.attributes.get("accent")){var r=this.font.params.x_height*e.scale;e.h\\338"},8816:{c:"\\2264\\338"},8817:{c:"\\2265\\338"},8832:{c:"\\227A\\338"},8833:{c:"\\227B\\338"},8836:{c:"\\2282\\338"},8837:{c:"\\2283\\338"},8840:{c:"\\2286\\338"},8841:{c:"\\2287\\338"},8876:{c:"\\22A2\\338"},8877:{c:"\\22A8\\338"},8930:{c:"\\2291\\338"},8931:{c:"\\2292\\338"},9001:{c:"\\27E8"},9002:{c:"\\27E9"},9653:{c:"\\25B3"},9663:{c:"\\25BD"},10072:{c:"\\2223"},10744:{c:"/",f:"BI"},10799:{c:"\\D7"},12296:{c:"\\27E8"},12297:{c:"\\27E9"}})},4515:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.doubleStruck=void 0;var n=r(6001);Object.defineProperty(e,"doubleStruck",{enumerable:!0,get:function(){return n.doubleStruck}})},6555:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.frakturBold=void 0;var n=r(8042),o=r(3696);e.frakturBold=(0,n.AddCSS)(o.frakturBold,{8260:{c:"/"}})},2183:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.fraktur=void 0;var n=r(8042),o=r(9587);e.fraktur=(0,n.AddCSS)(o.fraktur,{8260:{c:"/"}})},3490:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.italic=void 0;var n=r(8042),o=r(8348);e.italic=(0,n.AddCSS)(o.italic,{47:{f:"I"},989:{c:"\\E008",f:"A"},8213:{c:"\\2014"},8215:{c:"_"},8260:{c:"/",f:"I"},8710:{c:"\\394",f:"I"},10744:{c:"/",f:"I"}})},9056:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.largeop=void 0;var n=r(8042),o=r(1376);e.largeop=(0,n.AddCSS)(o.largeop,{8214:{f:"S1"},8260:{c:"/"},8593:{f:"S1"},8595:{f:"S1"},8657:{f:"S1"},8659:{f:"S1"},8739:{f:"S1"},8741:{f:"S1"},9001:{c:"\\27E8"},9002:{c:"\\27E9"},9168:{f:"S1"},10072:{c:"\\2223",f:"S1"},10764:{c:"\\222C\\222C"},12296:{c:"\\27E8"},12297:{c:"\\27E9"}})},3019:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.monospace=void 0;var n=r(8042),o=r(1439);e.monospace=(0,n.AddCSS)(o.monospace,{697:{c:"\\2032"},913:{c:"A"},914:{c:"B"},917:{c:"E"},918:{c:"Z"},919:{c:"H"},921:{c:"I"},922:{c:"K"},924:{c:"M"},925:{c:"N"},927:{c:"O"},929:{c:"P"},932:{c:"T"},935:{c:"X"},8215:{c:"_"},8243:{c:"\\2032\\2032"},8244:{c:"\\2032\\2032\\2032"},8260:{c:"/"},8279:{c:"\\2032\\2032\\2032\\2032"},8710:{c:"\\394"}})},2713:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.normal=void 0;var n=r(8042),o=r(331);e.normal=(0,n.AddCSS)(o.normal,{163:{f:"MI"},165:{f:"A"},174:{f:"A"},183:{c:"\\22C5"},240:{f:"A"},697:{c:"\\2032"},913:{c:"A"},914:{c:"B"},917:{c:"E"},918:{c:"Z"},919:{c:"H"},921:{c:"I"},922:{c:"K"},924:{c:"M"},925:{c:"N"},927:{c:"O"},929:{c:"P"},932:{c:"T"},935:{c:"X"},8192:{c:""},8193:{c:""},8194:{c:""},8195:{c:""},8196:{c:""},8197:{c:""},8198:{c:""},8201:{c:""},8202:{c:""},8203:{c:""},8204:{c:""},8213:{c:"\\2014"},8214:{c:"\\2225"},8215:{c:"_"},8226:{c:"\\2219"},8243:{c:"\\2032\\2032"},8244:{c:"\\2032\\2032\\2032"},8245:{f:"A"},8246:{c:"\\2035\\2035",f:"A"},8247:{c:"\\2035\\2035\\2035",f:"A"},8254:{c:"\\2C9"},8260:{c:"/"},8279:{c:"\\2032\\2032\\2032\\2032"},8288:{c:""},8289:{c:""},8290:{c:""},8291:{c:""},8292:{c:""},8407:{c:"\\2192",f:"V"},8450:{c:"C",f:"A"},8459:{c:"H",f:"SC"},8460:{c:"H",f:"FR"},8461:{c:"H",f:"A"},8462:{c:"h",f:"I"},8463:{f:"A"},8464:{c:"I",f:"SC"},8465:{c:"I",f:"FR"},8466:{c:"L",f:"SC"},8469:{c:"N",f:"A"},8473:{c:"P",f:"A"},8474:{c:"Q",f:"A"},8475:{c:"R",f:"SC"},8476:{c:"R",f:"FR"},8477:{c:"R",f:"A"},8484:{c:"Z",f:"A"},8486:{c:"\\3A9"},8487:{f:"A"},8488:{c:"Z",f:"FR"},8492:{c:"B",f:"SC"},8493:{c:"C",f:"FR"},8496:{c:"E",f:"SC"},8497:{c:"F",f:"SC"},8498:{f:"A"},8499:{c:"M",f:"SC"},8502:{f:"A"},8503:{f:"A"},8504:{f:"A"},8513:{f:"A"},8602:{f:"A"},8603:{f:"A"},8606:{f:"A"},8608:{f:"A"},8610:{f:"A"},8611:{f:"A"},8619:{f:"A"},8620:{f:"A"},8621:{f:"A"},8622:{f:"A"},8624:{f:"A"},8625:{f:"A"},8630:{f:"A"},8631:{f:"A"},8634:{f:"A"},8635:{f:"A"},8638:{f:"A"},8639:{f:"A"},8642:{f:"A"},8643:{f:"A"},8644:{f:"A"},8646:{f:"A"},8647:{f:"A"},8648:{f:"A"},8649:{f:"A"},8650:{f:"A"},8651:{f:"A"},8653:{f:"A"},8654:{f:"A"},8655:{f:"A"},8666:{f:"A"},8667:{f:"A"},8669:{f:"A"},8672:{f:"A"},8674:{f:"A"},8705:{f:"A"},8708:{c:"\\2203\\338"},8710:{c:"\\394"},8716:{c:"\\220B\\338"},8717:{f:"A"},8719:{f:"S1"},8720:{f:"S1"},8721:{f:"S1"},8724:{f:"A"},8737:{f:"A"},8738:{f:"A"},8740:{f:"A"},8742:{f:"A"},8748:{f:"S1"},8749:{f:"S1"},8750:{f:"S1"},8756:{f:"A"},8757:{f:"A"},8765:{f:"A"},8769:{f:"A"},8770:{f:"A"},8772:{c:"\\2243\\338"},8775:{c:"\\2246",f:"A"},8777:{c:"\\2248\\338"},8778:{f:"A"},8782:{f:"A"},8783:{f:"A"},8785:{f:"A"},8786:{f:"A"},8787:{f:"A"},8790:{f:"A"},8791:{f:"A"},8796:{f:"A"},8802:{c:"\\2261\\338"},8806:{f:"A"},8807:{f:"A"},8808:{f:"A"},8809:{f:"A"},8812:{f:"A"},8813:{c:"\\224D\\338"},8814:{f:"A"},8815:{f:"A"},8816:{f:"A"},8817:{f:"A"},8818:{f:"A"},8819:{f:"A"},8820:{c:"\\2272\\338"},8821:{c:"\\2273\\338"},8822:{f:"A"},8823:{f:"A"},8824:{c:"\\2276\\338"},8825:{c:"\\2277\\338"},8828:{f:"A"},8829:{f:"A"},8830:{f:"A"},8831:{f:"A"},8832:{f:"A"},8833:{f:"A"},8836:{c:"\\2282\\338"},8837:{c:"\\2283\\338"},8840:{f:"A"},8841:{f:"A"},8842:{f:"A"},8843:{f:"A"},8847:{f:"A"},8848:{f:"A"},8858:{f:"A"},8859:{f:"A"},8861:{f:"A"},8862:{f:"A"},8863:{f:"A"},8864:{f:"A"},8865:{f:"A"},8873:{f:"A"},8874:{f:"A"},8876:{f:"A"},8877:{f:"A"},8878:{f:"A"},8879:{f:"A"},8882:{f:"A"},8883:{f:"A"},8884:{f:"A"},8885:{f:"A"},8888:{f:"A"},8890:{f:"A"},8891:{f:"A"},8892:{f:"A"},8896:{f:"S1"},8897:{f:"S1"},8898:{f:"S1"},8899:{f:"S1"},8903:{f:"A"},8905:{f:"A"},8906:{f:"A"},8907:{f:"A"},8908:{f:"A"},8909:{f:"A"},8910:{f:"A"},8911:{f:"A"},8912:{f:"A"},8913:{f:"A"},8914:{f:"A"},8915:{f:"A"},8916:{f:"A"},8918:{f:"A"},8919:{f:"A"},8920:{f:"A"},8921:{f:"A"},8922:{f:"A"},8923:{f:"A"},8926:{f:"A"},8927:{f:"A"},8928:{f:"A"},8929:{f:"A"},8930:{c:"\\2291\\338"},8931:{c:"\\2292\\338"},8934:{f:"A"},8935:{f:"A"},8936:{f:"A"},8937:{f:"A"},8938:{f:"A"},8939:{f:"A"},8940:{f:"A"},8941:{f:"A"},8965:{c:"\\22BC",f:"A"},8966:{c:"\\2A5E",f:"A"},8988:{c:"\\250C",f:"A"},8989:{c:"\\2510",f:"A"},8990:{c:"\\2514",f:"A"},8991:{c:"\\2518",f:"A"},9001:{c:"\\27E8"},9002:{c:"\\27E9"},9168:{f:"S1"},9416:{f:"A"},9484:{f:"A"},9488:{f:"A"},9492:{f:"A"},9496:{f:"A"},9585:{f:"A"},9586:{f:"A"},9632:{f:"A"},9633:{f:"A"},9642:{c:"\\25A0",f:"A"},9650:{f:"A"},9652:{c:"\\25B2",f:"A"},9653:{c:"\\25B3"},9654:{f:"A"},9656:{c:"\\25B6",f:"A"},9660:{f:"A"},9662:{c:"\\25BC",f:"A"},9663:{c:"\\25BD"},9664:{f:"A"},9666:{c:"\\25C0",f:"A"},9674:{f:"A"},9723:{c:"\\25A1",f:"A"},9724:{c:"\\25A0",f:"A"},9733:{f:"A"},10003:{f:"A"},10016:{f:"A"},10072:{c:"\\2223"},10731:{f:"A"},10744:{c:"/",f:"I"},10752:{f:"S1"},10753:{f:"S1"},10754:{f:"S1"},10756:{f:"S1"},10758:{f:"S1"},10764:{c:"\\222C\\222C",f:"S1"},10799:{c:"\\D7"},10846:{f:"A"},10877:{f:"A"},10878:{f:"A"},10885:{f:"A"},10886:{f:"A"},10887:{f:"A"},10888:{f:"A"},10889:{f:"A"},10890:{f:"A"},10891:{f:"A"},10892:{f:"A"},10901:{f:"A"},10902:{f:"A"},10933:{f:"A"},10934:{f:"A"},10935:{f:"A"},10936:{f:"A"},10937:{f:"A"},10938:{f:"A"},10949:{f:"A"},10950:{f:"A"},10955:{f:"A"},10956:{f:"A"},12296:{c:"\\27E8"},12297:{c:"\\27E9"},57350:{f:"A"},57351:{f:"A"},57352:{f:"A"},57353:{f:"A"},57356:{f:"A"},57357:{f:"A"},57358:{f:"A"},57359:{f:"A"},57360:{f:"A"},57361:{f:"A"},57366:{f:"A"},57367:{f:"A"},57368:{f:"A"},57369:{f:"A"},57370:{f:"A"},57371:{f:"A"},119808:{c:"A",f:"B"},119809:{c:"B",f:"B"},119810:{c:"C",f:"B"},119811:{c:"D",f:"B"},119812:{c:"E",f:"B"},119813:{c:"F",f:"B"},119814:{c:"G",f:"B"},119815:{c:"H",f:"B"},119816:{c:"I",f:"B"},119817:{c:"J",f:"B"},119818:{c:"K",f:"B"},119819:{c:"L",f:"B"},119820:{c:"M",f:"B"},119821:{c:"N",f:"B"},119822:{c:"O",f:"B"},119823:{c:"P",f:"B"},119824:{c:"Q",f:"B"},119825:{c:"R",f:"B"},119826:{c:"S",f:"B"},119827:{c:"T",f:"B"},119828:{c:"U",f:"B"},119829:{c:"V",f:"B"},119830:{c:"W",f:"B"},119831:{c:"X",f:"B"},119832:{c:"Y",f:"B"},119833:{c:"Z",f:"B"},119834:{c:"a",f:"B"},119835:{c:"b",f:"B"},119836:{c:"c",f:"B"},119837:{c:"d",f:"B"},119838:{c:"e",f:"B"},119839:{c:"f",f:"B"},119840:{c:"g",f:"B"},119841:{c:"h",f:"B"},119842:{c:"i",f:"B"},119843:{c:"j",f:"B"},119844:{c:"k",f:"B"},119845:{c:"l",f:"B"},119846:{c:"m",f:"B"},119847:{c:"n",f:"B"},119848:{c:"o",f:"B"},119849:{c:"p",f:"B"},119850:{c:"q",f:"B"},119851:{c:"r",f:"B"},119852:{c:"s",f:"B"},119853:{c:"t",f:"B"},119854:{c:"u",f:"B"},119855:{c:"v",f:"B"},119856:{c:"w",f:"B"},119857:{c:"x",f:"B"},119858:{c:"y",f:"B"},119859:{c:"z",f:"B"},119860:{c:"A",f:"I"},119861:{c:"B",f:"I"},119862:{c:"C",f:"I"},119863:{c:"D",f:"I"},119864:{c:"E",f:"I"},119865:{c:"F",f:"I"},119866:{c:"G",f:"I"},119867:{c:"H",f:"I"},119868:{c:"I",f:"I"},119869:{c:"J",f:"I"},119870:{c:"K",f:"I"},119871:{c:"L",f:"I"},119872:{c:"M",f:"I"},119873:{c:"N",f:"I"},119874:{c:"O",f:"I"},119875:{c:"P",f:"I"},119876:{c:"Q",f:"I"},119877:{c:"R",f:"I"},119878:{c:"S",f:"I"},119879:{c:"T",f:"I"},119880:{c:"U",f:"I"},119881:{c:"V",f:"I"},119882:{c:"W",f:"I"},119883:{c:"X",f:"I"},119884:{c:"Y",f:"I"},119885:{c:"Z",f:"I"},119886:{c:"a",f:"I"},119887:{c:"b",f:"I"},119888:{c:"c",f:"I"},119889:{c:"d",f:"I"},119890:{c:"e",f:"I"},119891:{c:"f",f:"I"},119892:{c:"g",f:"I"},119894:{c:"i",f:"I"},119895:{c:"j",f:"I"},119896:{c:"k",f:"I"},119897:{c:"l",f:"I"},119898:{c:"m",f:"I"},119899:{c:"n",f:"I"},119900:{c:"o",f:"I"},119901:{c:"p",f:"I"},119902:{c:"q",f:"I"},119903:{c:"r",f:"I"},119904:{c:"s",f:"I"},119905:{c:"t",f:"I"},119906:{c:"u",f:"I"},119907:{c:"v",f:"I"},119908:{c:"w",f:"I"},119909:{c:"x",f:"I"},119910:{c:"y",f:"I"},119911:{c:"z",f:"I"},119912:{c:"A",f:"BI"},119913:{c:"B",f:"BI"},119914:{c:"C",f:"BI"},119915:{c:"D",f:"BI"},119916:{c:"E",f:"BI"},119917:{c:"F",f:"BI"},119918:{c:"G",f:"BI"},119919:{c:"H",f:"BI"},119920:{c:"I",f:"BI"},119921:{c:"J",f:"BI"},119922:{c:"K",f:"BI"},119923:{c:"L",f:"BI"},119924:{c:"M",f:"BI"},119925:{c:"N",f:"BI"},119926:{c:"O",f:"BI"},119927:{c:"P",f:"BI"},119928:{c:"Q",f:"BI"},119929:{c:"R",f:"BI"},119930:{c:"S",f:"BI"},119931:{c:"T",f:"BI"},119932:{c:"U",f:"BI"},119933:{c:"V",f:"BI"},119934:{c:"W",f:"BI"},119935:{c:"X",f:"BI"},119936:{c:"Y",f:"BI"},119937:{c:"Z",f:"BI"},119938:{c:"a",f:"BI"},119939:{c:"b",f:"BI"},119940:{c:"c",f:"BI"},119941:{c:"d",f:"BI"},119942:{c:"e",f:"BI"},119943:{c:"f",f:"BI"},119944:{c:"g",f:"BI"},119945:{c:"h",f:"BI"},119946:{c:"i",f:"BI"},119947:{c:"j",f:"BI"},119948:{c:"k",f:"BI"},119949:{c:"l",f:"BI"},119950:{c:"m",f:"BI"},119951:{c:"n",f:"BI"},119952:{c:"o",f:"BI"},119953:{c:"p",f:"BI"},119954:{c:"q",f:"BI"},119955:{c:"r",f:"BI"},119956:{c:"s",f:"BI"},119957:{c:"t",f:"BI"},119958:{c:"u",f:"BI"},119959:{c:"v",f:"BI"},119960:{c:"w",f:"BI"},119961:{c:"x",f:"BI"},119962:{c:"y",f:"BI"},119963:{c:"z",f:"BI"},119964:{c:"A",f:"SC"},119966:{c:"C",f:"SC"},119967:{c:"D",f:"SC"},119970:{c:"G",f:"SC"},119973:{c:"J",f:"SC"},119974:{c:"K",f:"SC"},119977:{c:"N",f:"SC"},119978:{c:"O",f:"SC"},119979:{c:"P",f:"SC"},119980:{c:"Q",f:"SC"},119982:{c:"S",f:"SC"},119983:{c:"T",f:"SC"},119984:{c:"U",f:"SC"},119985:{c:"V",f:"SC"},119986:{c:"W",f:"SC"},119987:{c:"X",f:"SC"},119988:{c:"Y",f:"SC"},119989:{c:"Z",f:"SC"},120068:{c:"A",f:"FR"},120069:{c:"B",f:"FR"},120071:{c:"D",f:"FR"},120072:{c:"E",f:"FR"},120073:{c:"F",f:"FR"},120074:{c:"G",f:"FR"},120077:{c:"J",f:"FR"},120078:{c:"K",f:"FR"},120079:{c:"L",f:"FR"},120080:{c:"M",f:"FR"},120081:{c:"N",f:"FR"},120082:{c:"O",f:"FR"},120083:{c:"P",f:"FR"},120084:{c:"Q",f:"FR"},120086:{c:"S",f:"FR"},120087:{c:"T",f:"FR"},120088:{c:"U",f:"FR"},120089:{c:"V",f:"FR"},120090:{c:"W",f:"FR"},120091:{c:"X",f:"FR"},120092:{c:"Y",f:"FR"},120094:{c:"a",f:"FR"},120095:{c:"b",f:"FR"},120096:{c:"c",f:"FR"},120097:{c:"d",f:"FR"},120098:{c:"e",f:"FR"},120099:{c:"f",f:"FR"},120100:{c:"g",f:"FR"},120101:{c:"h",f:"FR"},120102:{c:"i",f:"FR"},120103:{c:"j",f:"FR"},120104:{c:"k",f:"FR"},120105:{c:"l",f:"FR"},120106:{c:"m",f:"FR"},120107:{c:"n",f:"FR"},120108:{c:"o",f:"FR"},120109:{c:"p",f:"FR"},120110:{c:"q",f:"FR"},120111:{c:"r",f:"FR"},120112:{c:"s",f:"FR"},120113:{c:"t",f:"FR"},120114:{c:"u",f:"FR"},120115:{c:"v",f:"FR"},120116:{c:"w",f:"FR"},120117:{c:"x",f:"FR"},120118:{c:"y",f:"FR"},120119:{c:"z",f:"FR"},120120:{c:"A",f:"A"},120121:{c:"B",f:"A"},120123:{c:"D",f:"A"},120124:{c:"E",f:"A"},120125:{c:"F",f:"A"},120126:{c:"G",f:"A"},120128:{c:"I",f:"A"},120129:{c:"J",f:"A"},120130:{c:"K",f:"A"},120131:{c:"L",f:"A"},120132:{c:"M",f:"A"},120134:{c:"O",f:"A"},120138:{c:"S",f:"A"},120139:{c:"T",f:"A"},120140:{c:"U",f:"A"},120141:{c:"V",f:"A"},120142:{c:"W",f:"A"},120143:{c:"X",f:"A"},120144:{c:"Y",f:"A"},120172:{c:"A",f:"FRB"},120173:{c:"B",f:"FRB"},120174:{c:"C",f:"FRB"},120175:{c:"D",f:"FRB"},120176:{c:"E",f:"FRB"},120177:{c:"F",f:"FRB"},120178:{c:"G",f:"FRB"},120179:{c:"H",f:"FRB"},120180:{c:"I",f:"FRB"},120181:{c:"J",f:"FRB"},120182:{c:"K",f:"FRB"},120183:{c:"L",f:"FRB"},120184:{c:"M",f:"FRB"},120185:{c:"N",f:"FRB"},120186:{c:"O",f:"FRB"},120187:{c:"P",f:"FRB"},120188:{c:"Q",f:"FRB"},120189:{c:"R",f:"FRB"},120190:{c:"S",f:"FRB"},120191:{c:"T",f:"FRB"},120192:{c:"U",f:"FRB"},120193:{c:"V",f:"FRB"},120194:{c:"W",f:"FRB"},120195:{c:"X",f:"FRB"},120196:{c:"Y",f:"FRB"},120197:{c:"Z",f:"FRB"},120198:{c:"a",f:"FRB"},120199:{c:"b",f:"FRB"},120200:{c:"c",f:"FRB"},120201:{c:"d",f:"FRB"},120202:{c:"e",f:"FRB"},120203:{c:"f",f:"FRB"},120204:{c:"g",f:"FRB"},120205:{c:"h",f:"FRB"},120206:{c:"i",f:"FRB"},120207:{c:"j",f:"FRB"},120208:{c:"k",f:"FRB"},120209:{c:"l",f:"FRB"},120210:{c:"m",f:"FRB"},120211:{c:"n",f:"FRB"},120212:{c:"o",f:"FRB"},120213:{c:"p",f:"FRB"},120214:{c:"q",f:"FRB"},120215:{c:"r",f:"FRB"},120216:{c:"s",f:"FRB"},120217:{c:"t",f:"FRB"},120218:{c:"u",f:"FRB"},120219:{c:"v",f:"FRB"},120220:{c:"w",f:"FRB"},120221:{c:"x",f:"FRB"},120222:{c:"y",f:"FRB"},120223:{c:"z",f:"FRB"},120224:{c:"A",f:"SS"},120225:{c:"B",f:"SS"},120226:{c:"C",f:"SS"},120227:{c:"D",f:"SS"},120228:{c:"E",f:"SS"},120229:{c:"F",f:"SS"},120230:{c:"G",f:"SS"},120231:{c:"H",f:"SS"},120232:{c:"I",f:"SS"},120233:{c:"J",f:"SS"},120234:{c:"K",f:"SS"},120235:{c:"L",f:"SS"},120236:{c:"M",f:"SS"},120237:{c:"N",f:"SS"},120238:{c:"O",f:"SS"},120239:{c:"P",f:"SS"},120240:{c:"Q",f:"SS"},120241:{c:"R",f:"SS"},120242:{c:"S",f:"SS"},120243:{c:"T",f:"SS"},120244:{c:"U",f:"SS"},120245:{c:"V",f:"SS"},120246:{c:"W",f:"SS"},120247:{c:"X",f:"SS"},120248:{c:"Y",f:"SS"},120249:{c:"Z",f:"SS"},120250:{c:"a",f:"SS"},120251:{c:"b",f:"SS"},120252:{c:"c",f:"SS"},120253:{c:"d",f:"SS"},120254:{c:"e",f:"SS"},120255:{c:"f",f:"SS"},120256:{c:"g",f:"SS"},120257:{c:"h",f:"SS"},120258:{c:"i",f:"SS"},120259:{c:"j",f:"SS"},120260:{c:"k",f:"SS"},120261:{c:"l",f:"SS"},120262:{c:"m",f:"SS"},120263:{c:"n",f:"SS"},120264:{c:"o",f:"SS"},120265:{c:"p",f:"SS"},120266:{c:"q",f:"SS"},120267:{c:"r",f:"SS"},120268:{c:"s",f:"SS"},120269:{c:"t",f:"SS"},120270:{c:"u",f:"SS"},120271:{c:"v",f:"SS"},120272:{c:"w",f:"SS"},120273:{c:"x",f:"SS"},120274:{c:"y",f:"SS"},120275:{c:"z",f:"SS"},120276:{c:"A",f:"SSB"},120277:{c:"B",f:"SSB"},120278:{c:"C",f:"SSB"},120279:{c:"D",f:"SSB"},120280:{c:"E",f:"SSB"},120281:{c:"F",f:"SSB"},120282:{c:"G",f:"SSB"},120283:{c:"H",f:"SSB"},120284:{c:"I",f:"SSB"},120285:{c:"J",f:"SSB"},120286:{c:"K",f:"SSB"},120287:{c:"L",f:"SSB"},120288:{c:"M",f:"SSB"},120289:{c:"N",f:"SSB"},120290:{c:"O",f:"SSB"},120291:{c:"P",f:"SSB"},120292:{c:"Q",f:"SSB"},120293:{c:"R",f:"SSB"},120294:{c:"S",f:"SSB"},120295:{c:"T",f:"SSB"},120296:{c:"U",f:"SSB"},120297:{c:"V",f:"SSB"},120298:{c:"W",f:"SSB"},120299:{c:"X",f:"SSB"},120300:{c:"Y",f:"SSB"},120301:{c:"Z",f:"SSB"},120302:{c:"a",f:"SSB"},120303:{c:"b",f:"SSB"},120304:{c:"c",f:"SSB"},120305:{c:"d",f:"SSB"},120306:{c:"e",f:"SSB"},120307:{c:"f",f:"SSB"},120308:{c:"g",f:"SSB"},120309:{c:"h",f:"SSB"},120310:{c:"i",f:"SSB"},120311:{c:"j",f:"SSB"},120312:{c:"k",f:"SSB"},120313:{c:"l",f:"SSB"},120314:{c:"m",f:"SSB"},120315:{c:"n",f:"SSB"},120316:{c:"o",f:"SSB"},120317:{c:"p",f:"SSB"},120318:{c:"q",f:"SSB"},120319:{c:"r",f:"SSB"},120320:{c:"s",f:"SSB"},120321:{c:"t",f:"SSB"},120322:{c:"u",f:"SSB"},120323:{c:"v",f:"SSB"},120324:{c:"w",f:"SSB"},120325:{c:"x",f:"SSB"},120326:{c:"y",f:"SSB"},120327:{c:"z",f:"SSB"},120328:{c:"A",f:"SSI"},120329:{c:"B",f:"SSI"},120330:{c:"C",f:"SSI"},120331:{c:"D",f:"SSI"},120332:{c:"E",f:"SSI"},120333:{c:"F",f:"SSI"},120334:{c:"G",f:"SSI"},120335:{c:"H",f:"SSI"},120336:{c:"I",f:"SSI"},120337:{c:"J",f:"SSI"},120338:{c:"K",f:"SSI"},120339:{c:"L",f:"SSI"},120340:{c:"M",f:"SSI"},120341:{c:"N",f:"SSI"},120342:{c:"O",f:"SSI"},120343:{c:"P",f:"SSI"},120344:{c:"Q",f:"SSI"},120345:{c:"R",f:"SSI"},120346:{c:"S",f:"SSI"},120347:{c:"T",f:"SSI"},120348:{c:"U",f:"SSI"},120349:{c:"V",f:"SSI"},120350:{c:"W",f:"SSI"},120351:{c:"X",f:"SSI"},120352:{c:"Y",f:"SSI"},120353:{c:"Z",f:"SSI"},120354:{c:"a",f:"SSI"},120355:{c:"b",f:"SSI"},120356:{c:"c",f:"SSI"},120357:{c:"d",f:"SSI"},120358:{c:"e",f:"SSI"},120359:{c:"f",f:"SSI"},120360:{c:"g",f:"SSI"},120361:{c:"h",f:"SSI"},120362:{c:"i",f:"SSI"},120363:{c:"j",f:"SSI"},120364:{c:"k",f:"SSI"},120365:{c:"l",f:"SSI"},120366:{c:"m",f:"SSI"},120367:{c:"n",f:"SSI"},120368:{c:"o",f:"SSI"},120369:{c:"p",f:"SSI"},120370:{c:"q",f:"SSI"},120371:{c:"r",f:"SSI"},120372:{c:"s",f:"SSI"},120373:{c:"t",f:"SSI"},120374:{c:"u",f:"SSI"},120375:{c:"v",f:"SSI"},120376:{c:"w",f:"SSI"},120377:{c:"x",f:"SSI"},120378:{c:"y",f:"SSI"},120379:{c:"z",f:"SSI"},120432:{c:"A",f:"T"},120433:{c:"B",f:"T"},120434:{c:"C",f:"T"},120435:{c:"D",f:"T"},120436:{c:"E",f:"T"},120437:{c:"F",f:"T"},120438:{c:"G",f:"T"},120439:{c:"H",f:"T"},120440:{c:"I",f:"T"},120441:{c:"J",f:"T"},120442:{c:"K",f:"T"},120443:{c:"L",f:"T"},120444:{c:"M",f:"T"},120445:{c:"N",f:"T"},120446:{c:"O",f:"T"},120447:{c:"P",f:"T"},120448:{c:"Q",f:"T"},120449:{c:"R",f:"T"},120450:{c:"S",f:"T"},120451:{c:"T",f:"T"},120452:{c:"U",f:"T"},120453:{c:"V",f:"T"},120454:{c:"W",f:"T"},120455:{c:"X",f:"T"},120456:{c:"Y",f:"T"},120457:{c:"Z",f:"T"},120458:{c:"a",f:"T"},120459:{c:"b",f:"T"},120460:{c:"c",f:"T"},120461:{c:"d",f:"T"},120462:{c:"e",f:"T"},120463:{c:"f",f:"T"},120464:{c:"g",f:"T"},120465:{c:"h",f:"T"},120466:{c:"i",f:"T"},120467:{c:"j",f:"T"},120468:{c:"k",f:"T"},120469:{c:"l",f:"T"},120470:{c:"m",f:"T"},120471:{c:"n",f:"T"},120472:{c:"o",f:"T"},120473:{c:"p",f:"T"},120474:{c:"q",f:"T"},120475:{c:"r",f:"T"},120476:{c:"s",f:"T"},120477:{c:"t",f:"T"},120478:{c:"u",f:"T"},120479:{c:"v",f:"T"},120480:{c:"w",f:"T"},120481:{c:"x",f:"T"},120482:{c:"y",f:"T"},120483:{c:"z",f:"T"},120488:{c:"A",f:"B"},120489:{c:"B",f:"B"},120490:{c:"\\393",f:"B"},120491:{c:"\\394",f:"B"},120492:{c:"E",f:"B"},120493:{c:"Z",f:"B"},120494:{c:"H",f:"B"},120495:{c:"\\398",f:"B"},120496:{c:"I",f:"B"},120497:{c:"K",f:"B"},120498:{c:"\\39B",f:"B"},120499:{c:"M",f:"B"},120500:{c:"N",f:"B"},120501:{c:"\\39E",f:"B"},120502:{c:"O",f:"B"},120503:{c:"\\3A0",f:"B"},120504:{c:"P",f:"B"},120506:{c:"\\3A3",f:"B"},120507:{c:"T",f:"B"},120508:{c:"\\3A5",f:"B"},120509:{c:"\\3A6",f:"B"},120510:{c:"X",f:"B"},120511:{c:"\\3A8",f:"B"},120512:{c:"\\3A9",f:"B"},120513:{c:"\\2207",f:"B"},120546:{c:"A",f:"I"},120547:{c:"B",f:"I"},120548:{c:"\\393",f:"I"},120549:{c:"\\394",f:"I"},120550:{c:"E",f:"I"},120551:{c:"Z",f:"I"},120552:{c:"H",f:"I"},120553:{c:"\\398",f:"I"},120554:{c:"I",f:"I"},120555:{c:"K",f:"I"},120556:{c:"\\39B",f:"I"},120557:{c:"M",f:"I"},120558:{c:"N",f:"I"},120559:{c:"\\39E",f:"I"},120560:{c:"O",f:"I"},120561:{c:"\\3A0",f:"I"},120562:{c:"P",f:"I"},120564:{c:"\\3A3",f:"I"},120565:{c:"T",f:"I"},120566:{c:"\\3A5",f:"I"},120567:{c:"\\3A6",f:"I"},120568:{c:"X",f:"I"},120569:{c:"\\3A8",f:"I"},120570:{c:"\\3A9",f:"I"},120572:{c:"\\3B1",f:"I"},120573:{c:"\\3B2",f:"I"},120574:{c:"\\3B3",f:"I"},120575:{c:"\\3B4",f:"I"},120576:{c:"\\3B5",f:"I"},120577:{c:"\\3B6",f:"I"},120578:{c:"\\3B7",f:"I"},120579:{c:"\\3B8",f:"I"},120580:{c:"\\3B9",f:"I"},120581:{c:"\\3BA",f:"I"},120582:{c:"\\3BB",f:"I"},120583:{c:"\\3BC",f:"I"},120584:{c:"\\3BD",f:"I"},120585:{c:"\\3BE",f:"I"},120586:{c:"\\3BF",f:"I"},120587:{c:"\\3C0",f:"I"},120588:{c:"\\3C1",f:"I"},120589:{c:"\\3C2",f:"I"},120590:{c:"\\3C3",f:"I"},120591:{c:"\\3C4",f:"I"},120592:{c:"\\3C5",f:"I"},120593:{c:"\\3C6",f:"I"},120594:{c:"\\3C7",f:"I"},120595:{c:"\\3C8",f:"I"},120596:{c:"\\3C9",f:"I"},120597:{c:"\\2202"},120598:{c:"\\3F5",f:"I"},120599:{c:"\\3D1",f:"I"},120600:{c:"\\E009",f:"A"},120601:{c:"\\3D5",f:"I"},120602:{c:"\\3F1",f:"I"},120603:{c:"\\3D6",f:"I"},120604:{c:"A",f:"BI"},120605:{c:"B",f:"BI"},120606:{c:"\\393",f:"BI"},120607:{c:"\\394",f:"BI"},120608:{c:"E",f:"BI"},120609:{c:"Z",f:"BI"},120610:{c:"H",f:"BI"},120611:{c:"\\398",f:"BI"},120612:{c:"I",f:"BI"},120613:{c:"K",f:"BI"},120614:{c:"\\39B",f:"BI"},120615:{c:"M",f:"BI"},120616:{c:"N",f:"BI"},120617:{c:"\\39E",f:"BI"},120618:{c:"O",f:"BI"},120619:{c:"\\3A0",f:"BI"},120620:{c:"P",f:"BI"},120622:{c:"\\3A3",f:"BI"},120623:{c:"T",f:"BI"},120624:{c:"\\3A5",f:"BI"},120625:{c:"\\3A6",f:"BI"},120626:{c:"X",f:"BI"},120627:{c:"\\3A8",f:"BI"},120628:{c:"\\3A9",f:"BI"},120630:{c:"\\3B1",f:"BI"},120631:{c:"\\3B2",f:"BI"},120632:{c:"\\3B3",f:"BI"},120633:{c:"\\3B4",f:"BI"},120634:{c:"\\3B5",f:"BI"},120635:{c:"\\3B6",f:"BI"},120636:{c:"\\3B7",f:"BI"},120637:{c:"\\3B8",f:"BI"},120638:{c:"\\3B9",f:"BI"},120639:{c:"\\3BA",f:"BI"},120640:{c:"\\3BB",f:"BI"},120641:{c:"\\3BC",f:"BI"},120642:{c:"\\3BD",f:"BI"},120643:{c:"\\3BE",f:"BI"},120644:{c:"\\3BF",f:"BI"},120645:{c:"\\3C0",f:"BI"},120646:{c:"\\3C1",f:"BI"},120647:{c:"\\3C2",f:"BI"},120648:{c:"\\3C3",f:"BI"},120649:{c:"\\3C4",f:"BI"},120650:{c:"\\3C5",f:"BI"},120651:{c:"\\3C6",f:"BI"},120652:{c:"\\3C7",f:"BI"},120653:{c:"\\3C8",f:"BI"},120654:{c:"\\3C9",f:"BI"},120655:{c:"\\2202",f:"B"},120656:{c:"\\3F5",f:"BI"},120657:{c:"\\3D1",f:"BI"},120658:{c:"\\E009",f:"A"},120659:{c:"\\3D5",f:"BI"},120660:{c:"\\3F1",f:"BI"},120661:{c:"\\3D6",f:"BI"},120662:{c:"A",f:"SSB"},120663:{c:"B",f:"SSB"},120664:{c:"\\393",f:"SSB"},120665:{c:"\\394",f:"SSB"},120666:{c:"E",f:"SSB"},120667:{c:"Z",f:"SSB"},120668:{c:"H",f:"SSB"},120669:{c:"\\398",f:"SSB"},120670:{c:"I",f:"SSB"},120671:{c:"K",f:"SSB"},120672:{c:"\\39B",f:"SSB"},120673:{c:"M",f:"SSB"},120674:{c:"N",f:"SSB"},120675:{c:"\\39E",f:"SSB"},120676:{c:"O",f:"SSB"},120677:{c:"\\3A0",f:"SSB"},120678:{c:"P",f:"SSB"},120680:{c:"\\3A3",f:"SSB"},120681:{c:"T",f:"SSB"},120682:{c:"\\3A5",f:"SSB"},120683:{c:"\\3A6",f:"SSB"},120684:{c:"X",f:"SSB"},120685:{c:"\\3A8",f:"SSB"},120686:{c:"\\3A9",f:"SSB"},120782:{c:"0",f:"B"},120783:{c:"1",f:"B"},120784:{c:"2",f:"B"},120785:{c:"3",f:"B"},120786:{c:"4",f:"B"},120787:{c:"5",f:"B"},120788:{c:"6",f:"B"},120789:{c:"7",f:"B"},120790:{c:"8",f:"B"},120791:{c:"9",f:"B"},120802:{c:"0",f:"SS"},120803:{c:"1",f:"SS"},120804:{c:"2",f:"SS"},120805:{c:"3",f:"SS"},120806:{c:"4",f:"SS"},120807:{c:"5",f:"SS"},120808:{c:"6",f:"SS"},120809:{c:"7",f:"SS"},120810:{c:"8",f:"SS"},120811:{c:"9",f:"SS"},120812:{c:"0",f:"SSB"},120813:{c:"1",f:"SSB"},120814:{c:"2",f:"SSB"},120815:{c:"3",f:"SSB"},120816:{c:"4",f:"SSB"},120817:{c:"5",f:"SSB"},120818:{c:"6",f:"SSB"},120819:{c:"7",f:"SSB"},120820:{c:"8",f:"SSB"},120821:{c:"9",f:"SSB"},120822:{c:"0",f:"T"},120823:{c:"1",f:"T"},120824:{c:"2",f:"T"},120825:{c:"3",f:"T"},120826:{c:"4",f:"T"},120827:{c:"5",f:"T"},120828:{c:"6",f:"T"},120829:{c:"7",f:"T"},120830:{c:"8",f:"T"},120831:{c:"9",f:"T"}})},7517:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.sansSerifBoldItalic=void 0;var n=r(8042),o=r(4886);e.sansSerifBoldItalic=(0,n.AddCSS)(o.sansSerifBoldItalic,{305:{f:"SSB"},567:{f:"SSB"}})},4182:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.sansSerifBold=void 0;var n=r(8042),o=r(4471);e.sansSerifBold=(0,n.AddCSS)(o.sansSerifBold,{8213:{c:"\\2014"},8215:{c:"_"},8260:{c:"/"},8710:{c:"\\394"}})},2679:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.sansSerifItalic=void 0;var n=r(8042),o=r(5181);e.sansSerifItalic=(0,n.AddCSS)(o.sansSerifItalic,{913:{c:"A"},914:{c:"B"},917:{c:"E"},918:{c:"Z"},919:{c:"H"},921:{c:"I"},922:{c:"K"},924:{c:"M"},925:{c:"N"},927:{c:"O"},929:{c:"P"},932:{c:"T"},935:{c:"X"},8213:{c:"\\2014"},8215:{c:"_"},8260:{c:"/"},8710:{c:"\\394"}})},5469:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.sansSerif=void 0;var n=r(8042),o=r(3526);e.sansSerif=(0,n.AddCSS)(o.sansSerif,{913:{c:"A"},914:{c:"B"},917:{c:"E"},918:{c:"Z"},919:{c:"H"},921:{c:"I"},922:{c:"K"},924:{c:"M"},925:{c:"N"},927:{c:"O"},929:{c:"P"},932:{c:"T"},935:{c:"X"},8213:{c:"\\2014"},8215:{c:"_"},8260:{c:"/"},8710:{c:"\\394"}})},7563:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.scriptBold=void 0;var n=r(5649);Object.defineProperty(e,"scriptBold",{enumerable:!0,get:function(){return n.scriptBold}})},9409:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.script=void 0;var n=r(7153);Object.defineProperty(e,"script",{enumerable:!0,get:function(){return n.script}})},775:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.smallop=void 0;var n=r(8042),o=r(5745);e.smallop=(0,n.AddCSS)(o.smallop,{8260:{c:"/"},9001:{c:"\\27E8"},9002:{c:"\\27E9"},10072:{c:"\\2223"},10764:{c:"\\222C\\222C"},12296:{c:"\\27E8"},12297:{c:"\\27E9"}})},9551:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.texCalligraphicBold=void 0;var n=r(8042),o=r(1411);e.texCalligraphicBold=(0,n.AddCSS)(o.texCalligraphicBold,{305:{f:"B"},567:{f:"B"}})},7907:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.texCalligraphic=void 0;var n=r(6384);Object.defineProperty(e,"texCalligraphic",{enumerable:!0,get:function(){return n.texCalligraphic}})},9659:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.texMathit=void 0;var n=r(6041);Object.defineProperty(e,"texMathit",{enumerable:!0,get:function(){return n.texMathit}})},98:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.texOldstyleBold=void 0;var n=r(8199);Object.defineProperty(e,"texOldstyleBold",{enumerable:!0,get:function(){return n.texOldstyleBold}})},6275:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.texOldstyle=void 0;var n=r(9848);Object.defineProperty(e,"texOldstyle",{enumerable:!0,get:function(){return n.texOldstyle}})},6530:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.texSize3=void 0;var n=r(8042),o=r(7906);e.texSize3=(0,n.AddCSS)(o.texSize3,{8260:{c:"/"},9001:{c:"\\27E8"},9002:{c:"\\27E9"},12296:{c:"\\27E8"},12297:{c:"\\27E9"}})},4409:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.texSize4=void 0;var n=r(8042),o=r(2644);e.texSize4=(0,n.AddCSS)(o.texSize4,{8260:{c:"/"},9001:{c:"\\27E8"},9002:{c:"\\27E9"},12296:{c:"\\27E8"},12297:{c:"\\27E9"},57685:{c:"\\E153\\E152"},57686:{c:"\\E151\\E150"}})},5292:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.texVariant=void 0;var n=r(8042),o=r(4926);e.texVariant=(0,n.AddCSS)(o.texVariant,{1008:{c:"\\E009"},8463:{f:""},8740:{c:"\\E006"},8742:{c:"\\E007"},8808:{c:"\\E00C"},8809:{c:"\\E00D"},8816:{c:"\\E011"},8817:{c:"\\E00E"},8840:{c:"\\E016"},8841:{c:"\\E018"},8842:{c:"\\E01A"},8843:{c:"\\E01B"},10887:{c:"\\E010"},10888:{c:"\\E00F"},10955:{c:"\\E017"},10956:{c:"\\E019"}})},5884:function(t,e,r){var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},i=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.FontData=e.NOSTRETCH=e.H=e.V=void 0;var s=r(7233);e.V=1,e.H=2,e.NOSTRETCH={dir:0};var l=function(){function t(t){var e,r,l,c;void 0===t&&(t=null),this.variant={},this.delimiters={},this.cssFontMap={},this.remapChars={},this.skewIcFactor=.75;var u=this.constructor;this.options=(0,s.userOptions)((0,s.defaultOptions)({},u.OPTIONS),t),this.params=n({},u.defaultParams),this.sizeVariants=i([],o(u.defaultSizeVariants),!1),this.stretchVariants=i([],o(u.defaultStretchVariants),!1),this.cssFontMap=n({},u.defaultCssFonts);try{for(var p=a(Object.keys(this.cssFontMap)),h=p.next();!h.done;h=p.next()){var d=h.value;"unknown"===this.cssFontMap[d][0]&&(this.cssFontMap[d][0]=this.options.unknownFamily)}}catch(t){e={error:t}}finally{try{h&&!h.done&&(r=p.return)&&r.call(p)}finally{if(e)throw e.error}}this.cssFamilyPrefix=u.defaultCssFamilyPrefix,this.createVariants(u.defaultVariants),this.defineDelimiters(u.defaultDelimiters);try{for(var f=a(Object.keys(u.defaultChars)),m=f.next();!m.done;m=f.next()){var y=m.value;this.defineChars(y,u.defaultChars[y])}}catch(t){l={error:t}}finally{try{m&&!m.done&&(c=f.return)&&c.call(f)}finally{if(l)throw l.error}}this.defineRemap("accent",u.defaultAccentMap),this.defineRemap("mo",u.defaultMoMap),this.defineRemap("mn",u.defaultMnMap)}return t.charOptions=function(t,e){var r=t[e];return 3===r.length&&(r[3]={}),r[3]},Object.defineProperty(t.prototype,"styles",{get:function(){return this._styles},set:function(t){this._styles=t},enumerable:!1,configurable:!0}),t.prototype.createVariant=function(t,e,r){void 0===e&&(e=null),void 0===r&&(r=null);var n={linked:[],chars:e?Object.create(this.variant[e].chars):{}};r&&this.variant[r]&&(Object.assign(n.chars,this.variant[r].chars),this.variant[r].linked.push(n.chars),n.chars=Object.create(n.chars)),this.remapSmpChars(n.chars,t),this.variant[t]=n},t.prototype.remapSmpChars=function(t,e){var r,n,i,s,l=this.constructor;if(l.VariantSmp[e]){var c=l.SmpRemap,u=[null,null,l.SmpRemapGreekU,l.SmpRemapGreekL];try{for(var p=a(l.SmpRanges),h=p.next();!h.done;h=p.next()){var d=o(h.value,3),f=d[0],m=d[1],y=d[2],g=l.VariantSmp[e][f];if(g){for(var b=m;b<=y;b++)if(930!==b){var v=g+b-m;t[b]=this.smpChar(c[v]||v)}if(u[f])try{for(var _=(i=void 0,a(Object.keys(u[f]).map((function(t){return parseInt(t)})))),S=_.next();!S.done;S=_.next()){t[b=S.value]=this.smpChar(g+u[f][b])}}catch(t){i={error:t}}finally{try{S&&!S.done&&(s=_.return)&&s.call(_)}finally{if(i)throw i.error}}}}}catch(t){r={error:t}}finally{try{h&&!h.done&&(n=p.return)&&n.call(p)}finally{if(r)throw r.error}}}"bold"===e&&(t[988]=this.smpChar(120778),t[989]=this.smpChar(120779))},t.prototype.smpChar=function(t){return[,,,{smp:t}]},t.prototype.createVariants=function(t){var e,r;try{for(var n=a(t),o=n.next();!o.done;o=n.next()){var i=o.value;this.createVariant(i[0],i[1],i[2])}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}},t.prototype.defineChars=function(t,e){var r,n,o=this.variant[t];Object.assign(o.chars,e);try{for(var i=a(o.linked),s=i.next();!s.done;s=i.next()){var l=s.value;Object.assign(l,e)}}catch(t){r={error:t}}finally{try{s&&!s.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}},t.prototype.defineDelimiters=function(t){Object.assign(this.delimiters,t)},t.prototype.defineRemap=function(t,e){this.remapChars.hasOwnProperty(t)||(this.remapChars[t]={}),Object.assign(this.remapChars[t],e)},t.prototype.getDelimiter=function(t){return this.delimiters[t]},t.prototype.getSizeVariant=function(t,e){return this.delimiters[t].variants&&(e=this.delimiters[t].variants[e]),this.sizeVariants[e]},t.prototype.getStretchVariant=function(t,e){return this.stretchVariants[this.delimiters[t].stretchv?this.delimiters[t].stretchv[e]:0]},t.prototype.getChar=function(t,e){return this.variant[t].chars[e]},t.prototype.getVariant=function(t){return this.variant[t]},t.prototype.getCssFont=function(t){return this.cssFontMap[t]||["serif",!1,!1]},t.prototype.getFamily=function(t){return this.cssFamilyPrefix?this.cssFamilyPrefix+", "+t:t},t.prototype.getRemappedChar=function(t,e){return(this.remapChars[t]||{})[e]},t.OPTIONS={unknownFamily:"serif"},t.JAX="common",t.NAME="",t.defaultVariants=[["normal"],["bold","normal"],["italic","normal"],["bold-italic","italic","bold"],["double-struck","bold"],["fraktur","normal"],["bold-fraktur","bold","fraktur"],["script","italic"],["bold-script","bold-italic","script"],["sans-serif","normal"],["bold-sans-serif","bold","sans-serif"],["sans-serif-italic","italic","sans-serif"],["sans-serif-bold-italic","bold-italic","bold-sans-serif"],["monospace","normal"]],t.defaultCssFonts={normal:["unknown",!1,!1],bold:["unknown",!1,!0],italic:["unknown",!0,!1],"bold-italic":["unknown",!0,!0],"double-struck":["unknown",!1,!0],fraktur:["unknown",!1,!1],"bold-fraktur":["unknown",!1,!0],script:["cursive",!1,!1],"bold-script":["cursive",!1,!0],"sans-serif":["sans-serif",!1,!1],"bold-sans-serif":["sans-serif",!1,!0],"sans-serif-italic":["sans-serif",!0,!1],"sans-serif-bold-italic":["sans-serif",!0,!0],monospace:["monospace",!1,!1]},t.defaultCssFamilyPrefix="",t.VariantSmp={bold:[119808,119834,120488,120514,120782],italic:[119860,119886,120546,120572],"bold-italic":[119912,119938,120604,120630],script:[119964,119990],"bold-script":[120016,120042],fraktur:[120068,120094],"double-struck":[120120,120146,,,120792],"bold-fraktur":[120172,120198],"sans-serif":[120224,120250,,,120802],"bold-sans-serif":[120276,120302,120662,120688,120812],"sans-serif-italic":[120328,120354],"sans-serif-bold-italic":[120380,120406,120720,120746],monospace:[120432,120458,,,120822]},t.SmpRanges=[[0,65,90],[1,97,122],[2,913,937],[3,945,969],[4,48,57]],t.SmpRemap={119893:8462,119965:8492,119968:8496,119969:8497,119971:8459,119972:8464,119975:8466,119976:8499,119981:8475,119994:8495,119996:8458,120004:8500,120070:8493,120075:8460,120076:8465,120085:8476,120093:8488,120122:8450,120127:8461,120133:8469,120135:8473,120136:8474,120137:8477,120145:8484},t.SmpRemapGreekU={8711:25,1012:17},t.SmpRemapGreekL={977:27,981:29,982:31,1008:28,1009:30,1013:26,8706:25},t.defaultAccentMap={768:"\u02cb",769:"\u02ca",770:"\u02c6",771:"\u02dc",772:"\u02c9",774:"\u02d8",775:"\u02d9",776:"\xa8",778:"\u02da",780:"\u02c7",8594:"\u20d7",8242:"'",8243:"''",8244:"'''",8245:"`",8246:"``",8247:"```",8279:"''''",8400:"\u21bc",8401:"\u21c0",8406:"\u2190",8417:"\u2194",8432:"*",8411:"...",8412:"....",8428:"\u21c1",8429:"\u21bd",8430:"\u2190",8431:"\u2192"},t.defaultMoMap={45:"\u2212"},t.defaultMnMap={45:"\u2212"},t.defaultParams={x_height:.442,quad:1,num1:.676,num2:.394,num3:.444,denom1:.686,denom2:.345,sup1:.413,sup2:.363,sup3:.289,sub1:.15,sub2:.247,sup_drop:.386,sub_drop:.05,delim1:2.39,delim2:1,axis_height:.25,rule_thickness:.06,big_op_spacing1:.111,big_op_spacing2:.167,big_op_spacing3:.2,big_op_spacing4:.6,big_op_spacing5:.1,surd_height:.075,scriptspace:.05,nulldelimiterspace:.12,delimiterfactor:901,delimitershortfall:.3,min_rule_thickness:1.25,separation_factor:1.75,extra_ic:.033},t.defaultDelimiters={},t.defaultChars={},t.defaultSizeVariants=[],t.defaultStretchVariants=[],t}();e.FontData=l},5552:function(t,e){var r=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(e,"__esModule",{value:!0}),e.CommonArrow=e.CommonDiagonalArrow=e.CommonDiagonalStrike=e.CommonBorder2=e.CommonBorder=e.arrowBBox=e.diagonalArrowDef=e.arrowDef=e.arrowBBoxW=e.arrowBBoxHD=e.arrowHead=e.fullBorder=e.fullPadding=e.fullBBox=e.sideNames=e.sideIndex=e.SOLID=e.PADDING=e.THICKNESS=e.ARROWY=e.ARROWDX=e.ARROWX=void 0,e.ARROWX=4,e.ARROWDX=1,e.ARROWY=2,e.THICKNESS=.067,e.PADDING=.2,e.SOLID=e.THICKNESS+"em solid",e.sideIndex={top:0,right:1,bottom:2,left:3},e.sideNames=Object.keys(e.sideIndex),e.fullBBox=function(t){return new Array(4).fill(t.thickness+t.padding)},e.fullPadding=function(t){return new Array(4).fill(t.padding)},e.fullBorder=function(t){return new Array(4).fill(t.thickness)};e.arrowHead=function(t){return Math.max(t.padding,t.thickness*(t.arrowhead.x+t.arrowhead.dx+1))};e.arrowBBoxHD=function(t,e){if(t.childNodes[0]){var r=t.childNodes[0].getBBox(),n=r.h,o=r.d;e[0]=e[2]=Math.max(0,t.thickness*t.arrowhead.y-(n+o)/2)}return e};e.arrowBBoxW=function(t,e){if(t.childNodes[0]){var r=t.childNodes[0].getBBox().w;e[1]=e[3]=Math.max(0,t.thickness*t.arrowhead.y-r/2)}return e},e.arrowDef={up:[-Math.PI/2,!1,!0,"verticalstrike"],down:[Math.PI/2,!1,!0,"verticakstrike"],right:[0,!1,!1,"horizontalstrike"],left:[Math.PI,!1,!1,"horizontalstrike"],updown:[Math.PI/2,!0,!0,"verticalstrike uparrow downarrow"],leftright:[0,!0,!1,"horizontalstrike leftarrow rightarrow"]},e.diagonalArrowDef={updiagonal:[-1,0,!1,"updiagonalstrike northeastarrow"],northeast:[-1,0,!1,"updiagonalstrike updiagonalarrow"],southeast:[1,0,!1,"downdiagonalstrike"],northwest:[1,Math.PI,!1,"downdiagonalstrike"],southwest:[-1,Math.PI,!1,"updiagonalstrike"],northeastsouthwest:[-1,0,!0,"updiagonalstrike northeastarrow updiagonalarrow southwestarrow"],northwestsoutheast:[1,0,!0,"downdiagonalstrike northwestarrow southeastarrow"]},e.arrowBBox={up:function(t){return(0,e.arrowBBoxW)(t,[(0,e.arrowHead)(t),0,t.padding,0])},down:function(t){return(0,e.arrowBBoxW)(t,[t.padding,0,(0,e.arrowHead)(t),0])},right:function(t){return(0,e.arrowBBoxHD)(t,[0,(0,e.arrowHead)(t),0,t.padding])},left:function(t){return(0,e.arrowBBoxHD)(t,[0,t.padding,0,(0,e.arrowHead)(t)])},updown:function(t){return(0,e.arrowBBoxW)(t,[(0,e.arrowHead)(t),0,(0,e.arrowHead)(t),0])},leftright:function(t){return(0,e.arrowBBoxHD)(t,[0,(0,e.arrowHead)(t),0,(0,e.arrowHead)(t)])}};e.CommonBorder=function(t){return function(r){var n=e.sideIndex[r];return[r,{renderer:t,bbox:function(t){var e=[0,0,0,0];return e[n]=t.thickness+t.padding,e},border:function(t){var e=[0,0,0,0];return e[n]=t.thickness,e}}]}};e.CommonBorder2=function(t){return function(r,n,o){var i=e.sideIndex[n],a=e.sideIndex[o];return[r,{renderer:t,bbox:function(t){var e=t.thickness+t.padding,r=[0,0,0,0];return r[i]=r[a]=e,r},border:function(t){var e=[0,0,0,0];return e[i]=e[a]=t.thickness,e},remove:n+" "+o}]}};e.CommonDiagonalStrike=function(t){return function(r){var n="mjx-"+r.charAt(0)+"strike";return[r+"diagonalstrike",{renderer:t(n),bbox:e.fullBBox}]}};e.CommonDiagonalArrow=function(t){return function(n){var o=r(e.diagonalArrowDef[n],4),i=o[0],a=o[1],s=o[2];return[n+"arrow",{renderer:function(e,n){var o=r(e.arrowAW(),2),l=o[0],c=o[1],u=e.arrow(c,i*(l-a),s);t(e,u)},bbox:function(t){var e=t.arrowData(),n=e.a,o=e.x,i=e.y,a=r([t.arrowhead.x,t.arrowhead.y,t.arrowhead.dx],3),s=a[0],l=a[1],c=a[2],u=r(t.getArgMod(s+c,l),2),p=u[0],h=u[1],d=i+(p>n?t.thickness*h*Math.sin(p-n):0),f=o+(p>Math.PI/2-n?t.thickness*h*Math.sin(p+n-Math.PI/2):0);return[d,f,d,f]},remove:o[3]}]}};e.CommonArrow=function(t){return function(n){var o=r(e.arrowDef[n],4),i=o[0],a=o[1],s=o[2],l=o[3];return[n+"arrow",{renderer:function(e,n){var o=e.getBBox(),l=o.w,c=o.h,u=o.d,p=r(s?[c+u,"X"]:[l,"Y"],2),h=p[0],d=p[1],f=e.getOffset(d),m=e.arrow(h,i,a,d,f);t(e,m)},bbox:e.arrowBBox[n],remove:l}]}}},3055:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},s=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.CommonOutputJax=void 0;var l=r(2975),c=r(4474),u=r(7233),p=r(6010),h=r(8054),d=r(4139),f=function(t){function e(e,r,n){void 0===e&&(e=null),void 0===r&&(r=null),void 0===n&&(n=null);var o=this,i=a((0,u.separateOptions)(e,n.OPTIONS),2),s=i[0],l=i[1];return(o=t.call(this,s)||this).factory=o.options.wrapperFactory||new r,o.factory.jax=o,o.cssStyles=o.options.cssStyles||new d.CssStyles,o.font=o.options.font||new n(l),o.unknownCache=new Map,o}return o(e,t),e.prototype.typeset=function(t,e){this.setDocument(e);var r=this.createNode();return this.toDOM(t,r,e),r},e.prototype.createNode=function(){var t=this.constructor.NAME;return this.html("mjx-container",{class:"MathJax",jax:t})},e.prototype.setScale=function(t){var e=this.math.metrics.scale*this.options.scale;1!==e&&this.adaptor.setStyle(t,"fontSize",(0,p.percent)(e))},e.prototype.toDOM=function(t,e,r){void 0===r&&(r=null),this.setDocument(r),this.math=t,this.pxPerEm=t.metrics.ex/this.font.params.x_height,t.root.setTeXclass(null),this.setScale(e),this.nodeMap=new Map,this.container=e,this.processMath(t.root,e),this.nodeMap=null,this.executeFilters(this.postFilters,t,r,e)},e.prototype.getBBox=function(t,e){this.setDocument(e),this.math=t,t.root.setTeXclass(null),this.nodeMap=new Map;var r=this.factory.wrap(t.root).getOuterBBox();return this.nodeMap=null,r},e.prototype.getMetrics=function(t){var e,r;this.setDocument(t);var n=this.adaptor,o=this.getMetricMaps(t);try{for(var i=s(t.math),a=i.next();!a.done;a=i.next()){var l=a.value,u=n.parent(l.start.node);if(l.state()=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},c=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},u=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o600?"bold":"normal"),n.family?r=this.explicitVariant(n.family,n.weight,n.style):(this.node.getProperty("variantForm")&&(r="-tex-variant"),r=(e.BOLDVARIANTS[n.weight]||{})[r]||r,r=(e.ITALICVARIANTS[n.style]||{})[r]||r)}this.variant=r}},e.prototype.explicitVariant=function(t,e,r){var n=this.styles;return n||(n=this.styles=new m.Styles),n.set("fontFamily",t),e&&n.set("fontWeight",e),r&&n.set("fontStyle",r),"-explicitFont"},e.prototype.getScale=function(){var t=1,e=this.parent,r=e?e.bbox.scale:1,n=this.node.attributes,o=Math.min(n.get("scriptlevel"),2),i=n.get("fontsize"),a=this.node.isToken||this.node.isKind("mstyle")?n.get("mathsize"):n.getInherited("mathsize");if(0!==o){t=Math.pow(n.get("scriptsizemultiplier"),o);var s=this.length2em(n.get("scriptminsize"),.8,1);t0;this.bbox.L=n.isSet("lspace")?Math.max(0,this.length2em(n.get("lspace"))):v(o,t.lspace),this.bbox.R=n.isSet("rspace")?Math.max(0,this.length2em(n.get("rspace"))):v(o,t.rspace);var i=r.childIndex(e);if(0!==i){var a=r.childNodes[i-1];if(a.isEmbellished){var s=this.jax.nodeMap.get(a).getBBox();s.R&&(this.bbox.L=Math.max(0,this.bbox.L-s.R))}}}},e.prototype.getTeXSpacing=function(t,e){if(!e){var r=this.node.texSpacing();r&&(this.bbox.L=this.length2em(r))}if(t||e){var n=this.node.coreMO().attributes;n.isSet("lspace")&&(this.bbox.L=Math.max(0,this.length2em(n.get("lspace")))),n.isSet("rspace")&&(this.bbox.R=Math.max(0,this.length2em(n.get("rspace"))))}},e.prototype.isTopEmbellished=function(){return this.node.isEmbellished&&!(this.node.parent&&this.node.parent.isEmbellished)},e.prototype.core=function(){return this.jax.nodeMap.get(this.node.core())},e.prototype.coreMO=function(){return this.jax.nodeMap.get(this.node.coreMO())},e.prototype.getText=function(){var t,e,r="";if(this.node.isToken)try{for(var n=l(this.node.childNodes),o=n.next();!o.done;o=n.next()){var i=o.value;i instanceof h.TextNode&&(r+=i.getText())}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}return r},e.prototype.canStretch=function(t){if(this.stretch=g.NOSTRETCH,this.node.isEmbellished){var e=this.core();e&&e.node!==this.node&&e.canStretch(t)&&(this.stretch=e.stretch)}return 0!==this.stretch.dir},e.prototype.getAlignShift=function(){var t,e=(t=this.node.attributes).getList.apply(t,u([],c(h.indentAttributes),!1)),r=e.indentalign,n=e.indentshift,o=e.indentalignfirst,i=e.indentshiftfirst;return"indentalign"!==o&&(r=o),"auto"===r&&(r=this.jax.options.displayAlign),"indentshift"!==i&&(n=i),"auto"===n&&(n=this.jax.options.displayIndent,"right"!==r||n.match(/^\s*0[a-z]*\s*$/)||(n=("-"+n.trim()).replace(/^--/,""))),[r,this.length2em(n,this.metrics.containerWidth)]},e.prototype.getAlignX=function(t,e,r){return"right"===r?t-(e.w+e.R)*e.rscale:"left"===r?e.L*e.rscale:(t-e.w*e.rscale)/2},e.prototype.getAlignY=function(t,e,r,n,o){return"top"===o?t-r:"bottom"===o?n-e:"center"===o?(t-r-(e-n))/2:0},e.prototype.getWrapWidth=function(t){return this.childNodes[t].getBBox().w},e.prototype.getChildAlign=function(t){return"left"},e.prototype.percent=function(t){return f.percent(t)},e.prototype.em=function(t){return f.em(t)},e.prototype.px=function(t,e){return void 0===e&&(e=-f.BIGDIMEN),f.px(t,e,this.metrics.em)},e.prototype.length2em=function(t,e,r){return void 0===e&&(e=1),void 0===r&&(r=null),null===r&&(r=this.bbox.scale),f.length2em(t,e,r,this.jax.pxPerEm)},e.prototype.unicodeChars=function(t,e){void 0===e&&(e=this.variant);var r=(0,d.unicodeChars)(t),n=this.font.getVariant(e);if(n&&n.chars){var o=n.chars;r=r.map((function(t){return((o[t]||[])[3]||{}).smp||t}))}return r},e.prototype.remapChars=function(t){return t},e.prototype.mmlText=function(t){return this.node.factory.create("text").setText(t)},e.prototype.mmlNode=function(t,e,r){return void 0===e&&(e={}),void 0===r&&(r=[]),this.node.factory.create(t,e,r)},e.prototype.createMo=function(t){var e=this.node.factory,r=e.create("text").setText(t),n=e.create("mo",{stretchy:!0},[r]);n.inheritAttributesFrom(this.node);var o=this.wrap(n);return o.parent=this,o},e.prototype.getVariantChar=function(t,e){var r=this.font.getChar(t,e)||[0,0,0,{unknown:!0}];return 3===r.length&&(r[3]={}),r},e.kind="unknown",e.styles={},e.removeStyles=["fontSize","fontFamily","fontWeight","fontStyle","fontVariant","font"],e.skipAttributes={fontfamily:!0,fontsize:!0,fontweight:!0,fontstyle:!0,color:!0,background:!0,class:!0,href:!0,style:!0,xmlns:!0},e.BOLDVARIANTS={bold:{normal:"bold",italic:"bold-italic",fraktur:"bold-fraktur",script:"bold-script","sans-serif":"bold-sans-serif","sans-serif-italic":"sans-serif-bold-italic"},normal:{bold:"normal","bold-italic":"italic","bold-fraktur":"fraktur","bold-script":"script","bold-sans-serif":"sans-serif","sans-serif-bold-italic":"sans-serif-italic"}},e.ITALICVARIANTS={italic:{normal:"italic",bold:"bold-italic","sans-serif":"sans-serif-italic","bold-sans-serif":"sans-serif-bold-italic"},normal:{italic:"normal","bold-italic":"bold","sans-serif-italic":"sans-serif","sans-serif-bold-italic":"bold-sans-serif"}},e}(p.AbstractWrapper);e.CommonWrapper=_},4420:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.CommonWrapperFactory=void 0;var i=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.jax=null,e}return o(e,t),Object.defineProperty(e.prototype,"Wrappers",{get:function(){return this.node},enumerable:!1,configurable:!0}),e.defaultNodes={},e}(r(3811).AbstractWrapperFactory);e.CommonWrapperFactory=i},9800:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.CommonTeXAtomMixin=void 0;var i=r(9007);e.CommonTeXAtomMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.computeBBox=function(e,r){if(void 0===r&&(r=!1),t.prototype.computeBBox.call(this,e,r),this.childNodes[0]&&this.childNodes[0].bbox.ic&&(e.ic=this.childNodes[0].bbox.ic),this.node.texClass===i.TEXCLASS.VCENTER){var n=e.h,o=(n+e.d)/2+this.font.params.axis_height-n;e.h+=o,e.d-=o}},e}(t)}},1160:function(t,e){var r,n=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},i=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(e,"__esModule",{value:!0}),e.CommonTextNodeMixin=void 0,e.CommonTextNodeMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.computeBBox=function(t,e){var r,n;void 0===e&&(e=!1);var a=this.parent.variant,s=this.node.getText();if("-explicitFont"===a){var l=this.jax.getFontData(this.parent.styles),c=this.jax.measureText(s,a,l),u=c.w,p=c.h,h=c.d;t.h=p,t.d=h,t.w=u}else{var d=this.remappedText(s,a);t.empty();try{for(var f=o(d),m=f.next();!m.done;m=f.next()){var y=m.value,g=i(this.getVariantChar(a,y),4),b=(p=g[0],h=g[1],u=g[2],g[3]);if(b.unknown){var v=this.jax.measureText(String.fromCodePoint(y),a);u=v.w,p=v.h,h=v.d}t.w+=u,p>t.h&&(t.h=p),h>t.d&&(t.d=h),t.ic=b.ic||0,t.sk=b.sk||0,t.dx=b.dx||0}}catch(t){r={error:t}}finally{try{m&&!m.done&&(n=f.return)&&n.call(f)}finally{if(r)throw r.error}}d.length>1&&(t.sk=0),t.clean()}},e.prototype.remappedText=function(t,e){var r=this.parent.stretch.c;return r?[r]:this.parent.remapChars(this.unicodeChars(t,e))},e.prototype.getStyles=function(){},e.prototype.getVariant=function(){},e.prototype.getScale=function(){},e.prototype.getSpace=function(){},e}(t)}},1956:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},c=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.CommonMencloseMixin=void 0;var p=s(r(5552)),h=r(505);e.CommonMencloseMixin=function(t){return function(t){function e(){for(var e=[],r=0;r.001?a:0},e.prototype.getArgMod=function(t,e){return[Math.atan2(e,t),Math.sqrt(t*t+e*e)]},e.prototype.arrow=function(t,e,r,n,o){return void 0===n&&(n=""),void 0===o&&(o=0),null},e.prototype.arrowData=function(){var t=l([this.padding,this.thickness],2),e=t[0],r=t[1]*(this.arrowhead.x+Math.max(1,this.arrowhead.dx)),n=this.childNodes[0].getBBox(),o=n.h,i=n.d,a=n.w,s=o+i,c=Math.sqrt(s*s+a*a),u=Math.max(e,r*a/c),p=Math.max(e,r*s/c),h=l(this.getArgMod(a+2*u,s+2*p),2);return{a:h[0],W:h[1],x:u,y:p}},e.prototype.arrowAW=function(){var t=this.childNodes[0].getBBox(),e=t.h,r=t.d,n=t.w,o=l(this.TRBL,4),i=o[0],a=o[1],s=o[2],c=o[3];return this.getArgMod(c+n+a,i+e+r+s)},e.prototype.createMsqrt=function(t){var e=this.node.factory.create("msqrt");e.inheritAttributesFrom(this.node),e.childNodes[0]=t.node;var r=this.wrap(e);return r.parent=this,r},e.prototype.sqrtTRBL=function(){var t=this.msqrt.getBBox(),e=this.msqrt.childNodes[0].getBBox();return[t.h-e.h,0,t.d-e.d,t.w-e.w]},e}(t)}},7555:function(t,e){var r,n=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),o=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},i=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.CommonMfencedMixin=void 0,e.CommonMfencedMixin=function(t){return function(t){function e(){for(var e=[],r=0;r0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},i=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},i=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.CommonMmultiscriptsMixin=e.ScriptNames=e.NextScript=void 0;var l=r(6469);e.NextScript={base:"subList",subList:"supList",supList:"subList",psubList:"psupList",psupList:"psubList"},e.ScriptNames=["sup","sup","psup","psub"],e.CommonMmultiscriptsMixin=function(t){return function(t){function r(){for(var e=[],r=0;re.length&&e.push(l.BBox.empty())},r.prototype.combineBBoxLists=function(t,e,r,n){for(var o=0;ot.h&&(t.h=l),c>t.d&&(t.d=c),h>e.h&&(e.h=h),d>e.d&&(e.d=d)}},r.prototype.getScaledWHD=function(t){var e=t.w,r=t.h,n=t.d,o=t.rscale;return[e*o,r*o,n*o]},r.prototype.getUVQ=function(e,r){var n;if(!this.UVQ){var o=i([0,0,0],3),a=o[0],s=o[1],l=o[2];0===e.h&&0===e.d?a=this.getU():0===r.h&&0===r.d?a=-this.getV():(a=(n=i(t.prototype.getUVQ.call(this,e,r),3))[0],s=n[1],l=n[2]),this.UVQ=[a,s,l]}return this.UVQ},r}(t)}},5023:function(t,e){var r,n=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.CommonMnMixin=void 0,e.CommonMnMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.remapChars=function(t){if(t.length){var e=this.font.getRemappedChar("mn",t[0]);if(e){var r=this.unicodeChars(e,this.variant);1===r.length?t[0]=r[0]:t=r.concat(t.slice(1))}}return t},e}(t)}},7096:function(t,e,r){var n,o,i=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),a=this&&this.__assign||function(){return a=Object.assign||function(t){for(var e,r=1,n=arguments.length;r0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},l=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.CommonMoMixin=e.DirectionVH=void 0;var u=r(6469),p=r(505),h=r(5884);e.DirectionVH=((o={})[1]="v",o[2]="h",o),e.CommonMoMixin=function(t){return function(t){function e(){for(var e=[],r=0;r=0)&&(t.w=0)},e.prototype.protoBBox=function(e){var r=0!==this.stretch.dir;r&&null===this.size&&this.getStretchedVariant([0]),r&&this.size<0||(t.prototype.computeBBox.call(this,e),this.copySkewIC(e))},e.prototype.getAccentOffset=function(){var t=u.BBox.empty();return this.protoBBox(t),-t.w/2},e.prototype.getCenterOffset=function(e){return void 0===e&&(e=null),e||(e=u.BBox.empty(),t.prototype.computeBBox.call(this,e)),(e.h+e.d)/2+this.font.params.axis_height-e.h},e.prototype.getVariant=function(){this.node.attributes.get("largeop")?this.variant=this.node.attributes.get("displaystyle")?"-largeop":"-smallop":this.node.attributes.getExplicit("mathvariant")||!1!==this.node.getProperty("pseudoscript")?t.prototype.getVariant.call(this):this.variant="-tex-variant"},e.prototype.canStretch=function(t){if(0!==this.stretch.dir)return this.stretch.dir===t;if(!this.node.attributes.get("stretchy"))return!1;var e=this.getText();if(1!==Array.from(e).length)return!1;var r=this.font.getDelimiter(e.codePointAt(0));return this.stretch=r&&r.dir===t?r:h.NOSTRETCH,0!==this.stretch.dir},e.prototype.getStretchedVariant=function(t,e){var r,n;if(void 0===e&&(e=!1),0!==this.stretch.dir){var o=this.getWH(t),i=this.getSize("minsize",0),s=this.getSize("maxsize",1/0),l=this.node.getProperty("mathaccent");o=Math.max(i,Math.min(s,o));var u=this.font.params.delimiterfactor/1e3,p=this.font.params.delimitershortfall,h=i||e?o:l?Math.min(o/u,o+p):Math.max(o*u,o-p),d=this.stretch,f=d.c||this.getText().codePointAt(0),m=0;if(d.sizes)try{for(var y=c(d.sizes),g=y.next();!g.done;g=y.next()){if(g.value>=h)return l&&m&&m--,this.variant=this.font.getSizeVariant(f,m),this.size=m,void(d.schar&&d.schar[m]&&(this.stretch=a(a({},this.stretch),{c:d.schar[m]})));m++}}catch(t){r={error:t}}finally{try{g&&!g.done&&(n=y.return)&&n.call(y)}finally{if(r)throw r.error}}d.stretch?(this.size=-1,this.invalidateBBox(),this.getStretchBBox(t,this.checkExtendedHeight(o,d),d)):(this.variant=this.font.getSizeVariant(f,m-1),this.size=m-1)}},e.prototype.getSize=function(t,e){var r=this.node.attributes;return r.isSet(t)&&(e=this.length2em(r.get(t),1,1)),e},e.prototype.getWH=function(t){if(0===t.length)return 0;if(1===t.length)return t[0];var e=s(t,2),r=e[0],n=e[1],o=this.font.params.axis_height;return this.node.attributes.get("symmetric")?2*Math.max(r-o,n+o):r+n},e.prototype.getStretchBBox=function(t,e,r){var n;r.hasOwnProperty("min")&&r.min>e&&(e=r.min);var o=s(r.HDW,3),i=o[0],a=o[1],l=o[2];1===this.stretch.dir?(i=(n=s(this.getBaseline(t,e,r),2))[0],a=n[1]):l=e,this.bbox.h=i,this.bbox.d=a,this.bbox.w=l},e.prototype.getBaseline=function(t,e,r){var n=2===t.length&&t[0]+t[1]===e,o=this.node.attributes.get("symmetric"),i=s(n?t:[e,0],2),a=i[0],l=i[1],c=s([a+l,0],2),u=c[0],p=c[1];if(o){var h=this.font.params.axis_height;n&&(u=2*Math.max(a-h,l+h)),p=u/2-h}else if(n)p=l;else{var d=s(r.HDW||[.75,.25],2),f=d[0],m=d[1];p=m*(u/(f+m))}return[u-p,p]},e.prototype.checkExtendedHeight=function(t,e){if(e.fullExt){var r=s(e.fullExt,2),n=r[0],o=r[1];t=o+Math.ceil(Math.max(0,t-o)/n)*n}return t},e.prototype.remapChars=function(t){var e=this.node.getProperty("primes");if(e)return(0,p.unicodeChars)(e);if(1===t.length){var r=this.node.coreParent().parent,n=this.isAccent&&!r.isKind("mrow")?"accent":"mo",o=this.font.getRemappedChar(n,t[0]);o&&(t=this.unicodeChars(o,this.variant))}return t},e}(t)}},6898:function(t,e){var r,n=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),o=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(e,"__esModule",{value:!0}),e.CommonMpaddedMixin=void 0,e.CommonMpaddedMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.getDimens=function(){var t=this.node.attributes.getList("width","height","depth","lspace","voffset"),e=this.childNodes[0].getBBox(),r=e.w,n=e.h,o=e.d,i=r,a=n,s=o,l=0,c=0,u=0;""!==t.width&&(r=this.dimen(t.width,e,"w",0)),""!==t.height&&(n=this.dimen(t.height,e,"h",0)),""!==t.depth&&(o=this.dimen(t.depth,e,"d",0)),""!==t.voffset&&(c=this.dimen(t.voffset,e)),""!==t.lspace&&(l=this.dimen(t.lspace,e));var p=this.node.attributes.get("data-align");return p&&(u=this.getAlignX(r,e,p)),[a,s,i,n-a,o-s,r-i,l,c,u]},e.prototype.dimen=function(t,e,r,n){void 0===r&&(r=""),void 0===n&&(n=null);var o=(t=String(t)).match(/width|height|depth/),i=o?e[o[0].charAt(0)]:r?e[r]:0,a=this.length2em(t,i)||0;return t.match(/^[-+]/)&&r&&(a+=i),null!=n&&(a=Math.max(n,a)),a},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=o(this.getDimens(),6),n=r[0],i=r[1],a=r[2],s=r[3],l=r[4],c=r[5];t.w=a+c,t.h=n+s,t.d=i+l,this.setChildPWidths(e,t.w)},e.prototype.getWrapWidth=function(t){return this.getBBox().w},e.prototype.getChildAlign=function(t){return this.node.attributes.get("data-align")||"left"},e}(t)}},6991:function(t,e){var r,n=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.CommonMrootMixin=void 0,e.CommonMrootMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),Object.defineProperty(e.prototype,"surd",{get:function(){return 2},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"root",{get:function(){return 1},enumerable:!1,configurable:!0}),e.prototype.combineRootBBox=function(t,e,r){var n=this.childNodes[this.root].getOuterBBox(),o=this.getRootDimens(e,r)[1];t.combine(n,0,o)},e.prototype.getRootDimens=function(t,e){var r=this.childNodes[this.surd],n=this.childNodes[this.root].getOuterBBox(),o=(r.size<0?.5:.6)*t.w,i=n.w,a=n.rscale,s=Math.max(i,o/a),l=Math.max(0,s-i);return[s*a-o,this.rootHeight(n,t,r.size,e),l]},e.prototype.rootHeight=function(t,e,r,n){var o=e.h+e.d;return(r<0?1.9:.55*o)-(o-n)+Math.max(0,t.d*t.rscale)},e}(t)}},8411:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.CommonInferredMrowMixin=e.CommonMrowMixin=void 0;var l=r(6469);e.CommonMrowMixin=function(t){return function(t){function e(){for(var e,r,n=[],o=0;o1){var h=0,d=0,f=u>1&&u===p;try{for(var m=s(this.childNodes),y=m.next();!y.done;y=m.next()){var g=0===(O=y.value).stretch.dir;if(f||g){var b=O.getOuterBBox(g),v=b.h,_=b.d,S=b.rscale;(v*=S)>h&&(h=v),(_*=S)>d&&(d=_)}}}catch(t){r={error:t}}finally{try{y&&!y.done&&(n=m.return)&&n.call(m)}finally{if(r)throw r.error}}try{for(var x=s(a),M=x.next();!M.done;M=x.next()){var O;(O=M.value).coreMO().getStretchedVariant([h,d])}}catch(t){o={error:t}}finally{try{M&&!M.done&&(i=x.return)&&i.call(x)}finally{if(o)throw o.error}}}},e}(t)},e.CommonInferredMrowMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.getScale=function(){this.bbox.scale=this.parent.bbox.scale,this.bbox.rscale=1},e}(t)}},4126:function(t,e){var r,n=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),o=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},i=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;othis.surdH?(t.h+t.d-(this.surdH-2*e-r/2))/2:e+r/4]},e.prototype.getRootDimens=function(t,e){return[0,0,0,0]},e}(t)}},905:function(t,e){var r,n=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),o=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(e,"__esModule",{value:!0}),e.CommonMsubsupMixin=e.CommonMsupMixin=e.CommonMsubMixin=void 0,e.CommonMsubMixin=function(t){var e;return e=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),Object.defineProperty(e.prototype,"scriptChild",{get:function(){return this.childNodes[this.node.sub]},enumerable:!1,configurable:!0}),e.prototype.getOffset=function(){return[0,-this.getV()]},e}(t),e.useIC=!1,e},e.CommonMsupMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),Object.defineProperty(e.prototype,"scriptChild",{get:function(){return this.childNodes[this.node.sup]},enumerable:!1,configurable:!0}),e.prototype.getOffset=function(){return[this.getAdjustedIc()-(this.baseRemoveIc?0:this.baseIc),this.getU()]},e}(t)},e.CommonMsubsupMixin=function(t){var e;return e=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.UVQ=null,e}return n(e,t),Object.defineProperty(e.prototype,"subChild",{get:function(){return this.childNodes[this.node.sub]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"supChild",{get:function(){return this.childNodes[this.node.sup]},enumerable:!1,configurable:!0}),e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r=this.baseChild.getOuterBBox(),n=o([this.subChild.getOuterBBox(),this.supChild.getOuterBBox()],2),i=n[0],a=n[1];t.empty(),t.append(r);var s=this.getBaseWidth(),l=this.getAdjustedIc(),c=o(this.getUVQ(),2),u=c[0],p=c[1];t.combine(i,s,p),t.combine(a,s+l,u),t.w+=this.font.params.scriptspace,t.clean(),this.setChildPWidths(e)},e.prototype.getUVQ=function(t,e){void 0===t&&(t=this.subChild.getOuterBBox()),void 0===e&&(e=this.supChild.getOuterBBox());var r=this.baseCore.getOuterBBox();if(this.UVQ)return this.UVQ;var n=this.font.params,i=3*n.rule_thickness,a=this.length2em(this.node.attributes.get("subscriptshift"),n.sub2),s=this.baseCharZero(r.d*this.baseScale+n.sub_drop*t.rscale),l=o([this.getU(),Math.max(s,a)],2),c=l[0],u=l[1],p=c-e.d*e.rscale-(t.h*t.rscale-u);if(p0&&(c+=h,u-=h)}return c=Math.max(this.length2em(this.node.attributes.get("superscriptshift"),c),c),u=Math.max(this.length2em(this.node.attributes.get("subscriptshift"),u),u),p=c-e.d*e.rscale-(t.h*t.rscale-u),this.UVQ=[c,-u,p],this.UVQ},e}(t),e.useIC=!1,e}},6237:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.CommonMtableMixin=void 0;var l=r(6469),c=r(505),u=r(7875);e.CommonMtableMixin=function(t){return function(t){function e(){for(var e=[],r=0;r1){if(null===e){e=0;var f=h>1&&h===d;try{for(var m=s(this.tableRows),y=m.next();!y.done;y=m.next()){var g;if(g=y.value.getChild(t)){var b=0===(x=g.childNodes[0]).stretch.dir;if(f||b){var v=x.getBBox(b).w;v>e&&(e=v)}}}}catch(t){o={error:t}}finally{try{y&&!y.done&&(i=m.return)&&i.call(m)}finally{if(o)throw o.error}}}try{for(var _=s(c),S=_.next();!S.done;S=_.next()){var x;(x=S.value).coreMO().getStretchedVariant([e])}}catch(t){a={error:t}}finally{try{S&&!S.done&&(l=_.return)&&l.call(_)}finally{if(a)throw a.error}}}},e.prototype.getTableData=function(){if(this.data)return this.data;for(var t=new Array(this.numRows).fill(0),e=new Array(this.numRows).fill(0),r=new Array(this.numCols).fill(0),n=new Array(this.numRows),o=new Array(this.numRows),i=[0],a=this.tableRows,s=0;so[r]&&(o[r]=c),u>i[r]&&(i[r]=u),d>s&&(s=d),a&&p>a[e]&&(a[e]=p),s},e.prototype.extendHD=function(t,e,r,n){var o=(n-(e[t]+r[t]))/2;o<1e-5||(e[t]+=o,r[t]+=o)},e.prototype.recordPWidthCell=function(t,e){t.childNodes[0]&&t.childNodes[0].getBBox().pwidth&&this.pwidthCells.push([t,e])},e.prototype.computeBBox=function(t,e){void 0===e&&(e=!1);var r,n,o=this.getTableData(),a=o.H,s=o.D;if(this.node.attributes.get("equalrows")){var l=this.getEqualRowHeight();r=(0,u.sum)([].concat(this.rLines,this.rSpace))+l*this.numRows}else r=(0,u.sum)(a.concat(s,this.rLines,this.rSpace));r+=2*(this.fLine+this.fSpace[1]);var p=this.getComputedWidths();n=(0,u.sum)(p.concat(this.cLines,this.cSpace))+2*(this.fLine+this.fSpace[0]);var h=this.node.attributes.get("width");"auto"!==h&&(n=Math.max(this.length2em(h,0)+2*this.fLine,n));var d=i(this.getBBoxHD(r),2),f=d[0],m=d[1];t.h=f,t.d=m,t.w=n;var y=i(this.getBBoxLR(),2),g=y[0],b=y[1];t.L=g,t.R=b,(0,c.isPercent)(h)||this.setColumnPWidths()},e.prototype.setChildPWidths=function(t,e,r){var n=this.node.attributes.get("width");if(!(0,c.isPercent)(n))return!1;this.hasLabels||(this.bbox.pwidth="",this.container.bbox.pwidth="");var o=this.bbox,i=o.w,a=o.L,s=o.R,l=this.node.attributes.get("data-width-includes-label"),p=Math.max(i,this.length2em(n,Math.max(e,a+i+s)))-(l?a+s:0),h=this.node.attributes.get("equalcolumns")?Array(this.numCols).fill(this.percent(1/Math.max(1,this.numCols))):this.getColumnAttributes("columnwidth",0);this.cWidths=this.getColumnWidthsFixed(h,p);var d=this.getComputedWidths();return this.pWidth=(0,u.sum)(d.concat(this.cLines,this.cSpace))+2*(this.fLine+this.fSpace[0]),this.isTop&&(this.bbox.w=this.pWidth),this.setColumnPWidths(),this.pWidth!==i&&this.parent.invalidateBBox(),this.pWidth!==i},e.prototype.setColumnPWidths=function(){var t,e,r=this.cWidths;try{for(var n=s(this.pwidthCells),o=n.next();!o.done;o=n.next()){var a=i(o.value,2),l=a[0],c=a[1];l.setChildPWidths(!1,r[c])&&(l.invalidateBBox(),l.getBBox())}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}},e.prototype.getBBoxHD=function(t){var e=i(this.getAlignmentRow(),2),r=e[0],n=e[1];if(null===n){var o=this.font.params.axis_height,a=t/2;return{top:[0,t],center:[a,a],bottom:[t,0],baseline:[a,a],axis:[a+o,a-o]}[r]||[a,a]}var s=this.getVerticalPosition(n,r);return[s,t-s]},e.prototype.getBBoxLR=function(){if(this.hasLabels){var t=this.node.attributes,e=t.get("side"),r=i(this.getPadAlignShift(e),2),n=r[0],o=r[1],a=this.hasLabels&&!!t.get("data-width-includes-label");return a&&this.frame&&this.fSpace[0]&&(n-=this.fSpace[0]),"center"!==o||a?"left"===e?[n,0]:[0,n]:[n,n]}return[0,0]},e.prototype.getPadAlignShift=function(t){var e=this.getTableData().L+this.length2em(this.node.attributes.get("minlabelspacing")),r=i(null==this.styles?["",""]:[this.styles.get("padding-left"),this.styles.get("padding-right")],2),n=r[0],o=r[1];(n||o)&&(e=Math.max(e,this.length2em(n||"0"),this.length2em(o||"0")));var a=i(this.getAlignShift(),2),s=a[0],l=a[1];return s===t&&(l="left"===t?Math.max(e,l)-e:Math.min(-e,l)+e),[e,s,l]},e.prototype.getAlignShift=function(){return this.isTop?t.prototype.getAlignShift.call(this):[this.container.getChildAlign(this.containerI),0]},e.prototype.getWidth=function(){return this.pWidth||this.getBBox().w},e.prototype.getEqualRowHeight=function(){var t=this.getTableData(),e=t.H,r=t.D,n=Array.from(e.keys()).map((function(t){return e[t]+r[t]}));return Math.max.apply(Math,n)},e.prototype.getComputedWidths=function(){var t=this,e=this.getTableData().W,r=Array.from(e.keys()).map((function(r){return"number"==typeof t.cWidths[r]?t.cWidths[r]:e[r]}));return this.node.attributes.get("equalcolumns")&&(r=Array(r.length).fill((0,u.max)(r))),r},e.prototype.getColumnWidths=function(){var t=this.node.attributes.get("width");if(this.node.attributes.get("equalcolumns"))return this.getEqualColumns(t);var e=this.getColumnAttributes("columnwidth",0);return"auto"===t?this.getColumnWidthsAuto(e):(0,c.isPercent)(t)?this.getColumnWidthsPercent(e):this.getColumnWidthsFixed(e,this.length2em(t))},e.prototype.getEqualColumns=function(t){var e,r=Math.max(1,this.numCols);if("auto"===t){var n=this.getTableData().W;e=(0,u.max)(n)}else if((0,c.isPercent)(t))e=this.percent(1/r);else{var o=(0,u.sum)([].concat(this.cLines,this.cSpace))+2*this.fSpace[0];e=Math.max(0,this.length2em(t)-o)/r}return Array(this.numCols).fill(e)},e.prototype.getColumnWidthsAuto=function(t){var e=this;return t.map((function(t){return"auto"===t||"fit"===t?null:(0,c.isPercent)(t)?t:e.length2em(t)}))},e.prototype.getColumnWidthsPercent=function(t){var e=this,r=t.indexOf("fit")>=0,n=(r?this.getTableData():{W:null}).W;return Array.from(t.keys()).map((function(o){var i=t[o];return"fit"===i?null:"auto"===i?r?n[o]:null:(0,c.isPercent)(i)?i:e.length2em(i)}))},e.prototype.getColumnWidthsFixed=function(t,e){var r=this,n=Array.from(t.keys()),o=n.filter((function(e){return"fit"===t[e]})),i=n.filter((function(e){return"auto"===t[e]})),a=o.length||i.length,s=(a?this.getTableData():{W:null}).W,l=e-(0,u.sum)([].concat(this.cLines,this.cSpace))-2*this.fSpace[0],c=l;n.forEach((function(e){var n=t[e];c-="fit"===n||"auto"===n?s[e]:r.length2em(n,l)}));var p=a&&c>0?c/a:0;return n.map((function(e){var n=t[e];return"fit"===n?s[e]+p:"auto"===n?s[e]+(0===o.length?p:0):r.length2em(n,l)}))},e.prototype.getVerticalPosition=function(t,e){for(var r=this.node.attributes.get("equalrows"),n=this.getTableData(),o=n.H,a=n.D,s=r?this.getEqualRowHeight():0,l=this.getRowHalfSpacing(),c=this.fLine,u=0;uthis.numRows?null:n-1]},e.prototype.getColumnAttributes=function(t,e){void 0===e&&(e=1);var r=this.numCols-e,n=this.getAttributeArray(t);if(0===n.length)return null;for(;n.lengthr&&n.splice(r),n},e.prototype.getRowAttributes=function(t,e){void 0===e&&(e=1);var r=this.numRows-e,n=this.getAttributeArray(t);if(0===n.length)return null;for(;n.lengthr&&n.splice(r),n},e.prototype.getAttributeArray=function(t){var e=this.node.attributes.get(t);return e?(0,c.split)(e):[this.node.attributes.getDefault(t)]},e.prototype.addEm=function(t,e){var r=this;return void 0===e&&(e=1),t?t.map((function(t){return r.em(t/e)})):null},e.prototype.convertLengths=function(t){var e=this;return t?t.map((function(t){return e.length2em(t)})):null},e}(t)}},5164:function(t,e){var r,n=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.CommonMtdMixin=void 0,e.CommonMtdMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),Object.defineProperty(e.prototype,"fixesPWidth",{get:function(){return!1},enumerable:!1,configurable:!0}),e.prototype.invalidateBBox=function(){this.bboxComputed=!1},e.prototype.getWrapWidth=function(t){var e=this.parent.parent,r=this.parent,n=this.node.childPosition()-(r.labeled?1:0);return"number"==typeof e.cWidths[n]?e.cWidths[n]:e.getTableData().W[n]},e.prototype.getChildAlign=function(t){return this.node.attributes.get("columnalign")},e}(t)}},6319:function(t,e){var r,n=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.CommonMtextMixin=void 0,e.CommonMtextMixin=function(t){var e;return e=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.getVariant=function(){var e=this.jax.options,r=this.jax.math.outputData,n=(!!r.merrorFamily||!!e.merrorFont)&&this.node.Parent.isKind("merror");if(r.mtextFamily||e.mtextFont||n){var o=this.node.attributes.get("mathvariant"),i=this.constructor.INHERITFONTS[o]||this.jax.font.getCssFont(o),a=i[0]||(n?r.merrorFamily||e.merrorFont:r.mtextFamily||e.mtextFont);this.variant=this.explicitVariant(a,i[2]?"bold":"",i[1]?"italic":"")}else t.prototype.getVariant.call(this)},e}(t),e.INHERITFONTS={normal:["",!1,!1],bold:["",!1,!0],italic:["",!0,!1],"bold-italic":["",!0,!0]},e}},5766:function(t,e){var r,n=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.CommonMlabeledtrMixin=e.CommonMtrMixin=void 0,e.CommonMtrMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),Object.defineProperty(e.prototype,"fixesPWidth",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"numCells",{get:function(){return this.childNodes.length},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"labeled",{get:function(){return!1},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"tableCells",{get:function(){return this.childNodes},enumerable:!1,configurable:!0}),e.prototype.getChild=function(t){return this.childNodes[t]},e.prototype.getChildBBoxes=function(){return this.childNodes.map((function(t){return t.getBBox()}))},e.prototype.stretchChildren=function(t){var e,r,n,i,a,s;void 0===t&&(t=null);var l=[],c=this.labeled?this.childNodes.slice(1):this.childNodes;try{for(var u=o(c),p=u.next();!p.done;p=u.next()){(E=p.value.childNodes[0]).canStretch(1)&&l.push(E)}}catch(t){e={error:t}}finally{try{p&&!p.done&&(r=u.return)&&r.call(u)}finally{if(e)throw e.error}}var h=l.length,d=this.childNodes.length;if(h&&d>1){if(null===t){var f=0,m=0,y=h>1&&h===d;try{for(var g=o(c),b=g.next();!b.done;b=g.next()){var v=0===(E=b.value.childNodes[0]).stretch.dir;if(y||v){var _=E.getBBox(v),S=_.h,x=_.d;S>f&&(f=S),x>m&&(m=x)}}}catch(t){n={error:t}}finally{try{b&&!b.done&&(i=g.return)&&i.call(g)}finally{if(n)throw n.error}}t=[f,m]}try{for(var M=o(l),O=M.next();!O.done;O=M.next()){var E;(E=O.value).coreMO().getStretchedVariant(t)}}catch(t){a={error:t}}finally{try{O&&!O.done&&(s=M.return)&&s.call(M)}finally{if(a)throw a.error}}}},e}(t)},e.CommonMlabeledtrMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),Object.defineProperty(e.prototype,"numCells",{get:function(){return Math.max(0,this.childNodes.length-1)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"labeled",{get:function(){return!0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"tableCells",{get:function(){return this.childNodes.slice(1)},enumerable:!1,configurable:!0}),e.prototype.getChild=function(t){return this.childNodes[t+1]},e.prototype.getChildBBoxes=function(){return this.childNodes.slice(1).map((function(t){return t.getBBox()}))},e}(t)}},1971:function(t,e){var r,n=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),o=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},i=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.CommonScriptbaseMixin=void 0;var l=r(9007);e.CommonScriptbaseMixin=function(t){var e;return e=function(t){function e(){for(var e=[],r=0;r1){var h=0,d=u>1&&u===p;try{for(var f=s(this.childNodes),m=f.next();!m.done;m=f.next()){var y=0===(x=m.value).stretch.dir;if(d||y){var g=x.getOuterBBox(y),b=g.w,v=g.rscale;b*v>h&&(h=b*v)}}}catch(t){r={error:t}}finally{try{m&&!m.done&&(n=f.return)&&n.call(f)}finally{if(r)throw r.error}}try{for(var _=s(a),S=_.next();!S.done;S=_.next()){var x;(x=S.value).coreMO().getStretchedVariant([h/x.bbox.rscale])}}catch(t){o={error:t}}finally{try{S&&!S.done&&(i=_.return)&&i.call(_)}finally{if(o)throw o.error}}}},e}(t),e.useIC=!0,e}},5806:function(t,e){var r,n=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0}),e.CommonSemanticsMixin=void 0,e.CommonSemanticsMixin=function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.computeBBox=function(t,e){if(void 0===e&&(e=!1),this.childNodes.length){var r=this.childNodes[0].getBBox(),n=r.w,o=r.h,i=r.d;t.w=n,t.h=o,t.d=i}},e}(t)}},5920:function(t,e){var r,n=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),o=this&&this.__assign||function(){return o=Object.assign||function(t){for(var e,r=1,n=arguments.length;r0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(e,"__esModule",{value:!0}),e.MJContextMenu=void 0;var s=r(5073),l=r(6186),c=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.mathItem=null,e.annotation="",e.annotationTypes={},e}return o(e,t),e.prototype.post=function(e,r){if(this.mathItem){if(void 0!==r){var n=this.mathItem.inputJax.name,o=this.findID("Show","Original");o.content="MathML"===n?"Original MathML":n+" Commands",this.findID("Copy","Original").content=o.content;var i=this.findID("Settings","semantics");"MathML"===n?i.disable():i.enable(),this.getAnnotationMenu(),this.dynamicSubmenus()}t.prototype.post.call(this,e,r)}},e.prototype.unpost=function(){t.prototype.unpost.call(this),this.mathItem=null},e.prototype.findID=function(){for(var t,e,r=[],n=0;n=0)return s}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}return null},e.prototype.createAnnotationMenu=function(t,e,r){var n=this,o=this.findID(t,"Annotation");o.submenu=this.factory.get("subMenu")(this.factory,{items:e.map((function(t){var e=a(t,2),o=e[0],i=e[1];return{type:"command",id:o,content:o,action:function(){n.annotation=i,r()}}})),id:"annotations"},o),e.length?o.enable():o.disable()},e.prototype.dynamicSubmenus=function(){var t,r;try{for(var n=i(e.DynamicSubmenus),o=n.next();!o.done;o=n.next()){var s=a(o.value,2),l=s[0],c=s[1],u=this.find(l);if(u){var p=c(this,u);u.submenu=p,p.items.length?u.enable():u.disable()}}}catch(e){t={error:e}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}},e.DynamicSubmenus=new Map,e}(s.ContextMenu);e.MJContextMenu=c},8310:function(t,e,r){var n=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.Menu=void 0;var a=r(5713),s=r(4474),l=r(9515),c=r(7233),u=r(5865),p=r(473),h=r(4414),d=r(4922),f=r(6914),m=r(3463),y=r(7309),g=i(r(5445)),b=l.MathJax,v="undefined"!=typeof window&&window.navigator&&"Mac"===window.navigator.platform.substr(0,3),_=function(){function t(t,e){void 0===e&&(e={});var r=this;this.settings=null,this.defaultSettings=null,this.menu=null,this.MmlVisitor=new p.MmlVisitor,this.jax={CHTML:null,SVG:null},this.rerenderStart=s.STATE.LAST,this.about=new d.Info('MathJax v'+a.mathjax.version,(function(){var t=[];return t.push("Input Jax: "+r.document.inputJax.map((function(t){return t.name})).join(", ")),t.push("Output Jax: "+r.document.outputJax.name),t.push("Document Type: "+r.document.kind),t.join("
    ")}),'
    www.mathjax.org'),this.help=new d.Info("MathJax Help",(function(){return["

    MathJax is a JavaScript library that allows page"," authors to include mathematics within their web pages."," As a reader, you don't need to do anything to make that happen.

    ","

    Browsers: MathJax works with all modern browsers including"," Edge, Firefox, Chrome, Safari, Opera, and most mobile browsers.

    ","

    Math Menu: MathJax adds a contextual menu to equations."," Right-click or CTRL-click on any mathematics to access the menu.

    ",'
    ',"

    Show Math As: These options allow you to view the formula's"," source markup (as MathML or in its original format).

    ","

    Copy to Clipboard: These options copy the formula's source markup,"," as MathML or in its original format, to the clipboard"," (in browsers that support that).

    ","

    Math Settings: These give you control over features of MathJax,"," such the size of the mathematics, and the mechanism used"," to display equations.

    ","

    Accessibility: MathJax can work with screen"," readers to make mathematics accessible to the visually impaired."," Turn on the explorer to enable generation of speech strings"," and the ability to investigate expressions interactively.

    ","

    Language: This menu lets you select the language used by MathJax"," for its menus and warning messages. (Not yet implemented in version 3.)

    ","
    ","

    Math Zoom: If you are having difficulty reading an"," equation, MathJax can enlarge it to help you see it better, or"," you can scall all the math on the page to make it larger."," Turn these features on in the Math Settings menu.

    ","

    Preferences: MathJax uses your browser's localStorage database"," to save the preferences set via this menu locally in your browser. These"," are not used to track you, and are not transferred or used remotely by"," MathJax in any way.

    "].join("\n")}),'www.mathjax.org'),this.mathmlCode=new h.SelectableInfo("MathJax MathML Expression",(function(){if(!r.menu.mathItem)return"";var t=r.toMML(r.menu.mathItem);return"
    "+r.formatSource(t)+"
    "}),""),this.originalText=new h.SelectableInfo("MathJax Original Source",(function(){if(!r.menu.mathItem)return"";var t=r.menu.mathItem.math;return'
    '+r.formatSource(t)+"
    "}),""),this.annotationText=new h.SelectableInfo("MathJax Annotation Text",(function(){if(!r.menu.mathItem)return"";var t=r.menu.annotation;return'
    '+r.formatSource(t)+"
    "}),""),this.zoomBox=new d.Info("MathJax Zoomed Expression",(function(){if(!r.menu.mathItem)return"";var t=r.menu.mathItem.typesetRoot.cloneNode(!0);return t.style.margin="0",'
    '+t.outerHTML+"
    "}),""),this.document=t,this.options=(0,c.userOptions)((0,c.defaultOptions)({},this.constructor.OPTIONS),e),this.initSettings(),this.mergeUserSettings(),this.initMenu(),this.applySettings()}return Object.defineProperty(t.prototype,"isLoading",{get:function(){return t.loading>0},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"loadingPromise",{get:function(){return this.isLoading?(t._loadingPromise||(t._loadingPromise=new Promise((function(e,r){t._loadingOK=e,t._loadingFailed=r}))),t._loadingPromise):Promise.resolve()},enumerable:!1,configurable:!0}),t.prototype.initSettings=function(){this.settings=this.options.settings,this.jax=this.options.jax;var t=this.document.outputJax;this.jax[t.name]=t,this.settings.renderer=t.name,b._.a11y&&b._.a11y.explorer&&Object.assign(this.settings,this.document.options.a11y),this.settings.scale=t.options.scale,this.defaultSettings=Object.assign({},this.settings)},t.prototype.initMenu=function(){var t=this,e=new f.Parser([["contextMenu",u.MJContextMenu.fromJson.bind(u.MJContextMenu)]]);this.menu=e.parse({type:"contextMenu",id:"MathJax_Menu",pool:[this.variable("texHints"),this.variable("semantics"),this.variable("zoom"),this.variable("zscale"),this.variable("renderer",(function(e){return t.setRenderer(e)})),this.variable("alt"),this.variable("cmd"),this.variable("ctrl"),this.variable("shift"),this.variable("scale",(function(e){return t.setScale(e)})),this.variable("explorer",(function(e){return t.setExplorer(e)})),this.a11yVar("highlight"),this.a11yVar("backgroundColor"),this.a11yVar("backgroundOpacity"),this.a11yVar("foregroundColor"),this.a11yVar("foregroundOpacity"),this.a11yVar("speech"),this.a11yVar("subtitles"),this.a11yVar("braille"),this.a11yVar("viewBraille"),this.a11yVar("locale",(function(t){return g.default.setupEngine({locale:t})})),this.a11yVar("speechRules",(function(e){var r=n(e.split("-"),2),o=r[0],i=r[1];t.document.options.sre.domain=o,t.document.options.sre.style=i})),this.a11yVar("magnification"),this.a11yVar("magnify"),this.a11yVar("treeColoring"),this.a11yVar("infoType"),this.a11yVar("infoRole"),this.a11yVar("infoPrefix"),this.variable("autocollapse"),this.variable("collapsible",(function(e){return t.setCollapsible(e)})),this.variable("inTabOrder",(function(e){return t.setTabOrder(e)})),this.variable("assistiveMml",(function(e){return t.setAssistiveMml(e)}))],items:[this.submenu("Show","Show Math As",[this.command("MathMLcode","MathML Code",(function(){return t.mathmlCode.post()})),this.command("Original","Original Form",(function(){return t.originalText.post()})),this.submenu("Annotation","Annotation")]),this.submenu("Copy","Copy to Clipboard",[this.command("MathMLcode","MathML Code",(function(){return t.copyMathML()})),this.command("Original","Original Form",(function(){return t.copyOriginal()})),this.submenu("Annotation","Annotation")]),this.rule(),this.submenu("Settings","Math Settings",[this.submenu("Renderer","Math Renderer",this.radioGroup("renderer",[["CHTML"],["SVG"]])),this.rule(),this.submenu("ZoomTrigger","Zoom Trigger",[this.command("ZoomNow","Zoom Once Now",(function(){return t.zoom(null,"",t.menu.mathItem)})),this.rule(),this.radioGroup("zoom",[["Click"],["DoubleClick","Double-Click"],["NoZoom","No Zoom"]]),this.rule(),this.label("TriggerRequires","Trigger Requires:"),this.checkbox(v?"Option":"Alt",v?"Option":"Alt","alt"),this.checkbox("Command","Command","cmd",{hidden:!v}),this.checkbox("Control","Control","ctrl",{hiddne:v}),this.checkbox("Shift","Shift","shift")]),this.submenu("ZoomFactor","Zoom Factor",this.radioGroup("zscale",[["150%"],["175%"],["200%"],["250%"],["300%"],["400%"]])),this.rule(),this.command("Scale","Scale All Math...",(function(){return t.scaleAllMath()})),this.rule(),this.checkbox("texHints","Add TeX hints to MathML","texHints"),this.checkbox("semantics","Add original as annotation","semantics"),this.rule(),this.command("Reset","Reset to defaults",(function(){return t.resetDefaults()}))]),this.submenu("Accessibility","Accessibility",[this.checkbox("Activate","Activate","explorer"),this.submenu("Speech","Speech",[this.checkbox("Speech","Speech Output","speech"),this.checkbox("Subtitles","Speech Subtitles","subtitles"),this.checkbox("Braille","Braille Output","braille"),this.checkbox("View Braille","Braille Subtitles","viewBraille"),this.rule(),this.submenu("A11yLanguage","Language"),this.rule(),this.submenu("Mathspeak","Mathspeak Rules",this.radioGroup("speechRules",[["mathspeak-default","Verbose"],["mathspeak-brief","Brief"],["mathspeak-sbrief","Superbrief"]])),this.submenu("Clearspeak","Clearspeak Rules",this.radioGroup("speechRules",[["clearspeak-default","Auto"]])),this.submenu("ChromeVox","ChromeVox Rules",this.radioGroup("speechRules",[["chromevox-default","Standard"],["chromevox-alternative","Alternative"]]))]),this.submenu("Highlight","Highlight",[this.submenu("Background","Background",this.radioGroup("backgroundColor",[["Blue"],["Red"],["Green"],["Yellow"],["Cyan"],["Magenta"],["White"],["Black"]])),{type:"slider",variable:"backgroundOpacity",content:" "},this.submenu("Foreground","Foreground",this.radioGroup("foregroundColor",[["Black"],["White"],["Magenta"],["Cyan"],["Yellow"],["Green"],["Red"],["Blue"]])),{type:"slider",variable:"foregroundOpacity",content:" "},this.rule(),this.radioGroup("highlight",[["None"],["Hover"],["Flame"]]),this.rule(),this.checkbox("TreeColoring","Tree Coloring","treeColoring")]),this.submenu("Magnification","Magnification",[this.radioGroup("magnification",[["None"],["Keyboard"],["Mouse"]]),this.rule(),this.radioGroup("magnify",[["200%"],["300%"],["400%"],["500%"]])]),this.submenu("Semantic Info","Semantic Info",[this.checkbox("Type","Type","infoType"),this.checkbox("Role","Role","infoRole"),this.checkbox("Prefix","Prefix","infoPrefix")],!0),this.rule(),this.checkbox("Collapsible","Collapsible Math","collapsible"),this.checkbox("AutoCollapse","Auto Collapse","autocollapse",{disabled:!0}),this.rule(),this.checkbox("InTabOrder","Include in Tab Order","inTabOrder"),this.checkbox("AssistiveMml","Include Hidden MathML","assistiveMml")]),this.submenu("Language","Language"),this.rule(),this.command("About","About MathJax",(function(){return t.about.post()})),this.command("Help","MathJax Help",(function(){return t.help.post()}))]});var r=this.menu;this.about.attachMenu(r),this.help.attachMenu(r),this.originalText.attachMenu(r),this.annotationText.attachMenu(r),this.mathmlCode.attachMenu(r),this.zoomBox.attachMenu(r),this.checkLoadableItems(),this.enableExplorerItems(this.settings.explorer),r.showAnnotation=this.annotationText,r.copyAnnotation=this.copyAnnotation.bind(this),r.annotationTypes=this.options.annotationTypes,y.CssStyles.addInfoStyles(this.document.document),y.CssStyles.addMenuStyles(this.document.document)},t.prototype.checkLoadableItems=function(){var t,e;if(b&&b._&&b.loader&&b.startup)!this.settings.collapsible||b._.a11y&&b._.a11y.complexity||this.loadA11y("complexity"),!this.settings.explorer||b._.a11y&&b._.a11y.explorer||this.loadA11y("explorer"),!this.settings.assistiveMml||b._.a11y&&b._.a11y["assistive-mml"]||this.loadA11y("assistive-mml");else{var r=this.menu;try{for(var n=o(Object.keys(this.jax)),i=n.next();!i.done;i=n.next()){var a=i.value;this.jax[a]||r.findID("Settings","Renderer",a).disable()}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}r.findID("Accessibility","Activate").disable(),r.findID("Accessibility","AutoCollapse").disable(),r.findID("Accessibility","Collapsible").disable()}},t.prototype.enableExplorerItems=function(t){var e,r,n=this.menu.findID("Accessibility","Activate").menu;try{for(var i=o(n.items.slice(1)),a=i.next();!a.done;a=i.next()){var s=a.value;if(s instanceof m.Rule)break;t?s.enable():s.disable()}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}},t.prototype.mergeUserSettings=function(){try{var e=localStorage.getItem(t.MENU_STORAGE);if(!e)return;Object.assign(this.settings,JSON.parse(e)),this.setA11y(this.settings)}catch(t){console.log("MathJax localStorage error: "+t.message)}},t.prototype.saveUserSettings=function(){var e,r,n={};try{for(var i=o(Object.keys(this.settings)),a=i.next();!a.done;a=i.next()){var s=a.value;this.settings[s]!==this.defaultSettings[s]&&(n[s]=this.settings[s])}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}try{Object.keys(n).length?localStorage.setItem(t.MENU_STORAGE,JSON.stringify(n)):localStorage.removeItem(t.MENU_STORAGE)}catch(t){console.log("MathJax localStorage error: "+t.message)}},t.prototype.setA11y=function(t){b._.a11y&&b._.a11y.explorer&&b._.a11y.explorer_ts.setA11yOptions(this.document,t)},t.prototype.getA11y=function(t){if(b._.a11y&&b._.a11y.explorer)return void 0!==this.document.options.a11y[t]?this.document.options.a11y[t]:this.document.options.sre[t]},t.prototype.applySettings=function(){this.setTabOrder(this.settings.inTabOrder),this.document.options.enableAssistiveMml=this.settings.assistiveMml,this.document.outputJax.options.scale=parseFloat(this.settings.scale),this.settings.renderer!==this.defaultSettings.renderer&&this.setRenderer(this.settings.renderer)},t.prototype.setScale=function(t){this.document.outputJax.options.scale=parseFloat(t),this.document.rerender()},t.prototype.setRenderer=function(t){var e=this;if(this.jax[t])this.setOutputJax(t);else{var r=t.toLowerCase();this.loadComponent("output/"+r,(function(){var n=b.startup;r in n.constructors&&(n.useOutput(r,!0),n.output=n.getOutputJax(),e.jax[t]=n.output,e.setOutputJax(t))}))}},t.prototype.setOutputJax=function(t){this.jax[t].setAdaptor(this.document.adaptor),this.document.outputJax=this.jax[t],this.rerender()},t.prototype.setTabOrder=function(t){this.menu.store.inTaborder(t)},t.prototype.setAssistiveMml=function(t){this.document.options.enableAssistiveMml=t,!t||b._.a11y&&b._.a11y["assistive-mml"]?this.rerender():this.loadA11y("assistive-mml")},t.prototype.setExplorer=function(t){this.enableExplorerItems(t),this.document.options.enableExplorer=t,!t||b._.a11y&&b._.a11y.explorer?this.rerender(this.settings.collapsible?s.STATE.RERENDER:s.STATE.COMPILED):this.loadA11y("explorer")},t.prototype.setCollapsible=function(t){this.document.options.enableComplexity=t,!t||b._.a11y&&b._.a11y.complexity?this.rerender(s.STATE.COMPILED):this.loadA11y("complexity")},t.prototype.scaleAllMath=function(){var t=(100*parseFloat(this.settings.scale)).toFixed(1).replace(/.0$/,""),e=prompt("Scale all mathematics (compared to surrounding text) by",t+"%");if(e)if(e.match(/^\s*\d+(\.\d*)?\s*%?\s*$/)){var r=parseFloat(e)/100;r?this.menu.pool.lookup("scale").setValue(String(r)):alert("The scale should not be zero")}else alert("The scale should be a percentage (e.g., 120%)")},t.prototype.resetDefaults=function(){var e,r;t.loading++;var n=this.menu.pool,i=this.defaultSettings;try{for(var a=o(Object.keys(this.settings)),l=a.next();!l.done;l=a.next()){var c=l.value,u=n.lookup(c);if(u){u.setValue(i[c]);var p=u.items[0];p&&p.executeCallbacks_()}else this.settings[c]=i[c]}}catch(t){e={error:t}}finally{try{l&&!l.done&&(r=a.return)&&r.call(a)}finally{if(e)throw e.error}}t.loading--,this.rerender(s.STATE.COMPILED)},t.prototype.checkComponent=function(e){var r=t.loadingPromises.get(e);r&&a.mathjax.retryAfter(r)},t.prototype.loadComponent=function(e,r){if(!t.loadingPromises.has(e)){var n=b.loader;if(n){t.loading++;var o=n.load(e).then((function(){t.loading--,t.loadingPromises.delete(e),r(),0===t.loading&&t._loadingPromise&&(t._loadingPromise=null,t._loadingOK())})).catch((function(e){t._loadingPromise?(t._loadingPromise=null,t._loadingFailed(e)):console.log(e)}));t.loadingPromises.set(e,o)}}},t.prototype.loadA11y=function(e){var r=this,n=!s.STATE.ENRICHED;this.loadComponent("a11y/"+e,(function(){var o=b.startup;a.mathjax.handlers.unregister(o.handler),o.handler=o.getHandler(),a.mathjax.handlers.register(o.handler);var i=r.document;r.document=o.document=o.getDocument(),r.document.menu=r,r.document.outputJax.reset(),r.transferMathList(i),r.document.processed=i.processed,t._loadingPromise||(r.document.outputJax.reset(),r.rerender("complexity"===e||n?s.STATE.COMPILED:s.STATE.TYPESET))}))},t.prototype.transferMathList=function(t){var e,r,n=this.document.options.MathItem;try{for(var i=o(t.math),a=i.next();!a.done;a=i.next()){var s=a.value,l=new n;Object.assign(l,s),this.document.math.push(l)}}catch(t){e={error:t}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(e)throw e.error}}},t.prototype.formatSource=function(t){return t.trim().replace(/&/g,"&").replace(//g,">")},t.prototype.toMML=function(t){return this.MmlVisitor.visitTree(t.root,t,{texHints:this.settings.texHints,semantics:this.settings.semantics&&"MathML"!==t.inputJax.name})},t.prototype.zoom=function(t,e,r){t&&!this.isZoomEvent(t,e)||(this.menu.mathItem=r,t&&this.menu.post(t),this.zoomBox.post())},t.prototype.isZoomEvent=function(t,e){return this.settings.zoom===e&&(!this.settings.alt||t.altKey)&&(!this.settings.ctrl||t.ctrlKey)&&(!this.settings.cmd||t.metaKey)&&(!this.settings.shift||t.shiftKey)},t.prototype.rerender=function(e){void 0===e&&(e=s.STATE.TYPESET),this.rerenderStart=Math.min(e,this.rerenderStart),t.loading||(this.rerenderStart<=s.STATE.COMPILED&&this.document.reset({inputJax:[]}),this.document.rerender(this.rerenderStart),this.rerenderStart=s.STATE.LAST)},t.prototype.copyMathML=function(){this.copyToClipboard(this.toMML(this.menu.mathItem))},t.prototype.copyOriginal=function(){this.copyToClipboard(this.menu.mathItem.math.trim())},t.prototype.copyAnnotation=function(){this.copyToClipboard(this.menu.annotation.trim())},t.prototype.copyToClipboard=function(t){var e=document.createElement("textarea");e.value=t,e.setAttribute("readonly",""),e.style.cssText="height: 1px; width: 1px; padding: 1px; position: absolute; left: -10px",document.body.appendChild(e),e.select();try{document.execCommand("copy")}catch(t){alert("Can't copy to clipboard: "+t.message)}document.body.removeChild(e)},t.prototype.addMenu=function(t){var e=this,r=t.typesetRoot;r.addEventListener("contextmenu",(function(){return e.menu.mathItem=t}),!0),r.addEventListener("keydown",(function(){return e.menu.mathItem=t}),!0),r.addEventListener("click",(function(r){return e.zoom(r,"Click",t)}),!0),r.addEventListener("dblclick",(function(r){return e.zoom(r,"DoubleClick",t)}),!0),this.menu.store.insert(r)},t.prototype.clear=function(){this.menu.store.clear()},t.prototype.variable=function(t,e){var r=this;return{name:t,getter:function(){return r.settings[t]},setter:function(n){r.settings[t]=n,e&&e(n),r.saveUserSettings()}}},t.prototype.a11yVar=function(t,e){var r=this;return{name:t,getter:function(){return r.getA11y(t)},setter:function(n){r.settings[t]=n;var o={};o[t]=n,r.setA11y(o),e&&e(n),r.saveUserSettings()}}},t.prototype.submenu=function(t,e,r,n){var i,a;void 0===r&&(r=[]),void 0===n&&(n=!1);var s=[];try{for(var l=o(r),c=l.next();!c.done;c=l.next()){var u=c.value;Array.isArray(u)?s=s.concat(u):s.push(u)}}catch(t){i={error:t}}finally{try{c&&!c.done&&(a=l.return)&&a.call(l)}finally{if(i)throw i.error}}return{type:"submenu",id:t,content:e,menu:{items:s},disabled:0===s.length||n}},t.prototype.command=function(t,e,r,n){return void 0===n&&(n={}),Object.assign({type:"command",id:t,content:e,action:r},n)},t.prototype.checkbox=function(t,e,r,n){return void 0===n&&(n={}),Object.assign({type:"checkbox",id:t,content:e,variable:r},n)},t.prototype.radioGroup=function(t,e){var r=this;return e.map((function(e){return r.radio(e[0],e[1]||e[0],t)}))},t.prototype.radio=function(t,e,r,n){return void 0===n&&(n={}),Object.assign({type:"radio",id:t,content:e,variable:r},n)},t.prototype.label=function(t,e){return{type:"label",id:t,content:e}},t.prototype.rule=function(){return{type:"rule"}},t.MENU_STORAGE="MathJax-Menu-Settings",t.OPTIONS={settings:{texHints:!0,semantics:!1,zoom:"NoZoom",zscale:"200%",renderer:"CHTML",alt:!1,cmd:!1,ctrl:!1,shift:!1,scale:1,autocollapse:!1,collapsible:!1,inTabOrder:!0,assistiveMml:!0,explorer:!1},jax:{CHTML:null,SVG:null},annotationTypes:(0,c.expandable)({TeX:["TeX","LaTeX","application/x-tex"],StarMath:["StarMath 5.0"],Maple:["Maple"],ContentMathML:["MathML-Content","application/mathml-content+xml"],OpenMath:["OpenMath"]})},t.loading=0,t.loadingPromises=new Map,t._loadingPromise=null,t._loadingOK=null,t._loadingFailed=null,t}();e.Menu=_},4001:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},s=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.MenuHandler=e.MenuMathDocumentMixin=e.MenuMathItemMixin=void 0;var c=r(5713),u=r(4474),p=r(7233),h=r(8310);function d(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.addMenu=function(t,e){void 0===e&&(e=!1),this.state()>=u.STATE.CONTEXT_MENU||(this.isEscaped||!t.options.enableMenu&&!e||t.menu.addMenu(this),this.state(u.STATE.CONTEXT_MENU))},e.prototype.checkLoading=function(t){t.checkLoading()},e}(t)}function f(t){var e;return e=function(t){function e(){for(var e=[],r=0;r\n"+this.childNodeMml(e,r+" ","\n")+r+""},e.prototype.visitMathNode=function(e,r){if(!this.options.semantics||"TeX"!==this.mathItem.inputJax.name)return t.prototype.visitDefault.call(this,e,r);var n=e.childNodes.length&&e.childNodes[0].childNodes.length>1;return r+"\n"+r+" \n"+(n?r+" \n":"")+this.childNodeMml(e,r+(n?" ":" "),"\n")+(n?r+" \n":"")+r+' '+this.mathItem.math+"\n"+r+" \n"+r+""},e}(i.SerializedMmlVisitor);e.MmlVisitor=s},4414:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.SelectableInfo=void 0;var i=r(4922),a=r(2165),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.addEvents=function(t){var e=this;t.addEventListener("keypress",(function(t){"a"===t.key&&(t.ctrlKey||t.metaKey)&&(e.selectAll(),e.stop(t))}))},e.prototype.selectAll=function(){document.getSelection().selectAllChildren(this.html.querySelector("pre"))},e.prototype.copyToClipboard=function(){this.selectAll();try{document.execCommand("copy")}catch(t){alert("Can't copy to clipboard: "+t.message)}document.getSelection().removeAllRanges()},e.prototype.generateHtml=function(){var e=this;t.prototype.generateHtml.call(this);var r=this.html.querySelector("span."+a.HtmlClasses.INFOSIGNATURE).appendChild(document.createElement("input"));r.type="button",r.value="Copy to Clipboard",r.addEventListener("click",(function(t){return e.copyToClipboard()}))},e}(i.Info);e.SelectableInfo=s},9923:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.asyncLoad=void 0;var n=r(5713);e.asyncLoad=function(t){return n.mathjax.asyncLoad?new Promise((function(e,r){var o=n.mathjax.asyncLoad(t);o instanceof Promise?o.then((function(t){return e(t)})).catch((function(t){return r(t)})):e(o)})):Promise.reject("Can't load '".concat(t,"': No asyncLoad method specified"))}},6469:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.BBox=void 0;var n=r(6010),o=function(){function t(t){void 0===t&&(t={w:0,h:-n.BIGDIMEN,d:-n.BIGDIMEN}),this.w=t.w||0,this.h="h"in t?t.h:-n.BIGDIMEN,this.d="d"in t?t.d:-n.BIGDIMEN,this.L=this.R=this.ic=this.sk=this.dx=0,this.scale=this.rscale=1,this.pwidth=""}return t.zero=function(){return new t({h:0,d:0,w:0})},t.empty=function(){return new t},t.prototype.empty=function(){return this.w=0,this.h=this.d=-n.BIGDIMEN,this},t.prototype.clean=function(){this.w===-n.BIGDIMEN&&(this.w=0),this.h===-n.BIGDIMEN&&(this.h=0),this.d===-n.BIGDIMEN&&(this.d=0)},t.prototype.rescale=function(t){this.w*=t,this.h*=t,this.d*=t},t.prototype.combine=function(t,e,r){void 0===e&&(e=0),void 0===r&&(r=0);var n=t.rscale,o=e+n*(t.w+t.L+t.R),i=r+n*t.h,a=n*t.d-r;o>this.w&&(this.w=o),i>this.h&&(this.h=i),a>this.d&&(this.d=a)},t.prototype.append=function(t){var e=t.rscale;this.w+=e*(t.w+t.L+t.R),e*t.h>this.h&&(this.h=e*t.h),e*t.d>this.d&&(this.d=e*t.d)},t.prototype.updateFrom=function(t){this.h=t.h,this.d=t.d,this.w=t.w,t.pwidth&&(this.pwidth=t.pwidth)},t.fullWidth="100%",t.StyleAdjust=[["borderTopWidth","h"],["borderRightWidth","w"],["borderBottomWidth","d"],["borderLeftWidth","w",0],["paddingTop","h"],["paddingRight","w"],["paddingBottom","d"],["paddingLeft","w",0]],t}();e.BBox=o},6751:function(t,e){var r,n=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),o=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},i=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o",gtdot:"\u22d7",harrw:"\u21ad",hbar:"\u210f",hellip:"\u2026",hookleftarrow:"\u21a9",hookrightarrow:"\u21aa",imath:"\u0131",infin:"\u221e",intcal:"\u22ba",iota:"\u03b9",jmath:"\u0237",kappa:"\u03ba",kappav:"\u03f0",lEg:"\u2a8b",lambda:"\u03bb",lap:"\u2a85",larrlp:"\u21ab",larrtl:"\u21a2",lbrace:"{",lbrack:"[",le:"\u2264",leftleftarrows:"\u21c7",leftthreetimes:"\u22cb",lessdot:"\u22d6",lmoust:"\u23b0",lnE:"\u2268",lnap:"\u2a89",lne:"\u2a87",lnsim:"\u22e6",longmapsto:"\u27fc",looparrowright:"\u21ac",lowast:"\u2217",loz:"\u25ca",lt:"<",ltimes:"\u22c9",ltri:"\u25c3",macr:"\xaf",malt:"\u2720",mho:"\u2127",mu:"\u03bc",multimap:"\u22b8",nLeftarrow:"\u21cd",nLeftrightarrow:"\u21ce",nRightarrow:"\u21cf",nVDash:"\u22af",nVdash:"\u22ae",natur:"\u266e",nearr:"\u2197",nharr:"\u21ae",nlarr:"\u219a",not:"\xac",nrarr:"\u219b",nu:"\u03bd",nvDash:"\u22ad",nvdash:"\u22ac",nwarr:"\u2196",omega:"\u03c9",omicron:"\u03bf",or:"\u2228",osol:"\u2298",period:".",phi:"\u03c6",phiv:"\u03d5",pi:"\u03c0",piv:"\u03d6",prap:"\u2ab7",precnapprox:"\u2ab9",precneqq:"\u2ab5",precnsim:"\u22e8",prime:"\u2032",psi:"\u03c8",quot:'"',rarrtl:"\u21a3",rbrace:"}",rbrack:"]",rho:"\u03c1",rhov:"\u03f1",rightrightarrows:"\u21c9",rightthreetimes:"\u22cc",ring:"\u02da",rmoust:"\u23b1",rtimes:"\u22ca",rtri:"\u25b9",scap:"\u2ab8",scnE:"\u2ab6",scnap:"\u2aba",scnsim:"\u22e9",sdot:"\u22c5",searr:"\u2198",sect:"\xa7",sharp:"\u266f",sigma:"\u03c3",sigmav:"\u03c2",simne:"\u2246",smile:"\u2323",spades:"\u2660",sub:"\u2282",subE:"\u2ac5",subnE:"\u2acb",subne:"\u228a",supE:"\u2ac6",supnE:"\u2acc",supne:"\u228b",swarr:"\u2199",tau:"\u03c4",theta:"\u03b8",thetav:"\u03d1",tilde:"\u02dc",times:"\xd7",triangle:"\u25b5",triangleq:"\u225c",upsi:"\u03c5",upuparrows:"\u21c8",veebar:"\u22bb",vellip:"\u22ee",weierp:"\u2118",xi:"\u03be",yen:"\xa5",zeta:"\u03b6",zigrarr:"\u21dd",nbsp:"\xa0",rsquo:"\u2019",lsquo:"\u2018"};var i={};function a(t,r){if("#"===r.charAt(0))return s(r.slice(1));if(e.entities[r])return e.entities[r];if(e.options.loadMissingEntities){var a=r.match(/^[a-zA-Z](fr|scr|opf)$/)?RegExp.$1:r.charAt(0).toLowerCase();i[a]||(i[a]=!0,(0,n.retryAfter)((0,o.asyncLoad)("./util/entities/"+a+".js")))}return t}function s(t){var e="x"===t.charAt(0)?parseInt(t.slice(1),16):parseInt(t);return String.fromCodePoint(e)}e.add=function(t,r){Object.assign(e.entities,t),i[r]=!0},e.remove=function(t){delete e.entities[t]},e.translate=function(t){return t.replace(/&([a-z][a-z0-9]*|#(?:[0-9]+|x[0-9a-f]+));/gi,a)},e.numeric=s},7525:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},s=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},o=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.LinkedList=e.ListItem=e.END=void 0,e.END=Symbol();var a=function(t){void 0===t&&(t=null),this.next=null,this.prev=null,this.data=t};e.ListItem=a;var s=function(){function t(){for(var t=[],r=0;r1;){var c=o.shift(),u=o.shift();c.merge(u,e),o.push(c)}return o.length&&(this.list=o[0].list),this},t.prototype.merge=function(t,r){var o,i,a,s,l;void 0===r&&(r=null),null===r&&(r=this.isBefore.bind(this));for(var c=this.list.next,u=t.list.next;c.data!==e.END&&u.data!==e.END;)r(u.data,c.data)?(o=n([c,u],2),u.prev.next=o[0],c.prev.next=o[1],i=n([c.prev,u.prev],2),u.prev=i[0],c.prev=i[1],a=n([t.list,this.list],2),this.list.prev.next=a[0],t.list.prev.next=a[1],s=n([t.list.prev,this.list.prev],2),this.list.prev=s[0],t.list.prev=s[1],c=(l=n([u.next,c],2))[0],u=l[1]):c=c.next;return u.data!==e.END&&(this.list.prev.next=t.list.next,t.list.next.prev=this.list.prev,t.list.prev.next=this.list,this.list.prev=t.list.prev,t.list.next=t.list.prev=t.list),this},t}();e.LinkedList=s},7233:function(t,e){var r=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},n=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},o=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;oe.length}}}},t.prototype.add=function(e,r){void 0===r&&(r=t.DEFAULTPRIORITY);var n=this.items.length;do{n--}while(n>=0&&r=0&&this.items[e].item!==t);e>=0&&this.items.splice(e,1)},t.DEFAULTPRIORITY=5,t}();e.PrioritizedList=r},4542:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.retryAfter=e.handleRetriesFor=void 0,e.handleRetriesFor=function(t){return new Promise((function e(r,n){try{r(t())}catch(t){t.retry&&t.retry instanceof Promise?t.retry.then((function(){return e(r,n)})).catch((function(t){return n(t)})):t.restart&&t.restart.isCallback?MathJax.Callback.After((function(){return e(r,n)}),t.restart):n(t)}}))},e.retryAfter=function(t){var e=new Error("MathJax retry");throw e.retry=t,e}},4139:function(t,e){var r=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.CssStyles=void 0;var n=function(){function t(t){void 0===t&&(t=null),this.styles={},this.addStyles(t)}return Object.defineProperty(t.prototype,"cssText",{get:function(){return this.getStyleString()},enumerable:!1,configurable:!0}),t.prototype.addStyles=function(t){var e,n;if(t)try{for(var o=r(Object.keys(t)),i=o.next();!i.done;i=o.next()){var a=i.value;this.styles[a]||(this.styles[a]={}),Object.assign(this.styles[a],t[a])}}catch(t){e={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(e)throw e.error}}},t.prototype.removeStyles=function(){for(var t,e,n=[],o=0;o=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},n=this&&this.__read||function(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},o=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o1;)e.shift(),r.push(e.shift());return r}function l(t){var e,n,o=s(this.styles[t]);0===o.length&&o.push(""),1===o.length&&o.push(o[0]),2===o.length&&o.push(o[0]),3===o.length&&o.push(o[1]);try{for(var i=r(v.connect[t].children),a=i.next();!a.done;a=i.next()){var l=a.value;this.setStyle(this.childName(t,l),o.shift())}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(e)throw e.error}}}function c(t){var e,n,o=v.connect[t].children,i=[];try{for(var a=r(o),s=a.next();!s.done;s=a.next()){var l=s.value,c=this.styles[t+"-"+l];if(!c)return void delete this.styles[t];i.push(c)}}catch(t){e={error:t}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(e)throw e.error}}i[3]===i[1]&&(i.pop(),i[2]===i[0]&&(i.pop(),i[1]===i[0]&&i.pop())),this.styles[t]=i.join(" ")}function u(t){var e,n;try{for(var o=r(v.connect[t].children),i=o.next();!i.done;i=o.next()){var a=i.value;this.setStyle(this.childName(t,a),this.styles[t])}}catch(t){e={error:t}}finally{try{i&&!i.done&&(n=o.return)&&n.call(o)}finally{if(e)throw e.error}}}function p(t){var e,i,a=o([],n(v.connect[t].children),!1),s=this.styles[this.childName(t,a.shift())];try{for(var l=r(a),c=l.next();!c.done;c=l.next()){var u=c.value;if(this.styles[this.childName(t,u)]!==s)return void delete this.styles[t]}}catch(t){e={error:t}}finally{try{c&&!c.done&&(i=l.return)&&i.call(l)}finally{if(e)throw e.error}}this.styles[t]=s}var h=/^(?:[\d.]+(?:[a-z]+)|thin|medium|thick|inherit|initial|unset)$/,d=/^(?:none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset|inherit|initial|unset)$/;function f(t){var e,n,o,i,a={width:"",style:"",color:""};try{for(var l=r(s(this.styles[t])),c=l.next();!c.done;c=l.next()){var u=c.value;u.match(h)&&""===a.width?a.width=u:u.match(d)&&""===a.style?a.style=u:a.color=u}}catch(t){e={error:t}}finally{try{c&&!c.done&&(n=l.return)&&n.call(l)}finally{if(e)throw e.error}}try{for(var p=r(v.connect[t].children),f=p.next();!f.done;f=p.next()){var m=f.value;this.setStyle(this.childName(t,m),a[m])}}catch(t){o={error:t}}finally{try{f&&!f.done&&(i=p.return)&&i.call(p)}finally{if(o)throw o.error}}}function m(t){var e,n,o=[];try{for(var i=r(v.connect[t].children),a=i.next();!a.done;a=i.next()){var s=a.value,l=this.styles[this.childName(t,s)];l&&o.push(l)}}catch(t){e={error:t}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(e)throw e.error}}o.length?this.styles[t]=o.join(" "):delete this.styles[t]}var y={style:/^(?:normal|italic|oblique|inherit|initial|unset)$/,variant:new RegExp("^(?:"+["normal|none","inherit|initial|unset","common-ligatures|no-common-ligatures","discretionary-ligatures|no-discretionary-ligatures","historical-ligatures|no-historical-ligatures","contextual|no-contextual","(?:stylistic|character-variant|swash|ornaments|annotation)\\([^)]*\\)","small-caps|all-small-caps|petite-caps|all-petite-caps|unicase|titling-caps","lining-nums|oldstyle-nums|proportional-nums|tabular-nums","diagonal-fractions|stacked-fractions","ordinal|slashed-zero","jis78|jis83|jis90|jis04|simplified|traditional","full-width|proportional-width","ruby"].join("|")+")$"),weight:/^(?:normal|bold|bolder|lighter|[1-9]00|inherit|initial|unset)$/,stretch:new RegExp("^(?:"+["normal","(?:(?:ultra|extra|semi)-)?condensed","(?:(?:semi|extra|ulta)-)?expanded","inherit|initial|unset"].join("|")+")$"),size:new RegExp("^(?:"+["xx-small|x-small|small|medium|large|x-large|xx-large|larger|smaller","[d.]+%|[d.]+[a-z]+","inherit|initial|unset"].join("|")+")(?:/(?:normal|[d.+](?:%|[a-z]+)?))?$")};function g(t){var e,o,i,a,l=s(this.styles[t]),c={style:"",variant:[],weight:"",stretch:"",size:"",family:"","line-height":""};try{for(var u=r(l),p=u.next();!p.done;p=u.next()){var h=p.value;c.family=h;try{for(var d=(i=void 0,r(Object.keys(y))),f=d.next();!f.done;f=d.next()){var m=f.value;if((Array.isArray(c[m])||""===c[m])&&h.match(y[m]))if("size"===m){var g=n(h.split(/\//),2),b=g[0],_=g[1];c[m]=b,_&&(c["line-height"]=_)}else""===c.size&&(Array.isArray(c[m])?c[m].push(h):c[m]=h)}}catch(t){i={error:t}}finally{try{f&&!f.done&&(a=d.return)&&a.call(d)}finally{if(i)throw i.error}}}}catch(t){e={error:t}}finally{try{p&&!p.done&&(o=u.return)&&o.call(u)}finally{if(e)throw e.error}}!function(t,e){var n,o;try{for(var i=r(v.connect[t].children),a=i.next();!a.done;a=i.next()){var s=a.value,l=this.childName(t,s);if(Array.isArray(e[s])){var c=e[s];c.length&&(this.styles[l]=c.join(" "))}else""!==e[s]&&(this.styles[l]=e[s])}}catch(t){n={error:t}}finally{try{a&&!a.done&&(o=i.return)&&o.call(i)}finally{if(n)throw n.error}}}(t,c),delete this.styles[t]}function b(t){}var v=function(){function t(t){void 0===t&&(t=""),this.parse(t)}return Object.defineProperty(t.prototype,"cssText",{get:function(){var t,e,n=[];try{for(var o=r(Object.keys(this.styles)),i=o.next();!i.done;i=o.next()){var a=i.value,s=this.parentName(a);this.styles[s]||n.push(a+": "+this.styles[a]+";")}}catch(e){t={error:e}}finally{try{i&&!i.done&&(e=o.return)&&e.call(o)}finally{if(t)throw t.error}}return n.join(" ")},enumerable:!1,configurable:!0}),t.prototype.set=function(e,r){for(e=this.normalizeName(e),this.setStyle(e,r),t.connect[e]&&!t.connect[e].combine&&(this.combineChildren(e),delete this.styles[e]);e.match(/-/)&&(e=this.parentName(e),t.connect[e]);)t.connect[e].combine.call(this,e)},t.prototype.get=function(t){return t=this.normalizeName(t),this.styles.hasOwnProperty(t)?this.styles[t]:""},t.prototype.setStyle=function(e,r){this.styles[e]=r,t.connect[e]&&t.connect[e].children&&t.connect[e].split.call(this,e),""===r&&delete this.styles[e]},t.prototype.combineChildren=function(e){var n,o,i=this.parentName(e);try{for(var a=r(t.connect[e].children),s=a.next();!s.done;s=a.next()){var l=s.value,c=this.childName(i,l);t.connect[c].combine.call(this,c)}}catch(t){n={error:t}}finally{try{s&&!s.done&&(o=a.return)&&o.call(a)}finally{if(n)throw n.error}}},t.prototype.parentName=function(t){var e=t.replace(/-[^-]*$/,"");return t===e?"":e},t.prototype.childName=function(e,r){return r.match(/-/)?r:(t.connect[e]&&!t.connect[e].combine&&(r+=e.replace(/.*-/,"-"),e=this.parentName(e)),e+"-"+r)},t.prototype.normalizeName=function(t){return t.replace(/[A-Z]/g,(function(t){return"-"+t.toLowerCase()}))},t.prototype.parse=function(t){void 0===t&&(t="");var e=this.constructor.pattern;this.styles={};for(var r=t.replace(e.comment,"").split(e.style);r.length>1;){var o=n(r.splice(0,3),3),i=o[0],a=o[1],s=o[2];if(i.match(/[^\s\n]/))return;this.set(a,s)}},t.pattern={style:/([-a-z]+)[\s\n]*:[\s\n]*((?:'[^']*'|"[^"]*"|\n|.)*?)[\s\n]*(?:;|$)/g,comment:/\/\*[^]*?\*\//g},t.connect={padding:{children:i,split:l,combine:c},border:{children:i,split:u,combine:p},"border-top":{children:a,split:f,combine:m},"border-right":{children:a,split:f,combine:m},"border-bottom":{children:a,split:f,combine:m},"border-left":{children:a,split:f,combine:m},"border-width":{children:i,split:l,combine:null},"border-style":{children:i,split:l,combine:null},"border-color":{children:i,split:l,combine:null},font:{children:["style","variant","weight","stretch","line-height","size","family"],split:g,combine:b}},t}();e.Styles=v},6010:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.px=e.emRounded=e.em=e.percent=e.length2em=e.MATHSPACE=e.RELUNITS=e.UNITS=e.BIGDIMEN=void 0,e.BIGDIMEN=1e6,e.UNITS={px:1,in:96,cm:96/2.54,mm:96/25.4},e.RELUNITS={em:1,ex:.431,pt:.1,pc:1.2,mu:1/18},e.MATHSPACE={veryverythinmathspace:1/18,verythinmathspace:2/18,thinmathspace:3/18,mediummathspace:4/18,thickmathspace:5/18,verythickmathspace:6/18,veryverythickmathspace:7/18,negativeveryverythinmathspace:-1/18,negativeverythinmathspace:-2/18,negativethinmathspace:-3/18,negativemediummathspace:-4/18,negativethickmathspace:-5/18,negativeverythickmathspace:-6/18,negativeveryverythickmathspace:-7/18,thin:.04,medium:.06,thick:.1,normal:1,big:2,small:1/Math.sqrt(2),infinity:e.BIGDIMEN},e.length2em=function(t,r,n,o){if(void 0===r&&(r=0),void 0===n&&(n=1),void 0===o&&(o=16),"string"!=typeof t&&(t=String(t)),""===t||null==t)return r;if(e.MATHSPACE[t])return e.MATHSPACE[t];var i=t.match(/^\s*([-+]?(?:\.\d+|\d+(?:\.\d*)?))?(pt|em|ex|mu|px|pc|in|mm|cm|%)?/);if(!i)return r;var a=parseFloat(i[1]||"1"),s=i[2];return e.UNITS.hasOwnProperty(s)?a*e.UNITS[s]/o/n:e.RELUNITS.hasOwnProperty(s)?a*e.RELUNITS[s]:"%"===s?a/100*r:a*r},e.percent=function(t){return(100*t).toFixed(1).replace(/\.?0+$/,"")+"%"},e.em=function(t){return Math.abs(t)<.001?"0":t.toFixed(3).replace(/\.?0+$/,"")+"em"},e.emRounded=function(t,e){return void 0===e&&(e=16),t=(Math.round(t*e)+.05)/e,Math.abs(t)<.001?"0em":t.toFixed(3).replace(/\.?0+$/,"")+"em"},e.px=function(t,r,n){return void 0===r&&(r=-e.BIGDIMEN),void 0===n&&(n=16),t*=n,r&&t0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},n=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o0))return s;if(h.revisit||(t=p.remainder),!h.toContinue)break t}}if(a<=0)throw["MhchemBugU","mhchem bug U. Please report."]}},concatArray:function(t,e){if(e)if(Array.isArray(e))for(var r=0;r":/^[=<>]/,"#":/^[#\u2261]/,"+":/^\+/,"-$":/^-(?=[\s_},;\]/]|$|\([a-z]+\))/,"-9":/^-(?=[0-9])/,"- orbital overlap":/^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/,"-":/^-/,"pm-operator":/^(?:\\pm|\$\\pm\$|\+-|\+\/-)/,operator:/^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/,arrowUpDown:/^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/,"\\bond{(...)}":function(t){return o.patterns.findObserveGroups(t,"\\bond{","","","}")},"->":/^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/,CMT:/^[CMT](?=\[)/,"[(...)]":function(t){return o.patterns.findObserveGroups(t,"[","","","]")},"1st-level escape":/^(&|\\\\|\\hline)\s*/,"\\,":/^(?:\\[,\ ;:])/,"\\x{}{}":function(t){return o.patterns.findObserveGroups(t,"",/^\\[a-zA-Z]+\{/,"}","","","{","}","",!0)},"\\x{}":function(t){return o.patterns.findObserveGroups(t,"",/^\\[a-zA-Z]+\{/,"}","")},"\\ca":/^\\ca(?:\s+|(?![a-zA-Z]))/,"\\x":/^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/,orbital:/^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/,others:/^[\/~|]/,"\\frac{(...)}":function(t){return o.patterns.findObserveGroups(t,"\\frac{","","","}","{","","","}")},"\\overset{(...)}":function(t){return o.patterns.findObserveGroups(t,"\\overset{","","","}","{","","","}")},"\\underset{(...)}":function(t){return o.patterns.findObserveGroups(t,"\\underset{","","","}","{","","","}")},"\\underbrace{(...)}":function(t){return o.patterns.findObserveGroups(t,"\\underbrace{","","","}_","{","","","}")},"\\color{(...)}":function(t){return o.patterns.findObserveGroups(t,"\\color{","","","}")},"\\color{(...)}{(...)}":function(t){return o.patterns.findObserveGroups(t,"\\color{","","","}","{","","","}")||o.patterns.findObserveGroups(t,"\\color","\\","",/^(?=\{)/,"{","","","}")},"\\ce{(...)}":function(t){return o.patterns.findObserveGroups(t,"\\ce{","","","}")},"\\pu{(...)}":function(t){return o.patterns.findObserveGroups(t,"\\pu{","","","}")},oxidation$:/^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"d-oxidation$":/^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"roman numeral":/^[IVX]+/,"1/2$":/^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/,amount:function(t){var e;if(e=t.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/))return{match_:e[0],remainder:t.substr(e[0].length)};var r=o.patterns.findObserveGroups(t,"","$","$","");return r&&(e=r.match_.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/))?{match_:e[0],remainder:t.substr(e[0].length)}:null},amount2:function(t){return this.amount(t)},"(KV letters),":/^(?:[A-Z][a-z]{0,2}|i)(?=,)/,formula$:function(t){if(t.match(/^\([a-z]+\)$/))return null;var e=t.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/);return e?{match_:e[0],remainder:t.substr(e[0].length)}:null},uprightEntities:/^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,"/":/^\s*(\/)\s*/,"//":/^\s*(\/\/)\s*/,"*":/^\s*[*.]\s*/},findObserveGroups:function(t,e,r,n,o,i,a,s,l,c){var u=function(t,e){if("string"==typeof e)return 0!==t.indexOf(e)?null:e;var r=t.match(e);return r?r[0]:null},p=u(t,e);if(null===p)return null;if(t=t.substr(p.length),null===(p=u(t,r)))return null;var h=function(t,e,r){for(var n=0;e2?{match_:n.slice(1),remainder:e.substr(n[0].length)}:{match_:n[1]||n[0],remainder:e.substr(n[0].length)}:null}},actions:{"a=":function(t,e){t.a=(t.a||"")+e},"b=":function(t,e){t.b=(t.b||"")+e},"p=":function(t,e){t.p=(t.p||"")+e},"o=":function(t,e){t.o=(t.o||"")+e},"q=":function(t,e){t.q=(t.q||"")+e},"d=":function(t,e){t.d=(t.d||"")+e},"rm=":function(t,e){t.rm=(t.rm||"")+e},"text=":function(t,e){t.text_=(t.text_||"")+e},insert:function(t,e,r){return{type_:r}},"insert+p1":function(t,e,r){return{type_:r,p1:e}},"insert+p1+p2":function(t,e,r){return{type_:r,p1:e[0],p2:e[1]}},copy:function(t,e){return e},write:function(t,e,r){return r},rm:function(t,e){return{type_:"rm",p1:e}},text:function(t,e){return o.go(e,"text")},"tex-math":function(t,e){return o.go(e,"tex-math")},"tex-math tight":function(t,e){return o.go(e,"tex-math tight")},bond:function(t,e,r){return{type_:"bond",kind_:r||e}},"color0-output":function(t,e){return{type_:"color0",color:e}},ce:function(t,e){return o.go(e,"ce")},pu:function(t,e){return o.go(e,"pu")},"1/2":function(t,e){var r=[];e.match(/^[+\-]/)&&(r.push(e.substr(0,1)),e=e.substr(1));var n=e.match(/^([0-9]+|\$[a-z]\$|[a-z])\/([0-9]+)(\$[a-z]\$|[a-z])?$/);return n[1]=n[1].replace(/\$/g,""),r.push({type_:"frac",p1:n[1],p2:n[2]}),n[3]&&(n[3]=n[3].replace(/\$/g,""),r.push({type_:"tex-math",p1:n[3]})),r},"9,9":function(t,e){return o.go(e,"9,9")}},stateMachines:{tex:{transitions:n({empty:{0:{action_:"copy"}},"\\ce{(...)}":{0:{action_:[{type_:"write",option:"{"},"ce",{type_:"write",option:"}"}]}},"\\pu{(...)}":{0:{action_:[{type_:"write",option:"{"},"pu",{type_:"write",option:"}"}]}},else:{0:{action_:"copy"}}}),actions:{}},ce:{transitions:n({empty:{"*":{action_:"output"}},else:{"0|1|2":{action_:"beginsWithBond=false",revisit:!0,toContinue:!0}},oxidation$:{0:{action_:"oxidation-output"}},CMT:{r:{action_:"rdt=",nextState:"rt"},rd:{action_:"rqt=",nextState:"rdt"}},arrowUpDown:{"0|1|2|as":{action_:["sb=false","output","operator"],nextState:"1"}},uprightEntities:{"0|1|2":{action_:["o=","output"],nextState:"1"}},orbital:{"0|1|2|3":{action_:"o=",nextState:"o"}},"->":{"0|1|2|3":{action_:"r=",nextState:"r"},"a|as":{action_:["output","r="],nextState:"r"},"*":{action_:["output","r="],nextState:"r"}},"+":{o:{action_:"d= kv",nextState:"d"},"d|D":{action_:"d=",nextState:"d"},q:{action_:"d=",nextState:"qd"},"qd|qD":{action_:"d=",nextState:"qd"},dq:{action_:["output","d="],nextState:"d"},3:{action_:["sb=false","output","operator"],nextState:"0"}},amount:{"0|2":{action_:"a=",nextState:"a"}},"pm-operator":{"0|1|2|a|as":{action_:["sb=false","output",{type_:"operator",option:"\\pm"}],nextState:"0"}},operator:{"0|1|2|a|as":{action_:["sb=false","output","operator"],nextState:"0"}},"-$":{"o|q":{action_:["charge or bond","output"],nextState:"qd"},d:{action_:"d=",nextState:"d"},D:{action_:["output",{type_:"bond",option:"-"}],nextState:"3"},q:{action_:"d=",nextState:"qd"},qd:{action_:"d=",nextState:"qd"},"qD|dq":{action_:["output",{type_:"bond",option:"-"}],nextState:"3"}},"-9":{"3|o":{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"3"}},"- orbital overlap":{o:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"},d:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"}},"-":{"0|1|2":{action_:[{type_:"output",option:1},"beginsWithBond=true",{type_:"bond",option:"-"}],nextState:"3"},3:{action_:{type_:"bond",option:"-"}},a:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"},as:{action_:[{type_:"output",option:2},{type_:"bond",option:"-"}],nextState:"3"},b:{action_:"b="},o:{action_:{type_:"- after o/d",option:!1},nextState:"2"},q:{action_:{type_:"- after o/d",option:!1},nextState:"2"},"d|qd|dq":{action_:{type_:"- after o/d",option:!0},nextState:"2"},"D|qD|p":{action_:["output",{type_:"bond",option:"-"}],nextState:"3"}},amount2:{"1|3":{action_:"a=",nextState:"a"}},letters:{"0|1|2|3|a|as|b|p|bp|o":{action_:"o=",nextState:"o"},"q|dq":{action_:["output","o="],nextState:"o"},"d|D|qd|qD":{action_:"o after d",nextState:"o"}},digits:{o:{action_:"q=",nextState:"q"},"d|D":{action_:"q=",nextState:"dq"},q:{action_:["output","o="],nextState:"o"},a:{action_:"o=",nextState:"o"}},"space A":{"b|p|bp":{action_:[]}},space:{a:{action_:[],nextState:"as"},0:{action_:"sb=false"},"1|2":{action_:"sb=true"},"r|rt|rd|rdt|rdq":{action_:"output",nextState:"0"},"*":{action_:["output","sb=true"],nextState:"1"}},"1st-level escape":{"1|2":{action_:["output",{type_:"insert+p1",option:"1st-level escape"}]},"*":{action_:["output",{type_:"insert+p1",option:"1st-level escape"}],nextState:"0"}},"[(...)]":{"r|rt":{action_:"rd=",nextState:"rd"},"rd|rdt":{action_:"rq=",nextState:"rdq"}},"...":{"o|d|D|dq|qd|qD":{action_:["output",{type_:"bond",option:"..."}],nextState:"3"},"*":{action_:[{type_:"output",option:1},{type_:"insert",option:"ellipsis"}],nextState:"1"}},". __* ":{"*":{action_:["output",{type_:"insert",option:"addition compound"}],nextState:"1"}},"state of aggregation $":{"*":{action_:["output","state of aggregation"],nextState:"1"}},"{[(":{"a|as|o":{action_:["o=","output","parenthesisLevel++"],nextState:"2"},"0|1|2|3":{action_:["o=","output","parenthesisLevel++"],nextState:"2"},"*":{action_:["output","o=","output","parenthesisLevel++"],nextState:"2"}},")]}":{"0|1|2|3|b|p|bp|o":{action_:["o=","parenthesisLevel--"],nextState:"o"},"a|as|d|D|q|qd|qD|dq":{action_:["output","o=","parenthesisLevel--"],nextState:"o"}},", ":{"*":{action_:["output","comma"],nextState:"0"}},"^_":{"*":{action_:[]}},"^{(...)}|^($...$)":{"0|1|2|as":{action_:"b=",nextState:"b"},p:{action_:"b=",nextState:"bp"},"3|o":{action_:"d= kv",nextState:"D"},q:{action_:"d=",nextState:"qD"},"d|D|qd|qD|dq":{action_:["output","d="],nextState:"D"}},"^a|^\\x{}{}|^\\x{}|^\\x|'":{"0|1|2|as":{action_:"b=",nextState:"b"},p:{action_:"b=",nextState:"bp"},"3|o":{action_:"d= kv",nextState:"d"},q:{action_:"d=",nextState:"qd"},"d|qd|D|qD":{action_:"d="},dq:{action_:["output","d="],nextState:"d"}},"_{(state of aggregation)}$":{"d|D|q|qd|qD|dq":{action_:["output","q="],nextState:"q"}},"_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x":{"0|1|2|as":{action_:"p=",nextState:"p"},b:{action_:"p=",nextState:"bp"},"3|o":{action_:"q=",nextState:"q"},"d|D":{action_:"q=",nextState:"dq"},"q|qd|qD|dq":{action_:["output","q="],nextState:"q"}},"=<>":{"0|1|2|3|a|as|o|q|d|D|qd|qD|dq":{action_:[{type_:"output",option:2},"bond"],nextState:"3"}},"#":{"0|1|2|3|a|as|o":{action_:[{type_:"output",option:2},{type_:"bond",option:"#"}],nextState:"3"}},"{}^":{"*":{action_:[{type_:"output",option:1},{type_:"insert",option:"tinySkip"}],nextState:"1"}},"{}":{"*":{action_:{type_:"output",option:1},nextState:"1"}},"{...}":{"0|1|2|3|a|as|b|p|bp":{action_:"o=",nextState:"o"},"o|d|D|q|qd|qD|dq":{action_:["output","o="],nextState:"o"}},"$...$":{a:{action_:"a="},"0|1|2|3|as|b|p|bp|o":{action_:"o=",nextState:"o"},"as|o":{action_:"o="},"q|d|D|qd|qD|dq":{action_:["output","o="],nextState:"o"}},"\\bond{(...)}":{"*":{action_:[{type_:"output",option:2},"bond"],nextState:"3"}},"\\frac{(...)}":{"*":{action_:[{type_:"output",option:1},"frac-output"],nextState:"3"}},"\\overset{(...)}":{"*":{action_:[{type_:"output",option:2},"overset-output"],nextState:"3"}},"\\underset{(...)}":{"*":{action_:[{type_:"output",option:2},"underset-output"],nextState:"3"}},"\\underbrace{(...)}":{"*":{action_:[{type_:"output",option:2},"underbrace-output"],nextState:"3"}},"\\color{(...)}{(...)}":{"*":{action_:[{type_:"output",option:2},"color-output"],nextState:"3"}},"\\color{(...)}":{"*":{action_:[{type_:"output",option:2},"color0-output"]}},"\\ce{(...)}":{"*":{action_:[{type_:"output",option:2},"ce"],nextState:"3"}},"\\,":{"*":{action_:[{type_:"output",option:1},"copy"],nextState:"1"}},"\\pu{(...)}":{"*":{action_:["output",{type_:"write",option:"{"},"pu",{type_:"write",option:"}"}],nextState:"3"}},"\\x{}{}|\\x{}|\\x":{"0|1|2|3|a|as|b|p|bp|o|c0":{action_:["o=","output"],nextState:"3"},"*":{action_:["output","o=","output"],nextState:"3"}},others:{"*":{action_:[{type_:"output",option:1},"copy"],nextState:"3"}},else2:{a:{action_:"a to o",nextState:"o",revisit:!0},as:{action_:["output","sb=true"],nextState:"1",revisit:!0},"r|rt|rd|rdt|rdq":{action_:["output"],nextState:"0",revisit:!0},"*":{action_:["output","copy"],nextState:"3"}}}),actions:{"o after d":function(t,e){var r;if((t.d||"").match(/^[1-9][0-9]*$/)){var n=t.d;t.d=void 0,(r=this.output(t)).push({type_:"tinySkip"}),t.b=n}else r=this.output(t);return o.actions["o="](t,e),r},"d= kv":function(t,e){t.d=e,t.dType="kv"},"charge or bond":function(t,e){if(t.beginsWithBond){var r=[];return o.concatArray(r,this.output(t)),o.concatArray(r,o.actions.bond(t,e,"-")),r}t.d=e},"- after o/d":function(t,e,r){var n=o.patterns.match_("orbital",t.o||""),i=o.patterns.match_("one lowercase greek letter $",t.o||""),a=o.patterns.match_("one lowercase latin letter $",t.o||""),s=o.patterns.match_("$one lowercase latin letter$ $",t.o||""),l="-"===e&&(n&&""===n.remainder||i||a||s);!l||t.a||t.b||t.p||t.d||t.q||n||!a||(t.o="$"+t.o+"$");var c=[];return l?(o.concatArray(c,this.output(t)),c.push({type_:"hyphen"})):(n=o.patterns.match_("digits",t.d||""),r&&n&&""===n.remainder?(o.concatArray(c,o.actions["d="](t,e)),o.concatArray(c,this.output(t))):(o.concatArray(c,this.output(t)),o.concatArray(c,o.actions.bond(t,e,"-")))),c},"a to o":function(t){t.o=t.a,t.a=void 0},"sb=true":function(t){t.sb=!0},"sb=false":function(t){t.sb=!1},"beginsWithBond=true":function(t){t.beginsWithBond=!0},"beginsWithBond=false":function(t){t.beginsWithBond=!1},"parenthesisLevel++":function(t){t.parenthesisLevel++},"parenthesisLevel--":function(t){t.parenthesisLevel--},"state of aggregation":function(t,e){return{type_:"state of aggregation",p1:o.go(e,"o")}},comma:function(t,e){var r=e.replace(/\s*$/,"");return r!==e&&0===t.parenthesisLevel?{type_:"comma enumeration L",p1:r}:{type_:"comma enumeration M",p1:r}},output:function(t,e,r){var n;if(t.r){var i=void 0;i="M"===t.rdt?o.go(t.rd,"tex-math"):"T"===t.rdt?[{type_:"text",p1:t.rd||""}]:o.go(t.rd,"ce");var a=void 0;a="M"===t.rqt?o.go(t.rq,"tex-math"):"T"===t.rqt?[{type_:"text",p1:t.rq||""}]:o.go(t.rq,"ce"),n={type_:"arrow",r:t.r,rd:i,rq:a}}else n=[],(t.a||t.b||t.p||t.o||t.q||t.d||r)&&(t.sb&&n.push({type_:"entitySkip"}),t.o||t.q||t.d||t.b||t.p||2===r?t.o||t.q||t.d||!t.b&&!t.p?t.o&&"kv"===t.dType&&o.patterns.match_("d-oxidation$",t.d||"")?t.dType="oxidation":t.o&&"kv"===t.dType&&!t.q&&(t.dType=void 0):(t.o=t.a,t.d=t.b,t.q=t.p,t.a=t.b=t.p=void 0):(t.o=t.a,t.a=void 0),n.push({type_:"chemfive",a:o.go(t.a,"a"),b:o.go(t.b,"bd"),p:o.go(t.p,"pq"),o:o.go(t.o,"o"),q:o.go(t.q,"pq"),d:o.go(t.d,"oxidation"===t.dType?"oxidation":"bd"),dType:t.dType}));for(var s in t)"parenthesisLevel"!==s&&"beginsWithBond"!==s&&delete t[s];return n},"oxidation-output":function(t,e){var r=["{"];return o.concatArray(r,o.go(e,"oxidation")),r.push("}"),r},"frac-output":function(t,e){return{type_:"frac-ce",p1:o.go(e[0],"ce"),p2:o.go(e[1],"ce")}},"overset-output":function(t,e){return{type_:"overset",p1:o.go(e[0],"ce"),p2:o.go(e[1],"ce")}},"underset-output":function(t,e){return{type_:"underset",p1:o.go(e[0],"ce"),p2:o.go(e[1],"ce")}},"underbrace-output":function(t,e){return{type_:"underbrace",p1:o.go(e[0],"ce"),p2:o.go(e[1],"ce")}},"color-output":function(t,e){return{type_:"color",color1:e[0],color2:o.go(e[1],"ce")}},"r=":function(t,e){t.r=e},"rdt=":function(t,e){t.rdt=e},"rd=":function(t,e){t.rd=e},"rqt=":function(t,e){t.rqt=e},"rq=":function(t,e){t.rq=e},operator:function(t,e,r){return{type_:"operator",kind_:r||e}}}},a:{transitions:n({empty:{"*":{action_:[]}},"1/2$":{0:{action_:"1/2"}},else:{0:{action_:[],nextState:"1",revisit:!0}},"${(...)}$__$(...)$":{"*":{action_:"tex-math tight",nextState:"1"}},",":{"*":{action_:{type_:"insert",option:"commaDecimal"}}},else2:{"*":{action_:"copy"}}}),actions:{}},o:{transitions:n({empty:{"*":{action_:[]}},"1/2$":{0:{action_:"1/2"}},else:{0:{action_:[],nextState:"1",revisit:!0}},letters:{"*":{action_:"rm"}},"\\ca":{"*":{action_:{type_:"insert",option:"circa"}}},"\\pu{(...)}":{"*":{action_:[{type_:"write",option:"{"},"pu",{type_:"write",option:"}"}]}},"\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},"${(...)}$__$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:[{type_:"write",option:"{"},"text",{type_:"write",option:"}"}]}},else2:{"*":{action_:"copy"}}}),actions:{}},text:{transitions:n({empty:{"*":{action_:"output"}},"{...}":{"*":{action_:"text="}},"${(...)}$__$(...)$":{"*":{action_:"tex-math"}},"\\greek":{"*":{action_:["output","rm"]}},"\\pu{(...)}":{"*":{action_:["output",{type_:"write",option:"{"},"pu",{type_:"write",option:"}"}]}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:["output","copy"]}},else:{"*":{action_:"text="}}}),actions:{output:function(t){if(t.text_){var e={type_:"text",p1:t.text_};for(var r in t)delete t[r];return e}}}},pq:{transitions:n({empty:{"*":{action_:[]}},"state of aggregation $":{"*":{action_:"state of aggregation"}},i$:{0:{action_:[],nextState:"!f",revisit:!0}},"(KV letters),":{0:{action_:"rm",nextState:"0"}},formula$:{0:{action_:[],nextState:"f",revisit:!0}},"1/2$":{0:{action_:"1/2"}},else:{0:{action_:[],nextState:"!f",revisit:!0}},"${(...)}$__$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"text"}},"a-z":{f:{action_:"tex-math"}},letters:{"*":{action_:"rm"}},"-9.,9":{"*":{action_:"9,9"}},",":{"*":{action_:{type_:"insert+p1",option:"comma enumeration S"}}},"\\color{(...)}{(...)}":{"*":{action_:"color-output"}},"\\color{(...)}":{"*":{action_:"color0-output"}},"\\ce{(...)}":{"*":{action_:"ce"}},"\\pu{(...)}":{"*":{action_:[{type_:"write",option:"{"},"pu",{type_:"write",option:"}"}]}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},else2:{"*":{action_:"copy"}}}),actions:{"state of aggregation":function(t,e){return{type_:"state of aggregation subscript",p1:o.go(e,"o")}},"color-output":function(t,e){return{type_:"color",color1:e[0],color2:o.go(e[1],"pq")}}}},bd:{transitions:n({empty:{"*":{action_:[]}},x$:{0:{action_:[],nextState:"!f",revisit:!0}},formula$:{0:{action_:[],nextState:"f",revisit:!0}},else:{0:{action_:[],nextState:"!f",revisit:!0}},"-9.,9 no missing 0":{"*":{action_:"9,9"}},".":{"*":{action_:{type_:"insert",option:"electron dot"}}},"a-z":{f:{action_:"tex-math"}},x:{"*":{action_:{type_:"insert",option:"KV x"}}},letters:{"*":{action_:"rm"}},"'":{"*":{action_:{type_:"insert",option:"prime"}}},"${(...)}$__$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"text"}},"\\color{(...)}{(...)}":{"*":{action_:"color-output"}},"\\color{(...)}":{"*":{action_:"color0-output"}},"\\ce{(...)}":{"*":{action_:"ce"}},"\\pu{(...)}":{"*":{action_:[{type_:"write",option:"{"},"pu",{type_:"write",option:"}"}]}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},else2:{"*":{action_:"copy"}}}),actions:{"color-output":function(t,e){return{type_:"color",color1:e[0],color2:o.go(e[1],"bd")}}}},oxidation:{transitions:n({empty:{"*":{action_:[]}},"roman numeral":{"*":{action_:"roman-numeral"}},"${(...)}$__$(...)$":{"*":{action_:"tex-math"}},else:{"*":{action_:"copy"}}}),actions:{"roman-numeral":function(t,e){return{type_:"roman numeral",p1:e}}}},"tex-math":{transitions:n({empty:{"*":{action_:"output"}},"\\ce{(...)}":{"*":{action_:["output","ce"]}},"\\pu{(...)}":{"*":{action_:["output",{type_:"write",option:"{"},"pu",{type_:"write",option:"}"}]}},"{...}|\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"o="}},else:{"*":{action_:"o="}}}),actions:{output:function(t){if(t.o){var e={type_:"tex-math",p1:t.o};for(var r in t)delete t[r];return e}}}},"tex-math tight":{transitions:n({empty:{"*":{action_:"output"}},"\\ce{(...)}":{"*":{action_:["output","ce"]}},"\\pu{(...)}":{"*":{action_:["output",{type_:"write",option:"{"},"pu",{type_:"write",option:"}"}]}},"{...}|\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"o="}},"-|+":{"*":{action_:"tight operator"}},else:{"*":{action_:"o="}}}),actions:{"tight operator":function(t,e){t.o=(t.o||"")+"{"+e+"}"},output:function(t){if(t.o){var e={type_:"tex-math",p1:t.o};for(var r in t)delete t[r];return e}}}},"9,9":{transitions:n({empty:{"*":{action_:[]}},",":{"*":{action_:"comma"}},else:{"*":{action_:"copy"}}}),actions:{comma:function(){return{type_:"commaDecimal"}}}},pu:{transitions:n({empty:{"*":{action_:"output"}},space$:{"*":{action_:["output","space"]}},"{[(|)]}":{"0|a":{action_:"copy"}},"(-)(9)^(-9)":{0:{action_:"number^",nextState:"a"}},"(-)(9.,9)(e)(99)":{0:{action_:"enumber",nextState:"a"}},space:{"0|a":{action_:[]}},"pm-operator":{"0|a":{action_:{type_:"operator",option:"\\pm"},nextState:"0"}},operator:{"0|a":{action_:"copy",nextState:"0"}},"//":{d:{action_:"o=",nextState:"/"}},"/":{d:{action_:"o=",nextState:"/"}},"{...}|else":{"0|d":{action_:"d=",nextState:"d"},a:{action_:["space","d="],nextState:"d"},"/|q":{action_:"q=",nextState:"q"}}}),actions:{enumber:function(t,e){var r=[];return"+-"===e[0]||"+/-"===e[0]?r.push("\\pm "):e[0]&&r.push(e[0]),e[1]&&(o.concatArray(r,o.go(e[1],"pu-9,9")),e[2]&&(e[2].match(/[,.]/)?o.concatArray(r,o.go(e[2],"pu-9,9")):r.push(e[2])),(e[3]||e[4])&&("e"===e[3]||"*"===e[4]?r.push({type_:"cdot"}):r.push({type_:"times"}))),e[5]&&r.push("10^{"+e[5]+"}"),r},"number^":function(t,e){var r=[];return"+-"===e[0]||"+/-"===e[0]?r.push("\\pm "):e[0]&&r.push(e[0]),o.concatArray(r,o.go(e[1],"pu-9,9")),r.push("^{"+e[2]+"}"),r},operator:function(t,e,r){return{type_:"operator",kind_:r||e}},space:function(){return{type_:"pu-space-1"}},output:function(t){var e,r=o.patterns.match_("{(...)}",t.d||"");r&&""===r.remainder&&(t.d=r.match_);var n=o.patterns.match_("{(...)}",t.q||"");if(n&&""===n.remainder&&(t.q=n.match_),t.d&&(t.d=t.d.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),t.d=t.d.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F")),t.q){t.q=t.q.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),t.q=t.q.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F");var i={d:o.go(t.d,"pu"),q:o.go(t.q,"pu")};"//"===t.o?e={type_:"pu-frac",p1:i.d,p2:i.q}:(e=i.d,i.d.length>1||i.q.length>1?e.push({type_:" / "}):e.push({type_:"/"}),o.concatArray(e,i.q))}else e=o.go(t.d,"pu-2");for(var a in t)delete t[a];return e}}},"pu-2":{transitions:n({empty:{"*":{action_:"output"}},"*":{"*":{action_:["output","cdot"],nextState:"0"}},"\\x":{"*":{action_:"rm="}},space:{"*":{action_:["output","space"],nextState:"0"}},"^{(...)}|^(-1)":{1:{action_:"^(-1)"}},"-9.,9":{0:{action_:"rm=",nextState:"0"},1:{action_:"^(-1)",nextState:"0"}},"{...}|else":{"*":{action_:"rm=",nextState:"1"}}}),actions:{cdot:function(){return{type_:"tight cdot"}},"^(-1)":function(t,e){t.rm+="^{"+e+"}"},space:function(){return{type_:"pu-space-2"}},output:function(t){var e=[];if(t.rm){var r=o.patterns.match_("{(...)}",t.rm||"");e=r&&""===r.remainder?o.go(r.match_,"pu"):{type_:"rm",p1:t.rm}}for(var n in t)delete t[n];return e}}},"pu-9,9":{transitions:n({empty:{0:{action_:"output-0"},o:{action_:"output-o"}},",":{0:{action_:["output-0","comma"],nextState:"o"}},".":{0:{action_:["output-0","copy"],nextState:"o"}},else:{"*":{action_:"text="}}}),actions:{comma:function(){return{type_:"commaDecimal"}},"output-0":function(t){var e=[];if(t.text_=t.text_||"",t.text_.length>4){var r=t.text_.length%3;0===r&&(r=3);for(var n=t.text_.length-3;n>0;n-=3)e.push(t.text_.substr(n,3)),e.push({type_:"1000 separator"});e.push(t.text_.substr(0,r)),e.reverse()}else e.push(t.text_);for(var o in t)delete t[o];return e},"output-o":function(t){var e=[];if(t.text_=t.text_||"",t.text_.length>4){var r=t.text_.length-3,n=void 0;for(n=0;n"===t.r||"<=>>"===t.r||"<<=>"===t.r||"<--\x3e"===t.r?(s="\\long"+s,a.rd&&(s="\\overset{"+a.rd+"}{"+s+"}"),a.rq&&(s="<--\x3e"===t.r?"\\underset{\\lower2mu{"+a.rq+"}}{"+s+"}":"\\underset{\\lower6mu{"+a.rq+"}}{"+s+"}"),s=" {}\\mathrel{"+s+"}{} "):(a.rq&&(s+="[{"+a.rq+"}]"),s=" {}\\mathrel{\\x"+(s+="{"+a.rd+"}")+"}{} "):s=" {}\\mathrel{\\long"+s+"}{} ",e=s;break;case"operator":e=i._getOperator(t.kind_);break;case"space":e=" ";break;case"tinySkip":e="\\mkern2mu";break;case"entitySkip":case"pu-space-1":e="~";break;case"pu-space-2":e="\\mkern3mu ";break;case"1000 separator":e="\\mkern2mu ";break;case"commaDecimal":e="{,}";break;case"comma enumeration L":e="{"+t.p1+"}\\mkern6mu ";break;case"comma enumeration M":e="{"+t.p1+"}\\mkern3mu ";break;case"comma enumeration S":e="{"+t.p1+"}\\mkern1mu ";break;case"hyphen":e="\\text{-}";break;case"addition compound":e="\\,{\\cdot}\\,";break;case"electron dot":e="\\mkern1mu \\bullet\\mkern1mu ";break;case"KV x":e="{\\times}";break;case"prime":e="\\prime ";break;case"cdot":e="\\cdot ";break;case"tight cdot":e="\\mkern1mu{\\cdot}\\mkern1mu ";break;case"times":e="\\times ";break;case"circa":e="{\\sim}";break;case"^":e="uparrow";break;case"v":e="downarrow";break;case"ellipsis":e="\\ldots ";break;case"/":e="/";break;case" / ":e="\\,/\\,";break;default:throw["MhchemBugT","mhchem bug T. Please report."]}return e},_getArrow:function(t){switch(t){case"->":case"\u2192":case"\u27f6":return"rightarrow";case"<-":return"leftarrow";case"<->":return"leftrightarrow";case"<--\x3e":return"leftrightarrows";case"<=>":case"\u21cc":return"rightleftharpoons";case"<=>>":return"Rightleftharpoons";case"<<=>":return"Leftrightharpoons";default:throw["MhchemBugT","mhchem bug T. Please report."]}},_getBond:function(t){switch(t){case"-":case"1":return"{-}";case"=":case"2":return"{=}";case"#":case"3":return"{\\equiv}";case"~":return"{\\tripledash}";case"~-":return"{\\rlap{\\lower.1em{-}}\\raise.1em{\\tripledash}}";case"~=":case"~--":return"{\\rlap{\\lower.2em{-}}\\rlap{\\raise.2em{\\tripledash}}-}";case"-~-":return"{\\rlap{\\lower.2em{-}}\\rlap{\\raise.2em{-}}\\tripledash}";case"...":return"{{\\cdot}{\\cdot}{\\cdot}}";case"....":return"{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}";case"->":return"{\\rightarrow}";case"<-":return"{\\leftarrow}";case"<":return"{<}";case">":return"{>}";default:throw["MhchemBugT","mhchem bug T. Please report."]}},_getOperator:function(t){switch(t){case"+":return" {}+{} ";case"-":return" {}-{} ";case"=":return" {}={} ";case"<":return" {}<{} ";case">":return" {}>{} ";case"<<":return" {}\\ll{} ";case">>":return" {}\\gg{} ";case"\\pm":return" {}\\pm{} ";case"\\approx":case"$\\approx$":return" {}\\approx{} ";case"v":case"(v)":return" \\downarrow{} ";case"^":case"(^)":return" \\uparrow{} ";default:throw["MhchemBugT","mhchem bug T. Please report."]}}}},9329:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])},n(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractEntry=void 0;var i=r(9328),a=r(2165),s=function(t){function e(e,r){var n=t.call(this)||this;return n._menu=e,n._type=r,n.className=a.HtmlClasses.MENUITEM,n.role="menuitem",n.hidden=!1,n}return o(e,t),Object.defineProperty(e.prototype,"menu",{get:function(){return this._menu},set:function(t){this._menu=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"type",{get:function(){return this._type},enumerable:!1,configurable:!0}),e.prototype.hide=function(){this.hidden=!0,this.menu.generateMenu()},e.prototype.show=function(){this.hidden=!1,this.menu.generateMenu()},e.prototype.isHidden=function(){return this.hidden},e}(i.MenuElement);e.AbstractEntry=s},1340:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])},n(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractItem=void 0;var a=r(9329),s=r(2556),l=r(2165),c=function(t){function e(e,r,n,o){var i=t.call(this,e,r)||this;return i._content=n,i.disabled=!1,i.callbacks=[],i._id=o||n,i}return o(e,t),Object.defineProperty(e.prototype,"content",{get:function(){return this._content},set:function(t){this._content=t,this.generateHtml(),this.menu&&this.menu.generateHtml()},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"id",{get:function(){return this._id},enumerable:!1,configurable:!0}),e.prototype.press=function(){this.disabled||(this.executeAction(),this.executeCallbacks_())},e.prototype.executeAction=function(){},e.prototype.registerCallback=function(t){-1===this.callbacks.indexOf(t)&&this.callbacks.push(t)},e.prototype.unregisterCallback=function(t){var e=this.callbacks.indexOf(t);-1!==e&&this.callbacks.splice(e,1)},e.prototype.mousedown=function(t){this.press(),this.stop(t)},e.prototype.mouseover=function(t){this.focus(),this.stop(t)},e.prototype.mouseout=function(t){this.deactivate(),this.stop(t)},e.prototype.generateHtml=function(){t.prototype.generateHtml.call(this);var e=this.html;e.setAttribute("aria-disabled","false"),e.textContent=this.content},e.prototype.activate=function(){this.disabled||this.html.classList.add(l.HtmlClasses.MENUACTIVE)},e.prototype.deactivate=function(){this.html.classList.remove(l.HtmlClasses.MENUACTIVE)},e.prototype.focus=function(){this.menu.focused=this,t.prototype.focus.call(this),this.activate()},e.prototype.unfocus=function(){this.deactivate(),t.prototype.unfocus.call(this)},e.prototype.escape=function(t){s.MenuUtil.close(this)},e.prototype.up=function(t){this.menu.up(t)},e.prototype.down=function(t){this.menu.down(t)},e.prototype.left=function(t){this.menu.left(t)},e.prototype.right=function(t){this.menu.right(t)},e.prototype.space=function(t){this.press()},e.prototype.disable=function(){this.disabled=!0;var t=this.html;t.classList.add(l.HtmlClasses.MENUDISABLED),t.setAttribute("aria-disabled","true")},e.prototype.enable=function(){this.disabled=!1;var t=this.html;t.classList.remove(l.HtmlClasses.MENUDISABLED),t.removeAttribute("aria-disabled")},e.prototype.executeCallbacks_=function(){var t,e;try{for(var r=i(this.callbacks),n=r.next();!n.done;n=r.next()){var o=n.value;try{o(this)}catch(t){s.MenuUtil.error(t,"Callback for menu entry "+this.id+" failed.")}}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}},e}(a.AbstractEntry);e.AbstractItem=c},1484:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])},n(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractMenu=void 0;var a=r(8372),s=r(1340),l=r(2165),c=r(6186),u=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.className=l.HtmlClasses.CONTEXTMENU,e.role="menu",e._items=[],e._baseMenu=null,e}return o(e,t),Object.defineProperty(e.prototype,"baseMenu",{get:function(){return this._baseMenu},set:function(t){this._baseMenu=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"items",{get:function(){return this._items},set:function(t){this._items=t},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"pool",{get:function(){return this.variablePool},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"focused",{get:function(){return this._focused},set:function(t){if(this._focused!==t){this._focused||this.unfocus();var e=this._focused;this._focused=t,e&&e.unfocus()}},enumerable:!1,configurable:!0}),e.prototype.up=function(t){var e=this.items.filter((function(t){return t instanceof s.AbstractItem&&!t.isHidden()}));if(0!==e.length)if(this.focused){var r=e.indexOf(this.focused);-1!==r&&e[r=r?--r:e.length-1].focus()}else e[e.length-1].focus()},e.prototype.down=function(t){var e=this.items.filter((function(t){return t instanceof s.AbstractItem&&!t.isHidden()}));if(0!==e.length)if(this.focused){var r=e.indexOf(this.focused);-1!==r&&e[r=++r===e.length?0:r].focus()}else e[0].focus()},e.prototype.generateHtml=function(){t.prototype.generateHtml.call(this),this.generateMenu()},e.prototype.generateMenu=function(){var t,e,r=this.html;r.classList.add(l.HtmlClasses.MENU);try{for(var n=i(this.items),o=n.next();!o.done;o=n.next()){var a=o.value;if(a.isHidden()){var s=a.html;s.parentNode&&s.parentNode.removeChild(s)}else r.appendChild(a.html)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}},e.prototype.post=function(e,r){this.variablePool.update(),t.prototype.post.call(this,e,r)},e.prototype.unpostSubmenus=function(){var t,e,r=this.items.filter((function(t){return t instanceof c.Submenu}));try{for(var n=i(r),o=n.next();!o.done;o=n.next()){var a=o.value;a.submenu.unpost(),a!==this.focused&&a.unfocus()}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=n.return)&&e.call(n)}finally{if(t)throw t.error}}},e.prototype.unpost=function(){t.prototype.unpost.call(this),this.unpostSubmenus(),this.focused=null},e.prototype.find=function(t){var e,r;try{for(var n=i(this.items),o=n.next();!o.done;o=n.next()){var a=o.value;if("rule"!==a.type){if(a.id===t)return a;if("submenu"===a.type){var s=a.submenu.find(t);if(s)return s}}}}catch(t){e={error:t}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}return null},e}(a.AbstractPostable);e.AbstractMenu=u},2868:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractNavigatable=void 0;var n=r(3205),o=r(8853),i=function(){function t(){this.bubble=!1}return t.prototype.bubbleKey=function(){this.bubble=!0},t.prototype.keydown=function(t){switch(t.keyCode){case n.KEY.ESCAPE:this.escape(t);break;case n.KEY.RIGHT:this.right(t);break;case n.KEY.LEFT:this.left(t);break;case n.KEY.UP:this.up(t);break;case n.KEY.DOWN:this.down(t);break;case n.KEY.RETURN:case n.KEY.SPACE:this.space(t);break;default:return}this.bubble?this.bubble=!1:this.stop(t)},t.prototype.escape=function(t){},t.prototype.space=function(t){},t.prototype.left=function(t){},t.prototype.right=function(t){},t.prototype.up=function(t){},t.prototype.down=function(t){},t.prototype.stop=function(t){t&&(t.stopPropagation(),t.preventDefault(),t.cancelBubble=!0)},t.prototype.mousedown=function(t){return this.stop(t)},t.prototype.mouseup=function(t){return this.stop(t)},t.prototype.mouseover=function(t){return this.stop(t)},t.prototype.mouseout=function(t){return this.stop(t)},t.prototype.click=function(t){return this.stop(t)},t.prototype.addEvents=function(t){t.addEventListener(o.MOUSE.DOWN,this.mousedown.bind(this)),t.addEventListener(o.MOUSE.UP,this.mouseup.bind(this)),t.addEventListener(o.MOUSE.OVER,this.mouseover.bind(this)),t.addEventListener(o.MOUSE.OUT,this.mouseout.bind(this)),t.addEventListener(o.MOUSE.CLICK,this.click.bind(this)),t.addEventListener("keydown",this.keydown.bind(this)),t.addEventListener("dragstart",this.stop.bind(this)),t.addEventListener(o.MOUSE.SELECTSTART,this.stop.bind(this)),t.addEventListener("contextmenu",this.stop.bind(this)),t.addEventListener(o.MOUSE.DBLCLICK,this.stop.bind(this))},t}();e.AbstractNavigatable=i},8372:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])},n(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractPostable=void 0;var i=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.posted=!1,e}return o(e,t),e.prototype.isPosted=function(){return this.posted},e.prototype.post=function(t,e){this.posted||(void 0!==t&&void 0!==e&&this.html.setAttribute("style","left: "+t+"px; top: "+e+"px;"),this.display(),this.posted=!0)},e.prototype.unpost=function(){if(this.posted){var t=this.html;t.parentNode&&t.parentNode.removeChild(t),this.posted=!1}},e}(r(9328).MenuElement);e.AbstractPostable=i},6765:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])},n(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractVariableItem=void 0;var i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.generateHtml=function(){t.prototype.generateHtml.call(this);var e=this.html;this.span||this.generateSpan(),e.appendChild(this.span),this.update()},e.prototype.register=function(){this.variable.register(this)},e.prototype.unregister=function(){this.variable.unregister(this)},e.prototype.update=function(){this.updateAria(),this.span&&this.updateSpan()},e}(r(1340).AbstractItem);e.AbstractVariableItem=i},5179:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])},n(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.CloseButton=void 0;var i=r(8372),a=r(2165),s=function(t){function e(e){var r=t.call(this)||this;return r.element=e,r.className=a.HtmlClasses.MENUCLOSE,r.role="button",r}return o(e,t),e.prototype.generateHtml=function(){var t=document.createElement("span");t.classList.add(this.className),t.setAttribute("role",this.role),t.setAttribute("tabindex","0");var e=document.createElement("span");e.textContent="\xd7",t.appendChild(e),this.html=t},e.prototype.display=function(){},e.prototype.unpost=function(){t.prototype.unpost.call(this),this.element.unpost()},e.prototype.keydown=function(e){this.bubbleKey(),t.prototype.keydown.call(this,e)},e.prototype.space=function(t){this.unpost(),this.stop(t)},e.prototype.mousedown=function(t){this.unpost(),this.stop(t)},e}(i.AbstractPostable);e.CloseButton=s},5073:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])},n(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.ContextMenu=void 0;var i=r(1484),a=r(2165),s=r(1932),l=r(2358),c=function(t){function e(e){var r=t.call(this)||this;return r.factory=e,r.id="",r.moving=!1,r._store=new s.MenuStore(r),r.widgets=[],r.variablePool=new l.VariablePool,r}return o(e,t),e.fromJson=function(t,e){var r=e.pool,n=e.items,o=e.id,i=void 0===o?"":o,a=new this(t);a.id=i;var s=t.get("variable");r.forEach((function(e){return s(t,e,a.pool)}));var l=t.get("items")(t,n,a);return a.items=l,a},e.prototype.generateHtml=function(){this.isPosted()&&this.unpost(),t.prototype.generateHtml.call(this),this._frame=document.createElement("div"),this._frame.classList.add(a.HtmlClasses.MENUFRAME);var e="left: 0px; top: 0px; z-index: 200; width: 100%; height: 100%; border: 0px; padding: 0px; margin: 0px;";this._frame.setAttribute("style","position: absolute; "+e);var r=document.createElement("div");r.setAttribute("style","position: fixed; "+e),this._frame.appendChild(r),r.addEventListener("mousedown",function(t){this.unpost(),this.unpostWidgets(),this.stop(t)}.bind(this))},e.prototype.display=function(){document.body.appendChild(this.frame),this.frame.appendChild(this.html),this.focus()},e.prototype.escape=function(t){this.unpost(),this.unpostWidgets()},e.prototype.unpost=function(){if(t.prototype.unpost.call(this),!(this.widgets.length>0)){this.frame.parentNode.removeChild(this.frame);var e=this.store;this.moving||e.insertTaborder(),e.active.focus()}},e.prototype.left=function(t){this.move_(this.store.previous())},e.prototype.right=function(t){this.move_(this.store.next())},Object.defineProperty(e.prototype,"frame",{get:function(){return this._frame},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"store",{get:function(){return this._store},enumerable:!1,configurable:!0}),e.prototype.post=function(e,r){if(void 0!==r)return this.moving||this.store.removeTaborder(),void t.prototype.post.call(this,e,r);var n,o,i,a=e;if(a instanceof Event?(n=a.target,this.stop(a)):n=a,a instanceof MouseEvent&&(o=a.pageX,i=a.pageY,o||i||!a.clientX||(o=a.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,i=a.clientY+document.body.scrollTop+document.documentElement.scrollTop)),!o&&!i&&n){var s=window.pageXOffset||document.documentElement.scrollLeft,l=window.pageYOffset||document.documentElement.scrollTop,c=n.getBoundingClientRect();o=(c.right+c.left)/2+s,i=(c.bottom+c.top)/2+l}this.store.active=n,this.anchor=this.store.active;var u=this.html;o+u.offsetWidth>document.body.offsetWidth-5&&(o=document.body.offsetWidth-u.offsetWidth-5),this.post(o,i)},e.prototype.registerWidget=function(t){this.widgets.push(t)},e.prototype.unregisterWidget=function(t){var e=this.widgets.indexOf(t);e>-1&&this.widgets.splice(e,1),0===this.widgets.length&&this.unpost()},e.prototype.unpostWidgets=function(){this.widgets.forEach((function(t){return t.unpost()}))},e.prototype.toJson=function(){return{type:""}},e.prototype.move_=function(t){this.anchor&&t!==this.anchor&&(this.moving=!0,this.unpost(),this.post(t),this.moving=!1)},e}(i.AbstractMenu);e.ContextMenu=c},7309:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.CssStyles=void 0;var n=r(2165);!function(t){function e(t){return"."+(n.HtmlClasses[t]||t)}var r={};r[e("INFOCLOSE")]="{ top:.2em; right:.2em;}",r[e("INFOCONTENT")]="{ overflow:auto; text-align:left; font-size:80%; padding:.4em .6em; border:1px inset; margin:1em 0px; max-height:20em; max-width:30em; background-color:#EEEEEE; white-space:normal;}",r[e("INFO")+e("MOUSEPOST")]="{outline:none;}",r[e("INFO")]='{ position:fixed; left:50%; width:auto; text-align:center; border:3px outset; padding:1em 2em; background-color:#DDDDDD; color:black; cursor:default; font-family:message-box; font-size:120%; font-style:normal; text-indent:0; text-transform:none; line-height:normal; letter-spacing:normal; word-spacing:normal; word-wrap:normal; white-space:nowrap; float:none; z-index:201; border-radius: 15px; /* Opera 10.5 and IE9 */ -webkit-border-radius:15px; /* Safari and Chrome */ -moz-border-radius:15px; /* Firefox */ -khtml-border-radius:15px; /* Konqueror */ box-shadow:0px 10px 20px #808080; /* Opera 10.5 and IE9 */ -webkit-box-shadow:0px 10px 20px #808080; /* Safari 3 & Chrome */ -moz-box-shadow:0px 10px 20px #808080; /* Forefox 3.5 */ -khtml-box-shadow:0px 10px 20px #808080; /* Konqueror */ filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color="gray", Positive="true"); /* IE */}';var o={};o[e("MENU")]="{ position:absolute; background-color:white; color:black; width:auto; padding:5px 0px; border:1px solid #CCCCCC; margin:0; cursor:default; font: menu; text-align:left; text-indent:0; text-transform:none; line-height:normal; letter-spacing:normal; word-spacing:normal; word-wrap:normal; white-space:nowrap; float:none; z-index:201; border-radius: 5px; /* Opera 10.5 and IE9 */ -webkit-border-radius: 5px; /* Safari and Chrome */ -moz-border-radius: 5px; /* Firefox */ -khtml-border-radius: 5px; /* Konqueror */ box-shadow:0px 10px 20px #808080; /* Opera 10.5 and IE9 */ -webkit-box-shadow:0px 10px 20px #808080; /* Safari 3 & Chrome */ -moz-box-shadow:0px 10px 20px #808080; /* Forefox 3.5 */ -khtml-box-shadow:0px 10px 20px #808080; /* Konqueror */}",o[e("MENUITEM")]="{ padding: 1px 2em; background:transparent;}",o[e("MENUARROW")]="{ position:absolute; right:.5em; padding-top:.25em; color:#666666; font-family: null; font-size: .75em}",o[e("MENUACTIVE")+" "+e("MENUARROW")]="{color:white}",o[e("MENUARROW")+e("RTL")]="{left:.5em; right:auto}",o[e("MENUCHECK")]="{ position:absolute; left:.7em; font-family: null}",o[e("MENUCHECK")+e("RTL")]="{ right:.7em; left:auto }",o[e("MENURADIOCHECK")]="{ position:absolute; left: .7em;}",o[e("MENURADIOCHECK")+e("RTL")]="{ right: .7em; left:auto}",o[e("MENUINPUTBOX")]="{ padding-left: 1em; right:.5em; color:#666666; font-family: null;}",o[e("MENUINPUTBOX")+e("RTL")]="{ left: .1em;}",o[e("MENUCOMBOBOX")]="{ left:.1em; padding-bottom:.5em;}",o[e("MENUSLIDER")]="{ left: .1em;}",o[e("SLIDERVALUE")]="{ position:absolute; right:.1em; padding-top:.25em; color:#333333; font-size: .75em}",o[e("SLIDERBAR")]="{ outline: none; background: #d3d3d3}",o[e("MENULABEL")]="{ padding: 1px 2em 3px 1.33em; font-style:italic}",o[e("MENURULE")]="{ border-top: 1px solid #DDDDDD; margin: 4px 3px;}",o[e("MENUDISABLED")]="{ color:GrayText}",o[e("MENUACTIVE")]="{ background-color: #606872; color: white;}",o[e("MENUDISABLED")+":focus"]="{ background-color: #E8E8E8}",o[e("MENULABEL")+":focus"]="{ background-color: #E8E8E8}",o[e("CONTEXTMENU")+":focus"]="{ outline:none}",o[e("CONTEXTMENU")+" "+e("MENUITEM")+":focus"]="{ outline:none}",o[e("SELECTIONMENU")]="{ position:relative; float:left; border-bottom: none; -webkit-box-shadow:none; -webkit-border-radius:0px; }",o[e("SELECTIONITEM")]="{ padding-right: 1em;}",o[e("SELECTION")]="{ right: 40%; width:50%; }",o[e("SELECTIONBOX")]="{ padding: 0em; max-height:20em; max-width: none; background-color:#FFFFFF;}",o[e("SELECTIONDIVIDER")]="{ clear: both; border-top: 2px solid #000000;}",o[e("MENU")+" "+e("MENUCLOSE")]="{ top:-10px; left:-10px}";var i={};i[e("MENUCLOSE")]='{ position:absolute; cursor:pointer; display:inline-block; border:2px solid #AAA; border-radius:18px; -webkit-border-radius: 18px; /* Safari and Chrome */ -moz-border-radius: 18px; /* Firefox */ -khtml-border-radius: 18px; /* Konqueror */ font-family: "Courier New", Courier; font-size:24px; color:#F0F0F0}',i[e("MENUCLOSE")+" span"]="{ display:block; background-color:#AAA; border:1.5px solid; border-radius:18px; -webkit-border-radius: 18px; /* Safari and Chrome */ -moz-border-radius: 18px; /* Firefox */ -khtml-border-radius: 18px; /* Konqueror */ line-height:0; padding:8px 0 6px /* may need to be browser-specific */}",i[e("MENUCLOSE")+":hover"]="{ color:white!important; border:2px solid #CCC!important}",i[e("MENUCLOSE")+":hover span"]="{ background-color:#CCC!important}",i[e("MENUCLOSE")+":hover:focus"]="{ outline:none}";var a=!1,s=!1,l=!1;function c(t){l||(u(i,t),l=!0)}function u(t,e){var r=e||document,n=r.createElement("style");n.type="text/css";var o="";for(var i in t)o+=i,o+=" ",o+=t[i],o+="\n";n.innerHTML=o,r.head.appendChild(n)}t.addMenuStyles=function(t){s||(u(o,t),s=!0,c(t))},t.addInfoStyles=function(t){a||(u(r,t),a=!0,c(t))}}(e.CssStyles||(e.CssStyles={}))},2165:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.HtmlAttrs=e.HtmlClasses=void 0;function r(t){return"CtxtMenu_"+t}function n(t){return r(t)}function o(t){return r(t)}e.HtmlClasses={ATTACHED:n("Attached"),CONTEXTMENU:n("ContextMenu"),MENU:n("Menu"),MENUARROW:n("MenuArrow"),MENUACTIVE:n("MenuActive"),MENUCHECK:n("MenuCheck"),MENUCLOSE:n("MenuClose"),MENUCOMBOBOX:n("MenuComboBox"),MENUDISABLED:n("MenuDisabled"),MENUFRAME:n("MenuFrame"),MENUITEM:n("MenuItem"),MENULABEL:n("MenuLabel"),MENURADIOCHECK:n("MenuRadioCheck"),MENUINPUTBOX:n("MenuInputBox"),MENURULE:n("MenuRule"),MENUSLIDER:n("MenuSlider"),MOUSEPOST:n("MousePost"),RTL:n("RTL"),INFO:n("Info"),INFOCLOSE:n("InfoClose"),INFOCONTENT:n("InfoContent"),INFOSIGNATURE:n("InfoSignature"),INFOTITLE:n("InfoTitle"),SLIDERVALUE:n("SliderValue"),SLIDERBAR:n("SliderBar"),SELECTION:n("Selection"),SELECTIONBOX:n("SelectionBox"),SELECTIONMENU:n("SelectionMenu"),SELECTIONDIVIDER:n("SelectionDivider"),SELECTIONITEM:n("SelectionItem")},e.HtmlAttrs={COUNTER:o("Counter"),KEYDOWNFUNC:o("keydownFunc"),CONTEXTMENUFUNC:o("contextmenuFunc"),OLDTAB:o("Oldtabindex"),TOUCHFUNC:o("TouchFunc")}},4922:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])},n(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.Info=void 0;var i=r(5179),a=r(2165),s=function(t){function e(e,r,n){var o=t.call(this)||this;return o.title=e,o.signature=n,o.className=a.HtmlClasses.INFO,o.role="dialog",o.contentDiv=o.generateContent(),o.close=o.generateClose(),o.content=r||function(){return""},o}return o(e,t),e.prototype.attachMenu=function(t){this.menu=t},e.prototype.generateHtml=function(){t.prototype.generateHtml.call(this);var e=this.html;e.appendChild(this.generateTitle()),e.appendChild(this.contentDiv),e.appendChild(this.generateSignature()),e.appendChild(this.close.html),e.setAttribute("tabindex","0")},e.prototype.post=function(){t.prototype.post.call(this);var e=document.documentElement,r=this.html,n=window.innerHeight||e.clientHeight||e.scrollHeight||0,o=Math.floor(-r.offsetWidth/2),i=Math.floor((n-r.offsetHeight)/3);r.setAttribute("style","margin-left: "+o+"px; top: "+i+"px;"),window.event instanceof MouseEvent&&r.classList.add(a.HtmlClasses.MOUSEPOST),r.focus()},e.prototype.display=function(){this.menu.registerWidget(this),this.contentDiv.innerHTML=this.content();var t=this.menu.html;t.parentNode&&t.parentNode.removeChild(t),this.menu.frame.appendChild(this.html)},e.prototype.click=function(t){},e.prototype.keydown=function(e){this.bubbleKey(),t.prototype.keydown.call(this,e)},e.prototype.escape=function(t){this.unpost()},e.prototype.unpost=function(){t.prototype.unpost.call(this),this.html.classList.remove(a.HtmlClasses.MOUSEPOST),this.menu.unregisterWidget(this)},e.prototype.generateClose=function(){var t=new i.CloseButton(this),e=t.html;return e.classList.add(a.HtmlClasses.INFOCLOSE),e.setAttribute("aria-label","Close Dialog Box"),t},e.prototype.generateTitle=function(){var t=document.createElement("span");return t.innerHTML=this.title,t.classList.add(a.HtmlClasses.INFOTITLE),t},e.prototype.generateContent=function(){var t=document.createElement("div");return t.classList.add(a.HtmlClasses.INFOCONTENT),t.setAttribute("tabindex","0"),t},e.prototype.generateSignature=function(){var t=document.createElement("span");return t.innerHTML=this.signature,t.classList.add(a.HtmlClasses.INFOSIGNATURE),t},e.prototype.toJson=function(){return{type:""}},e}(r(8372).AbstractPostable);e.Info=s},1409:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])},n(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.Checkbox=void 0;var i=r(6765),a=r(2556),s=r(2165),l=function(t){function e(e,r,n,o){var i=t.call(this,e,"checkbox",r,o)||this;return i.role="menuitemcheckbox",i.variable=e.pool.lookup(n),i.register(),i}return o(e,t),e.fromJson=function(t,e,r){return new this(r,e.content,e.variable,e.id)},e.prototype.executeAction=function(){this.variable.setValue(!this.variable.getValue()),a.MenuUtil.close(this)},e.prototype.generateSpan=function(){this.span=document.createElement("span"),this.span.textContent="\u2713",this.span.classList.add(s.HtmlClasses.MENUCHECK)},e.prototype.updateAria=function(){this.html.setAttribute("aria-checked",this.variable.getValue()?"true":"false")},e.prototype.updateSpan=function(){this.span.style.display=this.variable.getValue()?"":"none"},e.prototype.toJson=function(){return{type:""}},e}(i.AbstractVariableItem);e.Checkbox=l},9886:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])},n(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.Combo=void 0;var i=r(6765),a=r(2556),s=r(2165),l=r(3205),c=function(t){function e(e,r,n,o){var i=t.call(this,e,"combobox",r,o)||this;return i.role="combobox",i.inputEvent=!1,i.variable=e.pool.lookup(n),i.register(),i}return o(e,t),e.fromJson=function(t,e,r){return new this(r,e.content,e.variable,e.id)},e.prototype.executeAction=function(){this.variable.setValue(this.input.value,a.MenuUtil.getActiveElement(this))},e.prototype.space=function(e){t.prototype.space.call(this,e),a.MenuUtil.close(this)},e.prototype.focus=function(){t.prototype.focus.call(this),this.input.focus()},e.prototype.unfocus=function(){t.prototype.unfocus.call(this),this.updateSpan()},e.prototype.generateHtml=function(){t.prototype.generateHtml.call(this),this.html.classList.add(s.HtmlClasses.MENUCOMBOBOX)},e.prototype.generateSpan=function(){this.span=document.createElement("span"),this.span.classList.add(s.HtmlClasses.MENUINPUTBOX),this.input=document.createElement("input"),this.input.addEventListener("keydown",this.inputKey.bind(this)),this.input.setAttribute("size","10em"),this.input.setAttribute("type","text"),this.input.setAttribute("tabindex","-1"),this.span.appendChild(this.input)},e.prototype.inputKey=function(t){this.bubbleKey(),this.inputEvent=!0},e.prototype.keydown=function(e){if(this.inputEvent&&e.keyCode!==l.KEY.ESCAPE&&e.keyCode!==l.KEY.RETURN)return this.inputEvent=!1,void e.stopPropagation();t.prototype.keydown.call(this,e),e.stopPropagation()},e.prototype.updateAria=function(){},e.prototype.updateSpan=function(){var t;try{t=this.variable.getValue(a.MenuUtil.getActiveElement(this))}catch(e){t=""}this.input.value=t},e.prototype.toJson=function(){return{type:""}},e}(i.AbstractVariableItem);e.Combo=c},3467:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])},n(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.Command=void 0;var i=r(1340),a=r(2556),s=function(t){function e(e,r,n,o){var i=t.call(this,e,"command",r,o)||this;return i.command=n,i}return o(e,t),e.fromJson=function(t,e,r){return new this(r,e.content,e.action,e.id)},e.prototype.executeAction=function(){try{this.command(a.MenuUtil.getActiveElement(this))}catch(t){a.MenuUtil.error(t,"Illegal command callback.")}a.MenuUtil.close(this)},e.prototype.toJson=function(){return{type:""}},e}(i.AbstractItem);e.Command=s},2965:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])},n(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.Label=void 0;var i=r(1340),a=r(2165),s=function(t){function e(e,r,n){return t.call(this,e,"label",r,n)||this}return o(e,t),e.fromJson=function(t,e,r){return new this(r,e.content,e.id)},e.prototype.generateHtml=function(){t.prototype.generateHtml.call(this),this.html.classList.add(a.HtmlClasses.MENULABEL)},e.prototype.toJson=function(){return{type:""}},e}(i.AbstractItem);e.Label=s},385:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])},n(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.Radio=void 0;var i=r(6765),a=r(2556),s=r(2165),l=function(t){function e(e,r,n,o){var i=t.call(this,e,"radio",r,o)||this;return i.role="menuitemradio",i.variable=e.pool.lookup(n),i.register(),i}return o(e,t),e.fromJson=function(t,e,r){return new this(r,e.content,e.variable,e.id)},e.prototype.executeAction=function(){this.variable.setValue(this.id),a.MenuUtil.close(this)},e.prototype.generateSpan=function(){this.span=document.createElement("span"),this.span.textContent="\u2713",this.span.classList.add(s.HtmlClasses.MENURADIOCHECK)},e.prototype.updateAria=function(){this.html.setAttribute("aria-checked",this.variable.getValue()===this.id?"true":"false")},e.prototype.updateSpan=function(){this.span.style.display=this.variable.getValue()===this.id?"":"none"},e.prototype.toJson=function(){return{type:""}},e}(i.AbstractVariableItem);e.Radio=l},3463:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])},n(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.Rule=void 0;var i=r(9329),a=r(2165),s=function(t){function e(e){var r=t.call(this,e,"rule")||this;return r.className=a.HtmlClasses.MENUITEM,r.role="separator",r}return o(e,t),e.fromJson=function(t,e,r){return new this(r)},e.prototype.generateHtml=function(){t.prototype.generateHtml.call(this);var e=this.html;e.classList.add(a.HtmlClasses.MENURULE),e.setAttribute("aria-orientation","vertical")},e.prototype.addEvents=function(t){},e.prototype.toJson=function(){return{type:"rule"}},e}(i.AbstractEntry);e.Rule=s},7625:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])},n(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.Slider=void 0;var i=r(6765),a=r(2556),s=r(2165),l=r(3205),c=function(t){function e(e,r,n,o){var i=t.call(this,e,"slider",r,o)||this;return i.role="slider",i.labelId="ctx_slideLabel"+a.MenuUtil.counter(),i.valueId="ctx_slideValue"+a.MenuUtil.counter(),i.inputEvent=!1,i.variable=e.pool.lookup(n),i.register(),i}return o(e,t),e.fromJson=function(t,e,r){return new this(r,e.content,e.variable,e.id)},e.prototype.executeAction=function(){this.variable.setValue(this.input.value,a.MenuUtil.getActiveElement(this)),this.update()},e.prototype.space=function(e){t.prototype.space.call(this,e),a.MenuUtil.close(this)},e.prototype.focus=function(){t.prototype.focus.call(this),this.input.focus()},e.prototype.unfocus=function(){t.prototype.unfocus.call(this),this.updateSpan()},e.prototype.generateHtml=function(){t.prototype.generateHtml.call(this),this.html.classList.add(s.HtmlClasses.MENUSLIDER),this.valueSpan=document.createElement("span"),this.valueSpan.setAttribute("id",this.valueId),this.valueSpan.classList.add(s.HtmlClasses.SLIDERVALUE),this.html.appendChild(this.valueSpan)},e.prototype.generateSpan=function(){this.span=document.createElement("span"),this.labelSpan=document.createElement("span"),this.labelSpan.setAttribute("id",this.labelId),this.labelSpan.appendChild(this.html.childNodes[0]),this.html.appendChild(this.labelSpan),this.input=document.createElement("input"),this.input.setAttribute("type","range"),this.input.setAttribute("min","0"),this.input.setAttribute("max","100"),this.input.setAttribute("aria-valuemin","0"),this.input.setAttribute("aria-valuemax","100"),this.input.setAttribute("aria-labelledby",this.labelId),this.input.addEventListener("keydown",this.inputKey.bind(this)),this.input.addEventListener("input",this.executeAction.bind(this)),this.input.classList.add(s.HtmlClasses.SLIDERBAR),this.span.appendChild(this.input)},e.prototype.inputKey=function(t){this.inputEvent=!0},e.prototype.mousedown=function(t){t.stopPropagation()},e.prototype.mouseup=function(t){event.stopPropagation()},e.prototype.keydown=function(e){var r=e.keyCode;return r===l.KEY.UP||r===l.KEY.DOWN?(e.preventDefault(),void t.prototype.keydown.call(this,e)):this.inputEvent&&r!==l.KEY.ESCAPE&&r!==l.KEY.RETURN?(this.inputEvent=!1,void e.stopPropagation()):(t.prototype.keydown.call(this,e),void e.stopPropagation())},e.prototype.updateAria=function(){var t=this.variable.getValue();t&&this.input&&(this.input.setAttribute("aria-valuenow",t),this.input.setAttribute("aria-valuetext",t+"%"))},e.prototype.updateSpan=function(){var t;try{t=this.variable.getValue(a.MenuUtil.getActiveElement(this)),this.valueSpan.innerHTML=t+"%"}catch(e){t=""}this.input.value=t},e.prototype.toJson=function(){return{type:""}},e}(i.AbstractVariableItem);e.Slider=c},6186:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])},n(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.Submenu=void 0;var i=r(1340),a=r(2165),s=function(t){function e(e,r,n){var o=t.call(this,e,"submenu",r,n)||this;return o._submenu=null,o}return o(e,t),e.fromJson=function(t,e,r){var n=e.content,o=e.menu,i=new this(r,n,e.id),a=t.get("subMenu")(t,o,i);return i.submenu=a,i},Object.defineProperty(e.prototype,"submenu",{get:function(){return this._submenu},set:function(t){this._submenu=t},enumerable:!1,configurable:!0}),e.prototype.mouseover=function(t){this.focus(),this.stop(t)},e.prototype.mouseout=function(t){this.stop(t)},e.prototype.unfocus=function(){if(this.submenu.isPosted()){if(this.menu.focused!==this)return t.prototype.unfocus.call(this),void this.menu.unpostSubmenus();this.html.setAttribute("tabindex","-1"),this.html.blur()}else t.prototype.unfocus.call(this)},e.prototype.focus=function(){t.prototype.focus.call(this),this.submenu.isPosted()||this.disabled||this.submenu.post()},e.prototype.executeAction=function(){this.submenu.isPosted()?this.submenu.unpost():this.submenu.post()},e.prototype.generateHtml=function(){t.prototype.generateHtml.call(this);var e=this.html;this.span=document.createElement("span"),this.span.textContent="\u25ba",this.span.classList.add(a.HtmlClasses.MENUARROW),e.appendChild(this.span),e.setAttribute("aria-haspopup","true")},e.prototype.left=function(e){this.submenu.isPosted()?this.submenu.unpost():t.prototype.left.call(this,e)},e.prototype.right=function(t){this.submenu.isPosted()?this.submenu.down(t):this.submenu.post()},e.prototype.toJson=function(){return{type:""}},e}(i.AbstractItem);e.Submenu=s},3205:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.KEY=void 0,function(t){t[t.RETURN=13]="RETURN",t[t.ESCAPE=27]="ESCAPE",t[t.SPACE=32]="SPACE",t[t.LEFT=37]="LEFT",t[t.UP=38]="UP",t[t.RIGHT=39]="RIGHT",t[t.DOWN=40]="DOWN"}(e.KEY||(e.KEY={}))},9328:function(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])},n(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,"__esModule",{value:!0}),e.MenuElement=void 0;var i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.addAttributes=function(t){for(var e in t)this.html.setAttribute(e,t[e])},Object.defineProperty(e.prototype,"html",{get:function(){return this._html||this.generateHtml(),this._html},set:function(t){this._html=t,this.addEvents(t)},enumerable:!1,configurable:!0}),e.prototype.generateHtml=function(){var t=document.createElement("div");t.classList.add(this.className),t.setAttribute("role",this.role),this.html=t},e.prototype.focus=function(){var t=this.html;t.setAttribute("tabindex","0"),t.focus()},e.prototype.unfocus=function(){var t=this.html;t.hasAttribute("tabindex")&&t.setAttribute("tabindex","-1");try{t.blur()}catch(t){}t.blur()},e}(r(2868).AbstractNavigatable);e.MenuElement=i},1932:function(t,e,r){var n=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")};Object.defineProperty(e,"__esModule",{value:!0}),e.MenuStore=void 0;var o=r(2556),i=r(2165),a=r(3205),s=function(){function t(t){this.menu=t,this.store=[],this._active=null,this.counter=0,this.attachedClass=i.HtmlClasses.ATTACHED+"_"+o.MenuUtil.counter(),this.taborder=!0,this.attrMap={}}return Object.defineProperty(t.prototype,"active",{get:function(){return this._active},set:function(t){do{if(-1!==this.store.indexOf(t)){this._active=t;break}t=t.parentNode}while(t)},enumerable:!1,configurable:!0}),t.prototype.next=function(){var t=this.store.length;if(0===t)return this.active=null,null;var e=this.store.indexOf(this.active);return e=-1===e?0:e0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a},i=this&&this.__values||function(t){var e="function"==typeof Symbol&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")},a=this&&this.__spread||function(){for(var t=[],e=0;e0)&&!(n=i.next()).done;)a.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a};Object.defineProperty(e,"__esModule",{value:!0}),e.SelectionBox=e.SelectionMenu=void 0;var a=r(2556),s=r(2165),l=r(1484),c=r(4922),u=function(t){function e(e){var r=t.call(this)||this;return r.anchor=e,r.className=s.HtmlClasses.SELECTIONMENU,r.variablePool=r.anchor.menu.pool,r.baseMenu=r.anchor.menu,r}return o(e,t),e.fromJson=function(t,e,r){var n=e.title,o=e.values,i=e.variable,a=new this(r),s=t.get("label")(t,{content:n||"",id:n||"id"},a),l=t.get("rule")(t,{},a),c=o.map((function(e){return t.get("radio")(t,{content:e,variable:i,id:e},a)})),u=[s,l].concat(c);return a.items=u,a},e.prototype.generateHtml=function(){t.prototype.generateHtml.call(this),this.items.forEach((function(t){return t.html.classList.add(s.HtmlClasses.SELECTIONITEM)}))},e.prototype.display=function(){},e.prototype.right=function(t){this.anchor.right(t)},e.prototype.left=function(t){this.anchor.left(t)},e}(l.AbstractMenu);e.SelectionMenu=u;var p=function(t){function e(e,r,n,o){void 0===n&&(n="none"),void 0===o&&(o="vertical");var i=t.call(this,e,null,r)||this;return i.style=n,i.grid=o,i._selections=[],i.prefix="ctxt-selection",i._balanced=!0,i}return o(e,t),e.fromJson=function(t,e,r){var n=e.title,o=e.signature,i=e.selections,a=new this(n,o,e.order,e.grid);a.attachMenu(r);var s=i.map((function(e){return t.get("selectionMenu")(t,e,a)}));return a.selections=s,a},e.prototype.attachMenu=function(t){this.menu=t},Object.defineProperty(e.prototype,"selections",{get:function(){return this._selections},set:function(t){var e=this;this._selections=[],t.forEach((function(t){return e.addSelection(t)}))},enumerable:!1,configurable:!0}),e.prototype.addSelection=function(t){t.anchor=this,this._selections.push(t)},e.prototype.rowDiv=function(t){var e=this,r=document.createElement("div");this.contentDiv.appendChild(r);var n=t.map((function(t){return r.appendChild(t.html),t.html.id||(t.html.id=e.prefix+a.MenuUtil.counter()),t.html.getBoundingClientRect()})),o=n.map((function(t){return t.width})),i=o.reduce((function(t,e){return t+e}),0),l=n.reduce((function(t,e){return Math.max(t,e.height)}),0);return r.classList.add(s.HtmlClasses.SELECTIONDIVIDER),r.setAttribute("style","height: "+l+"px;"),[r,i,l,o]},e.prototype.display=function(){if(t.prototype.display.call(this),this.order(),this.selections.length){for(var e=[],r=0,n=[],o=this.getChunkSize(this.selections.length),a=function(t){var a=s.selections.slice(t,t+o),l=i(s.rowDiv(a),4),c=l[0],u=l[1],p=l[2],h=l[3];e.push(c),r=Math.max(r,u),a.forEach((function(t){return t.html.style.height=p+"px"})),n=s.combineColumn(n,h)},s=this,l=0;ldocument.body.offsetWidth-5&&(i=Math.max(5,i-o-r.offsetWidth+6)),t.prototype.post.call(this,i,a)}},e.prototype.display=function(){this.baseMenu.frame.appendChild(this.html)},e.prototype.setBaseMenu=function(){var t=this;do{t=t.anchor.menu}while(t instanceof e);this.baseMenu=t},e.prototype.left=function(t){this.focused=null,this.anchor.focus()},e.prototype.toJson=function(){return{type:""}},e}(r(1484).AbstractMenu);e.SubMenu=i},3737:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.Variable=void 0;var n=r(2556),o=function(){function t(t,e,r){this._name=t,this.getter=e,this.setter=r,this.items=[]}return t.fromJson=function(t,e,r){var n=new this(e.name,e.getter,e.setter);r.insert(n)},Object.defineProperty(t.prototype,"name",{get:function(){return this._name},enumerable:!1,configurable:!0}),t.prototype.getValue=function(t){try{return this.getter(t)}catch(t){return n.MenuUtil.error(t,"Command of variable "+this.name+" failed."),null}},t.prototype.setValue=function(t,e){try{this.setter(t,e)}catch(t){n.MenuUtil.error(t,"Command of variable "+this.name+" failed.")}this.update()},t.prototype.register=function(t){-1===this.items.indexOf(t)&&this.items.push(t)},t.prototype.unregister=function(t){var e=this.items.indexOf(t);-1!==e&&this.items.splice(e,1)},t.prototype.update=function(){this.items.forEach((function(t){return t.update()}))},t.prototype.registerCallback=function(t){this.items.forEach((function(e){return e.registerCallback(t)}))},t.prototype.unregisterCallback=function(t){this.items.forEach((function(e){return e.unregisterCallback(t)}))},t.prototype.toJson=function(){return{type:"variable",name:this.name,getter:this.getter.toString(),setter:this.setter.toString()}},t}();e.Variable=o},2358:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.VariablePool=void 0;var r=function(){function t(){this.pool={}}return t.prototype.insert=function(t){this.pool[t.name]=t},t.prototype.lookup=function(t){return this.pool[t]},t.prototype.remove=function(t){delete this.pool[t]},t.prototype.update=function(){for(var t in this.pool)this.pool[t].update()},t}();e.VariablePool=r},3921:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractAudioRenderer=void 0;const n=r(5897);e.AbstractAudioRenderer=class{constructor(){this.separator_=" "}setSeparator(t){this.separator_=t}getSeparator(){return"braille"===n.default.getInstance().modality?"":this.separator_}error(t){return null}merge(t){let e="";const r=t.length-1;for(let n,o=0;n=t[o];o++)if(e+=n.speech,odelete t[e])),e.open.forEach((r=>t[r]=e[r]));const r=Object.keys(t);t.open=r},e.sortClose=function(t,e){if(t.length<=1)return t;const r=[];for(let n,o=0;n=e[o],t.length;o++)n.close&&n.close.length&&n.close.forEach((function(e){const n=t.indexOf(e);-1!==n&&(r.unshift(e),t.splice(n,1))}));return r};let s={},l=[];function c(t,e){const r=t[t.length-1];if(r){if(d(e)&&d(r)){if(void 0===r.join)return void(r.span=r.span.concat(e.span));const t=r.span.pop(),n=e.span.shift();return r.span.push(t+r.join+n),r.span=r.span.concat(e.span),void(r.join=e.join)}h(e)&&h(r)?r.pause=a(r.pause,e.pause):t.push(e)}else t.push(e)}function u(t,e){t.rate&&(e.rate=t.rate),t.pitch&&(e.pitch=t.pitch),t.volume&&(e.volume=t.volume)}function p(t){return"object"==typeof t&&t.open}function h(t){return"object"==typeof t&&1===Object.keys(t).length&&Object.keys(t)[0]===o.personalityProps.PAUSE}function d(t){const e=Object.keys(t);return"object"==typeof t&&(1===e.length&&"span"===e[0]||2===e.length&&("span"===e[0]&&"join"===e[1]||"span"===e[1]&&"join"===e[0]))}function f(t,e,r,n,s,l=!1){if(l){const l=t[t.length-1];let c;if(l&&(c=l[o.personalityProps.JOIN]),l&&!e.speech&&s&&h(l)){const t=o.personalityProps.PAUSE;l[t]=a(l[t],s[t]),s=null}if(l&&e.speech&&0===Object.keys(r).length&&d(l)){if(void 0!==c){const t=l.span.pop();e=new i.Span(t.speech+c+e.speech,t.attributes)}l.span.push(e),e=new i.Span("",{}),l[o.personalityProps.JOIN]=n}}0!==Object.keys(r).length&&t.push(r),e.speech&&t.push({span:[e],join:n}),s&&t.push(s)}function m(t,e){if(!e)return t;const r={};for(const n of o.personalityPropList){const o=t[n],i=e[n];if(!o&&!i||o&&i&&o===i)continue;const a=o||0;p(r)||(r.open=[],r.close=[]),o||r.close.push(n),i||r.open.push(n),i&&o&&(r.close.push(n),r.open.push(n)),e[n]=a,r[n]=a,s[n]?s[n].push(a):s[n]=[a]}if(p(r)){let t=r.close.slice();for(;t.length>0;){let o=l.pop();const i=(0,n.setdifference)(o,t);if(t=(0,n.setdifference)(t,o),o=i,0!==t.length){if(0!==o.length){r.close=r.close.concat(o),r.open=r.open.concat(o);for(let t,n=0;t=o[n];n++)r[t]=e[t]}}else 0!==o.length&&l.push(o)}l.push(r.open)}return r}e.personalityMarkup=function(t){s={},l=[];let e=[];const r={};for(let n,i=0;n=t[i];i++){let t=null;const i=n.descriptionSpan(),a=n.personality,s=a[o.personalityProps.JOIN];delete a[o.personalityProps.JOIN],void 0!==a[o.personalityProps.PAUSE]&&(t={[o.personalityProps.PAUSE]:a[o.personalityProps.PAUSE]},delete a[o.personalityProps.PAUSE]);f(e,i,m(a,r),s,t,!0)}return e=e.concat(function(){const t=[];for(let e=l.length-1;e>=0;e--){const r=l[e];if(r.length){const e={open:[],close:[]};for(let t=0;t"string"==typeof t?new c.Span(t,{}):t)),r=m.get(n.default.getInstance().markup);return r?r.merge(e):t.join()},e.finalize=function(t){const e=m.get(n.default.getInstance().markup);return e?e.finalize(t):t},e.error=function(t){const e=m.get(n.default.getInstance().markup);return e?e.error(t):""},e.registerRenderer=function(t,e){m.set(t,e)},e.isXml=function(){return m.get(n.default.getInstance().markup)instanceof d.XmlRenderer}},8639:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.LayoutRenderer=void 0;const n=r(2057),o=r(5740),i=r(4440),a=r(3706),s=r(2456);class l extends s.XmlRenderer{finalize(t){return function(t){c="";const e=o.parseInput(`${t}`);return n.Debugger.getInstance().output(o.formatXml(e.toString())),c=d(e),c}(t)}pause(t){return""}prosodyElement(t,e){return t===i.personalityProps.LAYOUT?`<${e}>`:""}closeTag(t){return``}markup(t){const e=[];let r=[];for(const n of t){if(!n.layout){r.push(n);continue}e.push(this.processContent(r)),r=[];const t=n.layout;t.match(/^begin/)?e.push("<"+t.replace(/^begin/,"")+">"):t.match(/^end/)?e.push(""):console.warn("Something went wrong with layout markup: "+t)}return e.push(this.processContent(r)),e.join("")}processContent(t){const e=[],r=a.personalityMarkup(t);for(let t,n=0;t=r[n];n++)t.span?e.push(this.merge(t.span)):a.isPauseElement(t);return e.join("")}}e.LayoutRenderer=l;let c="";const u={TABLE:function(t){let e=g(t);e.forEach((t=>{t.cells=t.cells.slice(1).slice(0,-1),t.width=t.width.slice(1).slice(0,-1)}));const[r,n]=b(e);return e=v(e,n),_(e,r)},CASES:function(t){let e=g(t);e.forEach((t=>{t.cells=t.cells.slice(0,-1),t.width=t.width.slice(0,-1)}));const[r,n]=b(e);return e=v(e,n),_(e,r)},CAYLEY:function(t){let e=g(t);e.forEach((t=>{t.cells=t.cells.slice(1).slice(0,-1),t.width=t.width.slice(1).slice(0,-1),t.sep=t.sep+t.sep}));const[r,n]=b(e),o={lfence:"",rfence:"",cells:n.map((t=>"\u2810"+new Array(t).join("\u2812"))),width:n,height:1,sep:e[0].sep};return e.splice(1,0,o),e=v(e,n),_(e,r)},MATRIX:function(t){let e=g(t);const[r,n]=b(e);return e=v(e,n),_(e,r)},CELL:d,FENCE:d,ROW:d,FRACTION:function(t){const[e,r,,n,o]=Array.from(t.childNodes),i=p(r),a=p(n),s=m(i),l=m(a);let c=Math.max(s,l);const u=e+new Array(c+1).join("\u2812")+o;return c=u.length,`${O(i,c)}\n${u}\n${O(a,c)}`},NUMERATOR:E,DENOMINATOR:E};function p(t){const e=o.tagName(t),r=u[e];return r?r(t):t.textContent}function h(t,e){if(!t||!e)return t+e;const r=f(t),n=f(e),o=r-n;t=o<0?y(t,n,m(t)):t,e=o>0?y(e,r,m(e)):e;const i=t.split(/\r\n|\r|\n/),a=e.split(/\r\n|\r|\n/),s=[];for(let t=0;tMath.max(e.length,t)),0)}function y(t,e,r){return t=function(t,e){const r=e-f(t);return t+(r>0?new Array(r+1).join("\n"):"")}(t,e),function(t,e){const r=t.split(/\r\n|\r|\n/),n=[];for(const t of r){const r=e-t.length;n.push(t+(r>0?new Array(r+1).join("\u2800"):""))}return n.join("\n")}(t,r)}function g(t){const e=Array.from(t.childNodes),r=[];for(const t of e)t.nodeType===o.NodeType.ELEMENT_NODE&&r.push(M(t));return r}function b(t){const e=t.reduce(((t,e)=>Math.max(e.height,t)),0),r=[];for(let e=0;et.width[e])).reduce(((t,e)=>Math.max(t,e)),0));return[e,r]}function v(t,e){const r=[];for(const n of t){if(0===n.height)continue;const t=[];for(let r=0;rt.lfence+t.cells.join(t.sep)+t.rfence)).join("\n");const r=[];for(const e of t){const t=S(e.sep,e.height);let n=e.cells.shift();for(;e.cells.length;)n=h(n,t),n=h(n,e.cells.shift());n=h(S(e.lfence,e.height),n),n=h(n,S(e.rfence,e.height)),r.push(n),r.push(e.lfence+new Array(m(n)-3).join(e.sep)+e.rfence)}return r.slice(0,-1).join("\n")}function S(t,e){let r="";for(;e;)r+=t+"\n",e--;return r.slice(0,-1)}function x(t){return t.nodeType===o.NodeType.ELEMENT_NODE&&"FENCE"===o.tagName(t)?p(t):""}function M(t){const e=Array.from(t.childNodes),r=x(e[0]),n=x(e[e.length-1]);r&&e.shift(),n&&e.pop();let i="";const a=[];for(const t of e){if(t.nodeType===o.NodeType.TEXT_NODE){i=t.textContent;continue}const e=p(t);a.push(e)}return{lfence:r,rfence:n,sep:i,cells:a,height:a.reduce(((t,e)=>Math.max(f(e),t)),0),width:a.map(m)}}function O(t,e){const r=(e-m(t))/2,[n,o]=Math.floor(r)===r?[r,r]:[Math.floor(r),Math.ceil(r)],i=t.split(/\r\n|\r|\n/),a=[],[s,l]=[new Array(n+1).join("\u2800"),new Array(o+1).join("\u2800")];for(const t of i)a.push(s+t+l);return a.join("\n")}function E(t){const e=t.firstChild,r=d(t);if(e&&e.nodeType===o.NodeType.ELEMENT_NODE){if("ENGLISH"===o.tagName(e))return"\u2830"+r;if("NUMBER"===o.tagName(e))return"\u283c"+r}return r}},182:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.MarkupRenderer=void 0;const n=r(4440),o=r(3921);class i extends o.AbstractAudioRenderer{constructor(){super(...arguments),this.ignoreElements=[n.personalityProps.LAYOUT],this.scaleFunction=null}setScaleFunction(t,e,r,n,o=0){this.scaleFunction=i=>{const a=(i-t)/(e-t),s=r*(1-a)+n*a;return+(Math.round(s+"e+"+o)+"e-"+o)}}applyScaleFunction(t){return this.scaleFunction?this.scaleFunction(t):t}ignoreElement(t){return-1!==this.ignoreElements.indexOf(t)}}e.MarkupRenderer=i},8990:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.PunctuationRenderer=void 0;const n=r(4440),o=r(3921),i=r(3706);class a extends o.AbstractAudioRenderer{markup(t){const e=i.personalityMarkup(t);let r="",o=null,a=!1;for(let t,s=0;t=e[s];s++)i.isMarkupElement(t)||(i.isPauseElement(t)?a&&(o=i.mergePause(o,t,Math.max)):(o&&(r+=this.pause(o[n.personalityProps.PAUSE]),o=null),r+=(a?this.getSeparator():"")+this.merge(t.span),a=!0));return r}pause(t){let e;return e="number"==typeof t?t<=250?"short":t<=500?"medium":"long":t,a.PAUSE_PUNCTUATION.get(e)||""}}e.PunctuationRenderer=a,a.PAUSE_PUNCTUATION=new Map([["short",","],["medium",";"],["long","."]])},6660:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.SableRenderer=void 0;const n=r(4440),o=r(2456);class i extends o.XmlRenderer{finalize(t){return''+this.getSeparator()+t+this.getSeparator()+""}pause(t){return''}prosodyElement(t,e){switch(e=this.applyScaleFunction(e),t){case n.personalityProps.PITCH:return'';case n.personalityProps.RATE:return'';case n.personalityProps.VOLUME:return'';default:return"<"+t.toUpperCase()+' VALUE="'+e+'">'}}closeTag(t){return""}}e.SableRenderer=i},9536:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.Span=void 0;e.Span=class{constructor(t,e){this.speech=t,this.attributes=e}}},7504:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.SsmlRenderer=void 0;const n=r(5897),o=r(4440),i=r(2456);class a extends i.XmlRenderer{finalize(t){return''+this.getSeparator()+t+this.getSeparator()+""}pause(t){return''}prosodyElement(t,e){const r=(e=Math.floor(this.applyScaleFunction(e)))<0?e.toString():"+"+e.toString();return"":'%">')}closeTag(t){return""}}e.SsmlRenderer=a},3757:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.SsmlStepRenderer=void 0;const n=r(7504);class o extends n.SsmlRenderer{markup(t){return o.MARKS={},super.markup(t)}merge(t){const e=[];for(let r=0;r'),o.MARKS[i]=!0),1===n.speech.length&&n.speech.match(/[a-zA-Z]/)?e.push(''+n.speech+""):e.push(n.speech)}return e.join(this.getSeparator())}}e.SsmlStepRenderer=o,o.CHARACTER_ATTR="character",o.MARKS={}},4032:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.StringRenderer=void 0;const n=r(3921),o=r(3706);class i extends n.AbstractAudioRenderer{markup(t){let e="";const r=(0,o.personalityMarkup)(t).filter((t=>t.span));if(!r.length)return e;const n=r.length-1;for(let t,o=0;t=r[o];o++){if(t.span&&(e+=this.merge(t.span)),o>=n)continue;const r=t.join;e+=void 0===r?this.getSeparator():r}return e}}e.StringRenderer=i},2456:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.XmlRenderer=void 0;const n=r(5897),o=r(3706),i=r(182);class a extends i.MarkupRenderer{markup(t){this.setScaleFunction(-2,2,-100,100,2);const e=o.personalityMarkup(t),r=[],i=[];for(let t,a=0;t=e[a];a++)if(t.span)r.push(this.merge(t.span));else if(o.isPauseElement(t))r.push(this.pause(t));else{if(t.close.length)for(let e=0;e{r.push(this.prosodyElement(e,t[e])),i.push(e)}))}}return r.join(" ")}}e.XmlRenderer=a},707:function(t,e){function r(t,e){return t?e?t.filter((t=>e.indexOf(t)<0)):t:[]}Object.defineProperty(e,"__esModule",{value:!0}),e.union=e.setdifference=e.interleaveLists=e.removeEmpty=void 0,e.removeEmpty=function(t){return t.filter((t=>t))},e.interleaveLists=function(t,e){const r=[];for(;t.length||e.length;)t.length&&r.push(t.shift()),e.length&&r.push(e.shift());return r},e.setdifference=r,e.union=function(t,e){return t&&e?t.concat(r(e,t)):t||e||[]}},2139:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.loadScript=e.loadMapsForIE_=e.installWGXpath_=e.loadWGXpath_=e.mapsForIE=e.detectEdge=e.detectIE=void 0;const n=r(2315),o=r(5274);function i(t){l(n.default.WGXpath),a(t)}function a(t,e){let r=e||1;"undefined"==typeof wgxpath&&r<10?setTimeout((function(){a(t,r++)}),200):r>=10||(n.default.wgxpath=wgxpath,t?n.default.wgxpath.install({document:document}):n.default.wgxpath.install(),o.xpath.evaluate=document.evaluate,o.xpath.result=XPathResult,o.xpath.createNSResolver=document.createNSResolver)}function s(){l(n.default.mathmapsIePath)}function l(t){const e=n.default.document.createElement("script");e.type="text/javascript",e.src=t,n.default.document.head?n.default.document.head.appendChild(e):n.default.document.body.appendChild(e)}e.detectIE=function(){return"undefined"!=typeof window&&"ActiveXObject"in window&&"clipboardData"in window&&(s(),i(),!0)},e.detectEdge=function(){var t;return"undefined"!=typeof window&&"MSGestureEvent"in window&&null===(null===(t=window.chrome)||void 0===t?void 0:t.loadTimes)&&(document.evaluate=null,i(!0),!0)},e.mapsForIE=null,e.loadWGXpath_=i,e.installWGXpath_=a,e.loadMapsForIE_=s,e.loadScript=l},2057:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.Debugger=void 0;const n=r(2315);class o{constructor(){this.isActive_=!1,this.outputFunction_=console.info,this.stream_=null}static getInstance(){return o.instance=o.instance||new o,o.instance}init(t){t&&this.startDebugFile_(t),this.isActive_=!0}output(...t){this.isActive_&&this.output_(t)}generateOutput(t){this.isActive_&&this.output_(t.apply(t,[]))}exit(t=(()=>{})){this.isActive_&&this.stream_&&this.stream_.end("","",t)}startDebugFile_(t){this.stream_=n.default.fs.createWriteStream(t),this.outputFunction_=function(...t){this.stream_.write(t.join(" ")),this.stream_.write("\n")}.bind(this),this.stream_.on("error",function(t){console.info("Invalid log file. Debug information sent to console."),this.outputFunction_=console.info}.bind(this)),this.stream_.on("finish",(function(){console.info("Finalizing debug file.")}))}output_(t){this.outputFunction_.apply(console.info===this.outputFunction_?console:this.outputFunction_,["Speech Rule Engine Debugger:"].concat(t))}}e.Debugger=o},5740:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.serializeXml=e.cloneNode=e.tagName=e.querySelectorAll=e.querySelectorAllByAttrValue=e.querySelectorAllByAttr=e.formatXml=e.createTextNode=e.createElementNS=e.createElement=e.replaceNode=e.NodeType=e.parseInput=e.XML_ENTITIES=e.trimInput_=e.toArray=void 0;const n=r(5897),o=r(4440),i=r(2315),a=r(5274);function s(t){const e=[];for(let r=0,n=t.length;r[ \f\n\r\t\v\u200b]+<").trim()}function c(t,e){if(!e)return[!1,""];const r=t.match(/^<([^> ]+).*>/),n=e.match(/^<\/([^>]+)>(.*)/);return r&&n&&r[1]===n[1]?[!0,n[2]]:[!1,""]}e.toArray=s,e.trimInput_=l,e.XML_ENTITIES={"<":!0,">":!0,"&":!0,""":!0,"'":!0},e.parseInput=function(t){const e=new i.default.xmldom.DOMParser,r=l(t),s=!!r.match(/&(?!lt|gt|amp|quot|apos)\w+;/g);if(!r)throw new Error("Empty input!");try{const t=e.parseFromString(r,s?"text/html":"text/xml");return n.default.getInstance().mode===o.Mode.HTTP?(a.xpath.currentDocument=t,s?t.body.childNodes[0]:t.documentElement):t.documentElement}catch(t){throw new n.SREError("Illegal input: "+t.message)}},function(t){t[t.ELEMENT_NODE=1]="ELEMENT_NODE",t[t.ATTRIBUTE_NODE=2]="ATTRIBUTE_NODE",t[t.TEXT_NODE=3]="TEXT_NODE",t[t.CDATA_SECTION_NODE=4]="CDATA_SECTION_NODE",t[t.ENTITY_REFERENCE_NODE=5]="ENTITY_REFERENCE_NODE",t[t.ENTITY_NODE=6]="ENTITY_NODE",t[t.PROCESSING_INSTRUCTION_NODE=7]="PROCESSING_INSTRUCTION_NODE",t[t.COMMENT_NODE=8]="COMMENT_NODE",t[t.DOCUMENT_NODE=9]="DOCUMENT_NODE",t[t.DOCUMENT_TYPE_NODE=10]="DOCUMENT_TYPE_NODE",t[t.DOCUMENT_FRAGMENT_NODE=11]="DOCUMENT_FRAGMENT_NODE",t[t.NOTATION_NODE=12]="NOTATION_NODE"}(e.NodeType||(e.NodeType={})),e.replaceNode=function(t,e){t.parentNode&&(t.parentNode.insertBefore(e,t),t.parentNode.removeChild(t))},e.createElement=function(t){return i.default.document.createElement(t)},e.createElementNS=function(t,e){return i.default.document.createElementNS(t,e)},e.createTextNode=function(t){return i.default.document.createTextNode(t)},e.formatXml=function(t){let e="",r=/(>)(<)(\/*)/g,n=0,o=(t=t.replace(r,"$1\r\n$2$3")).split("\r\n");for(r=/(\.)*(<)(\/*)/g,o=o.map((t=>t.replace(r,"$1\r\n$2$3").split("\r\n"))).reduce(((t,e)=>t.concat(e)),[]);o.length;){let t=o.shift();if(!t)continue;let r=0;if(t.match(/^<\w[^>/]*>[^>]+$/)){const e=c(t,o[0]);e[0]?e[1]?(t+=o.shift().slice(0,-e[1].length),e[1].trim()&&o.unshift(e[1])):t+=o.shift():r=1}else if(t.match(/^<\/\w/))0!==n&&(n-=1);else if(t.match(/^<\w[^>]*[^/]>.*$/))r=1;else if(t.match(/^<\w[^>]*\/>.+$/)){const e=t.indexOf(">")+1;t.slice(e).trim()&&o.unshift(),t=t.slice(0,e)}else r=0;e+=new Array(n+1).join(" ")+t+"\r\n",n+=r}return e},e.querySelectorAllByAttr=function(t,e){return t.querySelectorAll?s(t.querySelectorAll(`[${e}]`)):a.evalXPath(`.//*[@${e}]`,t)},e.querySelectorAllByAttrValue=function(t,e,r){return t.querySelectorAll?s(t.querySelectorAll(`[${e}="${r}"]`)):a.evalXPath(`.//*[@${e}="${r}"]`,t)},e.querySelectorAll=function(t,e){return t.querySelectorAll?s(t.querySelectorAll(e)):a.evalXPath(`.//${e}`,t)},e.tagName=function(t){return t.tagName.toUpperCase()},e.cloneNode=function(t){return t.cloneNode(!0)},e.serializeXml=function(t){return(new i.default.xmldom.XMLSerializer).serializeToString(t)}},5897:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.EnginePromise=e.SREError=void 0;const n=r(1676),o=r(4440),i=r(2057),a=r(1377);class s extends Error{constructor(t=""){super(),this.message=t,this.name="SRE Error"}}e.SREError=s;class l{constructor(){this.customLoader=null,this.parsers={},this.comparator=null,this.mode=o.Mode.SYNC,this.init=!0,this.delay=!1,this.comparators={},this.domain="mathspeak",this.style=n.DynamicCstr.DEFAULT_VALUES[n.Axis.STYLE],this._defaultLocale=n.DynamicCstr.DEFAULT_VALUES[n.Axis.LOCALE],this.locale=this.defaultLocale,this.subiso="",this.modality=n.DynamicCstr.DEFAULT_VALUES[n.Axis.MODALITY],this.speech=o.Speech.NONE,this.markup=o.Markup.NONE,this.walker="Table",this.structure=!1,this.ruleSets=[],this.strict=!1,this.isIE=!1,this.isEdge=!1,this.rate="100",this.pprint=!1,this.config=!1,this.rules="",this.prune="",this.evaluator=l.defaultEvaluator,this.defaultParser=new n.DynamicCstrParser(n.DynamicCstr.DEFAULT_ORDER),this.parser=this.defaultParser,this.dynamicCstr=n.DynamicCstr.defaultCstr()}set defaultLocale(t){this._defaultLocale=a.Variables.ensureLocale(t,this._defaultLocale)}get defaultLocale(){return this._defaultLocale}static getInstance(){return l.instance=l.instance||new l,l.instance}static defaultEvaluator(t,e){return t}static evaluateNode(t){return l.nodeEvaluator(t)}getRate(){const t=parseInt(this.rate,10);return isNaN(t)?100:t}setDynamicCstr(t){if(this.defaultLocale&&(n.DynamicCstr.DEFAULT_VALUES[n.Axis.LOCALE]=this.defaultLocale),t){const e=Object.keys(t);for(let r=0;r{void 0!==t[r]&&(e[r]=t[r])};return r("mode"),e.configurate(t),s.default.BINARY_FEATURES.forEach((r=>{void 0!==t[r]&&(e[r]=!!t[r])})),s.default.STRING_FEATURES.forEach(r),t.json&&(c.default.jsonPath=l.makePath(t.json)),t.xpath&&(c.default.WGXpath=t.xpath),e.setCustomLoader(t.custom),function(t){t.isIE=a.detectIE(),t.isEdge=a.detectEdge()}(e),o.setLocale(),e.setDynamicCstr(),e.init?(s.EnginePromise.promises.init=new Promise(((t,e)=>{setTimeout((()=>{t("init")}),10)})),e.init=!1,s.EnginePromise.get()):e.delay?(e.delay=!1,s.EnginePromise.get()):i.loadLocale()}))}},8496:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.Event=e.EventType=e.Move=e.KeyCode=void 0,function(t){t[t.ENTER=13]="ENTER",t[t.ESC=27]="ESC",t[t.SPACE=32]="SPACE",t[t.PAGE_UP=33]="PAGE_UP",t[t.PAGE_DOWN=34]="PAGE_DOWN",t[t.END=35]="END",t[t.HOME=36]="HOME",t[t.LEFT=37]="LEFT",t[t.UP=38]="UP",t[t.RIGHT=39]="RIGHT",t[t.DOWN=40]="DOWN",t[t.TAB=9]="TAB",t[t.LESS=188]="LESS",t[t.GREATER=190]="GREATER",t[t.DASH=189]="DASH",t[t.ZERO=48]="ZERO",t[t.ONE=49]="ONE",t[t.TWO=50]="TWO",t[t.THREE=51]="THREE",t[t.FOUR=52]="FOUR",t[t.FIVE=53]="FIVE",t[t.SIX=54]="SIX",t[t.SEVEN=55]="SEVEN",t[t.EIGHT=56]="EIGHT",t[t.NINE=57]="NINE",t[t.A=65]="A",t[t.B=66]="B",t[t.C=67]="C",t[t.D=68]="D",t[t.E=69]="E",t[t.F=70]="F",t[t.G=71]="G",t[t.H=72]="H",t[t.I=73]="I",t[t.J=74]="J",t[t.K=75]="K",t[t.L=76]="L",t[t.M=77]="M",t[t.N=78]="N",t[t.O=79]="O",t[t.P=80]="P",t[t.Q=81]="Q",t[t.R=82]="R",t[t.S=83]="S",t[t.T=84]="T",t[t.U=85]="U",t[t.V=86]="V",t[t.W=87]="W",t[t.X=88]="X",t[t.Y=89]="Y",t[t.Z=90]="Z"}(e.KeyCode||(e.KeyCode={})),e.Move=new Map([[13,"ENTER"],[27,"ESC"],[32,"SPACE"],[33,"PAGE_UP"],[34,"PAGE_DOWN"],[35,"END"],[36,"HOME"],[37,"LEFT"],[38,"UP"],[39,"RIGHT"],[40,"DOWN"],[9,"TAB"],[188,"LESS"],[190,"GREATER"],[189,"DASH"],[48,"ZERO"],[49,"ONE"],[50,"TWO"],[51,"THREE"],[52,"FOUR"],[53,"FIVE"],[54,"SIX"],[55,"SEVEN"],[56,"EIGHT"],[57,"NINE"],[65,"A"],[66,"B"],[67,"C"],[68,"D"],[69,"E"],[70,"F"],[71,"G"],[72,"H"],[73,"I"],[74,"J"],[75,"K"],[76,"L"],[77,"M"],[78,"N"],[79,"O"],[80,"P"],[81,"Q"],[82,"R"],[83,"S"],[84,"T"],[85,"U"],[86,"V"],[87,"W"],[88,"X"],[89,"Y"],[90,"Z"]]),function(t){t.CLICK="click",t.DBLCLICK="dblclick",t.MOUSEDOWN="mousedown",t.MOUSEUP="mouseup",t.MOUSEOVER="mouseover",t.MOUSEOUT="mouseout",t.MOUSEMOVE="mousemove",t.SELECTSTART="selectstart",t.KEYPRESS="keypress",t.KEYDOWN="keydown",t.KEYUP="keyup",t.TOUCHSTART="touchstart",t.TOUCHMOVE="touchmove",t.TOUCHEND="touchend",t.TOUCHCANCEL="touchcancel"}(e.EventType||(e.EventType={}));e.Event=class{constructor(t,e,r){this.src=t,this.type=e,this.callback=r}add(){this.src.addEventListener(this.type,this.callback)}remove(){this.src.removeEventListener(this.type,this.callback)}}},7248:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.localePath=e.makePath=void 0;const n=r(2315);function o(t){return t.match("/$")?t:t+"/"}e.makePath=o,e.localePath=function(t,e="json"){return o(n.default.jsonPath)+t+(e.match(/^\./)?e:"."+e)}},3769:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.KeyProcessor=e.Processor=void 0;const n=r(8496);class o{constructor(t,e){this.name=t,this.process=e.processor,this.postprocess=e.postprocessor||((t,e)=>t),this.processor=this.postprocess?function(t){return this.postprocess(this.process(t),t)}:this.process,this.print=e.print||o.stringify_,this.pprint=e.pprint||this.print}static stringify_(t){return t?t.toString():t}}e.Processor=o,o.LocalState={walker:null,speechGenerator:null,highlighter:null};class i extends o{constructor(t,e){super(t,e),this.key=e.key||i.getKey_}static getKey_(t){return"string"==typeof t?n.KeyCode[t.toUpperCase()]:t}}e.KeyProcessor=i},6499:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.keypress=e.output=e.print=e.process=e.set=void 0;const n=r(8290),o=r(5714),i=r(3090),a=r(4356),s=r(1414),l=r(9552),c=r(9543),u=r(3362),p=r(1204),h=r(5740),d=r(5897),f=r(4440),m=r(3769),y=r(5274),g=new Map;function b(t){g.set(t.name,t)}function v(t){const e=g.get(t);if(!e)throw new d.SREError("Unknown processor "+t);return e}function _(t,e){const r=v(t);try{return r.processor(e)}catch(t){throw new d.SREError("Processing error for expression "+e)}}function S(t,e){const r=v(t);return d.default.getInstance().pprint?r.pprint(e):r.print(e)}e.set=b,e.process=_,e.print=S,e.output=function(t,e){const r=v(t);try{const t=r.processor(e);return d.default.getInstance().pprint?r.pprint(t):r.print(t)}catch(t){throw new d.SREError("Processing error for expression "+e)}},e.keypress=function(t,e){const r=v(t),n=r instanceof m.KeyProcessor?r.key(e):e,o=r.processor(n);return d.default.getInstance().pprint?r.pprint(o):r.print(o)},b(new m.Processor("semantic",{processor:function(t){const e=h.parseInput(t);return s.xmlTree(e)},postprocessor:function(t,e){const r=d.default.getInstance().speech;if(r===f.Speech.NONE)return t;const o=h.cloneNode(t);let i=c.computeMarkup(o);if(r===f.Speech.SHALLOW)return t.setAttribute("speech",n.finalize(i)),t;const a=y.evalXPath(".//*[@id]",t),s=y.evalXPath(".//*[@id]",o);for(let t,e,r=0;t=a[r],e=s[r];r++)i=c.computeMarkup(e),t.setAttribute("speech",n.finalize(i));return t},pprint:function(t){return h.formatXml(t.toString())}})),b(new m.Processor("speech",{processor:function(t){const e=h.parseInput(t),r=s.xmlTree(e),o=c.computeSpeech(r);return n.finalize(n.markup(o))},pprint:function(t){const e=t.toString();return n.isXml()?h.formatXml(e):e}})),b(new m.Processor("json",{processor:function(t){const e=h.parseInput(t);return s.getTree(e).toJson()},postprocessor:function(t,e){const r=d.default.getInstance().speech;if(r===f.Speech.NONE)return t;const o=h.parseInput(e),i=s.xmlTree(o),a=c.computeMarkup(i);if(r===f.Speech.SHALLOW)return t.stree.speech=n.finalize(a),t;const l=t=>{const e=y.evalXPath(`.//*[@id=${t.id}]`,i)[0],r=c.computeMarkup(e);t.speech=n.finalize(r),t.children&&t.children.forEach(l)};return l(t.stree),t},print:function(t){return JSON.stringify(t)},pprint:function(t){return JSON.stringify(t,null,2)}})),b(new m.Processor("description",{processor:function(t){const e=h.parseInput(t),r=s.xmlTree(e);return c.computeSpeech(r)},print:function(t){return JSON.stringify(t)},pprint:function(t){return JSON.stringify(t,null,2)}})),b(new m.Processor("enriched",{processor:function(t){return o.semanticMathmlSync(t)},postprocessor:function(t,e){const r=p.getSemanticRoot(t);let n;switch(d.default.getInstance().speech){case f.Speech.NONE:break;case f.Speech.SHALLOW:n=l.generator("Adhoc"),n.getSpeech(r,t);break;case f.Speech.DEEP:n=l.generator("Tree"),n.getSpeech(t,t)}return t},pprint:function(t){return h.formatXml(t.toString())}})),b(new m.Processor("walker",{processor:function(t){const e=l.generator("Node");m.Processor.LocalState.speechGenerator=e,e.setOptions({modality:d.default.getInstance().modality,locale:d.default.getInstance().locale,domain:d.default.getInstance().domain,style:d.default.getInstance().style}),m.Processor.LocalState.highlighter=i.highlighter({color:"black"},{color:"white"},{renderer:"NativeMML"});const r=_("enriched",t),n=S("enriched",r);return m.Processor.LocalState.walker=u.walker(d.default.getInstance().walker,r,e,m.Processor.LocalState.highlighter,n),m.Processor.LocalState.walker},print:function(t){return m.Processor.LocalState.walker.speech()}})),b(new m.KeyProcessor("move",{processor:function(t){if(!m.Processor.LocalState.walker)return null;return!1===m.Processor.LocalState.walker.move(t)?n.error(t):m.Processor.LocalState.walker.speech()}})),b(new m.Processor("number",{processor:function(t){const e=parseInt(t,10);return isNaN(e)?"":a.LOCALE.NUMBERS.numberToWords(e)}})),b(new m.Processor("ordinal",{processor:function(t){const e=parseInt(t,10);return isNaN(e)?"":a.LOCALE.NUMBERS.wordOrdinal(e)}})),b(new m.Processor("numericOrdinal",{processor:function(t){const e=parseInt(t,10);return isNaN(e)?"":a.LOCALE.NUMBERS.numericOrdinal(e)}})),b(new m.Processor("vulgar",{processor:function(t){const[e,r]=t.split("/").map((t=>parseInt(t,10)));return isNaN(e)||isNaN(r)?"":_("speech",`${e}${r}`)}}))},2998:function(t,e,r){var n=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function a(t){try{l(n.next(t))}catch(t){i(t)}}function s(t){try{l(n.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(a,s)}l((n=n.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.localePath=e.exit=e.move=e.walk=e.processFile=e.file=e.vulgar=e.numericOrdinal=e.ordinal=e.number=e.toEnriched=e.toDescription=e.toJson=e.toSemantic=e.toSpeech=e.localeLoader=e.engineReady=e.engineSetup=e.setupEngine=e.version=void 0;const o=r(5897),i=r(6828),a=r(4440),s=r(7248),l=r(6499),c=r(2315),u=r(1377),p=r(6141);function h(t){return n(this,void 0,void 0,(function*(){return(0,i.setup)(t)}))}function d(t,e){return l.process(t,e)}function f(t,e,r){switch(o.default.getInstance().mode){case a.Mode.ASYNC:return function(t,e,r){return n(this,void 0,void 0,(function*(){const n=yield c.default.fs.promises.readFile(e,{encoding:"utf8"}),i=l.output(t,n);if(r)try{c.default.fs.promises.writeFile(r,i)}catch(t){throw new o.SREError("Can not write to file: "+r)}return i}))}(t,e,r);case a.Mode.SYNC:return function(t,e,r){const n=function(t){let e;try{e=c.default.fs.readFileSync(t,{encoding:"utf8"})}catch(e){throw new o.SREError("Can not open file: "+t)}return e}(e),i=l.output(t,n);if(r)try{c.default.fs.writeFileSync(r,i)}catch(t){throw new o.SREError("Can not write to file: "+r)}return i}(t,e,r);default:throw new o.SREError(`Can process files in ${o.default.getInstance().mode} mode`)}}e.version=u.Variables.VERSION,e.setupEngine=h,e.engineSetup=function(){const t=["mode"].concat(o.default.STRING_FEATURES,o.default.BINARY_FEATURES),e=o.default.getInstance(),r={};return t.forEach((function(t){r[t]=e[t]})),r.json=c.default.jsonPath,r.xpath=c.default.WGXpath,r.rules=e.ruleSets.slice(),r},e.engineReady=function(){return n(this,void 0,void 0,(function*(){return h({}).then((()=>o.EnginePromise.getall()))}))},e.localeLoader=p.standardLoader,e.toSpeech=function(t){return d("speech",t)},e.toSemantic=function(t){return d("semantic",t)},e.toJson=function(t){return d("json",t)},e.toDescription=function(t){return d("description",t)},e.toEnriched=function(t){return d("enriched",t)},e.number=function(t){return d("number",t)},e.ordinal=function(t){return d("ordinal",t)},e.numericOrdinal=function(t){return d("numericOrdinal",t)},e.vulgar=function(t){return d("vulgar",t)},e.file={},e.file.toSpeech=function(t,e){return f("speech",t,e)},e.file.toSemantic=function(t,e){return f("semantic",t,e)},e.file.toJson=function(t,e){return f("json",t,e)},e.file.toDescription=function(t,e){return f("description",t,e)},e.file.toEnriched=function(t,e){return f("enriched",t,e)},e.processFile=f,e.walk=function(t){return l.output("walker",t)},e.move=function(t){return l.keypress("move",t)},e.exit=function(t){const e=t||0;o.EnginePromise.getall().then((()=>process.exit(e)))},e.localePath=s.localePath,c.default.documentSupported?h({mode:a.Mode.HTTP}).then((()=>h({}))):h({mode:a.Mode.SYNC}).then((()=>h({mode:a.Mode.ASYNC})))},2315:function(__unused_webpack_module,exports,__webpack_require__){var __dirname="/";Object.defineProperty(exports,"__esModule",{value:!0});const variables_1=__webpack_require__(1377);class SystemExternal{static extRequire(library){if("undefined"!=typeof process){const nodeRequire=eval("require");return nodeRequire(library)}return null}}exports.default=SystemExternal,SystemExternal.windowSupported=!("undefined"==typeof window),SystemExternal.documentSupported=SystemExternal.windowSupported&&!(void 0===window.document),SystemExternal.xmldom=SystemExternal.documentSupported?window:SystemExternal.extRequire("xmldom-sre"),SystemExternal.document=SystemExternal.documentSupported?window.document:(new SystemExternal.xmldom.DOMImplementation).createDocument("","",0),SystemExternal.xpath=SystemExternal.documentSupported?document:function(){const t={document:{},XPathResult:{}};return SystemExternal.extRequire("wicked-good-xpath").install(t),t.document.XPathResult=t.XPathResult,t.document}(),SystemExternal.mathmapsIePath="https://cdn.jsdelivr.net/npm/sre-mathmaps-ie@"+variables_1.Variables.VERSION+"mathmaps_ie.js",SystemExternal.commander=SystemExternal.documentSupported?null:SystemExternal.extRequire("commander"),SystemExternal.fs=SystemExternal.documentSupported?null:SystemExternal.extRequire("fs"),SystemExternal.url=variables_1.Variables.url,SystemExternal.jsonPath=(SystemExternal.documentSupported?SystemExternal.url:process.env.SRE_JSON_PATH||__webpack_require__.g.SRE_JSON_PATH||__dirname+"/mathmaps")+"/",SystemExternal.WGXpath=variables_1.Variables.WGXpath,SystemExternal.wgxpath=null},1377:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.Variables=void 0;class r{static ensureLocale(t,e){return r.LOCALES.get(t)?t:(console.error(`Locale ${t} does not exist! Using ${r.LOCALES.get(e)} instead.`),e)}}e.Variables=r,r.VERSION="4.0.6",r.LOCALES=new Map([["ca","Catalan"],["da","Danish"],["de","German"],["en","English"],["es","Spanish"],["fr","French"],["hi","Hindi"],["it","Italian"],["nb","Bokm\xe5l"],["nn","Nynorsk"],["sv","Swedish"],["nemeth","Nemeth"]]),r.mathjaxVersion="3.2.1",r.url="https://cdn.jsdelivr.net/npm/speech-rule-engine@"+r.VERSION+"/lib/mathmaps",r.WGXpath="https://cdn.jsdelivr.net/npm/wicked-good-xpath@1.3.0/dist/wgxpath.install.js"},5274:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.updateEvaluator=e.evaluateString=e.evaluateBoolean=e.getLeafNodes=e.evalXPath=e.resolveNameSpace=e.xpath=void 0;const n=r(5897),o=r(4440),i=r(2315);function a(){return"undefined"!=typeof XPathResult}e.xpath={currentDocument:null,evaluate:a()?document.evaluate:i.default.xpath.evaluate,result:a()?XPathResult:i.default.xpath.XPathResult,createNSResolver:a()?document.createNSResolver:i.default.xpath.createNSResolver};const s={xhtml:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",mml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function l(t){return s[t]||null}e.resolveNameSpace=l;class c{constructor(){this.lookupNamespaceURI=l}}function u(t,r,i){return n.default.getInstance().mode!==o.Mode.HTTP||n.default.getInstance().isIE||n.default.getInstance().isEdge?e.xpath.evaluate(t,r,new c,i,null):e.xpath.currentDocument.evaluate(t,r,l,i,null)}function p(t,r){let n;try{n=u(t,r,e.xpath.result.ORDERED_NODE_ITERATOR_TYPE)}catch(t){return[]}const o=[];for(let t=n.iterateNext();t;t=n.iterateNext())o.push(t);return o}e.evalXPath=p,e.getLeafNodes=function(t){return p(".//*[count(*)=0]",t)},e.evaluateBoolean=function(t,r){let n;try{n=u(t,r,e.xpath.result.BOOLEAN_TYPE)}catch(t){return!1}return n.booleanValue},e.evaluateString=function(t,r){let n;try{n=u(t,r,e.xpath.result.STRING_TYPE)}catch(t){return""}return n.stringValue},e.updateEvaluator=function(t){if(n.default.getInstance().mode!==o.Mode.HTTP)return;let r=t;for(;r&&!r.evaluate;)r=r.parentNode;r&&r.evaluate?e.xpath.currentDocument=r:t.ownerDocument&&(e.xpath.currentDocument=t.ownerDocument)}},9268:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractEnrichCase=void 0;e.AbstractEnrichCase=class{constructor(t){this.semantic=t}}},6061:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.CaseBinomial=void 0;const n=r(5740),o=r(9268),i=r(5452),a=r(2298);class s extends o.AbstractEnrichCase{constructor(t){super(t),this.mml=t.mathmlTree}static test(t){return!t.mathmlTree&&"line"===t.type&&"binomial"===t.role}getMathml(){if(!this.semantic.childNodes.length)return this.mml;const t=this.semantic.childNodes[0];if(this.mml=(0,i.walkTree)(t),this.mml.hasAttribute(a.Attribute.TYPE)){const t=n.createElement("mrow");t.setAttribute(a.Attribute.ADDED,"true"),n.replaceNode(this.mml,t),t.appendChild(this.mml),this.mml=t}return(0,a.setAttributes)(this.mml,this.semantic),this.mml}}e.CaseBinomial=s},5765:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.CaseDoubleScript=void 0;const n=r(5740),o=r(9268),i=r(5452),a=r(2298);class s extends o.AbstractEnrichCase{constructor(t){super(t),this.mml=t.mathmlTree}static test(t){if(!t.mathmlTree||!t.childNodes.length)return!1;const e=n.tagName(t.mathmlTree),r=t.childNodes[0].role;return"MSUBSUP"===e&&"subsup"===r||"MUNDEROVER"===e&&"underover"===r}getMathml(){const t=this.semantic.childNodes[0],e=t.childNodes[0],r=this.semantic.childNodes[1],n=t.childNodes[1],o=i.walkTree(r),s=i.walkTree(e),l=i.walkTree(n);return(0,a.setAttributes)(this.mml,this.semantic),this.mml.setAttribute(a.Attribute.CHILDREN,(0,a.makeIdList)([e,n,r])),[s,l,o].forEach((t=>i.getInnerNode(t).setAttribute(a.Attribute.PARENT,this.mml.getAttribute(a.Attribute.ID)))),this.mml.setAttribute(a.Attribute.TYPE,t.role),i.addCollapsedAttribute(this.mml,[this.semantic.id,[t.id,e.id,n.id],r.id]),this.mml}}e.CaseDoubleScript=s},7251:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.CaseEmbellished=void 0;const n=r(5740),o=r(5952),i=r(9268),a=r(5765),s=r(7014),l=r(6887),c=r(5452),u=r(2298);class p extends i.AbstractEnrichCase{constructor(t){super(t),this.fenced=null,this.fencedMml=null,this.fencedMmlNodes=[],this.ofence=null,this.ofenceMml=null,this.ofenceMap={},this.cfence=null,this.cfenceMml=null,this.cfenceMap={},this.parentCleanup=[]}static test(t){return!(!t.mathmlTree||!t.fencePointer||t.mathmlTree.getAttribute("data-semantic-type"))}static makeEmptyNode_(t){const e=n.createElement("mrow"),r=new o.SemanticNode(t);return r.type="empty",r.mathmlTree=e,r}static fencedMap_(t,e){e[t.id]=t.mathmlTree,t.embellished&&p.fencedMap_(t.childNodes[0],e)}getMathml(){this.getFenced_(),this.fencedMml=c.walkTree(this.fenced),this.getFencesMml_(),"empty"!==this.fenced.type||this.fencedMml.parentNode||(this.fencedMml.setAttribute(u.Attribute.ADDED,"true"),this.cfenceMml.parentNode.insertBefore(this.fencedMml,this.cfenceMml)),this.getFencedMml_();return this.rewrite_()}fencedElement(t){return"fenced"===t.type||"matrix"===t.type||"vector"===t.type}getFenced_(){let t=this.semantic;for(;!this.fencedElement(t);)t=t.childNodes[0];this.fenced=t.childNodes[0],this.ofence=t.contentNodes[0],this.cfence=t.contentNodes[1],p.fencedMap_(this.ofence,this.ofenceMap),p.fencedMap_(this.cfence,this.cfenceMap)}getFencedMml_(){let t=this.ofenceMml.nextSibling;for(t=t===this.fencedMml?t:this.fencedMml;t&&t!==this.cfenceMml;)this.fencedMmlNodes.push(t),t=t.nextSibling}getFencesMml_(){let t=this.semantic;const e=Object.keys(this.ofenceMap),r=Object.keys(this.cfenceMap);for(;!(this.ofenceMml&&this.cfenceMml||t===this.fenced);)-1===e.indexOf(t.fencePointer)||this.ofenceMml||(this.ofenceMml=t.mathmlTree),-1===r.indexOf(t.fencePointer)||this.cfenceMml||(this.cfenceMml=t.mathmlTree),t=t.childNodes[0];this.ofenceMml||(this.ofenceMml=this.ofence.mathmlTree),this.cfenceMml||(this.cfenceMml=this.cfence.mathmlTree),this.ofenceMml&&(this.ofenceMml=c.ascendNewNode(this.ofenceMml)),this.cfenceMml&&(this.cfenceMml=c.ascendNewNode(this.cfenceMml))}rewrite_(){let t=this.semantic,e=null;const r=this.introduceNewLayer_();for((0,u.setAttributes)(r,this.fenced.parent);!this.fencedElement(t);){const o=t.mathmlTree,i=this.specialCase_(t,o);if(i)t=i;else{(0,u.setAttributes)(o,t);const e=[];for(let r,n=1;r=t.childNodes[n];n++)e.push(c.walkTree(r));t=t.childNodes[0]}const a=n.createElement("dummy"),s=o.childNodes[0];n.replaceNode(o,a),n.replaceNode(r,o),n.replaceNode(o.childNodes[0],r),n.replaceNode(a,s),e||(e=o)}return c.walkTree(this.ofence),c.walkTree(this.cfence),this.cleanupParents_(),e||r}specialCase_(t,e){const r=n.tagName(e);let o,i=null;if("MSUBSUP"===r?(i=t.childNodes[0],o=a.CaseDoubleScript):"MMULTISCRIPTS"===r&&("superscript"===t.type||"subscript"===t.type?o=s.CaseMultiscripts:"tensor"===t.type&&(o=l.CaseTensor),i=o&&t.childNodes[0]&&"subsup"===t.childNodes[0].role?t.childNodes[0]:t),!i)return null;const c=i.childNodes[0],u=p.makeEmptyNode_(c.id);return i.childNodes[0]=u,e=new o(t).getMathml(),i.childNodes[0]=c,this.parentCleanup.push(e),i.childNodes[0]}introduceNewLayer_(){const t=this.fullFence(this.ofenceMml),e=this.fullFence(this.cfenceMml);let r=n.createElement("mrow");if(n.replaceNode(this.fencedMml,r),this.fencedMmlNodes.forEach((t=>r.appendChild(t))),r.insertBefore(t,this.fencedMml),r.appendChild(e),!r.parentNode){const t=n.createElement("mrow");for(;r.childNodes.length>0;)t.appendChild(r.childNodes[0]);r.appendChild(t),r=t}return r}fullFence(t){const e=this.fencedMml.parentNode;let r=t;for(;r.parentNode&&r.parentNode!==e;)r=r.parentNode;return r}cleanupParents_(){this.parentCleanup.forEach((function(t){const e=t.childNodes[1].getAttribute(u.Attribute.PARENT);t.childNodes[0].setAttribute(u.Attribute.PARENT,e)}))}}e.CaseEmbellished=p},6265:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.CaseLimit=void 0;const n=r(5740),o=r(9268),i=r(5452),a=r(2298);class s extends o.AbstractEnrichCase{constructor(t){super(t),this.mml=t.mathmlTree}static test(t){if(!t.mathmlTree||!t.childNodes.length)return!1;const e=n.tagName(t.mathmlTree),r=t.type;return("limupper"===r||"limlower"===r)&&("MSUBSUP"===e||"MUNDEROVER"===e)||"limboth"===r&&("MSUB"===e||"MUNDER"===e||"MSUP"===e||"MOVER"===e)}static walkTree_(t){t&&i.walkTree(t)}getMathml(){const t=this.semantic.childNodes;return"limboth"!==this.semantic.type&&this.mml.childNodes.length>=3&&(this.mml=i.introduceNewLayer([this.mml],this.semantic)),(0,a.setAttributes)(this.mml,this.semantic),t[0].mathmlTree||(t[0].mathmlTree=this.semantic.mathmlTree),t.forEach(s.walkTree_),this.mml}}e.CaseLimit=s},6514:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.CaseLine=void 0;const n=r(9268),o=r(5452),i=r(2298);class a extends n.AbstractEnrichCase{constructor(t){super(t),this.mml=t.mathmlTree}static test(t){return!!t.mathmlTree&&"line"===t.type}getMathml(){return this.semantic.contentNodes.length&&o.walkTree(this.semantic.contentNodes[0]),this.semantic.childNodes.length&&o.walkTree(this.semantic.childNodes[0]),(0,i.setAttributes)(this.mml,this.semantic),this.mml}}e.CaseLine=a},6839:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.CaseMultiindex=void 0;const n=r(5740),o=r(9268),i=r(5452),a=r(2298);class s extends o.AbstractEnrichCase{constructor(t){super(t),this.mml=t.mathmlTree}static multiscriptIndex(t){return"punctuated"===t.type&&"dummy"===t.contentNodes[0].role?i.collapsePunctuated(t):(i.walkTree(t),t.id)}static createNone_(t){const e=n.createElement("none");return t&&(0,a.setAttributes)(e,t),e.setAttribute(a.Attribute.ADDED,"true"),e}completeMultiscript(t,e){const r=n.toArray(this.mml.childNodes).slice(1);let o=0;const l=t=>{for(let e,n=0;e=t[n];n++){const t=r[o];if(t&&e===parseInt(i.getInnerNode(t).getAttribute(a.Attribute.ID)))i.getInnerNode(t).setAttribute(a.Attribute.PARENT,this.semantic.id.toString()),o++;else{const r=this.semantic.querySelectorAll((t=>t.id===e));this.mml.insertBefore(s.createNone_(r[0]),t||null)}}};l(t),r[o]&&"MPRESCRIPTS"!==n.tagName(r[o])?this.mml.insertBefore(r[o],n.createElement("mprescripts")):o++,l(e)}}e.CaseMultiindex=s},7014:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.CaseMultiscripts=void 0;const n=r(5740),o=r(5656),i=r(6839),a=r(5452),s=r(2298);class l extends i.CaseMultiindex{static test(t){if(!t.mathmlTree)return!1;return"MMULTISCRIPTS"===n.tagName(t.mathmlTree)&&("superscript"===t.type||"subscript"===t.type)}constructor(t){super(t)}getMathml(){let t,e,r;if((0,s.setAttributes)(this.mml,this.semantic),this.semantic.childNodes[0]&&"subsup"===this.semantic.childNodes[0].role){const n=this.semantic.childNodes[0];t=n.childNodes[0],e=i.CaseMultiindex.multiscriptIndex(this.semantic.childNodes[1]),r=i.CaseMultiindex.multiscriptIndex(n.childNodes[1]);const l=[this.semantic.id,[n.id,t.id,r],e];a.addCollapsedAttribute(this.mml,l),this.mml.setAttribute(s.Attribute.TYPE,n.role),this.completeMultiscript(o.SemanticSkeleton.interleaveIds(r,e),[])}else{t=this.semantic.childNodes[0],e=i.CaseMultiindex.multiscriptIndex(this.semantic.childNodes[1]);const r=[this.semantic.id,t.id,e];a.addCollapsedAttribute(this.mml,r)}const n=o.SemanticSkeleton.collapsedLeafs(r||[],e),l=a.walkTree(t);return a.getInnerNode(l).setAttribute(s.Attribute.PARENT,this.semantic.id.toString()),n.unshift(t.id),this.mml.setAttribute(s.Attribute.CHILDREN,n.join(",")),this.mml}}e.CaseMultiscripts=l},3416:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.CaseProof=void 0;const n=r(9268),o=r(5452),i=r(2298);class a extends n.AbstractEnrichCase{constructor(t){super(t),this.mml=t.mathmlTree}static test(t){return!!t.mathmlTree&&("inference"===t.type||"premises"===t.type)}getMathml(){return this.semantic.childNodes.length?(this.semantic.contentNodes.forEach((function(t){o.walkTree(t),(0,i.setAttributes)(t.mathmlTree,t)})),this.semantic.childNodes.forEach((function(t){o.walkTree(t)})),(0,i.setAttributes)(this.mml,this.semantic),this.mml.getAttribute("data-semantic-id")===this.mml.getAttribute("data-semantic-parent")&&this.mml.removeAttribute("data-semantic-parent"),this.mml):this.mml}}e.CaseProof=a},5699:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.CaseTable=void 0;const n=r(5740),o=r(9268),i=r(5452),a=r(2298);class s extends o.AbstractEnrichCase{constructor(t){super(t),this.inner=[],this.mml=t.mathmlTree}static test(t){return"matrix"===t.type||"vector"===t.type||"cases"===t.type}getMathml(){const t=i.cloneContentNode(this.semantic.contentNodes[0]),e=this.semantic.contentNodes[1]?i.cloneContentNode(this.semantic.contentNodes[1]):null;if(this.inner=this.semantic.childNodes.map(i.walkTree),this.mml)if("MFENCED"===n.tagName(this.mml)){const r=this.mml.childNodes;this.mml.insertBefore(t,r[0]||null),e&&this.mml.appendChild(e),this.mml=i.rewriteMfenced(this.mml)}else{const r=[t,this.mml];e&&r.push(e),this.mml=i.introduceNewLayer(r,this.semantic)}else this.mml=i.introduceNewLayer([t].concat(this.inner,[e]),this.semantic);return(0,a.setAttributes)(this.mml,this.semantic),this.mml}}e.CaseTable=s},6887:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.CaseTensor=void 0;const n=r(5656),o=r(6839),i=r(5452),a=r(2298);class s extends o.CaseMultiindex{static test(t){return!!t.mathmlTree&&"tensor"===t.type}constructor(t){super(t)}getMathml(){i.walkTree(this.semantic.childNodes[0]);const t=o.CaseMultiindex.multiscriptIndex(this.semantic.childNodes[1]),e=o.CaseMultiindex.multiscriptIndex(this.semantic.childNodes[2]),r=o.CaseMultiindex.multiscriptIndex(this.semantic.childNodes[3]),s=o.CaseMultiindex.multiscriptIndex(this.semantic.childNodes[4]);(0,a.setAttributes)(this.mml,this.semantic);const l=[this.semantic.id,this.semantic.childNodes[0].id,t,e,r,s];i.addCollapsedAttribute(this.mml,l);const c=n.SemanticSkeleton.collapsedLeafs(t,e,r,s);return c.unshift(this.semantic.childNodes[0].id),this.mml.setAttribute(a.Attribute.CHILDREN,c.join(",")),this.completeMultiscript(n.SemanticSkeleton.interleaveIds(r,s),n.SemanticSkeleton.interleaveIds(t,e)),this.mml}}e.CaseTensor=s},9236:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.CaseText=void 0;const n=r(9268),o=r(5452),i=r(2298);class a extends n.AbstractEnrichCase{constructor(t){super(t),this.mml=t.mathmlTree}static test(t){return"punctuated"===t.type&&("text"===t.role||t.contentNodes.every((t=>"dummy"===t.role)))}getMathml(){const t=[],e=o.collapsePunctuated(this.semantic,t);return this.mml=o.introduceNewLayer(t,this.semantic),(0,i.setAttributes)(this.mml,this.semantic),this.mml.removeAttribute(i.Attribute.CONTENT),o.addCollapsedAttribute(this.mml,e),this.mml}}e.CaseText=a},5714:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.prepareMmlString=e.testTranslation__=e.semanticMathml=e.semanticMathmlSync=e.semanticMathmlNode=void 0;const n=r(2057),o=r(5740),i=r(5897),a=r(1414),s=r(5452),l=r(2298);function c(t){const e=o.cloneNode(t),r=a.getTree(e);return s.enrich(e,r)}function u(t){return c(o.parseInput(t))}function p(t){return t.match(/^$/)||(t+=""),t}r(1513),e.semanticMathmlNode=c,e.semanticMathmlSync=u,e.semanticMathml=function(t,e){i.EnginePromise.getall().then((()=>{const r=o.parseInput(t);e(c(r))}))},e.testTranslation__=function(t){n.Debugger.getInstance().init();const e=u(p(t)).toString();return(0,l.removeAttributePrefix)(e),n.Debugger.getInstance().exit(),e},e.prepareMmlString=p},2298:function(t,e){var r;function n(t){return t.map((function(t){return t.id})).join(",")}function o(t,e){const n=[];"mglyph"===e.role&&n.push("image"),e.attributes.href&&n.push("link"),n.length&&t.setAttribute(r.POSTFIX,n.join(" "))}Object.defineProperty(e,"__esModule",{value:!0}),e.addPrefix=e.removeAttributePrefix=e.setPostfix=e.setAttributes=e.makeIdList=e.EnrichAttributes=e.Attribute=e.Prefix=void 0,e.Prefix="data-semantic-",function(t){t.ADDED="data-semantic-added",t.ALTERNATIVE="data-semantic-alternative",t.CHILDREN="data-semantic-children",t.COLLAPSED="data-semantic-collapsed",t.CONTENT="data-semantic-content",t.EMBELLISHED="data-semantic-embellished",t.FENCEPOINTER="data-semantic-fencepointer",t.FONT="data-semantic-font",t.ID="data-semantic-id",t.ANNOTATION="data-semantic-annotation",t.OPERATOR="data-semantic-operator",t.OWNS="data-semantic-owns",t.PARENT="data-semantic-parent",t.POSTFIX="data-semantic-postfix",t.PREFIX="data-semantic-prefix",t.ROLE="data-semantic-role",t.SPEECH="data-semantic-speech",t.STRUCTURE="data-semantic-structure",t.TYPE="data-semantic-type"}(r=e.Attribute||(e.Attribute={})),e.EnrichAttributes=[r.ADDED,r.ALTERNATIVE,r.CHILDREN,r.COLLAPSED,r.CONTENT,r.EMBELLISHED,r.FENCEPOINTER,r.FONT,r.ID,r.ANNOTATION,r.OPERATOR,r.OWNS,r.PARENT,r.POSTFIX,r.PREFIX,r.ROLE,r.SPEECH,r.STRUCTURE,r.TYPE],e.makeIdList=n,e.setAttributes=function(t,i){t.setAttribute(r.TYPE,i.type);const a=i.allAttributes();for(let r,n=0;r=a[n];n++)t.setAttribute(e.Prefix+r[0].toLowerCase(),r[1]);i.childNodes.length&&t.setAttribute(r.CHILDREN,n(i.childNodes)),i.contentNodes.length&&t.setAttribute(r.CONTENT,n(i.contentNodes)),i.parent&&t.setAttribute(r.PARENT,i.parent.id.toString()),o(t,i)},e.setPostfix=o,e.removeAttributePrefix=function(t){return t.toString().replace(new RegExp(e.Prefix,"g"),"")},e.addPrefix=function(t){return e.Prefix+t}},3532:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.factory=e.getCase=void 0,e.getCase=function(t){for(let r,n=0;r=e.factory[n];n++)if(r.test(t))return r.constr(t);return null},e.factory=[]},1513:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0});const n=r(6061),o=r(5765),i=r(7251),a=r(6265),s=r(6514),l=r(7014),c=r(3416),u=r(5699),p=r(6887),h=r(9236);r(3532).factory.push({test:a.CaseLimit.test,constr:t=>new a.CaseLimit(t)},{test:i.CaseEmbellished.test,constr:t=>new i.CaseEmbellished(t)},{test:o.CaseDoubleScript.test,constr:t=>new o.CaseDoubleScript(t)},{test:p.CaseTensor.test,constr:t=>new p.CaseTensor(t)},{test:l.CaseMultiscripts.test,constr:t=>new l.CaseMultiscripts(t)},{test:s.CaseLine.test,constr:t=>new s.CaseLine(t)},{test:n.CaseBinomial.test,constr:t=>new n.CaseBinomial(t)},{test:c.CaseProof.test,constr:t=>new c.CaseProof(t)},{test:u.CaseTable.test,constr:t=>new u.CaseTable(t)},{test:h.CaseText.test,constr:t=>new h.CaseText(t)})},5452:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.printNodeList__=e.collapsePunctuated=e.formattedOutput_=e.formattedOutput=e.getInnerNode=e.setOperatorAttribute_=e.createInvisibleOperator_=e.rewriteMfenced=e.cloneContentNode=e.addCollapsedAttribute=e.parentNode_=e.isIgnorable_=e.unitChild_=e.descendNode_=e.ascendNewNode=e.validLca_=e.pathToRoot_=e.attachedElement_=e.prunePath_=e.mathmlLca_=e.lcaType=e.functionApplication_=e.isDescendant_=e.insertNewChild_=e.mergeChildren_=e.collectChildNodes_=e.collateChildNodes_=e.childrenSubset_=e.moveSemanticAttributes_=e.introduceLayerAboveLca=e.introduceNewLayer=e.walkTree=e.enrich=e.SETTINGS=void 0;const n=r(2057),o=r(5740),i=r(5897),a=r(3588),s=r(7516),l=r(5656),c=r(4795),u=r(2298),p=r(3532);function h(t){const e=(0,p.getCase)(t);let r;if(e)return r=e.getMathml(),T(r);if(1===t.mathml.length)return n.Debugger.getInstance().output("Walktree Case 0"),r=t.mathml[0],u.setAttributes(r,t),t.childNodes.length&&(n.Debugger.getInstance().output("Walktree Case 0.1"),t.childNodes.forEach((function(t){"empty"===t.type&&r.appendChild(h(t))}))),T(r);const o=t.contentNodes.map(k);B(t,o);const i=t.childNodes.map(h),a=l.SemanticSkeleton.combineContentChildren(t,o,i);if(r=t.mathmlTree,null===r)n.Debugger.getInstance().output("Walktree Case 1"),r=d(a,t);else{const t=A(a);n.Debugger.getInstance().output("Walktree Case 2"),t?(n.Debugger.getInstance().output("Walktree Case 2.1"),r=t.parentNode):(n.Debugger.getInstance().output("Walktree Case 2.2"),r=D(r))}return r=R(r),v(r,a,t),u.setAttributes(r,t),T(r)}function d(t,e){const r=O(t);let i=r.node;const a=r.type;if(a!==M.VALID||!c.hasEmptyTag(i))if(n.Debugger.getInstance().output("Walktree Case 1.1"),i=o.createElement("mrow"),a===M.PRUNED)n.Debugger.getInstance().output("Walktree Case 1.1.0"),i=f(i,r.node,t);else if(t[0]){n.Debugger.getInstance().output("Walktree Case 1.1.1");const e=A(t),r=y(e.parentNode,t);o.replaceNode(e,i),r.forEach((function(t){i.appendChild(t)}))}return e.mathmlTree||(e.mathmlTree=i),i}function f(t,e,r){let i=N(e);if(c.hasMathTag(i)){n.Debugger.getInstance().output("Walktree Case 1.1.0.0"),m(i,t),o.toArray(i.childNodes).forEach((function(e){t.appendChild(e)}));const e=t;t=i,i=e}const a=r.indexOf(e);return r[a]=i,o.replaceNode(i,t),t.appendChild(i),r.forEach((function(e){t.appendChild(e)})),t}function m(t,e){for(const r of u.EnrichAttributes)t.hasAttribute(r)&&(e.setAttribute(r,t.getAttribute(r)),t.removeAttribute(r))}function y(t,e){const r=o.toArray(t.childNodes);let n=1/0,i=-1/0;return e.forEach((function(t){const e=r.indexOf(t);-1!==e&&(n=Math.min(n,e),i=Math.max(i,e))})),r.slice(n,i+1)}function g(t,e,r){const n=[];let i=o.toArray(t.childNodes),a=!1;for(;i.length;){const t=i.shift();if(t.hasAttribute(u.Attribute.TYPE)){n.push(t);continue}const e=b(t);0!==e.length&&(1!==e.length?(a?t.setAttribute("AuxiliaryImplicit",!0):a=!0,i=e.concat(i)):n.push(t))}const s=[],l=r.childNodes.map((function(t){return t.mathmlTree}));for(;l.length;){const t=l.pop();if(t){if(-1!==n.indexOf(t))break;-1!==e.indexOf(t)&&s.unshift(t)}}return n.concat(s)}function b(t){const e=[];let r=o.toArray(t.childNodes);for(;r.length;){const t=r.shift();t.nodeType===o.NodeType.ELEMENT_NODE&&(t.hasAttribute(u.Attribute.TYPE)?e.push(t):r=o.toArray(t.childNodes).concat(r))}return e}function v(t,e,r){const n="implicit"===r.role&&s.flags.combine_juxtaposition?g(t,e,r):o.toArray(t.childNodes);if(!n.length)return void e.forEach((function(e){t.appendChild(e)}));let i=0;for(;e.length;){const r=e[0];n[i]===r||x(n[i],r)?(e.shift(),i++):n[i]&&-1===e.indexOf(n[i])?i++:(S(r,t)||_(t,n[i],r),e.shift())}}function _(t,e,r){if(!e)return void t.insertBefore(r,null);let n=e,o=I(n);for(;o&&o.firstChild===n&&!n.hasAttribute("AuxiliaryImplicit")&&o!==t;)n=o,o=I(n);o&&(o.insertBefore(r,n),n.removeAttribute("AuxiliaryImplicit"))}function S(t,e){if(!t)return!1;do{if((t=t.parentNode)===e)return!0}while(t);return!1}function x(t,e){const r=a.functionApplication();if(t&&e&&t.textContent&&e.textContent&&t.textContent===r&&e.textContent===r&&"true"===e.getAttribute(u.Attribute.ADDED)){for(let r,n=0;r=t.attributes[n];n++)e.hasAttribute(r.nodeName)||e.setAttribute(r.nodeName,r.nodeValue);return o.replaceNode(t,e),!0}return!1}var M;function O(t){const e=A(t);if(!e)return{type:M.INVALID,node:null};const r=A(t.slice().reverse());if(e===r)return{type:M.VALID,node:e};const n=C(e),o=E(n,t),i=C(r,(function(t){return-1!==o.indexOf(t)})),a=i[0],s=o.indexOf(a);return-1===s?{type:M.INVALID,node:null}:{type:o.length!==n.length?M.PRUNED:w(o[s+1],i[1])?M.VALID:M.INVALID,node:a}}function E(t,e){let r=0;for(;t[r]&&-1===e.indexOf(t[r]);)r++;return t.slice(0,r+1)}function A(t){let e=0,r=null;for(;!r&&e!1),n=[t];for(;!r(t)&&!c.hasMathTag(t)&&t.parentNode;)t=I(t),n.unshift(t);return n}function w(t,e){return!(!t||!e||t.previousSibling||e.nextSibling)}function T(t){for(;!c.hasMathTag(t)&&L(t);)t=I(t);return t}function N(t){const e=o.toArray(t.childNodes);if(!e)return t;const r=e.filter((function(t){return t.nodeType===o.NodeType.ELEMENT_NODE&&!c.hasIgnoreTag(t)}));return 1===r.length&&c.hasEmptyTag(r[0])&&!r[0].hasAttribute(u.Attribute.TYPE)?N(r[0]):t}function L(t){const e=I(t);return!(!e||!c.hasEmptyTag(e))&&o.toArray(e.childNodes).every((function(e){return e===t||P(e)}))}function P(t){if(t.nodeType!==o.NodeType.ELEMENT_NODE)return!0;if(!t||c.hasIgnoreTag(t))return!0;const e=o.toArray(t.childNodes);return!(!c.hasEmptyTag(t)&&e.length||c.hasDisplayTag(t)||t.hasAttribute(u.Attribute.TYPE)||c.isOrphanedGlyph(t))&&o.toArray(t.childNodes).every(P)}function I(t){return t.parentNode}function k(t){if(t.mathml.length)return h(t);const r=e.SETTINGS.implicit?j(t):o.createElement("mrow");return t.mathml=[r],r}function R(t){if("MFENCED"!==o.tagName(t))return t;const e=o.createElement("mrow");for(let r,n=0;r=t.attributes[n];n++)-1===["open","close","separators"].indexOf(r.name)&&e.setAttribute(r.name,r.value);return o.toArray(t.childNodes).forEach((function(t){e.appendChild(t)})),o.replaceNode(t,e),e}function j(t){const e=o.createElement("mo"),r=o.createTextNode(t.textContent);return e.appendChild(r),u.setAttributes(e,t),e.setAttribute(u.Attribute.ADDED,"true"),e}function B(t,e){const r=t.type+(t.textContent?","+t.textContent:"");e.forEach((function(t){D(t).setAttribute(u.Attribute.OPERATOR,r)}))}function D(t){const e=o.toArray(t.childNodes);if(!e)return t;const r=e.filter((function(t){return!P(t)})),n=[];for(let t,e=0;t=r[e];e++)if(c.hasEmptyTag(t)){const e=D(t);e&&e!==t&&n.push(e)}else n.push(t);return 1===n.length?n[0]:t}function F(t,e,r,n){const o=n||!1;H(t,"Original MathML",o),H(r,"Semantic Tree",o),H(e,"Semantically enriched MathML",o)}function H(t,e,r){const n=o.formatXml(t.toString());r?console.info(e+":\n```html\n"+u.removeAttributePrefix(n)+"\n```\n"):console.info(n)}e.SETTINGS={collapsed:!0,implicit:!0},e.enrich=function(t,e){const r=o.cloneNode(t);return h(e.root),i.default.getInstance().structure&&t.setAttribute(u.Attribute.STRUCTURE,l.SemanticSkeleton.fromStructure(t,e).toString()),n.Debugger.getInstance().generateOutput((function(){return F(r,t,e,!0),[]})),t},e.walkTree=h,e.introduceNewLayer=d,e.introduceLayerAboveLca=f,e.moveSemanticAttributes_=m,e.childrenSubset_=y,e.collateChildNodes_=g,e.collectChildNodes_=b,e.mergeChildren_=v,e.insertNewChild_=_,e.isDescendant_=S,e.functionApplication_=x,function(t){t.VALID="valid",t.INVALID="invalid",t.PRUNED="pruned"}(M=e.lcaType||(e.lcaType={})),e.mathmlLca_=O,e.prunePath_=E,e.attachedElement_=A,e.pathToRoot_=C,e.validLca_=w,e.ascendNewNode=T,e.descendNode_=N,e.unitChild_=L,e.isIgnorable_=P,e.parentNode_=I,e.addCollapsedAttribute=function(t,e){const r=new l.SemanticSkeleton(e);t.setAttribute(u.Attribute.COLLAPSED,r.toString())},e.cloneContentNode=k,e.rewriteMfenced=R,e.createInvisibleOperator_=j,e.setOperatorAttribute_=B,e.getInnerNode=D,e.formattedOutput=F,e.formattedOutput_=H,e.collapsePunctuated=function(t,e){const r=!!e,n=e||[],o=t.parent,i=t.contentNodes.map((function(t){return t.id}));i.unshift("c");const a=[t.id,i];for(let e,i=0;e=t.childNodes[i];i++){const t=h(e);n.push(t);const i=D(t);o&&!r&&i.setAttribute(u.Attribute.PARENT,o.id.toString()),a.push(e.id)}return a},e.printNodeList__=function(t,e){console.info(t),o.toArray(e).forEach((function(t){console.info(t.toString())})),console.info("<<<<<<<<<<<<<<<<<")}},5105:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractHighlighter=void 0;const n=r(5274),o=r(2298);class i{constructor(){this.color=null,this.mactionName="",this.currentHighlights=[]}highlight(t){this.currentHighlights.push(t.map((t=>{const e=this.highlightNode(t);return this.setHighlighted(t),e})))}highlightAll(t){const e=this.getMactionNodes(t);for(let t,r=0;t=e[r];r++)this.highlight([t])}unhighlight(){const t=this.currentHighlights.pop();t&&t.forEach((t=>{this.isHighlighted(t.node)&&(this.unhighlightNode(t),this.unsetHighlighted(t.node))}))}unhighlightAll(){for(;this.currentHighlights.length>0;)this.unhighlight()}setColor(t){this.color=t}colorString(){return this.color.rgba()}addEvents(t,e){const r=this.getMactionNodes(t);for(let t,n=0;t=r[n];n++)for(const r in e)t.addEventListener(r,e[r])}getMactionNodes(t){return Array.from(t.getElementsByClassName(this.mactionName))}isMactionNode(t){const e=t.className||t.getAttribute("class");return!!e&&!!e.match(new RegExp(this.mactionName))}isHighlighted(t){return t.hasAttribute(i.ATTR)}setHighlighted(t){t.setAttribute(i.ATTR,"true")}unsetHighlighted(t){t.removeAttribute(i.ATTR)}colorizeAll(t){n.evalXPath(`.//*[@${o.Attribute.ID}]`,t).forEach((t=>this.colorize(t)))}uncolorizeAll(t){n.evalXPath(`.//*[@${o.Attribute.ID}]`,t).forEach((t=>this.uncolorize(t)))}colorize(t){const e=(0,o.addPrefix)("foreground");t.hasAttribute(e)&&(t.setAttribute(e+"-old",t.style.color),t.style.color=t.getAttribute(e))}uncolorize(t){const e=(0,o.addPrefix)("foreground")+"-old";t.hasAttribute(e)&&(t.style.color=t.getAttribute(e))}}e.AbstractHighlighter=i,i.ATTR="sre-highlight"},6937:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.ChtmlHighlighter=void 0;const n=r(933);class o extends n.CssHighlighter{constructor(){super()}isMactionNode(t){return t.tagName.toUpperCase()===this.mactionName.toUpperCase()}getMactionNodes(t){return Array.from(t.getElementsByTagName(this.mactionName))}}e.ChtmlHighlighter=o},8396:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.ContrastPicker=e.ColorPicker=void 0;const r={red:{red:255,green:0,blue:0},green:{red:0,green:255,blue:0},blue:{red:0,green:0,blue:255},yellow:{red:255,green:255,blue:0},cyan:{red:0,green:255,blue:255},magenta:{red:255,green:0,blue:255},white:{red:255,green:255,blue:255},black:{red:0,green:0,blue:0}};function n(t,e){const n=t||{color:e};let o=Object.prototype.hasOwnProperty.call(n,"color")?r[n.color]:n;return o||(o=r[e]),o.alpha=Object.prototype.hasOwnProperty.call(n,"alpha")?n.alpha:1,function(t){const e=t=>(t=Math.max(t,0),t=Math.min(255,t),Math.round(t));return t.red=e(t.red),t.green=e(t.green),t.blue=e(t.blue),t.alpha=Math.max(t.alpha,0),t.alpha=Math.min(1,t.alpha),t}(o)}class o{constructor(t,e){this.foreground=n(e,o.DEFAULT_FOREGROUND_),this.background=n(t,o.DEFAULT_BACKGROUND_)}static toHex(t){const e=t.toString(16);return 1===e.length?"0"+e:e}rgba(){const t=function(t){return"rgba("+t.red+","+t.green+","+t.blue+","+t.alpha+")"};return{background:t(this.background),foreground:t(this.foreground)}}rgb(){const t=function(t){return"rgb("+t.red+","+t.green+","+t.blue+")"};return{background:t(this.background),alphaback:this.background.alpha.toString(),foreground:t(this.foreground),alphafore:this.foreground.alpha.toString()}}hex(){const t=function(t){return"#"+o.toHex(t.red)+o.toHex(t.green)+o.toHex(t.blue)};return{background:t(this.background),alphaback:this.background.alpha.toString(),foreground:t(this.foreground),alphafore:this.foreground.alpha.toString()}}}e.ColorPicker=o,o.DEFAULT_BACKGROUND_="blue",o.DEFAULT_FOREGROUND_="black";e.ContrastPicker=class{constructor(){this.hue=10,this.sat=100,this.light=50,this.incr=50}generate(){return e=function(t,e,r){e=e>1?e/100:e,r=r>1?r/100:r;const n=(1-Math.abs(2*r-1))*e,o=n*(1-Math.abs(t/60%2-1)),i=r-n/2;let a=0,s=0,l=0;return 0<=t&&t<60?[a,s,l]=[n,o,0]:60<=t&&t<120?[a,s,l]=[o,n,0]:120<=t&&t<180?[a,s,l]=[0,n,o]:180<=t&&t<240?[a,s,l]=[0,o,n]:240<=t&&t<300?[a,s,l]=[o,0,n]:300<=t&&t<360&&([a,s,l]=[n,0,o]),{red:a+i,green:s+i,blue:l+i}}(this.hue,this.sat,this.light),"rgb("+(t={red:Math.round(255*e.red),green:Math.round(255*e.green),blue:Math.round(255*e.blue)}).red+","+t.green+","+t.blue+")";var t,e}increment(){this.hue=(this.hue+this.incr)%360}}},933:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.CssHighlighter=void 0;const n=r(5105);class o extends n.AbstractHighlighter{constructor(){super(),this.mactionName="mjx-maction"}highlightNode(t){const e={node:t,background:t.style.backgroundColor,foreground:t.style.color},r=this.colorString();return t.style.backgroundColor=r.background,t.style.color=r.foreground,e}unhighlightNode(t){t.node.style.backgroundColor=t.background,t.node.style.color=t.foreground}}e.CssHighlighter=o},3090:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.highlighterMapping_=e.addEvents=e.highlighter=void 0;const n=r(6937),o=r(8396),i=r(933),a=r(2598),s=r(4500),l=r(7071),c=r(4346),u=r(2222);e.highlighter=function(t,r,n){const i=new o.ColorPicker(t,r),a="NativeMML"===n.renderer&&"Safari"===n.browser?"MML-CSS":"SVG"===n.renderer&&"v3"===n.browser?"SVG-V3":n.renderer,s=new(e.highlighterMapping_[a]||e.highlighterMapping_.NativeMML);return s.setColor(i),s},e.addEvents=function(t,r,n){const o=e.highlighterMapping_[n.renderer];o&&(new o).addEvents(t,r)},e.highlighterMapping_={SVG:c.SvgHighlighter,"SVG-V3":u.SvgV3Highlighter,NativeMML:l.MmlHighlighter,"HTML-CSS":a.HtmlHighlighter,"MML-CSS":s.MmlCssHighlighter,CommonHTML:i.CssHighlighter,CHTML:n.ChtmlHighlighter}},2598:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.HtmlHighlighter=void 0;const n=r(5740),o=r(5105);class i extends o.AbstractHighlighter{constructor(){super(),this.mactionName="maction"}highlightNode(t){const e={node:t,foreground:t.style.color,position:t.style.position},r=this.color.rgb();t.style.color=r.foreground,t.style.position="relative";const o=t.bbox;if(o&&o.w){const i=.05,a=0,s=n.createElement("span"),l=parseFloat(t.style.paddingLeft||"0");s.style.backgroundColor=r.background,s.style.opacity=r.alphaback.toString(),s.style.display="inline-block",s.style.height=o.h+o.d+2*i+"em",s.style.verticalAlign=-o.d+"em",s.style.marginTop=s.style.marginBottom=-i+"em",s.style.width=o.w+2*a+"em",s.style.marginLeft=l-a+"em",s.style.marginRight=-o.w-a-l+"em",t.parentNode.insertBefore(s,t),e.box=s}return e}unhighlightNode(t){const e=t.node;e.style.color=t.foreground,e.style.position=t.position,t.box&&t.box.parentNode.removeChild(t.box)}}e.HtmlHighlighter=i},4500:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.MmlCssHighlighter=void 0;const n=r(933);class o extends n.CssHighlighter{constructor(){super(),this.mactionName="maction"}getMactionNodes(t){return Array.from(t.getElementsByTagName(this.mactionName))}isMactionNode(t){return t.tagName===this.mactionName}}e.MmlCssHighlighter=o},7071:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.MmlHighlighter=void 0;const n=r(5105);class o extends n.AbstractHighlighter{constructor(){super(),this.mactionName="maction"}highlightNode(t){let e=t.getAttribute("style");return e+=";background-color: "+this.colorString().background,e+=";color: "+this.colorString().foreground,t.setAttribute("style",e),{node:t}}unhighlightNode(t){let e=t.node.getAttribute("style");e=e.replace(";background-color: "+this.colorString().background,""),e=e.replace(";color: "+this.colorString().foreground,""),t.node.setAttribute("style",e)}colorString(){return this.color.rgba()}getMactionNodes(t){return Array.from(t.getElementsByTagName(this.mactionName))}isMactionNode(t){return t.tagName===this.mactionName}}e.MmlHighlighter=o},4346:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.SvgHighlighter=void 0;const n=r(5740),o=r(5105);class i extends o.AbstractHighlighter{constructor(){super(),this.mactionName="mjx-svg-maction"}highlightNode(t){let e;if(this.isHighlighted(t))return e={node:t.previousSibling||t,background:t.style.backgroundColor,foreground:t.style.color},e;if("svg"===t.tagName){const e={node:t,background:t.style.backgroundColor,foreground:t.style.color};return t.style.backgroundColor=this.colorString().background,t.style.color=this.colorString().foreground,e}const r=n.createElementNS("http://www.w3.org/2000/svg","rect");let i;if("use"===t.nodeName){const e=n.createElementNS("http://www.w3.org/2000/svg","g");t.parentNode.insertBefore(e,t),e.appendChild(t),i=e.getBBox(),e.parentNode.replaceChild(t,e)}else i=t.getBBox();r.setAttribute("x",(i.x-40).toString()),r.setAttribute("y",(i.y-40).toString()),r.setAttribute("width",(i.width+80).toString()),r.setAttribute("height",(i.height+80).toString());const a=t.getAttribute("transform");return a&&r.setAttribute("transform",a),r.setAttribute("fill",this.colorString().background),r.setAttribute(o.AbstractHighlighter.ATTR,"true"),t.parentNode.insertBefore(r,t),e={node:r,foreground:t.getAttribute("fill")},t.setAttribute("fill",this.colorString().foreground),e}setHighlighted(t){"svg"===t.tagName&&super.setHighlighted(t)}unhighlightNode(t){if("background"in t)return t.node.style.backgroundColor=t.background,void(t.node.style.color=t.foreground);t.foreground?t.node.nextSibling.setAttribute("fill",t.foreground):t.node.nextSibling.removeAttribute("fill"),t.node.parentNode.removeChild(t.node)}isMactionNode(t){let e=t.className||t.getAttribute("class");return e=void 0!==e.baseVal?e.baseVal:e,!!e&&!!e.match(new RegExp(this.mactionName))}}e.SvgHighlighter=i},2222:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.SvgV3Highlighter=void 0;const n=r(5740),o=r(5274),i=r(5105),a=r(8396),s=r(4346);class l extends s.SvgHighlighter{constructor(){super(),this.mactionName="maction"}highlightNode(t){let e;if(this.isHighlighted(t))return e={node:t,background:this.colorString().background,foreground:this.colorString().foreground},e;if("svg"===t.tagName||"MJX-CONTAINER"===t.tagName)return e={node:t,background:t.style.backgroundColor,foreground:t.style.color},t.style.backgroundColor=this.colorString().background,t.style.color=this.colorString().foreground,e;const r=n.createElementNS("http://www.w3.org/2000/svg","rect");r.setAttribute("sre-highlighter-added","true");const o=t.getBBox();r.setAttribute("x",(o.x-40).toString()),r.setAttribute("y",(o.y-40).toString()),r.setAttribute("width",(o.width+80).toString()),r.setAttribute("height",(o.height+80).toString());const s=t.getAttribute("transform");if(s&&r.setAttribute("transform",s),r.setAttribute("fill",this.colorString().background),t.setAttribute(i.AbstractHighlighter.ATTR,"true"),t.parentNode.insertBefore(r,t),e={node:t,foreground:t.getAttribute("fill")},"rect"===t.nodeName){const e=new a.ColorPicker({alpha:0,color:"black"});t.setAttribute("fill",e.rgba().foreground)}else t.setAttribute("fill",this.colorString().foreground);return e}unhighlightNode(t){const e=t.node.previousSibling;if(e&&e.hasAttribute("sre-highlighter-added"))return t.foreground?t.node.setAttribute("fill",t.foreground):t.node.removeAttribute("fill"),void t.node.parentNode.removeChild(e);t.node.style.backgroundColor=t.background,t.node.style.color=t.foreground}isMactionNode(t){return t.getAttribute("data-mml-node")===this.mactionName}getMactionNodes(t){return Array.from(o.evalXPath(`.//*[@data-mml-node="${this.mactionName}"]`,t))}}e.SvgV3Highlighter=l},7222:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.StaticTrieNode=e.AbstractTrieNode=void 0;const n=r(2057),o=r(4391);class i{constructor(t,e){this.constraint=t,this.test=e,this.children_={},this.kind=o.TrieNodeKind.ROOT}getConstraint(){return this.constraint}getKind(){return this.kind}applyTest(t){return this.test(t)}addChild(t){const e=t.getConstraint(),r=this.children_[e];return this.children_[e]=t,r}getChild(t){return this.children_[t]}getChildren(){const t=[];for(const e in this.children_)t.push(this.children_[e]);return t}findChildren(t){const e=[];for(const r in this.children_){const n=this.children_[r];n.applyTest(t)&&e.push(n)}return e}removeChild(t){delete this.children_[t]}toString(){return this.constraint}}e.AbstractTrieNode=i;e.StaticTrieNode=class extends i{constructor(t,e){super(t,e),this.rule_=null,this.kind=o.TrieNodeKind.STATIC}getRule(){return this.rule_}setRule(t){this.rule_&&n.Debugger.getInstance().output("Replacing rule "+this.rule_+" with "+t),this.rule_=t}toString(){return this.getRule()?this.constraint+"\n==> "+this.getRule().action:this.constraint}}},4508:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.Trie=void 0;const n=r(4391),o=r(9701);class i{constructor(){this.root=(0,o.getNode)(n.TrieNodeKind.ROOT,"",null)}static collectRules_(t){const e=[];let r=[t];for(;r.length;){const t=r.shift();if(t.getKind()===n.TrieNodeKind.QUERY||t.getKind()===n.TrieNodeKind.BOOLEAN){const r=t.getRule();r&&e.unshift(r)}r=r.concat(t.getChildren())}return e}static printWithDepth_(t,e,r){r+=new Array(e+2).join(e.toString())+": "+t.toString()+"\n";const n=t.getChildren();for(let t,o=0;t=n[o];o++)r=i.printWithDepth_(t,e+1,r);return r}static order_(t){const e=t.getChildren();if(!e.length)return 0;const r=Math.max.apply(null,e.map(i.order_));return Math.max(e.length,r)}addRule(t){let e=this.root;const r=t.context,o=t.dynamicCstr.getValues();for(let t=0,i=o.length;t{e.getKind()===n.TrieNodeKind.DYNAMIC&&-1===t.indexOf(e.getConstraint())||o.push(e)}))}r=o.slice()}for(;r.length;){const e=r.shift();if(e.getRule){const t=e.getRule();t&&o.push(t)}const n=e.findChildren(t);r=r.concat(n)}return o}hasSubtrie(t){let e=this.root;for(let r=0,n=t.length;r!0)),this.kind=c.TrieNodeKind.ROOT}}e.RootTrieNode=u;class p extends s.AbstractTrieNode{constructor(t){super(t,(e=>e===t)),this.kind=c.TrieNodeKind.DYNAMIC}}e.DynamicTrieNode=p;const h={"=":(t,e)=>t===e,"!=":(t,e)=>t!==e,"<":(t,e)=>t":(t,e)=>t>e,"<=":(t,e)=>t<=e,">=":(t,e)=>t>=e};function d(t){if(t.match(/^self::\*$/))return t=>!0;if(t.match(/^self::\w+$/)){const e=t.slice(6).toUpperCase();return t=>t.tagName&&n.tagName(t)===e}if(t.match(/^self::\w+:\w+$/)){const e=t.split(":"),r=o.resolveNameSpace(e[2]);if(!r)return null;const n=e[3].toUpperCase();return t=>t.localName&&t.localName.toUpperCase()===n&&t.namespaceURI===r}if(t.match(/^@\w+$/)){const e=t.slice(1);return t=>t.hasAttribute&&t.hasAttribute(e)}if(t.match(/^@\w+="[\w\d ]+"$/)){const e=t.split("="),r=e[0].slice(1),n=e[1].slice(1,-1);return t=>t.hasAttribute&&t.hasAttribute(r)&&t.getAttribute(r)===n}if(t.match(/^@\w+!="[\w\d ]+"$/)){const e=t.split("!="),r=e[0].slice(1),n=e[1].slice(1,-1);return t=>!t.hasAttribute||!t.hasAttribute(r)||t.getAttribute(r)!==n}if(t.match(/^contains\(\s*@grammar\s*,\s*"[\w\d ]+"\s*\)$/)){const e=t.split('"')[1];return t=>!!i.Grammar.getInstance().getParameter(e)}if(t.match(/^not\(\s*contains\(\s*@grammar\s*,\s*"[\w\d ]+"\s*\)\s*\)$/)){const e=t.split('"')[1];return t=>!i.Grammar.getInstance().getParameter(e)}if(t.match(/^name\(\.\.\/\.\.\)="\w+"$/)){const e=t.split('"')[1].toUpperCase();return t=>{var r,o;return(null===(o=null===(r=t.parentNode)||void 0===r?void 0:r.parentNode)||void 0===o?void 0:o.tagName)&&n.tagName(t.parentNode.parentNode)===e}}if(t.match(/^count\(preceding-sibling::\*\)=\d+$/)){const e=t.split("="),r=parseInt(e[1],10);return t=>{var e;return(null===(e=t.parentNode)||void 0===e?void 0:e.childNodes[r])===t}}if(t.match(/^.+\[@category!?=".+"\]$/)){let[,e,r,n]=t.match(/^(.+)\[@category(!?=)"(.+)"\]$/);const i=n.match(/^unit:(.+)$/);let s="";return i&&(n=i[1],s=":unit"),t=>{const i=o.evalXPath(e,t)[0];if(i){const t=a.lookupCategory(i.textContent+s);return"="===r?t===n:t!==n}return!1}}if(t.match(/^string-length\(.+\)\W+\d+/)){const[,e,r,n]=t.match(/^string-length\((.+)\)(\W+)(\d+)/),i=h[r]||h["="],a=parseInt(n,10);return t=>{const r=o.evalXPath(e,t)[0];return!!r&&i(Array.from(r.textContent).length,a)}}return null}e.constraintTest_=d;class f extends l.StaticTrieNode{constructor(t,e){super(t,d(t)),this.context=e,this.kind=c.TrieNodeKind.QUERY}applyTest(t){return this.test?this.test(t):this.context.applyQuery(t,this.constraint)===t}}e.QueryTrieNode=f;class m extends l.StaticTrieNode{constructor(t,e){super(t,d(t)),this.context=e,this.kind=c.TrieNodeKind.BOOLEAN}applyTest(t){return this.test?this.test(t):this.context.applyConstraint(t,this.constraint)}}e.BooleanTrieNode=m},7491:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.completeLocale=e.getLocale=e.setLocale=e.locales=void 0;const n=r(5897),o=r(1377),i=r(2105),a=r(4249),s=r(8657),l=r(173),c=r(9393),u=r(7978),p=r(5540),h=r(5218),d=r(3887),f=r(8384),m=r(7206),y=r(7734),g=r(7264),b=r(4356);function v(){const t=o.Variables.ensureLocale(n.default.getInstance().locale,n.default.getInstance().defaultLocale);return n.default.getInstance().locale=t,e.locales[t]()}e.locales={ca:a.ca,da:s.da,de:l.de,en:c.en,es:u.es,fr:p.fr,hi:h.hi,it:d.it,nb:f.nb,nn:y.nn,sv:g.sv,nemeth:m.nemeth},e.setLocale=function(){const t=v();if(function(t){const e=n.default.getInstance().subiso;-1===t.SUBISO.all.indexOf(e)&&(n.default.getInstance().subiso=t.SUBISO.default);t.SUBISO.current=n.default.getInstance().subiso}(t),t){for(const e of Object.getOwnPropertyNames(t))b.LOCALE[e]=t[e];for(const[e,r]of Object.entries(t.CORRECTIONS))i.Grammar.getInstance().setCorrection(e,r)}},e.getLocale=v,e.completeLocale=function(t){const r=e.locales[t.locale];if(!r)return void console.error("Locale "+t.locale+" does not exist!");const n=t.kind.toUpperCase(),o=t.messages;if(!o)return;const i=r();for(const[t,e]of Object.entries(o))i[n][t]=e}},4356:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.createLocale=e.LOCALE=void 0;const n=r(7549);function o(){return{FUNCTIONS:(0,n.FUNCTIONS)(),MESSAGES:(0,n.MESSAGES)(),ALPHABETS:(0,n.ALPHABETS)(),NUMBERS:(0,n.NUMBERS)(),COMBINERS:{},CORRECTIONS:{},SUBISO:(0,n.SUBISO)()}}e.LOCALE=o(),e.createLocale=o},2536:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.localeFontCombiner=e.extractString=e.localEnclose=e.localRole=e.localFont=e.combinePostfixIndex=e.nestingToString=void 0;const n=r(4356),o=r(4977);function i(t,e){return void 0===t?e:"string"==typeof t?t:t[0]}e.nestingToString=function(t){switch(t){case 1:return n.LOCALE.MESSAGES.MS.ONCE||"";case 2:return n.LOCALE.MESSAGES.MS.TWICE;default:return t.toString()}},e.combinePostfixIndex=function(t,e){return t===n.LOCALE.MESSAGES.MS.ROOTINDEX||t===n.LOCALE.MESSAGES.MS.INDEX?t:t+" "+e},e.localFont=function(t){return i(n.LOCALE.MESSAGES.font[t],t)},e.localRole=function(t){return i(n.LOCALE.MESSAGES.role[t],t)},e.localEnclose=function(t){return i(n.LOCALE.MESSAGES.enclose[t],t)},e.extractString=i,e.localeFontCombiner=function(t){return"string"==typeof t?{font:t,combiner:n.LOCALE.ALPHABETS.combiner}:{font:t[0],combiner:n.LOCALE.COMBINERS[t[1]]||o.Combiners[t[1]]||n.LOCALE.ALPHABETS.combiner}}},4249:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.ca=void 0;const n=r(4356),o=r(2536),i=r(614),a=r(4977),s=function(t,e,r){return t="sans serif "+(r?r+" "+t:t),e?t+" "+e:t};let l=null;e.ca=function(){return l||(l=function(){const t=(0,n.createLocale)();return t.NUMBERS=i.default,t.COMBINERS.sansserif=s,t.FUNCTIONS.fracNestDepth=t=>!1,t.FUNCTIONS.combineRootIndex=o.combinePostfixIndex,t.FUNCTIONS.combineNestedRadical=(t,e,r)=>t+r,t.FUNCTIONS.fontRegexp=t=>RegExp("^"+t+" "),t.FUNCTIONS.plural=t=>/.*os$/.test(t)?t+"sos":/.*s$/.test(t)?t+"os":/.*ga$/.test(t)?t.slice(0,-2)+"gues":/.*\xe7a$/.test(t)?t.slice(0,-2)+"ces":/.*ca$/.test(t)?t.slice(0,-2)+"ques":/.*ja$/.test(t)?t.slice(0,-2)+"ges":/.*qua$/.test(t)?t.slice(0,-3)+"q\xfces":/.*a$/.test(t)?t.slice(0,-1)+"es":/.*(e|i)$/.test(t)?t+"ns":/.*\xed$/.test(t)?t.slice(0,-1)+"ins":t+"s",t.FUNCTIONS.si=(t,e)=>(e.match(/^metre/)&&(t=t.replace(/a$/,"\xe0").replace(/o$/,"\xf2").replace(/i$/,"\xed")),t+e),t.ALPHABETS.combiner=a.Combiners.prefixCombiner,t}()),l}},8657:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.da=void 0;const n=r(4356),o=r(2536),i=r(3866),a=r(4977);let s=null;e.da=function(){return s||(s=function(){const t=(0,n.createLocale)();return t.NUMBERS=i.default,t.FUNCTIONS.radicalNestDepth=o.nestingToString,t.FUNCTIONS.fontRegexp=e=>e===t.ALPHABETS.capPrefix.default?RegExp("^"+e+" "):RegExp(" "+e+"$"),t.ALPHABETS.combiner=a.Combiners.postfixCombiner,t.ALPHABETS.digitTrans.default=i.default.numberToWords,t}()),s}},173:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.de=void 0;const n=r(2105),o=r(2536),i=r(4356),a=r(1435),s=function(t,e,r){return"s"===r&&(e=e.split(" ").map((function(t){return t.replace(/s$/,"")})).join(" "),r=""),t=r?r+" "+t:t,e?e+" "+t:t},l=function(t,e,r){return t=r&&"s"!==r?r+" "+t:t,e?t+" "+e:t};let c=null;e.de=function(){return c||(c=function(){const t=(0,i.createLocale)();return t.NUMBERS=a.default,t.COMBINERS.germanPostfix=l,t.ALPHABETS.combiner=s,t.FUNCTIONS.radicalNestDepth=e=>e>1?t.NUMBERS.numberToWords(e)+"fach":"",t.FUNCTIONS.combineRootIndex=(t,e)=>{const r=e?e+"wurzel":"";return t.replace("Wurzel",r)},t.FUNCTIONS.combineNestedRadical=(t,e,r)=>{const n=(e?e+" ":"")+(t=r.match(/exponent$/)?t+"r":t);return r.match(/ /)?r.replace(/ /," "+n+" "):n+" "+r},t.FUNCTIONS.fontRegexp=function(t){return t=t.split(" ").map((function(t){return t.replace(/s$/,"(|s)")})).join(" "),new RegExp("((^"+t+" )|( "+t+"$))")},t.CORRECTIONS.correctOne=t=>t.replace(/^eins$/,"ein"),t.CORRECTIONS.localFontNumber=t=>(0,o.localFont)(t).split(" ").map((function(t){return t.replace(/s$/,"")})).join(" "),t.CORRECTIONS.lowercase=t=>t.toLowerCase(),t.CORRECTIONS.article=t=>{const e=n.Grammar.getInstance().getParameter("case"),r=n.Grammar.getInstance().getParameter("plural");return"dative"===e?{der:"dem",die:r?"den":"der",das:"dem"}[t]:t},t.CORRECTIONS.masculine=t=>"dative"===n.Grammar.getInstance().getParameter("case")?t+"n":t,t}()),c}},9393:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.en=void 0;const n=r(2105),o=r(4356),i=r(2536),a=r(310),s=r(4977);let l=null;e.en=function(){return l||(l=function(){const t=(0,o.createLocale)();return t.NUMBERS=a.default,t.FUNCTIONS.radicalNestDepth=i.nestingToString,t.FUNCTIONS.plural=t=>/.*s$/.test(t)?t:t+"s",t.ALPHABETS.combiner=s.Combiners.prefixCombiner,t.ALPHABETS.digitTrans.default=a.default.numberToWords,t.CORRECTIONS.article=t=>n.Grammar.getInstance().getParameter("noArticle")?"":t,t}()),l}},7978:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.es=void 0;const n=r(4356),o=r(2536),i=r(4634),a=r(4977),s=function(t,e,r){return t="sans serif "+(r?r+" "+t:t),e?t+" "+e:t};let l=null;e.es=function(){return l||(l=function(){const t=(0,n.createLocale)();return t.NUMBERS=i.default,t.COMBINERS.sansserif=s,t.FUNCTIONS.fracNestDepth=t=>!1,t.FUNCTIONS.combineRootIndex=o.combinePostfixIndex,t.FUNCTIONS.combineNestedRadical=(t,e,r)=>t+r,t.FUNCTIONS.fontRegexp=t=>RegExp("^"+t+" "),t.FUNCTIONS.plural=t=>/.*(a|e|i|o|u)$/.test(t)?t+"s":/.*z$/.test(t)?t.slice(0,-1)+"ces":/.*c$/.test(t)?t.slice(0,-1)+"ques":/.*g$/.test(t)?t+"ues":/.*\u00f3n$/.test(t)?t.slice(0,-2)+"ones":t+"es",t.FUNCTIONS.si=(t,e)=>(e.match(/^metro/)&&(t=t.replace(/a$/,"\xe1").replace(/o$/,"\xf3").replace(/i$/,"\xed")),t+e),t.ALPHABETS.combiner=a.Combiners.prefixCombiner,t}()),l}},5540:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.fr=void 0;const n=r(2105),o=r(4356),i=r(2536),a=r(2350),s=r(4977);let l=null;e.fr=function(){return l||(l=function(){const t=(0,o.createLocale)();return t.NUMBERS=a.default,t.FUNCTIONS.radicalNestDepth=i.nestingToString,t.FUNCTIONS.combineRootIndex=i.combinePostfixIndex,t.FUNCTIONS.combineNestedFraction=(t,e,r)=>r.replace(/ $/g,"")+e+t,t.FUNCTIONS.combineNestedRadical=(t,e,r)=>r+" "+t,t.FUNCTIONS.fontRegexp=t=>RegExp(" (en |)"+t+"$"),t.FUNCTIONS.plural=t=>/.*s$/.test(t)?t:t+"s",t.CORRECTIONS.article=t=>n.Grammar.getInstance().getParameter("noArticle")?"":t,t.ALPHABETS.combiner=s.Combiners.romanceCombiner,t.SUBISO={default:"fr",current:"fr",all:["fr","be","ch"]},t}()),l}},5218:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.hi=void 0;const n=r(4356),o=r(4438),i=r(4977),a=r(2536);let s=null;e.hi=function(){return s||(s=function(){const t=(0,n.createLocale)();return t.NUMBERS=o.default,t.ALPHABETS.combiner=i.Combiners.prefixCombiner,t.FUNCTIONS.radicalNestDepth=a.nestingToString,t}()),s}},3887:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.it=void 0;const n=r(2536),o=r(4356),i=r(8825),a=r(4977),s=function(t,e,r){return t.match(/^[a-zA-Z]$/)&&(e=e.replace("cerchiato","cerchiata")),t=r?t+" "+r:t,e?t+" "+e:t};let l=null;e.it=function(){return l||(l=function(){const t=(0,o.createLocale)();return t.NUMBERS=i.default,t.COMBINERS.italianPostfix=s,t.FUNCTIONS.radicalNestDepth=n.nestingToString,t.FUNCTIONS.combineRootIndex=n.combinePostfixIndex,t.FUNCTIONS.combineNestedFraction=(t,e,r)=>r.replace(/ $/g,"")+e+t,t.FUNCTIONS.combineNestedRadical=(t,e,r)=>r+" "+t,t.FUNCTIONS.fontRegexp=t=>RegExp(" (en |)"+t+"$"),t.ALPHABETS.combiner=a.Combiners.romanceCombiner,t}()),l}},8384:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.nb=void 0;const n=r(4356),o=r(2536),i=r(8274),a=r(4977);let s=null;e.nb=function(){return s||(s=function(){const t=(0,n.createLocale)();return t.NUMBERS=i.default,t.ALPHABETS.combiner=a.Combiners.prefixCombiner,t.ALPHABETS.digitTrans.default=i.default.numberToWords,t.FUNCTIONS.radicalNestDepth=o.nestingToString,t}()),s}},7206:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.nemeth=void 0;const n=r(4356),o=r(3720),i=r(4977),a=function(t){return t.match(RegExp("^"+h.ALPHABETS.languagePrefix.english))?t.slice(1):t},s=function(t,e,r){return t=a(t),e?t+e:t},l=function(t,e,r){return e+a(t)},c=function(t,e,r){return e+(r||"")+(t=a(t))+"\u283b"},u=function(t,e,r){return e+(r||"")+(t=a(t))+"\u283b\u283b"},p=function(t,e,r){return e+(t=a(t))+"\u283e"};let h=null;e.nemeth=function(){return h||(h=function(){const t=(0,n.createLocale)();return t.NUMBERS=o.default,t.COMBINERS={postfixCombiner:s,germanCombiner:l,embellishCombiner:c,doubleEmbellishCombiner:u,parensCombiner:p},t.FUNCTIONS.fracNestDepth=t=>!1,t.FUNCTIONS.fontRegexp=t=>RegExp("^"+t),t.FUNCTIONS.si=i.identityTransformer,t.ALPHABETS.combiner=(t,e,r)=>e?e+r+t:a(t),t.ALPHABETS.digitTrans={default:o.default.numberToWords},t}()),h}},7734:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.nn=void 0;const n=r(4356),o=r(2536),i=r(8274),a=r(4977);let s=null;e.nn=function(){return s||(s=function(){const t=(0,n.createLocale)();return t.NUMBERS=i.default,t.ALPHABETS.combiner=a.Combiners.prefixCombiner,t.ALPHABETS.digitTrans.default=i.default.numberToWords,t.FUNCTIONS.radicalNestDepth=o.nestingToString,t.SUBISO={default:"",current:"",all:["","alt"]},t}()),s}},7264:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.sv=void 0;const n=r(4356),o=r(2536),i=r(3898),a=r(4977);let s=null;e.sv=function(){return s||(s=function(){const t=(0,n.createLocale)();return t.NUMBERS=i.default,t.FUNCTIONS.radicalNestDepth=o.nestingToString,t.FUNCTIONS.fontRegexp=function(t){return new RegExp("((^"+t+" )|( "+t+"$))")},t.ALPHABETS.combiner=a.Combiners.prefixCombiner,t.ALPHABETS.digitTrans.default=i.default.numberToWords,t.CORRECTIONS.correctOne=t=>t.replace(/^ett$/,"en"),t}()),s}},7549:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.SUBISO=e.FUNCTIONS=e.ALPHABETS=e.NUMBERS=e.MESSAGES=void 0;const n=r(4977);e.MESSAGES=function(){return{MS:{},MSroots:{},font:{},embellish:{},role:{},enclose:{},navigate:{},regexp:{},unitTimes:""}},e.NUMBERS=function(){return{zero:"zero",ones:[],tens:[],large:[],special:{},wordOrdinal:n.identityTransformer,numericOrdinal:n.identityTransformer,numberToWords:n.identityTransformer,numberToOrdinal:n.pluralCase,vulgarSep:" ",numSep:" "}},e.ALPHABETS=function(){return{latinSmall:[],latinCap:[],greekSmall:[],greekCap:[],capPrefix:{default:""},smallPrefix:{default:""},digitPrefix:{default:""},languagePrefix:{},digitTrans:{default:n.identityTransformer,mathspeak:n.identityTransformer,clearspeak:n.identityTransformer},letterTrans:{default:n.identityTransformer},combiner:(t,e,r)=>t}},e.FUNCTIONS=function(){return{fracNestDepth:t=>n.vulgarFractionSmall(t,10,100),radicalNestDepth:t=>"",combineRootIndex:function(t,e){return t},combineNestedFraction:n.Combiners.identityCombiner,combineNestedRadical:n.Combiners.identityCombiner,fontRegexp:function(t){return new RegExp("^"+t.split(/ |-/).join("( |-)")+"( |-)")},si:n.siCombiner,plural:n.identityTransformer}},e.SUBISO=function(){return{default:"",current:"",all:[]}}},614:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0});const n=r(2105);function o(t){const e=t%1e3,r=Math.floor(e/100),n=r?1===r?"cent":s.ones[r]+"-cents":"",o=function(t){const e=t%100;if(e<20)return s.ones[e];const r=Math.floor(e/10),n=s.tens[r],o=s.ones[e%10];return n&&o?n+(2===r?"-i-":"-")+o:n||o}(e%100);return n&&o?n+s.numSep+o:n||o}function i(t){if(0===t)return s.zero;if(t>=Math.pow(10,36))return t.toString();let e=0,r="";for(;t>0;){const n=t%(e>1?1e6:1e3);if(n){let t=s.large[e];if(e)if(1===e)r=(1===n?"":o(n)+s.numSep)+t+(r?s.numSep+r:"");else{const e=i(n);t=1===n?t:t.replace(/\u00f3$/,"ons"),r=e+s.numSep+t+(r?s.numSep+r:"")}else r=o(n)}t=Math.floor(t/(e>1?1e6:1e3)),e++}return r}function a(t){const e=n.Grammar.getInstance().getParameter("gender");return t.toString()+("f"===e?"a":"n")}const s=(0,r(7549).NUMBERS)();s.numericOrdinal=a,s.numberToWords=i,s.numberToOrdinal=function(t,e){if(t>1999)return a(t);if(t<=10)return s.special.onesOrdinals[t-1];const r=i(t);return r.match(/mil$/)?r.replace(/mil$/,"mil\xb7l\xe8sima"):r.match(/u$/)?r.replace(/u$/,"vena"):r.match(/a$/)?r.replace(/a$/,"ena"):r+(r.match(/e$/)?"na":"ena")},e.default=s},3866:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0});function n(t,e=!1){return t===s.ones[1]?e?"et":"en":t}function o(t,e=!1){let r=t%1e3,o="",i=s.ones[Math.floor(r/100)];if(o+=i?n(i,!0)+" hundrede":"",r%=100,r)if(o+=o?" og ":"",i=e?s.special.smallOrdinals[r]:s.ones[r],i)o+=i;else{const t=e?s.special.tensOrdinals[Math.floor(r/10)]:s.tens[Math.floor(r/10)];i=s.ones[r%10],o+=i?n(i)+"og"+t:t}return o}function i(t,e=!1){if(0===t)return s.zero;if(t>=Math.pow(10,36))return t.toString();let r=0,i="";for(;t>0;){const a=t%1e3;if(a){const t=o(a,e&&!r);if(r){const e=s.large[r],o=a>1?"er":"";i=n(t,r<=1)+" "+e+o+(i?" og ":"")+i}else i=n(t)+i}t=Math.floor(t/1e3),r++}return i}function a(t){if(t%100)return i(t,!0);const e=i(t);return e.match(/e$/)?e:e+"e"}const s=(0,r(7549).NUMBERS)();s.wordOrdinal=a,s.numericOrdinal=function(t){return t.toString()+"."},s.numberToWords=i,s.numberToOrdinal=function(t,e){return 1===t?e?"hel":"hele":2===t?e?"halv":"halve":a(t)+(e?"dele":"del")},e.default=s},1435:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0});function n(t,e=!1){return t===s.ones[1]?e?"eine":"ein":t}function o(t){let e=t%1e3,r="",o=s.ones[Math.floor(e/100)];if(r+=o?n(o)+"hundert":"",e%=100,e)if(r+=r?s.numSep:"",o=s.ones[e],o)r+=o;else{const t=s.tens[Math.floor(e/10)];o=s.ones[e%10],r+=o?n(o)+"und"+t:t}return r}function i(t){if(0===t)return s.zero;if(t>=Math.pow(10,36))return t.toString();let e=0,r="";for(;t>0;){const i=t%1e3;if(i){const a=o(t%1e3);if(e){const t=s.large[e],o=e>1&&i>1?t.match(/e$/)?"n":"en":"";r=n(a,e>1)+t+o+r}else r=n(a,e>1)+r}t=Math.floor(t/1e3),e++}return r.replace(/ein$/,"eins")}function a(t){if(1===t)return"erste";if(3===t)return"dritte";if(7===t)return"siebte";if(8===t)return"achte";return i(t)+(t<19?"te":"ste")}const s=(0,r(7549).NUMBERS)();s.wordOrdinal=a,s.numericOrdinal=function(t){return t.toString()+"."},s.numberToWords=i,s.numberToOrdinal=function(t,e){return 1===t?"eintel":2===t?e?"halbe":"halb":a(t)+"l"},e.default=s},310:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0});function n(t){let e=t%1e3,r="";return r+=a.ones[Math.floor(e/100)]?a.ones[Math.floor(e/100)]+a.numSep+"hundred":"",e%=100,e&&(r+=r?a.numSep:"",r+=a.ones[e]||a.tens[Math.floor(e/10)]+(e%10?a.numSep+a.ones[e%10]:"")),r}function o(t){if(0===t)return a.zero;if(t>=Math.pow(10,36))return t.toString();let e=0,r="";for(;t>0;){t%1e3&&(r=n(t%1e3)+(e?"-"+a.large[e]+"-":"")+r),t=Math.floor(t/1e3),e++}return r.replace(/-$/,"")}function i(t){let e=o(t);return e.match(/one$/)?e=e.slice(0,-3)+"first":e.match(/two$/)?e=e.slice(0,-3)+"second":e.match(/three$/)?e=e.slice(0,-5)+"third":e.match(/five$/)?e=e.slice(0,-4)+"fifth":e.match(/eight$/)?e=e.slice(0,-5)+"eighth":e.match(/nine$/)?e=e.slice(0,-4)+"ninth":e.match(/twelve$/)?e=e.slice(0,-6)+"twelfth":e.match(/ty$/)?e=e.slice(0,-2)+"tieth":e+="th",e}const a=(0,r(7549).NUMBERS)();a.wordOrdinal=i,a.numericOrdinal=function(t){const e=t%100,r=t.toString();if(e>10&&e<20)return r+"th";switch(t%10){case 1:return r+"st";case 2:return r+"nd";case 3:return r+"rd";default:return r+"th"}},a.numberToWords=o,a.numberToOrdinal=function(t,e){if(1===t)return e?"oneths":"oneth";if(2===t)return e?"halves":"half";const r=i(t);return e?r+"s":r},e.default=a},4634:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0});const n=r(2105);function o(t){const e=t%1e3,r=Math.floor(e/100),n=i.special.hundreds[r],o=function(t){const e=t%100;if(e<30)return i.ones[e];const r=i.tens[Math.floor(e/10)],n=i.ones[e%10];return r&&n?r+" y "+n:r||n}(e%100);return 1===r?o?n+"to "+o:n:n&&o?n+" "+o:n||o}const i=(0,r(7549).NUMBERS)();i.numericOrdinal=function(t){const e=n.Grammar.getInstance().getParameter("gender");return t.toString()+("f"===e?"a":"o")},i.numberToWords=function(t){if(0===t)return i.zero;if(t>=Math.pow(10,36))return t.toString();let e=0,r="";for(;t>0;){const n=t%1e3;if(n){let t=i.large[e];const a=o(n);e?1===n?(t=t.match("/^mil( |$)/")?t:"un "+t,r=t+(r?" "+r:"")):(t=t.replace(/\u00f3n$/,"ones"),r=o(n)+" "+t+(r?" "+r:"")):r=a}t=Math.floor(t/1e3),e++}return r},i.numberToOrdinal=function(t,e){if(t>1999)return t.toString()+"a";if(t<=12)return i.special.onesOrdinals[t-1];const r=[];if(t>=1e3&&(t-=1e3,r.push("mil\xe9sima")),!t)return r.join(" ");let n=0;return n=Math.floor(t/100),n>0&&(r.push(i.special.hundredsOrdinals[n-1]),t%=100),t<=12?r.push(i.special.onesOrdinals[t-1]):(n=Math.floor(t/10),n>0&&(r.push(i.special.tensOrdinals[n-1]),t%=10),t>0&&r.push(i.special.onesOrdinals[t-1])),r.join(" ")},e.default=i},2350:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0});const n=r(5897),o=r(2105),i=r(7549);function a(t){let e=t%1e3,r="";if(r+=u.ones[Math.floor(e/100)]?u.ones[Math.floor(e/100)]+"-cent":"",e%=100,e){r+=r?"-":"";let t=u.ones[e];if(t)r+=t;else{const n=u.tens[Math.floor(e/10)];n.match(/-dix$/)?(t=u.ones[e%10+10],r+=n.replace(/-dix$/,"")+"-"+t):r+=n+(e%10?"-"+u.ones[e%10]:"")}}const n=r.match(/s-\w+$/);return n?r.replace(/s-\w+$/,n[0].slice(1)):r.replace(/-un$/,"-et-un")}function s(t){if(0===t)return u.zero;if(t>=Math.pow(10,36))return t.toString();u.special["tens-"+n.default.getInstance().subiso]&&(u.tens=u.special["tens-"+n.default.getInstance().subiso]);let e=0,r="";for(;t>0;){const n=t%1e3;if(n){let t=u.large[e];const o=a(n);if(t&&t.match(/^mille /)){const n=t.replace(/^mille /,"");r=r.match(RegExp(n))?o+(e?"-mille-":"")+r:r.match(RegExp(n.replace(/s$/,"")))?o+(e?"-mille-":"")+r.replace(n.replace(/s$/,""),n):o+(e?"-"+t+"-":"")+r}else t=1===n&&t?t.replace(/s$/,""):t,r=o+(e?"-"+t+"-":"")+r}t=Math.floor(t/1e3),e++}return r.replace(/-$/,"")}const l={1:"uni\xe8me",2:"demi",3:"tiers",4:"quart"};function c(t){if(1===t)return"premi\xe8re";let e=s(t);return e.match(/^neuf$/)?e=e.slice(0,-1)+"v":e.match(/cinq$/)?e+="u":e.match(/trois$/)?e+="":(e.match(/e$/)||e.match(/s$/))&&(e=e.slice(0,-1)),e+="i\xe8me",e}const u=(0,i.NUMBERS)();u.wordOrdinal=c,u.numericOrdinal=function(t){const e=o.Grammar.getInstance().getParameter("gender");return 1===t?t.toString()+("m"===e?"er":"re"):t.toString()+"e"},u.numberToWords=s,u.numberToOrdinal=function(t,e){const r=l[t]||c(t);return 3===t?r:e?r+"s":r},e.default=u},4438:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0});const n=r(2105);function o(t){if(0===t)return a.zero;if(t>=Math.pow(10,32))return t.toString();let e=0,r="";const n=function(t){let e=t%1e3,r="";return r+=a.ones[Math.floor(e/100)]?a.ones[Math.floor(e/100)]+a.numSep+a.special.hundred:"",e%=100,e&&(r+=r?a.numSep:"",r+=a.ones[e]),r}(t%1e3);if(!(t=Math.floor(t/1e3)))return n;for(;t>0;){const n=t%100;n&&(r=a.ones[n]+a.numSep+a.large[e]+(r?a.numSep+r:"")),t=Math.floor(t/100),e++}return n?r+a.numSep+n:r}function i(t){const e=n.Grammar.getInstance().getParameter("gender");if(t<=0)return t.toString();if(t<10)return"f"===e?a.special.ordinalsFeminine[t]:a.special.ordinalsMasculine[t];return o(t)+("f"===e?"\u0935\u0940\u0902":"\u0935\u093e\u0901")}const a=(0,r(7549).NUMBERS)();a.wordOrdinal=i,a.numericOrdinal=function(t){const e=n.Grammar.getInstance().getParameter("gender");return t>0&&t<10?"f"===e?a.special.simpleSmallOrdinalsFeminine[t]:a.special.simpleSmallOrdinalsMasculine[t]:t.toString().split("").map((function(t){const e=parseInt(t,10);return isNaN(e)?"":a.special.simpleNumbers[e]})).join("")+("f"===e?"\u0935\u0940\u0902":"\u0935\u093e\u0901")},a.numberToWords=o,a.numberToOrdinal=function(t,e){return t<=10?a.special.smallDenominators[t]:i(t)+" \u0905\u0902\u0936"},e.default=a},8825:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0});const n=r(2105);function o(t){let e=t%1e3,r="";if(r+=s.ones[Math.floor(e/100)]?s.ones[Math.floor(e/100)]+s.numSep+"cento":"",e%=100,e){r+=r?s.numSep:"";const t=s.ones[e];if(t)r+=t;else{let t=s.tens[Math.floor(e/10)];const n=e%10;1!==n&&8!==n||(t=t.slice(0,-1)),r+=t,r+=n?s.numSep+s.ones[e%10]:""}}return r}function i(t){if(0===t)return s.zero;if(t>=Math.pow(10,36))return t.toString();if(1===t&&n.Grammar.getInstance().getParameter("fraction"))return"un";let e=0,r="";for(;t>0;){t%1e3&&(r=o(t%1e3)+(e?"-"+s.large[e]+"-":"")+r),t=Math.floor(t/1e3),e++}return r.replace(/-$/,"")}function a(t){const e="m"===n.Grammar.getInstance().getParameter("gender")?"o":"a";let r=s.special.onesOrdinals[t];return r?r.slice(0,-1)+e:(r=i(t),r.slice(0,-1)+"esim"+e)}const s=(0,r(7549).NUMBERS)();s.wordOrdinal=a,s.numericOrdinal=function(t){const e=n.Grammar.getInstance().getParameter("gender");return t.toString()+("m"===e?"o":"a")},s.numberToWords=i,s.numberToOrdinal=function(t,e){if(2===t)return e?"mezzi":"mezzo";const r=a(t);if(!e)return r;const n=r.match(/o$/)?"i":"e";return r.slice(0,-1)+n},e.default=s},3720:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0});function n(t){return t.toString().split("").map((function(t){return o.ones[parseInt(t,10)]})).join("")}const o=(0,r(7549).NUMBERS)();o.numberToWords=n,o.numberToOrdinal=n,e.default=o},8274:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0});const n=r(5897);function o(t,e=!1){let r=t%1e3,n="";const o=Math.floor(r/100),a=s.ones[o];if(n+=a?(1===o?"":a)+"hundre":"",r%=100,r){if(n+=n?"og":"",e){const t=s.special.smallOrdinals[r];if(t)return n+t;if(r%10)return n+s.tens[Math.floor(r/10)]+s.special.smallOrdinals[r%10]}n+=s.ones[r]||s.tens[Math.floor(r/10)]+(r%10?s.ones[r%10]:"")}return e?i(n):n}function i(t){const e=s.special.endOrdinal[0];return"a"===e&&t.match(/en$/)?t.slice(0,-2)+s.special.endOrdinal:t.match(/(d|n)$/)||t.match(/hundre$/)?t+"de":t.match(/i$/)?t+s.special.endOrdinal:"a"===e&&t.match(/e$/)?t.slice(0,-1)+s.special.endOrdinal:(t.match(/e$/),t+"nde")}function a(t){return u(t,!0)}const s=(0,r(7549).NUMBERS)();function l(t,e=!1){return t===s.ones[1]?"ein"===t?"eitt ":e?"et":"ett":t}function c(t,e=!1){let r=t%1e3,n="",o=s.ones[Math.floor(r/100)];if(n+=o?l(o)+"hundre":"",r%=100,r){if(n+=n?"og":"",e){const t=s.special.smallOrdinals[r];if(t)return n+t}if(o=s.ones[r],o)n+=o;else{const t=s.tens[Math.floor(r/10)];o=s.ones[r%10],n+=o?o+"og"+t:t}}return e?i(n):n}function u(t,e=!1){const r="alt"===n.default.getInstance().subiso?function(t,e=!1){if(0===t)return e?s.special.smallOrdinals[0]:s.zero;if(t>=Math.pow(10,36))return t.toString();let r=0,n="";for(;t>0;){const o=t%1e3;if(o){const i=c(t%1e3,!r&&e);!r&&e&&(e=!e),n=(1===r?l(i,!0):i)+(r>1?s.numSep:"")+(r?s.large[r]+(r>1&&o>1?"er":""):"")+(r>1&&n?s.numSep:"")+n}t=Math.floor(t/1e3),r++}return e?n+(n.match(/tusen$/)?"de":"te"):n}(t,e):function(t,e=!1){if(0===t)return e?s.special.smallOrdinals[0]:s.zero;if(t>=Math.pow(10,36))return t.toString();let r=0,n="";for(;t>0;){const i=t%1e3;if(i){const a=o(t%1e3,!r&&e);!r&&e&&(e=!e),n=a+(r?" "+s.large[r]+(r>1&&i>1?"er":"")+(n?" ":""):"")+n}t=Math.floor(t/1e3),r++}return e?n+(n.match(/tusen$/)?"de":"te"):n}(t,e);return r}s.wordOrdinal=a,s.numericOrdinal=function(t){return t.toString()+"."},s.numberToWords=u,s.numberToOrdinal=function(t,e){return a(t)},e.default=s},3898:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0});function n(t){let e=t%1e3,r="";const n=Math.floor(e/100);return r+=a.ones[n]?(1===n?"":a.ones[n]+a.numSep)+"hundra":"",e%=100,e&&(r+=r?a.numSep:"",r+=a.ones[e]||a.tens[Math.floor(e/10)]+(e%10?a.numSep+a.ones[e%10]:"")),r}function o(t,e=!1){if(0===t)return a.zero;if(t>=Math.pow(10,36))return t.toString();let r=0,o="";for(;t>0;){const i=t%1e3;if(i){const s=a.large[r],l=i>1&&r>1&&!e?"er":"";o=(1===r&&1===i?"":(r>1&&1===i?"en":n(t%1e3))+(r>1?" ":""))+(r?s+l+(r>1?" ":""):"")+o}t=Math.floor(t/1e3),r++}return o.replace(/ $/,"")}function i(t){let e=o(t,!0);return e.match(/^noll$/)?e="nollte":e.match(/ett$/)?e=e.replace(/ett$/,"f\xf6rsta"):e.match(/tv\xe5$/)?e=e.replace(/tv\xe5$/,"andra"):e.match(/tre$/)?e=e.replace(/tre$/,"tredje"):e.match(/fyra$/)?e=e.replace(/fyra$/,"fj\xe4rde"):e.match(/fem$/)?e=e.replace(/fem$/,"femte"):e.match(/sex$/)?e=e.replace(/sex$/,"sj\xe4tte"):e.match(/sju$/)?e=e.replace(/sju$/,"sjunde"):e.match(/\xe5tta$/)?e=e.replace(/\xe5tta$/,"\xe5ttonde"):e.match(/nio$/)?e=e.replace(/nio$/,"nionde"):e.match(/tio$/)?e=e.replace(/tio$/,"tionde"):e.match(/elva$/)?e=e.replace(/elva$/,"elfte"):e.match(/tolv$/)?e=e.replace(/tolv$/,"tolfte"):e.match(/tusen$/)?e=e.replace(/tusen$/,"tusonde"):e.match(/jard$/)||e.match(/jon$/)?e+="te":e+="de",e}const a=(0,r(7549).NUMBERS)();a.wordOrdinal=i,a.numericOrdinal=function(t){const e=t.toString();return e.match(/11$|12$/)?e+":e":e+(e.match(/1$|2$/)?":a":":e")},a.numberToWords=o,a.numberToOrdinal=function(t,e){if(1===t)return"hel";if(2===t)return e?"halva":"halv";let r=i(t);return r=r.match(/de$/)?r.replace(/de$/,""):r,r+(e?"delar":"del")},e.default=a},4977:function(t,e){function r(t,e=""){if(!t.childNodes||!t.childNodes[0]||!t.childNodes[0].childNodes||t.childNodes[0].childNodes.length<2||"number"!==t.childNodes[0].childNodes[0].tagName||"integer"!==t.childNodes[0].childNodes[0].getAttribute("role")||"number"!==t.childNodes[0].childNodes[1].tagName||"integer"!==t.childNodes[0].childNodes[1].getAttribute("role"))return{convertible:!1,content:t.textContent};const r=t.childNodes[0].childNodes[1].textContent,n=t.childNodes[0].childNodes[0].textContent,o=Number(r),i=Number(n);return isNaN(o)||isNaN(i)?{convertible:!1,content:`${n} ${e} ${r}`}:{convertible:!0,enumerator:i,denominator:o}}Object.defineProperty(e,"__esModule",{value:!0}),e.vulgarFractionSmall=e.convertVulgarFraction=e.Combiners=e.siCombiner=e.identityTransformer=e.pluralCase=void 0,e.pluralCase=function(t,e){return t.toString()},e.identityTransformer=function(t){return t.toString()},e.siCombiner=function(t,e){return t+e.toLowerCase()},e.Combiners={},e.Combiners.identityCombiner=function(t,e,r){return t+e+r},e.Combiners.prefixCombiner=function(t,e,r){return t=r?r+" "+t:t,e?e+" "+t:t},e.Combiners.postfixCombiner=function(t,e,r){return t=r?r+" "+t:t,e?t+" "+e:t},e.Combiners.romanceCombiner=function(t,e,r){return t=r?t+" "+r:t,e?t+" "+e:t},e.convertVulgarFraction=r,e.vulgarFractionSmall=function(t,e,n){const o=r(t);if(o.convertible){const t=o.enumerator,r=o.denominator;return t>0&&t0&&r{const a=this.parseCstr(e.toString().replace(o,""));this.addRule(new i.SpeechRule(t,a,n,r))}))}getFullPreconditions(t){const e=this.preconditions.get(t);return e||!this.inherits?e:this.inherits.getFullPreconditions(t)}definePrecondition(t,e,r,...n){const o=this.parsePrecondition(r,n),i=this.parseCstr(e);o&&i?(o.rank=this.rank++,this.preconditions.set(t,new l(i,o))):console.error(`Precondition Error: ${r}, (${e})`)}inheritRules(){if(!this.inherits||!this.inherits.getSpeechRules().length)return;const t=new RegExp("^\\w+\\.\\w+\\."+(this.domain?"\\w+\\.":""));this.inherits.getSpeechRules().forEach((e=>{const r=this.parseCstr(e.dynamicCstr.toString().replace(t,""));this.addRule(new i.SpeechRule(e.name,r,e.precondition,e.action))}))}ignoreRules(t,...e){let r=this.findAllRules((e=>e.name===t));if(!e.length)return void r.forEach(this.deleteRule.bind(this));let n=[];for(const t of e){const e=this.parseCstr(t);for(const t of r)e.equal(t.dynamicCstr)?this.deleteRule(t):n.push(t);r=n,n=[]}}parsePrecondition_(t){const e=this.context.customGenerators.lookup(t);return e?e():[t]}}e.BaseRuleStore=s;class l{constructor(t,e){this.base=t,this._conditions=[],this.constraints=[],this.allCstr={},this.constraints.push(t),this.addCondition(t,e)}get conditions(){return this._conditions}addConstraint(t){if(this.constraints.filter((e=>e.equal(t))).length)return;this.constraints.push(t);const e=[];for(const[r,n]of this.conditions)this.base.equal(r)&&e.push([t,n]);this._conditions=this._conditions.concat(e)}addBaseCondition(t){this.addCondition(this.base,t)}addFullCondition(t){this.constraints.forEach((e=>this.addCondition(e,t)))}addCondition(t,e){const r=t.toString()+" "+e.toString();this.allCstr.condStr||(this.allCstr[r]=!0,this._conditions.push([t,e]))}}e.Condition=l},2469:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.BrailleStore=void 0;const n=r(7630),o=r(9935);class i extends o.MathStore{constructor(){super(...arguments),this.modality="braille",this.customTranscriptions={"\u22ca":"\u2808\u2821\u2833"}}evaluateString(t){const e=[],r=Array.from(t);for(let t=0;tt.push(this.getProperty(e).slice()))),t}toString(){const t=[];return this.order.forEach((e=>t.push(e+": "+this.getProperty(e).toString()))),t.join("\n")}}e.DynamicProperties=n;class o extends n{constructor(t,e){const r={};for(const[e,n]of Object.entries(t))r[e]=[n];super(r,e),this.components=t}static createCstr(...t){const e=o.DEFAULT_ORDER,r={};for(let n=0,o=t.length,i=e.length;n{const r=e.indexOf(t);return-1!==r&&e.splice(r,1)}))}getComponents(){return this.components}getValue(t){return this.components[t]}getValues(){return this.order.map((t=>this.getValue(t)))}allProperties(){const t=super.allProperties();for(let e,r,n=0;e=t[n],r=this.order[n];n++){const t=this.getValue(r);-1===e.indexOf(t)&&e.unshift(t)}return t}toString(){return this.getValues().join(".")}equal(t){const e=t.getAxes();if(this.order.length!==e.length)return!1;for(let r,n=0;r=e[n];n++){const e=this.getValue(r);if(!e||t.getValue(r)!==e)return!1}return!0}}e.DynamicCstr=o,o.DEFAULT_ORDER=[r.LOCALE,r.MODALITY,r.DOMAIN,r.STYLE,r.TOPIC],o.BASE_LOCALE="base",o.DEFAULT_VALUE="default",o.DEFAULT_VALUES={[r.LOCALE]:"en",[r.DOMAIN]:o.DEFAULT_VALUE,[r.STYLE]:o.DEFAULT_VALUE,[r.TOPIC]:o.DEFAULT_VALUE,[r.MODALITY]:"speech"};e.DynamicCstrParser=class{constructor(t){this.order=t}parse(t){const e=t.split("."),r={};if(e.length>this.order.length)throw new Error("Invalid dynamic constraint: "+r);let n=0;for(let t,o=0;t=this.order[o],e.length;o++,n++){const n=e.shift();r[t]=n}return new o(r,this.order.slice(0,n))}};e.DefaultComparator=class{constructor(t,e=new n(t.getProperties(),t.getOrder())){this.reference=t,this.fallback=e,this.order=this.reference.getOrder()}getReference(){return this.reference}setReference(t,e){this.reference=t,this.fallback=e||new n(t.getProperties(),t.getOrder()),this.order=this.reference.getOrder()}match(t){const e=t.getAxes();return e.length===this.reference.getAxes().length&&e.every((e=>{const r=t.getValue(e);return r===this.reference.getValue(e)||-1!==this.fallback.getProperty(e).indexOf(r)}))}compare(t,e){let r=!1;for(let n,o=0;n=this.order[o];o++){const o=t.getValue(n),i=e.getValue(n);if(!r){const t=this.reference.getValue(n);if(t===o&&t!==i)return-1;if(t===i&&t!==o)return 1;if(t===o&&t===i)continue;t!==o&&t!==i&&(r=!0)}const a=this.fallback.getProperty(n),s=a.indexOf(o),l=a.indexOf(i);if(s!h.equal(t.cstr))),l.push(m),this.rules.set(e,l),d.setReference(f)}lookupRule(t,e){let r=this.getRules(e.getValue(o.Axis.LOCALE));return r=r.filter((function(t){return i.testDynamicConstraints_(e,t)})),1===r.length?r[0]:r.length?r.sort(((t,e)=>n.default.getInstance().comparator.compare(t.cstr,e.cstr)))[0]:null}}e.MathSimpleStore=i},9935:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.MathStore=void 0;const n=r(707),o=r(4356),i=r(7630),a=r(4504),s=r(4650);class l extends a.BaseRuleStore{constructor(){super(),this.annotators=[],this.parseMethods.Alias=this.defineAlias,this.parseMethods.SpecializedRule=this.defineSpecializedRule,this.parseMethods.Specialized=this.defineSpecialized}initialize(){this.initialized||(this.annotations(),this.initialized=!0)}annotations(){for(let t,e=0;t=this.annotators[e];e++)(0,i.activate)(this.domain,t)}defineAlias(t,e,...r){const n=this.parsePrecondition(e,r);if(!n)return void console.error(`Precondition Error: ${e} ${r}`);const o=this.preconditions.get(t);o?o.addFullCondition(n):console.error(`Alias Error: No precondition by the name of ${t}`)}defineRulesAlias(t,e,...r){const n=this.findAllRules((function(e){return e.name===t}));if(0===n.length)throw new s.OutputError("Rule with name "+t+" does not exist.");const o=[];n.forEach((t=>{(t=>{const e=t.dynamicCstr.toString(),r=t.action.toString();for(let t,n=0;t=o[n];n++)if(t.action===r&&t.cstr===e)return!1;return o.push({cstr:e,action:r}),!0})(t)&&this.addAlias_(t,e,r)}))}defineSpecializedRule(t,e,r,n){const o=this.parseCstr(e),i=this.findRule((e=>e.name===t&&o.equal(e.dynamicCstr))),a=this.parseCstr(r);if(!i&&n)throw new s.OutputError("Rule named "+t+" with style "+e+" does not exist.");const l=n?s.Action.fromString(n):i.action,c=new s.SpeechRule(i.name,a,i.precondition,l);this.addRule(c)}defineSpecialized(t,e,r){const n=this.parseCstr(r);if(!n)return void console.error(`Dynamic Constraint Error: ${r}`);const o=this.preconditions.get(t);o?o.addConstraint(n):console.error(`Alias Error: No precondition by the name of ${t}`)}evaluateString(t){const e=[];if(t.match(/^\s+$/))return e;let r=this.matchNumber_(t);if(r&&r.length===t.length)return e.push(this.evaluateCharacter(r.number)),e;const i=n.removeEmpty(t.replace(/\s/g," ").split(" "));for(let t,n=0;t=i[n];n++)if(1===t.length)e.push(this.evaluateCharacter(t));else if(t.match(new RegExp("^["+o.LOCALE.MESSAGES.regexp.TEXT+"]+$")))e.push(this.evaluateCharacter(t));else{let n=t;for(;n;){r=this.matchNumber_(n);const t=n.match(new RegExp("^["+o.LOCALE.MESSAGES.regexp.TEXT+"]+"));if(r)e.push(this.evaluateCharacter(r.number)),n=n.substring(r.length);else if(t)e.push(this.evaluateCharacter(t[0])),n=n.substring(t[0].length);else{const t=Array.from(n),r=t[0];e.push(this.evaluateCharacter(r)),n=t.slice(1).join("")}}}return e}parse(t){super.parse(t),this.annotators=t.annotators||[]}addAlias_(t,e,r){const n=this.parsePrecondition(e,r),o=new s.SpeechRule(t.name,t.dynamicCstr,n,t.action);o.name=t.name,this.addRule(o)}matchNumber_(t){const e=t.match(new RegExp("^"+o.LOCALE.MESSAGES.regexp.NUMBER)),r=t.match(new RegExp("^"+l.regexp.NUMBER));if(!e&&!r)return null;const n=r&&r[0]===t;if(e&&e[0]===t||!n)return e?{number:e[0],length:e[0].length}:null;return{number:r[0].replace(new RegExp(l.regexp.DIGIT_GROUP,"g"),"X").replace(new RegExp(l.regexp.DECIMAL_MARK,"g"),o.LOCALE.MESSAGES.regexp.DECIMAL_MARK).replace(/X/g,o.LOCALE.MESSAGES.regexp.DIGIT_GROUP.replace(/\\/g,"")),length:r[0].length}}}e.MathStore=l,l.regexp={NUMBER:"((\\d{1,3})(?=(,| ))((,| )\\d{3})*(\\.\\d+)?)|^\\d*\\.\\d+|^\\d+",DECIMAL_MARK:"\\.",DIGIT_GROUP:","}},4650:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.OutputError=e.Precondition=e.Action=e.Component=e.ActionType=e.SpeechRule=void 0;const n=r(5897),o=r(2105);var i;function a(t){switch(t){case"[n]":return i.NODE;case"[m]":return i.MULTI;case"[t]":return i.TEXT;case"[p]":return i.PERSONALITY;default:throw"Parse error: "+t}}e.SpeechRule=class{constructor(t,e,r,n){this.name=t,this.dynamicCstr=e,this.precondition=r,this.action=n,this.context=null}toString(){return this.name+" | "+this.dynamicCstr.toString()+" | "+this.precondition.toString()+" ==> "+this.action.toString()}},function(t){t.NODE="NODE",t.MULTI="MULTI",t.TEXT="TEXT",t.PERSONALITY="PERSONALITY"}(i=e.ActionType||(e.ActionType={}));class s{constructor({type:t,content:e,attributes:r,grammar:n}){this.type=t,this.content=e,this.attributes=r,this.grammar=n}static grammarFromString(t){return o.Grammar.parseInput(t)}static fromString(t){const e={type:a(t.substring(0,3))};let r=t.slice(3).trim();if(!r)throw new u("Missing content.");switch(e.type){case i.TEXT:if('"'===r[0]){const t=p(r,"\\(")[0].trim();if('"'!==t.slice(-1))throw new u("Invalid string syntax.");e.content=t,r=r.slice(t.length).trim(),-1===r.indexOf("(")&&(r="");break}case i.NODE:case i.MULTI:{const t=r.indexOf(" (");if(-1===t){e.content=r.trim(),r="";break}e.content=r.substring(0,t).trim(),r=r.slice(t).trim()}}if(r){const t=s.attributesFromString(r);t.grammar&&(e.grammar=t.grammar,delete t.grammar),Object.keys(t).length&&(e.attributes=t)}return new s(e)}static attributesFromString(t){if("("!==t[0]||")"!==t.slice(-1))throw new u("Invalid attribute expression: "+t);const e={},r=p(t.slice(1,-1),",");for(let t=0,n=r.length;t0?"("+t.join(", ")+")":""}getAttributes(){const t=[];for(const e in this.attributes){const r=this.attributes[e];"true"===r?t.push(e):t.push(e+":"+r)}return t}}e.Component=s;class l{constructor(t){this.components=t}static fromString(t){const e=p(t,";").filter((function(t){return t.match(/\S/)})).map((function(t){return t.trim()})),r=[];for(let t=0,n=e.length;t0?r[0]:null}applyConstraint(t,e){return!!this.applyQuery(t,e)||n.evaluateBoolean(e,t)}constructString(t,e){if(!e)return"";if('"'===e.charAt(0))return e.slice(1,-1);const r=this.customStrings.lookup(e);return r?r(t):n.evaluateString(e,t)}parse(t){const e=Array.isArray(t)?t:Object.entries(t);for(let t,r=0;t=e[r];r++){switch(t[0].slice(0,3)){case"CQF":this.customQueries.add(t[0],t[1]);break;case"CSF":this.customStrings.add(t[0],t[1]);break;case"CTF":this.contextFunctions.add(t[0],t[1]);break;case"CGF":this.customGenerators.add(t[0],t[1]);break;default:console.error("FunctionError: Invalid function name "+t[0])}}}}},2362:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.storeFactory=e.SpeechRuleEngine=void 0;const n=r(7052),o=r(2057),i=r(5740),a=r(5897),s=r(4440),l=r(5274),c=r(7283),u=r(7599),p=r(2469),h=r(1676),d=r(2105),f=r(9935),m=r(4650),y=r(4508);class g{constructor(){this.trie=null,this.evaluators_={},this.trie=new y.Trie}static getInstance(){return g.instance=g.instance||new g,g.instance}static debugSpeechRule(t,e){const r=t.precondition,n=t.context.applyQuery(e,r.query);o.Debugger.getInstance().output(r.query,n?n.toString():n),r.constraints.forEach((r=>o.Debugger.getInstance().output(r,t.context.applyConstraint(e,r))))}static debugNamedSpeechRule(t,e){const r=g.getInstance().trie.collectRules().filter((e=>e.name==t));for(let n,i=0;n=r[i];i++)o.Debugger.getInstance().output("Rule",t,"DynamicCstr:",n.dynamicCstr.toString(),"number",i),g.debugSpeechRule(n,e)}evaluateNode(t){(0,l.updateEvaluator)(t);const e=(new Date).getTime();let r=[];try{r=this.evaluateNode_(t)}catch(t){console.error("Something went wrong computing speech."),o.Debugger.getInstance().output(t)}const n=(new Date).getTime();return o.Debugger.getInstance().output("Time:",n-e),r}toString(){return this.trie.collectRules().map((t=>t.toString())).join("\n")}runInSetting(t,e){const r=a.default.getInstance(),n={};for(const e in t)n[e]=r[e],r[e]=t[e];r.setDynamicCstr();const o=e();for(const t in n)r[t]=n[t];return r.setDynamicCstr(),o}addStore(t){const e=v(t);"abstract"!==e.kind&&e.getSpeechRules().forEach((t=>this.trie.addRule(t))),this.addEvaluator(e)}processGrammar(t,e,r){const n={};for(const o in r){const i=r[o];n[o]="string"==typeof i?t.constructString(e,i):i}d.Grammar.getInstance().pushState(n)}addEvaluator(t){const e=t.evaluateDefault.bind(t),r=this.evaluators_[t.locale];if(r)return void(r[t.modality]=e);const n={};n[t.modality]=e,this.evaluators_[t.locale]=n}getEvaluator(t,e){const r=this.evaluators_[t]||this.evaluators_[h.DynamicCstr.DEFAULT_VALUES[h.Axis.LOCALE]];return r[e]||r[h.DynamicCstr.DEFAULT_VALUES[h.Axis.MODALITY]]}enumerate(t){return this.trie.enumerate(t)}evaluateNode_(t){return t?(this.updateConstraint_(),this.evaluateTree_(t)):[]}evaluateTree_(t){const e=a.default.getInstance();let r;o.Debugger.getInstance().output(e.mode!==s.Mode.HTTP?t.toString():t),d.Grammar.getInstance().setAttribute(t);const i=this.lookupRule(t,e.dynamicCstr);if(!i)return e.strict?[]:(r=this.getEvaluator(e.locale,e.modality)(t),t.attributes&&this.addPersonality_(r,{},!1,t),r);o.Debugger.getInstance().generateOutput((()=>["Apply Rule:",i.name,i.dynamicCstr.toString(),(e.mode,s.Mode.HTTP,t).toString()]));const c=i.context,u=i.action.components;r=[];for(let e,o=0;e=u[o];o++){let o=[];const i=e.content||"",s=e.attributes||{};let u=!1;e.grammar&&this.processGrammar(c,t,e.grammar);let p=null;if(s.engine){p=a.default.getInstance().dynamicCstr.getComponents();const t=d.Grammar.parseInput(s.engine);a.default.getInstance().setDynamicCstr(t)}switch(e.type){case m.ActionType.NODE:{const e=c.applyQuery(t,i);e&&(o=this.evaluateTree_(e))}break;case m.ActionType.MULTI:{u=!0;const e=c.applySelector(t,i);e.length>0&&(o=this.evaluateNodeList_(c,e,s.sepFunc,c.constructString(t,s.separator),s.ctxtFunc,c.constructString(t,s.context)))}break;case m.ActionType.TEXT:{const e=s.span,r={};if(e){const n=(0,l.evalXPath)(e,t);n.length&&(r.extid=n[0].getAttribute("extid"))}const a=c.constructString(t,i);(a||""===a)&&(o=Array.isArray(a)?a.map((function(t){return n.AuditoryDescription.create({text:t.speech,attributes:t.attributes},{adjust:!0})})):[n.AuditoryDescription.create({text:a,attributes:r},{adjust:!0})])}break;case m.ActionType.PERSONALITY:default:o=[n.AuditoryDescription.create({text:i})]}o[0]&&!u&&(s.context&&(o[0].context=c.constructString(t,s.context)+(o[0].context||"")),s.annotation&&(o[0].annotation=s.annotation)),this.addLayout(o,s,u),e.grammar&&d.Grammar.getInstance().popState(),r=r.concat(this.addPersonality_(o,s,u,t)),p&&a.default.getInstance().setDynamicCstr(p)}return r}evaluateNodeList_(t,e,r,o,i,a){if(!e.length)return[];const s=o||"",l=a||"",c=t.contextFunctions.lookup(i),u=c?c(e,l):function(){return l},p=t.contextFunctions.lookup(r),h=p?p(e,s):function(){return[n.AuditoryDescription.create({text:s},{translate:!0})]};let d=[];for(let t,r=0;t=e[r];r++){const n=this.evaluateTree_(t);if(n.length>0&&(n[0].context=u()+(n[0].context||""),d=d.concat(n),r=0;e--){const n=r[e].name;!t.attributes[n]&&n.match(/^ext/)&&(t.attributes[n]=r[e].value)}}}addRelativePersonality_(t,e){if(!t.personality)return t.personality=e,t;const r=t.personality;for(const t in e)r[t]&&"number"==typeof r[t]&&"number"==typeof e[t]?r[t]=r[t]+e[t]:r[t]||(r[t]=e[t]);return t}updateConstraint_(){const t=a.default.getInstance().dynamicCstr,e=a.default.getInstance().strict,r=this.trie,n={};let o=t.getValue(h.Axis.LOCALE),i=t.getValue(h.Axis.MODALITY),s=t.getValue(h.Axis.DOMAIN);r.hasSubtrie([o,i,s])||(s=h.DynamicCstr.DEFAULT_VALUES[h.Axis.DOMAIN],r.hasSubtrie([o,i,s])||(i=h.DynamicCstr.DEFAULT_VALUES[h.Axis.MODALITY],r.hasSubtrie([o,i,s])||(o=h.DynamicCstr.DEFAULT_VALUES[h.Axis.LOCALE]))),n[h.Axis.LOCALE]=[o],n[h.Axis.MODALITY]=["summary"!==i?i:h.DynamicCstr.DEFAULT_VALUES[h.Axis.MODALITY]],n[h.Axis.DOMAIN]=["speech"!==i?h.DynamicCstr.DEFAULT_VALUES[h.Axis.DOMAIN]:s];const l=t.getOrder();for(let r,o=0;r=l[o];o++)if(!n[r]){const o=t.getValue(r),i=this.makeSet_(o,t.preference),a=h.DynamicCstr.DEFAULT_VALUES[r];e||o===a||i.push(a),n[r]=i}t.updateProperties(n)}makeSet_(t,e){return e&&Object.keys(e).length?t.split(":"):[t]}lookupRule(t,e){if(!t||t.nodeType!==i.NodeType.ELEMENT_NODE&&t.nodeType!==i.NodeType.TEXT_NODE)return null;const r=this.lookupRules(t,e);return r.length>0?this.pickMostConstraint_(e,r):null}lookupRules(t,e){return this.trie.lookupRules(t,e.allProperties())}pickMostConstraint_(t,e){const r=a.default.getInstance().comparator;return e.sort((function(t,e){return r.compare(t.dynamicCstr,e.dynamicCstr)||e.precondition.priority-t.precondition.priority||e.precondition.constraints.length-t.precondition.constraints.length||e.precondition.rank-t.precondition.rank})),o.Debugger.getInstance().generateOutput((()=>e.map((t=>t.name+"("+t.dynamicCstr.toString()+")"))).bind(this)),e[0]}}e.SpeechRuleEngine=g;const b=new Map;function v(t){const e=`${t.locale}.${t.modality}.${t.domain}`;if("actions"===t.kind){const r=b.get(e);return r.parse(t),r}u.init(),t&&!t.functions&&(t.functions=c.getStore(t.locale,t.modality,t.domain));const r="braille"===t.modality?new p.BrailleStore:new f.MathStore;return b.set(e,r),t.inherits&&(r.inherits=b.get(`${t.inherits}.${t.modality}.${t.domain}`)),r.parse(t),r.initialize(),r}e.storeFactory=v,a.default.nodeEvaluator=g.getInstance().evaluateNode.bind(g.getInstance())},5662:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.CustomGenerators=e.ContextFunctions=e.CustomStrings=e.CustomQueries=void 0;class r{constructor(t,e){this.prefix=t,this.store=e}add(t,e){this.checkCustomFunctionSyntax_(t)&&(this.store[t]=e)}addStore(t){const e=Object.keys(t.store);for(let r,n=0;r=e[n];n++)this.add(r,t.store[r])}lookup(t){return this.store[t]}checkCustomFunctionSyntax_(t){const e=new RegExp("^"+this.prefix);return!!t.match(e)||(console.error("FunctionError: Invalid function name. Expected prefix "+this.prefix),!1)}}e.CustomQueries=class extends r{constructor(){super("CQF",{})}};e.CustomStrings=class extends r{constructor(){super("CSF",{})}};e.ContextFunctions=class extends r{constructor(){super("CTF",{})}};e.CustomGenerators=class extends r{constructor(){super("CGF",{})}}},365:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.contentIterator=e.pauseSeparator=e.nodeCounter=void 0;const n=r(7052),o=r(5274),i=r(5897);e.nodeCounter=function(t,e){const r=t.length;let n=0,o=e;return e||(o=""),function(){return n0?o.evalXPath("../../content/*",t[0]):[],function(){const t=r.shift(),o=e?[n.AuditoryDescription.create({text:e},{translate:!0})]:[];if(!t)return o;const a=i.default.evaluateNode(t);return o.concat(a)}}},1414:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.getTreeFromString=e.getTree=e.xmlTree=void 0;const n=r(5740),o=r(7075);function i(t){return new o.SemanticTree(t)}e.xmlTree=function(t){return i(t).xml()},e.getTree=i,e.getTreeFromString=function(t){return i(n.parseInput(t))}},7630:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.annotate=e.activate=e.register=e.visitors=e.annotators=void 0;const n=r(9265);e.annotators=new Map,e.visitors=new Map,e.register=function(t){const r=t.domain+":"+t.name;t instanceof n.SemanticAnnotator?e.annotators.set(r,t):e.visitors.set(r,t)},e.activate=function(t,r){const n=t+":"+r,o=e.annotators.get(n)||e.visitors.get(n);o&&(o.active=!0)},e.annotate=function(t){for(const r of e.annotators.values())r.active&&r.annotate(t);for(const r of e.visitors.values())r.active&&r.visit(t,Object.assign({},r.def))}},9265:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.SemanticVisitor=e.SemanticAnnotator=void 0;e.SemanticAnnotator=class{constructor(t,e,r){this.domain=t,this.name=e,this.func=r,this.active=!1}annotate(t){t.childNodes.forEach(this.annotate.bind(this)),t.addAnnotation(this.domain,this.func(t))}};e.SemanticVisitor=class{constructor(t,e,r,n={}){this.domain=t,this.name=e,this.func=r,this.def=n,this.active=!1}visit(t,e){let r=this.func(t,e);t.addAnnotation(this.domain,r[0]);for(let e,n=0;e=t.childNodes[n];n++)r=this.visit(e,r[1]);return r}}},3588:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.lookupSecondary=e.isEmbellishedType=e.isMatchingFence=e.functionApplication=e.invisibleComma=e.invisiblePlus=e.invisibleTimes=e.lookupMeaning=e.lookupRole=e.lookupType=e.equal=e.allLettersRegExp=void 0;const r=String.fromCodePoint(8291),n=["\uff0c","\ufe50",",",r],o=["\xaf","\u2012","\u2013","\u2014","\u2015","\ufe58","-","\u207b","\u208b","\u2212","\u2796","\ufe63","\uff0d","\u2010","\u2011","\u203e","_"],i=["~","\u0303","\u223c","\u02dc","\u223d","\u02f7","\u0334","\u0330"],a={"(":")","[":"]","{":"}","\u2045":"\u2046","\u2329":"\u232a","\u2768":"\u2769","\u276a":"\u276b","\u276c":"\u276d","\u276e":"\u276f","\u2770":"\u2771","\u2772":"\u2773","\u2774":"\u2775","\u27c5":"\u27c6","\u27e6":"\u27e7","\u27e8":"\u27e9","\u27ea":"\u27eb","\u27ec":"\u27ed","\u27ee":"\u27ef","\u2983":"\u2984","\u2985":"\u2986","\u2987":"\u2988","\u2989":"\u298a","\u298b":"\u298c","\u298d":"\u298e","\u298f":"\u2990","\u2991":"\u2992","\u2993":"\u2994","\u2995":"\u2996","\u2997":"\u2998","\u29d8":"\u29d9","\u29da":"\u29db","\u29fc":"\u29fd","\u2e22":"\u2e23","\u2e24":"\u2e25","\u2e26":"\u2e27","\u2e28":"\u2e29","\u3008":"\u3009","\u300a":"\u300b","\u300c":"\u300d","\u300e":"\u300f","\u3010":"\u3011","\u3014":"\u3015","\u3016":"\u3017","\u3018":"\u3019","\u301a":"\u301b","\u301d":"\u301e","\ufd3e":"\ufd3f","\ufe17":"\ufe18","\ufe59":"\ufe5a","\ufe5b":"\ufe5c","\ufe5d":"\ufe5e","\uff08":"\uff09","\uff3b":"\uff3d","\uff5b":"\uff5d","\uff5f":"\uff60","\uff62":"\uff63","\u2308":"\u2309","\u230a":"\u230b","\u230c":"\u230d","\u230e":"\u230f","\u231c":"\u231d","\u231e":"\u231f","\u239b":"\u239e","\u239c":"\u239f","\u239d":"\u23a0","\u23a1":"\u23a4","\u23a2":"\u23a5","\u23a3":"\u23a6","\u23a7":"\u23ab","\u23a8":"\u23ac","\u23a9":"\u23ad","\u23b0":"\u23b1","\u23b8":"\u23b9"},s={"\u23b4":"\u23b5","\u23dc":"\u23dd","\u23de":"\u23df","\u23e0":"\u23e1","\ufe35":"\ufe36","\ufe37":"\ufe38","\ufe39":"\ufe3a","\ufe3b":"\ufe3c","\ufe3d":"\ufe3e","\ufe3f":"\ufe40","\ufe41":"\ufe42","\ufe43":"\ufe44","\ufe47":"\ufe48"},l=Object.keys(a),c=Object.values(a);c.push("\u301f");const u=Object.keys(s),p=Object.values(s),h=["|","\xa6","\u2223","\u23d0","\u23b8","\u23b9","\u2758","\uff5c","\uffe4","\ufe31","\ufe32"],d=["\u2016","\u2225","\u2980","\u2af4"],f=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"],m=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","\u0131","\u0237"],y=["\uff21","\uff22","\uff23","\uff24","\uff25","\uff26","\uff27","\uff28","\uff29","\uff2a","\uff2b","\uff2c","\uff2d","\uff2e","\uff2f","\uff30","\uff31","\uff32","\uff33","\uff34","\uff35","\uff36","\uff37","\uff38","\uff39","\uff3a"],g=["\uff41","\uff42","\uff43","\uff44","\uff45","\uff46","\uff47","\uff48","\uff49","\uff4a","\uff4b","\uff4c","\uff4d","\uff4e","\uff4f","\uff50","\uff51","\uff52","\uff53","\uff54","\uff55","\uff56","\uff57","\uff58","\uff59","\uff5a"],b=["\ud835\udc00","\ud835\udc01","\ud835\udc02","\ud835\udc03","\ud835\udc04","\ud835\udc05","\ud835\udc06","\ud835\udc07","\ud835\udc08","\ud835\udc09","\ud835\udc0a","\ud835\udc0b","\ud835\udc0c","\ud835\udc0d","\ud835\udc0e","\ud835\udc0f","\ud835\udc10","\ud835\udc11","\ud835\udc12","\ud835\udc13","\ud835\udc14","\ud835\udc15","\ud835\udc16","\ud835\udc17","\ud835\udc18","\ud835\udc19"],v=["\ud835\udc1a","\ud835\udc1b","\ud835\udc1c","\ud835\udc1d","\ud835\udc1e","\ud835\udc1f","\ud835\udc20","\ud835\udc21","\ud835\udc22","\ud835\udc23","\ud835\udc24","\ud835\udc25","\ud835\udc26","\ud835\udc27","\ud835\udc28","\ud835\udc29","\ud835\udc2a","\ud835\udc2b","\ud835\udc2c","\ud835\udc2d","\ud835\udc2e","\ud835\udc2f","\ud835\udc30","\ud835\udc31","\ud835\udc32","\ud835\udc33"],_=["\ud835\udc34","\ud835\udc35","\ud835\udc36","\ud835\udc37","\ud835\udc38","\ud835\udc39","\ud835\udc3a","\ud835\udc3b","\ud835\udc3c","\ud835\udc3d","\ud835\udc3e","\ud835\udc3f","\ud835\udc40","\ud835\udc41","\ud835\udc42","\ud835\udc43","\ud835\udc44","\ud835\udc45","\ud835\udc46","\ud835\udc47","\ud835\udc48","\ud835\udc49","\ud835\udc4a","\ud835\udc4b","\ud835\udc4c","\ud835\udc4d"],S=["\ud835\udc4e","\ud835\udc4f","\ud835\udc50","\ud835\udc51","\ud835\udc52","\ud835\udc53","\ud835\udc54","\u210e","\ud835\udc56","\ud835\udc57","\ud835\udc58","\ud835\udc59","\ud835\udc5a","\ud835\udc5b","\ud835\udc5c","\ud835\udc5d","\ud835\udc5e","\ud835\udc5f","\ud835\udc60","\ud835\udc61","\ud835\udc62","\ud835\udc63","\ud835\udc64","\ud835\udc65","\ud835\udc66","\ud835\udc67","\ud835\udea4","\ud835\udea5"],x=["\ud835\udc68","\ud835\udc69","\ud835\udc6a","\ud835\udc6b","\ud835\udc6c","\ud835\udc6d","\ud835\udc6e","\ud835\udc6f","\ud835\udc70","\ud835\udc71","\ud835\udc72","\ud835\udc73","\ud835\udc74","\ud835\udc75","\ud835\udc76","\ud835\udc77","\ud835\udc78","\ud835\udc79","\ud835\udc7a","\ud835\udc7b","\ud835\udc7c","\ud835\udc7d","\ud835\udc7e","\ud835\udc7f","\ud835\udc80","\ud835\udc81"],M=["\ud835\udc82","\ud835\udc83","\ud835\udc84","\ud835\udc85","\ud835\udc86","\ud835\udc87","\ud835\udc88","\ud835\udc89","\ud835\udc8a","\ud835\udc8b","\ud835\udc8c","\ud835\udc8d","\ud835\udc8e","\ud835\udc8f","\ud835\udc90","\ud835\udc91","\ud835\udc92","\ud835\udc93","\ud835\udc94","\ud835\udc95","\ud835\udc96","\ud835\udc97","\ud835\udc98","\ud835\udc99","\ud835\udc9a","\ud835\udc9b"],O=["\ud835\udc9c","\u212c","\ud835\udc9e","\ud835\udc9f","\u2130","\u2131","\ud835\udca2","\u210b","\u2110","\ud835\udca5","\ud835\udca6","\u2112","\u2133","\ud835\udca9","\ud835\udcaa","\ud835\udcab","\ud835\udcac","\u211b","\ud835\udcae","\ud835\udcaf","\ud835\udcb0","\ud835\udcb1","\ud835\udcb2","\ud835\udcb3","\ud835\udcb4","\ud835\udcb5","\u2118"],E=["\ud835\udcb6","\ud835\udcb7","\ud835\udcb8","\ud835\udcb9","\u212f","\ud835\udcbb","\u210a","\ud835\udcbd","\ud835\udcbe","\ud835\udcbf","\ud835\udcc0","\ud835\udcc1","\ud835\udcc2","\ud835\udcc3","\u2134","\ud835\udcc5","\ud835\udcc6","\ud835\udcc7","\ud835\udcc8","\ud835\udcc9","\ud835\udcca","\ud835\udccb","\ud835\udccc","\ud835\udccd","\ud835\udcce","\ud835\udccf","\u2113"],A=["\ud835\udcd0","\ud835\udcd1","\ud835\udcd2","\ud835\udcd3","\ud835\udcd4","\ud835\udcd5","\ud835\udcd6","\ud835\udcd7","\ud835\udcd8","\ud835\udcd9","\ud835\udcda","\ud835\udcdb","\ud835\udcdc","\ud835\udcdd","\ud835\udcde","\ud835\udcdf","\ud835\udce0","\ud835\udce1","\ud835\udce2","\ud835\udce3","\ud835\udce4","\ud835\udce5","\ud835\udce6","\ud835\udce7","\ud835\udce8","\ud835\udce9"],C=["\ud835\udcea","\ud835\udceb","\ud835\udcec","\ud835\udced","\ud835\udcee","\ud835\udcef","\ud835\udcf0","\ud835\udcf1","\ud835\udcf2","\ud835\udcf3","\ud835\udcf4","\ud835\udcf5","\ud835\udcf6","\ud835\udcf7","\ud835\udcf8","\ud835\udcf9","\ud835\udcfa","\ud835\udcfb","\ud835\udcfc","\ud835\udcfd","\ud835\udcfe","\ud835\udcff","\ud835\udd00","\ud835\udd01","\ud835\udd02","\ud835\udd03"],w=["\ud835\udd04","\ud835\udd05","\u212d","\ud835\udd07","\ud835\udd08","\ud835\udd09","\ud835\udd0a","\u210c","\u2111","\ud835\udd0d","\ud835\udd0e","\ud835\udd0f","\ud835\udd10","\ud835\udd11","\ud835\udd12","\ud835\udd13","\ud835\udd14","\u211c","\ud835\udd16","\ud835\udd17","\ud835\udd18","\ud835\udd19","\ud835\udd1a","\ud835\udd1b","\ud835\udd1c","\u2128"],T=["\ud835\udd1e","\ud835\udd1f","\ud835\udd20","\ud835\udd21","\ud835\udd22","\ud835\udd23","\ud835\udd24","\ud835\udd25","\ud835\udd26","\ud835\udd27","\ud835\udd28","\ud835\udd29","\ud835\udd2a","\ud835\udd2b","\ud835\udd2c","\ud835\udd2d","\ud835\udd2e","\ud835\udd2f","\ud835\udd30","\ud835\udd31","\ud835\udd32","\ud835\udd33","\ud835\udd34","\ud835\udd35","\ud835\udd36","\ud835\udd37"],N=["\ud835\udd38","\ud835\udd39","\u2102","\ud835\udd3b","\ud835\udd3c","\ud835\udd3d","\ud835\udd3e","\u210d","\ud835\udd40","\ud835\udd41","\ud835\udd42","\ud835\udd43","\ud835\udd44","\u2115","\ud835\udd46","\u2119","\u211a","\u211d","\ud835\udd4a","\ud835\udd4b","\ud835\udd4c","\ud835\udd4d","\ud835\udd4e","\ud835\udd4f","\ud835\udd50","\u2124"],L=["\ud835\udd52","\ud835\udd53","\ud835\udd54","\ud835\udd55","\ud835\udd56","\ud835\udd57","\ud835\udd58","\ud835\udd59","\ud835\udd5a","\ud835\udd5b","\ud835\udd5c","\ud835\udd5d","\ud835\udd5e","\ud835\udd5f","\ud835\udd60","\ud835\udd61","\ud835\udd62","\ud835\udd63","\ud835\udd64","\ud835\udd65","\ud835\udd66","\ud835\udd67","\ud835\udd68","\ud835\udd69","\ud835\udd6a","\ud835\udd6b"],P=["\ud835\udd6c","\ud835\udd6d","\ud835\udd6e","\ud835\udd6f","\ud835\udd70","\ud835\udd71","\ud835\udd72","\ud835\udd73","\ud835\udd74","\ud835\udd75","\ud835\udd76","\ud835\udd77","\ud835\udd78","\ud835\udd79","\ud835\udd7a","\ud835\udd7b","\ud835\udd7c","\ud835\udd7d","\ud835\udd7e","\ud835\udd7f","\ud835\udd80","\ud835\udd81","\ud835\udd82","\ud835\udd83","\ud835\udd84","\ud835\udd85"],I=["\ud835\udd86","\ud835\udd87","\ud835\udd88","\ud835\udd89","\ud835\udd8a","\ud835\udd8b","\ud835\udd8c","\ud835\udd8d","\ud835\udd8e","\ud835\udd8f","\ud835\udd90","\ud835\udd91","\ud835\udd92","\ud835\udd93","\ud835\udd94","\ud835\udd95","\ud835\udd96","\ud835\udd97","\ud835\udd98","\ud835\udd99","\ud835\udd9a","\ud835\udd9b","\ud835\udd9c","\ud835\udd9d","\ud835\udd9e","\ud835\udd9f"],k=["\ud835\udda0","\ud835\udda1","\ud835\udda2","\ud835\udda3","\ud835\udda4","\ud835\udda5","\ud835\udda6","\ud835\udda7","\ud835\udda8","\ud835\udda9","\ud835\uddaa","\ud835\uddab","\ud835\uddac","\ud835\uddad","\ud835\uddae","\ud835\uddaf","\ud835\uddb0","\ud835\uddb1","\ud835\uddb2","\ud835\uddb3","\ud835\uddb4","\ud835\uddb5","\ud835\uddb6","\ud835\uddb7","\ud835\uddb8","\ud835\uddb9"],R=["\ud835\uddba","\ud835\uddbb","\ud835\uddbc","\ud835\uddbd","\ud835\uddbe","\ud835\uddbf","\ud835\uddc0","\ud835\uddc1","\ud835\uddc2","\ud835\uddc3","\ud835\uddc4","\ud835\uddc5","\ud835\uddc6","\ud835\uddc7","\ud835\uddc8","\ud835\uddc9","\ud835\uddca","\ud835\uddcb","\ud835\uddcc","\ud835\uddcd","\ud835\uddce","\ud835\uddcf","\ud835\uddd0","\ud835\uddd1","\ud835\uddd2","\ud835\uddd3"],j=["\ud835\uddd4","\ud835\uddd5","\ud835\uddd6","\ud835\uddd7","\ud835\uddd8","\ud835\uddd9","\ud835\uddda","\ud835\udddb","\ud835\udddc","\ud835\udddd","\ud835\uddde","\ud835\udddf","\ud835\udde0","\ud835\udde1","\ud835\udde2","\ud835\udde3","\ud835\udde4","\ud835\udde5","\ud835\udde6","\ud835\udde7","\ud835\udde8","\ud835\udde9","\ud835\uddea","\ud835\uddeb","\ud835\uddec","\ud835\udded"],B=["\ud835\uddee","\ud835\uddef","\ud835\uddf0","\ud835\uddf1","\ud835\uddf2","\ud835\uddf3","\ud835\uddf4","\ud835\uddf5","\ud835\uddf6","\ud835\uddf7","\ud835\uddf8","\ud835\uddf9","\ud835\uddfa","\ud835\uddfb","\ud835\uddfc","\ud835\uddfd","\ud835\uddfe","\ud835\uddff","\ud835\ude00","\ud835\ude01","\ud835\ude02","\ud835\ude03","\ud835\ude04","\ud835\ude05","\ud835\ude06","\ud835\ude07"],D=["\ud835\ude08","\ud835\ude09","\ud835\ude0a","\ud835\ude0b","\ud835\ude0c","\ud835\ude0d","\ud835\ude0e","\ud835\ude0f","\ud835\ude10","\ud835\ude11","\ud835\ude12","\ud835\ude13","\ud835\ude14","\ud835\ude15","\ud835\ude16","\ud835\ude17","\ud835\ude18","\ud835\ude19","\ud835\ude1a","\ud835\ude1b","\ud835\ude1c","\ud835\ude1d","\ud835\ude1e","\ud835\ude1f","\ud835\ude20","\ud835\ude21"],F=["\ud835\ude22","\ud835\ude23","\ud835\ude24","\ud835\ude25","\ud835\ude26","\ud835\ude27","\ud835\ude28","\ud835\ude29","\ud835\ude2a","\ud835\ude2b","\ud835\ude2c","\ud835\ude2d","\ud835\ude2e","\ud835\ude2f","\ud835\ude30","\ud835\ude31","\ud835\ude32","\ud835\ude33","\ud835\ude34","\ud835\ude35","\ud835\ude36","\ud835\ude37","\ud835\ude38","\ud835\ude39","\ud835\ude3a","\ud835\ude3b"],H=["\ud835\ude3c","\ud835\ude3d","\ud835\ude3e","\ud835\ude3f","\ud835\ude40","\ud835\ude41","\ud835\ude42","\ud835\ude43","\ud835\ude44","\ud835\ude45","\ud835\ude46","\ud835\ude47","\ud835\ude48","\ud835\ude49","\ud835\ude4a","\ud835\ude4b","\ud835\ude4c","\ud835\ude4d","\ud835\ude4e","\ud835\ude4f","\ud835\ude50","\ud835\ude51","\ud835\ude52","\ud835\ude53","\ud835\ude54","\ud835\ude55"],q=["\ud835\ude56","\ud835\ude57","\ud835\ude58","\ud835\ude59","\ud835\ude5a","\ud835\ude5b","\ud835\ude5c","\ud835\ude5d","\ud835\ude5e","\ud835\ude5f","\ud835\ude60","\ud835\ude61","\ud835\ude62","\ud835\ude63","\ud835\ude64","\ud835\ude65","\ud835\ude66","\ud835\ude67","\ud835\ude68","\ud835\ude69","\ud835\ude6a","\ud835\ude6b","\ud835\ude6c","\ud835\ude6d","\ud835\ude6e","\ud835\ude6f"],U=["\ud835\ude70","\ud835\ude71","\ud835\ude72","\ud835\ude73","\ud835\ude74","\ud835\ude75","\ud835\ude76","\ud835\ude77","\ud835\ude78","\ud835\ude79","\ud835\ude7a","\ud835\ude7b","\ud835\ude7c","\ud835\ude7d","\ud835\ude7e","\ud835\ude7f","\ud835\ude80","\ud835\ude81","\ud835\ude82","\ud835\ude83","\ud835\ude84","\ud835\ude85","\ud835\ude86","\ud835\ude87","\ud835\ude88","\ud835\ude89"],G=["\ud835\ude8a","\ud835\ude8b","\ud835\ude8c","\ud835\ude8d","\ud835\ude8e","\ud835\ude8f","\ud835\ude90","\ud835\ude91","\ud835\ude92","\ud835\ude93","\ud835\ude94","\ud835\ude95","\ud835\ude96","\ud835\ude97","\ud835\ude98","\ud835\ude99","\ud835\ude9a","\ud835\ude9b","\ud835\ude9c","\ud835\ude9d","\ud835\ude9e","\ud835\ude9f","\ud835\udea0","\ud835\udea1","\ud835\udea2","\ud835\udea3"],V=["\u2145","\u2146","\u2147","\u2148","\u2149"],X=["\u0391","\u0392","\u0393","\u0394","\u0395","\u0396","\u0397","\u0398","\u0399","\u039a","\u039b","\u039c","\u039d","\u039e","\u039f","\u03a0","\u03a1","\u03a3","\u03a4","\u03a5","\u03a6","\u03a7","\u03a8","\u03a9"],W=["\u03b1","\u03b2","\u03b3","\u03b4","\u03b5","\u03b6","\u03b7","\u03b8","\u03b9","\u03ba","\u03bb","\u03bc","\u03bd","\u03be","\u03bf","\u03c0","\u03c1","\u03c2","\u03c3","\u03c4","\u03c5","\u03c6","\u03c7","\u03c8","\u03c9"],z=["\ud835\udea8","\ud835\udea9","\ud835\udeaa","\ud835\udeab","\ud835\udeac","\ud835\udead","\ud835\udeae","\ud835\udeaf","\ud835\udeb0","\ud835\udeb1","\ud835\udeb2","\ud835\udeb3","\ud835\udeb4","\ud835\udeb5","\ud835\udeb6","\ud835\udeb7","\ud835\udeb8","\ud835\udeba","\ud835\udebb","\ud835\udebc","\ud835\udebd","\ud835\udebe","\ud835\udebf","\ud835\udec0"],$=["\ud835\udec2","\ud835\udec3","\ud835\udec4","\ud835\udec5","\ud835\udec6","\ud835\udec7","\ud835\udec8","\ud835\udec9","\ud835\udeca","\ud835\udecb","\ud835\udecc","\ud835\udecd","\ud835\udece","\ud835\udecf","\ud835\uded0","\ud835\uded1","\ud835\uded2","\ud835\uded3","\ud835\uded4","\ud835\uded5","\ud835\uded6","\ud835\uded7","\ud835\uded8","\ud835\uded9","\ud835\udeda"],J=["\ud835\udee2","\ud835\udee3","\ud835\udee4","\ud835\udee5","\ud835\udee6","\ud835\udee7","\ud835\udee8","\ud835\udee9","\ud835\udeea","\ud835\udeeb","\ud835\udeec","\ud835\udeed","\ud835\udeee","\ud835\udeef","\ud835\udef0","\ud835\udef1","\ud835\udef2","\ud835\udef4","\ud835\udef5","\ud835\udef6","\ud835\udef7","\ud835\udef8","\ud835\udef9","\ud835\udefa"],K=["\ud835\udefc","\ud835\udefd","\ud835\udefe","\ud835\udeff","\ud835\udf00","\ud835\udf01","\ud835\udf02","\ud835\udf03","\ud835\udf04","\ud835\udf05","\ud835\udf06","\ud835\udf07","\ud835\udf08","\ud835\udf09","\ud835\udf0a","\ud835\udf0b","\ud835\udf0c","\ud835\udf0d","\ud835\udf0e","\ud835\udf0f","\ud835\udf10","\ud835\udf11","\ud835\udf12","\ud835\udf13","\ud835\udf14"],Y=["\ud835\udf1c","\ud835\udf1d","\ud835\udf1e","\ud835\udf1f","\ud835\udf20","\ud835\udf21","\ud835\udf22","\ud835\udf23","\ud835\udf24","\ud835\udf25","\ud835\udf26","\ud835\udf27","\ud835\udf28","\ud835\udf29","\ud835\udf2a","\ud835\udf2b","\ud835\udf2c","\ud835\udf2e","\ud835\udf2f","\ud835\udf30","\ud835\udf31","\ud835\udf32","\ud835\udf33","\ud835\udf34"],Z=["\ud835\udf36","\ud835\udf37","\ud835\udf38","\ud835\udf39","\ud835\udf3a","\ud835\udf3b","\ud835\udf3c","\ud835\udf3d","\ud835\udf3e","\ud835\udf3f","\ud835\udf40","\ud835\udf41","\ud835\udf42","\ud835\udf43","\ud835\udf44","\ud835\udf45","\ud835\udf46","\ud835\udf47","\ud835\udf48","\ud835\udf49","\ud835\udf4a","\ud835\udf4b","\ud835\udf4c","\ud835\udf4d","\ud835\udf4e"],Q=["\ud835\udf56","\ud835\udf57","\ud835\udf58","\ud835\udf59","\ud835\udf5a","\ud835\udf5b","\ud835\udf5c","\ud835\udf5d","\ud835\udf5e","\ud835\udf5f","\ud835\udf60","\ud835\udf61","\ud835\udf62","\ud835\udf63","\ud835\udf64","\ud835\udf65","\ud835\udf66","\ud835\udf68","\ud835\udf69","\ud835\udf6a","\ud835\udf6b","\ud835\udf6c","\ud835\udf6d","\ud835\udf6e"],tt=["\ud835\udf70","\ud835\udf71","\ud835\udf72","\ud835\udf73","\ud835\udf74","\ud835\udf75","\ud835\udf76","\ud835\udf77","\ud835\udf78","\ud835\udf79","\ud835\udf7a","\ud835\udf7b","\ud835\udf7c","\ud835\udf7d","\ud835\udf7e","\ud835\udf7f","\ud835\udf80","\ud835\udf81","\ud835\udf82","\ud835\udf83","\ud835\udf84","\ud835\udf85","\ud835\udf86","\ud835\udf87","\ud835\udf88"],et=["\ud835\udf90","\ud835\udf91","\ud835\udf92","\ud835\udf93","\ud835\udf94","\ud835\udf95","\ud835\udf96","\ud835\udf97","\ud835\udf98","\ud835\udf99","\ud835\udf9a","\ud835\udf9b","\ud835\udf9c","\ud835\udf9d","\ud835\udf9e","\ud835\udf9f","\ud835\udfa0","\ud835\udfa2","\ud835\udfa3","\ud835\udfa4","\ud835\udfa5","\ud835\udfa6","\ud835\udfa7","\ud835\udfa8"],rt=["\ud835\udfaa","\ud835\udfab","\ud835\udfac","\ud835\udfad","\ud835\udfae","\ud835\udfaf","\ud835\udfb0","\ud835\udfb1","\ud835\udfb2","\ud835\udfb3","\ud835\udfb4","\ud835\udfb5","\ud835\udfb6","\ud835\udfb7","\ud835\udfb8","\ud835\udfb9","\ud835\udfba","\ud835\udfbb","\ud835\udfbc","\ud835\udfbd","\ud835\udfbe","\ud835\udfbf","\ud835\udfc0","\ud835\udfc1","\ud835\udfc2"],nt=["\u213c","\u213d","\u213e","\u213f"],ot=["\u03d0","\u03d1","\u03d5","\u03d6","\u03d7","\u03f0","\u03f1","\u03f5","\u03f6","\u03f4"],it=["\ud835\udedc","\ud835\udedd","\ud835\udede","\ud835\udedf","\ud835\udee0","\ud835\udee1"],at=["\ud835\udf16","\ud835\udf17","\ud835\udf18","\ud835\udf19","\ud835\udf1a","\ud835\udf1b"],st=["\ud835\udf8a","\ud835\udf8b","\ud835\udf8c","\ud835\udf8d","\ud835\udf8e","\ud835\udf8f"],lt=["\u2135","\u2136","\u2137","\u2138"],ct=f.concat(m,y,g,b,v,_,x,M,S,O,E,A,C,w,T,N,L,P,I,k,R,j,B,D,F,H,q,U,G,V,X,W,z,$,J,K,Y,Z,Q,tt,nt,ot,et,rt,it,at,st,lt);e.allLettersRegExp=new RegExp(ct.join("|"));const ut=["+","\xb1","\u2213","\u2214","\u2227","\u2228","\u2229","\u222a","\u228c","\u228d","\u228e","\u2293","\u2294","\u229d","\u229e","\u22a4","\u22a5","\u22ba","\u22bb","\u22bc","\u22c4","\u22ce","\u22cf","\u22d2","\u22d3","\u2a5e","\u2295","\u22d4"],pt=String.fromCodePoint(8292);ut.push(pt);const ht=["\u2020","\u2021","\u2210","\u2217","\u2218","\u2219","\u2240","\u229a","\u229b","\u22a0","\u22a1","\u22c5","\u22c6","\u22c7","\u22c8","\u22c9","\u22ca","\u22cb","\u22cc","\u25cb","\xb7","*","\u2297","\u2299"],dt=String.fromCodePoint(8290);ht.push(dt);const ft=String.fromCodePoint(8289),mt=["\xbc","\xbd","\xbe","\u2150","\u2151","\u2152","\u2153","\u2154","\u2155","\u2156","\u2157","\u2158","\u2159","\u215a","\u215b","\u215c","\u215d","\u215e","\u215f","\u2189"],yt=["\xb2","\xb3","\xb9","\u2070","\u2074","\u2075","\u2076","\u2077","\u2078","\u2079"].concat(["\u2080","\u2081","\u2082","\u2083","\u2084","\u2085","\u2086","\u2087","\u2088","\u2089"],["\u2460","\u2461","\u2462","\u2463","\u2464","\u2465","\u2466","\u2467","\u2468","\u2469","\u246a","\u246b","\u246c","\u246d","\u246e","\u246f","\u2470","\u2471","\u2472","\u2473","\u24ea","\u24eb","\u24ec","\u24ed","\u24ee","\u24ef","\u24f0","\u24f1","\u24f2","\u24f3","\u24f4","\u24f5","\u24f6","\u24f7","\u24f8","\u24f9","\u24fa","\u24fb","\u24fc","\u24fd","\u24fe","\u24ff","\u2776","\u2777","\u2778","\u2779","\u277a","\u277b","\u277c","\u277d","\u277e","\u277f","\u2780","\u2781","\u2782","\u2783","\u2784","\u2785","\u2786","\u2787","\u2788","\u2789","\u278a","\u278b","\u278c","\u278d","\u278e","\u278f","\u2790","\u2791","\u2792","\u2793","\u3248","\u3249","\u324a","\u324b","\u324c","\u324d","\u324e","\u324f","\u3251","\u3252","\u3253","\u3254","\u3255","\u3256","\u3257","\u3258","\u3259","\u325a","\u325b","\u325c","\u325d","\u325e","\u325f","\u32b1","\u32b2","\u32b3","\u32b4","\u32b5","\u32b6","\u32b7","\u32b8","\u32b9","\u32ba","\u32bb","\u32bc","\u32bd","\u32be","\u32bf"],["\u2474","\u2475","\u2476","\u2477","\u2478","\u2479","\u247a","\u247b","\u247c","\u247d","\u247e","\u247f","\u2480","\u2481","\u2482","\u2483","\u2484","\u2485","\u2486","\u2487"],["\u2488","\u2489","\u248a","\u248b","\u248c","\u248d","\u248e","\u248f","\u2490","\u2491","\u2492","\u2493","\u2494","\u2495","\u2496","\u2497","\u2498","\u2499","\u249a","\u249b","\ud83c\udd00","\ud83c\udd01","\ud83c\udd02","\ud83c\udd03","\ud83c\udd04","\ud83c\udd05","\ud83c\udd06","\ud83c\udd07","\ud83c\udd08","\ud83c\udd09","\ud83c\udd0a"]),gt=["cos","cot","csc","sec","sin","tan","arccos","arccot","arccsc","arcsec","arcsin","arctan","arc cos","arc cot","arc csc","arc sec","arc sin","arc tan"].concat(["cosh","coth","csch","sech","sinh","tanh","arcosh","arcoth","arcsch","arsech","arsinh","artanh","arccosh","arccoth","arccsch","arcsech","arcsinh","arctanh"],["deg","det","dim","hom","ker","Tr","tr"],["log","ln","lg","exp","expt","gcd","gcd","arg","im","re","Pr"]),bt=[{set:["!",'"',"#","%","&",";","?","@","\\","\xa1","\xa7","\xb6","\xbf","\u2017","\u2020","\u2021","\u2022","\u2023","\u2024","\u2025","\u2027","\u2030","\u2031","\u2038","\u203b","\u203c","\u203d","\u203e","\u2041","\u2042","\u2043","\u2047","\u2048","\u2049","\u204b","\u204c","\u204d","\u204e","\u204f","\u2050","\u2051","\u2053","\u2055","\u2056","\u2058","\u2059","\u205a","\u205b","\u205c","\u205d","\u205e","\ufe10","\ufe14","\ufe15","\ufe16","\ufe30","\ufe45","\ufe46","\ufe49","\ufe4a","\ufe4b","\ufe4c","\ufe54","\ufe56","\ufe57","\ufe5f","\ufe60","\ufe61","\ufe68","\ufe6a","\ufe6b","\uff01","\uff02","\uff03","\uff05","\uff06","\uff07","\uff0a","\uff0f","\uff1b","\uff1f","\uff20","\uff3c"],type:"punctuation",role:"unknown"},{set:["\ufe13",":","\uff1a","\ufe55"],type:"punctuation",role:"colon"},{set:n,type:"punctuation",role:"comma"},{set:["\u2026","\u22ee","\u22ef","\u22f0","\u22f1","\ufe19"],type:"punctuation",role:"ellipsis"},{set:[".","\ufe52","\uff0e"],type:"punctuation",role:"fullstop"},{set:o,type:"operator",role:"dash"},{set:i,type:"operator",role:"tilde"},{set:["'","\u2032","\u2033","\u2034","\u2035","\u2036","\u2037","\u2057","\u02b9","\u02ba"],type:"punctuation",role:"prime"},{set:["\xb0"],type:"punctuation",role:"degree"},{set:l,type:"fence",role:"open"},{set:c,type:"fence",role:"close"},{set:u,type:"fence",role:"top"},{set:p,type:"fence",role:"bottom"},{set:h,type:"fence",role:"neutral"},{set:d,type:"fence",role:"metric"},{set:m,type:"identifier",role:"latinletter",font:"normal"},{set:f,type:"identifier",role:"latinletter",font:"normal"},{set:g,type:"identifier",role:"latinletter",font:"normal"},{set:y,type:"identifier",role:"latinletter",font:"normal"},{set:v,type:"identifier",role:"latinletter",font:"bold"},{set:b,type:"identifier",role:"latinletter",font:"bold"},{set:S,type:"identifier",role:"latinletter",font:"italic"},{set:_,type:"identifier",role:"latinletter",font:"italic"},{set:M,type:"identifier",role:"latinletter",font:"bold-italic"},{set:x,type:"identifier",role:"latinletter",font:"bold-italic"},{set:E,type:"identifier",role:"latinletter",font:"script"},{set:O,type:"identifier",role:"latinletter",font:"script"},{set:C,type:"identifier",role:"latinletter",font:"bold-script"},{set:A,type:"identifier",role:"latinletter",font:"bold-script"},{set:T,type:"identifier",role:"latinletter",font:"fraktur"},{set:w,type:"identifier",role:"latinletter",font:"fraktur"},{set:L,type:"identifier",role:"latinletter",font:"double-struck"},{set:N,type:"identifier",role:"latinletter",font:"double-struck"},{set:I,type:"identifier",role:"latinletter",font:"bold-fraktur"},{set:P,type:"identifier",role:"latinletter",font:"bold-fraktur"},{set:R,type:"identifier",role:"latinletter",font:"sans-serif"},{set:k,type:"identifier",role:"latinletter",font:"sans-serif"},{set:B,type:"identifier",role:"latinletter",font:"sans-serif-bold"},{set:j,type:"identifier",role:"latinletter",font:"sans-serif-bold"},{set:F,type:"identifier",role:"latinletter",font:"sans-serif-italic"},{set:D,type:"identifier",role:"latinletter",font:"sans-serif-italic"},{set:q,type:"identifier",role:"latinletter",font:"sans-serif-bold-italic"},{set:H,type:"identifier",role:"latinletter",font:"sans-serif-bold-italic"},{set:G,type:"identifier",role:"latinletter",font:"monospace"},{set:U,type:"identifier",role:"latinletter",font:"monospace"},{set:V,type:"identifier",role:"latinletter",font:"double-struck-italic"},{set:W,type:"identifier",role:"greekletter",font:"normal"},{set:X,type:"identifier",role:"greekletter",font:"normal"},{set:$,type:"identifier",role:"greekletter",font:"bold"},{set:z,type:"identifier",role:"greekletter",font:"bold"},{set:K,type:"identifier",role:"greekletter",font:"italic"},{set:J,type:"identifier",role:"greekletter",font:"italic"},{set:Z,type:"identifier",role:"greekletter",font:"bold-italic"},{set:Y,type:"identifier",role:"greekletter",font:"bold-italic"},{set:tt,type:"identifier",role:"greekletter",font:"sans-serif-bold"},{set:Q,type:"identifier",role:"greekletter",font:"sans-serif-bold"},{set:et,type:"identifier",role:"greekletter",font:"sans-serif-bold-italic"},{set:rt,type:"identifier",role:"greekletter",font:"sans-serif-bold-italic"},{set:nt,type:"identifier",role:"greekletter",font:"double-struck"},{set:ot,type:"identifier",role:"greekletter",font:"normal"},{set:it,type:"identifier",role:"greekletter",font:"bold"},{set:at,type:"identifier",role:"greekletter",font:"italic"},{set:st,type:"identifier",role:"greekletter",font:"sans-serif-bold"},{set:lt,type:"identifier",role:"otherletter",font:"normal"},{set:["0","1","2","3","4","5","6","7","8","9"],type:"number",role:"integer",font:"normal"},{set:["\uff10","\uff11","\uff12","\uff13","\uff14","\uff15","\uff16","\uff17","\uff18","\uff19"],type:"number",role:"integer",font:"normal"},{set:["\ud835\udfce","\ud835\udfcf","\ud835\udfd0","\ud835\udfd1","\ud835\udfd2","\ud835\udfd3","\ud835\udfd4","\ud835\udfd5","\ud835\udfd6","\ud835\udfd7"],type:"number",role:"integer",font:"bold"},{set:["\ud835\udfd8","\ud835\udfd9","\ud835\udfda","\ud835\udfdb","\ud835\udfdc","\ud835\udfdd","\ud835\udfde","\ud835\udfdf","\ud835\udfe0","\ud835\udfe1"],type:"number",role:"integer",font:"double-struck"},{set:["\ud835\udfe2","\ud835\udfe3","\ud835\udfe4","\ud835\udfe5","\ud835\udfe6","\ud835\udfe7","\ud835\udfe8","\ud835\udfe9","\ud835\udfea","\ud835\udfeb"],type:"number",role:"integer",font:"sans-serif"},{set:["\ud835\udfec","\ud835\udfed","\ud835\udfee","\ud835\udfef","\ud835\udff0","\ud835\udff1","\ud835\udff2","\ud835\udff3","\ud835\udff4","\ud835\udff5"],type:"number",role:"integer",font:"sans-serif-bold"},{set:["\ud835\udff6","\ud835\udff7","\ud835\udff8","\ud835\udff9","\ud835\udffa","\ud835\udffb","\ud835\udffc","\ud835\udffd","\ud835\udffe","\ud835\udfff"],type:"number",role:"integer",font:"monospace"},{set:mt,type:"number",role:"float"},{set:yt,type:"number",role:"othernumber"},{set:ut,type:"operator",role:"addition"},{set:ht,type:"operator",role:"multiplication"},{set:["\xaf","-","\u2052","\u207b","\u208b","\u2212","\u2216","\u2238","\u2242","\u2296","\u229f","\u2796","\u2a29","\u2a2a","\u2a2b","\u2a2c","\u2a3a","\u2a41","\ufe63","\uff0d","\u2010","\u2011"],type:"operator",role:"subtraction"},{set:["/","\xf7","\u2044","\u2215","\u2298","\u27cc","\u29bc","\u2a38"],type:"operator",role:"division"},{set:["\u2200","\u2203","\u2206","\u2207","\u2202","\u2201","\u2204"],type:"operator",role:"prefix operator"},{set:["\ud835\udec1","\ud835\udedb","\ud835\udfca","\ud835\udfcb"],type:"operator",role:"prefix operator",font:"bold"},{set:["\ud835\udefb","\ud835\udf15"],type:"operator",role:"prefix operator",font:"italic"},{set:["\ud835\udf6f","\ud835\udf89"],type:"operator",role:"prefix operator",font:"sans-serif-bold"},{set:["=","~","\u207c","\u208c","\u223c","\u223d","\u2243","\u2245","\u2248","\u224a","\u224b","\u224c","\u224d","\u224e","\u2251","\u2252","\u2253","\u2254","\u2255","\u2256","\u2257","\u2258","\u2259","\u225a","\u225b","\u225c","\u225d","\u225e","\u225f","\u2261","\u2263","\u29e4","\u2a66","\u2a6e","\u2a6f","\u2a70","\u2a71","\u2a72","\u2a73","\u2a74","\u2a75","\u2a76","\u2a77","\u2a78","\u22d5","\u2a6d","\u2a6a","\u2a6b","\u2a6c","\ufe66","\uff1d","\u2a6c","\u229c","\u2237"],type:"relation",role:"equality"},{set:["<",">","\u2241","\u2242","\u2244","\u2246","\u2247","\u2249","\u224f","\u2250","\u2260","\u2262","\u2264","\u2265","\u2266","\u2267","\u2268","\u2269","\u226a","\u226b","\u226c","\u226d","\u226e","\u226f","\u2270","\u2271","\u2272","\u2273","\u2274","\u2275","\u2276","\u2277","\u2278","\u2279","\u227a","\u227b","\u227c","\u227d","\u227e","\u227f","\u2280","\u2281","\u22d6","\u22d7","\u22d8","\u22d9","\u22da","\u22db","\u22dc","\u22dd","\u22de","\u22df","\u22e0","\u22e1","\u22e6","\u22e7","\u22e8","\u22e9","\u2a79","\u2a7a","\u2a7b","\u2a7c","\u2a7d","\u2a7e","\u2a7f","\u2a80","\u2a81","\u2a82","\u2a83","\u2a84","\u2a85","\u2a86","\u2a87","\u2a88","\u2a89","\u2a8a","\u2a8b","\u2a8c","\u2a8d","\u2a8e","\u2a8f","\u2a90","\u2a91","\u2a92","\u2a93","\u2a94","\u2a95","\u2a96","\u2a97","\u2a98","\u2a99","\u2a9a","\u2a9b","\u2a9c","\u2a9d","\u2a9e","\u2a9f","\u2aa0","\u2aa1","\u2aa2","\u2aa3","\u2aa4","\u2aa5","\u2aa6","\u2aa7","\u2aa8","\u2aa9","\u2aaa","\u2aab","\u2aac","\u2aad","\u2aae","\u2aaf","\u2ab0","\u2ab1","\u2ab2","\u2ab3","\u2ab4","\u2ab5","\u2ab6","\u2ab7","\u2ab8","\u2ab9","\u2aba","\u2abb","\u2abc","\u2af7","\u2af8","\u2af9","\u2afa","\u29c0","\u29c1","\ufe64","\ufe65","\uff1c","\uff1e"],type:"relation",role:"inequality"},{set:["\u22e2","\u22e3","\u22e4","\u22e5","\u2282","\u2283","\u2284","\u2285","\u2286","\u2287","\u2288","\u2289","\u228a","\u228b","\u228f","\u2290","\u2291","\u2292","\u2abd","\u2abe","\u2abf","\u2ac0","\u2ac1","\u2ac2","\u2ac3","\u2ac4","\u2ac5","\u2ac6","\u2ac7","\u2ac8","\u2ac9","\u2aca","\u2acb","\u2acc","\u2acd","\u2ace","\u2acf","\u2ad0","\u2ad1","\u2ad2","\u2ad3","\u2ad4","\u2ad5","\u2ad6","\u2ad7","\u2ad8","\u22d0","\u22d1","\u22ea","\u22eb","\u22ec","\u22ed","\u22b2","\u22b3","\u22b4","\u22b5"],type:"relation",role:"set"},{set:["\u22a2","\u22a3","\u22a6","\u22a7","\u22a8","\u22a9","\u22aa","\u22ab","\u22ac","\u22ad","\u22ae","\u22af","\u2ade","\u2adf","\u2ae0","\u2ae1","\u2ae2","\u2ae3","\u2ae4","\u2ae5","\u2ae6","\u2ae7","\u2ae8","\u2ae9","\u2aea","\u2aeb","\u2aec","\u2aed"],type:"relation",role:"unknown"},{set:["\u2190","\u2191","\u2192","\u2193","\u2194","\u2195","\u2196","\u2197","\u2198","\u2199","\u219a","\u219b","\u219c","\u219d","\u219e","\u219f","\u21a0","\u21a1","\u21a2","\u21a3","\u21a4","\u21a5","\u21a6","\u21a7","\u21a8","\u21a9","\u21aa","\u21ab","\u21ac","\u21ad","\u21ae","\u21af","\u21b0","\u21b1","\u21b2","\u21b3","\u21b4","\u21b5","\u21b6","\u21b7","\u21b8","\u21b9","\u21ba","\u21bb","\u21c4","\u21c5","\u21c6","\u21c7","\u21c8","\u21c9","\u21ca","\u21cd","\u21ce","\u21cf","\u21d0","\u21d1","\u21d2","\u21d3","\u21d4","\u21d5","\u21d6","\u21d7","\u21d8","\u21d9","\u21da","\u21db","\u21dc","\u21dd","\u21de","\u21df","\u21e0","\u21e1","\u21e2","\u21e3","\u21e4","\u21e5","\u21e6","\u21e7","\u21e8","\u21e9","\u21ea","\u21eb","\u21ec","\u21ed","\u21ee","\u21ef","\u21f0","\u21f1","\u21f2","\u21f3","\u21f4","\u21f5","\u21f6","\u21f7","\u21f8","\u21f9","\u21fa","\u21fb","\u21fc","\u21fd","\u21fe","\u21ff","\u2301","\u2303","\u2304","\u2324","\u238b","\u2794","\u2798","\u2799","\u279a","\u279b","\u279c","\u279d","\u279e","\u279f","\u27a0","\u27a1","\u27a2","\u27a3","\u27a4","\u27a5","\u27a6","\u27a7","\u27a8","\u27a9","\u27aa","\u27ab","\u27ac","\u27ad","\u27ae","\u27af","\u27b1","\u27b2","\u27b3","\u27b4","\u27b5","\u27b6","\u27b7","\u27b8","\u27b9","\u27ba","\u27bb","\u27bc","\u27bd","\u27be","\u27f0","\u27f1","\u27f2","\u27f3","\u27f4","\u27f5","\u27f6","\u27f7","\u27f8","\u27f9","\u27fa","\u27fb","\u27fc","\u27fd","\u27fe","\u27ff","\u2900","\u2901","\u2902","\u2903","\u2904","\u2905","\u2906","\u2907","\u2908","\u2909","\u290a","\u290b","\u290c","\u290d","\u290e","\u290f","\u2910","\u2911","\u2912","\u2913","\u2914","\u2915","\u2916","\u2917","\u2918","\u2919","\u291a","\u291b","\u291c","\u291d","\u291e","\u291f","\u2920","\u2921","\u2922","\u2923","\u2924","\u2925","\u2926","\u2927","\u2928","\u2929","\u292a","\u292d","\u292e","\u292f","\u2930","\u2931","\u2932","\u2933","\u2934","\u2935","\u2936","\u2937","\u2938","\u2939","\u293a","\u293b","\u293c","\u293d","\u293e","\u293f","\u2940","\u2941","\u2942","\u2943","\u2944","\u2945","\u2946","\u2947","\u2948","\u2949","\u2970","\u2971","\u2972","\u2973","\u2974","\u2975","\u2976","\u2977","\u2978","\u2979","\u297a","\u297b","\u29b3","\u29b4","\u29bd","\u29ea","\u29ec","\u29ed","\u2a17","\u2b00","\u2b01","\u2b02","\u2b03","\u2b04","\u2b05","\u2b06","\u2b07","\u2b08","\u2b09","\u2b0a","\u2b0b","\u2b0c","\u2b0d","\u2b0e","\u2b0f","\u2b10","\u2b11","\u2b30","\u2b31","\u2b32","\u2b33","\u2b34","\u2b35","\u2b36","\u2b37","\u2b38","\u2b39","\u2b3a","\u2b3b","\u2b3c","\u2b3d","\u2b3e","\u2b3f","\u2b40","\u2b41","\u2b42","\u2b43","\u2b44","\u2b45","\u2b46","\u2b47","\u2b48","\u2b49","\u2b4a","\u2b4b","\u2b4c","\uffe9","\uffea","\uffeb","\uffec","\u21bc","\u21bd","\u21be","\u21bf","\u21c0","\u21c1","\u21c2","\u21c3","\u21cb","\u21cc","\u294a","\u294b","\u294c","\u294d","\u294e","\u294f","\u2950","\u2951","\u2952","\u2953","\u2954","\u2955","\u2956","\u2957","\u2958","\u2959","\u295a","\u295b","\u295c","\u295d","\u295e","\u295f","\u2960","\u2961","\u2962","\u2963","\u2964","\u2965","\u2966","\u2967","\u2968","\u2969","\u296a","\u296b","\u296c","\u296d","\u296e","\u296f","\u297c","\u297d","\u297e","\u297f"],type:"relation",role:"arrow"},{set:["\u2208","\u220a","\u22f2","\u22f3","\u22f4","\u22f5","\u22f6","\u22f7","\u22f8","\u22f9","\u22ff"],type:"operator",role:"element"},{set:["\u2209"],type:"operator",role:"nonelement"},{set:["\u220b","\u220d","\u22fa","\u22fb","\u22fc","\u22fd","\u22fe"],type:"operator",role:"reelement"},{set:["\u220c"],type:"operator",role:"renonelement"},{set:["\u2140","\u220f","\u2210","\u2211","\u22c0","\u22c1","\u22c2","\u22c3","\u2a00","\u2a01","\u2a02","\u2a03","\u2a04","\u2a05","\u2a06","\u2a07","\u2a08","\u2a09","\u2a0a","\u2a0b","\u2afc","\u2aff"],type:"largeop",role:"sum"},{set:["\u222b","\u222c","\u222d","\u222e","\u222f","\u2230","\u2231","\u2232","\u2233","\u2a0c","\u2a0d","\u2a0e","\u2a0f","\u2a10","\u2a11","\u2a12","\u2a13","\u2a14","\u2a15","\u2a16","\u2a17","\u2a18","\u2a19","\u2a1a","\u2a1b","\u2a1c"],type:"largeop",role:"integral"},{set:["\u221f","\u2220","\u2221","\u2222","\u22be","\u22bf","\u25b3","\u25b7","\u25bd","\u25c1"],type:"operator",role:"geometry"},{set:["inf","lim","liminf","limsup","max","min","sup","injlim","projlim","inj lim","proj lim"],type:"function",role:"limit function"},{set:gt,type:"function",role:"prefix function"},{set:["mod","rem"],type:"operator",role:"prefix function"}],vt=function(){const t={};for(let e,r=0;e=bt[r];r++)e.set.forEach((function(r){t[r]={role:e.role||"unknown",type:e.type||"unknown",font:e.font||"unknown"}}));return t}();e.equal=function(t,e){return t.type===e.type&&t.role===e.role&&t.font===e.font},e.lookupType=function(t){var e;return(null===(e=vt[t])||void 0===e?void 0:e.type)||"unknown"},e.lookupRole=function(t){var e;return(null===(e=vt[t])||void 0===e?void 0:e.role)||"unknown"},e.lookupMeaning=function(t){return vt[t]||{role:"unknown",type:"unknown",font:"unknown"}},e.invisibleTimes=function(){return dt},e.invisiblePlus=function(){return pt},e.invisibleComma=function(){return r},e.functionApplication=function(){return ft},e.isMatchingFence=function(t,e){return-1!==h.indexOf(t)||-1!==d.indexOf(t)?t===e:a[t]===e||s[t]===e},e.isEmbellishedType=function(t){return"operator"===t||"relation"===t||"fence"===t||"punctuation"===t};const _t=new Map;function St(t,e){return`${t} ${e}`}function xt(t,e,r=""){for(const n of e)_t.set(St(t,n),r||t)}xt("d",["d","\u2146","\uff44","\ud835\udc1d","\ud835\udc51","\ud835\udcb9","\ud835\udced","\ud835\udd21","\ud835\udd55","\ud835\udd89","\ud835\uddbd","\ud835\uddf1","\ud835\ude25","\ud835\ude8d"]),xt("bar",o),xt("tilde",i),e.lookupSecondary=function(t,e){return _t.get(St(t,e))}},8158:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.SemanticMeaningCollator=e.SemanticNodeCollator=e.SemanticDefault=void 0;const n=r(3588),o=r(3882);class i{constructor(){this.map={}}static key(t,e){return e?t+":"+e:t}add(t,e){this.map[i.key(t,e.font)]=e}addNode(t){this.add(t.textContent,t.meaning())}retrieve(t,e){return this.map[i.key(t,e)]}retrieveNode(t){return this.retrieve(t.textContent,t.font)}size(){return Object.keys(this.map).length}}e.SemanticDefault=i;class a{constructor(){this.map={}}add(t,e){const r=this.map[t];r?r.push(e):this.map[t]=[e]}retrieve(t,e){return this.map[i.key(t,e)]}retrieveNode(t){return this.retrieve(t.textContent,t.font)}copy(){const t=this.copyCollator();for(const e in this.map)t.map[e]=this.map[e];return t}minimize(){for(const t in this.map)1===this.map[t].length&&delete this.map[t]}minimalCollator(){const t=this.copy();for(const e in t.map)1===t.map[e].length&&delete t.map[e];return t}isMultiValued(){for(const t in this.map)if(this.map[t].length>1)return!0;return!1}isEmpty(){return!Object.keys(this.map).length}}class s extends a{copyCollator(){return new s}add(t,e){const r=i.key(t,e.font);super.add(r,e)}addNode(t){this.add(t.textContent,t)}toString(){const t=[];for(const e in this.map){const r=Array(e.length+3).join(" "),n=this.map[e],o=[];for(let t,e=0;t=n[e];e++)o.push(t.toString());t.push(e+": "+o.join("\n"+r))}return t.join("\n")}collateMeaning(){const t=new l;for(const e in this.map)t.map[e]=this.map[e].map((function(t){return t.meaning()}));return t}}e.SemanticNodeCollator=s;class l extends a{copyCollator(){return new l}add(t,e){const r=this.retrieve(t,e.font);if(!r||!r.find((function(t){return n.equal(t,e)}))){const r=i.key(t,e.font);super.add(r,e)}}addNode(t){this.add(t.textContent,t.meaning())}toString(){const t=[];for(const e in this.map){const r=Array(e.length+3).join(" "),n=this.map[e],o=[];for(let t,e=0;t=n[e];e++)o.push("{type: "+t.type+", role: "+t.role+", font: "+t.font+"}");t.push(e+": "+o.join("\n"+r))}return t.join("\n")}reduce(){for(const t in this.map)1!==this.map[t].length&&(this.map[t]=(0,o.reduce)(this.map[t]))}default(){const t=new i;for(const e in this.map)1===this.map[e].length&&(t.map[e]=this.map[e][0]);return t}newDefault(){const t=this.default();this.reduce();const e=this.default();return t.size()!==e.size()?e:null}}e.SemanticMeaningCollator=l},9911:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.SemanticMultiHeuristic=e.SemanticTreeHeuristic=e.SemanticAbstractHeuristic=void 0;class r{constructor(t,e,r=(t=>!1)){this.name=t,this.apply=e,this.applicable=r}}e.SemanticAbstractHeuristic=r;e.SemanticTreeHeuristic=class extends r{};e.SemanticMultiHeuristic=class extends r{}},7516:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.lookup=e.run=e.add=e.blacklist=e.flags=e.updateFactory=e.factory=void 0,e.factory=null,e.updateFactory=function(t){e.factory=t};const r=new Map;function n(t){return r.get(t)}e.flags={combine_juxtaposition:!0,convert_juxtaposition:!0,multioperator:!0},e.blacklist={},e.add=function(t){const n=t.name;r.set(n,t),e.flags[n]||(e.flags[n]=!1)},e.run=function(t,r,o){const i=n(t);return i&&!e.blacklist[t]&&(e.flags[t]||i.applicable(r))?i.apply(r):o?o(r):r},e.lookup=n},94:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0});const n=r(2057),o=r(5897),i=r(3588),a=r(7516),s=r(9911),l=r(5609),c=r(3308),u=r(4795);function p(t,e,r){let n=null;if(!t.length)return n;const o=r[r.length-1],i=o&&o.length,a=e&&e.length,s=c.default.getInstance();if(i&&a){if("infixop"===e[0].type&&"implicit"===e[0].role)return n=t.pop(),o.push(s.postfixNode_(o.pop(),t)),n;n=t.shift();const r=s.prefixNode_(e.shift(),t);return e.unshift(r),n}return i?(o.push(s.postfixNode_(o.pop(),t)),n):(a&&e.unshift(s.prefixNode_(e.shift(),t)),n)}function h(t,e,r){if(!e.length)return t;const o=t.pop(),i=e.shift(),s=r.shift();if(l.isImplicitOp(i)){n.Debugger.getInstance().output("Juxta Heuristic Case 2");const a=(o?[o,i]:[i]).concat(s);return h(t.concat(a),e,r)}if(!o)return n.Debugger.getInstance().output("Juxta Heuristic Case 3"),h([i].concat(s),e,r);const c=s.shift();if(!c){n.Debugger.getInstance().output("Juxta Heuristic Case 9");const s=a.factory.makeBranchNode("infixop",[o,e.shift()],[i],i.textContent);return s.role="implicit",a.run("combine_juxtaposition",s),e.unshift(s),h(t,e,r)}if(l.isOperator(o)||l.isOperator(c))return n.Debugger.getInstance().output("Juxta Heuristic Case 4"),h(t.concat([o,i,c]).concat(s),e,r);let u=null;return l.isImplicitOp(o)&&l.isImplicitOp(c)?(n.Debugger.getInstance().output("Juxta Heuristic Case 5"),o.contentNodes.push(i),o.contentNodes=o.contentNodes.concat(c.contentNodes),o.childNodes.push(c),o.childNodes=o.childNodes.concat(c.childNodes),c.childNodes.forEach((t=>t.parent=o)),i.parent=o,o.addMathmlNodes(i.mathml),o.addMathmlNodes(c.mathml),u=o):l.isImplicitOp(o)?(n.Debugger.getInstance().output("Juxta Heuristic Case 6"),o.contentNodes.push(i),o.childNodes.push(c),c.parent=o,i.parent=o,o.addMathmlNodes(i.mathml),o.addMathmlNodes(c.mathml),u=o):l.isImplicitOp(c)?(n.Debugger.getInstance().output("Juxta Heuristic Case 7"),c.contentNodes.unshift(i),c.childNodes.unshift(o),o.parent=c,i.parent=c,c.addMathmlNodes(i.mathml),c.addMathmlNodes(o.mathml),u=c):(n.Debugger.getInstance().output("Juxta Heuristic Case 8"),u=a.factory.makeBranchNode("infixop",[o,c],[i],i.textContent),u.role="implicit"),t.push(u),h(t.concat(s),e,r)}a.add(new s.SemanticTreeHeuristic("combine_juxtaposition",(function(t){for(let e,r=t.childNodes.length-1;e=t.childNodes[r];r--)l.isImplicitOp(e)&&!e.nobreaking&&(t.childNodes.splice(r,1,...e.childNodes),t.contentNodes.splice(r,0,...e.contentNodes),e.childNodes.concat(e.contentNodes).forEach((function(e){e.parent=t})),t.addMathmlNodes(e.mathml));return t}))),a.add(new s.SemanticTreeHeuristic("propagateSimpleFunction",(t=>("infixop"!==t.type&&"fraction"!==t.type||!t.childNodes.every(l.isSimpleFunction)||(t.role="composed function"),t)),(t=>"clearspeak"===o.default.getInstance().domain))),a.add(new s.SemanticTreeHeuristic("simpleNamedFunction",(t=>("unit"!==t.role&&-1!==["f","g","h","F","G","H"].indexOf(t.textContent)&&(t.role="simple function"),t)),(t=>"clearspeak"===o.default.getInstance().domain))),a.add(new s.SemanticTreeHeuristic("propagateComposedFunction",(t=>("fenced"===t.type&&"composed function"===t.childNodes[0].role&&(t.role="composed function"),t)),(t=>"clearspeak"===o.default.getInstance().domain))),a.add(new s.SemanticTreeHeuristic("multioperator",(t=>{if("unknown"!==t.role||t.textContent.length<=1)return;const e=[...t.textContent].map(i.lookupMeaning).reduce((function(t,e){return t&&e.role&&"unknown"!==e.role&&e.role!==t?"unknown"===t?e.role:null:t}),"unknown");e&&(t.role=e)}))),a.add(new s.SemanticMultiHeuristic("convert_juxtaposition",(t=>{let e=u.partitionNodes(t,(function(t){return t.textContent===i.invisibleTimes()&&"operator"===t.type}));e=e.rel.length?function(t){const e=[],r=[];let n=t.comp.shift(),o=null,i=[];for(;t.comp.length;)if(i=[],n.length)o&&e.push(o),r.push(n),o=t.rel.shift(),n=t.comp.shift();else{for(o&&i.push(o);!n.length&&t.comp.length;)n=t.comp.shift(),i.push(t.rel.shift());o=p(i,n,r)}i.length||n.length?(e.push(o),r.push(n)):(i.push(o),p(i,n,r));return{rel:e,comp:r}}(e):e,t=e.comp[0];for(let r,n,o=1;r=e.comp[o],n=e.rel[o-1];o++)t.push(n),t=t.concat(r);return e=u.partitionNodes(t,(function(t){return t.textContent===i.invisibleTimes()&&("operator"===t.type||"infixop"===t.type)})),e.rel.length?h(e.comp.shift(),e.rel,e.comp):t}))),a.add(new s.SemanticTreeHeuristic("simple2prefix",(t=>(t.textContent.length>1&&!t.textContent[0].match(/[A-Z]/)&&(t.role="prefix function"),t)),(t=>"braille"===o.default.getInstance().modality&&"identifier"===t.type))),a.add(new s.SemanticTreeHeuristic("detect_cycle",(t=>{t.type="matrix",t.role="cycle";const e=t.childNodes[0];return e.type="row",e.role="cycle",e.textContent="",e.contentNodes=[],t}),(t=>"fenced"===t.type&&"infixop"===t.childNodes[0].type&&"implicit"===t.childNodes[0].role&&t.childNodes[0].childNodes.every((function(t){return"number"===t.type}))&&t.childNodes[0].contentNodes.every((function(t){return"space"===t.role})))))},7228:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.SemanticMathml=void 0;const n=r(5740),o=r(5250),i=r(5609),a=r(3308),s=r(4795);class l extends o.SemanticAbstractParser{constructor(){super("MathML"),this.parseMap_={SEMANTICS:this.semantics_.bind(this),MATH:this.rows_.bind(this),MROW:this.rows_.bind(this),MPADDED:this.rows_.bind(this),MSTYLE:this.rows_.bind(this),MFRAC:this.fraction_.bind(this),MSUB:this.limits_.bind(this),MSUP:this.limits_.bind(this),MSUBSUP:this.limits_.bind(this),MOVER:this.limits_.bind(this),MUNDER:this.limits_.bind(this),MUNDEROVER:this.limits_.bind(this),MROOT:this.root_.bind(this),MSQRT:this.sqrt_.bind(this),MTABLE:this.table_.bind(this),MLABELEDTR:this.tableLabeledRow_.bind(this),MTR:this.tableRow_.bind(this),MTD:this.tableCell_.bind(this),MS:this.text_.bind(this),MTEXT:this.text_.bind(this),MSPACE:this.space_.bind(this),"ANNOTATION-XML":this.text_.bind(this),MI:this.identifier_.bind(this),MN:this.number_.bind(this),MO:this.operator_.bind(this),MFENCED:this.fenced_.bind(this),MENCLOSE:this.enclosed_.bind(this),MMULTISCRIPTS:this.multiscripts_.bind(this),ANNOTATION:this.empty_.bind(this),NONE:this.empty_.bind(this),MACTION:this.action_.bind(this)};const t={type:"identifier",role:"numbersetletter",font:"double-struck"};["C","H","N","P","Q","R","Z","\u2102","\u210d","\u2115","\u2119","\u211a","\u211d","\u2124"].forEach((e=>this.getFactory().defaultMap.add(e,t)).bind(this))}static getAttribute_(t,e,r){if(!t.hasAttribute(e))return r;const n=t.getAttribute(e);return n.match(/^\s*$/)?null:n}parse(t){a.default.getInstance().setNodeFactory(this.getFactory());const e=n.toArray(t.childNodes),r=n.tagName(t),o=this.parseMap_[r],i=(o||this.dummy_.bind(this))(t,e);return s.addAttributes(i,t),-1!==["MATH","MROW","MPADDED","MSTYLE","SEMANTICS"].indexOf(r)||(i.mathml.unshift(t),i.mathmlTree=t),i}semantics_(t,e){return e.length?this.parse(e[0]):this.getFactory().makeEmptyNode()}rows_(t,e){const r=t.getAttribute("semantics");if(r&&r.match("bspr_"))return a.default.proof(t,r,this.parseList.bind(this));let n;return 1===(e=s.purgeNodes(e)).length?(n=this.parse(e[0]),"empty"!==n.type||n.mathmlTree||(n.mathmlTree=t)):n=a.default.getInstance().row(this.parseList(e)),n.mathml.unshift(t),n}fraction_(t,e){if(!e.length)return this.getFactory().makeEmptyNode();const r=this.parse(e[0]),n=e[1]?this.parse(e[1]):this.getFactory().makeEmptyNode();return a.default.getInstance().fractionLikeNode(r,n,t.getAttribute("linethickness"),"true"===t.getAttribute("bevelled"))}limits_(t,e){return a.default.getInstance().limitNode(n.tagName(t),this.parseList(e))}root_(t,e){return e[1]?this.getFactory().makeBranchNode("root",[this.parse(e[1]),this.parse(e[0])],[]):this.sqrt_(t,e)}sqrt_(t,e){const r=this.parseList(s.purgeNodes(e));return this.getFactory().makeBranchNode("sqrt",[a.default.getInstance().row(r)],[])}table_(t,e){const r=t.getAttribute("semantics");if(r&&r.match("bspr_"))return a.default.proof(t,r,this.parseList.bind(this));const n=this.getFactory().makeBranchNode("table",this.parseList(e),[]);return n.mathmlTree=t,a.default.tableToMultiline(n),n}tableRow_(t,e){const r=this.getFactory().makeBranchNode("row",this.parseList(e),[]);return r.role="table",r}tableLabeledRow_(t,e){if(!e.length)return this.tableRow_(t,e);const r=this.parse(e[0]);r.role="label";const n=this.getFactory().makeBranchNode("row",this.parseList(e.slice(1)),[r]);return n.role="table",n}tableCell_(t,e){const r=this.parseList(s.purgeNodes(e));let n;n=r.length?1===r.length&&i.isType(r[0],"empty")?r:[a.default.getInstance().row(r)]:[];const o=this.getFactory().makeBranchNode("cell",n,[]);return o.role="table",o}space_(t,e){const r=t.getAttribute("width"),o=r&&r.match(/[a-z]*$/);if(!o)return this.empty_(t,e);const i=o[0],s=parseFloat(r.slice(0,o.index)),l={cm:.4,pc:.5,em:.5,ex:1,in:.15,pt:5,mm:5}[i];if(!l||isNaN(s)||s1?this.parse(e[1]):this.getFactory().makeUnprocessed(t)}dummy_(t,e){const r=this.getFactory().makeUnprocessed(t);return r.role=t.tagName,r.textContent=t.textContent,r}leaf_(t,e){if(1===e.length&&e[0].nodeType!==n.NodeType.TEXT_NODE){const r=this.getFactory().makeUnprocessed(t);return r.role=e[0].tagName,s.addAttributes(r,e[0]),r}return this.getFactory().makeLeafNode(t.textContent,a.default.getInstance().font(t.getAttribute("mathvariant")))}}e.SemanticMathml=l},5952:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.SemanticNode=void 0;const n=r(5740),o=r(3588),i=r(4795);class a{constructor(t){this.id=t,this.mathml=[],this.parent=null,this.type="unknown",this.role="unknown",this.font="unknown",this.embellished=null,this.fencePointer="",this.childNodes=[],this.textContent="",this.mathmlTree=null,this.contentNodes=[],this.annotation={},this.attributes={},this.nobreaking=!1}static fromXml(t){const e=parseInt(t.getAttribute("id"),10),r=new a(e);return r.type=t.tagName,a.setAttribute(r,t,"role"),a.setAttribute(r,t,"font"),a.setAttribute(r,t,"embellished"),a.setAttribute(r,t,"fencepointer","fencePointer"),t.getAttribute("annotation")&&r.parseAnnotation(t.getAttribute("annotation")),i.addAttributes(r,t),a.processChildren(r,t),r}static setAttribute(t,e,r,n){n=n||r;const o=e.getAttribute(r);o&&(t[n]=o)}static processChildren(t,e){for(const r of n.toArray(e.childNodes)){if(r.nodeType===n.NodeType.TEXT_NODE){t.textContent=r.textContent;continue}const e=n.toArray(r.childNodes).map(a.fromXml);e.forEach((e=>e.parent=t)),"CONTENT"===n.tagName(r)?t.contentNodes=e:t.childNodes=e}}querySelectorAll(t){let e=[];for(let r,n=0;r=this.childNodes[n];n++)e=e.concat(r.querySelectorAll(t));for(let r,n=0;r=this.contentNodes[n];n++)e=e.concat(r.querySelectorAll(t));return t(this)&&e.unshift(this),e}xml(t,e){const r=function(r,n){const o=n.map((function(r){return r.xml(t,e)})),i=t.createElementNS("",r);for(let t,e=0;t=o[e];e++)i.appendChild(t);return i},n=t.createElementNS("",this.type);return e||this.xmlAttributes(n),n.textContent=this.textContent,this.contentNodes.length>0&&n.appendChild(r("content",this.contentNodes)),this.childNodes.length>0&&n.appendChild(r("children",this.childNodes)),n}toString(t=!1){const e=n.parseInput("");return n.serializeXml(this.xml(e,t))}allAttributes(){const t=[];return t.push(["role",this.role]),"unknown"!==this.font&&t.push(["font",this.font]),Object.keys(this.annotation).length&&t.push(["annotation",this.xmlAnnotation()]),this.embellished&&t.push(["embellished",this.embellished]),this.fencePointer&&t.push(["fencepointer",this.fencePointer]),t.push(["id",this.id.toString()]),t}xmlAnnotation(){const t=[];for(const e in this.annotation)this.annotation[e].forEach((function(r){t.push(e+":"+r)}));return t.join(";")}toJson(){const t={};t.type=this.type;const e=this.allAttributes();for(let r,n=0;r=e[n];n++)t[r[0]]=r[1].toString();return this.textContent&&(t.$t=this.textContent),this.childNodes.length&&(t.children=this.childNodes.map((function(t){return t.toJson()}))),this.contentNodes.length&&(t.content=this.contentNodes.map((function(t){return t.toJson()}))),t}updateContent(t,e){const r=e?t.replace(/^[ \f\n\r\t\v\u200b]*/,"").replace(/[ \f\n\r\t\v\u200b]*$/,""):t.trim();if(t=t&&!r?t:r,this.textContent===t)return;const n=(0,o.lookupMeaning)(t);this.textContent=t,this.role=n.role,this.type=n.type,this.font=n.font}addMathmlNodes(t){for(let e,r=0;e=t[r];r++)-1===this.mathml.indexOf(e)&&this.mathml.push(e)}appendChild(t){this.childNodes.push(t),this.addMathmlNodes(t.mathml),t.parent=this}replaceChild(t,e){const r=this.childNodes.indexOf(t);if(-1===r)return;t.parent=null,e.parent=this,this.childNodes[r]=e;const n=t.mathml.filter((function(t){return-1===e.mathml.indexOf(t)})),o=e.mathml.filter((function(e){return-1===t.mathml.indexOf(e)}));this.removeMathmlNodes(n),this.addMathmlNodes(o)}appendContentNode(t){t&&(this.contentNodes.push(t),this.addMathmlNodes(t.mathml),t.parent=this)}removeContentNode(t){if(t){const e=this.contentNodes.indexOf(t);-1!==e&&this.contentNodes.slice(e,1)}}equals(t){if(!t)return!1;if(this.type!==t.type||this.role!==t.role||this.textContent!==t.textContent||this.childNodes.length!==t.childNodes.length||this.contentNodes.length!==t.contentNodes.length)return!1;for(let e,r,n=0;e=this.childNodes[n],r=t.childNodes[n];n++)if(!e.equals(r))return!1;for(let e,r,n=0;e=this.contentNodes[n],r=t.contentNodes[n];n++)if(!e.equals(r))return!1;return!0}displayTree(){console.info(this.displayTree_(0))}addAnnotation(t,e){e&&this.addAnnotation_(t,e)}getAnnotation(t){const e=this.annotation[t];return e||[]}hasAnnotation(t,e){const r=this.annotation[t];return!!r&&-1!==r.indexOf(e)}parseAnnotation(t){const e=t.split(";");for(let t=0,r=e.length;t1)return!1;const r=e[0];if("infixop"===r.type){if("implicit"!==r.role)return!1;if(r.childNodes.some((t=>i(t,"infixop"))))return!1}return!0},e.isPrefixFunctionBoundary=function(t){return c(t)&&!s(t,"division")||i(t,"appl")||l(t)},e.isBigOpBoundary=function(t){return c(t)||l(t)},e.isIntegralDxBoundary=function(t,e){return!!e&&i(e,"identifier")&&n.lookupSecondary("d",t.textContent)},e.isIntegralDxBoundarySingle=function(t){if(i(t,"identifier")){const e=t.textContent[0];return e&&t.textContent[1]&&n.lookupSecondary("d",e)}return!1},e.isGeneralFunctionBoundary=l,e.isEmbellished=function(t){return t.embellished?t.embellished:n.isEmbellishedType(t.type)?t.type:null},e.isOperator=c,e.isRelation=u,e.isPunctuation=p,e.isFence=h,e.isElligibleEmbellishedFence=function(t){return!(!t||!h(t))&&(!t.embellished||d(t))},e.isTableOrMultiline=f,e.tableIsMatrixOrVector=function(t){return!!t&&m(t)&&f(t.childNodes[0])},e.isFencedElement=m,e.tableIsCases=function(t,e){return e.length>0&&s(e[e.length-1],"openfence")},e.tableIsMultiline=function(t){return t.childNodes.every((function(t){return t.childNodes.length<=1}))},e.lineIsLabelled=function(t){return i(t,"line")&&t.contentNodes.length&&s(t.contentNodes[0],"label")},e.isBinomial=function(t){return 2===t.childNodes.length},e.isLimitBase=function t(e){return i(e,"largeop")||i(e,"limboth")||i(e,"limlower")||i(e,"limupper")||i(e,"function")&&s(e,"limit function")||(i(e,"overscore")||i(e,"underscore"))&&t(e.childNodes[0])},e.isSimpleFunctionHead=function(t){return"identifier"===t.type||"latinletter"===t.role||"greekletter"===t.role||"otherletter"===t.role},e.singlePunctAtPosition=function(t,e,r){return 1===e.length&&("punctuation"===t[r].type||"punctuation"===t[r].embellished)&&t[r]===e[0]},e.isSimpleFunction=function(t){return i(t,"identifier")&&s(t,"simple function")},e.isLeftBrace=y,e.isRightBrace=g,e.isSetNode=function(t){return y(t.contentNodes[0])&&g(t.contentNodes[1])},e.illegalSingleton_=["punctuation","punctuated","relseq","multirel","table","multiline","cases","inference"],e.scriptedElement_=["limupper","limlower","limboth","subscript","superscript","underscore","overscore","tensor"],e.isSingletonSetContent=function t(r){const n=r.type;return-1===e.illegalSingleton_.indexOf(n)&&("infixop"!==n||"implicit"===r.role)&&("fenced"===n?"leftright"!==r.role||t(r.childNodes[0]):-1===e.scriptedElement_.indexOf(n)||t(r.childNodes[0]))},e.isNumber=b,e.isUnitCounter=function(t){return b(t)||"vulgar"===t.role||"mixed"===t.role},e.isPureUnit=function(t){const e=t.childNodes;return"unit"===t.role&&(!e.length||"unit"===e[0].role)},e.isImplicit=function(t){return"implicit"===t.role||"unit"===t.role&&!!t.contentNodes.length&&t.contentNodes[0].textContent===n.invisibleTimes()},e.isImplicitOp=function(t){return"infixop"===t.type&&"implicit"===t.role},e.isNeutralFence=v,e.compareNeutralFences=function(t,e){return v(t)&&v(e)&&(0,o.getEmbellishedInner)(t).textContent===(0,o.getEmbellishedInner)(e).textContent},e.elligibleLeftNeutral=function(t){return!!v(t)&&(!t.embellished||"superscript"!==t.type&&"subscript"!==t.type&&("tensor"!==t.type||"empty"===t.childNodes[3].type&&"empty"===t.childNodes[4].type))},e.elligibleRightNeutral=function(t){return!!v(t)&&(!t.embellished||("tensor"!==t.type||"empty"===t.childNodes[1].type&&"empty"===t.childNodes[2].type))},e.isMembership=function(t){return["element","nonelement","reelement","renonelement"].includes(t.role)}},3308:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0});const n=r(5740),o=r(3588),i=r(7516),a=r(6537),s=r(5609),l=r(4795);class c{constructor(){this.funcAppls={},this.factory_=new a.SemanticNodeFactory,i.updateFactory(this.factory_)}static getInstance(){return c.instance=c.instance||new c,c.instance}static tableToMultiline(t){if(s.tableIsMultiline(t)){t.type="multiline";for(let e,r=0;e=t.childNodes[r];r++)c.rowToLine_(e,"multiline");1===t.childNodes.length&&!s.lineIsLabelled(t.childNodes[0])&&s.isFencedElement(t.childNodes[0].childNodes[0])&&c.tableToMatrixOrVector_(c.rewriteFencedLine_(t)),c.binomialForm_(t),c.classifyMultiline(t)}else c.classifyTable(t)}static number(t){"unknown"!==t.type&&"identifier"!==t.type||(t.type="number"),c.numberRole_(t),c.exprFont_(t)}static classifyMultiline(t){let e=0;const r=t.childNodes.length;let n;for(;e=r)return;const o=n.childNodes[0].role;"unknown"!==o&&t.childNodes.every((function(t){const e=t.childNodes[0];return!e||e.role===o&&(s.isType(e,"relation")||s.isType(e,"relseq"))}))&&(t.role=o)}static classifyTable(t){const e=c.computeColumns_(t);c.classifyByColumns_(t,e,"equality")||c.classifyByColumns_(t,e,"inequality",["equality"])||c.classifyByColumns_(t,e,"arrow")||c.detectCaleyTable(t)}static detectCaleyTable(t){if(!t.mathmlTree)return!1;const e=t.mathmlTree,r=e.getAttribute("columnlines"),n=e.getAttribute("rowlines");return!(!r||!n)&&(!(!c.cayleySpacing(r)||!c.cayleySpacing(n))&&(t.role="cayley",!0))}static cayleySpacing(t){const e=t.split(" ");return("solid"===e[0]||"dashed"===e[0])&&e.slice(1).every((t=>"none"===t))}static proof(t,e,r){const n=c.separateSemantics(e);return c.getInstance().proof(t,n,r)}static findSemantics(t,e,r){const n=null==r?null:r,o=c.getSemantics(t);return!!o&&(!!o[e]&&(null==n||o[e]===n))}static getSemantics(t){const e=t.getAttribute("semantics");return e?c.separateSemantics(e):null}static removePrefix(t){const[,...e]=t.split("_");return e.join("_")}static separateSemantics(t){const e={};return t.split(";").forEach((function(t){const[r,n]=t.split(":");e[c.removePrefix(r)]=n})),e}static matchSpaces_(t,e){for(let r,n=0;r=e[n];n++){const e=t[n].mathmlTree,o=t[n+1].mathmlTree;if(!e||!o)continue;const i=e.nextSibling;if(!i||i===o)continue;const a=c.getSpacer_(i);a&&(r.mathml.push(a),r.mathmlTree=a,r.role="space")}}static getSpacer_(t){if("MSPACE"===n.tagName(t))return t;for(;l.hasEmptyTag(t)&&1===t.childNodes.length;)if(t=t.childNodes[0],"MSPACE"===n.tagName(t))return t;return null}static fenceToPunct_(t){const e=c.FENCE_TO_PUNCT_[t.role];if(e){for(;t.embellished;)t.embellished="punctuation",s.isRole(t,"subsup")||s.isRole(t,"underover")||(t.role=e),t=t.childNodes[0];t.type="punctuation",t.role=e}}static classifyFunction_(t,e){if("appl"===t.type||"bigop"===t.type||"integral"===t.type)return"";if(e[0]&&e[0].textContent===o.functionApplication()){c.getInstance().funcAppls[t.id]=e.shift();let r="simple function";return i.run("simple2prefix",t),"prefix function"!==t.role&&"limit function"!==t.role||(r=t.role),c.propagateFunctionRole_(t,r),"prefix"}const r=c.CLASSIFY_FUNCTION_[t.role];return r||(s.isSimpleFunctionHead(t)?"simple":"")}static propagateFunctionRole_(t,e){if(t){if("infixop"===t.type)return;s.isRole(t,"subsup")||s.isRole(t,"underover")||(t.role=e),c.propagateFunctionRole_(t.childNodes[0],e)}}static getFunctionOp_(t,e){if(e(t))return t;for(let r,n=0;r=t.childNodes[n];n++){const t=c.getFunctionOp_(r,e);if(t)return t}return null}static tableToMatrixOrVector_(t){const e=t.childNodes[0];s.isType(e,"multiline")?c.tableToVector_(t):c.tableToMatrix_(t),t.contentNodes.forEach(e.appendContentNode.bind(e));for(let t,r=0;t=e.childNodes[r];r++)c.assignRoleToRow_(t,c.getComponentRoles_(e));return e.parent=null,e}static tableToVector_(t){const e=t.childNodes[0];e.type="vector",1!==e.childNodes.length?c.binomialForm_(e):c.tableToSquare_(t)}static binomialForm_(t){s.isBinomial(t)&&(t.role="binomial",t.childNodes[0].role="binomial",t.childNodes[1].role="binomial")}static tableToMatrix_(t){const e=t.childNodes[0];e.type="matrix",e.childNodes&&e.childNodes.length>0&&e.childNodes[0].childNodes&&e.childNodes.length===e.childNodes[0].childNodes.length?c.tableToSquare_(t):e.childNodes&&1===e.childNodes.length&&(e.role="rowvector")}static tableToSquare_(t){const e=t.childNodes[0];s.isNeutralFence(t)?e.role="determinant":e.role="squarematrix"}static getComponentRoles_(t){const e=t.role;return e&&"unknown"!==e?e:t.type.toLowerCase()||"unknown"}static tableToCases_(t,e){for(let e,r=0;e=t.childNodes[r];r++)c.assignRoleToRow_(e,"cases");return t.type="cases",t.appendContentNode(e),s.tableIsMultiline(t)&&c.binomialForm_(t),t}static rewriteFencedLine_(t){const e=t.childNodes[0],r=t.childNodes[0].childNodes[0],n=t.childNodes[0].childNodes[0].childNodes[0];return r.parent=t.parent,t.parent=r,n.parent=e,r.childNodes=[t],e.childNodes=[n],r}static rowToLine_(t,e){const r=e||"unknown";s.isType(t,"row")&&(t.type="line",t.role=r,1===t.childNodes.length&&s.isType(t.childNodes[0],"cell")&&(t.childNodes=t.childNodes[0].childNodes,t.childNodes.forEach((function(e){e.parent=t}))))}static assignRoleToRow_(t,e){s.isType(t,"line")?t.role=e:s.isType(t,"row")&&(t.role=e,t.childNodes.forEach((function(t){s.isType(t,"cell")&&(t.role=e)})))}static nextSeparatorFunction_(t){let e;if(t){if(t.match(/^\s+$/))return null;e=t.replace(/\s/g,"").split("").filter((function(t){return t}))}else e=[","];return function(){return e.length>1?e.shift():e[0]}}static numberRole_(t){if("unknown"!==t.role)return;const e=[...t.textContent].filter((t=>t.match(/[^\s]/))),r=e.map(o.lookupMeaning);if(r.every((function(t){return"number"===t.type&&"integer"===t.role||"punctuation"===t.type&&"comma"===t.role})))return t.role="integer",void("0"===e[0]&&t.addAnnotation("general","basenumber"));r.every((function(t){return"number"===t.type&&"integer"===t.role||"punctuation"===t.type}))?t.role="float":t.role="othernumber"}static exprFont_(t){if("unknown"!==t.font)return;const e=[...t.textContent].map(o.lookupMeaning).reduce((function(t,e){return t&&e.font&&"unknown"!==e.font&&e.font!==t?"unknown"===t?e.font:null:t}),"unknown");e&&(t.font=e)}static purgeFences_(t){const e=t.rel,r=t.comp,n=[],o=[];for(;e.length>0;){const t=e.shift();let i=r.shift();s.isElligibleEmbellishedFence(t)?(n.push(t),o.push(i)):(c.fenceToPunct_(t),i.push(t),i=i.concat(r.shift()),r.unshift(i))}return o.push(r.shift()),{rel:n,comp:o}}static rewriteFencedNode_(t){const e=t.contentNodes[0],r=t.contentNodes[1];let n=c.rewriteFence_(t,e);return t.contentNodes[0]=n.fence,n=c.rewriteFence_(n.node,r),t.contentNodes[1]=n.fence,t.contentNodes[0].parent=t,t.contentNodes[1].parent=t,n.node.parent=null,n.node}static rewriteFence_(t,e){if(!e.embellished)return{node:t,fence:e};const r=e.childNodes[0],n=c.rewriteFence_(t,r);return s.isType(e,"superscript")||s.isType(e,"subscript")||s.isType(e,"tensor")?(s.isRole(e,"subsup")||(e.role=t.role),r!==n.node&&(e.replaceChild(r,n.node),r.parent=t),c.propagateFencePointer_(e,r),{node:e,fence:n.fence}):(e.replaceChild(r,n.fence),e.mathmlTree&&-1===e.mathml.indexOf(e.mathmlTree)&&e.mathml.push(e.mathmlTree),{node:n.node,fence:e})}static propagateFencePointer_(t,e){t.fencePointer=e.fencePointer||e.id.toString(),t.embellished=null}static classifyByColumns_(t,e,r,n){return!!(3===e.length&&c.testColumns_(e,1,(t=>c.isPureRelation_(t,r)))||2===e.length&&(c.testColumns_(e,1,(t=>c.isEndRelation_(t,r)||c.isPureRelation_(t,r)))||c.testColumns_(e,0,(t=>c.isEndRelation_(t,r,!0)||c.isPureRelation_(t,r)))))&&(t.role=r,!0)}static isEndRelation_(t,e,r){const n=r?t.childNodes.length-1:0;return s.isType(t,"relseq")&&s.isRole(t,e)&&s.isType(t.childNodes[n],"empty")}static isPureRelation_(t,e){return s.isType(t,"relation")&&s.isRole(t,e)}static computeColumns_(t){const e=[];for(let r,n=0;r=t.childNodes[n];n++)for(let t,n=0;t=r.childNodes[n];n++){e[n]?e[n].push(t):e[n]=[t]}return e}static testColumns_(t,e,r){const n=t[e];return!!n&&(n.some((function(t){return t.childNodes.length&&r(t.childNodes[0])}))&&n.every((function(t){return!t.childNodes.length||r(t.childNodes[0])})))}setNodeFactory(t){c.getInstance().factory_=t,i.updateFactory(c.getInstance().factory_)}getNodeFactory(){return c.getInstance().factory_}identifierNode(t,e,r){if("MathML-Unit"===r)t.type="identifier",t.role="unit";else if(!e&&1===t.textContent.length&&("integer"===t.role||"latinletter"===t.role||"greekletter"===t.role)&&"normal"===t.font)return t.font="italic",i.run("simpleNamedFunction",t);return"unknown"===t.type&&(t.type="identifier"),c.exprFont_(t),i.run("simpleNamedFunction",t)}implicitNode(t){if(t=c.getInstance().getMixedNumbers_(t),1===(t=c.getInstance().combineUnits_(t)).length)return t[0];const e=c.getInstance().implicitNode_(t);return i.run("combine_juxtaposition",e)}text(t,e){return c.exprFont_(t),t.type="text","MS"===e?(t.role="string",t):"MSPACE"===e||t.textContent.match(/^\s*$/)?(t.role="space",t):t}row(t){return 0===(t=t.filter((function(t){return!s.isType(t,"empty")}))).length?c.getInstance().factory_.makeEmptyNode():(t=c.getInstance().getFencesInRow_(t),t=c.getInstance().tablesInRow(t),t=c.getInstance().getPunctuationInRow_(t),t=c.getInstance().getTextInRow_(t),t=c.getInstance().getFunctionsInRow_(t),c.getInstance().relationsInRow_(t))}limitNode(t,e){if(!e.length)return c.getInstance().factory_.makeEmptyNode();let r,n=e[0],o="unknown";if(!e[1])return n;if(s.isLimitBase(n)){r=c.MML_TO_LIMIT_[t];const i=r.length;if(o=r.type,e=e.slice(0,r.length+1),1===i&&s.isAccent(e[1])||2===i&&s.isAccent(e[1])&&s.isAccent(e[2]))return r=c.MML_TO_BOUNDS_[t],c.getInstance().accentNode_(n,e,r.type,r.length,r.accent);if(2===i){if(s.isAccent(e[1]))return n=c.getInstance().accentNode_(n,[n,e[1]],{MSUBSUP:"subscript",MUNDEROVER:"underscore"}[t],1,!0),e[2]?c.getInstance().makeLimitNode_(n,[n,e[2]],null,"limupper"):n;if(e[2]&&s.isAccent(e[2]))return n=c.getInstance().accentNode_(n,[n,e[2]],{MSUBSUP:"superscript",MUNDEROVER:"overscore"}[t],1,!0),c.getInstance().makeLimitNode_(n,[n,e[1]],null,"limlower");e[i]||(o="limlower")}return c.getInstance().makeLimitNode_(n,e,null,o)}return r=c.MML_TO_BOUNDS_[t],c.getInstance().accentNode_(n,e,r.type,r.length,r.accent)}tablesInRow(t){let e=l.partitionNodes(t,s.tableIsMatrixOrVector),r=[];for(let t,n=0;t=e.rel[n];n++)r=r.concat(e.comp.shift()),r.push(c.tableToMatrixOrVector_(t));r=r.concat(e.comp.shift()),e=l.partitionNodes(r,s.isTableOrMultiline),r=[];for(let t,n=0;t=e.rel[n];n++){const n=e.comp.shift();s.tableIsCases(t,n)&&c.tableToCases_(t,n.pop()),r=r.concat(n),r.push(t)}return r.concat(e.comp.shift())}mfenced(t,e,r,n){if(r&&n.length>0){const t=c.nextSeparatorFunction_(r),e=[n.shift()];n.forEach((r=>{e.push(c.getInstance().factory_.makeContentNode(t())),e.push(r)})),n=e}return t&&e?c.getInstance().horizontalFencedNode_(c.getInstance().factory_.makeContentNode(t),c.getInstance().factory_.makeContentNode(e),n):(t&&n.unshift(c.getInstance().factory_.makeContentNode(t)),e&&n.push(c.getInstance().factory_.makeContentNode(e)),c.getInstance().row(n))}fractionLikeNode(t,e,r,n){let o;if(!n&&l.isZeroLength(r)){const r=c.getInstance().factory_.makeBranchNode("line",[t],[]),n=c.getInstance().factory_.makeBranchNode("line",[e],[]);return o=c.getInstance().factory_.makeBranchNode("multiline",[r,n],[]),c.binomialForm_(o),c.classifyMultiline(o),o}return o=c.getInstance().fractionNode_(t,e),n&&o.addAnnotation("general","bevelled"),o}tensor(t,e,r,n,o){const i=c.getInstance().factory_.makeBranchNode("tensor",[t,c.getInstance().scriptNode_(e,"leftsub"),c.getInstance().scriptNode_(r,"leftsuper"),c.getInstance().scriptNode_(n,"rightsub"),c.getInstance().scriptNode_(o,"rightsuper")],[]);return i.role=t.role,i.embellished=s.isEmbellished(t),i}pseudoTensor(t,e,r){const n=t=>!s.isType(t,"empty"),o=e.filter(n).length,i=r.filter(n).length;if(!o&&!i)return t;const a=o?i?"MSUBSUP":"MSUB":"MSUP",l=[t];return o&&l.push(c.getInstance().scriptNode_(e,"rightsub",!0)),i&&l.push(c.getInstance().scriptNode_(r,"rightsuper",!0)),c.getInstance().limitNode(a,l)}font(t){const e=c.MATHJAX_FONTS[t];return e||t}proof(t,e,r){if(e.inference||e.axiom||console.log("Noise"),e.axiom){const e=c.getInstance().cleanInference(t.childNodes),n=e.length?c.getInstance().factory_.makeBranchNode("inference",r(e),[]):c.getInstance().factory_.makeEmptyNode();return n.role="axiom",n.mathmlTree=t,n}const n=c.getInstance().inference(t,e,r);return e.proof&&(n.role="proof",n.childNodes[0].role="final"),n}inference(t,e,r){if(e.inferenceRule){const e=c.getInstance().getFormulas(t,[],r);return c.getInstance().factory_.makeBranchNode("inference",[e.conclusion,e.premises],[])}const o=e.labelledRule,i=n.toArray(t.childNodes),a=[];"left"!==o&&"both"!==o||a.push(c.getInstance().getLabel(t,i,r,"left")),"right"!==o&&"both"!==o||a.push(c.getInstance().getLabel(t,i,r,"right"));const s=c.getInstance().getFormulas(t,i,r),l=c.getInstance().factory_.makeBranchNode("inference",[s.conclusion,s.premises],a);return l.mathmlTree=t,l}getLabel(t,e,r,o){const i=c.getInstance().findNestedRow(e,"prooflabel",o),a=c.getInstance().factory_.makeBranchNode("rulelabel",r(n.toArray(i.childNodes)),[]);return a.role=o,a.mathmlTree=i,a}getFormulas(t,e,r){const o=e.length?c.getInstance().findNestedRow(e,"inferenceRule"):t,i="up"===c.getSemantics(o).inferenceRule,a=i?o.childNodes[1]:o.childNodes[0],s=i?o.childNodes[0]:o.childNodes[1],l=a.childNodes[0].childNodes[0],u=n.toArray(l.childNodes[0].childNodes),p=[];let h=1;for(const t of u)h%2&&p.push(t.childNodes[0]),h++;const d=r(p),f=r(n.toArray(s.childNodes[0].childNodes))[0],m=c.getInstance().factory_.makeBranchNode("premises",d,[]);m.mathmlTree=l;const y=c.getInstance().factory_.makeBranchNode("conclusion",[f],[]);return y.mathmlTree=s.childNodes[0].childNodes[0],{conclusion:y,premises:m}}findNestedRow(t,e,r){return c.getInstance().findNestedRow_(t,e,0,r)}cleanInference(t){return n.toArray(t).filter((function(t){return"MSPACE"!==n.tagName(t)}))}operatorNode(t){return"unknown"===t.type&&(t.type="operator"),i.run("multioperator",t)}implicitNode_(t){const e=c.getInstance().factory_.makeMultipleContentNodes(t.length-1,o.invisibleTimes());c.matchSpaces_(t,e);const r=c.getInstance().infixNode_(t,e[0]);return r.role="implicit",e.forEach((function(t){t.parent=r})),r.contentNodes=e,r}infixNode_(t,e){const r=c.getInstance().factory_.makeBranchNode("infixop",t,[e],l.getEmbellishedInner(e).textContent);return r.role=e.role,i.run("propagateSimpleFunction",r)}explicitMixed_(t){const e=l.partitionNodes(t,(function(t){return t.textContent===o.invisiblePlus()}));if(!e.rel.length)return t;let r=[];for(let t,n=0;t=e.rel[n];n++){const o=e.comp[n],i=e.comp[n+1],a=o.length-1;if(o[a]&&i[0]&&s.isType(o[a],"number")&&!s.isRole(o[a],"mixed")&&s.isType(i[0],"fraction")){const t=c.getInstance().factory_.makeBranchNode("number",[o[a],i[0]],[]);t.role="mixed",r=r.concat(o.slice(0,a)),r.push(t),i.shift()}else r=r.concat(o),r.push(t)}return r.concat(e.comp[e.comp.length-1])}concatNode_(t,e,r){if(0===e.length)return t;const n=e.map((function(t){return l.getEmbellishedInner(t).textContent})).join(" "),o=c.getInstance().factory_.makeBranchNode(r,[t],e,n);return e.length>1&&(o.role="multiop"),o}prefixNode_(t,e){const r=l.partitionNodes(e,(t=>s.isRole(t,"subtraction")));let n=c.getInstance().concatNode_(t,r.comp.pop(),"prefixop");for(1===n.contentNodes.length&&"addition"===n.contentNodes[0].role&&"+"===n.contentNodes[0].textContent&&(n.role="positive");r.rel.length>0;)n=c.getInstance().concatNode_(n,[r.rel.pop()],"prefixop"),n.role="negative",n=c.getInstance().concatNode_(n,r.comp.pop(),"prefixop");return n}postfixNode_(t,e){return e.length?c.getInstance().concatNode_(t,e,"postfixop"):t}combineUnits_(t){const e=l.partitionNodes(t,(function(t){return!s.isRole(t,"unit")}));if(t.length===e.rel.length)return e.rel;const r=[];let n,o;do{const t=e.comp.shift();n=e.rel.shift();let i=null;o=r.pop(),o&&(t.length&&s.isUnitCounter(o)?t.unshift(o):r.push(o)),1===t.length&&(i=t.pop()),t.length>1&&(i=c.getInstance().implicitNode_(t),i.role="unit"),i&&r.push(i),n&&r.push(n)}while(n);return r}getMixedNumbers_(t){const e=l.partitionNodes(t,(function(t){return s.isType(t,"fraction")&&s.isRole(t,"vulgar")}));if(!e.rel.length)return t;let r=[];for(let t,n=0;t=e.rel[n];n++){const o=e.comp[n],i=o.length-1;if(o[i]&&s.isType(o[i],"number")&&(s.isRole(o[i],"integer")||s.isRole(o[i],"float"))){const e=c.getInstance().factory_.makeBranchNode("number",[o[i],t],[]);e.role="mixed",r=r.concat(o.slice(0,i)),r.push(e)}else r=r.concat(o),r.push(t)}return r.concat(e.comp[e.comp.length-1])}getTextInRow_(t){if(t.length<=1)return t;const e=l.partitionNodes(t,(t=>s.isType(t,"text")));if(0===e.rel.length)return t;const r=[];let n=e.comp[0];n.length>0&&r.push(c.getInstance().row(n));for(let t,o=0;t=e.rel[o];o++)r.push(t),n=e.comp[o+1],n.length>0&&r.push(c.getInstance().row(n));return[c.getInstance().dummyNode_(r)]}relationsInRow_(t){const e=l.partitionNodes(t,s.isRelation),r=e.rel[0];if(!r)return c.getInstance().operationsInRow_(t);if(1===t.length)return t[0];const n=e.comp.map(c.getInstance().operationsInRow_);let o;return e.rel.some((function(t){return!t.equals(r)}))?(o=c.getInstance().factory_.makeBranchNode("multirel",n,e.rel),e.rel.every((function(t){return t.role===r.role}))&&(o.role=r.role),o):(o=c.getInstance().factory_.makeBranchNode("relseq",n,e.rel,l.getEmbellishedInner(r).textContent),o.role=r.role,o)}operationsInRow_(t){if(0===t.length)return c.getInstance().factory_.makeEmptyNode();if(1===(t=c.getInstance().explicitMixed_(t)).length)return t[0];const e=[];for(;t.length>0&&s.isOperator(t[0]);)e.push(t.shift());if(0===t.length)return c.getInstance().prefixNode_(e.pop(),e);if(1===t.length)return c.getInstance().prefixNode_(t[0],e);t=i.run("convert_juxtaposition",t);const r=l.sliceNodes(t,s.isOperator),n=c.getInstance().prefixNode_(c.getInstance().implicitNode(r.head),e);return r.div?c.getInstance().operationsTree_(r.tail,n,r.div):n}operationsTree_(t,e,r,n){const o=n||[];if(0===t.length){if(o.unshift(r),"infixop"===e.type){const t=c.getInstance().postfixNode_(e.childNodes.pop(),o);return e.appendChild(t),e}return c.getInstance().postfixNode_(e,o)}const i=l.sliceNodes(t,s.isOperator);if(0===i.head.length)return o.push(i.div),c.getInstance().operationsTree_(i.tail,e,r,o);const a=c.getInstance().prefixNode_(c.getInstance().implicitNode(i.head),o),u=c.getInstance().appendOperand_(e,r,a);return i.div?c.getInstance().operationsTree_(i.tail,u,i.div,[]):u}appendOperand_(t,e,r){if("infixop"!==t.type)return c.getInstance().infixNode_([t,r],e);const n=c.getInstance().appendDivisionOp_(t,e,r);return n||(c.getInstance().appendExistingOperator_(t,e,r)?t:"multiplication"===e.role?c.getInstance().appendMultiplicativeOp_(t,e,r):c.getInstance().appendAdditiveOp_(t,e,r))}appendDivisionOp_(t,e,r){return"division"===e.role?s.isImplicit(t)?c.getInstance().infixNode_([t,r],e):c.getInstance().appendLastOperand_(t,e,r):"division"===t.role?c.getInstance().infixNode_([t,r],e):null}appendLastOperand_(t,e,r){let n=t,o=t.childNodes[t.childNodes.length-1];for(;o&&"infixop"===o.type&&!s.isImplicit(o);)n=o,o=n.childNodes[t.childNodes.length-1];const i=c.getInstance().infixNode_([n.childNodes.pop(),r],e);return n.appendChild(i),t}appendMultiplicativeOp_(t,e,r){if(s.isImplicit(t))return c.getInstance().infixNode_([t,r],e);let n=t,o=t.childNodes[t.childNodes.length-1];for(;o&&"infixop"===o.type&&!s.isImplicit(o);)n=o,o=n.childNodes[t.childNodes.length-1];const i=c.getInstance().infixNode_([n.childNodes.pop(),r],e);return n.appendChild(i),t}appendAdditiveOp_(t,e,r){return c.getInstance().infixNode_([t,r],e)}appendExistingOperator_(t,e,r){return!(!t||"infixop"!==t.type||s.isImplicit(t))&&(t.contentNodes[0].equals(e)?(t.appendContentNode(e),t.appendChild(r),!0):c.getInstance().appendExistingOperator_(t.childNodes[t.childNodes.length-1],e,r))}getFencesInRow_(t){let e=l.partitionNodes(t,s.isFence);e=c.purgeFences_(e);const r=e.comp.shift();return c.getInstance().fences_(e.rel,e.comp,[],[r])}fences_(t,e,r,n){if(0===t.length&&0===r.length)return n[0];const o=t=>s.isRole(t,"open");if(0===t.length){const t=n.shift();for(;r.length>0;){if(o(r[0])){const e=r.shift();c.fenceToPunct_(e),t.push(e)}else{const e=l.sliceNodes(r,o),i=e.head.length-1,a=c.getInstance().neutralFences_(e.head,n.slice(0,i));n=n.slice(i),t.push(...a),e.div&&e.tail.unshift(e.div),r=e.tail}t.push(...n.shift())}return t}const i=r[r.length-1],a=t[0].role;if("open"===a||s.isNeutralFence(t[0])&&(!i||!s.compareNeutralFences(t[0],i))){r.push(t.shift());const o=e.shift();return o&&n.push(o),c.getInstance().fences_(t,e,r,n)}if(i&&"close"===a&&"open"===i.role){const o=c.getInstance().horizontalFencedNode_(r.pop(),t.shift(),n.pop());return n.push(n.pop().concat([o],e.shift())),c.getInstance().fences_(t,e,r,n)}if(i&&s.compareNeutralFences(t[0],i)){if(!s.elligibleLeftNeutral(i)||!s.elligibleRightNeutral(t[0])){r.push(t.shift());const o=e.shift();return o&&n.push(o),c.getInstance().fences_(t,e,r,n)}const o=c.getInstance().horizontalFencedNode_(r.pop(),t.shift(),n.pop());return n.push(n.pop().concat([o],e.shift())),c.getInstance().fences_(t,e,r,n)}if(i&&"close"===a&&s.isNeutralFence(i)&&r.some(o)){const i=l.sliceNodes(r,o,!0),a=n.pop(),s=n.length-i.tail.length+1,u=c.getInstance().neutralFences_(i.tail,n.slice(s));n=n.slice(0,s);const p=c.getInstance().horizontalFencedNode_(i.div,t.shift(),n.pop().concat(u,a));return n.push(n.pop().concat([p],e.shift())),c.getInstance().fences_(t,e,i.head,n)}const u=t.shift();return c.fenceToPunct_(u),n.push(n.pop().concat([u],e.shift())),c.getInstance().fences_(t,e,r,n)}neutralFences_(t,e){if(0===t.length)return t;if(1===t.length)return c.fenceToPunct_(t[0]),t;const r=t.shift();if(!s.elligibleLeftNeutral(r)){c.fenceToPunct_(r);const n=e.shift();return n.unshift(r),n.concat(c.getInstance().neutralFences_(t,e))}const n=l.sliceNodes(t,(function(t){return s.compareNeutralFences(t,r)}));if(!n.div){c.fenceToPunct_(r);const n=e.shift();return n.unshift(r),n.concat(c.getInstance().neutralFences_(t,e))}if(!s.elligibleRightNeutral(n.div))return c.fenceToPunct_(n.div),t.unshift(r),c.getInstance().neutralFences_(t,e);const o=c.getInstance().combineFencedContent_(r,n.div,n.head,e);if(n.tail.length>0){const t=o.shift(),e=c.getInstance().neutralFences_(n.tail,o);return t.concat(e)}return o[0]}combineFencedContent_(t,e,r,n){if(0===r.length){const r=c.getInstance().horizontalFencedNode_(t,e,n.shift());return n.length>0?n[0].unshift(r):n=[[r]],n}const o=n.shift(),i=r.length-1,a=n.slice(0,i),s=(n=n.slice(i)).shift(),l=c.getInstance().neutralFences_(r,a);o.push(...l),o.push(...s);const u=c.getInstance().horizontalFencedNode_(t,e,o);return n.length>0?n[0].unshift(u):n=[[u]],n}horizontalFencedNode_(t,e,r){const n=c.getInstance().row(r);let o=c.getInstance().factory_.makeBranchNode("fenced",[n],[t,e]);return"open"===t.role?(c.getInstance().classifyHorizontalFence_(o),o=i.run("propagateComposedFunction",o)):o.role=t.role,o=i.run("detect_cycle",o),c.rewriteFencedNode_(o)}classifyHorizontalFence_(t){t.role="leftright";const e=t.childNodes;if(!s.isSetNode(t)||e.length>1)return;if(0===e.length||"empty"===e[0].type)return void(t.role="set empty");const r=e[0].type;if(1===e.length&&s.isSingletonSetContent(e[0]))return void(t.role="set singleton");const n=e[0].role;if("punctuated"===r&&"sequence"===n){if("comma"!==e[0].contentNodes[0].role)return 1!==e[0].contentNodes.length||"vbar"!==e[0].contentNodes[0].role&&"colon"!==e[0].contentNodes[0].role?void 0:(t.role="set extended",void c.getInstance().setExtension_(t));t.role="set collection"}}setExtension_(t){const e=t.childNodes[0].childNodes[0];e&&"infixop"===e.type&&1===e.contentNodes.length&&s.isMembership(e.contentNodes[0])&&(e.addAnnotation("set","intensional"),e.contentNodes[0].addAnnotation("set","intensional"))}getPunctuationInRow_(t){if(t.length<=1)return t;const e=t=>{const e=t.type;return"punctuation"===e||"text"===e||"operator"===e||"relation"===e},r=l.partitionNodes(t,(function(r){if(!s.isPunctuation(r))return!1;if(s.isPunctuation(r)&&!s.isRole(r,"ellipsis"))return!0;const n=t.indexOf(r);if(0===n)return!t[1]||!e(t[1]);const o=t[n-1];if(n===t.length-1)return!e(o);const i=t[n+1];return!e(o)||!e(i)}));if(0===r.rel.length)return t;const n=[];let o=r.comp.shift();o.length>0&&n.push(c.getInstance().row(o));let i=0;for(;r.comp.length>0;)n.push(r.rel[i++]),o=r.comp.shift(),o.length>0&&n.push(c.getInstance().row(o));return[c.getInstance().punctuatedNode_(n,r.rel)]}punctuatedNode_(t,e){const r=c.getInstance().factory_.makeBranchNode("punctuated",t,e);if(e.length===t.length){const t=e[0].role;if("unknown"!==t&&e.every((function(e){return e.role===t})))return r.role=t,r}return s.singlePunctAtPosition(t,e,0)?r.role="startpunct":s.singlePunctAtPosition(t,e,t.length-1)?r.role="endpunct":e.every((t=>s.isRole(t,"dummy")))?r.role="text":e.every((t=>s.isRole(t,"space")))?r.role="space":r.role="sequence",r}dummyNode_(t){const e=c.getInstance().factory_.makeMultipleContentNodes(t.length-1,o.invisibleComma());return e.forEach((function(t){t.role="dummy"})),c.getInstance().punctuatedNode_(t,e)}accentRole_(t,e){if(!s.isAccent(t))return!1;const r=t.textContent,n=o.lookupSecondary("bar",r)||o.lookupSecondary("tilde",r)||t.role;return t.role="underscore"===e?"underaccent":"overaccent",t.addAnnotation("accent",n),!0}accentNode_(t,e,r,n,o){const i=(e=e.slice(0,n+1))[1],a=e[2];let s;if(!o&&a&&(s=c.getInstance().factory_.makeBranchNode("subscript",[t,i],[]),s.role="subsup",e=[s,a],r="superscript"),o){const n=c.getInstance().accentRole_(i,r);if(a){c.getInstance().accentRole_(a,"overscore")&&!n?(s=c.getInstance().factory_.makeBranchNode("overscore",[t,a],[]),e=[s,i],r="underscore"):(s=c.getInstance().factory_.makeBranchNode("underscore",[t,i],[]),e=[s,a],r="overscore"),s.role="underover"}}return c.getInstance().makeLimitNode_(t,e,s,r)}makeLimitNode_(t,e,r,n){if("limupper"===n&&"limlower"===t.type)return t.childNodes.push(e[1]),e[1].parent=t,t.type="limboth",t;if("limlower"===n&&"limupper"===t.type)return t.childNodes.splice(1,-1,e[1]),e[1].parent=t,t.type="limboth",t;const o=c.getInstance().factory_.makeBranchNode(n,e,[]),i=s.isEmbellished(t);return r&&(r.embellished=i),o.embellished=i,o.role=t.role,o}getFunctionsInRow_(t,e){const r=e||[];if(0===t.length)return r;const n=t.shift(),o=c.classifyFunction_(n,t);if(!o)return r.push(n),c.getInstance().getFunctionsInRow_(t,r);const i=c.getInstance().getFunctionsInRow_(t,[]),a=c.getInstance().getFunctionArgs_(n,i,o);return r.concat(a)}getFunctionArgs_(t,e,r){let n,o,i;switch(r){case"integral":{const r=c.getInstance().getIntegralArgs_(e);if(!r.intvar&&!r.integrand.length)return r.rest.unshift(t),r.rest;const n=c.getInstance().row(r.integrand);return i=c.getInstance().integralNode_(t,n,r.intvar),r.rest.unshift(i),r.rest}case"prefix":if(e[0]&&"fenced"===e[0].type){const r=e.shift();return s.isNeutralFence(r)||(r.role="leftright"),i=c.getInstance().functionNode_(t,r),e.unshift(i),e}if(n=l.sliceNodes(e,s.isPrefixFunctionBoundary),n.head.length)o=c.getInstance().row(n.head),n.div&&n.tail.unshift(n.div);else{if(!n.div||!s.isType(n.div,"appl"))return e.unshift(t),e;o=n.div}return i=c.getInstance().functionNode_(t,o),n.tail.unshift(i),n.tail;case"bigop":return n=l.sliceNodes(e,s.isBigOpBoundary),n.head.length?(o=c.getInstance().row(n.head),i=c.getInstance().bigOpNode_(t,o),n.div&&n.tail.unshift(n.div),n.tail.unshift(i),n.tail):(e.unshift(t),e);default:{if(0===e.length)return[t];const r=e[0];return"fenced"===r.type&&!s.isNeutralFence(r)&&s.isSimpleFunctionScope(r)?(r.role="leftright",c.propagateFunctionRole_(t,"simple function"),i=c.getInstance().functionNode_(t,e.shift()),e.unshift(i),e):(e.unshift(t),e)}}}getIntegralArgs_(t,e=[]){if(0===t.length)return{integrand:e,intvar:null,rest:t};const r=t[0];if(s.isGeneralFunctionBoundary(r))return{integrand:e,intvar:null,rest:t};if(s.isIntegralDxBoundarySingle(r))return r.role="integral",{integrand:e,intvar:r,rest:t.slice(1)};if(t[1]&&s.isIntegralDxBoundary(r,t[1])){const n=c.getInstance().prefixNode_(t[1],[r]);return n.role="integral",{integrand:e,intvar:n,rest:t.slice(2)}}return e.push(t.shift()),c.getInstance().getIntegralArgs_(t,e)}functionNode_(t,e){const r=c.getInstance().factory_.makeContentNode(o.functionApplication()),n=c.getInstance().funcAppls[t.id];n&&(r.mathmlTree=n.mathmlTree,r.mathml=n.mathml,r.annotation=n.annotation,r.attributes=n.attributes,delete c.getInstance().funcAppls[t.id]),r.type="punctuation",r.role="application";const i=c.getFunctionOp_(t,(function(t){return s.isType(t,"function")||s.isType(t,"identifier")&&s.isRole(t,"simple function")}));return c.getInstance().functionalNode_("appl",[t,e],i,[r])}bigOpNode_(t,e){const r=c.getFunctionOp_(t,(t=>s.isType(t,"largeop")));return c.getInstance().functionalNode_("bigop",[t,e],r,[])}integralNode_(t,e,r){e=e||c.getInstance().factory_.makeEmptyNode(),r=r||c.getInstance().factory_.makeEmptyNode();const n=c.getFunctionOp_(t,(t=>s.isType(t,"largeop")));return c.getInstance().functionalNode_("integral",[t,e,r],n,[])}functionalNode_(t,e,r,n){const o=e[0];let i;r&&(i=r.parent,n.push(r));const a=c.getInstance().factory_.makeBranchNode(t,e,n);return a.role=o.role,i&&(r.parent=i),a}fractionNode_(t,e){const r=c.getInstance().factory_.makeBranchNode("fraction",[t,e],[]);return r.role=r.childNodes.every((function(t){return s.isType(t,"number")&&s.isRole(t,"integer")}))?"vulgar":r.childNodes.every(s.isPureUnit)?"unit":"division",i.run("propagateSimpleFunction",r)}scriptNode_(t,e,r){let n;switch(t.length){case 0:n=c.getInstance().factory_.makeEmptyNode();break;case 1:if(n=t[0],r)return n;break;default:n=c.getInstance().dummyNode_(t)}return n.role=e,n}findNestedRow_(t,e,r,o){if(r>3)return null;for(let i,a=0;i=t[a];a++){const t=n.tagName(i);if("MSPACE"!==t){if("MROW"===t)return c.getInstance().findNestedRow_(n.toArray(i.childNodes),e,r+1,o);if(c.findSemantics(i,e,o))return i}}return null}}e.default=c,c.FENCE_TO_PUNCT_={metric:"metric",neutral:"vbar",open:"openfence",close:"closefence"},c.MML_TO_LIMIT_={MSUB:{type:"limlower",length:1},MUNDER:{type:"limlower",length:1},MSUP:{type:"limupper",length:1},MOVER:{type:"limupper",length:1},MSUBSUP:{type:"limboth",length:2},MUNDEROVER:{type:"limboth",length:2}},c.MML_TO_BOUNDS_={MSUB:{type:"subscript",length:1,accent:!1},MSUP:{type:"superscript",length:1,accent:!1},MSUBSUP:{type:"subscript",length:2,accent:!1},MUNDER:{type:"underscore",length:1,accent:!0},MOVER:{type:"overscore",length:1,accent:!0},MUNDEROVER:{type:"underscore",length:2,accent:!0}},c.CLASSIFY_FUNCTION_={integral:"integral",sum:"bigop","prefix function":"prefix","limit function":"prefix","simple function":"prefix","composed function":"prefix"},c.MATHJAX_FONTS={"-tex-caligraphic":"caligraphic","-tex-caligraphic-bold":"caligraphic-bold","-tex-calligraphic":"caligraphic","-tex-calligraphic-bold":"caligraphic-bold","-tex-oldstyle":"oldstyle","-tex-oldstyle-bold":"oldstyle-bold","-tex-mathit":"italic"}},5656:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.SemanticSkeleton=void 0;const n=r(707),o=r(5274),i=r(2298);class a{constructor(t){this.parents=null,this.levelsMap=null,t=0===t?t:t||[],this.array=t}static fromTree(t){return a.fromNode(t.root)}static fromNode(t){return new a(a.fromNode_(t))}static fromString(t){return new a(a.fromString_(t))}static simpleCollapseStructure(t){return"number"==typeof t}static contentCollapseStructure(t){return!!t&&!a.simpleCollapseStructure(t)&&"c"===t[0]}static interleaveIds(t,e){return n.interleaveLists(a.collapsedLeafs(t),a.collapsedLeafs(e))}static collapsedLeafs(...t){return t.reduce(((t,e)=>{return t.concat((r=e,a.simpleCollapseStructure(r)?[r]:(r=r,a.contentCollapseStructure(r[1])?r.slice(2):r.slice(1))));var r}),[])}static fromStructure(t,e){return new a(a.tree_(t,e.root))}static combineContentChildren(t,e,r){switch(t.type){case"relseq":case"infixop":case"multirel":return n.interleaveLists(r,e);case"prefixop":return e.concat(r);case"postfixop":return r.concat(e);case"fenced":return r.unshift(e[0]),r.push(e[1]),r;case"appl":return[r[0],e[0],r[1]];case"root":return[r[1],r[0]];case"row":case"line":return e.length&&r.unshift(e[0]),r;default:return r}}static makeSexp_(t){return a.simpleCollapseStructure(t)?t.toString():a.contentCollapseStructure(t)?"(c "+t.slice(1).map(a.makeSexp_).join(" ")+")":"("+t.map(a.makeSexp_).join(" ")+")"}static fromString_(t){let e=t.replace(/\(/g,"[");return e=e.replace(/\)/g,"]"),e=e.replace(/ /g,","),e=e.replace(/c/g,'"c"'),JSON.parse(e)}static fromNode_(t){if(!t)return[];const e=t.contentNodes;let r;e.length&&(r=e.map(a.fromNode_),r.unshift("c"));const n=t.childNodes;if(!n.length)return e.length?[t.id,r]:t.id;const o=n.map(a.fromNode_);return e.length&&o.unshift(r),o.unshift(t.id),o}static tree_(t,e){if(!e)return[];if(!e.childNodes.length)return e.id;const r=e.id,n=[r],s=o.evalXPath(`.//self::*[@${i.Attribute.ID}=${r}]`,t)[0],l=a.combineContentChildren(e,e.contentNodes.map((function(t){return t})),e.childNodes.map((function(t){return t})));s&&a.addOwns_(s,l);for(let e,r=0;e=l[r];r++)n.push(a.tree_(t,e));return n}static addOwns_(t,e){const r=t.getAttribute(i.Attribute.COLLAPSED),n=r?a.realLeafs_(a.fromString(r).array):e.map((t=>t.id));t.setAttribute(i.Attribute.OWNS,n.join(" "))}static realLeafs_(t){if(a.simpleCollapseStructure(t))return[t];if(a.contentCollapseStructure(t))return[];t=t;let e=[];for(let r=1;ra.simpleCollapseStructure(t)?t:a.contentCollapseStructure(t)?t[1]:t[0]))}subtreeNodes(t){if(!this.isRoot(t))return[];const e=(t,r)=>{a.simpleCollapseStructure(t)?r.push(t):(t=t,a.contentCollapseStructure(t)&&(t=t.slice(1)),t.forEach((t=>e(t,r))))},r=this.levelsMap[t],n=[];return e(r.slice(1),n),n}}e.SemanticSkeleton=a},7075:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.SemanticTree=void 0;const n=r(5740),o=r(7630),i=r(9265),a=r(7228),s=r(5952),l=r(5609);r(94);class c{constructor(t){this.mathml=t,this.parser=new a.SemanticMathml,this.root=this.parser.parse(t),this.collator=this.parser.getFactory().leafMap.collateMeaning();const e=this.collator.newDefault();e&&(this.parser=new a.SemanticMathml,this.parser.getFactory().defaultMap=e,this.root=this.parser.parse(t)),u.visit(this.root,{}),(0,o.annotate)(this.root)}static empty(){const t=n.parseInput(""),e=new c(t);return e.mathml=t,e}static fromNode(t,e){const r=c.empty();return r.root=t,e&&(r.mathml=e),r}static fromRoot(t,e){let r=t;for(;r.parent;)r=r.parent;const n=c.fromNode(r);return e&&(n.mathml=e),n}static fromXml(t){const e=c.empty();return t.childNodes[0]&&(e.root=s.SemanticNode.fromXml(t.childNodes[0])),e}xml(t){const e=n.parseInput(""),r=this.root.xml(e.ownerDocument,t);return e.appendChild(r),e}toString(t){return n.serializeXml(this.xml(t))}formatXml(t){const e=this.toString(t);return n.formatXml(e)}displayTree(){this.root.displayTree()}replaceNode(t,e){const r=t.parent;r?r.replaceChild(t,e):this.root=e}toJson(){const t={};return t.stree=this.root.toJson(),t}}e.SemanticTree=c;const u=new i.SemanticVisitor("general","unit",((t,e)=>{if("infixop"===t.type&&("multiplication"===t.role||"implicit"===t.role)){const e=t.childNodes;e.length&&(l.isPureUnit(e[0])||l.isUnitCounter(e[0]))&&t.childNodes.slice(1).every(l.isPureUnit)&&(t.role="unit")}return!1}))},4795:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.partitionNodes=e.sliceNodes=e.getEmbellishedInner=e.addAttributes=e.isZeroLength=e.purgeNodes=e.isOrphanedGlyph=e.hasDisplayTag=e.hasEmptyTag=e.hasIgnoreTag=e.hasLeafTag=e.hasMathTag=e.directSpeechKeys=e.DISPLAYTAGS=e.EMPTYTAGS=e.IGNORETAGS=e.LEAFTAGS=void 0;const n=r(5740);function o(t){return!!t&&-1!==e.LEAFTAGS.indexOf(n.tagName(t))}function i(t,e,r){r&&t.reverse();const n=[];for(let o,i=0;o=t[i];i++){if(e(o))return r?{head:t.slice(i+1).reverse(),div:o,tail:n.reverse()}:{head:n,div:o,tail:t.slice(i+1)};n.push(o)}return r?{head:[],div:null,tail:n.reverse()}:{head:n,div:null,tail:[]}}e.LEAFTAGS=["MO","MI","MN","MTEXT","MS","MSPACE"],e.IGNORETAGS=["MERROR","MPHANTOM","MALIGNGROUP","MALIGNMARK","MPRESCRIPTS","ANNOTATION","ANNOTATION-XML"],e.EMPTYTAGS=["MATH","MROW","MPADDED","MACTION","NONE","MSTYLE","SEMANTICS"],e.DISPLAYTAGS=["MROOT","MSQRT"],e.directSpeechKeys=["aria-label","exact-speech","alt"],e.hasMathTag=function(t){return!!t&&"MATH"===n.tagName(t)},e.hasLeafTag=o,e.hasIgnoreTag=function(t){return!!t&&-1!==e.IGNORETAGS.indexOf(n.tagName(t))},e.hasEmptyTag=function(t){return!!t&&-1!==e.EMPTYTAGS.indexOf(n.tagName(t))},e.hasDisplayTag=function(t){return!!t&&-1!==e.DISPLAYTAGS.indexOf(n.tagName(t))},e.isOrphanedGlyph=function(t){return!!t&&"MGLYPH"===n.tagName(t)&&!o(t.parentNode)},e.purgeNodes=function(t){const r=[];for(let o,i=0;o=t[i];i++){if(o.nodeType!==n.NodeType.ELEMENT_NODE)continue;const t=n.tagName(o);-1===e.IGNORETAGS.indexOf(t)&&(-1!==e.EMPTYTAGS.indexOf(t)&&0===o.childNodes.length||r.push(o))}return r},e.isZeroLength=function(t){if(!t)return!1;if(-1!==["negativeveryverythinmathspace","negativeverythinmathspace","negativethinmathspace","negativemediummathspace","negativethickmathspace","negativeverythickmathspace","negativeveryverythickmathspace"].indexOf(t))return!0;const e=t.match(/[0-9.]+/);return!!e&&0===parseFloat(e[0])},e.addAttributes=function(t,r){if(r.hasAttributes()){const n=r.attributes;for(let r=n.length-1;r>=0;r--){const o=n[r].name;o.match(/^ext/)&&(t.attributes[o]=n[r].value,t.nobreaking=!0),-1!==e.directSpeechKeys.indexOf(o)&&(t.attributes["ext-speech"]=n[r].value,t.nobreaking=!0),o.match(/texclass$/)&&(t.attributes.texclass=n[r].value),"href"===o&&(t.attributes.href=n[r].value,t.nobreaking=!0)}}},e.getEmbellishedInner=function t(e){return e&&e.embellished&&e.childNodes.length>0?t(e.childNodes[0]):e},e.sliceNodes=i,e.partitionNodes=function(t,e){let r=t;const n=[],o=[];let a=null;do{a=i(r,e),o.push(a.head),n.push(a.div),r=a.tail}while(a.div);return n.pop(),{rel:n,comp:o}}},6278:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractSpeechGenerator=void 0;const n=r(6828),o=r(2298),i=r(1214),a=r(9543);e.AbstractSpeechGenerator=class{constructor(){this.modality=o.addPrefix("speech"),this.rebuilt_=null,this.options_={}}getRebuilt(){return this.rebuilt_}setRebuilt(t){this.rebuilt_=t}setOptions(t){this.options_=t||{},this.modality=o.addPrefix(this.options_.modality||"speech")}getOptions(){return this.options_}start(){}end(){}generateSpeech(t,e){return this.rebuilt_||(this.rebuilt_=new i.RebuildStree(e)),(0,n.setup)(this.options_),a.computeMarkup(this.getRebuilt().xml)}}},1452:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.AdhocSpeechGenerator=void 0;const n=r(6278);class o extends n.AbstractSpeechGenerator{getSpeech(t,e){const r=this.generateSpeech(t,e);return t.setAttribute(this.modality,r),r}}e.AdhocSpeechGenerator=o},5152:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.ColorGenerator=void 0;const n=r(2298),o=r(8396),i=r(1214),a=r(1204),s=r(6278);class l extends s.AbstractSpeechGenerator{constructor(){super(...arguments),this.modality=(0,n.addPrefix)("foreground"),this.contrast=new o.ContrastPicker}static visitStree_(t,e,r){if(t.childNodes.length){if(t.contentNodes.length&&("punctuated"===t.type&&t.contentNodes.forEach((t=>r[t.id]=!0)),"implicit"!==t.role&&e.push(t.contentNodes.map((t=>t.id)))),t.childNodes.length){if("implicit"===t.role){const n=[];let o=[];for(const e of t.childNodes){const t=[];l.visitStree_(e,t,r),t.length<=2&&n.push(t.shift()),o=o.concat(t)}return e.push(n),void o.forEach((t=>e.push(t)))}t.childNodes.forEach((t=>l.visitStree_(t,e,r)))}}else r[t.id]||e.push(t.id)}getSpeech(t,e){return a.getAttribute(t,this.modality)}generateSpeech(t,e){return this.getRebuilt()||this.setRebuilt(new i.RebuildStree(t)),this.colorLeaves_(t),a.getAttribute(t,this.modality)}colorLeaves_(t){const e=[];l.visitStree_(this.getRebuilt().streeRoot,e,{});for(const r of e){const e=this.contrast.generate();let n=!1;n=Array.isArray(r)?r.map((r=>this.colorLeave_(t,r,e))).reduce(((t,e)=>t||e),!1):this.colorLeave_(t,r.toString(),e),n&&this.contrast.increment()}}colorLeave_(t,e,r){const n=a.getBySemanticId(t,e);return!!n&&(n.setAttribute(this.modality,r),!0)}}e.ColorGenerator=l},6604:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.DirectSpeechGenerator=void 0;const n=r(1204),o=r(6278);class i extends o.AbstractSpeechGenerator{getSpeech(t,e){return n.getAttribute(t,this.modality)}}e.DirectSpeechGenerator=i},3123:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.DummySpeechGenerator=void 0;const n=r(6278);class o extends n.AbstractSpeechGenerator{getSpeech(t,e){return""}}e.DummySpeechGenerator=o},5858:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.NodeSpeechGenerator=void 0;const n=r(1204),o=r(4598);class i extends o.TreeSpeechGenerator{getSpeech(t,e){return super.getSpeech(t,e),n.getAttribute(t,this.modality)}}e.NodeSpeechGenerator=i},9552:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.generatorMapping_=e.generator=void 0;const n=r(1452),o=r(5152),i=r(6604),a=r(3123),s=r(5858),l=r(597),c=r(4598);e.generator=function(t){return(e.generatorMapping_[t]||e.generatorMapping_.Direct)()},e.generatorMapping_={Adhoc:()=>new n.AdhocSpeechGenerator,Color:()=>new o.ColorGenerator,Direct:()=>new i.DirectSpeechGenerator,Dummy:()=>new a.DummySpeechGenerator,Node:()=>new s.NodeSpeechGenerator,Summary:()=>new l.SummarySpeechGenerator,Tree:()=>new c.TreeSpeechGenerator}},9543:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.computeSummary_=e.retrieveSummary=e.connectAllMactions=e.connectMactions=e.nodeAtPosition_=e.computePrefix_=e.retrievePrefix=e.addPrefix=e.addModality=e.addSpeech=e.recomputeMarkup=e.computeMarkup=e.recomputeSpeech=e.computeSpeech=void 0;const n=r(8290),o=r(5740),i=r(5274),a=r(2298),s=r(2362),l=r(7075),c=r(1204);function u(t){return s.SpeechRuleEngine.getInstance().evaluateNode(t)}function p(t){return u(l.SemanticTree.fromNode(t).xml())}function h(t){const e=p(t);return n.markup(e)}function d(t){const e=f(t);return n.markup(e)}function f(t){const e=l.SemanticTree.fromRoot(t),r=i.evalXPath('.//*[@id="'+t.id+'"]',e.xml());let n=r[0];return r.length>1&&(n=m(t,r)||n),n?s.SpeechRuleEngine.getInstance().runInSetting({modality:"prefix",domain:"default",style:"default",strict:!0,speech:!0},(function(){return s.SpeechRuleEngine.getInstance().evaluateNode(n)})):[]}function m(t,e){const r=e[0];if(!t.parent)return r;const n=[];for(;t;)n.push(t.id),t=t.parent;const o=function(t,e){for(;e.length&&e.shift().toString()===t.getAttribute("id")&&t.parentNode&&t.parentNode.parentNode;)t=t.parentNode.parentNode;return!e.length};for(let t,r=0;t=e[r];r++)if(o(t,n.slice()))return t;return r}function y(t){return t?s.SpeechRuleEngine.getInstance().runInSetting({modality:"summary",strict:!1,speech:!0},(function(){return s.SpeechRuleEngine.getInstance().evaluateNode(t)})):[]}e.computeSpeech=u,e.recomputeSpeech=p,e.computeMarkup=function(t){const e=u(t);return n.markup(e)},e.recomputeMarkup=h,e.addSpeech=function(t,e,r){const i=o.querySelectorAllByAttrValue(r,"id",e.id.toString())[0],s=i?n.markup(u(i)):h(e);t.setAttribute(a.Attribute.SPEECH,s)},e.addModality=function(t,e,r){const n=h(e);t.setAttribute(r,n)},e.addPrefix=function(t,e){const r=d(e);r&&t.setAttribute(a.Attribute.PREFIX,r)},e.retrievePrefix=d,e.computePrefix_=f,e.nodeAtPosition_=m,e.connectMactions=function(t,e,r){const n=o.querySelectorAll(e,"maction");for(let e,i=0;e=n[i];i++){const n=e.getAttribute("id"),i=o.querySelectorAllByAttrValue(t,"id",n)[0];if(!i)continue;const s=e.childNodes[1],l=s.getAttribute(a.Attribute.ID);let u=c.getBySemanticId(t,l);if(u&&"dummy"!==u.getAttribute(a.Attribute.TYPE))continue;if(u=i.childNodes[0],u.getAttribute("sre-highlighter-added"))continue;const p=s.getAttribute(a.Attribute.PARENT);p&&u.setAttribute(a.Attribute.PARENT,p),u.setAttribute(a.Attribute.TYPE,"dummy"),u.setAttribute(a.Attribute.ID,l);o.querySelectorAllByAttrValue(r,"id",l)[0].setAttribute("alternative",l)}},e.connectAllMactions=function(t,e){const r=o.querySelectorAll(t,"maction");for(let t,n=0;t=r[n];n++){const r=t.childNodes[1].getAttribute(a.Attribute.ID);o.querySelectorAllByAttrValue(e,"id",r)[0].setAttribute("alternative",r)}},e.retrieveSummary=function(t){const e=y(t);return n.markup(e)},e.computeSummary_=y},597:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.SummarySpeechGenerator=void 0;const n=r(6278),o=r(9543);class i extends n.AbstractSpeechGenerator{getSpeech(t,e){return o.connectAllMactions(e,this.getRebuilt().xml),this.generateSpeech(t,e)}}e.SummarySpeechGenerator=i},4598:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.TreeSpeechGenerator=void 0;const n=r(2298),o=r(1204),i=r(6278),a=r(9543);class s extends i.AbstractSpeechGenerator{getSpeech(t,e){const r=this.generateSpeech(t,e),i=this.getRebuilt().nodeDict;for(const r in i){const s=i[r],l=o.getBySemanticId(e,r),c=o.getBySemanticId(t,r);l&&c&&(this.modality&&this.modality!==n.Attribute.SPEECH?a.addModality(c,s,this.modality):a.addSpeech(c,s,this.getRebuilt().xml),this.modality===n.Attribute.SPEECH&&a.addPrefix(c,s))}return r}}e.TreeSpeechGenerator=s},313:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.INTERVALS=e.makeLetter=e.numberRules=e.alphabetRules=e.getFont=e.makeInterval=e.generate=e.makeDomains_=e.Domains_=e.Base=e.Embellish=e.Font=void 0;const n=r(5897),o=r(7491),i=r(4356),a=r(2536),s=r(2780);var l,c,u;function p(){const t=i.LOCALE.ALPHABETS,r=(t,e)=>{const r={};return Object.keys(t).forEach((t=>r[t]=!0)),Object.keys(e).forEach((t=>r[t]=!0)),Object.keys(r)};e.Domains_.small=r(t.smallPrefix,t.letterTrans),e.Domains_.capital=r(t.capPrefix,t.letterTrans),e.Domains_.digit=r(t.digitPrefix,t.digitTrans)}function h(t){const e=t.toString(16).toUpperCase();return e.length>3?e:("000"+e).slice(-4)}function d([t,e],r){const n=parseInt(t,16),o=parseInt(e,16),i=[];for(let t=n;t<=o;t++){let e=h(t);!1!==r[e]&&(e=r[e]||e,i.push(e))}return i}function f(t){const e="normal"===t||"fullwidth"===t?"":i.LOCALE.MESSAGES.font[t]||i.LOCALE.MESSAGES.embellish[t]||"";return(0,a.localeFontCombiner)(e)}function m(t,r,n,o,a,s){const l=f(o);for(let o,c,u,p=0;o=t[p],c=r[p],u=n[p];p++){const t=s?i.LOCALE.ALPHABETS.capPrefix:i.LOCALE.ALPHABETS.smallPrefix,r=s?e.Domains_.capital:e.Domains_.small;g(l.combiner,o,c,u,l.font,t,a,i.LOCALE.ALPHABETS.letterTrans,r)}}function y(t,r,n,o,a){const s=f(n);for(let n,l,c=0;n=t[c],l=r[c];c++){const t=i.LOCALE.ALPHABETS.digitPrefix,r=c+a;g(s.combiner,n,l,r,s.font,t,o,i.LOCALE.ALPHABETS.digitTrans,e.Domains_.digit)}}function g(t,e,r,n,o,i,a,l,c){for(let u,p=0;u=c[p];p++){const c=u in l?l[u]:l.default,p=u in i?i[u]:i.default;s.defineRule(e.toString(),u,"default",a,r,t(c(n),o,p))}}!function(t){t.BOLD="bold",t.BOLDFRAKTUR="bold-fraktur",t.BOLDITALIC="bold-italic",t.BOLDSCRIPT="bold-script",t.DOUBLESTRUCK="double-struck",t.FULLWIDTH="fullwidth",t.FRAKTUR="fraktur",t.ITALIC="italic",t.MONOSPACE="monospace",t.NORMAL="normal",t.SCRIPT="script",t.SANSSERIF="sans-serif",t.SANSSERIFITALIC="sans-serif-italic",t.SANSSERIFBOLD="sans-serif-bold",t.SANSSERIFBOLDITALIC="sans-serif-bold-italic"}(l=e.Font||(e.Font={})),function(t){t.SUPER="super",t.SUB="sub",t.CIRCLED="circled",t.PARENTHESIZED="parenthesized",t.PERIOD="period",t.NEGATIVECIRCLED="negative-circled",t.DOUBLECIRCLED="double-circled",t.CIRCLEDSANSSERIF="circled-sans-serif",t.NEGATIVECIRCLEDSANSSERIF="negative-circled-sans-serif",t.COMMA="comma",t.SQUARED="squared",t.NEGATIVESQUARED="negative-squared"}(c=e.Embellish||(e.Embellish={})),function(t){t.LATINCAP="latinCap",t.LATINSMALL="latinSmall",t.GREEKCAP="greekCap",t.GREEKSMALL="greekSmall",t.DIGIT="digit"}(u=e.Base||(e.Base={})),e.Domains_={small:["default"],capital:["default"],digit:["default"]},e.makeDomains_=p,e.generate=function(t){const r=n.default.getInstance().locale;n.default.getInstance().locale=t,o.setLocale(),s.addSymbolRules({locale:t}),p();const a=e.INTERVALS;for(let t,e=0;t=a[e];e++){const e=d(t.interval,t.subst),r=e.map((function(t){return String.fromCodePoint(parseInt(t,16))}));if("offset"in t)y(e,r,t.font,t.category,t.offset||0);else{m(e,r,i.LOCALE.ALPHABETS[t.base],t.font,t.category,!!t.capital)}}n.default.getInstance().locale=r,o.setLocale()},e.makeInterval=d,e.getFont=f,e.alphabetRules=m,e.numberRules=y,e.makeLetter=g,e.INTERVALS=[{interval:["1D400","1D419"],base:u.LATINCAP,subst:{},capital:!0,category:"Lu",font:l.BOLD},{interval:["1D41A","1D433"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:l.BOLD},{interval:["1D56C","1D585"],base:u.LATINCAP,subst:{},capital:!0,category:"Lu",font:l.BOLDFRAKTUR},{interval:["1D586","1D59F"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:l.BOLDFRAKTUR},{interval:["1D468","1D481"],base:u.LATINCAP,subst:{},capital:!0,category:"Lu",font:l.BOLDITALIC},{interval:["1D482","1D49B"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:l.BOLDITALIC},{interval:["1D4D0","1D4E9"],base:u.LATINCAP,subst:{},capital:!0,category:"Lu",font:l.BOLDSCRIPT},{interval:["1D4EA","1D503"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:l.BOLDSCRIPT},{interval:["1D538","1D551"],base:u.LATINCAP,subst:{"1D53A":"2102","1D53F":"210D","1D545":"2115","1D547":"2119","1D548":"211A","1D549":"211D","1D551":"2124"},capital:!0,category:"Lu",font:l.DOUBLESTRUCK},{interval:["1D552","1D56B"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:l.DOUBLESTRUCK},{interval:["1D504","1D51D"],base:u.LATINCAP,subst:{"1D506":"212D","1D50B":"210C","1D50C":"2111","1D515":"211C","1D51D":"2128"},capital:!0,category:"Lu",font:l.FRAKTUR},{interval:["1D51E","1D537"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:l.FRAKTUR},{interval:["FF21","FF3A"],base:u.LATINCAP,subst:{},capital:!0,category:"Lu",font:l.FULLWIDTH},{interval:["FF41","FF5A"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:l.FULLWIDTH},{interval:["1D434","1D44D"],base:u.LATINCAP,subst:{},capital:!0,category:"Lu",font:l.ITALIC},{interval:["1D44E","1D467"],base:u.LATINSMALL,subst:{"1D455":"210E"},capital:!1,category:"Ll",font:l.ITALIC},{interval:["1D670","1D689"],base:u.LATINCAP,subst:{},capital:!0,category:"Lu",font:l.MONOSPACE},{interval:["1D68A","1D6A3"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:l.MONOSPACE},{interval:["0041","005A"],base:u.LATINCAP,subst:{},capital:!0,category:"Lu",font:l.NORMAL},{interval:["0061","007A"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:l.NORMAL},{interval:["1D49C","1D4B5"],base:u.LATINCAP,subst:{"1D49D":"212C","1D4A0":"2130","1D4A1":"2131","1D4A3":"210B","1D4A4":"2110","1D4A7":"2112","1D4A8":"2133","1D4AD":"211B"},capital:!0,category:"Lu",font:l.SCRIPT},{interval:["1D4B6","1D4CF"],base:u.LATINSMALL,subst:{"1D4BA":"212F","1D4BC":"210A","1D4C4":"2134"},capital:!1,category:"Ll",font:l.SCRIPT},{interval:["1D5A0","1D5B9"],base:u.LATINCAP,subst:{},capital:!0,category:"Lu",font:l.SANSSERIF},{interval:["1D5BA","1D5D3"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:l.SANSSERIF},{interval:["1D608","1D621"],base:u.LATINCAP,subst:{},capital:!0,category:"Lu",font:l.SANSSERIFITALIC},{interval:["1D622","1D63B"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:l.SANSSERIFITALIC},{interval:["1D5D4","1D5ED"],base:u.LATINCAP,subst:{},capital:!0,category:"Lu",font:l.SANSSERIFBOLD},{interval:["1D5EE","1D607"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:l.SANSSERIFBOLD},{interval:["1D63C","1D655"],base:u.LATINCAP,subst:{},capital:!0,category:"Lu",font:l.SANSSERIFBOLDITALIC},{interval:["1D656","1D66F"],base:u.LATINSMALL,subst:{},capital:!1,category:"Ll",font:l.SANSSERIFBOLDITALIC},{interval:["0391","03A9"],base:u.GREEKCAP,subst:{"03A2":"03F4"},capital:!0,category:"Lu",font:l.NORMAL},{interval:["03B0","03D0"],base:u.GREEKSMALL,subst:{"03B0":"2207","03CA":"2202","03CB":"03F5","03CC":"03D1","03CD":"03F0","03CE":"03D5","03CF":"03F1","03D0":"03D6"},capital:!1,category:"Ll",font:l.NORMAL},{interval:["1D6A8","1D6C0"],base:u.GREEKCAP,subst:{},capital:!0,category:"Lu",font:l.BOLD},{interval:["1D6C1","1D6E1"],base:u.GREEKSMALL,subst:{},capital:!1,category:"Ll",font:l.BOLD},{interval:["1D6E2","1D6FA"],base:u.GREEKCAP,subst:{},capital:!0,category:"Lu",font:l.ITALIC},{interval:["1D6FB","1D71B"],base:u.GREEKSMALL,subst:{},capital:!1,category:"Ll",font:l.ITALIC},{interval:["1D71C","1D734"],base:u.GREEKCAP,subst:{},capital:!0,category:"Lu",font:l.BOLDITALIC},{interval:["1D735","1D755"],base:u.GREEKSMALL,subst:{},capital:!1,category:"Ll",font:l.BOLDITALIC},{interval:["1D756","1D76E"],base:u.GREEKCAP,subst:{},capital:!0,category:"Lu",font:l.SANSSERIFBOLD},{interval:["1D76F","1D78F"],base:u.GREEKSMALL,subst:{},capital:!1,category:"Ll",font:l.SANSSERIFBOLD},{interval:["1D790","1D7A8"],base:u.GREEKCAP,subst:{},capital:!0,category:"Lu",font:l.SANSSERIFBOLDITALIC},{interval:["1D7A9","1D7C9"],base:u.GREEKSMALL,subst:{},capital:!1,category:"Ll",font:l.SANSSERIFBOLDITALIC},{interval:["0030","0039"],base:u.DIGIT,subst:{},offset:0,category:"Nd",font:l.NORMAL},{interval:["2070","2079"],base:u.DIGIT,subst:{2071:"00B9",2072:"00B2",2073:"00B3"},offset:0,category:"No",font:c.SUPER},{interval:["2080","2089"],base:u.DIGIT,subst:{},offset:0,category:"No",font:c.SUB},{interval:["245F","2473"],base:u.DIGIT,subst:{"245F":"24EA"},offset:0,category:"No",font:c.CIRCLED},{interval:["3251","325F"],base:u.DIGIT,subst:{},offset:21,category:"No",font:c.CIRCLED},{interval:["32B1","32BF"],base:u.DIGIT,subst:{},offset:36,category:"No",font:c.CIRCLED},{interval:["2474","2487"],base:u.DIGIT,subst:{},offset:1,category:"No",font:c.PARENTHESIZED},{interval:["2487","249B"],base:u.DIGIT,subst:{2487:"1F100"},offset:0,category:"No",font:c.PERIOD},{interval:["2775","277F"],base:u.DIGIT,subst:{2775:"24FF"},offset:0,category:"No",font:c.NEGATIVECIRCLED},{interval:["24EB","24F4"],base:u.DIGIT,subst:{},offset:11,category:"No",font:c.NEGATIVECIRCLED},{interval:["24F5","24FE"],base:u.DIGIT,subst:{},offset:1,category:"No",font:c.DOUBLECIRCLED},{interval:["277F","2789"],base:u.DIGIT,subst:{"277F":"1F10B"},offset:0,category:"No",font:c.CIRCLEDSANSSERIF},{interval:["2789","2793"],base:u.DIGIT,subst:{2789:"1F10C"},offset:0,category:"No",font:c.NEGATIVECIRCLEDSANSSERIF},{interval:["FF10","FF19"],base:u.DIGIT,subst:{},offset:0,category:"Nd",font:l.FULLWIDTH},{interval:["1D7CE","1D7D7"],base:u.DIGIT,subst:{},offset:0,category:"Nd",font:l.BOLD},{interval:["1D7D8","1D7E1"],base:u.DIGIT,subst:{},offset:0,category:"Nd",font:l.DOUBLESTRUCK},{interval:["1D7E2","1D7EB"],base:u.DIGIT,subst:{},offset:0,category:"Nd",font:l.SANSSERIF},{interval:["1D7EC","1D7F5"],base:u.DIGIT,subst:{},offset:0,category:"Nd",font:l.SANSSERIFBOLD},{interval:["1D7F6","1D7FF"],base:u.DIGIT,subst:{},offset:0,category:"Nd",font:l.MONOSPACE},{interval:["1F101","1F10A"],base:u.DIGIT,subst:{},offset:0,category:"No",font:c.COMMA},{interval:["24B6","24CF"],base:u.LATINCAP,subst:{},capital:!0,category:"So",font:c.CIRCLED},{interval:["24D0","24E9"],base:u.LATINSMALL,subst:{},capital:!1,category:"So",font:c.CIRCLED},{interval:["1F110","1F129"],base:u.LATINCAP,subst:{},capital:!0,category:"So",font:c.PARENTHESIZED},{interval:["249C","24B5"],base:u.LATINSMALL,subst:{},capital:!1,category:"So",font:c.PARENTHESIZED},{interval:["1F130","1F149"],base:u.LATINCAP,subst:{},capital:!0,category:"So",font:c.SQUARED},{interval:["1F170","1F189"],base:u.LATINCAP,subst:{},capital:!0,category:"So",font:c.NEGATIVESQUARED},{interval:["1F150","1F169"],base:u.LATINCAP,subst:{},capital:!0,category:"So",font:c.NEGATIVECIRCLED}]},8504:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.Parser=e.Comparator=e.ClearspeakPreferences=void 0;const n=r(5897),o=r(4440),i=r(1676),a=r(1676),s=r(2780),l=r(2362);class c extends i.DynamicCstr{constructor(t,e){super(t),this.preference=e}static comparator(){return new p(n.default.getInstance().dynamicCstr,a.DynamicProperties.createProp([i.DynamicCstr.DEFAULT_VALUES[a.Axis.LOCALE]],[i.DynamicCstr.DEFAULT_VALUES[a.Axis.MODALITY]],[i.DynamicCstr.DEFAULT_VALUES[a.Axis.DOMAIN]],[i.DynamicCstr.DEFAULT_VALUES[a.Axis.STYLE]]))}static fromPreference(t){const e=t.split(":"),r={},n=u.getProperties(),o=Object.keys(n);for(let t,i=0;t=e[i];i++){const e=t.split("_");if(-1===o.indexOf(e[0]))continue;const i=e[1];i&&i!==c.AUTO&&-1!==n[e[0]].indexOf(i)&&(r[e[0]]=e[1])}return r}static toPreference(t){const e=Object.keys(t),r=[];for(let n=0;na?-1:i0&&e<20&&r>0&&r<11}function M(t){return o.default.getInstance().style===t}function O(t){if(!t.hasAttribute("annotation"))return!1;const e=t.getAttribute("annotation");return!!/clearspeak:simple$|clearspeak:simple;/.exec(e)}function E(t){if(O(t))return!0;if("subscript"!==t.tagName)return!1;const e=t.childNodes[0].childNodes,r=e[1];return"identifier"===e[0].tagName&&(A(r)||"infixop"===r.tagName&&r.hasAttribute("role")&&"implicit"===r.getAttribute("role")&&C(r))}function A(t){return"number"===t.tagName&&t.hasAttribute("role")&&"integer"===t.getAttribute("role")}function C(t){return i.evalXPath("children/*",t).every((t=>A(t)||"identifier"===t.tagName))}function w(t){return"text"===t.type||"punctuated"===t.type&&"text"===t.role&&_(t.childNodes[0])&&T(t.childNodes.slice(1))||"identifier"===t.type&&"unit"===t.role||"infixop"===t.type&&("implicit"===t.role||"unit"===t.role)}function T(t){for(let e=0;e10?a.LOCALE.NUMBERS.numericOrdinal(e):a.LOCALE.NUMBERS.wordOrdinal(e)},e.NESTING_DEPTH=null,e.nestingDepth=function(t){let r=0;const n=t.textContent,o="open"===t.getAttribute("role")?0:1;let i=t.parentNode;for(;i;)"fenced"===i.tagName&&i.childNodes[0].childNodes[o].textContent===n&&r++,i=i.parentNode;return e.NESTING_DEPTH=r>1?a.LOCALE.NUMBERS.wordOrdinal(r):"",e.NESTING_DEPTH},e.matchingFences=function(t){const e=t.previousSibling;let r,n;return e?(r=e,n=t):(r=t,n=t.nextSibling),n&&(0,h.isMatchingFence)(r.textContent,n.textContent)?[t]:[]},e.insertNesting=N,l.Grammar.getInstance().setCorrection("insertNesting",N),e.fencedArguments=function(t){const e=n.toArray(t.parentNode.childNodes),r=i.evalXPath("../../children/*",t),o=e.indexOf(t);return P(r[o])||P(r[o+1])?[t]:[]},e.simpleArguments=function(t){const e=n.toArray(t.parentNode.childNodes),r=i.evalXPath("../../children/*",t),o=e.indexOf(t);return L(r[o])&&r[o+1]&&(L(r[o+1])||"root"===r[o+1].tagName||"sqrt"===r[o+1].tagName||"superscript"===r[o+1].tagName&&r[o+1].childNodes[0].childNodes[0]&&("number"===r[o+1].childNodes[0].childNodes[0].tagName||"identifier"===r[o+1].childNodes[0].childNodes[0].tagName)&&("2"===r[o+1].childNodes[0].childNodes[1].textContent||"3"===r[o+1].childNodes[0].childNodes[1].textContent))?[t]:[]},e.simpleFactor_=L,e.fencedFactor_=P,e.layoutFactor_=I,e.wordOrdinal=function(t){return a.LOCALE.NUMBERS.wordOrdinal(parseInt(t.textContent,10))}},6141:function(t,e,r){var n=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function a(t){try{l(n.next(t))}catch(t){i(t)}}function s(t){try{l(n.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(a,s)}l((n=n.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.loadAjax=e.loadFileSync=e.loadFile=e.parseMaps=e.retrieveFiles=e.standardLoader=e.loadLocale=e.store=void 0;const o=r(2139),i=r(5897),a=r(4440),s=r(7248),l=r(2315),c=r(1676),u=r(2780),p=r(2362),h=r(7491),d=r(313);e.store=u;const f={functions:u.addFunctionRules,symbols:u.addSymbolRules,units:u.addUnitRules,si:u.setSiPrefixes};let m=!1;function y(t=i.default.getInstance().locale){i.EnginePromise.loaded[t]||(i.EnginePromise.loaded[t]=[!1,!1],function(t){if(i.default.getInstance().isIE&&i.default.getInstance().mode===a.Mode.HTTP)return void S(t);b(t)}(t))}function g(){switch(i.default.getInstance().mode){case a.Mode.ASYNC:return x;case a.Mode.HTTP:return O;case a.Mode.SYNC:default:return M}}function b(t){const e=i.default.getInstance().customLoader?i.default.getInstance().customLoader:g(),r=new Promise((r=>{e(t).then((e=>{v(e),i.EnginePromise.loaded[t]=[!0,!0],r(t)}),(e=>{i.EnginePromise.loaded[t]=[!0,!1],console.error(`Unable to load locale: ${t}`),i.default.getInstance().locale=i.default.getInstance().defaultLocale,r(t)}))}));i.EnginePromise.promises[t]=r}function v(t){_(JSON.parse(t))}function _(t,e){let r=!0;for(let n,o=0;n=Object.keys(t)[o];o++){const o=n.split("/");e&&e!==o[0]||("rules"===o[1]?p.SpeechRuleEngine.getInstance().addStore(t[n]):"messages"===o[1]?(0,h.completeLocale)(t[n]):(r&&(d.generate(o[0]),r=!1),t[n].forEach(f[o[1]])))}}function S(t,e){let r=e||1;o.mapsForIE?_(o.mapsForIE,t):r<=5&&setTimeout((()=>S(t,r++)).bind(this),300)}function x(t){const e=s.localePath(t);return new Promise(((t,r)=>{l.default.fs.readFile(e,"utf8",((e,n)=>{if(e)return r(e);t(n)}))}))}function M(t){const e=s.localePath(t);return new Promise(((t,r)=>{let n="{}";try{n=l.default.fs.readFileSync(e,"utf8")}catch(t){return r(t)}t(n)}))}function O(t){const e=s.localePath(t),r=new XMLHttpRequest;return new Promise(((t,n)=>{r.onreadystatechange=function(){if(4===r.readyState){const e=r.status;0===e||e>=200&&e<400?t(r.responseText):n(e)}},r.open("GET",e,!0),r.send()}))}e.loadLocale=function(t=i.default.getInstance().locale){return n(this,void 0,void 0,(function*(){return m||(y(c.DynamicCstr.BASE_LOCALE),m=!0),i.EnginePromise.promises[c.DynamicCstr.BASE_LOCALE].then((()=>n(this,void 0,void 0,(function*(){const e=i.default.getInstance().defaultLocale;return e?(y(e),i.EnginePromise.promises[e].then((()=>n(this,void 0,void 0,(function*(){return y(t),i.EnginePromise.promises[t]}))))):(y(t),i.EnginePromise.promises[t])}))))}))},e.standardLoader=g,e.retrieveFiles=b,e.parseMaps=v,e.loadFile=x,e.loadFileSync=M,e.loadAjax=O},7088:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.leftSubscriptBrief=e.leftSuperscriptBrief=e.leftSubscriptVerbose=e.leftSuperscriptVerbose=e.baselineBrief=e.baselineVerbose=void 0;const n=r(1378);e.baselineVerbose=function(t){return n.baselineVerbose(t).replace(/-$/,"")},e.baselineBrief=function(t){return n.baselineBrief(t).replace(/-$/,"")},e.leftSuperscriptVerbose=function(t){return n.superscriptVerbose(t).replace(/^exposant/,"exposant gauche")},e.leftSubscriptVerbose=function(t){return n.subscriptVerbose(t).replace(/^indice/,"indice gauche")},e.leftSuperscriptBrief=function(t){return n.superscriptBrief(t).replace(/^sup/,"sup gauche")},e.leftSubscriptBrief=function(t){return n.subscriptBrief(t).replace(/^sub/,"sub gauche")}},9577:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.MathspeakRules=void 0;const n=r(1676),o=r(365),i=r(7088),a=r(1378),s=r(8437),l=r(7283),c=r(7598);e.MathspeakRules=function(){l.addStore(n.DynamicCstr.BASE_LOCALE+".speech.mathspeak","",{CQFspaceoutNumber:a.spaceoutNumber,CQFspaceoutIdentifier:a.spaceoutIdentifier,CSFspaceoutText:a.spaceoutText,CSFopenFracVerbose:a.openingFractionVerbose,CSFcloseFracVerbose:a.closingFractionVerbose,CSFoverFracVerbose:a.overFractionVerbose,CSFopenFracBrief:a.openingFractionBrief,CSFcloseFracBrief:a.closingFractionBrief,CSFopenFracSbrief:a.openingFractionSbrief,CSFcloseFracSbrief:a.closingFractionSbrief,CSFoverFracSbrief:a.overFractionSbrief,CSFvulgarFraction:s.vulgarFraction,CQFvulgarFractionSmall:a.isSmallVulgarFraction,CSFopenRadicalVerbose:a.openingRadicalVerbose,CSFcloseRadicalVerbose:a.closingRadicalVerbose,CSFindexRadicalVerbose:a.indexRadicalVerbose,CSFopenRadicalBrief:a.openingRadicalBrief,CSFcloseRadicalBrief:a.closingRadicalBrief,CSFindexRadicalBrief:a.indexRadicalBrief,CSFopenRadicalSbrief:a.openingRadicalSbrief,CSFindexRadicalSbrief:a.indexRadicalSbrief,CQFisSmallRoot:a.smallRoot,CSFsuperscriptVerbose:a.superscriptVerbose,CSFsuperscriptBrief:a.superscriptBrief,CSFsubscriptVerbose:a.subscriptVerbose,CSFsubscriptBrief:a.subscriptBrief,CSFbaselineVerbose:a.baselineVerbose,CSFbaselineBrief:a.baselineBrief,CSFleftsuperscriptVerbose:a.superscriptVerbose,CSFleftsubscriptVerbose:a.subscriptVerbose,CSFrightsuperscriptVerbose:a.superscriptVerbose,CSFrightsubscriptVerbose:a.subscriptVerbose,CSFleftsuperscriptBrief:a.superscriptBrief,CSFleftsubscriptBrief:a.subscriptBrief,CSFrightsuperscriptBrief:a.superscriptBrief,CSFrightsubscriptBrief:a.subscriptBrief,CSFunderscript:a.nestedUnderscript,CSFoverscript:a.nestedOverscript,CSFendscripts:a.endscripts,CTFordinalCounter:s.ordinalCounter,CTFwordCounter:s.wordCounter,CTFcontentIterator:o.contentIterator,CQFdetIsSimple:a.determinantIsSimple,CSFRemoveParens:a.removeParens,CQFresetNesting:a.resetNestingDepth,CGFbaselineConstraint:a.generateBaselineConstraint,CGFtensorRules:a.generateTensorRules}),l.addStore("es.speech.mathspeak",n.DynamicCstr.BASE_LOCALE+".speech.mathspeak",{CTFunitMultipliers:c.unitMultipliers,CQFoneLeft:c.oneLeft}),l.addStore("fr.speech.mathspeak",n.DynamicCstr.BASE_LOCALE+".speech.mathspeak",{CSFbaselineVerbose:i.baselineVerbose,CSFbaselineBrief:i.baselineBrief,CSFleftsuperscriptVerbose:i.leftSuperscriptVerbose,CSFleftsubscriptVerbose:i.leftSubscriptVerbose,CSFleftsuperscriptBrief:i.leftSuperscriptBrief,CSFleftsubscriptBrief:i.leftSubscriptBrief})}},1378:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.smallRoot=e.generateTensorRules=e.removeParens=e.generateBaselineConstraint=e.determinantIsSimple=e.nestedOverscript=e.endscripts=e.overscoreNestingDepth=e.nestedUnderscript=e.underscoreNestingDepth=e.indexRadicalSbrief=e.openingRadicalSbrief=e.indexRadicalBrief=e.closingRadicalBrief=e.openingRadicalBrief=e.indexRadicalVerbose=e.closingRadicalVerbose=e.openingRadicalVerbose=e.getRootIndex=e.nestedRadical=e.radicalNestingDepth=e.baselineBrief=e.baselineVerbose=e.superscriptBrief=e.superscriptVerbose=e.subscriptBrief=e.subscriptVerbose=e.nestedSubSuper=e.isSmallVulgarFraction=e.overFractionSbrief=e.closingFractionSbrief=e.openingFractionSbrief=e.closingFractionBrief=e.openingFractionBrief=e.overFractionVerbose=e.closingFractionVerbose=e.openingFractionVerbose=e.nestedFraction=e.fractionNestingDepth=e.computeNestingDepth_=e.containsAttr=e.getNestingDepth=e.resetNestingDepth=e.nestingBarriers=e.spaceoutIdentifier=e.spaceoutNumber=e.spaceoutNodes=e.spaceoutText=void 0;const n=r(707),o=r(5740),i=r(5274),a=r(4356),s=r(3308);let l={};function c(t,e){const r=Array.from(t.textContent),n=[],o=s.default.getInstance(),i=t.ownerDocument;for(let t,a=0;t=r[a];a++){const r=o.getNodeFactory().makeLeafNode(t,"unknown"),a=o.identifierNode(r,"unknown","");e(a),n.push(a.xml(i))}return n}function u(t,r,i,a,s,c){a=a||e.nestingBarriers,s=s||{},c=c||function(t){return!1};const u=o.serializeXml(r);if(l[t]||(l[t]={}),l[t][u])return l[t][u];if(c(r)||i.indexOf(r.tagName)<0)return 0;const p=h(r,i,n.setdifference(a,i),s,c,0);return l[t][u]=p,p}function p(t,e){if(!t.attributes)return!1;const r=o.toArray(t.attributes);for(let t,n=0;t=r[n];n++)if(e[t.nodeName]===t.nodeValue)return!0;return!1}function h(t,e,r,n,i,a){if(i(t)||r.indexOf(t.tagName)>-1||p(t,n))return a;if(e.indexOf(t.tagName)>-1&&a++,!t.childNodes||0===t.childNodes.length)return a;const s=o.toArray(t.childNodes);return Math.max.apply(null,s.map((function(t){return h(t,e,r,n,i,a)})))}function d(t){return u("fraction",t,["fraction"],e.nestingBarriers,{},a.LOCALE.FUNCTIONS.fracNestDepth)}function f(t,e,r){const n=d(t),o=Array(n).fill(e);return r&&o.push(r),o.join(a.LOCALE.MESSAGES.regexp.JOINER_FRAC)}function m(t,e,r){for(;t.parentNode;){const n=t.parentNode,o=n.parentNode;if(!o)break;const i=t.getAttribute&&t.getAttribute("role");("subscript"===o.tagName&&t===n.childNodes[1]||"tensor"===o.tagName&&i&&("leftsub"===i||"rightsub"===i))&&(e=r.sub+a.LOCALE.MESSAGES.regexp.JOINER_SUBSUPER+e),("superscript"===o.tagName&&t===n.childNodes[1]||"tensor"===o.tagName&&i&&("leftsuper"===i||"rightsuper"===i))&&(e=r.sup+a.LOCALE.MESSAGES.regexp.JOINER_SUBSUPER+e),t=o}return e.trim()}function y(t){return u("radical",t,["sqrt","root"],e.nestingBarriers,{})}function g(t,e,r){const n=y(t),o=b(t);return r=o?a.LOCALE.FUNCTIONS.combineRootIndex(r,o):r,1===n?r:a.LOCALE.FUNCTIONS.combineNestedRadical(e,a.LOCALE.FUNCTIONS.radicalNestDepth(n-1),r)}function b(t){const e="sqrt"===t.tagName?"2":i.evalXPath("children/*[1]",t)[0].textContent.trim();return a.LOCALE.MESSAGES.MSroots[e]||""}function v(t){return u("underscore",t,["underscore"],e.nestingBarriers,{},(function(t){return t.tagName&&"underscore"===t.tagName&&"underaccent"===t.childNodes[0].childNodes[1].getAttribute("role")}))}function _(t){return u("overscore",t,["overscore"],e.nestingBarriers,{},(function(t){return t.tagName&&"overscore"===t.tagName&&"overaccent"===t.childNodes[0].childNodes[1].getAttribute("role")}))}e.spaceoutText=function(t){return Array.from(t.textContent).join(" ")},e.spaceoutNodes=c,e.spaceoutNumber=function(t){return c(t,(function(t){t.textContent.match(/\W/)||(t.type="number")}))},e.spaceoutIdentifier=function(t){return c(t,(function(t){t.font="unknown",t.type="identifier"}))},e.nestingBarriers=["cases","cell","integral","line","matrix","multiline","overscore","root","row","sqrt","subscript","superscript","table","underscore","vector"],e.resetNestingDepth=function(t){return l={},[t]},e.getNestingDepth=u,e.containsAttr=p,e.computeNestingDepth_=h,e.fractionNestingDepth=d,e.nestedFraction=f,e.openingFractionVerbose=function(t){return f(t,a.LOCALE.MESSAGES.MS.START,a.LOCALE.MESSAGES.MS.FRAC_V)},e.closingFractionVerbose=function(t){return f(t,a.LOCALE.MESSAGES.MS.END,a.LOCALE.MESSAGES.MS.FRAC_V)},e.overFractionVerbose=function(t){return f(t,a.LOCALE.MESSAGES.MS.FRAC_OVER)},e.openingFractionBrief=function(t){return f(t,a.LOCALE.MESSAGES.MS.START,a.LOCALE.MESSAGES.MS.FRAC_B)},e.closingFractionBrief=function(t){return f(t,a.LOCALE.MESSAGES.MS.END,a.LOCALE.MESSAGES.MS.FRAC_B)},e.openingFractionSbrief=function(t){const e=d(t);return 1===e?a.LOCALE.MESSAGES.MS.FRAC_S:a.LOCALE.FUNCTIONS.combineNestedFraction(a.LOCALE.MESSAGES.MS.NEST_FRAC,a.LOCALE.FUNCTIONS.radicalNestDepth(e-1),a.LOCALE.MESSAGES.MS.FRAC_S)},e.closingFractionSbrief=function(t){const e=d(t);return 1===e?a.LOCALE.MESSAGES.MS.ENDFRAC:a.LOCALE.FUNCTIONS.combineNestedFraction(a.LOCALE.MESSAGES.MS.NEST_FRAC,a.LOCALE.FUNCTIONS.radicalNestDepth(e-1),a.LOCALE.MESSAGES.MS.ENDFRAC)},e.overFractionSbrief=function(t){const e=d(t);return 1===e?a.LOCALE.MESSAGES.MS.FRAC_OVER:a.LOCALE.FUNCTIONS.combineNestedFraction(a.LOCALE.MESSAGES.MS.NEST_FRAC,a.LOCALE.FUNCTIONS.radicalNestDepth(e-1),a.LOCALE.MESSAGES.MS.FRAC_OVER)},e.isSmallVulgarFraction=function(t){return a.LOCALE.FUNCTIONS.fracNestDepth(t)?[t]:[]},e.nestedSubSuper=m,e.subscriptVerbose=function(t){return m(t,a.LOCALE.MESSAGES.MS.SUBSCRIPT,{sup:a.LOCALE.MESSAGES.MS.SUPER,sub:a.LOCALE.MESSAGES.MS.SUB})},e.subscriptBrief=function(t){return m(t,a.LOCALE.MESSAGES.MS.SUB,{sup:a.LOCALE.MESSAGES.MS.SUP,sub:a.LOCALE.MESSAGES.MS.SUB})},e.superscriptVerbose=function(t){return m(t,a.LOCALE.MESSAGES.MS.SUPERSCRIPT,{sup:a.LOCALE.MESSAGES.MS.SUPER,sub:a.LOCALE.MESSAGES.MS.SUB})},e.superscriptBrief=function(t){return m(t,a.LOCALE.MESSAGES.MS.SUP,{sup:a.LOCALE.MESSAGES.MS.SUP,sub:a.LOCALE.MESSAGES.MS.SUB})},e.baselineVerbose=function(t){const e=m(t,"",{sup:a.LOCALE.MESSAGES.MS.SUPER,sub:a.LOCALE.MESSAGES.MS.SUB});return e?e.replace(new RegExp(a.LOCALE.MESSAGES.MS.SUB+"$"),a.LOCALE.MESSAGES.MS.SUBSCRIPT).replace(new RegExp(a.LOCALE.MESSAGES.MS.SUPER+"$"),a.LOCALE.MESSAGES.MS.SUPERSCRIPT):a.LOCALE.MESSAGES.MS.BASELINE},e.baselineBrief=function(t){return m(t,"",{sup:a.LOCALE.MESSAGES.MS.SUP,sub:a.LOCALE.MESSAGES.MS.SUB})||a.LOCALE.MESSAGES.MS.BASE},e.radicalNestingDepth=y,e.nestedRadical=g,e.getRootIndex=b,e.openingRadicalVerbose=function(t){return g(t,a.LOCALE.MESSAGES.MS.NESTED,a.LOCALE.MESSAGES.MS.STARTROOT)},e.closingRadicalVerbose=function(t){return g(t,a.LOCALE.MESSAGES.MS.NESTED,a.LOCALE.MESSAGES.MS.ENDROOT)},e.indexRadicalVerbose=function(t){return g(t,a.LOCALE.MESSAGES.MS.NESTED,a.LOCALE.MESSAGES.MS.ROOTINDEX)},e.openingRadicalBrief=function(t){return g(t,a.LOCALE.MESSAGES.MS.NEST_ROOT,a.LOCALE.MESSAGES.MS.STARTROOT)},e.closingRadicalBrief=function(t){return g(t,a.LOCALE.MESSAGES.MS.NEST_ROOT,a.LOCALE.MESSAGES.MS.ENDROOT)},e.indexRadicalBrief=function(t){return g(t,a.LOCALE.MESSAGES.MS.NEST_ROOT,a.LOCALE.MESSAGES.MS.ROOTINDEX)},e.openingRadicalSbrief=function(t){return g(t,a.LOCALE.MESSAGES.MS.NEST_ROOT,a.LOCALE.MESSAGES.MS.ROOT)},e.indexRadicalSbrief=function(t){return g(t,a.LOCALE.MESSAGES.MS.NEST_ROOT,a.LOCALE.MESSAGES.MS.INDEX)},e.underscoreNestingDepth=v,e.nestedUnderscript=function(t){const e=v(t);return Array(e).join(a.LOCALE.MESSAGES.MS.UNDER)+a.LOCALE.MESSAGES.MS.UNDERSCRIPT},e.overscoreNestingDepth=_,e.endscripts=function(t){return a.LOCALE.MESSAGES.MS.ENDSCRIPTS},e.nestedOverscript=function(t){const e=_(t);return Array(e).join(a.LOCALE.MESSAGES.MS.OVER)+a.LOCALE.MESSAGES.MS.OVERSCRIPT},e.determinantIsSimple=function(t){if("matrix"!==t.tagName||"determinant"!==t.getAttribute("role"))return[];const e=i.evalXPath("children/row/children/cell/children/*",t);for(let t,r=0;t=e[r];r++)if("number"!==t.tagName){if("identifier"===t.tagName){const e=t.getAttribute("role");if("latinletter"===e||"greekletter"===e||"otherletter"===e)continue}return[]}return[t]},e.generateBaselineConstraint=function(){const t=t=>t.map((t=>"ancestor::"+t)),e=t=>"not("+t+")",r=e(t(["subscript","superscript","tensor"]).join(" or ")),n=t(["relseq","multrel"]),o=t(["fraction","punctuation","fenced","sqrt","root"]);let i=[];for(let t,e=0;t=o[e];e++)i=i.concat(n.map((function(e){return t+"/"+e})));return[["ancestor::*/following-sibling::*",r,e(i.join(" | "))].join(" and ")]},e.removeParens=function(t){if(!t.childNodes.length||!t.childNodes[0].childNodes.length||!t.childNodes[0].childNodes[0].childNodes.length)return"";const e=t.childNodes[0].childNodes[0].childNodes[0].textContent;return e.match(/^\(.+\)$/)?e.slice(1,-1):e};const S=new Map([[3,"CSFleftsuperscript"],[4,"CSFleftsubscript"],[2,"CSFbaseline"],[1,"CSFrightsubscript"],[0,"CSFrightsuperscript"]]),x=new Map([[4,2],[3,3],[2,1],[1,4],[0,5]]);function M(t){const e=[];let r="",n="",o=parseInt(t,2);for(let t=0;t<5;t++){const i="children/*["+x.get(t)+"]";if(1&o){const e=S.get(t%5);r="[t] "+e+"Verbose; [n] "+i+";"+r,n="[t] "+e+"Brief; [n] "+i+";"+n}else e.unshift("name("+i+')="empty"');o>>=1}return[e,r,n]}e.generateTensorRules=function(t,e=!0){const r=["11111","11110","11101","11100","10111","10110","10101","10100","01111","01110","01101","01100"];for(let n,o=0;n=r[o];o++){let r="tensor"+n,[o,i,a]=M(n);t.defineRule(r,"default",i,"self::tensor",...o),e&&(t.defineRule(r,"brief",a,"self::tensor",...o),t.defineRule(r,"sbrief",a,"self::tensor",...o));const s=S.get(2);i+="; [t]"+s+"Verbose",a+="; [t]"+s+"Brief",r+="-baseline";const l="((.//*[not(*)])[last()]/@id)!=(((.//ancestor::fraction|ancestor::root|ancestor::sqrt|ancestor::cell|ancestor::line|ancestor::stree)[1]//*[not(*)])[last()]/@id)";t.defineRule(r,"default",i,"self::tensor",l,...o),e&&(t.defineRule(r,"brief",a,"self::tensor",l,...o),t.defineRule(r,"sbrief",a,"self::tensor",l,...o))}},e.smallRoot=function(t){let e=Object.keys(a.LOCALE.MESSAGES.MSroots).length;if(!e)return[];if(e++,!t.childNodes||0===t.childNodes.length||!t.childNodes[0].childNodes)return[];const r=t.childNodes[0].childNodes[0].textContent;if(!/^\d+$/.test(r))return[];const n=parseInt(r,10);return n>1&&n<=e?[t]:[]}},6922:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.implicitIterator=e.relationIterator=e.propagateNumber=e.checkParent_=e.NUMBER_INHIBITORS_=e.NUMBER_PROPAGATORS_=e.enlargeFence=e.indexRadical=e.closingRadical=e.openingRadical=e.radicalNestingDepth=e.nestedRadical=e.overBevelledFraction=e.overFraction=e.closingFraction=e.openingFraction=void 0;const n=r(7052),o=r(5740),i=r(5274),a=r(2105),s=r(5897),l=r(7630),c=r(9265),u=r(4356),p=r(1378);function h(t,e){const r=d(t);return 1===r?e:new Array(r).join(u.LOCALE.MESSAGES.MS.NESTED)+e}function d(t,e){const r=e||0;return t.parentNode?d(t.parentNode,"root"===t.tagName||"sqrt"===t.tagName?r+1:r):r}function f(t){const e="\u2820";if(1===t.length)return e+t;const r=t.split("");return r.every((function(t){return"\u2833"===t}))?e+r.join(e):t.slice(0,-1)+e+t.slice(-1)}function m(t,r){const n=t.parent;if(!n)return!1;const o=n.type;return-1!==e.NUMBER_PROPAGATORS_.indexOf(o)||"prefixop"===o&&"negative"===n.role&&!r.script||"prefixop"===o&&"geometry"===n.role||!("punctuated"!==o||r.enclosed&&"text"!==n.role)}function y(t,r){return t.childNodes.length?(-1!==e.NUMBER_INHIBITORS_.indexOf(t.type)&&(r.script=!0),"fenced"===t.type?(r.number=!1,r.enclosed=!0,["",r]):(m(t,r)&&(r.number=!0,r.enclosed=!1),["",r])):(m(t,r)&&(r.number=!0,r.script=!1,r.enclosed=!1),[r.number?"number":"",{number:!1,enclosed:r.enclosed,script:r.script}])}e.openingFraction=function(t){const e=p.fractionNestingDepth(t);return new Array(e).join(u.LOCALE.MESSAGES.MS.FRACTION_REPEAT)+u.LOCALE.MESSAGES.MS.FRACTION_START},e.closingFraction=function(t){const e=p.fractionNestingDepth(t);return new Array(e).join(u.LOCALE.MESSAGES.MS.FRACTION_REPEAT)+u.LOCALE.MESSAGES.MS.FRACTION_END},e.overFraction=function(t){const e=p.fractionNestingDepth(t);return new Array(e).join(u.LOCALE.MESSAGES.MS.FRACTION_REPEAT)+u.LOCALE.MESSAGES.MS.FRACTION_OVER},e.overBevelledFraction=function(t){const e=p.fractionNestingDepth(t);return new Array(e).join(u.LOCALE.MESSAGES.MS.FRACTION_REPEAT)+"\u2838"+u.LOCALE.MESSAGES.MS.FRACTION_OVER},e.nestedRadical=h,e.radicalNestingDepth=d,e.openingRadical=function(t){return h(t,u.LOCALE.MESSAGES.MS.STARTROOT)},e.closingRadical=function(t){return h(t,u.LOCALE.MESSAGES.MS.ENDROOT)},e.indexRadical=function(t){return h(t,u.LOCALE.MESSAGES.MS.ROOTINDEX)},e.enlargeFence=f,a.Grammar.getInstance().setCorrection("enlargeFence",f),e.NUMBER_PROPAGATORS_=["multirel","relseq","appl","row","line"],e.NUMBER_INHIBITORS_=["subscript","superscript","overscore","underscore"],e.checkParent_=m,e.propagateNumber=y,(0,l.register)(new c.SemanticVisitor("nemeth","number",y,{number:!0})),e.relationIterator=function(t,e){const r=t.slice(0);let a,l=!0;return a=t.length>0?i.evalXPath("../../content/*",t[0]):[],function(){const t=a.shift(),i=r.shift(),c=r[0],h=e?[n.AuditoryDescription.create({text:e},{translate:!0})]:[];if(!t)return h;const d=i?p.nestedSubSuper(i,"",{sup:u.LOCALE.MESSAGES.MS.SUPER,sub:u.LOCALE.MESSAGES.MS.SUB}):"",f=i&&"EMPTY"!==o.tagName(i)||l&&t.parentNode.parentNode&&t.parentNode.parentNode.previousSibling?[n.AuditoryDescription.create({text:"\u2800"+d},{})]:[],m=c&&"EMPTY"!==o.tagName(c)||!a.length&&t.parentNode.parentNode&&t.parentNode.parentNode.nextSibling?[n.AuditoryDescription.create({text:"\u2800"},{})]:[],y=s.default.evaluateNode(t);return l=!1,h.concat(f,y,m)}},e.implicitIterator=function(t,e){const r=t.slice(0);let a;return a=t.length>0?i.evalXPath("../../content/*",t[0]):[],function(){const t=r.shift(),i=r[0],s=a.shift(),l=e?[n.AuditoryDescription.create({text:e},{translate:!0})]:[];if(!s)return l;const c=t&&"NUMBER"===o.tagName(t),u=i&&"NUMBER"===o.tagName(i);return l.concat(c&&u&&"space"===s.getAttribute("role")?[n.AuditoryDescription.create({text:"\u2800"},{})]:[])}}},8437:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.ordinalPosition=e.vulgarFraction=e.wordCounter=e.ordinalCounter=void 0;const n=r(9536),o=r(5740),i=r(4356),a=r(4977);e.ordinalCounter=function(t,e){let r=0;return function(){return i.LOCALE.NUMBERS.numericOrdinal(++r)+" "+e}},e.wordCounter=function(t,e){let r=0;return function(){return i.LOCALE.NUMBERS.numberToOrdinal(++r,!1)+" "+e}},e.vulgarFraction=function(t){const e=(0,a.convertVulgarFraction)(t,i.LOCALE.MESSAGES.MS.FRAC_OVER);return e.convertible&&e.enumerator&&e.denominator?[new n.Span(i.LOCALE.NUMBERS.numberToWords(e.enumerator),{extid:t.childNodes[0].childNodes[0].getAttribute("extid"),separator:""}),new n.Span(i.LOCALE.NUMBERS.vulgarSep,{separator:""}),new n.Span(i.LOCALE.NUMBERS.numberToOrdinal(e.denominator,1!==e.enumerator),{extid:t.childNodes[0].childNodes[1].getAttribute("extid")})]:[new n.Span(e.content||"",{extid:t.getAttribute("extid")})]},e.ordinalPosition=function(t){const e=o.toArray(t.parentNode.childNodes);return i.LOCALE.NUMBERS.numericOrdinal(e.indexOf(t)+1).toString()}},9284:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.BrailleRules=e.OtherRules=e.PrefixRules=void 0;const n=r(1676),o=r(365),i=r(1378),a=r(6922),s=r(8437),l=r(7283);e.PrefixRules=function(){l.addStore("en.prefix.default","",{CSFordinalPosition:s.ordinalPosition})},e.OtherRules=function(){l.addStore("en.speech.chromevox","",{CTFnodeCounter:o.nodeCounter,CTFcontentIterator:o.contentIterator}),l.addStore("en.speech.emacspeak","en.speech.chromevox",{CQFvulgarFractionSmall:i.isSmallVulgarFraction,CSFvulgarFraction:s.vulgarFraction})},e.BrailleRules=function(){l.addStore("nemeth.braille.default",n.DynamicCstr.BASE_LOCALE+".speech.mathspeak",{CSFopenFraction:a.openingFraction,CSFcloseFraction:a.closingFraction,CSFoverFraction:a.overFraction,CSFoverBevFraction:a.overBevelledFraction,CSFopenRadical:a.openingRadical,CSFcloseRadical:a.closingRadical,CSFindexRadical:a.indexRadical,CSFsubscript:i.subscriptVerbose,CSFsuperscript:i.superscriptVerbose,CSFbaseline:i.baselineVerbose,CGFtensorRules:t=>i.generateTensorRules(t,!1),CTFrelationIterator:a.relationIterator,CTFimplicitIterator:a.implicitIterator})}},7599:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.init=e.INIT_=void 0;const n=r(5425),o=r(9577),i=r(9284);e.INIT_=!1,e.init=function(){e.INIT_||((0,o.MathspeakRules)(),(0,n.ClearspeakRules)(),(0,i.PrefixRules)(),(0,i.OtherRules)(),(0,i.BrailleRules)(),e.INIT_=!0)}},7283:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.getStore=e.addStore=e.funcStore=void 0;const n=r(1676);e.funcStore=new Map,e.addStore=function(t,r,n){const o={};if(r){const t=e.funcStore.get(r)||{};Object.assign(o,t)}e.funcStore.set(t,Object.assign(o,n))},e.getStore=function(t,r,o){return e.funcStore.get([t,r,o].join("."))||e.funcStore.get([n.DynamicCstr.DEFAULT_VALUES[n.Axis.LOCALE],r,o].join("."))||e.funcStore.get([n.DynamicCstr.BASE_LOCALE,r,o].join("."))||{}}},7598:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.oneLeft=e.leftMostUnit=e.rightMostUnit=e.unitMultipliers=void 0;const n=r(7052),o=r(5274),i=r(4356);e.unitMultipliers=function(t,e){const r=t;let o=0;return function(){const t=n.AuditoryDescription.create({text:s(r[o])&&l(r[o+1])?i.LOCALE.MESSAGES.unitTimes:""},{});return o++,[t]}};const a=["superscript","subscript","overscore","underscore"];function s(t){for(;t;){if("unit"===t.getAttribute("role"))return!0;const e=t.tagName,r=o.evalXPath("children/*",t);t=-1!==a.indexOf(e)?r[0]:r[r.length-1]}return!1}function l(t){for(;t;){if("unit"===t.getAttribute("role"))return!0;t=o.evalXPath("children/*",t)[0]}return!1}e.rightMostUnit=s,e.leftMostUnit=l,e.oneLeft=function(t){for(;t;){if("number"===t.tagName&&"1"===t.textContent)return[t];if("infixop"!==t.tagName||"multiplication"!==t.getAttribute("role")&&"implicit"!==t.getAttribute("role"))return[];t=o.evalXPath("children/*",t)[0]}return[]}},3284:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractWalker=void 0;const n=r(7052),o=r(8290),i=r(5740),a=r(4440),s=r(6828),l=r(8496),c=r(2298),u=r(4356),p=r(2105),h=r(5656),d=r(9552),f=r(9543),m=r(8504),y=r(7730),g=r(1214),b=r(179),v=r(1204),_=r(5274);class S{constructor(t,e,r,n){this.node=t,this.generator=e,this.highlighter=r,this.modifier=!1,this.keyMapping=new Map([[l.KeyCode.UP,this.up.bind(this)],[l.KeyCode.DOWN,this.down.bind(this)],[l.KeyCode.RIGHT,this.right.bind(this)],[l.KeyCode.LEFT,this.left.bind(this)],[l.KeyCode.TAB,this.repeat.bind(this)],[l.KeyCode.DASH,this.expand.bind(this)],[l.KeyCode.SPACE,this.depth.bind(this)],[l.KeyCode.HOME,this.home.bind(this)],[l.KeyCode.X,this.summary.bind(this)],[l.KeyCode.Z,this.detail.bind(this)],[l.KeyCode.V,this.virtualize.bind(this)],[l.KeyCode.P,this.previous.bind(this)],[l.KeyCode.U,this.undo.bind(this)],[l.KeyCode.LESS,this.previousRules.bind(this)],[l.KeyCode.GREATER,this.nextRules.bind(this)]]),this.cursors=[],this.xml_=null,this.rebuilt_=null,this.focus_=null,this.active_=!1,this.node.id?this.id=this.node.id:this.node.hasAttribute(S.SRE_ID_ATTR)?this.id=this.node.getAttribute(S.SRE_ID_ATTR):(this.node.setAttribute(S.SRE_ID_ATTR,S.ID_COUNTER.toString()),this.id=S.ID_COUNTER++),this.rootNode=v.getSemanticRoot(t),this.rootId=this.rootNode.getAttribute(c.Attribute.ID),this.xmlString_=n,this.moved=b.WalkerMoves.ENTER}getXml(){return this.xml_||(this.xml_=i.parseInput(this.xmlString_)),this.xml_}getRebuilt(){return this.rebuilt_||this.rebuildStree(),this.rebuilt_}isActive(){return this.active_}activate(){this.isActive()||(this.generator.start(),this.toggleActive_())}deactivate(){this.isActive()&&(b.WalkerState.setState(this.id,this.primaryId()),this.generator.end(),this.toggleActive_())}getFocus(t=!1){return this.focus_||(this.focus_=this.singletonFocus(this.rootId)),t&&this.updateFocus(),this.focus_}setFocus(t){this.focus_=t}getDepth(){return this.levels.depth()-1}isSpeech(){return this.generator.modality===c.Attribute.SPEECH}focusDomNodes(){return this.getFocus().getDomNodes()}focusSemanticNodes(){return this.getFocus().getSemanticNodes()}speech(){const t=this.focusDomNodes();if(!t.length)return"";const e=this.specialMove();if(null!==e)return e;switch(this.moved){case b.WalkerMoves.DEPTH:return this.depth_();case b.WalkerMoves.SUMMARY:return this.summary_();case b.WalkerMoves.DETAIL:return this.detail_();default:{const e=[],r=this.focusSemanticNodes();for(let n=0,o=t.length;n0}restoreState(){if(!this.highlighter)return;const t=b.WalkerState.getState(this.id);if(!t)return;let e=this.getRebuilt().nodeDict[t];const r=[];for(;e;)r.push(e.id),e=e.parent;for(r.pop();r.length>0;){this.down();const t=r.pop(),e=this.findFocusOnLevel(t);if(!e)break;this.setFocus(e)}this.moved=b.WalkerMoves.ENTER}updateFocus(){this.setFocus(y.Focus.factory(this.getFocus().getSemanticPrimary().id.toString(),this.getFocus().getSemanticNodes().map((t=>t.id.toString())),this.getRebuilt(),this.node))}rebuildStree(){this.rebuilt_=new g.RebuildStree(this.getXml()),this.rootId=this.rebuilt_.stree.root.id.toString(),this.generator.setRebuilt(this.rebuilt_),this.skeleton=h.SemanticSkeleton.fromTree(this.rebuilt_.stree),this.skeleton.populate(),this.focus_=this.singletonFocus(this.rootId),this.levels=this.initLevels(),f.connectMactions(this.node,this.getXml(),this.rebuilt_.xml)}previousLevel(){const t=this.getFocus().getDomPrimary();return t?v.getAttribute(t,c.Attribute.PARENT):this.getFocus().getSemanticPrimary().parent.id.toString()}nextLevel(){const t=this.getFocus().getDomPrimary();let e,r;if(t){e=v.splitAttribute(v.getAttribute(t,c.Attribute.CHILDREN)),r=v.splitAttribute(v.getAttribute(t,c.Attribute.CONTENT));const n=v.getAttribute(t,c.Attribute.TYPE),o=v.getAttribute(t,c.Attribute.ROLE);return this.combineContentChildren(n,o,r,e)}const n=t=>t.id.toString(),o=this.getRebuilt().nodeDict[this.primaryId()];return e=o.childNodes.map(n),r=o.contentNodes.map(n),0===e.length?[]:this.combineContentChildren(o.type,o.role,r,e)}singletonFocus(t){this.getRebuilt();const e=this.retrieveVisuals(t);return this.focusFromId(t,e)}retrieveVisuals(t){if(!this.skeleton)return[t];const e=parseInt(t,10),r=this.skeleton.subtreeNodes(e);if(!r.length)return[t];r.unshift(e);const n={},o=[];_.updateEvaluator(this.getXml());for(const t of r)n[t]||(o.push(t.toString()),n[t]=!0,this.subtreeIds(t,n));return o}subtreeIds(t,e){const r=_.evalXPath(`//*[@data-semantic-id="${t}"]`,this.getXml());_.evalXPath("*//@data-semantic-id",r[0]).forEach((t=>e[parseInt(t.textContent,10)]=!0))}focusFromId(t,e){return y.Focus.factory(t,e,this.getRebuilt(),this.node)}summary(){return this.moved=this.isSpeech()?b.WalkerMoves.SUMMARY:b.WalkerMoves.REPEAT,this.getFocus().clone()}detail(){return this.moved=this.isSpeech()?b.WalkerMoves.DETAIL:b.WalkerMoves.REPEAT,this.getFocus().clone()}specialMove(){return null}virtualize(t){return this.cursors.push({focus:this.getFocus(),levels:this.levels,undo:t||!this.cursors.length}),this.levels=this.levels.clone(),this.getFocus().clone()}previous(){const t=this.cursors.pop();return t?(this.levels=t.levels,t.focus):this.getFocus()}undo(){let t;do{t=this.cursors.pop()}while(t&&!t.undo);return t?(this.levels=t.levels,t.focus):this.getFocus()}update(t){this.generator.setOptions(t),(0,s.setup)(t).then((()=>d.generator("Tree").getSpeech(this.node,this.getXml())))}nextRules(){const t=this.generator.getOptions();return"speech"!==t.modality?this.getFocus():(a.DOMAIN_TO_STYLES[t.domain]=t.style,t.domain="mathspeak"===t.domain?"clearspeak":"mathspeak",t.style=a.DOMAIN_TO_STYLES[t.domain],this.update(t),this.moved=b.WalkerMoves.REPEAT,this.getFocus().clone())}nextStyle(t,e){if("mathspeak"===t){const t=["default","brief","sbrief"],r=t.indexOf(e);return-1===r?e:r>=t.length-1?t[0]:t[r+1]}if("clearspeak"===t){const t=m.ClearspeakPreferences.getLocalePreferences().en;if(!t)return"default";const r=m.ClearspeakPreferences.relevantPreferences(this.getFocus().getSemanticPrimary()),n=m.ClearspeakPreferences.findPreference(e,r),o=t[r].map((function(t){return t.split("_")[1]})),i=o.indexOf(n);if(-1===i)return e;const a=i>=o.length-1?o[0]:o[i+1];return m.ClearspeakPreferences.addPreference(e,r,a)}return e}previousRules(){const t=this.generator.getOptions();return"speech"!==t.modality?this.getFocus():(t.style=this.nextStyle(t.domain,t.style),this.update(t),this.moved=b.WalkerMoves.REPEAT,this.getFocus().clone())}refocus(){let t,e=this.getFocus();for(;!e.getNodes().length;){t=this.levels.peek();const r=this.up();if(!r)break;this.setFocus(r),e=this.getFocus(!0)}this.levels.push(t),this.setFocus(e)}toggleActive_(){this.active_=!this.active_}mergePrefix_(t,e=[]){const r=this.isSpeech()?this.prefix_():"";r&&t.unshift(r);const n=this.isSpeech()?this.postfix_():"";return n&&t.push(n),o.finalize(o.merge(e.concat(t)))}prefix_(){const t=this.getFocus().getDomNodes(),e=this.getFocus().getSemanticNodes();return t[0]?v.getAttribute(t[0],c.Attribute.PREFIX):f.retrievePrefix(e[0])}postfix_(){const t=this.getFocus().getDomNodes();return t[0]?v.getAttribute(t[0],c.Attribute.POSTFIX):""}depth_(){const t=p.Grammar.getInstance().getParameter("depth");p.Grammar.getInstance().setParameter("depth",!0);const e=this.getFocus().getDomPrimary(),r=this.expandable(e)?u.LOCALE.MESSAGES.navigate.EXPANDABLE:this.collapsible(e)?u.LOCALE.MESSAGES.navigate.COLLAPSIBLE:"",i=u.LOCALE.MESSAGES.navigate.LEVEL+" "+this.getDepth(),a=this.getFocus().getSemanticNodes(),s=f.retrievePrefix(a[0]),l=[new n.AuditoryDescription({text:i,personality:{}}),new n.AuditoryDescription({text:s,personality:{}}),new n.AuditoryDescription({text:r,personality:{}})];return p.Grammar.getInstance().setParameter("depth",t),o.finalize(o.markup(l))}actionable_(t){const e=null==t?void 0:t.parentNode;return e&&this.highlighter.isMactionNode(e)?e:null}summary_(){const t=this.getFocus().getSemanticPrimary().id.toString(),e=this.getRebuilt().xml.getAttribute("id")===t?this.getRebuilt().xml:i.querySelectorAllByAttrValue(this.getRebuilt().xml,"id",t)[0],r=f.retrieveSummary(e);return this.mergePrefix_([r])}detail_(){const t=this.getFocus().getSemanticPrimary().id.toString(),e=this.getRebuilt().xml.getAttribute("id")===t?this.getRebuilt().xml:i.querySelectorAllByAttrValue(this.getRebuilt().xml,"id",t)[0],r=e.getAttribute("alternative");e.removeAttribute("alternative");const n=f.computeMarkup(e),o=this.mergePrefix_([n]);return e.setAttribute("alternative",r),o}}e.AbstractWalker=S,S.ID_COUNTER=0,S.SRE_ID_ATTR="sre-explorer-id"},162:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.DummyWalker=void 0;const n=r(3284);class o extends n.AbstractWalker{up(){return null}down(){return null}left(){return null}right(){return null}repeat(){return null}depth(){return null}home(){return null}getDepth(){return 0}initLevels(){return null}combineContentChildren(t,e,r,n){return[]}findFocusOnLevel(t){return null}}e.DummyWalker=o},7730:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.Focus=void 0;const n=r(1204);class o{constructor(t,e){this.nodes=t,this.primary=e,this.domNodes=[],this.domPrimary_=null,this.allNodes=[]}static factory(t,e,r,i){const a=t=>n.getBySemanticId(i,t),s=r.nodeDict,l=a(t),c=e.map(a),u=e.map((function(t){return s[t]})),p=new o(u,s[t]);return p.domNodes=c,p.domPrimary_=l,p.allNodes=o.generateAllVisibleNodes_(e,c,s,i),p}static generateAllVisibleNodes_(t,e,r,i){const a=t=>n.getBySemanticId(i,t);let s=[];for(let n=0,l=t.length;n=e.length?null:e[t]}depth(){return this.level_.length}clone(){const t=new r;return t.level_=this.level_.slice(0),t}toString(){let t="";for(let e,r=0;e=this.level_[r];r++)t+="\n"+e.map((function(t){return t.toString()}));return t}}e.Levels=r},1214:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.RebuildStree=void 0;const n=r(5740),o=r(2298),i=r(3588),a=r(6537),s=r(3308),l=r(5656),c=r(7075),u=r(4795),p=r(1204);class h{constructor(t){this.mathml=t,this.factory=new a.SemanticNodeFactory,this.nodeDict={},this.mmlRoot=p.getSemanticRoot(t),this.streeRoot=this.assembleTree(this.mmlRoot),this.stree=c.SemanticTree.fromNode(this.streeRoot,this.mathml),this.xml=this.stree.xml(),s.default.getInstance().setNodeFactory(this.factory)}static addAttributes(t,e,r){r&&1===e.childNodes.length&&e.childNodes[0].nodeType!==n.NodeType.TEXT_NODE&&u.addAttributes(t,e.childNodes[0]),u.addAttributes(t,e)}static textContent(t,e,r){if(!r&&e.textContent)return void(t.textContent=e.textContent);const n=p.splitAttribute(p.getAttribute(e,o.Attribute.OPERATOR));n.length>1&&(t.textContent=n[1])}static isPunctuated(t){return!l.SemanticSkeleton.simpleCollapseStructure(t)&&t[1]&&l.SemanticSkeleton.contentCollapseStructure(t[1])}getTree(){return this.stree}assembleTree(t){const e=this.makeNode(t),r=p.splitAttribute(p.getAttribute(t,o.Attribute.CHILDREN)),n=p.splitAttribute(p.getAttribute(t,o.Attribute.CONTENT));if(h.addAttributes(e,t,!(r.length||n.length)),0===n.length&&0===r.length)return h.textContent(e,t),e;if(n.length>0){const t=p.getBySemanticId(this.mathml,n[0]);t&&h.textContent(e,t,!0)}e.contentNodes=n.map((t=>this.setParent(t,e))),e.childNodes=r.map((t=>this.setParent(t,e)));const i=p.getAttribute(t,o.Attribute.COLLAPSED);return i?this.postProcess(e,i):e}makeNode(t){const e=p.getAttribute(t,o.Attribute.TYPE),r=p.getAttribute(t,o.Attribute.ROLE),n=p.getAttribute(t,o.Attribute.FONT),i=p.getAttribute(t,o.Attribute.ANNOTATION)||"",a=p.getAttribute(t,o.Attribute.ID),s=p.getAttribute(t,o.Attribute.EMBELLISHED),l=p.getAttribute(t,o.Attribute.FENCEPOINTER),c=this.createNode(parseInt(a,10));return c.type=e,c.role=r,c.font=n||"unknown",c.parseAnnotation(i),l&&(c.fencePointer=l),s&&(c.embellished=s),c}makePunctuation(t){const e=this.createNode(t);return e.updateContent((0,i.invisibleComma)()),e.role="dummy",e}makePunctuated(t,e,r){const n=this.createNode(e[0]);n.type="punctuated",n.embellished=t.embellished,n.fencePointer=t.fencePointer,n.role=r;const o=e.splice(1,1)[0].slice(1);n.contentNodes=o.map(this.makePunctuation.bind(this)),this.collapsedChildren_(e)}makeEmpty(t,e,r){const n=this.createNode(e);n.type="empty",n.embellished=t.embellished,n.fencePointer=t.fencePointer,n.role=r}makeIndex(t,e,r){if(h.isPunctuated(e))return this.makePunctuated(t,e,r),void(e=e[0]);l.SemanticSkeleton.simpleCollapseStructure(e)&&!this.nodeDict[e.toString()]&&this.makeEmpty(t,e,r)}postProcess(t,e){const r=l.SemanticSkeleton.fromString(e).array;if("subsup"===t.type){const e=this.createNode(r[1][0]);return e.type="subscript",e.role="subsup",t.type="superscript",e.embellished=t.embellished,e.fencePointer=t.fencePointer,this.makeIndex(t,r[1][2],"rightsub"),this.makeIndex(t,r[2],"rightsuper"),this.collapsedChildren_(r),t}if("subscript"===t.type)return this.makeIndex(t,r[2],"rightsub"),this.collapsedChildren_(r),t;if("superscript"===t.type)return this.makeIndex(t,r[2],"rightsuper"),this.collapsedChildren_(r),t;if("tensor"===t.type)return this.makeIndex(t,r[2],"leftsub"),this.makeIndex(t,r[3],"leftsuper"),this.makeIndex(t,r[4],"rightsub"),this.makeIndex(t,r[5],"rightsuper"),this.collapsedChildren_(r),t;if("punctuated"===t.type){if(h.isPunctuated(r)){const e=r.splice(1,1)[0].slice(1);t.contentNodes=e.map(this.makePunctuation.bind(this))}return t}if("underover"===t.type){const e=this.createNode(r[1][0]);return"overaccent"===t.childNodes[1].role?(e.type="overscore",t.type="underscore"):(e.type="underscore",t.type="overscore"),e.role="underover",e.embellished=t.embellished,e.fencePointer=t.fencePointer,this.collapsedChildren_(r),t}return t}createNode(t){const e=this.factory.makeNode(t);return this.nodeDict[t.toString()]=e,e}collapsedChildren_(t){const e=t=>{const r=this.nodeDict[t[0]];r.childNodes=[];for(let n=1,o=t.length;ne.getSemanticPrimary().id===t))}}e.SemanticWalker=i},9806:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.SyntaxWalker=void 0;const n=r(707),o=r(3284),i=r(9797);class a extends o.AbstractWalker{constructor(t,e,r,n){super(t,e,r,n),this.node=t,this.generator=e,this.highlighter=r,this.levels=null,this.restoreState()}initLevels(){const t=new i.Levels;return t.push([this.primaryId()]),t}up(){super.up();const t=this.previousLevel();return t?(this.levels.pop(),this.singletonFocus(t)):null}down(){super.down();const t=this.nextLevel();if(0===t.length)return null;const e=this.singletonFocus(t[0]);return e&&this.levels.push(t),e}combineContentChildren(t,e,r,o){switch(t){case"relseq":case"infixop":case"multirel":return(0,n.interleaveLists)(o,r);case"prefixop":return r.concat(o);case"postfixop":return o.concat(r);case"matrix":case"vector":case"fenced":return o.unshift(r[0]),o.push(r[1]),o;case"cases":return o.unshift(r[0]),o;case"punctuated":return"text"===e?(0,n.interleaveLists)(o,r):o;case"appl":return[o[0],r[0],o[1]];case"root":return[o[1],o[0]];default:return o}}left(){super.left();const t=this.levels.indexOf(this.primaryId());if(null===t)return null;const e=this.levels.get(t-1);return e?this.singletonFocus(e):null}right(){super.right();const t=this.levels.indexOf(this.primaryId());if(null===t)return null;const e=this.levels.get(t+1);return e?this.singletonFocus(e):null}findFocusOnLevel(t){return this.singletonFocus(t.toString())}focusDomNodes(){return[this.getFocus().getDomPrimary()]}focusSemanticNodes(){return[this.getFocus().getSemanticPrimary()]}}e.SyntaxWalker=a},1799:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.TableWalker=void 0;const n=r(5740),o=r(8496),i=r(9806),a=r(179);class s extends i.SyntaxWalker{constructor(t,e,r,n){super(t,e,r,n),this.node=t,this.generator=e,this.highlighter=r,this.firstJump=null,this.key_=null,this.row_=0,this.currentTable_=null,this.keyMapping.set(o.KeyCode.ZERO,this.jumpCell.bind(this)),this.keyMapping.set(o.KeyCode.ONE,this.jumpCell.bind(this)),this.keyMapping.set(o.KeyCode.TWO,this.jumpCell.bind(this)),this.keyMapping.set(o.KeyCode.THREE,this.jumpCell.bind(this)),this.keyMapping.set(o.KeyCode.FOUR,this.jumpCell.bind(this)),this.keyMapping.set(o.KeyCode.FIVE,this.jumpCell.bind(this)),this.keyMapping.set(o.KeyCode.SIX,this.jumpCell.bind(this)),this.keyMapping.set(o.KeyCode.SEVEN,this.jumpCell.bind(this)),this.keyMapping.set(o.KeyCode.EIGHT,this.jumpCell.bind(this)),this.keyMapping.set(o.KeyCode.NINE,this.jumpCell.bind(this))}move(t){this.key_=t;const e=super.move(t);return this.modifier=!1,e}up(){return this.moved=a.WalkerMoves.UP,this.eligibleCell_()?this.verticalMove_(!1):super.up()}down(){return this.moved=a.WalkerMoves.DOWN,this.eligibleCell_()?this.verticalMove_(!0):super.down()}jumpCell(){if(!this.isInTable_()||null===this.key_)return this.getFocus();if(this.moved===a.WalkerMoves.ROW){this.moved=a.WalkerMoves.CELL;const t=this.key_-o.KeyCode.ZERO;return this.isLegalJump_(this.row_,t)?this.jumpCell_(this.row_,t):this.getFocus()}const t=this.key_-o.KeyCode.ZERO;return t>this.currentTable_.childNodes.length?this.getFocus():(this.row_=t,this.moved=a.WalkerMoves.ROW,this.getFocus().clone())}undo(){const t=super.undo();return t===this.firstJump&&(this.firstJump=null),t}eligibleCell_(){const t=this.getFocus().getSemanticPrimary();return this.modifier&&"cell"===t.type&&-1!==s.ELIGIBLE_CELL_ROLES.indexOf(t.role)}verticalMove_(t){const e=this.previousLevel();if(!e)return null;const r=this.getFocus(),n=this.levels.indexOf(this.primaryId()),o=this.levels.pop(),i=this.levels.indexOf(e),a=this.levels.get(t?i+1:i-1);if(!a)return this.levels.push(o),null;this.setFocus(this.singletonFocus(a));const s=this.nextLevel();return s[n]?(this.levels.push(s),this.singletonFocus(s[n])):(this.setFocus(r),this.levels.push(o),null)}jumpCell_(t,e){this.firstJump?this.virtualize(!1):(this.firstJump=this.getFocus(),this.virtualize(!0));const r=this.currentTable_.id.toString();let n;do{n=this.levels.pop()}while(-1===n.indexOf(r));this.levels.push(n),this.setFocus(this.singletonFocus(r)),this.levels.push(this.nextLevel());const o=this.currentTable_.childNodes[t-1];return this.setFocus(this.singletonFocus(o.id.toString())),this.levels.push(this.nextLevel()),this.singletonFocus(o.childNodes[e-1].id.toString())}isLegalJump_(t,e){const r=n.querySelectorAllByAttrValue(this.getRebuilt().xml,"id",this.currentTable_.id.toString())[0];if(!r||r.hasAttribute("alternative"))return!1;const o=this.currentTable_.childNodes[t-1];if(!o)return!1;const i=n.querySelectorAllByAttrValue(r,"id",o.id.toString())[0];return!(!i||i.hasAttribute("alternative"))&&!(!o||!o.childNodes[e-1])}isInTable_(){let t=this.getFocus().getSemanticPrimary();for(;t;){if(-1!==s.ELIGIBLE_TABLE_TYPES.indexOf(t.type))return this.currentTable_=t,!0;t=t.parent}return!1}}e.TableWalker=s,s.ELIGIBLE_CELL_ROLES=["determinant","rowvector","binomial","squarematrix","multiline","matrix","vector","cases","table"],s.ELIGIBLE_TABLE_TYPES=["multiline","matrix","vector","cases","table"]},179:function(t,e){Object.defineProperty(e,"__esModule",{value:!0}),e.WalkerState=e.WalkerMoves=void 0,function(t){t.UP="up",t.DOWN="down",t.LEFT="left",t.RIGHT="right",t.REPEAT="repeat",t.DEPTH="depth",t.ENTER="enter",t.EXPAND="expand",t.HOME="home",t.SUMMARY="summary",t.DETAIL="detail",t.ROW="row",t.CELL="cell"}(e.WalkerMoves||(e.WalkerMoves={}));class r{static resetState(t){delete r.STATE[t]}static setState(t,e){r.STATE[t]=e}static getState(t){return r.STATE[t]}}e.WalkerState=r,r.STATE={}},3362:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.walkerMapping_=e.walker=void 0;const n=r(162),o=r(6295),i=r(9806),a=r(1799);e.walker=function(t,r,n,o,i){return(e.walkerMapping_[t.toLowerCase()]||e.walkerMapping_.dummy)(r,n,o,i)},e.walkerMapping_={dummy:(t,e,r,o)=>new n.DummyWalker(t,e,r,o),semantic:(t,e,r,n)=>new o.SemanticWalker(t,e,r,n),syntax:(t,e,r,n)=>new i.SyntaxWalker(t,e,r,n),table:(t,e,r,n)=>new a.TableWalker(t,e,r,n)}},1204:function(t,e,r){Object.defineProperty(e,"__esModule",{value:!0}),e.getBySemanticId=e.getSemanticRoot=e.getAttribute=e.splitAttribute=void 0;const n=r(5740),o=r(2298);e.splitAttribute=function(t){return t?t.split(/,/):[]},e.getAttribute=function(t,e){return t.getAttribute(e)},e.getSemanticRoot=function(t){if(t.hasAttribute(o.Attribute.TYPE)&&!t.hasAttribute(o.Attribute.PARENT))return t;const e=n.querySelectorAllByAttr(t,o.Attribute.TYPE);for(let t,r=0;t=e[r];r++)if(!t.hasAttribute(o.Attribute.PARENT))return t;return t},e.getBySemanticId=function(t,e){return t.getAttribute(o.Attribute.ID)===e?t:n.querySelectorAllByAttrValue(t,o.Attribute.ID,e)[0]}}},__webpack_module_cache__={};function __webpack_require__(t){var e=__webpack_module_cache__[t];if(void 0!==e)return e.exports;var r=__webpack_module_cache__[t]={exports:{}};return __webpack_modules__[t].call(r.exports,r,r.exports,__webpack_require__),r.exports}__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}();var __webpack_exports__={};!function(){var t=__webpack_require__(9515),e=__webpack_require__(3282),r=__webpack_require__(235),n=__webpack_require__(265),o=__webpack_require__(2388);function i(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r0&&void 0!==arguments[0]?arguments[0]:[],e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(MathJax.startup){e&&(MathJax.startup.registerConstructor("tex",MathJax._.input.tex_ts.TeX),MathJax.startup.useInput("tex")),MathJax.config.tex||(MathJax.config.tex={});var r=MathJax.config.tex.packages;MathJax.config.tex.packages=t,r&&(0,Ot.insert)(MathJax.config.tex,{packages:r})}}function ar(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);rt.length)&&(e=t.length);for(var r=0,n=new Array(e);rWr in ln?XY(ln,Wr,{enumerable:!0,configurable:!0,writable:!0,value:Bi}):ln[Wr]=Bi;var za=(ln,Wr,Bi)=>(KY(ln,typeof Wr!="symbol"?Wr+"":Wr,Bi),Bi);var ln=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Wr(t){throw new Error('Could not dynamically require "'+t+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var Bi={exports:{}};(function(t,e){(function(r,n){t.exports=n()})(ln,function(){var r;function n(){return r.apply(null,arguments)}function i(h){return h instanceof Array||Object.prototype.toString.call(h)==="[object Array]"}function s(h){return h!=null&&Object.prototype.toString.call(h)==="[object Object]"}function a(h,y){return Object.prototype.hasOwnProperty.call(h,y)}function o(h){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(h).length===0;for(var y in h)if(a(h,y))return;return 1}function l(h){return h===void 0}function u(h){return typeof h=="number"||Object.prototype.toString.call(h)==="[object Number]"}function d(h){return h instanceof Date||Object.prototype.toString.call(h)==="[object Date]"}function f(h,y){for(var _=[],S=h.length,R=0;R>>0,S=0;S<_;S++)if(S in y&&h.call(this,y[S],S,y))return!0;return!1},E=n.momentProperties=[],I=!1;function V(h,y){var _,S,R,it=E.length;if(l(y._isAMomentObject)||(h._isAMomentObject=y._isAMomentObject),l(y._i)||(h._i=y._i),l(y._f)||(h._f=y._f),l(y._l)||(h._l=y._l),l(y._strict)||(h._strict=y._strict),l(y._tzm)||(h._tzm=y._tzm),l(y._isUTC)||(h._isUTC=y._isUTC),l(y._offset)||(h._offset=y._offset),l(y._pf)||(h._pf=b(y)),l(y._locale)||(h._locale=y._locale),0Jt(h)?(it=h+1,mt-Jt(h)):(it=h,mt);return{year:it,dayOfYear:Ct}}function Be(h,y,_){var S,R,it=De(h.year(),y,_),it=Math.floor((h.dayOfYear()-it-1)/7)+1;return it<1?S=it+Re(R=h.year()-1,y,_):it>Re(h.year(),y,_)?(S=it-Re(h.year(),y,_),R=h.year()+1):(R=h.year(),S=it),{week:S,year:R}}function Re(h,R,_){var S=De(h,R,_),R=De(h+1,R,_);return(Jt(h)-S+R)/7}j("w",["ww",2],"wo","week"),j("W",["WW",2],"Wo","isoWeek"),ut("week","w"),ut("isoWeek","W"),P("week",5),P("isoWeek",5),st("w",U),st("ww",U,ce),st("W",U),st("WW",U,ce),Ee(["w","ww","W","WW"],function(h,y,_,S){y[S.substr(0,1)]=F(h)});function Pe(h,y){return h.slice(y,7).concat(h.slice(0,y))}j("d",0,"do","day"),j("dd",0,0,function(h){return this.localeData().weekdaysMin(this,h)}),j("ddd",0,0,function(h){return this.localeData().weekdaysShort(this,h)}),j("dddd",0,0,function(h){return this.localeData().weekdays(this,h)}),j("e",0,0,"weekday"),j("E",0,0,"isoWeekday"),ut("day","d"),ut("weekday","e"),ut("isoWeekday","E"),P("day",11),P("weekday",11),P("isoWeekday",11),st("d",U),st("e",U),st("E",U),st("dd",function(h,y){return y.weekdaysMinRegex(h)}),st("ddd",function(h,y){return y.weekdaysShortRegex(h)}),st("dddd",function(h,y){return y.weekdaysRegex(h)}),Ee(["dd","ddd","dddd"],function(h,y,_,S){S=_._locale.weekdaysParse(h,S,_._strict),S!=null?y.d=S:b(_).invalidWeekday=h}),Ee(["d","e","E"],function(h,y,_,S){y[S]=F(h)});var Ye="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Ie="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),$e="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ar=pt,zt=pt,Z=pt;function At(){function h(It,ue){return ue.length-It.length}for(var y,_,S,R=[],it=[],mt=[],Ct=[],Pt=0;Pt<7;Pt++)S=g([2e3,1]).day(Pt),y=Xt(this.weekdaysMin(S,"")),_=Xt(this.weekdaysShort(S,"")),S=Xt(this.weekdays(S,"")),R.push(y),it.push(_),mt.push(S),Ct.push(y),Ct.push(_),Ct.push(S);R.sort(h),it.sort(h),mt.sort(h),Ct.sort(h),this._weekdaysRegex=new RegExp("^("+Ct.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+mt.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+it.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+R.join("|")+")","i")}function Nt(){return this.hours()%12||12}function pe(h,y){j(h,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),y)})}function Me(h,y){return y._meridiemParse}j("H",["HH",2],0,"hour"),j("h",["hh",2],0,Nt),j("k",["kk",2],0,function(){return this.hours()||24}),j("hmm",0,0,function(){return""+Nt.apply(this)+Q(this.minutes(),2)}),j("hmmss",0,0,function(){return""+Nt.apply(this)+Q(this.minutes(),2)+Q(this.seconds(),2)}),j("Hmm",0,0,function(){return""+this.hours()+Q(this.minutes(),2)}),j("Hmmss",0,0,function(){return""+this.hours()+Q(this.minutes(),2)+Q(this.seconds(),2)}),pe("a",!0),pe("A",!1),ut("hour","h"),P("hour",13),st("a",Me),st("A",Me),st("H",U),st("h",U),st("k",U),st("HH",U,ce),st("hh",U,ce),st("kk",U,ce),st("hmm",Yt),st("hmmss",et),st("Hmm",Yt),st("Hmmss",et),Gt(["H","HH"],ft),Gt(["k","kk"],function(h,y,_){h=F(h),y[ft]=h===24?0:h}),Gt(["a","A"],function(h,y,_){_._isPm=_._locale.isPM(h),_._meridiem=h}),Gt(["h","hh"],function(h,y,_){y[ft]=F(h),b(_).bigHour=!0}),Gt("hmm",function(h,y,_){var S=h.length-2;y[ft]=F(h.substr(0,S)),y[Lt]=F(h.substr(S)),b(_).bigHour=!0}),Gt("hmmss",function(h,y,_){var S=h.length-4,R=h.length-2;y[ft]=F(h.substr(0,S)),y[Lt]=F(h.substr(S,2)),y[bt]=F(h.substr(R)),b(_).bigHour=!0}),Gt("Hmm",function(h,y,_){var S=h.length-2;y[ft]=F(h.substr(0,S)),y[Lt]=F(h.substr(S))}),Gt("Hmmss",function(h,y,_){var S=h.length-4,R=h.length-2;y[ft]=F(h.substr(0,S)),y[Lt]=F(h.substr(S,2)),y[bt]=F(h.substr(R))}),pt=O("Hours",!0);var Le,We={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:ee,monthsShort:fe,week:{dow:0,doy:6},weekdays:Ye,weekdaysMin:$e,weekdaysShort:Ie,meridiemParse:/[ap]\.?m?\.?/i},ve={},Ne={};function Xi(h){return h&&h.toLowerCase().replace("_","-")}function Ki(h){for(var y,_,S,R,it=0;it=y&&function(mt,Ct){for(var Pt=Math.min(mt.length,Ct.length),It=0;It=y-1)break;y--}it++}return Le}function zr(h){var y;if(ve[h]===void 0&&!0&&t&&t.exports&&h.match("^[^/\\\\]*$")!=null)try{y=Le._abbr,Wr("./locale/"+h),qt(y)}catch{ve[h]=null}return ve[h]}function qt(h,y){return h&&((y=l(y)?oe(h):te(h,y))?Le=y:typeof console<"u"&&console.warn&&console.warn("Locale "+h+" not found. Did you forget to load it?")),Le._abbr}function te(h,y){if(y===null)return delete ve[h],null;var _,S=We;if(y.abbr=h,ve[h]!=null)D("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),S=ve[h]._config;else if(y.parentLocale!=null)if(ve[y.parentLocale]!=null)S=ve[y.parentLocale]._config;else{if((_=zr(y.parentLocale))==null)return Ne[y.parentLocale]||(Ne[y.parentLocale]=[]),Ne[y.parentLocale].push({name:h,config:y}),null;S=_._config}return ve[h]=new M(v(S,y)),Ne[h]&&Ne[h].forEach(function(R){te(R.name,R.config)}),qt(h),ve[h]}function oe(h){var y;if(!(h=h&&h._locale&&h._locale._abbr?h._locale._abbr:h))return Le;if(!i(h)){if(y=zr(h))return y;h=[h]}return Ki(h)}function Rt(h){var y=h._a;return y&&b(h).overflow===-2&&(y=y[Ft]<0||11dt(y[Vt],y[Ft])?xt:y[ft]<0||24Re(it,Pt,It)?b(S)._overflowWeeks=!0:ue!=null?b(S)._overflowWeekday=!0:(re=ae(it,mt,Ct,Pt,It),S._a[Vt]=re.year,S._dayOfYear=re.dayOfYear)),h._dayOfYear!=null&&(R=Qn(h._a[Vt],_[Vt]),(h._dayOfYear>Jt(R)||h._dayOfYear===0)&&(b(h)._overflowDayOfYear=!0),ue=Xr(R,0,h._dayOfYear),h._a[Ft]=ue.getUTCMonth(),h._a[xt]=ue.getUTCDate()),y=0;y<3&&h._a[y]==null;++y)h._a[y]=He[y]=_[y];for(;y<7;y++)h._a[y]=He[y]=h._a[y]==null?y===2?1:0:h._a[y];h._a[ft]===24&&h._a[Lt]===0&&h._a[bt]===0&&h._a[Ut]===0&&(h._nextDay=!0,h._a[ft]=0),h._d=(h._useUTC?Xr:Nn).apply(null,He),it=h._useUTC?h._d.getUTCDay():h._d.getDay(),h._tzm!=null&&h._d.setUTCMinutes(h._d.getUTCMinutes()-h._tzm),h._nextDay&&(h._a[ft]=24),h._w&&h._w.d!==void 0&&h._w.d!==it&&(b(h).weekdayMismatch=!0)}}function ll(h){if(h._f===n.ISO_8601)Gu(h);else if(h._f===n.RFC_2822)Zn(h);else{h._a=[],b(h).empty=!0;for(var y,_,S,R,it,mt=""+h._i,Ct=mt.length,Pt=0,It=rt(h._f,h._locale).match(x)||[],ue=It.length,re=0;reh.valueOf():h.valueOf()"}),C.toJSON=function(){return this.isValid()?this.toISOString():null},C.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},C.unix=function(){return Math.floor(this.valueOf()/1e3)},C.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},C.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},C.eraName=function(){for(var h,y=this.localeData().eras(),_=0,S=y.length;_this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},C.isLocal=function(){return!!this.isValid()&&!this._isUTC},C.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},C.isUtc=cb,C.isUTC=cb,C.zoneAbbr=function(){return this._isUTC?"UTC":""},C.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},C.dates=W("dates accessor is deprecated. Use date instead.",ts),C.months=W("months accessor is deprecated. Use month instead",se),C.years=W("years accessor is deprecated. Use year instead",Ku),C.zone=W("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(h,y){return h!=null?(this.utcOffset(h=typeof h!="string"?-h:h,y),this):-this.utcOffset()}),C.isDSTShifted=W("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!l(this._isDSTShifted))return this._isDSTShifted;var h,y={};return V(y,this),(y=qu(y))._a?(h=(y._isUTC?g:Se)(y._a),this._isDSTShifted=this.isValid()&&0{},debug:(...t)=>{},info:(...t)=>{},warn:(...t)=>{},error:(...t)=>{},fatal:(...t)=>{}},Qu=function(t="fatal"){let e=Jn.fatal;typeof t=="string"?(t=t.toLowerCase(),t in Jn&&(e=Jn[t])):typeof t=="number"&&(e=t),B.trace=()=>{},B.debug=()=>{},B.info=()=>{},B.warn=()=>{},B.error=()=>{},B.fatal=()=>{},e<=Jn.fatal&&(B.fatal=console.error?console.error.bind(console,Qr("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",Qr("FATAL"))),e<=Jn.error&&(B.error=console.error?console.error.bind(console,Qr("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",Qr("ERROR"))),e<=Jn.warn&&(B.warn=console.warn?console.warn.bind(console,Qr("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",Qr("WARN"))),e<=Jn.info&&(B.info=console.info?console.info.bind(console,Qr("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",Qr("INFO"))),e<=Jn.debug&&(B.debug=console.debug?console.debug.bind(console,Qr("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",Qr("DEBUG"))),e<=Jn.trace&&(B.trace=console.debug?console.debug.bind(console,Qr("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",Qr("TRACE")))},Qr=t=>`%c${cn().format("ss.SSS")} : ${t} : `;var Ju={};Object.defineProperty(Ju,"__esModule",{value:!0});var ti=Ju.sanitizeUrl=void 0,Eb=/^([^\w]*)(javascript|data|vbscript)/im,Cb=/&#(\w+)(^\w|;)?/g,Sb=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,Ab=/^([^:]+):/gm,Lb=[".","/"];function Db(t){return Lb.indexOf(t[0])>-1}function Mb(t){return t.replace(Cb,function(e,r){return String.fromCharCode(r)})}function Nb(t){var e=Mb(t||"").replace(Sb,"").trim();if(!e)return"about:blank";if(Db(e))return e;var r=e.match(Ab);if(!r)return e;var n=r[0];return Eb.test(n)?"about:blank":e}ti=Ju.sanitizeUrl=Nb;function ul(t,e){return t==null||e==null?NaN:te?1:t>=e?0:NaN}function Bb(t,e){return t==null||e==null?NaN:et?1:e>=t?0:NaN}function th(t){let e,r,n;t.length!==2?(e=ul,r=(o,l)=>ul(t(o),l),n=(o,l)=>t(o)-l):(e=t===ul||t===Bb?t:Ib,r=t,n=t);function i(o,l,u=0,d=o.length){if(u>>1;r(o[f],l)<0?u=f+1:d=f}while(u>>1;r(o[f],l)<=0?u=f+1:d=f}while(uu&&n(o[f-1],l)>-n(o[f],l)?f-1:f}return{left:i,center:a,right:s}}function Ib(){return 0}function Ob(t){return t===null?NaN:+t}const Rb=th(ul).right;th(Ob).center;const Fb=Rb;class Hd extends Map{constructor(e,r=Vb){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),e!=null)for(const[n,i]of e)this.set(n,i)}get(e){return super.get(Gd(this,e))}has(e){return super.has(Gd(this,e))}set(e,r){return super.set(Pb(this,e),r)}delete(e){return super.delete(Yb(this,e))}}function Gd({_intern:t,_key:e},r){const n=e(r);return t.has(n)?t.get(n):r}function Pb({_intern:t,_key:e},r){const n=e(r);return t.has(n)?t.get(n):(t.set(n,r),r)}function Yb({_intern:t,_key:e},r){const n=e(r);return t.has(n)&&(r=t.get(n),t.delete(n)),r}function Vb(t){return t!==null&&typeof t=="object"?t.valueOf():t}var eh=Math.sqrt(50),rh=Math.sqrt(10),nh=Math.sqrt(2);function Ub(t,e,r){var n,i=-1,s,a,o;if(e=+e,t=+t,r=+r,t===e&&r>0)return[t];if((n=e0){let l=Math.round(t/o),u=Math.round(e/o);for(l*oe&&--u,a=new Array(s=u-l+1);++ie&&--u,a=new Array(s=u-l+1);++i=0?(s>=eh?10:s>=rh?5:s>=nh?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(s>=eh?10:s>=rh?5:s>=nh?2:1)}function ih(t,e,r){var n=Math.abs(e-t)/Math.max(0,r),i=Math.pow(10,Math.floor(Math.log(n)/Math.LN10)),s=n/i;return s>=eh?i*=10:s>=rh?i*=5:s>=nh&&(i*=2),e=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r=i)&&(r=i)}return r}function Wb(t,e){let r;if(e===void 0)for(const n of t)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}function Hb(t){return t}var hl=1,sh=2,ah=3,dl=4,jd=1e-6;function Gb(t){return"translate("+t+",0)"}function qb(t){return"translate(0,"+t+")"}function jb(t){return e=>+t(e)}function $b(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),r=>+t(r)+e}function Xb(){return!this.__axis}function $d(t,e){var r=[],n=null,i=null,s=6,a=6,o=3,l=typeof window<"u"&&window.devicePixelRatio>1?0:.5,u=t===hl||t===dl?-1:1,d=t===dl||t===sh?"x":"y",f=t===hl||t===ah?Gb:qb;function p(g){var b=n==null?e.ticks?e.ticks.apply(e,r):e.domain():n,k=i==null?e.tickFormat?e.tickFormat.apply(e,r):Hb:i,T=Math.max(s,0)+o,L=e.range(),E=+L[0]+l,I=+L[L.length-1]+l,V=(e.bandwidth?$b:jb)(e.copy(),l),H=g.selection?g.selection():g,G=H.selectAll(".domain").data([null]),Y=H.selectAll(".tick").data(b,e).order(),W=Y.exit(),N=Y.enter().append("g").attr("class","tick"),D=Y.select("line"),w=Y.select("text");G=G.merge(G.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),Y=Y.merge(N),D=D.merge(N.append("line").attr("stroke","currentColor").attr(d+"2",u*s)),w=w.merge(N.append("text").attr("fill","currentColor").attr(d,u*T).attr("dy",t===hl?"0em":t===ah?"0.71em":"0.32em")),g!==H&&(G=G.transition(g),Y=Y.transition(g),D=D.transition(g),w=w.transition(g),W=W.transition(g).attr("opacity",jd).attr("transform",function(v){return isFinite(v=V(v))?f(v+l):this.getAttribute("transform")}),N.attr("opacity",jd).attr("transform",function(v){var M=this.parentNode.__axis;return f((M&&isFinite(M=M(v))?M:V(v))+l)})),W.remove(),G.attr("d",t===dl||t===sh?a?"M"+u*a+","+E+"H"+l+"V"+I+"H"+u*a:"M"+l+","+E+"V"+I:a?"M"+E+","+u*a+"V"+l+"H"+I+"V"+u*a:"M"+E+","+l+"H"+I),Y.attr("opacity",1).attr("transform",function(v){return f(V(v)+l)}),D.attr(d+"2",u*s),w.attr(d,u*T).text(k),H.filter(Xb).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===sh?"start":t===dl?"end":"middle"),H.each(function(){this.__axis=V})}return p.scale=function(g){return arguments.length?(e=g,p):e},p.ticks=function(){return r=Array.from(arguments),p},p.tickArguments=function(g){return arguments.length?(r=g==null?[]:Array.from(g),p):r.slice()},p.tickValues=function(g){return arguments.length?(n=g==null?null:Array.from(g),p):n&&n.slice()},p.tickFormat=function(g){return arguments.length?(i=g,p):i},p.tickSize=function(g){return arguments.length?(s=a=+g,p):s},p.tickSizeInner=function(g){return arguments.length?(s=+g,p):s},p.tickSizeOuter=function(g){return arguments.length?(a=+g,p):a},p.tickPadding=function(g){return arguments.length?(o=+g,p):o},p.offset=function(g){return arguments.length?(l=+g,p):l},p}function Kb(t){return $d(hl,t)}function Zb(t){return $d(ah,t)}var Qb={value:()=>{}};function Xd(){for(var t=0,e=arguments.length,r={},n;t=0&&(n=r.slice(i+1),r=r.slice(0,i)),r&&!e.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:n}})}fl.prototype=Xd.prototype={constructor:fl,on:function(t,e){var r=this._,n=Jb(t+"",r),i,s=-1,a=n.length;if(arguments.length<2){for(;++s0)for(var r=new Array(i),n=0,i,s;n=0&&(e=t.slice(0,r))!=="xmlns"&&(t=t.slice(r+1)),Zd.hasOwnProperty(e)?{space:Zd[e],local:t}:t}function e5(t){return function(){var e=this.ownerDocument,r=this.namespaceURI;return r===oh&&e.documentElement.namespaceURI===oh?e.createElement(t):e.createElementNS(r,t)}}function r5(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function Qd(t){var e=pl(t);return(e.local?r5:e5)(e)}function n5(){}function lh(t){return t==null?n5:function(){return this.querySelector(t)}}function i5(t){typeof t!="function"&&(t=lh(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i=I&&(I=E+1);!(H=T[I])&&++I=0;)(a=n[i])&&(s&&a.compareDocumentPosition(s)^4&&s.parentNode.insertBefore(a,s),s=a);return this}function A5(t){t||(t=L5);function e(f,p){return f&&p?t(f.__data__,p.__data__):!f-!p}for(var r=this._groups,n=r.length,i=new Array(n),s=0;se?1:t>=e?0:NaN}function D5(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}function M5(){return Array.from(this)}function N5(){for(var t=this._groups,e=0,r=t.length;e1?this.each((e==null?W5:typeof e=="function"?G5:H5)(t,e,r==null?"":r)):Vs(this.node(),t)}function Vs(t,e){return t.style.getPropertyValue(e)||sf(t).getComputedStyle(t,null).getPropertyValue(e)}function j5(t){return function(){delete this[t]}}function $5(t,e){return function(){this[t]=e}}function X5(t,e){return function(){var r=e.apply(this,arguments);r==null?delete this[t]:this[t]=r}}function K5(t,e){return arguments.length>1?this.each((e==null?j5:typeof e=="function"?X5:$5)(t,e)):this.node()[t]}function af(t){return t.trim().split(/^|\s+/)}function ch(t){return t.classList||new of(t)}function of(t){this._node=t,this._names=af(t.getAttribute("class")||"")}of.prototype={add:function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function lf(t,e){for(var r=ch(t),n=-1,i=e.length;++n=0&&(r=e.slice(n+1),e=e.slice(0,n)),{type:e,name:r}})}function T_(t){return function(){var e=this.__on;if(!!e){for(var r=0,n=-1,i=e.length,s;r>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):r===8?bl(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):r===4?bl(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=B_.exec(t))?new vr(e[1],e[2],e[3],1):(e=I_.exec(t))?new vr(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=O_.exec(t))?bl(e[1],e[2],e[3],e[4]):(e=R_.exec(t))?bl(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=F_.exec(t))?bf(e[1],e[2]/100,e[3]/100,1):(e=P_.exec(t))?bf(e[1],e[2]/100,e[3]/100,e[4]):hf.hasOwnProperty(t)?pf(hf[t]):t==="transparent"?new vr(NaN,NaN,NaN,0):null}function pf(t){return new vr(t>>16&255,t>>8&255,t&255,1)}function bl(t,e,r,n){return n<=0&&(t=e=r=NaN),new vr(t,e,r,n)}function gf(t){return t instanceof es||(t=rs(t)),t?(t=t.rgb(),new vr(t.r,t.g,t.b,t.opacity)):new vr}function dh(t,e,r,n){return arguments.length===1?gf(t):new vr(t,e,r,n==null?1:n)}function vr(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}Ha(vr,dh,yl(es,{brighter(t){return t=t==null?ml:Math.pow(ml,t),new vr(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?Ga:Math.pow(Ga,t),new vr(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new vr(ns(this.r),ns(this.g),ns(this.b),_l(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:yf,formatHex:yf,formatHex8:U_,formatRgb:mf,toString:mf}));function yf(){return`#${is(this.r)}${is(this.g)}${is(this.b)}`}function U_(){return`#${is(this.r)}${is(this.g)}${is(this.b)}${is((isNaN(this.opacity)?1:this.opacity)*255)}`}function mf(){const t=_l(this.opacity);return`${t===1?"rgb(":"rgba("}${ns(this.r)}, ${ns(this.g)}, ${ns(this.b)}${t===1?")":`, ${t})`}`}function _l(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function ns(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function is(t){return t=ns(t),(t<16?"0":"")+t.toString(16)}function bf(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new un(t,e,r,n)}function _f(t){if(t instanceof un)return new un(t.h,t.s,t.l,t.opacity);if(t instanceof es||(t=rs(t)),!t)return new un;if(t instanceof un)return t;t=t.rgb();var e=t.r/255,r=t.g/255,n=t.b/255,i=Math.min(e,r,n),s=Math.max(e,r,n),a=NaN,o=s-i,l=(s+i)/2;return o?(e===s?a=(r-n)/o+(r0&&l<1?0:a,new un(a,o,l,t.opacity)}function z_(t,e,r,n){return arguments.length===1?_f(t):new un(t,e,r,n==null?1:n)}function un(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}Ha(un,z_,yl(es,{brighter(t){return t=t==null?ml:Math.pow(ml,t),new un(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?Ga:Math.pow(Ga,t),new un(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,i=2*r-n;return new vr(fh(t>=240?t-240:t+120,i,n),fh(t,i,n),fh(t<120?t+240:t-120,i,n),this.opacity)},clamp(){return new un(xf(this.h),xl(this.s),xl(this.l),_l(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=_l(this.opacity);return`${t===1?"hsl(":"hsla("}${xf(this.h)}, ${xl(this.s)*100}%, ${xl(this.l)*100}%${t===1?")":`, ${t})`}`}}));function xf(t){return t=(t||0)%360,t<0?t+360:t}function xl(t){return Math.max(0,Math.min(1,t||0))}function fh(t,e,r){return(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)*255}const W_=Math.PI/180,H_=180/Math.PI,vl=18,vf=.96422,kf=1,wf=.82521,Tf=4/29,zs=6/29,Ef=3*zs*zs,G_=zs*zs*zs;function Cf(t){if(t instanceof Fn)return new Fn(t.l,t.a,t.b,t.opacity);if(t instanceof ei)return Sf(t);t instanceof vr||(t=gf(t));var e=mh(t.r),r=mh(t.g),n=mh(t.b),i=ph((.2225045*e+.7168786*r+.0606169*n)/kf),s,a;return e===r&&r===n?s=a=i:(s=ph((.4360747*e+.3850649*r+.1430804*n)/vf),a=ph((.0139322*e+.0971045*r+.7141733*n)/wf)),new Fn(116*i-16,500*(s-i),200*(i-a),t.opacity)}function q_(t,e,r,n){return arguments.length===1?Cf(t):new Fn(t,e,r,n==null?1:n)}function Fn(t,e,r,n){this.l=+t,this.a=+e,this.b=+r,this.opacity=+n}Ha(Fn,q_,yl(es,{brighter(t){return new Fn(this.l+vl*(t==null?1:t),this.a,this.b,this.opacity)},darker(t){return new Fn(this.l-vl*(t==null?1:t),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,r=isNaN(this.b)?t:t-this.b/200;return e=vf*gh(e),t=kf*gh(t),r=wf*gh(r),new vr(yh(3.1338561*e-1.6168667*t-.4906146*r),yh(-.9787684*e+1.9161415*t+.033454*r),yh(.0719453*e-.2289914*t+1.4052427*r),this.opacity)}}));function ph(t){return t>G_?Math.pow(t,1/3):t/Ef+Tf}function gh(t){return t>zs?t*t*t:Ef*(t-Tf)}function yh(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function mh(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function j_(t){if(t instanceof ei)return new ei(t.h,t.c,t.l,t.opacity);if(t instanceof Fn||(t=Cf(t)),t.a===0&&t.b===0)return new ei(NaN,0()=>t;function Af(t,e){return function(r){return t+r*e}}function $_(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}function X_(t,e){var r=e-t;return r?Af(t,r>180||r<-180?r-360*Math.round(r/360):r):kl(isNaN(t)?e:t)}function K_(t){return(t=+t)==1?ja:function(e,r){return r-e?$_(e,r,t):kl(isNaN(e)?r:e)}}function ja(t,e){var r=e-t;return r?Af(t,r):kl(isNaN(t)?e:t)}const wl=function t(e){var r=K_(e);function n(i,s){var a=r((i=dh(i)).r,(s=dh(s)).r),o=r(i.g,s.g),l=r(i.b,s.b),u=ja(i.opacity,s.opacity);return function(d){return i.r=a(d),i.g=o(d),i.b=l(d),i.opacity=u(d),i+""}}return n.gamma=t,n}(1);function Z_(t,e){e||(e=[]);var r=t?Math.min(e.length,t.length):0,n=e.slice(),i;return function(s){for(i=0;ir&&(s=e.slice(r,s),o[a]?o[a]+=s:o[++a]=s),(n=n[0])===(i=i[0])?o[a]?o[a]+=i:o[++a]=i:(o[++a]=null,l.push({i:a,x:hn(n,i)})),r=xh.lastIndex;return r180?d+=360:d-u>180&&(u+=360),p.push({i:f.push(i(f)+"rotate(",null,n)-2,x:hn(u,d)})):d&&f.push(i(f)+"rotate("+d+n)}function o(u,d,f,p){u!==d?p.push({i:f.push(i(f)+"skewX(",null,n)-2,x:hn(u,d)}):d&&f.push(i(f)+"skewX("+d+n)}function l(u,d,f,p,g,b){if(u!==f||d!==p){var k=g.push(i(g)+"scale(",null,",",null,")");b.push({i:k-4,x:hn(u,f)},{i:k-2,x:hn(d,p)})}else(f!==1||p!==1)&&g.push(i(g)+"scale("+f+","+p+")")}return function(u,d){var f=[],p=[];return u=t(u),d=t(d),s(u.translateX,u.translateY,d.translateX,d.translateY,f,p),a(u.rotate,d.rotate,f,p),o(u.skewX,d.skewX,f,p),l(u.scaleX,u.scaleY,d.scaleX,d.scaleY,f,p),u=d=null,function(g){for(var b=-1,k=p.length,T;++b=0&&t._call.call(void 0,e),t=t._next;--Ws}function Rf(){ss=(Cl=Za.now())+Sl,Ws=$a=0;try{dx()}finally{Ws=0,px(),ss=0}}function fx(){var t=Za.now(),e=t-Cl;e>Bf&&(Sl-=e,Cl=t)}function px(){for(var t,e=El,r,n=1/0;e;)e._call?(n>e._time&&(n=e._time),t=e,e=e._next):(r=e._next,e._next=null,e=t?t._next=r:El=r);Ka=t,Th(n)}function Th(t){if(!Ws){$a&&($a=clearTimeout($a));var e=t-ss;e>24?(t<1/0&&($a=setTimeout(Rf,t-Za.now()-Sl)),Xa&&(Xa=clearInterval(Xa))):(Xa||(Cl=Za.now(),Xa=setInterval(fx,Bf)),Ws=1,If(Rf))}}function Ff(t,e,r){var n=new Al;return e=e==null?0:+e,n.restart(i=>{n.stop(),t(i+e)},e,r),n}var gx=Xd("start","end","cancel","interrupt"),yx=[],Pf=0,Yf=1,Eh=2,Ll=3,Vf=4,Ch=5,Dl=6;function Ml(t,e,r,n,i,s){var a=t.__transition;if(!a)t.__transition={};else if(r in a)return;mx(t,r,{name:e,index:n,group:i,on:gx,tween:yx,time:s.time,delay:s.delay,duration:s.duration,ease:s.ease,timer:null,state:Pf})}function Sh(t,e){var r=dn(t,e);if(r.state>Pf)throw new Error("too late; already scheduled");return r}function Pn(t,e){var r=dn(t,e);if(r.state>Ll)throw new Error("too late; already running");return r}function dn(t,e){var r=t.__transition;if(!r||!(r=r[e]))throw new Error("transition not found");return r}function mx(t,e,r){var n=t.__transition,i;n[e]=r,r.timer=Of(s,0,r.time);function s(u){r.state=Yf,r.timer.restart(a,r.delay,r.time),r.delay<=u&&a(u-r.delay)}function a(u){var d,f,p,g;if(r.state!==Yf)return l();for(d in n)if(g=n[d],g.name===r.name){if(g.state===Ll)return Ff(a);g.state===Vf?(g.state=Dl,g.timer.stop(),g.on.call("interrupt",t,t.__data__,g.index,g.group),delete n[d]):+dEh&&n.state=0&&(e=e.slice(0,r)),!e||e==="start"})}function $x(t,e,r){var n,i,s=jx(e)?Sh:Pn;return function(){var a=s(this,t),o=a.on;o!==n&&(i=(n=o).copy()).on(e,r),a.on=i}}function Xx(t,e){var r=this._id;return arguments.length<2?dn(this.node(),r).on.on(t):this.each($x(r,t,e))}function Kx(t){return function(){var e=this.parentNode;for(var r in this.__transition)if(+r!==t)return;e&&e.removeChild(this)}}function Zx(){return this.on("end.remove",Kx(this._id))}function Qx(t){var e=this._name,r=this._id;typeof t!="function"&&(t=lh(t));for(var n=this._groups,i=n.length,s=new Array(i),a=0;aas)if(!(Math.abs(d*o-l*u)>as)||!i)this._+="L"+(this._x1=t)+","+(this._y1=e);else{var p=r-s,g=n-a,b=o*o+l*l,k=p*p+g*g,T=Math.sqrt(b),L=Math.sqrt(f),E=i*Math.tan((Lh-Math.acos((b+f-k)/(2*T*L)))/2),I=E/L,V=E/T;Math.abs(I-1)>as&&(this._+="L"+(t+I*u)+","+(e+I*d)),this._+="A"+i+","+i+",0,0,"+ +(d*p>u*g)+","+(this._x1=t+V*o)+","+(this._y1=e+V*l)}},arc:function(t,e,r,n,i,s){t=+t,e=+e,r=+r,s=!!s;var a=r*Math.cos(n),o=r*Math.sin(n),l=t+a,u=e+o,d=1^s,f=s?n-i:i-n;if(r<0)throw new Error("negative radius: "+r);this._x1===null?this._+="M"+l+","+u:(Math.abs(this._x1-l)>as||Math.abs(this._y1-u)>as)&&(this._+="L"+l+","+u),r&&(f<0&&(f=f%Dh+Dh),f>w6?this._+="A"+r+","+r+",0,1,"+d+","+(t-a)+","+(e-o)+"A"+r+","+r+",0,1,"+d+","+(this._x1=l)+","+(this._y1=u):f>as&&(this._+="A"+r+","+r+",0,"+ +(f>=Lh)+","+d+","+(this._x1=t+r*Math.cos(i))+","+(this._y1=e+r*Math.sin(i))))},rect:function(t,e,r,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +r+"v"+ +n+"h"+-r+"Z"},toString:function(){return this._}};function T6(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.text()}function E6(t,e){return fetch(t,e).then(T6)}function C6(t){return(e,r)=>E6(e,r).then(n=>new DOMParser().parseFromString(n,t))}var S6=C6("image/svg+xml");function A6(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function Nl(t,e){if((r=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var r,n=t.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+t.slice(r+1)]}function Hs(t){return t=Nl(Math.abs(t)),t?t[1]:NaN}function L6(t,e){return function(r,n){for(var i=r.length,s=[],a=0,o=t[0],l=0;i>0&&o>0&&(l+o+1>n&&(o=Math.max(1,n-l)),s.push(r.substring(i-=o,i+o)),!((l+=o+1)>n));)o=t[a=(a+1)%t.length];return s.reverse().join(e)}}function D6(t){return function(e){return e.replace(/[0-9]/g,function(r){return t[+r]})}}var M6=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Bl(t){if(!(e=M6.exec(t)))throw new Error("invalid format: "+t);var e;return new Bh({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}Bl.prototype=Bh.prototype;function Bh(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}Bh.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function N6(t){t:for(var e=t.length,r=1,n=-1,i;r0&&(n=0);break}return n>0?t.slice(0,n)+t.slice(i+1):t}var Hf;function B6(t,e){var r=Nl(t,e);if(!r)return t+"";var n=r[0],i=r[1],s=i-(Hf=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,a=n.length;return s===a?n:s>a?n+new Array(s-a+1).join("0"):s>0?n.slice(0,s)+"."+n.slice(s):"0."+new Array(1-s).join("0")+Nl(t,Math.max(0,e+s-1))[0]}function Gf(t,e){var r=Nl(t,e);if(!r)return t+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}const qf={"%":(t,e)=>(t*100).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:A6,e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>Gf(t*100,e),r:Gf,s:B6,X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function jf(t){return t}var $f=Array.prototype.map,Xf=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];function I6(t){var e=t.grouping===void 0||t.thousands===void 0?jf:L6($f.call(t.grouping,Number),t.thousands+""),r=t.currency===void 0?"":t.currency[0]+"",n=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",s=t.numerals===void 0?jf:D6($f.call(t.numerals,String)),a=t.percent===void 0?"%":t.percent+"",o=t.minus===void 0?"\u2212":t.minus+"",l=t.nan===void 0?"NaN":t.nan+"";function u(f){f=Bl(f);var p=f.fill,g=f.align,b=f.sign,k=f.symbol,T=f.zero,L=f.width,E=f.comma,I=f.precision,V=f.trim,H=f.type;H==="n"?(E=!0,H="g"):qf[H]||(I===void 0&&(I=12),V=!0,H="g"),(T||p==="0"&&g==="=")&&(T=!0,p="0",g="=");var G=k==="$"?r:k==="#"&&/[boxX]/.test(H)?"0"+H.toLowerCase():"",Y=k==="$"?n:/[%p]/.test(H)?a:"",W=qf[H],N=/[defgprs%]/.test(H);I=I===void 0?6:/[gprs]/.test(H)?Math.max(1,Math.min(21,I)):Math.max(0,Math.min(20,I));function D(w){var v=G,M=Y,m,Q,x;if(H==="c")M=W(w)+M,w="";else{w=+w;var ct=w<0||1/w<0;if(w=isNaN(w)?l:W(Math.abs(w),I),V&&(w=N6(w)),ct&&+w==0&&b!=="+"&&(ct=!1),v=(ct?b==="("?b:o:b==="-"||b==="("?"":b)+v,M=(H==="s"?Xf[8+Hf/3]:"")+M+(ct&&b==="("?")":""),N){for(m=-1,Q=w.length;++mx||x>57){M=(x===46?i+w.slice(m+1):w.slice(m))+M,w=w.slice(0,m);break}}}E&&!T&&(w=e(w,1/0));var Dt=v.length+w.length+M.length,kt=Dt>1)+v+w+M+kt.slice(Dt);break;default:w=kt+v+w+M;break}return s(w)}return D.toString=function(){return f+""},D}function d(f,p){var g=u((f=Bl(f),f.type="f",f)),b=Math.max(-8,Math.min(8,Math.floor(Hs(p)/3)))*3,k=Math.pow(10,-b),T=Xf[8+b/3];return function(L){return g(k*L)+T}}return{format:u,formatPrefix:d}}var Il,Kf,Zf;O6({thousands:",",grouping:[3],currency:["$",""]});function O6(t){return Il=I6(t),Kf=Il.format,Zf=Il.formatPrefix,Il}function R6(t){return Math.max(0,-Hs(Math.abs(t)))}function F6(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Hs(e)/3)))*3-Hs(Math.abs(t)))}function P6(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Hs(e)-Hs(t))+1}function Ih(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t);break}return this}const Qf=Symbol("implicit");function Jf(){var t=new Hd,e=[],r=[],n=Qf;function i(s){let a=t.get(s);if(a===void 0){if(n!==Qf)return n;t.set(s,a=e.push(s)-1)}return r[a%r.length]}return i.domain=function(s){if(!arguments.length)return e.slice();e=[],t=new Hd;for(const a of s)t.has(a)||t.set(a,e.push(a)-1);return i},i.range=function(s){return arguments.length?(r=Array.from(s),i):r.slice()},i.unknown=function(s){return arguments.length?(n=s,i):n},i.copy=function(){return Jf(e,r).unknown(n)},Ih.apply(i,arguments),i}function Y6(t){return function(){return t}}function V6(t){return+t}var t2=[0,1];function Gs(t){return t}function Oh(t,e){return(e-=t=+t)?function(r){return(r-t)/e}:Y6(isNaN(e)?NaN:.5)}function U6(t,e){var r;return t>e&&(r=t,t=e,e=r),function(n){return Math.max(t,Math.min(e,n))}}function z6(t,e,r){var n=t[0],i=t[1],s=e[0],a=e[1];return i2?W6:z6,l=u=null,f}function f(p){return p==null||isNaN(p=+p)?s:(l||(l=o(t.map(n),e,r)))(n(a(p)))}return f.invert=function(p){return a(i((u||(u=o(e,t.map(n),hn)))(p)))},f.domain=function(p){return arguments.length?(t=Array.from(p,V6),d()):t.slice()},f.range=function(p){return arguments.length?(e=Array.from(p),d()):e.slice()},f.rangeRound=function(p){return e=Array.from(p),r=ix,d()},f.clamp=function(p){return arguments.length?(a=p?!0:Gs,d()):a!==Gs},f.interpolate=function(p){return arguments.length?(r=p,d()):r},f.unknown=function(p){return arguments.length?(s=p,f):s},function(p,g){return n=p,i=g,d()}}function r2(){return H6()(Gs,Gs)}function G6(t,e,r,n){var i=ih(t,e,r),s;switch(n=Bl(n==null?",f":n),n.type){case"s":{var a=Math.max(Math.abs(t),Math.abs(e));return n.precision==null&&!isNaN(s=F6(i,a))&&(n.precision=s),Zf(n,a)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(s=P6(i,Math.max(Math.abs(t),Math.abs(e))))&&(n.precision=s-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(s=R6(i))&&(n.precision=s-(n.type==="%")*2);break}}return Kf(n)}function q6(t){var e=t.domain;return t.ticks=function(r){var n=e();return Ub(n[0],n[n.length-1],r==null?10:r)},t.tickFormat=function(r,n){var i=e();return G6(i[0],i[i.length-1],r==null?10:r,n)},t.nice=function(r){r==null&&(r=10);var n=e(),i=0,s=n.length-1,a=n[i],o=n[s],l,u,d=10;for(o0;){if(u=qd(a,o,r),u===l)return n[i]=a,n[s]=o,e(n);if(u>0)a=Math.floor(a/u)*u,o=Math.ceil(o/u)*u;else if(u<0)a=Math.ceil(a*u)/u,o=Math.floor(o*u)/u;else break;l=u}return t},t}function n2(){var t=r2();return t.copy=function(){return e2(t,n2())},Ih.apply(t,arguments),q6(t)}function j6(t,e){t=t.slice();var r=0,n=t.length-1,i=t[r],s=t[n],a;return s0))return l;do l.push(u=new Date(+s)),e(s,o),t(s);while(u=a)for(;t(a),!s(a);)a.setTime(a-1)},function(a,o){if(a>=a)if(o<0)for(;++o<=0;)for(;e(a,-1),!s(a););else for(;--o>=0;)for(;e(a,1),!s(a););})},r&&(i.count=function(s,a){return Rh.setTime(+s),Fh.setTime(+a),t(Rh),t(Fh),Math.floor(r(Rh,Fh))},i.every=function(s){return s=Math.floor(s),!isFinite(s)||!(s>0)?null:s>1?i.filter(n?function(a){return n(a)%s===0}:function(a){return i.count(0,a)%s===0}):i}),i}var Ol=dr(function(){},function(t,e){t.setTime(+t+e)},function(t,e){return e-t});Ol.every=function(t){return t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?dr(function(e){e.setTime(Math.floor(e/t)*t)},function(e,r){e.setTime(+e+r*t)},function(e,r){return(r-e)/t}):Ol};const $6=Ol;Ol.range;const ii=1e3,Jr=ii*60,si=Jr*60,os=si*24,Ph=os*7,i2=os*30,Yh=os*365;var s2=dr(function(t){t.setTime(t-t.getMilliseconds())},function(t,e){t.setTime(+t+e*ii)},function(t,e){return(e-t)/ii},function(t){return t.getUTCSeconds()});const Qa=s2;s2.range;var a2=dr(function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*ii)},function(t,e){t.setTime(+t+e*Jr)},function(t,e){return(e-t)/Jr},function(t){return t.getMinutes()});const Rl=a2;a2.range;var o2=dr(function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*ii-t.getMinutes()*Jr)},function(t,e){t.setTime(+t+e*si)},function(t,e){return(e-t)/si},function(t){return t.getHours()});const Fl=o2;o2.range;var l2=dr(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*Jr)/os,t=>t.getDate()-1);const qs=l2;l2.range;function ls(t){return dr(function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},function(e,r){e.setDate(e.getDate()+r*7)},function(e,r){return(r-e-(r.getTimezoneOffset()-e.getTimezoneOffset())*Jr)/Ph})}var js=ls(0),Pl=ls(1),X6=ls(2),K6=ls(3),$s=ls(4),Z6=ls(5),Q6=ls(6);js.range,Pl.range,X6.range,K6.range,$s.range,Z6.range,Q6.range;var c2=dr(function(t){t.setDate(1),t.setHours(0,0,0,0)},function(t,e){t.setMonth(t.getMonth()+e)},function(t,e){return e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12},function(t){return t.getMonth()});const Yl=c2;c2.range;var Vh=dr(function(t){t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,e){t.setFullYear(t.getFullYear()+e)},function(t,e){return e.getFullYear()-t.getFullYear()},function(t){return t.getFullYear()});Vh.every=function(t){return!isFinite(t=Math.floor(t))||!(t>0)?null:dr(function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,r){e.setFullYear(e.getFullYear()+r*t)})};const cs=Vh;Vh.range;var u2=dr(function(t){t.setUTCSeconds(0,0)},function(t,e){t.setTime(+t+e*Jr)},function(t,e){return(e-t)/Jr},function(t){return t.getUTCMinutes()});const J6=u2;u2.range;var h2=dr(function(t){t.setUTCMinutes(0,0,0)},function(t,e){t.setTime(+t+e*si)},function(t,e){return(e-t)/si},function(t){return t.getUTCHours()});const tv=h2;h2.range;var d2=dr(function(t){t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCDate(t.getUTCDate()+e)},function(t,e){return(e-t)/os},function(t){return t.getUTCDate()-1});const Uh=d2;d2.range;function us(t){return dr(function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},function(e,r){e.setUTCDate(e.getUTCDate()+r*7)},function(e,r){return(r-e)/Ph})}var zh=us(0),Vl=us(1),ev=us(2),rv=us(3),Xs=us(4),nv=us(5),iv=us(6);zh.range,Vl.range,ev.range,rv.range,Xs.range,nv.range,iv.range;var f2=dr(function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCMonth(t.getUTCMonth()+e)},function(t,e){return e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12},function(t){return t.getUTCMonth()});const sv=f2;f2.range;var Wh=dr(function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)},function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()},function(t){return t.getUTCFullYear()});Wh.every=function(t){return!isFinite(t=Math.floor(t))||!(t>0)?null:dr(function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,r){e.setUTCFullYear(e.getUTCFullYear()+r*t)})};const Ks=Wh;Wh.range;function p2(t,e,r,n,i,s){const a=[[Qa,1,ii],[Qa,5,5*ii],[Qa,15,15*ii],[Qa,30,30*ii],[s,1,Jr],[s,5,5*Jr],[s,15,15*Jr],[s,30,30*Jr],[i,1,si],[i,3,3*si],[i,6,6*si],[i,12,12*si],[n,1,os],[n,2,2*os],[r,1,Ph],[e,1,i2],[e,3,3*i2],[t,1,Yh]];function o(u,d,f){const p=dT).right(a,p);if(g===a.length)return t.every(ih(u/Yh,d/Yh,f));if(g===0)return $6.every(Math.max(ih(u,d,f),1));const[b,k]=a[p/a[g-1][2]53)return null;"w"in O||(O.w=1),"Z"in O?(J=Gh(Ja(O.y,0,1)),C=J.getUTCDay(),J=C>4||C===0?Vl.ceil(J):Vl(J),J=Uh.offset(J,(O.V-1)*7),O.y=J.getUTCFullYear(),O.m=J.getUTCMonth(),O.d=J.getUTCDate()+(O.w+6)%7):(J=Hh(Ja(O.y,0,1)),C=J.getDay(),J=C>4||C===0?Pl.ceil(J):Pl(J),J=qs.offset(J,(O.V-1)*7),O.y=J.getFullYear(),O.m=J.getMonth(),O.d=J.getDate()+(O.w+6)%7)}else("W"in O||"U"in O)&&("w"in O||(O.w="u"in O?O.u%7:"W"in O?1:0),C="Z"in O?Gh(Ja(O.y,0,1)).getUTCDay():Hh(Ja(O.y,0,1)).getDay(),O.m=0,O.d="W"in O?(O.w+6)%7+O.W*7-(C+5)%7:O.w+O.U*7-(C+6)%7);return"Z"in O?(O.H+=O.Z/100|0,O.M+=O.Z%100,Gh(O)):Hh(O)}}function W(z,X,F,O){for(var A=0,J=X.length,C=F.length,ht,U;A=C)return-1;if(ht=X.charCodeAt(A++),ht===37){if(ht=X.charAt(A++),U=H[ht in g2?X.charAt(A++):ht],!U||(O=U(z,F,O))<0)return-1}else if(ht!=F.charCodeAt(O++))return-1}return O}function N(z,X,F){var O=u.exec(X.slice(F));return O?(z.p=d.get(O[0].toLowerCase()),F+O[0].length):-1}function D(z,X,F){var O=g.exec(X.slice(F));return O?(z.w=b.get(O[0].toLowerCase()),F+O[0].length):-1}function w(z,X,F){var O=f.exec(X.slice(F));return O?(z.w=p.get(O[0].toLowerCase()),F+O[0].length):-1}function v(z,X,F){var O=L.exec(X.slice(F));return O?(z.m=E.get(O[0].toLowerCase()),F+O[0].length):-1}function M(z,X,F){var O=k.exec(X.slice(F));return O?(z.m=T.get(O[0].toLowerCase()),F+O[0].length):-1}function m(z,X,F){return W(z,e,X,F)}function Q(z,X,F){return W(z,r,X,F)}function x(z,X,F){return W(z,n,X,F)}function ct(z){return a[z.getDay()]}function Dt(z){return s[z.getDay()]}function kt(z){return l[z.getMonth()]}function j(z){return o[z.getMonth()]}function ot(z){return i[+(z.getHours()>=12)]}function rt(z){return 1+~~(z.getMonth()/3)}function nt(z){return a[z.getUTCDay()]}function ut(z){return s[z.getUTCDay()]}function _t(z){return l[z.getUTCMonth()]}function K(z){return o[z.getUTCMonth()]}function Ot(z){return i[+(z.getUTCHours()>=12)]}function P(z){return 1+~~(z.getUTCMonth()/3)}return{format:function(z){var X=G(z+="",I);return X.toString=function(){return z},X},parse:function(z){var X=Y(z+="",!1);return X.toString=function(){return z},X},utcFormat:function(z){var X=G(z+="",V);return X.toString=function(){return z},X},utcParse:function(z){var X=Y(z+="",!0);return X.toString=function(){return z},X}}}var g2={"-":"",_:" ",0:"0"},fr=/^\s*\d+/,cv=/^%/,uv=/[\\^$*+?|[\]().{}]/g;function Ae(t,e,r){var n=t<0?"-":"",i=(n?-t:t)+"",s=i.length;return n+(s[e.toLowerCase(),r]))}function dv(t,e,r){var n=fr.exec(e.slice(r,r+1));return n?(t.w=+n[0],r+n[0].length):-1}function fv(t,e,r){var n=fr.exec(e.slice(r,r+1));return n?(t.u=+n[0],r+n[0].length):-1}function pv(t,e,r){var n=fr.exec(e.slice(r,r+2));return n?(t.U=+n[0],r+n[0].length):-1}function gv(t,e,r){var n=fr.exec(e.slice(r,r+2));return n?(t.V=+n[0],r+n[0].length):-1}function yv(t,e,r){var n=fr.exec(e.slice(r,r+2));return n?(t.W=+n[0],r+n[0].length):-1}function y2(t,e,r){var n=fr.exec(e.slice(r,r+4));return n?(t.y=+n[0],r+n[0].length):-1}function m2(t,e,r){var n=fr.exec(e.slice(r,r+2));return n?(t.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function mv(t,e,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(r,r+6));return n?(t.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function bv(t,e,r){var n=fr.exec(e.slice(r,r+1));return n?(t.q=n[0]*3-3,r+n[0].length):-1}function _v(t,e,r){var n=fr.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function b2(t,e,r){var n=fr.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function xv(t,e,r){var n=fr.exec(e.slice(r,r+3));return n?(t.m=0,t.d=+n[0],r+n[0].length):-1}function _2(t,e,r){var n=fr.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function vv(t,e,r){var n=fr.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function kv(t,e,r){var n=fr.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function wv(t,e,r){var n=fr.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function Tv(t,e,r){var n=fr.exec(e.slice(r,r+6));return n?(t.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function Ev(t,e,r){var n=cv.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function Cv(t,e,r){var n=fr.exec(e.slice(r));return n?(t.Q=+n[0],r+n[0].length):-1}function Sv(t,e,r){var n=fr.exec(e.slice(r));return n?(t.s=+n[0],r+n[0].length):-1}function x2(t,e){return Ae(t.getDate(),e,2)}function Av(t,e){return Ae(t.getHours(),e,2)}function Lv(t,e){return Ae(t.getHours()%12||12,e,2)}function Dv(t,e){return Ae(1+qs.count(cs(t),t),e,3)}function v2(t,e){return Ae(t.getMilliseconds(),e,3)}function Mv(t,e){return v2(t,e)+"000"}function Nv(t,e){return Ae(t.getMonth()+1,e,2)}function Bv(t,e){return Ae(t.getMinutes(),e,2)}function Iv(t,e){return Ae(t.getSeconds(),e,2)}function Ov(t){var e=t.getDay();return e===0?7:e}function Rv(t,e){return Ae(js.count(cs(t)-1,t),e,2)}function k2(t){var e=t.getDay();return e>=4||e===0?$s(t):$s.ceil(t)}function Fv(t,e){return t=k2(t),Ae($s.count(cs(t),t)+(cs(t).getDay()===4),e,2)}function Pv(t){return t.getDay()}function Yv(t,e){return Ae(Pl.count(cs(t)-1,t),e,2)}function Vv(t,e){return Ae(t.getFullYear()%100,e,2)}function Uv(t,e){return t=k2(t),Ae(t.getFullYear()%100,e,2)}function zv(t,e){return Ae(t.getFullYear()%1e4,e,4)}function Wv(t,e){var r=t.getDay();return t=r>=4||r===0?$s(t):$s.ceil(t),Ae(t.getFullYear()%1e4,e,4)}function Hv(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Ae(e/60|0,"0",2)+Ae(e%60,"0",2)}function w2(t,e){return Ae(t.getUTCDate(),e,2)}function Gv(t,e){return Ae(t.getUTCHours(),e,2)}function qv(t,e){return Ae(t.getUTCHours()%12||12,e,2)}function jv(t,e){return Ae(1+Uh.count(Ks(t),t),e,3)}function T2(t,e){return Ae(t.getUTCMilliseconds(),e,3)}function $v(t,e){return T2(t,e)+"000"}function Xv(t,e){return Ae(t.getUTCMonth()+1,e,2)}function Kv(t,e){return Ae(t.getUTCMinutes(),e,2)}function Zv(t,e){return Ae(t.getUTCSeconds(),e,2)}function Qv(t){var e=t.getUTCDay();return e===0?7:e}function Jv(t,e){return Ae(zh.count(Ks(t)-1,t),e,2)}function E2(t){var e=t.getUTCDay();return e>=4||e===0?Xs(t):Xs.ceil(t)}function tk(t,e){return t=E2(t),Ae(Xs.count(Ks(t),t)+(Ks(t).getUTCDay()===4),e,2)}function ek(t){return t.getUTCDay()}function rk(t,e){return Ae(Vl.count(Ks(t)-1,t),e,2)}function nk(t,e){return Ae(t.getUTCFullYear()%100,e,2)}function ik(t,e){return t=E2(t),Ae(t.getUTCFullYear()%100,e,2)}function sk(t,e){return Ae(t.getUTCFullYear()%1e4,e,4)}function ak(t,e){var r=t.getUTCDay();return t=r>=4||r===0?Xs(t):Xs.ceil(t),Ae(t.getUTCFullYear()%1e4,e,4)}function ok(){return"+0000"}function C2(){return"%"}function S2(t){return+t}function A2(t){return Math.floor(+t/1e3)}var Zs,Ul;lk({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function lk(t){return Zs=lv(t),Ul=Zs.format,Zs.parse,Zs.utcFormat,Zs.utcParse,Zs}function ck(t){return new Date(t)}function uk(t){return t instanceof Date?+t:+new Date(+t)}function L2(t,e,r,n,i,s,a,o,l,u){var d=r2(),f=d.invert,p=d.domain,g=u(".%L"),b=u(":%S"),k=u("%I:%M"),T=u("%I %p"),L=u("%a %d"),E=u("%b %d"),I=u("%B"),V=u("%Y");function H(G){return(l(G)1?0:t<-1?ro:Math.acos(t)}function M2(t){return t>=1?zl:t<=-1?-zl:Math.asin(t)}function pk(t){return t.innerRadius}function gk(t){return t.outerRadius}function yk(t){return t.startAngle}function mk(t){return t.endAngle}function bk(t){return t&&t.padAngle}function _k(t,e,r,n,i,s,a,o){var l=r-t,u=n-e,d=a-i,f=o-s,p=f*l-d*u;if(!(p*pm*m+Q*Q&&(W=D,N=w),{cx:W,cy:N,x01:-d,y01:-f,x11:W*(i/H-1),y11:N*(i/H-1)}}function jh(){var t=pk,e=gk,r=Xe(0),n=null,i=yk,s=mk,a=bk,o=null;function l(){var u,d,f=+t.apply(this,arguments),p=+e.apply(this,arguments),g=i.apply(this,arguments)-zl,b=s.apply(this,arguments)-zl,k=D2(b-g),T=b>g;if(o||(o=u=Nh()),pRr))o.moveTo(0,0);else if(k>Wl-Rr)o.moveTo(p*hs(g),p*Yn(g)),o.arc(0,0,p,g,b,!T),f>Rr&&(o.moveTo(f*hs(b),f*Yn(b)),o.arc(0,0,f,b,g,T));else{var L=g,E=b,I=g,V=b,H=k,G=k,Y=a.apply(this,arguments)/2,W=Y>Rr&&(n?+n.apply(this,arguments):Qs(f*f+p*p)),N=qh(D2(p-f)/2,+r.apply(this,arguments)),D=N,w=N,v,M;if(W>Rr){var m=M2(W/f*Yn(Y)),Q=M2(W/p*Yn(Y));(H-=m*2)>Rr?(m*=T?1:-1,I+=m,V-=m):(H=0,I=V=(g+b)/2),(G-=Q*2)>Rr?(Q*=T?1:-1,L+=Q,E-=Q):(G=0,L=E=(g+b)/2)}var x=p*hs(L),ct=p*Yn(L),Dt=f*hs(V),kt=f*Yn(V);if(N>Rr){var j=p*hs(E),ot=p*Yn(E),rt=f*hs(I),nt=f*Yn(I),ut;if(kRr?w>Rr?(v=Hl(rt,nt,x,ct,p,w,T),M=Hl(j,ot,Dt,kt,p,w,T),o.moveTo(v.cx+v.x01,v.cy+v.y01),wRr)||!(H>Rr)?o.lineTo(Dt,kt):D>Rr?(v=Hl(Dt,kt,j,ot,f,-D,T),M=Hl(x,ct,rt,nt,f,-D,T),o.lineTo(v.cx+v.x01,v.cy+v.y01),Dt?1:e>=t?0:NaN}function wk(t){return t}function Tk(){var t=wk,e=kk,r=null,n=Xe(0),i=Xe(Wl),s=Xe(0);function a(o){var l,u=(o=N2(o)).length,d,f,p=0,g=new Array(u),b=new Array(u),k=+n.apply(this,arguments),T=Math.min(Wl,Math.max(-Wl,i.apply(this,arguments)-k)),L,E=Math.min(Math.abs(T)/u,s.apply(this,arguments)),I=E*(T<0?-1:1),V;for(l=0;l0&&(p+=V);for(e!=null?g.sort(function(H,G){return e(b[H],b[G])}):r!=null&&g.sort(function(H,G){return r(o[H],o[G])}),l=0,f=p?(T-u*I)/p:0;l0?V*f:0)+I,b[d]={data:o[d],index:l,value:V,startAngle:k,endAngle:L,padAngle:E};return b}return a.value=function(o){return arguments.length?(t=typeof o=="function"?o:Xe(+o),a):t},a.sortValues=function(o){return arguments.length?(e=o,r=null,a):e},a.sort=function(o){return arguments.length?(r=o,e=null,a):r},a.startAngle=function(o){return arguments.length?(n=typeof o=="function"?o:Xe(+o),a):n},a.endAngle=function(o){return arguments.length?(i=typeof o=="function"?o:Xe(+o),a):i},a.padAngle=function(o){return arguments.length?(s=typeof o=="function"?o:Xe(+o),a):s},a}function Gl(){}function ql(t,e,r){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+r)/6)}function I2(t){this._context=t}I2.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:ql(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:ql(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};function ta(t){return new I2(t)}function O2(t){this._context=t}O2.prototype={areaStart:Gl,areaEnd:Gl,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:ql(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};function Ek(t){return new O2(t)}function R2(t){this._context=t}R2.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+t)/6,n=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:ql(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};function Ck(t){return new R2(t)}function F2(t){this._context=t}F2.prototype={areaStart:Gl,areaEnd:Gl,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}};function Sk(t){return new F2(t)}function P2(t){return t<0?-1:1}function Y2(t,e,r){var n=t._x1-t._x0,i=e-t._x1,s=(t._y1-t._y0)/(n||i<0&&-0),a=(r-t._y1)/(i||n<0&&-0),o=(s*i+a*n)/(n+i);return(P2(s)+P2(a))*Math.min(Math.abs(s),Math.abs(a),.5*Math.abs(o))||0}function V2(t,e){var r=t._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function $h(t,e,r){var n=t._x0,i=t._y0,s=t._x1,a=t._y1,o=(s-n)/3;t._context.bezierCurveTo(n+o,i+o*e,s-o,a-o*r,s,a)}function jl(t){this._context=t}jl.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:$h(this,this._t0,V2(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var r=NaN;if(t=+t,e=+e,!(t===this._x1&&e===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,$h(this,V2(this,r=Y2(this,t,e)),r);break;default:$h(this,this._t0,r=Y2(this,t,e));break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=r}}};function U2(t){this._context=new z2(t)}(U2.prototype=Object.create(jl.prototype)).point=function(t,e){jl.prototype.point.call(this,e,t)};function z2(t){this._context=t}z2.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,r,n,i,s){this._context.bezierCurveTo(e,t,n,r,s,i)}};function Ak(t){return new jl(t)}function Lk(t){return new U2(t)}function W2(t){this._context=t}W2.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,r=t.length;if(r)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),r===2)this._context.lineTo(t[1],e[1]);else for(var n=H2(t),i=H2(e),s=0,a=1;a=0;--e)i[e]=(a[e]-i[e+1])/s[e];for(s[r-1]=(t[r]+i[r-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var r=this._x*(1-this._t)+t*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,e)}break}}this._x=t,this._y=e}};function Mk(t){return new $l(t,.5)}function Nk(t){return new $l(t,0)}function Bk(t){return new $l(t,1)}function ea(t,e,r){this.k=t,this.x=e,this.y=r}ea.prototype={constructor:ea,scale:function(t){return t===1?this:new ea(this.k*t,this.x,this.y)},translate:function(t,e){return t===0&e===0?this:new ea(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}},new ea(1,0,0),ea.prototype;/*! @license DOMPurify 2.4.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.4.1/LICENSE */function Ii(t){return Ii=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ii(t)}function Xh(t,e){return Xh=Object.setPrototypeOf||function(n,i){return n.__proto__=i,n},Xh(t,e)}function Ik(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Xl(t,e,r){return Ik()?Xl=Reflect.construct:Xl=function(i,s,a){var o=[null];o.push.apply(o,s);var l=Function.bind.apply(i,o),u=new l;return a&&Xh(u,a.prototype),u},Xl.apply(null,arguments)}function fn(t){return Ok(t)||Rk(t)||Fk(t)||Pk()}function Ok(t){if(Array.isArray(t))return Kh(t)}function Rk(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function Fk(t,e){if(!!t){if(typeof t=="string")return Kh(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Kh(t,e)}}function Kh(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r1?r-1:0),i=1;i/gm),Jk=pn(/\${[\w\W]*}/gm),t8=pn(/^data-[\-\w.\u00B7-\uFFFF]/),e8=pn(/^aria-[\-\w]+$/),r8=pn(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),n8=pn(/^(?:\w+script|data):/i),i8=pn(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),s8=pn(/^html$/i),a8=function(){return typeof window>"u"?null:window},o8=function(e,r){if(Ii(e)!=="object"||typeof e.createPolicy!="function")return null;var n=null,i="data-tt-policy-suffix";r.currentScript&&r.currentScript.hasAttribute(i)&&(n=r.currentScript.getAttribute(i));var s="dompurify"+(n?"#"+n:"");try{return e.createPolicy(s,{createHTML:function(o){return o},createScriptURL:function(o){return o}})}catch{return console.warn("TrustedTypes policy "+s+" could not be created."),null}};function Q2(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:a8(),e=function(Z){return Q2(Z)};if(e.version="2.4.1",e.removed=[],!t||!t.document||t.document.nodeType!==9)return e.isSupported=!1,e;var r=t.document,n=t.document,i=t.DocumentFragment,s=t.HTMLTemplateElement,a=t.Node,o=t.Element,l=t.NodeFilter,u=t.NamedNodeMap,d=u===void 0?t.NamedNodeMap||t.MozNamedAttrMap:u,f=t.HTMLFormElement,p=t.DOMParser,g=t.trustedTypes,b=o.prototype,k=Ql(b,"cloneNode"),T=Ql(b,"nextSibling"),L=Ql(b,"childNodes"),E=Ql(b,"parentNode");if(typeof s=="function"){var I=n.createElement("template");I.content&&I.content.ownerDocument&&(n=I.content.ownerDocument)}var V=o8(g,r),H=V?V.createHTML(""):"",G=n,Y=G.implementation,W=G.createNodeIterator,N=G.createDocumentFragment,D=G.getElementsByTagName,w=r.importNode,v={};try{v=ds(n).documentMode?n.documentMode:{}}catch{}var M={};e.isSupported=typeof E=="function"&&Y&&typeof Y.createHTMLDocument<"u"&&v!==9;var m=Zk,Q=Qk,x=Jk,ct=t8,Dt=e8,kt=n8,j=i8,ot=r8,rt=null,nt=we({},[].concat(fn($2),fn(t1),fn(e1),fn(r1),fn(X2))),ut=null,_t=we({},[].concat(fn(K2),fn(n1),fn(Z2),fn(Jl))),K=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Ot=null,P=null,z=!0,X=!0,F=!1,O=!1,A=!1,J=!1,C=!1,ht=!1,U=!1,Yt=!1,et=!0,Mt=!1,Tt="user-content-",gt=!0,Et=!1,wt={},pt=null,st=we({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),le=null,Xt=we({},["audio","video","img","source","image","track"]),jt=null,Kt=we({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Gt="http://www.w3.org/1998/Math/MathML",Ee="http://www.w3.org/2000/svg",Ht="http://www.w3.org/1999/xhtml",Vt=Ht,Ft=!1,xt=null,ft=we({},[Gt,Ee,Ht],Qh),Lt,bt=["application/xhtml+xml","text/html"],Ut="text/html",at,ie=null,dt=n.createElement("form"),ee=function(Z){return Z instanceof RegExp||Z instanceof Function},fe=function(Z){ie&&ie===Z||((!Z||Ii(Z)!=="object")&&(Z={}),Z=ds(Z),Lt=bt.indexOf(Z.PARSER_MEDIA_TYPE)===-1?Lt=Ut:Lt=Z.PARSER_MEDIA_TYPE,at=Lt==="application/xhtml+xml"?Qh:Zl,rt="ALLOWED_TAGS"in Z?we({},Z.ALLOWED_TAGS,at):nt,ut="ALLOWED_ATTR"in Z?we({},Z.ALLOWED_ATTR,at):_t,xt="ALLOWED_NAMESPACES"in Z?we({},Z.ALLOWED_NAMESPACES,Qh):ft,jt="ADD_URI_SAFE_ATTR"in Z?we(ds(Kt),Z.ADD_URI_SAFE_ATTR,at):Kt,le="ADD_DATA_URI_TAGS"in Z?we(ds(Xt),Z.ADD_DATA_URI_TAGS,at):Xt,pt="FORBID_CONTENTS"in Z?we({},Z.FORBID_CONTENTS,at):st,Ot="FORBID_TAGS"in Z?we({},Z.FORBID_TAGS,at):{},P="FORBID_ATTR"in Z?we({},Z.FORBID_ATTR,at):{},wt="USE_PROFILES"in Z?Z.USE_PROFILES:!1,z=Z.ALLOW_ARIA_ATTR!==!1,X=Z.ALLOW_DATA_ATTR!==!1,F=Z.ALLOW_UNKNOWN_PROTOCOLS||!1,O=Z.SAFE_FOR_TEMPLATES||!1,A=Z.WHOLE_DOCUMENT||!1,ht=Z.RETURN_DOM||!1,U=Z.RETURN_DOM_FRAGMENT||!1,Yt=Z.RETURN_TRUSTED_TYPE||!1,C=Z.FORCE_BODY||!1,et=Z.SANITIZE_DOM!==!1,Mt=Z.SANITIZE_NAMED_PROPS||!1,gt=Z.KEEP_CONTENT!==!1,Et=Z.IN_PLACE||!1,ot=Z.ALLOWED_URI_REGEXP||ot,Vt=Z.NAMESPACE||Ht,Z.CUSTOM_ELEMENT_HANDLING&&ee(Z.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(K.tagNameCheck=Z.CUSTOM_ELEMENT_HANDLING.tagNameCheck),Z.CUSTOM_ELEMENT_HANDLING&&ee(Z.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(K.attributeNameCheck=Z.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),Z.CUSTOM_ELEMENT_HANDLING&&typeof Z.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(K.allowCustomizedBuiltInElements=Z.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),O&&(X=!1),U&&(ht=!0),wt&&(rt=we({},fn(X2)),ut=[],wt.html===!0&&(we(rt,$2),we(ut,K2)),wt.svg===!0&&(we(rt,t1),we(ut,n1),we(ut,Jl)),wt.svgFilters===!0&&(we(rt,e1),we(ut,n1),we(ut,Jl)),wt.mathMl===!0&&(we(rt,r1),we(ut,Z2),we(ut,Jl))),Z.ADD_TAGS&&(rt===nt&&(rt=ds(rt)),we(rt,Z.ADD_TAGS,at)),Z.ADD_ATTR&&(ut===_t&&(ut=ds(ut)),we(ut,Z.ADD_ATTR,at)),Z.ADD_URI_SAFE_ATTR&&we(jt,Z.ADD_URI_SAFE_ATTR,at),Z.FORBID_CONTENTS&&(pt===st&&(pt=ds(pt)),we(pt,Z.FORBID_CONTENTS,at)),gt&&(rt["#text"]=!0),A&&we(rt,["html","head","body"]),rt.table&&(we(rt,["tbody"]),delete Ot.tbody),Lr&&Lr(Z),ie=Z)},be=we({},["mi","mo","mn","ms","mtext"]),_e=we({},["foreignobject","desc","title","annotation-xml"]),ke=we({},["title","style","font","a","script"]),$t=we({},t1);we($t,e1),we($t,Xk);var se=we({},r1);we(se,Kk);var ye=function(Z){var At=E(Z);(!At||!At.tagName)&&(At={namespaceURI:Vt,tagName:"template"});var Nt=Zl(Z.tagName),pe=Zl(At.tagName);return xt[Z.namespaceURI]?Z.namespaceURI===Ee?At.namespaceURI===Ht?Nt==="svg":At.namespaceURI===Gt?Nt==="svg"&&(pe==="annotation-xml"||be[pe]):Boolean($t[Nt]):Z.namespaceURI===Gt?At.namespaceURI===Ht?Nt==="math":At.namespaceURI===Ee?Nt==="math"&&_e[pe]:Boolean(se[Nt]):Z.namespaceURI===Ht?At.namespaceURI===Ee&&!_e[pe]||At.namespaceURI===Gt&&!be[pe]?!1:!se[Nt]&&(ke[Nt]||!$t[Nt]):!!(Lt==="application/xhtml+xml"&&xt[Z.namespaceURI]):!1},Jt=function(Z){no(e.removed,{element:Z});try{Z.parentNode.removeChild(Z)}catch{try{Z.outerHTML=H}catch{Z.remove()}}},Nn=function(Z,At){try{no(e.removed,{attribute:At.getAttributeNode(Z),from:At})}catch{no(e.removed,{attribute:null,from:At})}if(At.removeAttribute(Z),Z==="is"&&!ut[Z])if(ht||U)try{Jt(At)}catch{}else try{At.setAttribute(Z,"")}catch{}},Xr=function(Z){var At,Nt;if(C)Z=""+Z;else{var pe=Gk(Z,/^[\r\n\t ]+/);Nt=pe&&pe[0]}Lt==="application/xhtml+xml"&&Vt===Ht&&(Z=''+Z+"");var Me=V?V.createHTML(Z):Z;if(Vt===Ht)try{At=new p().parseFromString(Me,Lt)}catch{}if(!At||!At.documentElement){At=Y.createDocument(Vt,"template",null);try{At.documentElement.innerHTML=Ft?"":Me}catch{}}var Le=At.body||At.documentElement;return Z&&Nt&&Le.insertBefore(n.createTextNode(Nt),Le.childNodes[0]||null),Vt===Ht?D.call(At,A?"html":"body")[0]:A?At.documentElement:Le},De=function(Z){return W.call(Z.ownerDocument||Z,Z,l.SHOW_ELEMENT|l.SHOW_COMMENT|l.SHOW_TEXT,null,!1)},ae=function(Z){return Z instanceof f&&(typeof Z.nodeName!="string"||typeof Z.textContent!="string"||typeof Z.removeChild!="function"||!(Z.attributes instanceof d)||typeof Z.removeAttribute!="function"||typeof Z.setAttribute!="function"||typeof Z.namespaceURI!="string"||typeof Z.insertBefore!="function"||typeof Z.hasChildNodes!="function")},Be=function(Z){return Ii(a)==="object"?Z instanceof a:Z&&Ii(Z)==="object"&&typeof Z.nodeType=="number"&&typeof Z.nodeName=="string"},Re=function(Z,At,Nt){!M[Z]||Hk(M[Z],function(pe){pe.call(e,At,Nt,ie)})},Pe=function(Z){var At;if(Re("beforeSanitizeElements",Z,null),ae(Z)||Dr(/[\u0080-\uFFFF]/,Z.nodeName))return Jt(Z),!0;var Nt=at(Z.nodeName);if(Re("uponSanitizeElement",Z,{tagName:Nt,allowedTags:rt}),Z.hasChildNodes()&&!Be(Z.firstElementChild)&&(!Be(Z.content)||!Be(Z.content.firstElementChild))&&Dr(/<[/\w]/g,Z.innerHTML)&&Dr(/<[/\w]/g,Z.textContent)||Nt==="select"&&Dr(/