@diplodoc/transform 4.63.0 → 4.63.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/js/base.js CHANGED
@@ -181,7 +181,27 @@
181
181
 
182
182
  // src/js/inline-code/constant.ts
183
183
  var INLINE_CODE = ".yfm-clipboard-inline-code";
184
+ var INLINE_CODE_ID = "tooltip_inline_clipboard_dialog";
185
+ var INLINE_CODE_CLASS = "yfm inline_code_tooltip";
184
186
  var OPEN_CLASS = "open";
187
+ var LANG_TOKEN = {
188
+ ru: "\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u043E",
189
+ en: "Copied",
190
+ ar: "\u062A\u0645 \u0627\u0644\u0646\u0633\u062E",
191
+ cs: "Zkop\xEDrov\xE1no",
192
+ fr: "Copi\xE9",
193
+ es: "Copiado",
194
+ he: "\u05D4\u05D5\u05E2\u05EA\u05E7",
195
+ bg: "\u041A\u043E\u043F\u0438\u0440\u0430\u043D\u043E",
196
+ et: "Kopeeritud",
197
+ el: "\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03AC\u03C6\u03B7\u03BA\u03B5",
198
+ pt: "Copiado",
199
+ zh: "\u5DF2\u590D\u5236",
200
+ "zh-tw": "\u5DF2\u8907\u88FD",
201
+ kk: "\u041A\u04E9\u0448\u0456\u0440\u0456\u043B\u0434\u0456",
202
+ tr: "Kopyaland\u0131",
203
+ uz: "Nusxalandi"
204
+ };
185
205
 
186
206
  // src/js/term/utils.ts
