@diplodoc/transform 4.68.3 → 4.69.0
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/README.md +7 -0
- package/README.ru.md +2 -0
- package/dist/css/_yfm-only.css.map +1 -1
- package/dist/css/_yfm-only.min.css.map +1 -1
- package/dist/css/base.css +27 -13
- package/dist/css/base.css.map +3 -3
- package/dist/css/base.min.css +1 -1
- package/dist/css/base.min.css.map +3 -3
- package/dist/css/print.css.map +1 -1
- package/dist/css/yfm.css +27 -13
- package/dist/css/yfm.css.map +3 -3
- package/dist/css/yfm.min.css +1 -1
- package/dist/css/yfm.min.css.map +3 -3
- package/dist/js/base.js +24 -12
- package/dist/js/base.js.map +2 -2
- package/dist/js/base.min.js +3 -3
- package/dist/js/base.min.js.map +3 -3
- package/dist/js/yfm.js +24 -12
- package/dist/js/yfm.js.map +3 -3
- package/dist/js/yfm.min.js +4 -4
- package/dist/js/yfm.min.js.map +3 -3
- package/dist/scss/_code.scss +39 -22
- package/dist/scss/_common.scss +2 -2
- package/lib/plugins/code.d.ts +9 -1
- package/lib/plugins/code.js +58 -40
- package/lib/plugins/code.js.map +1 -1
- package/lib/typings.d.ts +6 -0
- package/package.json +4 -3
- package/src/js/code.ts +26 -17
- package/src/scss/_code.scss +39 -22
- package/src/scss/_common.scss +2 -2
- package/src/transform/plugins/code.ts +73 -40
- package/src/transform/typings.ts +6 -0
package/dist/js/yfm.min.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../node_modules/get-root-node-polyfill/index.js", "../../node_modules/@diplodoc/cut-extension/src/runtime/const.ts", "../../node_modules/@diplodoc/cut-extension/src/plugin/const.ts", "../../node_modules/@diplodoc/cut-extension/src/runtime/controller.ts", "../../node_modules/@diplodoc/cut-extension/src/runtime/index.ts", "../../node_modules/@diplodoc/tabs-extension/src/common.ts", "../../node_modules/@diplodoc/tabs-extension/src/runtime/utils.ts", "../../node_modules/@diplodoc/tabs-extension/src/runtime/TabsController.ts", "../../node_modules/@diplodoc/tabs-extension/src/runtime/index.ts", "../../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", "../../src/js/term/index.ts", "../../src/js/wide-mode/constants.ts", "../../src/js/wide-mode/icons/expand.ts", "../../src/js/wide-mode/icons/close.ts", "../../src/js/wide-mode/modal.ts", "../../src/js/wide-mode/apply.ts", "../../src/js/wide-mode/index.ts", "../../src/js/patch.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", "export const GLOBAL_KEY = 'yfm_cut';\n\nexport const Selector = {\n CUT: '.yfm .yfm-cut',\n TITLE: '.yfm .yfm-cut-title',\n CONTENT: '.yfm .yfm-cut-content',\n};\n", "export const ENV_FLAG_NAME = 'has-yfm-cut';\n\nexport const TokenType = {\n Cut: 'yfm_cut',\n CutOpen: 'yfm_cut_open',\n CutClose: 'yfm_cut_close',\n Title: 'yfm_cut_title',\n TitleOpen: 'yfm_cut_title_open',\n TitleClose: 'yfm_cut_title_close',\n Content: 'yfm_cut_content',\n ContentOpen: 'yfm_cut_content_open',\n ContentClose: 'yfm_cut_content_close',\n} as const;\n\nexport const ClassNames = {\n Cut: 'yfm-cut',\n Title: 'yfm-cut-title',\n Content: 'yfm-cut-content',\n Highlight: 'yfm-cut-highlight',\n} as const;\n", "import {ClassNames} from '../plugin/const';\n\nexport class YfmCutController {\n private disposers: Function[] = [];\n\n constructor() {\n this.disposers.push(this.init());\n }\n\n init() {\n let mouseEvent = false;\n const keepMouse = () => {\n mouseEvent = true;\n };\n const amendMouse = () => {\n mouseEvent = false;\n };\n const onFocus = (event: Event) => {\n if (isSummary(event.target) && !mouseEvent) {\n this.focusActiveCut(event.target);\n }\n };\n\n document.addEventListener('mousedown', keepMouse);\n document.addEventListener('mouseup', amendMouse);\n document.addEventListener('focus', onFocus, true);\n\n return () => {\n document.removeEventListener('mousedown', keepMouse);\n document.removeEventListener('mouseup', amendMouse);\n document.removeEventListener('focus', onFocus, true);\n };\n }\n\n dispose() {\n for (const disposer of this.disposers) {\n disposer();\n }\n }\n\n private focusActiveCut(summary: HTMLElement) {\n const cutNode = summary.parentNode;\n if (!isDetails(cutNode)) {\n return;\n }\n\n let node: HTMLElement | null = cutNode;\n while (node) {\n if (isDetails(node)) {\n node.open = true;\n }\n node = node.parentElement;\n }\n\n setTimeout(() => {\n cutNode.classList.add(ClassNames.Highlight);\n }, 70);\n\n setTimeout(() => {\n cutNode.classList.remove(ClassNames.Highlight);\n }, 1000);\n }\n}\n\nfunction isDetails(element: unknown): element is HTMLDetailsElement {\n return (\n (element as HTMLElement)?.tagName?.toLowerCase() === 'details' &&\n (element as HTMLElement)?.classList.contains(ClassNames.Cut)\n );\n}\n\nfunction isSummary(element: unknown): element is HTMLElement {\n return (\n (element as HTMLElement)?.tagName?.toLowerCase() === 'summary' &&\n (element as HTMLElement)?.classList.contains(ClassNames.Title)\n );\n}\n", "import {GLOBAL_KEY} from './const';\nimport {YfmCutController} from './controller';\nimport './styles/cut.scss';\n\nif (typeof window !== 'undefined' && !window[GLOBAL_KEY]) {\n window[GLOBAL_KEY] = new YfmCutController();\n}\n\ndeclare global {\n interface Window {\n [GLOBAL_KEY]: YfmCutController;\n }\n}\n", "import {type TabsController} from './runtime/TabsController';\n\nexport const TAB_RE = /`?{% list tabs .*?%}`?/;\nexport const TABS_CLASSNAME = 'yfm-tabs';\nexport const TAB_CLASSNAME = 'yfm-tab';\nexport const TAB_PANEL_CLASSNAME = 'yfm-tab-panel';\nexport const TABS_LIST_CLASSNAME = 'yfm-tab-list';\nexport const ACTIVE_CLASSNAME = 'active';\nexport const TAB_GROUP_CLASSNAME = 'yfm-tab-group';\nexport const TAB_ACTIVE_KEY = 'data-diplodoc-is-active';\nexport const GROUP_DATA_KEY = 'data-diplodoc-group';\nexport const TAB_DATA_KEY = 'data-diplodoc-key';\nexport const TAB_DATA_VARIANT = 'data-diplodoc-variant';\nexport const TAB_DATA_ID = 'data-diplodoc-id';\nexport const DEFAULT_TABS_GROUP_PREFIX = 'defaultTabsGroup-';\nexport const ACTIVE_TAB_TEXT = '{selected}';\nexport const TAB_FORCED_OPEN = 'data-diplodoc-forced';\n\nexport const TABS_DROPDOWN_CLASSNAME = 'yfm-tabs-dropdown';\nexport const TABS_DROPDOWN_MENU_CLASSNAME = 'yfm-tabs-dropdown-menu';\nexport const TABS_DROPDOWN_SELECT = 'yfm-tabs-dropdown-select';\n\nexport const TABS_ACCORDION_CLASSNAME = 'yfm-tabs-accordion';\nexport const TABS_ACCORDION_CLIENT_HEIGHT = 'data-yfm-tabs-accordion-client-heights';\n\nexport const TABS_RADIO_CLASSNAME = 'yfm-tabs-vertical';\nexport const VERTICAL_TAB_CLASSNAME = 'yfm-vertical-tab';\nexport const TAB_DATA_VERTICAL_TAB = 'data-diplodoc-vertical-tab';\nexport const TAB_RADIO_KEY = 'data-diplodoc-input';\n\nexport enum TabsVariants {\n Regular = 'regular',\n Radio = 'radio',\n Dropdown = 'dropdown',\n Accordion = 'accordion',\n}\n\nexport type EnabledVariants = Partial<Record<TabsVariants, boolean>>;\n\nexport interface Tab {\n group?: string;\n key: string;\n variant: TabsVariants;\n}\n\nexport interface SelectedTabEvent {\n tab: Tab;\n currentTabId?: string;\n}\n\nexport const GLOBAL_SYMBOL: unique symbol = Symbol.for('diplodocTabs');\n\ndeclare global {\n interface Window {\n [GLOBAL_SYMBOL]: TabsController;\n }\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 getClosestScrollableParent = (element: HTMLElement): HTMLElement | undefined => {\n if (Math.abs(element.scrollHeight - element.clientHeight) > 1) {\n return element;\n }\n\n return element.parentElement ? getClosestScrollableParent(element.parentElement) : undefined;\n};\n\nexport interface ElementOffset {\n top: number;\n left: number;\n scrollTop: number;\n scrollLeft: number;\n}\n\nexport const getOffsetByScrollableParent = (\n element: HTMLElement,\n scrollableParent: HTMLElement,\n): ElementOffset => {\n const elementBounds = element.getBoundingClientRect();\n const scrollableParentBounds = scrollableParent.getBoundingClientRect();\n return {\n top: elementBounds.top - scrollableParentBounds.top,\n left: elementBounds.left - scrollableParentBounds.left,\n scrollTop: scrollableParent.scrollTop,\n scrollLeft: scrollableParent.scrollLeft,\n };\n};\n", "import {\n ACTIVE_CLASSNAME,\n DEFAULT_TABS_GROUP_PREFIX,\n GROUP_DATA_KEY,\n SelectedTabEvent,\n TABS_CLASSNAME,\n TABS_DROPDOWN_SELECT,\n TABS_LIST_CLASSNAME,\n TABS_RADIO_CLASSNAME,\n TAB_CLASSNAME,\n TAB_DATA_ID,\n TAB_DATA_KEY,\n TAB_DATA_VARIANT,\n TAB_FORCED_OPEN,\n TAB_PANEL_CLASSNAME,\n Tab,\n TabsVariants,\n} from '../common';\n\nimport {\n ElementOffset,\n getClosestScrollableParent,\n getEventTarget,\n getOffsetByScrollableParent,\n isCustom,\n} from './utils';\n\nconst Selector = {\n TABS: `.${TABS_CLASSNAME}`,\n TAB_LIST: `.${TABS_LIST_CLASSNAME}`,\n TAB: `.${TAB_CLASSNAME}`,\n TAB_PANEL: `.${TAB_PANEL_CLASSNAME}`,\n VERTICAL_TABS: `.${TABS_RADIO_CLASSNAME}`,\n};\n\nexport interface ISelectTabByIdOptions {\n scrollToElement: boolean;\n}\n\ntype Handler = (data: SelectedTabEvent) => void;\n\ntype TabSwitchDirection = 'left' | 'right';\n\nexport type TabsHistory = Record<string, {key: string; variant: TabsVariants}>;\n\nexport type TabsControllerOptions = {\n saveTabsToLocalStorage: boolean;\n saveTabsToQueryStateMode: 'all' | 'page' | 'none';\n};\n\nexport class TabsController {\n private _document: Document;\n private _onSelectTabHandlers: Set<Handler> = new Set();\n private _options: TabsControllerOptions;\n private _currentPageTabGroups: string[] = [];\n private _isRestoringTabs = false;\n\n // TODO: remove side effects from constructor\n constructor(document: Document, options: Partial<TabsControllerOptions> = {}) {\n this._document = document;\n this._options = Object.assign(\n {\n saveTabsToLocalStorage: false,\n saveTabsToQueryStateMode: 'none',\n },\n options,\n );\n\n this._document.addEventListener('click', (event) => {\n const target = getEventTarget(event) as HTMLElement;\n\n if (event.target) {\n this.hideAllDropdown(event.target as HTMLElement);\n }\n\n if (isCustom(event)) {\n return;\n }\n\n if (this.isElementDropdownSelect(target)) {\n target.classList.toggle(ACTIVE_CLASSNAME);\n\n return;\n }\n\n if (!this.isValidTabElement(target)) {\n return;\n }\n\n const tab = this.getTabDataFromHTMLElement(target);\n\n if (tab) {\n this._selectTab(tab, target);\n }\n });\n\n this._document.addEventListener('keydown', (event) => {\n let direction: TabSwitchDirection | null = null;\n switch (event.key) {\n case 'ArrowLeft': {\n direction = 'left';\n break;\n }\n case 'ArrowRight': {\n direction = 'right';\n break;\n }\n case 'ArrowUp': {\n direction = 'left';\n break;\n }\n case 'ArrowDown': {\n direction = 'right';\n break;\n }\n }\n if (!direction) {\n return;\n }\n\n const target = getEventTarget(event) as HTMLElement;\n\n if (isCustom(event) || !this.isValidTabElement(target)) {\n return;\n }\n\n const {tabs, nodes} = this.getTabs(target);\n const currentTab = this.getTabDataFromHTMLElement(target);\n const currentTabIndex = tabs.findIndex(\n ({key}) => currentTab?.key && key === currentTab.key,\n );\n if (!currentTab || tabs.length <= 1 || currentTabIndex === -1) {\n return;\n }\n\n const newIndex =\n (currentTabIndex + (direction === 'left' ? -1 : 1) + tabs.length) % tabs.length;\n\n this.selectTab(tabs[newIndex]);\n nodes[newIndex].focus();\n });\n }\n\n configure(options: Partial<TabsControllerOptions>) {\n this._options = Object.assign(this._options, options);\n }\n\n onSelectTab(handler: Handler) {\n this._onSelectTabHandlers.add(handler);\n\n return () => {\n this._onSelectTabHandlers.delete(handler);\n };\n }\n\n selectTabById(id: string, options?: ISelectTabByIdOptions) {\n const target = this._document.querySelector(\n `${Selector.TAB}[${TAB_DATA_ID}=\"${id}\"]`,\n ) as HTMLElement;\n\n if (!target || !this.isValidTabElement(target)) {\n return;\n }\n\n const tab = this.getTabDataFromHTMLElement(target);\n\n if (tab) {\n this._selectTab(tab, target);\n }\n\n if (options?.scrollToElement) {\n target.scrollIntoView();\n }\n }\n\n selectTab(tab: Tab) {\n this._selectTab(tab);\n }\n\n restoreTabs(tabsHistory: TabsHistory) {\n this._isRestoringTabs = true;\n try {\n for (const [group, fields] of Object.entries(tabsHistory)) {\n if (group) {\n const tab = {group, ...fields};\n this.selectTab(tab);\n }\n }\n } finally {\n this._isRestoringTabs = false;\n }\n }\n\n getTabsFromLocalStorage(): TabsHistory {\n return JSON.parse(localStorage.getItem('tabsHistory') || '{}') as TabsHistory;\n }\n\n getTabsFromSearchQuery(): TabsHistory {\n const tabsHistory = {} as TabsHistory;\n const urlParams = new URLSearchParams(window.location.search);\n if (urlParams.has('tabs')) {\n const tabsFromQuery = urlParams.get('tabs') || '';\n const tabConfigs = tabsFromQuery.split(',');\n\n tabConfigs.forEach((config) => {\n const splitConfig = config.split('_');\n const [group, key] = splitConfig;\n let variant = TabsVariants.Regular;\n if (splitConfig.length === 3) {\n variant = splitConfig[2] as TabsVariants;\n }\n\n if (group && key && Object.values(TabsVariants).includes(variant)) {\n const keyWithSpaces = key;\n tabsHistory[group] = {key: keyWithSpaces, variant: variant};\n }\n });\n }\n\n return tabsHistory;\n }\n\n updateLocalStorageWithTabs(tabsHistory: TabsHistory) {\n if (!this._options.saveTabsToLocalStorage) {\n return;\n }\n\n // Don't update localStorage if we're just restoring tabs\n if (this._isRestoringTabs) {\n return;\n }\n\n localStorage.setItem('tabsHistory', JSON.stringify(tabsHistory));\n }\n\n updateQueryParamWithTabs(tabsHistory: TabsHistory) {\n // Don't update URL if we're just restoring tabs\n if (this._isRestoringTabs) {\n return;\n }\n\n const urlParams = new URLSearchParams(window.location.search);\n const tabsArray = Object.entries(tabsHistory).map(([group, {key, variant}]) => {\n if (variant === TabsVariants.Regular) {\n return `${group}_${key}`;\n }\n return `${group}_${key}_${variant}`;\n });\n\n // Clear or set tabs parameter\n if (tabsArray.length > 0) {\n urlParams.set('tabs', tabsArray.join(','));\n } else {\n urlParams.delete('tabs');\n }\n\n // Preserve existing state\n const currentState = history.state || {};\n\n // Use URL constructor for proper URL handling\n const url = new URL(window.location.href);\n url.search = urlParams.toString();\n\n window.history.replaceState({...currentState}, document.title, url.href);\n }\n\n getCurrentPageTabHistory(tabsHistory: TabsHistory) {\n return Object.fromEntries(\n Object.entries(tabsHistory).filter(([group]) =>\n this._currentPageTabGroups.includes(group),\n ),\n );\n }\n\n onPageChanged() {\n this._currentPageTabGroups = this.getCurrentPageTabGroups();\n }\n\n getCurrentPageTabGroups(): string[] {\n const tabs = this._document.getElementsByClassName(TABS_CLASSNAME);\n const groups = new Set<string>();\n\n Array.from(tabs).forEach((tab) => {\n const group = tab.getAttribute(GROUP_DATA_KEY);\n if (group) {\n groups.add(group);\n }\n });\n\n return Array.from(groups);\n }\n\n clearTabsPreferred() {\n localStorage.removeItem('tabsHistory');\n this.updateQueryParamWithTabs({});\n }\n\n private _selectTab(tab: Tab, targetTab?: HTMLElement) {\n const {group, key, variant} = tab;\n\n if (!group) {\n return;\n }\n\n this.saveTabPreferred({group, key, variant});\n\n const scrollableParent = targetTab && getClosestScrollableParent(targetTab);\n const previousTargetOffset =\n scrollableParent && getOffsetByScrollableParent(targetTab, scrollableParent);\n\n const updatedTabs = this.updateHTML({group, key, variant}, targetTab, variant);\n\n if (updatedTabs > 0) {\n this.fireSelectTabEvent({group, key, variant}, targetTab?.dataset.diplodocId);\n\n if (previousTargetOffset) {\n this.resetScroll(targetTab, scrollableParent, previousTargetOffset);\n }\n }\n }\n\n private updateHTML(tab: Required<Tab>, target: HTMLElement | undefined, variant: TabsVariants) {\n switch (variant) {\n case TabsVariants.Radio: {\n return this.updateHTMLRadio(tab, target);\n }\n case TabsVariants.Accordion: {\n return this.updateHTMLAccordion(tab, target);\n }\n case TabsVariants.Regular: {\n return this.updateHTMLRegular(tab);\n }\n case TabsVariants.Dropdown: {\n return this.updateHTMLDropdown(tab);\n }\n default: {\n return 0;\n }\n }\n }\n\n private saveTabPreferred(tab: Required<Tab>) {\n let tabsHistory = {} as TabsHistory;\n\n if (this._options.saveTabsToLocalStorage) {\n tabsHistory = JSON.parse(localStorage.getItem('tabsHistory') || '{}');\n }\n\n tabsHistory[tab.group] = {key: tab.key, variant: tab.variant};\n\n if (this._options.saveTabsToLocalStorage) {\n this.updateLocalStorageWithTabs(tabsHistory);\n }\n\n switch (this._options.saveTabsToQueryStateMode) {\n case 'all': {\n this.updateQueryParamWithTabs(tabsHistory);\n break;\n }\n case 'page': {\n this.updateQueryParamWithTabs(this.getCurrentPageTabHistory(tabsHistory));\n break;\n }\n }\n }\n\n private updateHTMLRadio(tab: Required<Tab>, target: HTMLElement | undefined) {\n const {group, key} = tab;\n\n const {isForced, root} = this.didTabOpenForce(target);\n\n const singleTabSelector = isForced ? `.yfm-vertical-tab[${TAB_FORCED_OPEN}=\"true\"]` : '';\n\n const tabs = this._document.querySelectorAll(\n `${Selector.TABS}[${GROUP_DATA_KEY}=\"${group}\"] ${Selector.TAB}[${TAB_DATA_KEY}=\"${key}\"]${singleTabSelector}`,\n );\n\n if (isForced) {\n root?.removeAttribute(TAB_FORCED_OPEN);\n }\n\n let updated = 0;\n\n tabs.forEach((tab) => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const root = tab.parentNode!;\n const elements = root.children;\n\n for (let i = 0; i < elements.length; i += 2) {\n const [title, content] = [elements.item(i), elements.item(i + 1)] as HTMLElement[];\n\n const input = title.children.item(0) as HTMLInputElement;\n\n if (title === tab) {\n const checked = input.checked;\n\n if (checked) {\n title.classList.remove('active');\n content?.classList.remove('active');\n\n input.removeAttribute('checked');\n } else {\n title.classList.add('active');\n content?.classList.add('active');\n\n input.setAttribute('checked', 'true');\n }\n\n continue;\n }\n\n if (input.hasAttribute('checked')) {\n title.classList.remove('active');\n content?.classList.remove('active');\n\n input.removeAttribute('checked');\n }\n\n updated++;\n }\n });\n\n return updated;\n }\n\n private updateHTMLRegular(tab: Required<Tab>) {\n const {group, key} = tab;\n\n const tabs = this._document.querySelectorAll(\n `${Selector.TABS}[${GROUP_DATA_KEY}=\"${group}\"] ${Selector.TAB}[${TAB_DATA_KEY}=\"${key}\"]`,\n );\n\n let updated = 0;\n\n tabs.forEach((element) => {\n const htmlElem = element as HTMLElement;\n if (!this.isValidTabElement(htmlElem) || htmlElem.dataset.diplodocIsActive === 'true') {\n return;\n }\n\n updated++;\n\n const tab = element;\n const tabList = tab.parentNode;\n const tabsContainer = tabList?.parentNode;\n const allTabs = Array.from(tabList?.querySelectorAll(Selector.TAB) || []);\n const allPanels = Array.from(tabsContainer?.children || []).filter((node) =>\n node.classList.contains(TAB_PANEL_CLASSNAME),\n );\n const targetIndex = allTabs.indexOf(tab);\n\n allTabs.forEach((tab, i) => {\n const panel = allPanels[i];\n const isTargetTab = i === targetIndex;\n const htmlElem = tab as HTMLElement;\n\n htmlElem.dataset.diplodocIsActive = isTargetTab ? 'true' : 'false';\n\n tab.classList.toggle(ACTIVE_CLASSNAME, isTargetTab);\n tab.setAttribute('aria-selected', isTargetTab.toString());\n tab.setAttribute('tabindex', isTargetTab ? '0' : '-1');\n panel.classList.toggle(ACTIVE_CLASSNAME, isTargetTab);\n });\n });\n\n return updated;\n }\n\n private updateHTMLDropdown(tab: Required<Tab>) {\n const {group, key} = tab;\n\n const tabs = this._document.querySelectorAll(\n `${Selector.TABS}[${GROUP_DATA_KEY}=\"${group}\"] ${Selector.TAB}[${TAB_DATA_KEY}=\"${key}\"]`,\n );\n\n let changed = 0;\n\n tabs.forEach((tab) => {\n const dropdown = tab.closest(`[${TAB_DATA_VARIANT}=${TabsVariants.Dropdown}]`);\n\n if (!dropdown?.children) {\n return;\n }\n\n const select = dropdown.children.item(0) as HTMLElement;\n const menu = dropdown.children.item(1);\n\n select?.classList.remove(ACTIVE_CLASSNAME);\n\n /* first and second elements are select / menu, skipping them */\n const changedIndex = Array.from(menu?.children || []).indexOf(tab) + 2;\n\n for (let i = 2; i < dropdown.children.length; i++) {\n const item = dropdown.children.item(i) as HTMLElement;\n const menuItem = menu?.children.item(i - 2) as HTMLElement;\n\n changed++;\n\n if (changedIndex === i) {\n item?.classList.add(ACTIVE_CLASSNAME);\n menuItem.classList.add(ACTIVE_CLASSNAME);\n\n select.innerHTML = tab.innerHTML;\n select.classList.add('filled');\n\n continue;\n }\n\n menuItem.classList.remove(ACTIVE_CLASSNAME);\n item.classList.remove(ACTIVE_CLASSNAME);\n }\n });\n\n return changed;\n }\n\n private updateHTMLAccordion(tab: Required<Tab>, target: HTMLElement | undefined) {\n const {group, key} = tab;\n\n const tabs = this._document.querySelectorAll(\n `${Selector.TABS}[${GROUP_DATA_KEY}=\"${group}\"] ${Selector.TAB}[${TAB_DATA_KEY}=\"${key}\"]`,\n );\n\n let changed = 0;\n\n tabs.forEach((tab) => {\n const accordion = tab.closest(`[${TAB_DATA_VARIANT}=${TabsVariants.Accordion}]`);\n\n if (!accordion?.children) {\n return;\n }\n\n for (let i = 0; i < accordion.children.length; i += 2) {\n const title = accordion.children.item(i);\n const currentTab = accordion.children.item(i + 1);\n\n changed++;\n\n if (tab === title) {\n title?.classList.toggle(ACTIVE_CLASSNAME);\n currentTab?.classList.toggle(ACTIVE_CLASSNAME);\n\n continue;\n }\n\n title?.classList.remove(ACTIVE_CLASSNAME);\n currentTab?.classList.remove(ACTIVE_CLASSNAME);\n }\n });\n\n if (target && !this.checkVisible(target)) {\n setTimeout(() => {\n target.scrollIntoView({block: 'nearest'});\n });\n }\n\n return changed;\n }\n\n private checkVisible(element: HTMLElement) {\n const rect = element.getBoundingClientRect();\n const viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);\n\n return !(rect.bottom < 0 || rect.top - viewHeight >= 0);\n }\n\n private hideAllDropdown(target: HTMLElement) {\n const dropdowns = this._document.querySelectorAll('.yfm-tabs-dropdown-select.active');\n\n dropdowns.forEach((menu) => {\n if (!menu.contains(target)) {\n menu.classList.remove(ACTIVE_CLASSNAME);\n }\n });\n }\n\n private resetScroll(\n target: HTMLElement,\n scrollableParent: HTMLElement,\n previousTargetOffset: ElementOffset,\n ) {\n const targetOffset = getOffsetByScrollableParent(target, scrollableParent);\n const topDelta = targetOffset.top - previousTargetOffset.top;\n const leftDelta = targetOffset.left - previousTargetOffset.left;\n const scrollTopDelta = targetOffset.scrollTop - previousTargetOffset.scrollTop;\n const scrollLeftDelta = targetOffset.scrollLeft - previousTargetOffset.scrollLeft;\n scrollableParent.scrollTo(\n scrollableParent.scrollLeft + leftDelta - scrollLeftDelta,\n scrollableParent.scrollTop + topDelta - scrollTopDelta,\n );\n }\n\n private didTabOpenForce(target?: HTMLElement) {\n if (!target) {\n return {};\n }\n\n if (target.dataset.diplodocForced) {\n return {root: target, isForced: true};\n }\n\n const root = target.dataset.diplodocVerticalTab ? target : target.parentElement;\n\n const isForced = typeof root?.dataset.diplodocForced !== 'undefined';\n\n return {root, isForced};\n }\n\n private fireSelectTabEvent(tab: Required<Tab>, diplodocId?: string) {\n const {group, key, variant: align} = tab;\n\n const eventTab: Tab = group.startsWith(DEFAULT_TABS_GROUP_PREFIX)\n ? {key, variant: align}\n : tab;\n\n this._onSelectTabHandlers.forEach((handler) => {\n handler({tab: eventTab, currentTabId: diplodocId});\n });\n }\n\n private getTabsType(element: HTMLElement) {\n const tabsRoot = element.closest(`[${TAB_DATA_VARIANT}]`) as HTMLElement | undefined;\n\n if (!tabsRoot) {\n return undefined;\n }\n\n return tabsRoot.dataset.diplodocVariant;\n }\n\n private isValidTabElement(element: HTMLElement) {\n return Boolean(this.getTabsType(element));\n }\n\n private isElementDropdownSelect(target: HTMLElement) {\n return target.classList.contains(TABS_DROPDOWN_SELECT);\n }\n\n private getTabDataFromHTMLElement(target: HTMLElement): Tab | null {\n const type = this.getTabsType(target);\n\n if (type === TabsVariants.Radio) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const tab = target.dataset.diplodocVerticalTab ? target : target.parentElement!;\n\n const key = tab.dataset.diplodocKey;\n const group = (tab.closest(Selector.TABS) as HTMLElement)?.dataset.diplodocGroup;\n return key && group ? {group, key, variant: TabsVariants.Radio} : null;\n }\n\n if (type === TabsVariants.Dropdown || type === TabsVariants.Accordion) {\n const key = target.dataset.diplodocKey;\n const group = (target.closest(Selector.TABS) as HTMLElement)?.dataset.diplodocGroup;\n return key && group ? {group, key, variant: type} : null;\n }\n\n const key = target.dataset.diplodocKey;\n const group = (target.closest(Selector.TABS) as HTMLElement)?.dataset.diplodocGroup;\n return key && group ? {group, key, variant: TabsVariants.Regular} : null;\n }\n\n private getTabs(target: HTMLElement): {tabs: Tab[]; nodes: NodeListOf<HTMLElement>} {\n const group = (target.closest(Selector.TABS) as HTMLElement)?.dataset.diplodocGroup;\n const nodes = (\n target.closest(Selector.TAB_LIST) as HTMLElement\n )?.querySelectorAll<HTMLElement>(Selector.TAB);\n\n const tabs: Tab[] = [];\n nodes.forEach((tabEl) => {\n const key = tabEl?.dataset.diplodocKey;\n if (!key) {\n return;\n }\n\n /** horizontal-only supported feature (used in left/right button click) */\n tabs.push({\n group,\n key,\n variant: TabsVariants.Regular,\n });\n });\n\n return {tabs, nodes};\n }\n}\n", "import {GLOBAL_SYMBOL} from '../common';\n\nimport {TabsController} from './TabsController';\nimport './scss/tabs.scss';\n\nif (typeof window !== 'undefined' && typeof document !== 'undefined' && !window[GLOBAL_SYMBOL]) {\n window[GLOBAL_SYMBOL] = new TabsController(document);\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.trim()).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", "import {getEventTarget, isCustom} from '../utils';\n\nimport {\n closeDefinition,\n getTermByDefinition,\n openClass,\n openDefinition,\n openDefinitionClass,\n setDefinitionPosition,\n} from './utils';\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n if (getEventTarget(event) || !isCustom(event)) {\n openDefinition(getEventTarget(event) as HTMLElement);\n }\n });\n\n document.addEventListener('keydown', (event) => {\n const openedDefinition = document.getElementsByClassName(\n openDefinitionClass,\n )[0] as HTMLElement;\n\n if (event.key === 'Enter' && document.activeElement) {\n openDefinition(document.activeElement as HTMLElement);\n }\n\n if (event.key === 'Escape' && openedDefinition) {\n closeDefinition(openedDefinition);\n getTermByDefinition(openedDefinition)?.focus(); // Set focus back to open button after closing popup\n }\n });\n\n window.addEventListener('resize', () => {\n const openedDefinition = document.getElementsByClassName(\n openDefinitionClass,\n )[0] as HTMLElement;\n\n if (!openedDefinition) {\n return;\n }\n\n const termId = openedDefinition.getAttribute('term-id') || '';\n const termElement = document.getElementById(termId);\n\n if (!termElement) {\n openedDefinition.classList.toggle(openClass);\n return;\n }\n\n setDefinitionPosition(openedDefinition, termElement);\n });\n}\n", "export const WIDE_ELEMENTS_SELECTOR = '[wide-content]';\n", "export default `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\" viewBox=\"0 0 16 16\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M7.754 2.004a.75.75 0 0 0 0 1.5h4.75v4.742a.75.75 0 0 0 1.5 0V2.754a.75.75 0 0 0-.75-.75zm.492 11.992a.75.75 0 0 0 0-1.5h-4.75V7.754a.75.75 0 0 0-1.5 0v5.492a.75.75 0 0 0 .75.75z\" clip-rule=\"evenodd\"/></svg>`;\n", "export default `<svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"close-action\"><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M9.46967 9.46967C9.76256 9.17678 10.2374 9.17678 10.5303 9.46967L14 12.9393L17.4697 9.46967C17.7626 9.17678 18.2374 9.17678 18.5303 9.46967C18.8232 9.76256 18.8232 10.2374 18.5303 10.5303L15.0607 14L18.5303 17.4697C18.8232 17.7626 18.8232 18.2374 18.5303 18.5303C18.2374 18.8232 17.7626 18.8232 17.4697 18.5303L14 15.0607L10.5303 18.5303C10.2374 18.8232 9.76256 18.8232 9.46967 18.5303C9.17678 18.2374 9.17678 17.7626 9.46967 17.4697L12.9393 14L9.46967 10.5303C9.17678 10.2374 9.17678 9.76256 9.46967 9.46967Z\" fill=\"var(--g-color-text-primary)\" fillOpacity=\"0.85\"/></svg>`;\n", "import closeIcon from './icons/close';\n\nconst remove = () => {\n if (!window.wideTemplate) {\n return;\n }\n\n window.wideTemplate.style.display = 'none';\n window.wideTemplate.content(undefined);\n};\n\nconst tbodyOf = (node: HTMLElement) => {\n if (node.tagName !== 'TABLE') {\n return undefined;\n }\n\n const elements = Array.from(node.children);\n\n const thead = elements.find((child) => child.tagName === 'THEAD');\n\n if (thead) {\n return undefined;\n }\n\n const tbody = elements.find((child) => child.tagName === 'TBODY');\n\n return tbody;\n};\n\ntype ModalContainer = NonNullable<typeof window.wideTemplate>;\n\n/* @todo refactor to markup with innerHTML @v8tenko */\n\nconst container = () => {\n if (window.wideTemplate) {\n return window.wideTemplate;\n }\n\n const template = document.createElement('div') as ModalContainer;\n template.classList.add('dc-doc-page', 'wide-container');\n\n const overlay = document.createElement('div');\n overlay.classList.add('wide-content-overlay');\n overlay.addEventListener('click', remove);\n\n const wrapper = document.createElement('div');\n wrapper.classList.add('yfm', 'wide-content-wrapper');\n\n const toolbar = document.createElement('div');\n toolbar.classList.add('wide-toolbar');\n\n const close = document.createElement('div');\n close.classList.add('wide-actions');\n close.addEventListener('click', remove);\n close.innerHTML = closeIcon;\n\n const title = document.createElement('p');\n title.classList.add('wide-entity-name');\n\n template.label = (content?: string) => {\n title.innerHTML = content || '';\n };\n\n const content = document.createElement('div');\n content.classList.add('wide-content');\n\n template.content = (target?: Element) => {\n if (typeof target === 'undefined') {\n content.innerHTML = '';\n\n return;\n }\n\n const cloned = target.cloneNode(true) as HTMLElement;\n\n const tbody = tbodyOf(cloned);\n\n /* used to stretch single tbody to 100% */\n tbody?.classList?.add('wide-thead-content');\n\n content.replaceChildren(cloned);\n };\n\n toolbar.append(title, close);\n wrapper.append(toolbar, content);\n template.append(overlay, wrapper);\n\n template.style.display = 'none';\n document.body.appendChild(template);\n\n window.wideTemplate = template;\n\n return template;\n};\n\nconst render = (content: HTMLElement) => {\n const template = container();\n\n template.label(content.title);\n template.content(content);\n\n template.style.display = 'flex';\n};\n\nexport const modal = {\n render,\n remove,\n};\n", "import {WIDE_ELEMENTS_SELECTOR} from './constants';\nimport expand from './icons/expand';\nimport {modal} from './modal';\n\nconst wrap = (target: HTMLElement) => {\n if (target.parentElement?.classList.contains('wide-element-wrapper')) {\n return;\n }\n\n target.classList.add('wide-inner-element');\n\n const handler = document.createElement('div');\n\n handler.innerHTML = expand;\n handler.classList.add('wide-content-viewer');\n handler.addEventListener('click', () => modal.render(target));\n\n const container = document.createElement('div');\n\n container.classList.add('wide-element-wrapper');\n\n target.before(container);\n\n container.appendChild(target);\n container.appendChild(handler);\n};\n\nexport const applyWideMode = () => {\n const allWideElements = Array.from(\n document.querySelectorAll(WIDE_ELEMENTS_SELECTOR),\n ) as HTMLElement[];\n\n allWideElements.forEach(wrap);\n};\n", "import {applyWideMode} from './apply';\n\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n window.addEventListener('load', applyWideMode);\n}\n", "import {applyWideMode} from './wide-mode/apply';\n\nconst patch = () => {\n applyWideMode();\n};\n\nif (typeof window !== 'undefined') {\n window.patchAfterRender = patch;\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", "GLOBAL_KEY", "ClassNames", "YfmCutController", "__publicField", "mouseEvent", "keepMouse", "amendMouse", "onFocus", "event", "isSummary", "disposer", "summary", "cutNode", "isDetails", "element", "TABS_CLASSNAME", "TAB_CLASSNAME", "TAB_PANEL_CLASSNAME", "TABS_LIST_CLASSNAME", "ACTIVE_CLASSNAME", "GROUP_DATA_KEY", "TAB_DATA_KEY", "TAB_DATA_VARIANT", "TAB_DATA_ID", "DEFAULT_TABS_GROUP_PREFIX", "TAB_FORCED_OPEN", "TABS_DROPDOWN_SELECT", "TABS_RADIO_CLASSNAME", "TabsVariants", "GLOBAL_SYMBOL", "getEventTarget", "path", "isCustom", "target", "getClosestScrollableParent", "getOffsetByScrollableParent", "scrollableParent", "elementBounds", "scrollableParentBounds", "Selector", "TabsController", "document", "options", "tab", "direction", "tabs", "nodes", "currentTab", "currentTabIndex", "key", "newIndex", "handler", "id", "tabsHistory", "group", "fields", "urlParams", "config", "splitConfig", "variant", "keyWithSpaces", "tabsArray", "currentState", "url", "groups", "targetTab", "previousTargetOffset", "isForced", "singleTabSelector", "updated", "elements", "i", "title", "content", "input", "htmlElem", "tabList", "tabsContainer", "allTabs", "allPanels", "targetIndex", "panel", "isTargetTab", "changed", "dropdown", "select", "menu", "changedIndex", "item", "menuItem", "accordion", "rect", "viewHeight", "targetOffset", "topDelta", "leftDelta", "scrollTopDelta", "scrollLeftDelta", "diplodocId", "align", "eventTab", "tabsRoot", "_a", "_b", "_c", "type", "tabEl", "import_get_root_node_polyfill", "__toESM", "matches", "selector", "th", "e", "copyToClipboard", "text", "textarea", "
|
|
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", "export const GLOBAL_KEY = 'yfm_cut';\n\nexport const Selector = {\n CUT: '.yfm .yfm-cut',\n TITLE: '.yfm .yfm-cut-title',\n CONTENT: '.yfm .yfm-cut-content',\n};\n", "export const ENV_FLAG_NAME = 'has-yfm-cut';\n\nexport const TokenType = {\n Cut: 'yfm_cut',\n CutOpen: 'yfm_cut_open',\n CutClose: 'yfm_cut_close',\n Title: 'yfm_cut_title',\n TitleOpen: 'yfm_cut_title_open',\n TitleClose: 'yfm_cut_title_close',\n Content: 'yfm_cut_content',\n ContentOpen: 'yfm_cut_content_open',\n ContentClose: 'yfm_cut_content_close',\n} as const;\n\nexport const ClassNames = {\n Cut: 'yfm-cut',\n Title: 'yfm-cut-title',\n Content: 'yfm-cut-content',\n Highlight: 'yfm-cut-highlight',\n} as const;\n", "import {ClassNames} from '../plugin/const';\n\nexport class YfmCutController {\n private disposers: Function[] = [];\n\n constructor() {\n this.disposers.push(this.init());\n }\n\n init() {\n let mouseEvent = false;\n const keepMouse = () => {\n mouseEvent = true;\n };\n const amendMouse = () => {\n mouseEvent = false;\n };\n const onFocus = (event: Event) => {\n if (isSummary(event.target) && !mouseEvent) {\n this.focusActiveCut(event.target);\n }\n };\n\n document.addEventListener('mousedown', keepMouse);\n document.addEventListener('mouseup', amendMouse);\n document.addEventListener('focus', onFocus, true);\n\n return () => {\n document.removeEventListener('mousedown', keepMouse);\n document.removeEventListener('mouseup', amendMouse);\n document.removeEventListener('focus', onFocus, true);\n };\n }\n\n dispose() {\n for (const disposer of this.disposers) {\n disposer();\n }\n }\n\n private focusActiveCut(summary: HTMLElement) {\n const cutNode = summary.parentNode;\n if (!isDetails(cutNode)) {\n return;\n }\n\n let node: HTMLElement | null = cutNode;\n while (node) {\n if (isDetails(node)) {\n node.open = true;\n }\n node = node.parentElement;\n }\n\n setTimeout(() => {\n cutNode.classList.add(ClassNames.Highlight);\n }, 70);\n\n setTimeout(() => {\n cutNode.classList.remove(ClassNames.Highlight);\n }, 1000);\n }\n}\n\nfunction isDetails(element: unknown): element is HTMLDetailsElement {\n return (\n (element as HTMLElement)?.tagName?.toLowerCase() === 'details' &&\n (element as HTMLElement)?.classList.contains(ClassNames.Cut)\n );\n}\n\nfunction isSummary(element: unknown): element is HTMLElement {\n return (\n (element as HTMLElement)?.tagName?.toLowerCase() === 'summary' &&\n (element as HTMLElement)?.classList.contains(ClassNames.Title)\n );\n}\n", "import {GLOBAL_KEY} from './const';\nimport {YfmCutController} from './controller';\nimport './styles/cut.scss';\n\nif (typeof window !== 'undefined' && !window[GLOBAL_KEY]) {\n window[GLOBAL_KEY] = new YfmCutController();\n}\n\ndeclare global {\n interface Window {\n [GLOBAL_KEY]: YfmCutController;\n }\n}\n", "import {type TabsController} from './runtime/TabsController';\n\nexport const TAB_RE = /`?{% list tabs .*?%}`?/;\nexport const TABS_CLASSNAME = 'yfm-tabs';\nexport const TAB_CLASSNAME = 'yfm-tab';\nexport const TAB_PANEL_CLASSNAME = 'yfm-tab-panel';\nexport const TABS_LIST_CLASSNAME = 'yfm-tab-list';\nexport const ACTIVE_CLASSNAME = 'active';\nexport const TAB_GROUP_CLASSNAME = 'yfm-tab-group';\nexport const TAB_ACTIVE_KEY = 'data-diplodoc-is-active';\nexport const GROUP_DATA_KEY = 'data-diplodoc-group';\nexport const TAB_DATA_KEY = 'data-diplodoc-key';\nexport const TAB_DATA_VARIANT = 'data-diplodoc-variant';\nexport const TAB_DATA_ID = 'data-diplodoc-id';\nexport const DEFAULT_TABS_GROUP_PREFIX = 'defaultTabsGroup-';\nexport const ACTIVE_TAB_TEXT = '{selected}';\nexport const TAB_FORCED_OPEN = 'data-diplodoc-forced';\n\nexport const TABS_DROPDOWN_CLASSNAME = 'yfm-tabs-dropdown';\nexport const TABS_DROPDOWN_MENU_CLASSNAME = 'yfm-tabs-dropdown-menu';\nexport const TABS_DROPDOWN_SELECT = 'yfm-tabs-dropdown-select';\n\nexport const TABS_ACCORDION_CLASSNAME = 'yfm-tabs-accordion';\nexport const TABS_ACCORDION_CLIENT_HEIGHT = 'data-yfm-tabs-accordion-client-heights';\n\nexport const TABS_RADIO_CLASSNAME = 'yfm-tabs-vertical';\nexport const VERTICAL_TAB_CLASSNAME = 'yfm-vertical-tab';\nexport const TAB_DATA_VERTICAL_TAB = 'data-diplodoc-vertical-tab';\nexport const TAB_RADIO_KEY = 'data-diplodoc-input';\n\nexport enum TabsVariants {\n Regular = 'regular',\n Radio = 'radio',\n Dropdown = 'dropdown',\n Accordion = 'accordion',\n}\n\nexport type EnabledVariants = Partial<Record<TabsVariants, boolean>>;\n\nexport interface Tab {\n group?: string;\n key: string;\n variant: TabsVariants;\n}\n\nexport interface SelectedTabEvent {\n tab: Tab;\n currentTabId?: string;\n}\n\nexport const GLOBAL_SYMBOL: unique symbol = Symbol.for('diplodocTabs');\n\ndeclare global {\n interface Window {\n [GLOBAL_SYMBOL]: TabsController;\n }\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 getClosestScrollableParent = (element: HTMLElement): HTMLElement | undefined => {\n if (Math.abs(element.scrollHeight - element.clientHeight) > 1) {\n return element;\n }\n\n return element.parentElement ? getClosestScrollableParent(element.parentElement) : undefined;\n};\n\nexport interface ElementOffset {\n top: number;\n left: number;\n scrollTop: number;\n scrollLeft: number;\n}\n\nexport const getOffsetByScrollableParent = (\n element: HTMLElement,\n scrollableParent: HTMLElement,\n): ElementOffset => {\n const elementBounds = element.getBoundingClientRect();\n const scrollableParentBounds = scrollableParent.getBoundingClientRect();\n return {\n top: elementBounds.top - scrollableParentBounds.top,\n left: elementBounds.left - scrollableParentBounds.left,\n scrollTop: scrollableParent.scrollTop,\n scrollLeft: scrollableParent.scrollLeft,\n };\n};\n", "import {\n ACTIVE_CLASSNAME,\n DEFAULT_TABS_GROUP_PREFIX,\n GROUP_DATA_KEY,\n SelectedTabEvent,\n TABS_CLASSNAME,\n TABS_DROPDOWN_SELECT,\n TABS_LIST_CLASSNAME,\n TABS_RADIO_CLASSNAME,\n TAB_CLASSNAME,\n TAB_DATA_ID,\n TAB_DATA_KEY,\n TAB_DATA_VARIANT,\n TAB_FORCED_OPEN,\n TAB_PANEL_CLASSNAME,\n Tab,\n TabsVariants,\n} from '../common';\n\nimport {\n ElementOffset,\n getClosestScrollableParent,\n getEventTarget,\n getOffsetByScrollableParent,\n isCustom,\n} from './utils';\n\nconst Selector = {\n TABS: `.${TABS_CLASSNAME}`,\n TAB_LIST: `.${TABS_LIST_CLASSNAME}`,\n TAB: `.${TAB_CLASSNAME}`,\n TAB_PANEL: `.${TAB_PANEL_CLASSNAME}`,\n VERTICAL_TABS: `.${TABS_RADIO_CLASSNAME}`,\n};\n\nexport interface ISelectTabByIdOptions {\n scrollToElement: boolean;\n}\n\ntype Handler = (data: SelectedTabEvent) => void;\n\ntype TabSwitchDirection = 'left' | 'right';\n\nexport type TabsHistory = Record<string, {key: string; variant: TabsVariants}>;\n\nexport type TabsControllerOptions = {\n saveTabsToLocalStorage: boolean;\n saveTabsToQueryStateMode: 'all' | 'page' | 'none';\n};\n\nexport class TabsController {\n private _document: Document;\n private _onSelectTabHandlers: Set<Handler> = new Set();\n private _options: TabsControllerOptions;\n private _currentPageTabGroups: string[] = [];\n private _isRestoringTabs = false;\n\n // TODO: remove side effects from constructor\n constructor(document: Document, options: Partial<TabsControllerOptions> = {}) {\n this._document = document;\n this._options = Object.assign(\n {\n saveTabsToLocalStorage: false,\n saveTabsToQueryStateMode: 'none',\n },\n options,\n );\n\n this._document.addEventListener('click', (event) => {\n const target = getEventTarget(event) as HTMLElement;\n\n if (event.target) {\n this.hideAllDropdown(event.target as HTMLElement);\n }\n\n if (isCustom(event)) {\n return;\n }\n\n if (this.isElementDropdownSelect(target)) {\n target.classList.toggle(ACTIVE_CLASSNAME);\n\n return;\n }\n\n if (!this.isValidTabElement(target)) {\n return;\n }\n\n const tab = this.getTabDataFromHTMLElement(target);\n\n if (tab) {\n this._selectTab(tab, target);\n }\n });\n\n this._document.addEventListener('keydown', (event) => {\n let direction: TabSwitchDirection | null = null;\n switch (event.key) {\n case 'ArrowLeft': {\n direction = 'left';\n break;\n }\n case 'ArrowRight': {\n direction = 'right';\n break;\n }\n case 'ArrowUp': {\n direction = 'left';\n break;\n }\n case 'ArrowDown': {\n direction = 'right';\n break;\n }\n }\n if (!direction) {\n return;\n }\n\n const target = getEventTarget(event) as HTMLElement;\n\n if (isCustom(event) || !this.isValidTabElement(target)) {\n return;\n }\n\n const {tabs, nodes} = this.getTabs(target);\n const currentTab = this.getTabDataFromHTMLElement(target);\n const currentTabIndex = tabs.findIndex(\n ({key}) => currentTab?.key && key === currentTab.key,\n );\n if (!currentTab || tabs.length <= 1 || currentTabIndex === -1) {\n return;\n }\n\n const newIndex =\n (currentTabIndex + (direction === 'left' ? -1 : 1) + tabs.length) % tabs.length;\n\n this.selectTab(tabs[newIndex]);\n nodes[newIndex].focus();\n });\n }\n\n configure(options: Partial<TabsControllerOptions>) {\n this._options = Object.assign(this._options, options);\n }\n\n onSelectTab(handler: Handler) {\n this._onSelectTabHandlers.add(handler);\n\n return () => {\n this._onSelectTabHandlers.delete(handler);\n };\n }\n\n selectTabById(id: string, options?: ISelectTabByIdOptions) {\n const target = this._document.querySelector(\n `${Selector.TAB}[${TAB_DATA_ID}=\"${id}\"]`,\n ) as HTMLElement;\n\n if (!target || !this.isValidTabElement(target)) {\n return;\n }\n\n const tab = this.getTabDataFromHTMLElement(target);\n\n if (tab) {\n this._selectTab(tab, target);\n }\n\n if (options?.scrollToElement) {\n target.scrollIntoView();\n }\n }\n\n selectTab(tab: Tab) {\n this._selectTab(tab);\n }\n\n restoreTabs(tabsHistory: TabsHistory) {\n this._isRestoringTabs = true;\n try {\n for (const [group, fields] of Object.entries(tabsHistory)) {\n if (group) {\n const tab = {group, ...fields};\n this.selectTab(tab);\n }\n }\n } finally {\n this._isRestoringTabs = false;\n }\n }\n\n getTabsFromLocalStorage(): TabsHistory {\n return JSON.parse(localStorage.getItem('tabsHistory') || '{}') as TabsHistory;\n }\n\n getTabsFromSearchQuery(): TabsHistory {\n const tabsHistory = {} as TabsHistory;\n const urlParams = new URLSearchParams(window.location.search);\n if (urlParams.has('tabs')) {\n const tabsFromQuery = urlParams.get('tabs') || '';\n const tabConfigs = tabsFromQuery.split(',');\n\n tabConfigs.forEach((config) => {\n const splitConfig = config.split('_');\n const [group, key] = splitConfig;\n let variant = TabsVariants.Regular;\n if (splitConfig.length === 3) {\n variant = splitConfig[2] as TabsVariants;\n }\n\n if (group && key && Object.values(TabsVariants).includes(variant)) {\n const keyWithSpaces = key;\n tabsHistory[group] = {key: keyWithSpaces, variant: variant};\n }\n });\n }\n\n return tabsHistory;\n }\n\n updateLocalStorageWithTabs(tabsHistory: TabsHistory) {\n if (!this._options.saveTabsToLocalStorage) {\n return;\n }\n\n // Don't update localStorage if we're just restoring tabs\n if (this._isRestoringTabs) {\n return;\n }\n\n localStorage.setItem('tabsHistory', JSON.stringify(tabsHistory));\n }\n\n updateQueryParamWithTabs(tabsHistory: TabsHistory) {\n // Don't update URL if we're just restoring tabs\n if (this._isRestoringTabs) {\n return;\n }\n\n const urlParams = new URLSearchParams(window.location.search);\n const tabsArray = Object.entries(tabsHistory).map(([group, {key, variant}]) => {\n if (variant === TabsVariants.Regular) {\n return `${group}_${key}`;\n }\n return `${group}_${key}_${variant}`;\n });\n\n // Clear or set tabs parameter\n if (tabsArray.length > 0) {\n urlParams.set('tabs', tabsArray.join(','));\n } else {\n urlParams.delete('tabs');\n }\n\n // Preserve existing state\n const currentState = history.state || {};\n\n // Use URL constructor for proper URL handling\n const url = new URL(window.location.href);\n url.search = urlParams.toString();\n\n window.history.replaceState({...currentState}, document.title, url.href);\n }\n\n getCurrentPageTabHistory(tabsHistory: TabsHistory) {\n return Object.fromEntries(\n Object.entries(tabsHistory).filter(([group]) =>\n this._currentPageTabGroups.includes(group),\n ),\n );\n }\n\n onPageChanged() {\n this._currentPageTabGroups = this.getCurrentPageTabGroups();\n }\n\n getCurrentPageTabGroups(): string[] {\n const tabs = this._document.getElementsByClassName(TABS_CLASSNAME);\n const groups = new Set<string>();\n\n Array.from(tabs).forEach((tab) => {\n const group = tab.getAttribute(GROUP_DATA_KEY);\n if (group) {\n groups.add(group);\n }\n });\n\n return Array.from(groups);\n }\n\n clearTabsPreferred() {\n localStorage.removeItem('tabsHistory');\n this.updateQueryParamWithTabs({});\n }\n\n private _selectTab(tab: Tab, targetTab?: HTMLElement) {\n const {group, key, variant} = tab;\n\n if (!group) {\n return;\n }\n\n this.saveTabPreferred({group, key, variant});\n\n const scrollableParent = targetTab && getClosestScrollableParent(targetTab);\n const previousTargetOffset =\n scrollableParent && getOffsetByScrollableParent(targetTab, scrollableParent);\n\n const updatedTabs = this.updateHTML({group, key, variant}, targetTab, variant);\n\n if (updatedTabs > 0) {\n this.fireSelectTabEvent({group, key, variant}, targetTab?.dataset.diplodocId);\n\n if (previousTargetOffset) {\n this.resetScroll(targetTab, scrollableParent, previousTargetOffset);\n }\n }\n }\n\n private updateHTML(tab: Required<Tab>, target: HTMLElement | undefined, variant: TabsVariants) {\n switch (variant) {\n case TabsVariants.Radio: {\n return this.updateHTMLRadio(tab, target);\n }\n case TabsVariants.Accordion: {\n return this.updateHTMLAccordion(tab, target);\n }\n case TabsVariants.Regular: {\n return this.updateHTMLRegular(tab);\n }\n case TabsVariants.Dropdown: {\n return this.updateHTMLDropdown(tab);\n }\n default: {\n return 0;\n }\n }\n }\n\n private saveTabPreferred(tab: Required<Tab>) {\n let tabsHistory = {} as TabsHistory;\n\n if (this._options.saveTabsToLocalStorage) {\n tabsHistory = JSON.parse(localStorage.getItem('tabsHistory') || '{}');\n }\n\n tabsHistory[tab.group] = {key: tab.key, variant: tab.variant};\n\n if (this._options.saveTabsToLocalStorage) {\n this.updateLocalStorageWithTabs(tabsHistory);\n }\n\n switch (this._options.saveTabsToQueryStateMode) {\n case 'all': {\n this.updateQueryParamWithTabs(tabsHistory);\n break;\n }\n case 'page': {\n this.updateQueryParamWithTabs(this.getCurrentPageTabHistory(tabsHistory));\n break;\n }\n }\n }\n\n private updateHTMLRadio(tab: Required<Tab>, target: HTMLElement | undefined) {\n const {group, key} = tab;\n\n const {isForced, root} = this.didTabOpenForce(target);\n\n const singleTabSelector = isForced ? `.yfm-vertical-tab[${TAB_FORCED_OPEN}=\"true\"]` : '';\n\n const tabs = this._document.querySelectorAll(\n `${Selector.TABS}[${GROUP_DATA_KEY}=\"${group}\"] ${Selector.TAB}[${TAB_DATA_KEY}=\"${key}\"]${singleTabSelector}`,\n );\n\n if (isForced) {\n root?.removeAttribute(TAB_FORCED_OPEN);\n }\n\n let updated = 0;\n\n tabs.forEach((tab) => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const root = tab.parentNode!;\n const elements = root.children;\n\n for (let i = 0; i < elements.length; i += 2) {\n const [title, content] = [elements.item(i), elements.item(i + 1)] as HTMLElement[];\n\n const input = title.children.item(0) as HTMLInputElement;\n\n if (title === tab) {\n const checked = input.checked;\n\n if (checked) {\n title.classList.remove('active');\n content?.classList.remove('active');\n\n input.removeAttribute('checked');\n } else {\n title.classList.add('active');\n content?.classList.add('active');\n\n input.setAttribute('checked', 'true');\n }\n\n continue;\n }\n\n if (input.hasAttribute('checked')) {\n title.classList.remove('active');\n content?.classList.remove('active');\n\n input.removeAttribute('checked');\n }\n\n updated++;\n }\n });\n\n return updated;\n }\n\n private updateHTMLRegular(tab: Required<Tab>) {\n const {group, key} = tab;\n\n const tabs = this._document.querySelectorAll(\n `${Selector.TABS}[${GROUP_DATA_KEY}=\"${group}\"] ${Selector.TAB}[${TAB_DATA_KEY}=\"${key}\"]`,\n );\n\n let updated = 0;\n\n tabs.forEach((element) => {\n const htmlElem = element as HTMLElement;\n if (!this.isValidTabElement(htmlElem) || htmlElem.dataset.diplodocIsActive === 'true') {\n return;\n }\n\n updated++;\n\n const tab = element;\n const tabList = tab.parentNode;\n const tabsContainer = tabList?.parentNode;\n const allTabs = Array.from(tabList?.querySelectorAll(Selector.TAB) || []);\n const allPanels = Array.from(tabsContainer?.children || []).filter((node) =>\n node.classList.contains(TAB_PANEL_CLASSNAME),\n );\n const targetIndex = allTabs.indexOf(tab);\n\n allTabs.forEach((tab, i) => {\n const panel = allPanels[i];\n const isTargetTab = i === targetIndex;\n const htmlElem = tab as HTMLElement;\n\n htmlElem.dataset.diplodocIsActive = isTargetTab ? 'true' : 'false';\n\n tab.classList.toggle(ACTIVE_CLASSNAME, isTargetTab);\n tab.setAttribute('aria-selected', isTargetTab.toString());\n tab.setAttribute('tabindex', isTargetTab ? '0' : '-1');\n panel.classList.toggle(ACTIVE_CLASSNAME, isTargetTab);\n });\n });\n\n return updated;\n }\n\n private updateHTMLDropdown(tab: Required<Tab>) {\n const {group, key} = tab;\n\n const tabs = this._document.querySelectorAll(\n `${Selector.TABS}[${GROUP_DATA_KEY}=\"${group}\"] ${Selector.TAB}[${TAB_DATA_KEY}=\"${key}\"]`,\n );\n\n let changed = 0;\n\n tabs.forEach((tab) => {\n const dropdown = tab.closest(`[${TAB_DATA_VARIANT}=${TabsVariants.Dropdown}]`);\n\n if (!dropdown?.children) {\n return;\n }\n\n const select = dropdown.children.item(0) as HTMLElement;\n const menu = dropdown.children.item(1);\n\n select?.classList.remove(ACTIVE_CLASSNAME);\n\n /* first and second elements are select / menu, skipping them */\n const changedIndex = Array.from(menu?.children || []).indexOf(tab) + 2;\n\n for (let i = 2; i < dropdown.children.length; i++) {\n const item = dropdown.children.item(i) as HTMLElement;\n const menuItem = menu?.children.item(i - 2) as HTMLElement;\n\n changed++;\n\n if (changedIndex === i) {\n item?.classList.add(ACTIVE_CLASSNAME);\n menuItem.classList.add(ACTIVE_CLASSNAME);\n\n select.innerHTML = tab.innerHTML;\n select.classList.add('filled');\n\n continue;\n }\n\n menuItem.classList.remove(ACTIVE_CLASSNAME);\n item.classList.remove(ACTIVE_CLASSNAME);\n }\n });\n\n return changed;\n }\n\n private updateHTMLAccordion(tab: Required<Tab>, target: HTMLElement | undefined) {\n const {group, key} = tab;\n\n const tabs = this._document.querySelectorAll(\n `${Selector.TABS}[${GROUP_DATA_KEY}=\"${group}\"] ${Selector.TAB}[${TAB_DATA_KEY}=\"${key}\"]`,\n );\n\n let changed = 0;\n\n tabs.forEach((tab) => {\n const accordion = tab.closest(`[${TAB_DATA_VARIANT}=${TabsVariants.Accordion}]`);\n\n if (!accordion?.children) {\n return;\n }\n\n for (let i = 0; i < accordion.children.length; i += 2) {\n const title = accordion.children.item(i);\n const currentTab = accordion.children.item(i + 1);\n\n changed++;\n\n if (tab === title) {\n title?.classList.toggle(ACTIVE_CLASSNAME);\n currentTab?.classList.toggle(ACTIVE_CLASSNAME);\n\n continue;\n }\n\n title?.classList.remove(ACTIVE_CLASSNAME);\n currentTab?.classList.remove(ACTIVE_CLASSNAME);\n }\n });\n\n if (target && !this.checkVisible(target)) {\n setTimeout(() => {\n target.scrollIntoView({block: 'nearest'});\n });\n }\n\n return changed;\n }\n\n private checkVisible(element: HTMLElement) {\n const rect = element.getBoundingClientRect();\n const viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);\n\n return !(rect.bottom < 0 || rect.top - viewHeight >= 0);\n }\n\n private hideAllDropdown(target: HTMLElement) {\n const dropdowns = this._document.querySelectorAll('.yfm-tabs-dropdown-select.active');\n\n dropdowns.forEach((menu) => {\n if (!menu.contains(target)) {\n menu.classList.remove(ACTIVE_CLASSNAME);\n }\n });\n }\n\n private resetScroll(\n target: HTMLElement,\n scrollableParent: HTMLElement,\n previousTargetOffset: ElementOffset,\n ) {\n const targetOffset = getOffsetByScrollableParent(target, scrollableParent);\n const topDelta = targetOffset.top - previousTargetOffset.top;\n const leftDelta = targetOffset.left - previousTargetOffset.left;\n const scrollTopDelta = targetOffset.scrollTop - previousTargetOffset.scrollTop;\n const scrollLeftDelta = targetOffset.scrollLeft - previousTargetOffset.scrollLeft;\n scrollableParent.scrollTo(\n scrollableParent.scrollLeft + leftDelta - scrollLeftDelta,\n scrollableParent.scrollTop + topDelta - scrollTopDelta,\n );\n }\n\n private didTabOpenForce(target?: HTMLElement) {\n if (!target) {\n return {};\n }\n\n if (target.dataset.diplodocForced) {\n return {root: target, isForced: true};\n }\n\n const root = target.dataset.diplodocVerticalTab ? target : target.parentElement;\n\n const isForced = typeof root?.dataset.diplodocForced !== 'undefined';\n\n return {root, isForced};\n }\n\n private fireSelectTabEvent(tab: Required<Tab>, diplodocId?: string) {\n const {group, key, variant: align} = tab;\n\n const eventTab: Tab = group.startsWith(DEFAULT_TABS_GROUP_PREFIX)\n ? {key, variant: align}\n : tab;\n\n this._onSelectTabHandlers.forEach((handler) => {\n handler({tab: eventTab, currentTabId: diplodocId});\n });\n }\n\n private getTabsType(element: HTMLElement) {\n const tabsRoot = element.closest(`[${TAB_DATA_VARIANT}]`) as HTMLElement | undefined;\n\n if (!tabsRoot) {\n return undefined;\n }\n\n return tabsRoot.dataset.diplodocVariant;\n }\n\n private isValidTabElement(element: HTMLElement) {\n return Boolean(this.getTabsType(element));\n }\n\n private isElementDropdownSelect(target: HTMLElement) {\n return target.classList.contains(TABS_DROPDOWN_SELECT);\n }\n\n private getTabDataFromHTMLElement(target: HTMLElement): Tab | null {\n const type = this.getTabsType(target);\n\n if (type === TabsVariants.Radio) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const tab = target.dataset.diplodocVerticalTab ? target : target.parentElement!;\n\n const key = tab.dataset.diplodocKey;\n const group = (tab.closest(Selector.TABS) as HTMLElement)?.dataset.diplodocGroup;\n return key && group ? {group, key, variant: TabsVariants.Radio} : null;\n }\n\n if (type === TabsVariants.Dropdown || type === TabsVariants.Accordion) {\n const key = target.dataset.diplodocKey;\n const group = (target.closest(Selector.TABS) as HTMLElement)?.dataset.diplodocGroup;\n return key && group ? {group, key, variant: type} : null;\n }\n\n const key = target.dataset.diplodocKey;\n const group = (target.closest(Selector.TABS) as HTMLElement)?.dataset.diplodocGroup;\n return key && group ? {group, key, variant: TabsVariants.Regular} : null;\n }\n\n private getTabs(target: HTMLElement): {tabs: Tab[]; nodes: NodeListOf<HTMLElement>} {\n const group = (target.closest(Selector.TABS) as HTMLElement)?.dataset.diplodocGroup;\n const nodes = (\n target.closest(Selector.TAB_LIST) as HTMLElement\n )?.querySelectorAll<HTMLElement>(Selector.TAB);\n\n const tabs: Tab[] = [];\n nodes.forEach((tabEl) => {\n const key = tabEl?.dataset.diplodocKey;\n if (!key) {\n return;\n }\n\n /** horizontal-only supported feature (used in left/right button click) */\n tabs.push({\n group,\n key,\n variant: TabsVariants.Regular,\n });\n });\n\n return {tabs, nodes};\n }\n}\n", "import {GLOBAL_SYMBOL} from '../common';\n\nimport {TabsController} from './TabsController';\nimport './scss/tabs.scss';\n\nif (typeof window !== 'undefined' && typeof document !== 'undefined' && !window[GLOBAL_SYMBOL]) {\n window[GLOBAL_SYMBOL] = new TabsController(document);\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 COPY_BUTTON_SELECTOR = '.yfm-clipboard-button';\nconst WRAP_BUTTON_SELECTOR = '.yfm-wrapping-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 container = target.parentNode?.parentNode;\n const code = container?.querySelector<HTMLElement>('pre code');\n if (!container || !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.trim()).then(() => {\n notifySuccess(container.querySelector('.yfm-clipboard-icon'));\n\n setTimeout(() => target.blur(), 1500);\n });\n}\n\nfunction buttonWrapFn(target: HTMLElement) {\n const container = target.parentNode?.parentNode;\n const code = container?.querySelector<HTMLElement>('pre code');\n if (!container || !code) {\n return;\n }\n\n code.classList.toggle('wrap');\n\n setTimeout(() => target.blur(), 500);\n}\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n if (isCustom(event)) {\n return;\n }\n\n const target = getEventTarget(event) as HTMLElement;\n\n if (target.matches(COPY_BUTTON_SELECTOR)) {\n buttonCopyFn(target);\n } else if (target.matches(WRAP_BUTTON_SELECTOR)) {\n buttonWrapFn(target);\n }\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", "import {getEventTarget, isCustom} from '../utils';\n\nimport {\n closeDefinition,\n getTermByDefinition,\n openClass,\n openDefinition,\n openDefinitionClass,\n setDefinitionPosition,\n} from './utils';\n\nif (typeof document !== 'undefined') {\n document.addEventListener('click', (event) => {\n if (getEventTarget(event) || !isCustom(event)) {\n openDefinition(getEventTarget(event) as HTMLElement);\n }\n });\n\n document.addEventListener('keydown', (event) => {\n const openedDefinition = document.getElementsByClassName(\n openDefinitionClass,\n )[0] as HTMLElement;\n\n if (event.key === 'Enter' && document.activeElement) {\n openDefinition(document.activeElement as HTMLElement);\n }\n\n if (event.key === 'Escape' && openedDefinition) {\n closeDefinition(openedDefinition);\n getTermByDefinition(openedDefinition)?.focus(); // Set focus back to open button after closing popup\n }\n });\n\n window.addEventListener('resize', () => {\n const openedDefinition = document.getElementsByClassName(\n openDefinitionClass,\n )[0] as HTMLElement;\n\n if (!openedDefinition) {\n return;\n }\n\n const termId = openedDefinition.getAttribute('term-id') || '';\n const termElement = document.getElementById(termId);\n\n if (!termElement) {\n openedDefinition.classList.toggle(openClass);\n return;\n }\n\n setDefinitionPosition(openedDefinition, termElement);\n });\n}\n", "export const WIDE_ELEMENTS_SELECTOR = '[wide-content]';\n", "export default `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\" viewBox=\"0 0 16 16\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M7.754 2.004a.75.75 0 0 0 0 1.5h4.75v4.742a.75.75 0 0 0 1.5 0V2.754a.75.75 0 0 0-.75-.75zm.492 11.992a.75.75 0 0 0 0-1.5h-4.75V7.754a.75.75 0 0 0-1.5 0v5.492a.75.75 0 0 0 .75.75z\" clip-rule=\"evenodd\"/></svg>`;\n", "export default `<svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"close-action\"><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M9.46967 9.46967C9.76256 9.17678 10.2374 9.17678 10.5303 9.46967L14 12.9393L17.4697 9.46967C17.7626 9.17678 18.2374 9.17678 18.5303 9.46967C18.8232 9.76256 18.8232 10.2374 18.5303 10.5303L15.0607 14L18.5303 17.4697C18.8232 17.7626 18.8232 18.2374 18.5303 18.5303C18.2374 18.8232 17.7626 18.8232 17.4697 18.5303L14 15.0607L10.5303 18.5303C10.2374 18.8232 9.76256 18.8232 9.46967 18.5303C9.17678 18.2374 9.17678 17.7626 9.46967 17.4697L12.9393 14L9.46967 10.5303C9.17678 10.2374 9.17678 9.76256 9.46967 9.46967Z\" fill=\"var(--g-color-text-primary)\" fillOpacity=\"0.85\"/></svg>`;\n", "import closeIcon from './icons/close';\n\nconst remove = () => {\n if (!window.wideTemplate) {\n return;\n }\n\n window.wideTemplate.style.display = 'none';\n window.wideTemplate.content(undefined);\n};\n\nconst tbodyOf = (node: HTMLElement) => {\n if (node.tagName !== 'TABLE') {\n return undefined;\n }\n\n const elements = Array.from(node.children);\n\n const thead = elements.find((child) => child.tagName === 'THEAD');\n\n if (thead) {\n return undefined;\n }\n\n const tbody = elements.find((child) => child.tagName === 'TBODY');\n\n return tbody;\n};\n\ntype ModalContainer = NonNullable<typeof window.wideTemplate>;\n\n/* @todo refactor to markup with innerHTML @v8tenko */\n\nconst container = () => {\n if (window.wideTemplate) {\n return window.wideTemplate;\n }\n\n const template = document.createElement('div') as ModalContainer;\n template.classList.add('dc-doc-page', 'wide-container');\n\n const overlay = document.createElement('div');\n overlay.classList.add('wide-content-overlay');\n overlay.addEventListener('click', remove);\n\n const wrapper = document.createElement('div');\n wrapper.classList.add('yfm', 'wide-content-wrapper');\n\n const toolbar = document.createElement('div');\n toolbar.classList.add('wide-toolbar');\n\n const close = document.createElement('div');\n close.classList.add('wide-actions');\n close.addEventListener('click', remove);\n close.innerHTML = closeIcon;\n\n const title = document.createElement('p');\n title.classList.add('wide-entity-name');\n\n template.label = (content?: string) => {\n title.innerHTML = content || '';\n };\n\n const content = document.createElement('div');\n content.classList.add('wide-content');\n\n template.content = (target?: Element) => {\n if (typeof target === 'undefined') {\n content.innerHTML = '';\n\n return;\n }\n\n const cloned = target.cloneNode(true) as HTMLElement;\n\n const tbody = tbodyOf(cloned);\n\n /* used to stretch single tbody to 100% */\n tbody?.classList?.add('wide-thead-content');\n\n content.replaceChildren(cloned);\n };\n\n toolbar.append(title, close);\n wrapper.append(toolbar, content);\n template.append(overlay, wrapper);\n\n template.style.display = 'none';\n document.body.appendChild(template);\n\n window.wideTemplate = template;\n\n return template;\n};\n\nconst render = (content: HTMLElement) => {\n const template = container();\n\n template.label(content.title);\n template.content(content);\n\n template.style.display = 'flex';\n};\n\nexport const modal = {\n render,\n remove,\n};\n", "import {WIDE_ELEMENTS_SELECTOR} from './constants';\nimport expand from './icons/expand';\nimport {modal} from './modal';\n\nconst wrap = (target: HTMLElement) => {\n if (target.parentElement?.classList.contains('wide-element-wrapper')) {\n return;\n }\n\n target.classList.add('wide-inner-element');\n\n const handler = document.createElement('div');\n\n handler.innerHTML = expand;\n handler.classList.add('wide-content-viewer');\n handler.addEventListener('click', () => modal.render(target));\n\n const container = document.createElement('div');\n\n container.classList.add('wide-element-wrapper');\n\n target.before(container);\n\n container.appendChild(target);\n container.appendChild(handler);\n};\n\nexport const applyWideMode = () => {\n const allWideElements = Array.from(\n document.querySelectorAll(WIDE_ELEMENTS_SELECTOR),\n ) as HTMLElement[];\n\n allWideElements.forEach(wrap);\n};\n", "import {applyWideMode} from './apply';\n\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n window.addEventListener('load', applyWideMode);\n}\n", "import {applyWideMode} from './wide-mode/apply';\n\nconst patch = () => {\n applyWideMode();\n};\n\nif (typeof window !== 'undefined') {\n window.patchAfterRender = patch;\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", "GLOBAL_KEY", "ClassNames", "YfmCutController", "__publicField", "mouseEvent", "keepMouse", "amendMouse", "onFocus", "event", "isSummary", "disposer", "summary", "cutNode", "isDetails", "element", "TABS_CLASSNAME", "TAB_CLASSNAME", "TAB_PANEL_CLASSNAME", "TABS_LIST_CLASSNAME", "ACTIVE_CLASSNAME", "GROUP_DATA_KEY", "TAB_DATA_KEY", "TAB_DATA_VARIANT", "TAB_DATA_ID", "DEFAULT_TABS_GROUP_PREFIX", "TAB_FORCED_OPEN", "TABS_DROPDOWN_SELECT", "TABS_RADIO_CLASSNAME", "TabsVariants", "GLOBAL_SYMBOL", "getEventTarget", "path", "isCustom", "target", "getClosestScrollableParent", "getOffsetByScrollableParent", "scrollableParent", "elementBounds", "scrollableParentBounds", "Selector", "TabsController", "document", "options", "tab", "direction", "tabs", "nodes", "currentTab", "currentTabIndex", "key", "newIndex", "handler", "id", "tabsHistory", "group", "fields", "urlParams", "config", "splitConfig", "variant", "keyWithSpaces", "tabsArray", "currentState", "url", "groups", "targetTab", "previousTargetOffset", "isForced", "singleTabSelector", "updated", "elements", "i", "title", "content", "input", "htmlElem", "tabList", "tabsContainer", "allTabs", "allPanels", "targetIndex", "panel", "isTargetTab", "changed", "dropdown", "select", "menu", "changedIndex", "item", "menuItem", "accordion", "rect", "viewHeight", "targetOffset", "topDelta", "leftDelta", "scrollTopDelta", "scrollLeftDelta", "diplodocId", "align", "eventTab", "tabsRoot", "_a", "_b", "_c", "type", "tabEl", "import_get_root_node_polyfill", "__toESM", "matches", "selector", "th", "e", "copyToClipboard", "text", "textarea", "COPY_BUTTON_SELECTOR", "WRAP_BUTTON_SELECTOR", "notifySuccess", "svgButton", "icon", "buttonCopyFn", "container", "code", "textContent", "buttonWrapFn", "ANCHOR_BUTTON_SELECTOR", "href", "link", "INLINE_CODE", "INLINE_CODE_ID", "INLINE_CODE_CLASS", "OPEN_CLASS", "LANG_TOKEN", "openClass", "openDefinitionClass", "isListenerNeeded", "setDefinitionId", "definitionElement", "termElement", "termId", "setDefinitonAriaAttributes", "ariaLive", "setDefinitionPosition", "termX", "termY", "termRight", "termLeft", "termWidth", "termHeight", "termParent", "termParentElement", "termParentRight", "termParentLeft", "closeDefinition", "termOnResize", "relativeX", "relativeY", "offsetTop", "definitionParent", "definitionWidth", "definitionParentLeft", "definitionLeftCoordinate", "getCoords", "definitionRightCoordinate", "definitionOutOfScreenOnLeft", "definitionOutOfScreenOnRight", "fitDefinitionDocument", "customHeaderTop", "shiftLeft", "offsetLeft", "isShiftLeftNeeded", "openedDefinition", "term", "openDefinition", "termKey", "isTargetDefinitionContent", "trapFocus", "definition", "getTermByDefinition", "elem", "box", "body", "docEl", "scrollTop", "scrollLeft", "clientTop", "clientLeft", "top", "left", "focusableElements", "firstFocusableElement", "lastFocusableElement", "timer", "getTooltipElement", "setTooltipAriaAttributes", "tooltipElement", "targetElement", "checkTimerAndClear", "tooltipParentElement", "tooltipOnResize", "inlineId", "setTooltipPosition", "inlineX", "inlineY", "inlineRight", "inlineLeft", "inlineWidth", "inlineHeight", "tooltipParent", "tooltipParentRight", "tooltipParentLeft", "closeTooltip", "getInlineCodeByTooltip", "closeTooltipFn", "inline", "inlineCodepParent", "createTooltip", "tooltip", "pageContent", "lang", "tooltipText", "host", "openTooltip", "tooltipWorker", "inlineCopyFn", "innerText", "activeElement", "classInlineCode", "inlineTooltip", "inlineCodeElement", "WIDE_ELEMENTS_SELECTOR", "expand_default", "close_default", "remove", "tbodyOf", "child", "template", "overlay", "wrapper", "toolbar", "close", "cloned", "tbody", "render", "modal", "wrap", "applyWideMode", "patch"]
|
|
7
7
|
}
|
package/dist/scss/_code.scss
CHANGED
|
@@ -1,14 +1,23 @@
|
|
|
1
1
|
.yfm {
|
|
2
|
-
&-
|
|
2
|
+
&-code-floating-container {
|
|
3
3
|
position: relative;
|
|
4
4
|
|
|
5
|
-
.yfm-
|
|
5
|
+
.yfm-code-button {
|
|
6
6
|
min-width: 20px;
|
|
7
7
|
min-height: 20px;
|
|
8
|
+
flex-shrink: 0;
|
|
9
|
+
|
|
10
|
+
//reset default button style
|
|
11
|
+
background: none;
|
|
12
|
+
color: inherit;
|
|
13
|
+
border: none;
|
|
14
|
+
padding: 0;
|
|
15
|
+
font: inherit;
|
|
16
|
+
cursor: pointer;
|
|
8
17
|
}
|
|
9
18
|
|
|
10
19
|
&:hover {
|
|
11
|
-
.yfm-
|
|
20
|
+
.yfm-code-floating {
|
|
12
21
|
opacity: 1;
|
|
13
22
|
}
|
|
14
23
|
}
|
|
@@ -16,42 +25,50 @@
|
|
|
16
25
|
& > pre {
|
|
17
26
|
border-radius: 10px;
|
|
18
27
|
overflow: hidden;
|
|
28
|
+
|
|
29
|
+
// codeblock has line-wrapping and line-numbers
|
|
30
|
+
code:has(> .yfm-line) {
|
|
31
|
+
display: grid;
|
|
32
|
+
grid-template-columns: auto 1fr;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
code.wrap {
|
|
36
|
+
white-space: pre-wrap;
|
|
37
|
+
}
|
|
19
38
|
}
|
|
20
39
|
|
|
21
|
-
|
|
40
|
+
.yfm-code-floating {
|
|
22
41
|
position: absolute;
|
|
23
42
|
top: 16px;
|
|
24
43
|
right: 16px;
|
|
25
44
|
z-index: 1;
|
|
45
|
+
|
|
26
46
|
opacity: 0;
|
|
27
47
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
border: none;
|
|
32
|
-
padding: 0;
|
|
33
|
-
font: inherit;
|
|
34
|
-
cursor: pointer;
|
|
48
|
+
display: flex;
|
|
49
|
+
flex-wrap: nowrap;
|
|
50
|
+
gap: 4px;
|
|
35
51
|
|
|
36
|
-
&:focus
|
|
52
|
+
&:focus,
|
|
53
|
+
&:has(> .yfm-code-button:focus) {
|
|
37
54
|
opacity: 1;
|
|
38
55
|
}
|
|
39
56
|
}
|
|
40
57
|
|
|
41
|
-
|
|
58
|
+
.yfm-code-icon {
|
|
42
59
|
pointer-events: none;
|
|
43
60
|
}
|
|
61
|
+
}
|
|
44
62
|
|
|
45
|
-
|
|
46
|
-
|
|
63
|
+
&-clipboard-inline-code {
|
|
64
|
+
transition: 0.3s;
|
|
47
65
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
66
|
+
&:hover {
|
|
67
|
+
cursor: pointer;
|
|
68
|
+
background-color: var(
|
|
69
|
+
--yfm-color-code-hovered-background,
|
|
70
|
+
var(--yfm-color-code-background-hovered-private)
|
|
71
|
+
);
|
|
55
72
|
}
|
|
56
73
|
}
|
|
57
74
|
}
|
package/dist/scss/_common.scss
CHANGED
|
@@ -276,9 +276,9 @@
|
|
|
276
276
|
|
|
277
277
|
hr {
|
|
278
278
|
box-sizing: content-box;
|
|
279
|
-
height: 0.25em;
|
|
279
|
+
height: var(--yfm-hr-height, 0.25em);
|
|
280
280
|
padding: 0;
|
|
281
|
-
margin: 1.5em 0;
|
|
281
|
+
margin: var(--yfm-hr-margin, 1.5em 0);
|
|
282
282
|
overflow: hidden;
|
|
283
283
|
|
|
284
284
|
background-color: var(--yfm-color-border, var(--yfm-color-border-private));
|
package/lib/plugins/code.d.ts
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
import type { MarkdownItPluginCb } from './typings';
|
|
2
|
-
|
|
2
|
+
type CodeOptions = {
|
|
3
|
+
/**
|
|
4
|
+
* Show button to toggle line wrapping of code.
|
|
5
|
+
* @type {boolean}
|
|
6
|
+
* @default false
|
|
7
|
+
*/
|
|
8
|
+
codeLineWrapping?: boolean;
|
|
9
|
+
};
|
|
10
|
+
declare const code: MarkdownItPluginCb<CodeOptions>;
|
|
3
11
|
export = code;
|