187
207
  var Selector = {
@@ -207,7 +227,7 @@
207
227
  var timer = null;
208
228
  var isListenerNeeded = true;
209
229
  function getTooltipElement() {
210
- return document.querySelector(".yfm-inline-code-tooltip");
230
+ return document.getElementById(INLINE_CODE_ID);
211
231
  }
212
232
  function setTooltipAriaAttributes(tooltipElement, targetElement) {
213
233
  const ariaLive = targetElement.getAttribute("aria-live") || "polite";
@@ -296,31 +316,52 @@
296
316
  function closeTooltipFn(definition) {
297
317
  definition.classList.remove(OPEN_CLASS);
298
318
  const inline = getInlineCodeByTooltip(definition);
299
- const tooltipParent = tooltipParentElement(inline);
319
+ const inlineCodepParent = tooltipParentElement(inline);
320
+ const tooltipParent = tooltipParentElement(definition);
300
321
  definition.removeAttribute("inline-id");
301
- if (!tooltipParent) {
322
+ if (!inlineCodepParent || !tooltipParent) {
302
323
  return;
303
324
  }
304
- tooltipParent.removeEventListener("scroll", tooltipOnResize);
325
+ tooltipParent.removeChild(definition);
326
+ inlineCodepParent.removeEventListener("scroll", tooltipOnResize);
305
327
  isListenerNeeded = true;
306
328
  }
329
+ function createTooltip() {
330
+ var _a;
331
+ let tooltip = getTooltipElement();
332
+ if (!tooltip) {
333
+ const pageContent = document.querySelector(".dc-doc-page__content") || document.body;
334
+ const lang = document.documentElement.lang || "en";
335
+ const tooltipText = (_a = LANG_TOKEN[lang]) != null ? _a : LANG_TOKEN.en;
336
+ const host = document.createElement("div");
337
+ host.innerHTML = `
338
+ <div id="${INLINE_CODE_ID}" class="${INLINE_CODE_CLASS}"
339
+ role="dialog" aria-live="polite" aria-modal="true">
340
+ ${tooltipText}
341
+ </div>
342
+ `;
343
+ tooltip = host.firstElementChild;
344
+ pageContent.appendChild(tooltip);
345
+ }
346
+ return tooltip;
347
+ }
307
348
  function openTooltip(target) {
308
- const tooltipElement = document.getElementById("tooltip_inline_clipboard_dialog");
309
- if (!target.matches(".yfm-clipboard-inline-code") || !tooltipElement) {
349
+ const tooltip = createTooltip();
350
+ if (!target.matches(INLINE_CODE) || !tooltip) {
310
351
  return;
311
352
  }
312
- tooltipElement.setAttribute("inline-id", target.getAttribute("id") || "");
313
- setTooltipAriaAttributes(tooltipElement, target);
314
- setTooltipPosition(tooltipElement, target);
315
- if (tooltipElement.classList.contains(OPEN_CLASS)) {
316
- tooltipElement.classList.remove(OPEN_CLASS);
353
+ tooltip.setAttribute("inline-id", target.getAttribute("id") || "");
354
+ setTooltipAriaAttributes(tooltip, target);
355
+ setTooltipPosition(tooltip, target);
356
+ if (tooltip.classList.contains(OPEN_CLASS)) {
357
+ tooltip.classList.remove(OPEN_CLASS);
317
358
  requestAnimationFrame(() => {
318
- tooltipElement.classList.add(OPEN_CLASS);
359
+ tooltip.classList.add(OPEN_CLASS);
319
360
  });
320
361
  } else {
321
- tooltipElement.classList.add(OPEN_CLASS);
362
+ tooltip.classList.add(OPEN_CLASS);
322
363
  }
323
- return tooltipElement;
364
+ return tooltip;
324
365
  }
325
366
  function closeTooltip(target) {
326
367
  checkTimerAndClear();
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../node_modules/get-root-node-polyfill/index.js", "../../src/js/polyfill.js", "../../src/js/utils.ts", "../../src/js/code.ts", "../../src/js/anchor.ts", "../../src/js/inline-code/constant.ts", "../../src/js/term/utils.ts", "../../src/js/inline-code/utils.ts", "../../src/js/inline-code/index.ts"],
4
- "sourcesContent": ["'use strict';\n\n// Node getRootNode(optional GetRootNodeOptions options);\n\n/**\n * Returns the context object\u2019s shadow-including root if options\u2019s composed is true.\n * Returns the context object\u2019s root otherwise.\n *\n * The root of an object is itself, if its parent is null, or else it is the root of its parent.\n *\n * The shadow-including root of an object is its root\u2019s host\u2019s shadow-including root,\n * if the object\u2019s root is a shadow root, and its root otherwise.\n *\n * https://dom.spec.whatwg.org/#dom-node-getrootnode\n *\n * @memberof Node.prototype\n * @param {!Object} [opt = {}] - Options.\n * @param {!boolean} [opt.composed] - See above description.\n * @returns {!Node} The root node.\n */\nfunction getRootNode(opt) {\n var composed = typeof opt === 'object' && Boolean(opt.composed);\n\n return composed ? getShadowIncludingRoot(this) : getRoot(this);\n}\n\nfunction getShadowIncludingRoot(node) {\n var root = getRoot(node);\n\n if (isShadowRoot(root)) {\n return getShadowIncludingRoot(root.host);\n }\n\n return root;\n}\n\nfunction getRoot(node) {\n if (node.parentNode != null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\nfunction isShadowRoot(node) {\n return node.nodeName === '#document-fragment' && node.constructor.name === 'ShadowRoot';\n}\n\nif (typeof module === 'object' && module.exports) {\n module.exports = getRootNode;\n}\n", "import getRootNode from 'get-root-node-polyfill';\n\nif (typeof document !== 'undefined') {\n // matches polyfill for old edge\n (function (e) {\n const matches =\n e.matches ||\n e.matchesSelector ||\n e.webkitMatchesSelector ||\n e.mozMatchesSelector ||\n e.msMatchesSelector ||\n e.oMatchesSelector;\n\n if (matches) {\n e.matches = e.matchesSelector = matches;\n } else {\n e.matches = e.matchesSelector = function matches(selector) {\n const rootNode = e.getRootNode ? e.getRootNode() : getRootNode.call(e);\n const matches = rootNode.querySelectorAll(selector);\n const th = this;\n return Array.prototype.some.call(matches, (e) => {\n return e === th;\n });\n };\n }\n // eslint-disable-next-line no-undef\n })(Element.prototype);\n}\n", "export const getEventTarget = (event: Event) => {\n const path = event.composedPath();\n return Array.isArray(path) && path.length > 0 ? path[0] : event.target;\n};\n\nexport const isCustom = (event: Event) => {\n const target = getEventTarget(event);\n return !target || !(target as HTMLElement).matches;\n};\n\nexport const copyToClipboard = async (text: string) => {\n if (!text) {\n return;\n }\n\n if (navigator.clipboard && typeof navigator.clipboard.writeText) {\n return navigator.clipboard.writeText(text);\n }\n\n const textarea = document.createElement('textarea');\n textarea.setAttribute('style', 'position: absolute; left: 1000%');\n textarea.textContent = text;\n document.body.append(textarea);\n\n textarea.select();\n document.execCommand('copy');\n\n document.body.removeChild(textarea);\n};\n", "import {copyToClipboard, getEventTarget, isCustom} from './utils';\n\nconst BUTTON_SELECTOR = '.yfm-clipboard-button';\n\nfunction notifySuccess(svgButton: HTMLElement | null) {\n if (!svgButton) {\n return;\n }\n\n const id = svgButton.getAttribute('data-animation');\n\n // @ts-expect-error\n const icon = svgButton.getRootNode().getElementById(`visibileAnimation-${id}`);\n\n if (!icon) {\n return;\n }\n\n icon.beginElement();\n}\n\nfunction buttonCopyFn(target: HTMLElement) {\n const parent = target.parentNode;\n\n if (!parent) {\n return;\n }\n\n const code = parent.querySelector<HTMLElement>('pre code');\n\n if (!code) {\n return;\n }\n\n // Get all text nodes and filter out line numbers\n const textContent = Array.from(code.childNodes)\n .filter((node) => {\n // Skip line number spans\n if (node instanceof HTMLElement && node.classList.contains('yfm-line-number')) {\n return false;\n }\n return true;\n })\n .map((node) => node.textContent)\n .join('');\n\n copyToClipboard(textContent).then(() => {\n notifySuccess(parent.querySelector('.yfm-clipboard-icon'));\n\n setTimeout(() => target.blur(), 1500);\n });\n}\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n const target = getEventTarget(event) as HTMLElement;\n\n const button = target.matches(BUTTON_SELECTOR);\n\n if (isCustom(event) || !button) {\n return;\n }\n\n buttonCopyFn(target);\n });\n}\n", "import {copyToClipboard, getEventTarget, isCustom} from './utils';\n\nconst ANCHOR_BUTTON_SELECTOR = '.yfm-clipboard-anchor';\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n const target = getEventTarget(event) as HTMLElement;\n\n if (isCustom(event) || !target.matches(ANCHOR_BUTTON_SELECTOR)) {\n return;\n }\n\n const href = target.getAttribute('data-href') || '';\n const link = new URL(href, window.location.href).toString();\n\n copyToClipboard(link);\n });\n}\n", "export const INLINE_CODE = '.yfm-clipboard-inline-code';\n\nexport const OPEN_CLASS = 'open';\n", "export const Selector = {\n TITLE: '.yfm .yfm-term_title',\n CONTENT: '.yfm .yfm-term_dfn',\n};\nexport const openClass = 'open';\nexport const openDefinitionClass = Selector.CONTENT.replace(/\\./g, '') + ' ' + openClass;\nlet isListenerNeeded = true;\n\nexport function setDefinitionId(definitionElement: HTMLElement, termElement: HTMLElement): void {\n const termId = termElement.getAttribute('id') || Math.random().toString(36).substr(2, 8);\n definitionElement?.setAttribute('term-id', termId);\n}\n\nexport function setDefinitonAriaAttributes(\n definitionElement: HTMLElement,\n termElement: HTMLElement,\n): void {\n const ariaLive = termElement.getAttribute('aria-live') || 'polite';\n definitionElement?.setAttribute('aria-live', ariaLive);\n definitionElement?.setAttribute('aria-modal', 'true');\n}\n\nexport function setDefinitionPosition(\n definitionElement: HTMLElement,\n termElement: HTMLElement,\n): void {\n const {\n x: termX,\n y: termY,\n right: termRight,\n left: termLeft,\n width: termWidth,\n height: termHeight,\n } = termElement.getBoundingClientRect();\n\n const termParent = termParentElement(termElement);\n\n if (!termParent) {\n return;\n }\n\n const {right: termParentRight, left: termParentLeft} = termParent.getBoundingClientRect();\n\n if ((termParentRight < termLeft || termParentLeft > termRight) && !isListenerNeeded) {\n closeDefinition(definitionElement);\n return;\n }\n\n if (isListenerNeeded && termParent) {\n termParent.addEventListener('scroll', termOnResize);\n isListenerNeeded = false;\n }\n\n const relativeX = Number(definitionElement.getAttribute('relativeX'));\n const relativeY = Number(definitionElement.getAttribute('relativeY'));\n\n if (relativeX === termX && relativeY === termY) {\n return;\n }\n\n definitionElement.setAttribute('relativeX', String(termX));\n definitionElement.setAttribute('relativeY', String(termY));\n\n const offsetTop = termHeight + 5;\n const definitionParent = definitionElement.parentElement;\n\n if (!definitionParent) {\n return;\n }\n\n const {width: definitionWidth} = definitionElement.getBoundingClientRect();\n const {left: definitionParentLeft} = definitionParent.getBoundingClientRect();\n\n // If definition not fit document change base alignment\n const definitionLeftCoordinate = Number(getCoords(termElement).left);\n const definitionRightCoordinate = definitionWidth + definitionLeftCoordinate;\n\n const definitionOutOfScreenOnLeft = definitionLeftCoordinate - definitionWidth < 0;\n const definitionOutOfScreenOnRight = definitionRightCoordinate > document.body.clientWidth;\n\n const isAlignSwapped = definitionOutOfScreenOnRight || document.dir === 'rtl';\n const fitDefinitionDocument =\n isAlignSwapped && !definitionOutOfScreenOnLeft ? definitionWidth - termWidth : 0;\n const customHeaderTop = getCoords(definitionParent).top - definitionParent.offsetTop;\n const offsetRight = 5;\n const shiftLeft = definitionOutOfScreenOnRight\n ? definitionRightCoordinate - document.body.clientWidth + offsetRight\n : 0;\n const offsetLeft =\n getCoords(termElement).left -\n definitionParentLeft +\n definitionParent.offsetLeft -\n fitDefinitionDocument;\n\n const isShiftLeftNeeded = offsetLeft + definitionWidth >= document.body.clientWidth;\n\n definitionElement.style.top =\n Number(getCoords(termElement).top + offsetTop - customHeaderTop) + 'px';\n definitionElement.style.left = Number(offsetLeft - (isShiftLeftNeeded ? shiftLeft : 0)) + 'px';\n}\n\nfunction termOnResize() {\n const openedDefinition = document.getElementsByClassName(openDefinitionClass)[0] as HTMLElement;\n\n if (!openedDefinition) {\n return;\n }\n const termId = openedDefinition.getAttribute('term-id') || '';\n const termElement = document.getElementById(termId);\n\n if (!termElement) {\n return;\n }\n\n setDefinitionPosition(openedDefinition, termElement);\n}\n\nfunction termParentElement(term: HTMLElement | null) {\n if (!term) {\n return null;\n }\n\n const closestScrollableParent = term.closest('table') || term.closest('code');\n\n return closestScrollableParent || term.parentElement;\n}\n\nexport function openDefinition(target: HTMLElement) {\n const openedDefinition = document.getElementsByClassName(openDefinitionClass)[0] as HTMLElement;\n\n const termId = target.getAttribute('id');\n const termKey = target.getAttribute('term-key');\n const definitionElement = document.getElementById(termKey + '_element');\n\n const isSameTerm = openedDefinition && termId === openedDefinition.getAttribute('term-id');\n if (isSameTerm) {\n closeDefinition(openedDefinition);\n return;\n }\n\n const isTargetDefinitionContent = target.closest(\n [Selector.CONTENT.replace(' ', ''), openClass].join('.'),\n );\n\n if (openedDefinition && !isTargetDefinitionContent) {\n closeDefinition(openedDefinition);\n }\n\n if (!target.matches(Selector.TITLE) || !definitionElement) {\n return;\n }\n\n setDefinitionId(definitionElement, target);\n setDefinitonAriaAttributes(definitionElement, target);\n setDefinitionPosition(definitionElement, target);\n\n definitionElement.classList.toggle(openClass);\n\n trapFocus(definitionElement);\n}\n\nexport function closeDefinition(definition: HTMLElement) {\n definition.classList.remove(openClass);\n const term = getTermByDefinition(definition);\n const termParent = termParentElement(term);\n\n if (!termParent) {\n return;\n }\n\n termParent.removeEventListener('scroll', termOnResize);\n isListenerNeeded = true;\n}\n\nexport function getCoords(elem: HTMLElement) {\n const box = elem.getBoundingClientRect();\n\n const body = document.body;\n const docEl = document.documentElement;\n\n const scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;\n const scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft;\n\n const clientTop = docEl.clientTop || body.clientTop || 0;\n const clientLeft = docEl.clientLeft || body.clientLeft || 0;\n\n const top = box.top + scrollTop - clientTop;\n const left = box.left + scrollLeft - clientLeft;\n\n return {top: Math.round(top), left: Math.round(left)};\n}\n\nexport function trapFocus(element: HTMLElement) {\n const focusableElements = element.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n const firstFocusableElement = focusableElements[0] as HTMLElement;\n const lastFocusableElement = focusableElements[focusableElements.length - 1] as HTMLElement;\n\n if (firstFocusableElement) {\n firstFocusableElement.focus();\n }\n\n element.addEventListener('keydown', function (e) {\n const isTabPressed = e.key === 'Tab' || e.keyCode === 9;\n if (!isTabPressed) {\n return;\n }\n\n if (e.shiftKey) {\n if (document.activeElement === firstFocusableElement) {\n lastFocusableElement.focus();\n e.preventDefault();\n }\n } else if (document.activeElement === lastFocusableElement) {\n firstFocusableElement.focus();\n e.preventDefault();\n }\n });\n}\n\nexport function getTermByDefinition(definition: HTMLElement) {\n const termId = definition.getAttribute('term-id');\n\n return termId ? document.getElementById(termId) : null;\n}\n", "import {getCoords} from '../term/utils';\n\nimport {OPEN_CLASS} from './constant';\n\nexport let timer: ReturnType<typeof setTimeout> | null = null;\n\nlet isListenerNeeded = true;\n\nexport function getTooltipElement(): HTMLElement | null {\n return document.querySelector('.yfm-inline-code-tooltip');\n}\n\nfunction setTooltipAriaAttributes(tooltipElement: HTMLElement, targetElement: HTMLElement): void {\n const ariaLive = targetElement.getAttribute('aria-live') || 'polite';\n tooltipElement?.setAttribute('aria-live', ariaLive);\n tooltipElement?.setAttribute('aria-modal', 'true');\n}\n\nfunction checkTimerAndClear() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n}\n\nfunction tooltipParentElement(target: HTMLElement | null) {\n if (!target) {\n return null;\n }\n\n const closestScrollableParent = target.closest('table') || target.closest('code');\n\n return closestScrollableParent || target.parentElement;\n}\n\nfunction tooltipOnResize() {\n const openedDefinition = getTooltipElement();\n\n if (!openedDefinition) {\n return;\n }\n const inlineId = openedDefinition.getAttribute('inline-id') || '';\n const targetElement = document.getElementById(inlineId);\n\n if (!targetElement) {\n return;\n }\n\n setTooltipPosition(openedDefinition, targetElement);\n}\n\nexport function setTooltipPosition(tooltipElement: HTMLElement, targetElement: HTMLElement): void {\n const {\n x: inlineX,\n y: inlineY,\n right: inlineRight,\n left: inlineLeft,\n width: inlineWidth,\n height: inlineHeight,\n } = targetElement.getBoundingClientRect();\n\n const tooltipParent = tooltipParentElement(targetElement);\n\n if (!tooltipParent) {\n return;\n }\n\n const {right: tooltipParentRight, left: tooltipParentLeft} =\n tooltipParent.getBoundingClientRect();\n\n if ((tooltipParentRight < inlineLeft || tooltipParentLeft > inlineRight) && !isListenerNeeded) {\n closeTooltip(tooltipElement);\n return;\n }\n\n if (isListenerNeeded && tooltipParent) {\n tooltipParent.addEventListener('scroll', tooltipOnResize);\n isListenerNeeded = false;\n }\n\n const relativeX = Number(tooltipElement.getAttribute('relativeX'));\n const relativeY = Number(tooltipElement.getAttribute('relativeY'));\n\n if (relativeX === inlineX && relativeY === inlineY) {\n return;\n }\n\n tooltipElement.setAttribute('relativeX', String(inlineX));\n tooltipElement.setAttribute('relativeY', String(inlineY));\n\n const offsetTop = inlineHeight + 5;\n const definitionParent = tooltipElement.parentElement;\n\n if (!definitionParent) {\n return;\n }\n\n const {width: definitionWidth} = tooltipElement.getBoundingClientRect();\n const {left: definitionParentLeft} = definitionParent.getBoundingClientRect();\n\n // If definition not fit document change base alignment\n const definitionLeftCoordinate = Number(getCoords(targetElement).left);\n const definitionRightCoordinate = definitionWidth + definitionLeftCoordinate;\n\n const definitionOutOfScreenOnLeft = definitionLeftCoordinate - definitionWidth < 0;\n const definitionOutOfScreenOnRight = definitionRightCoordinate > document.body.clientWidth;\n\n const isAlignSwapped = definitionOutOfScreenOnRight || document.dir === 'rtl';\n const fitDefinitionDocument =\n isAlignSwapped && !definitionOutOfScreenOnLeft ? definitionWidth - inlineWidth : 0;\n const customHeaderTop = getCoords(definitionParent).top - definitionParent.offsetTop;\n const offsetRight = 5;\n const shiftLeft = definitionOutOfScreenOnRight\n ? definitionRightCoordinate - document.body.clientWidth + offsetRight\n : 0;\n const offsetLeft =\n getCoords(targetElement).left -\n definitionParentLeft +\n definitionParent.offsetLeft -\n fitDefinitionDocument;\n\n const isShiftLeftNeeded = offsetLeft + definitionWidth >= document.body.clientWidth;\n\n tooltipElement.style.top =\n Number(getCoords(targetElement).top + offsetTop - customHeaderTop) + 'px';\n tooltipElement.style.left = Number(offsetLeft - (isShiftLeftNeeded ? shiftLeft : 0)) + 'px';\n}\n\nexport function getInlineCodeByTooltip(definition: HTMLElement) {\n const inlineId = definition.getAttribute('inline-id');\n\n return inlineId ? document.getElementById(inlineId) : null;\n}\n\nfunction closeTooltipFn(definition: HTMLElement) {\n definition.classList.remove(OPEN_CLASS);\n const inline = getInlineCodeByTooltip(definition);\n const tooltipParent = tooltipParentElement(inline);\n\n definition.removeAttribute('inline-id');\n\n if (!tooltipParent) {\n return;\n }\n\n tooltipParent.removeEventListener('scroll', tooltipOnResize);\n isListenerNeeded = true;\n}\n\nexport function openTooltip(target: HTMLElement) {\n const tooltipElement = document.getElementById('tooltip_inline_clipboard_dialog');\n\n if (!target.matches('.yfm-clipboard-inline-code') || !tooltipElement) {\n return;\n }\n\n tooltipElement.setAttribute('inline-id', target.getAttribute('id') || '');\n setTooltipAriaAttributes(tooltipElement, target);\n setTooltipPosition(tooltipElement, target);\n\n // In order not to get rid of the smooth appearance effect, I had to do this\n if (tooltipElement.classList.contains(OPEN_CLASS)) {\n tooltipElement.classList.remove(OPEN_CLASS);\n requestAnimationFrame(() => {\n tooltipElement.classList.add(OPEN_CLASS);\n });\n } else {\n tooltipElement.classList.add(OPEN_CLASS);\n }\n\n return tooltipElement;\n}\n\nexport function closeTooltip(target: HTMLElement) {\n checkTimerAndClear();\n closeTooltipFn(target);\n}\n\nexport function tooltipWorker(target: HTMLElement) {\n const definition = openTooltip(target);\n\n if (!definition) {\n return;\n }\n checkTimerAndClear();\n timer = setTimeout(() => {\n closeTooltip(definition);\n timer = null;\n }, 1000);\n}\n", "import {copyToClipboard, getEventTarget, isCustom} from '../utils';\n\nimport {INLINE_CODE, OPEN_CLASS} from './constant';\nimport {\n closeTooltip,\n getInlineCodeByTooltip,\n getTooltipElement,\n setTooltipPosition,\n tooltipWorker,\n} from './utils';\n\nexport function inlineCopyFn(target: HTMLElement) {\n const innerText = target.innerText;\n\n if (!innerText) {\n return;\n }\n\n copyToClipboard(innerText).then(() => {\n tooltipWorker(target);\n });\n}\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n const target = getEventTarget(event) as HTMLElement;\n\n const inline = target.matches(INLINE_CODE);\n\n if (isCustom(event) || !inline) {\n return;\n }\n\n inlineCopyFn(target);\n });\n\n document.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' && document.activeElement) {\n const activeElement = document.activeElement as HTMLElement;\n const classInlineCode = INLINE_CODE.replace('.', '');\n\n if (!activeElement.classList.contains(classInlineCode)) {\n return;\n }\n\n const innerText = activeElement.innerText;\n\n if (!innerText) {\n return;\n }\n\n copyToClipboard(innerText).then(() => {\n tooltipWorker(activeElement);\n });\n }\n\n const inlineTooltip = getTooltipElement();\n\n if (event.key === 'Escape' && inlineTooltip) {\n closeTooltip(inlineTooltip);\n getInlineCodeByTooltip(inlineTooltip)?.focus(); // Set focus back to open button after closing popup\n }\n });\n\n window.addEventListener('resize', () => {\n const inlineTooltip = getTooltipElement();\n if (!inlineTooltip) {\n return;\n }\n\n const inlineId = inlineTooltip.getAttribute('inline-id') || '';\n const inlineCodeElement = document.getElementById(inlineId);\n\n if (!inlineCodeElement) {\n inlineTooltip.classList.toggle(OPEN_CLASS);\n return;\n }\n\n setTooltipPosition(inlineTooltip, inlineCodeElement);\n });\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["'use strict';\n\n// Node getRootNode(optional GetRootNodeOptions options);\n\n/**\n * Returns the context object\u2019s shadow-including root if options\u2019s composed is true.\n * Returns the context object\u2019s root otherwise.\n *\n * The root of an object is itself, if its parent is null, or else it is the root of its parent.\n *\n * The shadow-including root of an object is its root\u2019s host\u2019s shadow-including root,\n * if the object\u2019s root is a shadow root, and its root otherwise.\n *\n * https://dom.spec.whatwg.org/#dom-node-getrootnode\n *\n * @memberof Node.prototype\n * @param {!Object} [opt = {}] - Options.\n * @param {!boolean} [opt.composed] - See above description.\n * @returns {!Node} The root node.\n */\nfunction getRootNode(opt) {\n var composed = typeof opt === 'object' && Boolean(opt.composed);\n\n return composed ? getShadowIncludingRoot(this) : getRoot(this);\n}\n\nfunction getShadowIncludingRoot(node) {\n var root = getRoot(node);\n\n if (isShadowRoot(root)) {\n return getShadowIncludingRoot(root.host);\n }\n\n return root;\n}\n\nfunction getRoot(node) {\n if (node.parentNode != null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\nfunction isShadowRoot(node) {\n return node.nodeName === '#document-fragment' && node.constructor.name === 'ShadowRoot';\n}\n\nif (typeof module === 'object' && module.exports) {\n module.exports = getRootNode;\n}\n", "import getRootNode from 'get-root-node-polyfill';\n\nif (typeof document !== 'undefined') {\n // matches polyfill for old edge\n (function (e) {\n const matches =\n e.matches ||\n e.matchesSelector ||\n e.webkitMatchesSelector ||\n e.mozMatchesSelector ||\n e.msMatchesSelector ||\n e.oMatchesSelector;\n\n if (matches) {\n e.matches = e.matchesSelector = matches;\n } else {\n e.matches = e.matchesSelector = function matches(selector) {\n const rootNode = e.getRootNode ? e.getRootNode() : getRootNode.call(e);\n const matches = rootNode.querySelectorAll(selector);\n const th = this;\n return Array.prototype.some.call(matches, (e) => {\n return e === th;\n });\n };\n }\n // eslint-disable-next-line no-undef\n })(Element.prototype);\n}\n", "export const getEventTarget = (event: Event) => {\n const path = event.composedPath();\n return Array.isArray(path) && path.length > 0 ? path[0] : event.target;\n};\n\nexport const isCustom = (event: Event) => {\n const target = getEventTarget(event);\n return !target || !(target as HTMLElement).matches;\n};\n\nexport const copyToClipboard = async (text: string) => {\n if (!text) {\n return;\n }\n\n if (navigator.clipboard && typeof navigator.clipboard.writeText) {\n return navigator.clipboard.writeText(text);\n }\n\n const textarea = document.createElement('textarea');\n textarea.setAttribute('style', 'position: absolute; left: 1000%');\n textarea.textContent = text;\n document.body.append(textarea);\n\n textarea.select();\n document.execCommand('copy');\n\n document.body.removeChild(textarea);\n};\n", "import {copyToClipboard, getEventTarget, isCustom} from './utils';\n\nconst BUTTON_SELECTOR = '.yfm-clipboard-button';\n\nfunction notifySuccess(svgButton: HTMLElement | null) {\n if (!svgButton) {\n return;\n }\n\n const id = svgButton.getAttribute('data-animation');\n\n // @ts-expect-error\n const icon = svgButton.getRootNode().getElementById(`visibileAnimation-${id}`);\n\n if (!icon) {\n return;\n }\n\n icon.beginElement();\n}\n\nfunction buttonCopyFn(target: HTMLElement) {\n const parent = target.parentNode;\n\n if (!parent) {\n return;\n }\n\n const code = parent.querySelector<HTMLElement>('pre code');\n\n if (!code) {\n return;\n }\n\n // Get all text nodes and filter out line numbers\n const textContent = Array.from(code.childNodes)\n .filter((node) => {\n // Skip line number spans\n if (node instanceof HTMLElement && node.classList.contains('yfm-line-number')) {\n return false;\n }\n return true;\n })\n .map((node) => node.textContent)\n .join('');\n\n copyToClipboard(textContent).then(() => {\n notifySuccess(parent.querySelector('.yfm-clipboard-icon'));\n\n setTimeout(() => target.blur(), 1500);\n });\n}\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n const target = getEventTarget(event) as HTMLElement;\n\n const button = target.matches(BUTTON_SELECTOR);\n\n if (isCustom(event) || !button) {\n return;\n }\n\n buttonCopyFn(target);\n });\n}\n", "import {copyToClipboard, getEventTarget, isCustom} from './utils';\n\nconst ANCHOR_BUTTON_SELECTOR = '.yfm-clipboard-anchor';\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n const target = getEventTarget(event) as HTMLElement;\n\n if (isCustom(event) || !target.matches(ANCHOR_BUTTON_SELECTOR)) {\n return;\n }\n\n const href = target.getAttribute('data-href') || '';\n const link = new URL(href, window.location.href).toString();\n\n copyToClipboard(link);\n });\n}\n", "import type {Lang} from 'src/transform/typings';\n\nexport const INLINE_CODE = '.yfm-clipboard-inline-code';\n\nexport const INLINE_CODE_ID = 'tooltip_inline_clipboard_dialog';\n\nexport const INLINE_CODE_CLASS = 'yfm inline_code_tooltip';\n\nexport const OPEN_CLASS = 'open';\n\nexport const LANG_TOKEN: Record<Lang, string> = {\n ru: '\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u043E',\n en: 'Copied',\n ar: '\u062A\u0645 \u0627\u0644\u0646\u0633\u062E',\n cs: 'Zkop\u00EDrov\u00E1no',\n fr: 'Copi\u00E9',\n es: 'Copiado',\n he: '\u05D4\u05D5\u05E2\u05EA\u05E7',\n bg: '\u041A\u043E\u043F\u0438\u0440\u0430\u043D\u043E',\n et: 'Kopeeritud',\n el: '\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03AC\u03C6\u03B7\u03BA\u03B5',\n pt: 'Copiado',\n zh: '\u5DF2\u590D\u5236',\n 'zh-tw': '\u5DF2\u8907\u88FD',\n kk: '\u041A\u04E9\u0448\u0456\u0440\u0456\u043B\u0434\u0456',\n tr: 'Kopyaland\u0131',\n uz: 'Nusxalandi',\n};\n", "export const Selector = {\n TITLE: '.yfm .yfm-term_title',\n CONTENT: '.yfm .yfm-term_dfn',\n};\nexport const openClass = 'open';\nexport const openDefinitionClass = Selector.CONTENT.replace(/\\./g, '') + ' ' + openClass;\nlet isListenerNeeded = true;\n\nexport function setDefinitionId(definitionElement: HTMLElement, termElement: HTMLElement): void {\n const termId = termElement.getAttribute('id') || Math.random().toString(36).substr(2, 8);\n definitionElement?.setAttribute('term-id', termId);\n}\n\nexport function setDefinitonAriaAttributes(\n definitionElement: HTMLElement,\n termElement: HTMLElement,\n): void {\n const ariaLive = termElement.getAttribute('aria-live') || 'polite';\n definitionElement?.setAttribute('aria-live', ariaLive);\n definitionElement?.setAttribute('aria-modal', 'true');\n}\n\nexport function setDefinitionPosition(\n definitionElement: HTMLElement,\n termElement: HTMLElement,\n): void {\n const {\n x: termX,\n y: termY,\n right: termRight,\n left: termLeft,\n width: termWidth,\n height: termHeight,\n } = termElement.getBoundingClientRect();\n\n const termParent = termParentElement(termElement);\n\n if (!termParent) {\n return;\n }\n\n const {right: termParentRight, left: termParentLeft} = termParent.getBoundingClientRect();\n\n if ((termParentRight < termLeft || termParentLeft > termRight) && !isListenerNeeded) {\n closeDefinition(definitionElement);\n return;\n }\n\n if (isListenerNeeded && termParent) {\n termParent.addEventListener('scroll', termOnResize);\n isListenerNeeded = false;\n }\n\n const relativeX = Number(definitionElement.getAttribute('relativeX'));\n const relativeY = Number(definitionElement.getAttribute('relativeY'));\n\n if (relativeX === termX && relativeY === termY) {\n return;\n }\n\n definitionElement.setAttribute('relativeX', String(termX));\n definitionElement.setAttribute('relativeY', String(termY));\n\n const offsetTop = termHeight + 5;\n const definitionParent = definitionElement.parentElement;\n\n if (!definitionParent) {\n return;\n }\n\n const {width: definitionWidth} = definitionElement.getBoundingClientRect();\n const {left: definitionParentLeft} = definitionParent.getBoundingClientRect();\n\n // If definition not fit document change base alignment\n const definitionLeftCoordinate = Number(getCoords(termElement).left);\n const definitionRightCoordinate = definitionWidth + definitionLeftCoordinate;\n\n const definitionOutOfScreenOnLeft = definitionLeftCoordinate - definitionWidth < 0;\n const definitionOutOfScreenOnRight = definitionRightCoordinate > document.body.clientWidth;\n\n const isAlignSwapped = definitionOutOfScreenOnRight || document.dir === 'rtl';\n const fitDefinitionDocument =\n isAlignSwapped && !definitionOutOfScreenOnLeft ? definitionWidth - termWidth : 0;\n const customHeaderTop = getCoords(definitionParent).top - definitionParent.offsetTop;\n const offsetRight = 5;\n const shiftLeft = definitionOutOfScreenOnRight\n ? definitionRightCoordinate - document.body.clientWidth + offsetRight\n : 0;\n const offsetLeft =\n getCoords(termElement).left -\n definitionParentLeft +\n definitionParent.offsetLeft -\n fitDefinitionDocument;\n\n const isShiftLeftNeeded = offsetLeft + definitionWidth >= document.body.clientWidth;\n\n definitionElement.style.top =\n Number(getCoords(termElement).top + offsetTop - customHeaderTop) + 'px';\n definitionElement.style.left = Number(offsetLeft - (isShiftLeftNeeded ? shiftLeft : 0)) + 'px';\n}\n\nfunction termOnResize() {\n const openedDefinition = document.getElementsByClassName(openDefinitionClass)[0] as HTMLElement;\n\n if (!openedDefinition) {\n return;\n }\n const termId = openedDefinition.getAttribute('term-id') || '';\n const termElement = document.getElementById(termId);\n\n if (!termElement) {\n return;\n }\n\n setDefinitionPosition(openedDefinition, termElement);\n}\n\nfunction termParentElement(term: HTMLElement | null) {\n if (!term) {\n return null;\n }\n\n const closestScrollableParent = term.closest('table') || term.closest('code');\n\n return closestScrollableParent || term.parentElement;\n}\n\nexport function openDefinition(target: HTMLElement) {\n const openedDefinition = document.getElementsByClassName(openDefinitionClass)[0] as HTMLElement;\n\n const termId = target.getAttribute('id');\n const termKey = target.getAttribute('term-key');\n const definitionElement = document.getElementById(termKey + '_element');\n\n const isSameTerm = openedDefinition && termId === openedDefinition.getAttribute('term-id');\n if (isSameTerm) {\n closeDefinition(openedDefinition);\n return;\n }\n\n const isTargetDefinitionContent = target.closest(\n [Selector.CONTENT.replace(' ', ''), openClass].join('.'),\n );\n\n if (openedDefinition && !isTargetDefinitionContent) {\n closeDefinition(openedDefinition);\n }\n\n if (!target.matches(Selector.TITLE) || !definitionElement) {\n return;\n }\n\n setDefinitionId(definitionElement, target);\n setDefinitonAriaAttributes(definitionElement, target);\n setDefinitionPosition(definitionElement, target);\n\n definitionElement.classList.toggle(openClass);\n\n trapFocus(definitionElement);\n}\n\nexport function closeDefinition(definition: HTMLElement) {\n definition.classList.remove(openClass);\n const term = getTermByDefinition(definition);\n const termParent = termParentElement(term);\n\n if (!termParent) {\n return;\n }\n\n termParent.removeEventListener('scroll', termOnResize);\n isListenerNeeded = true;\n}\n\nexport function getCoords(elem: HTMLElement) {\n const box = elem.getBoundingClientRect();\n\n const body = document.body;\n const docEl = document.documentElement;\n\n const scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;\n const scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft;\n\n const clientTop = docEl.clientTop || body.clientTop || 0;\n const clientLeft = docEl.clientLeft || body.clientLeft || 0;\n\n const top = box.top + scrollTop - clientTop;\n const left = box.left + scrollLeft - clientLeft;\n\n return {top: Math.round(top), left: Math.round(left)};\n}\n\nexport function trapFocus(element: HTMLElement) {\n const focusableElements = element.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n const firstFocusableElement = focusableElements[0] as HTMLElement;\n const lastFocusableElement = focusableElements[focusableElements.length - 1] as HTMLElement;\n\n if (firstFocusableElement) {\n firstFocusableElement.focus();\n }\n\n element.addEventListener('keydown', function (e) {\n const isTabPressed = e.key === 'Tab' || e.keyCode === 9;\n if (!isTabPressed) {\n return;\n }\n\n if (e.shiftKey) {\n if (document.activeElement === firstFocusableElement) {\n lastFocusableElement.focus();\n e.preventDefault();\n }\n } else if (document.activeElement === lastFocusableElement) {\n firstFocusableElement.focus();\n e.preventDefault();\n }\n });\n}\n\nexport function getTermByDefinition(definition: HTMLElement) {\n const termId = definition.getAttribute('term-id');\n\n return termId ? document.getElementById(termId) : null;\n}\n", "import type {Lang} from 'src/transform/typings';\n\nimport {getCoords} from '../term/utils';\n\nimport {INLINE_CODE, INLINE_CODE_CLASS, INLINE_CODE_ID, LANG_TOKEN, OPEN_CLASS} from './constant';\n\nexport let timer: ReturnType<typeof setTimeout> | null = null;\n\nlet isListenerNeeded = true;\n\nexport function getTooltipElement(): HTMLElement | null {\n return document.getElementById(INLINE_CODE_ID);\n}\n\nfunction setTooltipAriaAttributes(tooltipElement: HTMLElement, targetElement: HTMLElement): void {\n const ariaLive = targetElement.getAttribute('aria-live') || 'polite';\n tooltipElement?.setAttribute('aria-live', ariaLive);\n tooltipElement?.setAttribute('aria-modal', 'true');\n}\n\nfunction checkTimerAndClear() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n}\n\nfunction tooltipParentElement(target: HTMLElement | null) {\n if (!target) {\n return null;\n }\n\n const closestScrollableParent = target.closest('table') || target.closest('code');\n\n return closestScrollableParent || target.parentElement;\n}\n\nfunction tooltipOnResize() {\n const openedDefinition = getTooltipElement();\n\n if (!openedDefinition) {\n return;\n }\n const inlineId = openedDefinition.getAttribute('inline-id') || '';\n const targetElement = document.getElementById(inlineId);\n\n if (!targetElement) {\n return;\n }\n\n setTooltipPosition(openedDefinition, targetElement);\n}\n\nexport function setTooltipPosition(tooltipElement: HTMLElement, targetElement: HTMLElement): void {\n const {\n x: inlineX,\n y: inlineY,\n right: inlineRight,\n left: inlineLeft,\n width: inlineWidth,\n height: inlineHeight,\n } = targetElement.getBoundingClientRect();\n\n const tooltipParent = tooltipParentElement(targetElement);\n\n if (!tooltipParent) {\n return;\n }\n\n const {right: tooltipParentRight, left: tooltipParentLeft} =\n tooltipParent.getBoundingClientRect();\n\n if ((tooltipParentRight < inlineLeft || tooltipParentLeft > inlineRight) && !isListenerNeeded) {\n closeTooltip(tooltipElement);\n return;\n }\n\n if (isListenerNeeded && tooltipParent) {\n tooltipParent.addEventListener('scroll', tooltipOnResize);\n isListenerNeeded = false;\n }\n\n const relativeX = Number(tooltipElement.getAttribute('relativeX'));\n const relativeY = Number(tooltipElement.getAttribute('relativeY'));\n\n if (relativeX === inlineX && relativeY === inlineY) {\n return;\n }\n\n tooltipElement.setAttribute('relativeX', String(inlineX));\n tooltipElement.setAttribute('relativeY', String(inlineY));\n\n const offsetTop = inlineHeight + 5;\n const definitionParent = tooltipElement.parentElement;\n\n if (!definitionParent) {\n return;\n }\n\n const {width: definitionWidth} = tooltipElement.getBoundingClientRect();\n const {left: definitionParentLeft} = definitionParent.getBoundingClientRect();\n\n // If definition not fit document change base alignment\n const definitionLeftCoordinate = Number(getCoords(targetElement).left);\n const definitionRightCoordinate = definitionWidth + definitionLeftCoordinate;\n\n const definitionOutOfScreenOnLeft = definitionLeftCoordinate - definitionWidth < 0;\n const definitionOutOfScreenOnRight = definitionRightCoordinate > document.body.clientWidth;\n\n const isAlignSwapped = definitionOutOfScreenOnRight || document.dir === 'rtl';\n const fitDefinitionDocument =\n isAlignSwapped && !definitionOutOfScreenOnLeft ? definitionWidth - inlineWidth : 0;\n const customHeaderTop = getCoords(definitionParent).top - definitionParent.offsetTop;\n const offsetRight = 5;\n const shiftLeft = definitionOutOfScreenOnRight\n ? definitionRightCoordinate - document.body.clientWidth + offsetRight\n : 0;\n const offsetLeft =\n getCoords(targetElement).left -\n definitionParentLeft +\n definitionParent.offsetLeft -\n fitDefinitionDocument;\n\n const isShiftLeftNeeded = offsetLeft + definitionWidth >= document.body.clientWidth;\n\n tooltipElement.style.top =\n Number(getCoords(targetElement).top + offsetTop - customHeaderTop) + 'px';\n tooltipElement.style.left = Number(offsetLeft - (isShiftLeftNeeded ? shiftLeft : 0)) + 'px';\n}\n\nexport function getInlineCodeByTooltip(definition: HTMLElement) {\n const inlineId = definition.getAttribute('inline-id');\n\n return inlineId ? document.getElementById(inlineId) : null;\n}\n\nfunction closeTooltipFn(definition: HTMLElement) {\n definition.classList.remove(OPEN_CLASS);\n const inline = getInlineCodeByTooltip(definition);\n const inlineCodepParent = tooltipParentElement(inline);\n const tooltipParent = tooltipParentElement(definition);\n\n definition.removeAttribute('inline-id');\n\n if (!inlineCodepParent || !tooltipParent) {\n return;\n }\n\n tooltipParent.removeChild(definition);\n inlineCodepParent.removeEventListener('scroll', tooltipOnResize);\n isListenerNeeded = true;\n}\n\nfunction createTooltip() {\n let tooltip = getTooltipElement();\n\n if (!tooltip) {\n const pageContent = document.querySelector('.dc-doc-page__content') || document.body;\n const lang = document.documentElement.lang || 'en';\n const tooltipText = LANG_TOKEN[lang as Lang] ?? LANG_TOKEN.en;\n const host = document.createElement('div');\n\n host.innerHTML = `\n <div id=\"${INLINE_CODE_ID}\" class=\"${INLINE_CODE_CLASS}\"\n role=\"dialog\" aria-live=\"polite\" aria-modal=\"true\">\n ${tooltipText}\n </div>\n `;\n\n tooltip = host.firstElementChild as HTMLElement;\n pageContent.appendChild(tooltip);\n }\n\n return tooltip;\n}\n\nexport function openTooltip(target: HTMLElement) {\n const tooltip = createTooltip();\n\n if (!target.matches(INLINE_CODE) || !tooltip) {\n return;\n }\n\n tooltip.setAttribute('inline-id', target.getAttribute('id') || '');\n setTooltipAriaAttributes(tooltip, target);\n setTooltipPosition(tooltip, target);\n\n // In order not to get rid of the smooth appearance effect, I had to do this\n if (tooltip.classList.contains(OPEN_CLASS)) {\n tooltip.classList.remove(OPEN_CLASS);\n requestAnimationFrame(() => {\n tooltip.classList.add(OPEN_CLASS);\n });\n } else {\n tooltip.classList.add(OPEN_CLASS);\n }\n\n return tooltip;\n}\n\nexport function closeTooltip(target: HTMLElement) {\n checkTimerAndClear();\n closeTooltipFn(target);\n}\n\nexport function tooltipWorker(target: HTMLElement) {\n const definition = openTooltip(target);\n\n if (!definition) {\n return;\n }\n checkTimerAndClear();\n timer = setTimeout(() => {\n closeTooltip(definition);\n timer = null;\n }, 1000);\n}\n", "import {copyToClipboard, getEventTarget, isCustom} from '../utils';\n\nimport {INLINE_CODE, OPEN_CLASS} from './constant';\nimport {\n closeTooltip,\n getInlineCodeByTooltip,\n getTooltipElement,\n setTooltipPosition,\n tooltipWorker,\n} from './utils';\n\nexport function inlineCopyFn(target: HTMLElement) {\n const innerText = target.innerText;\n\n if (!innerText) {\n return;\n }\n\n copyToClipboard(innerText).then(() => {\n tooltipWorker(target);\n });\n}\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n const target = getEventTarget(event) as HTMLElement;\n\n const inline = target.matches(INLINE_CODE);\n\n if (isCustom(event) || !inline) {\n return;\n }\n\n inlineCopyFn(target);\n });\n\n document.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' && document.activeElement) {\n const activeElement = document.activeElement as HTMLElement;\n const classInlineCode = INLINE_CODE.replace('.', '');\n\n if (!activeElement.classList.contains(classInlineCode)) {\n return;\n }\n\n const innerText = activeElement.innerText;\n\n if (!innerText) {\n return;\n }\n\n copyToClipboard(innerText).then(() => {\n tooltipWorker(activeElement);\n });\n }\n\n const inlineTooltip = getTooltipElement();\n\n if (event.key === 'Escape' && inlineTooltip) {\n closeTooltip(inlineTooltip);\n getInlineCodeByTooltip(inlineTooltip)?.focus(); // Set focus back to open button after closing popup\n }\n });\n\n window.addEventListener('resize', () => {\n const inlineTooltip = getTooltipElement();\n if (!inlineTooltip) {\n return;\n }\n\n const inlineId = inlineTooltip.getAttribute('inline-id') || '';\n const inlineCodeElement = document.getElementById(inlineId);\n\n if (!inlineCodeElement) {\n inlineTooltip.classList.toggle(OPEN_CLASS);\n return;\n }\n\n setTooltipPosition(inlineTooltip, inlineCodeElement);\n });\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["getRootNode", "matches", "getRootNode", "e"]
7
7
  }
@@ -1,2 +1,7 @@
1
- "use strict";(()=>{(()=>{var B=Object.create,L=Object.defineProperty,j=Object.getOwnPropertyDescriptor,O=Object.getOwnPropertyNames,k=Object.getPrototypeOf,M=Object.prototype.hasOwnProperty,q=(t,e)=>function(){return e||(0,t[O(t)[0]])((e={exports:{}}).exports,e),e.exports},D=(t,e,n,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of O(e))!M.call(t,i)&&i!==n&&L(t,i,{get:()=>e[i],enumerable:!(o=j(e,i))||o.enumerable});return t},W=(t,e,n)=>(n=t!=null?B(k(t)):{},D(e||!t||!t.__esModule?L(n,"default",{value:t,enumerable:!0}):n,t)),X=(t,e,n)=>new Promise((o,i)=>{var l=s=>{try{c(n.next(s))}catch(a){i(a)}},r=s=>{try{c(n.throw(s))}catch(a){i(a)}},c=s=>s.done?o(s.value):Promise.resolve(s.value).then(l,r);c((n=n.apply(t,e)).next())}),Y=q({"node_modules/get-root-node-polyfill/index.js"(t,e){"use strict";function n(r){var c=typeof r=="object"&&!!r.composed;return c?o(this):i(this)}function o(r){var c=i(r);return l(c)?o(c.host):c}function i(r){return r.parentNode!=null?i(r.parentNode):r}function l(r){return r.nodeName==="#document-fragment"&&r.constructor.name==="ShadowRoot"}typeof e=="object"&&e.exports&&(e.exports=n)}}),F=W(Y());typeof document!="undefined"&&function(t){let e=t.matches||t.matchesSelector||t.webkitMatchesSelector||t.mozMatchesSelector||t.msMatchesSelector||t.oMatchesSelector;e?t.matches=t.matchesSelector=e:t.matches=t.matchesSelector=function(o){let l=(t.getRootNode?t.getRootNode():F.default.call(t)).querySelectorAll(o),r=this;return Array.prototype.some.call(l,c=>c===r)}}(Element.prototype);var p=t=>{let e=t.composedPath();return Array.isArray(e)&&e.length>0?e[0]:t.target},g=t=>{let e=p(t);return!e||!e.matches},m=t=>X(void 0,null,function*(){if(!t)return;if(navigator.clipboard&&typeof navigator.clipboard.writeText)return navigator.clipboard.writeText(t);let e=document.createElement("textarea");e.setAttribute("style","position: absolute; left: 1000%"),e.textContent=t,document.body.append(e),e.select(),document.execCommand("copy"),document.body.removeChild(e)}),H=".yfm-clipboard-button";function z(t){if(!t)return;let e=t.getAttribute("data-animation"),n=t.getRootNode().getElementById(`visibileAnimation-${e}`);n&&n.beginElement()}function U(t){let e=t.parentNode;if(!e)return;let n=e.querySelector("pre code");if(!n)return;let o=Array.from(n.childNodes).filter(i=>!(i instanceof HTMLElement&&i.classList.contains("yfm-line-number"))).map(i=>i.textContent).join("");m(o).then(()=>{z(e.querySelector(".yfm-clipboard-icon")),setTimeout(()=>t.blur(),1500)})}typeof document!="undefined"&&document.addEventListener("click",t=>{let e=p(t),n=e.matches(H);g(t)||!n||U(e)});var J=".yfm-clipboard-anchor";typeof document!="undefined"&&document.addEventListener("click",t=>{let e=p(t);if(g(t)||!e.matches(J))return;let n=e.getAttribute("data-href")||"",o=new URL(n,window.location.href).toString();m(o)});var S=".yfm-clipboard-inline-code",u="open",$={TITLE:".yfm .yfm-term_title",CONTENT:".yfm .yfm-term_dfn"},G="open",ut=$.CONTENT.replace(/\./g,"")+" "+G;function y(t){let e=t.getBoundingClientRect(),n=document.body,o=document.documentElement,i=window.pageYOffset||o.scrollTop||n.scrollTop,l=window.pageXOffset||o.scrollLeft||n.scrollLeft,r=o.clientTop||n.clientTop||0,c=o.clientLeft||n.clientLeft||0,s=e.top+i-r,a=e.left+l-c;return{top:Math.round(s),left:Math.round(a)}}var f=null,h=!0;function v(){return document.querySelector(".yfm-inline-code-tooltip")}function K(t,e){let n=e.getAttribute("aria-live")||"polite";t==null||t.setAttribute("aria-live",n),t==null||t.setAttribute("aria-modal","true")}function A(){f&&(clearTimeout(f),f=null)}function C(t){return t?t.closest("table")||t.closest("code")||t.parentElement:null}function N(){let t=v();if(!t)return;let e=t.getAttribute("inline-id")||"",n=document.getElementById(e);n&&_(t,n)}function _(t,e){let{x:n,y:o,right:i,left:l,width:r,height:c}=e.getBoundingClientRect(),s=C(e);if(!s)return;let{right:a,left:tt}=s.getBoundingClientRect();if((a<l||tt>i)&&!h){T(t);return}h&&s&&(s.addEventListener("scroll",N),h=!1);let et=Number(t.getAttribute("relativeX")),nt=Number(t.getAttribute("relativeY"));if(et===n&&nt===o)return;t.setAttribute("relativeX",String(n)),t.setAttribute("relativeY",String(o));let ot=c+5,d=t.parentElement;if(!d)return;let{width:b}=t.getBoundingClientRect(),{left:it}=d.getBoundingClientRect(),P=Number(y(e).left),R=b+P,rt=P-b<0,x=R>document.body.clientWidth,ct=(x||document.dir==="rtl")&&!rt?b-r:0,st=y(d).top-d.offsetTop,lt=x?R-document.body.clientWidth+5:0,I=y(e).left-it+d.offsetLeft-ct,at=I+b>=document.body.clientWidth;t.style.top=Number(y(e).top+ot-st)+"px",t.style.left=Number(I-(at?lt:0))+"px"}function w(t){let e=t.getAttribute("inline-id");return e?document.getElementById(e):null}function Q(t){t.classList.remove(u);let e=w(t),n=C(e);t.removeAttribute("inline-id"),n&&(n.removeEventListener("scroll",N),h=!0)}function V(t){let e=document.getElementById("tooltip_inline_clipboard_dialog");if(!(!t.matches(".yfm-clipboard-inline-code")||!e))return e.setAttribute("inline-id",t.getAttribute("id")||""),K(e,t),_(e,t),e.classList.contains(u)?(e.classList.remove(u),requestAnimationFrame(()=>{e.classList.add(u)})):e.classList.add(u),e}function T(t){A(),Q(t)}function E(t){let e=V(t);e&&(A(),f=setTimeout(()=>{T(e),f=null},1e3))}function Z(t){let e=t.innerText;e&&m(e).then(()=>{E(t)})}typeof document!="undefined"&&(document.addEventListener("click",t=>{let e=p(t),n=e.matches(S);g(t)||!n||Z(e)}),document.addEventListener("keydown",t=>{var e;if(t.key==="Enter"&&document.activeElement){let o=document.activeElement,i=S.replace(".","");if(!o.classList.contains(i))return;let l=o.innerText;if(!l)return;m(l).then(()=>{E(o)})}let n=v();t.key==="Escape"&&n&&(T(n),(e=w(n))==null||e.focus())}),window.addEventListener("resize",()=>{let t=v();if(!t)return;let e=t.getAttribute("inline-id")||"",n=document.getElementById(e);if(!n){t.classList.toggle(u);return}_(t,n)}))})();})();
1
+ "use strict";(()=>{(()=>{var k=Object.create,L=Object.defineProperty,j=Object.getOwnPropertyDescriptor,A=Object.getOwnPropertyNames,M=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty,q=(t,e)=>function(){return e||(0,t[A(t)[0]])((e={exports:{}}).exports,e),e.exports},z=(t,e,n,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of A(e))!F.call(t,i)&&i!==n&&L(t,i,{get:()=>e[i],enumerable:!(o=j(e,i))||o.enumerable});return t},W=(t,e,n)=>(n=t!=null?k(M(t)):{},z(e||!t||!t.__esModule?L(n,"default",{value:t,enumerable:!0}):n,t)),H=(t,e,n)=>new Promise((o,i)=>{var c=l=>{try{u(n.next(l))}catch(s){i(s)}},r=l=>{try{u(n.throw(l))}catch(s){i(s)}},u=l=>l.done?o(l.value):Promise.resolve(l.value).then(c,r);u((n=n.apply(t,e)).next())}),X=q({"node_modules/get-root-node-polyfill/index.js"(t,e){"use strict";function n(r){var u=typeof r=="object"&&!!r.composed;return u?o(this):i(this)}function o(r){var u=i(r);return c(u)?o(u.host):u}function i(r){return r.parentNode!=null?i(r.parentNode):r}function c(r){return r.nodeName==="#document-fragment"&&r.constructor.name==="ShadowRoot"}typeof e=="object"&&e.exports&&(e.exports=n)}}),Y=W(X());typeof document!="undefined"&&function(t){let e=t.matches||t.matchesSelector||t.webkitMatchesSelector||t.mozMatchesSelector||t.msMatchesSelector||t.oMatchesSelector;e?t.matches=t.matchesSelector=e:t.matches=t.matchesSelector=function(o){let c=(t.getRootNode?t.getRootNode():Y.default.call(t)).querySelectorAll(o),r=this;return Array.prototype.some.call(c,u=>u===r)}}(Element.prototype);var p=t=>{let e=t.composedPath();return Array.isArray(e)&&e.length>0?e[0]:t.target},b=t=>{let e=p(t);return!e||!e.matches},m=t=>H(void 0,null,function*(){if(!t)return;if(navigator.clipboard&&typeof navigator.clipboard.writeText)return navigator.clipboard.writeText(t);let e=document.createElement("textarea");e.setAttribute("style","position: absolute; left: 1000%"),e.textContent=t,document.body.append(e),e.select(),document.execCommand("copy"),document.body.removeChild(e)}),$=".yfm-clipboard-button";function K(t){if(!t)return;let e=t.getAttribute("data-animation"),n=t.getRootNode().getElementById(`visibileAnimation-${e}`);n&&n.beginElement()}function U(t){let e=t.parentNode;if(!e)return;let n=e.querySelector("pre code");if(!n)return;let o=Array.from(n.childNodes).filter(i=>!(i instanceof HTMLElement&&i.classList.contains("yfm-line-number"))).map(i=>i.textContent).join("");m(o).then(()=>{K(e.querySelector(".yfm-clipboard-icon")),setTimeout(()=>t.blur(),1500)})}typeof document!="undefined"&&document.addEventListener("click",t=>{let e=p(t),n=e.matches($);b(t)||!n||U(e)});var G=".yfm-clipboard-anchor";typeof document!="undefined"&&document.addEventListener("click",t=>{let e=p(t);if(b(t)||!e.matches(G))return;let n=e.getAttribute("data-href")||"",o=new URL(n,window.location.href).toString();m(o)});var _=".yfm-clipboard-inline-code",N="tooltip_inline_clipboard_dialog",J="yfm inline_code_tooltip",a="open",O={ru:"\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u043E",en:"Copied",ar:"\u062A\u0645 \u0627\u0644\u0646\u0633\u062E",cs:"Zkop\xEDrov\xE1no",fr:"Copi\xE9",es:"Copiado",he:"\u05D4\u05D5\u05E2\u05EA\u05E7",bg:"\u041A\u043E\u043F\u0438\u0440\u0430\u043D\u043E",et:"Kopeeritud",el:"\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03AC\u03C6\u03B7\u03BA\u03B5",pt:"Copiado",zh:"\u5DF2\u590D\u5236","zh-tw":"\u5DF2\u8907\u88FD",kk:"\u041A\u04E9\u0448\u0456\u0440\u0456\u043B\u0434\u0456",tr:"Kopyaland\u0131",uz:"Nusxalandi"},Z={TITLE:".yfm .yfm-term_title",CONTENT:".yfm .yfm-term_dfn"},Q="open",mt=Z.CONTENT.replace(/\./g,"")+" "+Q;function h(t){let e=t.getBoundingClientRect(),n=document.body,o=document.documentElement,i=window.pageYOffset||o.scrollTop||n.scrollTop,c=window.pageXOffset||o.scrollLeft||n.scrollLeft,r=o.clientTop||n.clientTop||0,u=o.clientLeft||n.clientLeft||0,l=e.top+i-r,s=e.left+c-u;return{top:Math.round(l),left:Math.round(s)}}var d=null,y=!0;function v(){return document.getElementById(N)}function V(t,e){let n=e.getAttribute("aria-live")||"polite";t==null||t.setAttribute("aria-live",n),t==null||t.setAttribute("aria-modal","true")}function S(){d&&(clearTimeout(d),d=null)}function E(t){return t?t.closest("table")||t.closest("code")||t.parentElement:null}function w(){let t=v();if(!t)return;let e=t.getAttribute("inline-id")||"",n=document.getElementById(e);n&&T(t,n)}function T(t,e){let{x:n,y:o,right:i,left:c,width:r,height:u}=e.getBoundingClientRect(),l=E(e);if(!l)return;let{right:s,left:it}=l.getBoundingClientRect();if((s<c||it>i)&&!y){C(t);return}y&&l&&(l.addEventListener("scroll",w),y=!1);let rt=Number(t.getAttribute("relativeX")),ct=Number(t.getAttribute("relativeY"));if(rt===n&&ct===o)return;t.setAttribute("relativeX",String(n)),t.setAttribute("relativeY",String(o));let ut=u+5,f=t.parentElement;if(!f)return;let{width:g}=t.getBoundingClientRect(),{left:lt}=f.getBoundingClientRect(),R=Number(h(e).left),D=g+R,st=R-g<0,B=D>document.body.clientWidth,at=(B||document.dir==="rtl")&&!st?g-r:0,dt=h(f).top-f.offsetTop,ft=B?D-document.body.clientWidth+5:0,I=h(e).left-lt+f.offsetLeft-at,pt=I+g>=document.body.clientWidth;t.style.top=Number(h(e).top+ut-dt)+"px",t.style.left=Number(I-(pt?ft:0))+"px"}function x(t){let e=t.getAttribute("inline-id");return e?document.getElementById(e):null}function tt(t){t.classList.remove(a);let e=x(t),n=E(e),o=E(t);t.removeAttribute("inline-id"),!(!n||!o)&&(o.removeChild(t),n.removeEventListener("scroll",w),y=!0)}function et(){var t;let e=v();if(!e){let n=document.querySelector(".dc-doc-page__content")||document.body,o=document.documentElement.lang||"en",i=(t=O[o])!=null?t:O.en,c=document.createElement("div");c.innerHTML=`
2
+ <div id="${N}" class="${J}"
3
+ role="dialog" aria-live="polite" aria-modal="true">
4
+ ${i}
5
+ </div>
6
+ `,e=c.firstElementChild,n.appendChild(e)}return e}function nt(t){let e=et();if(!(!t.matches(_)||!e))return e.setAttribute("inline-id",t.getAttribute("id")||""),V(e,t),T(e,t),e.classList.contains(a)?(e.classList.remove(a),requestAnimationFrame(()=>{e.classList.add(a)})):e.classList.add(a),e}function C(t){S(),tt(t)}function P(t){let e=nt(t);e&&(S(),d=setTimeout(()=>{C(e),d=null},1e3))}function ot(t){let e=t.innerText;e&&m(e).then(()=>{P(t)})}typeof document!="undefined"&&(document.addEventListener("click",t=>{let e=p(t),n=e.matches(_);b(t)||!n||ot(e)}),document.addEventListener("keydown",t=>{var e;if(t.key==="Enter"&&document.activeElement){let o=document.activeElement,i=_.replace(".","");if(!o.classList.contains(i))return;let c=o.innerText;if(!c)return;m(c).then(()=>{P(o)})}let n=v();t.key==="Escape"&&n&&(C(n),(e=x(n))==null||e.focus())}),window.addEventListener("resize",()=>{let t=v();if(!t)return;let e=t.getAttribute("inline-id")||"",n=document.getElementById(e);if(!n){t.classList.toggle(a);return}T(t,n)}))})();})();
2
7
  //# sourceMappingURL=base.min.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../node_modules/get-root-node-polyfill/index.js", "../../src/js/polyfill.js", "../../src/js/utils.ts", "../../src/js/code.ts", "../../src/js/anchor.ts", "../../src/js/inline-code/constant.ts", "../../src/js/term/utils.ts", "../../src/js/inline-code/utils.ts", "../../src/js/inline-code/index.ts"],
4
- "sourcesContent": ["'use strict';\n\n// Node getRootNode(optional GetRootNodeOptions options);\n\n/**\n * Returns the context object\u2019s shadow-including root if options\u2019s composed is true.\n * Returns the context object\u2019s root otherwise.\n *\n * The root of an object is itself, if its parent is null, or else it is the root of its parent.\n *\n * The shadow-including root of an object is its root\u2019s host\u2019s shadow-including root,\n * if the object\u2019s root is a shadow root, and its root otherwise.\n *\n * https://dom.spec.whatwg.org/#dom-node-getrootnode\n *\n * @memberof Node.prototype\n * @param {!Object} [opt = {}] - Options.\n * @param {!boolean} [opt.composed] - See above description.\n * @returns {!Node} The root node.\n */\nfunction getRootNode(opt) {\n var composed = typeof opt === 'object' && Boolean(opt.composed);\n\n return composed ? getShadowIncludingRoot(this) : getRoot(this);\n}\n\nfunction getShadowIncludingRoot(node) {\n var root = getRoot(node);\n\n if (isShadowRoot(root)) {\n return getShadowIncludingRoot(root.host);\n }\n\n return root;\n}\n\nfunction getRoot(node) {\n if (node.parentNode != null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\nfunction isShadowRoot(node) {\n return node.nodeName === '#document-fragment' && node.constructor.name === 'ShadowRoot';\n}\n\nif (typeof module === 'object' && module.exports) {\n module.exports = getRootNode;\n}\n", "import getRootNode from 'get-root-node-polyfill';\n\nif (typeof document !== 'undefined') {\n // matches polyfill for old edge\n (function (e) {\n const matches =\n e.matches ||\n e.matchesSelector ||\n e.webkitMatchesSelector ||\n e.mozMatchesSelector ||\n e.msMatchesSelector ||\n e.oMatchesSelector;\n\n if (matches) {\n e.matches = e.matchesSelector = matches;\n } else {\n e.matches = e.matchesSelector = function matches(selector) {\n const rootNode = e.getRootNode ? e.getRootNode() : getRootNode.call(e);\n const matches = rootNode.querySelectorAll(selector);\n const th = this;\n return Array.prototype.some.call(matches, (e) => {\n return e === th;\n });\n };\n }\n // eslint-disable-next-line no-undef\n })(Element.prototype);\n}\n", "export const getEventTarget = (event: Event) => {\n const path = event.composedPath();\n return Array.isArray(path) && path.length > 0 ? path[0] : event.target;\n};\n\nexport const isCustom = (event: Event) => {\n const target = getEventTarget(event);\n return !target || !(target as HTMLElement).matches;\n};\n\nexport const copyToClipboard = async (text: string) => {\n if (!text) {\n return;\n }\n\n if (navigator.clipboard && typeof navigator.clipboard.writeText) {\n return navigator.clipboard.writeText(text);\n }\n\n const textarea = document.createElement('textarea');\n textarea.setAttribute('style', 'position: absolute; left: 1000%');\n textarea.textContent = text;\n document.body.append(textarea);\n\n textarea.select();\n document.execCommand('copy');\n\n document.body.removeChild(textarea);\n};\n", "import {copyToClipboard, getEventTarget, isCustom} from './utils';\n\nconst BUTTON_SELECTOR = '.yfm-clipboard-button';\n\nfunction notifySuccess(svgButton: HTMLElement | null) {\n if (!svgButton) {\n return;\n }\n\n const id = svgButton.getAttribute('data-animation');\n\n // @ts-expect-error\n const icon = svgButton.getRootNode().getElementById(`visibileAnimation-${id}`);\n\n if (!icon) {\n return;\n }\n\n icon.beginElement();\n}\n\nfunction buttonCopyFn(target: HTMLElement) {\n const parent = target.parentNode;\n\n if (!parent) {\n return;\n }\n\n const code = parent.querySelector<HTMLElement>('pre code');\n\n if (!code) {\n return;\n }\n\n // Get all text nodes and filter out line numbers\n const textContent = Array.from(code.childNodes)\n .filter((node) => {\n // Skip line number spans\n if (node instanceof HTMLElement && node.classList.contains('yfm-line-number')) {\n return false;\n }\n return true;\n })\n .map((node) => node.textContent)\n .join('');\n\n copyToClipboard(textContent).then(() => {\n notifySuccess(parent.querySelector('.yfm-clipboard-icon'));\n\n setTimeout(() => target.blur(), 1500);\n });\n}\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n const target = getEventTarget(event) as HTMLElement;\n\n const button = target.matches(BUTTON_SELECTOR);\n\n if (isCustom(event) || !button) {\n return;\n }\n\n buttonCopyFn(target);\n });\n}\n", "import {copyToClipboard, getEventTarget, isCustom} from './utils';\n\nconst ANCHOR_BUTTON_SELECTOR = '.yfm-clipboard-anchor';\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n const target = getEventTarget(event) as HTMLElement;\n\n if (isCustom(event) || !target.matches(ANCHOR_BUTTON_SELECTOR)) {\n return;\n }\n\n const href = target.getAttribute('data-href') || '';\n const link = new URL(href, window.location.href).toString();\n\n copyToClipboard(link);\n });\n}\n", "export const INLINE_CODE = '.yfm-clipboard-inline-code';\n\nexport const OPEN_CLASS = 'open';\n", "export const Selector = {\n TITLE: '.yfm .yfm-term_title',\n CONTENT: '.yfm .yfm-term_dfn',\n};\nexport const openClass = 'open';\nexport const openDefinitionClass = Selector.CONTENT.replace(/\\./g, '') + ' ' + openClass;\nlet isListenerNeeded = true;\n\nexport function setDefinitionId(definitionElement: HTMLElement, termElement: HTMLElement): void {\n const termId = termElement.getAttribute('id') || Math.random().toString(36).substr(2, 8);\n definitionElement?.setAttribute('term-id', termId);\n}\n\nexport function setDefinitonAriaAttributes(\n definitionElement: HTMLElement,\n termElement: HTMLElement,\n): void {\n const ariaLive = termElement.getAttribute('aria-live') || 'polite';\n definitionElement?.setAttribute('aria-live', ariaLive);\n definitionElement?.setAttribute('aria-modal', 'true');\n}\n\nexport function setDefinitionPosition(\n definitionElement: HTMLElement,\n termElement: HTMLElement,\n): void {\n const {\n x: termX,\n y: termY,\n right: termRight,\n left: termLeft,\n width: termWidth,\n height: termHeight,\n } = termElement.getBoundingClientRect();\n\n const termParent = termParentElement(termElement);\n\n if (!termParent) {\n return;\n }\n\n const {right: termParentRight, left: termParentLeft} = termParent.getBoundingClientRect();\n\n if ((termParentRight < termLeft || termParentLeft > termRight) && !isListenerNeeded) {\n closeDefinition(definitionElement);\n return;\n }\n\n if (isListenerNeeded && termParent) {\n termParent.addEventListener('scroll', termOnResize);\n isListenerNeeded = false;\n }\n\n const relativeX = Number(definitionElement.getAttribute('relativeX'));\n const relativeY = Number(definitionElement.getAttribute('relativeY'));\n\n if (relativeX === termX && relativeY === termY) {\n return;\n }\n\n definitionElement.setAttribute('relativeX', String(termX));\n definitionElement.setAttribute('relativeY', String(termY));\n\n const offsetTop = termHeight + 5;\n const definitionParent = definitionElement.parentElement;\n\n if (!definitionParent) {\n return;\n }\n\n const {width: definitionWidth} = definitionElement.getBoundingClientRect();\n const {left: definitionParentLeft} = definitionParent.getBoundingClientRect();\n\n // If definition not fit document change base alignment\n const definitionLeftCoordinate = Number(getCoords(termElement).left);\n const definitionRightCoordinate = definitionWidth + definitionLeftCoordinate;\n\n const definitionOutOfScreenOnLeft = definitionLeftCoordinate - definitionWidth < 0;\n const definitionOutOfScreenOnRight = definitionRightCoordinate > document.body.clientWidth;\n\n const isAlignSwapped = definitionOutOfScreenOnRight || document.dir === 'rtl';\n const fitDefinitionDocument =\n isAlignSwapped && !definitionOutOfScreenOnLeft ? definitionWidth - termWidth : 0;\n const customHeaderTop = getCoords(definitionParent).top - definitionParent.offsetTop;\n const offsetRight = 5;\n const shiftLeft = definitionOutOfScreenOnRight\n ? definitionRightCoordinate - document.body.clientWidth + offsetRight\n : 0;\n const offsetLeft =\n getCoords(termElement).left -\n definitionParentLeft +\n definitionParent.offsetLeft -\n fitDefinitionDocument;\n\n const isShiftLeftNeeded = offsetLeft + definitionWidth >= document.body.clientWidth;\n\n definitionElement.style.top =\n Number(getCoords(termElement).top + offsetTop - customHeaderTop) + 'px';\n definitionElement.style.left = Number(offsetLeft - (isShiftLeftNeeded ? shiftLeft : 0)) + 'px';\n}\n\nfunction termOnResize() {\n const openedDefinition = document.getElementsByClassName(openDefinitionClass)[0] as HTMLElement;\n\n if (!openedDefinition) {\n return;\n }\n const termId = openedDefinition.getAttribute('term-id') || '';\n const termElement = document.getElementById(termId);\n\n if (!termElement) {\n return;\n }\n\n setDefinitionPosition(openedDefinition, termElement);\n}\n\nfunction termParentElement(term: HTMLElement | null) {\n if (!term) {\n return null;\n }\n\n const closestScrollableParent = term.closest('table') || term.closest('code');\n\n return closestScrollableParent || term.parentElement;\n}\n\nexport function openDefinition(target: HTMLElement) {\n const openedDefinition = document.getElementsByClassName(openDefinitionClass)[0] as HTMLElement;\n\n const termId = target.getAttribute('id');\n const termKey = target.getAttribute('term-key');\n const definitionElement = document.getElementById(termKey + '_element');\n\n const isSameTerm = openedDefinition && termId === openedDefinition.getAttribute('term-id');\n if (isSameTerm) {\n closeDefinition(openedDefinition);\n return;\n }\n\n const isTargetDefinitionContent = target.closest(\n [Selector.CONTENT.replace(' ', ''), openClass].join('.'),\n );\n\n if (openedDefinition && !isTargetDefinitionContent) {\n closeDefinition(openedDefinition);\n }\n\n if (!target.matches(Selector.TITLE) || !definitionElement) {\n return;\n }\n\n setDefinitionId(definitionElement, target);\n setDefinitonAriaAttributes(definitionElement, target);\n setDefinitionPosition(definitionElement, target);\n\n definitionElement.classList.toggle(openClass);\n\n trapFocus(definitionElement);\n}\n\nexport function closeDefinition(definition: HTMLElement) {\n definition.classList.remove(openClass);\n const term = getTermByDefinition(definition);\n const termParent = termParentElement(term);\n\n if (!termParent) {\n return;\n }\n\n termParent.removeEventListener('scroll', termOnResize);\n isListenerNeeded = true;\n}\n\nexport function getCoords(elem: HTMLElement) {\n const box = elem.getBoundingClientRect();\n\n const body = document.body;\n const docEl = document.documentElement;\n\n const scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;\n const scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft;\n\n const clientTop = docEl.clientTop || body.clientTop || 0;\n const clientLeft = docEl.clientLeft || body.clientLeft || 0;\n\n const top = box.top + scrollTop - clientTop;\n const left = box.left + scrollLeft - clientLeft;\n\n return {top: Math.round(top), left: Math.round(left)};\n}\n\nexport function trapFocus(element: HTMLElement) {\n const focusableElements = element.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n const firstFocusableElement = focusableElements[0] as HTMLElement;\n const lastFocusableElement = focusableElements[focusableElements.length - 1] as HTMLElement;\n\n if (firstFocusableElement) {\n firstFocusableElement.focus();\n }\n\n element.addEventListener('keydown', function (e) {\n const isTabPressed = e.key === 'Tab' || e.keyCode === 9;\n if (!isTabPressed) {\n return;\n }\n\n if (e.shiftKey) {\n if (document.activeElement === firstFocusableElement) {\n lastFocusableElement.focus();\n e.preventDefault();\n }\n } else if (document.activeElement === lastFocusableElement) {\n firstFocusableElement.focus();\n e.preventDefault();\n }\n });\n}\n\nexport function getTermByDefinition(definition: HTMLElement) {\n const termId = definition.getAttribute('term-id');\n\n return termId ? document.getElementById(termId) : null;\n}\n", "import {getCoords} from '../term/utils';\n\nimport {OPEN_CLASS} from './constant';\n\nexport let timer: ReturnType<typeof setTimeout> | null = null;\n\nlet isListenerNeeded = true;\n\nexport function getTooltipElement(): HTMLElement | null {\n return document.querySelector('.yfm-inline-code-tooltip');\n}\n\nfunction setTooltipAriaAttributes(tooltipElement: HTMLElement, targetElement: HTMLElement): void {\n const ariaLive = targetElement.getAttribute('aria-live') || 'polite';\n tooltipElement?.setAttribute('aria-live', ariaLive);\n tooltipElement?.setAttribute('aria-modal', 'true');\n}\n\nfunction checkTimerAndClear() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n}\n\nfunction tooltipParentElement(target: HTMLElement | null) {\n if (!target) {\n return null;\n }\n\n const closestScrollableParent = target.closest('table') || target.closest('code');\n\n return closestScrollableParent || target.parentElement;\n}\n\nfunction tooltipOnResize() {\n const openedDefinition = getTooltipElement();\n\n if (!openedDefinition) {\n return;\n }\n const inlineId = openedDefinition.getAttribute('inline-id') || '';\n const targetElement = document.getElementById(inlineId);\n\n if (!targetElement) {\n return;\n }\n\n setTooltipPosition(openedDefinition, targetElement);\n}\n\nexport function setTooltipPosition(tooltipElement: HTMLElement, targetElement: HTMLElement): void {\n const {\n x: inlineX,\n y: inlineY,\n right: inlineRight,\n left: inlineLeft,\n width: inlineWidth,\n height: inlineHeight,\n } = targetElement.getBoundingClientRect();\n\n const tooltipParent = tooltipParentElement(targetElement);\n\n if (!tooltipParent) {\n return;\n }\n\n const {right: tooltipParentRight, left: tooltipParentLeft} =\n tooltipParent.getBoundingClientRect();\n\n if ((tooltipParentRight < inlineLeft || tooltipParentLeft > inlineRight) && !isListenerNeeded) {\n closeTooltip(tooltipElement);\n return;\n }\n\n if (isListenerNeeded && tooltipParent) {\n tooltipParent.addEventListener('scroll', tooltipOnResize);\n isListenerNeeded = false;\n }\n\n const relativeX = Number(tooltipElement.getAttribute('relativeX'));\n const relativeY = Number(tooltipElement.getAttribute('relativeY'));\n\n if (relativeX === inlineX && relativeY === inlineY) {\n return;\n }\n\n tooltipElement.setAttribute('relativeX', String(inlineX));\n tooltipElement.setAttribute('relativeY', String(inlineY));\n\n const offsetTop = inlineHeight + 5;\n const definitionParent = tooltipElement.parentElement;\n\n if (!definitionParent) {\n return;\n }\n\n const {width: definitionWidth} = tooltipElement.getBoundingClientRect();\n const {left: definitionParentLeft} = definitionParent.getBoundingClientRect();\n\n // If definition not fit document change base alignment\n const definitionLeftCoordinate = Number(getCoords(targetElement).left);\n const definitionRightCoordinate = definitionWidth + definitionLeftCoordinate;\n\n const definitionOutOfScreenOnLeft = definitionLeftCoordinate - definitionWidth < 0;\n const definitionOutOfScreenOnRight = definitionRightCoordinate > document.body.clientWidth;\n\n const isAlignSwapped = definitionOutOfScreenOnRight || document.dir === 'rtl';\n const fitDefinitionDocument =\n isAlignSwapped && !definitionOutOfScreenOnLeft ? definitionWidth - inlineWidth : 0;\n const customHeaderTop = getCoords(definitionParent).top - definitionParent.offsetTop;\n const offsetRight = 5;\n const shiftLeft = definitionOutOfScreenOnRight\n ? definitionRightCoordinate - document.body.clientWidth + offsetRight\n : 0;\n const offsetLeft =\n getCoords(targetElement).left -\n definitionParentLeft +\n definitionParent.offsetLeft -\n fitDefinitionDocument;\n\n const isShiftLeftNeeded = offsetLeft + definitionWidth >= document.body.clientWidth;\n\n tooltipElement.style.top =\n Number(getCoords(targetElement).top + offsetTop - customHeaderTop) + 'px';\n tooltipElement.style.left = Number(offsetLeft - (isShiftLeftNeeded ? shiftLeft : 0)) + 'px';\n}\n\nexport function getInlineCodeByTooltip(definition: HTMLElement) {\n const inlineId = definition.getAttribute('inline-id');\n\n return inlineId ? document.getElementById(inlineId) : null;\n}\n\nfunction closeTooltipFn(definition: HTMLElement) {\n definition.classList.remove(OPEN_CLASS);\n const inline = getInlineCodeByTooltip(definition);\n const tooltipParent = tooltipParentElement(inline);\n\n definition.removeAttribute('inline-id');\n\n if (!tooltipParent) {\n return;\n }\n\n tooltipParent.removeEventListener('scroll', tooltipOnResize);\n isListenerNeeded = true;\n}\n\nexport function openTooltip(target: HTMLElement) {\n const tooltipElement = document.getElementById('tooltip_inline_clipboard_dialog');\n\n if (!target.matches('.yfm-clipboard-inline-code') || !tooltipElement) {\n return;\n }\n\n tooltipElement.setAttribute('inline-id', target.getAttribute('id') || '');\n setTooltipAriaAttributes(tooltipElement, target);\n setTooltipPosition(tooltipElement, target);\n\n // In order not to get rid of the smooth appearance effect, I had to do this\n if (tooltipElement.classList.contains(OPEN_CLASS)) {\n tooltipElement.classList.remove(OPEN_CLASS);\n requestAnimationFrame(() => {\n tooltipElement.classList.add(OPEN_CLASS);\n });\n } else {\n tooltipElement.classList.add(OPEN_CLASS);\n }\n\n return tooltipElement;\n}\n\nexport function closeTooltip(target: HTMLElement) {\n checkTimerAndClear();\n closeTooltipFn(target);\n}\n\nexport function tooltipWorker(target: HTMLElement) {\n const definition = openTooltip(target);\n\n if (!definition) {\n return;\n }\n checkTimerAndClear();\n timer = setTimeout(() => {\n closeTooltip(definition);\n timer = null;\n }, 1000);\n}\n", "import {copyToClipboard, getEventTarget, isCustom} from '../utils';\n\nimport {INLINE_CODE, OPEN_CLASS} from './constant';\nimport {\n closeTooltip,\n getInlineCodeByTooltip,\n getTooltipElement,\n setTooltipPosition,\n tooltipWorker,\n} from './utils';\n\nexport function inlineCopyFn(target: HTMLElement) {\n const innerText = target.innerText;\n\n if (!innerText) {\n return;\n }\n\n copyToClipboard(innerText).then(() => {\n tooltipWorker(target);\n });\n}\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n const target = getEventTarget(event) as HTMLElement;\n\n const inline = target.matches(INLINE_CODE);\n\n if (isCustom(event) || !inline) {\n return;\n }\n\n inlineCopyFn(target);\n });\n\n document.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' && document.activeElement) {\n const activeElement = document.activeElement as HTMLElement;\n const classInlineCode = INLINE_CODE.replace('.', '');\n\n if (!activeElement.classList.contains(classInlineCode)) {\n return;\n }\n\n const innerText = activeElement.innerText;\n\n if (!innerText) {\n return;\n }\n\n copyToClipboard(innerText).then(() => {\n tooltipWorker(activeElement);\n });\n }\n\n const inlineTooltip = getTooltipElement();\n\n if (event.key === 'Escape' && inlineTooltip) {\n closeTooltip(inlineTooltip);\n getInlineCodeByTooltip(inlineTooltip)?.focus(); // Set focus back to open button after closing popup\n }\n });\n\n window.addEventListener('resize', () => {\n const inlineTooltip = getTooltipElement();\n if (!inlineTooltip) {\n return;\n }\n\n const inlineId = inlineTooltip.getAttribute('inline-id') || '';\n const inlineCodeElement = document.getElementById(inlineId);\n\n if (!inlineCodeElement) {\n inlineTooltip.classList.toggle(OPEN_CLASS);\n return;\n }\n\n setTooltipPosition(inlineTooltip, inlineCodeElement);\n });\n}\n"],
5
- "mappings": "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",
6
- "names": ["require_get_root_node_polyfill", "__commonJS", "exports", "module", "getRootNode", "opt", "composed", "getShadowIncludingRoot", "getRoot", "node", "root", "isShadowRoot", "import_get_root_node_polyfill", "__toESM", "e", "matches", "selector", "th", "getEventTarget", "event", "path", "isCustom", "target", "copyToClipboard", "text", "__async", "textarea", "BUTTON_SELECTOR", "notifySuccess", "svgButton", "id", "icon", "buttonCopyFn", "parent", "code", "textContent", "button", "ANCHOR_BUTTON_SELECTOR", "href", "link", "INLINE_CODE", "OPEN_CLASS", "Selector", "openClass", "openDefinitionClass", "getCoords", "elem", "box", "body", "docEl", "scrollTop", "scrollLeft", "clientTop", "clientLeft", "top", "left", "timer", "isListenerNeeded", "getTooltipElement", "setTooltipAriaAttributes", "tooltipElement", "targetElement", "ariaLive", "checkTimerAndClear", "tooltipParentElement", "tooltipOnResize", "openedDefinition", "inlineId", "setTooltipPosition", "inlineX", "inlineY", "inlineRight", "inlineLeft", "inlineWidth", "inlineHeight", "tooltipParent", "tooltipParentRight", "tooltipParentLeft", "closeTooltip", "relativeX", "relativeY", "offsetTop", "definitionParent", "definitionWidth", "definitionParentLeft", "definitionLeftCoordinate", "definitionRightCoordinate", "definitionOutOfScreenOnLeft", "definitionOutOfScreenOnRight", "fitDefinitionDocument", "customHeaderTop", "shiftLeft", "offsetLeft", "isShiftLeftNeeded", "getInlineCodeByTooltip", "definition", "closeTooltipFn", "inline", "openTooltip", "tooltipWorker", "inlineCopyFn", "innerText", "_a", "activeElement", "classInlineCode", "inlineTooltip", "inlineCodeElement"]
4
+ "sourcesContent": ["'use strict';\n\n// Node getRootNode(optional GetRootNodeOptions options);\n\n/**\n * Returns the context object\u2019s shadow-including root if options\u2019s composed is true.\n * Returns the context object\u2019s root otherwise.\n *\n * The root of an object is itself, if its parent is null, or else it is the root of its parent.\n *\n * The shadow-including root of an object is its root\u2019s host\u2019s shadow-including root,\n * if the object\u2019s root is a shadow root, and its root otherwise.\n *\n * https://dom.spec.whatwg.org/#dom-node-getrootnode\n *\n * @memberof Node.prototype\n * @param {!Object} [opt = {}] - Options.\n * @param {!boolean} [opt.composed] - See above description.\n * @returns {!Node} The root node.\n */\nfunction getRootNode(opt) {\n var composed = typeof opt === 'object' && Boolean(opt.composed);\n\n return composed ? getShadowIncludingRoot(this) : getRoot(this);\n}\n\nfunction getShadowIncludingRoot(node) {\n var root = getRoot(node);\n\n if (isShadowRoot(root)) {\n return getShadowIncludingRoot(root.host);\n }\n\n return root;\n}\n\nfunction getRoot(node) {\n if (node.parentNode != null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\nfunction isShadowRoot(node) {\n return node.nodeName === '#document-fragment' && node.constructor.name === 'ShadowRoot';\n}\n\nif (typeof module === 'object' && module.exports) {\n module.exports = getRootNode;\n}\n", "import getRootNode from 'get-root-node-polyfill';\n\nif (typeof document !== 'undefined') {\n // matches polyfill for old edge\n (function (e) {\n const matches =\n e.matches ||\n e.matchesSelector ||\n e.webkitMatchesSelector ||\n e.mozMatchesSelector ||\n e.msMatchesSelector ||\n e.oMatchesSelector;\n\n if (matches) {\n e.matches = e.matchesSelector = matches;\n } else {\n e.matches = e.matchesSelector = function matches(selector) {\n const rootNode = e.getRootNode ? e.getRootNode() : getRootNode.call(e);\n const matches = rootNode.querySelectorAll(selector);\n const th = this;\n return Array.prototype.some.call(matches, (e) => {\n return e === th;\n });\n };\n }\n // eslint-disable-next-line no-undef\n })(Element.prototype);\n}\n", "export const getEventTarget = (event: Event) => {\n const path = event.composedPath();\n return Array.isArray(path) && path.length > 0 ? path[0] : event.target;\n};\n\nexport const isCustom = (event: Event) => {\n const target = getEventTarget(event);\n return !target || !(target as HTMLElement).matches;\n};\n\nexport const copyToClipboard = async (text: string) => {\n if (!text) {\n return;\n }\n\n if (navigator.clipboard && typeof navigator.clipboard.writeText) {\n return navigator.clipboard.writeText(text);\n }\n\n const textarea = document.createElement('textarea');\n textarea.setAttribute('style', 'position: absolute; left: 1000%');\n textarea.textContent = text;\n document.body.append(textarea);\n\n textarea.select();\n document.execCommand('copy');\n\n document.body.removeChild(textarea);\n};\n", "import {copyToClipboard, getEventTarget, isCustom} from './utils';\n\nconst BUTTON_SELECTOR = '.yfm-clipboard-button';\n\nfunction notifySuccess(svgButton: HTMLElement | null) {\n if (!svgButton) {\n return;\n }\n\n const id = svgButton.getAttribute('data-animation');\n\n // @ts-expect-error\n const icon = svgButton.getRootNode().getElementById(`visibileAnimation-${id}`);\n\n if (!icon) {\n return;\n }\n\n icon.beginElement();\n}\n\nfunction buttonCopyFn(target: HTMLElement) {\n const parent = target.parentNode;\n\n if (!parent) {\n return;\n }\n\n const code = parent.querySelector<HTMLElement>('pre code');\n\n if (!code) {\n return;\n }\n\n // Get all text nodes and filter out line numbers\n const textContent = Array.from(code.childNodes)\n .filter((node) => {\n // Skip line number spans\n if (node instanceof HTMLElement && node.classList.contains('yfm-line-number')) {\n return false;\n }\n return true;\n })\n .map((node) => node.textContent)\n .join('');\n\n copyToClipboard(textContent).then(() => {\n notifySuccess(parent.querySelector('.yfm-clipboard-icon'));\n\n setTimeout(() => target.blur(), 1500);\n });\n}\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n const target = getEventTarget(event) as HTMLElement;\n\n const button = target.matches(BUTTON_SELECTOR);\n\n if (isCustom(event) || !button) {\n return;\n }\n\n buttonCopyFn(target);\n });\n}\n", "import {copyToClipboard, getEventTarget, isCustom} from './utils';\n\nconst ANCHOR_BUTTON_SELECTOR = '.yfm-clipboard-anchor';\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n const target = getEventTarget(event) as HTMLElement;\n\n if (isCustom(event) || !target.matches(ANCHOR_BUTTON_SELECTOR)) {\n return;\n }\n\n const href = target.getAttribute('data-href') || '';\n const link = new URL(href, window.location.href).toString();\n\n copyToClipboard(link);\n });\n}\n", "import type {Lang} from 'src/transform/typings';\n\nexport const INLINE_CODE = '.yfm-clipboard-inline-code';\n\nexport const INLINE_CODE_ID = 'tooltip_inline_clipboard_dialog';\n\nexport const INLINE_CODE_CLASS = 'yfm inline_code_tooltip';\n\nexport const OPEN_CLASS = 'open';\n\nexport const LANG_TOKEN: Record<Lang, string> = {\n ru: '\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u043E',\n en: 'Copied',\n ar: '\u062A\u0645 \u0627\u0644\u0646\u0633\u062E',\n cs: 'Zkop\u00EDrov\u00E1no',\n fr: 'Copi\u00E9',\n es: 'Copiado',\n he: '\u05D4\u05D5\u05E2\u05EA\u05E7',\n bg: '\u041A\u043E\u043F\u0438\u0440\u0430\u043D\u043E',\n et: 'Kopeeritud',\n el: '\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03AC\u03C6\u03B7\u03BA\u03B5',\n pt: 'Copiado',\n zh: '\u5DF2\u590D\u5236',\n 'zh-tw': '\u5DF2\u8907\u88FD',\n kk: '\u041A\u04E9\u0448\u0456\u0440\u0456\u043B\u0434\u0456',\n tr: 'Kopyaland\u0131',\n uz: 'Nusxalandi',\n};\n", "export const Selector = {\n TITLE: '.yfm .yfm-term_title',\n CONTENT: '.yfm .yfm-term_dfn',\n};\nexport const openClass = 'open';\nexport const openDefinitionClass = Selector.CONTENT.replace(/\\./g, '') + ' ' + openClass;\nlet isListenerNeeded = true;\n\nexport function setDefinitionId(definitionElement: HTMLElement, termElement: HTMLElement): void {\n const termId = termElement.getAttribute('id') || Math.random().toString(36).substr(2, 8);\n definitionElement?.setAttribute('term-id', termId);\n}\n\nexport function setDefinitonAriaAttributes(\n definitionElement: HTMLElement,\n termElement: HTMLElement,\n): void {\n const ariaLive = termElement.getAttribute('aria-live') || 'polite';\n definitionElement?.setAttribute('aria-live', ariaLive);\n definitionElement?.setAttribute('aria-modal', 'true');\n}\n\nexport function setDefinitionPosition(\n definitionElement: HTMLElement,\n termElement: HTMLElement,\n): void {\n const {\n x: termX,\n y: termY,\n right: termRight,\n left: termLeft,\n width: termWidth,\n height: termHeight,\n } = termElement.getBoundingClientRect();\n\n const termParent = termParentElement(termElement);\n\n if (!termParent) {\n return;\n }\n\n const {right: termParentRight, left: termParentLeft} = termParent.getBoundingClientRect();\n\n if ((termParentRight < termLeft || termParentLeft > termRight) && !isListenerNeeded) {\n closeDefinition(definitionElement);\n return;\n }\n\n if (isListenerNeeded && termParent) {\n termParent.addEventListener('scroll', termOnResize);\n isListenerNeeded = false;\n }\n\n const relativeX = Number(definitionElement.getAttribute('relativeX'));\n const relativeY = Number(definitionElement.getAttribute('relativeY'));\n\n if (relativeX === termX && relativeY === termY) {\n return;\n }\n\n definitionElement.setAttribute('relativeX', String(termX));\n definitionElement.setAttribute('relativeY', String(termY));\n\n const offsetTop = termHeight + 5;\n const definitionParent = definitionElement.parentElement;\n\n if (!definitionParent) {\n return;\n }\n\n const {width: definitionWidth} = definitionElement.getBoundingClientRect();\n const {left: definitionParentLeft} = definitionParent.getBoundingClientRect();\n\n // If definition not fit document change base alignment\n const definitionLeftCoordinate = Number(getCoords(termElement).left);\n const definitionRightCoordinate = definitionWidth + definitionLeftCoordinate;\n\n const definitionOutOfScreenOnLeft = definitionLeftCoordinate - definitionWidth < 0;\n const definitionOutOfScreenOnRight = definitionRightCoordinate > document.body.clientWidth;\n\n const isAlignSwapped = definitionOutOfScreenOnRight || document.dir === 'rtl';\n const fitDefinitionDocument =\n isAlignSwapped && !definitionOutOfScreenOnLeft ? definitionWidth - termWidth : 0;\n const customHeaderTop = getCoords(definitionParent).top - definitionParent.offsetTop;\n const offsetRight = 5;\n const shiftLeft = definitionOutOfScreenOnRight\n ? definitionRightCoordinate - document.body.clientWidth + offsetRight\n : 0;\n const offsetLeft =\n getCoords(termElement).left -\n definitionParentLeft +\n definitionParent.offsetLeft -\n fitDefinitionDocument;\n\n const isShiftLeftNeeded = offsetLeft + definitionWidth >= document.body.clientWidth;\n\n definitionElement.style.top =\n Number(getCoords(termElement).top + offsetTop - customHeaderTop) + 'px';\n definitionElement.style.left = Number(offsetLeft - (isShiftLeftNeeded ? shiftLeft : 0)) + 'px';\n}\n\nfunction termOnResize() {\n const openedDefinition = document.getElementsByClassName(openDefinitionClass)[0] as HTMLElement;\n\n if (!openedDefinition) {\n return;\n }\n const termId = openedDefinition.getAttribute('term-id') || '';\n const termElement = document.getElementById(termId);\n\n if (!termElement) {\n return;\n }\n\n setDefinitionPosition(openedDefinition, termElement);\n}\n\nfunction termParentElement(term: HTMLElement | null) {\n if (!term) {\n return null;\n }\n\n const closestScrollableParent = term.closest('table') || term.closest('code');\n\n return closestScrollableParent || term.parentElement;\n}\n\nexport function openDefinition(target: HTMLElement) {\n const openedDefinition = document.getElementsByClassName(openDefinitionClass)[0] as HTMLElement;\n\n const termId = target.getAttribute('id');\n const termKey = target.getAttribute('term-key');\n const definitionElement = document.getElementById(termKey + '_element');\n\n const isSameTerm = openedDefinition && termId === openedDefinition.getAttribute('term-id');\n if (isSameTerm) {\n closeDefinition(openedDefinition);\n return;\n }\n\n const isTargetDefinitionContent = target.closest(\n [Selector.CONTENT.replace(' ', ''), openClass].join('.'),\n );\n\n if (openedDefinition && !isTargetDefinitionContent) {\n closeDefinition(openedDefinition);\n }\n\n if (!target.matches(Selector.TITLE) || !definitionElement) {\n return;\n }\n\n setDefinitionId(definitionElement, target);\n setDefinitonAriaAttributes(definitionElement, target);\n setDefinitionPosition(definitionElement, target);\n\n definitionElement.classList.toggle(openClass);\n\n trapFocus(definitionElement);\n}\n\nexport function closeDefinition(definition: HTMLElement) {\n definition.classList.remove(openClass);\n const term = getTermByDefinition(definition);\n const termParent = termParentElement(term);\n\n if (!termParent) {\n return;\n }\n\n termParent.removeEventListener('scroll', termOnResize);\n isListenerNeeded = true;\n}\n\nexport function getCoords(elem: HTMLElement) {\n const box = elem.getBoundingClientRect();\n\n const body = document.body;\n const docEl = document.documentElement;\n\n const scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;\n const scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft;\n\n const clientTop = docEl.clientTop || body.clientTop || 0;\n const clientLeft = docEl.clientLeft || body.clientLeft || 0;\n\n const top = box.top + scrollTop - clientTop;\n const left = box.left + scrollLeft - clientLeft;\n\n return {top: Math.round(top), left: Math.round(left)};\n}\n\nexport function trapFocus(element: HTMLElement) {\n const focusableElements = element.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n const firstFocusableElement = focusableElements[0] as HTMLElement;\n const lastFocusableElement = focusableElements[focusableElements.length - 1] as HTMLElement;\n\n if (firstFocusableElement) {\n firstFocusableElement.focus();\n }\n\n element.addEventListener('keydown', function (e) {\n const isTabPressed = e.key === 'Tab' || e.keyCode === 9;\n if (!isTabPressed) {\n return;\n }\n\n if (e.shiftKey) {\n if (document.activeElement === firstFocusableElement) {\n lastFocusableElement.focus();\n e.preventDefault();\n }\n } else if (document.activeElement === lastFocusableElement) {\n firstFocusableElement.focus();\n e.preventDefault();\n }\n });\n}\n\nexport function getTermByDefinition(definition: HTMLElement) {\n const termId = definition.getAttribute('term-id');\n\n return termId ? document.getElementById(termId) : null;\n}\n", "import type {Lang} from 'src/transform/typings';\n\nimport {getCoords} from '../term/utils';\n\nimport {INLINE_CODE, INLINE_CODE_CLASS, INLINE_CODE_ID, LANG_TOKEN, OPEN_CLASS} from './constant';\n\nexport let timer: ReturnType<typeof setTimeout> | null = null;\n\nlet isListenerNeeded = true;\n\nexport function getTooltipElement(): HTMLElement | null {\n return document.getElementById(INLINE_CODE_ID);\n}\n\nfunction setTooltipAriaAttributes(tooltipElement: HTMLElement, targetElement: HTMLElement): void {\n const ariaLive = targetElement.getAttribute('aria-live') || 'polite';\n tooltipElement?.setAttribute('aria-live', ariaLive);\n tooltipElement?.setAttribute('aria-modal', 'true');\n}\n\nfunction checkTimerAndClear() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n}\n\nfunction tooltipParentElement(target: HTMLElement | null) {\n if (!target) {\n return null;\n }\n\n const closestScrollableParent = target.closest('table') || target.closest('code');\n\n return closestScrollableParent || target.parentElement;\n}\n\nfunction tooltipOnResize() {\n const openedDefinition = getTooltipElement();\n\n if (!openedDefinition) {\n return;\n }\n const inlineId = openedDefinition.getAttribute('inline-id') || '';\n const targetElement = document.getElementById(inlineId);\n\n if (!targetElement) {\n return;\n }\n\n setTooltipPosition(openedDefinition, targetElement);\n}\n\nexport function setTooltipPosition(tooltipElement: HTMLElement, targetElement: HTMLElement): void {\n const {\n x: inlineX,\n y: inlineY,\n right: inlineRight,\n left: inlineLeft,\n width: inlineWidth,\n height: inlineHeight,\n } = targetElement.getBoundingClientRect();\n\n const tooltipParent = tooltipParentElement(targetElement);\n\n if (!tooltipParent) {\n return;\n }\n\n const {right: tooltipParentRight, left: tooltipParentLeft} =\n tooltipParent.getBoundingClientRect();\n\n if ((tooltipParentRight < inlineLeft || tooltipParentLeft > inlineRight) && !isListenerNeeded) {\n closeTooltip(tooltipElement);\n return;\n }\n\n if (isListenerNeeded && tooltipParent) {\n tooltipParent.addEventListener('scroll', tooltipOnResize);\n isListenerNeeded = false;\n }\n\n const relativeX = Number(tooltipElement.getAttribute('relativeX'));\n const relativeY = Number(tooltipElement.getAttribute('relativeY'));\n\n if (relativeX === inlineX && relativeY === inlineY) {\n return;\n }\n\n tooltipElement.setAttribute('relativeX', String(inlineX));\n tooltipElement.setAttribute('relativeY', String(inlineY));\n\n const offsetTop = inlineHeight + 5;\n const definitionParent = tooltipElement.parentElement;\n\n if (!definitionParent) {\n return;\n }\n\n const {width: definitionWidth} = tooltipElement.getBoundingClientRect();\n const {left: definitionParentLeft} = definitionParent.getBoundingClientRect();\n\n // If definition not fit document change base alignment\n const definitionLeftCoordinate = Number(getCoords(targetElement).left);\n const definitionRightCoordinate = definitionWidth + definitionLeftCoordinate;\n\n const definitionOutOfScreenOnLeft = definitionLeftCoordinate - definitionWidth < 0;\n const definitionOutOfScreenOnRight = definitionRightCoordinate > document.body.clientWidth;\n\n const isAlignSwapped = definitionOutOfScreenOnRight || document.dir === 'rtl';\n const fitDefinitionDocument =\n isAlignSwapped && !definitionOutOfScreenOnLeft ? definitionWidth - inlineWidth : 0;\n const customHeaderTop = getCoords(definitionParent).top - definitionParent.offsetTop;\n const offsetRight = 5;\n const shiftLeft = definitionOutOfScreenOnRight\n ? definitionRightCoordinate - document.body.clientWidth + offsetRight\n : 0;\n const offsetLeft =\n getCoords(targetElement).left -\n definitionParentLeft +\n definitionParent.offsetLeft -\n fitDefinitionDocument;\n\n const isShiftLeftNeeded = offsetLeft + definitionWidth >= document.body.clientWidth;\n\n tooltipElement.style.top =\n Number(getCoords(targetElement).top + offsetTop - customHeaderTop) + 'px';\n tooltipElement.style.left = Number(offsetLeft - (isShiftLeftNeeded ? shiftLeft : 0)) + 'px';\n}\n\nexport function getInlineCodeByTooltip(definition: HTMLElement) {\n const inlineId = definition.getAttribute('inline-id');\n\n return inlineId ? document.getElementById(inlineId) : null;\n}\n\nfunction closeTooltipFn(definition: HTMLElement) {\n definition.classList.remove(OPEN_CLASS);\n const inline = getInlineCodeByTooltip(definition);\n const inlineCodepParent = tooltipParentElement(inline);\n const tooltipParent = tooltipParentElement(definition);\n\n definition.removeAttribute('inline-id');\n\n if (!inlineCodepParent || !tooltipParent) {\n return;\n }\n\n tooltipParent.removeChild(definition);\n inlineCodepParent.removeEventListener('scroll', tooltipOnResize);\n isListenerNeeded = true;\n}\n\nfunction createTooltip() {\n let tooltip = getTooltipElement();\n\n if (!tooltip) {\n const pageContent = document.querySelector('.dc-doc-page__content') || document.body;\n const lang = document.documentElement.lang || 'en';\n const tooltipText = LANG_TOKEN[lang as Lang] ?? LANG_TOKEN.en;\n const host = document.createElement('div');\n\n host.innerHTML = `\n <div id=\"${INLINE_CODE_ID}\" class=\"${INLINE_CODE_CLASS}\"\n role=\"dialog\" aria-live=\"polite\" aria-modal=\"true\">\n ${tooltipText}\n </div>\n `;\n\n tooltip = host.firstElementChild as HTMLElement;\n pageContent.appendChild(tooltip);\n }\n\n return tooltip;\n}\n\nexport function openTooltip(target: HTMLElement) {\n const tooltip = createTooltip();\n\n if (!target.matches(INLINE_CODE) || !tooltip) {\n return;\n }\n\n tooltip.setAttribute('inline-id', target.getAttribute('id') || '');\n setTooltipAriaAttributes(tooltip, target);\n setTooltipPosition(tooltip, target);\n\n // In order not to get rid of the smooth appearance effect, I had to do this\n if (tooltip.classList.contains(OPEN_CLASS)) {\n tooltip.classList.remove(OPEN_CLASS);\n requestAnimationFrame(() => {\n tooltip.classList.add(OPEN_CLASS);\n });\n } else {\n tooltip.classList.add(OPEN_CLASS);\n }\n\n return tooltip;\n}\n\nexport function closeTooltip(target: HTMLElement) {\n checkTimerAndClear();\n closeTooltipFn(target);\n}\n\nexport function tooltipWorker(target: HTMLElement) {\n const definition = openTooltip(target);\n\n if (!definition) {\n return;\n }\n checkTimerAndClear();\n timer = setTimeout(() => {\n closeTooltip(definition);\n timer = null;\n }, 1000);\n}\n", "import {copyToClipboard, getEventTarget, isCustom} from '../utils';\n\nimport {INLINE_CODE, OPEN_CLASS} from './constant';\nimport {\n closeTooltip,\n getInlineCodeByTooltip,\n getTooltipElement,\n setTooltipPosition,\n tooltipWorker,\n} from './utils';\n\nexport function inlineCopyFn(target: HTMLElement) {\n const innerText = target.innerText;\n\n if (!innerText) {\n return;\n }\n\n copyToClipboard(innerText).then(() => {\n tooltipWorker(target);\n });\n}\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n const target = getEventTarget(event) as HTMLElement;\n\n const inline = target.matches(INLINE_CODE);\n\n if (isCustom(event) || !inline) {\n return;\n }\n\n inlineCopyFn(target);\n });\n\n document.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' && document.activeElement) {\n const activeElement = document.activeElement as HTMLElement;\n const classInlineCode = INLINE_CODE.replace('.', '');\n\n if (!activeElement.classList.contains(classInlineCode)) {\n return;\n }\n\n const innerText = activeElement.innerText;\n\n if (!innerText) {\n return;\n }\n\n copyToClipboard(innerText).then(() => {\n tooltipWorker(activeElement);\n });\n }\n\n const inlineTooltip = getTooltipElement();\n\n if (event.key === 'Escape' && inlineTooltip) {\n closeTooltip(inlineTooltip);\n getInlineCodeByTooltip(inlineTooltip)?.focus(); // Set focus back to open button after closing popup\n }\n });\n\n window.addEventListener('resize', () => {\n const inlineTooltip = getTooltipElement();\n if (!inlineTooltip) {\n return;\n }\n\n const inlineId = inlineTooltip.getAttribute('inline-id') || '';\n const inlineCodeElement = document.getElementById(inlineId);\n\n if (!inlineCodeElement) {\n inlineTooltip.classList.toggle(OPEN_CLASS);\n return;\n }\n\n setTooltipPosition(inlineTooltip, inlineCodeElement);\n });\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["require_get_root_node_polyfill", "__commonJS", "exports", "module", "getRootNode", "opt", "composed", "getShadowIncludingRoot", "getRoot", "node", "root", "isShadowRoot", "import_get_root_node_polyfill", "__toESM", "e", "matches", "selector", "th", "getEventTarget", "event", "path", "isCustom", "target", "copyToClipboard", "text", "__async", "textarea", "BUTTON_SELECTOR", "notifySuccess", "svgButton", "id", "icon", "buttonCopyFn", "parent", "code", "textContent", "button", "ANCHOR_BUTTON_SELECTOR", "href", "link", "INLINE_CODE", "INLINE_CODE_ID", "INLINE_CODE_CLASS", "OPEN_CLASS", "LANG_TOKEN", "Selector", "openClass", "openDefinitionClass", "getCoords", "elem", "box", "body", "docEl", "scrollTop", "scrollLeft", "clientTop", "clientLeft", "top", "left", "timer", "isListenerNeeded", "getTooltipElement", "setTooltipAriaAttributes", "tooltipElement", "targetElement", "ariaLive", "checkTimerAndClear", "tooltipParentElement", "tooltipOnResize", "openedDefinition", "inlineId", "setTooltipPosition", "inlineX", "inlineY", "inlineRight", "inlineLeft", "inlineWidth", "inlineHeight", "tooltipParent", "tooltipParentRight", "tooltipParentLeft", "closeTooltip", "relativeX", "relativeY", "offsetTop", "definitionParent", "definitionWidth", "definitionParentLeft", "definitionLeftCoordinate", "definitionRightCoordinate", "definitionOutOfScreenOnLeft", "definitionOutOfScreenOnRight", "fitDefinitionDocument", "customHeaderTop", "shiftLeft", "offsetLeft", "isShiftLeftNeeded", "getInlineCodeByTooltip", "definition", "closeTooltipFn", "inline", "inlineCodepParent", "createTooltip", "_a", "tooltip", "pageContent", "lang", "tooltipText", "host", "openTooltip", "tooltipWorker", "inlineCopyFn", "innerText", "activeElement", "classInlineCode", "inlineTooltip", "inlineCodeElement"]
7
7
  }
package/dist/js/yfm.js CHANGED
@@ -527,7 +527,27 @@
527
527
 
528
528
  // src/js/inline-code/constant.ts
529
529
  var INLINE_CODE = ".yfm-clipboard-inline-code";
530
+ var INLINE_CODE_ID = "tooltip_inline_clipboard_dialog";
531
+ var INLINE_CODE_CLASS = "yfm inline_code_tooltip";
530
532
  var OPEN_CLASS = "open";
533
+ var LANG_TOKEN = {
534
+ ru: "\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u043E",
535
+ en: "Copied",
536
+ ar: "\u062A\u0645 \u0627\u0644\u0646\u0633\u062E",
537
+ cs: "Zkop\xEDrov\xE1no",
538
+ fr: "Copi\xE9",
539
+ es: "Copiado",
540
+ he: "\u05D4\u05D5\u05E2\u05EA\u05E7",
541
+ bg: "\u041A\u043E\u043F\u0438\u0440\u0430\u043D\u043E",
542
+ et: "Kopeeritud",
543
+ el: "\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03AC\u03C6\u03B7\u03BA\u03B5",
544
+ pt: "Copiado",
545
+ zh: "\u5DF2\u590D\u5236",
546
+ "zh-tw": "\u5DF2\u8907\u88FD",
547
+ kk: "\u041A\u04E9\u0448\u0456\u0440\u0456\u043B\u0434\u0456",
548
+ tr: "Kopyaland\u0131",
549
+ uz: "Nusxalandi"
550
+ };
531
551
 
532
552
  // src/js/term/utils.ts
533
553
  var Selector = {
@@ -696,7 +716,7 @@
696
716
  var timer = null;
697
717
  var isListenerNeeded2 = true;
698
718
  function getTooltipElement() {
699
- return document.querySelector(".yfm-inline-code-tooltip");
719
+ return document.getElementById(INLINE_CODE_ID);
700
720
  }
701
721
  function setTooltipAriaAttributes(tooltipElement, targetElement) {
702
722
  const ariaLive = targetElement.getAttribute("aria-live") || "polite";
@@ -785,31 +805,52 @@
785
805
  function closeTooltipFn(definition) {
786
806
  definition.classList.remove(OPEN_CLASS);
787
807
  const inline = getInlineCodeByTooltip(definition);
788
- const tooltipParent = tooltipParentElement(inline);
808
+ const inlineCodepParent = tooltipParentElement(inline);
809
+ const tooltipParent = tooltipParentElement(definition);
789
810
  definition.removeAttribute("inline-id");
790
- if (!tooltipParent) {
811
+ if (!inlineCodepParent || !tooltipParent) {
791
812
  return;
792
813
  }
793
- tooltipParent.removeEventListener("scroll", tooltipOnResize);
814
+ tooltipParent.removeChild(definition);
815
+ inlineCodepParent.removeEventListener("scroll", tooltipOnResize);
794
816
  isListenerNeeded2 = true;
795
817
  }
818
+ function createTooltip() {
819
+ var _a;
820
+ let tooltip = getTooltipElement();
821
+ if (!tooltip) {
822
+ const pageContent = document.querySelector(".dc-doc-page__content") || document.body;
823
+ const lang = document.documentElement.lang || "en";
824
+ const tooltipText = (_a = LANG_TOKEN[lang]) != null ? _a : LANG_TOKEN.en;
825
+ const host = document.createElement("div");
826
+ host.innerHTML = `
827
+ <div id="${INLINE_CODE_ID}" class="${INLINE_CODE_CLASS}"
828
+ role="dialog" aria-live="polite" aria-modal="true">
829
+ ${tooltipText}
830
+ </div>
831
+ `;
832
+ tooltip = host.firstElementChild;
833
+ pageContent.appendChild(tooltip);
834
+ }
835
+ return tooltip;
836
+ }
796
837
  function openTooltip(target) {
797
- const tooltipElement = document.getElementById("tooltip_inline_clipboard_dialog");
798
- if (!target.matches(".yfm-clipboard-inline-code") || !tooltipElement) {
838
+ const tooltip = createTooltip();
839
+ if (!target.matches(INLINE_CODE) || !tooltip) {
799
840
  return;
800
841
  }
801
- tooltipElement.setAttribute("inline-id", target.getAttribute("id") || "");
802
- setTooltipAriaAttributes(tooltipElement, target);
803
- setTooltipPosition(tooltipElement, target);
804
- if (tooltipElement.classList.contains(OPEN_CLASS)) {
805
- tooltipElement.classList.remove(OPEN_CLASS);
842
+ tooltip.setAttribute("inline-id", target.getAttribute("id") || "");
843
+ setTooltipAriaAttributes(tooltip, target);
844
+ setTooltipPosition(tooltip, target);
845
+ if (tooltip.classList.contains(OPEN_CLASS)) {
846
+ tooltip.classList.remove(OPEN_CLASS);
806
847
  requestAnimationFrame(() => {
807
- tooltipElement.classList.add(OPEN_CLASS);
848
+ tooltip.classList.add(OPEN_CLASS);
808
849
  });
809
850
  } else {
810
- tooltipElement.classList.add(OPEN_CLASS);
851
+ tooltip.classList.add(OPEN_CLASS);
811
852
  }
812
- return tooltipElement;
853
+ return tooltip;
813
854
  }
814
855
  function closeTooltip(target) {
815
856
  checkTimerAndClear();